port: score the boot's own end frame against the game -- 0.00% differing

--boot --capture= used to write no file: _finish_boot() was reachable only from
the overlay-quit branch, and the boot quit first because that branch fires when
_overlay_spec.is_empty(), which it is the instant the overlay is raised. Fixed
earlier this session by the _overlay_quit_at guard -- and I never went back to
check what the fix made possible. The P3/P7 artifact has been available for hours
and unused.

The boot running unattended and photographing its own end state: RMSE 12.80,
0.00% differing against live-title-press-a.png. The residual is the known capture
gamma floor.

More useful: verify-capture reaches this frame by a shortcut (--screen=title
--overlay=press_start --time=3.95) rather than by booting, and that shortcut has
been trusted since it was written and never tested against what it stands in for.
It is faithful -- 12.83 / 0.00% against the boot path's 12.80 / 0.00%, agreeing to
0.03 RMSE.

Does not show the intervening sequence is right: it is one frame, the last one.

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 12:34:45 +00:00
parent 3a66665f66
commit d113b681be

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 -->
153 sections. Search this before re-deriving anything.
154 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)
@@ -164,6 +164,7 @@ dies, which is what this file is for.
* [Correction: those two are the *sound* path, which makes the rule stronger](#correction-those-two-are-the-sound-path-which-makes-the-rule-stronger)
* [The two loading screens are no longer black, and it was the paint order](#the-two-loading-screens-are-no-longer-black-and-it-was-the-paint-order)
* [Adjudicating the Decoder's `rest()` replacement against the game](#adjudicating-the-decoders-rest-replacement-against-the-game)
* [The boot's own end frame, scored against the game for the first time](#the-boots-own-end-frame-scored-against-the-game-for-the-first-time)
<!-- /INDEX -->
## P0 — the exporter, 2026-08-28
@@ -5942,7 +5943,7 @@ Fixed: with a script, the capture defers to the end of the run, through the same
`_capture_to` member the boot path already used. Verified — the two runs now
differ at max 235, and the capture lands at t=82 units instead of t=8.
### 2. `--boot --capture=` wrote no file at all
### 2. `--boot --capture=` wrote no file at all — ✅ FIXED, see below
`_finish_boot()` is reachable only from the overlay-quit branch, but the boot
quit first: line 412 exits when `_film == "" and _overlay_spec.is_empty()`, and
@@ -8941,3 +8942,39 @@ in value is unmeasured. And three screens are three screens.
📌 They are right not to change `rest()` on this. I pin their crate, nothing I
ship reads `rest`, and a proposal whose evidence comes entirely from the consumer
has no business landing in the dependency on that basis alone.
## The boot's own end frame, scored against the game for the first time
`--boot --capture=` used to write **no file**: `_finish_boot()` was reachable only
from the overlay-quit branch, and the boot quit first because that branch fires
when `_overlay_spec.is_empty()` — which it is the instant the overlay is raised.
✅ Fixed by the `_overlay_quit_at < 0.0` guard added earlier this session. The
defect entry above is left standing with a pointer here, because the reasoning is
what makes the guard legible.
⚠️ I fixed it and never went back to check what it made possible. **The whole
P3/P7 artifact — the boot running unattended and photographing its own end
state — has been available for hours and unused.**
### What it shows
| | RMSE | differing |
|---|---|---|
| **boot's own end frame**, real sequence, unattended | **12.80** | **0.00 %** |
| `title_plate`, synthetically posed at `--time=3.95` | 12.83 | 0.00 % |
✅ **Zero pixels over the threshold against the game.** The residual RMSE is the
known capture gamma floor, which every row on this corpus carries and which is not
a target.
📌 **And the two agree to 0.03 RMSE.** That is the more useful half. `verify-capture`
reaches this frame by a *shortcut* — `--screen=title --overlay=press_start
--time=3.95` — rather than by booting. The shortcut has been trusted since it was
written and never tested against the thing it stands in for. It is faithful:
posing the composite directly and arriving there through publisher logo →
developer logos → `ADV.wmv` → title → plate land on the same frame.
⚠️ What this does **not** show is that the intervening sequence is right. It is one
frame, the last one; the boot could take a wrong path and still end correctly.
`--shots` walks the sequence, and comparing those against captures needs captures
of the intermediate states, which the corpus does not have for the video handover.