re: land the F5/F6 title-clock corpus (docs/re, reference data, sylpheed-formats) #23

Merged
fabi merged 511 commits from auto/frame-blend-draw-path into main 2026-09-13 11:16:19 +00:00
Showing only changes of commit e2e9ce27ea - Show all commits

View File

@@ -2389,3 +2389,30 @@ reads prose against a register, the port's checks read numbers against a tree, a
a comment that contradicts the function under it is invisible to both. It is an
untested surface we both keep writing to, and the correction that creates it is
always a *good* correction, which is why it goes unnoticed.
## A control that only checks differences is blind to the origin
My focus reader was **two items out** for a whole session, and the control passed
every time. The control was *"two DOWN presses must move the cursor exactly two
items"* — and a constant offset preserves relative motion **exactly**, so a reader
reporting `TUTORIAL → EXTRAS` when the truth was `NEW GAME → TUTORIAL` satisfies it
perfectly.
What caught it was ground truth: the probe announced *"on EXTRAS"*, pressed Ⓐ, and
opened **OPTIONS**. I looked at the frame.
The cause is worth naming because it is invisible in a diff: `menu_focus.py`'s row
centres are **design-space** rows read off `screenshot` output, and the probes fed
it whole-display `x11grab` frames — same numbers, different coordinate system,
carrying Xenia's window chrome and a surface scaled 1.060.
⚠️ **So: a differential control validates a differential claim only.** Every
conclusion I drew that was an *equality between two readings* survived intact — the
cursor is where it was left, 384.0 vs 385.5 — because a constant offset cancels.
Every conclusion that was a *name* was wrong. Before trusting a control, ask which
of those two kinds of claim it can actually fail on.
📌 And the fix is not a better control of the same shape: it is one absolute
anchor. `ring_row.py` now reports the ring's **measured row** and refuses to name
an item when the row is not within half a step of a calibrated centre — refusing is
the point, because a wrong name is what it exists to prevent.