- 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.
tools/
Everything under tools/ that this project wrote — the extractor, the byte gate, the matching harness, the campaign
machinery, the audits, the Ghidra scripts, the public-flip rewrite package — is licensed under the GNU Affero General
Public License v3.0 (the repository's LICENSE). There are no per-file license headers; this statement covers them.
Third-party pieces under tools/ keep their own licenses and are listed in the top-level THIRD_PARTY.md:
tools/brave-CUE/ (GPL-3.0, vendored source), the pinned submodules tools/maspsx (MIT), tools/decomp-permuter
(MIT), tools/asm-differ (Unlicense) and tools/m2c (GPL-3.0), and the gcc-2.7.2 compiler tarballs under tools/bin/
(GCC, GPL). The Sony SDK directory tools/psyq/ is never part of the repository — it is user-supplied and gitignored.
Where each tool fits and how to run it: docs/SETUP.md ("Tooling inventory"), docs/wave-playbook.md (the matching
procedure) and docs/public-flip-runbook.md (the publication procedure).