sots-re/verify/results/research-completion-abi/plan-run-35e59053176da458d8b46fea.md

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.