diff --git a/docs/re/METHOD.md b/docs/re/METHOD.md index 1bc2f707..e1cf85a9 100644 --- a/docs/re/METHOD.md +++ b/docs/re/METHOD.md @@ -1510,3 +1510,25 @@ conversation feels like making it and is not. corrections as hits. Every hit needs reading, not just counting — a grep verdict alone sends you to re-fix what is already fixed. That is the price of not deleting the old sentence, and it is worth paying. + +## Look at the picture + +Three iterations went into reaching a submenu, and then two statistical identifiers +into deciding *which* submenu it was. The first failed its control (masked +correlation picked `EXTRAS` over the known main menu by 0.004 — the shared +background dominates). The second passed by **1.28×**, which is not a margin that +licenses identifying an unknown. + +**The screen says `TUTORIAL` across the top.** Reading it took one look, and it is +the same method the corpus already used for Q4 — *"pressing each one and reading the +screen's own title off the framebuffer"*. + +⚠️ **The lesson is not "statistics are bad".** It is that a capture of a *user +interface* carries an explicit self-identification, and a correlation coefficient is +a worse instrument for reading a word than reading the word. Reaching for a +numerical identifier felt more rigorous and was strictly less reliable — and the +control is what said so, which is the only reason the weaker number never got used. + +📌 Ask, before building a matcher: **does the artefact already state the answer?** +Screens have titles, files have magic, logs have names. A derived statistic is for +when nothing states it. diff --git a/docs/re/structures/tbm-submenu-not-reached.md b/docs/re/structures/tbm-submenu-not-reached.md index 00d37e41..9147932f 100644 --- a/docs/re/structures/tbm-submenu-not-reached.md +++ b/docs/re/structures/tbm-submenu-not-reached.md @@ -1,4 +1,4 @@ -# 🟡 Does a `.tbm` draw pixels? Still open — but a submenu is now REACHED +# ✅ A `.tbm` DRAWS PIXELS — the `TUTORIAL` screen, captured and identified **Classification: not an answer.** Recorded per *"do not improvise around a blocker"*, and because the *reason* both runs failed is the same mistake three @@ -79,7 +79,29 @@ a confident wrong answer. So two of the three render essentially nothing where the game draws a full screen. -## 🔴 But which screen this is, is NOT established — and the reason is a method point +## ✅ It is `TUTORIAL`, and the screen names itself + +**Read off the framebuffer** — the same method Q4 used to measure all five menu +buttons. The capture says `TUTORIAL`, lists `BASIC CONTROLS … BACK`, and carries a +**full-screen blue circuit/hex background**. + +`GP_TUTORIAL` build 0's element 0 is **`pubase.tbm`, pivot (640, 360)** — 1280×720, +the only full-screen *textured* element in the bundle; the one other full-screen +element is `pueff00.prm`, an untextured primitive that the colour census puts at +**pure black**. Our render of the same build is the **identical layout on pure +black** — 6.0–6.4 % inked against the game's 99.7 %. + +**So a `.tbm` draws, and the "inert" reading in +[`ui-forced-backdrop.md`](ui-forced-backdrop.md) is refuted.** Its 24 `.tbm` +deciders are correct rather than harmless. ⚠️ One `.tbm` observed; the class question +is settled, the ten other families are not individually seen. + +🔴 **And `screen render` is wrong on every screen carrying a `.tbm`** — it drops the +background silently. + +## 🔴 The instrument I built for this failed, and reading the screen was better + +**Correlation cannot discriminate when the candidate renders are near-blank.** **Correlation cannot discriminate when the candidate renders are near-blank.** An almost-empty image has no structure to correlate against, so all 19 `GP_SAVE_LOAD` @@ -88,6 +110,15 @@ matching statistic is useless against a hypothesis that predicts an empty image* and that is precisely the hypothesis under test. The instrument is disabled by the thing it was brought in to detect. +🔴 **Two repair attempts, and the honest outcome.** Masking the correlation to the +pixels the render *does* ink **failed its control**: asked to identify the known main +menu, it picked `EXTRAS` over the menu by **+0.0040** — the shared background +dominates. High-passing first **passed** the control but by **1.28×** +(+0.0276 against +0.0215), where the port's method on the same class of problem +separated by 4.7×. **A control that passes by 1.28× is not a licence to identify an +unknown**, so it was not used. Looking at the picture settled in one step what two +statistics could not. + 🔴 **And the focus could not be read either.** Against the two labelled menu captures the whole-frame mean absolute difference is **2.52** (NEW GAME) and **2.48** (OPTIONS) — 1.6 % apart, far too weak to call. diff --git a/docs/re/structures/ui-forced-backdrop.md b/docs/re/structures/ui-forced-backdrop.md index 9a8319ed..0934682c 100644 --- a/docs/re/structures/ui-forced-backdrop.md +++ b/docs/re/structures/ui-forced-backdrop.md @@ -183,12 +183,39 @@ directly. It cannot be located: capture covers a screen that has one (`GP_SAVE_LOAD`, `GP_BUNK`, `GP_DEBRIEFING_PILOTLOG`), so nothing says whether the game draws any either. -⚠️ **So a second reading survives and is not excluded**: that a `.tbm` element -contributes no pixels, in which case its paint position is *inert* rather than -wrong. That would leave the 38 verdicts harmless instead of correct — a different -claim with the same consequence. Distinguishing them needs a capture of a screen -that carries one, which is behind the Ⓐ fault -([`ui-clock-freezes-at-settle.md`](ui-clock-freezes-at-settle.md)). +🔴 **REFUTED 2026-08-30 — a `.tbm` DRAWS, and the capture is now in hand.** + +This paragraph used to say a second reading survived: that a `.tbm` contributes no +pixels, so its paint position is *inert* rather than wrong, leaving the verdicts +harmless instead of correct. **That reading is dead.** + +The `TUTORIAL` screen was reached in the running game and captured +([`live-tutorial-screen.png`](../captures/title-builds/live-tutorial-screen.png)). +It carries a **full-screen blue circuit/hex background**. `GP_TUTORIAL` build 0 has +18 elements, and **element 0 is `pubase.tbm` with pivot (640, 360)** — 1280×720, +the only full-screen *textured* element in the bundle. The one other full-screen +element is `pueff00.prm`, an untextured primitive, and this page's own colour census +says every full-screen `*eff00*` primitive is **pure black**. + +Our render of the same build +([committed beside it](../captures/title-builds/render-tutorial-build0-for-comparison.png)) +is the **identical layout** — same title, same seven items, same footer — on **pure +black**: 6.0–6.4 % of the frame inked against the game's 99.7 %. The only difference +is the background, and the only thing that can be is the `.tbm`. + +✅ **So the `.tbm` verdicts are CORRECT, not merely harmless.** They are load-bearing +in the full sense, and if the alpha-over assumption under this rule ever fails, those +24 deciders go with it for real. + +⚠️ **Reach: one `.tbm`, `pubase.tbm`.** The other families — +`px_deb_base`, `px_bunk_base`, `pvbase`, `pqbase`, `pnbase`, `pjbgbase2`, `pcbase`, +`px_replay_base`, `px_movie_base`, `px_mission_base` — are not individually +observed. What is settled is the *class* question this paragraph posed: a `.tbm` is +not an element that draws nothing. + +🔴 **And it means `screen render` is WRONG on every screen carrying a `.tbm`** — it +omits the background silently, with no diagnostic. That is a limitation of the +reference renderer, not of the game. ## 🔴 Stability is not necessity — 62 of the 80 are DECIDED by this rule (2026-08-30)