Pre-Flight — WP-003 — 2026-06-02
Filled-in copy of docs/reference/pre-flight for WP-003. Verdict at the bottom.
Paired session prompt: session-WP-003-2026-06-02 — operationalizes this artifact for the execution session.
Header
- WP:
WP-003 - Title: Inspect the 1 MB pre-payload region (palette hunt)
- Pre-flight date:
2026-06-02 - Targets generation(s): Gen 1 (Showdown) — per vision §Engine Lineage.
TGIFILE.ARTis Gen-1-only; Gen 2/3 use the MMFW family. Phantom’s archive format remains unverified per scooby-exe §Pending: Phantom archive format; this WP’s findings are Showdown-scoped and do not extend to Phantom until WP-006 locks Phantom’s classification. - Targets disc(s): Showdown — operating against the cached binary; no re-mount needed
Pre-flight intent
Validating readiness for
WP-003. Not implementing, not editing format docs, not extracting samples, not running any hex inspection. Verdict only.
Dependency check
WORK_INDEX row for WP-003 shows Deps: — (no strict prereq WPs). WP-007 is recommended-not-strict and is now ✅ Done — its strings dump is available as a cross-check input per the WP-003 body’s revised §Dependencies + §Notes (commit 0eaad13).
| Prereq | Status in WORK_INDEX |
Locked on | Notes |
|---|---|---|---|
| — (strict) | n/a | n/a | WP-003 has no strict prereqs; vacuously satisfied |
| WP-007 (recommended) | ✅ Done | 2026-06-02 (commit 49ad5ee) |
Strings dump at tools/exes/showdown/strings-ansi.txt available as the cross-check input for any candidate asset-name strings discovered in the pre-payload region |
Repo + disc state
- Working tree clean —
git status --shortreturns empty after the WP-003 step-4 revision (commit0eaad13) - HEAD on
mainat commit0eaad13(“docs: WP-003 step-4 revision — lifecycle fields + WP-007 hand-off + cache pin”).origin/mainis up to date. - Disc-on-hand: SATISFIED.
TGIFILE.ARTcached attools/exes/showdown/TGIFILE.ART. The Showdown disc is now fully cached per tools/exes/README §Showdown (commit9cedfb0); no disc re-mount needed for this WP or for WP-002 / WP-004. - Directory casing normalized; cached binary lives at the canonical lowercase
tools/exes/showdown/per the Conventional layout - No prior Ghidra
.gpris being re-used — WP-003 is a pre-Ghidra WP (Phase 1, sits in front of WP-001) - No prior tool output is being re-used — this is the first run of the pre-payload region inspection
Source binary identity (carry-forward into Findings citations):
| File | Path | Size (bytes) | SHA-256 |
|---|---|---|---|
TGIFILE.ART (Showdown, Gen 1) |
tools/exes/showdown/TGIFILE.ART |
144,592,896 | B3006E127B4EFA19CF419E92A97A8AA0A565378243CBE396ABA9707F3310C807 |
Every Finding subsection in tgifile-art.md reached by this WP MUST cite this SHA-256. A re-rip of the Showdown disc producing a different SHA invalidates the corresponding Finding row.
Scope lock
Anything not explicitly allowed is forbidden.
Allowed paths for WP-003:
docs/formats/tgifile-art.md
docs/reference/pre-flight-WP-003-2026-06-02.md
docs/sessions/session-WP-003-2026-06-02.md
docs/work-packets/WORK_INDEX.md
docs/work-packets/WP-003-pre-payload-region.md
Allowed but local-only (never committed; covered by .gitignore on tools/samples/*):
tools/samples/tgifile-art-palette-0.bin (conditional — only if a palette is identified and extracted)
tools/samples/tgifile-art-prepayload-dump.bin (conditional — local copy of the 1 MB region for offline analysis)
Forbidden (any change fails the WP):
- Game data binaries committed to git (any
*.exe,*.eng,*.dat,*.iso,*.ART,*.MMF,*.MMA,*.MMP,*.MMS) — copyright; safety-net in.gitignore engines/scooby/**— engine code is out of scope (Phase 2)docs/formats/files other thantgifile-art.md(no spec changes toscooby-exe.md,mmfw-container.md,audio-archives.mdfrom this WP)- Any
docs/execution-checklists/edits — none are paired with WP-003; sprawl into EC-001 is forbidden - Reading byte ranges from
TGIFILE.ARToutside0x0F48through0x10017E. Reaching into the payload region (≥0x10017E) is out of scope; that’s WP-002’s territory. Reading the header / asset entry table (0x0000–0x0F48) is allowed only for sanity-check cross-references to facts already in tgifile-art.md. - Any path outside the allowlist above
Exit check (must run before staging a commit):
git diff --cached --name-only
Any file in the output that doesn’t match the allowed list = scope violation. Remediate with git restore, not by widening the allowlist post-hoc.
Risk review
| Risk | Likelihood | Impact | Mitigation |
|---|---|---|---|
Disc mismatch / ISO drift — cached TGIFILE.ART differs from canonical disc-pressed |
low (post-cache) | high | SHA-256 B3006E127B4EFA19CF419E92A97A8AA0A565378243CBE396ABA9707F3310C807 in the Source binary identity table is the lock. Every Finding row in tgifile-art.md MUST cite this SHA. A re-run against a different SHA invalidates the corresponding row. |
| Generation conflation — finding stated as “TGIFILE.ART does X” when X is Showdown-specific and Phantom hasn’t been verified Gen 1 yet | med | med | Every Finding subsection labeled #### Gen 1 (Showdown). The WP body §Notes “Generation discipline” guard activates here. Phantom claims are deferred to WP-006. |
| Hypothesis tunnel-vision — operator finds the palette quickly and stops, missing that the region might also contain a name table or other structure | med | low | The WP §Scope is explicit: “palette table? name table? both? something else?”; the §Exit criteria require characterizing the FULL byte range, not just the first hit. The session prompt re-enforces this as a “you MUST…” rule. |
Boundary overrun — hex inspection accidentally reads into the ≥ 0x10017E payload region, contaminating Findings with payload bytes |
low | med | Every byte range in Findings cites both start AND end offsets. The WP body §Scope explicitly bounds 0x0F48 through 0x10017E (length 0xFF236 = 1,045,046 bytes). The session prompt names this as the strict upper bound; any byte cited at or above 0x10017E is a scope violation. |
Local-only palette bin loses provenance — operator extracts a palette but the Findings doc doesn’t include enough information for a future operator to regenerate it from the SHA-256-locked TGIFILE.ART |
med | med | If a palette is extracted, the Findings entry MUST include the byte-offset extraction recipe (start offset, length, post-processing if any). The bin is local-only (gitignored); the recipe lives in the committed doc. |
| Inference vs evidence — region characterized from analogy (“looks like a standard 256-entry RGB palette”) without byte-citation | low | high | Every spec clause in tgifile-art.md Findings cites a disc offset + hex window. “Looks like” without a hex citation is a scope violation. Carried forward from the pre-flight gate’s common risk shapes. |
WP-007 strings cross-check missed — operator finds candidate asset-name strings in the region but doesn’t grep them against tools/exes/showdown/strings-ansi.txt |
med | low | The WP body §Notes “Hand-off from WP-007 / hand-off to WP-002” makes this explicit. The session prompt §Session task names it as a mandatory step if any candidate names turn up. |
Verdict
- READY TO EXECUTE
- NOT READY
Rationale: every section carries concrete content. Dependency check vacuously satisfied (no strict prereqs). Disc-on-hand SATISFIED via local cache with SHA-256 lock landed in commit 9cedfb0. Scope lock is explicit; the byte-range upper bound at 0x10017E is named as a strict cutoff. Risk review carries seven concrete mitigations, each tied to a specific WP or session-prompt discipline.
Authorization: the executing session may open against the §Scope lock allowlist above. Outputs land per WP-003 §Exit criteria. The §Exit criteria from the WP body govern when the WP can flip to ✅ Done.
Reviewer: Jeff (BarefootBetters) Date: 2026-06-02
A READY verdict authorizes opening the execution session. It does not authorize any change beyond the §Scope lock allowlist.
After execution — lessons learned
Lesson — pre-flight did not anticipate that the format-doc itself might be wrong. The pre-flight’s §Repo + disc state row “TGIFILE.ART cached … SHA matches” is necessary but not sufficient: the cached binary matched the SHA, yet the existing tgifile-art.md §Header layout table had asset_count at the wrong offset (0x011C vs the actual 0x0118) — a +4 shift across the whole header. Step 1 of the session prompt’s “sanity-check the cached binary” would have failed (asset_count @0x011C decodes as 1,048,958, not 453) and triggered a STOP, except step 2 explicitly anticipated outcome (c) “the asset entry count is actually at 0x0118 not 0x011C”. The session prompt’s design saved the run by sequencing step 2 right after step 1.
For future pre-flights: when a WP’s main artifact is an update to an existing format-doc, the pre-flight §Repo + disc state should include a “cross-check the binary against the doc” row that exercises at least one non-trivial offset cited in the doc. Catching spec drift at the pre-flight gate is cheaper than catching it mid-session via a step-1 mismatch.