Commit Graph

353 Commits

Author SHA1 Message Date
Drew T 2064b5beee feat(decomp): parallel gate — 6 fns across 5 binaries (12 workers)
ov_SC04_015    func_8017EB78
  ov_SC05_008    func_8017E464
  ov_SC06_032    func_80185F4C
  ov_SC06_029    func_8017EF34 func_80185D44
  ov_SC07_010    func_80180E68
2026-09-02 01:17:20 -06:00
Drew T 027f4f2d2b feat(decomp): parallel gate — 31 fns across 23 binaries (10 workers)
md_MAIN_044    func_800CD2EC
  ov_SC02_026    func_8017D508
  md_SC07_003    func_801A079C
  ov_SC01_084    func_80180000
  ov_SC02_005    func_8017F898
  ov_SC01_080    func_80181410 func_80181D98
  ov_SC03_007    func_801850B4
  ov_SC03_117    func_8017FED8
  ov_SC03_105    func_8017E180 func_8018423C
  ov_SC04_012    func_8017D4CC
  ov_SC05_005    func_8017EAEC
  ov_SC05_008    func_8017E6A4 func_8017F288
  ov_SC04_011    func_80186020
  ov_SC05_011    func_8017D610
  ov_SC05_018    func_801810B0
  ov_SC06_006    func_8017EEA4
  ov_SC06_008    func_8017E37C
  ov_SC07_001    func_8018088C
  ov_SC07_000    func_8017E658 func_8018006C func_801805C0
  ov_SC07_006    func_801826E0
  ov_SC06_032    func_8017DABC func_80183940 func_8018FB5C
  ov_SC07_007    func_801827E0
  ov_SC07_010    func_8017E5B8 func_8017F860
2026-09-01 23:11:26 -06:00
Drew T 2ad58ddc38 feat(decomp): parallel gate — 31 fns across 24 binaries (10 workers)
ov_SC01_000    func_8017E1A8
  md_MAIN_003    func_800CFEB4 func_800D0664 func_800D30D0
  ov_SC01_080    func_80181854
  ov_SC02_016    func_8017F4DC
  ov_SC02_000    func_80185840
  ov_SC02_027    func_8017F2B8
  ov_SC02_011    func_801852B0
  md_SC07_004    func_801AB818
  ov_SC01_001    func_80183748
  ov_SC03_118    func_801831D0
  ov_SC03_028    func_80182B3C
  ov_SC03_117    func_80180064
  ov_SC03_105    func_801870E8
  ov_SC03_124    func_8017EDE8 func_8017F63C func_801816C8
  ov_SC04_011    func_80180970 func_801835B0 func_8018489C
  ov_SC05_008    func_8017D214
  ov_SC04_019    func_8017F35C
  ov_SC06_018    func_8018AD74
  ov_SC05_010    func_801854B8 func_80185570
  ov_SC07_000    func_8018000C
  ov_SC05_017    func_801843E0
  ov_SC06_022    func_8017CDE4
  ov_SC05_018    func_801808AC
  ov_SC06_029    func_80185214
2026-09-01 22:46:44 -06:00
Drew T d349bc053a feat(decomp): parallel gate — 9 fns across 8 binaries (12 workers)
ov_SC03_089    func_80181F9C
  ov_SC05_001    func_801809B8
  ov_SC05_008    func_80180E84
  ov_SC03_094    func_801814F4
  ov_SC03_118    func_801832E0
  ov_SC06_025    func_80182170
  ov_SC03_105    func_8017FAE8 func_80185680
  ov_SC07_002    func_80185FB0
2026-09-01 10:47:13 -06:00
Drew T d989ed08ae feat(decomp): parallel gate — 14 fns across 11 binaries (6 workers)
md_SC07_003    func_801A38E4
  md_MAIN_027    func_800CB4A4
  ov_SC02_037    func_8013DD68
  ov_SC02_003    func_8018046C
  ov_SC01_084    func_8017EA98 func_80181F80 func_80184138
  ov_SC03_107    func_8013DD68
  ov_SC05_003    func_8017E380
  ov_SC05_008    func_8017DF68 func_8017EBB8
  ov_SC05_010    func_8017FAF4
  ov_SC06_032    func_80190D70
  ov_SC06_025    func_8017EA74
