Commit Graph

1718 Commits

Author SHA1 Message Date
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
Drew T c85127f23e feat(phase-30 S48-T6): propagate func_8017FDF8 to its zero-crack siblings 2026-08-12 12:58:22 -06:00
Drew T 43e9e6bc9b feat(phase-30 S48-T6): propagate func_80180C90 to its zero-crack siblings 2026-08-12 12:58:09 -06:00
Drew T 6cfd04e604 feat(phase-30 S48-T6): propagate func_80180C40 to its zero-crack siblings 2026-08-12 12:57:42 -06:00
Drew T 2980e90a70 feat(phase-30 S48-T6): propagate func_8018308C to its zero-crack siblings 2026-08-12 12:57:27 -06:00
Drew T 729f51eb76 feat(phase-30 S48-T6): propagate func_8018EDB8 to its zero-crack siblings 2026-08-12 12:57:08 -06:00
Drew T 9ea4d97605 feat(phase-30 S48-T6): propagate func_8018E8A0 to its zero-crack siblings 2026-08-12 12:56:56 -06:00
Drew T edf6023471 feat(phase-30 S48-T6): propagate func_801843D8 to its zero-crack siblings 2026-08-12 12:56:45 -06:00
Drew T 7f5c968520 feat(phase-30 S48-T6): propagate func_8017D5C8 to its zero-crack siblings 2026-08-12 12:56:33 -06:00
Drew T 680f090c19 feat(phase-30 S48-T6): propagate func_80181E18 to its zero-crack siblings 2026-08-12 12:56:18 -06:00
Drew T e766ed4d71 feat(phase-30 S48-T6): propagate func_80182784 to its zero-crack siblings 2026-08-12 12:56:05 -06:00
Drew T 2f5063a707 feat(phase-30 S48-T6): propagate func_80183560 to its zero-crack siblings 2026-08-12 12:55:53 -06:00
Drew T 3e359953f8 feat(phase-30 S48-T6): propagate func_8018CC9C to its zero-crack siblings 2026-08-12 12:55:36 -06:00
Drew T e2d6851f96 feat(phase-30 S48-T6): propagate func_80181470 to its zero-crack siblings 2026-08-12 12:55:19 -06:00
Drew T f9ad3a2c98 feat(phase-30 S48-T6): propagate func_8017EDA4 to its zero-crack siblings 2026-08-12 12:55:01 -06:00
Drew T 2e6ab80027 feat(phase-30 S48-T6): propagate func_80184370 to its zero-crack siblings 2026-08-12 12:54:42 -06:00
Drew T b82fcc3066 feat(phase-30 S48-T6): propagate func_80184944 to its zero-crack siblings 2026-08-12 12:54:26 -06:00
Drew T 7e4b117259 feat(phase-30 S48-T6): propagate func_8018A974 to its zero-crack siblings 2026-08-12 12:54:03 -06:00
Drew T f77c859fcd feat(phase-30 S48-T6): propagate func_80188A80 to its zero-crack siblings 2026-08-12 12:53:43 -06:00
Drew T b21e30b834 feat(phase-30 S48-T6): propagate func_80183BF4 to its zero-crack siblings 2026-08-12 12:53:26 -06:00
Drew T b7956de9fd feat(phase-30 S48-T6): propagate func_80185064 to its zero-crack siblings 2026-08-12 12:53:05 -06:00
Drew T c4836a4abf feat(phase-30 S48-T6): propagate func_8017CE90 to its zero-crack siblings 2026-08-12 12:52:39 -06:00
Drew T a443612e6d feat(phase-30 S48-T6): propagate func_8017F8CC to its zero-crack siblings 2026-08-12 12:52:16 -06:00
Drew T 63dd763b9e feat(phase-30 S48-T6): wave 4 tail — 9 more banked once the tree was clean
The 17 drafts that read 0/17 against the poisoned tree were never 17 codegen
failures. Re-gated on a clean tree: 9 banked, then re-gated TOGETHER per binary
(a draft that passes alone can still collide with a sibling in the same TU —
which is exactly what `morph_lerp` and `struct V8` did) — 9 of 9 held.

  ov_SC03_118 func_80183D68 · ov_SC06_008 func_8017F8CC func_80183BF4
  ov_SC06_011 func_8017EDA4 · ov_SC07_006 func_8017FDF8
  ov_SC06_018 func_80184370 func_80184944 func_8018A974 func_8018EDB8

