re(units): read definitions with the code-derived layout — defaulted values 1 059 -> 2 351
unit_runtime.py can only place fields the disc values (it scores triples against disc records): 58 of 153 from one snapshot. data/unit_definition_layout.txt came from the title's loader instead, so it places all 159 — including the fields no disc record sets, which is the Route-B target. tools/re-capture/unit_dump_layout.py reads every field of every live definition object with that layout and keeps the discipline: a field the disc DOES value is a check, not a new value. Over two snapshots (19 objects): 700 cross-checks agree, 0 disagree. fields placed per object 58 of 153 -> 159 rows over those 19 units 609 -> 2 736 defaulted-on-disc values (whole file) 1 059 -> 2 351 Two traps recorded: the layout table's offsets are DECIMAL while the solver CSV prints hex (parsing as hex fails the cross-check on everything — which is how it announced itself), and angle fields can carry a prefix (AB_AA_PitchPlus is still an angle, so the AV_/AA_ test must match anywhere in the name). Flagged: UN_f201_TCAF_Tanker's object is not byte-identical between the two missions — per-mission override or a runtime-mutated field; needs a third snapshot to separate. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01NptfmpjdpNCKEez6d2xvA9
This commit is contained in: