{
  "schema": "futhorc-policy-receipt-schema/1",
  "release": "v2026.08.15.18",
  "canonicalization": "UTF-8 NFC JSON; recursive object-key lexical sort; arrays preserve order; separators comma/colon; receipt_digest_sha256 omitted when computing receipt digest",
  "authority": "first_party_local_receipt_format",
  "truth_boundary": "A receipt records a deterministic local policy decision and SHA-256 linkage. Without authenticated signing/key custody it does not prove authorship, non-repudiation, peer identity, network authenticity, domain control, or real-world authorization.",
  "required_fields": [
    "receipt_id",
    "session_id",
    "session_state",
    "negotiated_protocol_version",
    "negotiated_ontology_version",
    "negotiated_flags",
    "source_domain",
    "target_domain",
    "source_namespace",
    "target_namespace",
    "requested_semantic_id",
    "requested_flags",
    "policy_version",
    "policy_digest_sha256",
    "session_transcript_digest_sha256",
    "decision",
    "reason_code",
    "rule_id",
    "request_digest_sha256",
    "previous_receipt_digest_sha256",
    "fixture_timestamp_ms",
    "timestamp_authority",
    "receipt_digest_sha256"
  ],
  "field_rules": {
    "receipt_id": "rct- plus 12 lowercase hexadecimal characters derived from canonical request digest + deterministic sequence index",
    "session_id": "32 lowercase hexadecimal characters; must match local fixture session",
    "session_state": "ACTIVE for checked-in audit fixtures",
    "source_domain": "declared domain in rune-domain-network-policy.json",
    "target_domain": "declared domain in rune-domain-network-policy.json",
    "source_namespace": "must equal checked-in namespace for source_domain",
    "target_namespace": "must equal checked-in namespace for target_domain",
    "requested_flags": "sorted unique list",
    "policy_version": "must equal checked-in policy_version",
    "policy_digest_sha256": "must equal checked-in policy digest",
    "session_transcript_digest_sha256": "SHA-256 of canonical checked-in deterministic happy transcript when available",
    "request_digest_sha256": "SHA-256 of canonical request-linkage fields defined by request_digest_fields",
    "previous_receipt_digest_sha256": "64 zeroes for chain head; otherwise prior receipt_digest_sha256",
    "receipt_digest_sha256": "SHA-256 of canonical complete receipt excluding this field",
    "fixture_timestamp_ms": "deterministic fixture time; not a claim about wall-clock event occurrence",
    "timestamp_authority": "literal deterministic_fixture"
  },
  "request_digest_fields": [
    "session_id",
    "session_state",
    "negotiated_protocol_version",
    "negotiated_ontology_version",
    "negotiated_flags",
    "source_domain",
    "target_domain",
    "requested_semantic_id",
    "requested_flags",
    "policy_version",
    "session_transcript_digest_sha256",
    "fixture_timestamp_ms"
  ],
  "chain_rules": [
    "receipt IDs unique",
    "receipt order is significant",
    "previous digest must link exactly",
    "policy digest/version exact",
    "source/target namespace exact",
    "request digest exact",
    "receipt digest exact",
    "decision/reason/rule reproducible by futhorc_policy.py",
    "chain digest exact"
  ],
  "genesis_previous_digest": "0000000000000000000000000000000000000000000000000000000000000000"
}
