sots-re/campaign/rollout/controls-followup.md

4.1 KiB

Astra integration review — control-plane repairs

After your first bounded controls session completes, inspect this followup and latest independent review. Same owned files, model GPT-6 Astra, no delegates/commits/lab changes.

Lead inspected run_agent.py:

  1. check_launch currently forbids unresolved surprises for ALL roles. This prevents the explicitly assigned resolver from launching to resolve the surprise. Permit Astra lead/resolver recovery on blocked contracts without a fresh worker checkpoint; keep ordinary workers blocked. Bind these recovery launches read/decision scope, not implementation permission. Add regression test.
  2. Prompt says 'Workers cannot change architecture' unconditionally even for lead/architecture-review. Render authority by role; user explicitly requires Astra architecture actors to do that work.
  3. Model availability plus a JSON event is not proof of successful run: detect type:error even when process exits zero, and require a successful completed step event, actual session ID and end checkpoint. Provider refusal/runtime error must not be recorded complete after old checkpoint. Missing observed_model can remain explicitly unavailable; never invent observed model.
  4. Check exact git worktree baseline again under run reservation lock (validation-to-use race), and validate no underlying canonical RE model/prompt/config mutation while launch executes.
  5. Verify normal noninteractive permissions actually permit the bounded worker to read assigned paired worktrees and checkpoint canonical RE. If necessary add --auto for this user-authorized launcher with explicit deny overrides or scoped external_directory grants. Test command/env; do not leave a launcher that always yields incomplete due to noninteractive permission prompts.
  6. Artifact restrictions currently permit only campaign/. Existing scientific evidence under verify/ must be referenceable without copying huge corpora into campaign. Permit immutable hashed artifact references anywhere within canonical RE EXCEPT secrets/outside symlinks; continue keeping control records under campaign/runtime. Document this separation and test path escapes.

Independent reviewer may find additional real defects. Address confirmed issues in owned files, add adversarial tests, checkpoint precise interface change for publishing/pilot/lead. Do not modify another worker's files. Main will run complete tests and normal launch smoke after.

Independent Astra review R4/R6 — mandatory integration fixes

Read campaign/rollout/independent-review.md. R4 (HIGH) is real: baseline path+HEAD cannot bind uncommitted candidate/integrated sources. Add an explicit actual source-content binding to evidence/verdicts, checked at promotion against the referenced candidate/integrated worktrees. Use engine + relevant RE source file manifests/digests (with documented exclusions for mutable campaign state/evidence outputs to avoid self-reference), and immutable artifact/input hashes. Candidate source paths may be paired worktrees, integrated paths canonical; baseline still pins starting commits. Refuse old evidence/verdict after same-HEAD source byte changes. One source binding for all final integrated evidence must agree. Do not let a lead boolean substitute for this identity check. Exact arbitrary criterion meaning remains independent-review responsibility; document that boundary. Add test changing engine bytes without HEAD change and rejecting promotion. Update schema/sample/README; pilot agent's proposed contract has no evidence so should stay valid.

R6 durable recovery: OLD valid checkpoint is okay for STARTING a new quantum; require freshness only for handoff/promotion/end of this quantum. Do not demand fabricated fresh timestamps to resume next day. Verify basis/artifact/source identities independently of age on recovery. Test.

Runner config provenance must hash expanded role prompt + relevant effective config, not just JSON file containing a file-reference. Lead's tools/check_agent_config.py --resolved already verified live OpenCode loader resolves prompts/models correctly. Temporary fixture git commits are allowed ONLY inside disposable test repos for unit testing, never in the actual projects.