phase-37: CHECKPOINT for a fresh session — T4 steps (a)–(f) DONE: ≈90,000 declarations canonical this session (census 98,648 → 2,171 lying / 189 callees, +5,092 K&R sites and +418 cross-binary counted apart), levers 4,010 → 3,730, alias-defined functions 133/149 back, 10 of 12 parked signature bodies landed (func_80157D20 ×132 --map-data, func_80029D3C + 3 callers --with, func_80188A30 void→s32), the 3,546 banner blocks gone; five census blind spots repaired at their cause; story §10 + retrospective §7 advanced, timeline 78 rows; the 🛑 block rewritten with T4's two owed items (the 51 TU-CONFLICT retry, the 593-row disagreement) | R22 check-all: 218 passed, 0 failed of 218 at 06615fe89 | 🛑 T4 NEXT — items (g)/(h), then the T4 ☑ line, P6 rules check, T5 (Max)

This commit is contained in:
Drew T
2026-09-12 21:31:13 -06:00
parent 06615fe891
commit a671f0abe9
17 changed files with 972 additions and 921 deletions
+117 -117
View File
@@ -38,7 +38,7 @@
".section": 7,
"RTP_SND": 22,
"addiu": 22,
"addu": 22,
"addu": 21,
"and": 2,
"la": 136,
"lh": 3,
@@ -53,16 +53,16 @@
},
"kinds": {
"asm-body/direct": 13,
"barrier/direct": 241,
"barrier/direct": 240,
"gte-lever/direct": 356,
"gte-lever/via-macro": 94,
"gte-unsigned/direct": 270,
"gte/direct": 197,
"gte/via-macro": 6250,
"instruction/direct": 202,
"instruction/direct": 201,
"instruction/via-macro": 22,
"keepalive/direct": 327,
"launder/direct": 581,
"keepalive/direct": 323,
"launder/direct": 580,
"launder/via-macro": 33,
"verbatim-body/direct": 2682
}
@@ -77,74 +77,74 @@
"src/800_b_2.c:3087",
"src/md_SC07_003/md_SC07_003.c:3577",
"src/md_SC07_004/md_SC07_004.c:280",
"src/ov_SC01_000/ov_SC01_000_jr_8017BEBC.c:3570",
"src/ov_SC01_009/ov_SC01_009_jr_8017E590.c:4271",
"src/ov_SC01_077/ov_SC01_077_jr_80183CF4.c:3979",
"src/ov_SC01_080/ov_SC01_080_jr_8017AE2C.c:5178",
"src/ov_SC02_011/ov_SC02_011_jr_80183178.c:2139",
"src/ov_SC02_027/ov_SC02_027_jr_8017D898.c:4528",
"src/ov_SC02_027/ov_SC02_027_jr_8017D898.c:8370",
"src/ov_SC02_028/ov_SC02_028_jr_8017D898.c:5461",
"src/ov_SC02_041/ov_SC02_041_jr_8017BEBC.c:7554",
"src/ov_SC03_014/ov_SC03_014_jr_801848E4.c:5025",
"src/ov_SC03_014/ov_SC03_014_jr_801848E4.c:5073",
"src/ov_SC03_024/ov_SC03_024_jr_8017DF84.c:5475",
"src/ov_SC03_024/ov_SC03_024_jr_8017DF84.c:5527",
"src/ov_SC03_024/ov_SC03_024_jr_8017DF84.c:5866",
"src/ov_SC03_024/ov_SC03_024_jr_80183BF8.c:3108",
"src/ov_SC03_118/ov_SC03_118_jr_8017FB84.c:3796",
"src/ov_SC03_118/ov_SC03_118_jr_8017FB84.c:4112",
"src/ov_SC03_121/ov_SC03_121_jr_8017E1D0.c:4568",
"src/ov_SC03_124/ov_SC03_124_jr_8017AE2C.c:6576",
"src/ov_SC03_124/ov_SC03_124_jr_80188544.c:4422",
"src/ov_SC04_002/ov_SC04_002_jr_8017BEBC.c:10069",
"src/ov_SC04_005/ov_SC04_005_jr_8017BEBC.c:9325",
"src/ov_SC04_007/ov_SC04_007_jr_8017BEBC.c:6630",
"src/ov_SC04_011/ov_SC04_011_jr_8017D494.c:7470",
"src/ov_SC04_011/ov_SC04_011_jr_8017D494.c:10273",
"src/ov_SC04_011/ov_SC04_011_jr_8017D494.c:13414",
"src/ov_SC05_001/ov_SC05_001_jr_8017BEBC.c:5814",
"src/ov_SC05_003/ov_SC05_003_jr_8017BEBC.c:4815",
"src/ov_SC05_005/ov_SC05_005_jr_8017D898.c:4026",
"src/ov_SC05_007/ov_SC05_007_jr_8017BEBC.c:3335",
"src/ov_SC05_018/ov_SC05_018_jr_8017D604.c:4942",
"src/ov_SC06_000/ov_SC06_000_jr_8017AE2C.c:8444",
"src/ov_SC06_000/ov_SC06_000_jr_8017AE2C.c:8484",
"src/ov_SC06_000/ov_SC06_000_jr_8017AE2C.c:8811"
"src/ov_SC01_000/ov_SC01_000_jr_8017BEBC.c:3564",
"src/ov_SC01_009/ov_SC01_009_jr_8017E590.c:4265",
"src/ov_SC01_077/ov_SC01_077_jr_80183CF4.c:3973",
"src/ov_SC01_080/ov_SC01_080_jr_8017AE2C.c:5172",
"src/ov_SC02_011/ov_SC02_011_jr_80183178.c:2138",
"src/ov_SC02_027/ov_SC02_027_jr_8017D898.c:4521",
"src/ov_SC02_027/ov_SC02_027_jr_8017D898.c:8363",
"src/ov_SC02_028/ov_SC02_028_jr_8017D898.c:5455",
"src/ov_SC02_041/ov_SC02_041_jr_8017BEBC.c:7548",
"src/ov_SC03_014/ov_SC03_014_jr_801848E4.c:5019",
"src/ov_SC03_014/ov_SC03_014_jr_801848E4.c:5067",
"src/ov_SC03_024/ov_SC03_024_jr_8017DF84.c:5467",
"src/ov_SC03_024/ov_SC03_024_jr_8017DF84.c:5519",
"src/ov_SC03_024/ov_SC03_024_jr_8017DF84.c:5858",
"src/ov_SC03_024/ov_SC03_024_jr_80183BF8.c:3101",
"src/ov_SC03_118/ov_SC03_118_jr_8017FB84.c:3790",
"src/ov_SC03_118/ov_SC03_118_jr_8017FB84.c:4106",
"src/ov_SC03_121/ov_SC03_121_jr_8017E1D0.c:4562",
"src/ov_SC03_124/ov_SC03_124_jr_8017AE2C.c:6567",
"src/ov_SC03_124/ov_SC03_124_jr_80188544.c:4416",
"src/ov_SC04_002/ov_SC04_002_jr_8017BEBC.c:10063",
"src/ov_SC04_005/ov_SC04_005_jr_8017BEBC.c:9319",
"src/ov_SC04_007/ov_SC04_007_jr_8017BEBC.c:6624",
"src/ov_SC04_011/ov_SC04_011_jr_8017D494.c:7464",
"src/ov_SC04_011/ov_SC04_011_jr_8017D494.c:10267",
"src/ov_SC04_011/ov_SC04_011_jr_8017D494.c:13405",
"src/ov_SC05_001/ov_SC05_001_jr_8017BEBC.c:5808",
"src/ov_SC05_003/ov_SC05_003_jr_8017BEBC.c:4809",
"src/ov_SC05_005/ov_SC05_005_jr_8017D898.c:4019",
"src/ov_SC05_007/ov_SC05_007_jr_8017BEBC.c:3329",
"src/ov_SC05_018/ov_SC05_018_jr_8017D604.c:4936",
"src/ov_SC06_000/ov_SC06_000_jr_8017AE2C.c:8438",
"src/ov_SC06_000/ov_SC06_000_jr_8017AE2C.c:8478",
"src/ov_SC06_000/ov_SC06_000_jr_8017AE2C.c:8805"
]
},
"classes": {
"A": {
"bodies": 1321,
"distinct_bodies": 490,
"bodies": 1182,
"distinct_bodies": 479,
"file_scope": 0,
"in_bodies": 2141,
"in_bodies": 1868,
"kinds": {
"pin": 2141
"pin": 1868
},
"marked": 2141,
"sites": 2141,
"tus": 1075,
"marked": 1868,
"sites": 1868,
"tus": 942,
"unmarked": 0
},
"B": {
"bodies": 4593,
"distinct_bodies": 660,
"bodies": 4587,
"distinct_bodies": 655,
"file_scope": 13,
"in_bodies": 11255,
"in_bodies": 11248,
"kinds": {
"asm-body": 13,
"barrier": 241,
"barrier": 240,
"gte": 6447,
"gte-lever": 450,
"gte-unsigned": 270,
"instruction": 224,
"keepalive": 327,
"launder": 614,
"instruction": 223,
"keepalive": 323,
"launder": 613,
"verbatim-body": 2682
},
"marked": 2353,
"sites": 11268,
"marked": 2346,
"sites": 11261,
"tus": 1425,
"unmarked": 8915
},
@@ -178,30 +178,30 @@
"unmarked": 50
},
"E": {
"bodies": 1100,
"distinct_bodies": 161,
"file_scope": 6432,
"in_bodies": 1370,
"bodies": 734,
"distinct_bodies": 131,
"file_scope": 5094,
"in_bodies": 902,
"kinds": {
"asm-label": 7802
"asm-label": 5996
},
"marked": 0,
"sites": 7802,
"tus": 2090,
"unmarked": 7802
"sites": 5996,
"tus": 2013,
"unmarked": 5996
},
"F": {
"bodies": 428,
"distinct_bodies": 27,
"bodies": 285,
"distinct_bodies": 24,
"file_scope": 0,
"in_bodies": 445,
"in_bodies": 302,
"kinds": {
"builtin": 445
"builtin": 302
},
"marked": 0,
"sites": 445,
"tus": 302,
"unmarked": 445
"sites": 302,
"tus": 285,
"unmarked": 302
},
"G": {
"bodies": 1,
@@ -250,9 +250,9 @@
"coverage": {
"asm": {
"comment_dead": 6781,
"live": 14972,
"live": 12886,
"macro_block": 194,
"raw": 21947
"raw": 19861
},
"attribute": {
"comment_dead": 0,
@@ -262,26 +262,26 @@
},
"builtin": {
"comment_dead": 154,
"live": 445,
"live": 302,
"macro_block": 0,
"raw": 599
"raw": 456
},
"register": {
"comment_dead": 8575,
"live": 2191,
"live": 1918,
"macro_block": 18,
"raw": 10784
"raw": 10511
},
"volatile": {
"comment_dead": 2607,
"live": 1682,
"live": 1679,
"macro_block": 82,
"raw": 4371
"raw": 4368
}
},
"coverage_ok": true,
"elapsed_s": 21.8,
"generated": "2026-09-11",
"elapsed_s": 31.5,
"generated": "2026-09-12",
"gte_levers": {
"direct": 356,
"marked": 450,
@@ -291,15 +291,15 @@
"via_macro": 94,
"what": "GTE ops whose clobbers exceed the canonical macro's (a scheduling steer): class-B levers INSIDE the headline number since T5 (2026-09-09), marked, 0 at the close"
},
"head": "23fc5d215",
"head": "274223396",
"headers": 3181,
"levers_AB": {
"asm": 1869,
"bodies": 1980,
"distinct_bodies": 674,
"marked": 4010,
"pins": 2141,
"sites": 4010,
"asm": 1862,
"bodies": 1838,
"distinct_bodies": 662,
"marked": 3730,
"pins": 1868,
"sites": 3730,
"unmarked": 0,
"what": "register pins + asm statements excluding GTE ops: the classes the phase drives to 0"
},
@@ -368,21 +368,6 @@
2,
1
],
[
"gte_rt",
1,
1
],
[
"gte_ldv0_m",
1,
1
],
[
"gte_rtv0_m",
1,
1
],
[
"COPY_TO_FAAC",
1,
@@ -408,6 +393,21 @@
1,
1
],
[
"gte_rt",
1,
1
],
[
"gte_ldv0_m",
1,
1
],
[
"gte_rtv0_m",
1,
1
],
[
"ENGINE_SHB",
1,
@@ -442,19 +442,19 @@
"$13": 5,
"$14": 5,
"$15": 1,
"$16": 67,
"$16": 66,
"$17": 26,
"$18": 26,
"$19": 16,
"$2": 753,
"$2": 751,
"$20": 7,
"$21": 5,
"$22": 3,
"$23": 6,
"$25": 1,
"$3": 156,
"$4": 485,
"$5": 369,
"$3": 154,
"$4": 348,
"$5": 238,
"$6": 59,
"$7": 24,
"$8": 23,
@@ -464,30 +464,30 @@
"a1": 2,
"v0": 1
},
"sites": 2141,
"sites": 1868,
"sp": 0,
"spelling": {
"__asm__": 2120,
"__asm__": 1847,
"asm": 21
},
"volatile_qualified": 0,
"zero": 54
},
"src_stamp": "ab7aba1c21c89889",
"src_stamp": "a91c084f1ac9e504",
"tus": 4121,
"unclassified": 0,
"union_AD": {
"bodies": 5746,
"bodies": 5604,
"by_kind": {
"main": 124,
"main": 120,
"md": 105,
"ov": 5352,
"ov": 5215,
"resident": 6,
"shared": 159
"shared": 158
},
"copies_in_multi": 4849,
"distinct_bodies": 1007,
"multi_copy_classes": 110
"copies_in_multi": 4720,
"distinct_bodies": 996,
"multi_copy_classes": 112
},
"verbatim_excluded": {
"functions": 13,
+16 -16
View File
@@ -1,32 +1,32 @@
lever_census: 218 binaries · 4,121 TUs + 3,181 headers · coverage OK · unclassified 0 · verbatim excluded 13 fn / 14 sites (manifest 13)
coverage asm raw 21947 = live 14972 + macro-block 194 + comment/dead 6781
coverage register raw 10784 = live 2191 + macro-block 18 + comment/dead 8575
coverage volatile raw 4371 = live 1682 + macro-block 82 + comment/dead 2607
coverage builtin raw 599 = live 445 + macro-block 0 + comment/dead 154
coverage asm raw 19861 = live 12886 + macro-block 194 + comment/dead 6781
coverage register raw 10511 = live 1918 + macro-block 18 + comment/dead 8575
coverage volatile raw 4368 = live 1679 + macro-block 82 + comment/dead 2607
coverage builtin raw 456 = live 302 + macro-block 0 + comment/dead 154
coverage attribute raw 76 = live 76 + macro-block 0 + comment/dead 0
class sites in-bodies file-scope bodies distinct TUs marked unmarked kinds
A pins 2141 2141 0 1321 490 1075 2141 0 {'pin': 2141}
B asm 11268 11255 13 4593 660 1425 2353 8915 {'gte': 6447, 'gte-lever': 450, 'gte-unsigned': 270, 'barrier': 241, 'launder': 614, 'instruction': 224, 'asm-body': 13, 'keepalive': 327, 'verbatim-body': 2682}
A pins 1868 1868 0 1182 479 942 1868 0 {'pin': 1868}
B asm 11261 11248 13 4587 655 1425 2346 8915 {'gte': 6447, 'gte-lever': 450, 'gte-unsigned': 270, 'barrier': 240, 'launder': 613, 'instruction': 223, 'asm-body': 13, 'keepalive': 323, 'verbatim-body': 2682}
C volatile 1589 1437 152 495 94 609 14 1575 {'decl-body': 58, 'decl-file': 152, 'cast': 1377, 'param': 2}
D register 50 50 0 47 47 6 0 50 {'register': 50}
E asm-label 7802 1370 6432 1100 161 2090 0 7802 {'asm-label': 7802}
F builtin 445 445 0 428 27 302 0 445 {'builtin': 445}
E asm-label 5996 902 5094 734 131 2013 0 5996 {'asm-label': 5996}
F builtin 302 302 0 285 24 285 0 302 {'builtin': 302}
G attribute 76 1 75 1 1 40 0 76 {'attribute': 76}
UNION A–D: 5,746 bodies · 1,007 distinct (addresses normalized) · 110 multi-copy classes holding 4,849 bodies · by kind {'ov': 5352, 'main': 124, 'md': 105, 'shared': 159, 'resident': 6}
THE PHASE'S NUMBER (pins + asm statements, GTE excluded): 4,010 sites in 1,980 bodies (674 distinct) · marked !FAKE 4,010 · UNMARKED 0
UNION A–D: 5,604 bodies · 996 distinct (addresses normalized) · 112 multi-copy classes holding 4,720 bodies · by kind {'ov': 5215, 'shared': 158, 'main': 120, 'md': 105, 'resident': 6}
THE PHASE'S NUMBER (pins + asm statements, GTE excluded): 3,730 sites in 1,838 bodies (662 distinct) · marked !FAKE 3,730 · UNMARKED 0
orphan !FAKE markers (no pin/asm site on the line nor below): 0
marked ordinary-C fakes kept by Drew's S104 ruling (a) (`do { } while (0)`, dead initialisers; NOT levers): 53
GTE levers (clobbers beyond the canonical macro's): 450 sites (94 via a variant macro, 356 direct) · marked 450 · UNMARKED 0 · unsigned GTE statements 270
per-TU asm macro definitions outside the GTE header: 314 {'gte': 150, 'launder': 154, 'instruction': 9, 'barrier': 1} (GTE variants 64)
pins: 2,141 · $0 54 · $sp 0 · with initializer 201 · volatile-qualified 0 · bare-name 6 · spellings {'__asm__': 2120, 'asm': 21}
per-TU asm macro definitions outside the GTE header: 314 {'launder': 154, 'gte': 150, 'instruction': 9, 'barrier': 1} (GTE variants 64)
pins: 1,868 · $0 54 · $sp 0 · with initializer 201 · volatile-qualified 0 · bare-name 6 · spellings {'__asm__': 1847, 'asm': 21}
whole-body asm routines in C shells, manifest PERMANENT (hand asm, NOT levers): 22 routines · 2,682 sites (2,660 private copies + 22 shared headers); asm-bodies NOT permanent (levers): 13 site(s) ['func_8001E378:DECOMPILE-NOW', 'func_80020F34:DECOMPILE-NOW', 'func_800249F0:DECOMPILE-NOW', 'func_80025CBC:DECOMPILE-NOW', 'func_80026514:UNCERTAIN', 'func_800268D0:UNCERTAIN', 'func_80027058:DECOMPILE-NOW', 'func_80027200:DECOMPILE-NOW', 'func_800CBA44:DECOMPILE-NOW', 'func_8017D810:DECOMPILE-NOW', 'func_8017E26C:UNCERTAIN', 'func_80184440:DECOMPILE-NOW', 'func_801A3BCC:DECOMPILE-NOW']
asm kinds: {'asm-body/direct': 13, 'barrier/direct': 241, 'gte/direct': 197, 'gte/via-macro': 6250, 'gte-lever/direct': 356, 'gte-lever/via-macro': 94, 'gte-unsigned/direct': 270, 'instruction/direct': 202, 'instruction/via-macro': 22, 'keepalive/direct': 327, 'launder/direct': 581, 'launder/via-macro': 33, 'verbatim-body/direct': 2682}
instruction mnemonics: {'la': 136, 'addiu': 22, 'addu': 22, 'RTP_SND': 22, '.section': 7, 'lui': 3, 'lh': 3, 'and': 2, 'mult': 1, 'mfhi': 1, 'sll': 1, 'li': 1, 'lw': 1, 'nop': 1, 'srl': 1}
asm kinds: {'asm-body/direct': 13, 'barrier/direct': 240, 'gte/direct': 197, 'gte/via-macro': 6250, 'gte-lever/direct': 356, 'gte-lever/via-macro': 94, 'gte-unsigned/direct': 270, 'instruction/direct': 201, 'instruction/via-macro': 22, 'keepalive/direct': 323, 'launder/direct': 580, 'launder/via-macro': 33, 'verbatim-body/direct': 2682}
instruction mnemonics: {'la': 136, 'addiu': 22, 'RTP_SND': 22, 'addu': 21, '.section': 7, 'lh': 3, 'lui': 3, 'and': 2, 'mult': 1, 'mfhi': 1, 'sll': 1, 'li': 1, 'lw': 1, 'nop': 1, 'srl': 1}
gte mnemonics: {'gte_ldv0': 768, 'gte_stlvnl': 593, 'gte_stsxy': 457, 'gte_rtps': 448, 'gte_stflg': 433, 'gte_rtpt': 361, 'gte_SetRotMatrix': 253, 'gte_stsxy3': 245, 'gte_SetTransMatrix': 231, 'gte_rtv0tr': 229, 'gte_ldv3': 186, 'gte_ldv3c': 184, 'gte_stsv': 161, 'lwc2': 158, 'gte_stsz4': 149, 'gte_stsz3': 147, 'gte_stszotz': 134, 'gte_dpcl': 134, 'gte_stclmv': 114, 'gte_stsxy3_f3': 111, 'gte_nclip': 108, 'gte_stopz': 108, 'gte_stsxy3c': 108, 'gte_rtir': 81, 'gte_stsxy3_ft3': 79, 'gte_ldclmv': 78, 'gte_avsz4': 65, 'gte_stotz': 61, 'gte_ldrgb': 30, 'gte_nccs': 25}
asm-bearing macro definitions: 314 (20 names, 3 with >1 text) kinds {'gte': 150, 'launder': 154, 'instruction': 9, 'barrier': 1}
asm-bearing macro definitions: 314 (20 names, 3 with >1 text) kinds {'launder': 154, 'gte': 150, 'instruction': 9, 'barrier': 1}
controls (R39):
src/800.c func_800226C0 pins got 14 expected 14 OK
src/shared/ov/func_80178004.h pins got 8 expected 8 OK
ov_SC03_006 func_801896EC bare-name pins got 2 expected 2 OK
engine_prelude.h asm sites (a macro definition only) got 0 expected 0 OK
elapsed 21.8 s
elapsed 31.5 s
+154 -154
View File
@@ -1,7 +1,7 @@
{
"head": "4293d0a84",
"head": "06615fe89",
"stamp": "e34b6679685f",
"generated": "2026-09-12 21:11",
"generated": "2026-09-12 21:17",
"aliases": [
"main",
"md_SC07_004",
@@ -21,176 +21,176 @@
"main": {
"objects": 85,
"identical": 85,
"seconds": 8.851000000000004,
"mean_s": 0.104
"seconds": 7.151999999999999,
"mean_s": 0.084
},
"md_SC07_004": {
"objects": 1,
"identical": 1,
"seconds": 0.598,
"mean_s": 0.598
"seconds": 0.519,
"mean_s": 0.519
},
"ov_SC03_015": {
"objects": 32,
"identical": 32,
"seconds": 5.472,
"mean_s": 0.171
"seconds": 4.901,
"mean_s": 0.153
},
"ov_SC04_011": {
"objects": 28,
"identical": 28,
"seconds": 4.567000000000001,
"mean_s": 0.163
"seconds": 4.044,
"mean_s": 0.144
}
},
"per_object_seconds": {
"build/src/800.o": 0.904,
"build/src/800_b.o": 0.098,
"build/src/800_b_2.o": 0.43,
"build/src/800.o": 0.813,
"build/src/800_b.o": 0.088,
"build/src/800_b_2.o": 0.332,
"build/src/800_b_o0a.o": 0.081,
"build/src/800_c.o": 0.243,
"build/src/800b2.o": 0.093,
"build/src/apicard1.o": 0.119,
"build/src/apicard2.o": 0.091,
"build/src/apicard3.o": 0.115,
"build/src/apicard4.o": 0.083,
"build/src/apicard5.o": 0.089,
"build/src/apicard6.o": 0.084,
"build/src/apicard7.o": 0.087,
"build/src/boot.o": 0.137,
"build/src/gap.o": 0.095,
"build/src/libapi1.o": 0.1,
"build/src/libapi2.o": 0.072,
"build/src/libc2_1.o": 0.08,
"build/src/libc2_2.o": 0.071,
"build/src/libcd1.o": 0.104,
"build/src/libcd2.o": 0.108,
"build/src/libetc.o": 0.092,
"build/src/libgpu.o": 0.077,
"build/src/libgpu2.o": 0.093,
"build/src/libgs1.o": 0.072,
"build/src/libgs2.o": 0.076,
"build/src/libgs3.o": 0.075,
"build/src/libgs4.o": 0.085,
"build/src/libgs5.o": 0.09,
"build/src/libgs6.o": 0.093,
"build/src/libgs7.o": 0.078,
"build/src/libgs8.o": 0.088,
"build/src/libgte1.o": 0.074,
"build/src/800_c.o": 0.209,
"build/src/800b2.o": 0.099,
"build/src/apicard1.o": 0.077,
"build/src/apicard2.o": 0.07,
"build/src/apicard3.o": 0.061,
"build/src/apicard4.o": 0.069,
"build/src/apicard5.o": 0.068,
"build/src/apicard6.o": 0.065,
"build/src/apicard7.o": 0.082,
"build/src/boot.o": 0.093,
"build/src/gap.o": 0.071,
"build/src/libapi1.o": 0.083,
"build/src/libapi2.o": 0.067,
"build/src/libc2_1.o": 0.074,
"build/src/libc2_2.o": 0.066,
"build/src/libcd1.o": 0.083,
"build/src/libcd2.o": 0.068,
"build/src/libetc.o": 0.069,
"build/src/libgpu.o": 0.069,
"build/src/libgpu2.o": 0.074,
"build/src/libgs1.o": 0.074,
"build/src/libgs2.o": 0.061,
"build/src/libgs3.o": 0.071,
"build/src/libgs4.o": 0.066,
"build/src/libgs5.o": 0.064,
"build/src/libgs6.o": 0.077,
"build/src/libgs7.o": 0.066,
"build/src/libgs8.o": 0.064,
"build/src/libgte1.o": 0.069,
"build/src/libgte10.o": 0.081,
"build/src/libgte11.o": 0.089,
"build/src/libgte12.o": 0.072,
"build/src/libgte13.o": 0.109,
"build/src/libgte14.o": 0.088,
"build/src/libgte15.o": 0.071,
"build/src/libgte16.o": 0.08,
"build/src/libgte17.o": 0.104,
"build/src/libgte18.o": 0.082,
"build/src/libgte19.o": 0.083,
"build/src/libgte2.o": 0.082,
"build/src/libgte20.o": 0.075,
"build/src/libgte21.o": 0.077,
"build/src/libgte22.o": 0.07,
"build/src/libgte23.o": 0.069,
"build/src/libgte24.o": 0.068,
"build/src/libgte25.o": 0.091,
"build/src/libgte26.o": 0.079,
"build/src/libgte27.o": 0.082,
"build/src/libgte28.o": 0.071,
"build/src/libgte29.o": 0.084,
"build/src/libgte3.o": 0.086,
"build/src/libgte30.o": 0.079,
"build/src/libgte4.o": 0.091,
"build/src/libgte5.o": 0.094,
"build/src/libgte6.o": 0.081,
"build/src/libgte7.o": 0.089,
"build/src/libgte8.o": 0.08,
"build/src/libgte9.o": 0.129,
"build/src/libmcrd1.o": 0.101,
"build/src/libmcrd2.o": 0.093,
"build/src/libpad1.o": 0.103,
"build/src/libpad2.o": 0.08,
"build/src/sgap.o": 0.098,
"build/src/libgte11.o": 0.065,
"build/src/libgte12.o": 0.055,
"build/src/libgte13.o": 0.07,
"build/src/libgte14.o": 0.068,
"build/src/libgte15.o": 0.066,
"build/src/libgte16.o": 0.06,
"build/src/libgte17.o": 0.072,
"build/src/libgte18.o": 0.086,
"build/src/libgte19.o": 0.066,
"build/src/libgte2.o": 0.067,
"build/src/libgte20.o": 0.065,
"build/src/libgte21.o": 0.063,
"build/src/libgte22.o": 0.073,
"build/src/libgte23.o": 0.063,
"build/src/libgte24.o": 0.083,
"build/src/libgte25.o": 0.058,
"build/src/libgte26.o": 0.066,
"build/src/libgte27.o": 0.063,
"build/src/libgte28.o": 0.072,
"build/src/libgte29.o": 0.061,
"build/src/libgte3.o": 0.065,
"build/src/libgte30.o": 0.066,
"build/src/libgte4.o": 0.069,
"build/src/libgte5.o": 0.064,
"build/src/libgte6.o": 0.068,
"build/src/libgte7.o": 0.06,
"build/src/libgte8.o": 0.071,
"build/src/libgte9.o": 0.067,
"build/src/libmcrd1.o": 0.079,
"build/src/libmcrd2.o": 0.072,
"build/src/libpad1.o": 0.066,
"build/src/libpad2.o": 0.075,
"build/src/sgap.o": 0.073,
"build/src/sgap_2.o": 0.077,
"build/src/sgap_3.o": 0.084,
"build/src/sgap_4.o": 0.085,
"build/src/sgap_5.o": 0.082,
"build/src/sgap_6.o": 0.072,
"build/src/sgap_8.o": 0.164,
"build/src/snd1.o": 0.109,
"build/src/snd10.o": 0.089,
"build/src/snd11.o": 0.081,
"build/src/snd12.o": 0.077,
"build/src/snd2.o": 0.085,
"build/src/snd3.o": 0.089,
"build/src/snd4.o": 0.121,
"build/src/snd5.o": 0.106,
"build/src/snd6.o": 0.095,
"build/src/snd7.o": 0.088,
"build/src/snd8.o": 0.073,
"build/src/snd9.o": 0.086,
"build/src/md_SC07_004/md_SC07_004.o": 0.598,
"build/src/ov_SC03_015/ov_SC03_015.o": 0.157,
"build/src/ov_SC03_015/ov_SC03_015_after.o": 0.61,
"build/src/ov_SC03_015/ov_SC03_015_jr_8012ACE0.o": 0.457,
"build/src/ov_SC03_015/ov_SC03_015_jr_80135888.o": 0.076,
"build/src/ov_SC03_015/ov_SC03_015_jr_80135A4C.o": 0.073,
"build/src/ov_SC03_015/ov_SC03_015_jr_80135D20.o": 0.149,
"build/src/ov_SC03_015/ov_SC03_015_jr_801380E0.o": 0.179,
"build/src/ov_SC03_015/ov_SC03_015_jr_8013C98C.o": 0.149,
"build/src/ov_SC03_015/ov_SC03_015_jr_8013F350.o": 0.097,
"build/src/ov_SC03_015/ov_SC03_015_jr_8013FFD8.o": 0.081,
"build/src/ov_SC03_015/ov_SC03_015_jr_80140608.o": 0.208,
"build/src/ov_SC03_015/ov_SC03_015_jr_8015444C.o": 0.082,
"build/src/ov_SC03_015/ov_SC03_015_jr_80154C24.o": 0.2,
"build/src/ov_SC03_015/ov_SC03_015_jr_801588CC.o": 0.116,
"build/src/ov_SC03_015/ov_SC03_015_jr_80159C84.o": 0.094,
"build/src/ov_SC03_015/ov_SC03_015_jr_8015A3C8.o": 0.087,
"build/src/ov_SC03_015/ov_SC03_015_jr_8015AE2C.o": 0.106,
"build/src/ov_SC03_015/ov_SC03_015_jr_8015C32C.o": 0.536,
"build/src/ov_SC03_015/ov_SC03_015_jr_8016AB6C.o": 0.311,
"build/src/ov_SC03_015/ov_SC03_015_jr_80171B4C.o": 0.11,
"build/src/ov_SC03_015/ov_SC03_015_jr_801734BC.o": 0.228,
"build/src/ov_SC03_015/ov_SC03_015_jr_801789AC.o": 0.069,
"build/src/ov_SC03_015/ov_SC03_015_jr_80178D40.o": 0.116,
"build/src/ov_SC03_015/ov_SC03_015_jr_8017A4AC.o": 0.07,
"build/src/ov_SC03_015/ov_SC03_015_jr_8017AE2C.o": 0.195,
"build/src/ov_SC03_015/ov_SC03_015_jr_8017EB7C.o": 0.227,
"build/src/ov_SC03_015/ov_SC03_015_jr_80184440.o": 0.066,
"build/src/ov_SC03_015/ov_SC03_015_jr_801848E4.o": 0.32,
"build/src/ov_SC03_015/ov_SC03_015_o0b.o": 0.074,
"build/src/ov_SC03_015/ov_SC03_015_o0c.o": 0.073,
"build/src/ov_SC03_015/ov_SC03_015_o0d.o": 0.072,
"build/src/ov_SC03_015/ov_SC03_015_o0e.o": 0.084,
"build/src/ov_SC04_011/ov_SC04_011.o": 0.148,
"build/src/ov_SC04_011/ov_SC04_011_after.o": 0.486,
"build/src/ov_SC04_011/ov_SC04_011_jr_8012ACE0.o": 0.393,
"build/src/ov_SC04_011/ov_SC04_011_jr_80135888.o": 0.058,
"build/src/ov_SC04_011/ov_SC04_011_jr_80135A4C.o": 0.061,
"build/src/ov_SC04_011/ov_SC04_011_jr_80135D20.o": 0.139,
"build/src/ov_SC04_011/ov_SC04_011_jr_801380E0.o": 0.18,
"build/src/ov_SC04_011/ov_SC04_011_jr_8013C98C.o": 0.145,
"build/src/ov_SC04_011/ov_SC04_011_jr_8013F350.o": 0.095,
"build/src/ov_SC04_011/ov_SC04_011_jr_8013FFD8.o": 0.088,
"build/src/ov_SC04_011/ov_SC04_011_jr_80140608.o": 0.199,
"build/src/ov_SC04_011/ov_SC04_011_jr_8015444C.o": 0.082,
"build/src/ov_SC04_011/ov_SC04_011_jr_80154C24.o": 0.196,
"build/src/ov_SC04_011/ov_SC04_011_jr_801588CC.o": 0.112,
"build/src/ov_SC04_011/ov_SC04_011_jr_80159C84.o": 0.079,
"build/src/ov_SC04_011/ov_SC04_011_jr_8015A3C8.o": 0.086,
"build/src/ov_SC04_011/ov_SC04_011_jr_8015AE2C.o": 0.109,
"build/src/ov_SC04_011/ov_SC04_011_jr_8015C32C.o": 0.387,
"build/src/ov_SC04_011/ov_SC04_011_jr_8016AB6C.o": 0.25,
"build/src/ov_SC04_011/ov_SC04_011_jr_80171B4C.o": 0.115,
"build/src/ov_SC04_011/ov_SC04_011_jr_801734BC.o": 0.186,
"build/src/ov_SC04_011/ov_SC04_011_jr_801789AC.o": 0.074,
"build/src/ov_SC04_011/ov_SC04_011_jr_80178D40.o": 0.104,
"build/src/ov_SC04_011/ov_SC04_011_jr_8017A4AC.o": 0.075,
"build/src/ov_SC04_011/ov_SC04_011_jr_8017AE2C.o": 0.12,
"build/src/ov_SC04_011/ov_SC04_011_jr_8017D494.o": 0.463,
"build/src/ov_SC04_011/ov_SC04_011_o0b.o": 0.065,
"build/src/ov_SC04_011/ov_SC04_011_o0c.o": 0.072
"build/src/sgap_3.o": 0.067,
"build/src/sgap_4.o": 0.073,
"build/src/sgap_5.o": 0.07,
"build/src/sgap_6.o": 0.08,
"build/src/sgap_8.o": 0.08,
"build/src/snd1.o": 0.079,
"build/src/snd10.o": 0.066,
"build/src/snd11.o": 0.072,
"build/src/snd12.o": 0.07,
"build/src/snd2.o": 0.078,
"build/src/snd3.o": 0.074,
"build/src/snd4.o": 0.068,
"build/src/snd5.o": 0.073,
"build/src/snd6.o": 0.074,
"build/src/snd7.o": 0.064,
"build/src/snd8.o": 0.06,
"build/src/snd9.o": 0.066,
"build/src/md_SC07_004/md_SC07_004.o": 0.519,
"build/src/ov_SC03_015/ov_SC03_015.o": 0.122,
"build/src/ov_SC03_015/ov_SC03_015_after.o": 0.541,
"build/src/ov_SC03_015/ov_SC03_015_jr_8012ACE0.o": 0.434,
"build/src/ov_SC03_015/ov_SC03_015_jr_80135888.o": 0.075,
"build/src/ov_SC03_015/ov_SC03_015_jr_80135A4C.o": 0.07,
"build/src/ov_SC03_015/ov_SC03_015_jr_80135D20.o": 0.14,
"build/src/ov_SC03_015/ov_SC03_015_jr_801380E0.o": 0.162,
"build/src/ov_SC03_015/ov_SC03_015_jr_8013C98C.o": 0.127,
"build/src/ov_SC03_015/ov_SC03_015_jr_8013F350.o": 0.084,
"build/src/ov_SC03_015/ov_SC03_015_jr_8013FFD8.o": 0.069,
"build/src/ov_SC03_015/ov_SC03_015_jr_80140608.o": 0.196,
"build/src/ov_SC03_015/ov_SC03_015_jr_8015444C.o": 0.087,
"build/src/ov_SC03_015/ov_SC03_015_jr_80154C24.o": 0.182,
"build/src/ov_SC03_015/ov_SC03_015_jr_801588CC.o": 0.1,
"build/src/ov_SC03_015/ov_SC03_015_jr_80159C84.o": 0.064,
"build/src/ov_SC03_015/ov_SC03_015_jr_8015A3C8.o": 0.065,
"build/src/ov_SC03_015/ov_SC03_015_jr_8015AE2C.o": 0.093,
"build/src/ov_SC03_015/ov_SC03_015_jr_8015C32C.o": 0.472,
"build/src/ov_SC03_015/ov_SC03_015_jr_8016AB6C.o": 0.28,
"build/src/ov_SC03_015/ov_SC03_015_jr_80171B4C.o": 0.1,
"build/src/ov_SC03_015/ov_SC03_015_jr_801734BC.o": 0.215,
"build/src/ov_SC03_015/ov_SC03_015_jr_801789AC.o": 0.063,
"build/src/ov_SC03_015/ov_SC03_015_jr_80178D40.o": 0.112,
"build/src/ov_SC03_015/ov_SC03_015_jr_8017A4AC.o": 0.072,
"build/src/ov_SC03_015/ov_SC03_015_jr_8017AE2C.o": 0.175,
"build/src/ov_SC03_015/ov_SC03_015_jr_8017EB7C.o": 0.202,
"build/src/ov_SC03_015/ov_SC03_015_jr_80184440.o": 0.056,
"build/src/ov_SC03_015/ov_SC03_015_jr_801848E4.o": 0.292,
"build/src/ov_SC03_015/ov_SC03_015_o0b.o": 0.061,
"build/src/ov_SC03_015/ov_SC03_015_o0c.o": 0.06,
"build/src/ov_SC03_015/ov_SC03_015_o0d.o": 0.059,
"build/src/ov_SC03_015/ov_SC03_015_o0e.o": 0.071,
"build/src/ov_SC04_011/ov_SC04_011.o": 0.117,
"build/src/ov_SC04_011/ov_SC04_011_after.o": 0.435,
"build/src/ov_SC04_011/ov_SC04_011_jr_8012ACE0.o": 0.355,
"build/src/ov_SC04_011/ov_SC04_011_jr_80135888.o": 0.047,
"build/src/ov_SC04_011/ov_SC04_011_jr_80135A4C.o": 0.048,
"build/src/ov_SC04_011/ov_SC04_011_jr_80135D20.o": 0.119,
"build/src/ov_SC04_011/ov_SC04_011_jr_801380E0.o": 0.161,
"build/src/ov_SC04_011/ov_SC04_011_jr_8013C98C.o": 0.123,
"build/src/ov_SC04_011/ov_SC04_011_jr_8013F350.o": 0.075,
"build/src/ov_SC04_011/ov_SC04_011_jr_8013FFD8.o": 0.062,
"build/src/ov_SC04_011/ov_SC04_011_jr_80140608.o": 0.177,
"build/src/ov_SC04_011/ov_SC04_011_jr_8015444C.o": 0.077,
"build/src/ov_SC04_011/ov_SC04_011_jr_80154C24.o": 0.172,
"build/src/ov_SC04_011/ov_SC04_011_jr_801588CC.o": 0.082,
"build/src/ov_SC04_011/ov_SC04_011_jr_80159C84.o": 0.071,
"build/src/ov_SC04_011/ov_SC04_011_jr_8015A3C8.o": 0.074,
"build/src/ov_SC04_011/ov_SC04_011_jr_8015AE2C.o": 0.099,
"build/src/ov_SC04_011/ov_SC04_011_jr_8015C32C.o": 0.364,
"build/src/ov_SC04_011/ov_SC04_011_jr_8016AB6C.o": 0.224,
"build/src/ov_SC04_011/ov_SC04_011_jr_80171B4C.o": 0.101,
"build/src/ov_SC04_011/ov_SC04_011_jr_801734BC.o": 0.17,
"build/src/ov_SC04_011/ov_SC04_011_jr_801789AC.o": 0.063,
"build/src/ov_SC04_011/ov_SC04_011_jr_80178D40.o": 0.094,
"build/src/ov_SC04_011/ov_SC04_011_jr_8017A4AC.o": 0.066,
"build/src/ov_SC04_011/ov_SC04_011_jr_8017AE2C.o": 0.103,
"build/src/ov_SC04_011/ov_SC04_011_jr_8017D494.o": 0.455,
"build/src/ov_SC04_011/ov_SC04_011_o0b.o": 0.054,
"build/src/ov_SC04_011/ov_SC04_011_o0c.o": 0.056
},
"ok": true,
"seconds": 2.3
"seconds": 2.1
}
File diff suppressed because one or more lines are too long
File diff suppressed because it is too large Load Diff
+14 -14
View File
@@ -1,4 +1,4 @@
type_census — 2026-09-13T02:13:23Z at 2391ee628 (src stamp 9755515ee35c19bc, tool ac697cecc1); 7305 files (4121 TUs + 3181 headers), 99130 function definitions; walk 40.9 s, total 208.3 s
type_census — 2026-09-13T03:24:00Z at 06615fe89 (src stamp 9def359d3553fe7a, tool ac697cecc1); 7305 files (4121 TUs + 3181 headers), 99130 function definitions; walk 40.9 s, total 202.2 s
DEFINITIONS 7255 struct/union bodies (+0 enums): canonical header 1179 · .c file-scope 4085 · .c block-scope 1904 · per-function shared headers 63 · other headers 24 · include/ 0
3143 distinct names · 527 distinct layouts (0 unresolved) · 206 duplicate classes covering 2823 names (tier 1 122 same-named, tier 2 84 opaque; 46 layout-twin classes / 1867 names kept apart) · 585 exact-text classes / 4460 copies · 40 VARIANT names (>1 layout) · 141 dead canonical names · 74 canonical names redefined in .c · 1781 scalar/alias typedefs · 157 forward decls
@@ -6,28 +6,28 @@ CAST SITES deref 503013 = P 409006 + I 60664 + X 13800 + M 19543 (+ A addres
by base: param 276860 · local 149911 · gaddr 40123 · nested 24076 · global 8861 · other 1678 · addr-of 1348 · ident 156
by width: s4 145161 · u2 142775 · s2 131818 · u1 43174 · agg 13472 · p4 12019 · u4 11165 · s1 3429
top bases: a0(param) 92255 · param_1(param) 81595 · arg0(param) 67704 · p(local) 18043 · p(param) 11784 · s0(local) 10368 · cach(local) 8246 · s1(local) 7137 · buf(local) 7067 · flag(local) 5453 · *(s32 *)(a0 + 0x20)(nested) 5215 · iVar2(local) 5160 · dst(local) 4874 · iVar1(local) 4836 · iVar3(local) 4693 · e(local) 3918
DECLARATIONS 99130 function definitions (1894 K&R) · 4279270 extern function declarations over 12088 names (3822 spelled >1 way) · 6419 names with >1 body text · 1078774 data externs over 55548 symbols (18493 typed >1 way) · asm-label aliases 5158 (165 names) · builtins {'memcpy': 301, 'abs': 1} · attributes {'aligned': 12, 'packed': 63}
lying declarations 2367 over 256 callees {'K&R-empty': 1673, 'narrow': 694} · K&R sites (marked, counted apart) 5082 over 155 callees · cross-binary (the fleet's definitions disagree, this binary has none) 511 over 147 callees
STRUCT MAP 17970 types explain 498894/503013 deref sites (99.2 %); unassigned 4119; 3947 types span ≥2 bodies (445199 sites), 14023 single-body; types with conflicts 738, suspect 11
merges by evidence {'param': 36486, 'arg': 10422, 'ret-of': 3436, 'assign': 14608, 'assign&': 1051, 'return': 1527, 'arg&': 247, 'field': 9921}; vetoed {'arg-conduit': 115288, 'arg-no-overlap': 31131, 'arg&-conduit': 14628, 'assign-multisource': 34568, 'assign&-multisource': 12501, 'field-multisource': 7008, 'arg&-no-overlap': 3506, 'ret-of-multisource': 6686, 'assign&': 68, 'assign': 394, 'ret-of': 216, 'arg': 253, 'return': 6, 'field': 1004}
Unkstruct_800D3888 sites 113273 bodies 10024 fields 133 size≥0x10c width-conflicts 50 sign-mixed 57 merges {'param': 9832, 'assign': 7528, 'arg': 7222, 'field': 3272} at D_800D3888,D_80181448,D_801818AC ptr D_8006386C,D_80074778,D_80074780
Unkstruct_80126B58 sites 65452 bodies 17066 fields 177 size≥0x24c width-conflicts 50 sign-mixed 62 merges {'param': 2162, 'arg': 1118, 'assign&': 106, 'field': 52} at D_80126B58 ptr D_80126B58
DECLARATIONS 99130 function definitions (1894 K&R) · 4279270 extern function declarations over 12088 names (3814 spelled >1 way) · 6419 names with >1 body text · 1078774 data externs over 55548 symbols (18493 typed >1 way) · asm-label aliases 5158 (165 names) · builtins {'memcpy': 301, 'abs': 1} · attributes {'packed': 63, 'aligned': 12}
lying declarations 2171 over 189 callees {'K&R-empty': 1654, 'narrow': 517} · K&R sites (marked, counted apart) 5092 over 162 callees · cross-binary (the fleet's definitions disagree, this binary has none) 418 over 96 callees
STRUCT MAP 18730 types explain 498894/503013 deref sites (99.2 %); unassigned 4119; 4060 types span ≥2 bodies (441236 sites), 14670 single-body; types with conflicts 729, suspect 11
merges by evidence {'param': 36486, 'arg': 10185, 'assign': 14663, 'return': 1524, 'ret-of': 3374, 'assign&': 1052, 'arg&': 270, 'field': 9613}; vetoed {'arg&-conduit': 14628, 'arg-conduit': 115288, 'arg-no-overlap': 39819, 'assign-multisource': 34568, 'assign&-multisource': 12501, 'field-multisource': 7008, 'ret-of-multisource': 6686, 'ret-of': 679, 'arg&-no-overlap': 3456, 'assign': 349, 'assign&': 67, 'arg': 182, 'return': 12, 'field': 3224}
Unkstruct_800B5CB8 sites 107600 bodies 11189 fields 134 size≥0x10c width-conflicts 50 sign-mixed 55 merges {'param': 9454, 'assign': 7400, 'arg': 6955, 'field': 2622} at D_800B5CB8,D_800D3888,D_80181448 ptr D_8006386C,D_80074778,D_80074780
Unkstruct_80126B58 sites 65458 bodies 17068 fields 177 size≥0x24c width-conflicts 50 sign-mixed 62 merges {'param': 2160, 'arg': 1117, 'assign&': 106, 'field': 52} at D_80126B58 ptr D_80126B58
Unkstruct_8018E71C sites 6745 bodies 396 fields 7 size≥0x10 width-conflicts 0 sign-mixed 0 merges {'param': 18, 'arg': 15, 'assign&': 2} at D_8018E71C
Unkstruct_dac960ce sites 4464 bodies 124 fields 13 size≥0x24c width-conflicts 0 sign-mixed 2 merges {'param': 2}
Unkstruct_0caecd54 sites 4340 bodies 124 fields 23 size≥0xfe width-conflicts 0 sign-mixed 1 merges {'param': 2, 'assign': 1, 'return': 1}
Unkstruct_8014964C sites 4251 bodies 1800 fields 23 size≥0x84 width-conflicts 3 sign-mixed 9 merges {'field': 137}
Unkstruct_f8ed2b9f sites 4061 bodies 4061 fields 1 size≥0x217 width-conflicts 0 sign-mixed 0 merges {'param': 2}
Unkstruct_a32b99a1 sites 3936 bodies 123 fields 8 size≥0x4b width-conflicts 0 sign-mixed 1 merges {}
Unkstruct_8e3dbe51 sites 3930 bodies 131 fields 5 size≥0x4c width-conflicts 0 sign-mixed 1 merges {}
Unkstruct_8014A1B0 sites 3778 bodies 542 fields 13 size≥0xfe width-conflicts 0 sign-mixed 1 merges {'field': 13, 'arg': 10, 'param': 10, 'return': 1}
Unkstruct_80128EA8 sites 3311 bodies 632 fields 18 size≥0x38 width-conflicts 0 sign-mixed 13 merges {'arg': 23, 'ret-of': 19, 'field': 7, 'param': 2}
Unkstruct_ade2e8a0 sites 3271 bodies 196 fields 26 size≥0xa4 width-conflicts 3 sign-mixed 9 merges {'param': 268, 'arg': 133}
Unkstruct_80126948 sites 3194 bodies 1040 fields 34 size≥0xa4 width-conflicts 0 sign-mixed 10 merges {'assign': 99, 'arg': 14, 'param': 6, 'assign&': 4} at D_80126948,D_80126E60 ptr D_80114EE8,D_801151D4,D_80126948
GLOBAL BLOCKS 2117 runs of ≥4 adjacent scalar D_ symbols (14216 symbols): 0x800cf10c+0x34 ×29 (D_800CF10C..D_800CF13C) · 0x800a6580+0x3a ×27 (D_800A6580..D_800A65B8) · 0x801998a4+0x57 ×24 (D_801998A4..D_801998FA) · 0x80199840+0x56 ×23 (D_80199840..D_80199895) · 0x801a9608+0x50 ×22 (D_801A9608..D_801A9654) · 0x801ab708+0x54 ×21 (D_801AB708..D_801AB758) · 0x801b0df0+0x4b ×21 (D_801B0DF0..D_801B0E3A) · 0x801b83a0+0x4e ×21 (D_801B83A0..D_801B83ED)
Unkstruct_1fa9e810 sites 3144 bodies 131 fields 3 size≥0x49 width-conflicts 0 sign-mixed 0 merges {}
GLOBAL BLOCKS 2120 runs of ≥4 adjacent scalar D_ symbols (14230 symbols): 0x800cf10c+0x34 ×29 (D_800CF10C..D_800CF13C) · 0x800a6580+0x3a ×27 (D_800A6580..D_800A65B8) · 0x801998a4+0x57 ×24 (D_801998A4..D_801998FA) · 0x80199840+0x56 ×23 (D_80199840..D_80199895) · 0x801a9608+0x50 ×22 (D_801A9608..D_801A9654) · 0x801ab708+0x54 ×21 (D_801AB708..D_801AB758) · 0x801b0df0+0x4b ×21 (D_801B0DF0..D_801B0E3A) · 0x801b83a0+0x4e ×21 (D_801B83A0..D_801B83ED)
PARKED (P36) 24 classes / 453 bodies / 691 needed sites → .run/P37/census/parked.tsv; needs {'signature': 13, 'struct': 7, '?': 4}; 22 PARK names are minimum-lever banks
CONTROLS 4/4: player_block_widths OK (D_80078E8C:4/4 D_80078EB2:2/2 D_80078EB4:2/2 D_80078EB6:2/2 D_80078EB8:2/2 [doc-disputed D_80078F08: code 4 vs actor-struct.md 2] [doc-disputed D_80078F0C: code 4 vs actor-struct.md 2]) · matrix_layouts OK (MATRIX=32 MATRIX_L48=48) · prim_layout_class OK (defs in 1192 files, 2 spellings, 1192/1192 in one layout (64 B)) · tu_conflict_D_800A651C OK (s32:1202 | u8[]:9 | OtBlk[]:9 | OtBlk_80016450[]:8 | s32[]:7)
duplicate-layout classes (top 12): 8B×293 names (488 defs): GTESVec, GVec8, SIn_8017E95C, SV… | 8B×202 names (0 defs): Blk8L, Blk8S16, Blk8U, Blk8_80126940… | 32B×170 names (277 defs): M32_8017F154, M32_80188094, MATRIX, MATRIX2… | 8B×153 names (341 defs): Blk8_801807DC, Blk8_8018453C, COL_8001EFE0, MoveT… | 32B×129 names (0 defs): B20, Blk20, Blk20_800CB68C, Blk20_8016DF5C… | 4B×111 names (0 defs): B4, B4_80165140, B4_8017F154, B4_80181970… | 64B×91 names (1428 defs): Prim_8016E7C8, Prim_8016E7C8_8016B6BC, Prim_8016E7C8_8016B9F8, Prim_8016E7C8_8016C2C4… | 8B×82 names (0 defs): B8, B8_17F474, B8_80165140, B8_801851A8… | 8B×63 names (211 defs): Ang_8017E95C, DVEC_80183534, SOut_8017E95C, SVEC… | 4B×60 names (68 defs): PTAG_85910, PTag, PTag293C, PTag_1412A8… | 8B×59 names (0 defs): Bc8_80180E0C, CdFileLoc, Cmd_801805C8, M8_8016B6BC… | 8B×54 names (0 defs): Args_80182194, Blk8, Blk8017FD54, Blk8_801A6AD0…
VARIANT names (top 12): Prim×5, V8×4, Blk8×4, Rec×4, St×4, S×4, Ent×3, Vec8×3, Obj×3, SV3×2, V4×2, Struct80078E78×2
duplicate-layout classes (top 12): 8B×293 names (488 defs): GTESVec, GVec8, SIn_8017E95C, SV… | 8B×202 names (0 defs): Blk8L, Blk8S16, Blk8U, Blk8_80126940… | 32B×170 names (277 defs): M32_8017F154, M32_80188094, MATRIX, MATRIX2… | 8B×153 names (341 defs): Blk8_801807DC, Blk8_8018453C, COL_8001EFE0, MoveT… | 32B×129 names (0 defs): B20, Blk20, Blk20_800CB68C, Blk20_8016DF5C… | 4B×111 names (0 defs): B4, B4_80165140, B4_8017F154, B4_80181970… | 64B×91 names (1428 defs): Prim_8016E7C8, Prim_8016E7C8_8016B6BC, Prim_8016E7C8_8016B9F8, Prim_8016E7C8_8016C2C4… | 8B×82 names (0 defs): B8, B8_17F474, B8_80165140, B8_801851A8… | 8B×63 names (211 defs): Ang_8017E95C, DVEC_80183534, SOut_8017E95C, SVEC… | 4B×60 names (68 defs): PTAG_85910, PTag, PTag293C, PTag_1412A8… | 8B×59 names (0 defs): Bc8_80180E0C, CdFileLoc, Cmd_801805C8, M8_8016B6BC… | 16B×54 names (0 defs): B16, B16_8017CDE4, B16_80183ED8, B16_801841C8…
VARIANT names (top 12): Prim×5, Rec×4, Blk8×4, St×4, S×4, V8×4, Vec8×3, Obj×3, Ent×3, Blk16×2, CdReq×2, Blk4×2
type_census: 7255 definitions (527 layouts, 206 duplicate classes, 40 variant camps) · 503013 cast sites in 69497 bodies over 8 base classes (4 forms + A, coverage OK) · 2367 lying declarations / 256 callees (+5082 K&R sites, +511 cross-binary apart) · controls 4/4
struct_map: 17970 types over 17970 clusters explain 498894/503013 sites (99.2 %); 4119 unassigned sites; 738 types with conflicts
type_census: 7255 definitions (527 layouts, 206 duplicate classes, 40 variant camps) · 503013 cast sites in 69497 bodies over 8 base classes (4 forms + A, coverage OK) · 2171 lying declarations / 189 callees (+5092 K&R sites, +418 cross-binary apart) · controls 4/4
struct_map: 18730 types over 18730 clusters explain 498894/503013 sites (99.2 %); 4119 unassigned sites; 729 types with conflicts
View File
+5
View File
@@ -0,0 +1,5 @@
delever_oracle --calibrate main md_SC07_004 ov_SC03_015 ov_SC04_011: 146/146 objects byte-identical untouched; twin checks 32 (0 mismatch); positive control DIFFERS on build/src/800.o; 2.1 s — OK
main 85/85 identical, mean 0.084 s per object
md_SC07_004 1/1 identical, mean 0.519 s per object
ov_SC03_015 32/32 identical, mean 0.153 s per object
ov_SC04_011 28/28 identical, mean 0.144 s per object
+3
View File
@@ -3,3 +3,6 @@ cycle: batch t4_D53 committed 7dcae487c — restruct: batch t4_D53 rung D — 40
log: t4_D54
cycle: batch t4_D54 committed 4293d0a84 — restruct: batch t4_D54 rung D — 400 files (TUs; 607 drawable) · 800 declaration units: 800 canonical / 0 promoted / 0 K&R marked / 0 aliases typed / 0 __builtin_abs → abs / 0 kept · compiles 836 in 61 s wall · final 400/400 identical · written 400 files | check-all: 218 passed, 0 failed of 218
log: t4_D55
cycle: batch t4_D55 committed 06615fe89 — restruct: batch t4_D55 rung D — 207 files (TUs; 207 drawable) · 412 declaration units: 411 canonical / 0 promoted / 1 K&R marked / 0 aliases typed / 0 __builtin_abs → abs / 1 kept · compiles 414 in 38 s wall · final 207/207 identical · written 207 files | check-all: 218 passed, 0 failed of 218
cycle: nothing drawable at t4_D56 — done
cycle exit=0
+4
View File
@@ -0,0 +1,4 @@
restruct --plan D: 0 of 0 TUs with lying declarations · 0 callees
restruct --apply D: nothing to do (no drawable file)
t4_D56 wall=154.33 s
exit=0
+1
View File
@@ -0,0 +1 @@
delever_oracle --snapshot-baseline: 7428 object(s) under .run/P36/delever/baseline at 06615fe89; link inputs for 218/218 binaries under .run/P36/delever/baseline/_link (links.json)
+5 -1
View File
@@ -200,5 +200,9 @@ table five times, and proved the oracle needs a linked-relocation mode before a
has a linker in it, ask the linker (the build's own tail), never re-derive its arithmetic; snapshot an oracle's baseline only from a clean run
and make the snapshot refuse what it cannot reproduce; compute every process pool before the first thread. Read a census's rows against the
DEFINITIONS' names before pricing a campaign on them — a function defined under another name is a hole in the denominator, and a planner
should count only the rows its engine can act on. In one line, the
should count only the rows its engine can act on. S108 added the sharpest version of the lesson: a census can be wrong about its own denominator in five independent ways at once (an index
that skips a sibling's includes, a name where an identity was needed, an anchored regex, a counter that never read included bodies, a
snapshot that stamps an empty build), and every repair moved the count by thousands while no rung got smarter — so a "stalling" number is
first a question about the instrument, then about the population, and only then about the method; and the stop rule for a mechanical
campaign is the remainder bucketed by its recorded cause, never the yield of the last two batches. In one line, the
generation's rule so far: *the byte gate is still the only judge, and after 100 % it judges spelling.*
+1 -1
View File
@@ -98,6 +98,6 @@
| 2026-09-09 | 64 | | 218 | 100.0% | 100.0% | 100.0% | 100.0% | 0 | — | 30,358 | — |
| 2026-09-10 | 146 | | 218 | 100.0% | 100.0% | 100.0% | 100.0% | 0 | — | 4,603 | 414,148 |
| 2026-09-11 | 371 | P36 (v2.2.0) | 218 | 100.0% | 100.0% | 100.0% | 100.0% | 0 | — | 4,010 | 503,016 |
| 2026-09-12 | 28 | | 218 | 100.0% | 100.0% | 100.0% | 100.0% | 0 | 789 / 2091 | — | 503,016 |
| 2026-09-12 | 100 | | 218 | 100.0% | 100.0% | 100.0% | 100.0% | 0 | 789 / 2091 | 3,730 | 503,013 |
78 dated rows · phase ticks from the 37 PhaseEnds · the chart: `docs/story-timeline.svg`.
+19 -18
View File
@@ -63,25 +63,26 @@
<line x1="60" y1="519.5" x2="980" y2="519.5" stroke="#ddd"/><text x="54" y="523.5" text-anchor="end" font-size="11" fill="#555">75%</text>
<line x1="60" y1="464.0" x2="980" y2="464.0" stroke="#ddd"/><text x="54" y="468.0" text-anchor="end" font-size="11" fill="#555">100%</text>
<line x1="60.0" y1="464" x2="60.0" y2="686" stroke="#d62728" stroke-dasharray="2,3" opacity="0.6"/><text x="63.0" y="474" font-size="9" fill="#a00">the census (T1)</text>
<line x1="69.8" y1="464" x2="69.8" y2="686" stroke="#d62728" stroke-dasharray="2,3" opacity="0.6"/><text x="72.8" y="486" font-size="9" fill="#a00">mechanical strip — rung A/B (T4)</text>
<line x1="197.0" y1="464" x2="197.0" y2="686" stroke="#d62728" stroke-dasharray="2,3" opacity="0.6"/><text x="200.0" y="498" font-size="9" fill="#a00">the GTE header (T5)</text>
<line x1="216.6" y1="464" x2="216.6" y2="686" stroke="#d62728" stroke-dasharray="2,3" opacity="0.6"/><text x="219.6" y="510" font-size="9" fill="#a00">recipes + permuter — rungs R/D (T6)</text>
<line x1="246.0" y1="464" x2="246.0" y2="686" stroke="#d62728" stroke-dasharray="2,3" opacity="0.6"/><text x="249.0" y="474" font-size="9" fill="#a00">the guided search — rung G (S101)</text>
<line x1="304.7" y1="464" x2="304.7" y2="686" stroke="#d62728" stroke-dasharray="2,3" opacity="0.6"/><text x="307.7" y="486" font-size="9" fill="#a00">agents, one per class + the call-arity class (S102)</text>
<line x1="510.2" y1="464" x2="510.2" y2="686" stroke="#d62728" stroke-dasharray="2,3" opacity="0.6"/><text x="513.2" y="498" font-size="9" fill="#a00">agents, TU batches + regen (S103)</text>
<line x1="754.9" y1="464" x2="754.9" y2="686" stroke="#d62728" stroke-dasharray="2,3" opacity="0.6"/><text x="757.9" y="510" font-size="9" fill="#a00">agents, TU batches (S104)</text>
<line x1="862.6" y1="464" x2="862.6" y2="686" stroke="#d62728" stroke-dasharray="2,3" opacity="0.6"/><text x="865.6" y="474" font-size="9" fill="#a00">S105</text>
<line x1="970.2" y1="464" x2="970.2" y2="686" stroke="#d62728" stroke-dasharray="2,3" opacity="0.6"/><text x="973.2" y="486" font-size="9" fill="#a00">P36</text>
<line x1="980.0" y1="464" x2="980.0" y2="686" stroke="#d62728" stroke-dasharray="2,3" opacity="0.6"/><text x="983.0" y="498" font-size="9" fill="#a00">P37</text>
<line x1="69.7" y1="464" x2="69.7" y2="686" stroke="#d62728" stroke-dasharray="2,3" opacity="0.6"/><text x="72.7" y="486" font-size="9" fill="#a00">mechanical strip — rung A/B (T4)</text>
<line x1="195.6" y1="464" x2="195.6" y2="686" stroke="#d62728" stroke-dasharray="2,3" opacity="0.6"/><text x="198.6" y="498" font-size="9" fill="#a00">the GTE header (T5)</text>
<line x1="214.9" y1="464" x2="214.9" y2="686" stroke="#d62728" stroke-dasharray="2,3" opacity="0.6"/><text x="217.9" y="510" font-size="9" fill="#a00">recipes + permuter — rungs R/D (T6)</text>
<line x1="244.0" y1="464" x2="244.0" y2="686" stroke="#d62728" stroke-dasharray="2,3" opacity="0.6"/><text x="247.0" y="474" font-size="9" fill="#a00">the guided search — rung G (S101)</text>
<line x1="302.1" y1="464" x2="302.1" y2="686" stroke="#d62728" stroke-dasharray="2,3" opacity="0.6"/><text x="305.1" y="486" font-size="9" fill="#a00">agents, one per class + the call-arity class (S102)</text>
<line x1="505.5" y1="464" x2="505.5" y2="686" stroke="#d62728" stroke-dasharray="2,3" opacity="0.6"/><text x="508.5" y="498" font-size="9" fill="#a00">agents, TU batches + regen (S103)</text>
<line x1="747.6" y1="464" x2="747.6" y2="686" stroke="#d62728" stroke-dasharray="2,3" opacity="0.6"/><text x="750.6" y="510" font-size="9" fill="#a00">agents, TU batches (S104)</text>
<line x1="854.1" y1="464" x2="854.1" y2="686" stroke="#d62728" stroke-dasharray="2,3" opacity="0.6"/><text x="857.1" y="474" font-size="9" fill="#a00">S105</text>
<line x1="960.6" y1="464" x2="960.6" y2="686" stroke="#d62728" stroke-dasharray="2,3" opacity="0.6"/><text x="963.6" y="486" font-size="9" fill="#a00">P36</text>
<line x1="970.3" y1="464" x2="970.3" y2="686" stroke="#d62728" stroke-dasharray="2,3" opacity="0.6"/><text x="973.3" y="498" font-size="9" fill="#a00">P37</text>
<line x1="60.0" y1="686" x2="60.0" y2="692" stroke="#888"/><text x="62.0" y="702" font-size="9" fill="#333">09-09</text>
<line x1="304.7" y1="686" x2="304.7" y2="692" stroke="#888"/><text x="306.7" y="702" font-size="9" fill="#333">09-10</text>
<line x1="803.8" y1="686" x2="803.8" y2="692" stroke="#888"/><text x="805.8" y="702" font-size="9" fill="#333">09-11</text>
<polyline fill="none" stroke="#d62728" stroke-width="2" points="60.0,464.0 69.8,478.3 79.6,492.4 89.4,504.5 99.1,513.3 108.9,519.5 118.7,525.1 128.5,532.6 138.3,534.1 148.1,542.3 157.9,543.8 167.7,545.0 177.4,545.7 187.2,545.7 197.0,544.6 206.8,543.8 216.6,544.4 226.4,544.4 236.2,546.6 246.0,547.1 255.7,548.2 265.5,556.6 275.3,557.1 285.1,557.5 294.9,559.4 304.7,560.5 314.5,562.1 324.3,562.6 334.0,562.8 343.8,562.8 353.6,564.2 363.4,564.4 373.2,564.4 383.0,565.0 392.8,565.5 402.6,569.3 412.3,574.6 422.1,575.6 431.9,575.6 441.7,575.6 451.5,576.7 461.3,577.2 471.1,582.1 480.9,582.6 490.6,585.4 500.4,585.4 510.2,585.9 520.0,601.7 529.8,605.6 539.6,607.7 549.4,612.1 559.1,612.2 568.9,618.1 578.7,619.2 588.5,619.2 598.3,622.4 608.1,628.3 617.9,631.4 627.7,632.0 637.4,633.5 647.2,633.7 657.0,633.9 666.8,635.8 676.6,635.9 686.4,636.0 696.2,644.5 706.0,648.3 715.7,663.5 725.5,663.6 735.3,664.2 745.1,664.7 754.9,665.3 764.7,666.2 774.5,666.3 784.3,666.6 794.0,666.8 803.8,667.3 813.6,667.5 823.4,667.9 833.2,668.2 843.0,668.4 852.8,668.7 862.6,668.8 872.3,668.8 882.1,668.9 891.9,669.0 901.7,669.0 911.5,669.1 921.3,669.1 931.1,669.1 940.9,669.2 950.6,669.2 960.4,669.3 970.2,669.3 980.0,669.3"/>
<text x="976.0" y="663.3" text-anchor="end" font-size="10" fill="#d62728">4,010</text>
<text x="970" y="557.2" text-anchor="end" font-size="12" fill="#d62728">register pins + asm statements (the lever series, 95 increments): 53,221 → 4,010</text>
<polyline fill="none" stroke="#9467bd" stroke-width="2" stroke-dasharray="5,4" points="794.0,464.0 980.0,465.2"/>
<line x1="302.1" y1="686" x2="302.1" y2="692" stroke="#888"/><text x="304.1" y="702" font-size="9" fill="#333">09-10</text>
<line x1="796.0" y1="686" x2="796.0" y2="692" stroke="#888"/><text x="798.0" y="702" font-size="9" fill="#333">09-11</text>
<line x1="980.0" y1="686" x2="980.0" y2="692" stroke="#888"/><text x="982.0" y="702" font-size="9" fill="#333">09-12</text>
<polyline fill="none" stroke="#d62728" stroke-width="2" points="60.0,464.0 69.7,478.3 79.4,492.4 89.1,504.5 98.7,513.3 108.4,519.5 118.1,525.1 127.8,532.6 137.5,534.1 147.2,542.3 156.8,543.8 166.5,545.0 176.2,545.7 185.9,545.7 195.6,544.6 205.3,543.8 214.9,544.4 224.6,544.4 234.3,546.6 244.0,547.1 253.7,548.2 263.4,556.6 273.1,557.1 282.7,557.5 292.4,559.4 302.1,560.5 311.8,562.1 321.5,562.6 331.2,562.8 340.8,562.8 350.5,564.2 360.2,564.4 369.9,564.4 379.6,565.0 389.3,565.5 398.9,569.3 408.6,574.6 418.3,575.6 428.0,575.6 437.7,575.6 447.4,576.7 457.1,577.2 466.7,582.1 476.4,582.6 486.1,585.4 495.8,585.4 505.5,585.9 515.2,601.7 524.8,605.6 534.5,607.7 544.2,612.1 553.9,612.2 563.6,618.1 573.3,619.2 582.9,619.2 592.6,622.4 602.3,628.3 612.0,631.4 621.7,632.0 631.4,633.5 641.1,633.7 650.7,633.9 660.4,635.8 670.1,635.9 679.8,636.0 689.5,644.5 699.2,648.3 708.8,663.5 718.5,663.6 728.2,664.2 737.9,664.7 747.6,665.3 757.3,666.2 766.9,666.3 776.6,666.6 786.3,666.8 796.0,667.3 805.7,667.5 815.4,667.9 825.1,668.2 834.7,668.4 844.4,668.7 854.1,668.8 863.8,668.8 873.5,668.9 883.2,669.0 892.8,669.0 902.5,669.1 912.2,669.1 921.9,669.1 931.6,669.2 941.3,669.2 950.9,669.3 960.6,669.3 970.3,669.3 980.0,670.4"/>
<text x="976.0" y="664.4" text-anchor="end" font-size="10" fill="#d62728">3,730</text>
<text x="970" y="557.2" text-anchor="end" font-size="12" fill="#d62728">register pins + asm statements (the lever series, 96 increments): 53,221 → 3,730</text>
<polyline fill="none" stroke="#9467bd" stroke-width="2" stroke-dasharray="5,4" points="786.3,464.0 970.3,465.2"/>
<text x="970" y="526.2" text-anchor="end" font-size="12" fill="#9467bd">raw pointer-cast dereferences — the one-form regex count (until the census, 2026-09-12): 414,148 → 411,850</text>
<polyline fill="none" stroke="#9467bd" stroke-width="2" stroke-dasharray="" points="980.0,464.0 980.0,464.0"/>
<text x="970" y="541.7" text-anchor="end" font-size="12" fill="#9467bd">raw pointer-cast dereferences — the four-form census (2026-09-12 →; a new instrument, its own 100 %): 503,016 → 503,016</text>
<polyline fill="none" stroke="#9467bd" stroke-width="2" stroke-dasharray="" points="970.3,464.0 980.0,464.0 980.0,464.0"/>
<text x="970" y="541.7" text-anchor="end" font-size="12" fill="#9467bd">raw pointer-cast dereferences — the four-form census (2026-09-12 →; a new instrument, its own 100 %): 503,016 → 503,013</text>
<text x="980" y="726" text-anchor="end" font-size="10" fill="#777">generated by tools/timeline.py — keyed by date</text>
</svg>

Before

Width:  |  Height:  |  Size: 12 KiB

After

Width:  |  Height:  |  Size: 12 KiB

+23
View File
@@ -246,6 +246,29 @@ where that address is a different function. A hundred and twenty landed; twenty-
translation unit holds callers that disagree with the definition inside one file — the original was several files, and only the file-layout
phase can say so.
The next day the declaration layer went to its floor, and the story of that day is the story of five things the instruments could not
see. The morning's first batch drew three hundred files and found nothing to do; the reason was not the code but the engine's index,
which had never looked inside the shared bodies a neighbouring file includes — and since the dedup phase every shared function lives in
exactly such a body, so every level's own shared functions had read as foreign. One loop fixed it, and the next batch alone put ten
thousand declarations right. Then the census itself turned out to be counting wrong: it identified a function by its bare name, and the
game has more than six thousand names that stand for two or three different functions in different levels, so nearly three thousand
correct declarations had been counted as lies. Then a regular expression anchored at the start of a line had missed every function
definition that happened to be indented, and repairing it revealed ten thousand more declarations nobody had known were wrong. Each time,
the number fell by thousands without a new idea, only a repaired instrument: ninety-eight thousand lying declarations at the phase's start,
two thousand one hundred at the day's end, with five thousand more counted apart as the original's own calling convention — a caller
passing fewer arguments than the function takes, proven on the bytes and marked in place — and four hundred as cross-binary calls the
fleet cannot agree about.
The parked signature changes from the levers phase landed the same day, and each taught something. The function whose pins had faked a
missing argument in a hundred and thirty-two levels was one body over per-level data; renaming its data symbol to each level's own, by
order of appearance, closed all of them in one judged unit and took two hundred and sixty-four pins off the count. Another needed its three
zero-argument callers rewritten in the same unit as its definition — the pin had been the argument all along, and where the caller had
compared a value before the call, spelling that value as a local put it exactly where the pin had forced it, in the first argument
register. A third needed nothing but its return type: a function that falls off the end, declared to return an integer, keeps the
compiler from stealing an instruction into a branch's delay slot. The levers count fell from four thousand and ten to three thousand seven
hundred and thirty. One mistake of the day was mine: a restore run against a judge that had not yet finished stopping, which split a
batch's bookkeeping — erased cleanly, and the rule written down: wait for the exit.
## 11. By the numbers
| | |
+53 -53
View File
@@ -1,13 +1,13 @@
# The struct map — the types the fleet's cast sites need (Phase 37 T1)
> **Generated by `tools/type_census.py` at `da26c05d6` (2026-09-12T07:20:21Z); never typed (R75).** Every raw pointer-cast dereference in `src/` was assigned to a base (a parameter, a local, a global by value or by address, an absolute address) and the bases were clustered by EVIDENCE only — the same global symbol, an argument passed to a callee's parameter, an assignment or return, a pointer field read, a shared body's fleet-wide identity — never by a similar offset signature. Each cluster is one type the tree needs. Names are placeholders (`Unkstruct_<addr>`: the lowest global instance's address, else the lowest member function's); fields are placeholders (`unk<HEX>`) until Phase 38 cites evidence.
> **Generated by `tools/type_census.py` at `06615fe89` (2026-09-13T03:24:00Z); never typed (R75).** Every raw pointer-cast dereference in `src/` was assigned to a base (a parameter, a local, a global by value or by address, an absolute address) and the bases were clustered by EVIDENCE only — the same global symbol, an argument passed to a callee's parameter, an assignment or return, a pointer field read, a shared body's fleet-wide identity — never by a similar offset signature. Each cluster is one type the tree needs. Names are placeholders (`Unkstruct_<addr>`: the lowest global instance's address, else the lowest member function's); fields are placeholders (`unk<HEX>`) until Phase 38 cites evidence.
**18760 types explain 498896 of 503016 dereference sites (99.2 %); 4120 sites have a base the census could not classify; 729 types carry a width conflict.** Merges by evidence: param 36550, assign 14717, arg 10176, field 9623, ret-of 3410, return 1523, assign& 1051, arg& 270.
**18730 types explain 498894 of 503013 dereference sites (99.2 %); 4119 sites have a base the census could not classify; 729 types carry a width conflict.** Merges by evidence: param 36486, assign 14663, arg 10185, field 9613, ret-of 3374, return 1524, assign& 1052, arg& 270.
| # | type | sites | bodies | fields | size ≥ | width conflicts (+sign mixes) | instance globals | pointer globals |
|---:|---|---:|---:|---:|---:|---:|---|---|
| 1 | `Unkstruct_800B5CB8` | 107598 | 11186 | 134 | 0x10c | 50 (+55 sign) | D_800B5CB8, D_800D3888, D_80181448, D_80181538… | D_8006386C, D_80074778, D_80074780, D_80074784… |
| 2 | `Unkstruct_80126B58` | 65397 | 17047 | 175 | 0x24c | 50 (+60 sign) | D_80126B58 | D_80126B58 |
| 1 | `Unkstruct_800B5CB8` | 107600 | 11189 | 134 | 0x10c | 50 (+55 sign) | D_800B5CB8, D_800D3888, D_80181448, D_80181538… | D_8006386C, D_80074778, D_80074780, D_80074784… |
| 2 | `Unkstruct_80126B58` | 65458 | 17068 | 177 | 0x24c | 50 (+62 sign) | D_80126B58 | D_80126B58 |
| 3 | `Unkstruct_8018E71C` | 6745 | 396 | 7 | 0x10 | 0 (+0 sign) | D_8018E71C | |
| 4 | `Unkstruct_dac960ce` | 4464 | 124 | 13 | 0x24c | 0 (+2 sign) | | |
| 5 | `Unkstruct_0caecd54` | 4340 | 124 | 23 | 0xfe | 0 (+1 sign) | | |
@@ -23,7 +23,7 @@
| 15 | `Unkstruct_adc0bee4` | 2646 | 126 | 8 | 0x34 | 0 (+3 sign) | | |
| 16 | `Unkstruct_198fc7cc` | 2580 | 129 | 16 | 0x38 | 3 (+1 sign) | | |
| 17 | `Unkstruct_801439FC` | 2489 | 981 | 57 | 0x10c | 9 (+22 sign) | | |
| 18 | `Unkstruct_80130D48` | 2382 | 587 | 25 | 0x64 | 6 (+3 sign) | | D_80072C84, D_80078E78 |
| 18 | `Unkstruct_80130D48` | 2363 | 585 | 17 | 0x64 | 2 (+3 sign) | | D_80072C84, D_80078E78 |
| 19 | `Unkstruct_ed8f1335` | 2356 | 124 | 18 | 0x24 | 0 (+0 sign) | | |
| 20 | `Unkstruct_8016B4F8` | 2140 | 535 | 5 | 0x30 | 0 (+0 sign) | | |
| 21 | `Unkstruct_80139C7C` | 2111 | 265 | 14 | 0x44 | 0 (+3 sign) | | |
@@ -34,7 +34,7 @@
| 26 | `Unkstruct_a8d34bce` | 1948 | 1948 | 1 | 0x215 | 0 (+0 sign) | | |
| 27 | `Unkstruct_568f7bda` | 1875 | 125 | 9 | 0x38 | 0 (+0 sign) | | |
| 28 | `Unkstruct_8016DF5C` | 1791 | 131 | 9 | 0x38 | 0 (+3 sign) | | |
| 29 | `Unkstruct_f1f49381` | 1764 | 126 | 10 | 0x38 | 0 (+0 sign) | | |
| 29 | `Unkstruct_cd1bacd2` | 1764 | 126 | 10 | 0x38 | 0 (+0 sign) | | |
| 30 | `Unkstruct_8011F7A8` | 1746 | 271 | 7 | 0x11e | 0 (+0 sign) | D_8011F7A8 | |
| 31 | `Unkstruct_84612d18` | 1722 | 123 | 8 | 0x4b | 0 (+0 sign) | | |
| 32 | `Unkstruct_57db4d07` | 1664 | 128 | 13 | 0x0 | 13 (+0 sign) | | |
@@ -62,26 +62,26 @@
| 54 | `Unkstruct_0b30043d` | 1128 | 376 | 3 | 0x5e | 0 (+0 sign) | | |
| 55 | `Unkstruct_301381d4` | 1116 | 124 | 3 | 0x36 | 0 (+1 sign) | | |
| 56 | `Unkstruct_0ced46e2` | 1116 | 124 | 5 | 0xfe | 0 (+0 sign) | | |
| 57 | `Unkstruct_f153f338` | 1107 | 123 | 5 | 0x34 | 0 (+0 sign) | | |
| 57 | `Unkstruct_4857195e` | 1107 | 123 | 5 | 0x34 | 0 (+0 sign) | | |
| 58 | `Unkstruct_50a3f6b4` | 1040 | 130 | 3 | 0x36 | 0 (+0 sign) | | |
| 59 | `Unkstruct_800B9A02` | 992 | 434 | 1 | 0x2 | 0 (+0 sign) | D_800B9A02 | |
| 59 | `Unkstruct_800B9A02` | 993 | 435 | 1 | 0x2 | 0 (+0 sign) | D_800B9A02 | |
| 60 | `Unkstruct_f74e3af7` | 992 | 124 | 5 | 0xfe | 0 (+0 sign) | | |
| 61 | `Unkstruct_6b138cb0` | 931 | 133 | 7 | 0x20 | 1 (+0 sign) | | |
| 61 | `Unkstruct_b6c7c603` | 931 | 133 | 7 | 0x20 | 1 (+0 sign) | | |
| 62 | `Unkstruct_b774eeeb` | 917 | 131 | 4 | 0x41 | 0 (+0 sign) | | |
| 63 | `Unkstruct_6d856e9d` | 917 | 131 | 5 | 0x1e | 3 (+1 sign) | | |
| 64 | `Unkstruct_d0c6cce6` | 917 | 131 | 4 | 0x38 | 0 (+0 sign) | | |
| 65 | `Unkstruct_859b4fab` | 910 | 130 | 4 | 0xb0 | 0 (+0 sign) | | |
| 66 | `Unkstruct_801463A0` | 907 | 210 | 13 | 0x54 | 0 (+1 sign) | | D_80126B78 |
| 67 | `Unkstruct_6d3f3f5d` | 889 | 127 | 6 | 0x38 | 0 (+0 sign) | | |
| 63 | `Unkstruct_859b4fab` | 910 | 130 | 4 | 0xb0 | 0 (+0 sign) | | |
| 64 | `Unkstruct_801463A0` | 907 | 210 | 13 | 0x54 | 0 (+1 sign) | | D_80126B78 |
| 65 | `Unkstruct_6d3f3f5d` | 889 | 127 | 6 | 0x38 | 0 (+0 sign) | | |
| 66 | `Unkstruct_6d856e9d` | 889 | 127 | 5 | 0x1e | 3 (+1 sign) | | |
| 67 | `Unkstruct_d0c6cce6` | 889 | 127 | 4 | 0x38 | 0 (+0 sign) | | |
| 68 | `Unkstruct_1e86c313` | 882 | 126 | 4 | 0x8 | 0 (+0 sign) | | |
| 69 | `Unkstruct_a41ec127` | 882 | 126 | 6 | 0x38 | 0 (+0 sign) | | |
| 70 | `Unkstruct_3f697924` | 875 | 125 | 5 | 0x38 | 0 (+0 sign) | | |
| 71 | `Unkstruct_e505dcd3` | 868 | 124 | 4 | 0x8 | 0 (+0 sign) | | |
| 72 | `Unkstruct_fe02110c` | 868 | 124 | 3 | 0x10 | 0 (+2 sign) | | |
| 73 | `Unkstruct_92677d11` | 861 | 123 | 5 | 0x240 | 0 (+0 sign) | | |
| 74 | `Unkstruct_86465c2c` | 861 | 123 | 7 | 0x20 | 0 (+0 sign) | | |
| 75 | `Unkstruct_ffd2397c` | 854 | 122 | 5 | 0x34 | 0 (+0 sign) | | |
| 76 | `Unkstruct_17738e2c` | 821 | 30 | 32 | 0xa4 | 12 (+5 sign) | | |
| 70 | `Unkstruct_17738e2c` | 876 | 33 | 32 | 0xa4 | 12 (+5 sign) | | |
| 71 | `Unkstruct_3f697924` | 875 | 125 | 5 | 0x38 | 0 (+0 sign) | | |
| 72 | `Unkstruct_e505dcd3` | 868 | 124 | 4 | 0x8 | 0 (+0 sign) | | |
| 73 | `Unkstruct_fe02110c` | 868 | 124 | 3 | 0x10 | 0 (+2 sign) | | |
| 74 | `Unkstruct_92677d11` | 861 | 123 | 5 | 0x240 | 0 (+0 sign) | | |
| 75 | `Unkstruct_86465c2c` | 861 | 123 | 7 | 0x20 | 0 (+0 sign) | | |
| 76 | `Unkstruct_ffd2397c` | 854 | 122 | 5 | 0x34 | 0 (+0 sign) | | |
| 77 | `Unkstruct_801270C0` | 821 | 820 | 1 | 0x2 | 0 (+0 sign) | D_801270C0 | |
| 78 | `Unkstruct_2932a0a7` | 798 | 133 | 6 | 0x12 | 5 (+0 sign) | | |
| 79 | `Unkstruct_0a8f505b` | 790 | 83 | 14 | 0x10c | 0 (+5 sign) | | |
@@ -102,25 +102,25 @@
| 94 | `Unkstruct_800AF630` | 671 | 537 | 3 | 0xa3dc | 0 (+0 sign) | D_800AF630 | |
| 95 | `Unkstruct_8012C284` | 668 | 533 | 1 | 0x2 | 0 (+1 sign) | | D_80126720 |
| 96 | `Unkstruct_80115128` | 667 | 534 | 1 | 0x2 | 0 (+0 sign) | D_80115128 | |
| 97 | `Unkstruct_3271c3cc` | 665 | 133 | 3 | 0x5e | 0 (+0 sign) | | |
| 97 | `Unkstruct_896c95f7` | 665 | 133 | 3 | 0x5e | 0 (+0 sign) | | |
| 98 | `Unkstruct_61789347` | 665 | 133 | 0 | 0x0 | 0 (+0 sign) | | |
| 99 | `Unkstruct_05fa9429` | 665 | 133 | 0 | 0x0 | 0 (+0 sign) | | |
| 99 | `Unkstruct_b89d503f` | 665 | 133 | 0 | 0x0 | 0 (+0 sign) | | |
| 100 | `Unkstruct_801345F8` | 665 | 133 | 0 | 0x0 | 0 (+0 sign) | | |
| 101 | `Unkstruct_801345F8` | 665 | 133 | 0 | 0x0 | 0 (+0 sign) | | |
| 102 | `Unkstruct_801152A0` | 665 | 399 | 1 | 0x2 | 0 (+0 sign) | D_801152A0 | |
| 103 | `Unkstruct_89230a8b` | 665 | 133 | 5 | 0x1c | 0 (+0 sign) | | |
| 104 | `Unkstruct_fdd04bae` | 650 | 130 | 3 | 0x38 | 0 (+0 sign) | | |
| 105 | `Unkstruct_eb8b6fbf` | 645 | 129 | 5 | 0xfe | 0 (+0 sign) | | |
| 106 | `Unkstruct_90d0825c` | 645 | 129 | 5 | 0x1c | 1 (+0 sign) | | |
| 107 | `Unkstruct_27c177f1` | 645 | 129 | 4 | 0x34 | 0 (+0 sign) | | |
| 108 | `Unkstruct_4f9f60b8` | 630 | 126 | 4 | 0x78 | 0 (+0 sign) | | |
| 109 | `Unkstruct_7a31a22f` | 630 | 126 | 2 | 0x19c | 0 (+0 sign) | | |
| 110 | `Unkstruct_187abeff` | 630 | 126 | 5 | 0x68 | 0 (+0 sign) | | |
| 111 | `Unkstruct_dafba7ce` | 630 | 126 | 4 | 0x20 | 0 (+0 sign) | | |
| 112 | `Unkstruct_20d4328b` | 630 | 126 | 4 | 0x38 | 0 (+0 sign) | | |
| 113 | `Unkstruct_d94ab931` | 625 | 125 | 4 | 0x6 | 2 (+1 sign) | | |
| 114 | `Unkstruct_7ef9c9ef` | 625 | 125 | 4 | 0x6 | 2 (+1 sign) | | |
| 115 | `Unkstruct_8ce68494` | 625 | 125 | 2 | 0x1a | 0 (+0 sign) | | |
| 103 | `Unkstruct_fdd04bae` | 650 | 130 | 3 | 0x38 | 0 (+0 sign) | | |
| 104 | `Unkstruct_eb8b6fbf` | 645 | 129 | 5 | 0xfe | 0 (+0 sign) | | |
| 105 | `Unkstruct_90d0825c` | 645 | 129 | 5 | 0x1c | 1 (+0 sign) | | |
| 106 | `Unkstruct_27c177f1` | 645 | 129 | 4 | 0x34 | 0 (+0 sign) | | |
| 107 | `Unkstruct_4f9f60b8` | 630 | 126 | 4 | 0x78 | 0 (+0 sign) | | |
| 108 | `Unkstruct_7a31a22f` | 630 | 126 | 2 | 0x19c | 0 (+0 sign) | | |
| 109 | `Unkstruct_187abeff` | 630 | 126 | 5 | 0x68 | 0 (+0 sign) | | |
| 110 | `Unkstruct_f9fa1fb7` | 630 | 126 | 4 | 0x20 | 0 (+0 sign) | | |
| 111 | `Unkstruct_20d4328b` | 630 | 126 | 4 | 0x38 | 0 (+0 sign) | | |
| 112 | `Unkstruct_d94ab931` | 625 | 125 | 4 | 0x6 | 2 (+1 sign) | | |
| 113 | `Unkstruct_7ef9c9ef` | 625 | 125 | 4 | 0x6 | 2 (+1 sign) | | |
| 114 | `Unkstruct_ad0948d5` | 625 | 125 | 5 | 0x1c | 0 (+0 sign) | | |
| 115 | `Unkstruct_fccefc1f` | 625 | 125 | 2 | 0x1a | 0 (+0 sign) | | |
| 116 | `Unkstruct_57ae03d1` | 620 | 124 | 2 | 0x2c | 0 (+0 sign) | | |
| 117 | `Unkstruct_af1e9d57` | 620 | 248 | 4 | 0x64 | 0 (+0 sign) | | |
| 118 | `Unkstruct_172cbd29` | 620 | 124 | 2 | 0x1fc | 0 (+0 sign) | | |
@@ -131,7 +131,7 @@
| 123 | `Unkstruct_8011512E` | 532 | 133 | 1 | 0x2 | 0 (+0 sign) | D_8011512E | |
| 124 | `Unkstruct_8016BFA8` | 532 | 133 | 4 | 0x24 | 0 (+0 sign) | | |
| 125 | `Unkstruct_30befa8c` | 520 | 130 | 3 | 0xfe | 0 (+0 sign) | | |
| 126 | `Unkstruct_00ddc7c9` | 520 | 130 | 1 | 0x2 | 1 (+0 sign) | | |
| 126 | `Unkstruct_b7ae0eae` | 520 | 130 | 1 | 0x2 | 1 (+0 sign) | | |
| 127 | `Unkstruct_01082f7a` | 520 | 520 | 1 | 0x4 | 0 (+0 sign) | | |
| 128 | `Unkstruct_db0ee441` | 516 | 129 | 4 | 0x38 | 0 (+0 sign) | | |
| 129 | `Unkstruct_7476116e` | 516 | 129 | 1 | 0x4 | 0 (+0 sign) | | |
@@ -143,7 +143,7 @@
| 135 | `Unkstruct_494cef68` | 496 | 124 | 2 | 0x188 | 0 (+0 sign) | | |
| 136 | `Unkstruct_93df0322` | 496 | 124 | 4 | 0x38 | 0 (+0 sign) | | |
| 137 | `Unkstruct_3b2b6e45` | 496 | 124 | 4 | 0x38 | 0 (+0 sign) | | |
| 138 | `Unkstruct_31283f15` | 492 | 123 | 3 | 0x6 | 0 (+0 sign) | | |
| 138 | `Unkstruct_9e228c39` | 492 | 123 | 3 | 0x6 | 0 (+0 sign) | | |
| 139 | `Unkstruct_a05973fa` | 492 | 123 | 3 | 0x2c | 0 (+0 sign) | | |
| 140 | `Unkstruct_48c11385` | 441 | 21 | 5 | 0x68 | 0 (+0 sign) | | |
| 141 | `Unkstruct_a55a221e` | 428 | 428 | 1 | 0x215 | 0 (+0 sign) | | |
@@ -153,16 +153,16 @@
| 145 | `Unkstruct_8016B5C0` | 399 | 133 | 2 | 0x1c | 0 (+0 sign) | | |
| 146 | `Unkstruct_8016BFA8` | 399 | 133 | 3 | 0x6 | 0 (+0 sign) | | |
| 147 | `Unkstruct_8011F7F0` | 399 | 133 | 3 | 0x42 | 0 (+0 sign) | D_8011F7F0 | |
| 148 | `Unkstruct_2552224c` | 393 | 131 | 3 | 0x10 | 0 (+0 sign) | | |
| 149 | `Unkstruct_1649b9a7` | 392 | 28 | 8 | 0x38 | 0 (+2 sign) | | |
| 150 | `Unkstruct_ea5ed765` | 390 | 130 | 1 | 0xdb | 0 (+0 sign) | | |
| 151 | `Unkstruct_80135260` | 390 | 130 | 3 | 0x6 | 0 (+0 sign) | | |
| 152 | `Unkstruct_a472a6ba` | 387 | 129 | 3 | 0x1c | 0 (+0 sign) | | |
| 153 | `Unkstruct_630777a3` | 387 | 258 | 2 | 0x5 | 0 (+0 sign) | | |
| 154 | `Unkstruct_f2440762` | 384 | 128 | 1 | 0x4 | 0 (+0 sign) | | |
| 155 | `Unkstruct_80164BDC` | 384 | 128 | 5 | 0x64 | 0 (+1 sign) | | |
| 156 | `Unkstruct_8c2ab96e` | 384 | 128 | 3 | 0x8 | 0 (+0 sign) | | |
| 157 | `Unkstruct_d448adea` | 384 | 48 | 0 | 0x0 | 0 (+0 sign) | | |
| 148 | `Unkstruct_1649b9a7` | 392 | 28 | 8 | 0x38 | 0 (+2 sign) | | |
| 149 | `Unkstruct_ea5ed765` | 390 | 130 | 1 | 0xdb | 0 (+0 sign) | | |
| 150 | `Unkstruct_80135260` | 390 | 130 | 3 | 0x6 | 0 (+0 sign) | | |
| 151 | `Unkstruct_a472a6ba` | 387 | 129 | 3 | 0x1c | 0 (+0 sign) | | |
| 152 | `Unkstruct_630777a3` | 387 | 258 | 2 | 0x5 | 0 (+0 sign) | | |
| 153 | `Unkstruct_f2440762` | 384 | 128 | 1 | 0x4 | 0 (+0 sign) | | |
| 154 | `Unkstruct_80164BDC` | 384 | 128 | 5 | 0x64 | 0 (+1 sign) | | |
| 155 | `Unkstruct_8c2ab96e` | 384 | 128 | 3 | 0x8 | 0 (+0 sign) | | |
| 156 | `Unkstruct_d448adea` | 384 | 48 | 0 | 0x0 | 0 (+0 sign) | | |
| 157 | `Unkstruct_2552224c` | 381 | 127 | 3 | 0x10 | 0 (+0 sign) | | |
| 158 | `Unkstruct_e79a0730` | 378 | 126 | 2 | 0x24 | 0 (+0 sign) | | |
| 159 | `Unkstruct_1a8e907f` | 378 | 126 | 1 | 0x4 | 0 (+0 sign) | | |
| 160 | `Unkstruct_e1c73ac0` | 378 | 126 | 3 | 0x6 | 0 (+0 sign) | | |
@@ -170,7 +170,7 @@
| 162 | `Unkstruct_93e44aed` | 378 | 126 | 2 | 0x1c | 0 (+0 sign) | | |
| 163 | `Unkstruct_24687968` | 378 | 126 | 3 | 0xe | 0 (+0 sign) | | |
| 164 | `Unkstruct_89684c99` | 375 | 125 | 3 | 0x6 | 0 (+0 sign) | | |
| 165 | `Unkstruct_831a2d3a` | 375 | 125 | 2 | 0x24 | 0 (+0 sign) | | |
| 165 | `Unkstruct_d0754cca` | 375 | 125 | 2 | 0x24 | 0 (+0 sign) | | |
| 166 | `Unkstruct_89f82b52` | 372 | 124 | 3 | 0x1ca | 0 (+0 sign) | | |
| 167 | `Unkstruct_924d03d6` | 372 | 124 | 3 | 0x6 | 0 (+0 sign) | | |
| 168 | `Unkstruct_7fd6458b` | 372 | 124 | 1 | 0x40 | 0 (+0 sign) | | |
@@ -194,9 +194,9 @@
| 186 | `Unkstruct_801269F4` | 267 | 134 | 1 | 0x2 | 0 (+0 sign) | D_801269F4 | |
| 187 | `Unkstruct_8012C1DC` | 267 | 134 | 3 | 0x1c | 0 (+0 sign) | | |
| 188 | `Unkstruct_8011515C` | 267 | 267 | 1 | 0x2 | 0 (+1 sign) | D_8011515C | |
| 189 | `Unkstruct_640f8122` | 266 | 133 | 1 | 0x2e | 0 (+0 sign) | | |
| 190 | `Unkstruct_02495693` | 266 | 133 | 2 | 0x1e | 0 (+0 sign) | | |
| 191 | `Unkstruct_3f149285` | 266 | 133 | 1 | 0x2 | 0 (+0 sign) | | |
| 189 | `Unkstruct_1db7b82d` | 266 | 133 | 1 | 0x2e | 0 (+0 sign) | | |
| 190 | `Unkstruct_6bd63257` | 266 | 133 | 2 | 0x1e | 0 (+0 sign) | | |
| 191 | `Unkstruct_f85de09d` | 266 | 133 | 1 | 0x2 | 0 (+0 sign) | | |
| 192 | `Unkstruct_a310cf42` | 266 | 133 | 1 | 0x4 | 0 (+0 sign) | | |
| 193 | `Unkstruct_80115124` | 266 | 266 | 1 | 0x2 | 0 (+0 sign) | D_80115124 | |
| 194 | `Unkstruct_800D4BE0` | 266 | 133 | 1 | 0x4 | 0 (+0 sign) | D_800D4BE0 | |
@@ -207,4 +207,4 @@
| 199 | `Unkstruct_80126B62` | 265 | 252 | 2 | 0xe | 0 (+1 sign) | D_80126B62 | |
| 200 | `Unkstruct_76f4299b` | 262 | 131 | 1 | 0x4a | 0 (+0 sign) | | |
*18760 types in all; the table shows the 200 largest by site count. The full map with every type's layout (offset, width, sign, site count per field) and conflicts is `.run/P37/census/struct_map.json`.*
*18730 types in all; the table shows the 200 largest by site count. The full map with every type's layout (offset, width, sign, site count per field) and conflicts is `.run/P37/census/struct_map.json`.*
+85 -79
View File
@@ -733,63 +733,51 @@ bucketed by what each bucket needs before any plan is proposed. **Candidates for
- **2026-09-12 — T4 batch `t4_D55`** (`.run/P37/restruct/run_t4_D55.log`, `batch_t4_D55.json`): `restruct: batch t4_D55 rung D — 207 files (TUs; 207 drawable) · 412 declaration units: 411 canonical / 0 promoted / 1 K&R marked / 0 aliases typed / 0 __builtin_abs → abs / 1 kept · compiles 414 in 38 s wall · final 207/207 identical · written 207 files` → R22 (`.run/P37/baseline/r22_t4_D55.log`) **`check-all: 218 passed, 0 failed of 218`** (`wall=84.48 s`) → census `(census skipped)`.
## 🛑 SESSION CHECKPOINT — S107 (2026-09-12, FINAL — written for a FRESH session at 84 % context; the session's last commit follows this): gate 1 APPROVED, **T0 ☑ T1 ☑ T2 ☑ T3 ☑ — T4 IN PROGRESS (☐)** — 🛑 **T4 NEXT: resume the declaration layer where the cycle stopped (below, §1 "T4 — where it stands and the exact next commands"); xHigh** | R22 `check-all: 218 passed, 0 failed of 218` at `f2b58011e` (every one of the 21 T4 commits carries its own) | HEAD after this commit is the checkpoint's commit; tree clean; nothing pushed after `79b2f6f15` (Drew pushes, R6) | last batch `t4_D55` on 4293d0a84: 207 files (TUs; 207 drawable) · 412 declaration units: 411 canonical / 0 promoted / 1 K&R marked / 0 aliases typed / 0 __builtin_abs → abs / 1 kept · compiles 4
## 🛑 SESSION CHECKPOINT — S108 (2026-09-12, FINAL — written for a FRESH session; the session's last commit follows this): gate 1 APPROVED, **T0 ☑ T1 ☑ T2 ☑ T3 ☑ — T4 IN PROGRESS (☐): steps (a)–(f) DONE, two owed items left** — 🛑 **T4 NEXT: (g) the 51 TU-CONFLICT rows retried through `share_body` (needs a `--retry-excepted` flag), (h) the 593 "no visible definition" rows read on one example; then the T4 ☑ line, the P6 rules check, T5 (Max for the head types); xHigh** | R22 `check-all: 218 passed, 0 failed of 218` at `06615fe89` (every one of the session's ~40 gated commits carries its own) | HEAD after this commit is the checkpoint's commit; tree clean; nothing pushed after `79b2f6f15` (Drew pushes, R6)
**Replay this block into the chat at the next session start (R64); it is the ONLY in-phase context the next session inherits. Everything below
is what S107 knew and the next session must not re-derive.** **The checkpoint procedure (every session end, Drew 2026-09-12):** bank the
is what S108 knew and the next session must not re-derive.** **The checkpoint procedure (every session end, Drew 2026-09-12):** bank the
record (cookbook / decision log / accelerators / SETUP / stale assertions), **advance the post-100 % story — `docs/story.md` §10 and
`docs/retrospective.md` §7 from the session's decision-log entry — and regenerate `tools/timeline.py`**, then rewrite this block, commit, recap (R18).
1. **Where we are — and T4's exact resume.** Phase 37 (structs) opened 2026-09-11 (S106, gate 1: grind to zero on raw casts / lying declarations /
levers; placeholders + cited evidence; T7 = the P36 agent lane on Drew's word; the full canonical declaration layer; R107–R117 ratified; no
tags at closes). S107 built T3 (the engine — the T3 ☑ line above) and ran T4 for ~4 h: **the rung-D fleet cycle** (`tools/restruct_cycle.sh`,
batches `t4_D1`–`t4_D20`: ≈17,300 declaration units canonical, 1,302 K&R sites marked, 207 data aliases typed, 10 `__builtin_abs` → `abs`,
1,522 kept with causes) and **the alias-defined-function class** (`--unalias`: 120 of 149 back under their real names, 29 kept — the S107
log entries "T4 in progress" / "unalias sweep" / "CHECKPOINTED" carry every number and cause). Drew's two rulings this session: the
`audit_public` size gate = GitHub's 100 MiB hard limit (the red CI was SIZE alone; no ROM content); "ready for T4, xHigh set".
**T4's remaining work, in order (each step = detached run → R22 → commit; the cycle script does all three):**
(a) **the D cycle again** — `setsid nohup bash -c 'LABEL_PREFIX=t4_ TASK=T4 CENSUS=0 tools/restruct_cycle.sh 21 34 300 D; echo "cycle exit=$?"'
> .run/P37/restruct/cycle_t4e.log 2>&1 &` — the first batch is the TEST of the `DECL-NONE` settling (a batch that draws 300 TUs for 0 units
means the planner still counts rows the engine cannot act on: read `work_file_D`'s `skipped` reasons in the ledger); the cycle stops itself
on "nothing drawable". (b) **the 29 kept alias functions once more** (`--unalias $(cat .run/P37/restruct/kept_ua9.txt) --label t4_ua10` after
regenerating the kept list from the ledger — the definition-TU `()` fix and the untouched-caller relaxation were added AFTER the last pass;
expect the "jr merge" 11 to stay: they are the file-layout phase's). (c) **the shared headers**: `--apply --rung D --headers --batch 20 --label
t4_H1` (230 headers with lying declarations; serial, each judged on every includer — ~35 s each on 141 includers; the `--headers` batches
through the cycle: `HEADERS=1 tools/restruct_cycle.sh 1 12 20 D`). (d) **the 13 parked signature bodies** — per class `--apply --rung D
--callee F --body <pack>/body.c [--all-defs] --label t4_sigN` then R22 + commit: func_800385C0 (`.run/P36/agents/main__func_800385C0/body.c`),
func_80029D3C (`scratch/patch_signature.c`), func_80035210 (`body.c`), func_800384A8 (`body.c`), func_80183CC4 (4 TU copies, `--all-defs`,
`body.c`), func_80185578 (`body.c`), func_80188DF4 (3 copies, `--all-defs`), func_80188A30 (`body_free.c`), func_801A1E94 / func_801A5C44
(`body.c`), func_8017FC5C (2 copies), func_80157D20 (132 TU copies + a variant header `func_80157D20__99380536.h` — `--all-defs`; the biggest);
SKIP func_80015608 and func_8013CF68 (not closed in P36). After each: the copies are identical → `tools/share_body.py --plan` may share them
(the 51 TU-CONFLICT rows of `config/dedup_exceptions.tsv`: re-plan with `share_body --bucket extend --plan` after the D work, share what the
gate accepts, delete the resolved rows). (e) **the 3,546 "carried decl layer" banner comment blocks**: comment-only removal (the two `/* ====
… carried decl layer … */` lines around each block; the declarations inside STAY), one R22, one commit. (f) **the census + series:**
`tools/type_census.py -j 16 --sites` (3.5 min) → `tools/readability_progress.py --snapshot t4` → `tools/progress.py --json --readme` →
the honest new lying-declarations number (the 3,529 real-name callers of the unaliased functions were invisible at T1); the T4 ☑ line with
its verify lines; **then the P6 rules check** (the plan asks for one after T4). Then T5 (Max for the head types).
tags at closes). S107 built T3 (the engine) and started T4; **S108 (this session, ~10 h, ~60 commits, xHigh) ran T4's six checkpoint steps
to their floor: (a) the D cycle — `t4_D22`–`t4_D36`, `t4_D40`–`t4_D47`, `t4_D49`–`t4_D55` (≈90,000 declarations canonical in total, 5,092 K&R
sites marked); (b) the alias-defined functions — 133 of 149 back under their real names, 16 kept by cause; (c) the shared headers — the
header plan is EMPTY (`0 of 0`); (d) the parked signature bodies — 10 of 12 landed (`func_80157D20` ×132 via `--map-data`, `func_80029D3C` +
its 3 callers via `--with`, `func_80188A30` `void`→`s32`, seven more), the `md_SC07_004` pair and the other same-address copies of four
functions named for T7; (e) the 3,546 "carried decl layer" banner comment blocks removed (21,274 comment lines, 0 insertions); (f) the census
+ series published.** Every gated commit `check-all: 218 passed, 0 failed of 218`. The day's real story was FIVE instrument blind spots, each
repaired at its cause (item 5 below; accelerators P37 S108). **T4's two owed items, in order:**
(g) **the 51 TU-CONFLICT rows of `config/dedup_exceptions.tsv`** (P35's ledger — declaration-environment conflicts the D work may have
dissolved: `D_800B9A02 undeclared`, `conflicting types for func_80146C3C`, …): `share_body --plan` reports `0 classes` for both buckets because
`plan_classes` skips `c["excepted"]` (`tools/share_body.py:173`) — add a **`--retry-excepted`** flag (the excepted classes re-enter the plan;
the ledger row is deleted only when the gate accepts the share), then `tools/share_body_cycle.sh` (unattended: batch → exit code → log →
commit → periodic clean fleet run) on `--bucket extend` then `new`; the rows the gate still rejects keep their (refreshed) diagnostic.
(h) **the 593 `DECL-NONE "no visible definition"` rows that survive the fleet-unique fallback** — read ONE on the tree (R14): take a row from
the bucketing script in the "final census" log entry (e.g. a `.c` TU, not a header), run `restruct.defs_visible(tu).get(callee)` and
`argcheck.resolve_definition(callee, tu, …)` side by side; the disagreement is one of: a name with 2+ bodies where argcheck picked the TU's
binary's definition but the engine's `_files_in_dir` did not see it (an indented definition? a `_jr_` file outside the alias dir?), or a
twin dir (`corpus.src_dir`). Fix at the cause, re-run `--redraw DECL-NONE:visible` (TUs then `HEADERS=1`), re-census. Then: **the T4 ☑ line**
(its verify lines: the final census line, `lever_census --check`, the bucketed remainder), **the P6 rules check** (the plan asks for one after
T4), and **T5 (Max for the head types)** — struct unification from the map (`--write-types --top 6` previews; `--audit-types`'s 26 legacy
`pad<SIZE>` names; the 1,120 `parse error` declarations close with `--redraw DECL-KEPT` once `Pos800D20C0`-class types are canonical).
2. **The counters (T1, `tools/type_census.py`, coverage OK, controls 4/4; every verify line in the T1/T2 log entries).**
Raw dereferences **503,016** = P `*(T *)(…)` 409,007 + I `*(T *)ident|&D_|0x80…` 60,666 + X `((T *)e)[i]` 13,800 + M `M2C_FIELD` 19,543,
in 69,497 bodies (+18,912 A address-of casts and +36,681 C `((T *)p)->f` typed cast-member accesses, counted apart — C is rung 1's own
form, already a COMPONENT_REF); by base: param 276,860 · local 149,915 · `&D_` 40,122 · nested 24,076 · `D_` by value 8,860 · other 1,678;
the first parameter (`a0`/`param_1`/`arg0`) 241,554 = 48 %. Definitions **7,255** (canonical header 1,179 · `.c` file-scope 4,085 ·
`.c` block-scope 1,904 · per-function shared headers 63 · other headers 24) over **527 layouts**; 206 duplicate classes / 2,789 names
(tier 1 same-named 122, tier 2 opaque 84; **46 layout-twin classes / 1,844 names are NOT duplicates without flow evidence** — milestone
item 1 reads "one definition per TYPE"); 40 VARIANT names; 141 dead canonical names; 75 canonical names redefined in `.c`.
Declarations: 99,130 definitions (1,889 K&R); 4,279,365 extern function declarations over 12,139 names (3,870 spelled >1 way);
**6,415 names carry >1 body text** (identity = body hash `F:<nhash>` / shared header `H:<path>` / external `X:<space>:<name>`, never the
name); 1,078,837 data externs over 55,569 symbols (18,442 typed >1 way); asm-label aliases 5,749 (225 names); builtins memcpy 301 / abs
144; attributes packed 64 / aligned 12; **lying declarations 98,648 over 1,609 callees** (K&R-empty 91,357, narrow 7,291).
**Levers (`lever_census --check --strict`, made literal at T1): 4,010 marked (2,141 pins + 1,869 asm) + 6,717 direct GTE asm statements
in bodies (kinds `gte`/`gte-unsigned`, incl. func_8013D9B0's 268) + 314 per-TU asm macro definitions** — the `--check` headline (4,010)
keeps the P36 definition for the series. Global blocks: 2,123 runs of ≥4 adjacent scalar `D_` symbols (14,251 symbols). The 24 parked
P36 classes with reasons: `.run/P37/census/parked.tsv` (453 bodies / 691 sites; needs: signature 13, struct 7, ? 4).
**The struct map** (`.run/P37/census/struct_map_top.json` tracked; `struct_map.json` 6.4 MB and `body_base_type.json` 11 MB ignored,
regenerable): 18,760 types explain 99.2 % of the deref sites; the two largest are `Unkstruct_800B5CB8` (107,598 sites / 0x10C over 9,753
pointer globals — partly fused at low offsets) and `Unkstruct_80126B58` (65,397 sites / 0x24C, one instance global — the actor record of
`docs/actor-struct.md`); merge rules in SETUP §P37 S106 (typed-use parameters; positive shared evidence ≥1 offset with the callee's map
≥2 offsets; single-source locals; a width-conflict veto; `AT:`/`PTR:` global nodes seeded by the declared type; FLD nodes for pointer
fields). It is a MODEL: T2 tested it on bytes (below); T5 authors from it after T3's engine can judge every type per body.
2. **The counters at this checkpoint (`.run/P37/census/type_census.txt`, `census_t4c.log`; controls 4/4).** **`2171 lying declarations / 189
callees (+5092 K&R sites, +418 cross-binary apart)`** — from 98,648 / 1,609 at T1 (S107's end: ≈81,000 by the ledger; S108's census steps
13,832 → 8,830 → 2,367 → 2,171, each an instrument repair). Definitions **7,255** (527 layouts, 206 duplicate classes, 40 variant camps);
cast sites **503,013** in 69,497 bodies (four forms + A; unchanged — T6's). **Levers `lever_census --check: 3,730 pin/asm sites, 3,730 marked,
0 UNMARKED`** (from 4,010; `--strict` still FAIL by design: the 6,717 direct GTE statements + 314 per-TU asm macros are T6/T7's). The
remainder of 2,171, by its ledger verdict (every row has one): 1,120 `DECL-KEPT parse error (type unknown to TU)` → T5; 593 `DECL-NONE no
visible definition` → item (h); 417 `DECL-KEPT conflicting types elsewhere in TU` → T5/T7; 13 `syntax error` in `800.c`; 12 `void value not
ignored` (a `void` definition whose callers use `$v0` — the return-type lie: `func_80161208`, `func_801376E8`, `func_80150480`, `func_8017E3F0`,
`func_801843E0`, … a definition-side `--callee --body` each, judged as one unit); 8+2 arity; 2 bytes; 2 DECL-CANON; 2 still-aliased. K&R sites
apart: 5,092 over 155 callees (`// K&R: n of m args (P37 …)` on each line); cross-binary apart: 418 over 147 callees. Alias-defined functions:
133 / 149 back; the 16 kept = 10 jr-merge DIFFERS (`func_80146A6C` `func_8014C4AC` `func_8014F6F4` `func_801848DC` `func_80185EEC` `func_8018A224`
`func_8018A860` `func_8018AFD0` `func_8018B1DC` `func_8018CB18` — the file-layout phase's) + 5 return-type lies (above) + `func_8016BF50`.
Series: `docs/levers.md` (80 milestones, `lever_progress --check OK`), `docs/readability.md` (`t4` row: 8,830 at `274223396` — re-snapshot
after (g)/(h) with the 2,171 line), `progress.json`/README fresh at the last publish (`progress.py --check`).
3. **What T2 proved on the bytes (the design inputs for T3; the full tables are the T2 log entry and `.run/P37/probe/*.md`).**
(a) **Rung 1** (body-local `((P37S_<hash> *)base)->unk<HEX>` with the type from the cluster layout; misaligned layout entries skipped;
@@ -867,38 +855,56 @@ record (cookbook / decision log / accelerators / SETUP / stale assertions), **ad
`Unkstruct_80126B58` 146 fields / 28 overlaps + 1 misaligned — the overlaps are the map's width conflicts (T5: union vs split per offset).
`--audit-types` on the legacy header: 26 violations, all legacy `pad<SIZE>` names → T5's rename list.
5. **T4's instruments (all in `tools/restruct.py`; SETUP §P37 S107 needs a T4 paragraph — owed at the T4 close).** Rung D: `d_units` (the definitions
index = the TU's own file + its binary's dir + its headers + main/resident, REFUSING disagreeing definitions; `skipped` reasons → `DECL-NONE`
rows), `e_units` (class-E data aliases: `extern T aD_x __asm__("D_x")` → `extern T D_x;` + renamed uses; a same-name alias = declaration-only; a
conflicting typed view → ALIAS-KEPT "second typed view" — T6's aggregate), `b_units` (`__builtin_abs` → `abs`), the K&R marker `// K&R: n of m
args (P37 rung D <label>)`, the all-`()` arity candidate, the promoted candidate; **`plan_D`** skips TUs whose every lying callee is settled
(`settled_units`; `--redraw VERDICT` lifts it); the argcheck rows cached on the src stamp (`argcheck_cache.json`, 2.4 min to rebuild after any
`src/` change — the per-batch overhead). **`--unalias NAMES|ALL`** (`fn_alias_index`, `unalias_function`): the ladder in §1; rows
`UNALIAS-DONE/KEPT/REFUSED` with `mode` (ansi/krdef) and `cause`. **`--callee F --signature S | --body FILE [--all-defs] [--tu TU]`**
(`signature_change`): the body file's head is the signature; declarations scoped to the definitions' binaries (a shared header reaching other
binaries is left as is, logged). Cycle: `tools/restruct_cycle.sh START END BATCH D [ONLY]` with `LABEL_PREFIX= TASK= CENSUS=0 HEADERS=1
REDRAW=`. **Gotchas learned the hard way:** stop a detached judge with `kill -INT <python pid>` (the in-place compile restores in `finally`; a
TERM skips it), then `--restore`; never `pkill -f` a literal your own command line contains (exit 144, twice today); the walk's process pool
runs before any thread; the fallback ladder's per-file re-judge costs ~20 s × objects — the escalation rule bounds it.
5. **The instruments changed this session (all committed; SETUP §P37 S108 has every option).** `tools/restruct.py`: `defs_visible` (+ the sibling
TUs' shared headers — the 10,495-row blindness; + the fleet-unique third level `_fleet_unique_defs`), `unit_call_counts` (arity from the TU AND
its included bodies; the definition-head test), `--unalias` (data-typed declaration of the real name → the prototype, incl. `extern char f[];`;
a header-side arity error marks the INCLUDING TUs; escalation counts attempts), `--callee --body` + **`--with REL=FILE`** (caller-body edits in
the same unit) + **`--map-data`** (per-copy `D_` renames; count mismatch refuses) + header-borne definitions excluded from `--all-defs`,
`--redraw VERDICT[:cause]`. `tools/argcheck.py`: `_ALL` + `resolve_definition` (per declaring binary; `cross_binary`), `kr_marked`, `DEF` with
leading blanks, the K&R loop always feeds `_ALL`. `tools/type_census.py` + `tools/readability_progress.py`: K&R and cross-binary counted APART
(`kr_sites`/`cross_binary` + callees; two TSV columns). `tools/delever_oracle.py --snapshot-baseline`: REFUSES an empty/shrunken `build/`.
`tools/restruct_cycle.sh`: no fleet run when `src/` is unchanged after a batch. One-off drivers (ignored, commands in the log):
`.run/P37/restruct/sig_cycle.sh` (entries list at its top; `--tu` fallback), `strip_banners.py`. **Known-true controls to re-run after any engine
change:** `restruct --selftest` (54) · `--selftest --real` · `type_census --selftest` (21) · `defs_visible('src/ov_SC05_000/ov_SC05_000_jr_8017BEBC.c')
['func_80147514']` → the shared header · `defs_visible('src/md_MAIN_013/md_MAIN_013.c')['func_80128EA8']` → the fleet-unique header ·
`argcheck.resolve_definition('func_800CB8A4', 'src/md_MAIN_026/md_MAIN_026.c', …)` → its own `(void)` · `unit_call_counts` on
ov_SC01_077_jr_8015C32C.c / func_801483E8 → `([0], ['src/shared/ov/func_80161124.h'])` · `call_arg_counts` on ov_SC07_007_jr_8015B950.c /
func_80161B18 → `[0]`.
6. **Files and artifacts.** Tools: `tools/struct_layout.py`, `tools/restruct.py` (~3,300 lines), `tools/restruct_cycle.sh`, `tools/delever_oracle.py`
(linked mode + guard), `tools/delever.py` (`marker_edits(phase=)`), `tools/type_census.py` (`walk_all`), `tools/audit_public.py` (100 MiB +
WARN 80), `include/common.h` (the reinterpret macros; the `M2C_FIELD` note). Evidence (tracked): `.run/P37/restruct/{ledger.jsonl (36,032
rows), batch_*.json, apply_*.log, run_*.log, cycle_*.log, kept_ua*.txt}`, `.run/P37/baseline/r22_*.log` (every gate). Ignored: `argcheck_cache.json`,
`selftest/`, `macro_probe/`, `types_preview/`, the snapshot `.run/P36/delever/baseline/` (7,428 objects + `_link/`, at `033076501` — refresh
after the next green R22 with `--snapshot-baseline`, then `--calibrate ov_SC04_011 md_SC07_004 main -j 16`; `--apply` refuses on a stale one).
Docs this session: SETUP **§P37 S107** (T3; T4's paragraph owed), dictionary rows, cookbook **§458 addendum**, decision log **P37 S107** ×2,
accelerators **P37 S107** (8 entries), story §10 + retrospective §7 advanced twice, the timeline regenerated (78 rows); the wiki pages
`The-ROM-firewall` / `Verification-and-progress` (100 MiB) await Drew's wiki sync. **Still owed at T9:** `docs/actor-struct.md` (+0x108/+0x10C
are 4-byte), the §396(a) correction; a `tools-health` run (RED only on the P36 ledger's size until this session's gate change — now OK on that
rung; not re-run this session).
6. **Files and artifacts.** Evidence (tracked): `.run/P37/restruct/{ledger.jsonl, batch_*.json, apply_*.log, run_*.log, cycle_t4[e-j].log,
cycle_t4sig*.log, kept_ua*.txt, with_*.c/.h, body_func_80188A30_s32.c}`, `.run/P37/baseline/r22_*.log` (every gate), `.run/P37/census/
census_t4*.log` + `type_census.{json,txt}`. Ignored: `argcheck_cache.json`, `sig_cycle.sh`, `strip_banners.py`, the snapshot
`.run/P36/delever/baseline/` (7,428 objects + `_link/`; at the last batch's tree — refresh after the next green R22 with `--snapshot-baseline`,
then `--calibrate ov_SC04_011 ov_SC03_015 md_SC07_004 main -j 16`; `--apply` refuses on a stale one). Docs this session: accelerators **P37 S108**
(ten), decision log **P37 S108**, cookbook **§459**, SETUP **§P37 S108**, cookbook index (1,177), story §10 + retrospective §7 advanced, the
timeline regenerated (78 rows). **Still owed at T9:** `docs/actor-struct.md` (+0x108/+0x10C are 4-byte), the §396(a) correction, a
`tools-health` run (not re-run this session; the kit corpus will need `make kit-corpus` after the SETUP/cookbook edits — a `tool_census
--check`/`kit_coverage` red is expected until then), the dictionary rows for the new options (restruct/argcheck rows exist; no new tools).
7. **Environment and commands.** `~/bfm-decomp` on ext4; `.venv/bin/python`; every build `JOBS=16`/`-j`. Ghidra MCP not needed until T8. R22:
`make clean && make extract-all JOBS=16 && make check-all JOBS=16` (≈100 s; read the exit code). Oracle: `tools/delever_oracle.py
--snapshot-baseline` (ONLY after a green R22) · `--calibrate ov_SC04_011 md_SC07_004 main -j 16`. Engine: `tools/restruct.py --plan --rung D
--batch 300` · `--apply --rung D --batch 300 --label L -j 12` · `--headers` · `--unalias …` · `--callee F --body FILE [--all-defs]` · `--restore`
· `--status` · `--selftest [--real]` (54 / 59). Health: `make tools-health` (foreground, 8–15 min), `tools/doc_links.py --strict`,
`tools/tool_census.py --check`, `make kit-corpus`, `tools/cookbook_index.py --check`. No harness task-list tool exists (R28 = this file's ☐/☑).
7. **Environment, commands and the gotchas of this session.** `~/bfm-decomp` on ext4; `.venv/bin/python`; every build `JOBS=16`/`-j`. Ghidra MCP
not needed until T8. R22: `make clean && make extract-all JOBS=16 && make check-all JOBS=16` (≈90 s; read the exit code). Cycle: `setsid nohup
bash -c 'LABEL_PREFIX=t4_ TASK=T4 CENSUS=0 tools/restruct_cycle.sh START END 400 D; echo "cycle exit=$?"' > .run/P37/restruct/cycle_<x>.log 2>&1 &`
(+ `REDRAW="DECL-NONE:visible"` / `HEADERS=1 LABEL_PREFIX=t4_H`); it refreshes the snapshot + calibration itself when HEAD moved and stops on
"nothing drawable". Unalias: `--apply --unalias NAMES --label L -j 12` (`--apply` is required). Signature: `--apply --rung D --callee F --body
FILE [--all-defs [--map-data]] [--tu TU] [--with REL=FILE …] --label L -j 12`. **Gotchas:** (1) stop a judge with `kill -INT <pid>` and WAIT
for its exit (`ps`; ~2 min — it finishes its in-flight units) BEFORE `--restore`; a restore run early consumes `inflight.json` and the judge's
later writes have no tool-side restore (S108: 6 files reverted by hand, 197 orphan rows dropped). (2) `pgrep -f`/`pkill -f` never with a
literal your own command line contains (exit 144 — twice this session); bracket a character: `restruct_cycl[e]`. (3) Never edit
`CURRENT_PHASE.md` while a cycle is between its R22 and its commit (its python rewrites the file); check `ps` for `make` first. (4) A
`--snapshot-baseline` only after a GREEN clean fleet run (build/ is the tree's); it now refuses an empty build/. (5) `DECL-NONE` is a DONE
verdict: a settled row is redrawn only with `--redraw` — use the `VERDICT:cause` key, never bare `DECL-NONE` (it redraws every "already
canonical"/external pair: the t4_D21–D36 cost). (6) A "flat yield" is not "nothing drawable": bucket the remainder by ledger verdict before
stopping a cycle (the `md_*` modules were 3,700 never-judged pairs). (7) A pack's "one caller" is a claim: `grep -rnE '\bfunc_X\s*\(\s*\)' src`
before a signature unit.
8. **T4's residue, by name, for T5/T7 (each with its cause in the ledger).** T7: the `md_SC07_004` pair `func_801A1E94`/`func_801A5C44` (the
zero-argument caller `func_801A6A18(void) { func_801A1E94(); }` passes its OWN incoming `$a0` — re-sign the caller one level up in the same
`--with` unit); the other same-address copies of `func_80185578` (ov_SC03_014), `func_80188DF4` (ov_SC02_011 — a caller passes MORE arguments;
ov_SC03_104), `func_8017FC5C` (ov_SC04_002 — a short caller), `func_80183CC4` (ov_SC03_006/029/090 — per-overlay data with 1/0/4 symbols vs the
pack's 1: per-copy bodies read against their bytes); the 5 return-type lies (`--callee F --body` with the `s32` head, callers in the unit);
`func_8016BF50`; the 10 jr-merge functions (the file-layout phase's, not T7's). T5: the 1,120 `parse error` declarations (types the TU cannot
see — canonical types, then `--redraw DECL-KEPT`); the 417 `conflicting types` (a second declaration elsewhere in the TU — most will fall to
the canonical files). T6: 1,723 `ALIAS-KEPT "second typed view"` data aliases (aggregates), 253 kept from S107.
## Approved plan (verbatim, gate 1 — 2026-09-11)