Files
Sylpheed/docs/re/menu-idle-and-b-2026-08-29.md
sylph-decoder 9a10258738 re: the main menu has no idle self-return -- and four of my own durations were a backlog
Two results and one retraction, all from the same session.

REFUTED: 'an ~8-10 s idle returns to the title' does not apply to the main menu.
Held untouched it stayed put for >= 60 s, correlation never leaving
0.9245-0.9249. That timer is real but belongs to the TITLE. It was the only
reason 'B leaves the main menu' was classed as authored, so Q5's B rule is
upgraded to measured-ordering: B is delivered (canary logs vk=5801) and is the
only input in >= 100 s before the return.

The PRESS (A) plate: the boot title presents build 4 WITHOUT the plate first --
green-glyph 154, against 159 on the committed no-plate capture and 753/977/1493
on plate titles -- and the plate arrives after. That is the port's third option.

RETRACTED: four durations taken the same day. classify_array costs 1503 ms per
frame; running it per frame against an 8 fps x11grab drained the pipe at
0.64 fps, so every classified frame was stale and increasingly so. It
manufactured 'plate 24.66 s after the title art', 'B->title 15.58 s', 'B->title
25.60 s' and 'A->menu 20.26 s'. The tell: a transition, a press and a fade do
not share a duration, and the two B figures GREW across a longer run.

A backlog preserves ordering and destroys durations, which is why the sequence
results above stand and every timing does not. The ring's period is unaffected
and that was checked, not assumed -- ring_period ran at 15.03 fps against a
requested 15.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01KNR5Y79D1T4bBr6gJQaWFP
2026-08-29 11:50:46 +00:00

6.0 KiB
Raw Blame History

🔴 The main menu does NOT self-return to the title — and three "latencies" were my own pipeline

Status: one measured negative, one 🟡 ordering-only result, and one 🔴 instrument defect that voids three numbers I took the same day. Taken 2026-08-29.

Refuted: "an ~810 s idle returns to the title" does not apply to the main menu

HANDOFF's residue table downgraded Ⓑ leaves the main menu to authored, on the grounds that "an ~810 s idle also returns to the title, and nobody has separated the two". That reason is now gone.

Measured: the main menu was held with no input at all and classified every ~1.2 s by screen_match.py:

phase duration untouched screens seen
period capture 24 s menu only
idle probe 60 s (49 samples) menu only

Correlation against the committed main-menu capture never moved outside 0.9245 0.9249 across the whole idle window — not a drift, not a fade, a screen sitting still. Conservatively that is ≥ 60 s of continuous idle with no self-return, against a claim of 810 s.

And the 810 s idle is real — it belongs to the TITLE. Immediately after this run, a probe that expected to find the title still on screen found it had left on its own into the attract movie. So the corpus's idle timer is a property of the title screen (title → ADV.wmv → title), and the residue table attached it to the wrong screen.

What this gives the port: the idle alternative that made Ⓑ unprovable is refuted on the screen in question. Ⓑ is no longer competing with a timer there.

🟡 Ⓑ on the main menu: the ordering survives, the timing does not

Ⓑ was delivered — Canary's own log records [file-pad] keystroke vk=5801 down / up and XamInputGetKeystrokeEx -> user=0 vk=5801, so this is not a dropped press. In both runs the menu was followed by the title, and in both runs Ⓑ was the only input in a window of ≥ 100 s either side.

🟡 But it is still two observations with a confound I cannot yet exclude, and the reason is the next section: the "latency" I measured is worthless, so I cannot say the return followed Ⓑ promptly. What stands is ordering plus the absence of any other cause:

  • no input for ≥ 100 s before → no transition;
  • Ⓑ delivered → transition to the title.

Classification: measured ordering, unmeasured timing. The port should keep Ⓑ→title, and it is now better supported than "authored" — but it is not yet a timed measurement.

🔴 The defect: an oracle that cost 1503 ms per frame produced three fake latencies

screen_match.classify_array does a ±8 px ZNCC search over a 675×1279 surface against two references. Measured: 1503 ms per frame. A probe calling it on every frame of an 8 fps x11grab stream therefore drained the pipe at 0.64 frames/s — verified from the probe's own trace, 107 samples over 166 s.

The pipe backed up at ~7.4 fps, so every frame classified was stale, and increasingly so. That is not a subtle bias; it manufactured three numbers:

reported actually
plate appears 24.66 s after the title art unknown
Ⓑ → title in 15.58 s (run 1) unknown
Ⓑ → title in 25.60 s (run 2) unknown
Ⓐ → menu in 20.26 s unknown

🔴 All four are withdrawn. The tell was that they are all ~2025 s: a screen transition, a button press and a plate fade do not share a duration, but a backlog does. The two Ⓑ figures growing 15.6 → 25.6 s across a longer run is the backlog accumulating, and it is the signature to remember.

⚠️ What a backlog does and does not destroy. It delays every frame by the same growing amount, so it preserves ordering and destroys durations. That is why the ordering results above survive and every duration here does not.

Fixed and re-controlled. screen_match now has a fast=True path (4× decimation, ±2 decimated px) at 3875 ms, a 2060× reduction, and the control was re-run on both paths: 8/8 each, with the fast path agreeing with the exact path to ±0.005 on every score.

The ring measurements are NOT affected, and this was checked rather than assumed: ring_period.py does a greyscale conversion and a crop per frame, and achieved 15.03 fps against a requested 15 — it kept up exactly, so its timestamps carry no backlog. Its period also has an internal check a drifting clock cannot pass: eight evenly spaced autocorrelation peaks (focus-ring-spin-measured.md).

🟡 The PRESS Ⓐ plate: sequence answered, duration not

The port asked whether the boot title is build 4 alone, build 4 with the plate composited from the start, or build 4 then the plate after a delay.

It is the third. On the boot title the green-Ⓐ glyph count went 154 → 781 with the title art already matching at 0.946. The 154 is the decisive number: the committed no-plate capture live-title-build4-no-plate.png reads 159 with the same counter, and plate titles read 753 / 977 / 1493. So the title genuinely presents without the plate first, and the plate arrives afterwards.

🔴 How long afterwards is NOT measured — that figure came from the backlogged probe and is withdrawn with the rest. The port needs one more run with the fast path to get it.

Instrument controls, now committed

The negative controls for screen_match are movie frames, because that is the class the oracle exists to reject — a statistics-based oracle (green/white/mean) called a frame of ADV.wmv containing a bright green laser title, and a probe built on it tapped Ⓐ into the movie and then waited 120 s for a menu that was never coming.

An earlier version of the control list pointed at two scratch grabs, and a later run of the same probe overwrote one of them — turning a negative control into a title frame and failing the control for the wrong reason. They are now committed fixtures under captures/instrument-controls/.