Wave 4 final: 40 targets -> 35 agent-MATCH -> 27 BANKED (68%).

One stray comment in one draft had masked eight real matches.
2026-08-12 12:49:39 -06:00
Drew T 043532b475 feat(phase-30 S48-T6): wave 4 — 18 exemplars banked; + a 4th comment-blindness fix
Wave 4 (wf_05895a19-121, 75 agents, 7.9M tok): 40 targets -> 35 agent-MATCH,
0 refuted, 5 NEAR, 0 FAIL, 0 drafts lost. 18 banked so far on the whole-binary
gate across 9 binaries; the other 17 are re-gating on a clean tree (see below).

PRIOR-NOTES SEEDING HELD AT SCALE: 10 of 12 seeded targets confirmed (wave 3
was 7 of 9). func_8017C294 — the x16 family, the largest single item on the
board — is now NEAR at **2 ins** (18 -> 11 -> 2 across three seeded attempts).

THE 4th COMMENT-BLINDNESS DEFECT OF THE SESSION, and the first with blast
radius. A crack agent annotated a decl in its draft:

    extern void func_801842DC(s32 a0);   /* TU:4023 INCLUDE_ASM (no decl) */

`corpus._INCLUDE_ASM_CAND` only skips lines that BEGIN with a comment marker,
so it read `INCLUDE_ASM (` out of the trailing PROSE, found no quoted path, and
refused the whole binary's stub oracle — correctly, by its own R32 contract.
That then failed gate_stage for every LATER binary in the run, because they all
walk the corpus: 12 binaries banked, then 5 were blocked by one comment in a
13th. Fixed the same way as the other three today: decide candidacy on
cdecl._mask'ed text, PARSE FROM THE ORIGINAL (the mask blanks string content
and would erase the asm path). Verified on 4 binaries incl. main (2,002 stubs).

AND THE DAMAGE IT LEFT: gate_stage raised out of the CorpusError BEFORE its
revert, stranding failed drafts spliced in src/. The 17 solo re-gates that
followed all read 0/17 — they were building a POISONED TREE, not judging their
own drafts. Residue reverted here; the 17 re-gate clean next.

The pattern is now sharp enough to state: any scanner that greps C source for a
token must mask comments and strings FIRST — and agent-authored drafts make it
far likelier, because their prose mentions the exact tokens our tools hunt for.
2026-08-12 12:25:20 -06:00
Drew T 137a8540b5 docs(phase-30 S48): §164 — 190 claims vetted by 34 skeptics, 82 banked, 28 refuted
The §163z catalogue was 34 crack-agent note-sets claiming 190 distinct laws.
One independent skeptic per function, each required to read the full notes,
grep the whole cookbook, classify, and GRADE THE EVIDENCE:

  NEW 20 · SHARPENS 62 · COVERED 80 · UNSOUND 28
  byte-probed 114 · single-instance 51 · asserted 25

57% of what the crack agents flagged as novel was already in the cookbook or
does not survive scrutiny. That ratio is the lesson: a crack agent is the right
instrument for FINDING a lever and the wrong one for judging its novelty — it
has just spent hours in one function and has not read the other 497 sections.
Never bank a wave's flags directly.

Banked as §164-01..82, each carrying its verdict, what it sharpens, and its
evidence grade (70 byte-probed, 12 single-instance). Several skeptics CORRECTED
the mechanism the crack agent proposed while confirming its effect — e.g. the
"fold distributes the constant out of an index" claim, where the skeptic traced
the real site to expand_expr's MULT_EXPR EXPAND_SUM case (expr.c:5359-5375)
after showing pointer_int_sum's distributive law cannot fire on that tree.

