sots-re/campaign/board.md

46 lines
9.2 KiB
Markdown

# Campaign board
Generated by `python3 tools/dashboard.py`; edit contracts and `campaign/current.json`.
Plan: [backlog.md](backlog.md). Policy: [method rules](../guides/method-rules.md).
## Current evidence
Gate: **passed (host)**; this is scoped gate evidence, not whole-engine acceptance.
Manifest: `campaign/evidence/8e14e00ee3ce7478ddfdef8de12183451e858c52d78dc28cffbdee47f5d087d8-gate.json` · SHA-256 `8e14e00ee3ce7478ddfdef8de12183451e858c52d78dc28cffbdee47f5d087d8`.
- engine: dirty snapshot; manifest identity `c9c90acbd182b872841e1c073e367a4747d6742f095e0c9ed737d608cdff78c6`; recorded revision `7741d42fc5e4e761e6449bdaf0e4a61d00036a23`.
- re: dirty snapshot; manifest identity `47b741d67acc48baefec6b4a673bf3525abc415165e59d4d3512dd0cc350c89a`; recorded revision `3bfde5a70d874a723e797a695bbd847fd82c0aa7`.
- Binary SHA-256: `78b2562ea2c56351f9f6f0f24d271afcced741eadbc148047780e6dfd101940b`.
- Input SOTS_SAVES_DIR: 43 hashed files at `/home/alex/sots-re/verify/results/saves`.
- Tests passed: ["addr_smoke", "mars_parse_unit", "game_config_unit", "game_config_manifest", "game_data_unit", "game_design_unit", "game_sim_economy", "game_sim_research", "game_sim_colony", "game_sim_movement", "game_sim_techgraph", "game_sim_visibility", "game_sim_construction", "game_sim_player_turn", "mars_rng_unit", "mars_stream_unit", "mars_stream_save", "mars_stream_domains", "mars_stream_wire_schema", "mars_text_unit", "mars_vfs_unit", "shim_trace_sha256", "shim_trace_emitter", "shim_trace_diff", "shim_trace_coverage", "shim_trace_hook", "game_effects", "game_events", "game_combat_retreat", "game_nav_pathplan", "game_ai_tasks", "game_ai_turn_order", "game_ai_orders", "game_ai_agent", "game_ai_live_blocks", "game_ai_apply_order", "game_ai_command_capture", "shim_budget_unit", "shim_techfx_unit", "shim_colony_unit", "shim_movement_unit", "shim_events_unit", "shim_player_turn_unit", "shim_rng_ledger_unit", "app_catalog", "app_turn", "app_trade_raid", "app_alliance", "app_treaty", "app_event_phase", "app_turn_record", "app_command_replay"]
- Tests skipped: ["game_config_replay", "game_data_realdata", "game_design_realdata", "game_design_census", "game_sim_smoke_real_save", "mars_text_realdata", "mars_vfs_realdata"]
- Tests failed: []
- Limitations: ["host profile allowed skips: game_config_replay, game_data_realdata, game_design_census, game_design_realdata, game_sim_smoke_real_save, mars_text_realdata, mars_vfs_realdata"]
Replay: **measured** (separate file-byte, inflated-byte and state equality).
- /home/alex/sots-re/verify/results/saves/turn2-state.sav → /home/alex/sots-re/verify/results/saves/turn3-state.sav: file=False, inflated=False, state=False.
Unselected findings and artifacts are historical evidence, not current acceptance.
## Capabilities / workloads
Contract lifecycle is reported independently of the evidence axes above.
| Contract | Lifecycle | Scope / workload | Original dependencies |
|---|---|---|---|
| [Bootstrap canonical contract controls and bounded worker launcher](contracts/controls-bootstrap.json) | accepted | ["tools/campaign.py", "tools/run_agent.py", "campaign/", "verify/campaign/"] | ["No original game executable required for control tests"] |
| [Normal Astra launcher, explicit routing and durable checkpoint smoke](contracts/launcher-smoke.json) | proposed | ["SMOKE ONLY: Read this contract and campaign/README.md from the canonical RE state root. Do not implement any other contract, edit source, delegate, or access the lab.", "Use the canonical campaign CLI to write a checkpoint for launcher-smoke with the run-supplied session ID, actor launcher-smoke, role architecture-review and model openai/gpt-6-astra. Summary: explicit Astra launcher reached canonical RE state from paired worktrees; no source mutation. Artifact: campaign/agents/lead.md. Next action: lead inspects this run's actual event/session/checkpoint binding.", "After writing that checkpoint, immediately return a short completion. Do not plan extra work."] | [] |
| [RE: research completion record construction and allocator ABI](contracts/research-completion-abi.json) | proposed | ["Reverse engineering only. Own canonical campaign/research/research-completion-abi.md and verify/results/research-completion-abi/ captures. Use assigned source-identical paired worktrees for source inspection; canonical RE for unique evidence/checkpoint outputs.", "Recover actual constructors/copy/destructors/vector-growth/allocation/free conventions used by RecordObservedTech and EventStorage/TurnEvents/PlayerEvent. Resolve implementable ABI operations, not another general framework.", "Use existing ReVa read-only tools through canonical tools/reva_call.py or the owner-supplied local binary. No Ghidra renames/type writes, VM mutation, new engine code, framework code, agents or delegation. Do not commit/stage/push.", "Start with findings/subsystems/{events,observedtech-append,research-replace}.md and campaign/pilots/research-replacement.md; cross-check binary bytes/decompilation rather than merely repeat notes. Anchors: RecordObservedTech 0x007ba1a0, EventStorage::PostEvent 0x008862b0, PlayerEvent constructor 0x0084ee30. Addresses are hypotheses to validate against fingerprint and actual tools.", "Produce recovered signatures, ownership/lifetime rules, short/long string and empty/full-capacity container paths, and exact unresolved dependencies with minimum next probe. Store raw tool outputs and a hash/provenance index in your owned RE results directory. Keep code-derived material out of engine repo."] | ["Original binary is the object of analysis, not a replacement dependency decision"] |
| [Completion-bearing research replacement pilot (proposed; acceptance runner and dependencies pending)](contracts/research-replacement.json) | proposed | ["Planning only until ready: campaign/pilots/research-replacement.md is the detailed input, write-boundary and acceptance specification. No replacement code or lab operations authorized by this proposed contract.", "Target ProcessResearch plus SetResearched and required OnTechResearched effects for the W1 turn3 LOAD-to-turn4 completion; broad research correctness is not implied.", "Before implementation assign paired baseline-pinned worktrees, exact owned source paths, supported-input preflight and executable acceptance. Uncommitted bootstrap changes are not bound by these HEAD IDs."] | ["Existing research adapter calls original TechTree::Cost for effective and cascade costs; independent effective-cost replacement is not established.", "Separate B2 hook uses original has-researched lookup and node-bore updater. The updater allocates/frees state and is not read-only. Its integration/retention needs an explicit lead decision.", "Runtime EventText lookup and caller-supplied asset tables already exist. Whether live text/allocator/event adapters use original helpers is unresolved; no PostEvent policy or address is assumed.", "Shim workload retains original turn driver, budget allocation, remaining simulation, data loading and save serialization. Successful scoped shim replacement would not establish independent standalone turn parity."] |
## Blockers / surprises
- No open surprise records found (not proof of acceptance).
- **controls-bootstrap** (accepted): dependencies []; stop conditions ["Cross-cutting architecture changes require Astra resolution"]; checkpoint campaign/runtime/checkpoints/controls-bootstrap-5643d7cec1edd289b0465d5f.json.
- **launcher-smoke** (proposed): dependencies []; stop conditions ["Any model, permission, contract, checkpoint or source mismatch: record incomplete; no fallback."]; checkpoint campaign/runtime/checkpoints/launcher-smoke-9e8a62fea4de50abd96f27d6.json.
- **research-completion-abi** (proposed): dependencies ["controls-bootstrap"]; stop conditions ["Stop affected interpretation on binary fingerprint mismatch, contradictory ownership/ABI evidence, unavailable original data, or any scope-changing surprise; record and escalate to Astra", "Checkpoint every 20 calls/15 minutes and before compaction/stopping; return exact next RE action within 40 steps", "Do not expand into framework development or mark pilot replacement ready/accepted"]; checkpoint campaign/runtime/checkpoints/research-completion-abi-5e30f7db1f3804d05c217369.json.
- **research-replacement** (proposed): dependencies []; stop conditions ["Remain proposed while readiness criterion, dependency decisions, input manifests and executable acceptance are missing; do not interpret narrative strings as execution proof.", "Stop on control disagreement, instrumentation mismatch, source/input drift, missing artifacts/assets, unknown RNG, unmodelled fired branch, unexpected writes, zero required execution or forbidden original fallback.", "Record any falsified assumption or changed scope as a surprise and obtain Astra resolution before affected work continues; checkpoint at 20 calls/15 minutes and before experiments, handoff or stop.", "No lab or shared-host mutation without explicit assignment and lease; no commits, staging, push or delegated work under the current pilot-design assignment."]; checkpoint null.
## Next action
Framework complete; reverse engineering active. First research-completion ABI pass recovered constructors/copy/ownership and callback ordering. Continue with nested event buckets, duplicate/prune and exceptional cleanup, then a scoped live-record adapter experiment. See campaign/research/NEXT.md.