feat: require signed runtime authority for Production and campaign actuation - #385
Merged
Merged
Conversation
…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.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
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