2026-08-31 13:43:44 -06:00
Drew T 96f4e0ed5d feat(decomp): S67-wave-jtbl gate — +1 fns x2 propagated (fleet 99.2%) 2026-08-31 12:23:50 -06:00
Drew T 4ced908c08 feat(decomp): S67-wave gate — +1 fns x7 propagated (fleet 99.2%) 2026-08-31 11:25:39 -06:00
Drew T 257b9d8a3b feat(decomp): S67-wave gate — +2 fns x1 propagated (fleet 99.2%) 2026-08-31 10:31:15 -06:00
Drew T 1c21f0a1e2 feat(decomp): S67-cc1 gate — +1 fns x3 propagated (fleet 99.2%) 2026-08-31 04:10:27 -06:00
Drew T 80c548a59b feat(decomp): O41 overlay lane — 17 fns, clean-R22 verified 213/213
parallel_gate merged 17 across 16 binaries, aborted on a real red (ov_SC04_011). Reverted that one
file (func_80181F0C); the other 17 fns verify green from a full clean rebuild.

CORRECTION to my own first read: I attributed the ov_SC04_011 failure to func_80182DCC, whose agent
had flagged a needed jtbl carve for that same binary. The merged-and-failing draft was actually
func_80181F0C — I inferred from the binary name matching the carve note instead of reading the diff.

The carve-prediction pattern is still real and worth acting on, on the evidence that does hold:
three agents this session named, in advance, the integration reason the whole-binary gate would
refuse a draft they had just matched in isolation (func_801588CC's §8e/§260-A tail-class jtbl carve;
func_80182DCC's jtbl_801ED970 8-word carve in tail19.data.s; func_8001AF34's JTBL_PADS residual).
Those are gate-side work, not drafting failures, and must not be re-drafted — that is how
ov_SC06_022:func_80181664 burned three slots.
2026-08-30 20:32:26 -06:00
Drew T db7db13d7f feat(decomp): O21 overlay-lane gate — 22 fns, clean-R22 verified 213/213
parallel_gate merged 23 drafts across 22 binaries; its R22 caught 5 real failures
(ov_SC03_110:func_80180270, ov_SC06_025:func_8018098C, ov_SC03_024:func_8017DE8C+func_801838CC,
ov_SC02_037:func_801588CC, ov_SC07_010:func_8017EC6C). Reverted those five binaries' files; the
remaining 22 fns verify green from a full clean rebuild.

Lane conversion this round, same models and packs, drawn minutes apart:
  O21 overlays  40 targets, 18-128 ins -> 34 self-reported MATCH (85%), 22 gated
  M2   main     15 targets, 74-102 ins ->  4 self-reported MATCH (27%),  1 gated
