re: the title's build-in measured in the guest's draw stream -- the flashes are real

The settle-time decode was confirmed only against a SETTLED frame, which shows
the end state is right and says nothing about whether the five flashes ever
happen. This runs the oracle: a draw capture armed before the title exists,
so the window contains the frames in which the screen is built.

The flashes fire in a six-frame window and are absent from all 155 other
sampled frames. `ptlogo_back2eff1` is drawn in exactly two frames at t = 54.0
against a decoded peak of t54-56; `ptlogo1` first appears at t = 42.2 against
a decoded t42. Units-per-frame was taken from the GLOW's period alone, a
different element, so the timings are not circular. The two holders are
continuous from frame 134.

The plate glow's quad carries a per-vertex colour whose alpha IS the element's
fade alpha, so the ramp is read straight out of the guest: observed range
0..80 against a decoded peak of 80, exact and unfitted; period 51.158
presented frames over 20 cycle starts. Fitting the decoded ramp gives RMS
13.16 alpha levels against 38.18 for the same ramp REVERSED -- if the shape
carried no information those would be equal, so the asymmetry is real and
correctly directed. Further controls: symmetric triangle 15.73, flat 31.13.

`ptlogo_back2eff3` was never drawn, and that is expected rather than a miss: a
2-unit flash peak is 0.85 of a presented frame, so catching one is a matter of
phase. A port drawing all five every time shows more sweep than the console.

METHOD.md gains the trap this cost: a 2D draw's identity is its vertex
geometry, not its bound texture. These sprites sample shared pages, and
matching texture dimensions produced a false negative (no flash is ever drawn)
and a false positive (the intro movie's 640x360 YUV planes read as `ptbase2`)
in the same pass.

Also records the top-level restriction on the settle window, which the port
raised and which is verified here: top-level [160,236] width 76, including the
`ptloop` leaves [269,540] width 271 -- an instant past the end of every
top-level element's timeline.

Evidence committed as a derived per-frame series, not the 7 MB raw log.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01QsEPXWVaEpyfudtR6re1Pd
This commit is contained in:
sylph-decoder
2026-08-29 19:56:34 +00:00
parent 4c74e579a0
commit d98c8214cc
9 changed files with 3511 additions and 0 deletions

View File

@@ -26,6 +26,21 @@ vocabulary the file has.
`UiBuild::settle_window()` returns the interval, whose width is how much
confidence the midpoint deserves.
🔴 **Gather the times from the TOP-LEVEL elements only — not from nested leaf
records.** The port raised this after reproducing `[160, 236]` from its own
export, and it is worth stating because the implementation reads correctly either
way while only one is right. Including `GP_TITLE` build 4's `ptloop` leaves, whose
cycles run to 600 and 720, gives **`[269, 540]`** instead — a "settled instant"
that lies *past the end of every top-level element's timeline*, i.e. after the
screen has exited. Verified here: top-level `[160, 236]` width 76, with leaves
`[269, 540]` width 271. A leaf loops on its own clock and says nothing about when
the screen stops changing.
**Confirmed against the running game.** The mechanism this page decodes — five
transient flashes that fire and vanish — is observed in the guest's own draw
stream, with `ptlogo_back2eff1` drawn in exactly two frames at t = 54.0 against a
decoded peak of t5456: [`ui-title-buildin-measured.md`](ui-title-buildin-measured.md).
## The case that found it
`GP_TITLE` build 4. Seven elements share the light-arc band behind the logo: