3.4 KiB
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
- 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.
- Capture nested-copy stop
0x00779913as an expected truncated negative, stop0x00779915as the aligned completec2 04 00control, and stop0x00779930as authority. Read the same bytes through a direct PE VA-to-file-offset mapper. The old claim that0x00779913is complete remains failed; it is not rewritten as a pass. - Retain the independent boundary family: bad
0x00779a20, aligned0x00779a21,0x00779a23, and0x00779a28, with direct bytes at0x00779a1f. Reject changed preceding rows. - 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.
- 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.
- 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), and0x18(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.