Commit Graph

773 Commits

Author SHA1 Message Date
Drew T 1f9c1be858 docs(phase-30 S8): checkpoint — 167/167 banked, every high-multiplier lane spent; T5 is the next decision 2026-08-03 16:25:29 -06:00
Drew T e8a57b13fa docs(phase-30 S8): CORRECTION §136h — the zero-crack pool is residue, not a lever (1 bank / 1,781); my R37 violation 2026-08-03 13:29:33 -06:00
Drew T 2210ff6509 docs(phase-30 S7): checkpoint — B-shape queue closed 144/144; the zero-crack pool refills itself (120->147 families) 2026-08-03 13:03:13 -06:00
Drew T a6ba678658 docs(phase-30 S7): refresh SESSION-31 checkpoint — 1,238 instances, 103/107 banked, the 5 §136 findings 2026-08-03 11:21:08 -06:00
Drew T fdb5813fc1 docs(phase-30 S7): S6c banked ×12 (all in the P27 SC07 quartet); blockers classified 7/3; §136a
- 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).
2026-08-03 09:32:36 -06:00
Drew T 443279e25a docs(phase-30): SESSION-30 checkpoint refreshed — S6 through wave 3, queue re-derived at HEAD
- Fleet 95.42% fn / 92.4% instr / 85.5% distinct; phase arc +3.42 / +4.9 / +7.5pp; R22 140/140 x9.
- ~3,500 members in 11 commits, from TWO engines that both paid: deterministic tooling repair
  (same population scored 842 pre-fix vs 1,582 post-fix; cookbook §134) and two-lane agent waves
  (bank rate 83->93->89%, reconcile lane 12/12; cookbook §135).
- Queue RE-DERIVED at HEAD after the final bank (not carried forward): the >=20-member/<=60-ins
  B-shape is EXHAUSTED; 33 families/34,895 ins remain at 61-120 ins and 111/33,554 at 10-19 members;
  S6c's 9 jr families (9,364 ins) still untouched. Unmatched fleet-wide 15,161 instances/935,927 ins.
- Flags for a fresh session: (1) the T6 ROI-floor trigger is REFUTED — do not close P30 on it;
  (2) measured token economics — deterministic ~0 tokens/+0.5pp vs wave-3 4.1M/+0.3pp; probe the
  cheap lever before funding the expensive one.
2026-08-01 20:47:52 -06:00
Drew T 6fe9b66f2d feat(phase-30 S6h): wave 3 — 34/38 banked, +639 members, reconcile lane now 12/12 (R22 140/140)
- 38 targets / 44,297 templ ins, model-routed (Haiku <=89 + Opus escalation, Opus direct >=90):
  52 agents, ~4.1M tokens -> gate 27/38 (71%). All 11 failures captured + classified: 8 declaration/
  link plumbing, 3 genuine byte-DIFF. An 8-agent Opus reconcile wave fixed 8/8 (7 banked) ->
  wave-3 total 34/38 = 89%. Propagation +639 members / 1 failed / 83 overlays.
  R22 clean-fleet 140/140. Fleet 95.42% fn / 92.4% instr / 85.5% distinct.
- DESIGN (S27 law applied BEFORE it bit): six of eight reconcile targets share ONE TU, so this wave
  FORBADE agents any build — six concurrent splice-builds would have clobbered a tracked file.
- THE AGENTS OUT-DIAGNOSED MY BLOCKERS:
  * func_801848B0 — an agent REJECTED MY PREMISE: I said byte-correct + decl-blocked; it ran
    match_one first, found a real 1-ins DIFF, fixed both. R14 aimed back at me, correctly.
  * func_8017C5F0 — the "invented symbol" D_801DA0F0 is an INTERIOR ADDRESS: offset 0x6C into
    D_801DA084 (0x801DA084..0x801DA103). The lui/addiu pair builds an interior pointer.
  * func_8018A860 — the TU declares memcpy THREE times with incompatible signatures, with a latent
    byte bug behind it. One symbol declared three ways is a defect awaiting the next draft.
- Carried (4): func_80184A94 (match_one MATCH, gate-refused) + 3 genuine byte-DIFFs
  (func_801845B0, func_8017BEBC@ov_SC02_026, func_8018480C).
2026-08-01 20:28:44 -06:00
Drew T 5f687b6e3f docs(phase-30): SESSION-30 checkpoint — S6 complete through wave 2, ~2,800 members, and the T5 trigger refuted
- Fleet 95.23% fn / 92.1% instr / 85.0% distinct; phase arc +3.23 / +4.6 / +7.0pp; R22 140/140 x6.
- S6 was scoped as a harvest and delivered as a TOOLING REPAIR: 6 defects found, 5 fixed, all of
  them a multi-line C construct read one line at a time (or a guard firing on a condition it never
  verified). Pre-fix tool scored the population at 842; post-fix, 1,582. Cookbook §134.
- BLOCKS T5: the checklist's ROI-floor trigger ('after S2 the x138 era ENDS') was wrong twice today.
  Two >=126-member families were open (33 ins of C -> 266 members) and a 36-family/28,829-ins pool
  of the same shape sat unexamined behind them. Three §133-class misses now share one mechanism:
  a conclusion drawn from a view that silently excluded the thing being looked for.
- Live queue re-derived at HEAD: the >=20-member/<=60-ins vein is EXHAUSTED (1 family); 133 families
  /48,689 ins at 10-19 members and 11 families/25,742 ins at 61-120 ins remain, plus S6c's 9 jr
  families (9,364 ins) untouched.
