refactor(phase-29): DELETE gate_stage's jtbl pre-pass (R33) + the honest ladder measurement

gate_stage._jtbl_prepare carried the SAME config-only undo as harvest_verify's did,
and ate the tree again on the first ladder run: 5 orphan region files, truncated
TUs, `undefined reference to func_80192F64`. That INVALIDATED the run's 0/10, so it
was re-measured rather than reported (R35 — a probe from a broken tool is not
evidence). Tree restored from HEAD and re-verified byte-identical first.

DELETED, not patched (R33 — the best outcome is a deleted stage). It was wrong on
two independent axes:
  1. §61b already byte-proved THE CARVE MUST FOLLOW THE SPLICE. A batch pre-pass
     carving unspliced functions reports "prepared" and yields a spec that fails
     once the body lands — which is why it banked nothing.
  2. Its undo snapshotted only config/, while jr_isolate_all rewrites region 0 back
     over the ORIGINAL src/<ov>/<nm>.c truncated.
harvest_verify's per-draft prep is the correct mechanism, snapshots the full source
set, and undoes per function. Two implementations of one capability, the outer one
ineffective AND destructive.

THE HONEST RE-MEASUREMENT (clean tree; tree verified clean after):
- 0/10 bank, but 9/10 now COMPILE and land as whole-binary byte-DIFF; 1/10 plumbing.
- match_one close=0 on several (the function's own bytes exact) and rtu_match says
  MATCH-in-real-TU for func_80135888 — while func_801299C8's transformed draft does
  not compile in its real TU at all. The residual is MIXED, not uniform; at least one
  is an IMAGE-level effect rather than the draft or its TU decl context (prime
  suspect: jtbl/rodata carve placement). NOT generalized from one data point.
- This PRICES Task 14 stages 2-3 by measurement: the existing ladder converts 0 of
  10, so they are not "wire in normalize_self_decls + the type-lift and collect ten
  banks" — the projection error §57a already caught once this phase.

- R22 clean-fleet 140/140 BYTE-IDENTICAL with the giant func_8018F694 banked and the
  func_80135A4C family swept 138/138
- cookbook §61d (the tree-eating undo in two tools; the constant-label defect; the
  re-probe + ladder measurements; the general rule: an undo whose scope is narrower
  than its write scope destroys work no byte-gate can see)
- decision-log + CURRENT_PHASE updated (R30/R31)
This commit is contained in:
Drew T
2026-07-22 01:55:47 -06:00
parent fcd83f705e
commit 02b16fa7a7
7 changed files with 1648 additions and 1626 deletions
+20
View File
@@ -6666,3 +6666,23 @@
{"ts": "2026-07-21 21:02:15", "addr": "0x80135a4c", "name": "func_80135A4C", "reach": 1, "klass": "schedule", "nins": 181, "status": "near", "closeness": 170, "where_stuck": "none \u2014 MATCH (181 ins, relocation-masked; also rtu_match MATCH in ov_SC06_018_jr_8012ACE0)", "best_draft": ".run/backlog_drafts/func_80135A4C.c", "binary": "ov_SC06_018", "source": "t5jtbl2", "residual": [[0, "27bdffa8 addiu\tsp,sp,-88", "80135cec .word .L80135CEC"], [1, "afb50044 sw\ts5,68(sp)", "80135ab0 .word .L80135AB0"], [2, "0080a821 move\ts5,a0", "80135ad0 .word .L80135AD0"], [3, "afb10034 sw\ts1,52(sp)", "80135aec .word .L80135AEC"], [4, "00a08821 move\ts1,a1", "80135b00 .word .L80135B00"], [5, "afb3003c sw\ts3,60(sp)", "27bdffa8 addiu $sp, $sp, -0x58"], [6, "00c09821 move\ts3,a2", "afb50044 sw $s5, 0x44($sp)"], [7, "afb60048 sw\ts6,72(sp)", "0080a821 addu $s5, $a0, $zero"], [8, "00e0b021 move\ts6,a3", "afb10034 sw $s1, 0x34($sp)"], [9, "afbf0050 sw\tra,80(sp)", "00a08821 addu $s1, $a1, $zero"], [10, "afb7004c sw\ts7,76(sp)", "afb3003c sw $s3, 0x3C($sp)"], [11, "afb40040 sw\ts4,64(sp)", "00c09821 addu $s3, $a2, $zero"], [12, "afb20038 sw\ts2,56(sp)", "afb60048 sw $s6, 0x48($sp)"], [14, "afb00030 sw\ts0,48(sp)", "afbf0050 sw $ra, 0x50($sp)"], [15, "00401821 move\tv1,v0", "afb7004c sw $s7, 0x4C($sp)"], [16, "2c620005 sltiu\tv0,v1,5", "afb40040 sw $s4, 0x40($sp)"], [17, "10400020 beqz\tv0,c8 <func_80135A4C+0xc8>", "afb20038 sw $s2, 0x38($sp)"], [18, "00031080 sll\tv0,v1,0x2", "0c04d520 jal func_80135480"], [19, "3c010000 lui\tat,0x0", "afb00030 sw $s0, 0x30($sp)"], [20, "00220821 addu\tat,at,v0", "00401821 addu $v1, $v0, $zero"], [21, "8c220000 lw\tv0,0(at)", "2c620005 sltiu $v0, $v1, 0x5"], [22, "00000000 nop", "10400020 beqz $v0, .L80135B14"], [23, "00400008 jr\tv0", "00031080 sll $v0, $v1, 2"], [24, "00000000 nop", "3c01801d lui $at, %hi(jtbl_801D2A78)"]], "passes_tried": null}
{"ts": "2026-07-21 21:03:44", "addr": "0x80135a4c", "name": "func_80135A4C", "reach": 1, "klass": "schedule", "nins": 181, "status": "near", "closeness": 170, "where_stuck": "none \u2014 MATCH (181 ins, relocation-masked; also rtu_match MATCH in ov_SC06_018_jr_8012ACE0)", "best_draft": ".run/backlog_drafts/func_80135A4C.c", "binary": "ov_SC06_018", "source": "t5j3", "residual": [[0, "27bdffa8 addiu\tsp,sp,-88", "80135cec .word .L80135CEC"], [1, "afb50044 sw\ts5,68(sp)", "80135ab0 .word .L80135AB0"], [2, "0080a821 move\ts5,a0", "80135ad0 .word .L80135AD0"], [3, "afb10034 sw\ts1,52(sp)", "80135aec .word .L80135AEC"], [4, "00a08821 move\ts1,a1", "80135b00 .word .L80135B00"], [5, "afb3003c sw\ts3,60(sp)", "27bdffa8 addiu $sp, $sp, -0x58"], [6, "00c09821 move\ts3,a2", "afb50044 sw $s5, 0x44($sp)"], [7, "afb60048 sw\ts6,72(sp)", "0080a821 addu $s5, $a0, $zero"], [8, "00e0b021 move\ts6,a3", "afb10034 sw $s1, 0x34($sp)"], [9, "afbf0050 sw\tra,80(sp)", "00a08821 addu $s1, $a1, $zero"], [10, "afb7004c sw\ts7,76(sp)", "afb3003c sw $s3, 0x3C($sp)"], [11, "afb40040 sw\ts4,64(sp)", "00c09821 addu $s3, $a2, $zero"], [12, "afb20038 sw\ts2,56(sp)", "afb60048 sw $s6, 0x48($sp)"], [14, "afb00030 sw\ts0,48(sp)", "afbf0050 sw $ra, 0x50($sp)"], [15, "00401821 move\tv1,v0", "afb7004c sw $s7, 0x4C($sp)"], [16, "2c620005 sltiu\tv0,v1,5", "afb40040 sw $s4, 0x40($sp)"], [17, "10400020 beqz\tv0,c8 <func_80135A4C+0xc8>", "afb20038 sw $s2, 0x38($sp)"], [18, "00031080 sll\tv0,v1,0x2", "0c04d520 jal func_80135480"], [19, "3c010000 lui\tat,0x0", "afb00030 sw $s0, 0x30($sp)"], [20, "00220821 addu\tat,at,v0", "00401821 addu $v1, $v0, $zero"], [21, "8c220000 lw\tv0,0(at)", "2c620005 sltiu $v0, $v1, 0x5"], [22, "00000000 nop", "10400020 beqz $v0, .L80135B14"], [23, "00400008 jr\tv0", "00031080 sll $v0, $v1, 2"], [24, "00000000 nop", "3c01801d lui $at, %hi(jtbl_801D2A78)"]], "passes_tried": null}
{"ts": "2026-07-21 21:05:20", "addr": "0x80135a4c", "name": "func_80135A4C", "reach": 1, "klass": "schedule", "nins": 181, "status": "near", "closeness": 170, "where_stuck": "none \u2014 MATCH (181 ins, relocation-masked; also rtu_match MATCH in ov_SC06_018_jr_8012ACE0)", "best_draft": ".run/backlog_drafts/func_80135A4C.c", "binary": "ov_SC06_018", "source": "t5j4", "residual": [[0, "27bdffa8 addiu\tsp,sp,-88", "80135cec .word .L80135CEC"], [1, "afb50044 sw\ts5,68(sp)", "80135ab0 .word .L80135AB0"], [2, "0080a821 move\ts5,a0", "80135ad0 .word .L80135AD0"], [3, "afb10034 sw\ts1,52(sp)", "80135aec .word .L80135AEC"], [4, "00a08821 move\ts1,a1", "80135b00 .word .L80135B00"], [5, "afb3003c sw\ts3,60(sp)", "27bdffa8 addiu $sp, $sp, -0x58"], [6, "00c09821 move\ts3,a2", "afb50044 sw $s5, 0x44($sp)"], [7, "afb60048 sw\ts6,72(sp)", "0080a821 addu $s5, $a0, $zero"], [8, "00e0b021 move\ts6,a3", "afb10034 sw $s1, 0x34($sp)"], [9, "afbf0050 sw\tra,80(sp)", "00a08821 addu $s1, $a1, $zero"], [10, "afb7004c sw\ts7,76(sp)", "afb3003c sw $s3, 0x3C($sp)"], [11, "afb40040 sw\ts4,64(sp)", "00c09821 addu $s3, $a2, $zero"], [12, "afb20038 sw\ts2,56(sp)", "afb60048 sw $s6, 0x48($sp)"], [14, "afb00030 sw\ts0,48(sp)", "afbf0050 sw $ra, 0x50($sp)"], [15, "00401821 move\tv1,v0", "afb7004c sw $s7, 0x4C($sp)"], [16, "2c620005 sltiu\tv0,v1,5", "afb40040 sw $s4, 0x40($sp)"], [17, "10400020 beqz\tv0,c8 <func_80135A4C+0xc8>", "afb20038 sw $s2, 0x38($sp)"], [18, "00031080 sll\tv0,v1,0x2", "0c04d520 jal func_80135480"], [19, "3c010000 lui\tat,0x0", "afb00030 sw $s0, 0x30($sp)"], [20, "00220821 addu\tat,at,v0", "00401821 addu $v1, $v0, $zero"], [21, "8c220000 lw\tv0,0(at)", "2c620005 sltiu $v0, $v1, 0x5"], [22, "00000000 nop", "10400020 beqz $v0, .L80135B14"], [23, "00400008 jr\tv0", "00031080 sll $v0, $v1, 2"], [24, "00000000 nop", "3c01801d lui $at, %hi(jtbl_801D2A78)"]], "passes_tried": null}
{"ts": "2026-07-22 01:31:28", "addr": "0x801299c8", "name": "func_801299C8", "reach": 1, "klass": "schedule", "nins": 158, "status": "near", "closeness": 0, "where_stuck": "none \u2014 MATCH (158 ins, match_one relocation-masked)", "best_draft": ".run/backlog_drafts/func_801299C8.c", "binary": "ov_SC06_018", "source": "worker", "residual": null, "passes_tried": null}
{"ts": "2026-07-22 01:32:21", "addr": "0x8012aaac", "name": "func_8012AAAC", "reach": 1, "klass": "schedule", "nins": 125, "status": "near", "closeness": 0, "where_stuck": "none \u2014 MATCH (125 ins, relocation-masked)", "best_draft": ".run/backlog_drafts/func_8012AAAC.c", "binary": "ov_SC06_018", "source": "worker", "residual": null, "passes_tried": null}
{"ts": "2026-07-22 01:33:28", "addr": "0x80135260", "name": "func_80135260", "reach": 1, "klass": "other", "nins": 136, "status": "near", "closeness": 127, "where_stuck": "none \u2014 MATCH", "best_draft": ".run/backlog_drafts/func_80135260.c", "binary": "ov_SC06_018", "source": "worker", "residual": [[0, "27bdff98 addiu\tsp,sp,-104", "80135454 .word .L80135454"], [1, "afb30054 sw\ts3,84(sp)", "801352b8 .word .L801352B8"], [2, "00809821 move\ts3,a0", "801352d8 .word .L801352D8"], [3, "afb1004c sw\ts1,76(sp)", "801352f4 .word .L801352F4"], [4, "00a08821 move\ts1,a1", "80135308 .word .L80135308"], [5, "afb5005c sw\ts5,92(sp)", "27bdff98 addiu $sp, $sp, -0x68"], [6, "00e0a821 move\ts5,a3", "afb30054 sw $s3, 0x54($sp)"], [7, "afbf0060 sw\tra,96(sp)", "00809821 addu $s3, $a0, $zero"], [8, "afb40058 sw\ts4,88(sp)", "afb1004c sw $s1, 0x4C($sp)"], [9, "afb20050 sw\ts2,80(sp)", "00a08821 addu $s1, $a1, $zero"], [11, "afb00048 sw\ts0,72(sp)", "00e0a821 addu $s5, $a3, $zero"], [12, "00401821 move\tv1,v0", "afbf0060 sw $ra, 0x60($sp)"], [13, "2c620005 sltiu\tv0,v1,5", "afb40058 sw $s4, 0x58($sp)"], [14, "10400020 beqz\tv0,bc <func_80135260+0xbc>", "afb20050 sw $s2, 0x50($sp)"], [15, "00031080 sll\tv0,v1,0x2", "0c04d520 jal func_80135480"], [16, "3c010000 lui\tat,0x0", "afb00048 sw $s0, 0x48($sp)"], [17, "00220821 addu\tat,at,v0", "00401821 addu $v1, $v0, $zero"], [18, "8c220000 lw\tv0,0(at)", "2c620005 sltiu $v0, $v1, 0x5"], [19, "00000000 nop", "10400020 beqz $v0, .L8013531C"], [20, "00400008 jr\tv0", "00031080 sll $v0, $v1, 2"], [21, "00000000 nop", "3c01801d lui $at, %hi(jtbl_801D2A48)"], [22, "26740034 addiu\ts4,s3,52", "00220821 addu $at, $at, $v0"], [23, "3c020fff lui\tv0,0xfff", "8c222a48 lw $v0, %lo(jtbl_801D2A48)($at)"], [24, "3442ffff ori\tv0,v0,0xffff", "00000000 nop"]], "passes_tried": null}
{"ts": "2026-07-22 01:34:41", "addr": "0x80135888", "name": "func_80135888", "reach": 1, "klass": "regalloc-order", "nins": 113, "status": "near", "closeness": 0, "where_stuck": "none -- MATCH (113 ins, relocation-masked)", "best_draft": ".run/backlog_drafts/func_80135888.c", "binary": "ov_SC06_018", "source": "worker", "residual": null, "passes_tried": null}
{"ts": "2026-07-22 01:35:50", "addr": "0x80135d20", "name": "func_80135D20", "reach": 1, "klass": "regalloc-order", "nins": 100, "status": "near", "closeness": 94, "where_stuck": "none \u2014 MATCH (match_one 100/100 + rtu_match real-TU); needs the PAIRED //@EDIT on ((s32 (*)(void *, s32, s16 *, s16 *))func_80135480)(return s16->s32 + `s32 result;`->`s16 result;`, whole-TU byte-neutral, verified) + one $s1 pin on `flag`", "best_draft": ".run/backlog_drafts/func_80135D20.c", "binary": "ov_SC06_018", "source": "worker", "residual": [[0, "27bdff68 addiu\tsp,sp,-152", "80135e84 .word .L80135E84"], [1, "afb30084 sw\ts3,132(sp)", "80135da0 .word .L80135DA0"], [2, "00809821 move\ts3,a0", "80135dc0 .word .L80135DC0"], [3, "afb20080 sw\ts2,128(sp)", "80135ddc .word .L80135DDC"], [4, "00a09021 move\ts2,a1", "80135df0 .word .L80135DF0"], [5, "afb40088 sw\ts4,136(sp)", "27bdff68 addiu $sp, $sp, -0x98"], [6, "00c0a021 move\ts4,a2", "afb30084 sw $s3, 0x84($sp)"], [7, "afbf0090 sw\tra,144(sp)", "00809821 addu $s3, $a0, $zero"], [8, "afb5008c sw\ts5,140(sp)", "afb20080 sw $s2, 0x80($sp)"], [9, "afb1007c sw\ts1,124(sp)", "00a09021 addu $s2, $a1, $zero"], [10, "afb00078 sw\ts0,120(sp)", "afb40088 sw $s4, 0x88($sp)"], [11, "96820000 lhu\tv0,0(s4)", "00c0a021 addu $s4, $a2, $zero"], [12, "00000000 nop", "afbf0090 sw $ra, 0x90($sp)"], [13, "a7a20070 sh\tv0,112(sp)", "afb5008c sw $s5, 0x8C($sp)"], [14, "96820002 lhu\tv0,2(s4)", "afb1007c sw $s1, 0x7C($sp)"], [15, "00000000 nop", "afb00078 sw $s0, 0x78($sp)"], [16, "24420300 addiu\tv0,v0,768", "96820000 lhu $v0, 0x0($s4)"], [17, "a7a20072 sh\tv0,114(sp)", "00000000 nop"], [18, "96820004 lhu\tv0,4(s4)", "a7a20070 sh $v0, 0x70($sp)"], [19, "27a70070 addiu\ta3,sp,112", "96820002 lhu $v0, 0x2($s4)"], [21, "a7a20074 sh\tv0,116(sp)", "24420300 addiu $v0, $v0, 0x300"], [22, "00401821 move\tv1,v0", "a7a20072 sh $v0, 0x72($sp)"], [23, "2c620005 sltiu\tv0,v1,5", "96820004 lhu $v0, 0x4($s4)"], [24, "10400020 beqz\tv0,e4 <func_80135D20+0xe4>", "27a70070 addiu $a3, $sp, 0x70"]], "passes_tried": null}
{"ts": "2026-07-22 01:36:21", "addr": null, "name": "func_801365B8", "reach": null, "klass": "schedule", "nins": null, "status": "failed", "closeness": null, "where_stuck": "none \u2014 MATCH (155/155). Two levers: (1) the three D_8012672x tail globals MUST be", "best_draft": ".run/backlog_drafts/func_801365B8.c", "binary": "ov_SC06_018", "source": "worker", "residual": null, "passes_tried": null}
{"ts": "2026-07-22 01:36:54", "addr": null, "name": "func_80165CA0", "reach": null, "klass": "regalloc-order", "nins": null, "status": "near", "closeness": 0, "where_stuck": "none \u2014 MATCH (99 ins, match_one masked)", "best_draft": ".run/backlog_drafts/func_80165CA0.c", "binary": "ov_SC06_018", "source": "worker", "residual": null, "passes_tried": null}
{"ts": "2026-07-22 01:37:25", "addr": null, "name": "func_801749C8", "reach": null, "klass": "schedule", "nins": null, "status": "near", "closeness": 0, "where_stuck": "none \u2014 MATCH (105 ins)", "best_draft": ".run/backlog_drafts/func_801749C8.c", "binary": "ov_SC06_018", "source": "worker", "residual": null, "passes_tried": null}
{"ts": "2026-07-22 01:38:34", "addr": null, "name": "func_8019059C", "reach": null, "klass": "regalloc-order", "nins": null, "status": "near", "closeness": 614, "where_stuck": "none \u2014 MATCH (673 ins)", "best_draft": ".run/backlog_drafts/func_8019059C.c", "binary": "ov_SC06_018", "source": "worker", "residual": [[0, "27bdffc0 addiu\tsp,sp,-64", "801905e0 .word .L801905E0"], [1, "afb10034 sw\ts1,52(sp)", "801906dc .word .L801906DC"], [2, "00808821 move\ts1,a0", "80190738 .word .L80190738"], [3, "afbf003c sw\tra,60(sp)", "80190780 .word .L80190780"], [4, "afb20038 sw\ts2,56(sp)", "801907c0 .word .L801907C0"], [5, "afb00030 sw\ts0,48(sp)", "801907e8 .word .L801907E8"], [6, "96230034 lhu\tv1,52(s1)", "80190864 .word .L80190864"], [7, "00000000 nop", "80190b1c .word .L80190B1C"], [8, "2c62000a sltiu\tv0,v1,10", "80190e1c .word .L80190E1C"], [9, "10400290 beqz\tv0,a68 <func_8019059C+0xa68>", "801906a0 .word .L801906A0"], [10, "00031080 sll\tv0,v1,0x2", "27bdffc0 addiu $sp, $sp, -0x40"], [11, "3c010000 lui\tat,0x0", "afb10034 sw $s1, 0x34($sp)"], [12, "00220821 addu\tat,at,v0", "00808821 addu $s1, $a0, $zero"], [13, "8c220000 lw\tv0,0(at)", "afbf003c sw $ra, 0x3C($sp)"], [14, "00000000 nop", "afb20038 sw $s2, 0x38($sp)"], [15, "00400008 jr\tv0", "afb00030 sw $s0, 0x30($sp)"], [16, "00000000 nop", "96230034 lhu $v1, 0x34($s1)"], [18, "02202021 move\ta0,s1", "2c62000a sltiu $v0, $v1, 0xA"], [19, "3c030003 lui\tv1,0x3", "10400290 beqz $v0, .L80191004"], [20, "3463ffff ori\tv1,v1,0xffff", "00031080 sll $v0, $v1, 2"], [21, "0062182a slt\tv1,v1,v0", "3c01801d lui $at, %hi(jtbl_801D3B4C)"], [22, "14600283 bnez\tv1,a68 <func_8019059C+0xa68>", "00220821 addu $at, $at, $v0"], [23, "24100200 li\ts0,512", "8c223b4c lw $v0, %lo(jtbl_801D3B4C)($at)"], [24, "3c050000 lui\ta1,0x0", "00000000 nop"]], "passes_tried": null}
{"ts": "2026-07-22 01:39:48", "addr": null, "name": "func_80191C50", "reach": null, "klass": "schedule", "nins": null, "status": "near", "closeness": 9, "where_stuck": "close=9 \u2014 only the case-7 sp20[] setup window (0x80192380..0x801923A4): gcc's list scheduler picks the D_80126B62 lui 2nd (its extra `addiu -0x38` gives that chain +1 priority) where the target picks D_80126B66 2nd (LUID/program order); everything else (710/710 ins, frame 0x40, $s0/$s1, jtbl, 3 entity loops, 8 sync blocks, cross-jumped L4AC tail) is byte-identical.", "best_draft": ".run/backlog_drafts/func_80191C50.c", "binary": "ov_SC06_018", "source": "worker", "residual": [[460, "3c030000 lui\tv1,0x0", "3c028012 lui $v0, %hi(D_80126B5E)"], [461, "94630000 lhu\tv1,0(v1)", "94426b5e lhu $v0, %lo(D_80126B5E)($v0)"], [462, "3c020000 lui\tv0,0x0", "3c038012 lui $v1, %hi(D_80126B66)"], [463, "94420000 lhu\tv0,0(v0)", "94636b66 lhu $v1, %lo(D_80126B66)($v1)"], [464, "3c040000 lui\ta0,0x0", "a7a20020 sh $v0, 0x20($sp)"], [465, "94840000 lhu\ta0,0(a0)", "3c028012 lui $v0, %hi(D_80126B62)"], [466, "2442ffc8 addiu\tv0,v0,-56", "94426b62 lhu $v0, %lo(D_80126B62)($v0)"], [467, "a7a30020 sh\tv1,32(sp)", "a7a30024 sh $v1, 0x24($sp)"], [468, "a7a40024 sh\ta0,36(sp)", "2442ffc8 addiu $v0, $v0, -0x38"]], "passes_tried": null}
{"ts": "2026-07-22 01:42:36", "addr": "0x801299c8", "name": "func_801299C8", "reach": 1, "klass": "schedule", "nins": 158, "status": "near", "closeness": 0, "where_stuck": "none \u2014 MATCH (158 ins, match_one relocation-masked)", "best_draft": ".run/backlog_drafts/func_801299C8.c", "binary": "ov_SC06_018", "source": "worker", "residual": null, "passes_tried": null}
{"ts": "2026-07-22 01:43:23", "addr": "0x8012aaac", "name": "func_8012AAAC", "reach": 1, "klass": "schedule", "nins": 125, "status": "near", "closeness": 0, "where_stuck": "none \u2014 MATCH (125 ins, relocation-masked)", "best_draft": ".run/backlog_drafts/func_8012AAAC.c", "binary": "ov_SC06_018", "source": "worker", "residual": null, "passes_tried": null}
{"ts": "2026-07-22 01:44:29", "addr": "0x80135260", "name": "func_80135260", "reach": 1, "klass": "other", "nins": 136, "status": "near", "closeness": 5, "where_stuck": "none \u2014 MATCH", "best_draft": ".run/backlog_drafts/func_80135260.c", "binary": "ov_SC06_018", "source": "worker", "residual": [[76, "90840000 lbu\ta0,0(a0)", "8c843b68 lw $a0, %lo(D_80193B68)($a0)"], [78, "90c60000 lbu\ta2,0(a2)", "8cc63b64 lw $a2, %lo(D_80193B64)($a2)"], [82, "90a50000 lbu\ta1,0(a1)", "8ca53b70 lw $a1, %lo(D_80193B70)($a1)"], [102, "90840000 lbu\ta0,0(a0)", "8c843b64 lw $a0, %lo(D_80193B64)($a0)"], [104, "90c60000 lbu\ta2,0(a2)", "8cc63b68 lw $a2, %lo(D_80193B68)($a2)"]], "passes_tried": null}
{"ts": "2026-07-22 01:45:36", "addr": "0x80135888", "name": "func_80135888", "reach": 1, "klass": "regalloc-order", "nins": 113, "status": "near", "closeness": 0, "where_stuck": "none -- MATCH (113 ins, relocation-masked)", "best_draft": ".run/backlog_drafts/func_80135888.c", "binary": "ov_SC06_018", "source": "worker", "residual": null, "passes_tried": null}
{"ts": "2026-07-22 01:46:43", "addr": "0x80135d20", "name": "func_80135D20", "reach": 1, "klass": "regalloc-order", "nins": 100, "status": "near", "closeness": 0, "where_stuck": "none \u2014 MATCH (match_one 100/100 + rtu_match real-TU); needs the PAIRED //@EDIT on ((s32 (*)(void *, s32, s16 *, s16 *))func_80135480)(return s16->s32 + `s32 result;`->`s16 result;`, whole-TU byte-neutral, verified) + one $s1 pin on `flag`", "best_draft": ".run/backlog_drafts/func_80135D20.c", "binary": "ov_SC06_018", "source": "worker", "residual": null, "passes_tried": null}
{"ts": "2026-07-22 01:47:14", "addr": null, "name": "func_801365B8", "reach": null, "klass": "schedule", "nins": null, "status": "failed", "closeness": null, "where_stuck": "none \u2014 MATCH (155/155). Two levers: (1) the three D_8012672x tail globals MUST be", "best_draft": ".run/backlog_drafts/func_801365B8.c", "binary": "ov_SC06_018", "source": "worker", "residual": null, "passes_tried": null}
{"ts": "2026-07-22 01:47:46", "addr": null, "name": "func_80165CA0", "reach": null, "klass": "regalloc-order", "nins": null, "status": "near", "closeness": 0, "where_stuck": "none \u2014 MATCH (99 ins, match_one masked)", "best_draft": ".run/backlog_drafts/func_80165CA0.c", "binary": "ov_SC06_018", "source": "worker", "residual": null, "passes_tried": null}
{"ts": "2026-07-22 01:48:18", "addr": null, "name": "func_801749C8", "reach": null, "klass": "schedule", "nins": null, "status": "near", "closeness": 0, "where_stuck": "none \u2014 MATCH (105 ins)", "best_draft": ".run/backlog_drafts/func_801749C8.c", "binary": "ov_SC06_018", "source": "worker", "residual": null, "passes_tried": null}
{"ts": "2026-07-22 01:49:25", "addr": null, "name": "func_8019059C", "reach": null, "klass": "regalloc-order", "nins": null, "status": "near", "closeness": 0, "where_stuck": "none \u2014 MATCH (673 ins)", "best_draft": ".run/backlog_drafts/func_8019059C.c", "binary": "ov_SC06_018", "source": "worker", "residual": null, "passes_tried": null}
{"ts": "2026-07-22 01:50:33", "addr": null, "name": "func_80191C50", "reach": null, "klass": "schedule", "nins": null, "status": "near", "closeness": 9, "where_stuck": "close=9 \u2014 only the case-7 sp20[] setup window (0x80192380..0x801923A4): gcc's list scheduler picks the D_80126B62 lui 2nd (its extra `addiu -0x38` gives that chain +1 priority) where the target picks D_80126B66 2nd (LUID/program order); everything else (710/710 ins, frame 0x40, $s0/$s1, jtbl, 3 entity loops, 8 sync blocks, cross-jumped L4AC tail) is byte-identical.", "best_draft": ".run/backlog_drafts/func_80191C50.c", "binary": "ov_SC06_018", "source": "worker", "residual": [[460, "3c030000 lui\tv1,0x0", "3c028012 lui $v0, %hi(D_80126B5E)"], [461, "94630000 lhu\tv1,0(v1)", "94426b5e lhu $v0, %lo(D_80126B5E)($v0)"], [462, "3c020000 lui\tv0,0x0", "3c038012 lui $v1, %hi(D_80126B66)"], [463, "94420000 lhu\tv0,0(v0)", "94636b66 lhu $v1, %lo(D_80126B66)($v1)"], [464, "3c040000 lui\ta0,0x0", "a7a20020 sh $v0, 0x20($sp)"], [465, "94840000 lhu\ta0,0(a0)", "3c028012 lui $v0, %hi(D_80126B62)"], [466, "2442ffc8 addiu\tv0,v0,-56", "94426b62 lhu $v0, %lo(D_80126B62)($v0)"], [467, "a7a30020 sh\tv1,32(sp)", "a7a30024 sh $v1, 0x24($sp)"], [468, "a7a40024 sh\ta0,36(sp)", "2442ffc8 addiu $v0, $v0, -0x38"]], "passes_tried": null}
+1356 -1357
View File
File diff suppressed because it is too large Load Diff
+6 -6
View File
@@ -2,11 +2,11 @@
> Generated by `tools/family_hseq.py` from the 134 overlay sigs + per-overlay src stubs. Ranked by TEMPLATABLE byte-weight (PURE+IMM members × nins × 4). The byte-gate is the arbiter.
**Fleet (overlays):** 88.1% fn / 78.0% instr / 66.5% distinct-code matched. Unmatched: 41,751 instances / 2,876,589 ins (23,361 distinct classes).
**Fleet (overlays):** 88.2% fn / 78.0% instr / 66.5% distinct-code matched. Unmatched: 41,585 instances / 2,871,950 ins (23,337 distinct classes).
**Tail cross-check (Phase-25 close):** 28,754 tail fns / 1,179,549 ins → 583 h_seq families ≥2, **165 substantial (nins≥80) / 692,494 ins**.
**Tail cross-check (Phase-25 close):** 28,173 tail fns / 1,178,976 ins → 581 h_seq families ≥2, **165 substantial (nins≥80) / 692,313 ins**.
**Full frontier (all unmatched by h_seq):** 2739 target families (≥2 members or a matched sibling) + 3787 singletons (Step-D residue). Substantial: **572 families / 1,577,844 templatable ins**, 67 with a matched sibling (zero-crack). Substantial member classes: 10,077 PURE · 40 IMM · 6 STRUCT-excluded.
**Full frontier (all unmatched by h_seq):** 2735 target families (≥2 members or a matched sibling) + 3780 singletons (Step-D residue). Substantial: **572 families / 1,577,559 templatable ins**, 69 with a matched sibling (zero-crack). Substantial member classes: 10,075 PURE · 40 IMM · 6 STRUCT-excluded.
## Top substantial families (by templatable byte-weight)
@@ -27,7 +27,7 @@
| 12 | 198 | 138 (138/0/0) | 1/138 | per-location | PURE | 0 | · | 0x801412a8 draft-ov077 | 27,324 |
| 13 | 188 | 138 (138/0/0) | 1/138 | per-location | PURE | 0 | · | 0x80175ab8 draft-ov077 | 25,944 |
| 14 | 183 | 137 (137/0/0) | 1/137 | per-location | PURE | 1 | Y | 0x8014032c matched-ov077 | 25,071 |
| 15 | 181 | 138 (138/0/0) | 1/138 | per-location | PURE | 0 | Y | 0x80135a4c draft-ov077 | 24,978 |
| 15 | 181 | 137 (137/0/0) | 1/137 | per-location | PURE | 1 | Y | 0x80135a4c matched | 24,797 |
| 16 | 165 | 138 (138/0/0) | 1/138 | per-location | PURE | 0 | · | 0x80178004 draft-ov077 | 22,770 |
| 17 | 158 | 138 (138/0/0) | 1/138 | per-location | PURE | 0 | Y | 0x801299c8 draft-ov077 | 21,804 |
| 18 | 154 | 137 (137/0/0) | 1/137 | per-location | PURE | 1 | Y | 0x8013c0f8 matched-ov077 | 21,098 |
@@ -46,8 +46,8 @@
| 31 | 947 | 16 (16/0/0) | 6/16 | cross-address | PURE | 0 | Y | 0x8017c974 draft-ov077 | 15,152 |
| 32 | 105 | 138 (138/0/0) | 1/138 | per-location | PURE | 0 | · | 0x8012cc88 draft-ov077 | 14,490 |
| 33 | 105 | 138 (138/0/0) | 1/138 | per-location | PURE | 0 | · | 0x80169228 draft-ov077 | 14,490 |
| 34 | 104 | 138 (138/0/0) | 1/138 | per-location | PURE | 0 | · | 0x80167714 draft-ov077 | 14,352 |
| 35 | 105 | 136 (136/0/0) | 1/136 | per-location | PURE | 2 | · | 0x801749c8 matched-ov077 | 14,280 |
| 34 | 105 | 136 (136/0/0) | 1/136 | per-location | PURE | 2 | · | 0x801749c8 matched-ov077 | 14,280 |
| 35 | 104 | 137 (137/0/0) | 1/137 | per-location | PURE | 1 | · | 0x80167714 matched-ov077 | 14,248 |
| 36 | 101 | 138 (138/0/0) | 1/138 | per-location | PURE | 0 | · | 0x801463a0 draft-ov077 | 13,938 |
| 37 | 101 | 138 (138/0/0) | 1/138 | per-location | PURE | 0 | · | 0x80177940 draft-ov077 | 13,938 |
| 38 | 100 | 138 (138/0/0) | 1/138 | per-location | PURE | 0 | Y | 0x80135d20 draft-ov077 | 13,800 |
+54
View File
@@ -4754,3 +4754,57 @@ ladder. The correct next step is to diagnose the divergence itself (diff the inc
**Measured, so the next session does not re-derive it:** of 11 preserved wave cracks, exactly ONE
(`func_80135A4C`) reaches byte-identical through the carve path; the other four table-bearing ones
fail one-at-a-time too, on the PLUMBING classes (§57 self-decl et al), not on the carve.
### §61d — The undo was eating the tree: two tools, one defect, invisible to the byte-gate (Phase 29, 2026-07-22)
The §61c blocker turned out not to exist (see the REFUTED block above), and chasing *why* it had ever been
observed found the mechanism — in **two** tools, both times invisible to the gate that caused it.
> **`jr_isolate_all` repartitions a code object by writing region 0 back over the ORIGINAL
> `src/<ov>/<nm>.c`, TRUNCATED to just that region**, and emitting the remainder as new `_jr_<lo>.c` files.
> An undo that restores only `config/` and deletes the new region files therefore leaves the original TU
> permanently truncated — its stubs are gone, and **nothing regenerates them** (splat does not rewrite a
> committed overlay `.c`).
Both `harvest_verify._jtbl_restore` and `gate_stage._jtbl_prepare` snapshotted only the two config files.
Measured, twice, on live re-probe runs: live stubs **419 → 414 → 406 → 395**, five orphan region files, and
`undefined reference to func_80192F64` at link.
**Why it survived so long: it is invisible to the byte-gate.** The incremental build keeps linking the stale
objects (§42b), so `make build` stays GREEN while a clean rebuild fails — the gate that authorises the bank
is the same incremental build that hides the damage. This is the §42b blind spot doing real, cumulative
damage, and it is what manufactured the "139/140, twice" reading that became the §61c blocker.
**Fixes.** `harvest_verify`: snapshot every `src/<binary>/*.c`, restore on rejection, and delete exactly the
files the attempt created — derived from the snapshot's file set, not re-guessed from the `_jr_*` name shape
(R33). `gate_stage._jtbl_prepare`: **DELETED, not patched** (R33 — the best outcome is a deleted stage). It
was wrong on two independent axes: §61b had already byte-proved the carve must FOLLOW the splice, and
`harvest_verify` now does the correct per-draft prep one layer down. Two implementations of one capability,
the outer one both ineffective and destructive.
**A label that is constant carries no information (and is worse than none).** `classify_fail` searched the
whole build stderr, so `warning: conflicting types for built-in function 'memcpy'` — benign, from an
unrelated TU position, present on essentially every overlay build — won the match on **8 of 8** failures
spanning four genuinely different causes. That is the §58 red-herring, and the cookbook had been recording
"the gate label is useless here, splice individually and read real cc1 stderr" as a *manual workaround for a
one-line bug*. Fix: classify on NON-warning lines; fall through to `CC1-FAIL:<last error line>`. The same
failure instantly became `ov_SC06_018.c:447: prototype declaration`.
**What the honest re-probe then measured** (11 preserved t5wave cracks, one invocation each, clean tree):
* **`func_8018F694` (478 ins) BANKED** — a giant previously inside "the gate banked ZERO".
* The other 10: **4 data-decl · 3 callee-decl · 3 self-decl** conflicts. **ZERO jtbl-drift, ZERO local-type
redefinition, ZERO codegen DIFF.** So **§61a's "§8e-2 jtbl drift blocks 10 of 12" does not survive** the
carve-follows-splice prep — the carve succeeds; what is left is ordinary decl plumbing.
* Through `gate_stage`'s ladder: **0/10 bank**, but **9/10 now COMPILE** and land as whole-binary byte-DIFF.
`match_one` close=0 on several and `rtu_match` MATCH-in-real-TU for `func_80135888`, while
`func_801299C8`'s transformed draft does not compile in its real TU at all — the residual is **MIXED**, and
at least one is an IMAGE-level effect rather than the draft or its TU context (prime suspect: jtbl/rodata
carve placement). **Deliberately not generalized from one data point.**
**The pricing this yields:** the existing ladder converts **0 of 10** of these residuals. Task 14 stages 2-3
are therefore NOT "wire in `normalize_self_decls` + the type-lift and collect ten banks" — a measurement, not
a projection, which is the error §57a already caught once this phase.
**The rule, stated generally:** *any* stage that mutates shared state must undo by SNAPSHOT-RESTORE over the
**complete** set of files it can touch — config AND source — and a stage whose undo scope is narrower than
its write scope will silently destroy work that no byte-gate can see. §61's law, one level deeper.
+143 -143
View File
@@ -4,156 +4,156 @@
# cross-binary collapsible-byte leverage: docs/duplicates.cross.md.
# THREE progress metrics (all matter — see the labels):
FLEET fn-count byte-ident: 311082 / 353722 = 87.95% (REAL+LINKED+empties; FUNCTION-count, ×134-inflated — one crack counts per overlay)
FLEET instr-weighted : 10207974 / 13081451 = 78.0% (shipped .text across resident+138 overlays; the decomp.dev-DISPLAY number)
FLEET distinct-code(uniq): 3709272 / 5574674 = 66.5% (64108/87459 unique fns; the DISTINCT-RE number)
FLEET fn-count byte-ident: 311220 / 353722 = 87.98% (REAL+LINKED+empties; FUNCTION-count, ×134-inflated — one crack counts per overlay)
FLEET instr-weighted : 10233249 / 13081451 = 78.2% (shipped .text across resident+138 overlays; the decomp.dev-DISPLAY number)
FLEET distinct-code(uniq): 3733280 / 5574674 = 67.0% (64239/87459 unique fns; the DISTINCT-RE number)
MAIN game-code weighted : 436 / 60201 = 0.7% (Phase-27 T10; SEPARATE — LINKED-excluding Ghidra sig dated 2026-06-14, PROVISIONAL until a fresh/complete main sig; NOT folded into the fleet number)
FLEET REAL substantive : 309227 (of which dedup-shared 234437 via 1848 groups / 234481 instances)
FLEET REAL substantive : 309365 (of which dedup-shared 234437 via 1848 groups / 234481 instances)
FLEET LINKED PsyQ objs : 959
FLEET NON_MATCHING : 7 (0 in any default build — G4)
FLEET INCLUDE_ASM stubs : 42633
FLEET INCLUDE_ASM stubs : 42495
FLEET matchable : 353722
| binary | REAL | shared | LINKED | byte-ident | matchable | byte-ident % |
|---|---:|---:|---:|---:|---:|---:|
| main | 54 | 2 | 959 | 1055 | 2096 | 50.3% |
| resident | 129 | 0 | 0 | 131 | 145 | 90.3% |
| ov_SC01_000 | 2220 | 1706 | 0 | 2220 | 2403 | 92.4% |
| ov_SC01_001 | 2220 | 1706 | 0 | 2222 | 2466 | 90.1% |
| ov_SC01_004 | 2212 | 1697 | 0 | 2213 | 2414 | 91.7% |
| ov_SC01_005 | 2241 | 1719 | 0 | 2241 | 2503 | 89.5% |
| ov_SC01_006 | 2241 | 1719 | 0 | 2241 | 2503 | 89.5% |
| ov_SC01_008 | 2212 | 1697 | 0 | 2214 | 2426 | 91.3% |
| ov_SC01_009 | 2237 | 1698 | 0 | 2238 | 2507 | 89.3% |
| ov_SC01_074 | 2215 | 1698 | 0 | 2217 | 2425 | 91.4% |
| ov_SC01_077 | 2407 | 1666 | 0 | 2409 | 2585 | 93.2% |
| ov_SC01_080 | 2254 | 1701 | 0 | 2254 | 2512 | 89.7% |
| ov_SC01_084 | 2261 | 1701 | 0 | 2266 | 2579 | 87.9% |
| ov_SC02_000 | 2314 | 1736 | 0 | 2314 | 2683 | 86.2% |
| ov_SC02_003 | 2314 | 1736 | 0 | 2314 | 2683 | 86.2% |
| ov_SC02_004 | 2220 | 1701 | 0 | 2220 | 2401 | 92.5% |
| ov_SC02_005 | 2327 | 1697 | 0 | 2337 | 2927 | 79.8% |
| ov_SC02_011 | 2338 | 1704 | 0 | 2349 | 2893 | 81.2% |
| ov_SC02_015 | 2221 | 1703 | 0 | 2221 | 2414 | 92.0% |
| ov_SC02_016 | 2252 | 1703 | 0 | 2255 | 2545 | 88.6% |
| ov_SC02_017 | 2298 | 1703 | 0 | 2306 | 2732 | 84.4% |
| ov_SC02_021 | 2227 | 1703 | 0 | 2227 | 2437 | 91.4% |
| ov_SC02_026 | 2242 | 1701 | 0 | 2248 | 2572 | 87.4% |
| ov_SC02_027 | 2265 | 1701 | 0 | 2274 | 2692 | 84.5% |
| ov_SC02_028 | 2266 | 1701 | 0 | 2276 | 2701 | 84.3% |
| ov_SC02_031 | 2252 | 1702 | 0 | 2257 | 2562 | 88.1% |
| ov_SC02_035 | 2228 | 1701 | 0 | 2231 | 2520 | 88.5% |
| ov_SC02_039 | 2213 | 1701 | 0 | 2213 | 2416 | 91.6% |
| ov_SC02_041 | 2248 | 1701 | 0 | 2251 | 2561 | 87.9% |
| ov_SC03_001 | 2349 | 1702 | 0 | 2366 | 2869 | 82.5% |
| ov_SC03_002 | 2275 | 1706 | 0 | 2290 | 2631 | 87.0% |
| ov_SC03_003 | 2223 | 1701 | 0 | 2224 | 2423 | 91.8% |
| ov_SC03_006 | 2288 | 1707 | 0 | 2297 | 2767 | 83.0% |
| ov_SC03_007 | 2268 | 1701 | 0 | 2272 | 2623 | 86.6% |
| ov_SC03_010 | 2229 | 1701 | 0 | 2229 | 2470 | 90.2% |
| ov_SC03_011 | 2237 | 1701 | 0 | 2243 | 2527 | 88.8% |
| ov_SC03_012 | 2215 | 1701 | 0 | 2216 | 2406 | 92.1% |
| ov_SC03_013 | 2234 | 1701 | 0 | 2234 | 2492 | 89.6% |
| ov_SC03_014 | 2293 | 1726 | 0 | 2293 | 2685 | 85.4% |
| ov_SC03_015 | 2293 | 1726 | 0 | 2293 | 2685 | 85.4% |
| ov_SC03_023 | 2221 | 1701 | 0 | 2222 | 2435 | 91.3% |
| ov_SC03_024 | 2280 | 1706 | 0 | 2287 | 2641 | 86.6% |
| ov_SC03_028 | 2261 | 1701 | 0 | 2265 | 2664 | 85.0% |
| ov_SC03_029 | 2263 | 1703 | 0 | 2273 | 2644 | 86.0% |
| ov_SC03_030 | 2236 | 1706 | 0 | 2238 | 2495 | 89.7% |
| ov_SC03_031 | 2233 | 1701 | 0 | 2236 | 2514 | 88.9% |
| ov_SC03_089 | 2247 | 1701 | 0 | 2254 | 2581 | 87.3% |
| ov_SC03_090 | 2249 | 1701 | 0 | 2257 | 2625 | 86.0% |
| ov_SC03_091 | 2252 | 1701 | 0 | 2260 | 2640 | 85.6% |
| ov_SC03_092 | 2263 | 1701 | 0 | 2275 | 2587 | 87.9% |
| ov_SC03_093 | 2239 | 1701 | 0 | 2243 | 2563 | 87.5% |
| ov_SC03_094 | 2234 | 1701 | 0 | 2240 | 2577 | 86.9% |
| ov_SC03_095 | 2224 | 1701 | 0 | 2227 | 2474 | 90.0% |
| ov_SC03_096 | 2224 | 1701 | 0 | 2227 | 2465 | 90.3% |
| ov_SC03_097 | 2253 | 1701 | 0 | 2260 | 2603 | 86.8% |
| ov_SC03_098 | 2232 | 1701 | 0 | 2235 | 2541 | 88.0% |
| ov_SC03_099 | 2225 | 1701 | 0 | 2228 | 2504 | 89.0% |
| ov_SC03_100 | 2235 | 1701 | 0 | 2239 | 2539 | 88.2% |
| ov_SC03_101 | 2235 | 1701 | 0 | 2239 | 2528 | 88.6% |
| ov_SC03_102 | 2227 | 1701 | 0 | 2230 | 2492 | 89.5% |
| ov_SC03_103 | 2230 | 1703 | 0 | 2233 | 2510 | 89.0% |
| ov_SC03_104 | 2255 | 1701 | 0 | 2262 | 2616 | 86.5% |
| ov_SC03_105 | 2249 | 1701 | 0 | 2256 | 2597 | 86.9% |
| ov_SC03_108 | 2217 | 1701 | 0 | 2217 | 2443 | 90.7% |
| ov_SC03_109 | 2218 | 1701 | 0 | 2220 | 2424 | 91.6% |
| ov_SC03_110 | 2223 | 1701 | 0 | 2223 | 2468 | 90.1% |
| ov_SC03_111 | 2235 | 1701 | 0 | 2238 | 2510 | 89.2% |
| ov_SC03_112 | 2228 | 1703 | 0 | 2230 | 2526 | 88.3% |
| ov_SC03_113 | 2221 | 1703 | 0 | 2224 | 2468 | 90.1% |
| ov_SC03_114 | 2211 | 1701 | 0 | 2213 | 2415 | 91.6% |
| ov_SC03_115 | 2228 | 1701 | 0 | 2230 | 2472 | 90.2% |
| ov_SC03_116 | 2218 | 1701 | 0 | 2221 | 2438 | 91.1% |
| ov_SC03_117 | 2246 | 1701 | 0 | 2252 | 2557 | 88.1% |
| ov_SC03_118 | 2293 | 1725 | 0 | 2294 | 2685 | 85.4% |
| ov_SC03_119 | 2292 | 1725 | 0 | 2293 | 2685 | 85.4% |
| ov_SC03_121 | 2225 | 1701 | 0 | 2228 | 2459 | 90.6% |
| ov_SC03_124 | 2305 | 1697 | 0 | 2325 | 2741 | 84.8% |
| ov_SC03_125 | 2262 | 1701 | 0 | 2274 | 2588 | 87.9% |
| ov_SC03_126 | 2224 | 1703 | 0 | 2224 | 2423 | 91.8% |
| ov_SC04_000 | 2240 | 1705 | 0 | 2249 | 2546 | 88.3% |
| ov_SC04_002 | 2256 | 1701 | 0 | 2260 | 2636 | 85.7% |
| ov_SC04_003 | 2234 | 1701 | 0 | 2238 | 2502 | 89.4% |
| ov_SC04_004 | 2243 | 1701 | 0 | 2245 | 2558 | 87.8% |
| ov_SC04_005 | 2251 | 1701 | 0 | 2257 | 2612 | 86.4% |
| ov_SC04_006 | 2224 | 1701 | 0 | 2226 | 2454 | 90.7% |
| ov_SC04_007 | 2244 | 1701 | 0 | 2248 | 2569 | 87.5% |
| ov_SC04_008 | 2214 | 1701 | 0 | 2214 | 2415 | 91.7% |
| ov_SC04_009 | 2230 | 1701 | 0 | 2233 | 2441 | 91.5% |
| ov_SC04_010 | 2221 | 1701 | 0 | 2222 | 2419 | 91.9% |
| ov_SC04_011 | 2277 | 1701 | 0 | 2283 | 2803 | 81.4% |
| ov_SC04_012 | 2217 | 1701 | 0 | 2218 | 2420 | 91.7% |
| ov_SC04_015 | 2282 | 1702 | 0 | 2293 | 2611 | 87.8% |
| ov_SC04_016 | 2220 | 1701 | 0 | 2222 | 2440 | 91.1% |
| ov_SC04_018 | 2332 | 1736 | 0 | 2332 | 2857 | 81.6% |
| ov_SC04_019 | 2338 | 1736 | 0 | 2338 | 2857 | 81.8% |
| ov_SC04_020 | 2249 | 1701 | 0 | 2261 | 2567 | 88.1% |
| ov_SC04_021 | 2225 | 1703 | 0 | 2225 | 2423 | 91.8% |
| ov_SC05_000 | 2221 | 1705 | 0 | 2224 | 2422 | 91.8% |
| ov_SC05_001 | 2244 | 1701 | 0 | 2249 | 2574 | 87.4% |
| ov_SC05_002 | 2226 | 1701 | 0 | 2229 | 2442 | 91.3% |
| ov_SC05_003 | 2223 | 1701 | 0 | 2224 | 2481 | 89.6% |
| ov_SC05_004 | 2218 | 1701 | 0 | 2220 | 2464 | 90.1% |
| ov_SC05_005 | 2225 | 1701 | 0 | 2226 | 2491 | 89.4% |
| ov_SC05_006 | 2217 | 1701 | 0 | 2217 | 2430 | 91.2% |
| ov_SC05_007 | 2227 | 1701 | 0 | 2232 | 2482 | 89.9% |
| ov_SC05_008 | 2244 | 1701 | 0 | 2246 | 2543 | 88.3% |
| ov_SC05_009 | 2222 | 1701 | 0 | 2226 | 2438 | 91.3% |
| ov_SC05_010 | 2248 | 1701 | 0 | 2252 | 2588 | 87.0% |
| ov_SC05_011 | 2220 | 1701 | 0 | 2221 | 2409 | 92.2% |
| ov_SC05_017 | 2328 | 1698 | 0 | 2339 | 2842 | 82.3% |
| ov_SC05_018 | 2275 | 1701 | 0 | 2288 | 2673 | 85.6% |
| ov_SC05_019 | 2225 | 1703 | 0 | 2225 | 2423 | 91.8% |
| ov_SC06_000 | 2287 | 1710 | 0 | 2290 | 2691 | 85.1% |
| ov_SC06_006 | 2240 | 1701 | 0 | 2241 | 2511 | 89.2% |
| ov_SC06_008 | 2250 | 1703 | 0 | 2256 | 2542 | 88.7% |
| ov_SC06_010 | 2233 | 1701 | 0 | 2238 | 2517 | 88.9% |
| ov_SC06_011 | 2229 | 1701 | 0 | 2233 | 2468 | 90.5% |
| ov_SC06_013 | 2222 | 1701 | 0 | 2223 | 2425 | 91.7% |
| ov_SC06_014 | 2228 | 1701 | 0 | 2230 | 2453 | 90.9% |
| ov_SC06_015 | 2225 | 1701 | 0 | 2225 | 2421 | 91.9% |
| ov_SC06_016 | 2243 | 1701 | 0 | 2245 | 2549 | 88.1% |
| ov_SC06_018 | 2240 | 1704 | 0 | 2247 | 2665 | 84.3% |
| ov_SC06_020 | 2232 | 1703 | 0 | 2233 | 2518 | 88.7% |
| ov_SC06_022 | 2246 | 1701 | 0 | 2254 | 2642 | 85.3% |
| ov_SC06_024 | 2252 | 1701 | 0 | 2258 | 2667 | 84.7% |
| ov_SC06_025 | 2243 | 1701 | 0 | 2248 | 2572 | 87.4% |
| ov_SC06_027 | 2211 | 1701 | 0 | 2212 | 2408 | 91.9% |
| ov_SC06_029 | 2269 | 1701 | 0 | 2281 | 2662 | 85.7% |
| ov_SC06_030 | 2224 | 1701 | 0 | 2224 | 2456 | 90.6% |
| ov_SC06_032 | 2236 | 1702 | 0 | 2243 | 2658 | 84.4% |
| ov_SC06_033 | 2239 | 1702 | 0 | 2246 | 2631 | 85.4% |
| ov_SC07_000 | 2239 | 1705 | 0 | 2241 | 2521 | 88.9% |
| ov_SC07_001 | 2224 | 1701 | 0 | 2226 | 2454 | 90.7% |
| ov_SC07_002 | 2251 | 1701 | 0 | 2255 | 2579 | 87.4% |
| ov_SC07_006 | 1993 | 1549 | 0 | 2073 | 2456 | 84.4% |
| ov_SC07_007 | 2010 | 1550 | 0 | 2094 | 2614 | 80.1% |
| ov_SC07_008 | 2208 | 1701 | 0 | 2208 | 2386 | 92.5% |
| ov_SC07_009 | 2218 | 1701 | 0 | 2220 | 2430 | 91.4% |
| ov_SC07_010 | 2021 | 1550 | 0 | 2104 | 2526 | 83.3% |
| ov_SC07_011 | 2009 | 1549 | 0 | 2089 | 2450 | 85.3% |
| ov_SC01_000 | 2221 | 1706 | 0 | 2221 | 2403 | 92.4% |
| ov_SC01_001 | 2221 | 1706 | 0 | 2223 | 2466 | 90.1% |
| ov_SC01_004 | 2213 | 1697 | 0 | 2214 | 2414 | 91.7% |
| ov_SC01_005 | 2242 | 1719 | 0 | 2242 | 2503 | 89.6% |
| ov_SC01_006 | 2242 | 1719 | 0 | 2242 | 2503 | 89.6% |
| ov_SC01_008 | 2213 | 1697 | 0 | 2215 | 2426 | 91.3% |
| ov_SC01_009 | 2238 | 1698 | 0 | 2239 | 2507 | 89.3% |
| ov_SC01_074 | 2216 | 1698 | 0 | 2218 | 2425 | 91.5% |
| ov_SC01_077 | 2408 | 1666 | 0 | 2410 | 2585 | 93.2% |
| ov_SC01_080 | 2255 | 1701 | 0 | 2255 | 2512 | 89.8% |
| ov_SC01_084 | 2262 | 1701 | 0 | 2267 | 2579 | 87.9% |
| ov_SC02_000 | 2315 | 1736 | 0 | 2315 | 2683 | 86.3% |
| ov_SC02_003 | 2315 | 1736 | 0 | 2315 | 2683 | 86.3% |
| ov_SC02_004 | 2221 | 1701 | 0 | 2221 | 2401 | 92.5% |
| ov_SC02_005 | 2328 | 1697 | 0 | 2338 | 2927 | 79.9% |
| ov_SC02_011 | 2339 | 1704 | 0 | 2350 | 2893 | 81.2% |
| ov_SC02_015 | 2222 | 1703 | 0 | 2222 | 2414 | 92.0% |
| ov_SC02_016 | 2253 | 1703 | 0 | 2256 | 2545 | 88.6% |
| ov_SC02_017 | 2299 | 1703 | 0 | 2307 | 2732 | 84.4% |
| ov_SC02_021 | 2228 | 1703 | 0 | 2228 | 2437 | 91.4% |
| ov_SC02_026 | 2243 | 1701 | 0 | 2249 | 2572 | 87.4% |
| ov_SC02_027 | 2266 | 1701 | 0 | 2275 | 2692 | 84.5% |
| ov_SC02_028 | 2267 | 1701 | 0 | 2277 | 2701 | 84.3% |
| ov_SC02_031 | 2253 | 1702 | 0 | 2258 | 2562 | 88.1% |
| ov_SC02_035 | 2229 | 1701 | 0 | 2232 | 2520 | 88.6% |
| ov_SC02_039 | 2214 | 1701 | 0 | 2214 | 2416 | 91.6% |
| ov_SC02_041 | 2249 | 1701 | 0 | 2252 | 2561 | 87.9% |
| ov_SC03_001 | 2350 | 1702 | 0 | 2367 | 2869 | 82.5% |
| ov_SC03_002 | 2276 | 1706 | 0 | 2291 | 2631 | 87.1% |
| ov_SC03_003 | 2224 | 1701 | 0 | 2225 | 2423 | 91.8% |
| ov_SC03_006 | 2289 | 1707 | 0 | 2298 | 2767 | 83.1% |
| ov_SC03_007 | 2269 | 1701 | 0 | 2273 | 2623 | 86.7% |
| ov_SC03_010 | 2230 | 1701 | 0 | 2230 | 2470 | 90.3% |
| ov_SC03_011 | 2238 | 1701 | 0 | 2244 | 2527 | 88.8% |
| ov_SC03_012 | 2216 | 1701 | 0 | 2217 | 2406 | 92.1% |
| ov_SC03_013 | 2235 | 1701 | 0 | 2235 | 2492 | 89.7% |
| ov_SC03_014 | 2294 | 1726 | 0 | 2294 | 2685 | 85.4% |
| ov_SC03_015 | 2294 | 1726 | 0 | 2294 | 2685 | 85.4% |
| ov_SC03_023 | 2222 | 1701 | 0 | 2223 | 2435 | 91.3% |
| ov_SC03_024 | 2281 | 1706 | 0 | 2288 | 2641 | 86.6% |
| ov_SC03_028 | 2262 | 1701 | 0 | 2266 | 2664 | 85.1% |
| ov_SC03_029 | 2264 | 1703 | 0 | 2274 | 2644 | 86.0% |
| ov_SC03_030 | 2237 | 1706 | 0 | 2239 | 2495 | 89.7% |
| ov_SC03_031 | 2234 | 1701 | 0 | 2237 | 2514 | 89.0% |
| ov_SC03_089 | 2248 | 1701 | 0 | 2255 | 2581 | 87.4% |
| ov_SC03_090 | 2250 | 1701 | 0 | 2258 | 2625 | 86.0% |
| ov_SC03_091 | 2253 | 1701 | 0 | 2261 | 2640 | 85.6% |
| ov_SC03_092 | 2264 | 1701 | 0 | 2276 | 2587 | 88.0% |
| ov_SC03_093 | 2240 | 1701 | 0 | 2244 | 2563 | 87.6% |
| ov_SC03_094 | 2235 | 1701 | 0 | 2241 | 2577 | 87.0% |
| ov_SC03_095 | 2225 | 1701 | 0 | 2228 | 2474 | 90.1% |
| ov_SC03_096 | 2225 | 1701 | 0 | 2228 | 2465 | 90.4% |
| ov_SC03_097 | 2254 | 1701 | 0 | 2261 | 2603 | 86.9% |
| ov_SC03_098 | 2233 | 1701 | 0 | 2236 | 2541 | 88.0% |
| ov_SC03_099 | 2226 | 1701 | 0 | 2229 | 2504 | 89.0% |
| ov_SC03_100 | 2236 | 1701 | 0 | 2240 | 2539 | 88.2% |
| ov_SC03_101 | 2236 | 1701 | 0 | 2240 | 2528 | 88.6% |
| ov_SC03_102 | 2228 | 1701 | 0 | 2231 | 2492 | 89.5% |
| ov_SC03_103 | 2231 | 1703 | 0 | 2234 | 2510 | 89.0% |
| ov_SC03_104 | 2256 | 1701 | 0 | 2263 | 2616 | 86.5% |
| ov_SC03_105 | 2250 | 1701 | 0 | 2257 | 2597 | 86.9% |
| ov_SC03_108 | 2218 | 1701 | 0 | 2218 | 2443 | 90.8% |
| ov_SC03_109 | 2219 | 1701 | 0 | 2221 | 2424 | 91.6% |
| ov_SC03_110 | 2224 | 1701 | 0 | 2224 | 2468 | 90.1% |
| ov_SC03_111 | 2236 | 1701 | 0 | 2239 | 2510 | 89.2% |
| ov_SC03_112 | 2229 | 1703 | 0 | 2231 | 2526 | 88.3% |
| ov_SC03_113 | 2222 | 1703 | 0 | 2225 | 2468 | 90.2% |
| ov_SC03_114 | 2212 | 1701 | 0 | 2214 | 2415 | 91.7% |
| ov_SC03_115 | 2229 | 1701 | 0 | 2231 | 2472 | 90.3% |
| ov_SC03_116 | 2219 | 1701 | 0 | 2222 | 2438 | 91.1% |
| ov_SC03_117 | 2247 | 1701 | 0 | 2253 | 2557 | 88.1% |
| ov_SC03_118 | 2294 | 1725 | 0 | 2295 | 2685 | 85.5% |
| ov_SC03_119 | 2293 | 1725 | 0 | 2294 | 2685 | 85.4% |
| ov_SC03_121 | 2226 | 1701 | 0 | 2229 | 2459 | 90.6% |
| ov_SC03_124 | 2306 | 1697 | 0 | 2326 | 2741 | 84.9% |
| ov_SC03_125 | 2263 | 1701 | 0 | 2275 | 2588 | 87.9% |
| ov_SC03_126 | 2225 | 1703 | 0 | 2225 | 2423 | 91.8% |
| ov_SC04_000 | 2241 | 1705 | 0 | 2250 | 2546 | 88.4% |
| ov_SC04_002 | 2257 | 1701 | 0 | 2261 | 2636 | 85.8% |
| ov_SC04_003 | 2235 | 1701 | 0 | 2239 | 2502 | 89.5% |
| ov_SC04_004 | 2244 | 1701 | 0 | 2246 | 2558 | 87.8% |
| ov_SC04_005 | 2252 | 1701 | 0 | 2258 | 2612 | 86.4% |
| ov_SC04_006 | 2225 | 1701 | 0 | 2227 | 2454 | 90.7% |
| ov_SC04_007 | 2245 | 1701 | 0 | 2249 | 2569 | 87.5% |
| ov_SC04_008 | 2215 | 1701 | 0 | 2215 | 2415 | 91.7% |
| ov_SC04_009 | 2231 | 1701 | 0 | 2234 | 2441 | 91.5% |
| ov_SC04_010 | 2222 | 1701 | 0 | 2223 | 2419 | 91.9% |
| ov_SC04_011 | 2278 | 1701 | 0 | 2284 | 2803 | 81.5% |
| ov_SC04_012 | 2218 | 1701 | 0 | 2219 | 2420 | 91.7% |
| ov_SC04_015 | 2283 | 1702 | 0 | 2294 | 2611 | 87.9% |
| ov_SC04_016 | 2221 | 1701 | 0 | 2223 | 2440 | 91.1% |
| ov_SC04_018 | 2333 | 1736 | 0 | 2333 | 2857 | 81.7% |
| ov_SC04_019 | 2339 | 1736 | 0 | 2339 | 2857 | 81.9% |
| ov_SC04_020 | 2250 | 1701 | 0 | 2262 | 2567 | 88.1% |
| ov_SC04_021 | 2226 | 1703 | 0 | 2226 | 2423 | 91.9% |
| ov_SC05_000 | 2222 | 1705 | 0 | 2225 | 2422 | 91.9% |
| ov_SC05_001 | 2245 | 1701 | 0 | 2250 | 2574 | 87.4% |
| ov_SC05_002 | 2227 | 1701 | 0 | 2230 | 2442 | 91.3% |
| ov_SC05_003 | 2224 | 1701 | 0 | 2225 | 2481 | 89.7% |
| ov_SC05_004 | 2219 | 1701 | 0 | 2221 | 2464 | 90.1% |
| ov_SC05_005 | 2226 | 1701 | 0 | 2227 | 2491 | 89.4% |
| ov_SC05_006 | 2218 | 1701 | 0 | 2218 | 2430 | 91.3% |
| ov_SC05_007 | 2228 | 1701 | 0 | 2233 | 2482 | 90.0% |
| ov_SC05_008 | 2245 | 1701 | 0 | 2247 | 2543 | 88.4% |
| ov_SC05_009 | 2223 | 1701 | 0 | 2227 | 2438 | 91.3% |
| ov_SC05_010 | 2249 | 1701 | 0 | 2253 | 2588 | 87.1% |
| ov_SC05_011 | 2221 | 1701 | 0 | 2222 | 2409 | 92.2% |
| ov_SC05_017 | 2329 | 1698 | 0 | 2340 | 2842 | 82.3% |
| ov_SC05_018 | 2276 | 1701 | 0 | 2289 | 2673 | 85.6% |
| ov_SC05_019 | 2226 | 1703 | 0 | 2226 | 2423 | 91.9% |
| ov_SC06_000 | 2288 | 1710 | 0 | 2291 | 2691 | 85.1% |
| ov_SC06_006 | 2241 | 1701 | 0 | 2242 | 2511 | 89.3% |
| ov_SC06_008 | 2251 | 1703 | 0 | 2257 | 2542 | 88.8% |
| ov_SC06_010 | 2234 | 1701 | 0 | 2239 | 2517 | 89.0% |
| ov_SC06_011 | 2230 | 1701 | 0 | 2234 | 2468 | 90.5% |
| ov_SC06_013 | 2223 | 1701 | 0 | 2224 | 2425 | 91.7% |
| ov_SC06_014 | 2229 | 1701 | 0 | 2231 | 2453 | 90.9% |
| ov_SC06_015 | 2226 | 1701 | 0 | 2226 | 2421 | 91.9% |
| ov_SC06_016 | 2244 | 1701 | 0 | 2246 | 2549 | 88.1% |
| ov_SC06_018 | 2241 | 1704 | 0 | 2248 | 2665 | 84.4% |
| ov_SC06_020 | 2233 | 1703 | 0 | 2234 | 2518 | 88.7% |
| ov_SC06_022 | 2247 | 1701 | 0 | 2255 | 2642 | 85.4% |
| ov_SC06_024 | 2253 | 1701 | 0 | 2259 | 2667 | 84.7% |
| ov_SC06_025 | 2244 | 1701 | 0 | 2249 | 2572 | 87.4% |
| ov_SC06_027 | 2212 | 1701 | 0 | 2213 | 2408 | 91.9% |
| ov_SC06_029 | 2270 | 1701 | 0 | 2282 | 2662 | 85.7% |
| ov_SC06_030 | 2225 | 1701 | 0 | 2225 | 2456 | 90.6% |
| ov_SC06_032 | 2237 | 1702 | 0 | 2244 | 2658 | 84.4% |
| ov_SC06_033 | 2240 | 1702 | 0 | 2247 | 2631 | 85.4% |
| ov_SC07_000 | 2240 | 1705 | 0 | 2242 | 2521 | 88.9% |
| ov_SC07_001 | 2225 | 1701 | 0 | 2227 | 2454 | 90.7% |
| ov_SC07_002 | 2252 | 1701 | 0 | 2256 | 2579 | 87.5% |
| ov_SC07_006 | 1994 | 1549 | 0 | 2074 | 2456 | 84.4% |
| ov_SC07_007 | 2011 | 1550 | 0 | 2095 | 2614 | 80.1% |
| ov_SC07_008 | 2209 | 1701 | 0 | 2209 | 2386 | 92.6% |
| ov_SC07_009 | 2219 | 1701 | 0 | 2221 | 2430 | 91.4% |
| ov_SC07_010 | 2022 | 1550 | 0 | 2105 | 2526 | 83.3% |
| ov_SC07_011 | 2010 | 1549 | 0 | 2090 | 2450 | 85.3% |
+54
View File
@@ -1000,3 +1000,57 @@ conditional) · main-EXE/B9 + GLM/B6 + resident's 14 walls (P30) · behemoths B7
local-type plumbing = **Task 14 stages 2-3**, not the carve.
**Housekeeping:** killed an orphaned `cc1` from the Jul-21 session that had been burning a full core for
**13h23m** (pid 104350, dead pipe); committed the 4 wave-4 `.o0` drafts left untracked (R20).
- **✅ 2026-07-22 — THE FAMILY SWEEP (138/138) + THE RE-PROBE: a giant recovered, TWO tree-eating tool
defects found and fixed, and `gate_stage`'s jtbl pre-pass DELETED.**
**(a) `func_80135A4C` family COMPLETE ×138** (probe 1 → chunks 45+45+46, commit per chunk, `git add -A`).
**137/137 siblings banked, 0 failed** — 100% conversion, exactly as its PURE/`n_templatable:137`
classification predicted. **R22 clean-fleet 140/140.** Fleet **78.0→78.2% instr · 66.5→67.0% distinct ·
87.95→87.98% fn-count** (+25,329 ins; predicted +24,797 — the measurement matched the prediction).
**(b) THE UNDO WAS EATING THE TREE (the §61c mechanism, byte-witnessed).** `jr_isolate_all` repartitions
a code object by writing region 0 back over the ORIGINAL `src/<ov>/<nm>.c` **truncated**, emitting the
rest as new `_jr_*.c`. `harvest_verify._jtbl_restore` undid only `config/` + the new region files → every
gate-REJECTED draft permanently ate that TU's stubs, and **nothing regenerates them** (splat does not
rewrite a committed overlay `.c`). Measured live across the first re-probe: live stubs **419 → 414 → 406
→ 395**, ending in `undefined reference to func_80191C50`. **Invisible to the gate that causes it** — the
incremental build keeps linking stale objects (§42b) so `make build` stays green while a CLEAN rebuild
fails. That is precisely the "139/140, twice" signature, so the §61c attribution is now a **demonstrated
defect, not an inference**. FIXED: `_jtbl_snapshot` captures every `src/<binary>/*.c`; `_jtbl_restore`
restores them + deletes exactly the files the attempt created (derived from the snapshot's file set, R33).
Negative-control-validated: the same failing draft now leaves the tree byte-identical and `git status` clean.
**(c) THE GATE LABEL WAS A CONSTANT.** `classify_fail` searched the whole stderr, so the benign
`warning: conflicting types for built-in function 'memcpy'` won on **8 of 8** failures across four
different real causes — the §58 red-herring the cookbook had been working around by hand. Now classifies
on NON-warning lines and falls through to `CC1-FAIL:<last error>`. Same failure immediately became
`ov_SC06_018.c:447: prototype declaration`.
**(d) THE RE-PROBE (11 preserved t5wave cracks, one `harvest_verify` invocation each).**
**BANKED: `func_8018F694` (478 ins)** — one of the wave's three giants, previously inside "the gate banked
ZERO". The other 10 gave **ten DISTINCT** diagnoses: **4 data-decl** (`D_80193B64`×2, `D_8011D030`,
`D_80126B5C`) · **3 callee-decl** (`func_80135480`×2, `func_8012F14C`) · **3 self-decl/own-sig** (§57).
**ZERO jtbl-drift · ZERO local-type redefinition · ZERO codegen DIFF** — so **§61a's "§8e-2 jtbl
table-count drift blocks 10 of 12" does NOT survive** the carve-follows-splice prep: the carve now
succeeds and what remains is ordinary decl plumbing.
**(e) `gate_stage._jtbl_prepare` DELETED (R33), not patched.** It carried the SAME config-only undo and
ate the tree again on the first ladder run (5 orphan region files, truncated TUs, `undefined reference to
func_80192F64`) — which **invalidated that run's 0/10**, so it was re-measured, not reported (R35). It was
wrong on two axes: §61b had already byte-proved the carve must FOLLOW the splice (a pre-pass carving
unspliced functions yields a spec that fails when the body lands), and `harvest_verify` now does the
correct per-draft prep one layer down. Two implementations of one capability, the outer one ineffective
AND destructive → delete.
**(f) THE HONEST LADDER MEASUREMENT (clean tree, tree verified clean after):** **0/10 bank**; **9/10 now
COMPILE** and land as whole-binary byte-DIFF, **1/10** still plumbing. `match_one` reports **close=0** on
several (the function's own bytes exact) and `rtu_match` says **MATCH in the real TU** for
`func_80135888` — while `func_801299C8`'s transformed draft does not compile in its real TU at all. So the
residual is **MIXED, not uniform**, and at least one is an IMAGE-level effect rather than the draft or its
TU decl context. **Not generalized from one data point** — the next increment is to identify what changes
at the image level for a close=0/rtu-MATCH function (prime suspect: the jtbl/rodata carve placement).
**This prices Task 14 stages 2-3 with a measurement, not a projection:** the existing ladder converts
**0/10** of these residuals, so stages 2-3 are NOT "wire in `normalize_self_decls` + the type-lift and
collect 10 banks."
**VERIFIED:** R22 clean-fleet **140/140 byte-identical** (post-sweep) + a final clean-fleet after the
giant bank; `tools-health` OK (dedup 1848/0, C1 234481/234481, cdecl 53189/53189, audit-binaries 140);
0 NON_MATCHING (G4). Nothing was ever committed broken — both times the tree was eaten it was restored
from HEAD and re-verified byte-identical BEFORE any further work.
**Housekeeping:** cookbook — the `git add -u` complementary hole (an isolation's NEW region file is
untracked → a carve/isolation bank needs `git add -A src/ config/`; `jtbl_family_bank`'s uncommitted-tree
guard is what caught it).
+15 -120
View File
@@ -73,96 +73,6 @@ def _xform(tool, ov, indir, suffix, extra=None):
return out if _isdir(out) else indir
# --------------------------------------------------------------------------------------------
# the jtbl stage (Phase-29 Task-14 stage 4) — isolate + re-carve so a table-bearing draft can link
# --------------------------------------------------------------------------------------------
_JTBL_RE = re.compile(r"jtbl_[0-9A-Fa-f]{8}")
def _fn_has_jtbl(binary, fn):
"""Does this function reference a jump table? (Then banking it needs a .rodata carve.)"""
try:
hit = next((s for s in corpus.stubs(binary).values() if s.symbol == fn), None)
except Exception:
return False
if hit is None:
return False
try:
return bool(_JTBL_RE.search(open(os.path.join(REPO, hit.asm_path)).read()))
except OSError:
return False
def _jtbl_prepare(binary, draft_fns):
"""Carve every jtbl-bearing draft's table into its OWN contiguous object, auto-isolating on the
§8b same-subseg walls. Returns (prepared, keep_regions).
WHY THIS STAGE EXISTS (byte-proven 2026-07-21, cookbook §61a). A 12-agent wave produced 11
match_one MATCHes and the gate banked ZERO. 10 of the 12 drafts land in jtbl-CARVED TUs, and the
filter reported `more rodata .align directives than pad specs` — which reads like a compiler
wall and is not one. Re-running jtbl_carve gives the real reason:
subseg would host NON-CONTIGUOUS .rodata carves (0xaa810 and 0xaa920) — a single object
can't leave a gap for the unmatched jtbl between them.
The newly-banked function's table is separated from the TU's existing carve by an UNMATCHED
function's table. The remedy is §8b lazy isolation (give the fn its own code subseg, so its
carve spans only its own tables) — which `jtbl_family_bank` has done since Task 8 but
`gate_stage` did not, so every ordinary wave banking into a jtbl TU reported a phantom 0.
STRUCTURAL NOTE: fresh crack fuel in a well-matched overlay CONCENTRATES in jtbl-carved TUs (the
non-carved ones get harvested first), so this is not a straggler path — it gates the next
tranche of substantial cracking.
The isolate/revert primitives are IMPORTED from jtbl_family_bank rather than re-implemented
(R33: one implementation, two callers — the divergence between those two callers is exactly
what produced this bug). Config is shared-ish state, so the caller undoes by RESTORE
(jfb.revert), never an inverse transform, and verifies fleet-wide (R22) — cookbook §61."""
import jtbl_family_bank as jfb
todo = [f for f in draft_fns if _fn_has_jtbl(binary, f)]
if not todo:
return [], None
# SNAPSHOT the config this stage may rewrite (§61 constraint). NOT jfb.revert(): that does a
# wholesale `git checkout -- config/…`, which is correct for jtbl_family_bank's one-function-
# at-a-time flow but WRONG here — it discards any PREVIOUSLY-banked-but-uncommitted carve in the
# same overlay, leaving that bank's source with no subseg to live in (byte-witnessed: it stripped
# func_80135A4C's carve while keeping its banked region file -> `undefined reference to
# func_80136C90` at link). An inverse/wholesale undo cannot know what it did not do.
keep = jfb.region_files(binary)
snap = {}
for f in (os.path.join(REPO, f"config/splat.{binary}.yaml"),
os.path.join(REPO, "config/overlays.mk")):
try:
snap[f] = open(f).read()
except OSError:
pass
prepared = []
for fn in todo:
r = sh([PY, "tools/jtbl_carve.py", binary, "--func", fn], timeout=900)
out = (r.stdout or "") + (r.stderr or "")
if r.returncode and ("NON-CONTIGUOUS" in out or "do not fit the span" in out):
# §8b lazy isolation, then re-extract so the carve reads the new subseg layout, then retry.
# The DISTINCT "more rodata .align than pad specs" drift is NOT isolate-fixable and is
# deliberately not retried here (it falls through as a carve failure).
if sh([PY, "tools/jr_isolate_all.py", binary, "--only", fn], timeout=900).returncode:
print(f"[gate] jtbl: isolate failed for {fn}", file=sys.stderr); continue
if sh(["make", "--no-print-directory", "extract", f"BINARY={binary}"], timeout=1800).returncode:
print(f"[gate] jtbl: extract after isolate failed for {fn}", file=sys.stderr); continue
_corpus_reset()
r = sh([PY, "tools/jtbl_carve.py", binary, "--func", fn], timeout=900)
if r.returncode:
last = ((r.stdout or "") + (r.stderr or "")).strip().splitlines()[-1:] or [""]
print(f"[gate] jtbl: carve failed for {fn}: {last[0][:150]}", file=sys.stderr); continue
prepared.append(fn)
if prepared:
# a CONFIG change needs a re-extract, not just a rebuild (the R22 corollary)
sh(["make", "--no-print-directory", "extract", f"BINARY={binary}"], timeout=1800)
_corpus_reset()
print(f"[gate] jtbl: prepared {len(prepared)}/{len(todo)} table-bearing draft(s): "
f"{', '.join(prepared)}")
return prepared, (keep, snap)
def _corpus_reset():
"""Drop corpus caches after a config/extract change — the stub set and each stub's home TU
have moved, and every later stage derives from them."""
@@ -358,13 +268,21 @@ def _run_gate_locked(drafts, binary, src, asm, out, good_sha, propagate, source_
# raise on a non-zero exit, so the try/except below never saw it. Hence the explicit rc check:
# a pre-pass that quietly does nothing is indistinguishable from one that found nothing to do,
# which is the whole failure mode this ladder exists to remove (R32).
# jtbl stage FIRST: isolation rewrites which TU hosts the stub, and every later stage
# (arity scan, harvest_verify's TU derivation) reads that layout.
_jtbl_prepared, _jtbl_keep = [], None
try:
_jtbl_prepared, _jtbl_keep = _jtbl_prepare(binary, draft_fns)
except Exception as e: # never let the pre-pass sink the gate
print(f"[gate] jtbl stage skipped: {e}", file=sys.stderr)
# NO jtbl stage HERE — DELETED 2026-07-22 (R33: one implementation, and it is one layer down).
# This used to be a BATCH pre-pass that carved every table-bearing draft before the gate ran.
# It was wrong twice over:
# 1. §61b byte-proved the carve MUST FOLLOW THE SPLICE — the non-contiguity that requires
# isolation is only detectable once the body is in the object. Carving an unspliced
# function reports "prepared 1/1" and yields a spec that fails when the body lands.
# harvest_verify owns the splice, so the prep belongs there, and IS there (_jtbl_prep_one).
# 2. Its undo snapshotted only config/. But `jr_isolate_all` rewrites region 0 back over the
# ORIGINAL src/<ov>/<nm>.c, TRUNCATED — so every rejected draft permanently ate that TU's
# stubs, invisibly (the incremental build keeps linking stale objects, §42b). Measured
# 2026-07-22: a 10-draft ladder run left 5 orphan region files, truncated TUs, and
# `undefined reference to func_80192F64` — after which every later draft in the run was
# probing a corrupted tree, so its 0/10 was not a measurement (R35).
# Deleting it is strictly better than fixing it: harvest_verify's per-draft prep is the correct
# mechanism, snapshots the full source set, and undoes per function.
_arity_rc = None
_arity_snapshot = {}
@@ -403,29 +321,6 @@ def _run_gate_locked(drafts, binary, src, asm, out, good_sha, propagate, source_
# construction and cannot invent a signature.
_unbanked = [f for f in draft_fns if f not in verified]
# jtbl undo: if NOTHING banked, restore this overlay's config + drop the region files THIS run
# created (jfb.revert(keep_regions=...) keeps a previously-banked core's). If something DID bank,
# the carve/isolation is load-bearing for it and must stay — so we only revert the all-fail case,
# and a mixed batch keeps the config that the surviving banks need (the byte-gate already
# reverted the losers' source).
if _jtbl_prepared and not verified and _jtbl_keep:
try:
import jtbl_family_bank as jfb
_keep_regions, _snap = _jtbl_keep
for _f, _txt in _snap.items(): # RESTORE, never inverse-transform (§61)
with open(_f, "w") as _fh:
_fh.write(_txt)
for _rf in jfb.region_files(binary) - _keep_regions: # only what THIS run created
try:
os.remove(os.path.join(REPO, _rf))
except OSError:
pass
sh(["make", "--no-print-directory", "extract", f"BINARY={binary}"], timeout=1800)
_corpus_reset()
print(f"[gate] jtbl: restored config for {len(_jtbl_prepared)} draft(s) (none banked)")
except Exception as e:
print(f"[gate] jtbl revert failed: {e}", file=sys.stderr)
if _unbanked and _arity_snapshot:
try:
for _f, _txt in _arity_snapshot.items():