# Current-source ABI static capture plan — run-35e59053176da458d8b46fea This analyst-owned plan implements the new-source remeasurement selected by Astra decisions `d-e9d6d48cd77538556d1a1c1f` and `d-6e30d172051af0385f5979eb`. It is static analysis plus input identity only. It does not execute the game, constructors, destructors, allocation, exception paths, event posting, or RNG, and it cannot satisfy the independent verifier criterion. ## Preconditions and falsifiers 1. Refuse an absent/wrong session, a pre-existing output directory, baseline HEAD mismatch, source binding mismatch from preflight, binary/tool/interpreter drift, missing archived save/parser input, nonzero subprocess return, empty required stdout, nonempty stderr, or source drift during capture. 2. Capture nested-copy stop `0x00779913` as an expected truncated negative, stop `0x00779915` as the aligned complete `c2 04 00` control, and stop `0x00779930` as authority. Read the same bytes through a direct PE VA-to-file-offset mapper. The old claim that `0x00779913` is complete remains failed; it is not rewritten as a pass. 3. Retain the independent boundary family: bad `0x00779a20`, aligned `0x00779a21`, `0x00779a23`, and `0x00779a28`, with direct bytes at `0x00779a1f`. Reject changed preceding rows. 4. Capture callable entry/return and ownership windows for ObservedTech and PlayerEvent construction, append, growth, deep copy, destruction, string assignment, imported allocation/deallocation, TurnEvents get/create, outer append, nested copy/destruction, duplicate comparison, and prune. 5. Preserve static branch exposure separately from runtime execution: match/miss, spare/full capacity, empty/nonempty and null/nonnull nested vectors, short/long string branches, normal/unwind edges, and known-bad/aligned disassembler boundaries. No static branch is reported as runtime coverage. 6. Hash but do not parse the archived save in this analyst capture. A fresh independent verifier must parse named containers/elements, IDs, all event fields, exact FLT_MAX words, empty player states, and the actual RNG leaf, and must use a verifier-owned recipe and fail-if-exists directory. ## Expected machine facts under test * Distinct element strides remain `0x2c` (ObservedTech), `0x74` (PlayerEvent), and `0x18` (TurnEvents); append/growth performs element construction rather than raw header transfer. * Long-string ownership uses original allocator/deallocator thunks `0x00924fb6`/`0x00924faa`; these are original-helper dependencies, not standalone allocator safety. * Get/create checks existing buckets before miss construction, deep-copies the nested vector, cleans the temporary nested vector, then writes the requested turn into the stored last element. * Duplicate matching includes both description strings; mismatch returns without an event-vector write, while no duplicate proceeds to PlayerEvent append. No RNG instruction/effect is expected in these bounded static windows, but unchanged RNG is not measured. ## Runtime residuals Still unavailable/unexercised: live existing-last-match and miss paths; spare/full outer capacity; empty/nonempty nested vectors owning short/long strings; deliberate allocation failure and unwind; equal versus description-only-different live events; transient stack sentinels; exact PostEvent caller defaults/write order; allocator-family safety; event IDs and records created at runtime; and all RNG state/draw effects.