docs(phase-32): T4c CLOSE — fleet R22 after the last banks 218 passed / 0 failed (exits 0/0/0, 16:13:17 MDT); make report: 100.00% / 100.0% / 100.0%, INCLUDE_ASM 0, main 2,091/2,091 (143dbb89); gate 2 confirmed by Drew

This commit is contained in:
Drew T
2026-09-06 16:20:59 -06:00
parent 6e37e8ec62
commit ea27bceb1e
8 changed files with 4622 additions and 10 deletions
+221
View File
@@ -0,0 +1,221 @@
[ OK ] resident
[ OK ] ov_SC03_006
[ OK ] ov_SC01_000
[ OK ] ov_SC05_000
[ OK ] ov_SC06_000
[ OK ] ov_SC01_001
[ OK ] ov_SC04_000
[ OK ] ov_SC01_005
[ OK ] ov_SC01_006
[ OK ] ov_SC03_002
[ OK ] ov_SC01_077
[ OK ] ov_SC04_019
[ OK ] ov_SC04_018
[ OK ] ov_SC02_003
[ OK ] ov_SC03_001
[ OK ] ov_SC02_000
[ OK ] main
[ OK ] ov_SC02_004
[ OK ] ov_SC01_074
[ OK ] ov_SC01_080
[ OK ] ov_SC01_004
[ OK ] ov_SC07_000
[ OK ] ov_SC01_008
[ OK ] ov_SC01_009
[ OK ] ov_SC01_084
[ OK ] ov_SC02_015
[ OK ] ov_SC02_005
[ OK ] ov_SC02_021
[ OK ] ov_SC02_016
[ OK ] ov_SC02_011
[ OK ] ov_SC02_017
[ OK ] ov_SC02_026
[ OK ] ov_SC02_027
[ OK ] ov_SC02_031
[ OK ] ov_SC02_041
[ OK ] ov_SC03_003
[ OK ] ov_SC02_035
[ OK ] ov_SC02_039
[ OK ] ov_SC02_028
[ OK ] ov_SC03_010
[ OK ] ov_SC03_007
[ OK ] ov_SC03_011
[ OK ] ov_SC03_012
[ OK ] ov_SC03_023
[ OK ] ov_SC03_013
[ OK ] ov_SC03_014
[ OK ] ov_SC03_024
[ OK ] ov_SC03_015
[ OK ] ov_SC03_028
[ OK ] ov_SC03_030
[ OK ] ov_SC03_031
[ OK ] ov_SC03_029
[ OK ] ov_SC03_089
[ OK ] ov_SC03_090
[ OK ] ov_SC03_092
[ OK ] ov_SC03_093
[ OK ] ov_SC03_094
[ OK ] ov_SC03_091
[ OK ] ov_SC03_095
[ OK ] ov_SC03_096
[ OK ] ov_SC03_097
[ OK ] ov_SC03_098
[ OK ] ov_SC03_099
[ OK ] ov_SC03_100
[ OK ] ov_SC03_101
[ OK ] ov_SC03_102
[ OK ] ov_SC03_103
[ OK ] ov_SC03_108
[ OK ] ov_SC03_104
[ OK ] ov_SC03_109
[ OK ] ov_SC03_110
[ OK ] ov_SC03_113
[ OK ] ov_SC03_111
[ OK ] ov_SC03_114
[ OK ] ov_SC03_105
[ OK ] ov_SC03_112
[ OK ] ov_SC03_115
[ OK ] ov_SC03_116
[ OK ] ov_SC03_117
[ OK ] ov_SC03_118
[ OK ] ov_SC03_119
[ OK ] ov_SC03_121
[ OK ] ov_SC03_126
[ OK ] ov_SC04_002
[ OK ] ov_SC03_125
[ OK ] ov_SC03_124
[ OK ] ov_SC04_003
[ OK ] ov_SC04_004
[ OK ] ov_SC04_005
[ OK ] ov_SC04_008
[ OK ] ov_SC04_006
[ OK ] ov_SC04_007
[ OK ] ov_SC04_009
[ OK ] ov_SC04_010
[ OK ] ov_SC04_012
[ OK ] ov_SC04_011
[ OK ] ov_SC04_015
[ OK ] ov_SC04_016
[ OK ] ov_SC04_021
[ OK ] ov_SC04_020
[ OK ] ov_SC05_002
[ OK ] ov_SC05_001
[ OK ] ov_SC05_003
[ OK ] ov_SC05_004
[ OK ] ov_SC05_005
[ OK ] ov_SC05_006
[ OK ] ov_SC05_008
[ OK ] ov_SC05_007
[ OK ] ov_SC05_009
[ OK ] ov_SC05_010
[ OK ] ov_SC05_011
[ OK ] ov_SC05_018
[ OK ] ov_SC05_017
[ OK ] ov_SC05_019
[ OK ] ov_SC06_010
[ OK ] ov_SC06_008
[ OK ] ov_SC06_006
[ OK ] ov_SC06_011
[ OK ] ov_SC06_013
[ OK ] ov_SC06_014
[ OK ] ov_SC06_015
[ OK ] ov_SC06_016
[ OK ] ov_SC06_020
[ OK ] ov_SC06_018
[ OK ] ov_SC06_022
[ OK ] ov_SC06_025
[ OK ] ov_SC06_024
[ OK ] ov_SC06_027
[ OK ] md_MAIN_013
[ OK ] md_MAIN_014
[ OK ] md_MAIN_015
[ OK ] md_MAIN_016
[ OK ] md_MAIN_017
[ OK ] md_MAIN_018
[ OK ] md_MAIN_019
[ OK ] md_MAIN_020
[ OK ] md_MAIN_021
[ OK ] md_MAIN_022
[ OK ] md_MAIN_023
[ OK ] md_MAIN_024
[ OK ] md_MAIN_025
[ OK ] md_MAIN_026
[ OK ] md_MAIN_027
[ OK ] ov_SC06_029
[ OK ] md_MAIN_028
[ OK ] md_MAIN_029
[ OK ] md_MAIN_030
[ OK ] md_MAIN_031
[ OK ] md_MAIN_033
[ OK ] md_MAIN_034
[ OK ] md_MAIN_035
[ OK ] md_MAIN_032
[ OK ] md_MAIN_036
[ OK ] ov_SC06_030
[ OK ] md_MAIN_037
[ OK ] md_MAIN_038
[ OK ] md_MAIN_039
[ OK ] md_MAIN_040
[ OK ] md_MAIN_042
[ OK ] md_MAIN_043
[ OK ] md_MAIN_045
[ OK ] md_MAIN_044
[ OK ] md_MAIN_047
[ OK ] md_MAIN_046
[ OK ] md_MAIN_041
[ OK ] ov_SC07_001
[ OK ] md_MAIN_008
[ OK ] md_MAIN_001
[ OK ] md_MAIN_011
[ OK ] ov_SC07_009
[ OK ] md_SC07_003
[ OK ] ov_SC07_008
[ OK ] ov_SC07_002
[ OK ] md_MAIN_003
[ OK ] md_SC07_004
[ OK ] md_SC03_073
[ OK ] md_SC03_074
[ OK ] md_SC03_077
[ OK ] md_SC03_076
[ OK ] md_SC03_079
[ OK ] md_SC03_132
[ OK ] md_SC03_075
[ OK ] md_SC03_135
[ OK ] md_SC03_136
[ OK ] md_SC03_078
[ OK ] ov_SC07_006
[ OK ] md_SC04_024
[ OK ] md_SC04_025
[ OK ] md_SC03_133
[ OK ] md_SC04_026
[ OK ] md_SC03_134
[ OK ] md_SC03_137
[ OK ] md_SC04_029
[ OK ] md_SC04_030
[ OK ] md_SC05_023
[ OK ] md_SC05_024
[ OK ] md_SC04_028
[ OK ] md_SC04_027
[ OK ] md_SC03_138
[ OK ] md_SC05_025
[ OK ] md_SC05_028
[ OK ] md_MAIN_007
[ OK ] md_SC05_029
[ OK ] md_SC05_027
[ OK ] md_SC02_009
[ OK ] ov_SC06_032
[ OK ] md_SC05_026
[ OK ] md_MAIN_009
[ OK ] md_SC03_053
[ OK ] md_SC03_054
[ OK ] md_SC03_056
[ OK ] ov_SC07_010
[ OK ] ov_SC07_007
[ OK ] ov_MAIN_012
[ OK ] ov_SC06_033
[ OK ] ov_SC02_037
[ OK ] ov_SC07_011
[ OK ] ov_SC03_107
check-all: 218 passed, 0 failed of 218
EXIT=0
16:13:17 MDT
+2
View File
@@ -0,0 +1,2 @@
clean: removed build/, expected/, and the regenerated splat tree (asm/, assets/, include macros, undefined_*_auto.txt).
EXIT=0
+254
View File
@@ -0,0 +1,254 @@
splat 0.41.0 (powered by spimdisasm 1.41.0)
0%| | 0/1096 [00:00<?, ?it/s]
Loading symbols (symbols.us): 0%| | 0/1096 [00:00<?, ?it/s]
Loading symbols (symbols.us): 100%|██████████| 1096/1096 [00:00<00:00, 220763.44it/s]
0%| | 0/47 [00:00<?, ?it/s]
Loading symbols (symbols.us.ram): 0%| | 0/47 [00:00<?, ?it/s]
Loading symbols (symbols.us.ram): 100%|██████████| 47/47 [00:00<00:00, 610316.68it/s]
0%| | 0/2 [00:00<?, ?it/s]
Scanning header: 0%| | 0/2 [00:00<?, ?it/s]
Scanning main: 0%| | 0/2 [00:00<?, ?it/s]
Rodata segment '800' may belong to the text segment '800'
Based on the usage from the function LzssDecodeSector to the symbol jtbl_80072A38
The rodata segment '800' has jumptables that are not aligned properly file-wise, indicating one or more likely file split.
File split suggestions for this segment will follow in config yaml format:
- [0x6324C, .rodata]
- [0x63388, .rodata]
- [0x633FC, .rodata]
Rodata segment '800_b' may belong to the text segment '800_b'
Based on the usage from the function func_8002B0B4 to the symbol jtbl_80072E44
Rodata segment '800_b_2' may belong to the text segment '800_b_2'
Based on the usage from the function func_8002DC68 to the symbol jtbl_80072F3C
The rodata segment '800_b_2' has jumptables that are not aligned properly file-wise, indicating one or more likely file split.
File split suggestions for this segment will follow in config yaml format:
- [0x63920, .rodata]
Rodata segment '800_c' may belong to the text segment '800_c'
Based on the usage from the function func_80035270 to the symbol jtbl_800732A0
Scanning main: 100%|██████████| 2/2 [00:01<00:00, 1.55it/s]
Scanning main: 100%|██████████| 2/2 [00:01<00:00, 1.55it/s]
0%| | 0/2 [00:00<?, ?it/s]
Splitting header: 0%| | 0/2 [00:00<?, ?it/s]
Splitting main: 0%| | 0/2 [00:00<?, ?it/s]
Splitting main: 100%|██████████| 2/2 [00:00<00:00, 2.57it/s]
Splitting main: 100%|██████████| 2/2 [00:00<00:00, 2.57it/s]
0%| | 0/2 [00:00<?, ?it/s]
Linker script header: 0%| | 0/2 [00:00<?, ?it/s]
Linker script main: 0%| | 0/2 [00:00<?, ?it/s]
Linker script main: 100%|██████████| 2/2 [00:00<00:00, 108.52it/s]
Split 340 KB (82.28%) in defined segments
header: 2 KB (0.50%) 1 split, 0 cached
c: 338 KB (81.78%) 85 split, 0 cached
unknown: 0 B (0.00%) from unknown bin files
ld_interleave --order: .main island = 8 pieces [53198.data.o, 800.o, 63470.data.o, 800_b.o, 800_b_2.o, 63940.data.o, 800_c.o, 63C4C.data.o]; pre=0 text=85 empties=166 bss=85
[ OK ] resident
[ OK ] ov_SC01_000
[ OK ] ov_SC05_000
[ OK ] ov_SC04_000
[ OK ] ov_SC06_000
[ OK ] ov_SC01_006
[ OK ] ov_SC03_002
[ OK ] ov_SC01_005
[ OK ] ov_SC01_077
[ OK ] ov_SC02_003
[ OK ] ov_SC04_018
[ OK ] ov_SC03_001
[ OK ] ov_SC02_000
[ OK ] ov_SC04_019
[ OK ] ov_SC03_006
[ OK ] ov_SC01_001
[ OK ] ov_SC07_000
[ OK ] ov_SC01_004
[ OK ] ov_SC01_008
[ OK ] ov_SC01_074
[ OK ] ov_SC02_004
[ OK ] ov_SC02_015
[ OK ] ov_SC02_021
[ OK ] ov_SC01_080
[ OK ] ov_SC01_009
[ OK ] ov_SC01_084
[ OK ] ov_SC02_016
[ OK ] ov_SC02_026
[ OK ] ov_SC02_027
[ OK ] ov_SC02_005
[ OK ] ov_SC02_031
[ OK ] ov_SC02_039
[ OK ] ov_SC02_011
[ OK ] ov_SC02_017
[ OK ] ov_SC02_028
[ OK ] ov_SC02_035
[ OK ] ov_SC03_003
[ OK ] ov_SC02_041
[ OK ] ov_SC03_012
[ OK ] ov_SC03_011
[ OK ] ov_SC03_010
[ OK ] ov_SC03_013
[ OK ] ov_SC03_023
[ OK ] ov_SC03_007
[ OK ] ov_SC03_024
[ OK ] ov_SC03_014
[ OK ] ov_SC03_015
[ OK ] ov_SC03_029
[ OK ] ov_SC03_028
[ OK ] ov_SC03_031
[ OK ] ov_SC03_089
[ OK ] ov_SC03_030
[ OK ] ov_SC03_092
[ OK ] ov_SC03_096
[ OK ] ov_SC03_095
[ OK ] ov_SC03_090
[ OK ] ov_SC03_097
[ OK ] ov_SC03_091
[ OK ] ov_SC03_094
[ OK ] ov_SC03_093
[ OK ] ov_SC03_098
[ OK ] ov_SC03_101
[ OK ] ov_SC03_099
[ OK ] ov_SC03_100
[ OK ] ov_SC03_102
[ OK ] ov_SC03_103
[ OK ] ov_SC03_108
[ OK ] ov_SC03_109
[ OK ] ov_SC03_104
[ OK ] ov_SC03_110
[ OK ] ov_SC03_105
[ OK ] ov_SC03_112
[ OK ] ov_SC03_113
[ OK ] ov_SC03_114
[ OK ] ov_SC03_111
[ OK ] ov_SC03_115
[ OK ] ov_SC03_116
[ OK ] ov_SC03_126
[ OK ] ov_SC03_117
[ OK ] ov_SC03_121
[ OK ] ov_SC04_003
[ OK ] ov_SC03_118
[ OK ] ov_SC03_119
[ OK ] ov_SC04_004
[ OK ] ov_SC04_008
[ OK ] ov_SC04_002
[ OK ] ov_SC04_010
[ OK ] ov_SC03_125
[ OK ] ov_SC04_006
[ OK ] ov_SC04_009
[ OK ] ov_SC03_124
[ OK ] ov_SC04_007
[ OK ] ov_SC04_005
[ OK ] ov_SC04_012
[ OK ] ov_SC04_021
[ OK ] ov_SC05_006
[ OK ] ov_SC04_016
[ OK ] ov_SC05_002
[ OK ] ov_SC05_004
[ OK ] ov_SC05_007
[ OK ] ov_SC05_003
[ OK ] ov_SC04_020
[ OK ] ov_SC05_009
[ OK ] ov_SC04_015
[ OK ] ov_SC05_005
[ OK ] ov_SC05_008
[ OK ] ov_SC05_001
[ OK ] ov_SC04_011
[ OK ] ov_SC05_011
[ OK ] ov_SC05_010
[ OK ] ov_SC05_019
[ OK ] ov_SC06_008
[ OK ] ov_SC06_015
[ OK ] ov_SC06_013
[ OK ] ov_SC06_014
[ OK ] ov_SC06_016
[ OK ] ov_SC06_011
[ OK ] ov_SC06_010
[ OK ] ov_SC06_020
[ OK ] ov_SC05_017
[ OK ] ov_SC05_018
[ OK ] ov_SC06_018
[ OK ] ov_SC06_025
[ OK ] ov_SC06_006
[ OK ] ov_SC06_027
[ OK ] ov_SC06_022
[ OK ] ov_SC06_024
[ OK ] md_MAIN_013
[ OK ] md_MAIN_014
[ OK ] ov_SC07_008
[ OK ] md_MAIN_015
[ OK ] md_MAIN_016
[ OK ] ov_SC07_002
[ OK ] md_MAIN_017
[ OK ] md_MAIN_018
[ OK ] ov_SC07_001
[ OK ] md_MAIN_019
[ OK ] md_MAIN_020
[ OK ] md_MAIN_021
[ OK ] md_MAIN_022
[ OK ] md_MAIN_023
[ OK ] ov_SC06_030
[ OK ] md_MAIN_024
[ OK ] md_MAIN_025
[ OK ] ov_SC07_009
[ OK ] md_MAIN_026
[ OK ] md_MAIN_027
[ OK ] md_MAIN_028
[ OK ] md_MAIN_029
[ OK ] md_MAIN_030
[ OK ] ov_SC06_032
[ OK ] md_MAIN_031
[ OK ] ov_SC07_011
[ OK ] md_MAIN_033
[ OK ] md_MAIN_032
[ OK ] md_MAIN_034
[ OK ] md_MAIN_035
[ OK ] md_MAIN_036
[ OK ] ov_SC06_029
[ OK ] md_MAIN_037
[ OK ] md_MAIN_038
[ OK ] ov_MAIN_012
[ OK ] md_MAIN_039
[ OK ] md_MAIN_042
[ OK ] md_MAIN_040
[ OK ] ov_SC06_033
[ OK ] md_MAIN_041
[ OK ] md_MAIN_043
[ OK ] md_MAIN_045
[ OK ] md_MAIN_046
[ OK ] md_MAIN_047
[ OK ] md_MAIN_044
[ OK ] md_MAIN_008
[ OK ] ov_SC07_010
[ OK ] md_MAIN_011
[ OK ] md_MAIN_001
[ OK ] md_SC03_073
[ OK ] md_SC03_078
[ OK ] md_SC03_074
[ OK ] md_SC03_075
[ OK ] md_SC03_077
[ OK ] ov_SC03_107
[ OK ] ov_SC07_007
[ OK ] md_SC03_133
[ OK ] md_SC03_079
[ OK ] md_SC03_132
[ OK ] md_SC03_076
[ OK ] md_SC03_134
[ OK ] md_SC03_137
[ OK ] md_SC03_135
[ OK ] md_SC03_136
[ OK ] md_SC04_024
[ OK ] md_SC04_025
[ OK ] md_SC04_029
[ OK ] md_MAIN_003
[ OK ] md_SC03_138
[ OK ] md_SC04_026
[ OK ] md_SC04_028
[ OK ] md_SC04_027
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
-2
View File
@@ -1,3 +1 @@
{"ts": "2026-09-01 20:34:37", "addr": "0x80062144", "name": "func_80062144", "reach": null, "klass": null, "nins": null, "status": "failed", "closeness": null, "where_stuck": "won't compile standalone (loose-typing / missing decl)", "best_draft": null, "binary": "main", "source": "S70-332b", "residual": null, "passes_tried": null}
{"ts": "2026-09-06 12:27:56", "addr": "0x80039308", "name": "func_80039308", "reach": null, "klass": "FRAME+SCHED", "nins": 518, "status": "near", "closeness": 4, "where_stuck": "T4b HAND PASS S84 (2026-09-06): PLATEAU at 4. Rows 412/415: Fable Y4 (direct *(s16*)(p+6)=arg1) is register-exact (lhu/sh $s7 = the spilled HImode parameter reloaded through the spill register) and natural; the residual is the frame: target [arg1 @0][8-byte no-traffic slot @8][cnt @0x10]. Producer census (\u00a7501-M/\u00a7501-O): cnt slot = spill_stack_slot[23] (cnt evicted from $s7, retry fails), so the phantom is an INITIAL-LOOP slot with no traffic \u2014 caller-save area dead (leaf), LO eviction lands after cnt (GR spilled first; products alternate to GR_REGS, C3), no unallocated single-block equiv pseudo ($t0 free at the k2 site), expand-time locals precede (Y1/Y3/Y4), all 13 lh single-use + no lb (no combine ghost). Rows 49/50: both preheader insns are move_movables hoists in body order (vol = b2*0x100 in the body); X2 measured 495 \u2014 a hoisted vbase needs \u00a7501-E steering to $s2 without the pin. Notes .run/P32/t4c/func_80039308/NOTES.md", "best_draft": ".run/P32/t5x/fable/func_80039308.c", "binary": "main", "source": null, "residual": null, "passes_tried": null}
{"ts": "2026-09-06 11:41:02", "addr": "0x80032a74", "name": "func_80032A74", "reach": null, "klass": "WALL-PROVED", "nins": 422, "status": "near", "closeness": 1, "where_stuck": "T4b HAND PASS S84 (2026-09-06, Fable Max): PROVED at 1 by producer census. Residual = ONE reload-time slot at sp+0x48 (the u16 lhu draft is 422/422 with DIFF 22 = frame rows only; the s16 lh draft is DIFF 1 at idx 244 with the frame exact). The four post-parameter slot producers (reload1.c:658 ghost alter_reg / caller-save.c:249 area / reload1.c:879 invalid-equiv address / reload1.c:3499 spill_stack_slot) each refuted on the bytes: the site loads lhu and the function has no lb and no double load (combine newi2pat ghosts re-derive a narrow load); no register-only insn shares a block with a call (no sched.c:4962 staleness, so no save area without sw/lw); no unallocated single-block equiv pseudo; $t0 holds no pseudo (else $t1 would be the spill reg) and LO mult results retry into GR_REGS. NEW mechanism measured: optimize_reg_copy_2 ghosts (tmp = x; tmp op= c; x = tmp) are minted AFTER regclass -> GR_REGS, allocated, vars=0 (P14). 18 isolated reproducers, 0 draft variants; cookbook \u00a7501-M; notes .run/P32/t4c/func_80032A74/NOTES.md", "best_draft": ".run/P32/t4/drafts/func_80032A74_tuclean.c", "binary": "main", "source": null, "residual": null, "passes_tried": null}
+7 -7
View File
@@ -4,21 +4,21 @@
# cross-binary collapsible-byte leverage: docs/duplicates.cross.md.
# THREE progress metrics (all matter — see the labels):
FLEET fn-count byte-ident: 363212 / 363214 = 100.00% (REAL+LINKED+empties; FUNCTION-count, ×134-inflated — one crack counts per overlay)
FLEET instr-weighted : 13487557 / 13488497 = 100.0% (shipped .text across main + resident + 216 overlays; the decomp.dev-DISPLAY number)
FLEET distinct-code(uniq): 5815649 / 5816589 = 100.0% (90984/90984 unique fns; the DISTINCT-RE number)
MAIN game-code weighted : 40594 / 41534 = 97.7% (INCLUDED in the fleet numbers above since 2026-07-22 — roadmap §1 metrics contract; LINKED-excluding Ghidra sig dated 2026-08-05; boundaries INDEPENDENTLY VERIFIED since P31 S77 — `make sig-main-oracle` + `make audit-corpus`: 0 phantom, 0 truncated, 1 explained pad-tail)
FLEET fn-count byte-ident: 363214 / 363214 = 100.00% (REAL+LINKED+empties; FUNCTION-count, ×134-inflated — one crack counts per overlay)
FLEET instr-weighted : 13488497 / 13488497 = 100.0% (shipped .text across main + resident + 216 overlays; the decomp.dev-DISPLAY number)
FLEET distinct-code(uniq): 5816589 / 5816589 = 100.0% (90984/90984 unique fns; the DISTINCT-RE number)
MAIN game-code weighted : 41534 / 41534 = 100.0% (INCLUDED in the fleet numbers above since 2026-07-22 — roadmap §1 metrics contract; LINKED-excluding Ghidra sig dated 2026-08-05; boundaries INDEPENDENTLY VERIFIED since P31 S77 — `make sig-main-oracle` + `make audit-corpus`: 0 phantom, 0 truncated, 1 explained pad-tail)
(fleet EXCLUDING main, for continuity with pre-2026-07-22 readings: 13446963 / 13446963 = 100.0%)
FLEET REAL substantive : 360735 (of which dedup-shared 255632 via 2220 groups / 255708 instances)
FLEET REAL substantive : 360737 (of which dedup-shared 255632 via 2220 groups / 255708 instances)
FLEET LINKED PsyQ objs : 1256
FLEET NON_MATCHING : 0 (0 in any default build — G4)
FLEET INCLUDE_ASM stubs : 2
FLEET INCLUDE_ASM stubs : 0
FLEET matchable : 363214
| binary | REAL | shared | LINKED | byte-ident | matchable | byte-ident % |
|---|---:|---:|---:|---:|---:|---:|
| main | 787 | 2 | 1256 | 2089 | 2091 | 99.9% |
| main | 789 | 2 | 1256 | 2091 | 2091 | 100.0% |
| resident | 143 | 0 | 0 | 145 | 145 | 100.0% |
| md_MAIN_001 | 11 | 0 | 0 | 11 | 11 | 100.0% |
| md_MAIN_003 | 58 | 0 | 0 | 64 | 64 | 100.0% |
+2 -1
View File
@@ -59,7 +59,7 @@ Scale estimate: 3–5 sessions.
`rtu_match --split md_MAIN_034 --source md_MAIN_034` → `parallel_gate` (island pads derive at build, §303)
→ commit → `twin_rescan`; drop the `md_MAIN_034:func_800CB00C` pin (`exclude_audit --write`).
**Progress report to Drew after T1c.**
- [ ] **T2 — the parked 5** (Max):
- [x] **T2 — the parked 5** (Max) — DONE 2026-09-05 (T2a–T2c; T2d not needed):
- [x] **T2a** — DONE 2026-09-05 (`commit:3909`): controls 7/7 (5 STRONG, 2 CONSISTENT; TEXT_LO estimates == yaml); the five: MAIN/7 STRONG 0x800CEDF8 · MAIN/9 STRONG 0x800CD348 · SC03/53, /54 CONSISTENT top 0x801EF468 (12-way tie) · SC03/56 SPLIT (jal vote 0x80178C8C vs ptrs/lui ~0x801CBB50); memory-map §S45 p7; SETUP row. Brief: `tools/payload_base_evidence.py` (id word, first prologue → TEXT_LO, abs-pointer window, lui
hi-half histogram, `jal` self-consistency per candidate base, DESTPTR lookup in the window from
`.run/idxtab_map.json`) — R39 controls: must re-derive md_MAIN_008/011 (0x800CEDF8), md_MAIN_042
@@ -136,6 +136,7 @@ cookbook before the next drafting step (R16/R30) · no `Co-Authored-By` trailer
needed for T0–T2b; if T2d needs it: `tools/ghidra_mcp_start.sh` → pause → Drew runs `/mcp` (R29) → G2 ping.
## Log
- 2026-09-06 (S85, T4c CLOSE — the chain's logs read; gate 2 CONFIRMED by Drew) — **Fleet R22 after the two main banks: `make clean` EXIT=0 · extract-all 217 extracted, 0 failed of 217 (+ main, serial) EXIT=0 · check-all 218 passed, 0 failed of 218 EXIT=0 (16:13:17 MDT)** (`.run/P32/t4e/r22_*.log`). `make report`: **fn-count 363,214 / 363,214 = 100.00% · instr 13,488,497 / 13,488,497 = 100.0% · distinct 5,816,589 / 5,816,589 = 100.0% (90,984 / 90,984 unique) · MAIN game-code 41,534 / 41,534 = 100.0% · INCLUDE_ASM 0 · NON_MATCHING 0 · LINKED 1,256 · REAL substantive 360,737 (dedup 2,220 groups / 255,708 instances)** (`report_close.log`). `make report BINARY=main`: **REAL 789 · LINKED 1,256 · VERBATIM 3 · INCLUDE_ASM 0 · matchable 2,091 · byte-identical 2,091 / 2,091 = 100.00% · SHA1 143dbb89f34491258bbc27810d0a12ec8b43a8dd** (`report_main_close.log`). `make tools-health` (`tools_health.log`): see the PhaseEnd (read at the close). Milestone confirmed by Drew (gate 2): "milestone confirmed, gate 2 approved. write the PhaseEnd". NEXT = T5 executed in this session.
- 2026-09-06 14:00–19:30 MDT (S85, continued) — **T4c DONE: the last two functions banked; the frontier is EMPTY.** (a) `func_80032A74`: step 0 shape-grep (`0x6009F`, `0x5301`) → cousins `func_8003388C`/`func_800336A8` (800_b_2) and `func_8003A0E4` (800_c); the crack was a NEW frame-slot producer — combine.c:2306 skips the ref decrement for a deleted self-update (`i2dest_in_i2src`), so `gx = dd->unk07; gx -= 0x100; flag = (u32)sub < (u32)(u8)gx;` compiles to the same `lbu` and reload mints the orphan slot at 0x48; 18 reproducers (`.run/P32/t4e/ghost/`, k4/k5/k7/k14/k16/k17 mint, byte-store hosts don't); rtu MATCH on the first probe (a1); `gate_main` BANKED `commit:4007`. (b) `func_80039308`: Y4 + the ghost chain fixed the frame (DIFF 6), reusing arm 1's `s17`/`s18` as the else pointer/temp fixed the else head (b11 DIFF 2), then 40 variants on the hoisted `sll $s2` (`tools/cc1_dumps_tu.sh` real-TU dumps + `tools/alloc_table.py`): a named `vbase` after the inner loop is never a movable (loop.c:695), a 1-use temp is "not desirable", copy-first folds the arms onto `vol` (cse.c make_regs_eqv), copy-last births `vol` after the tests ($a0); the reproducer sweep (s1–s8) found `u16 vol` keeps the arms on the hoisted register; b52 = `u16 vol` + `vol = b2 * 0x100` copy-first + arms `(b2 * 0x100) ± X` (three temps merged by combine_movables, refs 7 → $s2) → **MATCH**; b54–b56 dropped every pin → **b56 zero pins**; `gate_main` BANKED `commit:4008`. Post-bank: verbatim 5==5, twin_rescan 0 open, backlog 1 open (legacy row), `exclude_audit --write` → 0 entries, census **0 / 0**. Harvest: cookbook **§501-Q, §501-R** (+index OK), accelerators (15)(16), decision-log P32 S85 T4c, SETUP rows, `.run/P32/t4e/NOTES.md`, `.gitignore` allowlist. **Fleet R22 + `make report` ×2 + `make tools-health` launched as one background chain at ~19:20 MDT** (`.run/P32/t4e/r22_{clean,extract,check}.log`, `report_close.log`, `report_main_close.log`, `tools_health.log`) — read them first next session. Session paused at Drew's request (90% context). NEXT = record the chain's numbers → T5.
- 2026-09-06 13:00–13:50 MDT (S85, continued) — **T4b CLOSE (task #13 done): fleet R22 after the bank `make clean && make extract-all && make check-all` → clean EXIT=0 · extract-all 217 extracted, 0 failed of 217 (+ main, serial) EXIT=0 · check-all 218 passed, 0 failed of 218 EXIT=0 at 13:21:49 MDT** (`.run/P32/t4d/r22_{clean,extract,check}.log`). `make report` (fleet, `.run/P32/t4d/report_close.log`): instr **13,487,557 / 13,488,497 = 100.0%** · distinct **5,815,649 / 5,816,589 = 100.0%** (90,984 / 90,984 unique fns) · fn-count **363,212 / 363,214 = 100.00%** · INCLUDE_ASM **2** · NON_MATCHING 0 · LINKED 1,256 · REAL substantive 360,735 · dedup 2,220 groups / 255,708 instances. `make report BINARY=main` (`report_main_close.log`): REAL **787** · LINKED **1,256** · VERBATIM 3 · INCLUDE_ASM **2** · matchable 2,091 · byte-identical **2,089 / 2,091 = 99.90%** · build SHA1 `143dbb89f34491258bbc27810d0a12ec8b43a8dd` byte-identical · MAIN game-code weighted 40,594 / 41,534 = 97.7% (digest denominator; the corrected one is 41,556). `make tools-health` → **OK** (sigs fresh; corpus(+resident) + cdecl + binaries + report(lint+dedup) + cookbook-index green; split_indicator 218 OK). Census `.run/P32/frontier_t4b_final.json` **2 stubs / 940 ins** (main `func_80039308` PLATEAU 4 · `func_80032A74` PROVED 1); `twin_rescan` 2 open / 0 newly free; `verbatim_check --strict` 5 == 5; `docs/backlog.md` 3 open (the two verdict rows + the legacy `func_80062144` "won't compile standalone" row). 🛑 block refreshed for T5 (below). NEXT = **T5 — the PhaseEnd (Tier 1, Max; present the milestone demo and WAIT for gate 2)**.
- 2026-09-06 (S85, session 3a7e207c, Max, Fable 5.1, no agents) — **T4b hand pass, row (d) `ov_SC03_105:func_80185810` BANKED byte-identical (`commit:4004`: bank.sh — rtu MATCH 489/489 in the real TU, splice, `make build BINARY=ov_SC03_105 -j8` rc 0, sha `d305ff6d…` == `config/check.ov_SC03_105.sha`).** Preflight: tree clean, `verbatim_check --strict` 5==5, `make check-all` 218 passed / 0 failed EXIT=0 (`.run/P32/t4d/check_all_preflight.log`); the Fable draft re-verified DIFF 13 (rows 363–380). §501-N step 0: twin oracle 0, atlas knn nothing (only a REVERSE 0.55 "weak cousin" entry), symbol grep = this overlay only; the SHAPE grep (`'0x200) << 2'`, the getTPage chain) surfaced `ov_SC02_027:func_80180B3C` — the same billboard drawer, banked — whose objdump window (0x34f8–0x3560) is the target's rows 362–386 verbatim. Its window spelling ported onto the draft (`.run/P32/t4d/d1_sibport.c`) → MATCH first try; the pin census (d2–d12, all real-TU): mode/cl/c40/uu pins individually and jointly removable, `ot16` pin load-bearing ONLY next to 2-set neighbours (DIFF 4), **d9 with NO pins = MATCH → banked**; F2's polarity re-rolls 42 rows, a 2-set `uu` 63 rows (the S83 "combine folds the fresh andi via nonzero_bits / a hard reg hides it" reading refuted — the andi survives as a lone single-set insn). Post-bank: `twin_rescan` 2 open / 0 newly free; `verbatim_check --strict` 5==5; `backlog.py render` 3 open (row pruned); census `.run/P32/frontier_t4b_final.json` **2 stubs / 940 ins** (main `func_80039308` 4 · `func_80032A74` 1). Harvest: cookbook **§501-P** (+ index regen), accelerators (14), decision-log P32 S85 (R31), `.run/P32/t4d/NOTES.md` (the 12-variant census). Fleet R22 launched after the bank (`.run/P32/t4d/r22_*.log`) — see the T4b close entry. **T4b hand pass COMPLETE: 13/15 banked + 2 final verdicts. NEXT = the T4b close, then T5.**