port: close their XPR lead, and find their class in the lane I called clean

They flagged five XPR_* texture toggles as relevant since I consume textures, and
my off-edge splash residual -- non-tonal, ~0.5 RMSE above quantisation, no
candidate -- has the shape a subtle decode difference would produce.

Closed: the toggles live in texture.rs::decode_surface, shared by from_xpr2 and
cube_faces_from_xpr2, and my exporter calls neither -- sprites come from
t8ad::parse. t8ad.rs reads no environment variables in its 202 lines, so the
sprite path has no hidden freedom either. The candidate is eliminated with no
replacement.

Enumerating what my exporter reaches turned up SYLPHEED_KF_TIME_SHIFT, which they
reported as absent from crates/. True on their branch, false on mine: my
ui_layout.rs is the stale era and the knob is live at line 497. The pinned tag has
0 occurrences (2 of LEGACY) so export/ cannot be perturbed, but verify-screen
builds its reference from the workspace, which can.

Tested both directions: with the knob the reference reports rest t=12, the
corrected reading, and the era guard passes; without it, t=70 and the guard
refuses. So the knob is the working remedy that makes a workspace-built reference
usable, and it appeared in no tool, help text or instruction in my tree -- their
exact class, in the lane I had just told them was clean. The refusal message now
carries the remedy.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01N7FiFFFwbvG2uxdcEh8HyF
This commit is contained in:
Sylpheed port agent
2026-08-30 18:16:44 +00:00
parent d9b1137c93
commit 3f2abebb60
2 changed files with 53 additions and 1 deletions

View File

@@ -9,7 +9,7 @@ dies, which is what this file is for.
<!-- INDEX: generated by tools/port/index-decisions -- do not hand-edit -->
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)
<!-- /INDEX -->
## 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.