Files
BFM-decomp/phase-ends
Drew T 161d36cf36 phase-36: argcheck (the missing-argument census), a10's verdict downgraded on Drew's challenge, and R14's documented premise corrected on bytes
- tools/argcheck.py: every call site whose in-scope declaration is narrower than the callee's real definition. 15,626
  definitions read; 110,478 narrower declarations over 1,912 callees (86,701 K&R-empty, 23,777 positively narrow);
  471 of them sit in a body that still holds a NEEDED $4-$7 pin — 323 bodies, the targeted draw, written to
  .run/P36/engine/argcheck_draw.tsv.
  Checked against the six agent cracks it was built from: it finds a7, a12 and a25, and it CANNOT find a13, whose
  function is declared (void) in 131 of 138 sites AND defined (void) — a declaration comparison is blind to a definition
  that is uniformly wrong. The census is a lower bound and the residual stays the oracle; the docstring says so.
  Corrected before use: the scope column says which FIX is available, not whether the body can be banked — the cast route
  is body-only at either scope (a7 closed a file-scope case that way).

- Drew challenged a10's 'needed by construction' verdict: nobody wrote the pin, so a plain-C spelling must exist. He is
  right and the verdict is downgraded to its real scope — no spelling reaches the bytes in that TU's CURRENT declaration
  environment. That environment is demonstrably wrong there: the file declares extern s32 func_801789AC(s32 arg0) while
  the body calls it through a cast that drops the argument, the same class six agents cracked today. Restoring it was
  tested at once and scores 3, not 0, so it is not the whole answer — but a verdict taken inside a distorted environment
  is not a property of the function. func_80178970 moves to the structs/types phase list rather than being marked
  permanent, with its reading attached.

- R14's documented premise corrected on bytes (agent a15): MIPS defines only PROMOTE_PROTOTYPES, not PROMOTE_MODE
  (config/mips/mips.h:1153), so a narrowed parameter stays HImode and the extension still happens at the use. R14's
  banked closes stand on their bytes, not on that rationale.
2026-09-10 10:53:20 -06:00
..

phase-ends/ — the living record

  • PhaseEnd_Phase[N].md — written at each phase boundary (format defined in PROJECT_CONTEXT.md). Append-only history: build log, deviations, commit message, rules added, changelog. Never deleted.
  • CURRENT_PHASE.md — the in-phase autonomous log: approved phase plan, per-task checkboxes, current task pointer, blockers. Created at phase start, updated after every task, absorbed into the PhaseEnd file and deleted at phase close. This is the crash/compaction recovery point.
  • DIGEST.md — the session-start digest: every phase's synopsis + every rule in full + the corrections to PROJECT_CONTEXT.md; appended at every PhaseEnd (P7).
  • logs/Phase<N>.md — the archived in-phase worklogs (R19): NOT in the load order; consult on demand only.
  • Sessions read PROJECT_CONTEXT.md, then DIGEST.md, then the THREE most recent PhaseEnd_*.md in numeric order, then CURRENT_PHASE.md (if present), and replay its 🛑 SESSION CHECKPOINT block verbatim into the chat — every session (R64 candidate, 2026-09-05; ≈100k tokens + the checkpoint).