Skip to content

feat: require signed runtime authority for Production and campaign actuation - #385

Merged
abrichr merged 9 commits into
mainfrom
claude/production-workflow-admission-v2
Aug 22, 2026
Merged

feat: require signed runtime authority for Production and campaign actuation#385
abrichr merged 9 commits into
mainfrom
claude/production-workflow-admission-v2

Conversation

@abrichr

@abrichr abrichr commented Aug 21, 2026

Copy link
Copy Markdown
Member

Summary

  • Standard and Regulated actuation requires a verified v2 qualification authority: a private, owner-only handoff binding the signed admission, its expectation, and the signer registry, re-read at every input edge
  • the handoff read is fail-closed: owner-only mode, O_NOFOLLOW, Windows private-ACL proof, bounded size, and change detection during the read
  • revocation state can only grow within a run; a rollback or an admission swap refuses
  • a customer-local runner must carry a fresh permit trust snapshot; a managed Cloud run revalidates through its remote delivery permit
  • qualification trials require their own signed, one-shot, non-production campaign permit bound to the exact trial, consumed through all-or-nothing bindings in GovernedRunAuthorization
  • certification now also fails closed when the sealed workflow manifest carries an expiry that has passed

Contract notes

Refusal strings are PHI-free. The signed artifact never enters run state; only digest identities do. Demo stays unsigned and cannot report production success.

Verification

  • tests/test_production_qualification.py: 12 new tests (private-file refusals, digest mismatches, revocation rollback, per-edge re-read)
  • tests/test_qualification_campaign_authority.py: 10 new tests (one-shot consumption, exact-trial binding, private persistence)
  • test_qualification_admission_v2.py, test_qualification_project.py, test_execution_profiles.py: 219 pass
  • test_replayer.py 115 pass; test_durable_authority_v13 + terminal-v2 + receipts 164 pass
  • ruff clean; git diff --check clean

…tuation

Standard and Regulated actuation now refuses unless a verified v2
qualification authority rides with the run: one private, owner-only
handoff file that binds the signed admission, its expectation, and the
signer registry, re-read at every input edge with revocation
monotonicity. A customer-local runner must also carry a fresh permit
trust snapshot; a managed Cloud run revalidates through its remote
delivery permit.

Qualification trials keep their own fail-closed authority: one signed,
one-shot, non-production campaign permit bound to the exact trial,
consumed through GovernedRunAuthorization so an incomplete binding can
never authorize an edge.
The v2 authority and campaign permit guards now enforce where an
authority chain can exist: runs that carry the binding, and per-edge
re-verification whenever a guard is supplied. A local run without an
admission issuer keeps today's run-gate contracts instead of refusing
with no way to obtain the missing artifact, and the qualification-case
authorization builder keeps its released signature so existing
campaign harnesses keep working.
…t file

The campaign authority flag is opt-in again: existing run-case and
resume invocations parse as before, a retained campaign or admission
binding still requires its authority file on resume, and the resume
path no longer reuses the campaign file as a Production authority.
A qualification-case authorization without campaign permit fields
remains the released contract; the all-or-nothing validator still
refuses any partial permit binding, and the replayer requires the
signed authority once a binding is present.
The case authorization accepts an optional permit binding again: the
CLI passes it when a campaign authority file is provided, the binding
completeness check still refuses any partial set, and existing
callers without one keep working.
The runtime-local v2 authority bindings stay outside the cross-repo
dispatch digest so Cloud and Flow keep hashing identical payloads.
They remain enforced through direct field comparison on the dispatch
path and through their own digests inside the v2 permit.
@abrichr
abrichr merged commit 7dd34db into main Aug 22, 2026
18 checks passed
@abrichr
abrichr deleted the claude/production-workflow-admission-v2 branch August 22, 2026 02:34
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant