Repository navigation
Release v3.1.0: fail-closed policy outcomes, revocation, agent feedback, and validation of your own records - #7
Merged
Merged
Conversation
- validate_contracts.py accepts --envelope, --record KIND FILE, --schema-file, --audit-events/--audit-snapshot/--anchor and --json, with exit codes 0 (passed), 1 (refused) and 2 (unreadable input). - Offline verification of an exported audit range, including partial exports that continue from a retained checkpoint hash. - Two or more envelopes are checked for shared proposal, request, call, dispatch and audit-stream identities and for an idempotency key bound to two different actions. - action.yml runs the same checks in any repository's CI.
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.
Release 3.1.0: approval paths that fail closed, approvals that can be withdrawn until dispatch, and records you can verify in your own pipeline. Every addition is optional on existing records; schema IDs and
schema_versionmove to3.1.0.What's in it
ApprovalPolicySnapshot.outcomeis one ofrequire_approval,auto_approveordeny. Any other evaluator result (non-boolean, unknown, errored) is recorded asdeny. Auto approval requires an explicitauto_approveunder a policy that allows it.denyends the request aspolicy_failedand never reaches a provider.scripts/validate_contracts.pytakes--envelope,--record KIND FILE,--schema-file,--audit-events/--audit-snapshot/--anchorand--json, and exits 0 (passed), 1 (refused) or 2 (unreadable).action.ymlruns the same checks in any repository's CI.revokedrequest state with arevocationrecord (actor, time, reason), anapproval.revokedaudit event,approval_revokeddispatch reason, and a completeexamples/revoked-envelope.json. A consumed request cannot be revoked, and a revoked one cannot invoke a provider.mcp_elicitationis accepted in policies, requests, records and audit events, anddocs/mcp-elicitation.mddocuments the profile. Approved or rejected elicitation decisions must name a present, authenticated human. An answer needs a delivered elicitation, and a high-risk approval through this channel needs a signature.ResolutionRecord.agent_feedbackcarries a closed reason code, a redacted message, requested changes (JSON Pointers inside/payload) and questions. Requested changes or questions requirerevise_and_resubmit+new_proposal. The feedback never reopens the decision.AuditSnapshotwithout the rest of the lifecycle. This includes partial ranges that continue from a retained checkpoint hash.x-review-target, and the review snapshot's target must equal exactly those reviewed arguments. This applies to built-in and trusted custom schemas, not only email.crm.update_record,ticket.create,db.update_row,api.callandn8n.trigger_workflow. They are wired intoProposedAction, use expected-version guards for record and row updates, and accept no raw URLs for API calls.Plus portable vectors in
tests/release-3.1.json, and README, contracts, architecture and CHANGELOG updates.Verification
python scripts/generate_examples.py && git diff --exit-code -- examples: examples regenerate byte-for-byte.python scripts/validate_contracts.py: all schemas, examples, negative vectors (including the new 3.1 corpus) and lifecycle invariants pass.python -m unittest discover -s tests -v: 79 tests pass (38 existing + 41 new intests/test_release_3_1.py). The new tests cover each action type end to end, revocation, feedback, elicitation, set checks, audit export ranges and command exit codes.actionCI job exercises it on GitHub.Review notes
main@ 4fb3bba. One commit per item, plus the version pin and docs.scripts/validate_contracts.py,scripts/generate_examples.py, examples (regenerated, plusrevoked-envelope.jsonandexamples/actions/), docs,.github/workflows/validate.yml(newactionjob), newaction.yml.agent_feedbackwithrevise_and_resubmit/new_proposalinstead ofdo_not_execute/never.action.ymlmake it usable outside a clone; it is still conformance tooling, not a runtime. No package is added.