5.2 KiB
Current-source ABI static capture report — run-35e59053176da458d8b46fea
Result and provenance
The authoritative package is
verify/results/research-completion-abi/run-35e59053176da458d8b46fea-repair1/; its manifest records
27 positive objdump executions, all return code zero with nonempty stdout and empty stderr (118,734
stdout bytes, zero stderr bytes), and no failed checks. Paired source identity remained engine
ccd8e02083e8d2e2b3e97976ace2273c8f924dfc02a39e919004eaf3544c50fd and RE
e5cf1c44761bebcada1aacb53f30722bdaf4784f21a9ec1023a1851c142c124f before/after. Binary,
objdump, Python, save and parser identities are in the manifest and preflight.
The sibling directory without -repair1 is a preserved failed recipe run. Its streams are valid,
but two checks incorrectly required the bad boundary stream to omit its terminal row. Actual objdump
retains a one-byte terminal row (c2 or 74) and replaces it with the complete row when the stop is
aligned. The repaired recipe tests equal preceding rows plus that replacement. This was a local test
predicate defect, not contradictory binary behavior and not a retroactive pass.
Measured static observations
- Stop
0x00779913emits truncated779912: c2; stop0x00779915emits complete779912: c2 04 00, and authority through0x00779930includes the complete return plus cleanup at0x00779915. Direct PE mapping independently readsc20400at VA0x00779912. - The second boundary family reproduces truncated
74at stop0x00779a20, complete74 10at0x00779a21, then complete8b cfande8 28 6a ff ffat stops0x00779a23and0x00779a28. Direct PE bytes are74108bcfe8286affff. - ObservedTech append/growth instructions use
0x2c; PlayerEvent append/nested-copy/destruction use0x74; TurnEvents append/prune use0x18. These are distinct concrete element strides. - ObservedTech allocation multiplies count by
0x2cand calls0x00924fb6; old-element growth and PlayerEvent/string destruction paths call0x00924faa. PlayerEvent append calls copy constructor0x007693f0; outer TurnEvents append calls nested copy0x00779850. - Nested copy zeros the destination three-pointer header, distinguishes empty count from allocation,
allocates through
0x0078af40, multiplies by0x74, calls range helper0x007725a0, writes the copied end pointer, returns destination in EAX, and endsret 4. Its captured unwind edge calls0x00629580before the allocation-failure helper; this edge was exposed, not executed. - Get/create scans every
0x18bucket and retains the last matching+4turn. On miss it establishes vptr and zero nested-vector pointers, calls outer append, calls nested-vector cleanup, then stores the requested stack turn into stored-last+4; both returns areret 4. - Outer append separates capacity-growth and spare-capacity edges, copies source
+4, advances source to nested vector+8, deep-copies it, then increments end by0x18; it endsret 4. - Duplicate scan advances by
0x74; after prior field comparisons it performs description comparison at0x0046f8c0, caller-cleans two arguments, and reaches match return only when AL is zero. Thus the fresh instructions remain consistent with description equality being required. - Direct PE mapping reads three
0x7f7fffffwords at constructor-default VA0x00af0dc8. This is a binary constant observation, not a newly parsed event record.
The manifest's direct-PE entries named observed-stride, player-stride, and turn-stride sampled
fixed addresses but were not used to establish strides; their names are overbroad. The stride facts
above come from the archived instruction rows. This limitation does not affect the boundary-byte or
constructor-default direct controls.
Interpretation, dependencies, and limits
The measurements support the prior static interpretation that vector elements require construction
and nested/string ownership rather than raw header copy. Calling 0x00924fb6, 0x00924faa, or
0x0046f8c0 remains an original-helper dependency with the original CRT/string layout. A standalone
implementation needs one coherent allocator/copy/destruction family; this capture does not show that
original allocations can safely cross a replacement boundary.
No game branch, allocation, constructor, destructor, throw, event post, ID assignment, record write, container mutation, or RNG draw executed. The save was hashed, not parsed. Existing/miss, spare/full-capacity, empty/nonempty, null/nonnull, short/long-string, normal/unwind, duplicate and description-only-different states are instruction exposures only. Exact PostEvent caller inputs, defaulting and total write order remain outside this bounded remeasurement.
Independent falsification package
A fresh verifier should use its own recipe and fail-if-exists directory, bind the current paired digest, repeat the negative/aligned/authority boundaries and direct PE reads, challenge at least one additional boundary, and parse the archived save independently for named player/event containers, elements, IDs, strings, FLT_MAX words, empty-player states and the actual RNG leaf. It must preserve all runtime residuals and must not count this analyst capture or archived prior verifier output as an independent cross-check.