Files
BFM-decomp/cookbook/C0100.md
T

2.8 KiB

§89 — Two throughput rules the project already had written down and was not following (Phase 29 SESSION-20)

Neither of these is a new capability. Both are cases where the tool or the rule already existed and the practice had drifted — which is worth recording precisely because that is the hardest kind of waste to notice from inside a session.

§89a — MEASURE the write set; do not assert its tier (tools/blast_radius.py)

§63's T0/T1/T2 taxonomy has existed since Phase 26 and was never enforced. Both failure directions were measured in one session:

  • Over-verification: ~13 full clean-fleet R22 runs (~15 min each), most for batches that were provably T1 (src/<binary>/** only). Hours of serialised wall-clock proving what the written rule already guaranteed.
  • Under-verification — the dangerous half: the §85 return-type widen was believed contained to one overlay and broke ov_SC01_077 (R22 139/140); gate_stage's ARITY pre-pass silently rewrote caller decls in 40 TUs. In both cases the write set was LARGER than the belief about it. A tier is a CLAIM. blast_radius.py --expect t1 --binary <b> turns it into a MEASUREMENT and exits non-zero when the tree disagrees. Negative-controlled on all four cases, including the §85 shape. Coverage asserted (R32): an unclassified path exits 2 and names itself.

§89b — the parallel gate farm existed; the family path could not reach it (tools/sweep_parallel.py)

bulk_harvest Phase B has been a ProcessPoolExecutor over DISTINCT binaries (per-binary flock, per-worker result files, compute_fleet=False) since Phase 23 — but welded to Phase A's LLM drafting. Family sweeps stage their drafts a different way (family_sweep --stage-only), so the farm was unreachable from that path, and SESSION-20 gated 389 + 268 + 104 members serially (for ov in …; do gate_stage …; done) — roughly an 8-16x throughput loss on a 32-thread box, for no architectural reason. sweep_parallel.py is a thin adapter: same gate_stage.run_gate, same per-binary lock, no new gate logic. It also filters the phantom-dir bug at the source: a bare .run/sweep/*/ glob matches gate_stage's own intermediate ladder dirs (-cn, -cn-cast, -cn-cast-rc, -s2in, -s2in-uni) and calls them as binaries — 24 phantom PARTIAL 0/1 lines that inflated one run's notbanked from 0 to 56. Require config/splat.<bin>.yaml to exist (R33/R36: derive the binary set, never glob it).

The standing sequence

family_sweep --stage-only  →  sweep_parallel.py -j 12  →  blast_radius.py
     T2? → R22 clean-fleet mandatory        T1? → the per-binary gates already ran; commit

Parallelism changes THROUGHPUT, never the verdict — the whole-binary byte-gate is still the sole arbiter (G3/P9) and still reverts a wrong draft in its own binary.