Size does not explain it (M2's band sits inside O21's). Nearly every O21 MATCH cites an in-TU twin
or neighbour — overlays are ~134 near-copies of one engine, so a structural relative is usually
already banked. src/800.c is single-copy game code with no twin to lean on. Budget main at roughly
a third of the overlay rate, and reach for the permuter there rather than more drafting slots:
main's NEARs cluster at closeness 3-16, i.e. regalloc tail, not wrong code.
2026-08-30 17:06:05 -06:00
Drew T 838d7cea34 feat(decomp): parallel gate — 179 fns across 102 binaries (10 workers)
md_MAIN_037    func_800CAF4C
  md_MAIN_028    func_800CAE0C
  md_MAIN_015    func_800CAEC0
  md_MAIN_029    func_800CAEE0
  md_MAIN_013    func_800CAF68 func_800CB6E4
  md_MAIN_020    func_800CAF18 func_800CB034
  md_MAIN_001    func_800CEF04
  md_MAIN_033    func_800CAE0C
  md_MAIN_023    func_800CAEC0
  md_MAIN_003    func_800D06BC
  md_MAIN_043    func_800CD1F4
  md_MAIN_041    func_800CAEC0 func_800CAF08
  md_MAIN_038    func_800CAE0C func_800CAED0
  md_MAIN_047    func_800CCB28
  md_MAIN_046    func_800CCB28
  md_SC03_073    func_801EFBC0
  md_MAIN_040    func_800CAED0
  md_SC03_075    func_801EFBC0
  md_SC03_132    func_801E2D50
  md_SC04_025    func_801E855C
  md_SC04_029    func_801E8440
  md_SC03_137    func_801E2ED8
  md_SC04_026    func_801E82C0
  md_SC05_023    func_801EDEAC func_801EE148
  md_SC05_024    func_801EDEAC func_801EE3E4
  md_SC03_133    func_801E2FF4
  md_SC05_025    func_801EDEAC func_801EE148
  md_SC05_028    func_801EE2C8
  ov_MAIN_012    func_8016829C
  ov_SC01_001    func_80180890
  ov_SC01_074    func_8017D918
  ov_SC01_077    func_80184A68
  ov_SC01_084    func_8017E224 func_8017E890 func_8017E94C
  ov_SC01_009    func_8017FE10
  ov_SC02_026    func_8017D948
  ov_SC02_004    func_8017D8B0
  ov_SC02_031    func_8017F400 func_801829F8
  ov_SC02_035    func_8017D598
  ov_SC02_021    func_8017DC10 func_8017F264
  ov_SC02_017    func_8017FCB8 func_8018287C func_80183940
  ov_SC02_027    func_8017F498
  ov_SC02_011    func_80182380
  ov_SC02_005    func_8017E014 func_8017FDB4 func_801800CC func_80180328 func_801803BC func_80180454 func_80180B90 func_8018112C func_8018118C func_80181388 func_8018141C func_80182098 func_801849E4 func_80185858 func_8018655C func_801880AC func_801886C4 func_8018B5E0 func_8018D574
  ov_SC03_001    func_8017EFD4 func_8017F258 func_80180E68 func_8018166C func_8018247C func_80184A1C func_80186A04
  ov_SC03_012    func_8017DCB4
  ov_SC03_011    func_8017E170
  ov_SC03_014    func_8017BFA0
  ov_SC03_002    func_801813E4
  ov_SC03_024    func_8017BFA0 func_8017DA98 func_80180230 func_80180660 func_801806D4 func_80180748 func_801807AC func_801809F8 func_801817A8 func_80184814 func_80184884 func_80184940
  ov_SC03_007    func_8017E6C0
  ov_SC03_028    func_80185344
  ov_SC03_010    func_8017E69C
  ov_SC03_030    func_8017EEE0
  ov_SC03_091    func_801822CC
  ov_SC03_089    func_80181474
  ov_SC03_093    func_8017F8D8
  ov_SC03_096    func_8017F444
  ov_SC03_097    func_8017EE04 func_8017EF54 func_8017FDBC
  ov_SC03_029    func_80182E84 func_80183E70
  ov_SC03_090    func_801814B4
  ov_SC03_092    func_8017F29C
  ov_SC03_105    func_8017FEA8
  ov_SC03_111    func_8018093C func_80181178
  ov_SC03_116    func_801819F4
  ov_SC03_112    func_8017E9A0 func_80181D08
  ov_SC03_110    func_8017F234
  ov_SC03_114    func_8017CFC0 func_8017DDA0
  ov_SC03_117    func_8017E99C
  ov_SC03_121    func_8017CE3C
  ov_SC03_118    func_8017DA98
  ov_SC03_124    func_8017FB04 func_80180D48 func_80182488
  ov_SC03_125
