Files
BFM-decomp/phase-ends/current/logs/T5.md
T

3.3 KiB

T5 log — long tail, one definition per type (attempt 1, expert-opus55)

Timeline

  • Baseline census (.run/logs/t5census0.log): dup_classes=205 outside_canon=5917 dead=142 variants=40 pad_names=25 parse_error_decls=1106 controls=4/4.
  • lift_types.py --candidates → 1464 liftable; dry-run (.run/logs/t5liftdry.log): 3006 local defs / 425 files; list saved .run/P38/t5_lift_all.txt (now stale: c1 changed --candidates).
  • retriever-code (no report): exact definitions of the five gating counts + lift_types --apply steps. Key facts:
    • dup_classes groups ALL defs by layout hash; tier 2 = every def all-placeholder member names; layout twins (tier 3, ≥2 meaningful signatures) not counted, but each camp with >1 name inside counts. No allowlist/evidence input: opaque layout twins without evidence ARE tier-2 dup classes.
    • outside_canon = every non-enum body outside CANON_HEADERS incl. .c block-scope (function-local stack-frame structs), src/shared/* fn headers, other headers; no exemption.
    • dead = canon names with 0 ident uses outside the two canon headers; uses inside canon (member types, alias typedefs) do not count.
    • lift_types scans src/ov_/.c only; writes engine_types.h only.
  • Coder T5.c1 (commit 907138d26): lifted 1308 names; lift_types.py fixed (file-scope only, refuse struct-with-object defs, skip common.h scalars u8/u16/u32/s32, skip names also in overlay-local .h). 156 not lifted, causes in .run/P38/t5/c1_excluded.txt. R22 green (t5c1r22c). Counts: dup 205, outside 3680, dead 447, variants 40, pad 72.
  • Coder T5.c2 (bc9c5bebb pads, 81fc2be28 dead, e5ba08739 variants, 6f01332bc Vec_td, 5bd5236ab log): pad 72→0 (pad_<off>), 314 dead defs deleted, 543 divergent defs renamed <Name>_<suffix> (scope-aware), 9 tag/typedef namespace pairs split N_tag/N_td. R22 green after each sub-step. Census (t5c2census2): dup_classes=198 outside_canon=3680 dead=134 variants=0 pad_names=0 parse_error_decls=1106 controls=4/4. Residual 134 dead listed .run/P38/t5/c2_residual.txt: 114 referenced by live canon defs, 12 used where census cannot see (D_*, macro bodies), 6 single-char names (census ident filter len>1, type_census.py:603; deleting W broke ov_SC01_077), 1 self-ref tag actor4c, 1 generated head type Unkstruct_80126B58.
  • Verify R22 at 5bd5236ab (.run/logs/t5verify.log): extract-all 217/0, check-all 218 passed 0 failed, rc 0.

Stopped: done-when vs instrument conflict

  • dup_classes=0: tier-2 classes are opaque layout twins with no evidence; the done-when says those stay apart and listed, the gate counts them. Reaching 0 = collapsing e.g. 293 opaque 8-byte names into one, i.e. "per layout", which G62/S106 forbids.
  • outside_canon=0: 1774 block-scope stack-frame structs + fn-header + md/main file-scope bodies would all move into canon headers; lift_types cannot reach them; block-scope frames are TU-local by nature.
  • dead: 114+6+12 residuals are live by construction; the metric ignores intra-canon references and short/D_ identifiers. Fixing the metric is an instrument change I did not make unilaterally (§5).
  • Not started: PsyQ SDK names, 800B5CB8 split/union call, twins list.

Hypotheses rejected

  • "lift_types covers the long tail": it sees only ov .c file-scope; 3680 remain outside canon.

Commands

  • .run/logs/: t5census0, t5liftdry, t5c1r22c (coder), t5c2r22a/c/e/f, t5c2census2 (coder), t5verify.