Commit Graph

1751 Commits

Author SHA1 Message Date
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
Drew T 874f942fed feat(phase-30 S48-T6): wave 5 — 29 exemplars banked (73%)
Wave 5 (wf_7bce6c28-9f4, 78 agents, 11.4M tok across both halves): 40 targets
-> 36 agent-MATCH, 2 refuted, 2 NEAR, 0 FAIL, 0 drafts lost -> 29 BANKED.

RESUMED THROUGH A USAGE-LIMIT OUTAGE. The first run lost 40 agents mid-wave
(18 cracks + 22 verifiers). Resuming with byte-identical args replayed the 22
completed cracks from cache and re-ran only the dead ones — a limit outage
costs the unfinished work only.

⚠ THE INTERRUPTED RESULT WAS MISLEADING AND THAT IS MY BUG: crack_wave.js
classifies anything without verdict_check.confirmed as `refuted`, so 22 drafts
whose VERIFIER DIED read as 22 refutations. A dead oracle must not be
indistinguishable from a negative verdict — split `refuted` from `unverified`.

Two prior-seeded agents did better than asked:
- func_8017F2D4: found the prior draft SURVIVED in .run/wave3/, recovered it,
  then gated it IN SITU — spliced into the real destination TU, full pinned
  triple, masked-diff of the function out of the whole-TU object: 0 mismatched,
  279/279. That closes the §52b gap instead of trusting a standalone match. It
  also byte-confirmed the x5 reach on three symbol-remapped siblings and fixed
  the prior notes' TU pointer (they named a file holding only a caller).
- func_8017FFD0: VALIDATED its predecessor's claim rather than assuming it —
  built a no-barrier variant and reproduced the predicted -7 ins drift exactly,
  proving the __asm__ __volatile__("") cross-jump barrier is a real lever.

Bank rate across five waves: 67% -> 79% -> 69% -> 68% -> 73%.
2026-08-12 16:13:05 -06:00
Drew T c666450df4 fix(phase-30 S48): wave harness — backticks in the §165 citation broke the template literal
A workflow script is plain JS; the cookbook citation I added used markdown
backticks inside a template string, which terminated it. Caught at launch
(parse error, 0 agents, 0 tokens) rather than mid-wave.
2026-08-12 13:33:28 -06:00
Drew T 165e2a3e82 chore(phase-30 S48): wave harness cites §165 (129 vetted laws, 48 refutations) 2026-08-12 13:31:05 -06:00
Drew T a2362e6711 docs(phase-30 S48): §165 — wave-4 harvest banked the same day the wave landed
19 note-sets, 131 claims, one skeptic each, vetted against a cookbook that
already held §162/§163/§164 from this same campaign:

  NEW 8 · SHARPENS 39 · COVERED 64 · UNSOUND 20
  byte-probed 61 · single-instance 43 · asserted 27

COVERED+UNSOUND is 64%, up from §164's 57% — the duplicate rate RISES as the
knowledge base grows. That is the argument for harvesting after EVERY wave: a
wave launched before its predecessor's harvest lands re-derives laws already on
disk. This one was banked while wave-4 propagation was still committing.

THE PASS CORRECTED ITS OWN PREDECESSOR. §165-01 BOUNDS §163a, banked hours
earlier today. §163a says "block scope is a conflict SOLVENT" — byte-proven,
but on a DATA symbol. It does NOT reach an ARITY conflict: there the two decls
are COMPATIBLE (cc1 emits no `conflicting types` for scope to downgrade) and
the failure is call-vs-composite in convert_arguments (c-typeck.c:1623), which
a `()` declaration cannot defuse at ANY scope. The diagnostic word picks the
lever: `conflicting types` -> §163a's solvent; `too many arguments` -> cast the
call site (§17a-1/§161c) or replace the host prototype.

§165z records the 20 refuted claims. cookbook_index.py: 505 sections.
2026-08-12 13:21:58 -06:00
Drew T 19a138c318 chore(phase-30 S48): checkpoint — 422 banked (13,345 -> 12,923), R22 213/213
Wave 4 added 105 (27 cracks + 27/27 families propagated). Fleet 94.9% instr /
89.4% distinct / 96.44% fn-count. R22 clean-fleet run 7x this session, 213/213
every time.

Bank rate now measured four times: 67% -> 79% -> 69% -> 68%. Prior-notes
seeding 10/12 (was 7/9). func_8017C294 — the x16 family, largest item on the
board — is NEAR at 2 ins after three seeded attempts (18 -> 11 -> 2).

Also records the 4th comment-blindness defect and its blast radius (one draft
comment refused a binary's stub oracle, failed 5 later binaries, and left
drafts spliced in src/ so 17 re-gates read a poisoned tree as 0/17), and that
the wave harness now lives in tools/wave/ with its contracts written down.
2026-08-12 13:05:21 -06:00
Drew T 0108200cef feat(phase-30 S48-T6): propagate func_80184F90 to its zero-crack siblings 2026-08-12 13:00:17 -06:00
Drew T 317bde5403 feat(phase-30 S48-T6): propagate func_80185B44 to its zero-crack siblings 2026-08-12 12:59:49 -06:00
Drew T 2b48de1c6f feat(phase-30 S48-T6): propagate func_80187400 to its zero-crack siblings 2026-08-12 12:59:27 -06:00
Drew T 2a28813659 feat(phase-30 S48-T6): propagate func_80183D68 to its zero-crack siblings 2026-08-12 12:58:58 -06:00
Drew T 54de1bf245 feat(phase-30 S48): check the crack-wave harness into tools/wave
The wave script encodes contracts paid for in real failures (per-agent output
dirs after wave 2 lost 21 verified drafts; sha1-last verification; prior-notes
seeding at 7/9 then 10/12; size routing). It was living only in the workflow
scratch dir, so each wave rebuilt it from memory — which is how the cookbook
citation list went stale: it still named only §162 while §163 and §164 (87 more
entries) had been banked in between.

Updated the citation list to §160-§164 and pointed agents at §164z, the 28
REFUTED claims, so they do not re-derive a disproved mechanism.
2026-08-12 12:58:47 -06:00
Drew T 3003d1bc79 feat(phase-30 S48-T6): propagate func_80189340 to its zero-crack siblings 2026-08-12 12:58:33 -06:00