Commit Graph
27 Commits
Author SHA1 Message Date
Jonas Volman 6bfd956737 Reconcile approved Halo fidelity packets and bounded data credit
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.
2026-09-29 13:52:37 -07:00
Jonas Volman f3aadeab98 Reconcile five Halo functions and approved declaration batches
Integrate coherent B3, P2/K17 prerequisites, completed K1-K16 + S, and the independent profile/effects rulings. Five gains and two explicitly approved B3 debits: net +3 strict functions, +2770 meaningful/+2800 padded bytes (+2774 progress credit). No additional losses; Halo objects 394 to 396 and data unchanged.

Clean rebuild, identical 8252-row stable sweep, 68 valid parks, admission/provider checks, 467-unit warning comparison, unchanged fake scan, and 1318 tests passed. Preserve canonical helper recoveries and unrelated work. Full evidence and disclosures in docs/object_matching_logs/astra_five_function_reconciliation_20260928.md.
2026-09-28 23:17:10 -07:00
Jonas Volman 709bfc3a3c Reconcile approved frontier ownership and admission packets
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.
2026-09-27 17:12:48 -07:00
Jonas Volman 7c0af5f029 Reconcile approved compiler-application code, data and owner repairs 2026-09-26 12:02:50 -07:00
Jonas VolmanandClaude Opus 5.5 b993052102 R2 batch 3: first-party function names and storage from the completeness-critic routes
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>
2026-09-24 16:59:40 -07:00
Jonas VolmanandClaude Opus 5.5 c789bec003 Correct ai_debug actor rendering scopes and vision-cone trig
Structural lane batch 5: zero-credit fuzzy improvement to
_ai_debug_render_actor (24,976 B, still residual); zero regressions.

- Fixes a real defect: the headspace vision cone used the vertical sine
  and cosine arrays swapped (January computes i/j from the cosine and k
  from the sine).
- Buffer types and scopes follow the debug build's RTC records and
  January's slots: textbuffer[1024], tempbuf[80], shared ring/height
  loop indices, and one block-scoped offset_point in the paths block.
- Exact-equal instructions rise from 6,181 to 6,472 of 6,662. Frame,
  slot set and relocation multiset now all match January. What remains
  is x87 operand staging and one tail merge.

Gate: ninja PASS, stable diff 0 gained / 0 regressions, parks 112/0/0,
pytest 1152 passed / 5 skipped / 26 subtests.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-23 05:31:57 -07:00
Jonas VolmanandClaude Opus 5 0269a75997 _ai_debug_render_actor: fix seven January-proven defects - ZERO bytes banked
A source-correctness landing under the standing "correct source beats a
misleading byte score" ruling. The function stays residual and this is not
scoreboard movement - though here every key improves as well: padded size
25024 -> 25008 against 24976, REAL regions 529 -> 340, and the frame now
matches January exactly, sub esp,0x80c -> 0x810.

Each defect was confirmed by its own January byte window becoming register-blind
identical, and by leave-one-out (dropping any one raises the blind region count).

V1  a real UNINITIALISED READ. January passes lea [ebp-8] and lea [ebp-4] as the
    full and partial vision-distance out-pointers and reads [ebp+edx-8] in the
    second loop nest: it is ONE real[2] array. Our full_distance_reference[1] was
    never written. Fixing it is what brings the frame to 0x810.
P2  an UNREACHABLE ARM. January's je 0x5c5f from both the render_paths_current
    test and the has-path test lands on the "following path" status text, so it
    sits outside that block; our "no current path" else could never run.
N1  normalize2d writes straight into desired_facing's own cells before the > 0
    test, spelled as at actor_combat.c:2304 and eight other AI sites.
X   four cross blocks read p0.x, not p1.x (fld [ebp-0x18]): p0.x = p0.x - 0.2f.
P1  the paths block indexes steps by the short local, not the char field.
SR1 the avoidance-objects loop addresses through an element pointer, as at
    actor_moving.c:903.
