Recover transparent geometry submit (+1,285 meaningful code, zero exact losses); reconcile COMMON ownership and Q10 85+EXT1 credit, actions/main data, and separately disclosed denominator corrections. Preserve canonical-only repairs and all held research. C09 is ordinary disclosed cleanup, not a claim of proven scaffolding intent. Clean rebuild, 1,663 tests, parks, audits, provider links and independent EXT1 check pass. Local reconciliation only.
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.
January's ai_script.obj carries a one-byte external .rdata object,
_ai_script_squad_separator = '/', which our build did not emit at all. Our
source used the literal '/' at the one site that splits an "encounter/squad"
name with strrchr.
Now defined as a file-scope char const and used at that site. VC7 folds the
const into the immediate, so the function's code is byte-identical and
ai_script stays 116/116 exact - and because the object keeps external linkage it
is still emitted, matching January exactly: .rdata, one byte, class external,
0x2f, and zero code relocations to it on either side.
The defining-only variant also matches the bytes but was rejected: a global that
nothing uses exists only to emit a byte, which is what the no-fake-matching rule
forbids. Using it at the split site is what explains why January had it.
The data metric moved far more than one byte, from 2,360,994 to 2,364,914
(+3,920), which suggests the build credits a unit's data only once all of it
matches. That is being investigated separately.
Verified: full ninja green, code unchanged at 1,460,468 / 7,301, parks 181
active / 0 stale / 0 invalid, forbid guard exit 0, fake_match_scan 0 findings.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
The owner's ruling was to accept the 214-byte ai_script match only with a
documented target-proven BUG and an independent review. The review returned
CONFIRMED WITH CORRECTIONS; this commit lands every correction it required.
Code (comment only, zero bytes changed):
- Evidence now leads with January's 34-byte .rdata literal
"%s: ai_migrate_and_speak %s %s %s". The 0x14 cleanup proves three VALUES;
only the literal proves four CONVERSIONS, so the literal is the primary
evidence and the cleanup is corroboration.
- Struck "so no shipping configuration runs it". Both gate flags are exposed
as the HaloScript external globals ai_print_migration / ai_print_scripting
(source/hs/hs_globals_external.c:1468,1470) and are therefore settable at
runtime by a scenario script or the debug console in the very build being
matched. The disclosure now says the path is reachable.
Documentation:
- Removed the dangling "house rule 24" citation; docs/campaign_house_rules.md
has 22 rules. The governing text is the original-bug policy in
docs/matching_methodology.md, now cited directly with a correction note.
- Withdrew the "always-executed paths" distinction from the two donors the
owner previously excluded; reachability is not the owner's stated reason.
- Recorded the review itself, including the two checks it added that the
author had not made (the literal has exactly one relocation in the whole
object; the 2020 cross-build defect verified first-hand at VA 0x00948864)
and its finding that fake_match_scan cannot clear a variadic-arity case.
- Manifest: split source_commit into per-row landing_commit and
lane_tip_commit, which were previously conflated.
Re-verified after the edit: EXACT 224, source/ai/ai_script 116/116,
relocdiff sha equal with 0 differing rows, 16/16 relocations; full rebuild
reproduces 1,444,193 / 1,770,166 (7,292 / 7,574); parks 184 active / 0 stale
/ 0 invalid.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
_ai_scripting_migrate_and_speak becomes strict exact: 224/224 padded bytes,
16/16 relocations, relocdiff reports sha equal and zero differing rows.
January's call site cleans 0x14 bytes (five dwords) and loads speech_type only
afterwards at +0x7d, while the format literal read out of January's .rdata is
"%s: ai_migrate_and_speak %s %s %s" - four %s conversions for three values. Our
source was passing speech_type as a fourth value and cleaning 0x18.
Landed under the original-bug policy with a BUG (preserved for exact matching)
comment that records the evidence, the runtime consequence (the fourth
conversion's slot is the saved-EDI home, so vsprintf dereferences the caller's
entry EDI as a char *) and the corrected form. The branch is reachable only
under ai_debug.print_migration / print_scripting.
Flagged for owner ratification in the wave report; reverting is a single token.
Verification: full ninja build 1,444,193/1,770,166 Halo bytes (7,292/7,574
functions); stable_verdicts diff gained 1 / 224 bytes / 0 regressions; accepted
ledger +214 meaningful / 0 regressions; parks 184 active / 0 stale / 0 invalid;
admission audit 19/0/8/0; fake scan 0 findings in the changed file and the same
2 inherited findings across source/ai; git diff --check clean.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
- _rasterizer_draw_string / _rasterizer_draw_unicode_string: geometry
parameter and bounds locals declared at the top of the debug block
- _ai_scripting_renew: real_math.h random_range replaces the hand-written
seed_random_range(get_global_random_seed_address(), ...) (select-any
_random_range COMDAT, a genuine January function; A4 class)
- _ai_index_from_string: single-exit success flag with one reference store
Rejected: _light_volume_render (point_from_line3d COMDAT).
Wave 14 (second pass over actor_moving, physics, decals, projectiles,
hud_weapon, ui_widget, encounters, weapons) closed nothing.
Stable diff: 0 regressions.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Per-function transplant of historical and worktree donor bodies into the
current tree (whole-blob mining had rejected them for unrelated losses).
Each landing is the minimum hunk, strict exact in its whole-TU gate with
zero inherited losses, and reviewed for house rules and hard holds:
- helper spellings replace hand-expanded math (_device_frontfacing,
_point_in_triangle3d, _actor_look_valid_aim/look_vector)
- _pill_test_vector3d normalizes directly into the output normal
- natural control-flow/declaration forms reopen five parks
(_structure_cluster_mark/unmarked, __rasterizer_widget_draw_sprite2d,
_rasterizer_set_model_skinning, _ai_handle_editing)
- two byte-proven non-UB original bugs kept under the documented
original-bug policy with BUG comments (_ai_handle_editing unscaled
csmemmove counts, _ai_scripting_follow_target_ai repeated name)
Stable diff vs 9062b1e96: +11 functions, 0 regressions; parks 268 -> 263.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Wave w1 landing, adversarially verified. park reopens: _ai_scripting_allegiance_broken. Full build of the combined batch: 54 strict gains / 29,440 padded, 0 regressions, parks 355/0/0. 1 park(s) removed.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
+8 strict exact functions / 4,208 padded bytes, all previously residual:
_ai_scripting_migrate_internal (1,360; masked NONE test and scenario lookups
in January's order, source reference in January's private register ABI),
_ai_scripting_migrate_find_target_squad (1,072; January's two additional
scenario-definition lookups, found_squad_index initialized to NONE),
_ai_scripting_migrate (160; unchanged body, exact through its callee's ABI),
_ai_scripting_migrate_by_unit_internal (240),
_ai_scripting_command_list_status (592; MAX over per-actor status),
_ai_scripting_command_list_status_internal (80; single exit over a
bounds-checked command pointer), _ai_index_actor_iterator_new (208) and
_ai_scripting_vehicle_encounter (496). Behaviour is unchanged; no top-level
declaration, include or type was added. Adversarial review accepted all
eight; both ai_script parks are unchanged. ai_script: 109 exact / 7 residual.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>