2026-08-30 09:50:49 -06:00
Drew T 277df834b2 feat(decomp): parallel gate — 178 fns across 61 binaries (10 workers)
ov_SC03_093    func_80181ED4 func_80182288
  ov_SC03_095    func_80180654 func_80180850
  ov_SC03_096    func_8017FE4C func_8018001C func_80180208
  ov_SC03_094    func_80183A3C
  ov_SC03_107    func_80180F88
  ov_SC03_103    func_801835F8
  ov_SC03_098    func_801821C8
  ov_SC03_104    func_80181EF4 func_8018312C func_80183318 func_80184200
  ov_SC03_109    func_8017D790 func_8017D8E0 func_8017DB84 func_8017E024
  ov_SC03_101    func_801806B8 func_80180BAC func_80180E50 func_80183670
  ov_SC03_110    func_8017FFC8
  ov_SC03_097    func_80181A64 func_80184A2C func_80184D28
  ov_SC03_108    func_8017E27C func_8017EA44 func_8017FC3C func_801808B4 func_801809A0
  ov_SC03_115    func_8017DAC8 func_8017E2F4
  ov_SC03_113    func_8017FB98 func_801829C8
  ov_SC03_121    func_8017FA84
  ov_SC03_111    func_80183A7C
  ov_SC03_112    func_8017E70C func_8017FCF4 func_8017FDB8 func_8017FE90 func_80180388 func_8018276C func_80182858 func_80182944 func_80182B20
  ov_SC03_125    func_8017EA68 func_8017F590 func_8017F804 func_801804CC
  ov_SC03_119    func_8017CFBC func_8017DE24 func_8017F7F0 func_8018244C func_801831D0 func_801856B4 func_801881D8
  ov_SC03_118    func_8017CFBC func_8017DE24 func_8017F7F0 func_8018244C func_801856B4 func_801881D8
  ov_SC03_126    func_8017C014 func_8017E508 func_8017E98C func_8017EDB8
  ov_SC03_124    func_8017EB84 func_8017F268 func_80181D40 func_801832A8 func_8018A250
  ov_SC04_000    func_8017EA54 func_80182BA8
  ov_SC04_003    func_8017FD38
  ov_SC04_004    func_8017F9AC func_801823F4
  ov_SC04_007    func_8018084C func_80180D98 func_80181B98
  ov_SC04_002    func_80184DC8 func_8018615C
  ov_SC04_006    func_8017EDF4 func_8017EE34 func_8017F354
  ov_SC04_008    func_8017DC54 func_8017DCB4
  ov_SC04_012    func_8017DD84
  ov_SC04_005    func_8017FCA0 func_80181998 func_801846E4 func_80187928 func_801879E4
  ov_SC04_020    func_8017E558 func_8017EA40 func_8017FD70 func_8017FED0 func_80180554 func_80180AF0 func_80180EE0
  ov_SC04_019    func_8017DD0C func_80183578 func_80183BC4 func_8018651C func_801877B0
  ov_SC04_018    func_8017DD0C func_80183578 func_80183BC4 func_8018651C func_801877B0
  ov_SC05_004    func_8017EFD4 func_80180F18 func_80180FA8 func_8018101C func_8018125C
  ov_SC05_003    func_801804CC func_80180CE8
  ov_SC04_021    func_8017C014 func_8017E508 func_8017E98C func_8017EDB8
  ov_SC05_005    func_8017E9F8
  ov_SC05_007    func_8017E8A4
  ov_SC05_009    func_8017E9E8
  ov_SC05_008    func_80180698 func_80182054
  ov_SC05_010    func_801861D0 func_80186E94
  ov_SC06_000    func_80184CBC
  ov_SC05_019    func_8017C014 func_8017E508 func_8017E98C func_8017EDB8
  ov_SC06_011    func_8017F3C8 func_801801AC
  ov_SC05_018    func_8017E558 func_80181204 func_80182F78 func_8018375C
  ov_SC05_017    func_8017DD0C func_8018BE14
  ov_SC06_013    func_8017E7E8
  ov_SC06_014    func_8017D4C8 func_8017FB4C
  ov_SC06_015    func_8017D174 func_8017E6A4
  ov_SC06_016    func_801821D4
  ov_SC06_024    func_80184D68
  ov_SC06_018
