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.


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

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):

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

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.