Commit Graph

1255 Commits

Author SHA1 Message Date
Drew T 6a5edf53ad docs(phase-30): SESSION-26 checkpoint — wave-4 58/70 returned (all MATCH), 12 unfinished scheduled for resume at 00:49 2026-07-30 23:05:04 -06:00
Drew T c0407e7a86 docs(phase-30): T0.5 COMPLETE — fleet prefetch 124/124 programs, 7,716 files; 95.2% of crack-needing families + 100% of main/resident now seeded 2026-07-30 22:37:58 -06:00
Drew T 6a20b3db48 docs(phase-30): redo results + R14 correction (the per-binary 'cliff' was a corruption artifact) 2026-07-30 22:22:56 -06:00
Drew T 471314da54 feat(phase-30): T3 waves 2+3 + 4 behemoths — 52 cores banked, 911 members propagated; R22 140/140
WAVE 3 (48 agents / 8 binaries, dealt across binaries so BANKING fans out): 48/48 match_one MATCH,
48/48 banked through 8 PARALLEL per-binary gates. WAVE 2: 15/19. BEHEMOTHS: 4 non-jr confirmed
(func_8017E120 884ins x14, func_8017FA5C 728, func_8017CAD4 755, func_8017E35C 719).
Tier-routed propagation (§123): family_sweep --hseq banked 911 members across 137 overlays.

fn-count 92.32 -> 92.59% | instr 87.9 -> 88.2% | distinct 78.3 -> 78.7% (70,506 unique fns)
R22 clean-fleet 140 passed / 0 failed, under one campaign lock (treelock.sh).

CORRECTION (R14): the 'per-binary bank-rate cliff' I reported from the pre-incident gate run
(SC03_014 1/6, SC04_018 1/6, SC06_018 2/6) was an ARTIFACT — those gates ran against a tree
propagation was concurrently rewriting. Re-gated clean: 6/6 everywhere. A measurement taken during
corruption is not a measurement; I should not have theorised a cause before re-running it.
2026-07-30 22:22:35 -06:00
Drew T f3ec6ef588 fix(phase-30): treelock.sh — an flock MUTEX for tree-writing campaigns (incident 2: a poll is not a mutex)
I gated 8 binaries in parallel while wave-2's propagation loop was still running, then ran
'make clean' on top. check-all 77/140; the corpus denominator moved, so the apparent 91.4% instr
was a half-written tree, not a gain. Reverted to commit:1245 (last R22-verified) — 140/140 restored,
all 58 drafts survived because agents only ever write .run/.

ROOT CAUSE, and it was structural not unlucky: my guard was
  while pgrep -f dedup_propagate; do sleep; done
A CAMPAIGN is a LOOP of short-lived processes (15 sequential invocations), so it has gaps where no
process matches. The poll sampled a gap and started. Presence-of-a-process cannot express 'a
campaign owns the tree'.

treelock.sh holds one flock for the WHOLE campaign, released by the kernel on exit OR kill, with
--status; both drivers refuse to run unlocked. LAW: guard the CAMPAIGN, not the process.
Corollary (twice today): a killed process performs no undo — a fleet-tier write needs a lock ABOVE
it, not cleanup inside it.
2026-07-30 22:00:32 -06:00
Drew T ed2b0f8c2a fix(phase-30): gate_stage CLI exposes --verified-out/--failed-out, defaulting PER-BINARY (parallel-gate safety)
run_gate() always took per-worker result paths; the CLI never exposed them, so every CLI gate used
the shared .run/harvest_{verified,failed}.txt. Concurrent per-binary gates — safe on every other
axis, since the byte-gate IS per-binary — would have read each other's results and mis-attributed
banks (the §55b trap-4 shared-scratch defect that bit match_one in P28, one level up). Default is
now .run/harvest_verified.<binary>.txt: safe by construction, not by remembering a flag.
2026-07-30 21:28:00 -06:00
Drew T cd5ee46094 docs(phase-30): behemoth wave — 7/10 CONFIRMED byte-matches at 700-970 ins (0 disputed); 3 NEAR incl. a 969-ins fn at closeness 2 2026-07-30 21:03:11 -06:00
Drew T c14f15a09f fix(phase-30): cookbook-index — 226 -> 324 sections (the unnumbered idiom headers) + curated symptom hints from wave-2 agent feedback
WAVE-2 MEASURED THE INDEX: 15/19 index hits and the bank rate went 57% (wave 1, no index) -> 79%
(wave 2, index-first) on the same gate. Agents also NAMED its gaps, which is the flywheel working.

