# `profile.obj` Codex checkpoint This Codex-owned ledger records the bounded, header-free recovery of `source/cseries/profile.obj`. The unit remains `NonMatching`: 30 functions and most initialized data are still open. No pre-existing or Claude-authored Markdown was edited or deleted. ## Scope and donor boundary - Integration base: `664ce784eae6bbeded627097d9627fcc11091328`. - Safety-correction base: `472fe0e0b272d6da7e7c289a97ac80fca56c0b0a`. - The historical donor chain runs from `be2e5bc2` through `3c2a9168`; its final `profile.c` blob is `50f0976a1c647b9137e4bc798877453322f9c14c`. - The donor measured 30/44 exact functions. Thirteen of those bodies depend on the donor's inline `rdtsc` assembly macro and were excluded. The section-history helpers `_code_0007dd20` and `_find_profile_section` were also excluded because their typed implementation requires broadening the shared `profile_section` layout in `profile.h`. - The retained frame, timer, iterator, and global layouts are private to `profile.c`. There is no `profile.h`, render caller, shared-header, configuration, semantic-ledger, or park delta. - The user-frozen `vehicles`, `ai_debug`, `ai_script`, `actions`, and `units` objects are outside this lane and untouched. ## Strict code result The untouched base had 0/44 strict-exact functions and zero credited code bytes. A forced candidate build accepts 14/44 functions totaling 1,117 meaningful bytes, 1,232 padded bytes, and 85 relocations. Every accepted body is ordinary objdiff exact and independently semantic-COFF exact; no exception ledger is used. | Exact function | Meaningful | Padded | Relocations | Normalized SHA-256 | | --- | ---: | ---: | ---: | --- | | `_profile_initialize` | 120 | 128 | 14 | `36a04f11c4190f78706ef5efa96cd67818c2e3a448e03eee6c21be3a54b4403c` | | `_profile_rasterizer_stats` | 22 | 32 | 2 | `d2a88f26be45877e903a87316d6f952be36c8f04e11a7facf5062f7e448856e4` | | `_profile_seconds_elapsed` | 13 | 16 | 1 | `3307464d0a4c3704ea054046b1a71de6ed4ab1c8c397d82e01d96e9777ce0123` | | `_profile_lapsed_frames` | 62 | 64 | 5 | `ca4109f0a47a4e1615b5acbe7ce2395ae95093eaf4623b63aa4322c81e28ad4f` | | `_profile_lapsed_msec` | 23 | 32 | 2 | `5bf0f905711f7dd660ef2cb05c51d2397e521d52bac526bbe8720e3ea8a18052` | | `_code_0007ee30` | 158 | 160 | 6 | `c66e82fa92c13d13181e344026e596f60a55b1140e86644acad55433ad598e00` | | `_profile_sections_activate` | 20 | 32 | 1 | `e7f3fd1fde128eb17a46853feb1d41f3d7c7cc1aa969ce290690f1cf964ba22e` | | `_profile_sections_deactivate` | 20 | 32 | 1 | `f474d33b63b8b8a0bd493b57aa9c2ff259c18455d50cc748005b7d066869368b` | | `_profile_find_game_value` | 62 | 64 | 4 | `0ec982b2f6b7608c4f9c184d4b40bdada7ab8e01cbe347345fbf02a564b4720a` | | `_profile_frame_iterator_new` | 81 | 96 | 5 | `1aea8b55afa0d28e715b266efe08ca74f9f7cae0be9faf817d3160359c1d1676` | | `_profile_frame_iterator_next` | 115 | 128 | 4 | `aa9283d20fee8a1b68fb2cfe9c18a9c0ee18e126fda57f2a414dc69009a71dd3` | | `_profile_frame_get_messages` | 139 | 144 | 14 | `37014e7926aa92604c2941c07048a93f67c24f6130833906c31271b712309b31` | | `_profile_frame_get_stalls` | 150 | 160 | 11 | `83423f3a3dca3dca554517e99af0c77514e603776046f06af5a7d2f32782c93d` | | `_profile_rasterizer_stalls` | 132 | 144 | 15 | `78d28326869a333768f8f1cdfe9126251575b2c3e92bfd0dd845d4197598e848` | Thirteen exact public functions have matching whole-symbol function type and external storage. The private `_code_0007ee30` code section is exact, but the target split symbol has external storage class 2 while the legal source-static definition has class 3. This checkpoint does not claim whole-symbol ownership for that helper. `profile_dump_to_file` remains a necessary public body because `hs.c` calls it. The target-shaped form called `fclose` even when `fopen` returned `NULL`. The retained implementation closes the stream only in the successful-open branch, so it is ordinary defined C but deliberately receives zero strict credit: it is 128 padded bytes with nine relocations and normalized SHA-256 `c1c2e7ef1e9547f36d70b457fe9f1201fbd3cb5c4f4f6cebb277fd009dafaa21` rather than the target hash. One bounded advisory test moved the `profile_frame_get_stalls` range assertions ahead of forming the frame pointer. That changed the normalized function hash to `305f28e627e0d6e72a83a17ff25535dd1fd2c52187ee6ded07d46d0df6807dd0`, so the experiment was reverted. The exact body retains the original caller precondition that the iterator and its current index are valid on entry; its assertions reproduce the target diagnostics and are not a safety guard. ## Strict data and ownership boundary The target reports 1,131,932 data bytes: the 1,129,812-byte BSS aggregate is byte-exact at both the untouched base and candidate, while 2,120 aligned bytes of initialized/RDATA ownership remain uncredited by ordinary progress. The candidate adds seven independently strict target-owned RDATA COMDATs totaling 285 logical bytes and zero relocations: | Exact payload | Logical bytes | | --- | ---: | | `*` | 2 | | `%s\r\n` | 5 | | `d:\\profile.txt` | 15 | | game-value argument assertion | 32 | | January source path | 33 | | frame-history current-index assertion | 78 | | frame-history range assertion | 120 | The untouched base owned none of those seven complete sections. The private `profile_globals` BSS owner has the same target layout and zero payload, but the target split symbol uses storage class 2 while the natural source-static owner uses class 3; whole-symbol ownership is therefore not claimed for that aggregate. Candidate/target symbol inventories are 75/298 entries. Extra compiler/debug/directive sections receive no target runtime credit. ## Source quality and gates The retained code is readable typed C. It uses no assembly, volatile scheduling device, forced inline, optimizer pragma/barrier, undefined type-punning, byte forcing, or repeated raw layout cast. Parameters follow the one-per-line convention, no-argument functions use the project layout, and void functions end with explicit `return;`. The full Halo and libcmt build graphs pass. Semantic audit reports 470 units, 3,865 functions evaluated, 3,724 semantic exact, 3,788 accepted exact, and zero unit errors. Campaign progress is 375/833 complete objects, 3,777/11,060 exact functions, 460,855/2,198,102 exact code bytes, and 1,803,160/4,176,062 matched data bytes. Admission reports zero candidates and zero revocations, with only the inherited `source/shell/shell_xbox` contradiction. Parked audit reports three active, zero stale, and zero invalid. The complete tool suite passes 179/179 tests. The unit remains `NonMatching`; no GitHub push is performed.