92 lines
7.6 KiB
JSON
92 lines
7.6 KiB
JSON
{
|
|
"acceptance": [
|
|
{
|
|
"axis": "planning",
|
|
"criterion": "Before ready, publish exact bridge-only source/test ownership, callable entrypoints and calling conventions, generated-address provenance, a bridge-only invocation route, VM/build resources, executable acceptance commands and immutable source/binary/fixture manifests. The route must not call or wire research replacement.",
|
|
"id": "readiness"
|
|
},
|
|
{
|
|
"axis": "understanding",
|
|
"criterion": "Reconcile accepted binary evidence with generated and pure-model facts, including whether EvDsc participates in duplicate equality and whether the callable ObservedTech copy operation begins at 0x0079a150 or an interior site. Every exposed constructor/copy/append/destructor/new/delete operation has an exact ABI and ownership contract.",
|
|
"id": "abi-reconciliation"
|
|
},
|
|
{
|
|
"axis": "implementation",
|
|
"criterion": "An isolated bridge constructs, copies, appends, updates and destroys complete live-layout ObservedTech, TurnEvents and PlayerEvent values using compatible original-runtime allocation services. It never copies raw owning headers and never calls original RecordObservedTech, EventStorage::PostEvent or any research completion root.",
|
|
"id": "bridge-operations"
|
|
},
|
|
{
|
|
"axis": "validation",
|
|
"criterion": "Host tests and a fresh leased disposable-VM run positively execute empty, spare and full capacity; short and long strings; repeated observed names; exact duplicate and description-only-different events; normal destruction; and one contained recorded failure path. Preserve per-case operation/allocation/destruction counts and complete resulting records.",
|
|
"id": "runtime-matrix"
|
|
},
|
|
{
|
|
"axis": "validation",
|
|
"criterion": "Executable negative controls reject raw string/header transfer, wrong callable entry or convention, mismatched allocator family, missing cleanup, double free, incomplete record fields, forbidden original decision-root calls, zero execution, missing artifacts and source/binary/fixture drift.",
|
|
"id": "negative-controls"
|
|
},
|
|
{
|
|
"axis": "validation",
|
|
"criterion": "A different verifier session reproduces the source/binary/fixture-bound package and at least one meaningful negative control on an integrated tree. Author-only or static-only evidence cannot accept live allocator safety.",
|
|
"id": "independent-reproduction"
|
|
}
|
|
],
|
|
"baseline": {
|
|
"engine": {
|
|
"commit": "7741d42fc5e4e761e6449bdaf0e4a61d00036a23",
|
|
"path": "/home/alex/sots-engine"
|
|
},
|
|
"re": {
|
|
"commit": "3bfde5a70d874a723e797a695bbd847fd82c0aa7",
|
|
"path": "/home/alex/sots-re"
|
|
}
|
|
},
|
|
"checkpoint": "campaign/runtime/checkpoints/research-live-record-bridge-e25bb2cbc914031f4572ad84.json",
|
|
"dependencies": [
|
|
"research-completion-abi"
|
|
],
|
|
"effects": [
|
|
"Complete 0x2c ObservedTech object fields, owned name string, existing-name update semantics, vector first/last/end and element lifetime across no-growth and growth paths.",
|
|
"Complete 0x74 PlayerEvent fields and three independently owned strings, plus complete 0x18 TurnEvents bucket and nested vector lifetime across no-growth and growth paths.",
|
|
"Event ID/order, exact duplicate behavior, description-only-different behavior and stale-bucket pruning only as needed to exercise the bridge fixture; no research callback or player-state effects.",
|
|
"Allocation, copy, destruction and failure-path counters sufficient to detect leaks, mismatched frees, partial construction and double destruction."
|
|
],
|
|
"evidence": [],
|
|
"id": "research-live-record-bridge",
|
|
"inputs": [
|
|
"Accepted research-completion-abi evidence and handoff, including binary fingerprint and independently reproduced static ownership windows.",
|
|
"Original binary /home/alex/sots-re/dumps/sots.exe sha256 970b7de729956a53094c7eb98aba4270aee98e2fed5daf0d39e290013c90c841; owner-supplied and never committed.",
|
|
"Source-identical paired worktrees /tmp/opencode/sots-final-research-engine and /tmp/opencode/sots-final-research-re at the contract baselines; exact dirty source-content manifests are required before implementation evidence.",
|
|
"Disposable VM144 is the preferred runtime fixture guest; verify its current MAC/IP, session/process state and housekeeping immediately before use, then acquire campaign/runtime/leases/vm144.json. VM140 is excluded from this experiment.",
|
|
"Required but missing before ready: bridge-only invocation fixture, generated callable-address package, 32-bit shim/toolchain manifest, failure-containment design, executable acceptance checker and per-case expected records."
|
|
],
|
|
"original_dependencies": [
|
|
"Original MSVCR100 scalar new/delete and narrowly accepted constructor/copy/append/destructor operations are permitted only as declared, counted ABI services.",
|
|
"Original RecordObservedTech, EventStorage::PostEvent, ProcessResearch, SetResearched, OnTechResearched and localized string lookup are forbidden in the bridge fixture.",
|
|
"The original game process supplies the MSVCR100 runtime and object address space for live tests; this contract does not claim standalone allocator or game-decision replacement."
|
|
],
|
|
"owner": {
|
|
"name": "live-record bridge architect",
|
|
"role": "architecture-review"
|
|
},
|
|
"predictions": [
|
|
"ObservedTech no-growth append deep-copies one name; growth relocates every existing 0x2c element and destroys the old range without cross-runtime frees.",
|
|
"PlayerEvent append deep-copies EvDsc, EvMsg and EvImg independently; full-capacity growth preserves all scalar/default fields and destroys old strings exactly once.",
|
|
"Repeated observed name updates the existing record without vector growth; exact duplicate event does not append; description-only-different event does append if the accepted EvDsc equality result is correct.",
|
|
"A contained allocation-failure fixture reports failure without an accepted partial record, leaked owned string, mismatched free or exception crossing into an unsafe ABI boundary."
|
|
],
|
|
"scope": [
|
|
"Recover and implement only the live ABI bridge for ObservedTech, TurnEvents and PlayerEvent construction/copy/append/update/destruction plus isolated fixtures and acceptance tooling.",
|
|
"First quantum is RE and architecture: reconcile callable boundaries and duplicate semantics, specify failure containment and name exact owned files. No engine implementation or VM mutation until the contract is ready and the operator holds required leases.",
|
|
"Runtime validation uses a bridge-only fixture on a disposable clone. It must not wire src/shim/hooks/research.cpp or src/shim/main.cpp and must not execute a research completion workload.",
|
|
"Static ABI acceptance is a dependency, not evidence of live safety. Acceptance remains scoped to bridge operations and does not promote research-replacement."
|
|
],
|
|
"status": "needs-revision",
|
|
"stop_conditions": [
|
|
"Remain proposed while callable ABI, exact ownership, fixture route, manifests, failure containment or executable acceptance is unresolved.",
|
|
"Stop affected work and record a surprise on contradictory fresh binary/runtime evidence, binary/source drift, allocator mismatch, exception crossing, unexpected game-decision-root execution, leak/double-free, guest interference or access change.",
|
|
"No Ghidra mutation or VM/build-host mutation without explicit assignment and the corresponding canonical lease; never touch VM140 under this contract.",
|
|
"No research replacement wiring, delegation, staging, commit, push or destructive canonical worktree operation. Checkpoint every 20 calls/15 minutes and before experiment, handoff or stop."
|
|
],
|
|
"title": "Live ObservedTech and event record ABI bridge"
|
|
}
|