Two real defects found and fixed:
1. COVERAGE. The parser required a '§' prefix, so 111 h2-h4 headers were invisible — including
   '### T4 — Branch polarity', the fix match_one names by class (BRANCH-POLARITY) and which two
   agents re-derived by hand, and the §1/§2 idiom-catalog entries (I1-I4, T1-T4).
2. THE ASSERTION ITSELF. My R32 check compared §-headers-parsed against §-header-CANDIDATES — a
   tautology over a set I had already narrowed. R32 says the candidate set must OVER-approximate;
   it now counts EVERY header and accounts for each as indexed-or-explicitly-skipped. The tool
   written to stop silent skips had the silent-skip defect.
3. Keyword matching over titles cannot surface an idiom whose title omits the symptom, so the
   index now opens with a hand-curated SYMPTOM -> section list, seeded from what agents actually
   hit (branch polarity, (void)-canon conflicting types, asm-label alias, one-base-register reuse,
   folded andi, slti/sltiu, sibling-first, delay-slot theft, void->s32).
2026-07-30 20:45:02 -06:00
Drew T 4d5bee0be8 fix(phase-30): T4 — 2 'Phase-22 grinder bugs' verified STALE (already fixed); real fixes: asm_subdir_for derives from corpus (R33), --fix-def-sig help carries the §119 warning
Verified against code rather than the ledger: the split-blind lookup globs */ correctly, and the
churn was fixed by T5's input-signature gating. Both struck. asm_subdir_for was still a parallel
oracle (silent g[0] on multi-match) -> now corpus.asm_path. --fix-def-sig defaults off correctly
but advertised 'Byte-neutral; gate arbitrates' — the claim T84 refuted (signedness-wrong header
decl over a byte-correct draft; 137 members held at 0 until the flag was dropped).

A defect ledger nobody re-verifies decays into busywork — verify before scheduling.
2026-07-30 20:17:15 -06:00
Drew T 4570a5854b feat(phase-30): cookbook-index — a SYMPTOM-keyed index (226 sections, derived + coverage-asserted, in tools-health)
Wave-1 measured the tax: three agents each reported a 'NEW idiom' that was ALREADY documented —
the asm-label alias (line ~2516, same 'address-of perturbs regalloc' mechanism) and the void->s32
non-neutrality (§41d, Phase 26; the agents cited the very entry §41d corrects). They consulted the
cookbook as instructed and could not FIND them. 716 KB / 226 sections with no index = a
discoverability failure, and every wave re-paying for prior waves' findings is the inverse of R16.

docs/cookbook-index.md maps SYMPTOM (what you see in the diff) -> sections, 14 buckets, a section
listed under every symptom it addresses. Derived by tools/cookbook_index.py (R33 — cannot drift),
--check wired into tools-health.

