Commit Graph

869 Commits

Author SHA1 Message Date
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
Drew T a0a122cbe2 feat(phase-30 S48-T6): propagate func_80191320 to its zero-crack siblings 2026-08-11 23:00:56 -06:00
Drew T 077cd0cda7 feat(phase-30 S48-T6): propagate func_8018FF98 to its zero-crack siblings 2026-08-11 23:00:39 -06:00
Drew T d54407a53b feat(phase-30 S48-T6): propagate func_80192B60 to its zero-crack siblings 2026-08-11 23:00:03 -06:00
Drew T a80b09ba1b feat(phase-30 S48-T6): propagate func_8018E9BC to its zero-crack siblings 2026-08-11 22:59:57 -06:00
Drew T 5a97bbdc2a feat(phase-30 S48-T6): propagate func_80183324 to its zero-crack siblings 2026-08-11 22:59:47 -06:00
Drew T d5fb0561ca feat(phase-30 S48-T6): propagate func_80181A30 to its zero-crack siblings 2026-08-11 22:58:18 -06:00
Drew T e93922ffce feat(phase-30 S48-T6): propagate func_8017F83C to its zero-crack siblings 2026-08-11 22:58:05 -06:00
Drew T 526d512497 feat(phase-30 S48-T6): propagate func_801844C8 to its zero-crack siblings 2026-08-11 22:57:07 -06:00
Drew T 7753d12f0d feat(phase-30 S48-T6): propagate func_8017D7C0 to its zero-crack siblings 2026-08-11 22:56:33 -06:00
Drew T 29054bb581 feat(phase-30 S48-T6): propagate func_80182044 to its zero-crack siblings 2026-08-11 22:56:23 -06:00
Drew T 8b38b70caa feat(phase-30 S48-T6): propagate func_8017DDC4 to its zero-crack siblings 2026-08-11 22:56:13 -06:00
Drew T 4fe07faf0b feat(phase-30 S48-T6): propagate func_8017EB44 to its zero-crack siblings 2026-08-11 22:54:54 -06:00
Drew T 6fb1c66ce3 feat(phase-30 S48-T6): propagate func_8017DF40 to its zero-crack siblings 2026-08-11 22:53:22 -06:00
Drew T 6c9afdd468 feat(phase-30 S48-T6): propagate func_80183DA4 to its zero-crack siblings 2026-08-11 22:53:16 -06:00
Drew T 583a408d0f feat(phase-30 S48-T6): propagate func_801823E8 to its zero-crack siblings 2026-08-11 22:53:02 -06:00
Drew T dedbb6f28b feat(phase-30 S48-T6): propagate func_80180128 to its zero-crack siblings 2026-08-11 22:52:47 -06:00
Drew T 50dd6b3c3f feat(phase-30 S48-T6): wave 3 — 27 exemplars banked, 0 drafts lost
Wave 3 (wf_2680d8ff-539, 74 agents, 8.08M tok): 39 targets -> 35 agent-MATCH,
0 refuted, 4 NEAR, 0 FAIL -> 27 BANKED on the whole-binary gate (69%).

THE HARDENED HARNESS HELD: 0 drafts missing on disk (wave 2 lost 21 of 26 to a
shared output dir). Per-agent dirs + "never touch anything outside your own
directory" + a verifier that re-runs sha1sum LAST.

PRIOR-NOTES SEEDING IS THE SESSION'S BEST LEVER: 7 of 9 seeded targets
converted, including all three wave-2 whole-binary-gate misses and both big
NEARs — func_80189540 (551 ins, was NEAR +2) and func_8017C3BC (407 ins, was
NEAR 17). func_8017C294 (the x16 family) went 18 -> 11 ins: narrowing, not a
wall.

func_80189540 also required the one host edit its agent byte-probed:
  src/ov_SC04_018/ov_SC04_018_jr_80188E1C.c:3093
  extern s32 func_80189540(s32 a0, s16 a1)  ->  (s16 a0, s16 a1)
