Commit Graph

3191 Commits

Author SHA1 Message Date
Drew T d50cd66401 docs(phase-31): S65 checkpoint — 27 banked (t5s 24 + 3 recovery), 4 tool defects fixed with negative controls, the 1x15 wave cap, the JTBL_PADS class, next-4-steps 2026-08-29 13:43:27 -06:00
Drew T 201c683325 docs(report): regenerate the scoreboard + backlog after t5s and the S65 recovery banks 2026-08-29 13:42:01 -06:00
Drew T edec2adb99 fix(recover): --probe-only crashed for --funcs/--auto/--from-file (it exec'd the probe BEFORE staging)
os.execv'd tools/blocker_probe.py with --drafts <run_dir>/drafts while that directory was still
created further down, so every non---draft-dir probe died with FileNotFoundError. Only --draft-dir
worked, because stage_drafts() had already populated the dir. Staging now happens first.

Control: the --draft-dir path returns the same verdict as before the move (ov_SC06_029
func_80185214 -> DIFF 52/52 ins, identical to the pre-edit run). --funcs now works: 10 backlog
candidates classified in one pass (2 real-TU MATCH, 3 conflicting-types, 2 too-few-arguments,
1 parse error).

Worth recording (R40): my own probe loop grepped for result rows and swallowed the traceback, so the
crash read as 'no blockers found' — a silently narrowed scope in the harness, not the tool.
2026-08-29 13:41:51 -06:00
Drew T cbd89e1924 feat(decomp): t6-recover gate — +1 fns x0 propagated (fleet 98.8%) 2026-08-29 13:21:46 -06:00
Drew T 048666600b fix(oracle): masked_diff kept the opcode at R_MIPS_26 slots — a masked j/jal was swallowing whatever the other side held
mask_for(reloc_kind='26') returned 0, i.e. 'compare NOTHING at this position'. Both comparers pick
the mask from ONE side (diff_object_s from mine, diff_object_object from the target's), so a j/jal
there masked the OTHER side's instruction entirely. Reproduced on synthetic pairs of real encodings:
my 'j 8017e248' (0805f892) vs target 'bne v0,v1' (14430002) -> 0; vs 'nop' (00000000) -> 0; my 'jal'
vs target 'bne' -> 0; while the mirror (my 'bne' vs target 'j') -> 1. That asymmetry is the bug.
_j_mismatch cannot cover it: it fires only when BOTH sides carry an internal-j target, which a
j-vs-bne pair by definition does not.

Fix: return 0xFC000000 — the 26-bit target field stays masked (it IS link-time), the opcode never
is. diff_object_object's masked-slot test updated to match so the reloc symbol+addend check still
fires there.

R39 negative control (tools/stub_invariant_audit.py, the INCLUDE_ASM invariant): 2554 stubs, nonzero
3 before and 3 after — the same three known main length-delta survivors, same values. Zero new false
positives, over a population that exercises the changed path (812 stubs carry internal-j .text
relocs, 3164 such instructions).

Found by a t5s drafting agent on func_8017EB30 (reported as a one-sided internal-j check); verified
here to be broader than reported. No bank was ever at risk — the whole-binary gate is independent
(G3) — but every crack agent and the permuter scorer read this number. R35/R14.
2026-08-29 12:56:20 -06:00
Drew T dd11127284 feat(t5): Claude wave t5s — 24 banked (sonnet 22/25, opus 2/4, +recovery); fleet 213 passed, 0 failed of 213 (P31 S62 T5) 2026-08-29 12:53:28 -06:00
Drew T 6ed0f77b6a fix(recover): gate the RAW draft first — macro-externs is a fallback, not the measurement (+ classify_fail drops orphan notes); cookbook §313
recover_integration's macro-externs stage rewrote a draft's callee extern to the FLEET macro's
signature and then gated only the rewrite. func_ADDR names are per-address, not per-function, so
another overlay's 'extern void func_8017C338(void)' replaced this overlay's correct 4-arg decl and
manufactured the CC1-FAIL it reported as the draft's failure. The untouched draft banks
byte-identical (ov_SC03_012:func_8017BEBC, 246 ins, banked in the previous commit).

reconcile_and_gate(draft_rewrite=) now gates raw (pass 1a) then rewrites only what raw refused
(pass 1b), records the winning variant per fn, and re-gates that variant in pass 2.

harvest_verify.classify_fail kept the 'note:' half of a benign warning pair and labelled a built
draft CC1-FAIL with it; notes now drop with their warnings. Negative-controlled over 5 diagnostic
shapes — only warning+note-only changed (to the honest no-diagnostic label). R39/R57/R32.

Cookbook 920 -> 921 sections, index green.
2026-08-29 12:26:02 -06:00
Drew T 75a6639e57 feat(decomp): t5r-recover-raw gate — +1 fns x0 propagated (fleet 98.8%) 2026-08-29 12:17:21 -06:00
Drew T beba651744 feat(decomp): t6-recover gate — +1 fns x0 propagated (fleet 98.8%) 2026-08-29 12:06:43 -06:00
Drew T 18812211ca docs(phase-31): S64 FINAL CHECKPOINT for a fresh session — fleet 1,616 stubs / 213-213 GREEN / 98.8%-97.4%, the committed recipe, next-4-steps, 258 K+L remaining, T6 wall ledger with 21 diagnosed residues, standing hazards + rule candidates (P31 S64) 2026-08-29 11:52:19 -06:00
Drew T a51c0785cf docs(phase-31): S64 results — 11 waves, 2,380->1,616 stubs across S63+S64 (764 closed), 98.8%/97.4%; the R14 self-correction on func_8017BEBC; fix_decl_mirror's honest 0-of-17 verdict + its R39 saves; killed-gate adjudication 2026-08-29 11:51:45 -06:00
Drew T c5a60897bc docs(cookbook): §312 (a bare if(a<b) scatters the slt destination register — materialize the compare to force it) + a §41 FINDABILITY addendum. The 741-ins agent's headline 'new lever' was VERIFIED AS ALREADY-COVERED by §41 step 3 (cast a type-changed param at its uses, never via an intermediate local); the real gap was that §41's declaration-wall title hides its REGALLOC symptom, so the key is filed there with the n7/n9/n10 byte ladder incl. the inert decl-order control (§67). Index 919 -> 920 (P31 S64) 2026-08-29 11:50:44 -06:00
Drew T 1bdd62455e docs(report): regenerate the fleet scoreboard after t5o-t5r + the 741-ins bank 2026-08-29 11:44:42 -06:00
Drew T d9a30167dd feat(t5): Claude wave t5r — 30 banked (sonnet 22/37, opus 8/11, +recovery); fleet 213 passed, 0 failed of 213 (P31 S62 T5) 2026-08-29 11:35:54 -06:00
Drew T 4ed883d0fe feat(t5): func_8017BEBC (ov_SC03_107, 741 ins) — BANKED at the whole-binary gate, the campaign's largest single function. CORRECTION: commit commit:3173's message wrongly listed this as banked in t5n; it was only the drafting agent's SELF-REPORT (match_one MATCH) and the t5n judge excluded it (42 union banks). The body was byte-correct all along; the sole blocker was 'conflicting types for ApplyMatrixSV' at tu:5758 — the draft re-declared a callee the TU already declares with a different param spelling. Fix: delete the draft's own extern (the call site's (void*) casts convert silently). R14: a self-report is not a bank (P31 S64) 2026-08-27 16:19:57 -06:00
Drew T 34963d42ed feat(t5): Claude wave t5q — 28 banked (sonnet 28/30, opus 0/0, +recovery); fleet 213 passed, 0 failed of 213 (P31 S62 T5) 2026-08-27 16:04:57 -06:00
Drew T 0bcd8b3d22 feat(t5): Claude wave t5p — 30 banked (sonnet 30/33, opus 0/0, +recovery); fleet 213 passed, 0 failed of 213 (P31 S62 T5) 2026-08-27 16:02:23 -06:00
Drew T 6a601a0fce feat(t5): Claude wave t5o — 36 banked (sonnet 29/31, opus 6/8, +recovery); fleet 213 passed, 0 failed of 213 (P31 S62 T5) 2026-08-27 15:59:13 -06:00
Drew T 1856524bec docs(report): regenerate the fleet scoreboard after t5m/t5n (1,968 -> 1,741 stubs; 98.7% instr / 97.3% distinct) 2026-08-27 14:05:55 -06:00
Drew T e2d1531324 feat(t5): Claude wave t5n — 43 banked (incl. func_8017BEBC @ 741 ins, the campaign's largest single crack; func_8017DAC8 253; func_800CB0C8 157; first md_MAIN_* module targets); the gate was KILLED mid-run and the tree adjudicated by a clean fleet sweep: 213 passed, 0 failed of 213 — every dirty file byte-proven, none reverted (R42) (P31 S64) 2026-08-27 14:03:01 -06:00
Drew T ba7afeed34 docs(cookbook): 2 NEW + 3 addenda from the t5j-t5m distill — §310 (a subu's dest ties only to the block-local operand), §311 (a same-lvalue if/else store must be DUPLICATED into both arms: sched1 runs before cross-jump, so a join-block store swallows the arm's load-delay nop; cross_jump refunds the duplicate so it is byte-free), + §220/§164-29/§164-39 addenda. NOTE: the §164-39 addendum REJECTS the drafting agent's 'integer width' claim — the byte-check shows comparison OPERAND ORDER is the lever. Index 917 -> 919 (P31 S64) 2026-08-27 13:47:39 -06:00
Drew T ab3fffda1e feat(t5): Claude wave t5m — 53 banked (sonnet 35/43, opus 17/18, +recovery); fleet 213 passed, 0 failed of 213 (P31 S62 T5) 2026-08-27 13:36:39 -06:00
Drew T 78f4934ef8 feat(t5): Claude wave t5l — 39 banked (sonnet 37/44, opus 2/4, +recovery); fleet 213 passed, 0 failed of 213 (P31 S62 T5) 2026-08-27 12:41:25 -06:00
Drew T 8c28a39df6 feat(tools): fix_decl_mirror.py — the MIRROR of fix_tu_ret_decls (TU declares a VALUE return for a genuinely void definition; it SKIPped in every S63 wave). Narrowing the TU decl is NOT byte-neutral there (a caller reads $v0), so the repair is draft-side: define the body under a distinct identifier bound by __asm__("func_X") — the tree's own impl_* idiom. T0 blast radius. R39 negative control found and killed TWO real defects (block-scope decls: 856 false positives; sibling-TU decls: 580) and now passes 78,727/78,727 clean. Wired into t5_bank.sh (P31 S64) 2026-08-27 12:19:36 -06:00
Drew T 5365db0f87 feat(t5): Claude wave t5k — 47 banked (sonnet 40/44, opus 5/6, +recovery); fleet 213 passed, 0 failed of 213 (P31 S62 T5) 2026-08-27 12:14:34 -06:00
Drew T 5e5fd1cb77 feat(t5): Claude wave t5j — 45 banked (sonnet 41/44, opus 4/4, +recovery); fleet 213 passed, 0 failed of 213 (P31 S62 T5) 2026-08-27 12:11:10 -06:00
Drew T e5956d021f docs(report): progress.md regenerated with the S63 scoreboard 2026-08-27 11:33:02 -06:00
Drew T f25b890480 docs(phase-31): S63 FINAL checkpoint — 412 stubs closed (2,380->1,968), 98.6%/97.1%, 213/213 GREEN, cookbook 917; t5j pre-packed for resume; 5 proven findings + 2 rule candidates; machine quiesced for reboot 2026-08-27 11:32:45 -06:00
Drew T e268956de6 docs(report): regenerate the fleet scoreboard after t5g/t5i 2026-08-27 11:31:57 -06:00
Drew T 0edd7344c2 docs(cookbook): 3 NEW sections + 2 addenda from the t5e-t5i distill — §308/§308a (a target's lone j+nop over one self-terminating block survives ONLY behind a tautological re-test; a plain goto/polarity flip DELETES it — closeness EXPLODING after a polarity edit means an edge was removed; two overlays, independently derived), §309 (a frame-address equivalence rides through a -fcse-skip-blocks conditional; duplicating the call into both arms barriers it, cross-jump merges them back), §264 + §195-L addenda. Index 914 -> 917 2026-08-27 11:28:58 -06:00
Drew T 9b9385afd2 feat(t5): Claude wave t5i — 58 banked (sonnet 42/44, opus 16/19, +recovery); fleet 213 passed, 0 failed of 213 (P31 S62 T5) 2026-08-27 11:16:01 -06:00
Drew T 9db3edf985 fix(t5_targets): dedupe residues by (binary,fn) across prior waves and enforce one fn NAME per wave across residues too — the t5i draw produced 4 duplicate names (2 the same fn from two waves) and the name-keyed pack builder correctly REFUSED (R43/R48); deferred duplicates are reported, not dropped (P31 S63) 2026-08-27 10:25:01 -06:00
Drew T 71f00b16d1 feat(t5): Claude wave t5g — 42 banked (sonnet 37/44, opus 4/4, +recovery); fleet 213 passed, 0 failed of 213 (P31 S62 T5) 2026-08-27 10:20:47 -06:00
Drew T 963519799d docs(phase-31): S63 SESSION CHECKPOINT — fleet 2,068 stubs / 213-213 GREEN, the committed wave recipe, 690 K+L remaining, next-step order (P31 S63) 2026-08-27 09:44:58 -06:00
Drew T bd472c5fc9 docs(phase-31): S63 T5.6 results — 312 stubs closed (2,380->2,068), fleet 213/213 after every batch, 98.6%/97.1%; falsifier dead 6x; residue-on-Opus proven; A-prop lane DRAINING (23->3 on more exemplars); card (binary,fn) defect + fixes; rule candidates 2026-08-27 09:44:26 -06:00
Drew T 689bbc7c2f docs(report): regenerate the fleet scoreboard after t5b-t5h + the free lane (2,310 -> 2,068 stubs; 98.6% instr / 97.1% distinct) 2026-08-27 09:43:27 -06:00
Drew T 37cd7e2e0a feat(t5): Claude wave t5h — 13 banked (sonnet 8/14, opus 5/5, +recovery); fleet 213 passed, 0 failed of 213 (P31 S62 T5) 2026-08-27 09:40:08 -06:00
Drew T a4d66a27c4 feat(decomp): free A-prop sibling lane (maintenance pass) — zero model tokens 2026-08-27 09:09:01 -06:00
Drew T 1fffccf859 feat(t5): Claude wave t5f — 34 banked (sonnet 34/35, opus 0/0, +recovery); fleet 213 passed, 0 failed of 213 (P31 S62 T5) 2026-08-27 09:02:59 -06:00
Drew T b2365aeeb5 feat(t5): Claude wave t5e — 53 banked (sonnet 37/41, opus 16/18, +recovery); fleet 213 passed, 0 failed of 213 (P31 S62 T5) 2026-08-27 09:00:36 -06:00
Drew T 1180748502 docs(cookbook): 3 byte-proven addenda from the t5b-t5d distill — §211's guard-hoist INVERTS on a reg-reg copy (LENGTH-DRIFT -1; use the §164-36a fence instead, func_8017DD80); §194-M third instance + new residual shape (func_80182420); §176-B B1 sharpened (func_80180B44). 2 more verdicts COVERED. Index green at 914 (P31 S63 T5.5) 2026-08-26 21:42:47 -06:00
Drew T 926fc3f1c0 docs(cookbook): §307 — the brute-force-statement-orders lever has a BYTE-EVIDENCED BOUND (12/12 permutations byte-identical on func_8001BC6C, corroborated on func_80021284); a fan-out copy's priority is rank_for_schedule-internal, unreachable from source order — recognise the all-same-closeness tell and route to the permuter. Plus t5_distill_args --novel-only (P31 S63 T5.5) 2026-08-26 21:33:45 -06:00
Drew T b1a0d49a52 feat(t5): main mini-wave — 9 banked of 11 never-drafted (func_80029B4C/BC8/DB4, func_8002A108/354/5C4, func_80030634, SYS_OBJ_202C, SYS_OBJ_2264); gate_main clean rebuild, main SHA 143dbb89 byte-identical (P31 S63 T5.7) 2026-08-26 21:26:50 -06:00
Drew T 923bd5ec64 feat(t5): integration recovery — 5 banked (func_801684B4, func_8017E83C, func_80182F78, func_80183BF0, func_8017F9B4); every body was ALREADY byte-exact, refused only by TU decl conflicts (callee proto, dup typedef, two planted memcpy externs, void-vs-s32 self decl, post-insertion-point struct decls) — fixed draft-side only via claude_integration_recover.js (P31 S63 T5.6) 2026-08-26 21:24:33 -06:00
Drew T eaf423f1d1 feat(t5): Claude wave t5c — 39 banked (sonnet 36/43, opus 2/4, +recovery); fleet 213 passed, 0 failed of 213 (P31 S62 T5) 2026-08-26 21:24:01 -06:00
Drew T 0b6f1039c6 feat(t5): Claude wave t5b — 44 banked (sonnet 37/43, opus 7/8, +recovery); fleet 213 passed, 0 failed of 213 (P31 S62 T5) 2026-08-26 21:20:04 -06:00
Drew T 01d60955c7 docs(phase-31): S63 T5.5/T5.6 — t5a distill (§164-55 addendum, 913 sections); wave t5d 42/48; 5 of 6 misses were INTEGRATION not codegen; residue-on-Opus 4/4 2026-08-26 21:13:42 -06:00
Drew T a197f45a9c feat(tools): t5_distill_args takes repeated --wave/--wfdir pairs so one distill covers several waves; dedups by (binary,fn,arm) (R48) and skips un-gated waves loudly (P31 S63 T5.5) 2026-08-26 21:12:10 -06:00
Drew T c865841dbe feat(tools): claude_integration_recover.js — one agent per byte-correct-but-CC1-FAIL draft, fixes the DRAFT-side decl conflict only (never a shared header, §65a blast-radius law); t5d had 5 of 6 misses in this class (P31 S63 T5) 2026-08-26 21:10:39 -06:00
Drew T 4f1ff29a6b feat(t5): Claude wave t5d — 42 banked (sonnet 38/44, opus 4/4, +recovery); fleet 213 passed, 0 failed of 213 (P31 S62 T5) 2026-08-26 21:07:17 -06:00