2026-08-29 18:43:08 -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 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 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 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 bfd591c9cc feat(t5): Claude wave t5a — 41 banked (sonnet 39/44, opus 2/4); fleet 213 passed, 0 failed of 213 (P31 S62 T5) 2026-08-26 20:12:09 -06:00
Drew T ad506bd261 feat(decomp): ox wave g0a overlays — 37 banked
Committed before the main batch: gate_main reverts on failure and would take these with it.
2026-08-26 03:17:43 -06:00
Drew T 274932d209 chore(decomp): commit in-tree banked work before the serial lane 2026-08-25 16:06:04 -06:00
Drew T 2c3201b2fd feat(decomp): ox wave eb overlays — 5 banked
Committed before the main batch: gate_main reverts on failure and would take these with it.
2026-08-25 16:00:57 -06:00
Drew T 7e1f554a05 feat(decomp): ox wave df overlays — 124 banked
Committed before the main batch: gate_main reverts on failure and would take these with it.
2026-08-25 11:27:56 -06:00
Drew T ab74cd22d0 feat(decomp): ox wave cw overlays — 4 banked
Committed before the main batch: gate_main reverts on failure and would take these with it.
2026-08-25 08:43:07 -06:00
Drew T c10171e8d9 feat(decomp): ox wave co overlays — 43 banked
Committed before the main batch: gate_main reverts on failure and would take these with it.
2026-08-25 05:01:27 -06:00
Drew T 3eb8056f22 feat(decomp): ox wave ck overlays — 69 banked
Committed before the main batch: gate_main reverts on failure and would take these with it.
2026-08-25 03:57:39 -06:00
Drew T 82b4cd5b55 feat(decomp): ox wave ch overlays — 88 banked
Committed before the main batch: gate_main reverts on failure and would take these with it.
2026-08-25 02:36:04 -06:00
Drew T 829361dd7b feat(decomp): ox wave cf overlays — 50 banked
Committed before the main batch: gate_main reverts on failure and would take these with it.
2026-08-25 01:09:05 -06:00
Drew T 210dba7afe feat(decomp): ox wave bw overlays — 47 banked
Committed before the main batch: gate_main reverts on failure and would take these with it.
2026-08-24 19:15:01 -06:00
Drew T 5be231d446 feat(decomp): ox wave bu overlays — 42 banked
Committed before the main batch: gate_main reverts on failure and would take these with it.
2026-08-24 18:02:49 -06:00
Drew T 1ae1012a9e feat(decomp): ox wave bq overlays — 81 banked
Committed before the main batch: gate_main reverts on failure and would take these with it.
2026-08-24 15:09:11 -06:00
Drew T 1103cdeaed feat(decomp): ox wave bm overlays — 103 banked
Committed before the main batch: gate_main reverts on failure and would take these with it.
2026-08-24 13:12:23 -06:00
Drew T c17b35fb37 feat(decomp): ox wave bl overlays — 35 banked
Committed before the main batch: gate_main reverts on failure and would take these with it.
2026-08-24 12:42:19 -06:00
Drew T e1479c1900 feat(decomp): ox wave bh overlays — 155 banked
Committed before the main batch: gate_main reverts on failure and would take these with it.
2026-08-24 10:52:11 -06:00
Drew T f1f426df53 feat(decomp): ox wave bg overlays — 29 banked
Committed before the main batch: gate_main reverts on failure and would take these with it.
2026-08-24 10:14:20 -06:00
Drew T 7f6cd48521 feat(decomp): ox wave bc overlays — 233 banked
Committed before the main batch: gate_main reverts on failure and would take these with it.
2026-08-24 08:34:17 -06:00
Drew T f74fd335e0 feat(decomp): ox wave bb overlays — 29 banked
Committed before the main batch: gate_main reverts on failure and would take these with it.
2026-08-24 07:54:38 -06:00
Drew T 7c674dc63d feat(decomp): ox wave av overlays — 428 banked
Committed before the main batch: gate_main reverts on failure and would take these with it.
2026-08-24 05:09:47 -06:00
Drew T 30487c7aa7 feat(decomp): ox wave as overlays — 5 banked
Committed before the main batch: gate_main reverts on failure and would take these with it.
2026-08-24 02:40:17 -06:00
Drew T 3425963519 feat(decomp): ox wave ao overlays — 66 banked
Committed before the main batch: gate_main reverts on failure and would take these with it.
2026-08-24 00:38:19 -06:00
Drew T af016a6604 feat(decomp): ox wave ah — 64 banked\n\nCard-fuelled ox drafts, reloc_identity pre-filtered, gated via sweep_parallel.\nfunc_8017DD24 func_8017F9FC func_8017EAB0 func_80180518 func_80180818 func_80180958 func_8017EA2C func_8017F444 func_8017F600 func_8017DDF8 func_8017E014 func_8017E524 func_8017EB2C func_8017EDAC func_80180650 func_801845EC func_801874BC func_8017D3BC func_8017D68C func_8017DBD4 func_8017E438 func_8017EF48 func_800CCB78 func_800CCDC8 func_800CCFDC func_800CD708 func_8017DB6C func_8017F264 func_8017F33C func_8017F9F4 func_801804F8 func_80180828 func_80181E80 func_80181FB8 func_8017F894 func_8017E998 func_80183768 func_80185FB4 func_80188FA4 func_8017DB70 … 2026-08-23 10:50:25 -06:00
Drew T 5d8d497c48 feat(decomp): free A-prop remap lane — 390 banked, zero model tokens
aprop_autodraft over regenerated A-prop cards (582 mechanical drafts), reloc_identity
pre-filter (509/582 AGREE), sweep_parallel gate across 107 binaries in 54m35s.
Result: 390 banked of 511 gated (76.3%).

This lane was invisible until the atlas KeyError fix earlier this session: member_lever
emitted the confidence value 'aprop-pure' that _CONF_RANK never contained, so atlas.py
died on the first group carrying such a vote and could not produce an atlas at all.
With it fixed the remap lever shows 235 groups / 812 instances / 46,240 instructions.
2026-08-23 02:27:15 -06:00
Drew T 3f567d5578 feat(phase-31): worker gate — +1 fns x0 propagated (fleet 95.3%) 2026-08-15 00:14:12 -06:00
Drew T 63bb8f8959 feat(decomp): worker gate — +1 fns x36 propagated (fleet 95.1%) 2026-08-12 22:47:24 -06:00
Drew T ce85242084 fix(phase-30 S47-0a.2): conform func_80175414 — 1,845 decls / 1,061 files; R22 213/213
The new head plumbing class after the symbol-kind fix: `conflicting types for func_80175414` (27
member-rows). Byte-true DEF is `void func_80175414(s32 _arg0)` (its DEFINE_ macro). The fleet
declared it 1,845 times in four spellings, of which three are the SAME TYPE (parameter names do not
participate) — the outlier was 28 sites declaring `(void)`.

