diff --git a/docs/port/DECISIONS.md b/docs/port/DECISIONS.md index f3920e7a..907ce569 100644 --- a/docs/port/DECISIONS.md +++ b/docs/port/DECISIONS.md @@ -9,7 +9,7 @@ dies, which is what this file is for. -214 sections. Search this before re-deriving anything. +215 sections. Search this before re-deriving anything. * [P0 — the exporter, 2026-08-28](#p0--the-exporter-2026-08-28) * [P1 — Godot draws the screen, 2026-08-28](#p1--godot-draws-the-screen-2026-08-28) @@ -225,6 +225,7 @@ dies, which is what this file is for. * [Auditing headings — and my own index was amplifying the withdrawn ones](#auditing-headings--and-my-own-index-was-amplifying-the-withdrawn-ones) * [Ranking instructions above descriptions — swept, and the worst class is clean](#ranking-instructions-above-descriptions--swept-and-the-worst-class-is-clean) * [Live-but-undocumented flags — and I wrote a dead instruction while fixing dead instructions](#live-but-undocumented-flags--and-i-wrote-a-dead-instruction-while-fixing-dead-instructions) +* [Their `XPR_*` lead traced and closed — and their class found in my own lane](#their-xpr_-lead-traced-and-closed--and-their-class-found-in-my-own-lane) ## P0 — the exporter, 2026-08-28 @@ -11312,3 +11313,47 @@ that establishes it. costs a reader's belief; **an instruction I get wrong hands them a null result that looks like a finding** — here, "`--no-hold` changes nothing", which is false and would have been reproducible. + +## Their `XPR_*` lead traced and closed — and their class found in my own lane + +They flagged five `XPR_*` texture-decode toggles as relevant *"since you consume +textures"*, and my off-edge splash residual — non-tonal, ~0.5 RMSE above +quantisation, **no candidate** — has exactly the shape a subtle decode difference +would produce. So it was worth tracing rather than filing. + +🔴 **Closed: they cannot reach my sprites.** The toggles live in +`texture.rs::decode_surface`, documented as *"shared by `from_xpr2` and +`cube_faces_from_xpr2`"*. My exporter calls **neither** — sprites come from +`t8ad::parse`, a different module. And `t8ad.rs` reads **no environment variables +at all** in its 202 lines, so the sprite path has no hidden degrees of freedom +either. **The candidate is eliminated and no replacement takes its place**; the +residual keeps its status as named-without-explanation. + +### And a live undocumented remedy in my own lane, which I had called clean + +Enumerating what my exporter can reach turned up `SYLPHEED_KF_TIME_SHIFT` — the +variable they reported as *"removed with the record-layout fix, appears nowhere in +`crates/`"*. ⚠️ **True on their branch, false on mine**: my `ui_layout.rs` is the +stale era, and the knob is live at line 497. Not a contradiction — a branch +difference, and my `Cargo.toml:66` already records it. + +✅ **The pinned tag has 0 occurrences of it** (and 2 of `SYLPHEED_KF_TIME_LEGACY`), +so it cannot perturb `export/`. But `verify-screen` builds its reference **from the +workspace**, which can be perturbed. + +Tested both directions rather than reasoned: + +| | reference reports | era guard | +|---|---|---| +| `SYLPHEED_KF_TIME_SHIFT=1` | `rest t=12` — the **corrected** reading | **passes**, eras agree | +| unset | `rest t=70` — stale | **refuses** | + +📌 So the knob is not a debug curiosity: **it is the working remedy that makes a +workspace-built reference usable**, and it appeared in no tool, no help text and +no instruction anywhere in my tree. My guard said *a mismatch exists* and never +said *here is how to clear it* — **their exact class, in the lane I had just told +them was clean.** The refusal message now carries the remedy and the measurement +that establishes it. + +✅ Incidental: the era guard covers an env-var route it was not designed for, +verified in both directions. diff --git a/tools/port/verify-screen b/tools/port/verify-screen index e670913a..fe224913 100755 --- a/tools/port/verify-screen +++ b/tools/port/verify-screen @@ -172,6 +172,13 @@ if [ -n "$ref_rest" ] && [ "$ref_rest" != "$exp_rest" ]; then echo " reference $CLI says pteff00 rest t=$ref_rest" >&2 echo " export/ (built by the pinned exporter) says rest t=$exp_rest" >&2 echo " Every row below would compare two decoder eras. Refusing." >&2 + echo "" >&2 + echo " REMEDY, verified both directions 2026-08-30: this workspace's" >&2 + echo " ui_layout.rs is the STALE era and still carries the retired" >&2 + echo " SYLPHEED_KF_TIME_SHIFT knob, which converts it to the corrected" >&2 + echo " reading. Re-run with SYLPHEED_KF_TIME_SHIFT=1 and the reference" >&2 + echo " reports rest t=12, matching the pinned exporter; without it, t=70." >&2 + echo " The knob is absent from the pinned tag, so it cannot affect export/." >&2 exit 2 fi mkdir -p "$OUT"