Files
BFM-decomp/tools
Drew T df99a71732 fix(tools): jtbl_family_bank reported "gate-fail" with no reason — the third missing-payload defect today
`last_err` was only ever set when a STAGE failed to produce a candidate. A candidate that built to
the wrong bytes — i.e. the actual gate rejection — recorded nothing, so every caller saw a bare
"gate-fail" and the failure was unroutable (measured: wave 6's 13 sibling failures could not be
classified at all). Now captures the build's hard diagnostics, keeping BOTH ends of the line so the
symbol survives (never left-truncate — same fix as harvest_verify.classify_fail earlier today), and
says "built, bytes differ (genuine DIFF)" when there is no diagnostic.

Third instance of one defect class this session: a tool reporting an OUTCOME without the EVIDENCE
that routes it (harvest_verify.classify_fail truncating the symbol away; .run/s6f_gate.py booking a
crashed child as silence; this). All three were quietly converting recoverable plumbing into
apparent walls.

Also adds .run/jr_family_sweep.py — the S2 front end for the has_mid_jr matched-exemplar families
that family_sweep --hseq refuses BY DESIGN (§53). Families are DERIVED from the map and looked up by
EXEMPLAR (a just-banked head leaves the `members` array — that cost a round earlier today), members
re-checked against corpus.stubs, --raw passed when a seed exists, and it commits per family because
jtbl_family_bank requires a clean tree between families.
2026-08-04 19:31:33 -06:00
..