R32 on my own tool: the first regex required an em-dash separator and silently dropped 50 sections
— including §1 (idiom catalog), §2, §5a (cross-jump, cited by an agent today). An index missing its
most-cited entries turns 'I could not find it' into 'it is not there'. Now asserts extracted ==
candidate '§' headers and hard-exits on a gap.
2026-07-30 20:12:07 -06:00
Drew T 5d4167bb3c feat(phase-30): T3 wave-1 h_seq sweep — 548 members banked across 4 families; R22 140/140 (fn-count 92.16 -> 92.32%, distinct 78.0 -> 78.3%)
The 4 cores dedup_propagate refused (h_exact tier) templated cleanly via family_sweep --hseq once
the family map was regenerated post-bank (a bank invalidates the map: sig-overlays + family_hseq
must run BEFORE the sweep — the standing wave-loop order). 548/686 banked, 138 failed (one
consistent per-overlay slice, diagnose next). Wave-1 total: 8 cores -> 1,121 instances.
instr 87.5 -> 87.9%, distinct 69,828 -> 70,094 unique fns.
2026-07-30 20:07:41 -06:00
Drew T 159317d3fe feat(phase-30): T3 wave-1 — 8 cores banked + 4 propagated fleet-wide; R22 140/140 (fn-count 92.00 -> 92.16%)
Ultracode wave of 14 agents over fresh reach-138 cores: 14/14 match_one MATCH, 8 accepted by the
whole-binary gate (the §52b law reproduced exactly). Propagated per-function (the incident fix):
0x8012E014, 0x80151C54, 0x8012F49C, 0x80151B98 -> +573 instances. R22 clean-fleet 140/140;
instr 87.5 -> 87.7%, fn-count 92.00 -> 92.16%, distinct 69,828 -> 69,836.

