Decision Receipt Specification
A portable accountability object for consequential decisions.
Decision Receipts bind policy, evidence references, actors, outcomes, and verification metadata into a signed record that can be replayed and independently verified later.
- Schema
- receipt/v1 · receipt/v2
- Verification
- Offline bundle
- Canonicalization
- meshqu-canonical/v0
- Anchoring
- Transparency-log compatible
- Hashing
- SHA-256
- Replay
- Policy snapshot
- Signing
- Ed25519
- Chains
- Supported
What this specifies
This page defines the public display and specification model for Decision Receipts. It is not API documentation. It describes the envelope fields, integrity model, verification claims, replay semantics, chain references, evidence boundaries, and trust boundaries that a Decision Receipt makes — and the ones it deliberately does not.
Receipt anatomy
Inspect the object. A receipt/v2 envelope, illustratively populated. Field names follow the published TypeScript definitions for receipts and bundles; values are placeholders.
The integrity hash, signature, snapshot digest, and evidence manifest digest are part of the signed payload.
- {
- "receipt_id": "dr_01HJY9F4QB2AJTM3CV8EAR4PD",
- "receipt_schema_version": 2,
- "issued_at": "2026-05-09T14:21:08.412Z",
- "issuer": "tenant_acme",
- "decision_type": "vendor_due_diligence",
- "outcome": "REVIEW",
- "actor": {
- "kind": "system",
- "id": "fraud-workflow-engine",
- "name": "Fraud Workflow Engine"
- },
- "action": {
- "type": "vendor_onboarding_hold",
- "reference_id": "VND-88425"
- },
- "policy_snapshot": {
- "snapshot_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
- "snapshot_digest": "a3f9c1b2…d8e4",
- "rules_hash": "7c2a05ee….91bf"
- },
- "evidence_manifest_digest": "e1c4ab90…7af2",
- "evidence_references": [
- {
- "kind": "document",
- "digest": "11b2cd34…aa10",
- "custodian": "tenant_acme/legal"
- }
- ],
- "integrity_hash": "sha256:9f2a4e0c…7d8e",
- "signature": {
- "alg": "Ed25519",
- "key_id": "tenant_acme/2026-q2",
- "value": "6d35019…b8fa"
- },
- "transparency_anchor": {
- "log": "rekor",
- "entry_id": "0x9f2a4e0c…",
- "inclusion_proof": "….",
- "integrated_at": "2026-05-09T14:21:09Z"
- },
- "chain": {
- "chain_id": "chn_01HJY8K…",
- "chain_step": 3,
- "parent_decision_id": "dr_01HJY8…"
- },
- "verification": {
- "integrity": "valid",
- "signature": "valid",
- "snapshot_replay": "valid",
- "transparency": "valid",
- "chain_link": "valid"
- }
- }
Field definitions
Each row records cardinality (required or optional) and source (direct on the receipt, or derived via a documented computation). Where it matters, the row also names what the field proves and what it does not.
| Field | Description | Cardinality | Source | Proves / does not prove |
|---|---|---|---|---|
| receipt_id | Stable identifier for this receipt. | Required | Direct | Identity (does not prove correctness). |
| issued_at | When the decision was evaluated and receipt created. | Required | Direct | Time of decision (not time of truth). |
| actor | Who or what produced the decision. | Required | Direct | Attribution (not intent or authority). |
| policy_snapshot | Frozen policy state used at decision time. | Required | Direct | Context integrity (not policy quality). |
| evidence_references | References to evidence relied upon by the decision. | Optional | Direct | Existence & binding (not truth). |
| integrity_hash | Hash of canonical receipt body. | Required | Derived | Tamper evidence (not correctness). |
| signature | Issuer signature over canonical body. | Required | Direct | Authenticity & integrity. |
| transparency_anchor | Public log inclusion proof & timestamp. | Optional | Direct | Timing & inclusion (not correctness). |
| chain | Linkage to surrounding workflow receipts. | Optional | Direct | Continuity (not completeness). |
| approval_lineage | Approval receipts across policy versions. | Optional | Derived | Lineage integrity (not policy quality). |
receipt_id
Stable identifier for this receipt.
Identity (does not prove correctness).
issued_at
When the decision was evaluated and receipt created.
Time of decision (not time of truth).
actor
Who or what produced the decision.
Attribution (not intent or authority).
policy_snapshot
Frozen policy state used at decision time.
Context integrity (not policy quality).
evidence_references
References to evidence relied upon by the decision.
Existence & binding (not truth).
integrity_hash
Hash of canonical receipt body.
Tamper evidence (not correctness).
signature
Issuer signature over canonical body.
Authenticity & integrity.
transparency_anchor
Public log inclusion proof & timestamp.
Timing & inclusion (not correctness).
chain
Linkage to surrounding workflow receipts.
Continuity (not completeness).
approval_lineage
Approval receipts across policy versions.
Lineage integrity (not policy quality).
Verification semantics
A verifier consumes a verification bundle and reports a status per sub-claim. A missing trust root yields not_applicable rather than a soft pass — verification fails closed.
| Sub-claim | What it checks | Status |
|---|---|---|
| bundle_manifest | Manifest digest recomputes; declared files are present and match recorded SHA-256 entries. | valid |
| integrity | integrity_hash recomputes from the canonical receipt body. | valid |
| signature | Ed25519 signature verifies against externally supplied trust root keyed by signature.k_id. | valid |
| snapshot_replay | Bundled snapshot evaluates to the same outcome and rules hash as the receipt. | valid |
| evidence | evidence_manifest_digest equals SHA-256 of the bundled canonical evidence manifest. | valid |
| approval_lineage | Per-version approval receipts verify against caller-supplied ratifier roots and bound rules hashes. | n/a |
| transparency | Inclusion proof and signed entry timestamp verify against a trusted transparency log key. | valid |
| chain_link | Linked receipts chain consistently — parent reference and link signatures verify. | valid |
| chain_seal | Sealed chain’s closing signature verifies and binds the recorded sequence. | n/a |
| canonicalization | Profile identifier matches and known canonicalization vectors round-trip identically. | valid |
bundle_manifestvalid
Manifest digest recomputes; declared files are present and match recorded SHA-256 entries.
integrityvalid
integrity_hash recomputes from the canonical receipt body.
signaturevalid
Ed25519 signature verifies against externally supplied trust root keyed by signature.k_id.
snapshot_replayvalid
Bundled snapshot evaluates to the same outcome and rules hash as the receipt.
evidencevalid
evidence_manifest_digest equals SHA-256 of the bundled canonical evidence manifest.
approval_lineagen/a
Per-version approval receipts verify against caller-supplied ratifier roots and bound rules hashes.
transparencyvalid
Inclusion proof and signed entry timestamp verify against a trusted transparency log key.
chain_linkvalid
Linked receipts chain consistently — parent reference and link signatures verify.
chain_sealn/a
Sealed chain’s closing signature verifies and binds the recorded sequence.
canonicalizationvalid
Profile identifier matches and known canonicalization vectors round-trip identically.
- The receipt has not been altered.
- The issuer signature validates.
- The decision can be replayed against preserved context.
- Referenced evidence digests match the bundle manifest.
- Chain references and seals verify where present.
- Approval lineage verifies where trusted ratifier roots are supplied.
- The original business policy was correct.
- The underlying evidence was true.
- The decision was fair by itself.
- That all disclosure should be unrestricted.
- That MeshQu must be trusted as a live service.
Replay semantics
Same context, same policy snapshot, same outcome. Replay re-runs the preserved decision context against the preserved policy snapshot and checks that the outcome is consistent. Replay validates consistency against preserved context. It does not certify universal truth.
Load snapshot
Load policy snapshot referenced by policy_snapshot_digest.
Resolve evidence
Resolve references using the bundle manifest and verify digests.
Re-evaluate
Run the decision evaluator with the preserved context and snapshot.
Compare outcome
Check that the derived outcome matches the receipt.
Evidence model
Bound by digest. Held by the custodian. MeshQu binds evidence through digests, manifests, and references. The institution or custodian retains the underlying evidence. This supports trust without unrestricted disclosure.
Chains
A single receipt proves one decision. A chain proves a workflow. Receipts can reference each other to record an operational sequence — for example: screening → escalation → human review → override → final approval. Chains preserve operational continuity. A chain seal proves completeness and order where present.
- Step 01 · systemScreening
- Step 02 · systemEscalation
- Step 03 · humanHuman review
- Step 04 · humanOverride
- Step 05 · humanFinal approval
- Continuity
- Each receipt references its parent_decision_id, recording the operational sequence as it happened.
- Ordering
- chain_step is monotonically assigned per chain_id; gaps indicate evidence the verifier did not receive.
- Seal
- When a chain closes, a chain seal proves completeness and ordering. The seal is optional; absence reports as not_applicable.
Portability & survivability
A bundle outlives the systems that produced it. Verification bundles are designed to remain useful long after the operational systems that produced them have changed.
A verification bundle outlives the systems that produced it.
The bundle is self-describing. It carries the receipt, the canonical policy snapshot, the evidence manifest digest, the public keys it expects, and the canonicalization profile under which every digest was computed. Replay and verification do not require contacting MeshQu.
- The original vendor is gone.
- The model changed.
- The workflow platform was replaced.
- The internal dashboard is unavailable.
- MeshQu is not online.
Standards posture
Decision Receipts are designed to align with emerging practice in runtime accountability, provenance, and verification. The shape of the object — open schemas, public-key verification, transparency-log compatibility, evidence manifests — sits comfortably alongside Sigstore, DSSE, and in-toto style attestations without claiming conformance to any single specification.
- Open schemasReceipt and bundle types are published as versioned TypeScript definitions.
- Public-key verificationEd25519 over a canonical envelope. No shared secrets.
- Transparency-log compatibilityAnchors carry inclusion proofs and signed entry timestamps.
- Evidence and provenanceManifest digests bind to attested artifacts, not stored payloads.
Trust boundaries
The reference is bounded on purpose. These limits keep verification claims honest and prevent the object from being read as more than it is.
Evidence remains with custodians
MeshQu does not store evidence payloads by default. Receipts bind digests and references; the underlying artifacts stay in the institution’s systems.
Replay is consistency, not correctness
Replaying the preserved context against the preserved policy snapshot proves outcome consistency. It does not adjudicate whether the original policy was correct or fair.
Verification is authenticity and integrity
The signature, integrity hash, and digests prove that the receipt was issued under a known key and has not been altered. They do not adjudicate business judgement.
Disclosure is governed separately
Verifiability does not imply unrestricted transparency. Receipts can be disclosed selectively under whatever access controls the issuing organisation operates.
Actor identity is attested by the issuer
The actor field reflects what the issuing system asserts. External identity roots can strengthen this; absent those, actor binding is at the issuer’s level of trust.
Transparency anchors prove inclusion, not correctness
A transparency-log entry proves the receipt was witnessed at a particular time. It does not prove that the underlying decision was substantively correct.