Commit Graph

1783 Commits

Author SHA1 Message Date
Drew T ea94fece6f chore(phase-30 S49): checkpoint — lane-A re-sweep 48 banked, R22 213/213, fresh honest ledger
- 48 lane-A members banked (30 non-jr family_sweep + 18 jr jtbl_family_bank); fleet
  96.53% fn / 95.1% instr / 89.8% distinct; stubs 12,661 -> 12,613; dedup 1,949/0.
- R37 probe: PLUMBING-retry 0/4 -> 4/4 on repaired instruments (pre-repair ledger partly
  fiction); bulk re-measure: 458 fresh verdicts, ~331 decl-agreement / 28 genuine DIFF /
  89 md typedef-gather; 264 STRUCT by design -> cousin fuel; 122 unresolved-IMM (T2a).
- named tool findings: reconcile 'syntax before *' defect (80189540 x4); §154-A fresh
  refusal message (20 md jr ledgered); family_sweep phase-26 commit tag; jtbl needs
  operator per-family commits (driver v2).
- next: wave 7 off the cousin slate (regen chain + ultracode toggle), or T5 close.
2026-08-12 21:30:51 -06:00
Drew T ebc2da001a feat(phase-30 S49): jr lane — func_80183bac banked via jtbl_family_bank (lane-A re-sweep) 2026-08-12 21:25:02 -06:00
Drew T dfd6be8b38 feat(phase-30 S49): jr lane — func_80185440 banked via jtbl_family_bank (lane-A re-sweep) 2026-08-12 21:24:24 -06:00
Drew T a194268e01 feat(phase-30 S49): jr lane — func_80180b04 banked via jtbl_family_bank (lane-A re-sweep) 2026-08-12 21:21:29 -06:00
Drew T f93ad8cd2f feat(phase-30 S49): jr lane — func_80189030 banked via jtbl_family_bank (lane-A re-sweep) 2026-08-12 21:16:23 -06:00
Drew T 24b866789b feat(phase-30 S49): jr lane — func_8018cc40 banked ×9 via jtbl_family_bank
- lane-A jr re-sweep: 9/9 siblings banked (SC03_001/002/124/125, SC04_015/019/020,
  SC05_017/018), per-binary SHA-gated by the carve driver; new jr splits + yaml carves.
- func_80189540 family 0/4: reconcile-transform defect ('syntax error before *') — tool
  class, ledgered, NOT codegen. §154-A md probe x4: fresh refusal 'jump tables only, not
  an island of mixed included data' — 20 md jr members ledgered as the known structural gap.