The other 4 banked cores are h_seq (PURE/IMM) families: dedup_propagate is h_exact-only, so its
'reach<2' / 'not self-contained' refusals were statements about the TOOL's tier, not the functions
-> cookbook §123 (the §53 carve-law generalized to the propagation-tier axis) + a routing table.
They bank via family_sweep --hseq next.
2026-07-30 19:57:54 -06:00
Drew T 71133942e4 fix(phase-30): T3 — gate_stage propagation timeout scales with bank count AND is caught (wave-1 incident: 3600s x8 banks killed the driver mid-fleet-write, 124/140, reverted clean)
A killed process performs no undo, so a fixed timeout on a fleet-tier write is a tree-corruption
mechanism, not just a delay. Now: timeout = min(6h, 1800+1800*banks); on expiry the driver reports
TREE DIRTY, REVERT REQUIRED and returns cleanly. Standing practice for multi-bank waves: re-gate
--no-propagate, then propagate PER FUNCTION (dedup_propagate --addr) — bounded and resumable.
Wave-1 result recorded: 14/14 match_one MATCH -> 8/14 banked (the §52b law); 3 new idioms owed.
2026-07-30 19:22:25 -06:00
Drew T ce38cfbcda fix(phase-30): T3 pre-work — gate_stage commit stages NEW jr-carve files + overlays.mk + the binary's yaml (T1a found the -u gap); bounded failed-prep hazard documented 2026-07-30 17:45:03 -06:00
Drew T fa1f6d0bf2 docs(phase-30): T1a close-out — +18 banked (+12 unique), R22 140/140, stored-draft question CLOSED (report point #2)
39% prior did not generalize (S16 measured FRESH wave drafts; this is A10's stored-backlog class,
0/958 by plain re-gate) — the driver lifted ~16% over that 0%. Residue routed to T3 redraft lanes.
§61 orphan-carve residue reverted; two T3 pre-work gaps recorded (gate_stage commit add-scope for
new carve files; no tracked writes during tree-writing campaigns). Ledger pruned: 1,350 -> 1,332.
2026-07-30 17:44:17 -06:00
Drew T 2bfb8d4f52 feat(decomp): t6-recover gate — +1 fns x0 propagated (fleet None%) 2026-07-30 17:36:03 -06:00
Drew T 52b37da189 feat(decomp): t6-recover gate — +1 fns x0 propagated (fleet None%) 2026-07-30 17:33:05 -06:00
Drew T 03359b85b7 feat(decomp): t6-recover gate — +1 fns x0 propagated (fleet None%) 2026-07-30 17:30:47 -06:00
Drew T 1754aa7e55 feat(decomp): t6-recover gate — +1 fns x0 propagated (fleet None%) 2026-07-30 17:29:57 -06:00
Drew T ec19886be4 feat(decomp): t6-recover gate — +1 fns x0 propagated (fleet None%) 2026-07-30 17:28:08 -06:00
Drew T fb6e5266ba feat(decomp): t6-recover gate — +1 fns x0 propagated (fleet None%) 2026-07-30 17:26:18 -06:00
Drew T d750cef221 feat(decomp): t6-recover gate — +1 fns x0 propagated (fleet None%) 2026-07-30 17:25:31 -06:00
Drew T 6e9cd5e449 feat(decomp): t6-recover gate — +1 fns x0 propagated (fleet None%) 2026-07-30 17:24:43 -06:00
Drew T 9713f1ede0 feat(decomp): t6-recover gate — +1 fns x0 propagated (fleet None%) 2026-07-30 17:23:54 -06:00
Drew T 11da706745 feat(decomp): t6-recover gate — +1 fns x0 propagated (fleet None%) 2026-07-30 17:22:36 -06:00
Drew T 9398f3b5cf feat(decomp): t6-recover gate — +1 fns x0 propagated (fleet None%) 2026-07-30 17:21:47 -06:00
Drew T e277701267 feat(decomp): t6-recover gate — +1 fns x0 propagated (fleet None%) 2026-07-30 17:20:17 -06:00
Drew T a74e21631d feat(decomp): t6-recover gate — +2 fns x0 propagated (fleet None%) 2026-07-30 17:16:21 -06:00
Drew T ab467e2196 feat(decomp): t6-recover gate — +1 fns x0 propagated (fleet None%) 2026-07-30 17:15:24 -06:00
Drew T b4b298278e feat(decomp): t6-recover gate — +2 fns x0 propagated (fleet None%) 2026-07-30 17:12:31 -06:00
Drew T cb0d3c185b feat(decomp): t6-recover gate — +1 fns x0 propagated (fleet None%) 2026-07-30 17:10:09 -06:00
Drew T 41a19efc00 docs(phase-30): T2 finding 2 (fleet is jr-carved; -O0 range inside _jr_80135D20 — carve-within-a-carve arc scoped) + in-flight session checkpoint 2026-07-30 17:09:06 -06:00
Drew T fe8095a24d feat(phase-30): T2 — rollout_o0.py (generalized o0b driver) + x1 probe verdict: append route REFUTED for the remaining cluster (R14 correction)
o0b-bearing != o0b-adjacent: T85's 0x801457A4 banked by append only because it abuts the o0b
object's END; the 0x8013Bxxx-0x8013Cxxx families mis-place by construction (probe 1/1 gate-reject)
and per-fn isolation IS the Arm-A re-carve. Frontier report corrected; T2 pivots to the Arm-A
+0x20 defect itself (symbol-pin hypothesis first). Driver stands as the post-fix sweep harness.
2026-07-30 17:05:50 -06:00
Drew T e02fd38358 feat(phase-30): T0.5 — DefineFunctions completion pass wired into the batch (define missing stubs from splat truth, re-decompile)
Probe: main +476/477, fresh-import ov_SC03_001 +238/238, ov_SC02_011 +227/228. Raw-blob
auto-analysis finds only the reachable subset (Phase-10 finding, now automated per program).
2026-07-30 17:01:53 -06:00
Drew T bd76f2373c fix(phase-30): T0.5 — import trigger matches Ghidra's actual 'not found' phrase (probe caught +0/371 silent no-fire); probe findings logged 2026-07-30 16:52:05 -06:00
Drew T 19766a6dc3 feat(phase-30): T0.5 — prefetch_fleet.py, the fleet Ghidra-C batch orchestrator (+ SETUP row, R21; fuel manifest ride-along)
One representative per remaining h_seq distinct class + all main/resident stubs -> .run/ghidra_c/.
Resumable (skips cached); serial on the exclusive project lock; auto-stops a serving MCP (R23);
imports missing overlay programs on demand via ghidra_import_raw.sh (blob derived via
family_remap.img_path, vram from the splat yaml — R33, never guessed); R32 per-program outcome
report, continues past failures. Dry-run: 126 programs / 7,966 uncached representatives.
2026-07-30 16:49:08 -06:00
Drew T 93d2851ab2 feat(phase-30): T0e2+T0f — autopsy refreshed (108 stranded MATCHes); frontier regenerated; the three populations PINNED (docs/frontier-p30.md)
- Autopsy 1,349 rows: 1,178 near / 63 nobuild / 108 match_one-MATCH (T1 fuel, 3x the S16 sample);
  0 classifier errors; second-oracle agree.
- THE -O0 PIN: 18 fam / 2,192 open members = 2,131 o0b-route-eligible + 61 SC07-only; 15/18
  exemplar-matched. The 'WALLED ~1,287' framing dissolves — T2 generalizes rollout_801457a4_o0.py
  (proven 130/130); jr+o0 composites (0x8013c414, 0x8013c0f8) probe x1 first.
- Zero-crack: 114 fam / 3,166 members / ~204k w-ins (28 substantial). Concentration top-20 24.0% /
  top-100 44.8%. Worklist fresh: 101 live / 261,789 gain-ins (stale 160/583k gone).
- T0 COMPLETE (a-f) — report point #1 = docs/frontier-p30.md
2026-07-30 16:45:09 -06:00
Drew T 407ff8f85c fix(phase-30): T0e-1 — the 21-file absolute-include portability defect: /home/musashi paths -> ../shared/ relative (R22 140/140) 2026-07-30 16:42:03 -06:00
Drew T e03494dc1f feat(phase-30): T0d — backlog _open_stubs derives from corpus.stubs (STUB_RE deleted, R33); ledger verified already-clean
- Filter + prune existed since 07-24; jsonl already compacted (the tree's uncommitted edit was
  S25's un-committed prune output; prune today 1350->1350/0 dropped). Stale rows were worklist.md's.
- Oracle agreement: 0 divergence across 131 ledger binaries (my first probe compared names vs int
  addrs — R35 on my own instrument). Hex-case canonicalized in the membership test (R32).
- Parity proven post-change: load_best 1350 == 1350. §83 doctrinal caveat stands.
2026-07-30 16:39:05 -06:00
Drew T de7b347f6f feat(phase-30): T0c — the family_hseq/progress 'gap' was a cross-date+scope misread; digests now self-stamp (scope+HEAD+oracle)
Same-tree regen: family_hseq(overlays) 27,248 == progress 28,296-1,034(main)-14(resident) EXACT.
The 07-29 map was SESSION-25's open snapshot; 29,961-27,248 = 2,713 = the session's banked total.
Zero definitional gap — both tools already derive from corpus.stubs (Phase 26-A). family-hseq.md
header now stamps 'OVERLAYS only' + generation HEAD + compare-at-same-HEAD. Roadmap D-bucket
corrected. Fresh readings: 478 substantial fam / 678,404 templ ins / 28 zero-crack (S25 ate 33).
2026-07-30 16:35:59 -06:00
Drew T 53b30962ee feat(phase-30): T0b — rtu_match FAIL verdicts surface the real cc1 error (filtered, first-15) instead of a warning tail
The SESSION-25 recipe (grep -v warnings from --stderr-out) applied in-tool across all 4 stages;
gcc-2.7.2 hard errors have no 'error:' prefix so the old tail-truncation drowned them (cost 3
probes). Raw-tail fallback if the filter empties. Verified on a real deliberate CC1 failure.
2026-07-30 16:32:37 -06:00
Drew T b5a28edae8 feat(phase-30): T0a — gate_stage stage-0 raw gate + fix_arity_callers per-edit journal undo (§122)
- STAGE 0: gate the RAW drafts before any transform (GATE_NO_STAGE0 escape) — the carried
  'ladder destroys good drafts' defect (SESSION-22 reproduction: _o0 pair + func_80138C60,
  ladder-FAILED/bare-VERIFIED) is impossible by construction; ladder+arity now touch only
  stage-0 failures. TU-blind-transform root-cause hypothesis recorded in-code, open.
- fix_arity_callers --journal/--undo-journal --keep: exact per-edit undo in the WRITER,
  shared by ladder AND bare workflows (the 17-TU residue class); replaces the two-special-case
  file snapshot; undo moved after stage 2 (closes the stage-2 arity parity gap); stale-journal
  guard. Negative-control: apply->undo byte-identical; --keep exact.
- Flow test .run/t0a_flowtest/driver.py 7/7 PASS. Cookbook §122. CURRENT_PHASE T0(a) logged.
2026-07-30 16:31:01 -06:00
Drew T 0acd4cc5d4 (Phase 29 landed as 552 commits commit:0661..commit:1212 + this PhaseEnd. Fleet 68.9 -> 87.5% instr / 49.5 -> 78.0% distinct / 83.94 -> 92.00% fn-count; 140/140 byte-identical throughout; 0 NON_MATCHING. The granular trail -> logs/Phase29.md.)
feat(phase-29): the family campaign — +18.6pp instr in 25 sessions; engine spent on evidence; roadmap v2 (v1.28.0)

- T1 diff_regions.py RESOLVED the swing number: (a) TOOLING — the "~3% h_seq ceiling" was an -O0
  compile-flag artifact (REGALLOC 0/106); the third structural wall to resolve to our own tooling.
- The campaign: crack waves + propagate-behind-each-crack + the §20 broad type-lift (154 types) +
  the jtbl carve waves + the SC07-region sweeps. SESSION-25 alone: 2,713 members, +100,572 ins,
  +1,620 unique fns, every named blocker closed — NOT ONE a compiler wall.
- Doctrine shifts (decision-log): fresh cracks are the only lever that moves distinct-code; the
  propagation cap gates de-duplication, not coverage; the wave bottleneck is INTEGRATION (~92%
  byte-correct, ~27% bank) -> the tiered T0/T1 blast-radius recovery driver (14/36 = 39% measured);
  gate_stage call-site-casts are the integration spine (bulk header edits BREAK builds).
- T98 characterised the residue: 80 families / 960 members / 173 distinct (29 all-STRUCT by-design
  + 51 gate-failing, 3 sweeps at 0) -> T99 burn-down (derived from digest git history, R33):
  final-four-day decay +2.7 -> +0.3pp/day. Closed on the measurement, gate-2 confirmed.
- roadmap-to-100 v2: P30 Recovery & Concentration -> P31 Scope-Complete + Main & Resident ->
  P32 Behemoths+Walls -> P33 Verify+Flip. member_adapt + family-adapt fine-tune VACATED.
- Honesty ledger: 7 recorded errors + the month-old shared byte-gate default defect (found+fixed);
  the -O0 Arm-A splat wall named and carried as P30 T2 instrument work, never force-banked.
- cookbook §54-§121 (68 sections); ~15 decision-log entries; calibration re-measured; R37 proposed.
2026-07-30 16:14:22 -06:00
Drew T 8c73950270 docs(phase-29): roadmap-to-100 v2 — the owed re-baseline; P30-P33 rechartered on 2026-07-30 measured reality
- §1 contract numbers corrected: 140 onboarded + 39 type-1 pending; metrics contract marked
  IMPLEMENTED (main in denominators since 07-22); main second-oracle gap named as P31 item
- §2 rebuilt: 87.5/78.0/92.00 baseline; buckets W1-W5/M/R/T/B/D with dated sources; the
  measured lever order (recover -> fix -O0 instrument -> concentration head -> scope -> flag-plants)
- §3 rechartered: P30 Recovery & Concentration -> P31 Scope-Complete + Main & Resident ->
  P32 Behemoths+Walls -> P33 Verify+Flip; honest scale estimates from measured velocity
- §4 tooling: member_adapt + family-adapt fine-tune VACATED (dissolved premise); burn-down
  DERIVED not built (R33); new T0 defect fixes named; diff_regions BUILT
- §7 records the v1->v2 supersession (v1 in git history at commit:1210)
2026-07-30 16:06:08 -06:00
Drew T f382a8180a docs(phase-29): T99/Task-7 — burn-down derived from digest history; ROI close recommended; frontier → roadmap v2 2026-07-30 16:01:10 -06:00
Drew T 0e5d649568 docs(phase-29): SESSION-25 final checkpoint v9 — residue characterised, ROI decision surfaced 2026-07-30 14:22:56 -06:00
Drew T 4115279990 docs(phase-29): T98 — residue characterised: 29 all-STRUCT (refused by design) + 51 gate-failing families
- Re-ranked after T97: 80 families / 960 members / 173 new distinct, top family worth 20.
- Probed the top (0x8017d840): stages 0 drafts, skipped {'member class STRUCT': 21} — every member
  is register-drift class, refused by remap_hseq for a REAL structural reason. First still-zero
  family this session whose blocker is not our own tooling.
- Clean split measured: 29 all-STRUCT families (86 members, refused by design, per-member drafting
  only) vs 51 no-STRUCT families (874 members, ~150 distinct, stage fine but fail the gate) — no
  mixed families at all.
- HONEST ROI: the 51 are ~51 independent diagnoses at ~3 distinct each, and the last THREE blast
  sweeps over them returned 0 with every lever this phase built applied. Residue total is 173
  distinct vs 2,713 members banked today. The mechanical family engine is SPENT — this is the ROI
  conversation SESSION-24 deferred, now supported by data (Drew's gate-2 call).
- No banks; tree clean; src/ untouched.
2026-07-30 14:22:23 -06:00
Drew T 7460a80d6f docs(phase-29): SESSION-25 final checkpoint v8 — 2,713 banked, 92.00% fn-count, every named blocker closed 2026-07-30 13:44:58 -06:00
Drew T ceae8bb4cd feat(phase-29): T97 — func_80151944 138/138; the "three-edit job" was ONE edit
- The last big NAMED blocker, costed across four checkpoints as §112 header + §20 call-site cast +
  a scripted §99 pass over 2,022 overlay-local decls. Probing first showed two of the three were
  unnecessary: the conflict is entirely between DEFINE_func_80151924()'s own forward-decl
  (extern s32 func_80151944(void)) and the byte-true definition (void f(void *a0)), four lines
  apart in the assembled TU. The 2,022 decls live in OTHER TUs and never entered it.
- ONE 4-line edit in engine_core.h: decl -> byte-true, call site -> ((s32 (*)(void))f)() so the
  caller's codegen is unchanged. rtu_match: conflicting types -> MATCH (15 ins). Sweep 138/138.
- Family 0x80131eec fully closed: 149 (T87) + 138 (T97) + 1 immediate-refusal = all 288 members.
- SHARED-HEADER RISK VERIFIED, NOT ARGUED: engine_core.h is included by all 138 overlays, so §20
  cast-folding is a hypothesis. Per-binary gates 138/138 are necessary but not sufficient; the
  fleet check is the one that counts. R22 clean-fleet 140/140 + tools-health RC=0 (corpus 0
  PHANTOM/0 TRUNCATED, cdecl, audit-binaries, dedup 1886/0, C1 239604/239604).
- METRICS: fn-count 91.96 -> 92.00% (+138, exact) · instr 87.4 -> 87.5% (+2,070) · distinct +72.
- COSTING LESSON: the estimate came from reading the symptom (2,022 decls of this name exist)
  instead of probing the failure (which decl actually conflicts). Probe before COSTING, not just
  before scaling.
2026-07-30 13:44:22 -06:00
Drew T bd3c207088 docs(phase-29): SESSION-25 final checkpoint v7 — 2,575 banked, all 3 byte-identical stragglers closed 2026-07-30 13:13:40 -06:00