CAIN-42 CAIN Studio
25CAIN-42 Top 25 › Signed decision receipts › Anatomy of a receipt

Anatomy of a receipt

FieldWhat it binds
schemacain42.keystone.codeguard-decision.v1: what kind of object this is. Verifiers refuse anything else.
action_sha256SHA-256 of the canonical action (tool, command or path, working folder, workspace). The command text is not in the receipt.
decisionALLOW, DENY or REQUIRE_APPROVAL
findings_sha256SHA-256 of every finding with its severity and detail
checksThe names of the rules that fired, readable without the findings
engine_version, atWhich rules decided, and when (UTC)
kidSHA-256 fingerprint of the signing key (since 2026-11-02), so a receipt says which key to check it with
signature_b64Ed25519 over the canonical JSON of every field above (sorted keys, no spaces, UTF-8)
public_key_b64A convenience copy. Never trust it: pin the key you fetched yourself.

Recompute the action hash yourself

canon = json.dumps({"tool": "Bash", "command": CMD, "cwd": CWD, "workspace": CWD}, sort_keys=True, separators=(",", ":"), ensure_ascii=False)
sha256(canon) == receipt["action_sha256"]

FIRME AI CORPORATION · CAIN-42 is a Byzantine trust fabric. Numbers marked "our own check" were run by us, not by an independent party. Nothing on these pages is a certification.