From fdb5813fc199f503d3cde87b896fa557fa6b62b2 Mon Sep 17 00:00:00 2001
From: Drew T <50529377+Druthulu@users.noreply.github.com>
Date: Mon, 3 Aug 2026 09:32:36 -0600
Subject: [PATCH] =?UTF-8?q?docs(phase-30=20S7):=20S6c=20banked=20=C3=9712?=
=?UTF-8?q?=20(all=20in=20the=20P27=20SC07=20quartet);=20blockers=20classi?=
=?UTF-8?q?fied=207/3;=20=C2=A7136a?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
- S6c (deterministic, ~0 agent tokens): 12 sibling banks across 3 of 9 jr zero-crack families
(func_80178D40 890ins 4/4, func_801734BC 4/4, func_8012ACE0 4/4). The other 6 are ledgered:
5 gate-fail (genuine byte DIFF) + 1 carve-fail (span table starts do not fit the span).
R22 clean-fleet 140/140 over the whole S6c series.
- FINDING: all 12 banks landed in ov_SC07_006/007/010/011 — the four overlays P27 discovered and
P28 made citizens (R36). P28 drained their h_exact backlog via dedup_extend; the jr/h_seq
propagation lane was still owed. R14 GUARD AGAINST OVER-READING IT: the quartet are the top four
overlays by remaining zero-crack residue (2,190-2,355 ins each vs 500-870 typical) but hold only
7% of the 2,114 remaining slots — a per-overlay priority signal, NOT a bulk lever.
- BLOCKER CAPTURE for the 10 wave-4a gate failures -> .run/s7_blockers.json: 7 PLUMBING (all
`conflicting types for func_X`) / 3 genuine byte-DIFF. 70% of "the gate refused" is declaration
paperwork. New tool .run/s7_capture.py (any overlay/any draft dir; reverts the TU in a finally:).
- MY DEFECT, FIXED AND DISTILLED (§136a): the capture tool first classified on the EXIT STATUS, so
its `rc == 0 => byte DIFF` branch was UNREACHABLE — `make build` runs `check`, so a draft that
compiles perfectly and merely differs in bytes also exits non-zero, and all 3 real DIFFs were
filed as "unknown". Now classifies on the OUTPUT ([FAIL]/got/want vs a non-warning error line);
the warning-exclusion matters because `conflicting types` also appears benignly for builtins.
- Also probe-discipline: my first S6c probe reported 1/9, which was 1 bank + 8 CORRECT REFUSALS —
jtbl_family_bank refuses on a dirty config/+src/ (its per-sibling revert restores from HEAD).
Driver now commits between families. A uniform failure across N functions is a statement about
the mechanism, not the functions (§134).
- cookbook-index 364 -> 371 sections, --check green. CURRENT_PHASE SESSION-31 checkpoint refreshed
with the queue re-derived at HEAD (the S30 ROI-floor trigger stays REFUTED — do not close on it).
---
docs/cookbook-index.md | 6 +-
docs/family-hseq.md | 36 +++++------
docs/matching-cookbook.md | 26 ++++++++
docs/progress.fleet.md | 20 +++----
phase-ends/CURRENT_PHASE.md | 115 +++++++++++++++++++++++++++++++++++-
5 files changed, 172 insertions(+), 31 deletions(-)
diff --git a/docs/cookbook-index.md b/docs/cookbook-index.md
index 2c234b54c..cb02bd488 100644
--- a/docs/cookbook-index.md
+++ b/docs/cookbook-index.md
@@ -2,7 +2,7 @@
> **Generated by `tools/cookbook_index.py` — do not hand-edit** (R33). Regenerate after adding a cookbook section.
>
-> `docs/matching-cookbook.md` is ~716 KB / 370 sections. Grepping it blind is how three P30 wave-1 agents each "discovered" an idiom that was already written down. **Start here, then read the section.** A section appears under every symptom it addresses.
+> `docs/matching-cookbook.md` is ~716 KB / 371 sections. Grepping it blind is how three P30 wave-1 agents each "discovered" an idiom that was already written down. **Start here, then read the section.** A section appears under every symptom it addresses.
**How to use:** name what you SEE in the diff (a stolen delay slot, an extra `la`, a swapped register pair, a `conflicting types` error), find that symptom below, read those sections first. If nothing fits, THEN grind — and add a section when you win.
@@ -516,7 +516,7 @@
- **§3-The** — meta-lesson L8250
- **Wave** — economics (measured, for the next batch's sizing) L8943
-### (unbucketed — title matched no symptom vocabulary) (103)
+### (unbucketed — title matched no symptom vocabulary) (104)
- **§3-How** — to use this L30
- **§1** — Idiom catalog (asm pattern → C that produces it) L39
@@ -621,6 +621,7 @@
- **§3-The** — codegen idioms L8763
- **§3-The** — wave shape that produced these L8812
- **§136** — The LOCAL-VARIABLE lever: how many C locals, at what scope (P30 wave 4a, 25 byte-verified banks) L8830
+- **§136a** — Blocker capture: classify on the OUTPUT, never on the exit status L8966
## All sections, in order
@@ -995,3 +996,4 @@
- **§3-The** — scheduling rules (refining §135-2 and §135-4) L8902
- **§3-The** — declaration surface (integration, not codegen) L8931
- **Wave** — economics (measured, for the next batch's sizing) L8943
+- **§136a** — Blocker capture: classify on the OUTPUT, never on the exit status L8966
diff --git a/docs/family-hseq.md b/docs/family-hseq.md
index db458de4a..aa294ad42 100644
--- a/docs/family-hseq.md
+++ b/docs/family-hseq.md
@@ -2,13 +2,13 @@
> Generated by `tools/family_hseq.py` from the 138 overlay sigs + per-overlay src stubs. Ranked by TEMPLATABLE byte-weight (PURE+IMM members × nins × 4). The byte-gate is the arbiter.
>
-> **Scope: the 138 OVERLAYS only** (no main, no resident) · generated at HEAD `commit:1354` · stub set derived from `corpus.stubs` — the same oracle `progress.py` counts, so same-tree overlay totals agree by construction; compare digests only at the same HEAD.
+> **Scope: the 138 OVERLAYS only** (no main, no resident) · generated at HEAD `commit:1358` · stub set derived from `corpus.stubs` — the same oracle `progress.py` counts, so same-tree overlay totals agree by construction; compare digests only at the same HEAD.
-**Fleet (overlays):** 95.7% fn / 92.9% instr / 86.5% distinct-code matched. Unmatched: 15,138 instances / 933,914 ins (11,496 distinct classes).
+**Fleet (overlays):** 95.8% fn / 93.0% instr / 86.9% distinct-code matched. Unmatched: 14,884 instances / 911,088 ins (11,262 distinct classes).
-**Tail cross-check (Phase-25 close):** 8,678 tail fns / 422,483 ins → 463 h_seq families ≥2, **125 substantial (nins≥80) / 113,566 ins**.
+**Tail cross-check (Phase-25 close):** 8,641 tail fns / 418,067 ins → 460 h_seq families ≥2, **122 substantial (nins≥80) / 109,184 ins**.
-**Full frontier (all unmatched by h_seq):** 2242 target families (≥2 members or a matched sibling) + 3767 singletons (Step-D residue). Substantial: **451 families / 410,083 templatable ins**, 32 with a matched sibling (zero-crack). Substantial member classes: 2,388 PURE · 31 IMM · 6 STRUCT-excluded.
+**Full frontier (all unmatched by h_seq):** 2223 target families (≥2 members or a matched sibling) + 3767 singletons (Step-D residue). Substantial: **439 families / 392,870 templatable ins**, 20 with a matched sibling (zero-crack). Substantial member classes: 2,218 PURE · 31 IMM · 6 STRUCT-excluded.
## Top substantial families (by templatable byte-weight)
@@ -27,20 +27,20 @@
| 10 | 246 | 16 (16/0/0) | 6/16 | cross-address | PURE | 0 | · | 0x8017c294 draft-ov077 | 3,936 |
| 11 | 766 | 5 (5/0/0) | 3/5 | cross-address | PURE | 0 | · | 0x8017df84 modal | 3,830 |
| 12 | 328 | 11 (11/0/0) | 11/11 | scattered | PURE | 0 | · | 0x801833f0 modal | 3,608 |
-| 13 | 890 | 4 (4/0/0) | 1/4 | per-location | PURE | 134 | Y | 0x80178d40 matched-ov077 | 3,560 |
-| 14 | 237 | 15 (15/0/0) | 15/15 | scattered | PURE | 0 | · | 0x801832a8 modal | 3,555 |
-| 15 | 253 | 14 (14/0/0) | 10/14 | scattered | PURE | 0 | · | 0x8017c9bc modal | 3,542 |
-| 16 | 491 | 7 (7/0/0) | 6/7 | cross-address | PURE | 0 | Y | 0x801863cc modal | 3,437 |
-| 17 | 166 | 20 (20/0/0) | 20/20 | scattered | PURE | 0 | · | 0x8017fac0 modal | 3,320 |
-| 18 | 293 | 11 (11/0/0) | 4/11 | cross-address | PURE | 0 | · | 0x8017c43c modal | 3,223 |
-| 19 | 770 | 4 (4/0/0) | 1/4 | per-location | PURE | 134 | · | 0x80144b9c matched-ov077 | 3,080 |
-| 20 | 611 | 5 (5/0/0) | 4/5 | cross-address | PURE | 0 | · | 0x80186e24 modal | 3,055 |
-| 21 | 263 | 11 (11/0/0) | 11/11 | scattered | PURE | 0 | · | 0x80182fd4 modal | 2,893 |
-| 22 | 557 | 5 (5/0/0) | 4/5 | cross-address | PURE | 0 | Y | 0x80186570 modal | 2,785 |
-| 23 | 185 | 15 (15/0/0) | 13/15 | scattered | PURE | 0 | · | 0x8018b23c modal | 2,775 |
-| 24 | 551 | 5 (5/0/0) | 4/5 | cross-address | PURE | 0 | Y | 0x80189540 modal | 2,755 |
-| 25 | 125 | 22 (22/0/0) | 22/22 | scattered | PURE | 0 | Y | 0x80185440 modal | 2,750 |
-| 26 | 386 | 7 (7/0/0) | 6/7 | cross-address | PURE | 0 | · | 0x80186b78 modal | 2,702 |
+| 13 | 237 | 15 (15/0/0) | 15/15 | scattered | PURE | 0 | · | 0x801832a8 modal | 3,555 |
+| 14 | 253 | 14 (14/0/0) | 10/14 | scattered | PURE | 0 | · | 0x8017c9bc modal | 3,542 |
+| 15 | 491 | 7 (7/0/0) | 6/7 | cross-address | PURE | 0 | Y | 0x801863cc modal | 3,437 |
+| 16 | 166 | 20 (20/0/0) | 20/20 | scattered | PURE | 0 | · | 0x8017fac0 modal | 3,320 |
+| 17 | 293 | 11 (11/0/0) | 4/11 | cross-address | PURE | 0 | · | 0x8017c43c modal | 3,223 |
+| 18 | 770 | 4 (4/0/0) | 1/4 | per-location | PURE | 134 | · | 0x80144b9c matched-ov077 | 3,080 |
+| 19 | 611 | 5 (5/0/0) | 4/5 | cross-address | PURE | 0 | · | 0x80186e24 modal | 3,055 |
+| 20 | 263 | 11 (11/0/0) | 11/11 | scattered | PURE | 0 | · | 0x80182fd4 modal | 2,893 |
+| 21 | 557 | 5 (5/0/0) | 4/5 | cross-address | PURE | 0 | Y | 0x80186570 modal | 2,785 |
+| 22 | 185 | 15 (15/0/0) | 13/15 | scattered | PURE | 0 | · | 0x8018b23c modal | 2,775 |
+| 23 | 551 | 5 (5/0/0) | 4/5 | cross-address | PURE | 0 | Y | 0x80189540 modal | 2,755 |
+| 24 | 125 | 22 (22/0/0) | 22/22 | scattered | PURE | 0 | Y | 0x80185440 modal | 2,750 |
+| 25 | 386 | 7 (7/0/0) | 6/7 | cross-address | PURE | 0 | · | 0x80186b78 modal | 2,702 |
+| 26 | 890 | 3 (3/0/0) | 1/3 | per-location | PURE | 135 | Y | 0x80178d40 matched-ov077 | 2,670 |
| 27 | 177 | 15 (15/0/0) | 13/15 | scattered | PURE | 0 | · | 0x8018aa98 modal | 2,655 |
| 28 | 513 | 5 (5/0/0) | 4/5 | cross-address | PURE | 0 | Y | 0x801878e8 modal | 2,565 |
| 29 | 154 | 15 (15/0/0) | 15/15 | scattered | PURE | 0 | · | 0x8018389c modal | 2,310 |
diff --git a/docs/matching-cookbook.md b/docs/matching-cookbook.md
index 794d99f29..b841974e7 100644
--- a/docs/matching-cookbook.md
+++ b/docs/matching-cookbook.md
@@ -8962,3 +8962,29 @@ an Opus pass on most of the 60–120 band.**
`index_hit` was **13 true / 18 false** — the index is now the bottleneck the cookbook itself was in
wave 1, which is why the 31 gap reports above are worth more than the matches.
+
+### §136a — Blocker capture: classify on the OUTPUT, never on the exit status
+
+The reconcile lane only runs 12/12 because each agent is handed the compiler's own error line
+(§135, the S29 law). Capturing those lines needs one care point, learned the hard way this session:
+
+**`make build` runs `check`, so a draft that COMPILES PERFECTLY and merely produces different bytes
+also exits non-zero.** A capture tool that branches on `returncode == 0` to mean "compiled fine ⇒
+byte DIFF" therefore has an **unreachable branch**, and silently files every genuine byte-DIFF under
+"unknown". Classify on what the build PRINTED:
+
+| what the output shows | class | route |
+|---|---|---|
+| a non-`warning` line matching `error` / `conflicting types` / `undefined` | **PLUMBING** | reconcile lane — hand the agent the line verbatim |
+| no compiler error, but `[FAIL] / got / want ` | **DIFF** | redraft lane — the C is wrong, not the declarations |
+| neither | UNKNOWN | investigate; do not route |
+
+Note the filter must exclude `warning:` lines: the same `conflicting types for …` text appears as a
+*warning* for built-ins (`memcpy`) and for benign external-decl mismatches, and those do NOT block
+the bank. Only the hard-error form does.
+
+Measured on wave 4a's 10 gate failures: **7 PLUMBING / 3 DIFF** — i.e. **70% of "the gate refused"
+was declaration paperwork, not codegen.** That ratio is why the capture step is worth its ~10 builds
+before any reconcile fan-out. Tool: `.run/s7_capture.py` (any overlay, any draft dir; the
+ov_SC01_077-only `.run/uc_capture.py` is its ancestor). It reverts the TU in a `finally:` — a killed
+process performs no undo (the S27 law).
diff --git a/docs/progress.fleet.md b/docs/progress.fleet.md
index 601b74164..5ef042e70 100644
--- a/docs/progress.fleet.md
+++ b/docs/progress.fleet.md
@@ -4,16 +4,16 @@
# cross-binary collapsible-byte leverage: docs/duplicates.cross.md.
# THREE progress metrics (all matter — see the labels):
-FLEET fn-count byte-ident: 337779 / 353721 = 95.49% (REAL+LINKED+empties; FUNCTION-count, ×134-inflated — one crack counts per overlay)
-FLEET instr-weighted : 12168323 / 13141652 = 92.6% (shipped .text across main + resident + 138 overlays; the decomp.dev-DISPLAY number)
-FLEET distinct-code(uniq): 4841288 / 5634875 = 85.9% (76180/87459 unique fns; the DISTINCT-RE number)
+FLEET fn-count byte-ident: 337791 / 353721 = 95.50% (REAL+LINKED+empties; FUNCTION-count, ×134-inflated — one crack counts per overlay)
+FLEET instr-weighted : 12172119 / 13141652 = 92.6% (shipped .text across main + resident + 138 overlays; the decomp.dev-DISPLAY number)
+FLEET distinct-code(uniq): 4845084 / 5634875 = 86.0% (76192/87459 unique fns; the DISTINCT-RE number)
MAIN game-code weighted : 436 / 60201 = 0.7% (INCLUDED in the fleet numbers above since 2026-07-22 — roadmap §1 metrics contract; LINKED-excluding Ghidra sig dated 2026-06-14; caveat is R34: no independent second oracle for a PS-X EXE, NOT drift)
- (fleet EXCLUDING main, for continuity with pre-2026-07-22 readings: 12167887 / 13081451 = 93.0%)
+ (fleet EXCLUDING main, for continuity with pre-2026-07-22 readings: 12171683 / 13081451 = 93.0%)
-FLEET REAL substantive : 335924 (of which dedup-shared 240422 via 1905 groups / 240496 instances)
+FLEET REAL substantive : 335936 (of which dedup-shared 240422 via 1905 groups / 240496 instances)
FLEET LINKED PsyQ objs : 959
FLEET NON_MATCHING : 7 (0 in any default build — G4)
-FLEET INCLUDE_ASM stubs : 15935
+FLEET INCLUDE_ASM stubs : 15923
FLEET matchable : 353721
| binary | REAL | shared | LINKED | byte-ident | matchable | byte-ident % |
@@ -152,9 +152,9 @@ FLEET matchable : 353721
| ov_SC07_000 | 2413 | 1748 | 0 | 2415 | 2521 | 95.8% |
| ov_SC07_001 | 2390 | 1744 | 0 | 2392 | 2454 | 97.5% |
| ov_SC07_002 | 2430 | 1744 | 0 | 2434 | 2579 | 94.4% |
-| ov_SC07_006 | 2281 | 1560 | 0 | 2361 | 2456 | 96.1% |
-| ov_SC07_007 | 2310 | 1592 | 0 | 2394 | 2613 | 91.6% |
+| ov_SC07_006 | 2284 | 1560 | 0 | 2364 | 2456 | 96.3% |
+| ov_SC07_007 | 2313 | 1592 | 0 | 2397 | 2613 | 91.7% |
| ov_SC07_008 | 2373 | 1744 | 0 | 2373 | 2386 | 99.5% |
| ov_SC07_009 | 2382 | 1744 | 0 | 2384 | 2430 | 98.1% |
-| ov_SC07_010 | 2292 | 1614 | 0 | 2375 | 2524 | 94.1% |
-| ov_SC07_011 | 2311 | 1591 | 0 | 2391 | 2449 | 97.6% |
+| ov_SC07_010 | 2295 | 1614 | 0 | 2378 | 2524 | 94.2% |
+| ov_SC07_011 | 2314 | 1591 | 0 | 2394 | 2449 | 97.8% |
diff --git a/phase-ends/CURRENT_PHASE.md b/phase-ends/CURRENT_PHASE.md
index 83eb3f918..4649b91df 100644
--- a/phase-ends/CURRENT_PHASE.md
+++ b/phase-ends/CURRENT_PHASE.md
@@ -147,7 +147,120 @@ stub on a named wall/behemoth/queue ledger** — 140/140 byte-identical througho
---
-# 🛑 SESSION-30 CHECKPOINT (2026-08-01, S6 complete through wave 3) — FRESH SESSION SAFE HERE
+# 🛑 SESSION-31 CHECKPOINT (2026-08-03, wave 4a + S6c banked) — FRESH SESSION SAFE HERE
+> Supersedes SESSION-30 below. **Nothing is running. Tree lock FREE. Tree CLEAN** but for the R23
+> `db.*.gbf` churn — never stage it. Effort: **ultracode** (Drew enabled at session start).
+> `make tools-health` **RC=0 at session open**. **R22 clean-fleet run TWICE this session, 140/140
+> both times** (after wave 4a, and after the S6c series).
+
+## FLEET — R22 clean-fleet **140 passed / 0 failed of 140** (`make clean` + extract-all + check-all)
+**95.50% fn-count · 92.6% instr-weighted · 86.0% distinct-code** (76,192 / 87,459 unique fns) ·
+dedup **1905/0** · C1 240496/240496 · **0 NON_MATCHING** in any default build (G4).
+Phase opened 92.00 / 87.5 / 78.0 ⇒ **+3.50pp fn, +5.1pp instr, +8.0pp distinct this phase.**
+*(`.run/family_hseq.json`'s metrics read ~0.3–1.0pp higher — that is the OVERLAY-ONLY denominator,
+not a disagreement. `make report` is the authoritative fleet number.)*
+
+## WHAT S7 DID — 286 function-instances, two lanes
+**Lane 1 — wave 4a (agents): 274 instances from 33 drafted targets.**
+**Lane 2 — S6c (deterministic, ~0 agent tokens): 12 sibling banks.**
+`commit:1355` — 33 targets / 46 agents / **4.44M tokens** / 29 min → 29 claimed `match_one` MATCH →
+whole-binary gate **BANKED 23/33 (70%)** → `family_sweep --hseq --band all` propagated
+**251 member-matches across 69 overlays** (13 failed, 4 STRUCT skipped by design).
+
+**Bank rate by the tier that produced the FINAL draft** (derived per-function; the workflow's
+`by_tier` counts CLAIMED matches and sums to 29, not 23 — do not read it as banks):
+| tier | banked / attempted |
+|---|---|
+| Opus direct (≥90 ins) | 10 / 14 |
+| Haiku direct (≤89 ins) | **3 / 8** |
+| Opus escalation after a Haiku miss | **10 / 11** |
+⇒ on the 60–120-ins band the cheap tier is **triage, not a substitute** (it is ≡ Opus only at
+≤~50 ins). The two-lane shape still pays *because the escalation almost never fails.*
+
+## S6c — the 9 jr zero-crack families: 12 banked, 6 families ledgered, ALL banks in the SC07 quartet
+Probe-one-sibling-per-family first (R37) — it spared ~20 builds each on six families:
+| family | ins | slots | outcome |
+|---|---|---|---|
+| `func_80178D40` | 890 | 4 | **4/4 BANKED** |
+| `func_801734BC` | 34 | 4 | **4/4 BANKED** |
+| `func_8012ACE0` | 25 | 4 | **4/4 BANKED** |
+| `func_801380E0` · `func_80191C50` · `func_8019059C` · `func_8013FFD8` · `func_8016AE5C` | 438/710/673/213/85 | 10 | **gate-fail — genuine byte DIFF** |
+| `func_8016AB6C` | 188 | 4 | **carve-fail** — span table starts do not fit the span |
+
+**Every one of the 12 banks landed in `ov_SC07_006/007/010/011`** — the four overlays P27 discovered
+and P28 made citizens (R36). P28 drained their **h_exact** backlog via `dedup_extend`; the **jr/h_seq
+propagation lane was still owed**, and this was it. ⚠️ **But do NOT over-read that:** the SC07 quartet
+are the top four overlays by remaining zero-crack residue (2,190–2,355 ins each vs 500–870 typical,
+~3–4×) yet hold only **7% of the 2,114 remaining slots**. It is a per-overlay priority signal, NOT a
+bulk lever — the non-jr zero-crack residue is genuinely fleet-wide (120 families / 65,946 ins).
+
+## 🎯 THE 10 WAVE-4a GATE FAILURES ARE CAPTURED AND CLASSIFIED → `.run/s7_blockers.json`
+**7 PLUMBING / 3 genuine byte-DIFF** — i.e. **70% of "the gate refused" is declaration paperwork.**
+- **PLUMBING (→ reconcile lane, feed each agent its line VERBATIM):** `func_80185254`(SC02_026,
+ `conflicting types for func_8012C1B8`) · `func_8018362C`(SC02_035, `func_8012B200`) ·
+ `func_80183A14` + `func_80183B20`(SC02_035, both `func_80183E68` — ONE shared TU, so **forbid agent
+ builds**, §135) · `func_8017E654`(SC02_041, `func_8012BF4C`) · `func_8017BF50`(SC03_001,
+ `func_8012913C`) · `func_8017CDB0`(SC03_002, `func_801439C0`).
+- **DIFF (→ redraft, the C is wrong, not the declarations):** `func_8017E978`(SC01_005) ·
+ `func_80184494`(SC02_026) · `func_80184960`(SC04_018). *(`func_8017E978`'s original agent died on
+ the session limit, so it is effectively undrafted.)*
+- Tool: **`.run/s7_capture.py`** — any overlay, any draft dir (the ov_SC01_077-only
+ `.run/uc_capture.py` is its ancestor); reverts the TU in a `finally:`.
+
+## 📓 COOKBOOK §136 + §136a — the phase's largest single-wave idiom yield (R30, written in-session)
+19 byte-verified idioms from 25 banked functions' `index_gap` reports. The finding:
+**in the 60–120-ins band most "regalloc residuals" are decided by HOW MANY C LOCALS YOU DECLARE AND
+AT WHAT SCOPE, not by register pins** — `local-alloc.c:472` refuses a local allocno with
+`REG_N_DEATHS > 1`, promoting it to a global allocno that loses the low register. One case
+explicitly **refutes the pin** as the lever for a redundant copy (source position is the lever).
+**§136a** adds the capture law: **classify on the build's OUTPUT, never its exit status** —
+`make build` runs `check`, so a draft that compiles perfectly and merely differs in bytes ALSO exits
+non-zero; an `rc == 0 ⇒ DIFF` branch is unreachable and files every real byte-DIFF under "unknown"
+(my own defect this session, caught and fixed). Index regenerated **364 → 371** sections, green.
+⚠️ Agents self-reported `index_hit` **13 true / 18 false** — *discoverability of our own knowledge,
+not the compiler, is the drafting bottleneck.* The 31 gap reports are worth more than the matches.
+
+## ⚠️ THREE THINGS A FRESH SESSION MUST NOT INHERIT UNCHECKED
+1. **The T6 ROI-floor trigger stays REFUTED** (S30's finding, re-confirmed): the ×138-era-ends
+ trigger was wrong. Re-derive from a freshly regenerated `family_hseq` before any close.
+2. **My S6c probe first reported 1/9 — it was 1 bank + 8 CORRECT REFUSALS, not 8 failures.**
+ `jtbl_family_bank` refuses on a dirty `config/`+`src/` (its per-sibling revert restores from
+ HEAD, so an uncommitted prior bank would be destroyed). My driver did not commit between
+ families. **A uniform failure across N different functions is a statement about the mechanism,
+ not the functions** (§134). Fixed: `.run/s7_s6c.py` now commits between families.
+3. **The session hit the agent limit mid-wave** (3 agents died on it; resets 4:20am America/Denver).
+ Agent capacity is NOT assumable — and the measured economics favour the deterministic lanes
+ anyway (S30: sweeps ≈0 tokens for +0.5pp; wave-3 ≈4.1M for +0.3pp).
+
+## 📊 THE LIVE QUEUE — re-derived at HEAD from the regenerated map (overlay-only ins)
+| lever | families | templ ins | note |
+|---|---|---|---|
+| B-shape ≥20 memb, ≤60 ins | **0** | 0 | exhausted (was 36 at S30 open) |
+| B-shape ≥10 memb, **61-120 ins** | **10** | **10,003** | wave 4a consumed 23 of the 33 |
+| B-shape 10-19 memb, ≤60 ins | **111** | **33,554** | **wave 4b, staged in 3 batches of 37** |
+| zero-crack `has_mid_jr` (S6c) | 6 | ~5,600 | **DONE** — 12 banked; the 6 left are gate/carve-fail, ledger material |
+| zero-crack non-jr residue | 120 | 65,946 | fleet-wide (2,114 slots); SC07 quartet = top 4 but only 7% |
+| fresh ×2-9 | 1,872 | 362,591 | worst multiplier — deprioritised |
+| fresh ×1 singletons | 3,800 | 231,284 | ×1 — deprioritised |
+Unmatched fleet-wide: **14,887 instances / 912,037 ins**.
+
+## ▶ RESUME HERE (nothing blocked, nothing running; the agent limit resets 4:20am America/Denver)
+1. **The reconcile lane on the 7 PLUMBING failures** — blockers already captured in
+ `.run/s7_blockers.json`; hand each agent ITS line verbatim. **`func_80183A14` + `func_80183B20`
+ share one TU ⇒ forbid agent builds for those two** (§135's concurrency hazard). This lane has run
+ **12/12** across waves 2–3 and is the most reliable stage in the pipeline.
+2. **Wave 4b** — 3 batches of 37, args at `.run/s7_wave4b_{1,2,3}.json`, script
+ `.run/s7_wave4b.js` (takes `{targets, extra}`; **`extra` is where §136's idioms go** — that
+ promotion is the 83%→93% law). Batch 1 carries the 4 wave-3 retries with pointers to their prior
+ drafts. Both wave scripts now parse args-as-string and assert `Array.isArray`, so the roadmap's
+ "args must be an array" gotcha cannot silently kill a launch again (it killed wave 4a's first).
+3. **The 3 DIFF failures** → redraft lane, not reconcile (their C is wrong, byte-proven).
+4. **T5 close** — only after re-deriving from a freshly regenerated `family_hseq`; the checklist's
+ ROI-floor trigger is REFUTED and must not be used to close the phase.
+
+---
+
+# 🛑 (superseded) SESSION-30 CHECKPOINT (2026-08-01, S6 complete through wave 3)
> **Nothing is running. Tree lock FREE. Tree CLEAN** (0 non-ghidra entries; the `db.*.gbf` churn is
> R23 restart-noise — never stage). **HEAD `commit:1352`.** Effort: xHigh → **ultracode** (Drew enabled
> mid-session for the waves). `make tools-health` green at session open; frontier REGENERATED at HEAD