sots-re/verify/results/research-completion-abi-independent/result-run-7d85d45cb2196e07025e5096.md

99 lines
5.7 KiB
Markdown

# Independent ABI evidence-array review — scoped pass
Session `run-7d85d45cb2196e07025e5096`; actor `research-abi-independent`; requested model
`openai/gpt-5.6-sol`.
## Classification and decision
**PASS for the two-criterion, non-integrated evidence array in its stated static scope.** This is an
independent static reproduction plus archived-state inspection. It is not original-assisted game
execution, partial/full live comparison, independent replacement, or integrated replay. It proves
neither live allocator-family safety nor replacement acceptance.
The pre-experiment plan fixed identity/execution falsifiers and required branch/distinct-state
exposures. None fired. Historical failed provenance predictions remain failures resolved by Astra;
the repaired result does not rewrite that history.
## Identity and evidence integrity
The assigned engine worktree remained at HEAD
`7741d42fc5e4e761e6449bdaf0e4a61d00036a23`, common Git directory
`/home/alex/sots-engine/.git`, source binding
`ccd8e02083e8d2e2b3e97976ace2273c8f924dfc02a39e919004eaf3544c50fd`.
The assigned RE worktree remained at HEAD `3bfde5a70d874a723e797a695bbd847fd82c0aa7`,
common Git directory `/home/alex/sots-re/.git`, source binding
`6696fd5201e144843617cbf6d78b41b5287ad5dcc9fa1e8aaa861d52b64e72e8`.
Both bindings exactly match both evidence records; dirty inventories were pre-existing and neither
assigned worktree was edited.
`dumps/sots.exe` is 7,898,624 bytes, SHA-256
`970b7de729956a53094c7eb98aba4270aee98e2fed5daf0d39e290013c90c841`.
`/usr/bin/objdump` SHA-256 is
`1eaaef2e7f57c4c7f69115c495e2466f5a8c8e5f3bc42221d092382f30f9d4cd`.
The archived save SHA-256 is
`978041acd168b56ed8eb3f5e42e78d5e70eae6e6517d75e659a5eb7ca3d60921`.
All declared evidence input/outcome hashes rehashed exactly, and campaign validation passed.
## Positive execution and static branch exposure
The fresh verifier-owned reproducer ran 22 objdump windows. Every process exited zero with nonempty
stdout and empty stderr; no window skipped. All 22 names, stream sizes, hashes, stderr sizes and
return codes exactly equal the prior independent manifest. Seven narrow/wide pairs preserve every
preceding instruction row and widen terminal `c2` to five ownership `c2 04 00`, one string allocator
`c2 08 00`, and one dedup `c2 08 00` encoding.
Raw instructions independently retain distinct `0x2c` ObservedTech and `0x74` PlayerEvent stepping.
ObservedTech growth calls allocator thunk `0x00924fb6`, deep-copy helper `0x0079a150`, element
destruction and delete thunk `0x00924faa`. PlayerEvent copy calls string assignment `0x00425430`
three times. Destructor `0x0061ae90` has three separate capacity-`0x10` guards and three delete-thunk
calls. Thus the evidence rejects raw string-header transfer.
The dedup window executes three `fucompp; fnstsw; test ah,0x44; jp mismatch` sequences, so unordered
coordinates take mismatch rather than equality. It compares message/image, passes description to
`0x0046f8c0`, and reaches the matching-element return only for the helper's equality result. The
helper/callee expose inline/heap selection and byte/length inequality. These are static branch facts,
not live equal/description-different/NaN executions.
## Held-out instrument challenge
A verifier-owned stdlib PE parser independently mapped virtual addresses through the image section
table without objdump. Direct `.text` bytes match all seven repaired return encodings and the plain
`c3` return at `0x0085630c`; the byte immediately before that return is `5d`, providing a negative
boundary control. Direct `.data` bytes at `0x00af0dc8` are three `ffff7f7f` words. This supports the
repaired terminal-byte and constructor-default claims without relying solely on decoder formatting.
## Actual archived state and RNG
Fresh strict save parsing exited zero with nonempty JSON and empty stderr: 37,847 items, 2,453
frames, zero resyncs, zero hint failures and zero best-effort fallback. Direct tree traversal found
an `EvNxID` value 4, a turn-3 bucket count 2, and event ID 3 with description `Research Over Budget`,
message `Research for Waldo Units has gone overbudget.`, image `EVENT_RESEARCH_OVERBUDGET`, location
0, action 1, chain 0 and three integer position words `2139095039` (`0x7f7fffff`). Guessed leaves are
archived corroboration, not live ABI proof.
The separate whole-save tool rebuilt all 609,080 inflated bytes with `firstDiff: null`; root digest
is `e9c161e311f8ef8fad6f1aa1903dcf3f`. Actual `/Sim/RNG` is one 2,503-byte leaf with digest
`0978fdf34ff7962f76c2de810dc93e0a`. RNG state was inspected directly rather than inferred from a
counter; no RNG operation was executed.
## Residuals and reproduction
Unexecuted distinct runtime states remain empty/short/long strings, spare/full capacity,
new/existing tech, duplicate/nonduplicate and description-only-different events, finite/NaN
coordinates, empty/nonempty nested vectors, normal/unwind destruction, allocation failure, and
prune/get-or-create boundaries. There is no live original-game differential or allocator-family
compatibility check. Whole-save equality is only an audit of this one archived save, not general
workload coverage.
Executed commands/results:
```sh
python3 verify/results/research-completion-abi-independent/reproduce_run_7d85d45cb2196e07025e5096.py
# exit 0; manifest: 22/22 positive, all boundaries/direct-PE/state checks true
python3 tools/campaign.py --state-root /home/alex/sots-re validate
# success: four contract IDs listed
```
Exact next action: record a scoped independent PASS verdict over the current non-integrated evidence
array, then checkpoint this session; lead may subsequently decide whether to transition/package for
integration, where a fresh verifier must attest the integrated evidence array.