conform_decls REFUSED the naive conform and was right to: 29 ZERO-ARG CALL SITES exist across 28
files, so conforming the declaration alone turns each into `too few arguments` — a fleet-wide
COMPILE break the per-binary gate cannot see (the tool cites 138/140 binaries, measured). It named
the count, the consequence, why the cheap check misses it, and the flag that repairs it, then
forced the two-step: --cast-zero-arg-calls (29 sites cast to the 0-arg fn-ptr shape, §17a-1 — gcc
folds the cast of a known symbol to a direct jal, so it is codegen-neutral), then the conform.

Result: 1,845 declaration sites rewritten across 1,061 files, 0 non-canonical remaining (axis
complete, R32). R22 clean-fleet: check-all 213 passed / 0 failed of 213.

WORTH RECORDING AS A TOOLCHAIN STANDARD: this is the instrument that has not wasted a cycle today.
Every other one reported SUCCESS over a defect — a classifier that discarded every gcc-2.7.2 hard
error (no `error:` prefix), a diff that miscounted 116 data-bundled .s files, a --verified-out
truncated to zero bytes over 62 real banks, a --band default that reported "0 families" on a real
135-member family, and a scope stamp describing the filesystem instead of the run. conform_decls
reports FAILURE with a repair path. A guard must state its COVERAGE, not just its verdict; the
in-repo exemplars are this tool and the §53 jr interlock.
2026-08-11 14:15:01 -06:00
Drew T dbed0942b1 feat(phase-30 S47-A4): cdFileLocTable typedef alias banks 138 members; R22 213/213
The one-line fix committed ahead of this run (CdFileLoc_80128C98 aliasing CdFileLoc) cleared the
largest remaining propagation-sweep class. Re-sweep: 138 member-matches banked, failures 875 -> 737,
`conflicting types for cdFileLocTable` gone entirely (136 -> 0).

Derived net (138 INCLUDE_ASM removed, 0 re-added) equals the report's 138 — they agree.
R22 clean-fleet: check-all 213 passed / 0 failed of 213.
Fleet 94.2 -> 94.3% instr / 87.9 -> 88.1% distinct / 96.15 -> 96.21% fn-count; stubs 13,780.

Residue reclassified — no symbol dominates any more: 227 PLUMBING-other, 125 DIFF (real byte
divergence, 17%), 93 CC1-FAIL(no-diagnostic), 26 memcpy, then a tail of small data-symbol
conflicts (D_80114F24 12, D_800AE620 11, D_800183E0 9, D_80126B58 6, D_80078EB4 6).

CC1-FAIL rose 77 -> 93 and that is NOT a regression: members that previously died earlier on the
cdFileLocTable conflict now reach a different compile error. Those 93 are hard gcc errors whose
text the sweep's classifier discards because it greps for `error:`, which gcc-2.7.2 never emits on
hard errors. That classifier is now the highest-value instrument fix left — three times today a
no-diagnostic verdict concealed something cheap.
2026-08-10 20:59:06 -06:00
Drew T efec1b9b71 fix(phase-30 S47-A1): asm-label aliases must never be dropped by §8d; +148 members
scope_data_externs §8d drops the draft's decl of any symbol the TU already declares at file scope.
It keys on the SYMBOL, but a §37 asm-label ALIAS binds a DIFFERENT C identifier to that symbol:
the TU declares `D_801851BC`, it does NOT declare `tbl_D_80187044`. Dropping the alias left the
body referencing an undeclared name, which cc1 reports with no `error:` prefix — so the sweep
classified all 132 siblings as CC1-FAIL(no-diagnostic), i.e. as a codegen wall.

