mirror of
https://github.com/Druthulu/BFM-decomp
synced 2026-10-05 08:57:59 -04:00
3.8 KiB
3.8 KiB
T3.c3 — rung S apply: pinned base reaches apply; zero-site batches drawable again
Cause (evidence)
- Ledger t3_S6 (scratch
.run/T3c3/s6.py): 340 rows / 50 files; verdicts NO-SITE 332, KEPT 8; every base statusNO-TYPE-IN-MAP(397: Unkstruct_80126B58 255, Unkstruct_800B5CB8 142); sites RESIDUAL(NO-TYPE-IN-MAP) 2063, RESIDUAL(TYPE-NOT-CANONICAL) 728, KEPT(MISALIGNED) 16, KEPT(NON-STRUCT) 4. Examplesrc/ov_MAIN_012/ov_MAIN_012_jr_801549F8.cfunc_80155580: base param:a0 Unkstruct_80126B58 NO-TYPE-IN-MAP, 0 edits. - t3_S15 same type: status CANONICAL 1809 → 5136 members.
.run/P37/census/struct_map.json(rewritten by the cycle's per-batch census) lacks both names;.run/P39/census/struct_map.json(the pin's) has them.- So the brief's hypothesis was half right: plan_S's pinned bases DID reach work_file_S (bodies = plan payload), but
s_body_editscheckedstruct_map().get(tname)FIRST and returned NO-TYPE-IN-MAP before the canonical branch, though the canonical path only needscanon_types()field maps.typed_bases_ofread the live unpinned bbt (only the residual reason label; now pinned too). - The 7-9 "written files" per batch = the KEPT rows: kept-class sites (MISALIGNED / NON-STRUCT) respelled to
CAST_*macros by s_site_rows on the no-edit path (t3_S6: 8 files, 20 respells, e.g. ov_MAIN_012_jr_8013F350.c). No members.
Change (tools/restruct.py)
s_body_edits: NO-TYPE-IN-MAP only when the name is neither in the map nor canonical; the LOCAL branch requires the map entry (allow_local and t).typed_bases_of: cache =bbt()(same pinned merge as plan_S).- New
s_judged(row): a rung-S row with ≥1 base CANONICAL/LOCAL.s_finishedandledger_index(done set) ignore unjudged S rows. Choice over--redrawlabels: a row with no judged base is a tool non-judgement by definition, independent of labels; ledger scan shows such rows exist only in t3_S6..S14, S16..S18 (+13 in t3_S15 on all-NO-TYPE-IN-MAP bodies) —.run/T3c3/unj.py. The done-set part was found by the first probe (UNCHANGED, rows 0:doneskipped the body at its current nhash). - Selftest: fixture S rows carry
basesCANONICAL; new checks: unjudged row keeps the file drawable and out ofdone; s_body_edits on the planned pinned base with an empty struct map → CANONICAL with edits.
Commands
restruct.py --selftest→ 90/90 OK (both edits).make kit-corpus+make tools-health→ OK (first edit); rerun after the ledger_index edit (see VERIFIED in return).- commit 568de6c713 (first edit: s_body_edits, typed_bases_of, s_finished).
delever_oracle --snapshot-baseline→ 7428 objects at 568de6c71;--calibrate ov_SC04_011 ov_SC03_015 md_SC07_004 main -j 16→ OK.restruct --plan --rung S --bbt .run/P39/census/body_base_type.json --only "ov_*"→ 50 of 1872 drawable files · 340 bodies · 397 typed bases (= t3_S6's set); skipped file-finished 216.- Probe
--apply --rung S --bbt … --only src/ov_MAIN_012/ov_MAIN_012_jr_801549F8.c --batch 1 --label t3_c3probe -j 12→ IDENTICAL, members 1, written 1 (D_801801F0[((Unkstruct_80126B58 *)a0)->unk2]()). make check BINARY=ov_MAIN_012→ BYTE-IDENTICAL.type_census --check-casts --quiet→ unbacked 96, NOT 0 — pre-existing: none on the probe file (0 CAST_ there); unbacked sites sit on rows of t3_S1..S10 (t3_S1 MEMBERS/KEPT NON-STRUCT 32, t3_S2 MEMBERS SIGN 11, …; top file ov_SC04_011_jr_8017D494.c 19) —.run/T3c3/unb.py. Earlier logs (t2c3_casts) read unbacked 0: a T3-sweep regression for the expert.
For the expert
- Commits after 568de6c713 make the calibration stale again: snapshot + calibrate before the next apply/cycle.
- The struct_map leverage weights in plan_S still use the drifted live map (weight 0 for pinned names → alphabetical order); harmless for correctness.
- Resuming the cycle redraws t3_S6.. files first (1872 drawable).