Skip to content

fix(appraisal): hold an executed action to the digest its approval approved; release 0.1.0-alpha.6 - #74

Merged
imran-siddique merged 2 commits into
mainfrom
fix/approval-action-binding
Oct 1, 2026
Merged

imran-siddique merged 2 commits into
mainfrom
fix/approval-action-binding

Conversation

@imran-siddique

Copy link
Copy Markdown
Member

TRACE finalization in both SDKs now checks each executed, approval-gated action against the approval it ran under. A different action_digest or policy_event_id, or an approval resolved after the action completed, appraises contraindicated; a gated action with no bound approval appraises warning. Five shared run-level cases under conformance/appraisal/.

Release 0.1.0-alpha.6 (Python 0.1.0a6, npm 0.1.0-alpha.6) in the second commit, following #66.

Python 131 tests, TypeScript 44, check_versions, check_release_tag v0.1.0-alpha.6, schema and OTel checks, conformance runner, wheel and sdist smoke, npm pack: all pass.

🤖 Generated with Claude Code

imran-siddique and others added 2 commits October 1, 2026 12:40
…proved

TRACE finalization resolved a challenge from the approval.requested and
approval.approved pair alone and never looked at the action.executed event
that followed. A run whose approval bound action_digest sha256:b*64 still
appraised affirming when the action that ran carried sha256:c*64.

Both SDKs now treat an action as approval-gated when it names approval_id,
or names a policy_event_id whose decision was challenge. A gated action that
ran (any outcome except denied) is bound only by an approval.approved event
with the same action_digest and policy_event_id, paired with its request
inside the request window, and resolved no later than the action completed.

- digest or policy event disagrees, or approval postdates the action:
  contraindicated
- gated action with no bound approval: warning

Five run-level cases in conformance/appraisal/ are finalized by both SDK
suites, and the conformance runner schema-checks their events. The rules
are written up in docs/action-events.md and docs/trace-finalization.md.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Bumps the contract to 0.1.0-alpha.6 (Python 0.1.0a6, npm 0.1.0-alpha.6)
across the same 40 files as the alpha.5 cut plus the five
`conformance/appraisal/` cases the approval binding fix added, and
regenerates the evidence-chain golden and `tool_transcript` hash the
version moves. The Unreleased changelog entry moves under 0.1.0-alpha.6.
Locally: 131 Python tests pass (0 skipped, PyYAML installed), TypeScript
44 pass, `check_versions.py`, `check_release_tag.py v0.1.0-alpha.6`, the
schema and OTel checks and the conformance runner pass, wheel and sdist
smoke pass, `npm pack` builds the 0.1.0-alpha.6 tarball.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@imran-siddique
imran-siddique requested a review from a team as a code owner October 1, 2026 19:51
@imran-siddique
imran-siddique merged commit 70d6101 into main Oct 1, 2026
9 checks passed
@imran-siddique
imran-siddique deleted the fix/approval-action-binding branch October 1, 2026 20:12
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