From ab0bbd257b143ccbb1fa279bbad08fac4df34820 Mon Sep 17 00:00:00 2001 From: Drew T <50529377+Druthulu@users.noreply.github.com> Date: Wed, 2 Sep 2026 14:39:55 -0600 Subject: [PATCH] =?UTF-8?q?docs(phase-31):=20S72=20addendum=202=20?= =?UTF-8?q?=E2=80=94=20exclude=20list=20regenerated,=20draw=20refuses=20a?= =?UTF-8?q?=20stale=20one?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 88 of 107 entries were stale one day after the list was written; 46 of them were 12,750 instructions of open drawable work including SaveLoadRoutine. Canonical list is now config/wave_exclude.txt (19 entries), and draw_waves --exclude-file audits it as a prerequisite. --- phase-ends/CURRENT_PHASE.md | 38 +++++++++++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) diff --git a/phase-ends/CURRENT_PHASE.md b/phase-ends/CURRENT_PHASE.md index 849e8f26e..2142992ae 100644 --- a/phase-ends/CURRENT_PHASE.md +++ b/phase-ends/CURRENT_PHASE.md @@ -6208,3 +6208,41 @@ hardcoded `src/800.c` and saw 133 of 187 typedefs after the split; playbook 1c s were NOT drawable; cookbook §426 still listed the split as future work; `config/dedup.us.yaml` and `src/shared/clearTbl40.h` both named `src/800.c` for a group now in `src/800_c.c`. **The honest gap: that was a grep audit, and nothing gates "every consumer knows main's TU list."** + +--- + +## S72 ADDENDUM 2 — the exclude list is regenerated, and the draw now REFUSES a stale one + +**Done, per Drew: regenerate it, and wire the check into the draw as a prerequisite so it is never +skipped again.** + +**`config/wave_exclude.txt` is now THE canonical list — tracked, regenerated, never hand-edited.** +There had been NINE snapshot copies under gitignored `.run/` with no way to tell which was current; +that accumulation IS the staleness problem. `CARVE-BLOCKED` entries are derived (`split_indicator`) +and vanish when the subseg is split; `WALL` entries are curated and cannot be re-derived, which is +why the file has to be tracked at all. + +**`tools/exclude_audit.py` (NEW)** classifies each entry by its CURRENT blocker: +`BANKED` · `LINKED` · `RE-PROBE` (its blocker has since been fixed) · `CARVE-BLOCKED` · `WALL`, +and `--write` regenerates keeping only the still-valid classes. + +**`draw_waves --exclude-file` runs that audit as a PREREQUISITE and exits non-zero on a stale +list**, naming the counts and the regenerate command. `--exclude-stale-ok` still draws but prints +what it ignores — skipping is possible, never silent. Verified in all three directions (stale +rc=1 · fresh rc=0 · override proceeds and announces). + +**What it was hiding.** `.run/S71_exclude.txt`, ONE DAY after it was written: + +| class | n | | +|---|---|---| +| RE-PROBE | 46 | **12,750 instructions of open, drawable work** — incl. `main:SaveLoadRoutine` (1,165), `func_8003388C` (671), `md_MAIN_011:func_800CF28C` (588), `md_SC07_004:func_801A2400` (541) | +| BANKED | 28 | dead entries (14 of them banked this session) | +| LINKED | 14 | PsyQ symbols that were never matching targets | +| CARVE-BLOCKED | 16 | still real — the 4 overlays `split_indicator` found | +| WALL | 3 | curated compiler facts, kept | + +**88 of 107 entries were wrong.** The regenerated list is **19**. + +**Next draw:** `python3 tools/draw_waves.py --prefix .run/_ --waves 1 --per-wave N +--exclude-file config/wave_exclude.txt --ledger ` (the standing ledger holds ~1,700 keys and +leaves ~1 undrawn target fleet-wide — always draw with a fresh ledger).