The bitter part: the alias exists PRECISELY BECAUSE the TU declares that symbol with a conflicting
type (a `void (*[])(void)` dispatch table vs this function's 20-byte-stride view). The drop rule
fired on exactly the declarations written to survive it. Why 1 of 2 died was fully determined:
tbl_D_80187048's symbol is not in the TU, so it demoted normally.

Fix: is_asm_alias() — an alias is demoted into the body, never dropped (the identifiers differ, so
it cannot collide with the TU's decl). Control-tested 6 ways incl. self-labels and plain externs.

Measured: func_80132018 3/135 -> 135/135; full re-sweep +16 more. Total +148 members.
R22 clean-fleet 213 passed / 0 failed of 213. tools-health OK, dedup-check 1949/0.
Fleet 96.11 -> 96.15% fn-count, 87.8 -> 87.9% distinct; stubs 14,120 -> 13,972 = -148 (2nd oracle).

CORRECTION TO MY OWN CLAIM (R14): after the probe I said the 58% aggregate was concealing a broad
problem. The re-sweep refuted it — only 16 more banks fleet-wide. The alias class really was one
family; the first read ("outlier") was right and the correction was wrong.

875 sweep failures classified: 231 PLUMBING-other, 141 DIFF (real divergence, only 16%),
136 `conflicting types for cdFileLocTable` (ONE symbol — biggest single class left),
77 CC1-FAIL(no-diagnostic), 26 memcpy, 12 D_80114F24, 11 D_800AE620, 9 D_800183E0.

STILL UNFIXED, and the most dangerous instrument left: the sweep's failure classifier greps for
`error:`, which gcc-2.7.2 never emits on hard errors. Every hard error therefore reads
CC1-FAIL(no-diagnostic). That is how a missing declaration looked like a codegen wall across 132
functions. rtu_match was fixed for this at T0(b); this classifier was not.
2026-08-10 18:50:48 -06:00
Drew T 9ab9120e04 feat(phase-30 S47-B): conform 8 declaration axes (~10,930 sites); 3 guard defects fixed; 213/213
Task B, re-scoped from evidence. The 129 dedup_extend failures are 106 conflicting-types /
21 CC1-FAIL / 4 undefined-ref / 3 DIFF — real byte divergence is 2%, and memcpy is 17 of 106,
not the story. Direction reversed too: the byte-true DEF of func_80128ED8 is what the target
.c files already declare; engine_core.h's macro-local extern was the stub-era guess.

Conformed 8 axes to byte-truth (func_8012F14C 2843, func_8012E5CC 2052, func_8012F038 2214,
func_8014C568 1816, func_80128ED8 1524, func_8012C750 406, func_8012C0EC 50, func_80144A04 25).
R22 clean-fleet: check-all 213 passed / 0 failed of 213. Zero functions banked by design.

Tooling (R33/R35) — three guards that asserted completeness over a narrowed population:
- NEW tools/macro_draft.py: a deduped fn has no definition in any .c (body lives in a DEFINE_
  macro), so conform_decls had been refusing the largest class it was built for.
- conform_decls skipped engine_core.h wholesale as "a defining TU": 10 stale externs survived
  while 1,514 fleet sites moved, and it still printed "axis complete". Skip now scoped to the
  defining macro's span.
- Return-axis compare was literal: typedef int/s32 and a missing `extern` faked a return change.
  Now compares normalized types.
- §85 consumer scan under-reported (the dangerous direction): a cast between `=` and the call
  hid `s0 = (s32 *)func_80144A04(...)`. Now classified by position, validated both ways.

Corrections to my own predictions (R14): the documented scalar-narrowing hazard was benign
across 2,052 sites; the breaks were arity (6 call sites, fixed with §17a-1 fn-ptr casts) and
the consumer-guard gap. A header-only first probe broke ov_SC01_000 — §85 is literal.

Not done, named: memcpy (builtin codegen), ApplyMatrixSV (no DEF), gte_SetRotMatrix (link bug),
func_80147364 (unparseable macro), D_800AE620/D_80126CC4 (data axis). Cookbook §159.
2026-08-10 16:01:49 -06:00
Drew T b005312127 feat(phase-30 S46-3): propagation banked — 29 fns / +2,815 member-instances; R22 213/213
The S45p9 blocker is closed, and the recovery loop that kept it from finishing is rewritten.

- BANKED: dedup_propagate --auto-from ov_SC02_037 --recover -> 29 functions propagated,
  141 overlays byte-identical, dedup 1920 -> 1949 groups, member instances 246,284 ->
  249,099 (+2,815). make clean && extract-all && check-all -> 213 passed / 0 failed (R22).
- WHY IT FINISHED THIS TIME: gate_all -> gate_failures returns EVERY failure from the sweep
  that already computed them, and the recovery loop resolves them all per round. Converged in
  3 rounds; the old one-overlay-per-sweep design needed ~138. That reframes the S45 run — it
  was not nearly done when it died, it had barely started.
- Batching did NOT cost capability: per-overlay necessity probes excluded four of the nine
  culprits from only the 9 overlays that needed it (not all 138), and ov_SC07_006 was
  RECOVERED by the Part-B caller-extern reconcile instead of excluded.
- Plan phase parallelised: 5 min -> 26 s, plan + skip classification byte-identical. Its
  compiles_standalone temp file is per-call now — the fixed `t.c` was the same fake-isolation
  class as match_one's shared --work dir (P28 T5), latent until something ran it in parallel.
- docs/accelerators.md (NEW, Drew 2026-08-07): the reusable-workflow ledger — what we learned
  late that a future decomp should know on day one, each entry with when we found it, when it
  WAS findable, what it cost, and the honest prerequisite where one exists.
2026-08-07 22:24:35 -06:00
Drew T 9f61cd33c5 feat(phase-30 S6): BOTH GIANT WALLS CRACKED ×138 (+50,094 ins) — the verdicts were stale, not wrong
The two functions the roadmap has carried as PERMANENT WALLS since Phase 24 are matched in all 138
overlays. Neither needed a siege. Both matched from drafts ALREADY ON DISK.

  func_80178004  165 ins x 138 = 22,770   Phase 26: Fable5, ~477k tokens, "intrinsic 3-integer
                                          regalloc wall". THREE stored drafts report match_one
                                          MATCH today; one banked first try, no new work.
  func_801412A8  198 ins x 138 = 27,324   close=29/110 since Phase 24. Matched from 1 of 31 stored
                                          drafts + the §37/§124 alias.

WHY func_801412A8 LOOKED INTRINSIC (worth understanding — match_one is structurally blind to it):
the TU declares `extern int func_801412A8(int,int,int,int,int,int)` and its callers USE the return
(`param_1 = func_801412A8(...)`), while the byte-true definition is
`Prim_1412A8 *(Prim_1412A8 *, int, int, int, u16, u16)`. Narrow params cannot agree with an `int`
prototype and the no-prototype escape is illegal once a param promotes, so NEITHER side can move --
and the resulting byte difference is in the CALLERS, which match_one never compiles. The §37/§124
def-side asm-label alias decouples them: the TU decl keeps governing the call sites (codegen
untouched), the definition keeps its byte-true signature.

THEN PROPAGATION RETURNED 0/137 TWICE, both times a missing TYPE, not codegen:
  family_remap's `_carry_macros` carries file-scope #defines but (a) NOT typedefs, and (b) is NOT
  TRANSITIVE -- it brought addPrim_1412A8 and stopped, though that macro calls setaddr/getaddr and
  getaddr casts to PTag_1412A8. Lifted Env_1412A8 / PTag_1412A8 / Prim_1412A8 + OT/getaddr/setaddr
  into src/shared/engine_types.h (inside the include guard) -> 137/137, 0 failed.

MY ERROR, CAUGHT BY THE GATE: I lifted the typedefs but did not STRIP them from ov_SC01_077.c, so
they were declared twice and gcc-2.7.2 rejects a repeated typedef even when identical -- the lesson
already recorded at the foot of engine_types.h. R22 came back 139/140 with [FAIL] ov_SC01_077 (the
exemplar's own overlay). Stripped, re-verified, 140/140. A proper lift strips the source;
build_engine_types --strip does both and I did it by hand.

Also a measurement error worth recording: I checked whether the draft defined Prim_1412A8 with a
plain `grep -c` -- which matches inside `addPrim_1412A8` -- and briefly concluded the carry worked.
Substring false positive; the same shape as reading a `return` as a declaration.

VERIFIED: make clean && make extract-all && make check-all -> 140 passed, 0 failed of 140.
Fleet 12432941 -> 12483035 instr (+50,094 -- EXACTLY the two giants x138); fn-count +276;
instr-weighted 94.5% -> 94.8%. audit-digest OK. 0 NON_MATCHING (G4).

THE RULE THIS BUYS: re-measure a wall before respecting it, and SCAN every stored draft rather than
sampling (my first pass checked 8 of 31 and reported "closeness 40" for a function whose MATCH was
in the 9th). Four minutes of re-measurement was worth 50,094 instructions.
2026-08-05 12:51:06 -06:00
Drew T 638f97dbbb feat(phase-30 S39): propagate free h_exact class 0x80176144 (53 ins x 1) - R22 140/140 2026-08-05 00:09:28 -06:00