FA2 the flying-axes blocks use the existing __inline helpers scale_vector3d and
    point_from_line3d in January's term-major order. These are ordinary calls to
    existing helpers, which house rule 13 permits; nothing is written out.

Disclosure the verifier required: FA2 adds twelve (real_point3d *) casts on the
point_from_line3d arguments. All twelve are strip-test inert - the section is
byte-identical with them removed - and the cast is the tree-wide idiom.

Verified: full ninja green; 11,060 function rows and 1,706 section rows diffed
board-wide, 0 worse; ai_debug 59/1 unchanged; no symbol added or removed; the
pre-existing _point_from_line3d guard finding stays at exactly one; parks 181
active / 0 stale / 0 invalid; fake_match_scan 0 findings.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-20 23:39:00 -07:00
Jonas VolmanandClaude Opus 5 67a1117544 Fix swapped colour arguments in _ai_debug_render_actor and re-baseline it
Owner ruling 2026-09-20: land it and re-baseline the fuzzy floor; correct source
outweighs a misleading byte score; grant zero exact credit and document the
backend artifact.

ZERO exact credit. The function stays residual at 24,976 padded bytes and this
is not scoreboard movement.

ai_debug.c:1100 and :1110 had their colour arguments swapped relative to
January. Verified from January's bytes before landing: January pins the color
local in EBX for the whole loop body, selecting white, yellow or aqua at 0x5a7,
0x5c5 and 0x5cd, then pushes EBX at the first site and _global_real_argb_blue at
the second - the latter immediately followed by push 0x3f800000, the 1.f
argument of render_debug_vector. Our source had them exactly reversed. The fix
takes a 480-byte window from 431 differing bytes to 13.

The floor is numerically worse: padded size goes from 24976 to 25024 and REAL
regions from 495 to 529. That previous size equality was never a match - it was
the padding coincidence recorded in wave C, whose "the code length comes back"
claim was already retracted. The new number is an honest floor measured against
correct source. No sibling moved; ai_debug is 59/60 before and after.

The 48 bytes are NOT caused by the colour fix. They are an independent
branch-shortening FIXPOINT, and that is the reusable finding: of the eight
branches where January emits SHORT and we emit NEAR, five have final spans
comfortably inside +/-127, and for one of them January's span and ours are the
identical 123 bytes. Three seed branches one byte over the line block the other
five. It is the largest byte family in the function, has no known source lever,
and is invisible to every region metric - trap #6 at scale. It also explains the
non-additive sizes earlier waves measured.

Corollary that changes the plan here: the 4-byte-short frame is currently paying
for the branch tax, so correcting it in isolation makes the function +39 rather
than +12. No future wave should attack the frame on its own.

Verified: full ninja green, halobetacache 1,460,468 / 7,301 unchanged by this
commit, parks 181 active / 0 stale / 0 invalid.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-20 20:24:20 -07:00
Jonas VolmanandClaude Opus 5 c23d0f5386 Wave F fidelity landings: three improvements, ZERO bytes banked
None of these three close a function. The board metric is unchanged at
1,458,814 / 7,300 and none of this is scoreboard movement.

_ai_debug_render_actor - binds actor->input.position.head_position to a named
local, which is the recorded accessor-binding law: the inline field reference
folds the offset destructively, while binding it forces the non-destructive
form. It emits January's fsubr [ebx+4] / fsubr [ebx+8] for the first time and
recovers 6 real bytes. Wave E's refutation of the "this family needs a header
prerequisite" claim stands - point_from_line3d and scale_vector3d are already
__inline in real_math.h and already called this way in this file.

_actor_move_vector_avoidance - relocation COUNT goes 140 to 135, which is
January's exactly, and relocation identity goes 5 differing rows to 2. REAL
regions 200 to 180, register-and-frame-blind 100 to 84, frame 0x60ec to 0x60e4
against January's 0x60e0. Key 3 moved AWAY and by more than the padded figure
shows - real-code distance went from +47 to -87 - which is acceptable only
because relocation identity outranks padded size in the lane's ordered key. The
verifier required that disclosure survive into any summary, and it does.

