# Refuted — claims that were tested and died **Read this before proposing a hypothesis.** Every line below was believed at some point, measured, and found false. Reviving one costs a whole iteration and produces nothing. This file exists because the list had been living in the autonomous agent's *loop prompt* — the only copy, lost the moment the container was. A refuted result is a real result; it belongs in the corpus like any other. **Format:** each entry is the claim as it was believed. Where the true answer is known it follows after `→`. Grouped by subject so a grep for your noun finds the neighbourhood, not just the line. --- ## Offsets, structs and the progress singleton * `position = instance − 0x12c` → refuted. * `+0x29d0` → refuted. * "an offset intersection can find a struct's consumer" → **only for LARGE or unusual offsets.** Small ones have no power (`+184`: 301/351/115 hits). * "a `+1956` store means a progress write" → writes go through the COPY, not direct stores. 9 direct stores, none of them a progress write. * "the singleton-global filter can find progress writers" → it fails its own control. * "the progress copy destination is an `r1`-relative stack local" → it is a **frame register**. The `r1` assumption returned 0 for all 21 candidates *including the known-good* — the filter was killed by its own control. * "word B's writer also stores the Time/Points record" → it does not. * "the debriefing records the metric with the clear bit" → 44 calls, exactly two strings (`DEBRIEFING`, `BASE_INFO`), no `Time`, no `Points`. * "`0x820AF030` holds live state" → all 384 words constant; it is a spawned-entity record, not live state. ## Screens, classes and RTTI * "the rotated draw in the title's capture is the `Z` swoosh (`ptlogo_back2*`)" → **mine, and refuted.** Its quads span y −209…925 and −292…1012 in screen space; the swoosh is a band at y 126…360. [`ui-title-build-map.md`](ui-title-build-map.md) * "the keyframe words at `+4`/`+8`/`+12` are always zero" → they are non-zero in **4.76 %, 4.62 % and 14.50 % of 83 862** blocks disc-wide, reading as **degrees** (±180, ±90, 120, 360). The original note was a sample artefact. (Superseded figures: an earlier count of 72 287 blocks missed every nested record — see the alignment entry below.) * ~~"those angle fields are where the title's rotated quads come from" → **no** — every `GP_TITLE` build 4 element has all three at zero.~~ → **that refutation was itself wrong, and is withdrawn (2026-08-28).** `+12` *is* exactly where they come from. Build 4's **top-level** elements do all read zero; the rotated quads belong to its two **nested** leaf records, `ptloop01.rat` (`+12` = 30) and `ptloop02.rat` (`+12` = −45), which the census never opened. Measured off the GPU: **+30.26°** and **−45.28°**. [`ui-keyframe-rotation.md`](structures/ui-keyframe-rotation.md) * "the rotated draw's element cannot be named from the capture" → refuted; its quads' **edge lengths** name it. 400 × 1076 and 400 × 1444 match `pteff03` 399×180 at 600 % and `pteff03a` 399×180 at 800 % — two different heights, both landing. [`ui-keyframe-rotation.md`](structures/ui-keyframe-rotation.md) * "a keyframe-block scanner may assume 4-byte alignment" → refuted; it found **0/3** of its own control blocks and under-counted the corpus by 16 341 blocks. Nested `RATC` blobs start at odd offsets (`0xbb5966`). * "keyframe rotation lives only in **nested** `.rat` leaf records" → **mine, and refuted within the hour by my own sweep.** It held for the three archives I had checked (`GP_TITLE`, `GP_BUNK`, `GP_CHALLENGE`) and failed on the next: `GP_DIALOG` and `GP_DEBRIEFING_PILOTLOG` rotate **top-level** elements, and those are the clearest examples on the disc. [`ui-keyframe-rotation.md`](structures/ui-keyframe-rotation.md) * "the pivot-anchored scale formula `kf.x − pivot·(scale−100)/100` is our renderer's reading, not a measurement" → **now measured.** At the `ptloop` pair's 600 %/800 % scale it predicts both quad centres at y = 360.0 against a captured 359.1/360.0, where top-left anchoring predicts 810/990. [`ui-keyframe-rotation.md`](structures/ui-keyframe-rotation.md) * "the game passes a pink per-vertex colour for the title swoosh" → **refuted by draw capture.** Every vertex colour in the capture is `FFFFFF`, white RGB. * "the swoosh discrepancy is undecodable" → **solved**: the game submits it as two **rotated parallelograms**; `ui_layout::blit` only does axis-aligned rectangles. [`ui-title-build-map.md`](ui-title-build-map.md) * "the `--log_ui_draws` per-draw capture reads the guest's blend state" → **mine, and wrong.** It records primitive type, index count, index-buffer address, VS/PS ucode hashes, texture bindings and vertex attribute 0 — no `RB_BLENDCONTROL`. It can test vertex colour as-is; blend state needs a Canary change. [`ui-title-build-map.md`](ui-title-build-map.md) * "the plate-free title capture (t ≈ 4.0 s) may be too early to be settled" → **mine, and refuted.** The swoosh band correlates 0.7342 at t = 4.0 s and 0.7353 at t = 21.5 s — identical to 0.001 over 17.5 s. * "`T8aD +0x04` bit `0x02` selects an additive blend" → **mine, and refuted.** Blending those sprites additively worsens every measure against the capture. [`ui-title-build-map.md`](ui-title-build-map.md) * "the title logo elements' wrong pivots (off by up to 59 px, authored against the other language's sprite) explain the swoosh rendering too thick" → **mine, and refuted.** `blit` sizes from the texture and applies the pivot only as `pivot·(scale−100)/100`; all seven swoosh elements are scale `(100,100)` at every keyframe, so the term is zero. The mismatch is real but inert here — it would bite `ptlogo1`/`ptlogo2`, which scale to 150 during the build-in. [`ui-title-build-map.md`](ui-title-build-map.md) * "the title screen loops at ≈ 2.2 s" → **mine, and doubly wrong.** The title *art* is near-static (wordmark sd 0.06); the 2.3 s pulse is the **`PRESS Ⓐ BUTTON` plate**, which is a *different build* (2, not 4). Localised by a per-tile amplitude map and decoded in `ptbtn00f.rat`. [`ui-title-build-map.md`](ui-title-build-map.md) * ~~"a `.rat` leaf record's keyframes use the build's 40-byte layout" → they do not~~ — **withdrawn.** They do. The scan that "found nothing" required 29 increasing times; the records hold **three**. Decoded in [`ui-title-build-map.md`](ui-title-build-map.md). * "the title's measured ≈ 2.2 s oscillation is the `ptloop01`/`ptloop02` elements" → **mine, and refuted by decoding them.** Their sweeps run 7.5 s and 9.5 s; a 22 s capture showed 8 peaks, not 3. The period's source is unidentified. * "the developer splash cannot be rendered by `screen render` at all" → it can, with **`--all`**. It is only invisible to the *default* listing, which filters on `is_build`. [`ui-title-build-map.md`](ui-title-build-map.md) * "the four `GP_TITLE` entries that are not screen builds are unidentified" → they are the **splash**: 10/13 the `SQUARE ENIX` logo, 11/14 the developer logos. * ~~"the boot title is phase 2 and the attract title is phase 4 state 0, and only phase 2 handles Ⓐ" → refuted~~ — **the REFUTATION is withdrawn.** The test assumed Ⓑ lands in phase 4 state 0; the event-0 block actually sets **phase = 2** and state = 0 together, so it probed phase 2. The hypothesis is untested, not dead. [`boot-config-and-gamepart-registry.md`](boot-config-and-gamepart-registry.md) * "any title after the first one refuses input" → too broad. The **Ⓑ-returned title accepts Ⓐ**; only the **attract**-returned title is inert. [`canary-scripted-input-traps.md`](canary-scripted-input-traps.md) * "`sub_821C6458` is `GamePart_Title`'s state machine" → **mine, imprecise.** It is the machine for **phase 4** of a five-way outer dispatch at `this+132`; phase 0 is the splash. The ten states and eighteen edges are phase 4 only. [`boot-config-and-gamepart-registry.md`](boot-config-and-gamepart-registry.md) * "`sub_821CC860` is the game's by-name screen factory" → **mine, and wrong.** Its decoded arguments include `BG`, `BLACK`, `FADE`, `FILE`, `KEY`, `PAD`, `SOUND`, `GAMMA_RGB` — it is a **generic name-keyed lookup**, mostly config. * "`DIFFICULTY` and `EXTRA_MENU` are corroborated screen names" → **mine, and wrong.** Neither appears in `r5` at any of the 48 call sites; they were strings merely referenced by the same functions. Only `TUTORIAL_MENU` survives. [`boot-config-and-gamepart-registry.md`](boot-config-and-gamepart-registry.md) * "the `{func, func, ptr}` triples at `0x820a3b48` are a GamePart state table" → **static-initialiser records trailing the `RegisterToFactory` strings.** The bytes before them are the tail of a diagnostic string and the data column is zero-filled descriptors. [`boot-config-and-gamepart-registry.md`](boot-config-and-gamepart-registry.md) * "the boot sequence is driven by a table the game reads" → it is **not data-driven**; four search spaces closed, transitions are calls with an id argument. [`boot-config-and-gamepart-registry.md`](boot-config-and-gamepart-registry.md) * "`config.ini` is a GamePart settings table, so the boot order is in it" → its `[SYSTEM]` section is **empty**; the only populated section is `[LANGUAGE]`. [`boot-config-and-gamepart-registry.md`](boot-config-and-gamepart-registry.md) * "the attract loop is `GP_ADVERTISE_DEMO` (GamePart 1)" → 🟡 id 1 has **no registration site** in the shipped build; the attract is the title replaying `ADV.wmv`. * "the 29 id-table names are 29 distinct GameParts" → 24 register, and `3`/`4` are the **same class** (`GamePart_SaveLoad`). * "Ⓐ on `NEW GAME` leads to a standing black-screen hang" → it opens **`DIFFICULTY`**, then **`SELECT DATA`**. What looked like a hang was a menu waiting for input that nobody pressed; the crash that follows is the already documented `sub_823070B0` cache throw. [`menu-navigation-semantics.md`](menu-navigation-semantics.md) * "tapping Ⓐ during the boot movie breaks the title" → **one** tap skips the movie cleanly and the title works normally. It is *hammering* (88 presses) that breaks it. [`movie-binding.md`](movie-binding.md) * "the attract movie runs ~85 s, so it is not `ADV.wmv` (137 s)" → **mine, and wrong.** Sampling began 39 s into the movie, so what was timed was its tail. The attract movie **is** `ADV.wmv`, played in full. [`movie-binding.md`](movie-binding.md) * "the boot intro and the attract movie are different videos" → one asset, one manifest slot (`ADVERTISE_MOVIE`). * "the new-game intro is unidentified" → `MS00A` → `S00A.wmv`, decoded from the movie manifest. * "`GP_READY_ROOM.pak` holds the Ready Room screen" → its 317 distinct element names contain **none** of the six visible labels; it is the briefing / tactical-map content behind the `BRIEFINGS` item. [`ready-room-probe.md`](ready-room-probe.md) * "the Ready Room might be 3D with a UI overlay" → it is **2D**; the pak carries zero 3D containers. * "element kind `0x3002` is *the* button kind" → title-side only. All 902 `GP_READY_ROOM` bundles have **zero** `0x3002`; that pak uses `0x3000`, `0x3004`, `0x300c`, `0x3008`. `0x3002` is one member of a `0x3000` family. * "the transition between menu screens is a cut" → it is a **fade through black**; a 0.5 Hz screenshot burst simply samples too slowly to see it. [`screen-transitions.md`](screen-transitions.md) * "the main menu's initial focus is fixed" → three boots of one script gave `TUTORIAL`, `TUTORIAL`, `NEW GAME`. * "the title menus drop d-pad presses shorter than ~0.3 s" → **refuted by my own data.** The menu **wraps at both ends**; every press registered, and the "missing" step was the wrap. See [`menu-navigation-semantics.md`](menu-navigation-semantics.md). * "the main menu opens with `NEW GAME` focused" → it opens on **`TUTORIAL`**, 2/2 boots (🟡 a third recorded run implies `NEW GAME`, so this is reproducible, not invariant). * "`GP_TITLE` builds 6/8/9 are three submenus" → **8 is the JAPANESE main menu**, and 6/9 are the English and Japanese `EXTRAS` submenu. `GP_TITLE` holds eight screens shipped twice (EN/JP), and exactly one submenu. See [`ui-title-build-map.md`](ui-title-build-map.md). * "the `PRESS Ⓐ BUTTON` plate is a state of the title build" → it is **its own build** (2/3), composited over build 4 and faded in a beat later. * "the RTTI route can name the anonymous classes" → 1 150 vtables: 1 150 `ANON_`, 0 `rtti_present`, 0 base classes. * "the sibling vtable methods name the class" → they cannot. * "`xrefs` can name the callers of a vtable method" → no. * "the `ind_call` refutation voids existing corpus claims" → damage bounded, 4/4 caller claims verify. But **`xrefs.ind_call` is a CROSS PRODUCT** — always filter `kind='call'`. * "`BASE_INFO` marks the 5-slot screen family" → it discriminates screen-config from table-read, 9/9 vs 10/10. * "a high key count means a rich screen" → `sub_82297550` / `sub_822A2F00`'s 27 "keys" are coordinate pairs, i.e. a layout table. * "`EX_` = the CHALLENGE-mission debriefing" → `EX_` is **EXTRA**, mission-kind 3. * "the `EX_` selection has not been shown" → it has: `[[obj+4]+184] == 3`. ## Stages, missions and the challenge set * "the disc's stages are numbered 1..28" → S01–S16 story, S17 **cut**, S18–S23 tutorials, S24–S29 challenge. * "S24–S29 are story missions" → they are the challenge missions. * "the challenge missions have their own maps" → they reuse `GP_MAIN_GAME_E.pak`'s stage records. * "the challenge `REQUIREMENT` values are 16,25,26,27,29" → the chain is 16→24→25→26→27→28. * "the `Extra0n` family shares one leaderboard metric" → `RECORD_TYPE` is per-stage: 3 Time / 3 Points. * "stage = filled SHAB count + 1" → refuted. * "the first TRIGGER is always the point of no return" → refuted. * "`EnumUnit_S14.tbl` might be missing" / "S14's 13 are a manifest omission" / "asteroids are exempt from the manifest" → S14's 13 are **dangling deployments**. NEEDS-HUMAN: fly S14. * "`StageMessageSet_S02.tbl` is not in the pak" → it is. * "`S28_p1` has an asteroid volume with no definition" → refuted. * "`test_s8p1_asteroid.tbl` is test-only" → refuted. * "the settings family has 28 or 29 objects" → 24. ## ISL / mission scripting * "the bytecode is in the `.embsec_` sections" → refuted. * "only 31 built-ins take a unit" → refuted. * "`sub_8230C398` is the message pump" → refuted. * "`bus+8216` is the subscriber registry" → refuted. * "the ScriptPhase vtable is ≥200 slots" → 113. ## IDXD, paks and naming * "IDXD record keys are `name_hash`" → record keys are **`tag_hash`** (case-SENSITIVE); `name_hash` is case-INSENSITIVE and used for pak keys. * "pak TOC order is stage order" / "TOC order is semantic order" → it is not. * "the executable holds the asset names" → the image names **no data value at all**; that route is powerless. * "the image might name a data VALUE" → powerless. * "the XPR2 manifest names hash to the DefTables tables" → refuted. * "the `DefTables` model names are unreachable" → reachable via the `Enumerate` declaration tables (1 413/1 425, 99.2 %). * "the `GP_MAIN_GAME_*` unnamed block is undiscovered data" → refuted. * "each `GP_MAIN_GAME_*` `Enumerate` object declares something" → refuted. * "`GP_HANGAR_ARSENAL` is missing data tables" → refuted. * "the `Enumeration` self-index can name objects" → a self-index names **records, not files**. * "a per-pak prefix might close the 2D blocker" → no. * "the `+` paths might name the 2D or `GP_READY_ROOM` keys" → the `+`-dictionary route is exhausted, 0 of 1 817. * "the `game:\` paths are unresolved" → refuted. * "a set-difference over file names can see reuse" → it cannot; **join per USER**. Per-pak copies are ×6. ## Audio * "which bank the menu plays is not on the disc" → the **cue table** cannot say (all BGM cues are numeric), but the **code** can: `sub_821C5580` plays cue **1103 = `BGM_103`**, and its two declared waves match the two streams the XMA probe saw byte-for-byte. * "the observed BGM stream sizes match no bank's declared waves, so the game hands the decoder a window" → **mine, and wrong** — I checked only the `BGM_0xx` rows. They are `BGM_103`'s two waves exactly; the game hands over the whole wave. * "an individual SE cue's audio cannot be extracted" → **mine, and wrong.** `--xma_param_probe=true` logs each stream's head bytes; searching them in `Static.slb` locates the wave exactly. [`menu-audio-cues.md`](menu-audio-cues.md) * "`Static.slb` has no wave boundaries, so its layout is unknown" → it is a **packed run** of whole 2 048-byte XMA packets with no delimiters — the two located cues are contiguous. There is nothing to scan for, by design. * "`Pj_Silph.xgs` holds the cue→wave index, so parse XACT" → **no XACT container exists on this disc**: 0 × `XGSF`/`SDBK`/`WBND` in all 1.08 GB of `sound.pak`, and no `XACT`/`.xgs` string in the executable. The extensions are the authoring tool's, not the format's. [`menu-audio-cues.md`](menu-audio-cues.md) * "every sound cue resolves to its own `.slb` bank" → the 322 `SE_*` cues do not; **0 of 322** are in `FILES`, and `BANK_SE` puts them all in `Static.slb`. * "`Static.slb` can be split into waves like any other bank" → it holds **0 `RIFF`, 0 `seek`, 0 `WAVE`** across all 8 353 472 readable bytes. [`menu-audio-cues.md`](menu-audio-cues.md) * "`BGM_001.slb` is three sub-waves (10 KB + 4.47 MB + 4.67 MB)" → the 10 KB is the **bank header**; a bank is **two** waves. * "a music bank's two waves might be intro + loop, two variations, or two halves" → they are **two stems of one performance, played together** — equal duration in 32/32 banks, and sample-synchronous. [`structures/bgm-two-stems.md`](structures/bgm-two-stems.md) * "`BGM_106`–`BGM_109` break the two-wave rule" → they are the leading-region straddle; realigned across entry boundaries they obey it. * "the cue table names which BGM belongs to which screen" → all 32 BGM cues are numeric (`BGM_001`…`BGM_109`). ## Units, weapons, effects and assets * "`Generic` (394) is the unit datasheet" → refuted. * "a loadout's `Arm1` names an item" → it names a **hardpoint slot** (`Turret_NNN`), 59/59. * "`EnumUnit` and the unit datasheet share a vocabulary" → they do not. * "the roster is the `Generic.Model` set" → roster 40, `Generic.Model` 46, `GameResourceID` 480 — three vocabularies. * "every unit ID is `UN_###__`" → the grammar is `UN_###_[_]_`. * "`_EXn` is the `Extra0n` index" → three different `EX` vocabularies exist. * "the only two `_EX5` names on the disc are the AA gun and the DeltaSaber" → refuted. * "running the tutorial will instantiate the `_Ttrl` weapons" → refuted. * "the disc has exactly three `EnumWeapon` tables" → four. * "the `wep_NN` package gaps are unshipped weapons" / "`wep_85` is the tip of a family" → `wep_85` is the **only** declared-but-unshipped asset (59/0/1/26). * "nothing is deployed without being declared" → refuted. * "effects are one namespace" → refuted. * "the 58 undeclared effect names are missing assets" → refuted. * "all five orphan effects are unshipped" → refuted. * "`eff_f0002` ships in `Base.xpr`" → refuted. * "`Base.xpr` holds more bound effects than `ptc_pack`" → refuted. * "the 34 unlocated are a scatter" → refuted. * "the 9 unlocated might be under another prefix" → refuted. * "`ptc_pack` has 532 names" → 727. * "the `_e`/`_f` law is effect-FIELD-specific" → it is the **faction law**, 564/564. * "a disc-wide `.xpr` byte search can show an effect is ABSENT" → it cannot. * "`rot_n001` is on the disc" → refuted. * "`rou_f004`'s mesh is in `Stage_S28.xpr`" → it is in `DeltaSaber_A.xpr`. * "`parent` + `_all` + `_child` is the composite-model convention" → refuted. `_hangar` **is** real (59 of 166, 59/59 with a bare twin); `_all`/`_child` is not. * "`Motion_guard_start` has no damage variants" → refuted. * "`CoverArea` bits 2 and 3 are mutually exclusive" → refuted. * "the 27 unresolved `NamePlate` values are missing objects" → refuted. ## LOD, background and misc tables * "`EnumLODSet_*` is a per-stage family" → `EnumLODSet_test.tbl` serves 17 stages; 17+5+1 = 23. * "there are 8 orphan LOD tables" → 6. * "the orphans are stale copies of `_test`" → refuted. * "S25 is absent from the `DefTables` LOD families" → refuted. * "`BackGroundID` has no referent anywhere" → it is an **identity**. * "`BackGroundPackage == BG_.xpr`" → refuted. * "`ID` + `Package` is a convention" → refuted. * "`Placement_*` / `RouteTest_*` are unattached" → refuted. * "the `AsteroidDefinition` join does not reproduce by hash" → it does. * "the 8-value frame is a new finding" → it was already in the corpus. ## Loaders, config and tuning * "the config reader is XML" → INI. * "`sub_822F9498` is the unit-definition loader" → it is `PlayerParams`'s. * "`sub_822AE628` reads the main-game `Tweak`" → refuted. * "`sub_8230D1F8` is a rank table" → it is the stage-settings loader. * "`sub_82286BC8`'s key list is new" → refuted. * "`sub_825F2CF0` / `sub_825F2F88` read a post-processing table" → refuted. * "`Booster` is a new schema" / "`Booster` is the player craft's flight envelope" → refuted; nothing selects `Booster`. * "the `AnalogRevice`/`Tweak` block is unreachable" → reachable (`sub_821A6CF0`, base `0x820A1630`). * "a 0-xref string block has no reader" → refuted. * "the AI table was NEEDS-HUMAN" → refuted. * "the `PG*` HUD names are undocumented" → they are documented. * "a base-solver row identifies a FUNCTION" → it does not. * "a 64K-boundary base is low confidence" → **inverted**; it is high confidence. * "the 0x820B0000 cluster is a false positive" → refuted. * "a pointer to a function in the image implies a registry" → refuted. `.pdata` is not a registry. * "the 13 player-facing chatter tables are the WINGMAN tables" → refuted. * "the 8 undeclared chatter tables are tutorial chatter" → refuted. * "other datasheets ship a schema too" → refuted. ## Encoding and text * "every IDXD string value is ASCII" → 6 non-ASCII values of 99 328. * "`文字列` is a dev placeholder" → they are Shift-JIS **type words**. * "the splash `_eff` glows hold a constant α ≈ 33, contradicting their declared 255 plateau" → **mine, and refuted within the iteration.** They ramp 34 → 255 in exact steps of 34. I had printed the series' minimum and read it as its range. [`ui-keyframe-time-unit.md`](ui-keyframe-time-unit.md) * "the declared keyframe timeline reproduces the captured splash" → **refuted for multi-keyframe elements.** `palogo_gamearts` is still at `a=255` nine frames after its declared `a=32`, and its declared 80-frame fade-in is never drawn. The `_eff` glows do reproduce, exactly — so this is about the group timeline, not about the interpolation law. [`ui-keyframe-time-unit.md`](ui-keyframe-time-unit.md) * "the `_eff` elements' agreement is the whole case for the keyframe-time shift, so it stays a shape argument" → superseded. The **hold duration** is calibration-free and decides it: observed 83 frames of full alpha against a predicted **2.0** as decoded and **80.0** shifted. The shift is nonetheless **not adopted** — it moves `GP_TITLE` build 7 by 13 % of pixels, away from its verified English twin's brightness. [`ui-keyframe-time-unit.md`](ui-keyframe-time-unit.md) * "the `GP_TITLE` build 7 render difference is evidence against the keyframe-time shift" → **mine, and withdrawn.** It is one element, `ptlogo_eff3.t32`, a transient bloom with no resting pose; `rest()`'s dwell fallback returns a different endpoint of the same movement under each reading. The brightness comparison measured our heuristic, not the decode. [`structures/ui-resting-pose.md`](structures/ui-resting-pose.md) * "`rest()`'s longest-dwell fallback picks the pose the element rests at" → **refuted structurally.** A dwell gap is time spent interpolating *between* poses; an endpoint is only held when the two poses are equal, which is a plateau, which the earlier path already returned for. Every element that reaches the fallback has a guessed rest pose. * "`rest()` for a plateau-less element should be the **last keyframe**" → **mine, and refuted.** The developer splash's three sibling glows are structurally identical and differ by one byte (`a=212` vs `a=255` at `t=45`); that rule makes `palogo_anima_eff` alone invisible while `gamearts_eff` and `seta_eff` stay lit. Capture box-mean ratios (0.717 / 0.723 / **0.772**) go the other way too. [`structures/ui-resting-pose.md`](structures/ui-resting-pose.md) * "a keyframe `scale` of 0 means *unset*, so render at 100 %" → **refuted by a disc-wide control.** 2 166 elements have a zero-scale keyframe and **not one is zero on every keyframe**, while 1 762 grow back out of zero (`ptlogo_eff3.t32` runs 0 % → 200 %). Zero means collapsed; the renderer now draws nothing. [`structures/ui-rat-layout.md`](structures/ui-rat-layout.md) * "a Japanese-locale capture is impossible in this container, because canary has no `user_language` cvar" → **mine, and refuted the next iteration.** The cvar really is absent, but the language is persisted in `/xconfig.settings` (`user.language`, BE u32 at file offset `0x912`, located from three struct landmarks) and that file is writable. The capture is still not *taken* — a Japanese run never reached the title in 787 s — but it needs a longer run, not a rebuilt emulator. [`tools/re-capture/set_console_language.py`](../../tools/re-capture/set_console_language.py) * "the Japanese-locale run never reached the title in 787 s" → **the measurement was broken, not the run.** `wait_title.sh` carried the superseded single-pixel oracle. Re-run with `is_title.py`: the game still did not present the interactive title, but that is now a measured statement (zero green-glyph pixels, correlation ≤ 0.22 to either build-7 render) rather than an artefact. * "the Japanese-locale run fails to reach the interactive title *because of the locale*" → **refuted by the English control.** 75 samples over 734 s with the same flags and oracle, every one glyph = 0. Neither locale presents the interactive title without a pad press. * "neither locale reaches the interactive title without a pad press" / "the game sat in the attract loop for 604 s" → **withdrawn as causes.** Both rest on runs whose polling loop sampled every ~41 s, because `screenshot` costs 10.8 s while the emulator runs (0.117 s idle, 92×). A title lasting a few seconds would be missed. The observations stand; the conclusions drawn from them do not. [`capture-harness-status.md`](capture-harness-status.md) * "the boot harness fails because its polling loop samples every ~41 s, slower than the title screen lasts" → **mine, and refuted by my own fix.** The sampling defect was real (3.98 s → 0.29 s per sample, 13.7×, control-verified at 753/327), but a probe running at 3.99 fps for **420 continuous seconds — 1 674 samples — still saw zero green-Ⓐ pixels.** Sampling rate was not the cause. [`capture-harness-status.md`](capture-harness-status.md) * ~~"neither locale reaches the interactive title without a pad press"~~ → withdrawn last iteration for want of evidence, now **reinstated as a measurement**: 1 674 dense samples over 420 s, English, zero glyph frames. ⚠️ Reach: a mid-run window only; it says nothing about the boot title. * "the PRESS Ⓐ plate appears only in the **boot** title window, which mid-run sampling could never catch" → **mine, and refuted.** The fast probe was attached at t=0: **2 391 frames over 600 s at 3.98 fps from launch**, max glyph 0. The plate did not appear at any point in the first ten minutes. [`capture-harness-status.md`](capture-harness-status.md) * "2 391 frames over 600 s from t=0, max glyph 0, therefore the title never appears in the first ten minutes" → **withdrawn: the instrument stalls.** A single long-lived x11grab stream degrades 3.98 → 1.60 fps and then freezes, repeating one stale frame; cross-checked, it read surface mean 5.21 where `import` read 125.65 at the same moment. A dense negative from a frozen stream is not a negative. [`capture-harness-status.md`](capture-harness-status.md) * "the `T8aD` layer key fully determines a screen's paint order" → **refuted, and the remainder is undecodable.** Elements sharing a key are tied; on the title the game paints the five tied `ptlogo_back2eff` glows `1,2,5,3,4` while the declaration table, the RATC child order and **every** field in the `T8aD` header (exhaustive 0x00–0x7f, u8/u16/u32, both directions — 0 matches against 64 for the declaration-order control) all give `1,2,3,4,5`. [`ui-paint-order-derived-check.md`](structures/ui-paint-order-derived-check.md) * "SE audio is undecodable from the disc — no XACT container exists anywhere" (as it stood on the **handoff page**) → **stale**: `menu-audio-cues.md` had already retracted it and located three cues in `Static.slb` that decode to PCM. The retraction never reached the row the port agent reads. Handoff row fixed; `tools/re-capture/handoff_lint.py` now checks for this class.