14 KiB
Controls worker checkpoint
Status: approved R4/R6 and runner repairs implemented; independent integrated review pending.
Model openai/gpt-6-astra; current logical checkpoint session rollout-controls-repairs (actual
harness session ID unavailable). Read the final repair handoff below; earlier sections are history.
No delegation, staging, project commits or lab I/O. Temporary fixture Git commits are authorized.
Interface announcement (2026-09-09)
Canonical state root is the absolute RE repository path passed as --state-root.
Contracts live in campaign/contracts/<id>.json; every contract has required fields
id,title,status,owner,baseline,scope,inputs,effects,original_dependencies,dependencies,acceptance,predictions,stop_conditions,checkpoint.
owner is {name,role}. baseline is {engine:{path,commit},re:{path,commit}}
with canonical absolute repository paths and full git commit IDs. scope, inputs, effects,
original_dependencies, dependencies, predictions, stop_conditions are string arrays;
dependencies are contract IDs. Acceptance is an array of {id,axis,criterion} objects.
Checkpoint is null or a campaign-relative JSON path. Status is proposed/ready/implementing/
verification/integration/accepted/blocked/needs-revision. Optional evidence is an array of
source-bound records; exact schema and README follow. No scalar verified status.
Runtime directories: campaign/runtime/checkpoints, surprises, decisions, verdicts,
leases, runs. Open surprise JSON has contract, status:"open", id, summary/probe.
Checkpoint JSON has contract, summary, artifacts, next_action, model, session,
actor, timestamp. Paths to durable artifacts must be under canonical campaign/.
Implementation checkpoint (2026-09-09, quantum in progress)
Schema, models registry, proposed controls-bootstrap contract, campaign CLI and runner now exist.
No tests executed yet. tools/campaign.py exports Campaign(root) with load, contracts,
validate, open_surprises; CLI list/status/validate/checkpoint/transition/surprise/resolve/
evidence/verdict/lease. Model identity is explicitly a claim, not authentication.
Evidence record is {id,axis,path,sha256,source,integrated}; source uses the exact baseline object.
Evidence artifact contents are responsible for actual dirty-tree manifests (runner captures them).
Independent passing verdict is bound to complete evidence digest + contract basis. Integrated
evidence changes invalidate that digest, so acceptance requires another independent verdict.
Checkpoint freshness is 15 minutes; runner end checkpoint must also be after start and match
run-provided checkpoint session/model/actor/role. Run records retain requested versus observed model.
Coordination: read publishing checkpoint (its current.json gate manifest differs correctly from contract base source), review checkpoint (pilot now adopting schema), lead opencode.json (steps 40, matching role agents and GPT-5.5 compaction). No cross-cutting plan changes made.
Pre-test checkpoint
Added campaign/README.md with strict fields, runtime formats, CLI examples, guarded lifecycle, checkpoint/model provenance limitations, and runner command. Added verify/campaign/test_controls.py: negative lifecycle/schema/source/model/checkpoint tests, actual concurrent lease contenders, fake OpenCode subprocesses for quantum completion, and disposable shared clones/linked worktrees for real Git identity tests. Tests never commit/stage or launch agents; all fixture writes are temporary. Source repository baseline object existence is now checked before ready/implementing. Ordinary needs-revision transitions also clear checkpoint/evidence. No test results yet.
Next action: run python3 -m unittest discover -s verify/campaign -p 'test_*.py' -v and fix failures.
No other worker checkpoints existed at initial inspection. Source bootstrap baseline:
engine 7741d42fc5e4e761e6449bdaf0e4a61d00036a23,
RE 3bfde5a70d (current concurrent work is uncommitted).
Final handoff checkpoint — 2026-09-09T21:35Z
Delivered and tested
- Owned source files: tools/campaign.py, tools/run_agent.py, campaign/contract.schema.json, campaign/models.json, campaign/contracts/controls-bootstrap.json, campaign/README.md, verify/campaign/test_controls.py, campaign/runtime/ records and this checkpoint.
python3 -m unittest discover -s verify/campaign -p 'test_*.py' -v: 23/23 passed in 2.180s. Initial 22/23 caught Git 2.34 lacking worktree-list-z; fixed to porcelain lines with explicit unusual-path rejection. Closed subprocess stdout to remove ResourceWarning.python3 tools/campaign.py --state-root /home/alex/sots-re validate: passed both controls-bootstrap and research-replacement. No acceptance transition performed.- Tests cover actual cross-process exclusive lease acquisition, token/owner/stale-release controls, fake process success/failure and missing checkpoint, model/config routing, real linked worktree/common-dir/baseline verification, schema/path/lifecycle/identity/WIP/surprise/evidence negatives and final integrated-package verdict refresh. Disposable shared clones reuse existing local history: tests execute no git commit or staging, addressing reviewer test restriction.
- RE source identity remains baseline plus concurrent uncommitted changes. Owned file SHA-256:
- tools/campaign.py: fa6fc0914ca792daa5decaac8c48b285499a331287d4ccef35d953cca4b0965b
- tools/run_agent.py: fc2233fcbc09dd8878e66cae6b0a9b9985146ef02ae22bff3a10643e0c14784e
- contract.schema.json: ae4796b1f8e8336ddb63e60d774a81ff965461e4b884b5a2488e3865c6a6c5e0
- models.json: 95f507237a8e4fcf14189da4aa102dfae1dbaa536d4d8db6bcbfc30162ac5443
- verify/campaign/test_controls.py: 894cf3ef92e540daf5017c46acc526b56d9ac7441def917c1a2910a086954e18
Surprises / lead decisions required
Read campaign/rollout/independent-review.md after successful tests. Recorded both findings with
campaign surprise; controls-bootstrap is machine-readably blocked. No affected interface
changes made after these cross-cutting findings, per assignment escalation rule.
- R4 / s-410e48d5ae6cc4da0a6ae649: current evidence binds baseline path/commit, artifact hash, axis and declared integrated boolean; it does not machine-bind actual candidate/integrated bytes. Reviewer correctly demonstrates that same-HEAD source changes evade this check. README already assigned actual manifests/criteria to independent human review, but that is insufficient for stronger automatic acceptance. Proposed decision: typed acceptance package binding candidate and integrated source manifests, binary, immutable input hashes and per-criterion outcomes; coordinate shape with gate/publishing. Probe changes bytes at unchanged HEAD and rejects old verifier/integration result. Evidence: independent-review.md R4, current check_evidence/verdict.
- R6 / s-f1c41532e618c77d41538902: launch uses 15-minute freshness, preventing next-day recovery; unconditional surprise rejection prevents resolver launch. Assignment explicitly said no open surprises at launch, so exception needs clarification. Proposed decision: recovery checks identity/basis/artifact integrity without age limit, fresh end checkpoint remains strict; permit explicit resolution-only Astra quantum while affected workers stay blocked. Probe old-valid vs missing/mismatched checkpoint and resolver vs implementer with open surprise.
Other known review limitation: runner hashes canonical config/overlay, not expanded prompt files or every effective configuration source. Claimed role/model and agent permissions are not security boundaries. No real OpenCode agent launched; actual effective-config/model execution remains an independent integration check. Interrupted running reservations deliberately do not auto-expire; manual lead inspection is currently required before clearing an interrupted record.
ONE exact next action
Lead: record Astra resolutions for s-410e48d5ae6cc4da0a6ae649 and
s-f1c41532e618c77d41538902, specifying the source-package interface and recovery/resolver policy,
then resume this controls worker from this checkpoint to implement and test those decisions.
Repair handoff — 2026-09-09T21:54Z
Authority, source and scope
- Recovered from the prior checkpoint and formally resolved surprises. Decisions
d-42c6d0b4ee5114e6f2e07c99(R4) andd-ab717735fc6c1661919f6894(R6), plus controls-followup.md, authorize this implementation. Both surprise records are resolved. - Baselines rechecked: RE
3bfde5a70d874a723e797a695bbd847fd82c0aa7, engine7741d42fc5e4e761e6449bdaf0e4a61d00036a23. Bootstrap exclusive canonical file ownership exception applies. Concurrent source remains uncommitted; final machine checkpoint artifacts hash the exact owned source/schema/test/README bytes. No engine edits or resource leases. - Changed: tools/campaign.py, tools/run_agent.py, campaign/contract.schema.json, campaign/contracts/controls-bootstrap.json (acceptance text), campaign/README.md, verify/campaign/test_controls.py, this handoff and canonical runtime checkpoints. Registry/config/agent files, pilot, gate/report and publishing ownership preserved.
Precise interface changes for lead, publishing and pilot
- Evidence now requires
source_binding,binaries,inputs,outcomesin addition to existing fields. Source binding is{engine:{path,commit,sha256},re:{path,commit,sha256}}, generated bycampaign source-binding CONTRACT [--engine-worktree ABS --re-worktree ABS]. No worktree args means canonical integrated trees. Actual Git manifests include dirty/untracked nonignored file bytes, modes and tracked deletions; fixed RE campaign-state/results and cache exclusions are documented in README. Source symlinks/submodules fail closed. Candidate paths must belong to paired repositories; integrated paths must be canonical. All final integrated evidence must share one binding. Every evidence/verdict/promotion check rehashes source content. binariesandinputsare nonempty immutable{path,sha256}arrays.outcomesexactly covers criterion IDs for each axis with{criterion,status,artifact:{path,sha256}}. Passing declared outcomes do not prove arbitrary criterion meaning: independent reproduction/review remains responsible for actual execution, scope/branch exposure and input/effect completeness. Verdicts bind evidence digest plus explicitsource_bindings_digest. Old evidence/verdicts need regeneration/reproduction; proposed pilot with no evidence still validates.- Scientific artifact references are canonical RE-relative, including existing
verify/. Controls stay under campaign/runtime; absolute/traversing/outside-link/private-key/secret/Git artifact references fail. Both lexical path and resolved alias are checked. Hashing its own mutable contract in a checkpoint is explicitly rejected; contract metadata usesbasis. - Recovery accepts old intact checkpoints, checks basis/artifacts and source-bound evidence, and independently verifies paired Git baseline/worktree identities. Promotion/end retain 15-minute freshness. Astra lead/resolver may enter blocked surprises without worker checkpoint under resolution-only prompt/permissions and unchanged paired source at completion. Normal architecture actors receive authority appropriate to role; affected ordinary workers block.
- Runner requires zero exit, no error event, successful
step_finishreasonstop, one actual nonempty session ID, consistent emitted model identity, and fresh matching end checkpoint. Missing observed model is explicitly unavailable. Canonical model/prompt/config fingerprints, expanded role prompt and effective live loader config hashes are recorded; config/contract changes around reservation/execution fail. Git HEAD/worktree validation repeats under lock. - Noninteractive overlay grants read/search, normal worker shell and exact root/subtree external
access to paired worktrees/canonical RE, preserving role edit denies. Task/question denied;
resolution shell/edit permissions narrowed to read/decision state. Effective loader model,
steps, expanded prompt and requested permission entries are checked. No
--autorequired. These remain operational guards, not authentication, shell sandboxing or continuous auditing. - Gate remains
sots-gate/1withsource.engine/re; reporter is measured-only with--require-match. The new contract envelope references immutable gate/report packages rather than changing their schemas. No publishing acceptance/current pointers were changed.
Measured verification
python3 -m unittest discover -s verify/campaign -p 'test_*.py' -v: 36/36 passed, 6.530s. Includes real disposable Git/worktree same-HEAD candidate and integrated drift, add/delete/mode, source/path/secret escapes, criterion/input omissions, concurrent leases, old recovery/resolver policy, zero-exit errors (also error followed by success), missing successful step/session, baseline race recheck, config drift, role authority and permission/environment provenance.- Subsequently added checkpoint self-reference guard and exact-directory external grants: checkpoint bounds/self-reference regression 1/1 passed, 0.098s; permission provenance and subprocess-success regressions 2/2 passed, 0.391s. No unrelated changes after these checks.
python3 tools/campaign.py --state-root /home/alex/sots-re validate: passed both contracts.- Live
opencode debug configwith generated implementer env validated actual loader expansion, model, 40 steps and permissions. Prior overlay effective hash25b06304c87586543d0607f0abc3f3d46c366cc664948f33c0900b38ab8b3248, agent hash5252aaec5ac9b7a8b3cc6265937651f09b00f87731e61e1582d9fbe2caa17b7a(before additive exact-root grant). No real agent launch performed; normal-launch smoke belongs to the lead integration run. - Checkpoint
2f0fe9ac4ec15b15a983bd75attached its own contract before pointer mutation and thus has an invalid artifact hash. It is superseded by subsequent checkpoints; the new guard prevents recurrence. Final checkpoint intentionally references stable source/docs and this handoff only.
Acceptance and ONE exact next action
Implementation and local measurements delivered; contract remains needs-revision, not accepted. Independent verifier reproduction and integrated-tree/normal-launch smoke remain pending. Lead: run the complete integrated test suite and a normal noninteractive launcher smoke, then assign independent reproduction of this source-bound controls package before any promotion.