_ai_communication_event - closes 80 of the 176 missing bytes, from 7888 to 7968
against 8064, by writing the actor_get plus actor_type_get_race sequence we were
missing entirely. The separate 72-byte block remains header-blocked on
game_allegiance_get_incidents and was left strictly alone: no header edit and no
consumer-local prototype.

Verified: full ninja green, parks 181 active / 0 stale / 0 invalid, exactly one
gate row moved per unit with none lost, forbid-guards exit 0 on all three units,
fake_match_scan 0 findings on all three files.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-20 19:21:50 -07:00
Jonas VolmanandClaude Opus 5 edd8b386bb Wave D: two more EXACT, +1,671 meaningful bytes, 0 regressions
ai_debug          _code_00039990                       EXACT   848
  ai_communication  _ai_communication_get_player_rating  EXACT   832

source/ai/ai_debug goes 58/60 to 59/60; source/ai/ai_communication 44/48 to
45/48. halobetacache 1,448,422 -> 1,450,093 (7,295 -> 7,297).

Both land as DISCLOSED INFERRED constructs under the owner's standing rule -
TU-private, descriptively named, carrying a comment that says plainly the shape
is inferred from January's bytes and not attested, with the measurement table
that forced it - and both reach STRICT EXACT, which the owner set as the bar.

_code_00039990. The residual was one parenthesised group at a call argument.
I did NOT land the proposer's bare `(point_height+0.15f)`: its adversarial
verifier surveyed all 477 non-vendored .c files and found a whole-argument
parenthesised SUM occurs ZERO times in the tree, and corrected the proposer's
claim that it was "attested 11 times" - the cited ai_debug.c:1722-1724 sites
parenthesise the OPERANDS and leave the top-level sum bare, which is the shape
that does not match. Nine spellings reach exact; I took the one the owner's
ruling names, a TU-private macro `ai_debug_attractor_label_height(height)`,
which also gives the bare 0.15f a name it did not have.

_ai_communication_get_player_rating. Binding the two real_point3d endpoints to
named const pointers before the vector is taken fixes the order in which the
compiler squares the components: an address-of expression and a pointer value
are different operand forms here. CORRECTED BEFORE LANDING - the verifier found
a real error in the comment text that would have shipped: its first row claimed
the untouched spelling already squares k,i,j when it measures k,j,i, which would
have told a future reader the change was unnecessary. Table fixed and
re-verified EXACT.

A park retired: _ai_communication_get_player_rating was parked
`instruction-scheduling`. parked.json 183 -> 182, no other entry touched, never
re-serialized.

Guard note: `--forbid-emitted-symbol _point_from_line3d` exits 1 on ai_debug
both BEFORE and AFTER this change - that file genuinely calls the helper, so the
COMDAT is the known systemic extra-COMDAT gap and not a regression. On
ai_communication it exits 0 before and after. Checked both ways rather than
assumed.

