_collision_debug_render is now strict exact: 4,192 padded / 4,182
meaningful bytes, 278 relocations, normalized sha256
5a365dfa90e8300c345e596646f4d2a0be40c6a2527b4b15e747a3de364990d3.
The source is the structural lane's /Od-guided reconstruction,
re-gated on 188d6c1b.
- Locals take the first-party RTC names (point, vector, vector_result,
collision_point, rotation_matrix, rotated_points, cube_vector,
textstring, position/velocity/new_*, o, p, i, j, k, bounds, v,
test_center). The RTC-recorded 2048-byte textstring replaces the
earlier 1000-byte buffer and its "bug" comment.
- The invented collision_debug_spray_globals aggregate becomes three
file-static arrays: collision_debug_spray_normals, _points and
_hit_flags. symbols.json carries the matching three-way static split.
Evidence for three separate variables:
- January's module-140 .bss contribution is exactly normals + points
+ hit_flags + the four scalars;
- the relocation addends are +0, +0x3840 and +0x7080;
- the /Od build addresses the three arrays separately and
non-contiguously;
- one aggregate loses 2 of the 278 relocations.
csplit output changes only collision_debug.obj.
- New helper COMDATs: _point_from_line3d, _scale_vector3d,
_add_vectors3d and _set_real_vector3d. Each is byte-identical to
January's selected copy (action_charge, actor_combat, actions), no
object defines any of them NODUP any more, and all pair-link in both
input orders. This follows the owner's 5e81dabf precedent for
all-inlined TUs (biped_limp_noodle, actor_type_infection).
- New point/vector cast at add_vectors3d(&point, &vector, &point): the
/Od build passes the 12-byte `point` local as argument 1 and 3 at
0x7b0c5c. It is byte-inert (stripped: still EXACT, same sha). The
cube-vertex cast was already present.
Function credit only. The object is not marked Matching.
_collision_debug_cube_vertices is static in source and in January
(absent from cachebeta.pdb publics) but still external in symbols.json.
That is a separate, pre-existing ownership follow-up.
Verification: full ninja (objdiff 3.3.1, as canonical); stable diff vs
frozen 8,245-function baseline +1 / 4,192 padded bytes, 0
regressions; parks 103/0/0; admission audit 13/0/7/0 (no new
contradiction); fake-match scan 0 -> 0; python -m pytest -q tools
1154 passed; git diff --check clean.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Identical text to claude/data-section-credit-20260920 for these six files
(git diff against that branch is empty), so the two branches merge cleanly.
ZERO Lane B credit is claimed: the five data sections belong to the data lane.
Taken deliberately because three of the hunks change relocation IDENTITIES
that Lane B code residuals need before they can ever gate exact:
action_vehicle.c 0.1225f -> 0.35f*0.35f (__real@3dfae147, January's
folded product) - _action_vehicle_find_destination
collision_debug.c assert text count<=14 - _collision_debug_render
path_structure_bsp.c assert spacing - _structure_test_line2d
and three are the .bss layout law (= 0 / = FALSE on debug globals):
player_control.c, collisions.c, bipeds.c
Units/functions: none change verdict. Strict meaningful +0, padded +0.
Fuzzy: none. Data: +489 B (116+300+43+26+4), credited to the data lane.
Stable regression: scratch/lane_b_before.json -> lane_b_w0.json, 0 regressions,
0 gains. Lane inventory row-diff: 0 losses, 0 moves. Parks 0 stale / 0 invalid.
Full ninja all_source progress semantic_progress: pass
(Code 1443979 / 1770166, 7291 / 7574; Data 2360994 -> 2361483).
Config/header changes: none. Reviewer: data lane's own verification; re-verified
here by full build and row diff.
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Integrate six accepted exact functions, two whole-object admissions, evidence-backed zero-credit source corrections, owner-header cleanup, and curated campaign records. Preserve zero regressions and exclude generated scratch archives from canonical history.