From 95f68ad3ceeed0e2eaed8fa5d2b8c63299585fa2 Mon Sep 17 00:00:00 2001 From: Jonas Volman Date: Wed, 23 Sep 2026 00:25:44 -0700 Subject: [PATCH] Admit five strict-exact Halo objects after ownership audit --- config/config.json | 10 +-- .../five_small_objects_admission_20260923.md | 82 +++++++++++++++++++ source/memory/stack_memory_pool.c | 8 +- 3 files changed, 91 insertions(+), 9 deletions(-) create mode 100644 docs/object_matching_logs/five_small_objects_admission_20260923.md diff --git a/config/config.json b/config/config.json index 11ba4a05..e1888508 100644 --- a/config/config.json +++ b/config/config.json @@ -446,7 +446,7 @@ { "name": "source/shaders/shaders.c", "index": 71, "status": "Matching" }, { "name": "source/shaders/shader_definitions.c", "index": 72, "status": "Matching" }, { "name": "source/scenario/wind_definitions.c", "index": 73, "status": "Matching" }, - { "name": "source/scenario/wind.c", "index": 74, "status": "NonMatching" }, + { "name": "source/scenario/wind.c", "index": 74, "status": "Matching" }, { "name": "source/scenario/sky_definitions.c", "index": 75, "status": "Matching" }, { "name": "source/scenario/scenario_definitions.c", "index": 76, "status": "Matching" }, { "name": "source/scenario/scenario.c", "index": 77, "status": "Matching" }, @@ -560,7 +560,7 @@ { "name": "source/models/model_animations.c", "index": 185, "status": "NonMatching" }, { "name": "source/models/model_animation_definitions.c", "index": 186, "status": "Matching" }, { "name": "source/memory/texture_page.c", "index": 187, "status": "Matching" }, - { "name": "source/memory/stack_memory_pool.c", "index": 188, "status": "NonMatching" }, + { "name": "source/memory/stack_memory_pool.c", "index": 188, "status": "Matching" }, { "name": "source/memory/sl_list.c", "index": 189, "status": "Matching" }, { "name": "source/memory/memory_pool.c", "index": 190, "status": "Matching" }, { "name": "source/memory/lruv_cache.c", "index": 191, "status": "NonMatching" }, @@ -649,7 +649,7 @@ { "name": "source/interface/hud_draw.c", "index": 274, "status": "NonMatching" }, { "name": "source/interface/hud_definitions.c", "index": 275, "status": "Matching" }, { "name": "source/interface/hud.c", "index": 276, "status": "NonMatching" }, - { "name": "source/input/input_xbox.c", "index": 277, "status": "NonMatching" }, + { "name": "source/input/input_xbox.c", "index": 277, "status": "Matching" }, { "name": "source/input/input_windows.c", "index": 278, "status": "Matching" }, { "name": "source/input/input_abstraction.c", "index": 279, "status": "NonMatching" }, { "name": "source/input/HaloAutoTest.c", "index": 280, "status": "Matching" }, @@ -680,7 +680,7 @@ { "name": "source/game/game_engine_ctf.c", "index": 305, "status": "NonMatching" }, { "name": "source/game/game_engine_bomb.c", "index": 306, "status": "Matching" }, { "name": "source/game/game_engine.c", "index": 307, "status": "NonMatching" }, - { "name": "source/game/game_allegiance.c", "index": 308, "status": "NonMatching" }, + { "name": "source/game/game_allegiance.c", "index": 308, "status": "Matching" }, { "name": "source/game/game.c", "index": 309, "status": "NonMatching" }, { "name": "source/game/cheats.c", "index": 310, "status": "NonMatching" }, { "name": "source/game/aim_assist.c", "index": 311, "status": "NonMatching" }, @@ -841,7 +841,7 @@ { "name": "source/ai/action_guard.c", "index": 466, "status": "NonMatching" }, { "name": "source/ai/action_flee.c", "index": 467, "status": "NonMatching" }, { "name": "source/ai/action_fight.c", "index": 468, "status": "Matching" }, - { "name": "source/ai/action_converse.c", "index": 469, "status": "NonMatching" }, + { "name": "source/ai/action_converse.c", "index": 469, "status": "Matching" }, { "name": "source/ai/action_charge.c", "index": 470, "status": "NonMatching" }, { "name": "source/ai/action_avoid.c", "index": 471, "status": "Matching" }, { "name": "source/ai/action_alert.c", "index": 472, "status": "Matching" }, diff --git a/docs/object_matching_logs/five_small_objects_admission_20260923.md b/docs/object_matching_logs/five_small_objects_admission_20260923.md new file mode 100644 index 00000000..117c0c1f --- /dev/null +++ b/docs/object_matching_logs/five_small_objects_admission_20260923.md @@ -0,0 +1,82 @@ +# Five small Halo object admissions (2026-09-23) + +## Result and scope + +Five Halo-owned translation units outside the concurrent Lane D allowlist are +promoted from `NonMatching` to `Matching`. Their 93 January function bodies, +12,876 meaningful code bytes, and 4,116 target-owned data bytes were **already +strict-exact/credited** before this admission. This batch adds **zero** exact +code or data bytes; it changes the audited whole-object count from 408/833 to +413/833. Candidate-only pooled literals receive no January-byte credit. + +| Unit | Strict functions | Meaningful code | Target data | Candidate-only runtime code | +| --- | ---: | ---: | ---: | ---: | +| `source/ai/action_converse` | 9/9 | 856 | 36/36 | 0 | +| `source/scenario/wind` | 9/9 | 1,917 | 100/100 | 0 | +| `source/memory/stack_memory_pool` | 33/33 | 4,678 | 1,000/1,000 | 0 | +| `source/input/input_xbox` | 27/27 | 3,557 | 2,748/2,748 | 0 | +| `source/game/game_allegiance` | 15/15 | 1,868 | 232/232 | 0 | + +The fresh PID-isolated `gate.py --all` comparison passes for every unit. +`input_xbox` has an ordinary objdiff false negative for the 192-byte +`_input_key_is_down`; the hardened COFF comparator and existing accepted +semantic exception both classify it strict exact. None of these five has an +active park or object-admission rejection. The full `ninja` build, stable +function sweep, park validator, and admission audit were rerun after the +status changes. + +## Target-owned COFF and pooled-literal boundary + +`action_converse`, `wind`, and `stack_memory_pool` have exact target-owned +section identities, including normalized payload, size, flags, COMDAT +selection, symbol storage and offsets, and ordered relocation identities: +respectively 9/9 code plus 1/1 data; 9/9 plus 6/6; and 33/33 plus 24/24. +No target-owned COMMON or candidate-only code is present. Each surplus +candidate section is a naturally emitted SELECT_ANY pooled literal that the +January split imports and another January object selects with identical bytes +and relocations. Twenty ordinary VC7/XDK base/base pair links, in both input +orders against the selected-provider equivalents, report no `LNK2005` or +`LNK1169`; expected unrelated `LNK1120` unresolved externals remain. No +forced link, patch, stub, or attribution of these literal bytes is used. + +`input_xbox` likewise has 27/27 exact target code sections, 23/23 exact +target-owned noncode sections, and no candidate-only code or COMMON. Its only +candidate-only runtime section is the seven-byte SELECT_ANY `"buffer"` +literal. January imports it from this object and selects the identical copy +in `cseries.obj`; ordinary base/base links in both orders pass the duplicate +phase and stop only on unrelated unresolved imports. The 0x40c-byte private +`input_globals` BSS owner has January's symbol class and offset. + +`game_allegiance` has 15/15 exact code sections and no extra code. Its 40-byte +team-name table has ten resolved relocations to the same image addresses as +January. Its private four-byte pointer BSS owner has the same logical zero +contents, storage, size and offset; csplit's materialized BSS and VC7's +fileless BSS differ only physically. Ten candidate-only SELECT_ANY team-name +strings (77 bytes) are identical to January's selected providers. Twelve +ordinary provider-pair link probes (both orders) have no duplicate-definition +failure, though they stop on unrelated unresolved imports. HCEX PDB separately +corroborates the static pointer versus global team-name table. These +representation and literal-selection facts are disclosed; none earns new +data credit. + +## Source-quality and verification boundary + +The only source edit in this batch changes the private `stack_memory_pool_block` +metadata fields from misleading `void **handle` / `long lock_count` to +`char const *file` / `unsigned long line`, removing an unrelated pointer cast. +The allocation API already supplies those exact types; all 33 target functions +remain strict exact and the layout is unchanged. Other four source files are +unchanged. Existing provisional names in `input_xbox` and reserved scenario +layout spans in `action_converse` remain explicitly inferred, not claimed as +original spelling or structure members. Fake-match scanning finds no new +lead; no manual helper expansion, assembly, pragma, or new inline COMDAT was +introduced. The user's held `path_obstacles` parenthesis lever is untouched. + +After regeneration, `python -m tools.campaign.stable_verdicts diff` reports +**zero gained, zero regressed** over all 8,245 function rows; the strict +snapshot remains 7,493 exact. The admission audit reports zero contradicted +Matching labels, and park validation reports zero stale/invalid entries. +`python -m pytest -q tools` passes 1,152 tests, 5 skips and 26 subtests; +plain `pytest -q` is not the repository's supported invocation because it +also collects inaccessible scratch paths and omits the project import root. +`git diff --check` passes. No Lane D source file is touched. diff --git a/source/memory/stack_memory_pool.c b/source/memory/stack_memory_pool.c index 3a90f00f..09cc6f45 100644 --- a/source/memory/stack_memory_pool.c +++ b/source/memory/stack_memory_pool.c @@ -134,8 +134,8 @@ struct stack_memory_pool_block long slot_index; struct stack_memory_pool_block *previous; struct stack_memory_pool_block *next; - void **handle; - long lock_count; + char const *file; + unsigned long line; unsigned long header_signature; byte data[1]; }; @@ -1059,8 +1059,8 @@ static struct stack_memory_pool_block *stack_memory_pool_allocate( pool->blocks[pool->next_block_index], size); block = pool->blocks[pool->next_block_index]; - block->handle = (void **)file; - block->lock_count = line; + block->file = file; + block->line = line; if (!pool->first_block) { match_assert(