Skip to content

delegation: write version 1.1 on action receipts - #24

Merged
aeoess merged 2 commits into
mainfrom
fix/action-receipt-version-1.1
Oct 10, 2026
Merged

aeoess merged 2 commits into
mainfrom
fix/action-receipt-version-1.1

Conversation

@aeoess

@aeoess aeoess commented Oct 10, 2026

Copy link
Copy Markdown
Member

create_action_receipt wrote version: "1.0.0". The TypeScript verifyReceipt accepts only "1.1", so every receipt this SDK produced failed there on the version alone. It now writes "1.1" before signing.

Receipts already signed with "1.0.0" are unchanged, and verify_action_receipt still checks only the signature. Whether the Python reader should check the version is left for a separate decision.

Tests:

  • Portable, run in CI: the TypeScript SDK's frozen action-receipt-v1.1 vectors are vendored in tests/cross_impl (949d77d, sha256 pinned, provenance file alongside). A TypeScript-signed receipt verifies here, and a receipt written here has the version and members of the one the TypeScript verifier accepted.
  • Live, skipped without a sibling ../agent-passport-system checkout: the TypeScript verifyReceipt accepts a receipt signed here, and still rejects a 1.0.0 control on version only.

Without the fix, the three version tests fail. Full suite locally: 2744 passed, 1 skipped.

Not changed here: the writer still always emits spend with currency usd, checks scope by exact match, and writes +00:00 timestamps. Those differ from the TypeScript SDK and need their own issues.

create_action_receipt wrote version "1.0.0". The TypeScript verifyReceipt
accepts only "1.1", so every receipt this SDK produced failed there on the
version alone. It now writes "1.1" before signing.

Receipts already signed with "1.0.0" are unchanged, and verify_action_receipt
still checks only their signature. Whether the Python reader should check the
version is left for a separate decision.

tests/test_action_receipt_cross_language.py signs a receipt here and verifies
it with the TypeScript SDK from a sibling checkout (skipped when absent), and
keeps a 1.0.0 control that this reader accepts and the TypeScript reader
rejects on version only.

Signed-off-by: Tymofii Pidlisnyi <tima@aeoess.com>
The live cross-language tests need a sibling TypeScript checkout and skip in CI. The new tests compare the writer with the frozen action-receipt-v1.1 vectors from the TypeScript SDK (949d77d, sha256 pinned): a vendored TypeScript receipt verifies here, and a receipt written here has the version and members of the one the TypeScript verifier accepted. Both fail without the version fix and need no node.

Signed-off-by: Tymofii Pidlisnyi <tima@aeoess.com>
@aeoess
aeoess merged commit 79f0f16 into main Oct 10, 2026
4 checks passed
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