From 4f66709adee1da777e6600ef0bb4b459b05c43e4 Mon Sep 17 00:00:00 2001 From: Drew T <50529377+Druthulu@users.noreply.github.com> Date: Wed, 2 Sep 2026 14:39:09 -0600 Subject: [PATCH] chore(exclude): promote the wave exclude list to config/wave_exclude.txt MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit There were NINE session-snapshot copies under .run/ and no way to tell which was current — the accumulation smell behind the whole staleness problem. This is the one, it is tracked, and it is regenerated rather than hand-edited. .run/ is gitignored scratch, which is the wrong home for it: CARVE-BLOCKED entries are derived and vanish when the subseg is split, but WALL entries are CURATED and cannot be re-derived — that is precisely why the file needs to be tracked. --- .../wave_exclude.txt | 20 +++++++++++++++---- docs/wave-playbook.md | 4 ++-- 2 files changed, 18 insertions(+), 6 deletions(-) rename .run/S72_exclude.txt => config/wave_exclude.txt (63%) diff --git a/.run/S72_exclude.txt b/config/wave_exclude.txt similarity index 63% rename from .run/S72_exclude.txt rename to config/wave_exclude.txt index 51733070b..56a365764 100644 --- a/.run/S72_exclude.txt +++ b/config/wave_exclude.txt @@ -1,7 +1,19 @@ -# regenerated by tools/exclude_audit.py from .run/S71_exclude.txt -# 19 still-valid of 107; 88 dropped as stale (banked / linked / blocker-since-fixed). -# An exclude list records what the TOOLING could not do — regenerate it as -# part of every tool fix, or it becomes a list of work you decided not to do. +# config/wave_exclude.txt — THE canonical wave exclude list. (P31 S72) +# +# There were NINE session-snapshot copies of this under .run/ and no way to tell which was current; +# this is the one, it is TRACKED, and it is regenerated rather than hand-edited: +# +# tools/exclude_audit.py config/wave_exclude.txt --write config/wave_exclude.txt.new +# +# `draw_waves --exclude-file config/wave_exclude.txt` AUDITS it first and REFUSES to draw if any +# entry is stale (--exclude-stale-ok overrides, loudly). Regenerate as part of every tool fix: an +# exclude list records what the TOOLING could not do, and becomes a list of work you decided not +# to do the moment the tooling improves. Measured on its predecessor one day after it was written: +# 88 of 107 entries stale, 46 of them open drawable functions totalling 12,750 instructions. +# +# CARVE-BLOCKED entries are DERIVED (tools/split_indicator.py) and disappear when the subseg is +# split. WALL entries are CURATED — they cannot be re-derived, so they are the reason this file is +# tracked; each should carry the refutation list that would have to be beaten to reopen it. main:func_8005D9C4 # WALL: no jump table — curated compiler fact, not a tooling limit main:func_8005ECC0 # WALL: no jump table — curated compiler fact, not a tooling limit main:func_80062144 # WALL: no jump table — curated compiler fact, not a tooling limit diff --git a/docs/wave-playbook.md b/docs/wave-playbook.md index 62d500eaa..e03f4ac09 100644 --- a/docs/wave-playbook.md +++ b/docs/wave-playbook.md @@ -34,7 +34,7 @@ python3 tools/draw_waves.py --only-main --prefix .run/m_ --waves 1 --per-w * **`--prefix` IS A RELATIVE PATH.** `--prefix s67o` writes `./s67o1/` into the repo root, not `.run/`. Always pass `.run/_`. * **THE EXCLUDE LIST IS AUDITED BEFORE THE DRAW, AND A STALE ONE IS REFUSED (P31 S72).** Pass it as - `--exclude-file .run/_exclude.txt`; `draw_waves` classifies every entry against the CURRENT + `--exclude-file config/wave_exclude.txt`; `draw_waves` classifies every entry against the CURRENT tooling and **exits non-zero** if any is stale, naming the count and the regenerate command. `--exclude-stale-ok` still draws, but prints what it is ignoring — skipping is possible, never silent. Regenerate with `tools/exclude_audit.py --write `. @@ -43,7 +43,7 @@ python3 tools/draw_waves.py --only-main --prefix .run/m_ --waves 1 --per-w > — 28 already banked, 14 linked PsyQ symbols that were never targets, and **46 whose blocker had > since been fixed**. Those 46 are **12,750 instructions of open, drawable work**, including > `main:SaveLoadRoutine` (1,165), the largest function left in main. A list that filters them out - > costs more than it saves. Current list: **`.run/S72_exclude.txt` (19 entries)**. + > costs more than it saves. Current list: **`config/wave_exclude.txt` (19 entries)**. * **The exclude list is not optional.** It carries two populations that no model can bank: * **96 jtbl functions whose carve plan `build_carve` REFUSES** (non-contiguous same-subseg