fix(draw_waves): normalise exclude rows to (binary, fn) — the list was excluding NOTHING

My own regression from the same session: exclude_audit.parse now returns 4-tuples (it
carries the WALL pin and each entry's note), and draw_waves built `skip` straight from
them, so every membership test against a 2-tuple missed and the exclude list had no
effect at all — while the run reported success.

Caught by MEASURING the pool rather than trusting the run: it came back 88 non-main + 45
main = the full frontier, when a 25-entry list should have reduced it. Now 69 and 41,
which reconciles exactly (88 - 16 carve-blocked - 3 non-main walls; 45 - 4 open main
walls, PopMatrix/PushMatrix being linked and already refused).

The silently-narrowed-scope shape again, and the third time this session that counting
the RESULT rather than trusting the REPORT is what caught it.
This commit is contained in:
Drew T
2026-09-02 14:55:15 -06:00
parent ca7102e3b6
commit e830e63be5
+5 -1
View File
@@ -179,7 +179,11 @@ def main():
sys.exit(msg + "\n (--exclude-stale-ok to draw anyway)")
print(msg + "\n --exclude-stale-ok given: proceeding, and ignoring those entries.")
ex_rows = [(b, f) for b, f, k, _ in classified if k not in EA.STALE]
skip = set(ex_rows)
# NORMALISE TO (binary, fn). `exclude_audit.parse` returns 4-tuples (it carries the WALL pin
# and the entry's note), and the membership tests below are 2-tuples — building `skip` from the
# raw rows silently matched NOTHING and excluded NOTHING while reporting success. Caught by
# measuring the pool instead of trusting the run: it came back 88+45 = the FULL frontier.
skip = {(b, f) for b, f, *_ in ex_rows}
bins = sorted(os.path.basename(p) for p in glob.glob('src/*') if os.path.isdir(p))
if a.only_main: