# `dead_camera.obj` Codex checkpoint ## Scope and result - Integration base: `3c32973ff4698cac75d7c85bf2501fc49ab4bb5b`. - The untouched base emitted none of the four January functions and none of the 48 target-owned data bytes: `0/4` functions and `0/48` data bytes. - The current clean XDK 3911 build is `2/4` functions, 280/1,792 meaningful code bytes, and 48/48 target-owned data bytes. - The two public camera functions remain nonexact and the object remains honestly `NonMatching`. - Historical commit `d60df9c9` was used only as a source lead. Its existing `dead_camera_obj.md` ledger was not edited. The donor source and every other local dead-camera worktree were rebuilt or measured against the current January target; none exceeds the retained `2/4` boundary. ## Natural emission topology The exact private helper bytes depend on their real translation-unit context. VC7 removes both unreferenced `static` definitions when the public camera functions are absent. Giving the helpers external linkage is not an equivalent substitute: it keeps the first at 112 bytes and six relocations but changes its normalized bytes and relocation addresses, and expands the second from the target's 176 bytes to 192 bytes. The retained topology therefore uses the two reconstructed public functions as real callers and keeps the helpers source-private. No synthetic pointer table, dummy caller, unused assertion, compiler directive, or other emission anchor is present. The public functions are useful typed behavioral reconstructions, but they are explicitly fail-closed below and receive no matching credit. ## Strict code-section evidence The hardened comparator agrees on padded bytes, relocation count and identity, and normalized bytes for both accepted helper sections. | Function | Meaningful bytes | Padded bytes | Relocations | Normalized SHA-256 | | --- | ---: | ---: | ---: | --- | | `_code_000740b0` | 106 | 112 | 6 | `6f6f345dae4df2f8d263330b592d0ecfebfbf0950cfb71080c0b05ae6db4d943` | | `_code_00074120` | 174 | 176 | 6 | `1ea4e64326392ec8a669e930b93629a1d6aee808488562b6b0e82eb77e79d263` | These are exact code sections, not whole-symbol-ownership matches. The January split object labels both helper owners with COFF storage class 2 (external), while the legal source-private definitions have storage class 3 (static). Their function type, section flags, section size, normalized bytes, and all relocations agree. This observable storage-class mismatch is not hidden or called whole-ownership exact. External source linkage was tested and rejected because it destroys the exact code sections described above. ## Data and ownership evidence Both target-owned non-code sections are independently exact by owner name, storage class, type, section flags, logical size, payload hash, and relocation inventory. Neither contains relocations. | Owner | Bytes | Section flags | Normalized SHA-256 | | --- | ---: | ---: | --- | | `_rdata_00256ae8` | 12 | `1076887616` | `ff7b83ec2ffe8b6c16cc343f7c64b922ba6e82b2e53adc71df3974a6b847d4a5` | | `??_C@_0CE@LCNMEPOD@c?3?2halo?2SOURCE?2camera?2dead_camer@` | 36 | `1076891712` | `3c073f9292d4ef145cb7f5db243b9ab3d3a237f6993bc91ae601b673e571adde` | The timer table is a typed `{ 3.f, 15.f, 3.f }` external constant. The path COMDAT is emitted naturally by the real public assertions; no independent string anchor is used. Although its consumers are nonexact, the section's own owner and complete ownership fingerprint are exact, so its data result is proved independently rather than inferred from those consumers. The candidate also contains ordinary compiler directive/debug sections and discardable inline/math COMDATs introduced by the shared headers. They are not claimed as target ownership and do not replace either target-owned data section. ## Fail-closed public boundary | Function | Meaningful bytes | Target/candidate padded bytes | Target/candidate relocations | Target normalized SHA-256 | Candidate normalized SHA-256 | | --- | ---: | ---: | ---: | --- | --- | | `_dead_camera_new` | 277 | 288 / 288 | 19 / 19 | `3888f6d2d64af9d4aa78c1a68bab50d348c84ad23b511750616259f2aae8daaf` | `6049682ee762a3f2ebee125b907f10ed04f580ed4c24fc671b763c8bca790fa0` | | `_dead_camera_update` | 1,235 | 1,248 / 1,248 | 46 / 46 | `648856466a852661968ac67df2335b8be232246f79a7904a6e9ab8b0cd1b220a` | `64165e1a02070690093edce809d0dbfe6049d85f2e1e5b9216ed6aea1fb94fe6` | `dead_camera_new` retains two compiler scheduling/register-allocation residuals around the final random pitch and watched-unit stores. `dead_camera_update` retains the known one-byte spectator fallback residual. January reads the third-argument home slot as an uninitialized local; the retained readable definition converts the already-defined command pointer to the fallback index. Recreating the uninitialized read is forbidden. Both functions are omitted from strict credit despite their equal padded sizes and relocation counts. ## House-rule audit - Each parameter is on its own line and every void function ends with an explicit `return;`. - Player and object access use the established typed `player_get` and `object_try_and_get` interfaces. - Recovered command, camera, timer, player, and datum state uses named typed structures rather than raw offsets. - There is no assembly, `volatile` scheduling device, forced-inline annotation, optimizer pragma/barrier, undefined behavior, byte patch, alignment trick, compiler-flag change, or synthetic emission anchor. - The configuration stays `NonMatching`; no semantic exception or parked entry is used. ## Reproducibility and gates - Source SHA-256: `b8503b0ee65ed0a33153872fdcf95a213e6089a1a0e1b63d56cf506c0f80757c`. - Header SHA-256: `fec917eeade2ed33c439384eac5bd3de32c2eefd900274624cab8fc388b803ac`. - January target object SHA-256: `f13f6f397ae12c58a27143db70445f846036181e57310b2357ffe07e815e4e63`. - A forced object compile plus the remaining 568 Halo/libcmt build edges passed. - Semantic audit: 470 units, 3,724 functions evaluated, 3,589 semantic exact, 3,653 accepted exact, and zero unit errors. - Campaign progress: 374/833 complete objects, 3,647/11,060 exact functions, 440,622/2,198,102 exact code bytes, and 1,802,760/4,176,062 matched data bytes. - Admission audit: zero candidates and zero revocations; only the inherited `source/shell/shell_xbox` contradiction remains. - Parked audit: three active, zero stale, zero invalid. - Tool suite: 179/179 tests passed. - A clean post-commit snapshot and forced-object regression check are required and recorded in the final handoff. The five user-frozen objects are untouched, no tracked file is deleted, and no Claude-authored Markdown is modified.