mirror of
https://github.com/Druthulu/BFM-decomp
synced 2026-10-05 17:03:23 -04:00
3.3 KiB
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 (
bc9c5bebbpads,81fc2be28dead,e5ba08739variants,6f01332bcVec_td,5bd5236ablog): pad 72→0 (pad_<off>), 314 dead defs deleted, 543 divergent defs renamed<Name>_<suffix>(scope-aware), 9 tag/typedef namespace pairs splitN_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; deletingWbroke 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.