Independently gate storage + K, OQ-4 P-a/P-b1, four static-local packets and comment-only disclosures. Preserve all 7641 exact owner rows, 71 valid parks and 1161 passing tests; code/data credit unchanged. G and game_engine admission remain held because current canonical loses populate_statistic_buffer. Existing collision static-local repair is not duplicated. No donor tree, held candidate, scorer or private asset imported.
Lane D refresh packet 1: items and projectiles, +9,856 padded bytes strict
exact (4 functions), zero stable-verdict regressions.
- items.c: _item_update exact. Removes the invented storage unions and
punning casts; uses real point_from_line3d/dot_product3d helpers and
scoped locals. January items.obj references _point_from_line3d out of
line, so the COMDAT emission meets the owner ruling.
- projectiles.c: _projectile_update, _projectile_collision and
_projectile_collision_test_line exact. Debug-build (/Od) attested shapes:
the detonation-timer case fall-through, the `(moved = TRUE) &&` condition
and the duplicate magnitude_squared3d call. January projectiles.obj
references _point_from_line3d and _collision_test_line out of line; both
COMDATs are byte-identical to January's folded copies.
- parked.json: unpark _item_update (now exact).
Gate: ninja PASS, parks 150 active / 0 stale / 0 invalid, admission 0
contradicted / 0 revoked, fake scan 0 leads, castcheck clean.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Reviewed reconstructions, each strict exact in its whole-TU gate with
zero inherited losses, guard passing and no new owners:
- _actor_move_initialize: short sense-ray index (as the sibling loop)
and direct indexed stores instead of per-iteration pointer aliases
- _decal_sprite_get_bounds: edge-relative (0.0f - registration) extents,
matching the adjacent (x1 - registration - x0) extent spelling
- _search_and_replace: single-exit result instead of an early return
- _projectile_accelerate: rotation axis/magnitude scoped to the spin
block (reopens its park)
Rejected in review: _render_ui_widgets and _render_ui_widgets_postgame
(exact only with duplicated identical should_render arms).
Stable diff vs 9062b1e96: 23 functions gained, 0 regressions; parks 261.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Wave w3 landing, adversarially verified. park reopens: _projectile_aim_ballistic. Full ninja build and per-function stable_verdicts sweep: 0 regressions. 1 park(s) removed.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
+3 strict exact functions / 1,168 padded bytes: _projectile_set_action (32),
_projectile_effect_new (96) and _projectile_detonate (1,040), all previously
unwritten and emitted by their genuine January callers with the static names
from 2364150f9. Three previously unwritten bodies land as zero-credit fuzzy
source: _projectile_update (4064/179 vs 4064/179, allocator/frame-order tie),
_projectile_collision (2928/100, x87 home tie) and
_projectile_collision_test_line (496/10 vs 512/10; January's inline
point_from_line3d expansion would emit a forbidden COMDAT, so explicit math is
used).
The TU-private runtime projectile representation is preserved and no public
projectile_datum field or header changed. TU-local enums carry disclosure
comments, and the unreachable collision default uses match_vassert
(byte-identical). Adversarial review accepted all six; the three parks are
unchanged. projectiles: 24 exact / 6 residual / 0 unwritten.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>