47 lines
3.4 KiB
Markdown
47 lines
3.4 KiB
Markdown
# 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.
|