2026-08-12 21:13:46 -06:00
Drew T 9c2db69fc8 feat(phase-26): h_seq family sweep — 26 member-matches banked via remap_hseq 2026-08-12 21:07:48 -06:00
Drew T 4cee2160fe feat(phase-26): h_seq family sweep — 4 member-matches banked via remap_hseq 2026-08-12 20:59:31 -06:00
Drew T b3713cc3ca feat(phase-30 S49): the cousin tier — family_cousins.py similarity map + seeded wave-7 slate (§168)
- FINDING (Drew's smell, byte-verified): the '4,513 unique singletons' picture is substantially
  an h_seq exact-hash artifact — 86/120 near-pairs in the 0.85-0.99 band differ by PURE
  insertion/deletion (li-expansion tell in 25). Specimen: ov_SC06_010:0x8017bebc (753 ins,
  'singleton') is 0.987-similar to a MATCHED fn in the same binary.
- NEW tools/family_cousins.py: distinct open skeletons -> shingle index -> >=0.85 union-find ->
  matched-seed attachment -> .run/family_cousins.json + docs/family-cousins.md. R32 BOTH ways
  (independent stub recount fails loud on a stale map — negative-control-proven; partition
  assert). Reproduced the probe within +-1%; totals EXACT (11,627 inst / 584,448 ins).
- Unit table: A-prop 197u/68,729ins · seeded 418u/50,422 · cousin-multi 1,552u/249,799 ·
  cold 3,240u/215,498 — the genuinely-unique tail is 37% of the remainder, not 90%.
  Main's 'structurally barren' HOLDS at the similarity tier (94% mass <0.70).
- --targets wave slate: .run/wave7_targets.json = 40 targets / 33,304 unit ins (+33% vs
  family-ranked), 9 resolved seed C paths, size-routed 2 haiku/20 sonnet/18 opus.
- LAWS (§168): a cousin is a SEEDED CRACK never a remap; rank waves by UNIT weight; discount
  short-fn similarity. Byte-gate stays the sole arbiter (G3/P9).
- docs/family-hseq.md: this session's frontier regen (post-S48 propagations) rides along.
- cookbook §168 + SETUP inventory row (R16/R21/R30); CURRENT_PHASE S49 entry.
2026-08-12 20:53:40 -06:00
Drew T 4cf5847da3 chore(phase-30 S48): FINAL session checkpoint — 684 banked, 95.1% instr, R22 213/213
Fresh-session safe. 197 commits; six waves (bank rates 67/79/69/68/73/60%);
cookbook 508 sections with all six idiom harvests banked (§162-§167).

Resume order: T5/phase close is a LIVE option (the >=95% instr milestone is met
and holding); otherwise wave 7 from tools/wave/crack_wave.js after a regen.

§167's saturation signal is the strategic finding: COVERED+UNSOUND went
57% -> 64% -> 76% across three harvests, five new laws from 197 claims. Stop
mining waves for idioms; spend the tokens on cracks.

Carries the session's central lesson: four times a tool asserted a conclusion it
never reached, and I repeated the pattern once myself. A confident wrong label
costs more than a missing one.
2026-08-12 18:55:35 -06:00
Drew T 57ff04c1ac docs(phase-30 S48): §167 — wave-5/6 harvest, and the saturation signal
27 note-sets, 197 claims, one skeptic each, against a cookbook already holding
§162-§166 from this campaign:

  NEW 5 · SHARPENS 43 · COVERED 126 · UNSOUND 23
  byte-probed 92 · single-instance 75 · asserted 30

COVERED+UNSOUND: 57% (§164) -> 64% (§165) -> 76% (here). The duplicate rate
rises monotonically as the base grows. FIVE genuinely new laws out of 197
claims is the signal that the idiom well for this class of function is
approaching dry — future waves should spend tokens on cracks, not on mining
notes for idioms, and harvest only what a skeptic grades byte-probed.

The skeptics ran their own A/Bs this round. Best example: a crack agent claimed
"the source STATEMENT BOUNDARY decides whether the scheduler hoists a
far-consumed load". The vetter built that spelling and got .text BYTE-IDENTICAL
to the inline form, then swept eight POSITIONS and got five distinct objects —
showing the lever is statement position (the already-banked INSN_LUID
tie-break), not the boundary. Plausible mechanism, refuted by measurement, true
lever named in its place.

46 entries banked as §167-01..46; §167z records the 23 refutations.
cookbook_index.py: 508 sections.
2026-08-12 18:55:05 -06:00
Drew T 0fc297184c fix(phase-30 S48): §166a — strike the causal claim I did not verify (R14)
I banked the crack agent's story that a wrong-TU citation CAUSED
func_8017F2D4's seven gate refusals, and relayed it to Drew, without checking
it. corpus.stubs() derives each stub's TU from the actual INCLUDE_ASM site and
gate_stage splices via corpus — the harness was always editing the right file.
Only the PROSE was wrong.

Measured: func_8017F2D4 is still a stub, still classifies DIFF, and is a
has_mid_jr function referencing jtbl_801CC504 — so it carries a jump table the
standalone gate cannot see. The real residual is CAUSE NOT DETERMINED.

The ORACLE stands on its own evidence (the asm subdir's third component IS the
TU stem, by construction from the split config). The causal story does not, and
is now marked as such. This entry was written to stop a tool printing an
unmeasured cause and its first draft printed one.
2026-08-12 18:34:40 -06:00
Drew T 4144eabc74 chore(phase-30 S48): checkpoint — 684 banked (13,345 -> 12,661), R22 213/213
Wave 6 added 110 (24 cracks + 23/24 families propagated). Fleet 95.1% instr /
89.7% distinct / 96.51% fn-count. R22 clean-fleet run 9x this session, 213/213
every time. Bank rate across six waves: 67/79/69/68/73/60%.

Records §166a (the destination-TU oracle) and the four-instance pattern it
completes: a tool asserting a conclusion it never reached. A confident wrong
label costs more than a missing one.
2026-08-12 18:31:30 -06:00
Drew T 471e573ce0 feat(phase-30 S48-T6): propagate func_8017FB9C to its zero-crack siblings 2026-08-12 18:28:34 -06:00
Drew T ab4fe5eab0 feat(phase-30 S48-T6): propagate func_80181500 to its zero-crack siblings 2026-08-12 18:28:24 -06:00
Drew T 1117e3a3a9 feat(phase-30 S48-T6): propagate func_8017C004 to its zero-crack siblings 2026-08-12 18:28:14 -06:00
Drew T 46a2bf56af feat(phase-30 S48-T6): propagate func_80181948 to its zero-crack siblings 2026-08-12 18:28:00 -06:00
Drew T 62081315ab feat(phase-30 S48-T6): propagate func_8017F17C to its zero-crack siblings 2026-08-12 18:27:42 -06:00
Drew T a4fafab85e feat(phase-30 S48-T6): propagate func_80183834 to its zero-crack siblings 2026-08-12 18:27:17 -06:00
Drew T 9066ffcd06 feat(phase-30 S48-T6): propagate func_80184380 to its zero-crack siblings 2026-08-12 18:26:59 -06:00
Drew T 79be5b1ed9 feat(phase-30 S48-T6): propagate func_8017BEF8 to its zero-crack siblings 2026-08-12 18:26:45 -06:00
Drew T db2f5fefb3 feat(phase-30 S48-T6): propagate func_8017F570 to its zero-crack siblings 2026-08-12 18:26:34 -06:00
Drew T c2374589c4 feat(phase-30 S48-T6): propagate func_80182D80 to its zero-crack siblings 2026-08-12 18:26:22 -06:00
Drew T 3962c03150 feat(phase-30 S48-T6): propagate func_801EFF54 to its zero-crack siblings 2026-08-12 18:26:07 -06:00
Drew T 97877acd0a feat(phase-30 S48-T6): propagate func_80181C78 to its zero-crack siblings 2026-08-12 18:25:57 -06:00
Drew T fc58acbf3b feat(phase-30 S48-T6): propagate func_8017F398 to its zero-crack siblings 2026-08-12 18:25:43 -06:00
Drew T 96fe3198b9 feat(phase-30 S48-T6): propagate func_8018291C to its zero-crack siblings 2026-08-12 18:25:28 -06:00
Drew T ab63aa0411 feat(phase-30 S48-T6): propagate func_80184AFC to its zero-crack siblings 2026-08-12 18:25:11 -06:00
Drew T 1ce9125d8c feat(phase-30 S48-T6): propagate func_8018B19C to its zero-crack siblings 2026-08-12 18:24:54 -06:00
Drew T 78fe17bd52 feat(phase-30 S48-T6): propagate func_8017D678 to its zero-crack siblings 2026-08-12 18:24:37 -06:00
Drew T 3d627b97a9 feat(phase-30 S48-T6): propagate func_8017C814 to its zero-crack siblings 2026-08-12 18:24:23 -06:00
Drew T 9dc9d6e07b feat(phase-30 S48-T6): propagate func_8017FE28 to its zero-crack siblings 2026-08-12 18:24:05 -06:00
Drew T e807e1d571 feat(phase-30 S48-T6): propagate func_80183658 to its zero-crack siblings 2026-08-12 18:23:49 -06:00
Drew T 440b244c18 feat(phase-30 S48-T6): propagate func_80184E4C to its zero-crack siblings 2026-08-12 18:23:30 -06:00
Drew T 1276105f06 feat(phase-30 S48-T6): propagate func_801807D0 to its zero-crack siblings 2026-08-12 18:23:13 -06:00
Drew T 90f8f3aff9 feat(phase-30 S48-T6): propagate func_80188348 to its zero-crack siblings 2026-08-12 18:22:49 -06:00
Drew T 80f3ee7397 fix(phase-30 S48): §166 — the destination-TU oracle, and stop printing a guess as a finding
gate_stage labelled every "standalone MATCH / whole-binary DIFF" with
"(declaration/TU plumbing)". The tool never checked for a declaration conflict —
that was a GUESS printed as a diagnosis, and func_8017F2D4 carried it through
SEVEN attempts across five waves while every agent hunted codegen. The body was
byte-correct from the first attempt; the notes had simply named the wrong
destination TU (a file holding only a caller + prototype), and splicing there is
a no-op that leaves the INCLUDE_ASM bytes in place.

- gate_stage now says only what is true (the two oracles disagree) and hands
  over the check that resolves it, instead of naming a cause it did not measure.
- §166a banks the oracle: asm/<ov>/nonmatchings/<TU_stem>/<fn>.s => the
  INCLUDE_ASM is in src/<ov>/<TU_stem>.c. The third path component IS the TU
  stem, derived from the split config, and it beats any prose citation — a grep
  for the function name also hits callers and prototypes in OTHER TUs and reads
  exactly like a destination hit.
- Plus the two probe gotchas that cost wave-5/6 agents real time: the wrong
  --aspsx-version fakes ~32 ori-vs-addiu mismatches, and a collateral-drift
  check must filter to sized symbols (nm -S) or the zero-size .NON_MATCHING
  aliases all report false drift.

cookbook_index.py: 506 sections.
2026-08-12 18:14:21 -06:00
Drew T c55ad64614 feat(phase-30 S48-T6): wave 6 — 24 exemplars banked; the gate-refusal ROOT CAUSE found
Wave 6 (wf_9729fd89-c16, 76 agents, 6.7M tok): 40 targets -> 35 agent-MATCH,
1 refuted, 0 UNVERIFIED (the new field works), 4 NEAR -> 24 BANKED.

*** THE FINDING OF THE CAMPAIGN, and it is not a compiler idiom ***
func_8017F2D4 had been "MATCH standalone / DIFF at gate" SEVEN times across
five waves. Every attempt hunted codegen. The body was byte-correct the whole
time. The fault was that the prior notes named the WRONG DESTINATION TU:
..._jr_8017C340.c holds only a CALLER and a prototype; the INCLUDE_ASM lives in
..._jr_8017ED5C.c. Splicing into the wrong file is a no-op, the binary differs,
and harvest recorded its canned string "match_one MATCH but gate rejected
(declaration/TU plumbing)" — A GUESS, NOT A MEASUREMENT. No declaration
conflict ever existed.

NEW LAW (zero-cost oracle): THE SPLAT ASM SUBDIR NAMES THE DESTINATION TU.
asm/<overlay>/nonmatchings/<TU_basename>/<fn>.s  =>  the INCLUDE_ASM is in
src/<overlay>/<TU_basename>.c, always — the third path component IS the TU
stem. Never accept a prose TU citation that disagrees with the --asm-subdir you
were handed: a grep for the function name also hits callers and prototypes in
OTHER TUs and reads exactly like a destination hit. Corollary: re-derive the TU
path from the asm subdir BEFORE hunting codegen on any gate-refused backlog
entry.

The agent proved it properly: in-situ splice into BOTH TUs, full pinned triple,
279/279 with 0 masked diffs, plus a collateral-drift check (71/71 other sized
symbols byte-identical). It also corrected the reach to x2 (only two .s files
for that function exist, byte-identical modulo the overlay name).

Bank rate across six waves: 67% -> 79% -> 69% -> 68% -> 73% -> 60%.
2026-08-12 18:13:19 -06:00
Drew T 4162c32d6e fix(phase-30 S48): unescaped backtick in the wave prompt (2nd occurrence) + a guard note
A markdown backtick inside the prompt's template literal terminates the string
and the workflow dies at parse time. Cheap (0 agents, 0 tokens) but it has now
cost two launches, so the file carries a warning at the top: use double quotes
for inline code in prompt prose.
2026-08-12 16:46:51 -06:00
Drew T 67b0d70493 fix(phase-30 S48): parameterize the wave output dir (it was hardcoded to wave4)
Wave 5 wrote its drafts into .run/wave4/ because the script was built by
sed-ing the wave-3 copy. Harmless (per-function dirs) but wrong. Pass
{wave:'waveN'} on any target; defaults to '.run/wave/' so a missing field can
never silently reuse a prior wave's directory. Meta name/description are now
generic too — this is THE crack-wave script, not wave 4's copy.
2026-08-12 16:45:35 -06:00
Drew T 8d261f0c4f feat(phase-30 S48): wave harness — in-situ TU gating for gate-refused repeats
A prior attempt that was GATE-REFUSED (standalone MATCH, whole-binary DIFF) has
an in-TU residual, so the standalone gate cannot see it. A wave-5 agent closed
exactly this by splicing into the real destination TU, running the pinned
triple end-to-end, and masked-diffing the function out of the WHOLE-TU object
(0 mismatched, 279/279). That is now instruction, not luck.

Carries both gotchas it paid for: the wrong --aspsx-version produces ~32
spurious mismatches all of the ori-vs-addiu li-form shape (the fingerprint of a
version mismatch, not a codegen residual), and engine_core.h resolves relative
to the including file so the spliced TU needs a directory + shared symlink.

Also warns that two wave-5 agents found their predecessor's file/line citations
wrong while its idioms were right — re-derive the TU, don't trust quoted lines.
2026-08-12 16:45:15 -06:00
Drew T 4181b865f2 chore(phase-30 S48): checkpoint — 574 banked, FLEET CROSSED 95% instr, R22 213/213
Wave 5 added 152 (29 cracks + 28/29 families propagated) — the session's
largest. Fleet 95.0% instr / 89.6% distinct / 96.48% fn-count; stubs
13,345 -> 12,771. R22 clean-fleet run 8x this session, 213/213 every time.

P30's milestone is '>=95% instr fleet, or every remaining overlay stub on a
named ledger'. THE FIRST HALF IS NOW MET — T5 (phase close) is a live option.

Bank rate across five waves: 67% -> 79% -> 69% -> 68% -> 73%.
2026-08-12 16:23:37 -06:00
Drew T a867deab68 fix(phase-30 S48): wave harness — a DEAD ORACLE is not a negative verdict
crack_wave.js classified anything without verdict_check.confirmed as 'refuted'.
When the usage limit killed 22 verifiers mid-wave, the result read
'refuted: 22' — 22 good drafts reported as rejected, with evidence 'verifier
died' as the only tell. Acting on that would have discarded the wave.

Same disease as the no-diagnostic classifier (S47) and this session's
poisoned-tree 0/17: a tool stating a conclusion it never reached. UNVERIFIED is
now its own outcome, returned with the draft path and sha1 and the instruction
'VERIFIER NEVER RAN — re-verify, do not discard'.
2026-08-12 16:21:33 -06:00
Drew T 48965d5f27 feat(phase-30 S48-T6): propagate func_80188F60 to its zero-crack siblings 2026-08-12 16:20:48 -06:00
Drew T 142c0cf8c2 feat(phase-30 S48-T6): propagate func_801812B0 to its zero-crack siblings 2026-08-12 16:20:35 -06:00
Drew T a8ca52cfd9 feat(phase-30 S48-T6): propagate func_8018C3F8 to its zero-crack siblings 2026-08-12 16:20:23 -06:00
Drew T c07d081cab feat(phase-30 S48-T6): propagate func_8017FE38 to its zero-crack siblings 2026-08-12 16:20:13 -06:00
Drew T c36ae5f6bc feat(phase-30 S48-T6): propagate func_801874C0 to its zero-crack siblings 2026-08-12 16:20:01 -06:00
Drew T 97eb84927a feat(phase-30 S48-T6): propagate func_8017F76C to its zero-crack siblings 2026-08-12 16:19:52 -06:00
Drew T 0be51bfa42 feat(phase-30 S48-T6): propagate func_80183BC8 to its zero-crack siblings 2026-08-12 16:19:39 -06:00