2026-08-01 19:36:47 -06:00
Drew T 372dc62d35 feat(phase-30 S6g): wave 2 — 93% bank rate (was 83%), all 4 reconciles closed, +342 members (R22 140/140)
- 15 targets (11 fresh Haiku + 4 gate-failed reconciles on Opus), 15 agents, ~0.74M tokens.
  Gate banked 14/15 (93%) vs wave 1's 20/24 (83%); ALL 4 RECONCILES BANKED.
  Propagation +328 members / 0 failed / 76 overlays. R22 clean-fleet 140/140.
  Fleet 95.23% fn-count / 92.1% instr / 85.0% distinct (phase opened 92.00 / 87.5 / 78.0).
- THE 83->93% CAME FROM THREE FIXES, ONE PER WAVE-1 FAILURE (the S27 finding reproducing):
  (1) args pasted from the DERIVED manifest, never typed — all 30 paths verified on disk first;
  (2) blocker-capture BEFORE the reconcile fan-out (S29 law: agents cannot run the gate, so a
      match_one-MATCH draft dying on `conflicting types` reads to them as a codegen wall) —
      each got the exact symbol+line plus the two byte-neutral levers;
  (3) wave-1's Opus DISCOVERIES became wave-2's Haiku INSTRUCTIONS (ori-vs-addiu unsigned
      destination; store-sinking scheduler order).
