Files
BFM-decomp/tools/wave
Drew T 79b7ff2cbf chore(phase-30 S49): wave 7b — adapt lane scaled, 44 banked (92% MATCH->bank); the TU-spread law
- thresholds relaxed to <=6 blocks/<=16 tokens UNION edit-fraction <=0.20: cards 518 -> 721,
  MIXED 310 -> 50 skeletons; the 753-ins func_8017BEBC (0.987 sim) became reachable.
- 59 cards -> 48 agent-MATCH (81%) -> 44 BANKED (92% MATCH->bank, 75% end-to-end), 6.9M tok.
- FINDING (the actionable one): 7b's bank rate crushed 7a's because it SPREAD 48 drafts over 35
  destination TUs; 7a's failures were per-TU declaration collisions between sibling drafts.
  Cookbook §169 updated with the spread law.
- R22 213/213 BYTE-IDENTICAL from clean; fleet 96.55% fn / 95.2% instr / 89.9% distinct;
  stubs 12,584 -> 12,535; dedup 2,035/0.
- incidents 3 & 4 recorded: an agent wrote a TRACKED header (guard caught it, prose is not
  enforcement); my own gate_lane filtered on the wrong key and printed 'gating 0 drafts' as a
  result (R32 silent skip) — fixed with a coverage assertion that refuses to report 0.
2026-08-13 11:50:04 -06:00
..

tools/wave — the crack-wave harness (P30 S48)

crack_wave.js is the CURRENT wave script, kept in the repo because it encodes contracts that were paid for in real failures. Invoke with Workflow({scriptPath: "tools/wave/crack_wave.js", args:[…]}) where each arg is {name, binary, sub, nins, reach, jr, model, prior}.

Contracts it encodes — do not drop these when editing:

  • Per-agent output dir .run/waveN/<fn>/, and "never delete or modify anything outside your own directory, do not clean up". Wave 2 shared one directory and later agents deleted earlier agents' drafts: 21 adversarially-VERIFIED cracks vanished. (They were all recovered from the run transcripts by tools/recover_drafts.py — but only because the transcript is the backup.)
  • The verifier re-runs sha1sum LAST, after the gate, and reports it separately, so a draft that vanishes mid-run is DETECTED rather than trusted.
  • Prior-notes seeding. A target that previously failed is re-run WITH ITS PREDECESSOR'S MEASURED RESIDUAL (.run/jr48/prior_notes.json). Measured 7/9 (wave 3) and 10/12 (wave 4). NEAR is a cheap RESUMABLE state, not a write-off.
  • The cookbook citation list must name every banked block (§160-§164 today). Idioms are harvested after every wave precisely so the NEXT wave's agents start with them; a stale citation list silently wastes that.
  • Size-routing haiku ≤30 ins / sonnet ≤120 / opus above. Wave 2 (20 of 28 Sonnet) beat the all-Opus wave 1 on bank rate.

Bank rate to date: 67% → 79% → 69% → 68% of cracks survive the whole-binary gate.

adapt_wave.js — the micro-adapt lane (P30 S49)

Cheap-tier companion to crack_wave.js for the COUSIN tier (cookbook §168): members that differ from an already-matched body by ≤3 blocks / ≤6 tokens (family_cousins.py --adapt-cards → .run/adapt_cards.json). The prompt is an EDIT contract, not a crack: copy the seed body, take the symbol surface from the TARGET .s, apply the minimal semantic edit the measured diff implies (usually a constant whose value is readable in the card's member words), iterate under match_one. Same paid-for contracts as crack_wave: per-agent dirs, sha1-last verify, UNVERIFIED ≠ refuted, never touch outside your own dir. Routing: haiku ≤60 ins / sonnet above (the edit is small even when the body is not). Invoke: Workflow({scriptPath:"tools/wave/adapt_wave.js", args:[{wave:"wave7a"}, ...cards]}). Pilot-first (R37): ~30 cards, measure the bank rate, then batch.