re: first audit of INDEX against the pages it links -- 3 of 8 rows were stale

INDEX is read every iteration and is the first thing a new reader meets, and I had
admitted three times to never auditing it. Found by accident: I was about to spend
a boot measuring whether A skips a movie because INDEX said 🟡, when movie-binding.md
had it settled since 2026-08-28 with a three-boot baseline and a delivery counter,
and HANDOFF carried it correctly. The staleness was in the index alone.

Three stale rows fixed: movie skippability, SE audio extractability, and B leaving
the main menu. Five other hits read and left alone -- index and page were talking
about different clauses.

One of the three should have been caught by check_refuted.py: REFUTED holds the
same dead claim with a different second clause, and the register matches exact
wording. Its docstring documents that weakness; this is the first live instance.

Also flags a within-page contradiction not fixed here: menu-audio-cues.md line 81
still heads a section saying SE audio is not extractable, which its own line 189
refutes.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Wuu56cE8vJGTBtn1ppsk8v
This commit is contained in:
sylph-decoder
2026-08-30 23:44:01 +00:00
parent 388a7beb14
commit 0ea2b8e00d
3 changed files with 121 additions and 3 deletions

View File

@@ -153,11 +153,11 @@ files, which is how the same ground got covered twice.
| [`title-crash-stl-tree.md`](title-crash-stl-tree.md) | The title-screen crash is an STL `map`/`set` erase on a bad iterator | ✅ CONFIRMED — the guest throws std::out_of_range from an STL |
| [`ui-paint-order-third-permutation.md`](ui-paint-order-third-permutation.md) | A third measured paint order — tool built and validated, screen not reached | ✅ the reader works and is CONFIRMED against both previously |
| [`ui-quad-class-foothold.md`](ui-quad-class-foothold.md) | The guest's UI quad class — a foothold found from the capture's vertex layout | 🟡 PROBABLE for the identification below (it is a static read, but |
| [`menu-navigation-semantics.md`](menu-navigation-semantics.md) | The title menu — how it moves, and where each button goes | ✅ measured: wraps both ends, Ⓑ restores focus, ⬅➡ inert; all 5 destinations driven. 🟡 GamePart id is a name match. 🟡 **Ⓑ leaving the MAIN menu downgraded 2026-08-29** — uncited, and the main menu is the only screen whose footer omits Ⓑ (0 glyph px in frame vs 514/518 elsewhere). ✅ **MISSION SELECT's stuck cursor was a LOCKED stage list** — labels have three brightnesses, locked 104 / unfocused 183 / focused 254 |
| [`menu-navigation-semantics.md`](menu-navigation-semantics.md) | The title menu — how it moves, and where each button goes | ✅ measured: wraps both ends, Ⓑ restores focus, ⬅➡ inert; all 5 destinations driven. 🟡 GamePart id is a name match. **Ⓑ leaving the MAIN menu re-measured 2026-08-30** — goes to the title, delivery-confirmed, ≤ 0.4 s, no loading screen, and the plate is re-drawn ~7 s later; ~~downgraded 2026-08-29 as uncited~~, and the main menu is the only screen whose footer omits Ⓑ (0 glyph px in frame vs 514/518 elsewhere). ✅ **MISSION SELECT's stuck cursor was a LOCKED stage list** — labels have three brightnesses, locked 104 / unfocused 183 / focused 254 |
| [`screen-transitions.md`](screen-transitions.md) | Between two screens — a fade through black, and where its timing lives | ✅ the fade quad's keyframe group is decoded (disc-wide: per-pak all-or-nothing; `GP_TITLE` = the 6 screens, not the 6 overlays); the ~0.4 s fade-OUT is measured, not on the disc |
| [`menu-audio-cues.md`](menu-audio-cues.md) | Menu audio — the event vocabulary is on the disc, the binding is not | ✅ `SE_UI_*` cue names/ids decoded and `BANK_SE``Static.slb` (0/322 in FILES); 🟡 event binding is a name match; `Static.slb` has no wave boundaries, so SE audio is not extractable |
| [`menu-audio-cues.md`](menu-audio-cues.md) | Menu audio — the event vocabulary is on the disc, the binding is not | ✅ `SE_UI_*` cue names/ids decoded and `BANK_SE``Static.slb` (0/322 in FILES); 🟡 event binding is a name match; **SE audio IS extractable** — the waves are located in `Static.slb` by playing them (move `0x1ec0`, confirm `0x5d6c0`, back `0x0ec0`); ~~❔ `Static.slb` has no wave boundaries, so SE audio is not extractable~~ is **refuted** and was still asserted here |
| [`boot-config-and-gamepart-registry.md`](boot-config-and-gamepart-registry.md) | What the game reads at boot — `config.ini`, and which GameParts exist | ✅ `config.ini` selects the language (the disc's only config); ❔ its `[SYSTEM]` is empty so the boot order is not in config; 🟡 24/29 ids bind to a class, `GP_ADVERTISE_DEMO` is never registered |
| [`movie-binding.md`](movie-binding.md) | Which movie plays where — boot intro, attract loop, new-game intro | ✅ decoded from the movie manifest (`ADVERTISE_MOVIE``ADV.wmv`, `MS00A``S00A.wmv`); attract identity confirmed independently by frame matching; 🟡 skippability unsettled |
| [`movie-binding.md`](movie-binding.md) | Which movie plays where — boot intro, attract loop, new-game intro | ✅ decoded from the movie manifest (`ADVERTISE_MOVIE``ADV.wmv`, `MS00A``S00A.wmv`); attract identity confirmed independently by frame matching; **skippability settled 2026-08-28: one Ⓐ skips a movie** — title at 57 s against a 193/196/193 s three-boot baseline, the press proved singular by Canary's own delivery counter (3→4), and the skipped-to title fully functional. ~~🟡 skippability unsettled~~ was stale here while the page and `HANDOFF.md` both had it answered |
| [`ready-room-probe.md`](ready-room-probe.md) | S1 — the Ready Room probe: no-go, and not for the reason expected | ✅ it is 2D and enumerates (60 builds), but the pak is briefing/tactical-map content; and `kind == 0x3002` finds 0 buttons there |
| [`ui-title-build-map.md`](ui-title-build-map.md) | Which `GP_TITLE` build is which screen state | ✅ CONFIRMED for title / `PRESS Ⓐ` / main menu / `EXTRAS` against live captures; the archive is 8 screens × EN/JP, and "6/8/9 are submenus" is withdrawn ✅ **2026-08-29: the two "unidentified `DELTASABER` plates" are the LOADING screen** — builds 0/1 the plain variant, 10/11 the dressed one, decoded from their `pgloading_*` element names, and the executable (`sub_821C4EB0`, bytes checked in the image) names exactly five title-side screens: `TITLE_SCREEN`, `BUTTON`, `TITLE_MENU`, `LOADING`, `LOADING2`. 🟡 which loading bundle takes which of the two names is undecided. 🟡 the English member of a pair is the one in the first half of `GP_TITLE.p00` — 8/8 structurally, 3/3 where a capture can check it. |
| [`ui-title-paint-order-capture.md`](ui-title-paint-order-capture.md) | The title screen's paint order, measured from the guest's draw submissions | ✅ CONFIRMED — the order in which the running game paints the title |

View File

@@ -0,0 +1,58 @@
# Does INDEX.md agree with the pages it links? -- 2026-08-30. FIRST AUDIT.
#
# INDEX.md is read every iteration by both agents and is the first thing a new
# reader meets. sylpheed-port's phrase is the right one: an index is an
# AMPLIFIER -- a status wrong there is wrong everywhere it is quoted from. It is
# also a file I have admitted three times I had never audited.
#
# FOUND BY ACCIDENT, which is why the audit happened: I was about to spend a boot
# measuring whether Ⓐ skips a movie, because the port's BLOCKED.md lists it 🟡 and
# so did INDEX. `movie-binding.md` has had it ✅ SETTLED since 2026-08-28 -- with a
# three-boot baseline and a delivery counter -- and HANDOFF carries it correctly.
# The staleness was in the index alone, and it nearly cost a run.
#
# TOOL: tools/re-capture/index_vs_pages.py. It prints a LISTING, NOT A VERDICT:
# 8 rows where the index is 🟡/❔ while the linked page has a "✅ settled/decoded"
# heading. A row can legitimately be unsure about one clause while its page is
# sure about another, so every hit is a prompt to read. I read all 8.
#
# ✅ 5 ARE LEGITIMATE -- index and page are talking about different clauses:
# 77 flight-speed-law "🟡 for the unit scale" -- still true
# 127 isl-builtins "🟡 28 ..." -- still true
# 132 mcol-collision "🟡 OPENED ..." -- a status word
# 159 boot-config-registry "❔ [SYSTEM] is empty ..." -- still true
# 162 ui-title-build-map "🟡 which loading bundle takes which name" -- open
#
# 🔴 3 WERE STALE, all three contradicted by the page they link:
#
# 160 movie-binding "🟡 skippability unsettled"
# -> page: ✅ settled 2026-08-28. One Ⓐ skips: title at 57 s against a
# 193/196/193 s three-boot baseline, press proved singular by Canary's
# own delivery counter going 3→4, skipped-to title fully functional.
#
# 158 menu-audio-cues "❔ Static.slb has no wave boundaries, so SE audio is
# not extractable"
# -> page line 189: "both waves are located in Static.slb. The port can
# have the audio." The waves are at move 0x1ec0, confirm 0x5d6c0,
# back 0x0ec0.
# ⚠️ AND THE PAGE CONTRADICTS ITSELF: its line 81 still heads a section
# "❔ And a new negative: an individual SE's audio is not extractable
# yet", which its own line 189 refutes. Not fixed here -- flagged.
#
# 156 menu-navigation "🟡 Ⓑ leaving the MAIN menu downgraded 2026-08-29 --
# uncited"
# -> page line 27: ✅ measured 2026-08-30, delivery-confirmed, ≤0.4 s, no
# loading screen, plate re-drawn ~7 s later, three captures cited.
#
# 🔴 AND ONE OF THE THREE SHOULD HAVE BEEN CAUGHT BY MY OWN REGISTER.
# REFUTED.md holds "`Static.slb` has no wave boundaries, so its layout is
# unknown". INDEX said "...so SE audio is not extractable". Same dead claim,
# different second clause -- and check_refuted.py matches EXACT wording, so it
# saw nothing. That weakness is documented in the tool's own docstring ("a clean
# run means no VERBATIM revival"); this is the first LIVE instance of it, and it
# survived in the index for days.
#
# ⚠️ REACH: this compares an index row's emoji against the presence of a ✅
# heading on the linked page. It cannot see a row that is confidently WRONG
# (no 🟡 to trip on), a row whose page has no status heading, or anything in
# HANDOFF.md or BLOCKED.md. 3 of 8 hits were real; the other 5 cost one read each.