verify(phase-33): A5 THE RECORDED RUN — PASS on commit:4028: check-all 218/218 from a clean fleet (157 s), sdk-dual OK both legs, tools-health OK (0 PHANTOM/TRUNCATED/PAD-TAIL, 0 warns), audit-frontier 1,258 stubs all in main's LINKED regions / 0 game-code, audit-disc UNCLAIMED 0, report 363214/363214 · 13492113/13492113 · 5820205/5820205 · main 45150/45150, stubs 0, backlog 0; every step EXIT=0 with its contract line; logs + maps + SUMMARY tracked under .run/P33/verify/, SUMMARY pasted into docs/verification.md §2; checkpoint -> NEXT = B9/C3

This commit is contained in:
Drew T
2026-09-06 21:13:09 -06:00
parent 3e0ecfaccf
commit 19832e1693
16 changed files with 25076 additions and 25 deletions
+6
View File
@@ -0,0 +1,6 @@
# tree
# cmd: step_tree
# started: 2026-09-07T02:58:29Z
HEAD commit:4028 2026-09-06 fix(phase-33): audit_frontier's LINKED-stub count reads the Stub records (the reference v
porcelain -uno clean apart from ghidra/ (3 churn lines); untracked: 1 paths
EXIT=0 wall=1s finished: 2026-09-07T02:58:30Z
File diff suppressed because one or more lines are too long
+9
View File
@@ -0,0 +1,9 @@
# family-hseq
# cmd: step_family
# started: 2026-09-07T02:58:30Z
fleet (OVERLAYS ONLY — not comparable to `make report`; excludes main + resident): 100.0% fn / 100.0% instr / 100.0% distinct
tailcheck: 0 families ≥2, 0 substantial / 0 ins [Task-2 snapshot 2026-07-11: 663 / 186 / 1.85M — this number SHRINKS as banking proceeds; it is a point-in-time reference, NOT an invariant to match]
frontier: 0 target families (0 substantial, 0 w/ matched sib) + 0 singletons
-> .run/family_hseq.json + docs/family-hseq.md
family_hseq regenerated: 217 binaries scanned, 0 open instances
EXIT=0 wall=11s finished: 2026-09-07T02:58:41Z
+478
View File
@@ -0,0 +1,478 @@
# r22-clean-fleet
# cmd: step_fleet
# started: 2026-09-07T02:58:41Z
clean: removed build/, expected/, and the regenerated splat tree (asm/, assets/, undefined_*_auto.txt).
disc-extract: up to date — extracted/retail/ matches the committed manifest (sha1 e5c6019249dec3c71bb2cf40658a78439dddb037)
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, 212851.65it/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, 631834.26it/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.72it/s]
Scanning main: 100%|██████████| 2/2 [00:01<00:00, 1.72it/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.82it/s]
Splitting main: 100%|██████████| 2/2 [00:00<00:00, 2.82it/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, 100.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_SC05_000
[ OK ] ov_SC01_000
[ OK ] ov_SC04_000
[ OK ] ov_SC06_000
[ OK ] ov_SC01_005
[ OK ] ov_SC01_006
[ OK ] ov_SC03_002
[ OK ] ov_SC04_019
[ OK ] ov_SC02_003
[ OK ] ov_SC01_077
[ OK ] ov_SC04_018
[ OK ] ov_SC02_000
[ OK ] ov_SC01_001
[ OK ] ov_SC03_001
[ OK ] ov_SC03_006
[ OK ] ov_SC01_004
[ OK ] ov_SC01_074
[ OK ] ov_SC01_008
[ OK ] ov_SC07_000
[ OK ] ov_SC02_004
[ OK ] ov_SC02_015
[ OK ] ov_SC02_021
[ OK ] ov_SC01_080
[ OK ] ov_SC01_084
[ OK ] ov_SC01_009
[ OK ] ov_SC02_016
[ OK ] ov_SC02_031
[ OK ] ov_SC02_005
[ OK ] ov_SC02_039
[ OK ] ov_SC02_028
[ OK ] ov_SC02_026
[ OK ] ov_SC02_035
[ OK ] ov_SC03_003
[ OK ] ov_SC02_027
[ OK ] ov_SC02_011
[ OK ] ov_SC02_017
[ OK ] ov_SC02_041
[ OK ] ov_SC03_012
[ OK ] ov_SC03_010
[ OK ] ov_SC03_011
[ OK ] ov_SC03_013
[ OK ] ov_SC03_023
[ OK ] ov_SC03_007
[ OK ] ov_SC03_024
[ OK ] ov_SC03_031
[ OK ] ov_SC03_089
[ OK ] ov_SC03_029
[ OK ] ov_SC03_015
[ OK ] ov_SC03_014
[ OK ] ov_SC03_092
[ OK ] ov_SC03_090
[ OK ] ov_SC03_095
[ OK ] ov_SC03_030
[ OK ] ov_SC03_028
[ OK ] ov_SC03_096
[ OK ] ov_SC03_093
[ OK ] ov_SC03_091
[ OK ] ov_SC03_094
[ OK ] ov_SC03_097
[ OK ] ov_SC03_101
[ OK ] ov_SC03_109
[ OK ] ov_SC03_098
[ OK ] ov_SC03_108
[ OK ] ov_SC03_110
[ OK ] ov_SC03_102
[ OK ] ov_SC03_099
[ OK ] ov_SC03_112
[ OK ] ov_SC03_100
[ OK ] ov_SC03_103
[ OK ] ov_SC03_104
[ OK ] ov_SC03_115
[ OK ] ov_SC03_105
[ OK ] ov_SC03_113
[ OK ] ov_SC03_111
[ OK ] ov_SC03_114
[ OK ] ov_SC03_116
[ OK ] ov_SC03_126
[ OK ] ov_SC04_008
[ OK ] ov_SC04_003
[ OK ] ov_SC03_121
[ OK ] ov_SC04_009
[ OK ] ov_SC04_006
[ OK ] ov_SC03_117
[ OK ] ov_SC04_004
[ OK ] ov_SC03_125
[ OK ] ov_SC03_118
[ OK ] ov_SC03_119
[ OK ] ov_SC04_007
[ OK ] ov_SC04_002
[ OK ] ov_SC04_005
[ OK ] ov_SC04_010
[ OK ] ov_SC03_124
[ OK ] ov_SC04_012
[ OK ] ov_SC04_021
[ OK ] ov_SC04_016
[ OK ] ov_SC05_006
[ OK ] ov_SC05_002
[ OK ] ov_SC05_007
[ OK ] ov_SC05_004
[ OK ] ov_SC05_009
[ OK ] ov_SC04_020
[ OK ] ov_SC05_001
[ OK ] ov_SC04_015
[ OK ] ov_SC05_008
[ OK ] ov_SC05_003
[ OK ] ov_SC05_005
[ OK ] ov_SC04_011
[ OK ] ov_SC05_011
[ OK ] ov_SC05_010
[ OK ] ov_SC05_019
[ OK ] ov_SC06_013
[ OK ] ov_SC06_015
[ OK ] ov_SC06_008
[ OK ] ov_SC06_016
[ OK ] ov_SC06_011
[ OK ] ov_SC06_014
[ OK ] ov_SC06_010
[ OK ] ov_SC05_017
[ OK ] ov_SC05_018
[ OK ] ov_SC06_020
[ OK ] ov_SC06_018
[ OK ] ov_SC06_025
[ OK ] ov_SC06_027
[ OK ] ov_SC06_006
[ OK ] ov_SC06_022
[ OK ] ov_SC06_024
[ OK ] ov_SC07_008
[ OK ] md_MAIN_013
[ OK ] ov_SC07_002
[ OK ] md_MAIN_014
[ OK ] md_MAIN_016
[ OK ] md_MAIN_015
[ OK ] md_MAIN_017
[ OK ] ov_SC07_001
[ OK ] md_MAIN_018
[ OK ] md_MAIN_021
[ OK ] md_MAIN_019
[ OK ] ov_SC06_030
[ OK ] md_MAIN_020
[ OK ] md_MAIN_023
[ OK ] md_MAIN_022
[ OK ] md_MAIN_024
[ OK ] md_MAIN_025
[ OK ] md_MAIN_026
[ OK ] ov_SC07_009
[ OK ] md_MAIN_029
[ OK ] md_MAIN_028
[ OK ] md_MAIN_027
[ OK ] md_MAIN_030
[ OK ] ov_SC06_032
[ OK ] md_MAIN_031
[ OK ] md_MAIN_032
[ OK ] md_MAIN_033
[ OK ] md_MAIN_035
[ OK ] md_MAIN_034
[ OK ] md_MAIN_036
[ OK ] ov_SC06_033
[ OK ] ov_MAIN_012
[ OK ] md_MAIN_037
[ OK ] md_MAIN_038
[ OK ] ov_SC07_011
[ OK ] md_MAIN_039
[ OK ] md_MAIN_040
[ OK ] ov_SC06_029
[ OK ] md_MAIN_042
[ OK ] md_MAIN_041
[ OK ] md_MAIN_043
[ OK ] md_MAIN_045
[ OK ] md_MAIN_044
[ OK ] md_MAIN_046
[ OK ] md_MAIN_047
[ OK ] md_MAIN_008
[ OK ] ov_SC07_010
[ OK ] md_MAIN_001
[ OK ] md_MAIN_011
[ OK ] ov_SC03_107
[ OK ] md_SC03_073
[ OK ] md_SC03_078
[ OK ] md_SC03_074
[ OK ] md_SC03_075
[ OK ] md_SC03_077
[ OK ] ov_SC07_007
[ OK ] md_SC03_076
[ OK ] md_SC03_132
[ OK ] md_SC03_133
[ OK ] md_SC03_079
[ OK ] md_SC03_137
[ OK ] md_SC03_134
[ OK ] md_SC03_135
[ OK ] md_SC03_136
[ OK ] md_SC03_138
[ OK ] md_SC04_024
[ OK ] md_SC04_025
[ OK ] md_SC04_029
[ OK ] md_SC04_026
[ OK ] md_MAIN_003
[ OK ] md_SC04_028
[ OK ] md_SC05_023
[ OK ] md_SC04_027
[ OK ] md_SC04_030
[ OK ] md_SC05_024
[ OK ] md_SC05_028
[ OK ] md_SC05_025
[ OK ] md_SC05_027
[ OK ] md_MAIN_007
[ OK ] md_MAIN_009
[ OK ] md_SC05_026
[ OK ] md_SC03_053
[ OK ] md_SC03_056
[ OK ] md_SC03_054
[ OK ] md_SC05_029
[ OK ] ov_SC02_037
[ OK ] md_SC02_009
[ OK ] ov_SC07_006
[ OK ] md_SC07_004
[ OK ] md_SC07_003
extract-all: 217 extracted, 0 failed of 217 (+ main, serial)
[ OK ] resident
[ OK ] ov_SC01_005
[ OK ] ov_SC06_000
[ OK ] ov_SC05_000
[ OK ] ov_SC03_006
[ OK ] ov_SC04_000
[ OK ] ov_SC01_001
[ OK ] ov_SC03_002
[ OK ] ov_SC02_000
[ OK ] ov_SC01_006
[ OK ] ov_SC01_000
[ OK ] ov_SC04_018
[ OK ] ov_SC01_077
[ OK ] ov_SC02_003
[ OK ] ov_SC04_019
[ OK ] ov_SC03_001
[ OK ] ov_SC07_000
[ OK ] ov_SC01_008
[ OK ] ov_SC01_004
[ OK ] ov_SC02_004
[ OK ] ov_SC01_074
[ OK ] ov_SC01_080
[ OK ] ov_SC01_009
[ OK ] ov_SC01_084
[ OK ] ov_SC02_015
[ OK ] ov_SC02_017
[ OK ] ov_SC02_026
[ OK ] ov_SC02_016
[ OK ] ov_SC02_021
[ OK ] ov_SC02_011
[ OK ] ov_SC02_005
[ OK ] ov_SC02_027
[ OK ] ov_SC02_039
[ OK ] ov_SC02_028
[ OK ] ov_SC02_031
[ OK ] ov_SC02_035
[ OK ] ov_SC02_041
[ OK ] ov_SC03_003
[ OK ] ov_SC03_007
[ OK ] ov_SC03_012
[ OK ] ov_SC03_010
[ OK ] ov_SC03_011
[ OK ] ov_SC03_023
[ OK ] ov_SC03_013
[ OK ] ov_SC03_014
[ OK ] ov_SC03_015
[ OK ] ov_SC03_024
[ OK ] ov_SC03_089
[ OK ] ov_SC03_031
[ OK ] ov_SC03_030
[ OK ] ov_SC03_090
[ OK ] ov_SC03_028
[ OK ] ov_SC03_029
[ OK ] ov_SC03_092
[ OK ] ov_SC03_096
[ OK ] ov_SC03_091
[ OK ] ov_SC03_093
[ OK ] ov_SC03_094
[ OK ] ov_SC03_097
[ OK ] ov_SC03_098
[ OK ] ov_SC03_095
[ OK ] main
[ OK ] ov_SC03_099
[ OK ] ov_SC03_100
[ OK ] ov_SC03_101
[ OK ] ov_SC03_102
[ OK ] ov_SC03_108
[ OK ] ov_SC03_109
[ OK ] ov_SC03_104
[ OK ] ov_SC03_103
[ OK ] ov_SC03_113
[ OK ] ov_SC03_111
[ OK ] ov_SC03_112
[ OK ] ov_SC03_110
[ OK ] ov_SC03_105
[ OK ] ov_SC03_115
[ OK ] ov_SC03_114
[ 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_SC03_124
[ OK ] ov_SC03_125
[ OK ] ov_SC04_006
[ OK ] ov_SC04_003
[ OK ] ov_SC04_002
[ OK ] ov_SC04_005
[ OK ] ov_SC04_008
[ OK ] ov_SC04_004
[ OK ] ov_SC04_009
[ OK ] ov_SC04_010
[ OK ] ov_SC04_007
[ 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_003
[ OK ] ov_SC05_002
[ OK ] ov_SC05_008
[ OK ] ov_SC05_006
[ OK ] ov_SC05_009
[ OK ] ov_SC05_001
[ OK ] ov_SC05_005
[ OK ] ov_SC05_007
[ OK ] ov_SC05_010
[ OK ] ov_SC05_004
[ OK ] ov_SC05_011
[ OK ] ov_SC05_018
[ OK ] ov_SC05_017
[ OK ] ov_SC05_019
[ OK ] ov_SC06_008
[ OK ] ov_SC06_006
[ OK ] ov_SC06_010
[ OK ] ov_SC06_011
[ OK ] ov_SC06_015
[ OK ] ov_SC06_014
[ OK ] ov_SC06_013
[ OK ] ov_SC06_020
[ OK ] ov_SC06_016
[ OK ] ov_SC06_025
[ OK ] ov_SC06_022
[ OK ] ov_SC06_018
[ OK ] ov_SC06_024
[ OK ] ov_SC06_027
[ OK ] md_MAIN_013
[ OK ] md_MAIN_014
[ OK ] ov_SC06_029
[ OK ] md_MAIN_015
[ OK ] md_MAIN_016
[ OK ] ov_SC06_030
[ 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_024
[ OK ] ov_SC06_032
[ OK ] md_MAIN_025
[ OK ] md_MAIN_026
[ OK ] md_MAIN_027
[ OK ] md_MAIN_029
[ OK ] md_MAIN_028
[ OK ] md_MAIN_023
[ OK ] md_MAIN_030
[ OK ] md_MAIN_031
[ OK ] md_MAIN_033
[ OK ] md_MAIN_034
[ OK ] md_MAIN_036
[ OK ] md_MAIN_035
[ OK ] ov_SC06_033
[ OK ] ov_SC07_001
[ OK ] md_MAIN_037
[ OK ] md_MAIN_032
[ OK ] md_MAIN_040
[ OK ] md_MAIN_039
[ OK ] md_MAIN_038
[ OK ] md_MAIN_042
[ OK ] ov_SC07_007
[ OK ] md_MAIN_043
[ OK ] md_MAIN_045
[ OK ] md_MAIN_046
[ OK ] md_MAIN_044
[ OK ] ov_SC07_006
[ OK ] md_MAIN_047
[ OK ] md_MAIN_001
[ OK ] md_MAIN_008
[ OK ] md_MAIN_041
[ OK ] md_MAIN_011
[ OK ] ov_SC07_002
[ OK ] md_MAIN_003
[ OK ] md_SC07_003
[ OK ] md_SC03_076
[ OK ] md_SC03_077
[ OK ] ov_SC07_009
[ OK ] ov_SC07_010
[ OK ] ov_SC07_008
[ OK ] ov_SC07_011
[ OK ] ov_MAIN_012
[ OK ] md_SC03_079
[ OK ] ov_SC02_037
[ OK ] md_SC03_132
[ OK ] ov_SC03_107
[ OK ] md_SC03_136
[ OK ] md_SC03_135
[ OK ] md_SC04_024
[ OK ] md_SC04_025
[ OK ] md_SC07_004
[ OK ] md_SC04_026
[ OK ] md_SC04_028
[ OK ] md_SC03_074
[ OK ] md_SC04_027
[ OK ] md_SC03_073
[ OK ] md_SC03_075
[ OK ] md_SC04_029
[ OK ] md_SC04_030
File diff suppressed because it is too large Load Diff
File diff suppressed because one or more lines are too long
+17
View File
@@ -0,0 +1,17 @@
# audit-frontier
# cmd: make audit-frontier
# started: 2026-09-07T03:07:42Z
.venv/bin/python tools/audit_frontier.py
audit-frontier: reference = corpus.stubs over 218 binaries -> 1258 open stubs
family_hseq {'claimed_unmatched_instances': 0, 'members_still_open_per_corpus': 0}
worklist {'claimed_n_stubs': 79, 'rows': 79, 'rows_already_banked': 0}
backlog {'rows': 0, 'rows_already_banked': 0}
fuel_manifest {'targets': 23, 'targets_already_banked': 0}
All views agree with the corpus oracle.
DENOMINATOR (R34/R36): agreement above says nothing about code never onboarded, so:
stubs 1258 total, 1258 inside main's LINKED (Sony-object) regions by design, 0 game-code stubs open
disc: 0 UNCLAIMED of 220 code payloads (docs/disc-ledger.md, from make audit-disc)
main's build-derived boundary sig: present (.run/sig.main.jsonl; the Ghidra sig is the second, independent oracle)
EXIT=0 wall=9s finished: 2026-09-07T03:07:51Z
+29
View File
@@ -0,0 +1,29 @@
# audit-disc
# cmd: make audit-disc
# started: 2026-09-07T03:07:51Z
.venv/bin/python tools/disc_audit.py
disc: 416,021,760 bytes across 4 tracks; onboarded payload hashes: 213
ISO root files: 27
! LIST.CD: TOC walk failed (sub-file 0 [2048:24576] out of bounds (.CD is 4096 bytes)) — whole file booked as data
onboarded-code 50,878,697
unclaimed-code 0
classified-data 134,017,708
audio-video 184,338,000
filesystem-metadata 46,787,355
TOTAL 416,021,760 disc 416,021,760 residue 0
L2 disagreements (review queue): 80
SC06.CD/6 entry=0 type=4 854,543 B L1=data L2=code fns=3 0.87/0.0118
SC03.CD/6 entry=0 type=4 849,759 B L1=data L2=code fns=3 0.87/0.0130
SC07.CD/6 entry=1 type=4 844,311 B L1=data L2=code fns=3 0.84/0.0116
SC01.CD/9 entry=0 type=4 832,263 B L1=data L2=code fns=3 0.85/0.0121
SC01.CD/1 entry=0 type=4 831,599 B L1=data L2=code fns=3 0.74/0.0119
SC04.CD/11 entry=0 type=4 824,663 B L1=data L2=code fns=3 0.79/0.0136
SC02.CD/17 entry=0 type=4 818,143 B L1=data L2=code fns=3 0.89/0.0134
SC03.CD/28 entry=0 type=4 804,015 B L1=data L2=code fns=3 0.88/0.0133
SC02.CD/11 entry=0 type=4 801,063 B L1=data L2=code fns=3 0.89/0.0145
SC03.CD/7 entry=0 type=4 799,087 B L1=data L2=code fns=3 0.88/0.0131
SC03.CD/14 entry=0 type=4 798,439 B L1=data L2=code fns=3 0.87/0.0135
SC03.CD/15 entry=0 type=4 798,439 B L1=data L2=code fns=3 0.87/0.0135
UNCLAIMED code payloads: 0
ledger -> docs/disc-ledger.md
EXIT=0 wall=36s finished: 2026-09-07T03:08:27Z
File diff suppressed because one or more lines are too long
+16
View File
@@ -0,0 +1,16 @@
# .run/P33/verify/SUMMARY.md — the recorded contract run (generated by tools/verify_contract.sh; never edit)
- **Tree:** `commit:4028` (2026-09-06) · **Host:** Linux 6.18.33.1-microsoft-standard-WSL2, 32 CPUs, JOBS=16 · **Run:** 2026-09-07T03:11:58Z
- **Verdict:** PASS — every step EXIT=0 with its contract line
| # | Step | EXIT | wall | contract line |
|---|---|---|---|---|
| 00 | `tree` | 0 | 1s | HEAD commit:4028 2026-09-06 fix(phase-33): audit_frontier's LINKED-stub count reads the Stub records (the refer |
| 01 | `check-env` | 0 | 0s | check-env: OK — Phase-4 toolchain ready. |
| 02 | `family-hseq` | 0 | 11s | family_hseq regenerated: 217 binaries scanned, 0 open instances |
| 03 | `r22-clean-fleet` | 0 | 157s | check-all: 218 passed, 0 failed of 218 |
| 04 | `sdk-dual` | 0 | 28s | sdk-dual: OK — main 143dbb89f34491258bbc27810d0a12ec8b43a8dd byte-identical WITH and WITHOUT the PsyQ objects (maps: .run/P33/verify/main_ |
| 05 | `tools-health` | 0 | 356s | tools-health: OK — sigs fresh; corpus(+resident) + cdecl + binaries + report(lint+dedup) + cookbook-index all green. |
| 06 | `audit-frontier` | 0 | 9s | audit-frontier: reference = corpus.stubs over 218 binaries -> 1258 open stubs |
| 07 | `audit-disc` | 0 | 36s | UNCLAIMED code payloads: 0 |
| 08 | `report` | 0 | 211s | FLEET distinct-code(uniq): 5820205 / 5820205 = 100.0% (90984/90984 unique fns; the DISTINCT-RE number) |
+21
View File
@@ -0,0 +1,21 @@
verify_contract: recorded run -> /home/musashi/bfm-decomp/.run/P33/verify (HEAD commit:4028)
verify_contract: step 00 tree: step_tree
verify_contract: step 00 tree OK (rc=0, 1 s)
verify_contract: step 01 check-env: make check-env
verify_contract: step 01 check-env OK (rc=0, 0 s)
verify_contract: step 02 family-hseq: step_family
verify_contract: step 02 family-hseq OK (rc=0, 11 s)
verify_contract: step 03 r22-clean-fleet: step_fleet
verify_contract: step 03 r22-clean-fleet OK (rc=0, 157 s)
verify_contract: step 04 sdk-dual: step_sdk_dual
verify_contract: step 04 sdk-dual OK (rc=0, 28 s)
verify_contract: step 05 tools-health: step_tools_health
verify_contract: step 05 tools-health OK (rc=0, 356 s)
verify_contract: step 06 audit-frontier: make audit-frontier
verify_contract: step 06 audit-frontier OK (rc=0, 9 s)
verify_contract: step 07 audit-disc: make audit-disc
verify_contract: step 07 audit-disc OK (rc=0, 36 s)
verify_contract: step 08 report: step_report
verify_contract: step 08 report OK (rc=0, 211 s)
verify_contract: SUMMARY written: /home/musashi/bfm-decomp/.run/P33/verify/SUMMARY.md
verify_contract: PASS
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
+1 -1
View File
@@ -5,7 +5,7 @@
> Generated by `tools/family_hseq.py` from the 217 binary sigs + per-binary src stubs. Ranked by TEMPLATABLE byte-weight (PURE+IMM members × nins × 4). The byte-gate is the arbiter.
>
> **Scope (217 binaries): 141 location overlays + 75 md_* modules + the resident · MAIN IS EXCLUDED** · generated at HEAD `commit:4027` · stub set derived from `corpus.stubs` — the same oracle `progress.py` counts, so same-tree overlay totals agree by construction; compare digests only at the same HEAD.
> **Scope (217 binaries): 141 location overlays + 75 md_* modules + the resident · MAIN IS EXCLUDED** · generated at HEAD `commit:4028` · stub set derived from `corpus.stubs` — the same oracle `progress.py` counts, so same-tree overlay totals agree by construction; compare digests only at the same HEAD.
**Fleet (overlays):** 100.0% fn / 100.0% instr / 100.0% distinct-code matched. Unmatched: 0 instances / 0 ins (0 distinct classes).
+15 -3
View File
@@ -63,9 +63,21 @@ The project's own full run is recorded, log by log, under `.run/P33/verify/` (tr
`EXIT=<rc>` and a timestamp, plus `SUMMARY.md`), produced by `tools/verify_contract.sh` on the committed tree. The table
below is copied from that `SUMMARY.md`; regenerate it with the script, never by hand.
| # | Step | Result | Log |
|---|---|---|---|
| — | *(pending: filled by the Phase-33 A5 run — see `phase-ends/CURRENT_PHASE.md`)* | | |
- **Tree:** `commit:4028` (2026-09-06) · **Host:** Linux 6.18.33.1-microsoft-standard-WSL2, 32 CPUs, JOBS=16 · **Run:** 2026-09-07T03:11:58Z
| # | Step | EXIT | wall | contract line |
|---|---|---|---|---|
| 00 | `tree` | 0 | 1s | HEAD commit:4028 2026-09-06 fix(phase-33): audit_frontier's LINKED-stub count reads the Stub records (the refer |
| 01 | `check-env` | 0 | 0s | check-env: OK — Phase-4 toolchain ready. |
| 02 | `family-hseq` | 0 | 11s | family_hseq regenerated: 217 binaries scanned, 0 open instances |
| 03 | `r22-clean-fleet` | 0 | 157s | check-all: 218 passed, 0 failed of 218 |
| 04 | `sdk-dual` | 0 | 28s | sdk-dual: OK — main 143dbb89f34491258bbc27810d0a12ec8b43a8dd byte-identical WITH and WITHOUT the PsyQ objects (maps: .run/P33/verify/main_ |
| 05 | `tools-health` | 0 | 356s | tools-health: OK — sigs fresh; corpus(+resident) + cdecl + binaries + report(lint+dedup) + cookbook-index all green. |
| 06 | `audit-frontier` | 0 | 9s | audit-frontier: reference = corpus.stubs over 218 binaries -> 1258 open stubs |
| 07 | `audit-disc` | 0 | 36s | UNCLAIMED code payloads: 0 |
| 08 | `report` | 0 | 211s | FLEET distinct-code(uniq): 5820205 / 5820205 = 100.0% (90984/90984 unique fns; the DISTINCT-RE number) |
Every `NN_<step>.log` is tracked under `.run/P33/verify/`; the tools-health log also carries `sig-main-oracle: main is now INDEPENDENT — 0 in-domain stubs, 0 PHANTOM, 0 TRUNCATED, 0 PAD-TAIL` and the report `INCLUDE_ASM stubs : 0`, `Open near-misses: 0`. Total wall 14 min on 32 CPUs.
The same run was performed after every banked batch of Phases 30–32 (218/218 at every one; the P32 close run is
`.run/P32/t4e/r22_check.log`) and the history-rewrite of the public flip is followed by one more (C8) on the adopted tree —
+37 -21
View File
@@ -59,7 +59,7 @@ one-time snapshot, `CLAUDE.md` gains "never `git clean -x`" (R20 amendment propo
- [x] **B6** `dumps/CHECKSUMS.sha1` + INDEX.md rewrite + memory-map Source-index row — Low/xHigh — see Log 2026-09-06 B6
- [x] **B7** No-ROM CI (`no-rom.yml`, `audit_public.py`, `compile_only.py`) — xHigh — see Log 2026-09-06 B7
- [x] **B8** SETUP.md rows/sections (R21) + `docs/verification.md` — xHigh — see Log 2026-09-06 B8
- [ ] **A5** THE RECORDED RUN (`tools/verify_contract.sh` → `.run/P33/verify/`, SUMMARY all EXIT=0) — run Low, read Max
- [x] **A5** THE RECORDED RUN (`tools/verify_contract.sh` → `.run/P33/verify/`, SUMMARY all EXIT=0) — run Low, read Max — see Log 2026-09-06 A5
- [ ] **B9/C3** The preparatory commit (`git rm --cached` purge set; psyq CHECKSUMS moved; zip sha256s; runbook;
decision-log entry) — Max (P5c-class)
- [ ] **C1** filter-repo 2.47.0 + `tools/public_rewrite/` — design Max, execution xHigh
@@ -219,21 +219,32 @@ Mid-phase rules check after every 4 completed tasks (P6). Commit banked artifact
current digest: 363,214 / 13,492,113 / 5,820,205 / main 45,150), what is NOT our C (1,256 LINKED + 5 verbatim), the
last-recorded-run table (placeholder until A5 fills it from `SUMMARY.md`), what CI proves without the disc, the
regenerable RE artifacts. `tools/verify_contract.sh` is A5's (next). Commit: see below.
- **2026-09-06 (S87) — A5 THE RECORDED RUN: PASS.** `tools/verify_contract.sh` on HEAD `commit:4028` → `.run/P33/verify/`
(tracked): 00 tree · 01 `check-env: OK` · 02 family_hseq 217 scanned / 0 open · **03 `check-all: 218 passed, 0 failed of
218` (157 s, clean fleet)** · 04 `sdk-dual: OK — main 143dbb89… WITH and WITHOUT` (28 s) · 05 `tools-health: OK` (356 s;
`sig-main-oracle: 0 PHANTOM, 0 TRUNCATED, 0 PAD-TAIL`; zero `[warn]`) · 06 audit-frontier (1,258 stubs = all in main's
LINKED regions, 0 game-code) · 07 `UNCLAIMED code payloads: 0` · 08 report `363214/363214 · 13492113/13492113 ·
5820205/5820205 · main 45150/45150`, `INCLUDE_ASM stubs : 0`, backlog 0. Every step EXIT=0 with its contract line;
SUMMARY.md pasted into `docs/verification.md` §2. Total wall 14 min (32 CPUs, JOBS=16). Two false starts recorded: the
porcelain check tripped on the run's own untracked logs (→ `-uno`), and audit_frontier's derived LINKED count read 0
twice (the reference view keys addresses, not Stub records) — each fix gated on a control before its commit (R66).
Gotcha ×2: `pkill -f '<pattern>'` kills the calling shell when its own command line contains the pattern (exit 144) —
bracket the pattern (`'verify_contrac[t]'`). Commit: see below.
## 🛑 SESSION CHECKPOINT — A1–A4 ✓, B1–B8 ✓; NEXT = P6 rules check, then A5 THE RECORDED RUN (2026-09-06 ~22:20 MDT, written by session fa49faf3 "S87" after the B8 commit; SUPERSEDES the earlier blocks)
## 🛑 SESSION CHECKPOINT — A1–A5 ✓, B1–B8 ✓; NEXT = B9/C3 the preparatory (purge) commit (2026-09-06 ~23:20 MDT, written by session fa49faf3 "S87" after the A5 commit; SUPERSEDES the earlier blocks)
### 0. How to use this block
You are a FRESH SESSION that has read `PROJECT_CONTEXT.md`, `phase-ends/DIGEST.md`, `PhaseEnd_Phase30/31/32.md` and this file,
and nothing else (R64). Replay this block verbatim, state phase / done / NEXT / effort, list the rules from the digest
(R1–R73), then WAIT for Drew. **NEXT = the P6 rules check (12 tasks done), then A5 THE RECORDED RUN** (run Low, read Max). The harness task list must be REBUILT (Drew wants to monitor it —
one TaskCreate per plan item A1…G2, 40 items, mark A1–A4 + B1–B8 completed; R28). The SessionStart hook restarts the headless
(R1–R73), then WAIT for Drew. **NEXT = B9/C3** (Max, P5c-class — prompt Drew for `/effort max` per R27; he ran S87 at medium by choice). The harness task list must be REBUILT (Drew wants to monitor it —
one TaskCreate per plan item A1…G2, 40 items, mark A1–A5 + B1–B8 completed; R28). The SessionStart hook restarts the headless
MCP server when `ghidra/bfm.rep` exists (it did not stay up in S87 — `ss -tln` showed nothing on :8080; harmless): B6/B7/B8
need no Ghidra; run `tools/ghidra_mcp_stop.sh` before any headless step (R23).
### 1. Where we are
**Phase 33 — 100% verification + the public flip + Gen2 exit.** Gate 1 approved 2026-09-06 (plan mode, Max). R65–R73 ratified.
**Done: A1 (`commit:4012`), A2 (`commit:4013`), A3 (`commit:4014`), A4 (`commit:4015`), B1 (`commit:4016`), B2 (`commit:4017`), B3
(`commit:4018`), B4 (`commit:4019`), B5 (`commit:4022`), B6 (`commit:4023`), B7 (`commit:4024`), B8 (the S87 `docs(phase-33): B8 …` commit).** The approved plan is
(`commit:4018`), B4 (`commit:4019`), B5 (`commit:4022`), B6 (`commit:4023`), B7 (`commit:4024`), B8 (`commit:4025`), A5 (`commit:4026` prep + `commit:4027`/`commit:4028` fixes + the S87 `verify(phase-33): A5 …` commit).** The approved plan is
VERBATIM at the end of this file — Blocks A–G give every task's files, commands and verification; "Execution order and why"
is the sequence. Effort: Drew ran S87 at **medium** by explicit choice (the plan says Max for B5); the plan's annotations
still stand for the tasks ahead — restate them, Drew decides (R7/R27).
@@ -250,29 +261,34 @@ still stand for the tasks ahead — restate them, Drew decides (R7/R27).
in the psx_ldr extension, the built ELF, the extracted payload — protos need `extracted/proto/*` from
`tools/bfm_extract/extract_proto_exe.py`). The delta filter's three drift classes are documented in SETUP (P33 B5). The
live `ghidra/` project is untouched and still on disk (leaves git at B9/C3; the archive repo keeps its history).
- **Verification state:** `.run/P32/t4e/r22_check.log` 218/218 (P32 close); B2 re-gated 15 binaries, B3 fresh-clone 218/218,
A3/B4 `sdk-dual` OK; no fleet-wide R22 since P32 — **A5 is that run** (after B8). `make tools-health` has NOT been run
since A4 (the roster check is new in it) — run it in B8 or A5 and read it.
- **Verification state:** **A5 PASS on `commit:4028`** (`.run/P33/verify/SUMMARY.md`: 218/218 clean fleet, sdk-dual both legs,
tools-health OK with 0 PHANTOM/TRUNCATED/PAD-TAIL and zero warns, UNCLAIMED 0, report 100.00/100.0/100.0, stubs 0, backlog 0).
C8 re-runs it on the adopted (rewritten) tree; a `--cached` removal (B9/C3) changes no tracked-content bytes.
- **Environment:** `gh` not authenticated; `git filter-repo` NOT installed; disk ≈ 13 GB free of 75 (`.run/` 38 GB —
`build/ghidra_rebuild/` and `.run/ghidra_rebuild/` are scratch, ~1 GB, safe to delete); no `/tmp` (R12).
`.run/ghidra_export/` (139 MB, 129 live exports from S86) is the input for any future re-derivation of a candidate.
### 3. NEXT — in order
0. **Preflight:** `git status --short | grep -v ghidra/` (empty) · `git log -1 --format='%h %s'` · `df -h ~`.
1. **P6 rules check** (12 tasks done): re-read CLAUDE.md's rules + DIGEST §3, state "Rules check — re-read complete. Continuing
with A5."
2. **A5 — THE RECORDED RUN** (run Low, read Max; ≈1 h wall): write `tools/verify_contract.sh` per the plan's A5 paragraph —
steps 00 `git rev-parse HEAD` + porcelain (only the R23 `ghidra/` churn allowed) · 01 `make check-env` · 02 family_hseq
regen · 03 `make clean && make extract-all JOBS=16 && make check-all JOBS=16` · 04 `make sdk-dual` (keep both `.map`s; the
two from A3 are already in `.run/P33/verify/`) · 05 `make tools-health` (must contain `0 PHANTOM, 0 TRUNCATED, 0 PAD-TAIL`,
zero `[warn]`) · 06 `make audit-frontier` · 07 `make audit-disc` (4-track disc present in `disks/`; residue 0) · 08
`make report` (three 100 lines, `INCLUDE_ASM stubs : 0`, `Open near-misses: 0`) · 09 SUMMARY.md; each log ends `EXIT=<rc>`
+ timestamp; abort on the first non-zero (R53); `.gitignore` allowlists `.run/P33/verify/` (`*.log *.map *.md *.txt`)
exactly like `.run/P32/t4e/`; then paste SUMMARY's table into `docs/verification.md` §2 (replace the placeholder row).
Runs on the COMMITTED tree (commit B8 first — done). Log, tick, refresh, commit (the logs are tracked).
3. **B9/C3** (Max, P5c-class) → C1 → C2 → … per the task list.
1. **B9/C3 — the preparatory commit** (Max, P5c-class; the plan's B9 + C3 paragraphs): `git rm --cached extracted/retail/
SLUS_007.26 dumps/*.bin tools/brave-CUE/brave.exe tools/ghidra-ext/*.zip && git rm -r --cached ghidra tools/psyq "session
archive"` — files stay on disk, already ignored (B1's `.gitignore`; `git check-ignore -q` each); `tools/psyq/CHECKSUMS.sha256`
→ `tools/psyq_CHECKSUMS.sha256` is ALREADY done (B4); record the two ghidra-ext zip sha256s in SETUP §2.3/§2.4
(`GhidrAssistMCP_2.8.0.zip` `983e2add88d70552596dc3160c1ece52ca6ba8ac006c6c61446a780696815dc1`, `ghidra_psx_ldr_2026.06.04.zip`
`dc57cf1ad126c717f69be63f777d747c9cc0af3b2f833af83eeeac644f8e7c11`); write `docs/public-flip-runbook.md` (the C-block
procedure for Drew: archive repo, bundle, rewrite, verify, adopt, force-push, Support ticket text, probe, flip, aftercare
— from the Approved plan's Block C + risk register); a forward-only `docs/decision-log.md` entry (R31). Checks: `git
ls-files -- <purge paths>` empty; `tools/audit_public.py` → OK (the first time; it FAILS today by design); `make check-env`
0; the R22 logs of A5 stay valid (a `--cached` removal changes no tracked-content bytes — say so in verification.md).
Commit immediately (R42). CAUTION: `.run/P33/verify/*.map` + logs are tracked now — never `git clean -x`.
2. **C1** (design Max, exec xHigh): `.venv/bin/pip install git-filter-repo==2.47.0` (SETUP row) + `tools/public_rewrite/`
(gate_scan.py with `--expect-fail`, hash_dict.py, scrub.py, run_filter.py, build_commit_map.py, resolve_tokens.py,
verify_rewrite.py, absent_scan.py, probe_github.sh — the plan's C1 paragraph has every spec + the measured numbers:
4,401 commits, 149,634 prefixes, 126 twins, 711 resolving citations, `commit:NNNN` tokens). `purge_set.txt` exists (B7).
3. **C2** → **C4** (Drew: create `Druthulu/BFM-decomp-archive` EMPTY + private, `git push --mirror archive`) → C5 → C6 → C7 → C8
→ C9 (Drew force-pushes) → the Support wait (D/E/F land) → C10 flip.
### 4. Files S87 touched
B8: `docs/verification.md` (new), `docs/SETUP.md` (§4.4/§4.6/§4.8/§6.3 pointers, backup posture). B7: `.github/workflows/no-rom.yml`, `tools/audit_public.py`, `tools/compile_only.py`, `tools/public_rewrite/purge_set.txt` (all new), `docs/SETUP.md`. B6: `dumps/CHECKSUMS.sha1` (new), `dumps/INDEX.md`, `docs/memory-map.md`. B5: `tools/ghidra_scripts/ImportAnnotations.java` (3 compile fixes + the `/undefined` resolver), `tools/ghidra_rebuild.sh`
A5: `tools/verify_contract.sh` (new), `tools/audit_frontier.py` (derived denominator lines), `.gitignore` (the `.run/P33/verify/` allowlist), `.run/P33/verify/*` (tracked evidence), `docs/verification.md` §2, regenerated `docs/family-hseq.md` + `docs/progress*.md`/`duplicates*.md`. B8: `docs/verification.md` (new), `docs/SETUP.md` (§4.4/§4.6/§4.8/§6.3 pointers, backup posture). B7: `.github/workflows/no-rom.yml`, `tools/audit_public.py`, `tools/compile_only.py`, `tools/public_rewrite/purge_set.txt` (all new), `docs/SETUP.md`. B6: `dumps/CHECKSUMS.sha1` (new), `dumps/INDEX.md`, `docs/memory-map.md`. B5: `tools/ghidra_scripts/ImportAnnotations.java` (3 compile fixes + the `/undefined` resolver), `tools/ghidra_rebuild.sh`
(`.proof` markers; dies unless `failed=0`), `tools/ghidra_annotations_delta.py` (the three drift classes), new
`tools/ghidra_roster.py`, `tools/ghidra_mcp_start.sh` (silent no-op guard), `.claude/settings.json` (relative hooks),
`Makefile` (roster check in tools-health), `docs/SETUP.md` (P33 B5 section, 5 inventory rows, §2.8), `config/ghidra/*`