<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="rfc2629.xslt"?>
<!DOCTYPE rfc [
  <!ENTITY nbsp    "&#160;">
  <!ENTITY zwsp   "&#8203;">
  <!ENTITY nbhy   "&#8209;">
  <!ENTITY wj     "&#8288;">
]>
<rfc xmlns:xi="http://www.w3.org/2001/XInclude"
     ipr="trust200902"
     docName="draft-marques-asqav-compliance-receipts-00"
     category="info"
     submissionType="independent"
     version="3">
  <front>
    <title abbrev="Compliance Receipts Profile">Compliance Profile of Signed Action Receipts for AI Agents</title>
    <seriesInfo name="Internet-Draft" value="draft-marques-asqav-compliance-receipts-00"/>
    <author fullname="Joao Andre Gomes Marques"
            initials="J. A."
            surname="Gomes Marques">
      <organization>Asqav</organization>
      <address>
        <postal>
          <country>Portugal</country>
        </postal>
        <email>joaoagm90@gmail.com</email>
      </address>
    </author>
    <date year="2026" month="May" day="4"/>
    <area>General</area>
    <keyword>AI Agents</keyword>
    <keyword>Audit Trail</keyword>
    <keyword>Compliance</keyword>
    <keyword>EU AI Act</keyword>
    <keyword>DORA</keyword>

    <abstract>
      <t>This document defines a compliance profile of the signed action receipt format used by AI agents to record machine-readable evidence of access-control decisions. The profile binds receipt fields to the operational record-keeping obligations of Articles 12 and 26 of Regulation (EU) 2024/1689 (the EU AI Act) and to the ICT-related incident management requirements of Article 17 of Regulation (EU) 2022/2554 (DORA). It does not redefine the wire format, the canonicalization rule, or the signing algorithms of the underlying receipt format. It tightens a subset of the OPTIONAL fields to REQUIRED, imposes a retention floor, mandates two-anchor timestamping, and adds two extension fields.</t>
    </abstract>
  </front>

  <middle>
    <section anchor="introduction"><name>Introduction</name>
      <section anchor="profile-not-fork"><name>Profile, Not Fork</name>
        <t><xref target="ACTA-RECEIPTS"/> specifies a generic, signed receipt envelope for recording machine-to-machine access control decisions made by AI agents. Section 2.2 of <xref target="ACTA-RECEIPTS"/> defines a common payload field set in which all fields except type, issued_at, and issuer_id are OPTIONAL. Section 5.7 of <xref target="ACTA-RECEIPTS"/> introduces hash chaining (previousReceiptHash) inside an optional Commitment Mode extension. <xref target="ACTA-RECEIPTS"/> does not define receipt retention, does not require timestamping anchors, and does not bind to any regulatory regime.</t>
        <t>The author considered three options for this document.</t>
        <ul>
          <li>Option A, regulation-mapping informational doc only. Rejected because regulators do not, in practice, accept log records whose semantics are negotiated bilaterally; field-level constraints are needed.</li>
          <li>Option B, fork-and-extend with a new wire format. Rejected because the <xref target="ACTA-RECEIPTS"/> envelope is sufficient for the bindings in this document; a fork would fragment the small ecosystem.</li>
          <li>Option C, additive profile. Adopted. This document constrains fields that <xref target="ACTA-RECEIPTS"/> leaves OPTIONAL, fixes their values where regulation requires, and adds two extension fields with reserved names. The profile remains an additive overlay: a Compliance Receipt is also a conformant <xref target="ACTA-RECEIPTS"/> receipt.</li>
        </ul>
        <t>This document tracks <xref target="ACTA-RECEIPTS"/> revisions. Field references in this profile use upstream field names rather than upstream section numbers wherever possible, to reduce the maintenance hazard if upstream re-numbers sections in a future revision.</t>
      </section>
      <section anchor="scope"><name>Scope</name>
        <t>This document fills the regulatory binding gap for three obligations: Article 12 (record-keeping) and Article 26 (deployer obligations) of the EU AI Act, and Article 17 (ICT-related incident management) of DORA.</t>
        <t>A receipt that conforms to this profile is also a conformant <xref target="ACTA-RECEIPTS"/> receipt. A verifier that implements only <xref target="ACTA-RECEIPTS"/> can still cryptographically validate a profile receipt but cannot attest the additional compliance bindings.</t>
      </section>
      <section anchor="why-profile"><name>Why a Profile is Required</name>
        <t>Regulators and auditors do not accept log records whose semantics are negotiated bilaterally between provider and deployer. The records must be machine-checkable, with field-level constraints that a third party can verify without access to the provider's internal documentation. <xref target="ACTA-RECEIPTS"/> provides the wire format. This profile provides the field-level constraints, the retention floor, the anchoring requirement, and the regime mapping.</t>
      </section>
    </section>

    <section anchor="conventions"><name>Conventions and Definitions</name>
      <t>The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be interpreted as described in BCP 14 <xref target="RFC2119"/> <xref target="RFC8174"/> when, and only when, they appear in all capitals, as shown here.</t>
      <t>The following terms are used in this document.</t>
      <dl>
        <dt>Action:</dt>
        <dd>An operation performed by an AI agent that is subject to a policy evaluation. Examples include a tool invocation, an external API call, a write to durable storage, and the issuance of an irreversible instruction to another system.</dd>
        <dt>Action Receipt:</dt>
        <dd>A signed envelope conforming to <xref target="ACTA-RECEIPTS"/> that records the policy evaluation result for a single Action.</dd>
        <dt>Compliance Receipt:</dt>
        <dd>An Action Receipt that additionally satisfies the requirements of this profile.</dd>
        <dt>Deployer:</dt>
        <dd>As defined in Article 3(4) of <xref target="EU-AI-ACT"/>.</dd>
        <dt>High-Risk AI System:</dt>
        <dd>As defined in Article 6 of <xref target="EU-AI-ACT"/>.</dd>
        <dt>Financial Entity:</dt>
        <dd>As defined in Article 2(1) of <xref target="DORA"/>.</dd>
        <dt>Anchor:</dt>
        <dd>An attestation by an independent timestamping or transparency log that a given receipt or batch of receipts existed at a point in time. Anchors covered by this profile are RFC 3161 timestamp tokens <xref target="RFC3161"/> and OpenTimestamps <xref target="OPENTIMESTAMPS"/> commitments.</dd>
        <dt>Audit Pack:</dt>
        <dd>A bundle of Compliance Receipts, the chain commitments that link them, the public verification keys, the trust anchor metadata, and the regime mapping required by Sections 6 through 8 of this document, packaged for delivery to a regulator or auditor.</dd>
      </dl>
    </section>

    <section anchor="relationship"><name>Relationship to ACTA-RECEIPTS</name>
      <t>This profile is an additive overlay on <xref target="ACTA-RECEIPTS"/>. It does not modify the envelope, the canonicalization rule, the signature object, or the algorithm registry of <xref target="ACTA-RECEIPTS"/>.</t>
      <t>The following normative statements apply.</t>
      <ul>
        <li>Implementations of this profile MUST produce receipts that are byte-for-byte verifiable by a conformant <xref target="ACTA-RECEIPTS"/> verifier.</li>
        <li>Implementations of this profile MUST NOT introduce new top-level fields in the signed payload that conflict with names reserved by <xref target="ACTA-RECEIPTS"/>.</li>
        <li>Implementations of this profile MAY use any signature algorithm permitted by <xref target="ACTA-RECEIPTS"/>, namely Ed25519 (mandatory-to-implement), ES256, and ML-DSA-65.</li>
        <li>Where <xref target="ACTA-RECEIPTS"/> marks a field OPTIONAL and this profile marks the same field REQUIRED, the stricter requirement applies to Compliance Receipts.</li>
      </ul>
      <t>A receipt that fails any MUST clause of this profile is not a Compliance Receipt. It MAY still be a valid <xref target="ACTA-RECEIPTS"/> receipt.</t>
      <t>This profile differentiates from <xref target="ACTA-RECEIPTS"/> on three axes: mandatory hash-chain linkage (upstream Commitment Mode is OPTIONAL), mandatory dual-anchoring with RFC 3161 and OpenTimestamps (upstream mentions Sigstore Rekor only as informational), and a retention floor tied to specific regulatory articles (upstream is silent on retention).</t>
    </section>

    <section anchor="field-profile"><name>Receipt Field Profile</name>
      <t>This section enumerates fields defined by <xref target="ACTA-RECEIPTS"/> and states the additional requirements that this profile places on them. Field names follow <xref target="ACTA-RECEIPTS"/> exactly.</t>

      <section anchor="common-fields"><name>Common Payload Fields</name>
        <section anchor="type"><name>type</name>
          <t>Compliance Receipts MUST set type to a value drawn from the namespace protectmcp:decision, protectmcp:restraint, or protectmcp:lifecycle, or to an extension namespace registered for use with this profile.</t>
        </section>
        <section anchor="issued-at"><name>issued_at</name>
          <t>REQUIRED upstream and in this profile. The value MUST be an ISO 8601 timestamp with an explicit timezone. The producing system MUST source the value from a clock synchronized to a recognized time authority and MUST NOT backdate the value. Verifiers MUST reject receipts whose issued_at is more than 300 seconds ahead of the verifier's own clock.</t>
        </section>
        <section anchor="issuer-id"><name>issuer_id</name>
          <t>REQUIRED upstream and in this profile. The value MUST identify a legal entity, not a natural person. Where the producing system is operated by a Deployer, the issuer_id MUST resolve, through the trust anchor metadata in the Audit Pack, to a record naming the Deployer.</t>
        </section>
        <section anchor="payload-digest"><name>payload_digest (OPTIONAL upstream, REQUIRED in this profile)</name>
          <t>REQUIRED for Compliance Receipts. The associated payload that this digest covers MUST be retained for the period mandated by the most restrictive applicable regime in Sections 6 through 8 of this document. Implementations MUST NOT discard the underlying payload while a receipt that references it is still within its retention window.</t>
        </section>
        <section anchor="action-ref"><name>action_ref (OPTIONAL upstream, REQUIRED in this profile)</name>
          <t>REQUIRED for Compliance Receipts. The value is a SHA-256 hash of the canonical action representation as defined in <xref target="ACTA-RECEIPTS"/>. This profile uses action_ref as the primary join key for cross-engine reconstruction during an audit.</t>
        </section>
        <section anchor="sandbox-state"><name>sandbox_state (OPTIONAL upstream, REQUIRED for High-Risk in this profile)</name>
          <t>REQUIRED for receipts produced by High-Risk AI Systems. Upstream defines sandbox_state as an OS-level containment status. This profile constrains the value to one of enabled, disabled, or unavailable. A Deployer that operates a High-Risk AI System and produces a stream of receipts in which sandbox_state is consistently disabled SHOULD treat that stream as a finding under Article 26 and document the rationale in the Audit Pack metadata.</t>
        </section>
        <section anchor="iteration-id"><name>iteration_id (OPTIONAL upstream, REQUIRED for multi-step in this profile)</name>
          <t>REQUIRED for multi-step agent workflows. The value MUST be stable across all receipts emitted within the same logical task or session so that a regulator can reconstruct the full chain of Actions. iteration_id is distinct from the upstream session_id field, which is an opaque transport-layer session identifier. A Compliance Receipt MAY carry both: session_id for transport-level correlation and iteration_id for logical-task correlation.</t>
        </section>
      </section>

      <section anchor="decision-fields"><name>Decision Receipt Fields (type protectmcp:decision)</name>
        <section anchor="reason"><name>reason (OPTIONAL upstream, REQUIRED for deny/rate_limit in this profile)</name>
          <t>REQUIRED for Compliance Receipts where decision is deny or rate_limit. The value MUST be a machine-readable reason code drawn from a vocabulary documented in the Deployer's Audit Pack metadata.</t>
        </section>
        <section anchor="policy-digest"><name>policy_digest (OPTIONAL upstream, REQUIRED in this profile)</name>
          <t>REQUIRED for Compliance Receipts. The value MUST be of the form sha256:&lt;hex&gt; and MUST reference a policy artefact that the Deployer retains for the applicable retention window. Verifiers MUST reject Compliance Receipts whose policy_digest does not resolve in the Audit Pack.</t>
        </section>
      </section>

      <section anchor="hash-chain"><name>Hash-Chain Linkage (OPTIONAL upstream, REQUIRED in this profile)</name>
        <t>Upstream Commitment Mode introduces previousReceiptHash as part of an optional extension. This profile makes the linkage REQUIRED. Implementations MUST emit a previousReceiptHash field, populated as specified by <xref target="ACTA-RECEIPTS"/> (lowercase hex SHA-256 of the JSON Canonicalization Scheme <xref target="RFC8785"/> encoding of the predecessor receipt). The first receipt in a chain MUST set this field to the all-zero SHA-256 value.</t>
        <t>Implementations of <xref target="ACTA-RECEIPTS"/> that do not implement Commitment Mode produce receipts that are not Compliance Receipts under this profile.</t>
      </section>

      <section anchor="anchoring"><name>Anchoring (No Upstream Equivalent)</name>
        <t><xref target="ACTA-RECEIPTS"/> mentions Sigstore Rekor only as an informational example. This profile imposes a normative dual-anchor requirement.</t>
        <t>Compliance Receipts MUST be anchored. An anchor is an <xref target="RFC3161"/> timestamp token covering the signed envelope, an OpenTimestamps commitment covering the envelope, or both. Implementations SHOULD emit both forms. The anchor evidence MUST be retained alongside the receipt for the applicable retention window. Verifiers MUST reject Compliance Receipts that lack at least one valid anchor.</t>
        <t>The anchor MAY cover an aggregate of receipts (for example, a Merkle root over a batch) rather than each receipt individually, provided that the inclusion proof linking the receipt to the aggregate is retained alongside the receipt and the aggregate anchor.</t>
        <t>Where the anchor type is <xref target="RFC3161"/>, the timestamping authority's certificate chain MUST be retained alongside the token for the applicable retention window. Where the anchor type is <xref target="OPENTIMESTAMPS"/>, the upgrade path from the initial calendar attestation to the Bitcoin block attestation MUST be performed within seven days of issuance, and the upgraded proof MUST be retained alongside the receipt.</t>
      </section>

      <section anchor="extension-fields"><name>Extension Fields</name>
        <t>This profile defines two extension fields that MAY appear in the signed payload alongside the fields defined by <xref target="ACTA-RECEIPTS"/>. Neither field is defined upstream.</t>
        <dl>
          <dt>risk_class:</dt>
          <dd>A vocabulary term identifying the risk classification of the Action under the Deployer's risk management documentation. The vocabulary MUST be referenced in the Audit Pack metadata.</dd>
          <dt>incident_class:</dt>
          <dd>A vocabulary term identifying the ICT-related incident classification of the Action under the implementing technical standards adopted under <xref target="DORA"/>.</dd>
        </dl>
        <t>Both fields MUST be encoded as JSON strings. Both fields MUST be covered by the signature in the same canonicalization regime as the remainder of the payload. Both fields are OPTIONAL at the syntactic level but MAY be REQUIRED by the regime bindings in Sections 6 through 8 of this document.</t>
        <t>Implementations MAY define additional extension fields. Such fields MUST NOT collide with names defined by <xref target="ACTA-RECEIPTS"/> or by this document. Implementations defining extension fields SHOULD register them in the registry described in <xref target="iana"/>.</t>
      </section>
    </section>

    <section anchor="article-12"><name>EU AI Act Article 12 Binding</name>
      <t>Each subsection cites the operative phrase of Article 12 and binds it to the receipt field that satisfies it.</t>
      <section anchor="art12-1"><name>Article 12(1), automatic recording of events</name>
        <t>A Compliance Receipt MUST be produced for every Action that the High-Risk AI System performs against an external resource. Receipt generation MAY be disabled only through a configuration change recorded as a protectmcp:lifecycle Compliance Receipt.</t>
      </section>
      <section anchor="art12-2a"><name>Article 12(2)(a), identify situations that may present a risk</name>
        <t>The combination of type, decision, reason, and policy_digest MUST be sufficient for an auditor to identify, by query alone, receipts that correspond to risk situations enumerated in the Deployer's risk management documentation. Where the Deployer classifies an Action as risk-bearing, the receipt MUST carry a risk_class extension field.</t>
      </section>
      <section anchor="art12-2b"><name>Article 12(2)(b), facilitate the post-market monitoring</name>
        <t>The hash-chain linkage required by <xref target="hash-chain"/> satisfies post-market monitoring traceability. The chain head MUST be made available to the Provider and to the competent authority on request.</t>
      </section>
      <section anchor="art12-2c"><name>Article 12(2)(c), monitor the operation</name>
        <t>Any change to the policy artefact referenced by policy_digest SHALL produce a new digest. A change in policy_digest between two otherwise-comparable Actions MAY be examined by the Deployer or by a regulator as a candidate substantial-modification event under Article 43, and MUST be retained at least as long as the longest receipt in the chain that references either digest.</t>
      </section>
      <section anchor="art12-retention"><name>Retention</name>
        <t>Article 12 retention follows the Article 26(6) floor of six months unless national law sets a longer period. Where the Deployer is also a Financial Entity, the DORA floor in <xref target="dora-17"/> applies.</t>
      </section>
    </section>

    <section anchor="article-26"><name>EU AI Act Article 26 Binding</name>
      <section anchor="art26-1"><name>Article 26(1), in accordance with the instructions for use</name>
        <t>policy_digest MUST resolve to a policy artefact that the Deployer can show, on request, to be consistent with the Provider's instructions for use. An auditor MAY treat inability to resolve policy_digest as evidence of non-compliance for the Action that the receipt records.</t>
      </section>
      <section anchor="art26-2"><name>Article 26(2), ensure human oversight</name>
        <t>For any Action whose decision is allow and whose agent_tier is unknown or absent, the Deployer MUST ensure that the receipt is either reviewed by a designated natural person within the period required by national law, or that a follow-on protectmcp:lifecycle Compliance Receipt records the absence of such review with reason. Both records MUST themselves be Compliance Receipts.</t>
      </section>
      <section anchor="art26-5"><name>Article 26(5), monitor the operation</name>
        <t>A Deployer MUST be able to produce an Audit Pack covering any contiguous time window since the High-Risk AI System became operational.</t>
      </section>
      <section anchor="art26-6"><name>Article 26(6), keep the logs for at least six months</name>
        <t>Compliance Receipts under this binding MUST be retained for at least six months unless Union or national law sets a longer period.</t>
      </section>
    </section>

    <section anchor="dora-17"><name>DORA Article 17 Binding</name>
      <section anchor="dora-17-1"><name>Article 17(1), ICT-related incident management process</name>
        <t>A Compliance Receipt produced inside a Financial Entity's ICT environment MAY serve as the canonical record of an Action that triggered an ICT-related incident. action_ref MUST be carried into the Financial Entity's incident workflow as the primary correlation key.</t>
      </section>
      <section anchor="dora-17-2"><name>Article 17(2), classify ICT-related incidents</name>
        <t>For Actions classified as part of an ICT-related incident, the producing system MUST emit incident_class whose value is drawn from the classification vocabulary in the DORA implementing technical standards.</t>
      </section>
      <section anchor="dora-17-3"><name>Article 17(3), records of all ICT-related incidents</name>
        <t>The hash chain required by <xref target="hash-chain"/> satisfies tamper-evident logging. The Financial Entity MUST be able to produce, on request, the chain segment covering the period of an incident, together with the anchor evidence that fixes the chain to wall-clock time.</t>
      </section>
      <section anchor="dora-retention"><name>Retention</name>
        <t>Compliance Receipts under this binding MUST be retained for the period required by applicable Union or national law, with five years from the date of the underlying Action serving as a common floor consistent with the related ICT record-keeping provisions of <xref target="DORA"/>. Anchor evidence MUST be retained for the same period. Verification keys whose lifetime expires within the retention window MUST have their public components retained so that historical signatures remain verifiable.</t>
        <t>A Financial Entity SHOULD NOT operate parallel chains of differing retention periods, because the chain linkage required by <xref target="hash-chain"/> forces the longer period to propagate backwards.</t>
      </section>
    </section>

    <section anchor="audit-pack"><name>Audit Pack Composition</name>
      <t>This section is informative. It describes the contents of an Audit Pack as introduced in <xref target="conventions"/>.</t>
      <t>An Audit Pack contains the following items.</t>
      <ul>
        <li>The set of Compliance Receipts covered by the requested time window, in the canonical envelope form defined by <xref target="ACTA-RECEIPTS"/>.</li>
        <li>The chain commitments that link the receipts: for each receipt, the value of previousReceiptHash and the recomputed digest of the predecessor envelope.</li>
        <li>The anchor evidence: <xref target="RFC3161"/> tokens, OpenTimestamps proofs, or both. Each anchor item MUST be associated, by hash, with the receipt or aggregate it covers.</li>
        <li>The trust anchor metadata that identifies the Deployer or Financial Entity associated with each issuer_id value.</li>
        <li>The verification key material for every kid value present, in a form that does not require online retrieval.</li>
        <li>The vocabularies referenced by risk_class, incident_class, policy_digest, and any extension fields.</li>
        <li>A regime mapping document that names which receipts the producer asserts as evidence under Article 12, Article 26, or DORA Article 17.</li>
        <li>The chain heads valid at the start and end of the time window, signed by the Deployer or Financial Entity.</li>
      </ul>
      <t>An Audit Pack SHOULD itself be signed using the same algorithm registry as <xref target="ACTA-RECEIPTS"/>.</t>
    </section>

    <section anchor="verifier"><name>Verifier Behaviour</name>
      <t>A verifier conformant to this profile is referred to as a Compliance Verifier.</t>
      <section anchor="mandatory-checks"><name>Mandatory Checks</name>
        <t>A Compliance Verifier MUST perform all of the following checks before treating a receipt as a Compliance Receipt.</t>
        <ul>
          <li>Verify the signature using the algorithm declared in signature.alg, in accordance with <xref target="ACTA-RECEIPTS"/>.</li>
          <li>Resolve the verification key through one of the trust anchor mechanisms required by <xref target="ACTA-RECEIPTS"/>. The verifier MUST NOT trust a verification key embedded in the receipt envelope.</li>
          <li>Verify that all fields marked REQUIRED by <xref target="field-profile"/> are present and well-formed.</li>
          <li>Verify the hash-chain linkage by recomputing the digest of the immediately preceding envelope and comparing it to previousReceiptHash.</li>
          <li>Verify at least one anchor: an <xref target="RFC3161"/> token, an <xref target="OPENTIMESTAMPS"/> commitment, or both. The anchor MUST cover the signed envelope as it appears in the receipt.</li>
          <li>Verify the issued_at skew bound stated in <xref target="issued-at"/>.</li>
          <li>Verify that policy_digest resolves in the supplied Audit Pack metadata.</li>
        </ul>
        <t>A receipt that fails any of these checks MUST be reported as non-conformant.</t>
      </section>
      <section anchor="optional-checks"><name>Optional Checks</name>
        <t>A Compliance Verifier MAY additionally perform any of the following.</t>
        <ul>
          <li>Cross-check the issuer_id against an external registry of Deployers or Financial Entities.</li>
          <li>Resolve the policy artefact referenced by policy_digest and compare it to a Provider-supplied reference policy.</li>
          <li>Recompute the chain head and compare it to a Deployer-published value.</li>
          <li>Validate incident_class and risk_class extension values against the vocabularies referenced in the Audit Pack.</li>
        </ul>
      </section>
      <section anchor="reporting"><name>Reporting</name>
        <t>A Compliance Verifier SHOULD produce a structured report that identifies, for each receipt verified, which regime bindings (Article 12, Article 26, DORA Article 17) it satisfies. The report SHOULD itself be signed using the same algorithm registry as <xref target="ACTA-RECEIPTS"/>.</t>
      </section>
    </section>

    <section anchor="security"><name>Security Considerations</name>
      <t>This profile inherits all of the security considerations of <xref target="ACTA-RECEIPTS"/>. The following considerations are specific to the compliance binding.</t>
      <section anchor="tamper"><name>Tamper Resistance</name>
        <t>The hash-chain linkage required by <xref target="hash-chain"/> provides tamper-evidence at the chain level. An adversary who removes a receipt from the middle of the chain MUST recompute and re-sign every subsequent envelope. The anchor evidence required by <xref target="anchoring"/> binds segments of the chain to wall-clock time, raising the cost of a re-signing attack.</t>
        <t>Implementations SHOULD anchor at intervals no longer than 24 hours. Implementations operating under DORA Article 17 SHOULD anchor at intervals no longer than one hour.</t>
        <t>A deployment that uses only the signature, without chain linkage and anchoring, can be rolled back by an insider with control of the signing key for the period between the deletion and the next anchor. The MUST clauses of <xref target="hash-chain"/> and <xref target="anchoring"/> close that window.</t>
      </section>
      <section anchor="key-compromise"><name>Key Compromise</name>
        <t>A Compliance Receipt is only as trustworthy as the key that signed it. On suspected compromise of an issuer key, the Deployer MUST publish a revocation notice that names the key, the time of suspected compromise, and the chain head at that time. Receipts signed by the compromised key after the named time MUST NOT be treated as Compliance Receipts.</t>
        <t>Verifiers MUST consult revocation metadata supplied with the Audit Pack and MUST reject Compliance Receipts whose signing key was revoked at or before issued_at.</t>
      </section>
      <section anchor="long-term"><name>Retention and Long-Term Verifiability</name>
        <t>The five-year retention floor in <xref target="dora-17"/> exceeds the typical lifetime of an Ed25519 or ECDSA signing key. Implementations SHOULD use ML-DSA-65 (per <xref target="ACTA-RECEIPTS"/>) for receipts that are expected to be verified after the cryptographic lifetime of classical signature schemes ends. Implementations MUST retain public key material for the entire retention window.</t>
      </section>
      <section anchor="privacy"><name>Privacy</name>
        <t><xref target="ACTA-RECEIPTS"/> prohibits the inclusion of raw prompts, tool arguments, and credentials in the signed payload. This profile extends that prohibition to the extension fields defined in this document. The risk_class and incident_class values MUST be drawn from controlled vocabularies and MUST NOT carry free-text personal data.</t>
        <t>Where the underlying Action references a data subject, the payload_digest field MUST cover the data; the data itself MUST be held in a separate store that respects the data subject's rights under applicable law. A request for erasure that is granted under applicable data protection law MUST be reflected by deletion of the referenced payload, not by deletion of the receipt; the receipt remains as evidence that an Action occurred and was governed by a named policy at a named time.</t>
      </section>
      <section anchor="anchor-trust"><name>Anchor Trust</name>
        <t>The trust assumptions of an anchor depend on the anchor type. <xref target="RFC3161"/> timestamp tokens depend on the trust placed in the named Time Stamping Authority. OpenTimestamps commitments depend on the inclusion of the commitment in a public Bitcoin block. A Compliance Verifier SHOULD treat the simultaneous presence of both anchor types as stronger evidence than the presence of only one.</t>
      </section>
      <section anchor="replay"><name>Replay</name>
        <t>A Compliance Receipt is bound to a single Action via action_ref. Replay of a Compliance Receipt against a different Action is detectable by action_ref mismatch. The 300-second issued_at skew bound stated in <xref target="issued-at"/> limits the window in which a freshly-replayed receipt can be presented as recent.</t>
        <t>A Compliance Verifier MUST treat two receipts that share the same action_ref and the same issuer_id as a duplicate-emission event and SHOULD investigate.</t>
      </section>
      <section anchor="cross-regime"><name>Cross-Regime Conflict</name>
        <t>Where the same Action is in scope of more than one regime addressed by this document, the producing system MUST satisfy the union of the applicable requirements. Where a SHOULD clause in one regime conflicts with a MUST clause in another, the MUST clause prevails. Where two MUST clauses conflict, the producing system MUST refuse to issue the receipt and MUST log the refusal as a protectmcp:lifecycle Compliance Receipt.</t>
      </section>
      <section anchor="algorithm-agility"><name>Algorithm Agility</name>
        <t>This profile inherits its algorithm registry from <xref target="ACTA-RECEIPTS"/>. Implementations MUST treat the verification of a historical receipt according to the algorithm registry that was in force at issued_at, not the registry in force at the time of verification, provided that the signing key was not revoked.</t>
      </section>
    </section>

    <section anchor="iana"><name>IANA Considerations</name>
      <t>This document requests two new IANA registries to support stable, machine-checkable extensions to the Compliance Receipt format.</t>

      <section anchor="iana-extension-fields"><name>Compliance Receipt Extension Fields Registry</name>
        <t>IANA is requested to create a new registry titled "Compliance Receipt Extension Fields" under a new "Compliance Receipts" registry group.</t>
        <t>Each entry contains:</t>
        <ul>
          <li>Field Name: a JSON object key, lowercase ASCII letters, digits, and underscore.</li>
          <li>Description: a one-line summary of the field's purpose.</li>
          <li>Reference: the document that defines the field's semantics.</li>
          <li>Vocabulary: a URL or registry pointer for the controlled vocabulary that field values are drawn from, or "free-form" if none.</li>
        </ul>
        <t>The registration policy is Specification Required, per <xref target="RFC8126"/>. The Designated Expert(s) SHOULD verify that the field name does not collide with any field defined by <xref target="ACTA-RECEIPTS"/>, that the Reference is a stable, dereferenceable specification, and that the Vocabulary is documented sufficiently for an independent verifier to validate values.</t>
        <t>Initial registry contents:</t>
        <ul>
          <li>risk_class - Risk classification term under the Deployer's risk management documentation - This document - Vocabulary referenced in Audit Pack metadata.</li>
          <li>incident_class - ICT-related incident classification term per DORA implementing technical standards - This document - DORA implementing technical standards.</li>
        </ul>
      </section>

      <section anchor="iana-type-namespaces"><name>Compliance Receipt Type Namespaces Registry</name>
        <t>IANA is requested to create a new registry titled "Compliance Receipt Type Namespaces" under the same "Compliance Receipts" registry group.</t>
        <t>Each entry contains:</t>
        <ul>
          <li>Namespace: a colon-separated identifier prefix used as a value of the type field, lowercase ASCII letters, digits, hyphen, underscore, and colon.</li>
          <li>Description: a one-line summary of the receipt category.</li>
          <li>Reference: the document that defines the namespace.</li>
        </ul>
        <t>The registration policy is Specification Required, per <xref target="RFC8126"/>. The Designated Expert(s) SHOULD verify that the namespace does not collide with any namespace already registered or any namespace reserved by <xref target="ACTA-RECEIPTS"/>, and that the Reference is a stable specification.</t>
        <t>Initial registry contents:</t>
        <ul>
          <li>protectmcp:decision - A receipt recording a policy evaluation outcome (allow, deny, rate_limit) for an MCP-mediated tool call - This document.</li>
          <li>protectmcp:restraint - A receipt recording the application or release of a restraint on an agent (e.g., quota, rate limit, sandbox tightening) - This document.</li>
          <li>protectmcp:lifecycle - A receipt recording an agent or system lifecycle event (e.g., configuration change, key rotation, oversight review) - This document.</li>
        </ul>
      </section>
    </section>

    <section anchor="acks"><name>Acknowledgements</name>
      <t>The author thanks T. Farley for <xref target="ACTA-RECEIPTS"/>, on which this profile is built. This profile would not exist without the field catalogue and envelope structure that the upstream draft defines. The author also thanks the Asqav community for review of early drafts.</t>
    </section>
  </middle>

  <back>
    <references>
      <name>Normative References</name>
      <reference anchor="RFC2119" target="https://www.rfc-editor.org/info/rfc2119">
        <front>
          <title>Key words for use in RFCs to Indicate Requirement Levels</title>
          <author fullname="S. Bradner" initials="S." surname="Bradner"/>
          <date year="1997" month="March"/>
        </front>
        <seriesInfo name="BCP" value="14"/>
        <seriesInfo name="RFC" value="2119"/>
        <seriesInfo name="DOI" value="10.17487/RFC2119"/>
      </reference>
      <reference anchor="RFC8174" target="https://www.rfc-editor.org/info/rfc8174">
        <front>
          <title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title>
          <author fullname="B. Leiba" initials="B." surname="Leiba"/>
          <date year="2017" month="May"/>
        </front>
        <seriesInfo name="BCP" value="14"/>
        <seriesInfo name="RFC" value="8174"/>
        <seriesInfo name="DOI" value="10.17487/RFC8174"/>
      </reference>
      <reference anchor="RFC3161" target="https://www.rfc-editor.org/info/rfc3161">
        <front>
          <title>Internet X.509 Public Key Infrastructure Time-Stamp Protocol (TSP)</title>
          <author fullname="C. Adams" initials="C." surname="Adams"/>
          <author fullname="P. Cain" initials="P." surname="Cain"/>
          <author fullname="D. Pinkas" initials="D." surname="Pinkas"/>
          <author fullname="R. Zuccherato" initials="R." surname="Zuccherato"/>
          <date year="2001" month="August"/>
        </front>
        <seriesInfo name="RFC" value="3161"/>
        <seriesInfo name="DOI" value="10.17487/RFC3161"/>
      </reference>
      <reference anchor="RFC8126" target="https://www.rfc-editor.org/info/rfc8126">
        <front>
          <title>Guidelines for Writing an IANA Considerations Section in RFCs</title>
          <author fullname="M. Cotton" initials="M." surname="Cotton"/>
          <author fullname="B. Leiba" initials="B." surname="Leiba"/>
          <author fullname="T. Narten" initials="T." surname="Narten"/>
          <date year="2017" month="June"/>
        </front>
        <seriesInfo name="BCP" value="26"/>
        <seriesInfo name="RFC" value="8126"/>
        <seriesInfo name="DOI" value="10.17487/RFC8126"/>
      </reference>
      <reference anchor="OPENTIMESTAMPS" target="https://opentimestamps.org/">
        <front>
          <title>OpenTimestamps Protocol</title>
          <author>
            <organization>OpenTimestamps</organization>
          </author>
          <date/>
        </front>
      </reference>
      <reference anchor="ACTA-RECEIPTS" target="https://datatracker.ietf.org/doc/draft-farley-acta-signed-receipts/">
        <front>
          <title>Signed Action Receipts for AI Agents</title>
          <author fullname="T. Farley" initials="T." surname="Farley"/>
          <date/>
        </front>
        <seriesInfo name="Internet-Draft" value="draft-farley-acta-signed-receipts-01"/>
      </reference>
    </references>

    <references>
      <name>Informative References</name>
      <reference anchor="EU-AI-ACT" target="https://eur-lex.europa.eu/eli/reg/2024/1689/oj">
        <front>
          <title>Regulation (EU) 2024/1689 (Artificial Intelligence Act)</title>
          <author>
            <organization>European Parliament and Council</organization>
          </author>
          <date year="2024"/>
        </front>
      </reference>
      <reference anchor="DORA" target="https://eur-lex.europa.eu/eli/reg/2022/2554/oj">
        <front>
          <title>Regulation (EU) 2022/2554 (DORA)</title>
          <author>
            <organization>European Parliament and Council</organization>
          </author>
          <date year="2022"/>
        </front>
      </reference>
      <reference anchor="RFC8785" target="https://www.rfc-editor.org/info/rfc8785">
        <front>
          <title>JSON Canonicalization Scheme (JCS)</title>
          <author fullname="A. Rundgren" initials="A." surname="Rundgren"/>
          <author fullname="B. Jordan" initials="B." surname="Jordan"/>
          <author fullname="S. Erdtman" initials="S." surname="Erdtman"/>
          <date year="2020" month="June"/>
        </front>
        <seriesInfo name="RFC" value="8785"/>
        <seriesInfo name="DOI" value="10.17487/RFC8785"/>
      </reference>
    </references>

    <section anchor="example" numbered="false"><name>Worked Example (Informative)</name>
      <t>This appendix illustrates a Compliance Receipt that satisfies the Article 26 binding for a tool invocation by a High-Risk AI System deployed by a Financial Entity. Field values are abbreviated for readability and are not cryptographically valid.</t>
      <sourcecode type="json"><![CDATA[
{
  "payload": {
    "type": "protectmcp:decision",
    "issued_at": "2026-05-04T09:14:22.118Z",
    "issuer_id": "did:web:example-bank.eu",
    "action_ref": "sha256:c1f3a09a",
    "iteration_id": "task-2026-05-04-01a3",
    "tool_name": "ledger.post_entry",
    "decision": "allow",
    "reason": "policy:within_limits",
    "policy_digest": "sha256:7b214e",
    "agent_tier": "evidenced",
    "required_tier": "evidenced",
    "sandbox_state": "enabled",
    "payload_digest": "sha256:0a44d2",
    "previousReceiptHash": "sha256:f80c11",
    "risk_class": "deployer:financial:medium",
    "incident_class": null
  },
  "signature": {
    "alg": "Ed25519",
    "kid": "issuer:1B5qkP",
    "sig": "..."
  },
  "anchors": [
    {
      "type": "rfc3161",
      "tsa": "tsa.example.eu",
      "token": "..."
    },
    {
      "type": "opentimestamps",
      "proof": "..."
    }
  ]
}
]]></sourcecode>
      <t>The above receipt satisfies the Article 26 binding because:</t>
      <ul>
        <li>issuer_id resolves to a named Deployer in the Audit Pack;</li>
        <li>policy_digest resolves to a retained policy artefact;</li>
        <li>sandbox_state is enabled, the High-Risk system constraint;</li>
        <li>previousReceiptHash links the receipt into the chain;</li>
        <li>both an <xref target="RFC3161"/> anchor and an <xref target="OPENTIMESTAMPS"/> anchor are present.</li>
      </ul>
      <t>A Compliance Verifier processing this receipt under the DORA Article 17 binding would additionally check that the receipt is retained for the five-year window and that the incident_class field, where applicable, is drawn from the implementing technical standards vocabulary.</t>
    </section>

    <section anchor="changelog" numbered="false"><name>Change Log</name>
      <section anchor="cl-00" numbered="false"><name>draft-marques-asqav-compliance-receipts-00</name>
        <t>Initial version. Defines a profile of <xref target="ACTA-RECEIPTS"/> that binds receipt fields to EU AI Act Article 12, EU AI Act Article 26, and DORA Article 17.</t>
      </section>
    </section>
  </back>
</rfc>