Verified: ninja exit 0; stable_verdicts gained 5 / 5,920 padded bytes with
REGRESSIONS 0; parked 182 active / 0 stale / 0 invalid; audit 0 contradicted /
0 revoked; fake_match_scan 0 findings on both files; diff --check clean.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-20 17:27:07 -07:00
Jonas VolmanandClaude Opus 5 f1299316c8 Wave C part 2: the flagship and the two actor_moving rows, 0 regressions
Three more zero-credit fidelity landings. All three functions remain residual,
so this banks ZERO strict bytes.

  ai_debug  _ai_debug_render_actor  (24,976 B, a third of the portfolio)
      FOUR target-proven reconstruction defects plus the NULL-deref fix:
        - a wrong constant, 1.6f where January pushes 1.f (immediate census
          T14/O13 and T1/O2, the one surviving 1.6f at a site that matches)
        - alignment_vector_3d built from control.current_fire_target_aim_vector
          instead of output.animation.alignment_vector promoted to 3D with k=0
          (+0x6ec is the impulse BOTH builds test, so +0x6f0/+0x6f4 is the 2D
          alignment vector, and the local NAME corroborates it)
        - p1 taken from control.desired_aiming_vector instead of burst_origin
          (+0x64c burst_initial_position is lea'd by both builds for the
          preceding line; +0x658 is the adjacent member. Plotting a unit
          DIRECTION as a world point in a Burst Geometry block was just wrong)
        - an if/else with an inner ternary that made VC7 cross-jump two copies
          of the same five-argument render_debug_vector call; one call with a
          nested ternary reproduces January three-arm colour block and REMOVES
          a duplicated call from our source
      frame sub esp 0x81c to 0x80c against January 0x810, i.e. +12 to -4;
      relocations 1905 = target; regions 252 to 206; census 58/2 with the whole
      per-function gate table byte-identical to pristine.

  actor_moving  _actor_move_update       size 3120 to 3136 = target, relocation
      TYPE sequence from about 20 mismatched rows to zero, byte-LCS unmatched
      target bytes 455 to 232, regions 142 to 103.
  actor_moving  _actor_move_vector_avoidance   hand-rolled cross-product math
      replaced by the existing cross_product3d helper; regions 236 to 227.

TWO CORRECTIONS TO MY OWN RECORD, both from the adversarial verifiers:

1. I wrote that the four fixes make "the code length come back" so the section
   is 24,976 again. It does not. January code ends at 0x5ffd with 12 bytes of
   trailing pad; pristine and the landing end at 0x6009 with none. Both sections
   are 24,976 only because January padding absorbs the difference, which is an
   arithmetic coincidence and exactly the padding trap this lane keeps warning
   about. The landing stands on the defect fixes and the region and instruction
   evidence, NOT on the padded-size argument. Real code is still 12 bytes long.

2. The seed I wrote for that agent was wrong: "January has 31 dword slots and
   the candidate has 30, diff the SETS". Both frames are DENSE, so a set diff
   localises nothing; January simply has one more granule. The agent said so and
   worked from invariant multiset censuses instead.

Verified: ninja exit 0; halobetacache 1,448,422 / 1,770,166 (7,295 / 7,574)
unchanged as expected; stable_verdicts REGRESSIONS 0; parked 183 / 0 / 0; the
--forbid-emitted-symbol _point_from_line3d guard exits 0; diff --check clean.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-20 16:23:30 -07:00
Jonas VolmanandClaude Opus 5 7e83d31bce Lane A wave B: two objects closer, one whole object closed
Ten residuals decoded in parallel, each on its own scratch copy, every proposed
landing re-measured by an adversarial verifier and a third time by the
orchestrator against the pristine tree. Targets were picked by the board
censuses added earlier this session.

EXACT, +1,817 meaningful bytes / +2 functions / 0 regressions:

  source/ai/actor_firing_position  _pre_evaluator_attack   1120 B
      26/27 -> 27/27, THE WHOLE OBJECT CLOSES
  source/ai/ai_debug               _code_0003a910           704 B
      57/60 -> 58/60

_pre_evaluator_attack was the +12 frame class, and the census called it: the
function homed twelve bytes more than January with [ebp-0x40] never referenced
at all - the elided-aggregate-member signature. The cause was a hand-expanded
library idiom, scale_vector3d + add_vectors3d + a real_vector3d temporary,
where January writes point_from_line3d in place. That spelling, casts included,
is verbatim real_math.c:2536 inside point_to_line_distance_squared3d, and the
change is a net deletion. Frames now agree at sub esp,0x34; relocdiff 39/39,
0 differing rows. The verifier confirmed the patched function's RAW bytes are
identical to January's, not merely equal under the normalized hash.

_code_0003a910 is target-proven: January emits ONE fdivr against 1.0f and THREE
fmul, so `scale = 1.0f/vertex_count` then three `*= scale` is its source, not a
rounding liberty; three `/=` divides would emit three fdivs. vehicle_stuck in
units/vehicles.c writes the same centroid the same way.

