Skip to main content
Keystone Enabled A spend authority that gets cancelled needs a record a verifier can pin: which authority was cancelled, and why. Passed around as plain fields, the cancellation can be re-pointed to a different mandate, or its reason quietly changed, and a stale reference gives no signal. Cancellation Receipt (lite) closes that gap. It content-addresses the cancellation of a spend authority into a deterministic, recomputable cancellation_ref. Crucially, the mandate_ref it binds is exactly the same mandate_ref Payment Mandate (lite) produces and Spend Guardrail (lite) binds, so the cancellation composes onto the open pre-payment decision chain and closes the lifecycle on the authority side. It is strictly additive over the frozen Layer 1: no new cryptographic primitive, the same RFC 8785 JCS + SHA-256.
Apache-2.0 open source. Install via pip install algovoi-cancellation-receipt-lite. Python and TypeScript are byte-for-byte identical on the same input. This is the lite tier, content-addressed with no signature; the commercial Cancellation Receipt issues Falcon-1024 post-quantum signed receipts with effective-from timing, provider and jurisdiction, and propagates the cancellation across the settlement and retention chains.

How it works

One reference, computed with RFC 8785 JCS canonicalisation and SHA-256:
  • mandate_ref is the spend authority being cancelled, imported by hash.
  • cancellation_reason is a closed enum: USER_REQUESTED, MERCHANT_REQUESTED, COMPLIANCE_TERMINATED, EXPIRED.
Both fields are byte-load-bearing: change the mandate or the reason and the cancellation_ref diverges, so a cancellation cannot be silently re-pointed to another authority and the reason cannot be swapped. A reason outside the enum, or an empty mandate_ref, is rejected, not hashed.

Use

The lifecycle

Cancellation Receipt (lite) closes the open decision chain on the authority side. The chain is: agent identity (Agent Passport passport_ref) + spend authority (Payment Mandate mandate_ref) + policy in force (Policy Binding policy_bound_ref) recompute into one pre-payment decision (Spend Guardrail guardrail_ref). A cancellation_ref over the same mandate_ref cancels that authority, and recomputes byte-for-byte alongside the decision — proven end to end in the decision-chain keystone.

Lite vs commercial

Adopters

If you build on algovoi-cancellation-receipt-lite, pin ==0.1.0, anchor a canonical cancellation_ref vector hash from cancellation_receipt_lite_v1, and keep the NOTICE, you qualify for a free v0 licence key for algovoi-mandate-auditor. The gate is scripts/check_v0_adoption.py (dependency + canonical hash anchor + NOTICE + version pin, returning ISSUE_V0_KEY). Apply: email [email protected] with your import-by-hash evidence and a copy of the NOTICE.

Conformance

The cancellation_receipt_lite_v1 vector set (10 vectors) is published in the public corpus — chopmob-cloud/algovoi-jcs-conformance-vectors — with Python and Node runners. It covers the positive references, reason/mandate divergence, invalid-enum and empty-field rejection, and the field-distinctness invariant. cn-001, cn-002 and cn-003 cancel mandate_1, the mandate_ref in spend_guardrail_lite_v1. Python and TypeScript reproduce every value byte-for-byte.

Relationship to the open substrate

Cancellation Receipt (lite) sits directly on top of the open JCS Canonicalisation Substrate and composes with Payment Mandate (lite), Spend Guardrail (lite), and the decision-chain keystone. It uses the same RFC 8785 JCS and SHA-256 primitives, with no additional cryptographic dependencies. Additive over the frozen canonicalisation substrate, sole AlgoVoi authorship.