# `source/physics/point_physics.obj` strategy ledger This retroactive ledger records preserved strict measurements and explicitly marks the detail lost before per-object experiment matrices were required. ## Scope and baseline - Compiler: XDK 3911 `CL.Exe` 13.00.9254.1, `/O2 /Oy- /DDEBUG /Dxbox`. - January target: `build/split/source/physics/point_physics.obj`. - Historical baseline: 5/6 functions exact; `_point_physics_update` was the only residual. - Current verified inventory: 6/6 functions exact, 1,822/1,822 meaningful code bytes, and 220/220 data bytes. `.text`, `.rdata`, `.data`, and `.bss` all report 100% after a clean XDK 3911 rebuild. ## Parked residual | Function | Size T/B | Relocs T/B | Hash T/B | Measured residual | Class | |---|---:|---:|---|---|---| | `_point_physics_update` | `0x570/0x570` | `68/68` identities | `5aca2728fa2d89a716057b07ccbcc1e00cbf126644391dcf1a534707f5cba88c` / `93750650472a8e7cfc7dff5fd05b16a5d0b61d4ba611b324a6d1612ed82dbeb4` | First divergence is target `MOV ECX,EAX` versus candidate three-byte `MOVZX` from CL, shifting later relocations by one; additional commutative x87 operand-order differences remain. | TU-context optimization | ## Preserved experiment history Five grounded low-byte/current-flags source shapes were built. The untouched source remained best at ordinary 99.39632%. Attempts to force the byte form introduced extra loads/spills and regressed the function. Individual transient hashes and source diffs were not retained by the historical lane. Do not repeat generic casts, low-byte snapshots, current-flags aliases, or declaration-order variants without new evidence. Do not use `volatile`, assembly, byte patches, undefined behavior, or flag changes. ## Reopen and disposition Reopen only with a legal-C use/lifetime shape proven to select the target two-byte move while retaining the 68-relocation graph, or with original local/source provenance. Recheck the 8-byte `.bss` under strict ownership rules before any object admission. ## Upstream resolution (2026-08-07) The completed object in `punpckhdq/halo` commit `76a2766930a98f946d669c6db3565c95301d11c4` was rebuilt in a pristine detached worktree before any integration. All six functions passed the hardened comparator, including relocation identity. The upstream `.rdata` (200 bytes), `.data` (12 bytes), and `.bss` (8 bytes) also matched the January object. The commit was then applied to the current campaign in an isolated integration branch. Conflicts were resolved without discarding unrelated current work: - the January-proven 0x40-byte `point_physics_definition` layout replaced the incomplete 0x34-byte HCEX-derived layout; - the anonymous 8-byte `point_physics_globals` block was replaced by the two target-owned four-byte globals; - the collision-user enum was restored so the source names user 13 instead of retaining a magic number; - a typed `point_physics_definition_get()` macro and size assertion were added to retain the project house rules. The consolidated Halo build completed successfully. The final strict function measurements are 6/6 exact, with `_point_physics_update` at 0x570 bytes and 68/68 relocations. The old `MOVZX`/x87 residual was therefore a type/source- provenance problem, not a permanent compiler tie. Disposition: strict object complete; eligible for canonical admission after the whole-tree regression manifest check. ## House-rule compliance re-audit (2026-08-07) The admitted source and header were re-read against `docs/house_rules.md` and Berthalamew's formatting/access guidance. Parameters and no-argument `void` lists are vertically formatted, every `void` definition ends with an explicit `return;`, tag access goes through the typed `point_physics_definition_get()` macro, and there are no raw object accesses, alignment coercions, assembly, `volatile`, `__forceinline`, or optimization pragmas. Files use CRLF consistently. No compliance edit was required. ## Independent atomic salvage revalidation (2026-08-13) The old completion was treated as untrusted and first transplanted into a fresh worktree at campaign parent `e30b15682e8745d5aa8ceb5cb4e455f3bedfcc83`. After it passed there, the result was transplanted again onto authoritative code tip `19236aca35b1a319bc4ed050bf628b2f4f9e5bb0` and every code, data, shared-header, build, and tooling gate was repeated. That explicitly includes the newly landed `collision_features.obj` changes to `real_math.h`; they caused no point-physics or sibling regression. The current XDK 3911 compiler and the freshly re-split January target were used for every measurement. This audit found two ownership details that the old completion report had missed: - `debug_point_physics` is defined by January's `source/linker_common.obj`, not by `point_physics.obj`. Keeping the upstream definition here produced a 12-byte rebuilt `.bss` against the target's 8 bytes. Removing that duplicate definition leaves an ordinary external reference and restores the exact target-owned 8-byte block. - The two anonymous BSS fields have distinct meanings and offsets. January stores the water mass factor at offset 0 and the air mass factor at offset 4. With the declarations in the old order, VC7 emitted the two statics in the reverse layout. Declaring water before air produces the proven target layout: `_global_water_mass_over_radius_cubed` at 0 and `_global_air_mass_over_radius_cubed` at 4. The relevant `symbols.json` entries now name the private renderer and both BSS fields. Re-splitting the target with those aliases makes the hardened `section_infos_equal` proof direct; no fuzzy or byte-only exception is used. ### Strict function evidence | Function | Padded bytes | Relocations | Normalized SHA-256 | Result | |---|---:|---:|---|---| | `_point_physics_initialize_for_new_map` | `0x30` | 6 | `9010f31148fb9f42a69e7b6dc423092e9c8d4f6e639697c11ef26ad900c91cd4` | exact | | `_point_physics_dispose_from_old_map` | `0x10` | 0 | `499f1f307c1cb989f968a6b7fcaec591e1828877223d0b0e7e8e8b76cde8c9ca` | exact | | `_point_physics_definition_get_mass` | `0x20` | 0 | `8792859ba0282c4bb0a61e5c5a43f9a5bbde5b578125c991b2a2a2b8dcae99ee` | exact | | `_point_physics_definition_interpolate` | `0x160` | 19 | `06fcdedf097eb65d7a48b29d30bdf0364aebfd23a79f8aa3bf6abc67e19571a3` | exact | | `_render_debug_point_physics` | `0x30` | 3 | `f8dfcdb85893a7f5ff751bcfc788d259cd7f1d13ddfa752c6312c547932eccaa` | exact | | `_point_physics_update` | `0x570` | 68 | `5aca2728fa2d89a716057b07ccbcc1e00cbf126644391dcf1a534707f5cba88c` | exact | All six functions pass strict size, normalized-byte, relocation-address, relocation-type, destination, and addend comparison. This is 1,888/1,888 padded code bytes and the ordinary report's 1,822/1,822 meaningful code bytes. ### Owned data and ownership evidence All 17 target-owned COFF sections pass `section_infos_equal`: the six function sections above, nine `.rdata` COMDATs (182 raw bytes, reported as 200 bytes with target alignment), the 12-byte `_global_point_physics_reference` `.data`, and the 8-byte mass-factor `.bss`. | Owned data | Bytes | Relocations | Normalized SHA-256 | Result | |---|---:|---:|---|---| | nine `.rdata` COMDATs | 200 reported | 0 | each owner checked independently | exact | | `_global_point_physics_reference` | 12 | 0 | `ca5622977c575e2fcacb390addd8f0dc1cd2b513916cf76e16b192067b183b53` | exact | | mass-factor `.bss` | 8 | 0 | `af5570f5a1810b7af78caf4bc70a660f0df51e42baf91d4de5b2328de0e83dfc` | exact | The split target necessarily labels extracted private sections as external, while VC7 emits the private helper and mass fields with static storage. The aliases, section bytes, exact field offsets, and every relocation destination are unambiguous; the external/static class difference is the known csplit ownership representation, not a different linked address. ### Rejected and accepted source shapes | Shape | Measurement | Disposition | |---|---|---| | Historical incomplete reconstruction | `_point_physics_update` `0x570`, 68 relocs, hash `93750650...`; 99.39632% | rejected | | Upstream completion copied literally | code exact, but rebuilt `.bss` `12/8` because it also defined `debug_point_physics` | rejected | | External `debug_point_physics`; old air-then-water declaration order | `.bss` size corrected to 8, but symbols measured air@0/water@4 against January water@0/air@4 | rejected | | External debug flag; water declared before air | `.bss` 8/8, water@0, air@4; all 17 owners strict | accepted | The five earlier low-byte/current-flags experiments remain recorded above and were not repeated. The decisive improvement came from recovered structure and ownership provenance, not from coercing the compiler. ### Blast radius and style audit The five changed shared headers were followed transitively through the source include graph. Thirty-three translation units were rebuilt in both the clean parent baseline and the candidate. All 1,633 previously strict target-owned sections remained strict; there were zero regressions. External-symbol metadata changed only in `physics.obj` (the January-owned physics globals are now declared/defined) and `point_physics.obj` (the intended completion). The final source follows the house and Berthalamew rules: one parameter per line, vertically formatted `(void)`, explicit final `return;` in void definitions, a single return where feasible, typed `tag_get` access through `point_physics_definition_get()`, named collision-user and result enums, and no raw object access. It contains no assembly, `volatile`, `__forceinline`, alignment coercion, optimization pragma, undefined behavior, or byte patch. No original January gameplay bug was identified in this object, so no fake bug comment was added; the duplicate debug-global definition was a reconstruction ownership bug and was corrected outright. ### Final gates - `ninja halobetacache_build`: passed from a clean full rebuild at the current campaign code state. - `ninja progress`: passed; the semantic audit reported zero unit errors, and `point_physics.obj` reports 6/6 functions, 1,822/1,822 meaningful code bytes, and 220/220 data bytes. - `tools.regression_gate snapshot/check --unit source/physics/point_physics`: passed with six `still_exact`, no failures, no warnings, and no changed nonexact function. - `python -m unittest discover -s tools -p 'test_*.py' -v`: 173/173 passed.