That TU has no call site, so the edit is inert; the OTHER TUs' (s32,s16) decls
are deliberately left alone (real call sites, and an s16 prototype there would
force caller-side truncation and could de-match banked callers).

Its agent also recovered a better draft that already existed at
.run/backlog_drafts/func_80189540.c — a 551-ins MATCH that had been DE-matched
to 549 by "fixing" the definition's s16 first parameter to s32, the exact
inverse of that draft's own warning. Restoring s16 recovered the match.
2026-08-11 22:51:32 -06:00
Drew T a67c82d340 fix(phase-30 S48): bank func_80187960 — §161c decl agreement, not a codegen wall
The wave-2 draft declared `extern void func_8012CAE4(void *a0);` at block
scope while the host TU already declares it twice at file scope (K&R at :2790,
`s32 a0` at :2849), so the gate reported PLUMBING: conflicting types.

Dropping the decl is wrong — match_one compiles the draft STANDALONE and then
the symbol is undeclared (gcc-2.7.2 prints that with no `error:` prefix, so it
reads as CC1 FAIL). The fix is to AGREE with the TU's visible decl and cast the
ARGUMENT (`(s32)a0` — same bits in $a0, codegen unchanged).

MATCH (99 ins) standalone, then BANKED on the whole-binary gate.
2026-08-11 21:14:46 -06:00
Drew T b68486dfd0 feat(phase-30 S48-T6): propagate func_80188B84 to its zero-crack siblings 2026-08-11 21:03:21 -06:00
Drew T 4f2657786a feat(phase-30 S48-T6): propagate func_8018171C to its zero-crack siblings 2026-08-11 21:02:44 -06:00
Drew T 2c05b5a66d feat(phase-30 S48-T6): propagate func_801818F0 to its zero-crack siblings 2026-08-11 21:02:36 -06:00
Drew T cb5921a669 feat(phase-30 S48-T6): propagate func_8017DEFC to its zero-crack siblings 2026-08-11 21:02:01 -06:00
Drew T 62758e231e feat(phase-30 S48-T6): propagate func_8017ED5C to its zero-crack siblings 2026-08-11 21:01:53 -06:00
Drew T 8dc9807074 feat(phase-30 S48-T6): propagate func_80185DD8 to its zero-crack siblings 2026-08-11 21:00:25 -06:00
Drew T e898129e7a feat(phase-30 S48-T6): propagate func_801880C4 to its zero-crack siblings 2026-08-11 21:00:16 -06:00
Drew T 5e0968b820 feat(phase-30 S48-T6): propagate func_801857CC to its zero-crack siblings 2026-08-11 21:00:06 -06:00
Drew T 116cf96877 feat(phase-30 S48-T6): propagate func_801850F4 to its zero-crack siblings 2026-08-11 20:59:56 -06:00
Drew T 124d5198ef feat(phase-30 S48-T6): propagate func_8018DE60 to its zero-crack siblings 2026-08-11 20:59:47 -06:00
Drew T db506c6f24 feat(phase-30 S48-T6): propagate func_80185C2C to its zero-crack siblings 2026-08-11 20:59:38 -06:00
Drew T ab4b227eb2 feat(phase-30 S48-T6): propagate func_801814D8 to its zero-crack siblings 2026-08-11 20:59:30 -06:00
Drew T b7e1db7779 feat(phase-30 S48-T6): propagate func_80183F50 to its zero-crack siblings 2026-08-11 20:59:19 -06:00
Drew T 641c7086a5 feat(phase-30 S48-T6): propagate func_8017D1E0 to its zero-crack siblings 2026-08-11 20:59:08 -06:00
Drew T 2d8e6890de feat(phase-30 S48-T6): propagate func_8017C6A0 to its zero-crack siblings 2026-08-11 20:58:59 -06:00
Drew T de29f43036 feat(phase-30 S48-T6): propagate func_80180000 to its zero-crack siblings 2026-08-11 20:58:39 -06:00
Drew T b7e9d2f2ee feat(phase-30 S48-T6): propagate func_80187B80 to its zero-crack siblings 2026-08-11 20:58:26 -06:00
Drew T 1bc5589588 feat(phase-30 S48-T6): propagate func_80187180 to its zero-crack siblings 2026-08-11 20:58:17 -06:00
Drew T 64c47c4f5e feat(phase-30 S48-T6): propagate func_801EFC94 to its zero-crack siblings 2026-08-11 20:58:05 -06:00
Drew T 95909749bb feat(phase-30 S48-T6): recover all 21 "lost" wave-2 drafts from the transcripts — 17 more banked
Drew's question ("can you just analyze the workflow results to get those
drafts back?") was right, and my write-off was wrong. The drafts were never
lost: every agent's tool calls are recorded in the run transcripts, content
included. Recovery is deterministic and cost ~0 agent tokens.

