Zoomed in, the aim eases toward the hand's (the PC mod HaloCEVR's
half-life formula: about 15 ms at zoom 1, 25 ms at zoom 2), steadying a
scope; unzoomed it is the hand's as it is. Smoothing in the headset's
recentred space, it is untouched by snap turns.
The local player's shots buzz the weapon hand (and, held in both, the
other more softly), by weapon from its tag's name: pistol, shotgun,
sniper, rocket, fuel rod, flamethrower, needler, plasma rifle, assault
rifle, plasma pistol; a shotgun's pellets are one buzz. vr.haptics
scales every buzz, the gestures' too.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Import only independently reviewed production changes. Preserve canonical physics and virtual-keyboard repairs; keep B3 and all unresolved holds out.
Record exactly four approved canary debits (6987 meaningful bytes), six Halo admissions and two revocations. Keep vendor ioinit/storage work separate. Full build, 8252-row sweep, 1318 tests, park/admission/fake audits and 621-object binding pass within approved debit bounds.
Do not publish donor research dumps or private assets. README and unrelated user research remain untouched. See frontier_publication_reconciliation_20260927.md for complete evidence limits and accounting.
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.
All packets passed a precedent audit and an independent adversarial review.
No object changes status.
- Storage per cachebeta publics (source static + symbols.json rows):
- bink_playback: four globals;
- weapons: 11 rows + weapon_magazine_finish_reload;
- object_lights: 4 helpers; should_render_lights is the /Od-attested call and
its prototype leaves the public header;
- vehicles: _update_turret_physics;
- weather_particle_systems: one_over_char_max is external (cachebeta public,
HCEX Global); its globals are static;
- rasterizer_xbox_debug: 8 D3DINLINE wrapper rows (already Matching: audit
FAIL(8) -> PASS, pdb 8 -> 0).
- draw_string: the invented external draw_string_globals aggregate (pads, blob,
#define aliases) becomes four HCEX-attested file statics in /Od declaration
order with = { 0 } (a595bbc2 precedent); typed multitexture params.
- render_debug: three rule-6 hand expansions become real point_from_line3d
calls (ruling #1/#2); the opaque vehicle view gives way to struct
vehicle_datum + vehicle_datum_try_and_get; the six debug_* toggles become
tentative definitions (COMMON evidence).
- vehicles: the TU-wide REAL_MATH_EXTERNAL_POINT_FROM_LINE3D define is gone and
the pathfinding hand expansion becomes the genuine call (ruling #1).
- rasterizer_xbox_profile V1R (reviewer-amended): byte-inert /Od parameter
order, the BUG marker comment, detail_objects via the rasterizer_xbox.h API,
and a rejection text that keeps the SDK-table policy question open.
- semantic_data_matches.json: single-section '$'-defect entries with
allow_incomplete_unit for projectiles _projectile_update_section (1,548 B) and
object_lights _lights_section (1,541 B) (leaf_map / editor_flying_camera /
race precedents).
Gate (full ninja, objdiff 3.3.1): objects 384 (unchanged), code unchanged,
data +3,089; stable diff 0 regressions; parks 83/0/0; admission 10/0/2/0; fake
scan 26; pytest 1159 passed; diff --check clean.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Structural lane batch 6: +1,632 padded / +1,590 meaningful bytes strict
exact (4 functions), zero stable-verdict regressions across the full
board (the header consumer sweep).
- rasterizer_geometry.h/.c: uncompress_int32_to_real_vector3d returns
real_vector3d by value. The debug build shows the struct-return copy
at all 16 call sites, and HCEX lists a single parameter. Callers in
rasterizer.c, rasterizer_lights.c and rasterizer_xbox_lights.c assign
the result directly and drop their scratch buffers. Exact:
_compress_real_vector3d_to_int32 and _clamp. The parked
_rasterizer_sun_glow_draw is re-measured (same size, fuzzy
95.815 -> 95.817).
- game/players.h: declare players_debug_render(void), a public players.c
function that render_debug.c called undeclared (C4013). Disclosure: the
by-value prototype drops one declared name, which alone flips
_rasterizer_frame_statistics_draw's field-load order. This genuine
missing prototype restores that TU's name count. Both edits are
independently evidenced and landed together; the full build shows no
regression.
- weapons.c: _weapon_magazine_finish_reload reads magazine->rounds_loaded
(/Od 0x6a4590).
- rasterizer_xbox_hardware_geometry.c: _rasterizer_triangle_buffer_new
follows the debug build (0x7eaca0), including the index-buffer Unlock
with its HRESULT check. This removes the _ReadWriteBarrier/pragma/goto
steering.
- parked.json: unpark the three newly exact parked functions.
Gate: ninja PASS, parks 109/0/0, admission 0 contradicted/0 revoked,
provider link PASS, casts and fake scan unchanged, pytest 1152 passed /
5 skipped / 26 subtests.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
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>
Integrate verified source and data progress; exclude unproven COMMON ownership, held UB/asm forms, and address-named data credit. Stable sweep: 23 exact functions gained, zero lost.
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>
The owner-authorized final implementation wave worked only the ten Tier B
functions of the research campaign, each a structural defect confirmed by two
independent lenses; census first, five evidence-driven shapes at most, stop at
allocation, scheduling or x87 ties. Three closed, seven did not.
- hud _temporary_hud_draw_reticle: January does a SIGNED `% 16` (`and eax,
0x8000000f; jns; dec; or -16; inc`) where ours did `and eax,0xf`. NUMBEROF
yields size_t, so `next_point_index % NUMBEROF(points)` was an unsigned modulo;
a signed named count NUMBER_OF_TEMPORARY_HUD_RETICLE_POINTS sizes the array and
bounds the loop. It fixes the type, not a cast. The three point stores become
one set_real_point3d call (laws_w2 A4).
- weapons _weapon_can_be_fired: single-exit form (A3). It writes `result = FALSE`
in two arms, which I tested against the identical-fake-branch prohibition: the
merged `if (age >= 1.0f || chain)` spelling is residual, while January emits a
SEPARATE physical FALSE exit for the age test (`jne; pop edi; xor al,al; pop esi;
pop ebp; ret` at 0x35-0x3c) before game_engine_running is ever called. Two
distinct rejection blocks is laws_w3 A26's admission criterion, unlike the
rejected _bink_query_analog_controller_buttons, whose edges share one block.
- rasterizer_transparent_geometry _rasterizer_transparent_geometry_initialize:
single exit `success = success && aux_buffer()`. Semantics are unchanged; the
error block is the last statement before the call, so the short-circuit sits
exactly where the early return did.
All three parks removed. Not closed and reported in the wave ledgers:
_path_state_traverse, _flag_update, _bitmap_2d_sharpen, _light_volume_render,
_actor_stimulus_prop_acknowledged, _stack_memory_pool_allocate,
_particle_system_new_particle_jet.
Full ninja, parks 268 active / 0 stale / 0 invalid, stable diff vs
scratch/opus5-next150-before.json: gained 15 / 9,504 padded, regressions 0;
fake_match_scan 0 leads on all three files, matching HEAD.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Header packet from wave w3 (adversarially verified). bipeds.c called unit_animation_start_action, unit_cause_player_melee_damage, unit_update_animation (units.c owners) and weapon_stop_reload, weapon_prevents_melee_attack (weapons.c owners) through C4013 implicit declarations. Their genuine owner prototypes are added to units.h (with a struct unit_animation_update_data forward declaration) and weapons.h. With them, _biped_update (1120) is strict exact: January's case block order (moving arms before idle), the 0.1f*0.1f throttle literal (3c23d70b), and direct stores to player_melee_ticks / player_melee_attack_tick with a short melee_speedup_ticks. The header and source land in one commit because the header alone moves the parked _biped_update hash (the ninja park check would fail on an intermediate commit).
Consumer blast (76 units compiled H vs P, including units.c, vehicles.c, weapons.c): only bipeds::_biped_update and the non-exact unparked physics::_physics_update_old hash changed. Live tree: full ninja + whole-board stable sweep +1 gained / 0 regressions; park removed; parks 284/0/0.
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>
Packet P2 dependent: write the previously unwritten _weapon_place (208/4 fuzzy, sha-only residual from weapon_index/EBX liveness) using the scenario_weapon_datum owner type: clamp magazine 0 rounds to the definition maxima, set at-rest / cannot-be-garbage / does-not-accelerate flags, lift a non-at-rest weapon by 0.05. Zero strict credit. Full ninja build and stable sweep: 0 regressions.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Wave w1 landing, adversarially verified. exact: _animation_update. Full build of the combined batch: 54 strict gains / 29,440 padded, 0 regressions, parks 355/0/0.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
actor_firing_blindly (actors.h), player_aim_projectile (aim_assist.h), projectile_kill_tracer (projectiles.h), unit_adjust_projectile_ray (units.h) and the remaining weapon datum flag bits. Removes the verbatim duplicate collision_surface_polygon prototype from collision_bsp.h; without that cleanup the two added declarations regress units::_unit_preprocess_node_orientations (declaration-count sensitivity, bisected). Full build with the weapons body: 0 regressions, parks clean.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Header prerequisite; zero credit. weapons.h is the genuine owner of both
public weapons.c APIs. weapon_estimate_time_to_target is already defined in
weapons.c; weapon_aim is January's public _weapon_aim. Signatures follow
January's call sites in actor_combat_update (nine-argument weapon_aim pushes
with the linear flag read back; three-argument estimate) and the HCEX DIA
widths recorded in actor_combat_obj_caller_closure_api_boundary_20260905.md.
Consumer audit: 19 direct includers (actors, actor_combat, aim_assist,
game_engine, game_engine_ctf, game_engine_oddball, players, player_control,
first_person_weapons, hud, hud_draw, hud_weapon, interface, weapons, objects,
object_types, bipeds, units, unit_scripting_commands). Full shadow build
passes; strict stable diff against the merged tip: 0 gains / 0 regressions;
parks 465 active / 0 stale.
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>
Retain 18 strict exact-function gains across Actions, Actor Combat, Decals, Game Engine, Object Lights, and Bipeds after removing donor bodies that regressed exact objects, emitted unowned code, or violated source-credibility rules. Name authenticated private symbols, move declarations to owner headers, record honest residual parks, and preserve units.obj at 189/189.