Files
Going-Commando/docs
ReaperOfVeriod 1e90c7de6d Verify the Phase 2 gate, and give every blocked item an unblock condition
Starting from the phase's stated exit criteria rather than the checklist, because
"complete" should mean the gate, not the feeling of the list.

THE GATE IS MET. Both halves, checked by inspection:

  * Golden tests. Every module in gc-formats/src is referenced by a test or another
    module's test path; none is unreferenced. gc-extract/tests/disc.rs carries 50
    real-disc tests, and overlay_reloc's mask test resolves a level-01 function on
    all 26 other overlays.

  * Counts are failures, not warnings. No parser writes warning-style output
    outside #[cfg(test)] -- the only eprintln! calls in gc-formats are inside test
    modules. Count and length problems surface as typed errors: 42 uses of
    ErrorKind::Invalid / InvalidLength, including global_wad's "pair table is not a
    whole number of entries", which is precisely a header count disagreeing with
    the data.

THE GOAL IS NOT MET, and saying otherwise would be the thing AGENTS.md forbids.

The goal reads "every asset type parses into plain Rust values". Four do not:
collision cells, volumes, moby_anim and the tfrag morph are located or framed but
have no decoded fields. The gate was written to be checkable and it does not test
for that, which is a gap in the gate rather than a reason to declare victory.

So the remaining gap in the phase's own discipline is that the four blocked items
did not say what would unblock them, which AGENTS.md requires and which none of
them did. Closed now, each with the specific unblock condition:

  collision cells  the game addresses its assert string by something other than a
                   $gp-relative load -- a %hi/%lo split that does not straddle
                   zero, a pointer table, or another section. A plain $gp search
                   returns zero and always will.
  volumes          ground truth: a count of level 0's trigger volumes from a map,
                   to match against the 144-byte table's population. No class name
                   containing "volume" exists on the disc, so the dispatch route is
                   closed.
  moby_anim        needs moby class records decoded past the header -- a
                   dependency, not a measurement.
  tfrag morph      needs a frame captured at a KNOWN camera distance, so the
                   expected blend is computable. Requires driving the running game,
                   not analysing a static savestate.

None of these is an approximation, and none is marked done.

258 tests, 50 in the disc suite, clippy clean on my own code.
2026-10-14 02:52:09 +02:00
..