Four consecutive runs failed to reach the interactive title, across two locales, two launch paths and two display-gamma settings. I attributed it in turn to a stale oracle, to the locale, and to the attract loop. It was none of those. one `screenshot` call, emulator running: 10.8 s one `screenshot` call, emulator killed: 0.117 s 92x, measured at a 1-minute load average of 1.80 -- so it is contention with the emulator through the X server, not background load. skip_intro.sh takes two grabs per iteration plus a numpy import, giving a median sampling interval of 41 s in the last run (38/82/41/20/30/30/35/ 47/46/45/44/43/21/19). The title lasts "a few seconds" before the attract loop reclaims it -- wait_title.sh's own header says so. The harness was sampling slower than the event it was waiting for. That also explains why runs at 16:43-18:05 the same day succeeded. Withdrawn as CAUSES, though the observations stand: "the JP run never reaches the interactive title", "neither locale reaches it without a pad press", and "the game sat in the attract loop for 604 s". The English control did control for locale -- it just shared the same defect. Also recorded: I set kernel_display_gamma_type = 0 for the gamma control run, which brightens the frame (mid-attract mean 122.8 vs 52.5/82.8 at type 2) -- and skip_intro classifies movie-vs-static on an ABSOLUTE rmse threshold, so the gamma change biased the very classifier the run depended on. Changing a display setting and a capture behaviour in one run confounds both. Config restored to type 2. The fix is not applied: make the probe cheap enough to outpace the title window (small region, no convert round trip, one long-lived process). Every remaining emulator-side question is waiting on that.
27 KiB
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
+1956store 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. Ther1assumption 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), noTime, noPoints. - "
0x820AF030holds 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
Zswoosh (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 - "the keyframe words at
+4/+8/+12are 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→ that refutation was itself wrong, and is withdrawn (2026-08-28).GP_TITLEbuild 4 element has all three at zero.+12is 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) andptloop02.rat(+12= −45), which the census never opened. Measured off the GPU: +30.26° and −45.28°.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
pteff03399×180 at 600 % andpteff03a399×180 at 800 % — two different heights, both landing.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
RATCblobs start at odd offsets (0xbb5966). - "keyframe rotation lives only in nested
.ratleaf 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_DIALOGandGP_DEBRIEFING_PILOTLOGrotate top-level elements, and those are the clearest examples on the disc.ui-keyframe-rotation.md - "the pivot-anchored scale formula
kf.x − pivot·(scale−100)/100is our renderer's reading, not a measurement" → now measured. At theptlooppair'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 - "the game passes a pink per-vertex colour for the title swoosh" → refuted by
draw capture. Every vertex colour in the capture is
<alpha>FFFFFF, white RGB. - "the swoosh discrepancy is undecodable" → solved: the game submits it as two
rotated parallelograms;
ui_layout::blitonly does axis-aligned rectangles.ui-title-build-map.md - "the
--log_ui_drawsper-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 — noRB_BLENDCONTROL. It can test vertex colour as-is; blend state needs a Canary change.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 +0x04bit0x02selects an additive blend" → mine, and refuted. Blending those sprites additively worsens every measure against the capture.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.
blitsizes from the texture and applies the pivot only aspivot·(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 biteptlogo1/ptlogo2, which scale to 150 during the build-in.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 Ⓐ BUTTONplate, which is a different build (2, not 4). Localised by a per-tile amplitude map and decoded inptbtn00f.rat.ui-title-build-map.md "a— withdrawn. They do. The scan that "found nothing" required 29 increasing times; the records hold three. Decoded in.ratleaf record's keyframes use the build's 40-byte layout" → they do notui-title-build-map.md.- "the title's measured ≈ 2.2 s oscillation is the
ptloop01/ptloop02elements" → 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 renderat all" → it can, with--all. It is only invisible to the default listing, which filters onis_build.ui-title-build-map.md - "the four
GP_TITLEentries that are not screen builds are unidentified" → they are the splash: 10/13 theSQUARE ENIXlogo, 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- "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 - "
sub_821C6458isGamePart_Title's state machine" → mine, imprecise. It is the machine for phase 4 of a five-way outer dispatch atthis+132; phase 0 is the splash. The ten states and eighteen edges are phase 4 only.boot-config-and-gamepart-registry.md - "
sub_821CC860is the game's by-name screen factory" → mine, and wrong. Its decoded arguments includeBG,BLACK,FADE,FILE,KEY,PAD,SOUND,GAMMA_RGB— it is a generic name-keyed lookup, mostly config. - "
DIFFICULTYandEXTRA_MENUare corroborated screen names" → mine, and wrong. Neither appears inr5at any of the 48 call sites; they were strings merely referenced by the same functions. OnlyTUTORIAL_MENUsurvives.boot-config-and-gamepart-registry.md - "the
{func, func, ptr}triples at0x820a3b48are a GamePart state table" → static-initialiser records trailing theRegisterToFactorystrings. 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 - "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 - "
config.iniis 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 - "the attract loop is
GP_ADVERTISE_DEMO(GamePart 1)" → 🟡 id 1 has no registration site in the shipped build; the attract is the title replayingADV.wmv. - "the 29 id-table names are 29 distinct GameParts" → 24 register, and
3/4are the same class (GamePart_SaveLoad). - "Ⓐ on
NEW GAMEleads to a standing black-screen hang" → it opensDIFFICULTY, thenSELECT DATA. What looked like a hang was a menu waiting for input that nobody pressed; the crash that follows is the already documentedsub_823070B0cache throw.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 - "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 isADV.wmv, played in full.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.pakholds the Ready Room screen" → its 317 distinct element names contain none of the six visible labels; it is the briefing / tactical-map content behind theBRIEFINGSitem.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
0x3002is the button kind" → title-side only. All 902GP_READY_ROOMbundles have zero0x3002; that pak uses0x3000,0x3004,0x300c,0x3008.0x3002is one member of a0x3000family. - "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 - "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. - "the main menu opens with
NEW GAMEfocused" → it opens onTUTORIAL, 2/2 boots (🟡 a third recorded run impliesNEW GAME, so this is reproducible, not invariant). - "
GP_TITLEbuilds 6/8/9 are three submenus" → 8 is the JAPANESE main menu, and 6/9 are the English and JapaneseEXTRASsubmenu.GP_TITLEholds eight screens shipped twice (EN/JP), and exactly one submenu. Seeui-title-build-map.md. - "the
PRESS Ⓐ BUTTONplate 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_, 0rtti_present, 0 base classes. - "the sibling vtable methods name the class" → they cannot.
- "
xrefscan name the callers of a vtable method" → no. - "the
ind_callrefutation voids existing corpus claims" → damage bounded, 4/4 caller claims verify. Butxrefs.ind_callis a CROSS PRODUCT — always filterkind='call'. - "
BASE_INFOmarks 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
REQUIREMENTvalues are 16,25,26,27,29" → the chain is 16→24→25→26→27→28. - "the
Extra0nfamily shares one leaderboard metric" →RECORD_TYPEis 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.tblmight 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.tblis not in the pak" → it is. - "
S28_p1has an asteroid volume with no definition" → refuted. - "
test_s8p1_asteroid.tblis 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_8230C398is the message pump" → refuted. - "
bus+8216is the subscriber registry" → refuted. - "the ScriptPhase vtable is ≥200 slots" → 113.
IDXD, paks and naming
- "IDXD record keys are
name_hash" → record keys aretag_hash(case-SENSITIVE);name_hashis 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
DefTablesmodel names are unreachable" → reachable via theEnumeratedeclaration tables (1 413/1 425, 99.2 %). - "the
GP_MAIN_GAME_*unnamed block is undiscovered data" → refuted. - "each
GP_MAIN_GAME_*Enumerateobject declares something" → refuted. - "
GP_HANGAR_ARSENALis missing data tables" → refuted. - "the
Enumerationself-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 orGP_READY_ROOMkeys" → 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_821C5580plays 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_0xxrows. They areBGM_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=truelogs each stream's head bytes; searching them inStatic.slblocates the wave exactly.menu-audio-cues.md -
"
Static.slbhas 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.xgsholds the cue→wave index, so parse XACT" → no XACT container exists on this disc: 0 ×XGSF/SDBK/WBNDin all 1.08 GB ofsound.pak, and noXACT/.xgsstring in the executable. The extensions are the authoring tool's, not the format's.menu-audio-cues.md -
"every sound cue resolves to its own
.slbbank" → the 322SE_*cues do not; 0 of 322 are inFILES, andBANK_SEputs them all inStatic.slb. -
"
Static.slbcan be split into waves like any other bank" → it holds 0RIFF, 0seek, 0WAVEacross all 8 353 472 readable bytes.menu-audio-cues.md -
"
BGM_001.slbis 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 -
"
BGM_106–BGM_109break 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
Arm1names an item" → it names a hardpoint slot (Turret_NNN), 59/59. - "
EnumUnitand the unit datasheet share a vocabulary" → they do not. - "the roster is the
Generic.Modelset" → roster 40,Generic.Model46,GameResourceID480 — three vocabularies. - "every unit ID is
UN_<l>###_<FACTION>_<name>" → the grammar isUN_<letter>###_[<subkind>_]<FACTION>_<name>. - "
_EXnis theExtra0nindex" → three differentEXvocabularies exist. - "the only two
_EX5names on the disc are the AA gun and the DeltaSaber" → refuted. - "running the tutorial will instantiate the
_Ttrlweapons" → refuted. - "the disc has exactly three
EnumWeapontables" → four. - "the
wep_NNpackage gaps are unshipped weapons" / "wep_85is the tip of a family" →wep_85is 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_f0002ships inBase.xpr" → refuted. - "
Base.xprholds more bound effects thanptc_pack" → refuted. - "the 34 unlocated are a scatter" → refuted.
- "the 9 unlocated might be under another prefix" → refuted.
- "
ptc_packhas 532 names" → 727. - "the
_e/_flaw is effect-FIELD-specific" → it is the faction law, 564/564. - "a disc-wide
.xprbyte search can show an effect is ABSENT" → it cannot. - "
rot_n001is on the disc" → refuted. - "
rou_f004's mesh is inStage_S28.xpr" → it is inDeltaSaber_A.xpr. - "
parent+_all+_childis the composite-model convention" → refuted._hangaris real (59 of 166, 59/59 with a bare twin);_all/_childis not. - "
Motion_guard_starthas no damage variants" → refuted. - "
CoverAreabits 2 and 3 are mutually exclusive" → refuted. - "the 27 unresolved
NamePlatevalues are missing objects" → refuted.
LOD, background and misc tables
- "
EnumLODSet_*is a per-stage family" →EnumLODSet_test.tblserves 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
DefTablesLOD families" → refuted. - "
BackGroundIDhas no referent anywhere" → it is an identity. - "
BackGroundPackage == BG_<id>.xpr" → refuted. - "
<X>ID+<X>Packageis a convention" → refuted. - "
Placement_*/RouteTest_*are unattached" → refuted. - "the
AsteroidDefinitionjoin 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_822F9498is the unit-definition loader" → it isPlayerParams's. - "
sub_822AE628reads the main-gameTweak" → refuted. - "
sub_8230D1F8is a rank table" → it is the stage-settings loader. - "
sub_82286BC8's key list is new" → refuted. - "
sub_825F2CF0/sub_825F2F88read a post-processing table" → refuted. - "
Boosteris a new schema" / "Boosteris the player craft's flight envelope" → refuted; nothing selectsBooster. - "the
AnalogRevice/Tweakblock is unreachable" → reachable (sub_821A6CF0, base0x820A1630). - "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.
.pdatais 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
_effglows 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 - "the declared keyframe timeline reproduces the captured splash" → refuted for
multi-keyframe elements.
palogo_gameartsis still ata=255nine frames after its declareda=32, and its declared 80-frame fade-in is never drawn. The_effglows do reproduce, exactly — so this is about the group timeline, not about the interpolation law.ui-keyframe-time-unit.md - "the
_effelements' 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 movesGP_TITLEbuild 7 by 13 % of pixels, away from its verified English twin's brightness.ui-keyframe-time-unit.md - "the
GP_TITLEbuild 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 - "
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=212vsa=255att=45); that rule makespalogo_anima_effalone invisible whilegamearts_effandseta_effstay lit. Capture box-mean ratios (0.717 / 0.723 / 0.772) go the other way too.structures/ui-resting-pose.md - "a keyframe
scaleof 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.t32runs 0 % → 200 %). Zero means collapsed; the renderer now draws nothing.structures/ui-rat-layout.md - "a Japanese-locale capture is impossible in this container, because canary has
no
user_languagecvar" → mine, and refuted the next iteration. The cvar really is absent, but the language is persisted in<storage_root>/xconfig.settings(user.language, BE u32 at file offset0x912, 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 - "the Japanese-locale run never reached the title in 787 s" → the measurement
was broken, not the run.
wait_title.shcarried the superseded single-pixel oracle. Re-run withis_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
screenshotcosts 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