Landed at explicitly ZERO credit, because both functions remain residual and
both verifiers were emphatic that a residual's potential is not a realized
gain:

  ai_debug        _ai_debug_render_actor     a real off-by-one CORRECTED
  actor_perception _actor_perception_update  an invented macro replaced by
                                             real_math.h's genuine helper

The render_actor fix is a defect, not byte-steering: `switch (target_type-1)`
with case labels that are the enumerators and _actor_target_none == 0 dispatches
every type onto the previous colour and sends _actor_target_damaging_enemy into
the asserting default arm. January proves the compiler subtracts 1 itself
(`dec eax` where we emitted `add eax,-2`).

A park retired. _pre_evaluator_attack was parked `unclassified`; the frame
census contradicted that class and was right. parked.json 184 -> 183 entries,
no other entry touched, never re-serialized. First park retired by the census;
it says 35 more carry the same kind of evidence.

HELD, not landed, and both are deliberate:

  _ai_test_line_of_sight       drops an initialiser January lacks, which is
      byte-proven, but lands an uninitialised read on a function that stays
      residual - the same class as the owner's standing hold on
      _actor_emotion_update's out-of-bounds read, and worth zero credit.
  _actor_perception_refresh    gates strictly EXACT at 2,416 bytes, the biggest
      win this wave found, but needs a macro we would be inventing. A five-way
      strip test shows ONLY the full canonical macro expansion ((a) * (a))
      reaches January - four simpler spellings all stay residual - and neither
      of its two hunks works alone. That cuts both ways and the ruling is the
      owner's, not a lane orchestrator's. Full evidence in the wave report.

Negatives worth more than some landings: _encounter_create, 23 shapes, no
landing - its -4 frame is not a missing local but which pointer wins EBX, and
the previous wave's "spill slot" reading is refuted by `count` at [ebp-8].
_prop_get_active_by_unit_index, 60 gated builds mapping the entire reachable
image of a 144-byte function to three hashes, January's not among them - a
whole-function ECX/EDX two-colouring. Both agents also caught metric traps
where a shape matches January's instruction count by coincidence while
diverging earlier.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-20 15:08:45 -07:00
Jonas VolmanandClaude Opus 5 4fa32b2c80 Lane A wave A3: restore the missing communication diagnostic graph
Zero strict bytes, zero regressions; the largest structural recovery in the lane.

_ai_communication_finished goes from 912 bytes / 29 relocations / 305
instructions to 1568 / 86 / 482 against January 1584 / 87 / 484, and objdiff from
42.12 to 91.44 percent. The remaining gap is 16 bytes and ONE relocation, down
from 672 bytes and 58 relocations. All 44 exact siblings preserved.

Found by a per-function string-literal relocation diff over all 34 Lane A
residuals: this function references zero string literals where January references
sixteen, no Lane A unit emits a string absent from the January image, and 32 of
34 residuals have exactly matching string sets. January .rdata supplied the exact
texts, the prologue supplied the 0x650 frame and the [ebp-0x450] message buffer,
and the call sites supplied the asymmetric sprintf-then-csstrcat idiom. Every
debug guard resolved to a real named field of the existing struct ai_debug_state,
so no new type, header, name or declaration was needed.

Also lands ai_debug.c:2281 "has_approach_point>0" -> "has_approach_point" (the
field is a boolean); section size stays at January exact 24976 and differing
regions go 1452 -> 1451.

Rejected from the same candidate: writing the ai_communication_event is-reply
player_rating as a 2.0f literal moves relocations 319 -> 318 against 336 and
instructions 2280 -> 2278 against 2353, i.e. structurally away on both counts.
The rejected-hypotheses file had recorded that probe as never compiled; it is now
compiled and negative.

config/parked.json: one entry re-baselined with refreshed measurements and a new
reopening condition. No park retired, none unrelated touched.

