Session Prompt — WP-003 — 2026-06-02
Paste this as the first message to the executing Claude Code session. The session opens execution for WP-003 against the cached
TGIFILE.ART.
Header
- WP:
WP-003 - Title: Inspect the 1 MB pre-payload region of
TGIFILE.ART(palette hunt) - Session date:
2026-06-02 - Paired pre-flight: pre-flight-WP-003-2026-06-02 — verdict
READY, signed against commit0eaad13 - Targets generation(s): Gen 1 (Showdown only)
- Targets disc(s): Showdown — operating against the cached
TGIFILE.ART, no ISO re-mount needed
Intent
Characterize the byte range 0x0F48–0x10017E (1,045,046 bytes) of TGIFILE.ART: palette table, asset name table, frame metadata, padding, or some combination. Resolve the 4-byte gap at 0x0118–0x011B (between the declared group descriptor end and the asset count field, currently labeled in tgifile-art.md). Land structured Findings under tgifile-art.md that downgrade the “packed/padded region” label to concrete content — or, if the region really is padding, characterize why (alignment boundary, sector-multiple, etc.) with byte-citation evidence.
This unblocks WP-001 (Ghidra session can drop palette-hunt scope from its TGIFILE.ART decode trace) and gives WP-002 a head-start on first-decode strategy (palette-indexed if a palette is here).
Explicitly NOT in scope for this session: any Ghidra work, any payload decoding (≥ 0x10017E), any changes to format docs other than tgifile-art.md, any Phantom claims (Phantom’s archive format is unverified per scooby-exe §Pending: Phantom archive format — Phantom-specific findings are deferred to WP-006).
Authority chain (read order)
Read these files top-to-bottom before doing any work:
C:\Users\jjensen\.claude\CLAUDE.md— operator preferences (tone, ownership, even-handedness, commercial defaults)- docs/01-VISION — engine-lineage finding, generation discipline
- docs/reference/wp-lifecycle — Phase 3 execution discipline + commit hygiene + the §End-to-end operator workflow steps 8–13
- Paired pre-flight artifact: pre-flight-WP-003-2026-06-02 — Source binary identity table + scope lock + risk review
- WP body: WP-003-pre-payload-region — §Scope + §Exit criteria + §Notes (hand-off from WP-007 + generation discipline)
- Format doc to update: docs/formats/tgifile-art — current state of the spec; the section labeled “packed/padded region” is the one this WP downgrades or replaces
- Cross-check inputs: docs/formats/scooby-exe for Showdown’s string-keyed asset resolution pattern;
tools/exes/showdown/strings-ansi.txt(gitignored, locally accessible) for candidate-name cross-check - Cache reference: tools/exes/README §Showdown —
TGIFILE.ARTcached identity (SHA-256 lock)
Pre-execution checks
Confirm each before touching files:
git status --shortreturns empty- HEAD on
mainat or after commit0eaad13(“docs: WP-003 step-4 revision — lifecycle fields + WP-007 hand-off + cache pin”) - Paired pre-flight artifact
pre-flight-WP-003-2026-06-02.mdis onmainwith verdictREADY TGIFILE.ARTSHA-256 matches the Source binary identity table in the pre-flight:Get-FileHash tools\exes\showdown\TGIFILE.ART -Algorithm SHA256→B3006E127B4EFA19CF419E92A97A8AA0A565378243CBE396ABA9707F3310C807
- Python 3 available (
py -3 --version— use thepy -3launcher, not barepython, per the WP-007 pre-flight lessons-learned note about Inkscape’s bundled Python on PATH)
If any check fails: STOP. Surface the failure; do not run hex inspection against mismatched state.
Execution rules
Scope allowlist (verbatim from pre-flight §Scope lock):
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 (gitignored under tools/samples/*):
tools/samples/tgifile-art-palette-0.bin
tools/samples/tgifile-art-prepayload-dump.bin
Forbidden:
- Game data binaries committed to git —
.gitignoreis the safety net; do not bypass engines/scooby/**— out of scopedocs/formats/files other thantgifile-art.md- Any
docs/execution-checklists/edits — none are paired with WP-003 - Reading byte ranges outside
0x0F48through0x10017EofTGIFILE.ART. Payload bytes (≥0x10017E) are WP-002 scope; header / asset entry table (0x0000–0x0F48) bytes may be read only for sanity-check cross-references to facts already locked in tgifile-art.md. - Anything outside the allowlist above
Generation discipline (REQUIRED): every Finding subsection labels its source as #### Gen 1 (Showdown). Phantom claims are forbidden — Phantom’s archive format is unverified (WP-006 territory). Cross-generation claims explicitly span (or explicitly stay scoped to Gen 1).
Copyright posture: local-only palette bin and prepayload dump under tools/samples/ are gitignored; never staged. Into docs/formats/tgifile-art.md go ONLY: byte offsets, sizes, hex-window citations, extraction recipes, and characterization prose. Do not paste raw hex blocks longer than ~64 bytes; cite offset + length + a short representative window.
Commit conventions:
docs:prefix; imperative subject under ~80 chars- Two-commit topology (per wp-lifecycle §Two-commit topology, even though this is docs-only — the close is a separable review surface):
- Commit A:
docs: WP-003 — characterize TGIFILE.ART pre-payload region - Commit B:
docs: close WP-003 — flip to ✅ Done
- Commit A:
- Body explains the why in 1–4 sentences
- Co-Author footer:
Co-Authored-By: Claude Opus 4.7 (1M context) <[email protected]>
Top risks (imperative form from pre-flight §Risk review):
- You MUST cite the SHA-256
B3006E127B4EFA19CF419E92A97A8AA0A565378243CBE396ABA9707F3310C807ofTGIFILE.ARTin the Findings header. A finding without the SHA-256 anchor is invalid. - You MUST stop hex reads at offset
0x10017Eexclusive. Any byte cited at or above0x10017Eis a scope violation; that’s WP-002 territory. - You MUST characterize the FULL byte range
0x0F48–0x10017E, not just the first thing found. Even if a palette is identified at0x0F48and ends at some offset X, the bytes from X through0x10017Estill need characterization (continued palette? padding? second table?). - If candidate asset-name strings turn up, you MUST cross-check each against
tools/exes/showdown/strings-ansi.txt(gitignored, local) per the WP-003 §Notes hand-off. Record the cross-check result for each candidate. - If a palette is extracted to
tools/samples/tgifile-art-palette-0.bin, the Findings entry MUST include the byte-offset extraction recipe (start, length, post-processing if any) so a future operator can regenerate the bin from the SHA-256-lockedTGIFILE.ART. The bin is local-only; the recipe is the committed reproducibility surface.
Session task
Execute WP-003 §Scope in this order:
-
Sanity-check the cached binary. Read the first 16 bytes of
tools/exes/showdown/TGIFILE.ARTand confirm the group count (uint32LEat offset0x0000= 69) and the asset entry count (uint32LEat offset0x011C= 453) match the values currently locked in tgifile-art.md. If either differs, STOP — the cached file is not what the format doc expects; the SHA-256 lock alone may be insufficient. -
Resolve the 4-byte gap at
0x0118–0x011B. Read these 4 bytes in hex. Likely outcomes: (a) zero padding (record as such), (b) unidentified field (record the hex value verbatim; future Ghidra session may explain it), (c) the asset entry count is actually at0x0118not0x011Cand tgifile-art.md has the offset wrong by 4 (record + update the spec). Document in tgifile-art.md Findings under a small “4-byte gap at0x0118” subsection. - First pass — region characterization (high-level). Read the full 1,045,046-byte range
0x0F48–0x10017Einto memory (PythonPath.read_bytes+ slice, or any hex viewer’s go-to-offset + select). Compute:- Byte-value histogram — long runs of
0x00indicate padding; uniform distribution suggests compressed or structured data - First non-zero byte after
0x0F48(the structure-start offset) - Last non-zero byte before
0x10017E(the structure-end offset) - Any periodic structure — try strides of 3, 4, 6, 768, 1024 (palette candidates) and 8, 12, 16 (entry-table candidates)
- Byte-value histogram — long runs of
- Targeted hypothesis checks in order, each citing offset + hex window + verdict:
- Palette hypothesis A — 256-entry RGB (768 bytes): is there a contiguous 768-byte run at any offset in the region where bytes look like color values (no extreme outliers, plausible gradients)?
- Palette hypothesis B — 256-entry RGBA (1024 bytes): same check at stride 4
- Palette hypothesis C — multiple palettes: does the region contain multiple 768-byte or 1024-byte blocks at regular strides?
- Name table hypothesis: does the region contain ASCII strings ≥ 6 chars? If yes, sample a handful and cross-check against
tools/exes/showdown/strings-ansi.txt(WP-007 dump). A candidate appearing in both is a strong signal; appearing only in TGIFILE.ART is a weaker signal (the name table might be data-local rather than code-referenced). - Frame metadata hypothesis: is there entry-shaped data (fixed-stride records) that could be per-asset metadata (width, height, palette index, frame count)?
- Author Findings in tgifile-art.md per WP-003 §Exit criteria:
- Replace or downgrade the “packed/padded region” label with concrete characterization
- One subsection per identified structure (palette, name table, metadata, padding), each citing byte offset + length + hex window + cross-check result
- The full byte range
0x0F48–0x10017Emust be accounted for — no gaps in the characterization. If a sub-region is genuinely padding, say so and characterize why (alignment boundary, sector-multiple, etc.) with byte-citation evidence. - If a palette is identified: extract to
tools/samples/tgifile-art-palette-0.bin(local-only); record the byte-offset extraction recipe + the bin’s SHA-256 in the Findings entry. - The 4-byte gap at
0x0118is resolved (step 2 above).
-
Commit work as Commit A (
docs: WP-003 — characterize TGIFILE.ART pre-payload region). - Update WORK_INDEX — flip WP-003’s Status to ✅ Done. Annotate downstream rows (WP-001 EC-001 palette-hunt scope reduction; WP-002 first-decode strategy if palette was found). Update §Current state pointer. Commit as Commit B (
docs: close WP-003 — flip to ✅ Done).
Outputs this session MUST produce:
- Updated
docs/formats/tgifile-art.mdwith Findings characterizing the full0x0F48–0x10017Erange, the 4-byte gap at0x0118resolved, SHA-256 of sourceTGIFILE.ARTcited - Updated
docs/work-packets/WORK_INDEX.mdwith WP-003 row at ✅ Done + downstream annotations - Updated
docs/work-packets/WP-003-pre-payload-region.mdbody with Status → ✅ Done, actual effort recorded, Findings-landed links - Updated
docs/reference/pre-flight-WP-003-2026-06-02.md§Lessons learned (one line or “No lessons learned”) - Local-only (gitignored):
tools/samples/tgifile-art-palette-0.binif a palette is found
Outputs this session MUST NOT produce (sprawl guard — log as follow-up candidates instead):
- Ghidra annotations or
.gprwork (WP-001) - Payload decoding (WP-002) — any read at or above
0x10017Eis a scope violation - Phantom-specific claims (WP-006 territory)
- Format-doc updates outside
tgifile-art.md— even if the strings cross-check surfaces a finding that touchesscooby-exe.md, leave that for a follow-up - Edits to EC-001 — the WP-003 / WP-001 hand-off is documented in WP-003 §Notes; EC-001 itself isn’t touched here
Close ritual
When all WP-003 §Exit criteria are satisfied:
- Confirm outputs landed. Every file in the §Scope lock allowlist has the expected change. Verify the Findings section in
tgifile-art.mdcharacterizes the full byte range with no gaps, the 4-byte gap at0x0118is resolved, and (if applicable) the palette extraction recipe is documented in enough detail to regenerate the local bin. - Confirm raw extracts gitignored.
git diff --cached --name-onlyshows zerotools/samples/**content files. - Verify the two-commit topology is on
main(or on a branch if one was used — direct-to-main is the WP-007 precedent for docs-only WPs). Commit A = findings; Commit B = WORK_INDEX flip. - Propagate to dependent WPs. WP-001 and WP-002 both cite WP-003 as a “recommended” prerequisite — note in WORK_INDEX §Current state that the WP-003 baseline is now landed, and if a palette was found, update WP-002’s first-decode-strategy line directly.
- Update the lessons-learned section of the pre-flight artifact — either “No lessons learned” if execution was clean, or one line on any preventable gap pre-flight should have caught.
- Push to
origin/main(per the wp-lifecycle triage off-ramp fix — direct-to-main commits don’t squash-merge themselves;git push origin mainis required for GitHub Pages to rebuild). - Report back to operator. State: outputs landed, exit criteria satisfied, status flipped, pushed. Surface any anomalies that came up but didn’t fit existing WP/EC scope as follow-up WP candidates.
If any §Exit criterion is NOT met: WP-003 stays 🚧 In Progress. Do NOT flip WORK_INDEX. Document what’s open in WP §Notes and report back honestly.