Commit Graph

1762 Commits

Author SHA1 Message Date
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
Drew T acd7ef0a2a feat(phase-30 S48-T6): propagate func_801887DC to its zero-crack siblings 2026-08-12 16:19:25 -06:00
Drew T 8012577a90 feat(phase-30 S48-T6): propagate func_80183CE8 to its zero-crack siblings 2026-08-12 16:19:13 -06:00
Drew T 2520571a73 feat(phase-30 S48-T6): propagate func_8018A77C to its zero-crack siblings 2026-08-12 16:18:47 -06:00
Drew T 2cf997f278 feat(phase-30 S48-T6): propagate func_80187130 to its zero-crack siblings 2026-08-12 16:18:34 -06:00
Drew T dce3d4c235 feat(phase-30 S48-T6): propagate func_801876BC to its zero-crack siblings 2026-08-12 16:18:20 -06:00
Drew T 9cd29e3a67 feat(phase-30 S48-T6): propagate func_80188554 to its zero-crack siblings 2026-08-12 16:18:07 -06:00
Drew T 31efb1b925 feat(phase-30 S48-T6): propagate func_80189C28 to its zero-crack siblings 2026-08-12 16:17:53 -06:00
Drew T 528f07eaad feat(phase-30 S48-T6): propagate func_801841E0 to its zero-crack siblings 2026-08-12 16:17:39 -06:00
Drew T 836edc5714 feat(phase-30 S48-T6): propagate func_80186D80 to its zero-crack siblings 2026-08-12 16:17:25 -06:00
Drew T ac855eb9fc feat(phase-30 S48-T6): propagate func_8018AB78 to its zero-crack siblings 2026-08-12 16:17:10 -06:00
Drew T 7625155a09 feat(phase-30 S48-T6): propagate func_80183A20 to its zero-crack siblings 2026-08-12 16:16:52 -06:00
Drew T f49e5197ca feat(phase-30 S48-T6): propagate func_80183924 to its zero-crack siblings 2026-08-12 16:16:37 -06:00
Drew T e0cd14bac6 feat(phase-30 S48-T6): propagate func_80180450 to its zero-crack siblings 2026-08-12 16:16:23 -06:00
Drew T b4f6bbe8d3 feat(phase-30 S48-T6): propagate func_80183340 to its zero-crack siblings 2026-08-12 16:16:08 -06:00
Drew T ea99a445b2 feat(phase-30 S48-T6): propagate func_8017CD10 to its zero-crack siblings 2026-08-12 16:15:51 -06:00
Drew T 2d61baa9e9 feat(phase-30 S48-T6): propagate func_80187F2C to its zero-crack siblings 2026-08-12 16:15:34 -06:00
Drew T 18ef92c482 feat(phase-30 S48-T6): propagate func_80187968 to its zero-crack siblings 2026-08-12 16:15:19 -06:00
Drew T 6b1c720035 feat(phase-30 S48-T6): propagate func_801884E8 to its zero-crack siblings 2026-08-12 16:15:05 -06:00
Drew T 06552fd7ac feat(phase-30 S48-T6): propagate func_80182EA0 to its zero-crack siblings 2026-08-12 16:14:50 -06:00
Drew T 9b7454732d feat(phase-30 S48-T6): propagate func_80187D0C to its zero-crack siblings 2026-08-12 16:14:35 -06:00
Drew T 261604d44c feat(phase-30 S48-T6): propagate func_80182CA4 to its zero-crack siblings 2026-08-12 16:14:17 -06:00