24 lines
214 KiB
JSON
24 lines
214 KiB
JSON
{"type":"step_start","timestamp":1788991290533,"sessionID":"ses_f77cf5062ffeTknrMfnbJMmdNh","part":{"id":"prt_08830bc9e0017v5g3FATkRXhLT","messageID":"msg_08830b17f001L15L26aGHh3Amz","sessionID":"ses_f77cf5062ffeTknrMfnbJMmdNh","snapshot":"82e8a1781f0bc9d060c40f2573671cacab011b85","type":"step-start"}}
|
||
{"type":"tool_use","timestamp":1788991291361,"sessionID":"ses_f77cf5062ffeTknrMfnbJMmdNh","part":{"type":"tool","tool":"read","callID":"call_zco0vd3T9BTpRggAX07pG1XL","state":{"status":"completed","input":{"filePath":"/home/alex/sots-re/campaign/README.md"},"output":"<path>/home/alex/sots-re/campaign/README.md</path>\n<type>file</type>\n<content>\n1: # Canonical campaign controls\n2: \n3: `sots-re/campaign/` is the state authority. Start with your contract, its checkpoint, open\n4: surprises, and [current policy](../guides/multi-agent-workflow.md). Board/dashboard are generated\n5: projections. Historical evidence is not current acceptance. No automatic commits or lab operations.\n6: \n7: R4/R6 repairs are authorized by lead decisions `d-42c6d0b4ee5114e6f2e07c99` and\n8: `d-ab717735fc6c1661919f6894` in `runtime/decisions/`. Implemented controls remain **unaccepted**\n9: pending independent integrated review. See [controls handoff](rollout/controls-worker-state.md).\n10: \n11: ## Contract format\n12: \n13: `contract.schema.json` is strict JSON Schema (unknown fields and duplicate JSON keys fail).\n14: The standard-library validator implements the schema's used subset. A schema-valid, **proposed**\n15: example is [contracts/controls-bootstrap.json](contracts/controls-bootstrap.json).\n16: \n17: Required fields:\n18: \n19: | Field | Structure |\n20: |---|---|\n21: | `id`, `title`, `status` | Slug, short title, lifecycle state |\n22: | `owner` | `{ \"name\": \"worker-identity\", \"role\": \"implementer\" }` |\n23: | `baseline` | `{ \"engine\": {\"path\":\"/absolute/canonical/engine\",\"commit\":\"full-commit-id\"}, \"re\": {\"path\":\"/absolute/canonical/re\",\"commit\":\"full-commit-id\"} }` |\n24: | `scope`, `inputs`, `effects` | Arrays of explicit nonempty strings; include full write set and runtime inputs |\n25: | `original_dependencies` | String array, including original-assisted portions and unavailable inputs |\n26: | `dependencies` | Array of other contract IDs; all must be accepted before ready/implementing |\n27: | `acceptance` | Array of `{ \"id\": \"unique-criterion\", \"axis\": \"validation-scope\", \"criterion\": \"executable requirement\" }` |\n28: | `predictions`, `stop_conditions` | String arrays of predictions and conditions that halt work |\n29: | `checkpoint` | `null` or `campaign/runtime/checkpoints/<id>.json` |\n30: \n31: Optional `evidence` is an array of\n32: `{id,axis,path,sha256,source,integrated,source_binding,binaries,inputs,outcomes}`.\n33: `path` is an existing canonical RE-relative artifact; `sha256` hashes its actual bytes; `source`\n34: equals the contract's complete baseline object. Store understanding,\n35: implementation, original dependencies, and validation scope as separate acceptance/evidence axes.\n36: There is no generic `verified` scalar. Baseline commit IDs describe starting repositories;\n37: dirty source identity is machine-bound by `source_binding`, never inferred from those commits.\n38: Criteria need distinct states, branch exposure, positive execution, complete writes/elements,\n39: allocations/IDs/events/RNG/runtime inputs, synthetic and original-game differentials as applicable.\n40: The CLI checks package identity and declared axes; the independent reviewer evaluates the actual\n41: criteria, gate outcomes, full manifests and integrated reproduction. A passing measurement alone\n42: does not establish acceptance.\n43: \n44: ### Source-bound evidence interface (R4)\n45: \n46: `source_binding` is `{engine:{path,commit,sha256},re:{path,commit,sha256}}`. Generate it with:\n47: \n48: ```sh\n49: python3 tools/campaign.py --state-root /home/alex/sots-re source-binding research-replacement --engine-worktree /absolute/candidate-engine --re-worktree /absolute/candidate-re\n50: ```\n51: \n52: Omit both worktree arguments to bind the canonical integrated trees. Paths must be Git worktree\n53: roots in the respective baseline repositories. `commit` is the actual current HEAD; `sha256`\n54: is the deterministic digest of the actual file manifest, including dirty/untracked nonignored\n55: files, deleted tracked paths (`null`), file bytes and Unix modes. Symlinks/submodules fail closed.\n56: The fixed manifest policy uses `git ls-files --cached --others --exclude-standard`; ignored\n57: untracked build/output files are not source. Python cache directories are excluded. In RE only,\n58: `verify/results/` and `campaign/` are excluded **except** `campaign/models.json`,\n59: `campaign/contract.schema.json`, and `campaign/agents/**`. These exclusions prevent mutable\n60: contracts/checkpoints/evidence/projections from hashing themselves. Relevant RE tools, tests,\n61: generated facts and guides remain bound. Any consumed item outside that source inventory must\n62: appear among immutable input/binary artifacts. The independent reviewer checks inventory adequacy.\n63: \n64: `binaries` and `inputs` are nonempty arrays of `{path,sha256}` artifact references; for tooling\n65: contracts, bind the executable scripts/interpreter identity package and fixture input package.\n66: `outcomes` exactly covers the acceptance criterion IDs for that evidence axis, with entries\n67: `{criterion,status,artifact:{path,sha256}}`; promotion requires `status: \"pass\"`. Outcome artifacts\n68: contain positive execution, branch/state exposures, reproduction recipe and required effect/input\n69: accounting. The CLI checks identities, hashes and declared outcomes, **not arbitrary criterion\n70: semantics**. The independent verifier must reproduce and challenge those claims.\n71: \n72: For example, an outcome for the bootstrap contract is:\n73: \n74: ```json\n75: {\"criterion\":\"controls-negative-paths\",\"status\":\"pass\",\"artifact\":{\"path\":\"verify/results/controls/result.json\",\"sha256\":\"<actual 64-hex artifact hash>\"}}\n76: ```\n77: \n78: Capture bindings when producing evidence; do not attach a fresh source hash to old measurements.\n79: Every evidence/verdict/promotion check rehashes referenced sources and artifacts. Same-HEAD byte\n80: changes reject old evidence and verdicts. Integrated records require canonical paths, lead in\n81: integration state, and one identical binding across **all** final integrated evidence. A lead's\n82: `integrated` boolean cannot substitute for this check. Verdicts bind the full evidence array and\n83: the source-binding array; old verdicts lacking these identities must be reproduced.\n84: \n85: This contract wrapper is separate from gate measurement schema **`sots-gate/1`**, whose `source`\n86: still has `engine`/`re`. Reference its immutable manifest/binary/input package; do not rename its\n87: fields to match contract `source`. Reporter output is measured evidence, with `--require-match`\n88: for required equality, and gains acceptance only through independent contract/integration gates.\n89: \n90: ## State and transactions\n91: \n92: Every command requires `--state-root /absolute/canonical/sots-re` (the repository, not `campaign/`).\n93: No sibling inference. Control records stay below canonical `campaign/runtime/`; contracts remain\n94: in `campaign/contracts/`. Immutable hashed artifacts may be referenced anywhere inside canonical\n95: RE, including existing `verify/` corpora, without copying them. Absolute/traversing artifact paths,\n96: outside symlinks, Git internals and named secret/private-key locations are rejected; aliases are\n97: checked after resolution too. Never reference secrets or commit owner-supplied binaries/assets.\n98: JSON writes are atomic and fsynced; a canonical `flock` serializes\n99: CLI mutations, WIP decisions, and resource acquisition. Do not hand-edit active state concurrently\n100: with commands. Interrupted multi-file operations retain blocking records and require inspection.\n101: \n102: Runtime APIs (JSON files; no server):\n103: \n104: - `runtime/checkpoints/*.json`: `sots-checkpoint/1`, contract, actor/role/model/session, timestamp,\n105: contract `basis` digest, bounded summary (6000 characters), up to 32 `{path,sha256}` artifacts,\n106: and one `next_action` (2000 characters). Include observations versus decisions, source identities,\n107: tests, blockers, resources/access/cleanup, exact next action in the summary/artifacts.\n108: Do not attach the checkpoint's own contract as an artifact: saving the pointer changes that\n109: file. Its task metadata is already covered by `basis`; the CLI rejects this self-reference.\n110: - `runtime/surprises/*.json`: `sots-surprise/1`, id, contract, `status: open|resolved`, summary,\n111: discriminating probe, actor/model/session provenance where applicable, optional decision ID.\n112: - `runtime/decisions/*.json`: `sots-decision/1`, Astra resolution, explanation/probe, invalidated\n113: evidence and checkpoint; prior verdict is marked invalidated. Resolution returns needs-revision\n114: only when all surprises are closed. Re-probe and rebuild evidence; resolution is not acceptance.\n115: - `runtime/verdicts/<contract>.json`: independent verifier actor/session/model, pass/fail,\n116: explanation, contract basis, complete evidence digest and source-bindings digest.\n117: - `runtime/transitions/*.json`: actor/model, previous/next lifecycle state, timestamp.\n118: - `runtime/leases/<resource>.json`: owner, random token, held/released, acquisition/release provenance.\n119: - `runtime/runs/run-*.json`, `.jsonl`, `.stderr.log`: requested model/config, command, worktree\n120: manifests before/after, expanded prompt hash, effective configuration hashes, canonical config\n121: file hashes, actual events/session/model when emitted, completion/checkpoint status. Effective\n122: provider config is hashed rather than persisted because it can contain credentials.\n123: `active-<contract>.json` reserves the contract. Interrupted running reservations never auto-expire.\n124: \n125: Lifecycle: `proposed -> ready -> implementing -> verification -> integration -> accepted`.\n126: Blocked and needs-revision edges support repairs; no skipping stages. Ready requires scope,\n127: inputs, acceptance, stop conditions, valid pinned baseline and accepted dependencies. Implementing\n128: is atomically capped at two concurrent contracts; lead schedules only one pilot before enabling\n129: two independent slices. Verification requires fresh checkpoint/artifacts after implementation start.\n130: Integration requires lead plus independent passing verifier bound to current source/evidence.\n131: Accepted requires every declared axis in integrated evidence, passing independent verdict over\n132: that final package, and no open surprises. Adding integrated evidence changes the evidence digest:\n133: the verifier must attest the integrated package again. Handoff/promotion/end checkpoints must be\n134: within 15 minutes; recovery start has no age limit.\n135: \n136: Role/model registry: lead/resolver/architecture-review = `openai/gpt-6-astra`;\n137: analyst/implementer/verifier = `openai/gpt-5.6-terra`; lab = `openai/gpt-5.5`.\n138: CLI identity fields are **claims, not authenticated model authority**. The runner requests the\n139: registry model explicitly and records emitted provenance. Editable JSON, agent permissions and\n140: shell-accessible tooling are not a security boundary. No silent routing fallback.\n141: \n142: ## Commands\n143: \n144: Run from either repository using the canonical tool path when necessary. Examples:\n145: \n146: ```sh\n147: python3 tools/campaign.py --state-root /home/alex/sots-re validate\n148: python3 tools/campaign.py --state-root /home/alex/sots-re list\n149: python3 tools/campaign.py --state-root /home/alex/sots-re status research-replacement\n150: python3 tools/campaign.py --state-root /home/alex/sots-re checkpoint controls-bootstrap --actor controls-architect --role architecture-review --model openai/gpt-6-astra --session rollout-controls --summary 'Source identities, observations, decisions, tests and blockers are in the attached checkpoint.' --artifact campaign/rollout/controls-worker-state.md --next-action 'Run the independent controls review.'\n151: python3 tools/campaign.py --state-root /home/alex/sots-re transition controls-bootstrap ready --actor controls-architect --role architecture-review --model openai/gpt-6-astra\n152: ```\n153: \n154: `surprise CONTRACT --summary TEXT --probe TEXT` blocks immediately. `resolve SURPRISE_ID\n155: --explanation TEXT --probe TEXT` requires claimed Astra lead/resolver. Both also require\n156: `--actor NAME --role ROLE --model MODEL`. `evidence CONTRACT --record campaign/path.json`\n157: uses the same identity flags; record format is the evidence object above. Integrated records\n158: require lead and integration state. `verdict CONTRACT --session SESSION --verdict pass|fail\n159: --explanation TEXT` requires verifier identity flags and independent actor/session.\n160: \n161: ```sh\n162: python3 tools/campaign.py --state-root /home/alex/sots-re lease acquire windows-vm --actor lab-one --role lab --model openai/gpt-5.5\n163: python3 tools/campaign.py --state-root /home/alex/sots-re lease show windows-vm\n164: python3 tools/campaign.py --state-root /home/alex/sots-re lease release windows-vm --actor lab-one --role lab --model openai/gpt-5.5 --token TOKEN_FROM_ACQUIRE\n165: python3 tools/campaign.py --state-root /home/alex/sots-re lease release windows-vm --actor lead --role lead --model openai/gpt-6-astra --lead-release --reason 'Confirmed prior operator stopped; access and cleanup checked.'\n166: ```\n167: \n168: No stale lease stealing. Explicit lead release requires an explanation and lab preconditions,\n169: side effects, cleanup, and access verification in the operator checkpoint. Treat lease tokens\n170: as local owner capabilities, not secrets to put in a board/dashboard.\n171: \n172: ## Fresh bounded launches\n173: \n174: Prepare **two actual linked worktrees**, each distinct from its canonical source repository,\n175: at the contract's full baseline commit. No auto commits/worktree creation. Launch uses explicit\n176: canonical `OPENCODE_CONFIG`, checks matching repo-local agent/model/40 steps, and sets the final\n177: environment overlay to bind requested role/model/steps. Other inherited config overrides are\n178: cleared. `opencode models` must list the exact requested model even for dry runs.\n179: \n180: ```sh\n181: python3 tools/run_agent.py --state-root /home/alex/sots-re --role implementer --actor worker-one --contract slice-one --engine-worktree /home/alex/worktrees/slice-one-engine --re-worktree /home/alex/worktrees/slice-one-re --cwd engine --dry-run\n182: ```\n183: \n184: Remove `--dry-run` to execute. Normal worker launch requires a valid durable checkpoint, matching\n185: owner/role/status, no open surprises, baseline HEADs and canonical Git common-directory identity.\n186: Recovery checks checkpoint identity/basis and artifact hashes regardless of age, rechecks any\n187: source-bound evidence, and validates paired Git worktree/baseline identity. Missing ordinary-worker\n188: state still blocks. Bootstrap lead/architecture-review can start without a checkpoint; they still\n189: need paired worktrees. Astra lead/resolver may launch a blocked contract with open surprises and\n190: without a worker checkpoint in **resolution-only** scope: read evidence and write decisions/state,\n191: no implementation. Its prompt and permission overlay carry that limit, and worktree source changes\n192: fail completion. Ordinary affected workers stay blocked. Other Astra architecture actors receive\n193: explicit architecture authority within their owned scope. Each run is a fresh\n194: `opencode run --format json --model ... --agent ...`; no resume/continue option is used. The prompt\n195: supplies the run ID to use as checkpoint `--session`; actual OpenCode session IDs are captured\n196: separately when emitted. On exit, a checkpoint after start matching actor/role/model/run ID is\n197: mandatory or the run is marked incomplete. Completion additionally requires a zero exit, no\n198: `type:error`, a successful `step_finish` with `part.reason: \"stop\"`, one nonempty actual session ID,\n199: and consistent explicitly emitted model IDs. Text/tool-call/length events alone cannot complete a\n200: run. Missing model emission is recorded `observed_model_status: \"unavailable\"`, never invented.\n201: \n202: The runner checks the exact Git baseline again under reservation lock, rejects intervening contract\n203: changes, and checks canonical model/prompt/config files and effective configuration for drift at\n204: completion. Expanded role prompt/model/steps are frozen in the last-layer environment overlay.\n205: `opencode debug config` runs in the actual launch cwd with the actual environment before execution\n206: and again at completion. Permissions explicitly allow read/search, ordinary worker shell commands,\n207: and external-directory access to the assigned paired trees plus canonical RE; role-specific edit\n208: denies survive. Task delegation and interactive questions are denied. No `--auto` is required.\n209: Noninteractive command/environment tests and a live loader check cover this overlay; an actual\n210: normal worker launch smoke is a separate lead integration check. Permissions and before/after\n211: checks are operational guards, not a sandbox or continuous filesystem audit.\n212: Compaction is a backstop; no token threshold or machine-enforced 20-tool-call claim.\n213: \n214: ## Local verification\n215: \n216: ```sh\n217: python3 -m unittest discover -s verify/campaign -p 'test_*.py' -v\n218: python3 tools/campaign.py --state-root /home/alex/sots-re validate\n219: ```\n220: \n221: Tests create commits only in disposable fixture repositories, linked worktrees and fake OpenCode processes; they do\n222: not launch agents or touch the lab. Current bootstrap artifacts are implementation measurements\n223: pending independent review and integrated evidence.\n\n(End of file - total 223 lines)\n</content>","metadata":{"preview":"# Canonical campaign controls\n\n`sots-re/campaign/` is the state authority. Start with your contract, its checkpoint, open\nsurprises, and [current policy](../guides/multi-agent-workflow.md). Board/dashboard are generated\nprojections. Historical evidence is not current acceptance. No automatic commits or lab operations.\n\nR4/R6 repairs are authorized by lead decisions `d-42c6d0b4ee5114e6f2e07c99` and\n`d-ab717735fc6c1661919f6894` in `runtime/decisions/`. Implemented controls remain **unaccepted**\npending independent integrated review. See [controls handoff](rollout/controls-worker-state.md).\n\n## Contract format\n\n`contract.schema.json` is strict JSON Schema (unknown fields and duplicate JSON keys fail).\nThe standard-library validator implements the schema's used subset. A schema-valid, **proposed**\nexample is [contracts/controls-bootstrap.json](contracts/controls-bootstrap.json).\n\nRequired fields:\n\n| Field | Structure |\n|---|---|","truncated":false,"loaded":[],"display":{"type":"file","path":"/home/alex/sots-re/campaign/README.md","text":"# Canonical campaign controls\n\n`sots-re/campaign/` is the state authority. Start with your contract, its checkpoint, open\nsurprises, and [current policy](../guides/multi-agent-workflow.md). Board/dashboard are generated\nprojections. Historical evidence is not current acceptance. No automatic commits or lab operations.\n\nR4/R6 repairs are authorized by lead decisions `d-42c6d0b4ee5114e6f2e07c99` and\n`d-ab717735fc6c1661919f6894` in `runtime/decisions/`. Implemented controls remain **unaccepted**\npending independent integrated review. See [controls handoff](rollout/controls-worker-state.md).\n\n## Contract format\n\n`contract.schema.json` is strict JSON Schema (unknown fields and duplicate JSON keys fail).\nThe standard-library validator implements the schema's used subset. A schema-valid, **proposed**\nexample is [contracts/controls-bootstrap.json](contracts/controls-bootstrap.json).\n\nRequired fields:\n\n| Field | Structure |\n|---|---|\n| `id`, `title`, `status` | Slug, short title, lifecycle state |\n| `owner` | `{ \"name\": \"worker-identity\", \"role\": \"implementer\" }` |\n| `baseline` | `{ \"engine\": {\"path\":\"/absolute/canonical/engine\",\"commit\":\"full-commit-id\"}, \"re\": {\"path\":\"/absolute/canonical/re\",\"commit\":\"full-commit-id\"} }` |\n| `scope`, `inputs`, `effects` | Arrays of explicit nonempty strings; include full write set and runtime inputs |\n| `original_dependencies` | String array, including original-assisted portions and unavailable inputs |\n| `dependencies` | Array of other contract IDs; all must be accepted before ready/implementing |\n| `acceptance` | Array of `{ \"id\": \"unique-criterion\", \"axis\": \"validation-scope\", \"criterion\": \"executable requirement\" }` |\n| `predictions`, `stop_conditions` | String arrays of predictions and conditions that halt work |\n| `checkpoint` | `null` or `campaign/runtime/checkpoints/<id>.json` |\n\nOptional `evidence` is an array of\n`{id,axis,path,sha256,source,integrated,source_binding,binaries,inputs,outcomes}`.\n`path` is an existing canonical RE-relative artifact; `sha256` hashes its actual bytes; `source`\nequals the contract's complete baseline object. Store understanding,\nimplementation, original dependencies, and validation scope as separate acceptance/evidence axes.\nThere is no generic `verified` scalar. Baseline commit IDs describe starting repositories;\ndirty source identity is machine-bound by `source_binding`, never inferred from those commits.\nCriteria need distinct states, branch exposure, positive execution, complete writes/elements,\nallocations/IDs/events/RNG/runtime inputs, synthetic and original-game differentials as applicable.\nThe CLI checks package identity and declared axes; the independent reviewer evaluates the actual\ncriteria, gate outcomes, full manifests and integrated reproduction. A passing measurement alone\ndoes not establish acceptance.\n\n### Source-bound evidence interface (R4)\n\n`source_binding` is `{engine:{path,commit,sha256},re:{path,commit,sha256}}`. Generate it with:\n\n```sh\npython3 tools/campaign.py --state-root /home/alex/sots-re source-binding research-replacement --engine-worktree /absolute/candidate-engine --re-worktree /absolute/candidate-re\n```\n\nOmit both worktree arguments to bind the canonical integrated trees. Paths must be Git worktree\nroots in the respective baseline repositories. `commit` is the actual current HEAD; `sha256`\nis the deterministic digest of the actual file manifest, including dirty/untracked nonignored\nfiles, deleted tracked paths (`null`), file bytes and Unix modes. Symlinks/submodules fail closed.\nThe fixed manifest policy uses `git ls-files --cached --others --exclude-standard`; ignored\nuntracked build/output files are not source. Python cache directories are excluded. In RE only,\n`verify/results/` and `campaign/` are excluded **except** `campaign/models.json`,\n`campaign/contract.schema.json`, and `campaign/agents/**`. These exclusions prevent mutable\ncontracts/checkpoints/evidence/projections from hashing themselves. Relevant RE tools, tests,\ngenerated facts and guides remain bound. Any consumed item outside that source inventory must\nappear among immutable input/binary artifacts. The independent reviewer checks inventory adequacy.\n\n`binaries` and `inputs` are nonempty arrays of `{path,sha256}` artifact references; for tooling\ncontracts, bind the executable scripts/interpreter identity package and fixture input package.\n`outcomes` exactly covers the acceptance criterion IDs for that evidence axis, with entries\n`{criterion,status,artifact:{path,sha256}}`; promotion requires `status: \"pass\"`. Outcome artifacts\ncontain positive execution, branch/state exposures, reproduction recipe and required effect/input\naccounting. The CLI checks identities, hashes and declared outcomes, **not arbitrary criterion\nsemantics**. The independent verifier must reproduce and challenge those claims.\n\nFor example, an outcome for the bootstrap contract is:\n\n```json\n{\"criterion\":\"controls-negative-paths\",\"status\":\"pass\",\"artifact\":{\"path\":\"verify/results/controls/result.json\",\"sha256\":\"<actual 64-hex artifact hash>\"}}\n```\n\nCapture bindings when producing evidence; do not attach a fresh source hash to old measurements.\nEvery evidence/verdict/promotion check rehashes referenced sources and artifacts. Same-HEAD byte\nchanges reject old evidence and verdicts. Integrated records require canonical paths, lead in\nintegration state, and one identical binding across **all** final integrated evidence. A lead's\n`integrated` boolean cannot substitute for this check. Verdicts bind the full evidence array and\nthe source-binding array; old verdicts lacking these identities must be reproduced.\n\nThis contract wrapper is separate from gate measurement schema **`sots-gate/1`**, whose `source`\nstill has `engine`/`re`. Reference its immutable manifest/binary/input package; do not rename its\nfields to match contract `source`. Reporter output is measured evidence, with `--require-match`\nfor required equality, and gains acceptance only through independent contract/integration gates.\n\n## State and transactions\n\nEvery command requires `--state-root /absolute/canonical/sots-re` (the repository, not `campaign/`).\nNo sibling inference. Control records stay below canonical `campaign/runtime/`; contracts remain\nin `campaign/contracts/`. Immutable hashed artifacts may be referenced anywhere inside canonical\nRE, including existing `verify/` corpora, without copying them. Absolute/traversing artifact paths,\noutside symlinks, Git internals and named secret/private-key locations are rejected; aliases are\nchecked after resolution too. Never reference secrets or commit owner-supplied binaries/assets.\nJSON writes are atomic and fsynced; a canonical `flock` serializes\nCLI mutations, WIP decisions, and resource acquisition. Do not hand-edit active state concurrently\nwith commands. Interrupted multi-file operations retain blocking records and require inspection.\n\nRuntime APIs (JSON files; no server):\n\n- `runtime/checkpoints/*.json`: `sots-checkpoint/1`, contract, actor/role/model/session, timestamp,\n contract `basis` digest, bounded summary (6000 characters), up to 32 `{path,sha256}` artifacts,\n and one `next_action` (2000 characters). Include observations versus decisions, source identities,\n tests, blockers, resources/access/cleanup, exact next action in the summary/artifacts.\n Do not attach the checkpoint's own contract as an artifact: saving the pointer changes that\n file. Its task metadata is already covered by `basis`; the CLI rejects this self-reference.\n- `runtime/surprises/*.json`: `sots-surprise/1`, id, contract, `status: open|resolved`, summary,\n discriminating probe, actor/model/session provenance where applicable, optional decision ID.\n- `runtime/decisions/*.json`: `sots-decision/1`, Astra resolution, explanation/probe, invalidated\n evidence and checkpoint; prior verdict is marked invalidated. Resolution returns needs-revision\n only when all surprises are closed. Re-probe and rebuild evidence; resolution is not acceptance.\n- `runtime/verdicts/<contract>.json`: independent verifier actor/session/model, pass/fail,\n explanation, contract basis, complete evidence digest and source-bindings digest.\n- `runtime/transitions/*.json`: actor/model, previous/next lifecycle state, timestamp.\n- `runtime/leases/<resource>.json`: owner, random token, held/released, acquisition/release provenance.\n- `runtime/runs/run-*.json`, `.jsonl`, `.stderr.log`: requested model/config, command, worktree\n manifests before/after, expanded prompt hash, effective configuration hashes, canonical config\n file hashes, actual events/session/model when emitted, completion/checkpoint status. Effective\n provider config is hashed rather than persisted because it can contain credentials.\n `active-<contract>.json` reserves the contract. Interrupted running reservations never auto-expire.\n\nLifecycle: `proposed -> ready -> implementing -> verification -> integration -> accepted`.\nBlocked and needs-revision edges support repairs; no skipping stages. Ready requires scope,\ninputs, acceptance, stop conditions, valid pinned baseline and accepted dependencies. Implementing\nis atomically capped at two concurrent contracts; lead schedules only one pilot before enabling\ntwo independent slices. Verification requires fresh checkpoint/artifacts after implementation start.\nIntegration requires lead plus independent passing verifier bound to current source/evidence.\nAccepted requires every declared axis in integrated evidence, passing independent verdict over\nthat final package, and no open surprises. Adding integrated evidence changes the evidence digest:\nthe verifier must attest the integrated package again. Handoff/promotion/end checkpoints must be\nwithin 15 minutes; recovery start has no age limit.\n\nRole/model registry: lead/resolver/architecture-review = `openai/gpt-6-astra`;\nanalyst/implementer/verifier = `openai/gpt-5.6-terra`; lab = `openai/gpt-5.5`.\nCLI identity fields are **claims, not authenticated model authority**. The runner requests the\nregistry model explicitly and records emitted provenance. Editable JSON, agent permissions and\nshell-accessible tooling are not a security boundary. No silent routing fallback.\n\n## Commands\n\nRun from either repository using the canonical tool path when necessary. Examples:\n\n```sh\npython3 tools/campaign.py --state-root /home/alex/sots-re validate\npython3 tools/campaign.py --state-root /home/alex/sots-re list\npython3 tools/campaign.py --state-root /home/alex/sots-re status research-replacement\npython3 tools/campaign.py --state-root /home/alex/sots-re checkpoint controls-bootstrap --actor controls-architect --role architecture-review --model openai/gpt-6-astra --session rollout-controls --summary 'Source identities, observations, decisions, tests and blockers are in the attached checkpoint.' --artifact campaign/rollout/controls-worker-state.md --next-action 'Run the independent controls review.'\npython3 tools/campaign.py --state-root /home/alex/sots-re transition controls-bootstrap ready --actor controls-architect --role architecture-review --model openai/gpt-6-astra\n```\n\n`surprise CONTRACT --summary TEXT --probe TEXT` blocks immediately. `resolve SURPRISE_ID\n--explanation TEXT --probe TEXT` requires claimed Astra lead/resolver. Both also require\n`--actor NAME --role ROLE --model MODEL`. `evidence CONTRACT --record campaign/path.json`\nuses the same identity flags; record format is the evidence object above. Integrated records\nrequire lead and integration state. `verdict CONTRACT --session SESSION --verdict pass|fail\n--explanation TEXT` requires verifier identity flags and independent actor/session.\n\n```sh\npython3 tools/campaign.py --state-root /home/alex/sots-re lease acquire windows-vm --actor lab-one --role lab --model openai/gpt-5.5\npython3 tools/campaign.py --state-root /home/alex/sots-re lease show windows-vm\npython3 tools/campaign.py --state-root /home/alex/sots-re lease release windows-vm --actor lab-one --role lab --model openai/gpt-5.5 --token TOKEN_FROM_ACQUIRE\npython3 tools/campaign.py --state-root /home/alex/sots-re lease release windows-vm --actor lead --role lead --model openai/gpt-6-astra --lead-release --reason 'Confirmed prior operator stopped; access and cleanup checked.'\n```\n\nNo stale lease stealing. Explicit lead release requires an explanation and lab preconditions,\nside effects, cleanup, and access verification in the operator checkpoint. Treat lease tokens\nas local owner capabilities, not secrets to put in a board/dashboard.\n\n## Fresh bounded launches\n\nPrepare **two actual linked worktrees**, each distinct from its canonical source repository,\nat the contract's full baseline commit. No auto commits/worktree creation. Launch uses explicit\ncanonical `OPENCODE_CONFIG`, checks matching repo-local agent/model/40 steps, and sets the final\nenvironment overlay to bind requested role/model/steps. Other inherited config overrides are\ncleared. `opencode models` must list the exact requested model even for dry runs.\n\n```sh\npython3 tools/run_agent.py --state-root /home/alex/sots-re --role implementer --actor worker-one --contract slice-one --engine-worktree /home/alex/worktrees/slice-one-engine --re-worktree /home/alex/worktrees/slice-one-re --cwd engine --dry-run\n```\n\nRemove `--dry-run` to execute. Normal worker launch requires a valid durable checkpoint, matching\nowner/role/status, no open surprises, baseline HEADs and canonical Git common-directory identity.\nRecovery checks checkpoint identity/basis and artifact hashes regardless of age, rechecks any\nsource-bound evidence, and validates paired Git worktree/baseline identity. Missing ordinary-worker\nstate still blocks. Bootstrap lead/architecture-review can start without a checkpoint; they still\nneed paired worktrees. Astra lead/resolver may launch a blocked contract with open surprises and\nwithout a worker checkpoint in **resolution-only** scope: read evidence and write decisions/state,\nno implementation. Its prompt and permission overlay carry that limit, and worktree source changes\nfail completion. Ordinary affected workers stay blocked. Other Astra architecture actors receive\nexplicit architecture authority within their owned scope. Each run is a fresh\n`opencode run --format json --model ... --agent ...`; no resume/continue option is used. The prompt\nsupplies the run ID to use as checkpoint `--session`; actual OpenCode session IDs are captured\nseparately when emitted. On exit, a checkpoint after start matching actor/role/model/run ID is\nmandatory or the run is marked incomplete. Completion additionally requires a zero exit, no\n`type:error`, a successful `step_finish` with `part.reason: \"stop\"`, one nonempty actual session ID,\nand consistent explicitly emitted model IDs. Text/tool-call/length events alone cannot complete a\nrun. Missing model emission is recorded `observed_model_status: \"unavailable\"`, never invented.\n\nThe runner checks the exact Git baseline again under reservation lock, rejects intervening contract\nchanges, and checks canonical model/prompt/config files and effective configuration for drift at\ncompletion. Expanded role prompt/model/steps are frozen in the last-layer environment overlay.\n`opencode debug config` runs in the actual launch cwd with the actual environment before execution\nand again at completion. Permissions explicitly allow read/search, ordinary worker shell commands,\nand external-directory access to the assigned paired trees plus canonical RE; role-specific edit\ndenies survive. Task delegation and interactive questions are denied. No `--auto` is required.\nNoninteractive command/environment tests and a live loader check cover this overlay; an actual\nnormal worker launch smoke is a separate lead integration check. Permissions and before/after\nchecks are operational guards, not a sandbox or continuous filesystem audit.\nCompaction is a backstop; no token threshold or machine-enforced 20-tool-call claim.\n\n## Local verification\n\n```sh\npython3 -m unittest discover -s verify/campaign -p 'test_*.py' -v\npython3 tools/campaign.py --state-root /home/alex/sots-re validate\n```\n\nTests create commits only in disposable fixture repositories, linked worktrees and fake OpenCode processes; they do\nnot launch agents or touch the lab. Current bootstrap artifacts are implementation measurements\npending independent review and integrated evidence.","lineStart":1,"lineEnd":223,"totalLines":223,"truncated":false}},"title":"campaign/README.md","time":{"start":1788991291345,"end":1788991291357}},"metadata":{"openai":{"itemId":"fc_038e583f9678ff19016aa1d73a7be887d1b493332e9d3f1653"}},"id":"prt_08830bca20011ws1s0a6HVKGjj","sessionID":"ses_f77cf5062ffeTknrMfnbJMmdNh","messageID":"msg_08830b17f001L15L26aGHh3Amz"}}
|
||
{"type":"step_finish","timestamp":1788991291476,"sessionID":"ses_f77cf5062ffeTknrMfnbJMmdNh","part":{"id":"prt_08830c04f001ycxnQ3kpls5JMc","reason":"tool-calls","snapshot":"4e9278cce560f7492dc37ea2555f6fa365eb666a","messageID":"msg_08830b17f001L15L26aGHh3Amz","sessionID":"ses_f77cf5062ffeTknrMfnbJMmdNh","type":"step-finish","tokens":{"total":5860,"input":5831,"output":29,"reasoning":0,"cache":{"write":0,"read":0}},"cost":0}}
|
||
{"type":"step_start","timestamp":1788991298089,"sessionID":"ses_f77cf5062ffeTknrMfnbJMmdNh","part":{"id":"prt_08830da24001isggX99KSIwVWg","messageID":"msg_08830c07a001tmP88V0ev77Qqp","sessionID":"ses_f77cf5062ffeTknrMfnbJMmdNh","snapshot":"f11fcb21516b7e527a983087d1d21f5acefb90db","type":"step-start"}}
|
||
{"type":"tool_use","timestamp":1788991298202,"sessionID":"ses_f77cf5062ffeTknrMfnbJMmdNh","part":{"type":"tool","tool":"read","callID":"call_boQtAVhYnm7UQ0BIEbFjl69O","state":{"status":"completed","input":{"filePath":"/home/alex/sots-re/AGENTS.md"},"output":"<path>/home/alex/sots-re/AGENTS.md</path>\n<type>file</type>\n<content>\n1: # SOTS campaign instructions\n2: \n3: This repository is the state authority for the SOTS reconstruction and its Windows lab.\n4: Start with `campaign/README.md`, your contract, its latest checkpoint, and open surprises.\n5: Current policy: `guides/multi-agent-workflow.md`. Engine architecture: `sots-engine/docs/architecture.md`.\n6: Historical findings are evidence, not current execution instructions or accepted status.\n7: \n8: ## Authority and models\n9: \n10: - Architecture, planning, acceptance-policy changes, and evidence that changes the plan belong\n11: to **GPT-6 Astra (`openai/gpt-6-astra`)**. The user's final correction supersedes SOL/MYTHOS.\n12: - `campaign/models.json` is the role/model registry. Launch with `tools/run_agent.py` and an\n13: explicit role, contract, state root, and paired worktrees. Never silently downgrade or fall back.\n14: - Ordinary implementation/test failures inside the contract may be fixed by its worker.\n15: Falsified assumptions, conflicting evidence, unexpected instrument effects, or changed scope\n16: require a recorded surprise and an Astra resolution before affected work continues.\n17: - No worker subdelegation. The lead assigns parallelism; max two implementation slices after\n18: the pilot. Independent workload preparation is scheduled against explicit resource leases.\n19: \n20: ## Durable state and context\n21: \n22: Checkpoint in the canonical RE state root every **20 tool calls or 15 minutes**, whichever is\n23: earlier, and before an experiment, compaction, handoff, or stop. Include model/session, exact\n24: source identities, evidence paths, decisions versus observations, tests, blockers, and ONE exact\n25: next action. Do not store state only in a chat summary or `/tmp`.\n26: The runner uses bounded 40-step quanta. After checkpointing, stop and restart from the repository;\n27: automatic compaction is a backstop, not proof that a checkpoint was written. On recovery read the\n28: contract/checkpoint, verify worktree and resource identities, then continue. Missing state means\n29: blocked, not permission to reconstruct progress from memory.\n30: \n31: ## Ownership\n32: \n33: Use distinct engine and RE worktrees per lane, baseline-pinned. Canonical runtime state is shared\n34: only through the campaign tools. One integrator writes current evidence pointers and projections.\n35: Never stage someone else's changes. No automatic commit, push, pull, or reset. Commands requiring\n36: these actions need explicit user authorization. Source edits use apply_patch.\n37: VM, shared build-host, and Ghidra mutation require leases. A stale lease is not automatically free.\n38: Record preconditions, side effects, cleanup and access verification for any lab operation.\n39: Rollout bootstrap file-ownership exception: `campaign/rollout/architecture-decision.md` only.\n40: \n41: ## Evidence\n42: \n43: No generic `verified` promotion. Separate understanding, implementation, original dependencies,\n44: and validation scope. A count is insufficient without distinct states, branch exposures, and\n45: positive execution evidence. Include all writes, container elements, allocations, IDs, events,\n46: RNG draws, and runtime-only inputs. Original-assisted execution is not independent replacement.\n47: Synthetic boundary tests and original-game differential tests are complementary. Missing required\n48: inputs, zero execution, incomplete coverage, unexpected skips, stale binaries or unbound source\n49: identity fail acceptance. One independent verifier must reproduce the package; integrated-tree\n50: evidence is required for acceptance. Reports are measurements until those gates pass.\n51: \n52: Never commit owner-supplied binaries/assets or secrets. Engine facts cross only documented\n53: generated channels. Never paste disassembly/decompiler output into the engine repository.\n\n(End of file - total 53 lines)\n</content>","metadata":{"preview":"# SOTS campaign instructions\n\nThis repository is the state authority for the SOTS reconstruction and its Windows lab.\nStart with `campaign/README.md`, your contract, its latest checkpoint, and open surprises.\nCurrent policy: `guides/multi-agent-workflow.md`. Engine architecture: `sots-engine/docs/architecture.md`.\nHistorical findings are evidence, not current execution instructions or accepted status.\n\n## Authority and models\n\n- Architecture, planning, acceptance-policy changes, and evidence that changes the plan belong\n to **GPT-6 Astra (`openai/gpt-6-astra`)**. The user's final correction supersedes SOL/MYTHOS.\n- `campaign/models.json` is the role/model registry. Launch with `tools/run_agent.py` and an\n explicit role, contract, state root, and paired worktrees. Never silently downgrade or fall back.\n- Ordinary implementation/test failures inside the contract may be fixed by its worker.\n Falsified assumptions, conflicting evidence, unexpected instrument effects, or changed scope\n require a recorded surprise and an Astra resolution before affected work continues.\n- No worker subdelegation. The lead assigns parallelism; max two implementation slices after\n the pilot. Independent workload preparation is scheduled against explicit resource leases.\n\n## Durable state and context","truncated":false,"loaded":[],"display":{"type":"file","path":"/home/alex/sots-re/AGENTS.md","text":"# SOTS campaign instructions\n\nThis repository is the state authority for the SOTS reconstruction and its Windows lab.\nStart with `campaign/README.md`, your contract, its latest checkpoint, and open surprises.\nCurrent policy: `guides/multi-agent-workflow.md`. Engine architecture: `sots-engine/docs/architecture.md`.\nHistorical findings are evidence, not current execution instructions or accepted status.\n\n## Authority and models\n\n- Architecture, planning, acceptance-policy changes, and evidence that changes the plan belong\n to **GPT-6 Astra (`openai/gpt-6-astra`)**. The user's final correction supersedes SOL/MYTHOS.\n- `campaign/models.json` is the role/model registry. Launch with `tools/run_agent.py` and an\n explicit role, contract, state root, and paired worktrees. Never silently downgrade or fall back.\n- Ordinary implementation/test failures inside the contract may be fixed by its worker.\n Falsified assumptions, conflicting evidence, unexpected instrument effects, or changed scope\n require a recorded surprise and an Astra resolution before affected work continues.\n- No worker subdelegation. The lead assigns parallelism; max two implementation slices after\n the pilot. Independent workload preparation is scheduled against explicit resource leases.\n\n## Durable state and context\n\nCheckpoint in the canonical RE state root every **20 tool calls or 15 minutes**, whichever is\nearlier, and before an experiment, compaction, handoff, or stop. Include model/session, exact\nsource identities, evidence paths, decisions versus observations, tests, blockers, and ONE exact\nnext action. Do not store state only in a chat summary or `/tmp`.\nThe runner uses bounded 40-step quanta. After checkpointing, stop and restart from the repository;\nautomatic compaction is a backstop, not proof that a checkpoint was written. On recovery read the\ncontract/checkpoint, verify worktree and resource identities, then continue. Missing state means\nblocked, not permission to reconstruct progress from memory.\n\n## Ownership\n\nUse distinct engine and RE worktrees per lane, baseline-pinned. Canonical runtime state is shared\nonly through the campaign tools. One integrator writes current evidence pointers and projections.\nNever stage someone else's changes. No automatic commit, push, pull, or reset. Commands requiring\nthese actions need explicit user authorization. Source edits use apply_patch.\nVM, shared build-host, and Ghidra mutation require leases. A stale lease is not automatically free.\nRecord preconditions, side effects, cleanup and access verification for any lab operation.\nRollout bootstrap file-ownership exception: `campaign/rollout/architecture-decision.md` only.\n\n## Evidence\n\nNo generic `verified` promotion. Separate understanding, implementation, original dependencies,\nand validation scope. A count is insufficient without distinct states, branch exposures, and\npositive execution evidence. Include all writes, container elements, allocations, IDs, events,\nRNG draws, and runtime-only inputs. Original-assisted execution is not independent replacement.\nSynthetic boundary tests and original-game differential tests are complementary. Missing required\ninputs, zero execution, incomplete coverage, unexpected skips, stale binaries or unbound source\nidentity fail acceptance. One independent verifier must reproduce the package; integrated-tree\nevidence is required for acceptance. Reports are measurements until those gates pass.\n\nNever commit owner-supplied binaries/assets or secrets. Engine facts cross only documented\ngenerated channels. Never paste disassembly/decompiler output into the engine repository.","lineStart":1,"lineEnd":53,"totalLines":53,"truncated":false}},"title":"AGENTS.md","time":{"start":1788991298146,"end":1788991298157}},"metadata":{"openai":{"itemId":"fc_071eb31792f1ad11016aa1d7412d1887d18ee79691aa7ba68f"}},"id":"prt_08830da5e001oQdbASfoyvSaEa","sessionID":"ses_f77cf5062ffeTknrMfnbJMmdNh","messageID":"msg_08830c07a001tmP88V0ev77Qqp"}}
|
||
{"type":"tool_use","timestamp":1788991298202,"sessionID":"ses_f77cf5062ffeTknrMfnbJMmdNh","part":{"type":"tool","tool":"read","callID":"call_kR9y0wrr3yC6Pwjxr76X3NY4","state":{"status":"completed","input":{"filePath":"/home/alex/sots-re/guides/multi-agent-workflow.md"},"output":"<path>/home/alex/sots-re/guides/multi-agent-workflow.md</path>\n<type>file</type>\n<content>\n1: # Multi-agent operating architecture\n2: \n3: ## Product and milestone\n4: \n5: Reconstruct a behavior-equivalent engine consuming owner-supplied assets. The next product\n6: milestone is standalone replay given a captured command stream and complete declared runtime\n7: inputs. The first workflow pilot is the complete research write set. A passing host build is a\n8: component baseline, not a playable engine or independent replacement.\n9: \n10: ## Source of truth\n11: \n12: `campaign/contracts/` holds versioned tasks, `campaign/runtime/` holds checkpoints, sessions,\n13: leases and surprises, and evidence packages identify inputs, source and executable artifacts.\n14: `campaign/current.json` selects published evidence by path and digest. Board/dashboard are\n15: generated projections, never alternate writable authorities. Exact tool CLI/schema is documented\n16: in `campaign/README.md`. Historical findings retain their original experiment scope; they are\n17: not promoted by copying an old status into a new contract.\n18: \n19: ## Model authority\n20: \n21: | Responsibility | Model |\n22: |---|---|\n23: | Planning, architecture, integration judgment, surprise resolution | GPT-6 Astra |\n24: | Bounded RE analysis, implementation, independent verification | GPT-5.6 Terra |\n25: | Routine lab/workload operations | GPT-5.5 |\n26: | Context compaction | GPT-5.5 |\n27: \n28: Exact provider IDs are in `campaign/models.json`. The lead may explicitly allocate Astra to a\n29: hard architecture/review task. No fallback is automatic. Model names in editable JSON are\n30: provenance, not authentication: launcher events and independent review support the record.\n31: Permissions reduce accidental role drift; unrestricted local shell access is not a sandbox.\n32: \n33: ## Behavioral slice\n34: \n35: The lead specifies a bounded input domain, full observable write set, dependencies, acceptance\n36: workloads and stop conditions. The analyst recovers behavior; the verifier specifies discriminating\n37: tests before implementation; the implementer changes engine/adapters; the lab operator captures\n38: controls; the verifier reproduces; the integrator tests the combined source snapshot.\n39: \n40: Include transitive effects: allocations, IDs, container ELEMENTS, event text/records, RNG and\n41: nonserialized state. An address/function name is not a sufficient replacement boundary. If a\n42: neighbor function supplies required effects, extend the approved contract or expose it as an\n43: original dependency. Do not call the original and label the result independent.\n44: \n45: Lifecycle is `proposed → ready → implementing → verification → integration → accepted`, with\n46: blocked/revision states. Lifecycle is distinct from evidence strength. Acceptance is scoped to\n47: the manifest's exact procedure and workloads, never universal correctness.\n48: \n49: ## Independence\n50: \n51: Verifier and implementer are different executions. Verification starts with the contract, raw\n52: evidence and reproduction recipe, not just the author's conclusion. Require one meaningful\n53: challenge: held-out state, boundary, negative control, ablation, or independent state accounting.\n54: Both synthetic tests and original-game experiments matter. Repeat-call volume cannot replace\n55: branch and distinct-state coverage. Null effects and zero executions must be distinguishable.\n56: \n57: ## Sessions and recovery\n58: \n59: At most two implementation slices after a single-slice pilot. No nested worker delegation.\n60: Paired worktrees isolate source changes; unique build directories isolate artifacts. Canonical\n61: RE runtime state remains explicit even when a worker runs in `/tmp` worktrees.\n62: \n63: Checkpoint every 20 calls or 15min; also before experiments, compaction, handoff and stopping.\n64: Record source identities, exact changed paths, commands/results, artifacts and hashes, open\n65: surprises, held leases, requested/observed model, session identity and exact next action. Avoid\n66: large prose histories: raw logs belong in evidence; the checkpoint is a bounded resumption record.\n67: \n68: The launcher caps a quantum at 40 agent steps. A new quantum starts fresh using contract and\n69: checkpoint. Auto-compaction with an ample reserved window and four retained turns is enabled.\n70: This is a best-effort context backstop; regular durable checkpoints and fresh quanta provide the\n71: actual recovery discipline. Never claim a model compacted merely because a setting exists.\n72: \n73: ## Surprises\n74: \n75: On a falsified prediction, contradictory claim, unexplained regression, instrument interference,\n76: or newly necessary dependency: record the observation and evidence; block affected work. Astra\n77: first checks the instrument and source identity, then marks claims surviving/qualified/overturned,\n78: chooses a discriminating experiment, and records the revised plan. Unaffected contracted work\n79: may continue. Updating a paragraph without invalidating affected acceptance is insufficient.\n80: \n81: ## Lab ownership\n82: \n83: Acquire a canonical resource lease before VM, build-host or Ghidra mutation. An expired timestamp\n84: does not authorize stealing a lease. The lead reconciles stale ownership with actual processes.\n85: Use one guest at a time for maintenance, capture before/after inventory, preserve access and\n86: runtime dependencies, and verify unattended console login plus authenticated administration.\n87: Reboots require a free guest and a recorded recovery path. Runtime/Ghidra changes are experiments\n88: with provenance, not undocumented preparatory steps.\n89: \n90: ## Gate and publication\n91: \n92: Run the local gate with explicit engine, corpus, new output directory and profile. It snapshots\n93: source, uses fresh builds, records manifests and runs the expected test inventory once. Host\n94: profile allows a named list of unavailable asset/trace tests and publishes them as limitations.\n95: Full acceptance requires the full profile and the slice-specific original oracle; no blanket\n96: waiver converts a host pass to fidelity. Standalone measurement may diverge; acceptance may not.\n97: \n98: The integrator alone selects current results after verifying their hashes and source binding.\n99: No percentages of LOC, mapped rows or closed leaves purport to measure engine completeness.\n100: Run failure and missing evidence are visible states. Old results remain historical, not current.\n\n(End of file - total 100 lines)\n</content>","metadata":{"preview":"# Multi-agent operating architecture\n\n## Product and milestone\n\nReconstruct a behavior-equivalent engine consuming owner-supplied assets. The next product\nmilestone is standalone replay given a captured command stream and complete declared runtime\ninputs. The first workflow pilot is the complete research write set. A passing host build is a\ncomponent baseline, not a playable engine or independent replacement.\n\n## Source of truth\n\n`campaign/contracts/` holds versioned tasks, `campaign/runtime/` holds checkpoints, sessions,\nleases and surprises, and evidence packages identify inputs, source and executable artifacts.\n`campaign/current.json` selects published evidence by path and digest. Board/dashboard are\ngenerated projections, never alternate writable authorities. Exact tool CLI/schema is documented\nin `campaign/README.md`. Historical findings retain their original experiment scope; they are\nnot promoted by copying an old status into a new contract.\n\n## Model authority\n","truncated":false,"loaded":[],"display":{"type":"file","path":"/home/alex/sots-re/guides/multi-agent-workflow.md","text":"# Multi-agent operating architecture\n\n## Product and milestone\n\nReconstruct a behavior-equivalent engine consuming owner-supplied assets. The next product\nmilestone is standalone replay given a captured command stream and complete declared runtime\ninputs. The first workflow pilot is the complete research write set. A passing host build is a\ncomponent baseline, not a playable engine or independent replacement.\n\n## Source of truth\n\n`campaign/contracts/` holds versioned tasks, `campaign/runtime/` holds checkpoints, sessions,\nleases and surprises, and evidence packages identify inputs, source and executable artifacts.\n`campaign/current.json` selects published evidence by path and digest. Board/dashboard are\ngenerated projections, never alternate writable authorities. Exact tool CLI/schema is documented\nin `campaign/README.md`. Historical findings retain their original experiment scope; they are\nnot promoted by copying an old status into a new contract.\n\n## Model authority\n\n| Responsibility | Model |\n|---|---|\n| Planning, architecture, integration judgment, surprise resolution | GPT-6 Astra |\n| Bounded RE analysis, implementation, independent verification | GPT-5.6 Terra |\n| Routine lab/workload operations | GPT-5.5 |\n| Context compaction | GPT-5.5 |\n\nExact provider IDs are in `campaign/models.json`. The lead may explicitly allocate Astra to a\nhard architecture/review task. No fallback is automatic. Model names in editable JSON are\nprovenance, not authentication: launcher events and independent review support the record.\nPermissions reduce accidental role drift; unrestricted local shell access is not a sandbox.\n\n## Behavioral slice\n\nThe lead specifies a bounded input domain, full observable write set, dependencies, acceptance\nworkloads and stop conditions. The analyst recovers behavior; the verifier specifies discriminating\ntests before implementation; the implementer changes engine/adapters; the lab operator captures\ncontrols; the verifier reproduces; the integrator tests the combined source snapshot.\n\nInclude transitive effects: allocations, IDs, container ELEMENTS, event text/records, RNG and\nnonserialized state. An address/function name is not a sufficient replacement boundary. If a\nneighbor function supplies required effects, extend the approved contract or expose it as an\noriginal dependency. Do not call the original and label the result independent.\n\nLifecycle is `proposed → ready → implementing → verification → integration → accepted`, with\nblocked/revision states. Lifecycle is distinct from evidence strength. Acceptance is scoped to\nthe manifest's exact procedure and workloads, never universal correctness.\n\n## Independence\n\nVerifier and implementer are different executions. Verification starts with the contract, raw\nevidence and reproduction recipe, not just the author's conclusion. Require one meaningful\nchallenge: held-out state, boundary, negative control, ablation, or independent state accounting.\nBoth synthetic tests and original-game experiments matter. Repeat-call volume cannot replace\nbranch and distinct-state coverage. Null effects and zero executions must be distinguishable.\n\n## Sessions and recovery\n\nAt most two implementation slices after a single-slice pilot. No nested worker delegation.\nPaired worktrees isolate source changes; unique build directories isolate artifacts. Canonical\nRE runtime state remains explicit even when a worker runs in `/tmp` worktrees.\n\nCheckpoint every 20 calls or 15min; also before experiments, compaction, handoff and stopping.\nRecord source identities, exact changed paths, commands/results, artifacts and hashes, open\nsurprises, held leases, requested/observed model, session identity and exact next action. Avoid\nlarge prose histories: raw logs belong in evidence; the checkpoint is a bounded resumption record.\n\nThe launcher caps a quantum at 40 agent steps. A new quantum starts fresh using contract and\ncheckpoint. Auto-compaction with an ample reserved window and four retained turns is enabled.\nThis is a best-effort context backstop; regular durable checkpoints and fresh quanta provide the\nactual recovery discipline. Never claim a model compacted merely because a setting exists.\n\n## Surprises\n\nOn a falsified prediction, contradictory claim, unexplained regression, instrument interference,\nor newly necessary dependency: record the observation and evidence; block affected work. Astra\nfirst checks the instrument and source identity, then marks claims surviving/qualified/overturned,\nchooses a discriminating experiment, and records the revised plan. Unaffected contracted work\nmay continue. Updating a paragraph without invalidating affected acceptance is insufficient.\n\n## Lab ownership\n\nAcquire a canonical resource lease before VM, build-host or Ghidra mutation. An expired timestamp\ndoes not authorize stealing a lease. The lead reconciles stale ownership with actual processes.\nUse one guest at a time for maintenance, capture before/after inventory, preserve access and\nruntime dependencies, and verify unattended console login plus authenticated administration.\nReboots require a free guest and a recorded recovery path. Runtime/Ghidra changes are experiments\nwith provenance, not undocumented preparatory steps.\n\n## Gate and publication\n\nRun the local gate with explicit engine, corpus, new output directory and profile. It snapshots\nsource, uses fresh builds, records manifests and runs the expected test inventory once. Host\nprofile allows a named list of unavailable asset/trace tests and publishes them as limitations.\nFull acceptance requires the full profile and the slice-specific original oracle; no blanket\nwaiver converts a host pass to fidelity. Standalone measurement may diverge; acceptance may not.\n\nThe integrator alone selects current results after verifying their hashes and source binding.\nNo percentages of LOC, mapped rows or closed leaves purport to measure engine completeness.\nRun failure and missing evidence are visible states. Old results remain historical, not current.","lineStart":1,"lineEnd":100,"totalLines":100,"truncated":false}},"title":"guides/multi-agent-workflow.md","time":{"start":1788991298139,"end":1788991298165}},"metadata":{"openai":{"itemId":"fc_071eb31792f1ad11016aa1d7412d0887d18389afc2ead5abc7"}},"id":"prt_08830da57001XgE31EEp6AyGBe","sessionID":"ses_f77cf5062ffeTknrMfnbJMmdNh","messageID":"msg_08830c07a001tmP88V0ev77Qqp"}}
|
||
{"type":"tool_use","timestamp":1788991298203,"sessionID":"ses_f77cf5062ffeTknrMfnbJMmdNh","part":{"type":"tool","tool":"read","callID":"call_avQk4RjtE5vyvr6bNTwe0tg3","state":{"status":"completed","input":{"filePath":"/home/alex/sots-re/campaign/contracts/launcher-smoke.json"},"output":"<path>/home/alex/sots-re/campaign/contracts/launcher-smoke.json</path>\n<type>file</type>\n<content>\n1: {\n2: \"id\": \"launcher-smoke\",\n3: \"title\": \"Normal Astra launcher, explicit routing and durable checkpoint smoke\",\n4: \"status\": \"proposed\",\n5: \"owner\": {\"name\": \"launcher-smoke\", \"role\": \"architecture-review\"},\n6: \"baseline\": {\n7: \"engine\": {\"path\": \"/home/alex/sots-engine\", \"commit\": \"7741d42fc5e4e761e6449bdaf0e4a61d00036a23\"},\n8: \"re\": {\"path\": \"/home/alex/sots-re\", \"commit\": \"3bfde5a70d874a723e797a695bbd847fd82c0aa7\"}\n9: },\n10: \"scope\": [\n11: \"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.\",\n12: \"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.\",\n13: \"After writing that checkpoint, immediately return a short completion. Do not plan extra work.\"\n14: ],\n15: \"inputs\": [\"Canonical OpenCode configuration and role prompt\", \"Two isolated baseline-linked worktrees\"],\n16: \"effects\": [\"One durable canonical RE checkpoint and one runner event/provenance record; no engine or RE worktree source changes\"],\n17: \"original_dependencies\": [],\n18: \"dependencies\": [],\n19: \"acceptance\": [\n20: {\"id\": \"live-launch\", \"axis\": \"control-execution\", \"criterion\": \"Real OpenCode process requests GPT-6 Astra, finishes successfully, emits one actual session and a matching fresh checkpoint; worktree source identities remain unchanged.\"}\n21: ],\n22: \"predictions\": [\"Runner completes with explicit requested Astra model and a canonical checkpoint; both source worktrees remain unchanged.\"],\n23: \"stop_conditions\": [\"Any model, permission, contract, checkpoint or source mismatch: record incomplete; no fallback.\"],\n24: \"checkpoint\": null\n25: }\n\n(End of file - total 25 lines)\n</content>","metadata":{"preview":"{\n \"id\": \"launcher-smoke\",\n \"title\": \"Normal Astra launcher, explicit routing and durable checkpoint smoke\",\n \"status\": \"proposed\",\n \"owner\": {\"name\": \"launcher-smoke\", \"role\": \"architecture-review\"},\n \"baseline\": {\n \"engine\": {\"path\": \"/home/alex/sots-engine\", \"commit\": \"7741d42fc5e4e761e6449bdaf0e4a61d00036a23\"},\n \"re\": {\"path\": \"/home/alex/sots-re\", \"commit\": \"3bfde5a70d874a723e797a695bbd847fd82c0aa7\"}\n },\n \"scope\": [\n \"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.\",\n \"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.\",\n \"After writing that checkpoint, immediately return a short completion. Do not plan extra work.\"\n ],\n \"inputs\": [\"Canonical OpenCode configuration and role prompt\", \"Two isolated baseline-linked worktrees\"],\n \"effects\": [\"One durable canonical RE checkpoint and one runner event/provenance record; no engine or RE worktree source changes\"],\n \"original_dependencies\": [],\n \"dependencies\": [],\n \"acceptance\": [\n {\"id\": \"live-launch\", \"axis\": \"control-execution\", \"criterion\": \"Real OpenCode process requests GPT-6 Astra, finishes successfully, emits one actual session and a matching fresh checkpoint; worktree source identities remain unchanged.\"}","truncated":false,"loaded":[],"display":{"type":"file","path":"/home/alex/sots-re/campaign/contracts/launcher-smoke.json","text":"{\n \"id\": \"launcher-smoke\",\n \"title\": \"Normal Astra launcher, explicit routing and durable checkpoint smoke\",\n \"status\": \"proposed\",\n \"owner\": {\"name\": \"launcher-smoke\", \"role\": \"architecture-review\"},\n \"baseline\": {\n \"engine\": {\"path\": \"/home/alex/sots-engine\", \"commit\": \"7741d42fc5e4e761e6449bdaf0e4a61d00036a23\"},\n \"re\": {\"path\": \"/home/alex/sots-re\", \"commit\": \"3bfde5a70d874a723e797a695bbd847fd82c0aa7\"}\n },\n \"scope\": [\n \"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.\",\n \"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.\",\n \"After writing that checkpoint, immediately return a short completion. Do not plan extra work.\"\n ],\n \"inputs\": [\"Canonical OpenCode configuration and role prompt\", \"Two isolated baseline-linked worktrees\"],\n \"effects\": [\"One durable canonical RE checkpoint and one runner event/provenance record; no engine or RE worktree source changes\"],\n \"original_dependencies\": [],\n \"dependencies\": [],\n \"acceptance\": [\n {\"id\": \"live-launch\", \"axis\": \"control-execution\", \"criterion\": \"Real OpenCode process requests GPT-6 Astra, finishes successfully, emits one actual session and a matching fresh checkpoint; worktree source identities remain unchanged.\"}\n ],\n \"predictions\": [\"Runner completes with explicit requested Astra model and a canonical checkpoint; both source worktrees remain unchanged.\"],\n \"stop_conditions\": [\"Any model, permission, contract, checkpoint or source mismatch: record incomplete; no fallback.\"],\n \"checkpoint\": null\n}","lineStart":1,"lineEnd":25,"totalLines":25,"truncated":false}},"title":"campaign/contracts/launcher-smoke.json","time":{"start":1788991298130,"end":1788991298169}},"metadata":{"openai":{"itemId":"fc_071eb31792f1ad11016aa1d7412cf087d1aaabb4e81f3c22f4"}},"id":"prt_08830da27001Z6AqyD31YKSWUW","sessionID":"ses_f77cf5062ffeTknrMfnbJMmdNh","messageID":"msg_08830c07a001tmP88V0ev77Qqp"}}
|
||
{"type":"tool_use","timestamp":1788991298224,"sessionID":"ses_f77cf5062ffeTknrMfnbJMmdNh","part":{"type":"tool","tool":"glob","callID":"call_vFf163jUHEorBDycM0DtbYLc","state":{"status":"completed","input":{"pattern":"campaign/runtime/surprises/*.json","path":"/home/alex/sots-re"},"output":"/home/alex/sots-re/campaign/runtime/surprises/s-410e48d5ae6cc4da0a6ae649.json\n/home/alex/sots-re/campaign/runtime/surprises/s-f1c41532e618c77d41538902.json","metadata":{"count":2,"truncated":false},"title":"","time":{"start":1788991298162,"end":1788991298220}},"metadata":{"openai":{"itemId":"fc_071eb31792f1ad11016aa1d7412d2487d1aa40629000a476cf"}},"id":"prt_08830da640019qMDy1c54jvnpy","sessionID":"ses_f77cf5062ffeTknrMfnbJMmdNh","messageID":"msg_08830c07a001tmP88V0ev77Qqp"}}
|
||
{"type":"step_finish","timestamp":1788991298268,"sessionID":"ses_f77cf5062ffeTknrMfnbJMmdNh","part":{"id":"prt_08830dad70011qbrEG26QCDVdQ","reason":"tool-calls","snapshot":"34c7fd0f525452985c87e13af9c057a995b5cd12","messageID":"msg_08830c07a001tmP88V0ev77Qqp","sessionID":"ses_f77cf5062ffeTknrMfnbJMmdNh","type":"step-finish","tokens":{"total":9961,"input":4199,"output":130,"reasoning":0,"cache":{"write":0,"read":5632}},"cost":0}}
|
||
{"type":"step_start","timestamp":1788991311156,"sessionID":"ses_f77cf5062ffeTknrMfnbJMmdNh","part":{"id":"prt_088310d300018YpxGwmyQ2hmJC","messageID":"msg_08830db00001xugszFBdo4PZtF","sessionID":"ses_f77cf5062ffeTknrMfnbJMmdNh","snapshot":"02749b2f4750b48ea10b9f1453a8db5e775ceb68","type":"step-start"}}
|
||
{"type":"tool_use","timestamp":1788991311246,"sessionID":"ses_f77cf5062ffeTknrMfnbJMmdNh","part":{"type":"tool","tool":"read","callID":"call_UOtzEXzTi4emtm6KcQz3gG30","state":{"status":"completed","input":{"filePath":"/home/alex/sots-re/campaign/runtime/surprises/s-410e48d5ae6cc4da0a6ae649.json"},"output":"<path>/home/alex/sots-re/campaign/runtime/surprises/s-410e48d5ae6cc4da0a6ae649.json</path>\n<type>file</type>\n<content>\n1: {\n2: \"actor\": \"controls-architect\",\n3: \"contract\": \"controls-bootstrap\",\n4: \"decision\": \"d-42c6d0b4ee5114e6f2e07c99\",\n5: \"id\": \"s-410e48d5ae6cc4da0a6ae649\",\n6: \"model\": \"openai/gpt-6-astra\",\n7: \"probe\": \"Introduce an immutable typed acceptance package binding candidate/integrated source manifests, built binary, inputs and per-criterion results; change source bytes at unchanged HEAD and require integration/acceptance rejection.\",\n8: \"role\": \"architecture-review\",\n9: \"schema\": \"sots-surprise/1\",\n10: \"status\": \"resolved\",\n11: \"summary\": \"Independent review R4: lifecycle source binding checks baseline path/commit and artifact hashes, but not the actual candidate/integrated source manifest. Implementation bytes can change at the same HEAD without invalidating the current evidence/verdict. This requires a cross-cutting evidence package/interface decision with publishing and gate owners.\",\n12: \"timestamp\": \"2026-09-09T21:34:52.829937+00:00\"\n13: }\n\n(End of file - total 13 lines)\n</content>","metadata":{"preview":"{\n \"actor\": \"controls-architect\",\n \"contract\": \"controls-bootstrap\",\n \"decision\": \"d-42c6d0b4ee5114e6f2e07c99\",\n \"id\": \"s-410e48d5ae6cc4da0a6ae649\",\n \"model\": \"openai/gpt-6-astra\",\n \"probe\": \"Introduce an immutable typed acceptance package binding candidate/integrated source manifests, built binary, inputs and per-criterion results; change source bytes at unchanged HEAD and require integration/acceptance rejection.\",\n \"role\": \"architecture-review\",\n \"schema\": \"sots-surprise/1\",\n \"status\": \"resolved\",\n \"summary\": \"Independent review R4: lifecycle source binding checks baseline path/commit and artifact hashes, but not the actual candidate/integrated source manifest. Implementation bytes can change at the same HEAD without invalidating the current evidence/verdict. This requires a cross-cutting evidence package/interface decision with publishing and gate owners.\",\n \"timestamp\": \"2026-09-09T21:34:52.829937+00:00\"\n}","truncated":false,"loaded":[],"display":{"type":"file","path":"/home/alex/sots-re/campaign/runtime/surprises/s-410e48d5ae6cc4da0a6ae649.json","text":"{\n \"actor\": \"controls-architect\",\n \"contract\": \"controls-bootstrap\",\n \"decision\": \"d-42c6d0b4ee5114e6f2e07c99\",\n \"id\": \"s-410e48d5ae6cc4da0a6ae649\",\n \"model\": \"openai/gpt-6-astra\",\n \"probe\": \"Introduce an immutable typed acceptance package binding candidate/integrated source manifests, built binary, inputs and per-criterion results; change source bytes at unchanged HEAD and require integration/acceptance rejection.\",\n \"role\": \"architecture-review\",\n \"schema\": \"sots-surprise/1\",\n \"status\": \"resolved\",\n \"summary\": \"Independent review R4: lifecycle source binding checks baseline path/commit and artifact hashes, but not the actual candidate/integrated source manifest. Implementation bytes can change at the same HEAD without invalidating the current evidence/verdict. This requires a cross-cutting evidence package/interface decision with publishing and gate owners.\",\n \"timestamp\": \"2026-09-09T21:34:52.829937+00:00\"\n}","lineStart":1,"lineEnd":13,"totalLines":13,"truncated":false}},"title":"campaign/runtime/surprises/s-410e48d5ae6cc4da0a6ae649.json","time":{"start":1788991311237,"end":1788991311244}},"metadata":{"openai":{"itemId":"fc_05e6fc1177bacad4016aa1d74f068887d18ad79fe2e555f1c5"}},"id":"prt_088310d32001FjRU2ir9MQGwE1","sessionID":"ses_f77cf5062ffeTknrMfnbJMmdNh","messageID":"msg_08830db00001xugszFBdo4PZtF"}}
|
||
{"type":"tool_use","timestamp":1788991311379,"sessionID":"ses_f77cf5062ffeTknrMfnbJMmdNh","part":{"type":"tool","tool":"read","callID":"call_iIF39aYQbhkolx5mBys80HSb","state":{"status":"completed","input":{"filePath":"/home/alex/sots-re/campaign/runtime/surprises/s-f1c41532e618c77d41538902.json"},"output":"<path>/home/alex/sots-re/campaign/runtime/surprises/s-f1c41532e618c77d41538902.json</path>\n<type>file</type>\n<content>\n1: {\n2: \"actor\": \"controls-architect\",\n3: \"contract\": \"controls-bootstrap\",\n4: \"decision\": \"d-ab717735fc6c1661919f6894\",\n5: \"id\": \"s-f1c41532e618c77d41538902\",\n6: \"model\": \"openai/gpt-6-astra\",\n7: \"probe\": \"Separate recovery identity/basis/artifact validation from end-run freshness; test old valid recovery state, missing/mismatched state, fresh end-run checkpoint and a resolution-only Astra launch with affected workers still blocked.\",\n8: \"role\": \"architecture-review\",\n9: \"schema\": \"sots-surprise/1\",\n10: \"status\": \"resolved\",\n11: \"summary\": \"Independent review R6: current launch guard applies 15-minute end-run freshness to recovery, preventing next-day recovery from valid durable state; unconditional open-surprise rejection also prevents a resolver quantum. Assignment explicitly requested no-open-surprise launch guards, so the resolver exception requires lead clarification.\",\n12: \"timestamp\": \"2026-09-09T21:34:59.734916+00:00\"\n13: }\n\n(End of file - total 13 lines)\n</content>","metadata":{"preview":"{\n \"actor\": \"controls-architect\",\n \"contract\": \"controls-bootstrap\",\n \"decision\": \"d-ab717735fc6c1661919f6894\",\n \"id\": \"s-f1c41532e618c77d41538902\",\n \"model\": \"openai/gpt-6-astra\",\n \"probe\": \"Separate recovery identity/basis/artifact validation from end-run freshness; test old valid recovery state, missing/mismatched state, fresh end-run checkpoint and a resolution-only Astra launch with affected workers still blocked.\",\n \"role\": \"architecture-review\",\n \"schema\": \"sots-surprise/1\",\n \"status\": \"resolved\",\n \"summary\": \"Independent review R6: current launch guard applies 15-minute end-run freshness to recovery, preventing next-day recovery from valid durable state; unconditional open-surprise rejection also prevents a resolver quantum. Assignment explicitly requested no-open-surprise launch guards, so the resolver exception requires lead clarification.\",\n \"timestamp\": \"2026-09-09T21:34:59.734916+00:00\"\n}","truncated":false,"loaded":[],"display":{"type":"file","path":"/home/alex/sots-re/campaign/runtime/surprises/s-f1c41532e618c77d41538902.json","text":"{\n \"actor\": \"controls-architect\",\n \"contract\": \"controls-bootstrap\",\n \"decision\": \"d-ab717735fc6c1661919f6894\",\n \"id\": \"s-f1c41532e618c77d41538902\",\n \"model\": \"openai/gpt-6-astra\",\n \"probe\": \"Separate recovery identity/basis/artifact validation from end-run freshness; test old valid recovery state, missing/mismatched state, fresh end-run checkpoint and a resolution-only Astra launch with affected workers still blocked.\",\n \"role\": \"architecture-review\",\n \"schema\": \"sots-surprise/1\",\n \"status\": \"resolved\",\n \"summary\": \"Independent review R6: current launch guard applies 15-minute end-run freshness to recovery, preventing next-day recovery from valid durable state; unconditional open-surprise rejection also prevents a resolver quantum. Assignment explicitly requested no-open-surprise launch guards, so the resolver exception requires lead clarification.\",\n \"timestamp\": \"2026-09-09T21:34:59.734916+00:00\"\n}","lineStart":1,"lineEnd":13,"totalLines":13,"truncated":false}},"title":"campaign/runtime/surprises/s-f1c41532e618c77d41538902.json","time":{"start":1788991311364,"end":1788991311377}},"metadata":{"openai":{"itemId":"fc_05e6fc1177bacad4016aa1d74f06a087d1905de25cb3038e14"}},"id":"prt_088310d94001JVwtcsBWOAh8Z0","sessionID":"ses_f77cf5062ffeTknrMfnbJMmdNh","messageID":"msg_08830db00001xugszFBdo4PZtF"}}
|
||
{"type":"tool_use","timestamp":1788991311504,"sessionID":"ses_f77cf5062ffeTknrMfnbJMmdNh","part":{"type":"tool","tool":"read","callID":"call_TcDYQ6kASHn2aUoxv24XGPfG","state":{"status":"completed","input":{"filePath":"/home/alex/sots-re/campaign/agents/lead.md"},"output":"<path>/home/alex/sots-re/campaign/agents/lead.md</path>\n<type>file</type>\n<content>\n1: You are the SOTS lead/integrator, running GPT-6 Astra. Read AGENTS.md, campaign/README.md,\n2: guides/multi-agent-workflow.md, selected contracts, latest checkpoints and open surprises.\n3: State lives in the explicitly selected canonical RE repository. Do not reconstruct it from chat.\n4: \n5: Own architecture, task boundaries, model allocation, independent acceptance and integration.\n6: Select work by dependencies unlocked and complete write sets, not row/leaf counts. At most two\n7: implementation slices after the pilot. Delegate through tools/run_agent.py with explicit role,\n8: contract, state root and paired worktrees. No nested worker delegation or implicit model fallback.\n9: Validate model availability before assigning work. Extra Astra architecture/review sessions are\n10: allowed when explicitly allocated. Keep exclusive file and resource ownership clear.\n11: \n12: Write acceptance before implementation. Require independent verification and integrated source-\n13: bound evidence. Only you publish current pointers/projections. Never promote a historical claim\n14: without the stated workload, identity, coverage and reproduction. Host passed != full acceptance.\n15: \n16: Handle surprises as experiments: record evidence, block affected work, examine instrument/source\n17: identity, list surviving/qualified/overturned claims, choose one discriminating check, update\n18: contracts and invalidate affected results. Do not hide contradictions in appended caveats.\n19: \n20: Checkpoint every 20 tool calls/15min and before compaction, experiments, handoff or stop. At a\n21: 40-step quantum boundary persist exact next action and finish; next session resumes from RE state.\n22: Follow explicit user authorization for commits/pushes; this rollout authorizes neither.\n\n(End of file - total 22 lines)\n</content>","metadata":{"preview":"You are the SOTS lead/integrator, running GPT-6 Astra. Read AGENTS.md, campaign/README.md,\nguides/multi-agent-workflow.md, selected contracts, latest checkpoints and open surprises.\nState lives in the explicitly selected canonical RE repository. Do not reconstruct it from chat.\n\nOwn architecture, task boundaries, model allocation, independent acceptance and integration.\nSelect work by dependencies unlocked and complete write sets, not row/leaf counts. At most two\nimplementation slices after the pilot. Delegate through tools/run_agent.py with explicit role,\ncontract, state root and paired worktrees. No nested worker delegation or implicit model fallback.\nValidate model availability before assigning work. Extra Astra architecture/review sessions are\nallowed when explicitly allocated. Keep exclusive file and resource ownership clear.\n\nWrite acceptance before implementation. Require independent verification and integrated source-\nbound evidence. Only you publish current pointers/projections. Never promote a historical claim\nwithout the stated workload, identity, coverage and reproduction. Host passed != full acceptance.\n\nHandle surprises as experiments: record evidence, block affected work, examine instrument/source\nidentity, list surviving/qualified/overturned claims, choose one discriminating check, update\ncontracts and invalidate affected results. Do not hide contradictions in appended caveats.\n\nCheckpoint every 20 tool calls/15min and before compaction, experiments, handoff or stop. At a","truncated":false,"loaded":[],"display":{"type":"file","path":"/home/alex/sots-re/campaign/agents/lead.md","text":"You are the SOTS lead/integrator, running GPT-6 Astra. Read AGENTS.md, campaign/README.md,\nguides/multi-agent-workflow.md, selected contracts, latest checkpoints and open surprises.\nState lives in the explicitly selected canonical RE repository. Do not reconstruct it from chat.\n\nOwn architecture, task boundaries, model allocation, independent acceptance and integration.\nSelect work by dependencies unlocked and complete write sets, not row/leaf counts. At most two\nimplementation slices after the pilot. Delegate through tools/run_agent.py with explicit role,\ncontract, state root and paired worktrees. No nested worker delegation or implicit model fallback.\nValidate model availability before assigning work. Extra Astra architecture/review sessions are\nallowed when explicitly allocated. Keep exclusive file and resource ownership clear.\n\nWrite acceptance before implementation. Require independent verification and integrated source-\nbound evidence. Only you publish current pointers/projections. Never promote a historical claim\nwithout the stated workload, identity, coverage and reproduction. Host passed != full acceptance.\n\nHandle surprises as experiments: record evidence, block affected work, examine instrument/source\nidentity, list surviving/qualified/overturned claims, choose one discriminating check, update\ncontracts and invalidate affected results. Do not hide contradictions in appended caveats.\n\nCheckpoint every 20 tool calls/15min and before compaction, experiments, handoff or stop. At a\n40-step quantum boundary persist exact next action and finish; next session resumes from RE state.\nFollow explicit user authorization for commits/pushes; this rollout authorizes neither.","lineStart":1,"lineEnd":22,"totalLines":22,"truncated":false}},"title":"campaign/agents/lead.md","time":{"start":1788991311493,"end":1788991311499}},"metadata":{"openai":{"itemId":"fc_05e6fc1177bacad4016aa1d74f06a887d1a5f9428402624326"}},"id":"prt_088310e2d001e4DQE1SkpSMnGh","sessionID":"ses_f77cf5062ffeTknrMfnbJMmdNh","messageID":"msg_08830db00001xugszFBdo4PZtF"}}
|
||
{"type":"tool_use","timestamp":1788991311613,"sessionID":"ses_f77cf5062ffeTknrMfnbJMmdNh","part":{"type":"tool","tool":"bash","callID":"call_njTfYywV8Dkv5tWbEtDvAVYt","state":{"status":"completed","input":{"command":"git rev-parse --show-toplevel --git-common-dir HEAD && git status --porcelain","workdir":"/tmp/opencode/sots-launch-engine"},"output":"/tmp/opencode/sots-launch-engine\n/home/alex/sots-engine/.git\n7741d42fc5e4e761e6449bdaf0e4a61d00036a23\n","metadata":{"output":"/tmp/opencode/sots-launch-engine\n/home/alex/sots-engine/.git\n7741d42fc5e4e761e6449bdaf0e4a61d00036a23\n","exit":0,"truncated":false},"title":"git rev-parse --show-toplevel --git-common-dir HEAD && git status --porcelain","time":{"start":1788991311544,"end":1788991311612}},"metadata":{"openai":{"itemId":"fc_05e6fc1177bacad4016aa1d74f06b887d1b8195fc28423cc9c"}},"id":"prt_088310e8e001mZh1Fbl23R06XX","sessionID":"ses_f77cf5062ffeTknrMfnbJMmdNh","messageID":"msg_08830db00001xugszFBdo4PZtF"}}
|
||
{"type":"tool_use","timestamp":1788991312035,"sessionID":"ses_f77cf5062ffeTknrMfnbJMmdNh","part":{"type":"tool","tool":"read","callID":"call_s940vByDCyBrV6uIKT2i5Rqp","state":{"status":"completed","input":{"filePath":"/home/alex/sots-re/campaign/runtime/leases"},"output":"<path>/home/alex/sots-re/campaign/runtime/leases</path>\n<type>directory</type>\n<entries>\nspicy-autounattend-credential.json\nvm140.json\nvm141.json\nvm144.json\nvm145.json\nvm146.json\n\n(6 entries)\n</entries>","metadata":{"preview":"spicy-autounattend-credential.json\nvm140.json\nvm141.json\nvm144.json\nvm145.json\nvm146.json","truncated":false,"loaded":[],"display":{"type":"directory","path":"/home/alex/sots-re/campaign/runtime/leases","entries":["spicy-autounattend-credential.json","vm140.json","vm141.json","vm144.json","vm145.json","vm146.json"],"offset":1,"totalEntries":6,"truncated":false}},"title":"campaign/runtime/leases","time":{"start":1788991312029,"end":1788991312033}},"metadata":{"openai":{"itemId":"fc_05e6fc1177bacad4016aa1d74f06d087d180482543d9b88ccc"}},"id":"prt_08831108f001thR7dL83CZ9bV2","sessionID":"ses_f77cf5062ffeTknrMfnbJMmdNh","messageID":"msg_08830db00001xugszFBdo4PZtF"}}
|
||
{"type":"tool_use","timestamp":1788991312051,"sessionID":"ses_f77cf5062ffeTknrMfnbJMmdNh","part":{"type":"tool","tool":"read","callID":"call_KXKqOKOzHPRbX2JyuDLIIcl5","state":{"status":"completed","input":{"filePath":"/home/alex/sots-re/campaign/runtime/runs/run-df1472c13f31db3a4d5361f0.json"},"output":"<path>/home/alex/sots-re/campaign/runtime/runs/run-df1472c13f31db3a4d5361f0.json</path>\n<type>file</type>\n<content>\n1: {\n2: \"actor\": \"launcher-smoke\",\n3: \"checkpoint_session\": \"run-df1472c13f31db3a4d5361f0\",\n4: \"command\": [\n5: \"opencode\",\n6: \"run\",\n7: \"--format\",\n8: \"json\",\n9: \"--model\",\n10: \"openai/gpt-6-astra\",\n11: \"--agent\",\n12: \"sots-lead\",\n13: \"Start a FRESH bounded campaign quantum (40 steps). No delegation.\\nRole=architecture-review; requested model=openai/gpt-6-astra; actor=launcher-smoke; checkpoint session=run-df1472c13f31db3a4d5361f0.\\nCanonical state root: /home/alex/sots-re\\nContract: /home/alex/sots-re/campaign/contracts/launcher-smoke.json\\nLatest checkpoint: None\\nEngine worktree: /tmp/opencode/sots-launch-engine\\nRE worktree: /tmp/opencode/sots-launch-re\\nRead canonical campaign/README.md, contract, latest checkpoint and open surprises before work. Verify source/worktree/resource identities. Only edit owned scope. Missing state means blocked. Do not commit, stage, push or mutate lab resources without explicit authority and a lease. Checkpoint every 20 tool calls or 15 minutes, before experiments, compaction and stopping; persist under canonical campaign/ using tools/campaign.py with the session above, exact model, actor and role. Include observations versus decisions, source identities, artifact paths, tests, blockers and ONE exact next action. Fresh checkpoint at quantum end is mandatory. Record a surprise and pause affected work if assumptions are falsified. Astra architecture authority: perform approved architecture/planning work in owned scope. Do not rely on chat resume or automatic compaction.\"\n14: ],\n15: \"config\": {\n16: \"canonical_files\": {\n17: \"campaign/agents/analyst.md\": \"895c41509016038b3f72c4a68608c4101511e69c5bf410e379286da1a6202952\",\n18: \"campaign/agents/implementer.md\": \"eb5581051a92b3d2b9ddd947812b1c02ff6a0b5e7619e7674adc26701e9a3d91\",\n19: \"campaign/agents/lab.md\": \"48f1765ebdcb2015e631ad91428f65735ff899e119134b652f70788ff2eae5b8\",\n20: \"campaign/agents/lead.md\": \"7661bbfca972be50a52c735b7f15f5be740158542c3d0cdbdf9a6a2590c7f1ea\",\n21: \"campaign/agents/resolver.md\": \"742c36dc8567669d462566d6121eed42fcff5bff34e8eff466e92249f7ca195f\",\n22: \"campaign/agents/verifier.md\": \"e467fc644e4e37d631a7a4e35038d9d3d0498491f1d7811d61d99271ff345c6b\",\n23: \"campaign/models.json\": \"95f507237a8e4fcf14189da4aa102dfae1dbaa536d4d8db6bcbfc30162ac5443\",\n24: \"opencode.json\": \"d24be7fcee57d5eb04c6b7189822a2ca055dd4a70daafbea67f09a120945d49f\"\n25: },\n26: \"effective\": {\n27: \"agent_sha256\": \"530f4bfeb28c09d36e45565706247ad9822f7c177161e1ee0a71fcb981a76b92\",\n28: \"sha256\": \"4cb65613de34e41eabf780e84cad062f14cbfcdd68569dc874514c50fa7baa5a\"\n29: },\n30: \"expanded_prompt_sha256\": \"c501f3d7551302fb686ea4630b603a16f4c92537762d556759a5e5a40669a9a1\",\n31: \"overlay\": {\n32: \"agent\": {\n33: \"sots-lead\": {\n34: \"model\": \"openai/gpt-6-astra\",\n35: \"permission\": {\n36: \"bash\": \"allow\",\n37: \"external_directory\": {\n38: \"*\": \"deny\",\n39: \"/home/alex/sots-re\": \"allow\",\n40: \"/home/alex/sots-re/*\": \"allow\",\n41: \"/tmp/opencode/sots-launch-engine\": \"allow\",\n42: \"/tmp/opencode/sots-launch-engine/*\": \"allow\",\n43: \"/tmp/opencode/sots-launch-re\": \"allow\",\n44: \"/tmp/opencode/sots-launch-re/*\": \"allow\"\n45: },\n46: \"glob\": \"allow\",\n47: \"grep\": \"allow\",\n48: \"list\": \"allow\",\n49: \"question\": \"deny\",\n50: \"read\": \"allow\",\n51: \"task\": \"deny\"\n52: },\n53: \"prompt\": \"You are the SOTS lead/integrator, running GPT-6 Astra. Read AGENTS.md, campaign/README.md,\\nguides/multi-agent-workflow.md, selected contracts, latest checkpoints and open surprises.\\nState lives in the explicitly selected canonical RE repository. Do not reconstruct it from chat.\\n\\nOwn architecture, task boundaries, model allocation, independent acceptance and integration.\\nSelect work by dependencies unlocked and complete write sets, not row/leaf counts. At most two\\nimplementation slices after the pilot. Delegate through tools/run_agent.py with explicit role,\\ncontract, state root and paired worktrees. No nested worker delegation or implicit model fallback.\\nValidate model availability before assigning work. Extra Astra architecture/review sessions are\\nallowed when explicitly allocated. Keep exclusive file and resource ownership clear.\\n\\nWrite acceptance before implementation. Require independent verification and integrated source-\\nbound evidence. Only you publish current pointers/projections. Never promote a historical claim\\nwithout the stated workload, identity, coverage and reproduction. Host passed != full acceptance.\\n\\nHandle surprises as experiments: record evidence, block affected work, examine instrument/source\\nidentity, list surviving/qualified/overturned claims, choose one discriminating check, update\\ncontracts and invalidate affected results. Do not hide contradictions in appended caveats.\\n\\nCheckpoint every 20 tool calls/15min and before compaction, experiments, handoff or stop. At a\\n40-step quantum boundary persist exact next action and finish; next session resumes from RE state.\\nFollow explicit user authorization for commits/pushes; this rollout authorizes neither.\\n\",\n54: \"steps\": 40\n55: }\n56: },\n57: \"model\": \"openai/gpt-6-astra\"\n58: },\n59: \"path\": \"/home/alex/sots-re/opencode.json\",\n60: \"sha256\": \"d24be7fcee57d5eb04c6b7189822a2ca055dd4a70daafbea67f09a120945d49f\"\n61: },\n62: \"contract\": \"launcher-smoke\",\n63: \"cwd\": \"/tmp/opencode/sots-launch-engine\",\n64: \"id\": \"run-df1472c13f31db3a4d5361f0\",\n65: \"max_steps\": 40,\n66: \"requested_model\": \"openai/gpt-6-astra\",\n67: \"resolution_only\": false,\n68: \"role\": \"architecture-review\",\n69: \"schema\": \"sots-run/1\",\n70: \"source_before\": {\n71: \"engine\": {\n72: \"commit\": \"7741d42fc5e4e761e6449bdaf0e4a61d00036a23\",\n73: \"files\": {\n74: \".gitignore\": {\n75: \"mode\": 420,\n76: \"sha256\": \"5103c9533f0d31fea29c0cc85d543692af84a697416dfa7557e31c9843210145\"\n77: },\n78: \"CMakeLists.txt\": {\n79: \"mode\": 420,\n80: \"sha256\": \"6e9791511ea23bf8bf5f7f58617a7e77bbe5006829609e425e565c11c1e8d7ed\"\n81: },\n82: \"CMakePresets.json\": {\n83: \"mode\": 420,\n84: \"sha256\": \"fcd1dfe3989ee4f56fa3e419059e1db5621922165edf05f13cfe8e5d786d8bb0\"\n85: },\n86: \"CONTRIBUTING.md\": {\n87: \"mode\": 420,\n88: \"sha256\": \"3d251db67793df3dfb4a66e41a3226575929f3ccd1129b287b85d0a7747a24e1\"\n89: },\n90: \"LICENSE\": {\n91: \"mode\": 420,\n92: \"sha256\": \"eedebad43ea495111bf4451d78cb440309d90a733d6a36445699dde0629f1858\"\n93: },\n94: \"README.md\": {\n95: \"mode\": 420,\n96: \"sha256\": \"ed9b72a016c284e533155a517547a321c462c8cc7be745f44a8ea54ed2f59d51\"\n97: },\n98: \"cmake/toolchain-mingw-i686.cmake\": {\n99: \"mode\": 420,\n100: \"sha256\": \"231c0b79868a77d54cc6619f0b4ea18454964a1a078806f44a6ffe3fb7741a9b\"\n101: },\n102: \"docs/A2-alliance-and-modcount.md\": {\n103: \"mode\": 420,\n104: \"sha256\": \"0c0c45c31d5d64124f3b91a161f8a2f4732c8a5d7f6bc524baf4d59f8a191701\"\n105: },\n106: \"docs/AC-predictions.md\": {\n107: \"mode\": 420,\n108: \"sha256\": \"ab9e41714abdbc32e620d8a2068be8ebd2fc8898ba149113c66ccda248b4bcda\"\n109: },\n110: \"docs/B1.md\": {\n111: \"mode\": 420,\n112: \"sha256\": \"42b61bbfc135cdcd0f1a32f63164b88e67106400de7f08f543f118eccd814364\"\n113: },\n114: \"docs/B2.md\": {\n115: \"mode\": 420,\n116: \"sha256\": \"87dfd333ee15681a3aa4de58cf1b14ff8240e75afabc05012e0f28531cb4b8b8\"\n117: },\n118: \"docs/B3.md\": {\n119: \"mode\": 420,\n120: \"sha256\": \"fb65c41037b6cd6252c67e5244d492a3a17ea4ba2ddae821d49fe0a879528518\"\n121: },\n122: \"docs/B4.md\": {\n123: \"mode\": 420,\n124: \"sha256\": \"22547b3d2960684e52a380fb07f43a75bf50aebf93cede689f297cf38f4a012d\"\n125: },\n126: \"docs/B6-ship-construction.md\": {\n127: \"mode\": 420,\n128: \"sha256\": \"9c5c4fd2059af965e317c9db5b7fbfc440397ddfcdc5bf7860115f6a8a0532ab\"\n129: },\n130: \"docs/CB-capture.md\": {\n131: \"mode\": 420,\n132: \"sha256\": \"ce45a9082588051eda7438016dc66eb28bb4afda98b82cdc20102c4ca53529f0\"\n133: },\n134: \"docs/CB-predictions.md\": {\n135: \"mode\": 420,\n136: \"sha256\": \"ba51538b018cbb403978f97ad45d4743937d49ba55c8f15d7af8f8e4aa441f0f\"\n137: },\n138: \"docs/E-events.md\": {\n139: \"mode\": 420,\n140: \"sha256\": \"de98795aadb1617eab91815ebc34818bef8b52c36ba18b4521170065bfd2d201\"\n141: },\n142: \"docs/EV-events.md\": {\n143: \"mode\": 420,\n144: \"sha256\": \"e7d9536cd23f5d800dc97f68167bb738088a16136004419f28de92d7fe1bcfb9\"\n145: },\n146: \"docs/G-wire-schema.md\": {\n147: \"mode\": 420,\n148: \"sha256\": \"19db69ae359ddbd2a0509d02f1c616f939e0428480a8bb33c81f69145323a591\"\n149: },\n150: \"docs/G3-civilian-growth.md\": {\n151: \"mode\": 420,\n152: \"sha256\": \"38ea3a8ddc3fdca258294d949c4cd2af1a930cdd9ba612d5e8fb48bc446bdf30\"\n153: },\n154: \"docs/H-probes.md\": {\n155: \"mode\": 420,\n156: \"sha256\": \"f23e4d4cbc8c9a3000a0a58ed994dddd95466cee1ec45e961685e86dde4dc54f\"\n157: },\n158: \"docs/L1-predictions.md\": {\n159: \"mode\": 420,\n160: \"sha256\": \"af97dbc9f15b9c2e6f223c89bac17826056fa4f3bced3c01513c1ad4d9ac1754\"\n161: },\n162: \"docs/L2-predictions.md\": {\n163: \"mode\": 420,\n164: \"sha256\": \"18213ce5f3375d478f266de85c38c2b04ca2ae8ab4a2023780dca161fa14f460\"\n165: },\n166: \"docs/L3-predictions.md\": {\n167: \"mode\": 420,\n168: \"sha256\": \"d1c9c0006079f47ef0d3371f4a2c2df2fe4f08ebdad0f8a12d1b0de35b15ae7e\"\n169: },\n170: \"docs/L4-ai-orders.md\": {\n171: \"mode\": 420,\n172: \"sha256\": \"b04127c5158a882f252b2b6e8afb2d131f0de623cc0c62c86c612af803d75835\"\n173: },\n174: \"docs/L4-predictions.md\": {\n175: \"mode\": 420,\n176: \"sha256\": \"6a194ae336920f13d8e4a44549cbe26be959beef81cffed88ef03b3cec563e44\"\n177: },\n178: \"docs/L5-live-verification.md\": {\n179: \"mode\": 420,\n180: \"sha256\": \"4c1abe57c516b36f383390164a362f53294feda222c623283f1e6091d8ef0ec4\"\n181: },\n182: \"docs/M-movefleet.md\": {\n183: \"mode\": 420,\n184: \"sha256\": \"718338edb8cbe8a449793b22889776a1783d1d0ade553c03973ea45d426eb426\"\n185: },\n186: \"docs/M0.md\": {\n187: \"mode\": 420,\n188: \"sha256\": \"e121c380612a42727e3a973d8cf50f884d660bb4b43bc494258dc1c6b6f26705\"\n189: },\n190: \"docs/M1.md\": {\n191: \"mode\": 420,\n192: \"sha256\": \"e0a36cf109d096748e55522eb8d7a261764cbf5ab5daf9342ba903d0f2bc6704\"\n193: },\n194: \"docs/M2.md\": {\n195: \"mode\": 420,\n196: \"sha256\": \"25f9cad74eeee40afc2117333232384e1cf387b2b9132856650234c5ba593c61\"\n197: },\n198: \"docs/N-output-term.md\": {\n199: \"mode\": 420,\n200: \"sha256\": \"3b8317e22714ef66b35efceee6fa0f7057c37f7c6e34d93cc5047cd1dd07ecde\"\n201: },\n202: \"docs/P-events-wiring.md\": {\n203: \"mode\": 420,\n204: \"sha256\": \"72ee81b71b4c08ae451721c785dc5e01ed4ca43ff0fd474befca09dcc41599ba\"\n205: },\n206: \"docs/PAR-predictions.md\": {\n207: \"mode\": 420,\n208: \"sha256\": \"16e8fbbac5001db0b10d766858c0ae2ea9619f37043a0883ee46da80d4dd4846\"\n209: },\n210: \"docs/PL-players-residual.md\": {\n211: \"mode\": 420,\n212: \"sha256\": \"9bc29bc030ee8b0e00e496b91fe8fefac15179ce9fd01c0a11a7b5b5335356dc\"\n213: },\n214: \"docs/R-recapture.md\": {\n215: \"mode\": 420,\n216: \"sha256\": \"73c62ab20c5eca5e87e1d18aefa60a2a2acd75cbc7510d31b27a2cd4ebcec38f\"\n217: },\n218: \"docs/RB-predictions.md\": {\n219: \"mode\": 420,\n220: \"sha256\": \"c1016781505c10aa304d4710c5389918b744ab20cbd8cb54dce462c3dc28e4e7\"\n221: },\n222: \"docs/S-standalone.md\": {\n223: \"mode\": 420,\n224: \"sha256\": \"48c59998a1e2fe6a49e08b0f6b4c2bd6c8211fd818b4096abdeb89a0e82dcc5d\"\n225: },\n226: \"docs/SD-predictions.md\": {\n227: \"mode\": 420,\n228: \"sha256\": \"a76a568ccac7409e3cb3acef724dbe6b618d4ec30259bce33594098daff8b6a0\"\n229: },\n230: \"docs/SV-script-objects.md\": {\n231: \"mode\": 420,\n232: \"sha256\": \"80ebd120fa9cf5e68ac4d33117966805b917d24bc339f7d82be972a280449409\"\n233: },\n234: \"docs/T-turn-driver.md\": {\n235: \"mode\": 420,\n236: \"sha256\": \"a4096b8223cea87ce77cc64014c489d4625ed36fd3aec1358565ca5cf91d4e1e\"\n237: },\n238: \"docs/U-unlock.md\": {\n239: \"mode\": 420,\n240: \"sha256\": \"5cbe3d8fb4bd30d029cb2db006a4dd3c6819885f55f434afb4bc8ae79b526901\"\n241: },\n242: \"docs/V-eventlive.md\": {\n243: \"mode\": 420,\n244: \"sha256\": \"ebd08c000f42211e87958278f03d6891475cd8557658e1a42105cf5ed45a1aa1\"\n245: },\n246: \"docs/W2-predictions.md\": {\n247: \"mode\": 420,\n248: \"sha256\": \"9972e27467cf0fe23a358818caf7edb979de25697d3aa4b97a2135ca79fe34f5\"\n249: },\n250: \"docs/W2-watchpoints.md\": {\n251: \"mode\": 420,\n252: \"sha256\": \"f8634c5f977b2ca9b2e07df105cba09adacaeb6fb4cf046e41e5e1e42b83b107\"\n253: },\n254: \"docs/W3-predictions.md\": {\n255: \"mode\": 420,\n256: \"sha256\": \"211cedc2d924bcf47cbb73166b408e9a27d795863ffc90aa2adbb85beeadffcf\"\n257: },\n258: \"docs/W3-watchpoints.md\": {\n259: \"mode\": 420,\n260: \"sha256\": \"568e818e66d95f9079a1270c4d9b900c7eecfd5b5a3b4ba5a4aa0c843666f061\"\n261: },\n262: \"docs/Y-standalone-rng-and-tail.md\": {\n263: \"mode\": 420,\n264: \"sha256\": \"49d926cc505d6ba07753748366e42ec32493a15c76bfaa45b2f66f52adc57f2b\"\n265: },\n266: \"docs/Z-tail-rng.md\": {\n267: \"mode\": 420,\n268: \"sha256\": \"3ed2b40f728bcedd663c305cce13481bad1429af03fd5215ee3189161cfbd7f1\"\n269: },\n270: \"docs/game-data.md\": {\n271: \"mode\": 420,\n272: \"sha256\": \"2124ea3d117b4ee6f48660d9711c1b4ef844a4ba37af7cea3766914d77bd6b23\"\n273: },\n274: \"docs/game-design.md\": {\n275: \"mode\": 420,\n276: \"sha256\": \"5b40349ad446596b534567a5683cf9ea99709d9eff231890e0f6256c755f0272\"\n277: },\n278: \"docs/game-effects.md\": {\n279: \"mode\": 420,\n280: \"sha256\": \"e1e0abc162602daaac255fe44b11c511adf45d4ef5fa188268411829b0817e5d\"\n281: },\n282: \"docs/game-sim.md\": {\n283: \"mode\": 420,\n284: \"sha256\": \"d1e14770d252fd2f320a7baa1ad54c90d955cfc840f477d1700cfbbadcec730e\"\n285: },\n286: \"docs/harness-audit.md\": {\n287: \"mode\": 420,\n288: \"sha256\": \"931d92cc744ec6ca3d961fbe7fe96dcab28060446058eb78be9835ebbce73ed0\"\n289: },\n290: \"docs/mars-parse.md\": {\n291: \"mode\": 420,\n292: \"sha256\": \"d9fa3029ade4f9401c59fb88f4520a1ef3af9a9c6f2bb5d1a0ebfa1d5061d6dd\"\n293: },\n294: \"docs/mars-rng.md\": {\n295: \"mode\": 420,\n296: \"sha256\": \"f2a01b88f105d07d0d0d514430e76da7632e5c8e4e3bbd6c99a25f1dc5daa89c\"\n297: },\n298: \"docs/mars-stream.md\": {\n299: \"mode\": 420,\n300: \"sha256\": \"61a16c9b7c143b4bc2edee473cf1f8bd06c1a5144c120bc563e5ec6d770dd0e7\"\n301: },\n302: \"docs/mars-text.md\": {\n303: \"mode\": 420,\n304: \"sha256\": \"2b6c7d2eecbb684160e7565d1d7224eb0d2f7e9a41f4d807095a182ea605dcf1\"\n305: },\n306: \"docs/mars-vfs.md\": {\n307: \"mode\": 420,\n308: \"sha256\": \"1508c2a070d56f4fdabac3c2ef1fd08d3f93d7a3045d59158340ee22a6ff1b62\"\n309: },\n310: \"docs/shim-trace.md\": {\n311: \"mode\": 420,\n312: \"sha256\": \"8a059c1ba761b366449c2db8ef248656da917050ed28855c6d812ecf91672fa5\"\n313: },\n314: \"include/generated/sots_addresses.h\": {\n315: \"mode\": 420,\n316: \"sha256\": \"fc34ac4ee8cc7fea91c447b5715841dc6d3afe36f9aff04e88b6c29b5b64f448\"\n317: },\n318: \"include/generated/sots_stream_schema.h\": {\n319: \"mode\": 420,\n320: \"sha256\": \"13446ce54d60a0b29adcefb51aeb5127a0a3ca8de2bd1665e4778ba5354bff8c\"\n321: },\n322: \"src/app/CMakeLists.txt\": {\n323: \"mode\": 420,\n324: \"sha256\": \"142999eded2ff494745ce550af76a8f8caf0269ad22d6d5650e7a79c19d22717\"\n325: },\n326: \"src/app/alliance.cpp\": {\n327: \"mode\": 420,\n328: \"sha256\": \"37d6e57f7ce82a69a595cf474e7be7a544efef210f960e9cdfeab6168826bac9\"\n329: },\n330: \"src/app/alliance.h\": {\n331: \"mode\": 420,\n332: \"sha256\": \"08fa8dc96286c7cb15a90a987fa22b17e195522e642ab8303b659ca58739eafd\"\n333: },\n334: \"src/app/command_replay.cpp\": {\n335: \"mode\": 420,\n336: \"sha256\": \"739059930cd3a5f1d988522ff50c60d8657664a66c9fe19b019833f417b55824\"\n337: },\n338: \"src/app/command_replay.h\": {\n339: \"mode\": 420,\n340: \"sha256\": \"956429a742554cada2124de49c6955e27b0e5d68db87dcc95b22c75ec7bd93c2\"\n341: },\n342: \"src/app/construction_phase.cpp\": {\n343: \"mode\": 420,\n344: \"sha256\": \"025cd0ea1a7badd567f7f1cd59330b1e01149b5c5094575fbd438683658bb0df\"\n345: },\n346: \"src/app/construction_phase.h\": {\n347: \"mode\": 420,\n348: \"sha256\": \"a4d39994096683a1144eb20282b205cf71e2045873cc15b53bdac214ab1e9a5e\"\n349: },\n350: \"src/app/event_phase.cpp\": {\n351: \"mode\": 420,\n352: \"sha256\": \"80717fa7c7f108004d5250f12b6c994752a1a55d7f32c7d3ebf29f2869118c90\"\n353: },\n354: \"src/app/event_phase.h\": {\n355: \"mode\": 420,\n356: \"sha256\": \"54077268fe4705270dc06bdc46a6fd9384fb5e0d36da19e55ea149b478d8cf34\"\n357: },\n358: \"src/app/growth_phase.cpp\": {\n359: \"mode\": 420,\n360: \"sha256\": \"5924d2641fc98d902b56a3e6417d7a57d70c1564718951b098e7d14376ebc4e3\"\n361: },\n362: \"src/app/growth_phase.h\": {\n363: \"mode\": 420,\n364: \"sha256\": \"8222ef811abff161c8f891a331a52e527de54fbf468949d1e0e188adc473ae3b\"\n365: },\n366: \"src/app/main.cpp\": {\n367: \"mode\": 420,\n368: \"sha256\": \"adfd7dd177439bfd57509532bcf0f37779281ae9309daa93efe1ada3ef3f57a7\"\n369: },\n370: \"src/app/observed_phase.cpp\": {\n371: \"mode\": 420,\n372: \"sha256\": \"31fb99678d60de6901b4bb1b251abe2421453264653cf5f7bd297a376c2b23f3\"\n373: },\n374: \"src/app/observed_phase.h\": {\n375: \"mode\": 420,\n376: \"sha256\": \"f88fc22a5cb21a43e196d7fae09446126635d3284e6b398bca234f265234b693\"\n377: },\n378: \"src/app/phase_catalog.cpp\": {\n379: \"mode\": 420,\n380: \"sha256\": \"e3da16e6d499b7836953251d940ce171792ada208156ca583277298f305fc316\"\n381: },\n382: \"src/app/phase_catalog.h\": {\n383: \"mode\": 420,\n384: \"sha256\": \"da6fff506002079d8277358d0095981dc260449dc19677a533ef25ab709aed87\"\n385: },\n386: \"src/app/report.cpp\": {\n387: \"mode\": 420,\n388: \"sha256\": \"da3feb6043f6e68cb9ea763f7242ac153a5944c59f448284faf34c64ad6b9228\"\n389: },\n390: \"src/app/report.h\": {\n391: \"mode\": 420,\n392: \"sha256\": \"0495d164458ddb7187ce3105f82cee06cf9cf6c5b73ed8cb6e434e1d2e0f8481\"\n393: },\n394: \"src/app/script_phase.cpp\": {\n395: \"mode\": 420,\n396: \"sha256\": \"61eeeeb7eac3145cee938ccfc564b231b6968ce7926fb9599c136134f0d5ea91\"\n397: },\n398: \"src/app/script_phase.h\": {\n399: \"mode\": 420,\n400: \"sha256\": \"e52006ff939fa945870fafdc2412ba67e3d5e1cc2aa51c0ca0a884ce630aa1b7\"\n401: },\n402: \"src/app/trade_raid.cpp\": {\n403: \"mode\": 420,\n404: \"sha256\": \"07d6bb904e655bb644ff6df2e417adb448487bb67acb62240ec5ecc978eabebf\"\n405: },\n406: \"src/app/trade_raid.h\": {\n407: \"mode\": 420,\n408: \"sha256\": \"10e0b1460eb7810f1fcd61e67d47333373f06bdacf5a11372958a84a91084e52\"\n409: },\n410: \"src/app/treaty.cpp\": {\n411: \"mode\": 420,\n412: \"sha256\": \"317463fc0e2a6ca7eaa4e2f096c3821655a4623de4085af44d951ed500837575\"\n413: },\n414: \"src/app/treaty.h\": {\n415: \"mode\": 420,\n416: \"sha256\": \"836395a85868cbd6b7fda8f1d304128fd7cc6952aff37003e8e119a5ce0251f9\"\n417: },\n418: \"src/app/turn.cpp\": {\n419: \"mode\": 420,\n420: \"sha256\": \"02d90c5fdf831ba58aae828957c1a601d831bce92bdde286dcbe2ff29018eeef\"\n421: },\n422: \"src/app/turn.h\": {\n423: \"mode\": 420,\n424: \"sha256\": \"85c87aab5c5b5ad5a6a34cc9db710b1cf77dec1a7145ba1e0b5e17fff9a6a237\"\n425: },\n426: \"src/app/turn_record.cpp\": {\n427: \"mode\": 420,\n428: \"sha256\": \"e1eb0b253e964ab4f8be1333f81e193ac64109544da384cbdf21858cbf931e4d\"\n429: },\n430: \"src/app/turn_record.h\": {\n431: \"mode\": 420,\n432: \"sha256\": \"78d8d2948bd04bff5e7d2c55955b726f1cd7552a765e608e390209e03856f76d\"\n433: },\n434: \"src/app/visibility_phase.cpp\": {\n435: \"mode\": 420,\n436: \"sha256\": \"34d9df699af3e57823ec8457c442408da854028f9b95db5820171caad0823131\"\n437: },\n438: \"src/app/visibility_phase.h\": {\n439: \"mode\": 420,\n440: \"sha256\": \"60db50f5b98c5edafc86a33f982a7773acc291c1a18f9cf23323e53ebadcde27\"\n441: },\n442: \"src/game/ai/CMakeLists.txt\": {\n443: \"mode\": 420,\n444: \"sha256\": \"f51509a2699f02ecab9faa1f75feaa38c299e6bbbe08bfbe5e8e86722037f6eb\"\n445: },\n446: \"src/game/ai/agent.cpp\": {\n447: \"mode\": 420,\n448: \"sha256\": \"e1bbddc3deb797d62ae9c2b24bc811ec9379699992dd838694bd5eadc73feef7\"\n449: },\n450: \"src/game/ai/agent.h\": {\n451: \"mode\": 420,\n452: \"sha256\": \"48aa26f32d52a3f8f4e37ed5c6986b1e87a8fe1e780d5314514eb5c75b8bc244\"\n453: },\n454: \"src/game/ai/apply_order.cpp\": {\n455: \"mode\": 420,\n456: \"sha256\": \"122ffea1090382fd01bc505fd30c59557dfec2c9846609d00da6e80109da2253\"\n457: },\n458: \"src/game/ai/apply_order.h\": {\n459: \"mode\": 420,\n460: \"sha256\": \"a3b7a1ca26243ba0fdd801b78978175db6f76e297a72876fa0a35e12f38e09b3\"\n461: },\n462: \"src/game/ai/command_capture.cpp\": {\n463: \"mode\": 420,\n464: \"sha256\": \"cb9a1d37af9f66e78d368e03aeabec01e4d48f76aaa30348a51f4c70a915e4ec\"\n465: },\n466: \"src/game/ai/command_capture.h\": {\n467: \"mode\": 420,\n468: \"sha256\": \"921599e5b2aa8b773db00134618efde687c7d9ba739abd787ec7666f4cfeb78f\"\n469: },\n470: \"src/game/ai/orders.cpp\": {\n471: \"mode\": 420,\n472: \"sha256\": \"1b775eb1a030bc6e81e5b7702cbf8ad56288860276e8a0475da66f7367542640\"\n473: },\n474: \"src/game/ai/orders.h\": {\n475: \"mode\": 420,\n476: \"sha256\": \"c2a3b8fe1a7c46a1c1104bc87be8696d9f0782cc304d27cb96d0ec6b182f12ae\"\n477: },\n478: \"src/game/ai/tasks.cpp\": {\n479: \"mode\": 420,\n480: \"sha256\": \"b05878ccd94c375aac8723c8ea9499f77b98fb94acc5a75a15fa1948dbe83c76\"\n481: },\n482: \"src/game/ai/tasks.h\": {\n483: \"mode\": 420,\n484: \"sha256\": \"b1de4f89c1679ccfdeaa8b852cb2ce407b71dcd1bffacf97df389a69f6ae3a5d\"\n485: },\n486: \"src/game/ai/turn_order.cpp\": {\n487: \"mode\": 420,\n488: \"sha256\": \"858b12c51c4509e16a22a6c080d1c6b47bd23d2b8a11f84a48d34f24c4635f22\"\n489: },\n490: \"src/game/ai/turn_order.h\": {\n491: \"mode\": 420,\n492: \"sha256\": \"3e76710928fc2df52fd8312abfb8f23a2ce162f8e0856f46672a4f46b5b4384f\"\n493: },\n494: \"src/game/combat/CMakeLists.txt\": {\n495: \"mode\": 420,\n496: \"sha256\": \"4b3a05c45360e312d6c1d96c1f05a60437d19d2046257835e0d6c70ecc4ce115\"\n497: },\n498: \"src/game/combat/retreat.cpp\": {\n499: \"mode\": 420,\n500: \"sha256\": \"eede86a4d25289dfc9132d5776b11114a109179e5aa10f2b985035e5b22d7a1f\"\n501: },\n502: \"src/game/combat/retreat.h\": {\n503: \"mode\": 420,\n504: \"sha256\": \"5fc3e002a5f1944f29c74f862ff942b894e40e88afafd52358373ada36644d7d\"\n505: },\n506: \"src/game/config/CMakeLists.txt\": {\n507: \"mode\": 420,\n508: \"sha256\": \"c746021654505c92be333cefb9df994431679d40d8d654b937feb950684830f7\"\n509: },\n510: \"src/game/config/config_loader.cpp\": {\n511: \"mode\": 420,\n512: \"sha256\": \"d903ba06747e5b7d66400d03ee1f0a9896bf4268bb200dec0b5c8599dbd3d3a1\"\n513: },\n514: \"src/game/config/config_loader.h\": {\n515: \"mode\": 420,\n516: \"sha256\": \"fda71dee1a4e2b896760e9ac344768e176ea4f0a08609c7d651033a1ee698085\"\n517: },\n518: \"src/game/config/manifest_loader.cpp\": {\n519: \"mode\": 420,\n520: \"sha256\": \"dbe33dc5ae03db18f3b2c01b48cc1fced10f2cca599270c0a028321a7d7dd7c6\"\n521: },\n522: \"src/game/config/manifest_loader.h\": {\n523: \"mode\": 420,\n524: \"sha256\": \"68e508b9e6d1222d980b22ae826b127693fdf0821b6539ed9e62a8ec031aa5b5\"\n525: },\n526: \"src/game/config/msvc_sort.h\": {\n527: \"mode\": 420,\n528: \"sha256\": \"17fcb13bb49a634c80be38299617c6c16fd8addedfa88c53d67242c90b811716\"\n529: },\n530: \"src/game/data/CMakeLists.txt\": {\n531: \"mode\": 420,\n532: \"sha256\": \"677ba0dd0ebb8176f4e7c41d5550f2ccedd56d49e7e4acb1eb0a7970e9e98a51\"\n533: },\n534: \"src/game/data/block.cpp\": {\n535: \"mode\": 420,\n536: \"sha256\": \"f61312708c715ce525ed1a01e71f1446d31fc96ca1cc51f5bd863cac51702200\"\n537: },\n538: \"src/game/data/block.h\": {\n539: \"mode\": 420,\n540: \"sha256\": \"f14155dfca5fd270ad6b4d462458aa8cd5c5edf5e19da4df492ee2907e99eccc\"\n541: },\n542: \"src/game/data/catalog.cpp\": {\n543: \"mode\": 420,\n544: \"sha256\": \"7799ad3b31d43236cacbc51c3ab086265927f98b1346005a8adfed2796178ebc\"\n545: },\n546: \"src/game/data/catalog.h\": {\n547: \"mode\": 420,\n548: \"sha256\": \"80223146bcdbf4808776f974df7e5f46b120a021979a22f50b5ce2d74ec16d6e\"\n549: },\n550: \"src/game/data/common.cpp\": {\n551: \"mode\": 420,\n552: \"sha256\": \"e58ba046844be11c61f7f7e501829b48b4f16e7c0ab78f10fcf9189c133cf040\"\n553: },\n554: \"src/game/data/common.h\": {\n555: \"mode\": 420,\n556: \"sha256\": \"d1ac8375c1be133a98a383e01598f393f194e1bd9790d1c1230bc6121a45a187\"\n557: },\n558: \"src/game/data/fields.h\": {\n559: \"mode\": 420,\n560: \"sha256\": \"4209df368ad776b3c24350246acf47ad874fcbbe292fb16f9ca7dacaef2f08fb\"\n561: },\n562: \"src/game/data/shipsection.cpp\": {\n563: \"mode\": 420,\n564: \"sha256\": \"82d5ba9be2a446e50934b0b9a03b16839bd3acd1a967d9441180a1baaa271264\"\n565: },\n566: \"src/game/data/shipsection.h\": {\n567: \"mode\": 420,\n568: \"sha256\": \"bcf100f83691226c4993dd7866b67a0b48d9b4bc6841463fbf07f0f26bf9dca0\"\n569: },\n570: \"src/game/data/strings.cpp\": {\n571: \"mode\": 420,\n572: \"sha256\": \"6d983d3a4cb4284215301409587136fb765a5e6a4c9f4b988e01d710c0815f59\"\n573: },\n574: \"src/game/data/strings.h\": {\n575: \"mode\": 420,\n576: \"sha256\": \"fb292bd472ed68eb4a5e93484f3f92d8a0ae8661e6a61ca4b417ab889c508055\"\n577: },\n578: \"src/game/data/techtree.cpp\": {\n579: \"mode\": 420,\n580: \"sha256\": \"2ac6e39faeef808c97375f3b8a3ee219fcab8cc09921f0ed8d82eef7374eb9ea\"\n581: },\n582: \"src/game/data/techtree.h\": {\n583: \"mode\": 420,\n584: \"sha256\": \"504946c255405ab28d20d0ed6c095b3b63f0e6865afe0e8bb0707e607c363007\"\n585: },\n586: \"src/game/data/turrets.cpp\": {\n587: \"mode\": 420,\n588: \"sha256\": \"ce7db50ef10825e168fee2bf57c4b6038dd1a356be7ada9ed6a4f6a4f31b07a4\"\n589: },\n590: \"src/game/data/turrets.h\": {\n591: \"mode\": 420,\n592: \"sha256\": \"f01603ad32b0ffdf891c88cc54c39a725c6a436f8dda79ac23e7505e59853c64\"\n593: },\n594: \"src/game/data/weapon.cpp\": {\n595: \"mode\": 420,\n596: \"sha256\": \"accb5aab2081babb26443cd257f292909e19440c40346e098144148922f5d3f6\"\n597: },\n598: \"src/game/data/weapon.h\": {\n599: \"mode\": 420,\n600: \"sha256\": \"63aeb670ae7b8a1fd6daa35ed60ebe41a87f62a6ec2a12f44b13f9052c55b009\"\n601: },\n602: \"src/game/design/CMakeLists.txt\": {\n603: \"mode\": 420,\n604: \"sha256\": \"42692f7917d99fb5b9e392c2d0f1d908b2bc5c61fc2e5687fddbd665dafe0bef\"\n605: },\n606: \"src/game/design/defaults.cpp\": {\n607: \"mode\": 420,\n608: \"sha256\": \"8efa0b79646525375739a1acfe77e75d5ae6b669d1ecaa01f49f3f5183caf528\"\n609: },\n610: \"src/game/design/defaults.h\": {\n611: \"mode\": 420,\n612: \"sha256\": \"20af056628f362a4d5ad7ba6277135697718197ec6844ae0ae85bf06d4cd818b\"\n613: },\n614: \"src/game/design/design.cpp\": {\n615: \"mode\": 420,\n616: \"sha256\": \"e166281c52a6d92fed8810b38bd736cbd2a324f15d290a39a539d01ff35ead20\"\n617: },\n618: \"src/game/design/design.h\": {\n619: \"mode\": 420,\n620: \"sha256\": \"7e936c78ca10c3a49470da67f1659cf4ee323d14d50b5b2c1ada08edfa8f6997\"\n621: },\n622: \"src/game/design/hull.cpp\": {\n623: \"mode\": 420,\n624: \"sha256\": \"554b0ef6955ac230c7eca29ea2d94d60b5fbc91f34d9ff457091577c8602268a\"\n625: },\n626: \"src/game/design/hull.h\": {\n627: \"mode\": 420,\n628: \"sha256\": \"997018e59c9d78ee1da7e7cb9561b94b76befacbe348a4ce3301c5f22b582461\"\n629: },\n630: \"src/game/design/rules.cpp\": {\n631: \"mode\": 420,\n632: \"sha256\": \"a623984f9ab40c354320051fec00bab2c7e3728c2c90082b3b8051294b906319\"\n633: },\n634: \"src/game/design/rules.h\": {\n635: \"mode\": 420,\n636: \"sha256\": \"70a8a42fe82e9805cbb957717688ab9f9eb3438226f6e0d696ef5f7a51529229\"\n637: },\n638: \"src/game/design/stats.cpp\": {\n639: \"mode\": 420,\n640: \"sha256\": \"c05f420a00026289be8693c0d80bbd2354ce354a91a78459cfc8e70467326c54\"\n641: },\n642: \"src/game/design/stats.h\": {\n643: \"mode\": 420,\n644: \"sha256\": \"ba0a5d3bcc98f5c3e64579d42da70bfdf563773ce2fe1e6bfa2b36b14c453fe5\"\n645: },\n646: \"src/game/effects/CMakeLists.txt\": {\n647: \"mode\": 420,\n648: \"sha256\": \"2e20f138f98bc69653c8360a26f99f3f43f35beedea5e90dfd7e9721e7550f89\"\n649: },\n650: \"src/game/effects/tech_effects.cpp\": {\n651: \"mode\": 420,\n652: \"sha256\": \"40358c2af37543ca3ab09b4d0433cdb4b0d2d212b45f648739cc86e979501604\"\n653: },\n654: \"src/game/effects/tech_effects.h\": {\n655: \"mode\": 420,\n656: \"sha256\": \"ef70addf2caf1e3abf36ac9d878a8db37d2adbac370957f5b6a0b5825564a0d6\"\n657: },\n658: \"src/game/effects/tech_id.cpp\": {\n659: \"mode\": 420,\n660: \"sha256\": \"11cd652e81a52e86d72541a5c3de77bb50de3d31226272e0d1856e5a15b7f9a6\"\n661: },\n662: \"src/game/effects/tech_id.h\": {\n663: \"mode\": 420,\n664: \"sha256\": \"f37752250c80c9c75ef8e144e4646dc1290a2cc8ce72d9a37949c6408996df86\"\n665: },\n666: \"src/game/events/CMakeLists.txt\": {\n667: \"mode\": 420,\n668: \"sha256\": \"9b1f14a3801a991ba065e0e39ae2e3fa3966018e8a98fcceeddeaca3909328e2\"\n669: },\n670: \"src/game/events/event_log.cpp\": {\n671: \"mode\": 420,\n672: \"sha256\": \"3b131879ec5e81cd1ba2bb0cbdfa6e05775ed77684f4ed7a8f5cfae87da1e7b1\"\n673: },\n674: \"src/game/events/event_log.h\": {\n675: \"mode\": 420,\n676: \"sha256\": \"2ff415b1120ca3f28421006a566280fb977027cfa3f209bdba0986350376a953\"\n677: },\n678: \"src/game/events/research_events.cpp\": {\n679: \"mode\": 420,\n680: \"sha256\": \"9520b20eba2a2b4bd5925f13b420d526fc610d06aae7ffad314e3002c4f5a253\"\n681: },\n682: \"src/game/events/research_events.h\": {\n683: \"mode\": 420,\n684: \"sha256\": \"b87340c6b14e9de97e5bc0c5a4cbd74e54bab2831c60edf88c0e42ff5218ea22\"\n685: },\n686: \"src/game/nav/CMakeLists.txt\": {\n687: \"mode\": 420,\n688: \"sha256\": \"79cc0ba25c6d49f7784663ace033d01ab3d85a5d8015fe2f466f8f1a3065983a\"\n689: },\n690: \"src/game/nav/pathplan.cpp\": {\n691: \"mode\": 420,\n692: \"sha256\": \"04cfe8fca5be565f5443c8f1402eb0072221dbd63f70855e35b3eeea752f1775\"\n693: },\n694: \"src/game/nav/pathplan.h\": {\n695: \"mode\": 420,\n696: \"sha256\": \"28b51f737b458679888e555d985b9e8d41adf8ba91fa0980b5e83668758c86e7\"\n697: },\n698: \"src/game/sim/CMakeLists.txt\": {\n699: \"mode\": 420,\n700: \"sha256\": \"a9d99f304b2afc98764b423b3e6cba3ecd4193ae47b743bff046e093aa9aa633\"\n701: },\n702: \"src/game/sim/colony.cpp\": {\n703: \"mode\": 420,\n704: \"sha256\": \"e0f0bf15d87b6ac2e92053cbfe0869c0dbf9465d90a9bae5456bb46883423b77\"\n705: },\n706: \"src/game/sim/colony.h\": {\n707: \"mode\": 420,\n708: \"sha256\": \"357dce21440140a6cf836a3c12175ebb5bb6706c37d5ecd315a4ee4937725b47\"\n709: },\n710: \"src/game/sim/construction.cpp\": {\n711: \"mode\": 420,\n712: \"sha256\": \"8cf4792f487162ca3599f16f0e92d73b4c9549046044548c5aecf202dd564130\"\n713: },\n714: \"src/game/sim/construction.h\": {\n715: \"mode\": 420,\n716: \"sha256\": \"a7f201101ad704f1994f809259ad60f780760fa36174d99a1ccd9299447f5460\"\n717: },\n718: \"src/game/sim/economy.cpp\": {\n719: \"mode\": 420,\n720: \"sha256\": \"1e0b17b589496a6139e8ca10fe20553050be7c965a02daf8b520dd5020412d89\"\n721: },\n722: \"src/game/sim/economy.h\": {\n723: \"mode\": 420,\n724: \"sha256\": \"6f3e33e803bb49367d4cee3c8ef6186f04b79e7cf901047fc48d933108ab6d2a\"\n725: },\n726: \"src/game/sim/movement.cpp\": {\n727: \"mode\": 420,\n728: \"sha256\": \"80c64b2148304b84683cf3860ced1354f5c29c923bbc50cc5001030dd85c2cd2\"\n729: },\n730: \"src/game/sim/movement.h\": {\n731: \"mode\": 420,\n732: \"sha256\": \"9a6b2b4960428634d8004cd5694ed6a7a10ab28fd9c0e2a9824ede3e201e9441\"\n733: },\n734: \"src/game/sim/numeric.h\": {\n735: \"mode\": 420,\n736: \"sha256\": \"88f715192ea322ace4eea13ab5ae55f7f41600262025208e468b5259220522c2\"\n737: },\n738: \"src/game/sim/observed.cpp\": {\n739: \"mode\": 420,\n740: \"sha256\": \"43d29a9fe1195dcc0b7e6101ea05bfd076f03636f9f68de473539c83db0ddd22\"\n741: },\n742: \"src/game/sim/observed.h\": {\n743: \"mode\": 420,\n744: \"sha256\": \"0224b5bf341f30ff0e98d910547261b6732bdc0c5339b520e26fc51939c1269f\"\n745: },\n746: \"src/game/sim/player_turn.cpp\": {\n747: \"mode\": 420,\n748: \"sha256\": \"beb1b2ed434df3727e676ac56e751beff87fa98e4a42e4657cc54d41025773a2\"\n749: },\n750: \"src/game/sim/player_turn.h\": {\n751: \"mode\": 420,\n752: \"sha256\": \"f24f8f5e161486575cd341c2f5bfed46fa6983263edcf2320e9c24860b4be51a\"\n753: },\n754: \"src/game/sim/research.cpp\": {\n755: \"mode\": 420,\n756: \"sha256\": \"95f2d325544ee018ec8d0f945e91b4172f6ba406f95e19f86c4fb9aac6b22a89\"\n757: },\n758: \"src/game/sim/research.h\": {\n759: \"mode\": 420,\n760: \"sha256\": \"e27a311e977afb2e01242938dc8d928e9a67d1f761965e191cf907e05c1c86e9\"\n761: },\n762: \"src/game/sim/rng.h\": {\n763: \"mode\": 420,\n764: \"sha256\": \"f7e5bbced3dbd37deb49a00b52d05f7c751501d654dabd645ecff7447355929c\"\n765: },\n766: \"src/game/sim/scriptobjects.cpp\": {\n767: \"mode\": 420,\n768: \"sha256\": \"a4f9a1b49e4ba22a88726efbbea2f355b40a3c006734d9150d509a344720a4d2\"\n769: },\n770: \"src/game/sim/scriptobjects.h\": {\n771: \"mode\": 420,\n772: \"sha256\": \"210d0eb51780df70a9bca133664429589c03ea33e4524e2c182801d4b4a5c74b\"\n773: },\n774: \"src/game/sim/species.h\": {\n775: \"mode\": 420,\n776: \"sha256\": \"83b44c0600b99c5acb72a3484bb0708cfba765cdf594aede596a3c47d5ee6298\"\n777: },\n778: \"src/game/sim/techgraph.cpp\": {\n779: \"mode\": 420,\n780: \"sha256\": \"81f8f1120eb1fa4a77752bd2e0917df3dd76372461416526ae510bd697944ef8\"\n781: },\n782: \"src/game/sim/techgraph.h\": {\n783: \"mode\": 420,\n784: \"sha256\": \"b2fc90666080a6b7f27dc9290eef17774d57742c2a1f9e1f77d94c7fa5689f6e\"\n785: },\n786: \"src/game/sim/tuning.h\": {\n787: \"mode\": 420,\n788: \"sha256\": \"4acfad4098de951cc3a94ca25a2f200e96caba1836bf7441de5a2b458c022194\"\n789: },\n790: \"src/game/sim/visibility.cpp\": {\n791: \"mode\": 420,\n792: \"sha256\": \"25f86a34f9a98d2439672283a446ba1804973dae3f6d9aa3692342b05f3a3ac0\"\n793: },\n794: \"src/game/sim/visibility.h\": {\n795: \"mode\": 420,\n796: \"sha256\": \"783896489a2a9ec8bce617b141bfb631e8ef92f958be7b5c2ca64fd75774471f\"\n797: },\n798: \"src/mars/parse/CMakeLists.txt\": {\n799: \"mode\": 420,\n800: \"sha256\": \"76c290b786a3e73387ec8c574fd5a0dbeb6e629adbe970426314f16497f59fa9\"\n801: },\n802: \"src/mars/parse/blocks.cpp\": {\n803: \"mode\": 420,\n804: \"sha256\": \"e60baa8127b21cf6eb6c8e2aa02c6a72c6403dbc29e8480ff658bf184266675b\"\n805: },\n806: \"src/mars/parse/blocks.h\": {\n807: \"mode\": 420,\n808: \"sha256\": \"1e8b76919a584d1d7fb01c5ff5e3a7173e8456eca892d61f0c6b7bb8f02f33b1\"\n809: },\n810: \"src/mars/parse/effect.cpp\": {\n811: \"mode\": 420,\n812: \"sha256\": \"beb76a841a3d42dbc157413384ff1a0312a7068d6b22020eadcee2e1cbbc81f9\"\n813: },\n814: \"src/mars/parse/effect.h\": {\n815: \"mode\": 420,\n816: \"sha256\": \"aaa5c83f2d8eef24667bf05d0f71b2a346f2fce09dc9a45d7a5197c894922e44\"\n817: },\n818: \"src/mars/parse/result.h\": {\n819: \"mode\": 420,\n820: \"sha256\": \"58cff456e353550abcd0f52e031d9d70f2b7a975f4762cfccc64eb6bc748dbd9\"\n821: },\n822: \"src/mars/parse/script.h\": {\n823: \"mode\": 420,\n824: \"sha256\": \"69a493268c47a08672694489a51c3ff0a7f9aa870e5ae5a93d47ba033cf21ad3\"\n825: },\n826: \"src/mars/parse/value.cpp\": {\n827: \"mode\": 420,\n828: \"sha256\": \"712133e4d725649f5461e6a46bac6842b0751ac3fb7e1c468f826638ec58f623\"\n829: },\n830: \"src/mars/parse/value.h\": {\n831: \"mode\": 420,\n832: \"sha256\": \"60d692648dab7e3e216c8d9e6ef212592ba1df1a98260b1b4599354742947b38\"\n833: },\n834: \"src/mars/rng/CMakeLists.txt\": {\n835: \"mode\": 420,\n836: \"sha256\": \"dceb4bc0fb35c95a12ed9aa36380e79aa75641b15ecc06e4289d39824087e2dc\"\n837: },\n838: \"src/mars/rng/mt19937.cpp\": {\n839: \"mode\": 420,\n840: \"sha256\": \"34820781666f8535889f4919c42eb335644683cc512ffc22b59ce331a8cbaac5\"\n841: },\n842: \"src/mars/rng/mt19937.h\": {\n843: \"mode\": 420,\n844: \"sha256\": \"8906d5b330023134e4bd5669c2463567ef7be900e2266a5a430ecda3fd47b188\"\n845: },\n846: \"src/mars/stream/CMakeLists.txt\": {\n847: \"mode\": 420,\n848: \"sha256\": \"95ffbb0c519e55b7423ab048a3019e295b7ef3a3e9506044ef2e68569df9601a\"\n849: },\n850: \"src/mars/stream/archive.h\": {\n851: \"mode\": 420,\n852: \"sha256\": \"84d9ae2bb3d6f444b3933b3816cafd12caee8619d2219f19cd10d32cfad01d2e\"\n853: },\n854: \"src/mars/stream/bytes.h\": {\n855: \"mode\": 420,\n856: \"sha256\": \"9f5869952c9d6b925db32995a417ba292a0c1a672fc3850400150afb8163b3f1\"\n857: },\n858: \"src/mars/stream/dump.cpp\": {\n859: \"mode\": 420,\n860: \"sha256\": \"1b5bba86b2f85b1718276f8db557601320ab8a165d5fbfe93e51219cca5a1c16\"\n861: },\n862: \"src/mars/stream/dump.h\": {\n863: \"mode\": 420,\n864: \"sha256\": \"a69af300ae7083fb0a5362edbe7eecd5273c8807884aff9fbedd7ae606c7fc4f\"\n865: },\n866: \"src/mars/stream/gzip.cpp\": {\n867: \"mode\": 420,\n868: \"sha256\": \"20d71fd50bd637f78e7ebb5217bc6607ebc257535cc4720e640e4badb72f1644\"\n869: },\n870: \"src/mars/stream/gzip.h\": {\n871: \"mode\": 420,\n872: \"sha256\": \"6bce52c615eb120999adb1a6f7f06baa813a033c28e02e6d79ce77f5b7a929c9\"\n873: },\n874: \"src/mars/stream/node.h\": {\n875: \"mode\": 420,\n876: \"sha256\": \"eb43054c8592db107557979c7fc8612dc0646ba5d62f154b9b7f96a37ba2e860\"\n877: },\n878: \"src/mars/stream/probe.h\": {\n879: \"mode\": 420,\n880: \"sha256\": \"6411d0976d1e785e8c32af6ecfe1a797c0a9aa02314e5e42fae3ed7b3449ae13\"\n881: },\n882: \"src/mars/stream/reader.cpp\": {\n883: \"mode\": 420,\n884: \"sha256\": \"90f19cbcdb0fc50795895ea1eff09cd6c0ab3069095c49b276f3894e3d6bcbb3\"\n885: },\n886: \"src/mars/stream/reader.h\": {\n887: \"mode\": 420,\n888: \"sha256\": \"900508d97be1cbe566d77f2c91755d3db387535cd9574e41704b6d940daa1ff4\"\n889: },\n890: \"src/mars/stream/save.cpp\": {\n891: \"mode\": 420,\n892: \"sha256\": \"6db367b3ea570a4d0ee831160e3f44cef380f58de163b9d9205ca7449e51e049\"\n893: },\n894: \"src/mars/stream/save.h\": {\n895: \"mode\": 420,\n896: \"sha256\": \"b3a411600d98b42e9014e1fc3cbc3eac5f32f4393e9f72036d3d840c802bb469\"\n897: },\n898: \"src/mars/stream/savedump_main.cpp\": {\n899: \"mode\": 420,\n900: \"sha256\": \"8dc687f009d9f455e9bfa4019f03df72e058cebbb3e9ae5bcbb308285470208c\"\n901: },\n902: \"src/mars/stream/schema.h\": {\n903: \"mode\": 420,\n904: \"sha256\": \"b1cd64bc43076a3e5893239bd2eb5c216e7293ee541322ef74fb106928183a05\"\n905: },\n906: \"src/mars/stream/shapes.h\": {\n907: \"mode\": 420,\n908: \"sha256\": \"45ee379ff8100b6bc27427a2580d7aae19ff3d5d0aa27f682d156ae6a92d0a6d\"\n909: },\n910: \"src/mars/stream/writer.cpp\": {\n911: \"mode\": 420,\n912: \"sha256\": \"54804b06266e34793f5294f9a96d2939d641915a0f60fc4e3b4170bfcea6e083\"\n913: },\n914: \"src/mars/stream/writer.h\": {\n915: \"mode\": 420,\n916: \"sha256\": \"921cd44ea30e0b9944825b1d2caafc46edc8f2c23506c807050ed9208a397340\"\n917: },\n918: \"src/mars/text/CMakeLists.txt\": {\n919: \"mode\": 420,\n920: \"sha256\": \"dccb93b37c21c9b3c3b35a50ca8de55c9f00df2a9e0a33b6c36d659a75455436\"\n921: },\n922: \"src/mars/text/csv.cpp\": {\n923: \"mode\": 420,\n924: \"sha256\": \"b190e12b86a3f416a72c110caf9e0b2d98cdd33851d2fa48b55a8d7ea39279af\"\n925: },\n926: \"src/mars/text/csv.h\": {\n927: \"mode\": 420,\n928: \"sha256\": \"3b7ec6d0884e95bfab869c253eddc30a802602bd1f230cc69461cb9cf3c17917\"\n929: },\n930: \"src/mars/text/flat_kv.cpp\": {\n931: \"mode\": 420,\n932: \"sha256\": \"b98d3b7345489f0b149e56cd15436fd6199e4cf00d7ce3f8b8b31fcdecb90e47\"\n933: },\n934: \"src/mars/text/flat_kv.h\": {\n935: \"mode\": 420,\n936: \"sha256\": \"d6765cd42cad46597b6e36e9d08baf6819f7796442293043d5ff686e2376d292\"\n937: },\n938: \"src/mars/text/lines.h\": {\n939: \"mode\": 420,\n940: \"sha256\": \"b9a16ccf0dc7bbf36100e0b66c80bcb818590b161f820d3c67d55bccff1c2c65\"\n941: },\n942: \"src/mars/text/manifest.cpp\": {\n943: \"mode\": 420,\n944: \"sha256\": \"4da1bb615902ec61883e561f5dd375d89442f7b9046fbc864f6308f27921087e\"\n945: },\n946: \"src/mars/text/manifest.h\": {\n947: \"mode\": 420,\n948: \"sha256\": \"dd7351a7a6a144e97f3a3b6a25d22d1518a099e95deadb8965cedb201601e102\"\n949: },\n950: \"src/mars/text/result.h\": {\n951: \"mode\": 420,\n952: \"sha256\": \"7f817033811dff6fcef1d5b76f88922cb0392afb4359549876cd017a14755606\"\n953: },\n954: \"src/mars/text/value.cpp\": {\n955: \"mode\": 420,\n956: \"sha256\": \"94b433d78f3211e1a4dd9eb8a0a00b514cbeaf63a03e738146c56dbbfe221479\"\n957: },\n958: \"src/mars/text/value.h\": {\n959: \"mode\": 420,\n960: \"sha256\": \"d3b5c70af2f339ad27b43c38353fc7a2da83388854b02000fa1b6d9a4e1dfc07\"\n961: },\n962: \"src/mars/vfs/CMakeLists.txt\": {\n963: \"mode\": 420,\n964: \"sha256\": \"630d5d4707ef3c0f24a414815cc23158853fe9d5aef429d6619abc1c433b3786\"\n965: },\n966: \"src/mars/vfs/path.cpp\": {\n967: \"mode\": 420,\n968: \"sha256\": \"e1f3bbab1f90b0132aec24d8c5997dafab69ec72f01f2dd2fa63c91f83ef7aeb\"\n969: },\n970: \"src/mars/vfs/path.h\": {\n971: \"mode\": 420,\n972: \"sha256\": \"043091008f2cab7c88185de63e7aae63ad9b0e384109f5b6fd8c31666c4e2033\"\n973: },\n974: \"src/mars/vfs/result.h\": {\n975: \"mode\": 420,\n976: \"sha256\": \"19115bf1c5b3bf01da078a49209230053043610b342b01cdaaed126e2d3ea748\"\n977: },\n978: \"src/mars/vfs/vfs.cpp\": {\n979: \"mode\": 420,\n980: \"sha256\": \"ab8272cd14b4b55e7af13f5383d6106f0b1caabdde57e69c1d0fb5b434d31cba\"\n981: },\n982: \"src/mars/vfs/vfs.h\": {\n983: \"mode\": 420,\n984: \"sha256\": \"2484231baa64ede6fc35eb0f49e1fd7a3373d5c559f016d5adfb9fc433619d90\"\n985: },\n986: \"src/mars/vfs/zip_archive.cpp\": {\n987: \"mode\": 420,\n988: \"sha256\": \"d66e70300539bd42bcf193683df7c34d2b0b03146fd79f0a180385ead1559e87\"\n989: },\n990: \"src/mars/vfs/zip_archive.h\": {\n991: \"mode\": 420,\n992: \"sha256\": \"0ffbd90f7919741e63e86e14d0f87d247bc2cd16d2db54771071553249ad935d\"\n993: },\n994: \"src/shim/binkw32.def\": {\n995: \"mode\": 420,\n996: \"sha256\": \"fb500fd9f9ecbff44123b89fc24cec72e91fec4c4430ce12a69efc06b20de235\"\n997: },\n998: \"src/shim/fpu_force.cpp\": {\n999: \"mode\": 420,\n1000: \"sha256\": \"c4b4e41a7ef81139c652ba8164ed8bb0d809b42182f0d0f048b9a9e63bebe59d\"\n1001: },\n1002: \"src/shim/fpu_force.h\": {\n1003: \"mode\": 420,\n1004: \"sha256\": \"75bac23bc45510961f6b10d21c47e72d8dc0d3971a3ab30b795cad1d25332c06\"\n1005: },\n1006: \"src/shim/hooks/ai_orders.cpp\": {\n1007: \"mode\": 420,\n1008: \"sha256\": \"091ed885012fffa0e02b83c53e547483dfdeaf1094933726e0291fff0a99e434\"\n1009: },\n1010: \"src/shim/hooks/ai_orders.h\": {\n1011: \"mode\": 420,\n1012: \"sha256\": \"6e775b3f946f2eaf10dc2e236a3f3c7b9311ed4e82cd4be1ca30e6c62d49d053\"\n1013: },\n1014: \"src/shim/hooks/ai_rng.cpp\": {\n1015: \"mode\": 420,\n1016: \"sha256\": \"b8fec711cb620561c8f4854e72c3fb0d73013c9b1cd69fa63fc05dd3d2f60289\"\n1017: },\n1018: \"src/shim/hooks/ai_rng.h\": {\n1019: \"mode\": 420,\n1020: \"sha256\": \"1306f4d3c8071121b06c75232efa5c50b155c1f8752fcae852ee8e5497ce7d08\"\n1021: },\n1022: \"src/shim/hooks/ai_visit.cpp\": {\n1023: \"mode\": 420,\n1024: \"sha256\": \"cd69811074820810edb1ed3779ca08bd99fea620b162d80a0395d35e8db7fc31\"\n1025: },\n1026: \"src/shim/hooks/ai_visit.h\": {\n1027: \"mode\": 420,\n1028: \"sha256\": \"8315b433319f680e80a154409124355ad24842e9a0cdef5c8aa6d12422971189\"\n1029: },\n1030: \"src/shim/hooks/budget_inputs.cpp\": {\n1031: \"mode\": 420,\n1032: \"sha256\": \"fa50fb74a3874886cf8aeb4012b9fd9a5a43ce38ab3c543ee425002ca32fd46b\"\n1033: },\n1034: \"src/shim/hooks/budget_inputs.h\": {\n1035: \"mode\": 420,\n1036: \"sha256\": \"56e2f95930ff420820a3464162fde74ac0a3ff2e1dc8b493729fed342e4a6548\"\n1037: },\n1038: \"src/shim/hooks/colony_inputs.cpp\": {\n1039: \"mode\": 420,\n1040: \"sha256\": \"7aa9191ec6292d765fd06c99ff1f2ae2e09a65fb1f238dd2727f28bd465dd46e\"\n1041: },\n1042: \"src/shim/hooks/colony_inputs.h\": {\n1043: \"mode\": 420,\n1044: \"sha256\": \"87ec765e14106631e3f6423450e6e01d5bb21060fa91f83c267db215ef4986d9\"\n1045: },\n1046: \"src/shim/hooks/colony_turn.cpp\": {\n1047: \"mode\": 420,\n1048: \"sha256\": \"b82616c7b9b05e96e7f4c40d853c686884b517a5424413686d61799df9d45420\"\n1049: },\n1050: \"src/shim/hooks/colony_turn.h\": {\n1051: \"mode\": 420,\n1052: \"sha256\": \"a9013cc2e92998ff56ac0c8cc36dc42033fbe3072ee88b86882a1dd4dd0357d6\"\n1053: },\n1054: \"src/shim/hooks/compute_budget.cpp\": {\n1055: \"mode\": 420,\n1056: \"sha256\": \"76a24f0daf1f49cfabbed13753c65754e26bfcc4f672791b37e926f82b5c1906\"\n1057: },\n1058: \"src/shim/hooks/compute_budget.h\": {\n1059: \"mode\": 420,\n1060: \"sha256\": \"f308717e44e12151cfb20a6a0cf11ff8e99ecc9c17ef04783198feed05a24caa\"\n1061: },\n1062: \"src/shim/hooks/dictionaries.cpp\": {\n1063: \"mode\": 420,\n1064: \"sha256\": \"b60794256c07964eb89d5295ecb711b402112fe5f982a9215dc3a304d03a567b\"\n1065: },\n1066: \"src/shim/hooks/dictionaries.h\": {\n1067: \"mode\": 420,\n1068: \"sha256\": \"ac68fd66eb343d40ee97d6bf29c8b54f5d469a9ef8862687ae15e6ad8bdafdc0\"\n1069: },\n1070: \"src/shim/hooks/draw_sites.cpp\": {\n1071: \"mode\": 420,\n1072: \"sha256\": \"e7a1fa40262db2ed22b1dfa5ca1bd2588da07bfbab046f23afa8e86c03814d79\"\n1073: },\n1074: \"src/shim/hooks/draw_sites.h\": {\n1075: \"mode\": 420,\n1076: \"sha256\": \"0021323e918d464223d03b969d0e6992a0efac23ba84a31af901cf2ac74e9b13\"\n1077: },\n1078: \"src/shim/hooks/event_inputs.cpp\": {\n1079: \"mode\": 420,\n1080: \"sha256\": \"eeb9cc87ef5c39994b7f25d5ccfe220c4775b32a4b11471b0fc0fb81fca4362b\"\n1081: },\n1082: \"src/shim/hooks/event_inputs.h\": {\n1083: \"mode\": 420,\n1084: \"sha256\": \"c0e74aed8756b3de8ebbe5ab3d70cfa6282403efefc2d795e8f0b1b4cd44d731\"\n1085: },\n1086: \"src/shim/hooks/fleet_movement.cpp\": {\n1087: \"mode\": 420,\n1088: \"sha256\": \"f01ae7f64b1d545089b002b79c9986d2a39b97ad3995c88a8b71fa05eedb90f0\"\n1089: },\n1090: \"src/shim/hooks/fleet_movement.h\": {\n1091: \"mode\": 420,\n1092: \"sha256\": \"dbbfe50afaedad63ec45881819aa5de3907cdb411ddf8d1d3e6a5f9a386dc8af\"\n1093: },\n1094: \"src/shim/hooks/global_consts.cpp\": {\n1095: \"mode\": 420,\n1096: \"sha256\": \"87a51601e1a7d963bf841ca4e892aa79de789a050f5d783c7b5d8bbc2e96a9a1\"\n1097: },\n1098: \"src/shim/hooks/global_consts.h\": {\n1099: \"mode\": 420,\n1100: \"sha256\": \"b6ac4265ec1f02f11c342536dbc9970c13761ea68aec0a5962d0f4cd6aa5d265\"\n1101: },\n1102: \"src/shim/hooks/movement_inputs.cpp\": {\n1103: \"mode\": 420,\n1104: \"sha256\": \"0e23f86e4a8ed6c292aea8e45512931cdd06742f25c5e0d175bf0ed3b2217502\"\n1105: },\n1106: \"src/shim/hooks/movement_inputs.h\": {\n1107: \"mode\": 420,\n1108: \"sha256\": \"32904786cbb122c3c8c36faf6bd9ea5ade4cd8395e74199ec08dbcdb8019b66a\"\n1109: },\n1110: \"src/shim/hooks/player_turn.cpp\": {\n1111: \"mode\": 420,\n1112: \"sha256\": \"33bcadd7569ad13c69f5f160423c8d469bc67725ce7b944cf4b4346fb8cc7f23\"\n1113: },\n1114: \"src/shim/hooks/player_turn.h\": {\n1115: \"mode\": 420,\n1116: \"sha256\": \"a766a0d93f3860da6f8d1e0dcf110d6754cd8dfe67d867093f32e3d24e8ff0e0\"\n1117: },\n1118: \"src/shim/hooks/player_turn_inputs.cpp\": {\n1119: \"mode\": 420,\n1120: \"sha256\": \"993dce2ca771a36337c9561695995a0825746563d2e84b4458de650f3e456799\"\n1121: },\n1122: \"src/shim/hooks/player_turn_inputs.h\": {\n1123: \"mode\": 420,\n1124: \"sha256\": \"ca0d7916ca17d993aaef19be48d03076220ae15cdcc622aef52a7c6b5957ca71\"\n1125: },\n1126: \"src/shim/hooks/probe_entry.cpp\": {\n1127: \"mode\": 420,\n1128: \"sha256\": \"5faf9cf04a2cf849d2dd54ce4ad9b812120fb99741f11e9d52fed450badf0506\"\n1129: },\n1130: \"src/shim/hooks/probe_entry.h\": {\n1131: \"mode\": 420,\n1132: \"sha256\": \"f04f445863a6164d03bc9f6edcaa2e2b0108163241510f4c1dfcb0da7667d89f\"\n1133: },\n1134: \"src/shim/hooks/research.cpp\": {\n1135: \"mode\": 420,\n1136: \"sha256\": \"dacd16403f1dd5be2ef2cc42f16938977bdd0ee9283d0bca647a079ee3d28e83\"\n1137: },\n1138: \"src/shim/hooks/research.h\": {\n1139: \"mode\": 420,\n1140: \"sha256\": \"a62c4847be81ed9d10c4f5b9a876bd79898040aa11aa8764149d82db4b010a84\"\n1141: },\n1142: \"src/shim/hooks/rng_ledger.cpp\": {\n1143: \"mode\": 420,\n1144: \"sha256\": \"119d325fcda72268bdc87f7ca7af05d059d4521c4d7d40ad7426ce070865eabb\"\n1145: },\n1146: \"src/shim/hooks/rng_ledger.h\": {\n1147: \"mode\": 420,\n1148: \"sha256\": \"0d1e9c79e7601da921253e860c55d9b69c21e03a1014c49f1dd85fd0e5f70f30\"\n1149: },\n1150: \"src/shim/hooks/system_output.cpp\": {\n1151: \"mode\": 420,\n1152: \"sha256\": \"93bfb7e6ca381041d1e9830f82b8d774a63c12593fc426fd3e9198c9373be3b4\"\n1153: },\n1154: \"src/shim/hooks/system_output.h\": {\n1155: \"mode\": 420,\n1156: \"sha256\": \"62a8424c70bb8e6c3d9603ce752f6b19a3920a4a78be75718869d7dac73f3738\"\n1157: },\n1158: \"src/shim/hooks/tail_rng.cpp\": {\n1159: \"mode\": 420,\n1160: \"sha256\": \"9b2a3923d1d837399f3486650ef0e49b502837ff7df46a12df9a9e9b0d4d9d07\"\n1161: },\n1162: \"src/shim/hooks/tail_rng.h\": {\n1163: \"mode\": 420,\n1164: \"sha256\": \"b9585605e71364872db25c608012e94db2148f22e2e6fd40d4b590a83f3be92b\"\n1165: },\n1166: \"src/shim/hooks/tech_effect_fields.cpp\": {\n1167: \"mode\": 420,\n1168: \"sha256\": \"4c4d558aba3ac4e1b10e0944c867911e61daea0b4ade716760546846cebcb7b3\"\n1169: },\n1170: \"src/shim/hooks/tech_effect_fields.h\": {\n1171: \"mode\": 420,\n1172: \"sha256\": \"22b2c050f73c9de011a42dc5a52d92a1bd3b24a59f3ba3b4332d832fb1853420\"\n1173: },\n1174: \"src/shim/hooks/tech_effects.cpp\": {\n1175: \"mode\": 420,\n1176: \"sha256\": \"2a20f01a18ed30a466e2023ae023aeed8718c680cda927d2f3b463b6dbe35714\"\n1177: },\n1178: \"src/shim/hooks/tech_effects.h\": {\n1179: \"mode\": 420,\n1180: \"sha256\": \"ffbc4e8262146cd7764f0b9758fff01ce5d359b25a0f5d8c931313f32d035320\"\n1181: },\n1182: \"src/shim/hooks/watchpoints.cpp\": {\n1183: \"mode\": 420,\n1184: \"sha256\": \"15c94333f22bb592129efe3fb800ea89987045f9ebbc0e6791d4397961fd727d\"\n1185: },\n1186: \"src/shim/hooks/watchpoints.h\": {\n1187: \"mode\": 420,\n1188: \"sha256\": \"639ae42b230fb31762f50cac0422dcd5b7fda7a1a02c7739a86d1cd6eda62277\"\n1189: },\n1190: \"src/shim/main.cpp\": {\n1191: \"mode\": 420,\n1192: \"sha256\": \"eebdac7f8f69b8b95cd290c96d41c6f3f0ed5c45ccd5de54ffc790af47083b99\"\n1193: },\n1194: \"src/shim/shim.cfg\": {\n1195: \"mode\": 420,\n1196: \"sha256\": \"44ca58394455549150c3461cc888128a968b4f062807e19ef25b8eebf0bfd523\"\n1197: },\n1198: \"src/shim/shim.cfg.b4compare\": {\n1199: \"mode\": 420,\n1200: \"sha256\": \"68bed5883a75132eb5e885b4750d23c1d5734c843a32a56dc7f96d2b73fdf962\"\n1201: },\n1202: \"src/shim/shim.cfg.b4scout\": {\n1203: \"mode\": 420,\n1204: \"sha256\": \"faac0765478d88b63f371fbc307512e71fe05f2e6f97272e6e0ceb267cc6d626\"\n1205: },\n1206: \"src/shim/shim.cfg.b4trace\": {\n1207: \"mode\": 420,\n1208: \"sha256\": \"6a89cdd3cfdf53cfbaff29278fd5d0edf156ad8a525c61624b60ddb1eb0575a1\"\n1209: },\n1210: \"src/shim/shim.cfg.bupin\": {\n1211: \"mode\": 420,\n1212: \"sha256\": \"39d52ef1ccb18d4dea261b87d3f363ba45079022d1b9bc3531c552ef6df80ec2\"\n1213: },\n1214: \"src/shim/shim.cfg.cbcapture\": {\n1215: \"mode\": 420,\n\n(Output capped at 50 KB. Showing lines 1-1215. Use offset=1216 to continue.)\n</content>","metadata":{"preview":"{\n \"actor\": \"launcher-smoke\",\n \"checkpoint_session\": \"run-df1472c13f31db3a4d5361f0\",\n \"command\": [\n \"opencode\",\n \"run\",\n \"--format\",\n \"json\",\n \"--model\",\n \"openai/gpt-6-astra\",\n \"--agent\",\n \"sots-lead\",\n \"Start a FRESH bounded campaign quantum (40 steps). No delegation.\\nRole=architecture-review; requested model=openai/gpt-6-astra; actor=launcher-smoke; checkpoint session=run-df1472c13f31db3a4d5361f0.\\nCanonical state root: /home/alex/sots-re\\nContract: /home/alex/sots-re/campaign/contracts/launcher-smoke.json\\nLatest checkpoint: None\\nEngine worktree: /tmp/opencode/sots-launch-engine\\nRE worktree: /tmp/opencode/sots-launch-re\\nRead canonical campaign/README.md, contract, latest checkpoint and open surprises before work. Verify source/worktree/resource identities. Only edit owned scope. Missing state means blocked. Do not commit, stage, push or mutate lab resources without explicit authority and a lease. Checkpoint every 20 tool calls or 15 minutes, before experiments, compaction and stopping; persist under canonical campaign/ using tools/campaign.py with the session above, exact model, actor and role. Include observations versus decisions, source identities, artifact paths, tests, blockers and ONE exact next action. Fresh checkpoint at quantum end is mandatory. Record a surprise and pause affected work if assumptions are falsified. Astra architecture authority: perform approved architecture/planning work in owned scope. Do not rely on chat resume or automatic compaction.\"\n ],\n \"config\": {\n \"canonical_files\": {\n \"campaign/agents/analyst.md\": \"895c41509016038b3f72c4a68608c4101511e69c5bf410e379286da1a6202952\",\n \"campaign/agents/implementer.md\": \"eb5581051a92b3d2b9ddd947812b1c02ff6a0b5e7619e7674adc26701e9a3d91\",\n \"campaign/agents/lab.md\": \"48f1765ebdcb2015e631ad91428f65735ff899e119134b652f70788ff2eae5b8\",\n \"campaign/agents/lead.md\": \"7661bbfca972be50a52c735b7f15f5be740158542c3d0cdbdf9a6a2590c7f1ea\",","truncated":true,"loaded":[],"display":{"type":"file","path":"/home/alex/sots-re/campaign/runtime/runs/run-df1472c13f31db3a4d5361f0.json","text":"{\n \"actor\": \"launcher-smoke\",\n \"checkpoint_session\": \"run-df1472c13f31db3a4d5361f0\",\n \"command\": [\n \"opencode\",\n \"run\",\n \"--format\",\n \"json\",\n \"--model\",\n \"openai/gpt-6-astra\",\n \"--agent\",\n \"sots-lead\",\n \"Start a FRESH bounded campaign quantum (40 steps). No delegation.\\nRole=architecture-review; requested model=openai/gpt-6-astra; actor=launcher-smoke; checkpoint session=run-df1472c13f31db3a4d5361f0.\\nCanonical state root: /home/alex/sots-re\\nContract: /home/alex/sots-re/campaign/contracts/launcher-smoke.json\\nLatest checkpoint: None\\nEngine worktree: /tmp/opencode/sots-launch-engine\\nRE worktree: /tmp/opencode/sots-launch-re\\nRead canonical campaign/README.md, contract, latest checkpoint and open surprises before work. Verify source/worktree/resource identities. Only edit owned scope. Missing state means blocked. Do not commit, stage, push or mutate lab resources without explicit authority and a lease. Checkpoint every 20 tool calls or 15 minutes, before experiments, compaction and stopping; persist under canonical campaign/ using tools/campaign.py with the session above, exact model, actor and role. Include observations versus decisions, source identities, artifact paths, tests, blockers and ONE exact next action. Fresh checkpoint at quantum end is mandatory. Record a surprise and pause affected work if assumptions are falsified. Astra architecture authority: perform approved architecture/planning work in owned scope. Do not rely on chat resume or automatic compaction.\"\n ],\n \"config\": {\n \"canonical_files\": {\n \"campaign/agents/analyst.md\": \"895c41509016038b3f72c4a68608c4101511e69c5bf410e379286da1a6202952\",\n \"campaign/agents/implementer.md\": \"eb5581051a92b3d2b9ddd947812b1c02ff6a0b5e7619e7674adc26701e9a3d91\",\n \"campaign/agents/lab.md\": \"48f1765ebdcb2015e631ad91428f65735ff899e119134b652f70788ff2eae5b8\",\n \"campaign/agents/lead.md\": \"7661bbfca972be50a52c735b7f15f5be740158542c3d0cdbdf9a6a2590c7f1ea\",\n \"campaign/agents/resolver.md\": \"742c36dc8567669d462566d6121eed42fcff5bff34e8eff466e92249f7ca195f\",\n \"campaign/agents/verifier.md\": \"e467fc644e4e37d631a7a4e35038d9d3d0498491f1d7811d61d99271ff345c6b\",\n \"campaign/models.json\": \"95f507237a8e4fcf14189da4aa102dfae1dbaa536d4d8db6bcbfc30162ac5443\",\n \"opencode.json\": \"d24be7fcee57d5eb04c6b7189822a2ca055dd4a70daafbea67f09a120945d49f\"\n },\n \"effective\": {\n \"agent_sha256\": \"530f4bfeb28c09d36e45565706247ad9822f7c177161e1ee0a71fcb981a76b92\",\n \"sha256\": \"4cb65613de34e41eabf780e84cad062f14cbfcdd68569dc874514c50fa7baa5a\"\n },\n \"expanded_prompt_sha256\": \"c501f3d7551302fb686ea4630b603a16f4c92537762d556759a5e5a40669a9a1\",\n \"overlay\": {\n \"agent\": {\n \"sots-lead\": {\n \"model\": \"openai/gpt-6-astra\",\n \"permission\": {\n \"bash\": \"allow\",\n \"external_directory\": {\n \"*\": \"deny\",\n \"/home/alex/sots-re\": \"allow\",\n \"/home/alex/sots-re/*\": \"allow\",\n \"/tmp/opencode/sots-launch-engine\": \"allow\",\n \"/tmp/opencode/sots-launch-engine/*\": \"allow\",\n \"/tmp/opencode/sots-launch-re\": \"allow\",\n \"/tmp/opencode/sots-launch-re/*\": \"allow\"\n },\n \"glob\": \"allow\",\n \"grep\": \"allow\",\n \"list\": \"allow\",\n \"question\": \"deny\",\n \"read\": \"allow\",\n \"task\": \"deny\"\n },\n \"prompt\": \"You are the SOTS lead/integrator, running GPT-6 Astra. Read AGENTS.md, campaign/README.md,\\nguides/multi-agent-workflow.md, selected contracts, latest checkpoints and open surprises.\\nState lives in the explicitly selected canonical RE repository. Do not reconstruct it from chat.\\n\\nOwn architecture, task boundaries, model allocation, independent acceptance and integration.\\nSelect work by dependencies unlocked and complete write sets, not row/leaf counts. At most two\\nimplementation slices after the pilot. Delegate through tools/run_agent.py with explicit role,\\ncontract, state root and paired worktrees. No nested worker delegation or implicit model fallback.\\nValidate model availability before assigning work. Extra Astra architecture/review sessions are\\nallowed when explicitly allocated. Keep exclusive file and resource ownership clear.\\n\\nWrite acceptance before implementation. Require independent verification and integrated source-\\nbound evidence. Only you publish current pointers/projections. Never promote a historical claim\\nwithout the stated workload, identity, coverage and reproduction. Host passed != full acceptance.\\n\\nHandle surprises as experiments: record evidence, block affected work, examine instrument/source\\nidentity, list surviving/qualified/overturned claims, choose one discriminating check, update\\ncontracts and invalidate affected results. Do not hide contradictions in appended caveats.\\n\\nCheckpoint every 20 tool calls/15min and before compaction, experiments, handoff or stop. At a\\n40-step quantum boundary persist exact next action and finish; next session resumes from RE state.\\nFollow explicit user authorization for commits/pushes; this rollout authorizes neither.\\n\",\n \"steps\": 40\n }\n },\n \"model\": \"openai/gpt-6-astra\"\n },\n \"path\": \"/home/alex/sots-re/opencode.json\",\n \"sha256\": \"d24be7fcee57d5eb04c6b7189822a2ca055dd4a70daafbea67f09a120945d49f\"\n },\n \"contract\": \"launcher-smoke\",\n \"cwd\": \"/tmp/opencode/sots-launch-engine\",\n \"id\": \"run-df1472c13f31db3a4d5361f0\",\n \"max_steps\": 40,\n \"requested_model\": \"openai/gpt-6-astra\",\n \"resolution_only\": false,\n \"role\": \"architecture-review\",\n \"schema\": \"sots-run/1\",\n \"source_before\": {\n \"engine\": {\n \"commit\": \"7741d42fc5e4e761e6449bdaf0e4a61d00036a23\",\n \"files\": {\n \".gitignore\": {\n \"mode\": 420,\n \"sha256\": \"5103c9533f0d31fea29c0cc85d543692af84a697416dfa7557e31c9843210145\"\n },\n \"CMakeLists.txt\": {\n \"mode\": 420,\n \"sha256\": \"6e9791511ea23bf8bf5f7f58617a7e77bbe5006829609e425e565c11c1e8d7ed\"\n },\n \"CMakePresets.json\": {\n \"mode\": 420,\n \"sha256\": \"fcd1dfe3989ee4f56fa3e419059e1db5621922165edf05f13cfe8e5d786d8bb0\"\n },\n \"CONTRIBUTING.md\": {\n \"mode\": 420,\n \"sha256\": \"3d251db67793df3dfb4a66e41a3226575929f3ccd1129b287b85d0a7747a24e1\"\n },\n \"LICENSE\": {\n \"mode\": 420,\n \"sha256\": \"eedebad43ea495111bf4451d78cb440309d90a733d6a36445699dde0629f1858\"\n },\n \"README.md\": {\n \"mode\": 420,\n \"sha256\": \"ed9b72a016c284e533155a517547a321c462c8cc7be745f44a8ea54ed2f59d51\"\n },\n \"cmake/toolchain-mingw-i686.cmake\": {\n \"mode\": 420,\n \"sha256\": \"231c0b79868a77d54cc6619f0b4ea18454964a1a078806f44a6ffe3fb7741a9b\"\n },\n \"docs/A2-alliance-and-modcount.md\": {\n \"mode\": 420,\n \"sha256\": \"0c0c45c31d5d64124f3b91a161f8a2f4732c8a5d7f6bc524baf4d59f8a191701\"\n },\n \"docs/AC-predictions.md\": {\n \"mode\": 420,\n \"sha256\": \"ab9e41714abdbc32e620d8a2068be8ebd2fc8898ba149113c66ccda248b4bcda\"\n },\n \"docs/B1.md\": {\n \"mode\": 420,\n \"sha256\": \"42b61bbfc135cdcd0f1a32f63164b88e67106400de7f08f543f118eccd814364\"\n },\n \"docs/B2.md\": {\n \"mode\": 420,\n \"sha256\": \"87dfd333ee15681a3aa4de58cf1b14ff8240e75afabc05012e0f28531cb4b8b8\"\n },\n \"docs/B3.md\": {\n \"mode\": 420,\n \"sha256\": \"fb65c41037b6cd6252c67e5244d492a3a17ea4ba2ddae821d49fe0a879528518\"\n },\n \"docs/B4.md\": {\n \"mode\": 420,\n \"sha256\": \"22547b3d2960684e52a380fb07f43a75bf50aebf93cede689f297cf38f4a012d\"\n },\n \"docs/B6-ship-construction.md\": {\n \"mode\": 420,\n \"sha256\": \"9c5c4fd2059af965e317c9db5b7fbfc440397ddfcdc5bf7860115f6a8a0532ab\"\n },\n \"docs/CB-capture.md\": {\n \"mode\": 420,\n \"sha256\": \"ce45a9082588051eda7438016dc66eb28bb4afda98b82cdc20102c4ca53529f0\"\n },\n \"docs/CB-predictions.md\": {\n \"mode\": 420,\n \"sha256\": \"ba51538b018cbb403978f97ad45d4743937d49ba55c8f15d7af8f8e4aa441f0f\"\n },\n \"docs/E-events.md\": {\n \"mode\": 420,\n \"sha256\": \"de98795aadb1617eab91815ebc34818bef8b52c36ba18b4521170065bfd2d201\"\n },\n \"docs/EV-events.md\": {\n \"mode\": 420,\n \"sha256\": \"e7d9536cd23f5d800dc97f68167bb738088a16136004419f28de92d7fe1bcfb9\"\n },\n \"docs/G-wire-schema.md\": {\n \"mode\": 420,\n \"sha256\": \"19db69ae359ddbd2a0509d02f1c616f939e0428480a8bb33c81f69145323a591\"\n },\n \"docs/G3-civilian-growth.md\": {\n \"mode\": 420,\n \"sha256\": \"38ea3a8ddc3fdca258294d949c4cd2af1a930cdd9ba612d5e8fb48bc446bdf30\"\n },\n \"docs/H-probes.md\": {\n \"mode\": 420,\n \"sha256\": \"f23e4d4cbc8c9a3000a0a58ed994dddd95466cee1ec45e961685e86dde4dc54f\"\n },\n \"docs/L1-predictions.md\": {\n \"mode\": 420,\n \"sha256\": \"af97dbc9f15b9c2e6f223c89bac17826056fa4f3bced3c01513c1ad4d9ac1754\"\n },\n \"docs/L2-predictions.md\": {\n \"mode\": 420,\n \"sha256\": \"18213ce5f3375d478f266de85c38c2b04ca2ae8ab4a2023780dca161fa14f460\"\n },\n \"docs/L3-predictions.md\": {\n \"mode\": 420,\n \"sha256\": \"d1c9c0006079f47ef0d3371f4a2c2df2fe4f08ebdad0f8a12d1b0de35b15ae7e\"\n },\n \"docs/L4-ai-orders.md\": {\n \"mode\": 420,\n \"sha256\": \"b04127c5158a882f252b2b6e8afb2d131f0de623cc0c62c86c612af803d75835\"\n },\n \"docs/L4-predictions.md\": {\n \"mode\": 420,\n \"sha256\": \"6a194ae336920f13d8e4a44549cbe26be959beef81cffed88ef03b3cec563e44\"\n },\n \"docs/L5-live-verification.md\": {\n \"mode\": 420,\n \"sha256\": \"4c1abe57c516b36f383390164a362f53294feda222c623283f1e6091d8ef0ec4\"\n },\n \"docs/M-movefleet.md\": {\n \"mode\": 420,\n \"sha256\": \"718338edb8cbe8a449793b22889776a1783d1d0ade553c03973ea45d426eb426\"\n },\n \"docs/M0.md\": {\n \"mode\": 420,\n \"sha256\": \"e121c380612a42727e3a973d8cf50f884d660bb4b43bc494258dc1c6b6f26705\"\n },\n \"docs/M1.md\": {\n \"mode\": 420,\n \"sha256\": \"e0a36cf109d096748e55522eb8d7a261764cbf5ab5daf9342ba903d0f2bc6704\"\n },\n \"docs/M2.md\": {\n \"mode\": 420,\n \"sha256\": \"25f9cad74eeee40afc2117333232384e1cf387b2b9132856650234c5ba593c61\"\n },\n \"docs/N-output-term.md\": {\n \"mode\": 420,\n \"sha256\": \"3b8317e22714ef66b35efceee6fa0f7057c37f7c6e34d93cc5047cd1dd07ecde\"\n },\n \"docs/P-events-wiring.md\": {\n \"mode\": 420,\n \"sha256\": \"72ee81b71b4c08ae451721c785dc5e01ed4ca43ff0fd474befca09dcc41599ba\"\n },\n \"docs/PAR-predictions.md\": {\n \"mode\": 420,\n \"sha256\": \"16e8fbbac5001db0b10d766858c0ae2ea9619f37043a0883ee46da80d4dd4846\"\n },\n \"docs/PL-players-residual.md\": {\n \"mode\": 420,\n \"sha256\": \"9bc29bc030ee8b0e00e496b91fe8fefac15179ce9fd01c0a11a7b5b5335356dc\"\n },\n \"docs/R-recapture.md\": {\n \"mode\": 420,\n \"sha256\": \"73c62ab20c5eca5e87e1d18aefa60a2a2acd75cbc7510d31b27a2cd4ebcec38f\"\n },\n \"docs/RB-predictions.md\": {\n \"mode\": 420,\n \"sha256\": \"c1016781505c10aa304d4710c5389918b744ab20cbd8cb54dce462c3dc28e4e7\"\n },\n \"docs/S-standalone.md\": {\n \"mode\": 420,\n \"sha256\": \"48c59998a1e2fe6a49e08b0f6b4c2bd6c8211fd818b4096abdeb89a0e82dcc5d\"\n },\n \"docs/SD-predictions.md\": {\n \"mode\": 420,\n \"sha256\": \"a76a568ccac7409e3cb3acef724dbe6b618d4ec30259bce33594098daff8b6a0\"\n },\n \"docs/SV-script-objects.md\": {\n \"mode\": 420,\n \"sha256\": \"80ebd120fa9cf5e68ac4d33117966805b917d24bc339f7d82be972a280449409\"\n },\n \"docs/T-turn-driver.md\": {\n \"mode\": 420,\n \"sha256\": \"a4096b8223cea87ce77cc64014c489d4625ed36fd3aec1358565ca5cf91d4e1e\"\n },\n \"docs/U-unlock.md\": {\n \"mode\": 420,\n \"sha256\": \"5cbe3d8fb4bd30d029cb2db006a4dd3c6819885f55f434afb4bc8ae79b526901\"\n },\n \"docs/V-eventlive.md\": {\n \"mode\": 420,\n \"sha256\": \"ebd08c000f42211e87958278f03d6891475cd8557658e1a42105cf5ed45a1aa1\"\n },\n \"docs/W2-predictions.md\": {\n \"mode\": 420,\n \"sha256\": \"9972e27467cf0fe23a358818caf7edb979de25697d3aa4b97a2135ca79fe34f5\"\n },\n \"docs/W2-watchpoints.md\": {\n \"mode\": 420,\n \"sha256\": \"f8634c5f977b2ca9b2e07df105cba09adacaeb6fb4cf046e41e5e1e42b83b107\"\n },\n \"docs/W3-predictions.md\": {\n \"mode\": 420,\n \"sha256\": \"211cedc2d924bcf47cbb73166b408e9a27d795863ffc90aa2adbb85beeadffcf\"\n },\n \"docs/W3-watchpoints.md\": {\n \"mode\": 420,\n \"sha256\": \"568e818e66d95f9079a1270c4d9b900c7eecfd5b5a3b4ba5a4aa0c843666f061\"\n },\n \"docs/Y-standalone-rng-and-tail.md\": {\n \"mode\": 420,\n \"sha256\": \"49d926cc505d6ba07753748366e42ec32493a15c76bfaa45b2f66f52adc57f2b\"\n },\n \"docs/Z-tail-rng.md\": {\n \"mode\": 420,\n \"sha256\": \"3ed2b40f728bcedd663c305cce13481bad1429af03fd5215ee3189161cfbd7f1\"\n },\n \"docs/game-data.md\": {\n \"mode\": 420,\n \"sha256\": \"2124ea3d117b4ee6f48660d9711c1b4ef844a4ba37af7cea3766914d77bd6b23\"\n },\n \"docs/game-design.md\": {\n \"mode\": 420,\n \"sha256\": \"5b40349ad446596b534567a5683cf9ea99709d9eff231890e0f6256c755f0272\"\n },\n \"docs/game-effects.md\": {\n \"mode\": 420,\n \"sha256\": \"e1e0abc162602daaac255fe44b11c511adf45d4ef5fa188268411829b0817e5d\"\n },\n \"docs/game-sim.md\": {\n \"mode\": 420,\n \"sha256\": \"d1e14770d252fd2f320a7baa1ad54c90d955cfc840f477d1700cfbbadcec730e\"\n },\n \"docs/harness-audit.md\": {\n \"mode\": 420,\n \"sha256\": \"931d92cc744ec6ca3d961fbe7fe96dcab28060446058eb78be9835ebbce73ed0\"\n },\n \"docs/mars-parse.md\": {\n \"mode\": 420,\n \"sha256\": \"d9fa3029ade4f9401c59fb88f4520a1ef3af9a9c6f2bb5d1a0ebfa1d5061d6dd\"\n },\n \"docs/mars-rng.md\": {\n \"mode\": 420,\n \"sha256\": \"f2a01b88f105d07d0d0d514430e76da7632e5c8e4e3bbd6c99a25f1dc5daa89c\"\n },\n \"docs/mars-stream.md\": {\n \"mode\": 420,\n \"sha256\": \"61a16c9b7c143b4bc2edee473cf1f8bd06c1a5144c120bc563e5ec6d770dd0e7\"\n },\n \"docs/mars-text.md\": {\n \"mode\": 420,\n \"sha256\": \"2b6c7d2eecbb684160e7565d1d7224eb0d2f7e9a41f4d807095a182ea605dcf1\"\n },\n \"docs/mars-vfs.md\": {\n \"mode\": 420,\n \"sha256\": \"1508c2a070d56f4fdabac3c2ef1fd08d3f93d7a3045d59158340ee22a6ff1b62\"\n },\n \"docs/shim-trace.md\": {\n \"mode\": 420,\n \"sha256\": \"8a059c1ba761b366449c2db8ef248656da917050ed28855c6d812ecf91672fa5\"\n },\n \"include/generated/sots_addresses.h\": {\n \"mode\": 420,\n \"sha256\": \"fc34ac4ee8cc7fea91c447b5715841dc6d3afe36f9aff04e88b6c29b5b64f448\"\n },\n \"include/generated/sots_stream_schema.h\": {\n \"mode\": 420,\n \"sha256\": \"13446ce54d60a0b29adcefb51aeb5127a0a3ca8de2bd1665e4778ba5354bff8c\"\n },\n \"src/app/CMakeLists.txt\": {\n \"mode\": 420,\n \"sha256\": \"142999eded2ff494745ce550af76a8f8caf0269ad22d6d5650e7a79c19d22717\"\n },\n \"src/app/alliance.cpp\": {\n \"mode\": 420,\n \"sha256\": \"37d6e57f7ce82a69a595cf474e7be7a544efef210f960e9cdfeab6168826bac9\"\n },\n \"src/app/alliance.h\": {\n \"mode\": 420,\n \"sha256\": \"08fa8dc96286c7cb15a90a987fa22b17e195522e642ab8303b659ca58739eafd\"\n },\n \"src/app/command_replay.cpp\": {\n \"mode\": 420,\n \"sha256\": \"739059930cd3a5f1d988522ff50c60d8657664a66c9fe19b019833f417b55824\"\n },\n \"src/app/command_replay.h\": {\n \"mode\": 420,\n \"sha256\": \"956429a742554cada2124de49c6955e27b0e5d68db87dcc95b22c75ec7bd93c2\"\n },\n \"src/app/construction_phase.cpp\": {\n \"mode\": 420,\n \"sha256\": \"025cd0ea1a7badd567f7f1cd59330b1e01149b5c5094575fbd438683658bb0df\"\n },\n \"src/app/construction_phase.h\": {\n \"mode\": 420,\n \"sha256\": \"a4d39994096683a1144eb20282b205cf71e2045873cc15b53bdac214ab1e9a5e\"\n },\n \"src/app/event_phase.cpp\": {\n \"mode\": 420,\n \"sha256\": \"80717fa7c7f108004d5250f12b6c994752a1a55d7f32c7d3ebf29f2869118c90\"\n },\n \"src/app/event_phase.h\": {\n \"mode\": 420,\n \"sha256\": \"54077268fe4705270dc06bdc46a6fd9384fb5e0d36da19e55ea149b478d8cf34\"\n },\n \"src/app/growth_phase.cpp\": {\n \"mode\": 420,\n \"sha256\": \"5924d2641fc98d902b56a3e6417d7a57d70c1564718951b098e7d14376ebc4e3\"\n },\n \"src/app/growth_phase.h\": {\n \"mode\": 420,\n \"sha256\": \"8222ef811abff161c8f891a331a52e527de54fbf468949d1e0e188adc473ae3b\"\n },\n \"src/app/main.cpp\": {\n \"mode\": 420,\n \"sha256\": \"adfd7dd177439bfd57509532bcf0f37779281ae9309daa93efe1ada3ef3f57a7\"\n },\n \"src/app/observed_phase.cpp\": {\n \"mode\": 420,\n \"sha256\": \"31fb99678d60de6901b4bb1b251abe2421453264653cf5f7bd297a376c2b23f3\"\n },\n \"src/app/observed_phase.h\": {\n \"mode\": 420,\n \"sha256\": \"f88fc22a5cb21a43e196d7fae09446126635d3284e6b398bca234f265234b693\"\n },\n \"src/app/phase_catalog.cpp\": {\n \"mode\": 420,\n \"sha256\": \"e3da16e6d499b7836953251d940ce171792ada208156ca583277298f305fc316\"\n },\n \"src/app/phase_catalog.h\": {\n \"mode\": 420,\n \"sha256\": \"da6fff506002079d8277358d0095981dc260449dc19677a533ef25ab709aed87\"\n },\n \"src/app/report.cpp\": {\n \"mode\": 420,\n \"sha256\": \"da3feb6043f6e68cb9ea763f7242ac153a5944c59f448284faf34c64ad6b9228\"\n },\n \"src/app/report.h\": {\n \"mode\": 420,\n \"sha256\": \"0495d164458ddb7187ce3105f82cee06cf9cf6c5b73ed8cb6e434e1d2e0f8481\"\n },\n \"src/app/script_phase.cpp\": {\n \"mode\": 420,\n \"sha256\": \"61eeeeb7eac3145cee938ccfc564b231b6968ce7926fb9599c136134f0d5ea91\"\n },\n \"src/app/script_phase.h\": {\n \"mode\": 420,\n \"sha256\": \"e52006ff939fa945870fafdc2412ba67e3d5e1cc2aa51c0ca0a884ce630aa1b7\"\n },\n \"src/app/trade_raid.cpp\": {\n \"mode\": 420,\n \"sha256\": \"07d6bb904e655bb644ff6df2e417adb448487bb67acb62240ec5ecc978eabebf\"\n },\n \"src/app/trade_raid.h\": {\n \"mode\": 420,\n \"sha256\": \"10e0b1460eb7810f1fcd61e67d47333373f06bdacf5a11372958a84a91084e52\"\n },\n \"src/app/treaty.cpp\": {\n \"mode\": 420,\n \"sha256\": \"317463fc0e2a6ca7eaa4e2f096c3821655a4623de4085af44d951ed500837575\"\n },\n \"src/app/treaty.h\": {\n \"mode\": 420,\n \"sha256\": \"836395a85868cbd6b7fda8f1d304128fd7cc6952aff37003e8e119a5ce0251f9\"\n },\n \"src/app/turn.cpp\": {\n \"mode\": 420,\n \"sha256\": \"02d90c5fdf831ba58aae828957c1a601d831bce92bdde286dcbe2ff29018eeef\"\n },\n \"src/app/turn.h\": {\n \"mode\": 420,\n \"sha256\": \"85c87aab5c5b5ad5a6a34cc9db710b1cf77dec1a7145ba1e0b5e17fff9a6a237\"\n },\n \"src/app/turn_record.cpp\": {\n \"mode\": 420,\n \"sha256\": \"e1eb0b253e964ab4f8be1333f81e193ac64109544da384cbdf21858cbf931e4d\"\n },\n \"src/app/turn_record.h\": {\n \"mode\": 420,\n \"sha256\": \"78d8d2948bd04bff5e7d2c55955b726f1cd7552a765e608e390209e03856f76d\"\n },\n \"src/app/visibility_phase.cpp\": {\n \"mode\": 420,\n \"sha256\": \"34d9df699af3e57823ec8457c442408da854028f9b95db5820171caad0823131\"\n },\n \"src/app/visibility_phase.h\": {\n \"mode\": 420,\n \"sha256\": \"60db50f5b98c5edafc86a33f982a7773acc291c1a18f9cf23323e53ebadcde27\"\n },\n \"src/game/ai/CMakeLists.txt\": {\n \"mode\": 420,\n \"sha256\": \"f51509a2699f02ecab9faa1f75feaa38c299e6bbbe08bfbe5e8e86722037f6eb\"\n },\n \"src/game/ai/agent.cpp\": {\n \"mode\": 420,\n \"sha256\": \"e1bbddc3deb797d62ae9c2b24bc811ec9379699992dd838694bd5eadc73feef7\"\n },\n \"src/game/ai/agent.h\": {\n \"mode\": 420,\n \"sha256\": \"48aa26f32d52a3f8f4e37ed5c6986b1e87a8fe1e780d5314514eb5c75b8bc244\"\n },\n \"src/game/ai/apply_order.cpp\": {\n \"mode\": 420,\n \"sha256\": \"122ffea1090382fd01bc505fd30c59557dfec2c9846609d00da6e80109da2253\"\n },\n \"src/game/ai/apply_order.h\": {\n \"mode\": 420,\n \"sha256\": \"a3b7a1ca26243ba0fdd801b78978175db6f76e297a72876fa0a35e12f38e09b3\"\n },\n \"src/game/ai/command_capture.cpp\": {\n \"mode\": 420,\n \"sha256\": \"cb9a1d37af9f66e78d368e03aeabec01e4d48f76aaa30348a51f4c70a915e4ec\"\n },\n \"src/game/ai/command_capture.h\": {\n \"mode\": 420,\n \"sha256\": \"921599e5b2aa8b773db00134618efde687c7d9ba739abd787ec7666f4cfeb78f\"\n },\n \"src/game/ai/orders.cpp\": {\n \"mode\": 420,\n \"sha256\": \"1b775eb1a030bc6e81e5b7702cbf8ad56288860276e8a0475da66f7367542640\"\n },\n \"src/game/ai/orders.h\": {\n \"mode\": 420,\n \"sha256\": \"c2a3b8fe1a7c46a1c1104bc87be8696d9f0782cc304d27cb96d0ec6b182f12ae\"\n },\n \"src/game/ai/tasks.cpp\": {\n \"mode\": 420,\n \"sha256\": \"b05878ccd94c375aac8723c8ea9499f77b98fb94acc5a75a15fa1948dbe83c76\"\n },\n \"src/game/ai/tasks.h\": {\n \"mode\": 420,\n \"sha256\": \"b1de4f89c1679ccfdeaa8b852cb2ce407b71dcd1bffacf97df389a69f6ae3a5d\"\n },\n \"src/game/ai/turn_order.cpp\": {\n \"mode\": 420,\n \"sha256\": \"858b12c51c4509e16a22a6c080d1c6b47bd23d2b8a11f84a48d34f24c4635f22\"\n },\n \"src/game/ai/turn_order.h\": {\n \"mode\": 420,\n \"sha256\": \"3e76710928fc2df52fd8312abfb8f23a2ce162f8e0856f46672a4f46b5b4384f\"\n },\n \"src/game/combat/CMakeLists.txt\": {\n \"mode\": 420,\n \"sha256\": \"4b3a05c45360e312d6c1d96c1f05a60437d19d2046257835e0d6c70ecc4ce115\"\n },\n \"src/game/combat/retreat.cpp\": {\n \"mode\": 420,\n \"sha256\": \"eede86a4d25289dfc9132d5776b11114a109179e5aa10f2b985035e5b22d7a1f\"\n },\n \"src/game/combat/retreat.h\": {\n \"mode\": 420,\n \"sha256\": \"5fc3e002a5f1944f29c74f862ff942b894e40e88afafd52358373ada36644d7d\"\n },\n \"src/game/config/CMakeLists.txt\": {\n \"mode\": 420,\n \"sha256\": \"c746021654505c92be333cefb9df994431679d40d8d654b937feb950684830f7\"\n },\n \"src/game/config/config_loader.cpp\": {\n \"mode\": 420,\n \"sha256\": \"d903ba06747e5b7d66400d03ee1f0a9896bf4268bb200dec0b5c8599dbd3d3a1\"\n },\n \"src/game/config/config_loader.h\": {\n \"mode\": 420,\n \"sha256\": \"fda71dee1a4e2b896760e9ac344768e176ea4f0a08609c7d651033a1ee698085\"\n },\n \"src/game/config/manifest_loader.cpp\": {\n \"mode\": 420,\n \"sha256\": \"dbe33dc5ae03db18f3b2c01b48cc1fced10f2cca599270c0a028321a7d7dd7c6\"\n },\n \"src/game/config/manifest_loader.h\": {\n \"mode\": 420,\n \"sha256\": \"68e508b9e6d1222d980b22ae826b127693fdf0821b6539ed9e62a8ec031aa5b5\"\n },\n \"src/game/config/msvc_sort.h\": {\n \"mode\": 420,\n \"sha256\": \"17fcb13bb49a634c80be38299617c6c16fd8addedfa88c53d67242c90b811716\"\n },\n \"src/game/data/CMakeLists.txt\": {\n \"mode\": 420,\n \"sha256\": \"677ba0dd0ebb8176f4e7c41d5550f2ccedd56d49e7e4acb1eb0a7970e9e98a51\"\n },\n \"src/game/data/block.cpp\": {\n \"mode\": 420,\n \"sha256\": \"f61312708c715ce525ed1a01e71f1446d31fc96ca1cc51f5bd863cac51702200\"\n },\n \"src/game/data/block.h\": {\n \"mode\": 420,\n \"sha256\": \"f14155dfca5fd270ad6b4d462458aa8cd5c5edf5e19da4df492ee2907e99eccc\"\n },\n \"src/game/data/catalog.cpp\": {\n \"mode\": 420,\n \"sha256\": \"7799ad3b31d43236cacbc51c3ab086265927f98b1346005a8adfed2796178ebc\"\n },\n \"src/game/data/catalog.h\": {\n \"mode\": 420,\n \"sha256\": \"80223146bcdbf4808776f974df7e5f46b120a021979a22f50b5ce2d74ec16d6e\"\n },\n \"src/game/data/common.cpp\": {\n \"mode\": 420,\n \"sha256\": \"e58ba046844be11c61f7f7e501829b48b4f16e7c0ab78f10fcf9189c133cf040\"\n },\n \"src/game/data/common.h\": {\n \"mode\": 420,\n \"sha256\": \"d1ac8375c1be133a98a383e01598f393f194e1bd9790d1c1230bc6121a45a187\"\n },\n \"src/game/data/fields.h\": {\n \"mode\": 420,\n \"sha256\": \"4209df368ad776b3c24350246acf47ad874fcbbe292fb16f9ca7dacaef2f08fb\"\n },\n \"src/game/data/shipsection.cpp\": {\n \"mode\": 420,\n \"sha256\": \"82d5ba9be2a446e50934b0b9a03b16839bd3acd1a967d9441180a1baaa271264\"\n },\n \"src/game/data/shipsection.h\": {\n \"mode\": 420,\n \"sha256\": \"bcf100f83691226c4993dd7866b67a0b48d9b4bc6841463fbf07f0f26bf9dca0\"\n },\n \"src/game/data/strings.cpp\": {\n \"mode\": 420,\n \"sha256\": \"6d983d3a4cb4284215301409587136fb765a5e6a4c9f4b988e01d710c0815f59\"\n },\n \"src/game/data/strings.h\": {\n \"mode\": 420,\n \"sha256\": \"fb292bd472ed68eb4a5e93484f3f92d8a0ae8661e6a61ca4b417ab889c508055\"\n },\n \"src/game/data/techtree.cpp\": {\n \"mode\": 420,\n \"sha256\": \"2ac6e39faeef808c97375f3b8a3ee219fcab8cc09921f0ed8d82eef7374eb9ea\"\n },\n \"src/game/data/techtree.h\": {\n \"mode\": 420,\n \"sha256\": \"504946c255405ab28d20d0ed6c095b3b63f0e6865afe0e8bb0707e607c363007\"\n },\n \"src/game/data/turrets.cpp\": {\n \"mode\": 420,\n \"sha256\": \"ce7db50ef10825e168fee2bf57c4b6038dd1a356be7ada9ed6a4f6a4f31b07a4\"\n },\n \"src/game/data/turrets.h\": {\n \"mode\": 420,\n \"sha256\": \"f01603ad32b0ffdf891c88cc54c39a725c6a436f8dda79ac23e7505e59853c64\"\n },\n \"src/game/data/weapon.cpp\": {\n \"mode\": 420,\n \"sha256\": \"accb5aab2081babb26443cd257f292909e19440c40346e098144148922f5d3f6\"\n },\n \"src/game/data/weapon.h\": {\n \"mode\": 420,\n \"sha256\": \"63aeb670ae7b8a1fd6daa35ed60ebe41a87f62a6ec2a12f44b13f9052c55b009\"\n },\n \"src/game/design/CMakeLists.txt\": {\n \"mode\": 420,\n \"sha256\": \"42692f7917d99fb5b9e392c2d0f1d908b2bc5c61fc2e5687fddbd665dafe0bef\"\n },\n \"src/game/design/defaults.cpp\": {\n \"mode\": 420,\n \"sha256\": \"8efa0b79646525375739a1acfe77e75d5ae6b669d1ecaa01f49f3f5183caf528\"\n },\n \"src/game/design/defaults.h\": {\n \"mode\": 420,\n \"sha256\": \"20af056628f362a4d5ad7ba6277135697718197ec6844ae0ae85bf06d4cd818b\"\n },\n \"src/game/design/design.cpp\": {\n \"mode\": 420,\n \"sha256\": \"e166281c52a6d92fed8810b38bd736cbd2a324f15d290a39a539d01ff35ead20\"\n },\n \"src/game/design/design.h\": {\n \"mode\": 420,\n \"sha256\": \"7e936c78ca10c3a49470da67f1659cf4ee323d14d50b5b2c1ada08edfa8f6997\"\n },\n \"src/game/design/hull.cpp\": {\n \"mode\": 420,\n \"sha256\": \"554b0ef6955ac230c7eca29ea2d94d60b5fbc91f34d9ff457091577c8602268a\"\n },\n \"src/game/design/hull.h\": {\n \"mode\": 420,\n \"sha256\": \"997018e59c9d78ee1da7e7cb9561b94b76befacbe348a4ce3301c5f22b582461\"\n },\n \"src/game/design/rules.cpp\": {\n \"mode\": 420,\n \"sha256\": \"a623984f9ab40c354320051fec00bab2c7e3728c2c90082b3b8051294b906319\"\n },\n \"src/game/design/rules.h\": {\n \"mode\": 420,\n \"sha256\": \"70a8a42fe82e9805cbb957717688ab9f9eb3438226f6e0d696ef5f7a51529229\"\n },\n \"src/game/design/stats.cpp\": {\n \"mode\": 420,\n \"sha256\": \"c05f420a00026289be8693c0d80bbd2354ce354a91a78459cfc8e70467326c54\"\n },\n \"src/game/design/stats.h\": {\n \"mode\": 420,\n \"sha256\": \"ba0a5d3bcc98f5c3e64579d42da70bfdf563773ce2fe1e6bfa2b36b14c453fe5\"\n },\n \"src/game/effects/CMakeLists.txt\": {\n \"mode\": 420,\n \"sha256\": \"2e20f138f98bc69653c8360a26f99f3f43f35beedea5e90dfd7e9721e7550f89\"\n },\n \"src/game/effects/tech_effects.cpp\": {\n \"mode\": 420,\n \"sha256\": \"40358c2af37543ca3ab09b4d0433cdb4b0d2d212b45f648739cc86e979501604\"\n },\n \"src/game/effects/tech_effects.h\": {\n \"mode\": 420,\n \"sha256\": \"ef70addf2caf1e3abf36ac9d878a8db37d2adbac370957f5b6a0b5825564a0d6\"\n },\n \"src/game/effects/tech_id.cpp\": {\n \"mode\": 420,\n \"sha256\": \"11cd652e81a52e86d72541a5c3de77bb50de3d31226272e0d1856e5a15b7f9a6\"\n },\n \"src/game/effects/tech_id.h\": {\n \"mode\": 420,\n \"sha256\": \"f37752250c80c9c75ef8e144e4646dc1290a2cc8ce72d9a37949c6408996df86\"\n },\n \"src/game/events/CMakeLists.txt\": {\n \"mode\": 420,\n \"sha256\": \"9b1f14a3801a991ba065e0e39ae2e3fa3966018e8a98fcceeddeaca3909328e2\"\n },\n \"src/game/events/event_log.cpp\": {\n \"mode\": 420,\n \"sha256\": \"3b131879ec5e81cd1ba2bb0cbdfa6e05775ed77684f4ed7a8f5cfae87da1e7b1\"\n },\n \"src/game/events/event_log.h\": {\n \"mode\": 420,\n \"sha256\": \"2ff415b1120ca3f28421006a566280fb977027cfa3f209bdba0986350376a953\"\n },\n \"src/game/events/research_events.cpp\": {\n \"mode\": 420,\n \"sha256\": \"9520b20eba2a2b4bd5925f13b420d526fc610d06aae7ffad314e3002c4f5a253\"\n },\n \"src/game/events/research_events.h\": {\n \"mode\": 420,\n \"sha256\": \"b87340c6b14e9de97e5bc0c5a4cbd74e54bab2831c60edf88c0e42ff5218ea22\"\n },\n \"src/game/nav/CMakeLists.txt\": {\n \"mode\": 420,\n \"sha256\": \"79cc0ba25c6d49f7784663ace033d01ab3d85a5d8015fe2f466f8f1a3065983a\"\n },\n \"src/game/nav/pathplan.cpp\": {\n \"mode\": 420,\n \"sha256\": \"04cfe8fca5be565f5443c8f1402eb0072221dbd63f70855e35b3eeea752f1775\"\n },\n \"src/game/nav/pathplan.h\": {\n \"mode\": 420,\n \"sha256\": \"28b51f737b458679888e555d985b9e8d41adf8ba91fa0980b5e83668758c86e7\"\n },\n \"src/game/sim/CMakeLists.txt\": {\n \"mode\": 420,\n \"sha256\": \"a9d99f304b2afc98764b423b3e6cba3ecd4193ae47b743bff046e093aa9aa633\"\n },\n \"src/game/sim/colony.cpp\": {\n \"mode\": 420,\n \"sha256\": \"e0f0bf15d87b6ac2e92053cbfe0869c0dbf9465d90a9bae5456bb46883423b77\"\n },\n \"src/game/sim/colony.h\": {\n \"mode\": 420,\n \"sha256\": \"357dce21440140a6cf836a3c12175ebb5bb6706c37d5ecd315a4ee4937725b47\"\n },\n \"src/game/sim/construction.cpp\": {\n \"mode\": 420,\n \"sha256\": \"8cf4792f487162ca3599f16f0e92d73b4c9549046044548c5aecf202dd564130\"\n },\n \"src/game/sim/construction.h\": {\n \"mode\": 420,\n \"sha256\": \"a7f201101ad704f1994f809259ad60f780760fa36174d99a1ccd9299447f5460\"\n },\n \"src/game/sim/economy.cpp\": {\n \"mode\": 420,\n \"sha256\": \"1e0b17b589496a6139e8ca10fe20553050be7c965a02daf8b520dd5020412d89\"\n },\n \"src/game/sim/economy.h\": {\n \"mode\": 420,\n \"sha256\": \"6f3e33e803bb49367d4cee3c8ef6186f04b79e7cf901047fc48d933108ab6d2a\"\n },\n \"src/game/sim/movement.cpp\": {\n \"mode\": 420,\n \"sha256\": \"80c64b2148304b84683cf3860ced1354f5c29c923bbc50cc5001030dd85c2cd2\"\n },\n \"src/game/sim/movement.h\": {\n \"mode\": 420,\n \"sha256\": \"9a6b2b4960428634d8004cd5694ed6a7a10ab28fd9c0e2a9824ede3e201e9441\"\n },\n \"src/game/sim/numeric.h\": {\n \"mode\": 420,\n \"sha256\": \"88f715192ea322ace4eea13ab5ae55f7f41600262025208e468b5259220522c2\"\n },\n \"src/game/sim/observed.cpp\": {\n \"mode\": 420,\n \"sha256\": \"43d29a9fe1195dcc0b7e6101ea05bfd076f03636f9f68de473539c83db0ddd22\"\n },\n \"src/game/sim/observed.h\": {\n \"mode\": 420,\n \"sha256\": \"0224b5bf341f30ff0e98d910547261b6732bdc0c5339b520e26fc51939c1269f\"\n },\n \"src/game/sim/player_turn.cpp\": {\n \"mode\": 420,\n \"sha256\": \"beb1b2ed434df3727e676ac56e751beff87fa98e4a42e4657cc54d41025773a2\"\n },\n \"src/game/sim/player_turn.h\": {\n \"mode\": 420,\n \"sha256\": \"f24f8f5e161486575cd341c2f5bfed46fa6983263edcf2320e9c24860b4be51a\"\n },\n \"src/game/sim/research.cpp\": {\n \"mode\": 420,\n \"sha256\": \"95f2d325544ee018ec8d0f945e91b4172f6ba406f95e19f86c4fb9aac6b22a89\"\n },\n \"src/game/sim/research.h\": {\n \"mode\": 420,\n \"sha256\": \"e27a311e977afb2e01242938dc8d928e9a67d1f761965e191cf907e05c1c86e9\"\n },\n \"src/game/sim/rng.h\": {\n \"mode\": 420,\n \"sha256\": \"f7e5bbced3dbd37deb49a00b52d05f7c751501d654dabd645ecff7447355929c\"\n },\n \"src/game/sim/scriptobjects.cpp\": {\n \"mode\": 420,\n \"sha256\": \"a4f9a1b49e4ba22a88726efbbea2f355b40a3c006734d9150d509a344720a4d2\"\n },\n \"src/game/sim/scriptobjects.h\": {\n \"mode\": 420,\n \"sha256\": \"210d0eb51780df70a9bca133664429589c03ea33e4524e2c182801d4b4a5c74b\"\n },\n \"src/game/sim/species.h\": {\n \"mode\": 420,\n \"sha256\": \"83b44c0600b99c5acb72a3484bb0708cfba765cdf594aede596a3c47d5ee6298\"\n },\n \"src/game/sim/techgraph.cpp\": {\n \"mode\": 420,\n \"sha256\": \"81f8f1120eb1fa4a77752bd2e0917df3dd76372461416526ae510bd697944ef8\"\n },\n \"src/game/sim/techgraph.h\": {\n \"mode\": 420,\n \"sha256\": \"b2fc90666080a6b7f27dc9290eef17774d57742c2a1f9e1f77d94c7fa5689f6e\"\n },\n \"src/game/sim/tuning.h\": {\n \"mode\": 420,\n \"sha256\": \"4acfad4098de951cc3a94ca25a2f200e96caba1836bf7441de5a2b458c022194\"\n },\n \"src/game/sim/visibility.cpp\": {\n \"mode\": 420,\n \"sha256\": \"25f86a34f9a98d2439672283a446ba1804973dae3f6d9aa3692342b05f3a3ac0\"\n },\n \"src/game/sim/visibility.h\": {\n \"mode\": 420,\n \"sha256\": \"783896489a2a9ec8bce617b141bfb631e8ef92f958be7b5c2ca64fd75774471f\"\n },\n \"src/mars/parse/CMakeLists.txt\": {\n \"mode\": 420,\n \"sha256\": \"76c290b786a3e73387ec8c574fd5a0dbeb6e629adbe970426314f16497f59fa9\"\n },\n \"src/mars/parse/blocks.cpp\": {\n \"mode\": 420,\n \"sha256\": \"e60baa8127b21cf6eb6c8e2aa02c6a72c6403dbc29e8480ff658bf184266675b\"\n },\n \"src/mars/parse/blocks.h\": {\n \"mode\": 420,\n \"sha256\": \"1e8b76919a584d1d7fb01c5ff5e3a7173e8456eca892d61f0c6b7bb8f02f33b1\"\n },\n \"src/mars/parse/effect.cpp\": {\n \"mode\": 420,\n \"sha256\": \"beb76a841a3d42dbc157413384ff1a0312a7068d6b22020eadcee2e1cbbc81f9\"\n },\n \"src/mars/parse/effect.h\": {\n \"mode\": 420,\n \"sha256\": \"aaa5c83f2d8eef24667bf05d0f71b2a346f2fce09dc9a45d7a5197c894922e44\"\n },\n \"src/mars/parse/result.h\": {\n \"mode\": 420,\n \"sha256\": \"58cff456e353550abcd0f52e031d9d70f2b7a975f4762cfccc64eb6bc748dbd9\"\n },\n \"src/mars/parse/script.h\": {\n \"mode\": 420,\n \"sha256\": \"69a493268c47a08672694489a51c3ff0a7f9aa870e5ae5a93d47ba033cf21ad3\"\n },\n \"src/mars/parse/value.cpp\": {\n \"mode\": 420,\n \"sha256\": \"712133e4d725649f5461e6a46bac6842b0751ac3fb7e1c468f826638ec58f623\"\n },\n \"src/mars/parse/value.h\": {\n \"mode\": 420,\n \"sha256\": \"60d692648dab7e3e216c8d9e6ef212592ba1df1a98260b1b4599354742947b38\"\n },\n \"src/mars/rng/CMakeLists.txt\": {\n \"mode\": 420,\n \"sha256\": \"dceb4bc0fb35c95a12ed9aa36380e79aa75641b15ecc06e4289d39824087e2dc\"\n },\n \"src/mars/rng/mt19937.cpp\": {\n \"mode\": 420,\n \"sha256\": \"34820781666f8535889f4919c42eb335644683cc512ffc22b59ce331a8cbaac5\"\n },\n \"src/mars/rng/mt19937.h\": {\n \"mode\": 420,\n \"sha256\": \"8906d5b330023134e4bd5669c2463567ef7be900e2266a5a430ecda3fd47b188\"\n },\n \"src/mars/stream/CMakeLists.txt\": {\n \"mode\": 420,\n \"sha256\": \"95ffbb0c519e55b7423ab048a3019e295b7ef3a3e9506044ef2e68569df9601a\"\n },\n \"src/mars/stream/archive.h\": {\n \"mode\": 420,\n \"sha256\": \"84d9ae2bb3d6f444b3933b3816cafd12caee8619d2219f19cd10d32cfad01d2e\"\n },\n \"src/mars/stream/bytes.h\": {\n \"mode\": 420,\n \"sha256\": \"9f5869952c9d6b925db32995a417ba292a0c1a672fc3850400150afb8163b3f1\"\n },\n \"src/mars/stream/dump.cpp\": {\n \"mode\": 420,\n \"sha256\": \"1b5bba86b2f85b1718276f8db557601320ab8a165d5fbfe93e51219cca5a1c16\"\n },\n \"src/mars/stream/dump.h\": {\n \"mode\": 420,\n \"sha256\": \"a69af300ae7083fb0a5362edbe7eecd5273c8807884aff9fbedd7ae606c7fc4f\"\n },\n \"src/mars/stream/gzip.cpp\": {\n \"mode\": 420,\n \"sha256\": \"20d71fd50bd637f78e7ebb5217bc6607ebc257535cc4720e640e4badb72f1644\"\n },\n \"src/mars/stream/gzip.h\": {\n \"mode\": 420,\n \"sha256\": \"6bce52c615eb120999adb1a6f7f06baa813a033c28e02e6d79ce77f5b7a929c9\"\n },\n \"src/mars/stream/node.h\": {\n \"mode\": 420,\n \"sha256\": \"eb43054c8592db107557979c7fc8612dc0646ba5d62f154b9b7f96a37ba2e860\"\n },\n \"src/mars/stream/probe.h\": {\n \"mode\": 420,\n \"sha256\": \"6411d0976d1e785e8c32af6ecfe1a797c0a9aa02314e5e42fae3ed7b3449ae13\"\n },\n \"src/mars/stream/reader.cpp\": {\n \"mode\": 420,\n \"sha256\": \"90f19cbcdb0fc50795895ea1eff09cd6c0ab3069095c49b276f3894e3d6bcbb3\"\n },\n \"src/mars/stream/reader.h\": {\n \"mode\": 420,\n \"sha256\": \"900508d97be1cbe566d77f2c91755d3db387535cd9574e41704b6d940daa1ff4\"\n },\n \"src/mars/stream/save.cpp\": {\n \"mode\": 420,\n \"sha256\": \"6db367b3ea570a4d0ee831160e3f44cef380f58de163b9d9205ca7449e51e049\"\n },\n \"src/mars/stream/save.h\": {\n \"mode\": 420,\n \"sha256\": \"b3a411600d98b42e9014e1fc3cbc3eac5f32f4393e9f72036d3d840c802bb469\"\n },\n \"src/mars/stream/savedump_main.cpp\": {\n \"mode\": 420,\n \"sha256\": \"8dc687f009d9f455e9bfa4019f03df72e058cebbb3e9ae5bcbb308285470208c\"\n },\n \"src/mars/stream/schema.h\": {\n \"mode\": 420,\n \"sha256\": \"b1cd64bc43076a3e5893239bd2eb5c216e7293ee541322ef74fb106928183a05\"\n },\n \"src/mars/stream/shapes.h\": {\n \"mode\": 420,\n \"sha256\": \"45ee379ff8100b6bc27427a2580d7aae19ff3d5d0aa27f682d156ae6a92d0a6d\"\n },\n \"src/mars/stream/writer.cpp\": {\n \"mode\": 420,\n \"sha256\": \"54804b06266e34793f5294f9a96d2939d641915a0f60fc4e3b4170bfcea6e083\"\n },\n \"src/mars/stream/writer.h\": {\n \"mode\": 420,\n \"sha256\": \"921cd44ea30e0b9944825b1d2caafc46edc8f2c23506c807050ed9208a397340\"\n },\n \"src/mars/text/CMakeLists.txt\": {\n \"mode\": 420,\n \"sha256\": \"dccb93b37c21c9b3c3b35a50ca8de55c9f00df2a9e0a33b6c36d659a75455436\"\n },\n \"src/mars/text/csv.cpp\": {\n \"mode\": 420,\n \"sha256\": \"b190e12b86a3f416a72c110caf9e0b2d98cdd33851d2fa48b55a8d7ea39279af\"\n },\n \"src/mars/text/csv.h\": {\n \"mode\": 420,\n \"sha256\": \"3b7ec6d0884e95bfab869c253eddc30a802602bd1f230cc69461cb9cf3c17917\"\n },\n \"src/mars/text/flat_kv.cpp\": {\n \"mode\": 420,\n \"sha256\": \"b98d3b7345489f0b149e56cd15436fd6199e4cf00d7ce3f8b8b31fcdecb90e47\"\n },\n \"src/mars/text/flat_kv.h\": {\n \"mode\": 420,\n \"sha256\": \"d6765cd42cad46597b6e36e9d08baf6819f7796442293043d5ff686e2376d292\"\n },\n \"src/mars/text/lines.h\": {\n \"mode\": 420,\n \"sha256\": \"b9a16ccf0dc7bbf36100e0b66c80bcb818590b161f820d3c67d55bccff1c2c65\"\n },\n \"src/mars/text/manifest.cpp\": {\n \"mode\": 420,\n \"sha256\": \"4da1bb615902ec61883e561f5dd375d89442f7b9046fbc864f6308f27921087e\"\n },\n \"src/mars/text/manifest.h\": {\n \"mode\": 420,\n \"sha256\": \"dd7351a7a6a144e97f3a3b6a25d22d1518a099e95deadb8965cedb201601e102\"\n },\n \"src/mars/text/result.h\": {\n \"mode\": 420,\n \"sha256\": \"7f817033811dff6fcef1d5b76f88922cb0392afb4359549876cd017a14755606\"\n },\n \"src/mars/text/value.cpp\": {\n \"mode\": 420,\n \"sha256\": \"94b433d78f3211e1a4dd9eb8a0a00b514cbeaf63a03e738146c56dbbfe221479\"\n },\n \"src/mars/text/value.h\": {\n \"mode\": 420,\n \"sha256\": \"d3b5c70af2f339ad27b43c38353fc7a2da83388854b02000fa1b6d9a4e1dfc07\"\n },\n \"src/mars/vfs/CMakeLists.txt\": {\n \"mode\": 420,\n \"sha256\": \"630d5d4707ef3c0f24a414815cc23158853fe9d5aef429d6619abc1c433b3786\"\n },\n \"src/mars/vfs/path.cpp\": {\n \"mode\": 420,\n \"sha256\": \"e1f3bbab1f90b0132aec24d8c5997dafab69ec72f01f2dd2fa63c91f83ef7aeb\"\n },\n \"src/mars/vfs/path.h\": {\n \"mode\": 420,\n \"sha256\": \"043091008f2cab7c88185de63e7aae63ad9b0e384109f5b6fd8c31666c4e2033\"\n },\n \"src/mars/vfs/result.h\": {\n \"mode\": 420,\n \"sha256\": \"19115bf1c5b3bf01da078a49209230053043610b342b01cdaaed126e2d3ea748\"\n },\n \"src/mars/vfs/vfs.cpp\": {\n \"mode\": 420,\n \"sha256\": \"ab8272cd14b4b55e7af13f5383d6106f0b1caabdde57e69c1d0fb5b434d31cba\"\n },\n \"src/mars/vfs/vfs.h\": {\n \"mode\": 420,\n \"sha256\": \"2484231baa64ede6fc35eb0f49e1fd7a3373d5c559f016d5adfb9fc433619d90\"\n },\n \"src/mars/vfs/zip_archive.cpp\": {\n \"mode\": 420,\n \"sha256\": \"d66e70300539bd42bcf193683df7c34d2b0b03146fd79f0a180385ead1559e87\"\n },\n \"src/mars/vfs/zip_archive.h\": {\n \"mode\": 420,\n \"sha256\": \"0ffbd90f7919741e63e86e14d0f87d247bc2cd16d2db54771071553249ad935d\"\n },\n \"src/shim/binkw32.def\": {\n \"mode\": 420,\n \"sha256\": \"fb500fd9f9ecbff44123b89fc24cec72e91fec4c4430ce12a69efc06b20de235\"\n },\n \"src/shim/fpu_force.cpp\": {\n \"mode\": 420,\n \"sha256\": \"c4b4e41a7ef81139c652ba8164ed8bb0d809b42182f0d0f048b9a9e63bebe59d\"\n },\n \"src/shim/fpu_force.h\": {\n \"mode\": 420,\n \"sha256\": \"75bac23bc45510961f6b10d21c47e72d8dc0d3971a3ab30b795cad1d25332c06\"\n },\n \"src/shim/hooks/ai_orders.cpp\": {\n \"mode\": 420,\n \"sha256\": \"091ed885012fffa0e02b83c53e547483dfdeaf1094933726e0291fff0a99e434\"\n },\n \"src/shim/hooks/ai_orders.h\": {\n \"mode\": 420,\n \"sha256\": \"6e775b3f946f2eaf10dc2e236a3f3c7b9311ed4e82cd4be1ca30e6c62d49d053\"\n },\n \"src/shim/hooks/ai_rng.cpp\": {\n \"mode\": 420,\n \"sha256\": \"b8fec711cb620561c8f4854e72c3fb0d73013c9b1cd69fa63fc05dd3d2f60289\"\n },\n \"src/shim/hooks/ai_rng.h\": {\n \"mode\": 420,\n \"sha256\": \"1306f4d3c8071121b06c75232efa5c50b155c1f8752fcae852ee8e5497ce7d08\"\n },\n \"src/shim/hooks/ai_visit.cpp\": {\n \"mode\": 420,\n \"sha256\": \"cd69811074820810edb1ed3779ca08bd99fea620b162d80a0395d35e8db7fc31\"\n },\n \"src/shim/hooks/ai_visit.h\": {\n \"mode\": 420,\n \"sha256\": \"8315b433319f680e80a154409124355ad24842e9a0cdef5c8aa6d12422971189\"\n },\n \"src/shim/hooks/budget_inputs.cpp\": {\n \"mode\": 420,\n \"sha256\": \"fa50fb74a3874886cf8aeb4012b9fd9a5a43ce38ab3c543ee425002ca32fd46b\"\n },\n \"src/shim/hooks/budget_inputs.h\": {\n \"mode\": 420,\n \"sha256\": \"56e2f95930ff420820a3464162fde74ac0a3ff2e1dc8b493729fed342e4a6548\"\n },\n \"src/shim/hooks/colony_inputs.cpp\": {\n \"mode\": 420,\n \"sha256\": \"7aa9191ec6292d765fd06c99ff1f2ae2e09a65fb1f238dd2727f28bd465dd46e\"\n },\n \"src/shim/hooks/colony_inputs.h\": {\n \"mode\": 420,\n \"sha256\": \"87ec765e14106631e3f6423450e6e01d5bb21060fa91f83c267db215ef4986d9\"\n },\n \"src/shim/hooks/colony_turn.cpp\": {\n \"mode\": 420,\n \"sha256\": \"b82616c7b9b05e96e7f4c40d853c686884b517a5424413686d61799df9d45420\"\n },\n \"src/shim/hooks/colony_turn.h\": {\n \"mode\": 420,\n \"sha256\": \"a9013cc2e92998ff56ac0c8cc36dc42033fbe3072ee88b86882a1dd4dd0357d6\"\n },\n \"src/shim/hooks/compute_budget.cpp\": {\n \"mode\": 420,\n \"sha256\": \"76a24f0daf1f49cfabbed13753c65754e26bfcc4f672791b37e926f82b5c1906\"\n },\n \"src/shim/hooks/compute_budget.h\": {\n \"mode\": 420,\n \"sha256\": \"f308717e44e12151cfb20a6a0cf11ff8e99ecc9c17ef04783198feed05a24caa\"\n },\n \"src/shim/hooks/dictionaries.cpp\": {\n \"mode\": 420,\n \"sha256\": \"b60794256c07964eb89d5295ecb711b402112fe5f982a9215dc3a304d03a567b\"\n },\n \"src/shim/hooks/dictionaries.h\": {\n \"mode\": 420,\n \"sha256\": \"ac68fd66eb343d40ee97d6bf29c8b54f5d469a9ef8862687ae15e6ad8bdafdc0\"\n },\n \"src/shim/hooks/draw_sites.cpp\": {\n \"mode\": 420,\n \"sha256\": \"e7a1fa40262db2ed22b1dfa5ca1bd2588da07bfbab046f23afa8e86c03814d79\"\n },\n \"src/shim/hooks/draw_sites.h\": {\n \"mode\": 420,\n \"sha256\": \"0021323e918d464223d03b969d0e6992a0efac23ba84a31af901cf2ac74e9b13\"\n },\n \"src/shim/hooks/event_inputs.cpp\": {\n \"mode\": 420,\n \"sha256\": \"eeb9cc87ef5c39994b7f25d5ccfe220c4775b32a4b11471b0fc0fb81fca4362b\"\n },\n \"src/shim/hooks/event_inputs.h\": {\n \"mode\": 420,\n \"sha256\": \"c0e74aed8756b3de8ebbe5ab3d70cfa6282403efefc2d795e8f0b1b4cd44d731\"\n },\n \"src/shim/hooks/fleet_movement.cpp\": {\n \"mode\": 420,\n \"sha256\": \"f01ae7f64b1d545089b002b79c9986d2a39b97ad3995c88a8b71fa05eedb90f0\"\n },\n \"src/shim/hooks/fleet_movement.h\": {\n \"mode\": 420,\n \"sha256\": \"dbbfe50afaedad63ec45881819aa5de3907cdb411ddf8d1d3e6a5f9a386dc8af\"\n },\n \"src/shim/hooks/global_consts.cpp\": {\n \"mode\": 420,\n \"sha256\": \"87a51601e1a7d963bf841ca4e892aa79de789a050f5d783c7b5d8bbc2e96a9a1\"\n },\n \"src/shim/hooks/global_consts.h\": {\n \"mode\": 420,\n \"sha256\": \"b6ac4265ec1f02f11c342536dbc9970c13761ea68aec0a5962d0f4cd6aa5d265\"\n },\n \"src/shim/hooks/movement_inputs.cpp\": {\n \"mode\": 420,\n \"sha256\": \"0e23f86e4a8ed6c292aea8e45512931cdd06742f25c5e0d175bf0ed3b2217502\"\n },\n \"src/shim/hooks/movement_inputs.h\": {\n \"mode\": 420,\n \"sha256\": \"32904786cbb122c3c8c36faf6bd9ea5ade4cd8395e74199ec08dbcdb8019b66a\"\n },\n \"src/shim/hooks/player_turn.cpp\": {\n \"mode\": 420,\n \"sha256\": \"33bcadd7569ad13c69f5f160423c8d469bc67725ce7b944cf4b4346fb8cc7f23\"\n },\n \"src/shim/hooks/player_turn.h\": {\n \"mode\": 420,\n \"sha256\": \"a766a0d93f3860da6f8d1e0dcf110d6754cd8dfe67d867093f32e3d24e8ff0e0\"\n },\n \"src/shim/hooks/player_turn_inputs.cpp\": {\n \"mode\": 420,\n \"sha256\": \"993dce2ca771a36337c9561695995a0825746563d2e84b4458de650f3e456799\"\n },\n \"src/shim/hooks/player_turn_inputs.h\": {\n \"mode\": 420,\n \"sha256\": \"ca0d7916ca17d993aaef19be48d03076220ae15cdcc622aef52a7c6b5957ca71\"\n },\n \"src/shim/hooks/probe_entry.cpp\": {\n \"mode\": 420,\n \"sha256\": \"5faf9cf04a2cf849d2dd54ce4ad9b812120fb99741f11e9d52fed450badf0506\"\n },\n \"src/shim/hooks/probe_entry.h\": {\n \"mode\": 420,\n \"sha256\": \"f04f445863a6164d03bc9f6edcaa2e2b0108163241510f4c1dfcb0da7667d89f\"\n },\n \"src/shim/hooks/research.cpp\": {\n \"mode\": 420,\n \"sha256\": \"dacd16403f1dd5be2ef2cc42f16938977bdd0ee9283d0bca647a079ee3d28e83\"\n },\n \"src/shim/hooks/research.h\": {\n \"mode\": 420,\n \"sha256\": \"a62c4847be81ed9d10c4f5b9a876bd79898040aa11aa8764149d82db4b010a84\"\n },\n \"src/shim/hooks/rng_ledger.cpp\": {\n \"mode\": 420,\n \"sha256\": \"119d325fcda72268bdc87f7ca7af05d059d4521c4d7d40ad7426ce070865eabb\"\n },\n \"src/shim/hooks/rng_ledger.h\": {\n \"mode\": 420,\n \"sha256\": \"0d1e9c79e7601da921253e860c55d9b69c21e03a1014c49f1dd85fd0e5f70f30\"\n },\n \"src/shim/hooks/system_output.cpp\": {\n \"mode\": 420,\n \"sha256\": \"93bfb7e6ca381041d1e9830f82b8d774a63c12593fc426fd3e9198c9373be3b4\"\n },\n \"src/shim/hooks/system_output.h\": {\n \"mode\": 420,\n \"sha256\": \"62a8424c70bb8e6c3d9603ce752f6b19a3920a4a78be75718869d7dac73f3738\"\n },\n \"src/shim/hooks/tail_rng.cpp\": {\n \"mode\": 420,\n \"sha256\": \"9b2a3923d1d837399f3486650ef0e49b502837ff7df46a12df9a9e9b0d4d9d07\"\n },\n \"src/shim/hooks/tail_rng.h\": {\n \"mode\": 420,\n \"sha256\": \"b9585605e71364872db25c608012e94db2148f22e2e6fd40d4b590a83f3be92b\"\n },\n \"src/shim/hooks/tech_effect_fields.cpp\": {\n \"mode\": 420,\n \"sha256\": \"4c4d558aba3ac4e1b10e0944c867911e61daea0b4ade716760546846cebcb7b3\"\n },\n \"src/shim/hooks/tech_effect_fields.h\": {\n \"mode\": 420,\n \"sha256\": \"22b2c050f73c9de011a42dc5a52d92a1bd3b24a59f3ba3b4332d832fb1853420\"\n },\n \"src/shim/hooks/tech_effects.cpp\": {\n \"mode\": 420,\n \"sha256\": \"2a20f01a18ed30a466e2023ae023aeed8718c680cda927d2f3b463b6dbe35714\"\n },\n \"src/shim/hooks/tech_effects.h\": {\n \"mode\": 420,\n \"sha256\": \"ffbc4e8262146cd7764f0b9758fff01ce5d359b25a0f5d8c931313f32d035320\"\n },\n \"src/shim/hooks/watchpoints.cpp\": {\n \"mode\": 420,\n \"sha256\": \"15c94333f22bb592129efe3fb800ea89987045f9ebbc0e6791d4397961fd727d\"\n },\n \"src/shim/hooks/watchpoints.h\": {\n \"mode\": 420,\n \"sha256\": \"639ae42b230fb31762f50cac0422dcd5b7fda7a1a02c7739a86d1cd6eda62277\"\n },\n \"src/shim/main.cpp\": {\n \"mode\": 420,\n \"sha256\": \"eebdac7f8f69b8b95cd290c96d41c6f3f0ed5c45ccd5de54ffc790af47083b99\"\n },\n \"src/shim/shim.cfg\": {\n \"mode\": 420,\n \"sha256\": \"44ca58394455549150c3461cc888128a968b4f062807e19ef25b8eebf0bfd523\"\n },\n \"src/shim/shim.cfg.b4compare\": {\n \"mode\": 420,\n \"sha256\": \"68bed5883a75132eb5e885b4750d23c1d5734c843a32a56dc7f96d2b73fdf962\"\n },\n \"src/shim/shim.cfg.b4scout\": {\n \"mode\": 420,\n \"sha256\": \"faac0765478d88b63f371fbc307512e71fe05f2e6f97272e6e0ceb267cc6d626\"\n },\n \"src/shim/shim.cfg.b4trace\": {\n \"mode\": 420,\n \"sha256\": \"6a89cdd3cfdf53cfbaff29278fd5d0edf156ad8a525c61624b60ddb1eb0575a1\"\n },\n \"src/shim/shim.cfg.bupin\": {\n \"mode\": 420,\n \"sha256\": \"39d52ef1ccb18d4dea261b87d3f363ba45079022d1b9bc3531c552ef6df80ec2\"\n },\n \"src/shim/shim.cfg.cbcapture\": {\n \"mode\": 420,","lineStart":1,"lineEnd":1215,"totalLines":1216,"truncated":true}},"title":"campaign/runtime/runs/run-df1472c13f31db3a4d5361f0.json","time":{"start":1788991312013,"end":1788991312047}},"metadata":{"openai":{"itemId":"fc_05e6fc1177bacad4016aa1d74f06c887d18b9cf2dce66db825"}},"id":"prt_088311088001q1PZ1NCrYUUKxC","sessionID":"ses_f77cf5062ffeTknrMfnbJMmdNh","messageID":"msg_08830db00001xugszFBdo4PZtF"}}
|
||
{"type":"tool_use","timestamp":1788991312130,"sessionID":"ses_f77cf5062ffeTknrMfnbJMmdNh","part":{"type":"tool","tool":"bash","callID":"call_N0Q7XPriG9cLaZpy1HP9eMsk","state":{"status":"completed","input":{"command":"git rev-parse --show-toplevel --git-common-dir HEAD && git status --porcelain","workdir":"/tmp/opencode/sots-launch-re"},"output":"/tmp/opencode/sots-launch-re\n/home/alex/sots-re/.git\n3bfde5a70d874a723e797a695bbd847fd82c0aa7\n","metadata":{"output":"/tmp/opencode/sots-launch-re\n/home/alex/sots-re/.git\n3bfde5a70d874a723e797a695bbd847fd82c0aa7\n","exit":0,"truncated":false},"title":"git rev-parse --show-toplevel --git-common-dir HEAD && git status --porcelain","time":{"start":1788991311991,"end":1788991312126}},"metadata":{"openai":{"itemId":"fc_05e6fc1177bacad4016aa1d74f06c087d1b80da9ed1a0f1d62"}},"id":"prt_088310ef1001t1Dl4LK63XL5HT","sessionID":"ses_f77cf5062ffeTknrMfnbJMmdNh","messageID":"msg_08830db00001xugszFBdo4PZtF"}}
|
||
{"type":"step_finish","timestamp":1788991312170,"sessionID":"ses_f77cf5062ffeTknrMfnbJMmdNh","part":{"id":"prt_088311126001zP68I0QnTL447B","reason":"tool-calls","snapshot":"125e0cab67aff77f1890da87f860cc4f95968042","messageID":"msg_08830db00001xugszFBdo4PZtF","sessionID":"ses_f77cf5062ffeTknrMfnbJMmdNh","type":"step-finish","tokens":{"total":13158,"input":3141,"output":289,"reasoning":0,"cache":{"write":0,"read":9728}},"cost":0}}
|
||
{"type":"step_start","timestamp":1788991314896,"sessionID":"ses_f77cf5062ffeTknrMfnbJMmdNh","part":{"id":"prt_088311bca001AvSxN4rjkbaR3i","messageID":"msg_088311152001HTzjdZ2CURVICx","sessionID":"ses_f77cf5062ffeTknrMfnbJMmdNh","snapshot":"837a9612f62e9ea3d3f65adfb1003429ec07f9f9","type":"step-start"}}
|
||
{"type":"tool_use","timestamp":1788991330597,"sessionID":"ses_f77cf5062ffeTknrMfnbJMmdNh","part":{"type":"tool","tool":"bash","callID":"call_2x31YOYRKMCtdlCJEV2RrjIL","state":{"status":"completed","input":{"command":"ls /home/alex/sots-re/campaign/runtime/checkpoints && python3 /home/alex/sots-re/tools/campaign.py --state-root /home/alex/sots-re checkpoint launcher-smoke --actor launcher-smoke --role architecture-review --model openai/gpt-6-astra --session run-df1472c13f31db3a4d5361f0 --summary 'Observations: explicit Astra launcher reached canonical RE state from paired worktrees; no source mutation. Read canonical AGENTS.md, campaign/README.md, guides/multi-agent-workflow.md, launcher-smoke contract and both surprise records (both resolved; no open surprises found). Contract checkpoint is null; documented architecture bootstrap permits this fresh smoke. Git rev-parse and git status --porcelain succeeded: engine /tmp/opencode/sots-launch-engine HEAD 7741d42fc5e4e761e6449bdaf0e4a61d00036a23 common-dir /home/alex/sots-engine/.git; RE /tmp/opencode/sots-launch-re HEAD 3bfde5a70d874a723e797a695bbd847fd82c0aa7 common-dir /home/alex/sots-re/.git; both clean and baseline-matched. Run record campaign/runtime/runs/run-df1472c13f31db3a4d5361f0.json records requested openai/gpt-6-astra, architecture-review, launcher-smoke, paired source-before manifests and 40-step overlay; actual emitted model/session and final runner completion remain for lead inspection, not self-attested acceptance. Artifact campaign/agents/lead.md read. Decisions: remain smoke-only, write this checkpoint and stop; no implementation, delegation or promotion. Tests: read-only worktree identity/status checks only; no build or lab tests. Resources: no leases acquired or used, no lab access or mutation; lease directory inspected only, existing ownership untouched; cleanup not applicable. Blockers: none for checkpoint; live-launch acceptance pending independent lead inspection of completed runner provenance.' --artifact campaign/agents/lead.md --next-action 'Lead inspects run-df1472c13f31db3a4d5361f0 actual event/session/checkpoint binding and final before/after source identities.'","workdir":"/tmp/opencode/sots-launch-engine"},"output":"controls-bootstrap-177cfb68c95114436c939aaa.json\ncontrols-bootstrap-2f0fe9ac4ec15b15a983bd75.json\ncontrols-bootstrap-59f425233f0deb9293f550f9.json\ncontrols-bootstrap-620eb9d25a6ad2f06b68353c.json\ncontrols-bootstrap-d0b99f8ee3e86db13fa8808d.json\ncontrols-bootstrap-d37e0242ac92252f62aa6207.json\n{\n \"actor\": \"launcher-smoke\",\n \"artifacts\": [\n {\n \"path\": \"campaign/agents/lead.md\",\n \"sha256\": \"7661bbfca972be50a52c735b7f15f5be740158542c3d0cdbdf9a6a2590c7f1ea\"\n }\n ],\n \"basis\": \"dcdc05132c3da6c058873b664d864c731cb2cfdf5a6d015da2c18a48507f0e2c\",\n \"contract\": \"launcher-smoke\",\n \"id\": \"9e8a62fea4de50abd96f27d6\",\n \"model\": \"openai/gpt-6-astra\",\n \"next_action\": \"Lead inspects run-df1472c13f31db3a4d5361f0 actual event/session/checkpoint binding and final before/after source identities.\",\n \"role\": \"architecture-review\",\n \"schema\": \"sots-checkpoint/1\",\n \"session\": \"run-df1472c13f31db3a4d5361f0\",\n \"summary\": \"Observations: explicit Astra launcher reached canonical RE state from paired worktrees; no source mutation. Read canonical AGENTS.md, campaign/README.md, guides/multi-agent-workflow.md, launcher-smoke contract and both surprise records (both resolved; no open surprises found). Contract checkpoint is null; documented architecture bootstrap permits this fresh smoke. Git rev-parse and git status --porcelain succeeded: engine /tmp/opencode/sots-launch-engine HEAD 7741d42fc5e4e761e6449bdaf0e4a61d00036a23 common-dir /home/alex/sots-engine/.git; RE /tmp/opencode/sots-launch-re HEAD 3bfde5a70d874a723e797a695bbd847fd82c0aa7 common-dir /home/alex/sots-re/.git; both clean and baseline-matched. Run record campaign/runtime/runs/run-df1472c13f31db3a4d5361f0.json records requested openai/gpt-6-astra, architecture-review, launcher-smoke, paired source-before manifests and 40-step overlay; actual emitted model/session and final runner completion remain for lead inspection, not self-attested acceptance. Artifact campaign/agents/lead.md read. Decisions: remain smoke-only, write this checkpoint and stop; no implementation, delegation or promotion. Tests: read-only worktree identity/status checks only; no build or lab tests. Resources: no leases acquired or used, no lab access or mutation; lease directory inspected only, existing ownership untouched; cleanup not applicable. Blockers: none for checkpoint; live-launch acceptance pending independent lead inspection of completed runner provenance.\",\n \"timestamp\": \"2026-09-09T22:02:10.570990+00:00\"\n}\n","metadata":{"output":"controls-bootstrap-177cfb68c95114436c939aaa.json\ncontrols-bootstrap-2f0fe9ac4ec15b15a983bd75.json\ncontrols-bootstrap-59f425233f0deb9293f550f9.json\ncontrols-bootstrap-620eb9d25a6ad2f06b68353c.json\ncontrols-bootstrap-d0b99f8ee3e86db13fa8808d.json\ncontrols-bootstrap-d37e0242ac92252f62aa6207.json\n{\n \"actor\": \"launcher-smoke\",\n \"artifacts\": [\n {\n \"path\": \"campaign/agents/lead.md\",\n \"sha256\": \"7661bbfca972be50a52c735b7f15f5be740158542c3d0cdbdf9a6a2590c7f1ea\"\n }\n ],\n \"basis\": \"dcdc05132c3da6c058873b664d864c731cb2cfdf5a6d015da2c18a48507f0e2c\",\n \"contract\": \"launcher-smoke\",\n \"id\": \"9e8a62fea4de50abd96f27d6\",\n \"model\": \"openai/gpt-6-astra\",\n \"next_action\": \"Lead inspects run-df1472c13f31db3a4d5361f0 actual event/session/checkpoint binding and final before/after source identities.\",\n \"role\": \"architecture-review\",\n \"schema\": \"sots-checkpoint/1\",\n \"session\": \"run-df1472c13f31db3a4d5361f0\",\n \"summary\": \"Observations: explicit Astra launcher reached canonical RE state from paired worktrees; no source mutation. Read canonical AGENTS.md, campaign/README.md, guides/multi-agent-workflow.md, launcher-smoke contract and both surprise records (both resolved; no open surprises found). Contract checkpoint is null; documented architecture bootstrap permits this fresh smoke. Git rev-parse and git status --porcelain succeeded: engine /tmp/opencode/sots-launch-engine HEAD 7741d42fc5e4e761e6449bdaf0e4a61d00036a23 common-dir /home/alex/sots-engine/.git; RE /tmp/opencode/sots-launch-re HEAD 3bfde5a70d874a723e797a695bbd847fd82c0aa7 common-dir /home/alex/sots-re/.git; both clean and baseline-matched. Run record campaign/runtime/runs/run-df1472c13f31db3a4d5361f0.json records requested openai/gpt-6-astra, architecture-review, launcher-smoke, paired source-before manifests and 40-step overlay; actual emitted model/session and final runner completion remain for lead inspection, not self-attested acceptance. Artifact campaign/agents/lead.md read. Decisions: remain smoke-only, write this checkpoint and stop; no implementation, delegation or promotion. Tests: read-only worktree identity/status checks only; no build or lab tests. Resources: no leases acquired or used, no lab access or mutation; lease directory inspected only, existing ownership untouched; cleanup not applicable. Blockers: none for checkpoint; live-launch acceptance pending independent lead inspection of completed runner provenance.\",\n \"timestamp\": \"2026-09-09T22:02:10.570990+00:00\"\n}\n","exit":0,"truncated":false},"title":"ls /home/alex/sots-re/campaign/runtime/checkpoints && python3 /home/alex/sots-re/tools/campaign.py --state-root /home/alex/sots-re checkpoint launcher-smoke --actor launcher-smoke --role architecture-review --model openai/gpt-6-astra --session run-df1472c13f31db3a4d5361f0 --summary 'Observations: explicit Astra launcher reached canonical RE state from paired worktrees; no source mutation. Read canonical AGENTS.md, campaign/README.md, guides/multi-agent-workflow.md, launcher-smoke contract and both surprise records (both resolved; no open surprises found). Contract checkpoint is null; documented architecture bootstrap permits this fresh smoke. Git rev-parse and git status --porcelain succeeded: engine /tmp/opencode/sots-launch-engine HEAD 7741d42fc5e4e761e6449bdaf0e4a61d00036a23 common-dir /home/alex/sots-engine/.git; RE /tmp/opencode/sots-launch-re HEAD 3bfde5a70d874a723e797a695bbd847fd82c0aa7 common-dir /home/alex/sots-re/.git; both clean and baseline-matched. Run record campaign/runtime/runs/run-df1472c13f31db3a4d5361f0.json records requested openai/gpt-6-astra, architecture-review, launcher-smoke, paired source-before manifests and 40-step overlay; actual emitted model/session and final runner completion remain for lead inspection, not self-attested acceptance. Artifact campaign/agents/lead.md read. Decisions: remain smoke-only, write this checkpoint and stop; no implementation, delegation or promotion. Tests: read-only worktree identity/status checks only; no build or lab tests. Resources: no leases acquired or used, no lab access or mutation; lease directory inspected only, existing ownership untouched; cleanup not applicable. Blockers: none for checkpoint; live-launch acceptance pending independent lead inspection of completed runner provenance.' --artifact campaign/agents/lead.md --next-action 'Lead inspects run-df1472c13f31db3a4d5361f0 actual event/session/checkpoint binding and final before/after source identities.'","time":{"start":1788991330523,"end":1788991330594}},"metadata":{"openai":{"itemId":"fc_0c155a702a954bca016aa1d753a82487d1adad7d338b5cfead"}},"id":"prt_088311ef6001xHHROnSH7oxHb3","sessionID":"ses_f77cf5062ffeTknrMfnbJMmdNh","messageID":"msg_088311152001HTzjdZ2CURVICx"}}
|
||
{"type":"step_finish","timestamp":1788991330640,"sessionID":"ses_f77cf5062ffeTknrMfnbJMmdNh","part":{"id":"prt_08831594c001bNUWcBdIo16cQZ","reason":"tool-calls","snapshot":"fff9ecef979f0647accfb45c6584ffa64ebc9e6d","messageID":"msg_088311152001HTzjdZ2CURVICx","sessionID":"ses_f77cf5062ffeTknrMfnbJMmdNh","type":"step-finish","tokens":{"total":37414,"input":24222,"output":505,"reasoning":15,"cache":{"write":0,"read":12672}},"cost":0}}
|
||
{"type":"step_start","timestamp":1788991332389,"sessionID":"ses_f77cf5062ffeTknrMfnbJMmdNh","part":{"id":"prt_08831601f001jkc5F5S85mfLmH","messageID":"msg_088315978001yw408kOYPWYScK","sessionID":"ses_f77cf5062ffeTknrMfnbJMmdNh","snapshot":"e35ecb039de7a4189923bd31492cd17f24603bd1","type":"step-start"}}
|
||
{"type":"text","timestamp":1788991335202,"sessionID":"ses_f77cf5062ffeTknrMfnbJMmdNh","part":{"id":"prt_088316022001EFqJenU5ULQrgR","messageID":"msg_088315978001yw408kOYPWYScK","sessionID":"ses_f77cf5062ffeTknrMfnbJMmdNh","type":"text","text":"Smoke checkpoint written successfully:\n\n`campaign/runtime/checkpoints/launcher-smoke-9e8a62fea4de50abd96f27d6.json`\n\nBoth paired worktrees are clean and match their pinned baselines. No source edits, delegation, Git mutations, or lab operations performed.\n\nStopping as contracted. Lead inspection of the completed run’s event/session/checkpoint binding and source identities remains pending; acceptance is not claimed.","time":{"start":1788991332386,"end":1788991335196},"metadata":{"openai":{"itemId":"msg_0adc77ed42440b5a016aa1d764584487d1bfaf4c351737dadf","phase":"final_answer"}}}}
|
||
{"type":"step_finish","timestamp":1788991335473,"sessionID":"ses_f77cf5062ffeTknrMfnbJMmdNh","part":{"id":"prt_088316c2d001OxGnJDkZuRWrZG","reason":"stop","snapshot":"b015b156d0afd4f12324dbfe24ff33b4804d9937","messageID":"msg_088315978001yw408kOYPWYScK","sessionID":"ses_f77cf5062ffeTknrMfnbJMmdNh","type":"step-finish","tokens":{"total":38255,"input":1429,"output":90,"reasoning":0,"cache":{"write":0,"read":36736}},"cost":0}}
|