Method (all three passes were needed):
1. Write records -> 20 of 21 had one. Naive extraction gated only 8/21,
   because agents REFINE with Edit and I was treating each edit's new_string
   as a whole file.
2. Replay Write-then-Edit in order per (agent, file_path), snapshotting after
   every mutation, then gate every snapshot newest-first -> 20/21 MATCH.
3. The last one (func_8017DF40) never used Write/Edit — it wrote via a shell
   heredoc. Extracted the heredoc bodies from the bash tool calls -> MATCH.

Whole-binary gate on the 21: 17 BANKED, 4 NEAR.
  md_SC03_073 func_801EFC94 x8   <- a MODULE exemplar, through the path fixed
                                    earlier today (commit:1626)
  ov_SC03_014 func_8017C154 x7  func_8017C6A0 x7  func_8017D1E0 x7
  ov_SC03_118 func_80187180 x8  func_80187B80 x8
  ov_SC06_018 func_80185C2C func_8018DE60 func_801850F4 func_801857CC
              func_801880C4 func_80185DD8 (all x6)
  ov_MAIN_012 func_8017DD28 x5 · ov_SC02_026 func_801814D8 x6
  ov_SC03_093 func_8018171C x5 · ov_SC03_107 func_8017EB70 x5
  ov_SC06_008 func_80180000 x8
NEAR at the binary gate: func_8017DF40, func_8017EEEC, func_80187960,
func_8018A974 — the §52b population (per-function MATCH, binary gate refuses).

