tools(phase-37): argcheck sees indented file-scope definitions and keeps every K&R definition per binary (116 false lies); restruct --redraw takes VERDICT:cause keys; D40–D47 done (3,489 canonical); census 2,367 lying / 256 callees (+5,082 K&R, +511 cross-binary apart) | 🛑 T4 in progress (S108)

This commit is contained in:
Drew T
2026-09-12 20:23:46 -06:00
parent 2391ee628d
commit fa2ccea3ea
11 changed files with 530 additions and 501 deletions
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-13T01:06:59Z at 274223396 (src stamp a91c084f1ac9e504, tool 3d72938e1b); 7305 files (4121 TUs + 3181 headers), 99130 function definitions; walk 62.7 s, total 200.3 s
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
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 (3830 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 8830 over 950 callees {'K&R-empty': 2997, 'narrow': 5833} · K&R sites (marked, counted apart) 5002 over 147 callees
STRUCT MAP 18741 types explain 498894/503013 deref sites (99.2 %); unassigned 4119; 4064 types span ≥2 bodies (441229 sites), 14677 single-body; types with conflicts 727, suspect 11
merges by evidence {'param': 36486, 'assign': 14665, 'ret-of': 3374, 'arg': 10173, 'return': 1524, 'assign&': 1051, 'arg&': 270, 'field': 9613}; vetoed {'arg-conduit': 115288, 'ret-of-multisource': 6686, 'assign-multisource': 34568, 'arg&-conduit': 14628, 'field-multisource': 7008, 'ret-of': 679, 'assign&-multisource': 12500, 'arg&-no-overlap': 3456, 'assign': 347, 'arg-no-overlap': 43021, 'assign&': 69, 'arg': 182, 'return': 12, 'field': 3224}
Unkstruct_800B5CB8 sites 107598 bodies 11187 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 65397 bodies 17047 fields 175 size≥0x24c width-conflicts 50 sign-mixed 60 merges {'param': 2100, 'arg': 1086, 'assign&': 106, 'field': 51} at D_80126B58 ptr D_80126B58
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
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_1fa9e810 sites 3144 bodies 131 fields 3 size≥0x49 width-conflicts 0 sign-mixed 0 merges {}
GLOBAL BLOCKS 2124 runs of ≥4 adjacent scalar D_ symbols (14253 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_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)
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… | 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
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
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) · 8830 lying declarations / 950 callees (+5002 K&R sites apart) · controls 4/4
struct_map: 18741 types over 18741 clusters explain 498894/503013 sites (99.2 %); 4119 unassigned sites; 727 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) · 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
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.0 s — OK
main 85/85 identical, mean 0.079 s per object
md_SC07_004 1/1 identical, mean 0.494 s per object
ov_SC03_015 32/32 identical, mean 0.146 s per object
ov_SC04_011 28/28 identical, mean 0.138 s per object
+3
View File
@@ -13,3 +13,6 @@ cycle: batch t4_D45 committed 265f2bcec — restruct: batch t4_D45 rung D — 30
log: t4_D46
cycle: batch t4_D46 committed b9a7791fe — restruct: batch t4_D46 rung D — 300 files (TUs; 585 drawable) · 266 declaration units: 263 canonical / 0 promoted / 0 K&R marked / 0 aliases typed / 0 __builtin_abs → abs / 3 kept · compiles 560 in 47 s wall · final 300/300 identical · written 263 files | check-all: 218 passed, 0 failed of 218
log: t4_D47
cycle: batch t4_D47 committed 2391ee628 — restruct: batch t4_D47 rung D — 285 files (TUs; 285 drawable) · 279 declaration units: 250 canonical / 0 promoted / 1 K&R marked / 0 aliases typed / 0 __builtin_abs → abs / 29 kept · compiles 553 in 46 s wall · final 285/285 identical · written 251 files | check-all: 218 passed, 0 failed of 218
cycle: nothing drawable at t4_D48 — 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_D48 wall=148.96 s
exit=0
+1
View File
@@ -0,0 +1 @@
delever_oracle --snapshot-baseline: 7428 object(s) under .run/P36/delever/baseline at 2391ee628; link inputs for 218/218 binaries under .run/P36/delever/baseline/_link (links.json)
+11
View File
@@ -693,6 +693,17 @@ bucketed by what each bucket needs before any plan is proposed. **Candidates for
- **2026-09-12 — T4 batch `t4_D47`** (`.run/P37/restruct/run_t4_D47.log`, `batch_t4_D47.json`): `restruct: batch t4_D47 rung D — 285 files (TUs; 285 drawable) · 279 declaration units: 250 canonical / 0 promoted / 1 K&R marked / 0 aliases typed / 0 __builtin_abs → abs / 29 kept · compiles 553 in 46 s wall · final 285/285 identical · written 251 files` → R22 (`.run/P37/baseline/r22_t4_D47.log`) **`check-all: 218 passed, 0 failed of 218`** (`wall=83.08 s`) → census `(census skipped)`.
- **S108 — the D cycle `t4_D40`–`t4_D47` DONE (no REDRAW; `cycle_t4g.log`; "nothing drawable at t4_D48"):** 619 / 724 / 602 / 606 / 418 / 265 / 266 /
279 units → **3,489 canonical / 36 K&R marked / 290 kept** in 2,264 files (`25c70a009` `6cb573173` `1464eb4ce` `d2e43e4c3` `f5c7c1809` `265f2bcec`
`b9a7791fe` `2391ee628`), each `final N/N identical`, R22 `check-all: 218 passed, 0 failed of 218`. Census after it (`census_t4b.log`): **`2367 lying
declarations / 256 callees (+5082 K&R sites, +511 cross-binary apart) · controls 4/4`** — from 98,648 / 1,609 at T1. The 2,367 bucketed by ledger
verdict (R117), every one with a cause: 1,120 `parse error (type unknown to TU)` (T5's canonical types, then `--redraw DECL-KEPT`), 667 `no
visible definition` (settled BEFORE `defs_visible`'s fleet-unique level — redrawn next), 417 `conflicting types` (T5/T7), 116 "already
canonical" (read: `func_80189888` is defined INDENTED at file scope in ov_SC02_000 — `argcheck`'s `DEF` anchored at column 0 missed it and
compared against ov_SC06_024's 6-parameter body; fixed: leading blanks allowed, and the K&R loop now feeds `_ALL` regardless of `out` so
BOTH binaries resolve to their own), 13 syntax errors in `800.c`, 8+2 arity, 8 DECL-CANON, 2+2 compile, 2 bytes, 2 still-aliased.
`--redraw` keys gained the `VERDICT:cause-substring` form (`DECL-NONE:visible`) so a redraw lifts only the rows it means.
## 🛑 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_D47` on b9a7791fe: 285 files (TUs; 285 drawable) · 279 declaration units: 250 canonical / 0 promoted / 1 K&R marked / 0 aliases typed / 0 __builtin_abs → abs / 29 kept · compiles
**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
+5 -3
View File
@@ -43,7 +43,8 @@ import lever_census as lc
REPO = pathlib.Path(__file__).resolve().parent.parent
NAME = r"[A-Za-z_]\w*"
DEF = re.compile(r"^[A-Za-z_][\w \t*]*?\b(" + NAME + r")\s*\(([^;{]*)\)\s*\{", re.M)
DEF = re.compile(r"^[ \t]*[A-Za-z_][\w \t*]*?\b(" + NAME + r")\s*\(([^;{]*)\)\s*\{", re.M) # leading blanks: 116 indented file-scope
# definitions were invisible (P37 T4, 2026-09-12)
DECL = re.compile(r"\bextern\s+[A-Za-z_][\w \t*]*?\b(" + NAME + r")\s*\(([^;)]*)\)\s*;")
@@ -93,12 +94,13 @@ def definitions():
# receives, so a prototype cast built from it stays compatible with the definition.
for m in KR_DEF.finditer(masked):
name, names = m.group(1), [n.strip() for n in m.group(2).split(",")]
if name in ("if", "for", "while", "switch", "return", "sizeof") or name in out:
if name in ("if", "for", "while", "switch", "return", "sizeof"):
continue
ptypes = kr_params(names, m.group(3))
head = masked[m.start():m.start(1)].strip()
out.setdefault(name, (len(names), ", ".join(ptypes), rel, head or "int"))
_ALL[name].append((len(names), ", ".join(ptypes), rel, head or "int"))
if (len(names), ", ".join(ptypes), rel) not in {(a_, p_, r_) for (a_, p_, r_, _) in _ALL[name]}:
_ALL[name].append((len(names), ", ".join(ptypes), rel, head or "int")) # every definition, per binary (R48)
return out
+8 -3
View File
@@ -2485,12 +2485,17 @@ def plan_D(headers, batch, only, settled=frozenset()):
def settled_units(rows, redraw=()):
"""{(tu, callee)} whose LATEST rung-D row is a DONE verdict not in `redraw` (R70: the last row is the verdict)."""
"""{(tu, callee)} whose LATEST rung-D row is a DONE verdict not lifted by `redraw` (R70: the last row is the verdict). A redraw key is a
verdict (`DECL-KEPT`) or `VERDICT:cause-substring` (`DECL-NONE:no visible definition` — the 667 rows settled before defs_visible's
fleet-unique level; the plain `DECL-NONE` key redraws every "already canonical"/external pair too, the t4_D21–D36 REDRAW's cost)."""
latest = {}
for r in rows:
if r.get("rung") == "D" and r.get("unit", "").startswith("decl:"):
latest[(r["tu"], r["callee"])] = r.get("verdict")
return {k for k, v in latest.items() if v in DONE_VERDICTS and v not in set(redraw)}
latest[(r["tu"], r["callee"])] = (r.get("verdict"), r.get("cause") or "")
keys = [(k.split(":", 1)[0], k.split(":", 1)[1] if ":" in k else None) for k in redraw]
def lifted(v, c):
return any(v == kv and (ks is None or ks in c) for kv, ks in keys)
return {k for k, (v, c) in latest.items() if v in DONE_VERDICTS and not lifted(v, c)}
def plan_L(headers, batch, only):