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.
Found by running a 128-machine session with tools/system_link_bots.py:
- The listen backlog was 32 connections, so machines joining at once were
refused; it is now the machine limit.
- Socket buffers are at least 1 MB. A host's connection to a machine must
hold every update the machine has not acknowledged, up to 128 ticks of
3.9 KB with 128 players; a full buffer blocked the host for the write
timeout. The host's connection to its own client must also hold all it
sends in one frame.
- Each machine that finished loading logged a line for every machine
still loading, 8,000 lines as 128 machines load; it now logs a count.
- Removing a machine dumped the whole server state to the log; when many
machines left at once the host wrote dumps for minutes.
- Machines that had loaded heard nothing while the others loaded, and a
client drops a connection that is silent for 15 seconds, less than the
60 seconds the host waits for slow machines. The host now sends its
pregame keep-alive every 5 seconds while machines load; a client in game
ignores it.
All under HALO_LINUX; the MSVC build is unchanged.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The Xbox game allows 16 players on 4 machines (4 split screen players
each). The native builds raise both limits to 128, keeping 4 players per
machine, and leave the byte-matching build unchanged: every change is
under HALO_LINUX (the MSVC objects compare identical).
- Limits: every local copy of the player and machine limits, and the
bare 4s and 16s that stood for them, follow halo_port_limits.h. The
player data array, the machine-to-player table (and its reset) and the
per-tick update arrays grow with them.
- Records: the copies of struct network_game agree on the larger layout
and check it against halo_port_limits.h; maximum_player_count becomes
a byte (128 does not fit a signed char); network_player_is_valid
checks the machine against the machine limit, not the split screen
one; a machine's input carries MAXIMUM_LOCAL_PLAYERS actions (16/4
would have become 128/128).
- Protocol: a message holds at most 4095 bytes (its header has a 12-bit
length), so the 13 KB game settings record is sent in 3.5 KB pieces
that clients reassemble; the per-tick update of 128 players (3,857
bytes) fits. Buffers and the packet codec's limits grow to match, and
the game search uses protocol version 2 so these builds and the Xbox
game never see each other's games.
- Connections: the host accepts a client connection per machine (the
split screen count stood in for it), FD_SETSIZE is 256, stream writes
send all of a message or drop a peer that stops reading instead of
corrupting the stream, and the input and update queues are larger.
- Host: lobby changes are sent at most every 250 ms instead of on every
change (a full lobby would otherwise send ~650 MB), in-game joins wait
in a queue instead of being dropped, the random name and colour
pickers stop looping forever once names or colours run out, machines
get 60 s to load a map, and the debug dump lists only the slots in
use (128 empty slots took seconds to log).
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Zero credit; every packet was independently adversarially reviewed (22/22 approved).
- critic_3: 72 renames of placeholder/invented static function names across 20
objects to first-party names. Each rename has Sept-2001 linker-map alignment
(cachebeta xbe / retail cache exe, several also Aug-2001), relocation-masked
body identity and matching callers; cachebeta publics show every row was a
January static. hs's radiosity_hack_{start,save,find_point}_evaluate pairing
is proven by the Sept .rdata hs_function_definition pointers; players'
create_weapon also matches HCEX.pdb. Objects: ai_debug (reviewer-amended: a
dead stub removed, its comment re-attached), transport_endpoint_winsock,
transport_endpoint_set_winsock (+ parked.json key renames), profile,
progress_bar, network_connection, saved_game_files, rasterizer_xbox_profile,
xbox_sound_cache, game_engine_king, players, hs, hs_runtime, main, decals,
rasterizer_lights, rasterizer_xbox_dynavobgeom,
rasterizer_xbox_environment_fog, rasterizer_xbox_hardware_bitmaps,
render_cameras.
- hs_compile: whitespace_characters, eol_characters and hs_type_primitive_parsers
are external (cachebeta publics, HCEX DataIsGlobal); hs_compile_finish is
static with a TU-local prototype (no public; HCEX static function).
- bink_playback: bink_playback_idle -> bink_playback_update__internal
(first-party). The bink_decompress_audio_frame rename is NOT landed: it needs
an added call whose position is unattested, the same class canonical held for
hardware_geometry in 4d1ebf17.
Gate (full ninja, objdiff 3.3.1): objects 383, code 1,577,237, data 2,586,915
(all unchanged); stable diff 0 regressions; parks 83/0/0; admission 11/0/2/0;
fake scan 26; pytest 1161 passed; diff --check 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.
- encounters: _encounter_update_status (stay_active flag, direct
accumulations in January's store order), _encounters_test_activation
(January's non-short-circuit activation OR chain, HCEA-corroborated;
bound parent and link locals), and park reopens
_encounter_compute_activation_cluster_bit_vector (named parent locals,
store-once dormant desire) and _encounter_update_respawn (bounded
respawn while loop)
- network_connection: _network_connection_write (real
notify_traffic_event calls replace a hand copy; January's double
would-block loop test; single exit) and _network_connection_new
(single-exit success flag replaces the goto teardown; January assert
texts) - both park reopens
- _symbol_name_from_address: reads through symbol_table directly
Stable diff vs 9062b1e96: 0 regressions; active parks 195 -> 191.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Owner-unblocked units, reviewed reconstructions, each strict exact in its
whole-TU gate with zero inherited losses, guard passing, no new owners:
- vehicles: _vehicle_update with cross/dot helpers on the object fields
(removes two invented static carriers), vehicle-type switch, PIN
- network_connection: read_unreliable/read_reliable single-exit bodies
with January's literals (including the '#d' typo) and a reset flag,
read assert text, get_address per-path clears, idle and
idle_server_reliable_endpoint (six park reopens)
- transport_endpoint_winsock: connect_endpoint_async, write_to_endpoint,
read_from_endpoint single-exit results (three park reopens)
- transport_endpoint_set_winsock: remove_endpoint_from_set single exit
Rejected: _poll_endpoint_set (negative-result clamp chosen to steer block
order), _add_endpoint_to_set (identical FD_SET branches),
_action_obey_command_begin (redundant store), _actor_action_try_to_dive
(units.h prototype contradicting its definition).
Stable diff vs 9062b1e96: 0 regressions; parks 250 -> 240.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Owner lifted the reservation on the concurrent-work units for this
isolated lane. Per-function donor harvest (upstream punpckhdq PR50 and
the unmerged root/publish-opus5-safe-20260913 reconciliation), each
landed as a house-rule-clean minimum body, strict exact in its whole-TU
gate with zero inherited losses:
- transport_network_available: boolean result declared and initialized
from the link-status mask (January masks the byte result)
- transport_nonce_is_equal: boolean comparison of the memcmp result,
keeping the owner void const * prototype
- winsock_error_to_string: January's switch case order
- read_endpoint: single-exit result with one error store
- network_connection_connected/disconnect: boolean expressions over the
client-flag and endpoint tests
Donor steering forms were not imported (boolean truncation casts,
byte * parameters). Stable diff vs 9062b1e96: 0 regressions; parks
261 -> 255.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>