Verification: build unchanged at 1,444,193/1,770,166 (7,292/7,574);
stable_verdicts diff vs the frozen baseline gained 1 / 224 bytes / 0 regressions;
parks 184/0/0; admission 19/0/8/0; fake scan 0 findings in the changed files;
point guard passes; git diff --check clean.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-20 12:35:20 -07:00
Jonas Volman 5361eeae52 Reconcile Astra exact-match campaign (+8314 bytes)
Integrate six accepted exact functions, two whole-object admissions, evidence-backed zero-credit source corrections, owner-header cleanup, and curated campaign records. Preserve zero regressions and exclude generated scratch archives from canonical history.
2026-09-20 02:31:53 -07:00
Jonas VolmanandClaude Opus 5 6ebd05a964 Match the perception object test and name the encounter debug renderer
Wave n2 of the next-150K lane.

- actor_perception _actor_perception_refresh_test_object (+1744).
- ai_debug _code_00041220 (+2336): closed by spelling January's counting loop as
  a while loop with the initialiser before it instead of a for with an empty
  body. It also carries a names-only rename packet: config/symbols.json line 654
  and the three C identifiers become _ai_debug_render_encounter, which is house
  rule 7 (no code_<address> names). The name is authenticated by the January map
  atlas (scratch/atlas/ai_debug.obj.txt line 44, "00041220 fuzzy ai_debug.obj
  _ai_debug_render_encounter"), whose offsets for this object cross-validate
  against symbols.json (_ai_debug_dispose_from_old_map 226736, _ai_debug_drawstack
  235808, _ai_debug_render 269120), and corroborated by caller topology
  (_ai_debug_render passes ai_debug.selected_squad_index), the encounter_* callee
  set and the firing-position assert literal. No PDB public exists at 266784,
  consistent with the static. The rename carries no additional byte credit.

Rejected and not landed: devices _device_frontfacing (exact, but a live standing
hold) and the decals _debug_decals relabel (symbols.json line 22482 has no object
at 4414816; the worker's own proposal is to delete that entry, which is a config
question, not a landing).

Full ninja, parks 274 active / 0 stale / 0 invalid, stable diff vs
scratch/opus5-next150-before.json: gained 7 / 6,832 padded, regressions 0; fake
scan 0 leads.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-15 22:42:41 -07:00
Jonas VolmanandClaude Opus 5 c5d7751bd1 Type ai_debug firing-position records with their actors.h owners
Replaces the placeholder ai_debug_actor_record fields and the 0x7D384 block with struct firing_position / firing_position_evaluation_context (layout proven by the retained offset asserts) and renames the consumers in ai_debug.c and actor_firing_position.c (names only). Consumer audit: all 27 ai_debug.h includers rebuilt; 0 strict regressions; the speech-timer park flips to its previously proven second flag-neutral load order (re-measured, evidence appended).

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-13 19:43:50 -07:00
Jonas Volman 49417c0602 Restore AI profile shared ownership 2026-09-09 14:35:49 -07:00
Jonas Volman a7a32f6c75 Reconcile Claude owner packets and add 10K exact bytes 2026-09-08 03:21:09 -07:00
Jonas Volman 25c45ad20d Reconcile HS parsers and firing position owners 2026-09-07 22:53:02 -07:00
Jonas Volman 87fbeb7582 Reconcile render debug geometry packet 2026-09-04 01:31:51 -07:00
Jonas Volman 4277f892c1 Admit audited Claude reconstruction gains
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.
2026-08-31 20:42:01 -07:00
Jonas Volman 8f59147bf9 Reduce AI debug firing-position residual 2026-08-29 11:21:01 -07:00
Jonas Volman 74eeadef77 ai: reconstruct AI debug exact checkpoint 2026-08-29 11:00:04 -07:00
Jonas Volman ce3ca83f34 ai: harvest twelve exact debug functions 2026-08-29 08:56:49 -07:00
Berthalamew 37e96a1c2f ai_debug work (#37) 2026-07-13 14:34:27 +01:00
punpckhdq fb0d814535 Declare .comm data in TUs instead of headers (#26)
* Declare .comm data in TUs instead of headers

* Update files.h

* Include
2026-06-16 12:49:22 +01:00
punpckhdq e830efbd7c Initial commit 2025-11-27 02:27:27 +00:00