§164z records the 28 REFUTED claims with the reason, so no future wave spends
tokens rediscovering them.

cookbook_index.py: 501 sections.
2026-08-12 10:40:28 -06:00
Drew T 480780c602 chore(phase-30 S48): mark the idiom harvest partially done (§163a-e banked, §163z unvetted) 2026-08-12 10:03:47 -06:00
Drew T 57cef6325a docs(phase-30 S48): §163 — the five vetted laws from waves 2-3
The waves flagged ~40 candidate laws. Five were byte-probed, generalizable and
actionable enough to bank; they were deduped by hand against the file (no
skeptic-agent pass this time, so each says what it sharpens and why that
section is insufficient):

- §163a decl-conflict severity is SCOPE-DEPENDENT — hard error if either decl
  is at file scope, warning only if BOTH are at block scope. §8d proves the
  phenomenon on D_801812A4 but never states the rule or its LEVER half: block
  scope is a deliberate conflict SOLVENT, so a struct-typed draft can be banked
  into a scalar-typed TU by moving the typedef AND the extern into the block.
- §163b the switch-index parameter-WIDTH oracle: sll/sra straddling the minval
  subtract is a 2-insn signature of a short parameter. Read the extension, not
  just the bound.
- §163c case_values_threshold is 5 — an empty `case k:` glued to default can be
  the only thing that emits a table at all; jtbl[k]==default label is the tell.
- §163d cse deletes a reg-reg copy by rewriting the PREVIOUS insn's SET_DEST
  (cse.c:7440-7477). This is §162j's symptom in a DIFFERENT PASS and needs a
  different lever; the residual it explains had been declared "unsteerable, 30
  variants all >=17" and fell to source-shape edits alone, no pins.
- §163e the frame is a PSEUDO-NUMBER oracle (reload1.c:658 alter_reg in NUMBER
  order); dead-local slot order is not declaration order, and a BLKmode local
  is 8-aligned while a scalar s32 is not. Sharpens §162i, which gets the pad's
  SIZE right and its PLACEMENT wrong.

§163z catalogues the ~35 unvetted claims by function so a future harvest can go
straight to them, explicitly marked "one agent's reconstruction until
re-measured" (R14).

cookbook_index.py: 497 sections.
2026-08-12 10:03:31 -06:00
Drew T 72932899d5 chore(phase-30 S48): checkpoint — 317 banked (13,345 -> 13,028), R22 213/213
Wave 3 added 84 (27 cracks + 21 propagated families). Fleet 94.8% instr /
89.2% distinct / 96.41% fn-count. R22 clean-fleet run 6x this session, 213/213
every time. 96 commits.

Bank rate measured three times: 67% -> 79% -> 69%. The dip is the cost curve
(wave 3's tier was 29 Opus-band / 14 jr vs wave 2's 8 / 5, median reach x6 ->
x3-4), not a regression.

Two levers proved out and belong in every future wave: the hardened harness
contract (0 drafts lost vs 21) and prior-notes seeding (7 of 9 previously
failed targets converted, incl. both long-standing NEARs and all three wave-2
gate misses). NEAR is a resumable state, not a write-off.
2026-08-11 23:04:08 -06:00
Drew T 5ea17c2f8e feat(phase-30 S48-T6): propagate func_80184938 to its zero-crack siblings 2026-08-11 23:01:29 -06:00
Drew T 7821f3258f feat(phase-30 S48-T6): propagate func_80186C4C to its zero-crack siblings 2026-08-11 23:01:22 -06:00
Drew T de2ca38440 feat(phase-30 S48-T6): propagate func_80185EF8 to its zero-crack siblings 2026-08-11 23:01:18 -06:00
Drew T 92b18b6772 feat(phase-30 S48-T6): propagate func_80181B00 to its zero-crack siblings 2026-08-11 23:01:06 -06:00
Drew T 4b824b8c9d feat(phase-30 S48-T6): propagate func_80192768 to its zero-crack siblings 2026-08-11 23:01:01 -06:00