- THE RECONCILES OUT-DIAGNOSED MY CAPTURE: func_80189B78's error named ONE symbol; the agent found
  SIX invented prototypes, two AFTER the splice point where cc1 had not yet reached — all fixed by
  copying the TU's decls verbatim + casting at the call site, zero bytes changed. func_8018584C had
  lever (A) blocked in BOTH directions (the draft must also compile standalone for match_one) and
  closed with the DATA form of the asm-label alias. func_80180A4C was one character class (s32[] vs
  the TU's u8[], declared 11 lines after the splice point).
- Carried: func_80189C4C (the one agent that returned no structured result; gate refused).
2026-08-01 19:35:24 -06:00
Drew T 6e181db771 feat(phase-30 S6f): B-shaped wave — Haiku drafts, Opus closes, +544 members (R22 140/140)
- POOL (derived from the regenerated map): 36 families / 28,829 templatable ins, kind=modal (no
  member matched ANYWHERE so no sweep could reach them), >=20 members, <=60 ins, non-jr, and NOT
  ONE exemplar in ov_SC01_077. Hand-calibrated 3/3 one-shot before scaling (Phase-15/18 discipline).
- WAVE (ultracode; Haiku drafters + Opus escalation, 24 targets): 31 agents, 0 errors, ~2.0M tokens,
  12.5 min. Agents claimed 24/24 MATCH; the whole-binary gate banked 20/24 (83%); propagation
  +524 members / 0 failed / 91 overlays. 17 of 20 banks were HAIKU, 3 Opus — the
  cheap-tier-ab-validated call (Haiku == Opus at <=~50 ins, ~4.8x cheaper) held on real work.
- WHAT OPUS BOUGHT: (1) a `sh` of a constant with the stored width's top bit set needs a u16
  destination — via s16 gcc folds it sign-extended and li emits addiu, via u16 force_fit_type keeps
  it positive and li emits ori; (2) a schedule-reorder closed by STATEMENT ORDER not the permuter
  (gcc's list scheduler preserves relative order of disambiguable stores); (3) three loose-typing
  fn-ptr casts a cheap drafter had misread as delay-slot/permuter residuals.
- MY ERROR (R37/R14): I generated the manifest to .run/s6f_wave_targets.json then HAND-TRANSCRIBED
  the args into the Workflow call, pattern-filling _jr_8017BEBC across overlays where no such split
  exists (corpus.stubs says _jr_8017AE2C). Three agents lost time rediscovering real paths. The gate
  driver written after (.run/s6f_gate.py) DERIVES every TU/split from corpus.stubs and asserts
  nothing. Assert nothing you can derive.
- The 24->20 gap is the known match_one->gate gap (standalone compile cannot see a TU decl conflict;
  Phase 19 measured 88-92% -> 60-71%). 4 carried: func_8018584C, func_80180A4C, func_8017CC80,
  func_80189B78.
- R22 clean-fleet 140/140. Fleet 95.13% fn-count / 92.0% instr / 84.9% distinct
  (phase opened 92.00 / 87.5 / 78.0).
2026-08-01 19:17:18 -06:00
Drew T 381cd56d40 feat(phase-30 B): the x138 era was NOT over — 2 tiny cracks -> 268 members (R22 140/140)
- A: frontier regen at HEAD (sigs + family_hseq) before pricing anything (R35). Also the reason
  it was needed: .run/hseq_verified.*.txt has accumulated 22,841 files across every sweep ever
  run, so any per-family analysis globbing them over-counts; the regenerated map derives state
  from sigs + corpus.stubs (R33), which is the authority.
- B / THE FINDING (third §133-class miss in a row): the S29 checkpoint's structural signal
  "after S2 the x138 era ENDS — those are the last two crackable fleet-wide families" — the stated
  TRIGGER for the phase close — is wrong. Two fresh-crack families with >=126 members were open:
    0x8017cdd8 ov_SC02_039  17 ins x 142 members  PURE
    0x8017ce7c ov_SC03_114  16 ins x 126 members  IMM
  Both kind=modal (NO member matched anywhere, so no sweep could reach them) and neither exemplar
  in ov_SC01_077 — invisible to exactly the two habits this phase already corrected.
- Both hand-drafted off the .s, match_one MATCH on the FIRST try, ~0 agent tokens. First gate
  attempt failed PLUMBING (not DIFF): the draft declared `extern void func_8017CFCC(s32 a0)` while
  the TU DEFINES `void func_8017CFCC(void)` — the target passes $a0 only because the caller's
  incoming argument still sits in the register (loose typing). Byte-true C calls it with no
  argument; re-verified MATCH, gated byte-identical, propagated 266 members / 0 failed / 118 overlays.
- R14 on the seed: the cached Ghidra-C for func_8017CE7C decompiled an entirely DIFFERENT body
  (three calls absent from the asm). Reading the .s is what made it one-shot.
- R22 clean-fleet 140/140. Fleet 94.88->94.96% fn-count, 91.9% instr, 84.6->84.7% distinct.
2026-08-01 18:43:14 -06:00
Drew T aa600c56ef fix(phase-30 S6e): family_sweep snapshotted TUs it never edited — the self-decl lever measures 0, honestly
- D6: hseq_sweep took the tu_snapshots snapshot UNCONDITIONALLY, one line before the `if nfix:`
  that decides whether to edit. A TU that normalize_self_decls merely INSPECTED was therefore
  registered, and the phase-2 MISMATCH backstop attributed ANY group failure to a "self-decl edit"
  that was never made -> revert + `0/N banked`. Measured: 909 of 909 groups took that branch while
  NSD actually fires on ~25% of members (3 of 12 probed). The §103 tu-scope path below has always
  snapshotted inside `if _rep["moved"]:`; NSD now matches it.
- After the fix: NON-NEUTRAL 909 -> 303 (consistent with the fire rate) and STILL 0 banked — the 606
  groups that now take the normal path bank nothing, so the lever's verdict is REAL, not an artifact:
  this residue is not self-decl-conflict-bound. Lever measured, closed, zero.
- R14 on my own conclusion: I byte-measured a firing case instead of trusting the backstop —
  func_80162CCC/ov_SC01_000 builds to 9052dc0e... WITH and WITHOUT the NSD edit (byte-NEUTRAL), so
  the surviving 303 verdicts are wrong too (likely accumulated multi-member edits in one TU).
  Logged as a named open item, not chased: the lever yields 0 either way.
- The tell, twice in one session (§134): a 100% rate is a property of the mechanism, not of 1,622
  different functions. Three earlier sweeps over the same population reported 0 NON-NEUTRAL.
2026-08-01 18:31:55 -06:00
Drew T 39558b2991 fix(phase-30 S6b): MULTI-LINE BLINDNESS in family_remap — 4 faces, 3 fixed; +740 members (R22 140/140)
- ONE root cause, four faces (cookbook §134): extract_unit's preamble scanner reads C
  one line at a time, so every construct that WRAPS was misread.
  D1 the {-guard fired on a documentation comment mentioning a brace -> carry truncated
     mid-comment -> `parse error before 'the'`.
  D2 _def_head_at's "param list continues -> ANSI definition" fallback accepted a WRAPPED
     DECLARATION as a definition head -> a 16-line fragment with no body, closed by a brace
     pair inside a comment -> a silent 0/137 that reads exactly like a compiler wall.
  D5 the backscan met a multi-line typedef's CLOSING line `} T;` first and stopped -> the
     type never travelled -> `T undeclared` across 17 families / 24,332 templatable ins.
     (The code comment claimed they "route through the engine_types.h lift"; measured, they
     routed nowhere.)
  D4 wrapped __asm__("func_...") alias invisible to a single-line regex — MEASURED (1 exemplar,
     3,288 ins, second blocker behind it) and deliberately NOT fixed; it now returns None so the
     sweep reports a VISIBLE skip instead of 137 silent failures (R32).
- Fixes: _def_head_at(ln, idx, more=()) lookahead (no-lookahead keeps the historical answer);
  {-guard exempts comment-only lines + an R32 dangling-comment backstop; forward brace scan
  counts over cdecl._mask (R33, one masking oracle); _typedef_block_start carries whole blocks.
- BLAST RADIUS (R14): extract_unit diffed vs the pre-fix tool over all 181 zero-crack exemplars
  -> 157 byte-IDENTICAL, 24 changed, all in the intended direction.
- PAYOFF: D1+D2 +323 members from families that banked ZERO; D5 +417 incl. func_8012B77C 139/139
  (8,062 ins) and func_80128C98 137/275. S6 total 1,582 members (pre-fix tool scored 842).
- R22 clean-fleet 140/140. Fleet 94.43->94.88% fn-count, 91.4->91.9% instr, 84.0->84.6% distinct.
- TELL worth keeping (§134): bimodal bank rates (57 all / 52 zero / 8 partial) are a TOOLING
  signature, not codegen. Probe one member and read one compiler error before writing a family off.
2026-08-01 17:28:06 -06:00
Drew T 8a519addf7 feat(phase-30 S6a): source-agnostic zero-crack sweep — 842 members banked (R22 140/140)
- family_sweep --hseq --band all (no --source override), 117 pre-classified families:
  staged 2735 drafts / 1239 groups / 0 skips -> BANKED 842, R22 clean-fleet 140/140.
  Fleet 94.43->94.67% fn-count, 91.4->91.6% instr, 84.0->84.5% distinct.
- R37 setup: the 190 zero-crack families decomposed with ZERO builds — 117 sweepable /
  17 §94-§100 multi-line-typedef-blocked (24,332 ins incl. the 275-member 0x80128c98) /
  9 jr (§53 carve path) / 47 remap-REFUSED.
- R14 PREMISE CORRECTION: the "every sweep passed --source ov_SC01_077" mechanism in the
  post-wave checkpoint is wrong (that IS the default and overrides nothing). The real gate
  was --band substantial: only 13 of 181 non-jr families are substantial. --band all is it.
- FINDING: the residue is bimodal — 57 families ALL-banked, 52 ZERO, 8 partial — the shape
  of a per-family blocker, not per-member codegen. 8 probed via the new generic
  .run/s6_diag.py (one build per family, not 137): 7 of 8 are declaration/carry plumbing.
  Two proven family_remap defects located at source (D1 comment-line {-guard truncating the
  preamble carry; D2 _def_head_at accepting a wrapped multi-line DECLARATION as a def head).
2026-08-01 16:42:21 -06:00
Drew T 7e0caf3d25 docs(phase-30): post-wave frontier re-derived + TWO pricing corrections (§133 both ways)
Frontier at HEAD after the 2,192-member propagation: overlays 94.7% fn / 91.8% instr / 85.0%
distinct; 13,658 distinct classes remain.

- S4 PINS RETIRED WITHOUT EXECUTION: planned at 44,279 ins from worklist.md (h_exact-priced,
  x138/fn); family-map priced after the waves it is 24 fns / 101 ins. The same mis-pricing that
  under-valued the frontier head by 138x over-valued this by ~440x.
- S6 ADDED, highest ROI: 190 zero-crack families / 129,997 ins, ~0 agent tokens. 106 of them have
  exemplars OUTSIDE ov_SC01_077, and every sweep this project has run passed --source ov_SC01_077 —
  structurally unreachable, not walled. Probe-confirmed on func_8012B77C (defined in ov_SC07_006,
  still a stub in ov_SC01_000).
- S5 re-derived as the x10-99 band: 243 families / 239,058 ins.
2026-08-01 14:02:25 -06:00
Drew T c579e12315 docs(phase-30): checkpoint — UC waves complete, 33 heads / ~3,560 members, fleet 91.4% instr 2026-08-01 12:12:10 -06:00
Drew T 553e2ed26a docs(phase-30): SESSION-29 CHECKPOINT refreshed — fleet 90.9% instr, T6 wave-2 handoff 2026-08-01 11:20:02 -06:00
Drew T 4d3d8e5e01 docs(phase-30 S3): the stored-draft pass measured — 77% of drafts have DECAYED
Chartered as a diagnostic ('classify; build a fix only if >=3 share a class'). Result: no cheap
shared class, so nothing was scaled — the correct outcome for the charter.

- 30 x138 family heads carry a stored draft = 182,850 templatable ins (plan estimated ~12 drafts)
- only 7 of 30 still verify; 23 have DECAYED (LENGTH-DRIFT/SIZE-MISMATCH/WIDTH/ADDRESSING)
  => a stored draft's recorded closeness is NOT a current fact (extends A10/T1a)
- of the 7: 1 banked clean (func_801754A8, 37 ins x138); 6 hit "conflicting types", and
  gate_stage's ladder recovered 0/6 -> 1 is the §30#2 return-widen class, 5 are PARAMETER
  conflicts (the Phase-16 def-side loose-typing wall)
- the §30#2 attempt REVERTED (R14): the draft's note claimed no split .c carries its own decl —
  the gate named two that do; a sed over all of them touched 2,046 files and still was not green.
  That is the 'bulk header edits BREAK builds' pattern; a fleet-wide decl reconcile needs a gated
  TOOL, not a sed. Exemplar re-verified d19c9580 after revert.
2026-08-01 09:50:38 -06:00
Drew T e64b3cbe41 docs(phase-30): T6 approved — P30 stays open; the measured-frontier continuation (S1-S5)
Drew's call (2026-08-01, P5d in-phase re-plan): gate 2 was reached and deliberately NOT taken —
closing now would strand roadmap-v2 bucket W3 (the overlay family mass) with no owner phase
(P31 = scope-complete/main/resident, P32 = walls/behemoths).

Order derived from the S29 frontier regen, ranked by TEMPLATABLE weight:
  S1 zero-crack propagation (29 families / 67,470 ins, ~0 agent tokens)
  S2 the LAST two reach-138 fresh cracks (func_80176734 51,198 + func_8016EC0C 12,144)
  S3 close=0 stored drafts as a DIAGNOSTIC pass (not a blind re-sweep)
  S4 PINS bounded wave (14 fns / 44,279 ins)
  S5 the x10-133 mid-multiplicity families (142,527 ins)
Excluded: the 2 GIANT walls (P32), the x2-9 mass, the x1 singleton residue.

THE PRICING FINDING (R14/R35): worklist.md ranks by h_exact reach, so a per-location PURE family
is priced x1 — under-pricing the frontier head by up to 138x. Byte-proof: S29's pair was priced
272 and 198 ins and delivered 37,536 + 27,324. func_80176734 (the single largest item on the
board) sits at rank ~50 in worklist.md. Rank family work by .run/family_hseq.json.

THE STRUCTURAL SIGNAL: after S2 the x138 era ENDS (last two crackable fleet-wide families);
everything after is <=133 members and mostly <=9. That cost-per-point rise, not a session count,
is P30's honest ROI floor and T5's trigger.
2026-08-01 08:20:41 -06:00
Drew T 5316c8aa7a docs(phase-30): SESSION-29 CHECKPOINT — at gate 2, awaiting Drew's milestone branch decision 2026-08-01 00:25:18 -06:00
Drew T 34c667cc26 docs(phase-30): T5 pre-close — P7 checkbox walk (T1/T3 closed with measured verdicts) + fresh frontier
- tools-health OK: sigs regenerated post-bank; corpus(+resident) 0 PHANTOM/0 TRUNCATED; cdecl;
  audit-binaries 140/140 citizens (R36); report(lint+dedup) 1905/0; cookbook-index 357 sections.
- Fresh overlay frontier at HEAD: 93.6% fn / 90.1% instr / 82.5% distinct; unmatched 22,550
  instances / 1,298,980 ins / 15,029 distinct classes -> 2,414 families + 3,767 singletons
  (472 substantial / 543,901 templatable ins; 29 zero-crack).
- T1 ticked with its honest scope: delivered as T1a (+18 banked, 16% vs the S16 39% prior which did
  NOT generalize); the ~90 integration-decayed drafts route to T3 redraft lanes (A10).
- T3 ticked with a PER-LANE verdict: Lane B (top-mass) pays and is not exhausted; Lane C (x2-reach
  cached tail) is at the floor (1.33M tokens -> 12 banks -> +0.00pp). The ROI floor is a lane
  property, not a phase property.
2026-08-01 00:24:32 -06:00
Drew T fc307418a5 docs(phase-30): the jr-pair sweep landed 137/137 ×2 — §132a --like over-transfer + fleet 89.6% instr
- 2 × 138 = 276 function-instances banked (exemplar + 137 siblings each); the -O0 cluster is now
  COMPLETE fleet-wide (these were the last open stubs in every overlay's _o0* region)
- §132a: --like matches by subseg ROLE NAME; ov_SC07_010 shares the exemplar's _o0 role (the only
  other overlay so named — the other 136 are _o0c, whose role never matched, which is the only
  reason the sweep worked at all). Six derived starts for three emitted tables; guard shipped.
- R22 clean-fleet 140/140. Fleet 93.33% fn-count / 89.6% instr / 81.6% distinct (+260 unique fns);
  dedup 1905/0; 0 NON_MATCHING (G4). Phase arc: 92.00->93.33 / 87.5->89.6 / 78.0->81.6.
2026-08-01 00:15:15 -06:00
Drew T b9a68b51f9 fix(phase-30): §100 draft-local types for func_8013BD74 — a file-scope typedef is an exemplar-only bank
The 1-sibling probe (R37) gate-failed: ov_SC01_000's object emitted only func_8013C0F8 +
func_8013C414 tables, because BD74's body never compiled — `E_13BD74' undeclared. The draft
declared E_13BD74/P_13BD74 at FILE scope and extract_unit/remap_hseq carry only the BODY, so
the types stay behind in the exemplar. Same §94 class that held func_8013C08C at 0/137 earlier
this phase; fix is §100 (block-scope types travel with the body, byte-neutral — a type emits no
code). Exemplar re-gated: ov_SC01_077 d19c9580 BYTE-IDENTICAL. B83C's draft was already
draft-local. Named in one command by the §132 ladder.
2026-07-31 23:39:38 -06:00
Drew T b9efe66f91 fix(phase-30): the JR-PAIR "wall" was TWO instrument defects — pair banked, class retired
S28 ledgered `JR-PAIR-IN-ONE-O0-OBJECT` (two jr fns matched in one -O0 object => a clean
build that cannot link: `undefined reference to $L105` + `func_8013C938`) with §81 step 1
(isolate one into its own code subseg) as the untested escape. BOTH the class and the escape
are REFUTED — no isolation, no compiler wall, both fns banked from a genuinely clean fleet.
The 4th consecutive "structural wall" to resolve to our own tooling (§124/§125/§126/§131).

- DEFECT 1 (tools/jtbl_carve.py): ov_SC01_077_o0's carve at 0xb01a4 predates the §8e
  `tables=` persistence and is a MERGED DOUBLE (func_8013C0F8 $L75 + func_8013C414 $L105);
  the 2nd owner is MATCHED so extract pruned the stub .s naming its table. The single-table-
  predecessor inference derived 3 starts where the object emits 4 tables -> JTBL_PADS 0,4,4
  -> jtbl_rodata_pads refused mid-stream, correctly. FIX: R32 coverage assertion + payload
  recovery at the single choke point (spec_from_starts) — every zero word inside a span is an
  original `.align 3` pad (the tool's own axiom), so the word after it STARTS a table;
  recovered starts are logged. No-op where structure is known (the 134 sibling _o0c spans
  carry tables=+0x0,+0x70). Honest limit: tight (0-pad) boundaries stay unrecoverable but
  fail LOUD via the filter's count guard — never silent.
- DEFECT 2 (Makefile): no .DELETE_ON_ERROR, so `as` (a pipeline consumer) left a TRUNCATED .o
  on disk — 12 of 16 T func_, undefined $L57/$L59/$L63/$L75/$L76 — newer than its .c, and the
  NEXT build linked the corpse. That IS the S28 link error, one build downstream of a loud,
  correct compile error. Negative-control-proven on a scratch invocation.
- BANKED: func_8013B83C (272 ins) + func_8013BD74 (198 ins) in ov_SC01_077 (d19c9580).
  Byte proof: 4 tables 0x801D8254/828C/82FC/836C (13/27/27/27 entries, each zero-pad
  separated); span 0xb00fc..0xb0280 = 388 B = 52+4+108+4+108+4+108 exactly; spec 0,4,4,4.
- R22 clean-fleet (make clean + extract-all + check-all): 140 passed, 0 failed of 140.
  The incremental result was NOT trusted (§130). Fleet 93.25% fn-count / 89.2% instr /
  80.5% distinct; dedup 1905/0; 0 NON_MATCHING (G4).
- cookbook §132 + index (356 sections): the mechanism, the fingerprint (an undefined $L<n> in
  a LINK error is a truncated object, never codegen), the 30-second standalone-TU ladder that
  named the 4th table owner before any build, and the transferable rule — a fail-loud guard is
  only as trustworthy as the artifact hygiene around it.
2026-07-31 23:35:14 -06:00
Drew T b58fd82068 docs(phase-30): SS131 the jtbl OVER-SPAN + checkpoint — #9 SOLVED, JTBL-CARVE-BREAKS-BYTES retired
SS131: `sltiu N` is ground truth in BOTH directions. jtbl_range already EXTENDS a span the
dlabel cut short and WARNS when a span is shorter than the bound, but had no clamp for a
span too LONG for a NON-ZERO reason — and the trailing trim only removes ZERO words, so
ordinary data that spimdisasm ran into the dlabel slipped through and under-filled the piece.

Records the reusable FINGERPRINT of an under-fill, because it does not look like codegen:
hundreds of 1-byte diffs spread over most of the overlay, ~95% at byte 0 (mod 4) = the low
byte of a 16-bit immediate, every one changing by exactly -4. Bucket differing bytes by
offset%4 and decode a few words; uniform small deltas in the immediate field mean LAYOUT,
not codegen. (Measured: 812 of 853 at pos 0 mod 4, all -4.)

The clamp's authorization matches the extension path exactly: unambiguous sltiu bound only,
and REFUSE LOUDLY if any surplus word is a plausible code address.

This was the single instrument failure that survived SS125's retraction round — the one case
where "the tool is broken" was actually true. Now fixed, with the 710-ins behemoth banked.
2026-07-31 20:05:44 -06:00
Drew T 20e970a928 docs(phase-30): SESSION-28 CHECKPOINT — fresh-session handoff for T1/T3, Max prompt for #9
Fleet 93.25% fn-count / 89.2% instr / 80.5% distinct; R22 140/140 (thirteen runs).
Nothing running, tree clean, lock FREE.

Records for the fresh session: the ordered resume list (T1 + T3 need /effort ultracode and a
WAIT for the toggle; #9 and T5 need Max), the JR-PAIR-IN-ONE-O0-OBJECT wall with its untested
SS81-step-1 escape, and the S28 ROI evidence that a 15-target wave bought 12 banks and +0.00pp
headline — so waves are only worth resuming against HIGH-REACH targets.

Flags the milestone reality plainly rather than leaving it for T5 to discover: 89.2% instr
against a >=95% bar, with the remaining volume in main + the 39 type-1 modules (P31 scope).
P30 realistically closes on the milestone's LEDGER branch, which is an explicit either/or in
the approved milestone — Drew's call, deliberately.

Adds the S28 HONESTY LEDGER: five wrong calls this session, each caught by an oracle, none
committed. The standing consequence is stated once, at the top of the handoff: only a full
clean-fleet R22 counts, and a tool's exit status is never the oracle.

Also removes a duplicated results section left by my own earlier checkpoint edit.
2026-07-31 18:54:30 -06:00
Drew T 7281e0af57 docs(phase-30): SS129 (two jr traps) + checkpoint — 1 of 3 reach-138 targets banked, 2 ledgered
SS129a: post-carve, rtu_match/match_one COUNT THE JUMP TABLE AS INSTRUCTIONS. For
func_8013BD74 it reported `mine=198, target=226, 206 mismatched` — and 226-198=28 is
exactly the table's entry count. A draft that verified cleanly BEFORE the carve reads as a
total mismatch AFTER it, and the number looks like deep codegen trouble. SS81 says a jr fn's
match_one MATCH is not a bank; SS129a says its post-carve DIFF is not a diff either. Let the
whole-binary gate arbitrate.

SS129b: NEVER commit a carve whose owner is still a stub. harvest_verify refuses a dirty
tree (SS97) and the carve dirties config/, so committing the carve to get a clean tree is
tempting — and it STRANDS the carve. jr_inventory refused instantly (R32: "carve ownership
is not 1:1 ... UNOWNED 0x801d828c"), blocking every later jr operation on that overlay.
Reverted; R22 140/140. The route for a jr fn is the INTEGRATED jtbl_family_bank (carve ->
extract -> remap -> gate per sibling in ONE uncommitted transaction). The SS81 hand-chain is
for diagnosis; as a banking path its two constraints contradict each other.

Both were mine, both caught by oracles before any lasting damage, both now documented.
Ledger: JTBL-PAD-SPEC-DRIFT (func_8013BD74, with the exact SS8e error) and CC1-FAIL-UNREAD
(func_8013B83C — the diagnostic is genuinely unread; say so rather than guess).

Fleet 93.21% fn-count / 89.1% instr / 80.4% distinct.
2026-07-31 14:45:28 -06:00
Drew T 2ab945035a docs(phase-30): SS128/SS128a — a raw NUL makes grep silently skip a C source (137 files); negative controls use scratch copies 2026-07-31 14:18:47 -06:00
Drew T a98d138c73 docs(phase-30): SS127 the -O0 idiom set + SESSION-28 wave checkpoint (honest ROI)
SS127/SS127a/SS127b distil what the wave's agents kept re-deriving, because the index
fired on only 3 of 15 targets:
- the -O0 CONSTANT-OFFSET FOLD: `p->f` folds to `lbu 3(r)`, `p[i]` does NOT (addiu +
  0-displacement load). At -O2 these converge, which is why nothing in SS1-SS126 covers it.
- the -O0 regime generally: spill/reload pairs are REAL named locals; load-delay nops and
  redundant copies are normal; write plain C, the -O2 steering levers are inert here.
- SS127a: SS71 sibling-first is the STRONGEST -O0 lever — an -O0 TU is a near-uniform code
  regime, so a banked sibling's shape transfers far better than at -O2.
- SS127b: two agents' decisive levers came from a SOURCE COMMENT in ov_SC01_077_o0.c, not
  from docs/. Promote levers out of source comments or every future agent re-buys them.

Checkpoint records the wave AND its honest ROI: 1.33M tokens for 12 banks and +0.00pp
headline. The value is contingent on three reach-138 functions, and all three are
currently unpropagated (func_8013C08C 0/137, SS94 type-carry) or gate-failed
(func_8013BD74 CARVE-REFUSED, func_8013B83C CC1-FAIL). Fix propagation before wave 2 —
drafting more x2-reach targets is not where the leverage is.
2026-07-31 14:05:56 -06:00
Drew T 19fa204305 docs(phase-30): T4 ticked — posture audit + grinder ILS wiring (yield unproven, flagged) 2026-07-31 12:26:30 -06:00
Drew T f87810a3be docs(phase-30): SESSION-28 checkpoint — cluster harvest complete (1,638 banks, 0 agent tokens); fleet 93.17/89.1/80.4, distinct crosses 80% 2026-07-31 11:38:40 -06:00
Drew T 4ae54004f3 docs(phase-30): SESSION-28 checkpoint — the -O0 harvest (1,364 banks, 0 agent tokens); fleet 93.09/88.6/79.3, R22 140/140 2026-07-31 11:01:00 -06:00
Drew T 88aaa7d59f docs(phase-30): T2 marked COMPLETE — route proven, tooled, swept fleet-wide (report point #3) 2026-07-31 10:14:58 -06:00
Drew T bbd51be24a docs(phase-30): SS126a — a bare except around a coverage oracle re-creates the silent skip
I under-counted this cluster 8x (reported 275 stubs/18 overlays; truth 2,184/138). The
scan ran during a background rebuild AND wrapped corpus.stubs() in `except: continue`,
so every R32 coverage refusal became a silent skip and the total was taken over the few
overlays that happened to be re-extracted already.

Two of our own rules broken at once: a measurement taken during a rebuild is not a
measurement (caught EARLIER the same session, by the same assertion I then suppressed),
and R32 lives in the CALLER — an oracle only asserts coverage if the caller lets it raise.

It also cost credibility the other way: I used the bad number to declare the T0(f)
"2,192 open members" pin STALE. The pin was right. R35 applies to a re-measurement as
much as to the original measurement.

Checkpoint updated with the corrected population and the completed fleet-wide sweep.
2026-07-31 10:14:30 -06:00
Drew T ae42d261c3 docs(phase-30): checklist reconciled with reality — T0.5 ticked, T2 marked part-done with its deviation
- T0.5 was COMPLETE in SESSION-27 (124/124 programs, 7,716 files) but left unticked;
  corrected, with the omission noted rather than silently fixed.
- T2 marked [~] part-done and its DEVIATION recorded against the phase-start plan:
  the PRIMARY (two-file atomic o0b append) was byte-refuted, and the FALLBACK premise
  was ALSO wrong — Arm-A does not bite. What actually blocked it is §126. Route proven,
  tool shipped, 6 banked; the 18-overlay sweep of the 0x8013B568 cluster remains, sized
  at 275 open stubs (re-derived; the T0(f) "2,192" pin is stale).
2026-07-31 08:45:15 -06:00
Drew T 803d73bb97 docs(phase-30): SESSION-28 checkpoint — T2 proven + tooled; fleet 92.71/88.3/78.7, R22 140/140
Records the T2 result as the phase's biggest unblock: the carve-within-a-carve is
byte-neutral (Arm-A does NOT bite), the real constraint is that an address range is
not an optimization region (SS126), and tools/o0_subsplit.py implements the correct
bound. Measured, not assumed, what it unblocks: 275 open stub instances across 18
overlays in the 0x8013B568..0x8013C98C cluster, homed in an -O2 jr split — plus a
note that the T0(f) "2,192 open members" pin is STALE and must be re-derived before
costing (R37).

Also flags my own under-count: the "15 contiguous -O0 fns" came from an asm scan that
cannot see matched functions.
2026-07-31 08:44:31 -06:00
Drew T 8d4f2a38cb fix(phase-30): RETRACT 2 of 3 jr wall verdicts — SS125 rewritten; my measurement was the defect
Max-effort re-measurement of the three jr refusals I ledgered earlier this session.
Two of the three verdicts were FALSE. Every number below is SHA vs config/check.<ov>.sha
from a clean tree, with the restore re-verified.

  func_8018057C / ov_SC01_009 : jr_isolate_all is BYTE-NEUTRAL
      -> "JR-ISOLATE-BREAKS-BYTES" RETRACTED; original failure not reproducible.
  func_80191C50 / ov_SC06_018 : isolate NEUTRAL -> carve DIVERGED
      (got 1b1667ea, want cbbc4f44) -> the ONE real instrument failure. CONFIRMED.
  func_8017BEBC / ov_SC04_004 : carve is BYTE-NEUTRAL (body-free)
      -> failure is the TEMPLATED BODY, the OPPOSITE of what SS125 first claimed.
      Re-probed once more from a verified-clean tree: still gate-fail. Reclassified
      BODY-TEMPLATE-GATE-FAIL.

So the tidy "two apparent walls are ONE tooling problem" conclusion was wrong: they
are two different problems, and the third target has no demonstrated problem at all.

ROOT CAUSE, and it is mine not the tools': a grep-of-the-build-log gate inside a driver
that did not revert on abort. config/overlays.mk is SHARED, so target 1's half-applied
isolate was still in the tree while target 3 was measured. Separately reproduced the
SS42b stale-object trap head-on: `git checkout -- config/` WITHOUT a re-extract turned a
byte-identical overlay into [FAIL] got 8f28aa77 / want 38a3d919 (Phase-20's R22
corollary, live).

SS125 rewritten. The METHOD (split the carve from the body, one build) is kept and is
what refuted this section's own first conclusion; what is added is the instrument rules
that make its answer trustworthy: compare the SHA against config/check, never grep the
log; re-extract after every config change AND every revert; a driver that aborts a
target must revert it before the next; verify the BASELINE against canonical too.
Meta-lesson recorded: SS53 says a 0% from the wrong TOOL manufactures a doctrine — this
is the same failure one level up, a verdict from the wrong MEASUREMENT, and my own
diagnostic script is an instrument subject to R35 like any other.

Ledger corrected in place (3 entries, superseding the earlier misattributions), so the
scheduled repair is the right one. No source/config change; no bank affected; the fleet
is untouched at 140/140 (last full R22 this session, HEAD commit:1263).
2026-07-31 08:20:29 -06:00
Drew T c95b61063f docs(phase-30): SS125 split the CARVE from the BODY; 3 jr residues ledgered by STAGE
The session's most useful finding is an instrument ticket, not a match.

SS125 (new): before ledgering any jr residue, run jtbl_carve with NO body spliced
and rebuild. Byte-identical => the carve is neutral and the failure is the template;
NOT identical => the failure is the carve and the body was never fairly tested.
One build, and it collapses ambiguity that SS53 warns has twice steered strategy.

MEASURED: group B func_8017BEBC had gate-failed 3 probes in a row (default AND
--raw, cross-address ov_SC02_015 AND same-address ov_SC04_004). Carve-only on
ov_SC04_004 broke the bytes with nothing spliced — so all 3 probes were testing a
body that never got a fair run. The SAME stage had already refused behemoth
func_80191C50/ov_SC06_018. Two "unrelated walls" = ONE tooling problem.
func_8018057C/ov_SC01_009 fails at a DIFFERENT stage (jr_isolate_all, step 1) and
is deliberately NOT grouped with them.

Both tools reported SUCCESS on every failing target; only the whole-binary gate
refused (G3/P9). A tool's exit code is not the oracle.

Ledger: the three logged by STAGE (JTBL-CARVE-BREAKS-BYTES / JR-ISOLATE-BREAKS-
BYTES), not by function, so a carve fix auto-reopens every target it should.
None is diagnosed, so none is called a compiler wall — that guess has been wrong
four times running on this project (R35).

CURRENT_PHASE: SESSION-28 checkpoint refreshed; the carve diagnosis is now resume
item 1 (it gates 13 members + a 710-ins behemoth and every future jr family).
2026-07-31 08:08:45 -06:00
Drew T a293eeeb6a docs(phase-30): SESSION-28 checkpoint + cookbook §124/§124a (the asm-label alias blind spot)
- §124: a "not matched" verdict can mean the definition is there under a DIFFERENT
  C NAME (the §37/§73 asm-label alias). The whole "no matched unit" skip class was
  one exemplar x 137 members. Includes the two traps in the fix (re-derive the
  pattern PER FILE; CARRY the alias declaration or the sibling emits the wrong
  symbol and still links) and the law: when corpus.stubs and a source scanner
  disagree, the SCANNER is wrong.
- §124a: `0 matched-exemplar families` from family_sweep may be the --band FILTER
  (defaults to `substantial`), not a wall — same shape as §53 / §116.
- cookbook-index regenerated (tools/cookbook_index.py, R33).
- CURRENT_PHASE: SESSION-28 checkpoint. Fleet 92.70 fn-count / 88.3 instr / 78.7
  distinct, R22 140/140. Records the 4th -O0 region VERIFIED + SIZED (30 instances
  / 1,504 ins, ov_SC03_014+015 only) and correctly BLOCKED on the T2 re-carve, and
  two R14 corrections to my own SESSION-27 checkpoint (the 137 were skips not
  failures; the cause was not "banked in the wrong binary").
2026-07-31 07:56:22 -06:00
Drew T 703b8e6863 docs(phase-30): SESSION-27 checkpoint — fleet 92.67/88.3/78.7, R22 140/140, nothing running, resume list ordered 2026-07-31 07:26:43 -06:00
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 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 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 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 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 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 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