Wave 2 now stands at 22 of 28 banked (79%) vs wave 1's 8 of 12 (67%), with
20 of 28 drafted by Sonnet.
2026-08-11 20:56:31 -06:00
Drew T 0ec7d4c052 feat(phase-30 S48-T6): wave 2 — 5 exemplars banked; 21 verified drafts LOST to a harness defect
Wave 2 (wf_d804f25a-f6f, 54 agents, 6.76M tok, 66 min): 28 targets ->
26 agent-MATCH (93%, vs wave 1's 75%), 0 refuted, 2 NEAR, 0 FAIL.

Then only 5 of the 26 drafts still existed on disk. The verifiers were NOT
lying — their evidence quotes exact instruction counts matching each target
(101/187/108/77 ins), so the files existed when they ran. Later crack agents
DELETED them while tidying the SHARED .run/wave2/ directory; one agent's own
notes say "scratch dir removed afterwards so .run/wave2/ contains only draft
.c files". 28 agents, one output dir, and a prompt line ("drafts to .run/wave2
ONLY") that invited cleanup.

Zero-token recovery: re-gated every surviving .c under .run/wave2/** whose
text DEFINES the target function -> 2 of 21 recovered.

Banked (5/5 through the whole-binary gate — every draft that survived passed):
  ov_SC01_005  func_8017ED5C x5  func_8017DEFC x5
  ov_SC03_093  func_801818F0 x5
  ov_SC04_018  func_80188B84 x5
  ov_SC06_018  func_80183F50 x6

The 21 lost cracks keep their full agent notes in .run/jr48/wave2_lost.json —
idioms, integration surface, family maps. They are re-runnable from those
notes at a fraction of a cold crack.
2026-08-11 20:37:35 -06:00
Drew T ba1fead353 fix(phase-30 S48): scope_data_externs spliced carried externs INTO a comment
`_body_open_brace` ran BOTH its scans on unmasked text. A crack agent's draft
opens with a header comment that names the function and quotes C at it:

    /* func_801EE8E0 (ov_MAIN_012 / jr_801789AC) — 188 ins, byte-exact vs …
     *  3) The `do { } while (0)` around the loop-1 call is a REGISTER-ALLOCATION

so `sig` matched the COMMENT's first line and `find('{')` found the comment's
`do {`. Every carried `extern` was spliced into the comment — silently
commented out — and the gate reported `'D_8011511A' undeclared`.

The sweep classified that CC1-FAIL, so it read as a property of the SIBLING
(all 4 members failed identically) when it was a property of the EXEMPLAR'S
PROSE. It had nothing to do with module binaries, which is where I had filed
it. Every richly-commented agent draft is a carrier; the trigger is any brace
inside the header comment — so this would have grown with the campaign.

- both scans now run on `cdecl._mask`ed text and index the original by the
  masked offsets (§134 / R33: one masking oracle);
- refuse outright if the length invariant is broken, rather than mis-place a
  declaration into live code (R32).

Measured: family func_8017CBC8 -> its 4 md_ siblings went 0/4 -> 4/4 banked.
2026-08-11 19:07:07 -06:00
Drew T e4471fd039 feat(phase-30 S48-T6): propagate func_80188E1C to its zero-crack siblings 2026-08-11 18:38:06 -06:00
Drew T b1f03be9ea feat(phase-30 S48-T6): propagate func_80187AEC to its zero-crack siblings 2026-08-11 18:36:23 -06:00
Drew T c824c19a3d feat(phase-30 S48-T6): propagate func_80185F58 to its zero-crack siblings 2026-08-11 18:35:20 -06:00
Drew T 65204c205a feat(phase-30 S48-T6): propagate func_80186270 to its zero-crack siblings 2026-08-11 18:34:44 -06:00
Drew T b83babbff5 feat(phase-30 S48-T6): Stage-1 probe wave — 8 exemplars banked, R22 213/213
Probe-12 wave (workflow wf_45e34026-aed, 21 agents, 3.36M tok, 70 min):
12 top-weight zero-crack sibling families cracked against match_one, every
claimed MATCH re-gated by an independent adversarial verifier.

  crack-agent MATCH   9/12 (75%)   adversarially refuted 0
  whole-binary gate   8/12 (67%)   NEAR 3, FAIL 0

Banked (exemplars, 1,941 ins; ~10k templatable ins across 42 member slots):
  ov_SC06_018  func_80186270 x6  func_80185F58 x6  func_80187AEC x6
  ov_MAIN_012  func_8017D730 x5  func_8017D2A4 x5  func_8017CF3C x5
               func_8017CBC8 x5
  ov_SC04_018  func_80188E1C x5

NOT banked, ledgered:
  func_8017F2D4 (ov_SC01_005) — match_one MATCH, verifier confirmed, and the
    WHOLE-BINARY gate still classifies DIFF. The §52b gap made concrete: the
    per-function gate is a candidate filter, the binary gate is the arbiter.
  func_8017C294 (x16, the largest single item on the board) NEAR 18 ins
  func_8017C3BC NEAR 17 ins · func_80189540 NEAR +2 ins / 4 sites

R22 clean-fleet after banking: 213 passed / 0 failed of 213.
2026-08-11 18:09:02 -06:00
Drew T 4913ac6a2c feat(phase-30 S48-0b): jtbl family func_8017A4AC — 1/1 blocked-binary siblings banked 2026-08-11 16:09:43 -06:00
Drew T 58b1d7aeea feat(phase-30 S48-0b): jtbl family func_8015C32C — 2/2 blocked-binary siblings banked 2026-08-11 16:09:34 -06:00