<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="rfc2629.xslt"?>
<rfc xmlns:xi="http://www.w3.org/2001/XInclude"
     ipr="trust200902"
     docName="draft-marques-asqav-compliance-receipts-08"
     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-08"/>
    <author fullname="Joao Andre Gomes Marques"
            initials="J. A."
            surname="Gomes Marques">
      <organization>Asqav</organization>
      <address>
        <postal>
          <country>Portugal</country>
        </postal>
        <email>info@asqav.com</email>
      </address>
    </author>
    <date/>
    <area>General</area>
    <keyword>AI Agents</keyword>
    <keyword>Audit Trail</keyword>
    <keyword>Compliance</keyword>
    <keyword>EU AI Act</keyword>
    <keyword>DORA</keyword>
    <keyword>NIST AI RMF</keyword>
    <keyword>Colorado AI Act</keyword>
    <keyword>HIPAA</keyword>
    <keyword>NYDFS</keyword>
    <keyword>CIRCIA</keyword>

    <abstract>
      <t>This document defines a multi-jurisdiction 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 two regulatory surfaces: on the European Union side, Articles 12 and 26 of the EU AI Act (Regulation (EU) 2024/1689) and Article 17 of DORA (Regulation (EU) 2022/2554); on the United States side, the NIST AI Risk Management Framework, the Colorado AI Act, the Texas Responsible AI Governance Act, the New York Department of Financial Services Cybersecurity Regulation (23 NYCRR Part 500), the HIPAA Security Rule, SEC Rule 17a-4, and the Cyber Incident Reporting for Critical Infrastructure Act of 2022 (CIRCIA). Working entirely within the existing wire format, canonicalization transformation, and signing algorithms of the underlying receipt format, the profile tightens a subset of the OPTIONAL fields to REQUIRED, imposes a retention floor, and requires at least one timestamping anchor (RFC 3161 or OpenTimestamps). It registers OPTIONAL extension fields for risk and incident classification, cross-agent envelope binding, per-action validity-window and integrity, build provenance, threat-framework taxonomy, server-built enforcement-control records, producer-asserted risk acceptance, and producer-asserted code authorship, each subject to false-attestation guards where applicable, and registers receipt type namespaces for passive-telemetry, result-bound observation, risk-acceptance, and code-authorship receipts. Revision -08 additionally defines an attestation statement envelope (a Dead Simple Signing Envelope (DSSE) Pre-Authentication Encoding wrapping an in-toto Statement v1 under an asqav predicate namespace) with two tiers: a voluntary observation attestation that signs a caller-supplied digest and is explicitly not a capture, and an authoritative attestation whose subject digest the issuing platform re-derives from independent evidence (for code, the SHA-256 of the raw unified diff re-fetched from the source host); revision -08 further defines the capture-layer integrity, independent verification protocol, honest-tiering, and service-identity and revocation rules that govern those attestation statements, and documents the shipped keyed-digest wire tokens and the verifier verdict vocabulary (<tt>verified</tt>, <tt>verified_keyed</tt>, <tt>unverified</tt>). The full field set and its normative requirements are defined in the body of this document.</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 <tt>type</tt>, <tt>issued_at</tt>, and <tt>issuer_id</tt> are OPTIONAL. Upstream's "Chain Hash Scope" section (Section 5.7 of <xref target="ACTA-RECEIPTS"/>) introduces hash chaining (<tt>previousReceiptHash</tt>) 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>This document is an additive overlay on <xref target="ACTA-RECEIPTS"/>: it constrains fields the upstream draft leaves OPTIONAL, fixes their values where regulation requires, and registers a set of extension fields with reserved names spanning regulatory classification, cross-agent envelope binding, per-action freshness and integrity, build provenance, threat-framework taxonomy, and server-built enforcement-control records. The full extension-field set is defined in <xref target="extension-fields"/> and the sections that follow it. A Compliance Receipt remains a conformant <xref target="ACTA-RECEIPTS"/> receipt. Field references use upstream field names rather than section numbers, to reduce maintenance hazard if upstream re-numbers in a future revision.</t>
      </section>
      <section anchor="scope"><name>Scope</name>
        <t>This document fills the regulatory binding gap on two surfaces. Section 6 binds the receipt to European Union obligations: Article 12 (record-keeping) and Article 26 (deployer obligations) of the EU AI Act, and Article 17 (ICT-related incident management) of DORA. Section 7 binds the receipt to United States obligations: the voluntary functions of the NIST AI Risk Management Framework, the deployer obligations of the Colorado AI Act and the Texas Responsible AI Governance Act, the audit-trail and incident-reporting obligations of NYDFS Part 500, the audit controls and documentation retention of the HIPAA Security Rule, the broker-dealer recordkeeping requirements of SEC Rule 17a-4, and the covered-incident reporting requirements of CIRCIA.</t>
        <t>The bindings are written from the Deployer's perspective, where Deployer is used in the regime-specific sense (Article 3(4) of <xref target="EU-AI-ACT"/> for EU bindings; Section 6-1-1701(6) of the Colorado Revised Statutes for Colorado bindings). Where another statute uses a different term (Provider, Financial Entity, Covered Entity for HIPAA, Covered Entity for NYDFS, Broker-Dealer for SEC, Covered Entity for CIRCIA), the binding section names the term as the source statute uses it.</t>
        <t>A verifier that implements only <xref target="ACTA-RECEIPTS"/> can cryptographically validate a profile receipt but cannot attest the additional compliance bindings of this document.</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 (EU AI Act):</dt>
        <dd>As defined in Article 3(4) of <xref target="EU-AI-ACT"/>.</dd>
        <dt>Deployer (Colorado AI Act):</dt>
        <dd>As defined in Section 6-1-1701(6) of the Colorado Revised Statutes, as enacted by <xref target="COLORADO-AI-ACT"/>.</dd>
        <dt>High-Risk AI System (EU AI Act):</dt>
        <dd>As defined in Article 6 of <xref target="EU-AI-ACT"/>.</dd>
        <dt>High-Risk AI System (Colorado AI Act):</dt>
        <dd>As defined in Section 6-1-1701(9) of the Colorado Revised Statutes, as enacted by <xref target="COLORADO-AI-ACT"/>.</dd>
        <dt>Financial Entity:</dt>
        <dd>As defined in Article 2(2) of <xref target="DORA"/>, for entities listed in Article 2(1).</dd>
        <dt>Covered Entity (HIPAA):</dt>
        <dd>As defined in 45 CFR 160.103, namely a health plan, a health care clearinghouse, or a health care provider that transmits health information in electronic form in connection with a covered transaction.</dd>
        <dt>Covered Entity (NYDFS):</dt>
        <dd>As defined in 23 NYCRR 500.1(e), namely any person operating under or required to operate under a license, registration, charter, certificate, permit, accreditation or similar authorization under the Banking Law, the Insurance Law or the Financial Services Law, regardless of whether the covered entity is also regulated by other government agencies.</dd>
        <dt>Broker-Dealer:</dt>
        <dd>As defined in section 3(a)(4) and 3(a)(5) of the Securities Exchange Act of 1934, subject to recordkeeping under <xref target="SEC-17A-4"/>.</dd>
        <dt>Covered Entity (CIRCIA):</dt>
        <dd>As to be defined in the final rule promulgated under the Cyber Incident Reporting for Critical Infrastructure Act of 2022. Pending publication of the final rule, the term is interpreted in accordance with the statutory definition at 6 U.S.C. 681 and CISA's notice of proposed rulemaking.</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 and 7 of this document, packaged for delivery to a regulator or auditor.</dd>
        <dt>Counterparty:</dt>
        <dd>The entity on the receiving side of an Action performed by another party's agent: the participant whose rights, systems, or funds the Action touches, and for whom the Compliance Receipt covering that Action is evidence. The Counterparty occupies the demand side of the receipt: it consumes verification verdicts; it does not emit receipts.</dd>
        <dt>Acceptor:</dt>
        <dd>The role a Counterparty occupies when it conditions acceptance of an incoming Action, or of the Action's output, on the verdict of a Compliance Verifier. An Acceptor gates the incoming Action on verification and treats an unverified receipt as non-acceptable input; the gating policy itself is outside the scope of this profile.</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 canonicalization rule, the signature object's member set, or the algorithm set of <xref target="ACTA-RECEIPTS"/>. It extends the envelope: upstream defines two top-level fields (<tt>payload</tt> and <tt>signature</tt>); this profile mandates a third, the top-level <tt>anchors</tt> array of <xref target="anchoring"/>, and diverges from the upstream lowercase-hexadecimal <tt>sig</tt> encoding by carrying base64, as disclosed in <xref target="field-profile"/>.</t>
      <t>The following normative statements apply.</t>
      <ul>
        <li>Implementations of this profile MUST produce receipts that are cryptographically verifiable by an <xref target="ACTA-RECEIPTS"/> verifier implementing the signing process of upstream Section 4.1, under the canonicalization rules (JCS, <xref target="RFC8785"/>) and the signature scope defined in <xref target="hash-chain"/>. Warning: a verifier implementing the receipt-minus-signature reading of upstream's "Signature Scope" section (Section 5.6) will not validate Compliance Receipts, and a verifier limited to upstream's EdDSA and ES256 algorithm set will not validate ML-DSA-65-signed receipts.</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 sign with EdDSA (Ed25519, mandatory-to-implement, <xref target="RFC8032"/>), ES256 (ECDSA using P-256 and SHA-256, <xref target="RFC7518"/>), or ML-DSA-65 (<xref target="FIPS204"/>). The first two are the algorithms upstream permits; ML-DSA-65 is added by this profile, and an upstream-conformant verifier that does not implement it will not validate such receipts.</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), under a chain-digest scope that deliberately overrides upstream's "Chain Hash Scope" section (Section 5.7 of <xref target="ACTA-RECEIPTS"/>, <xref target="hash-chain"/>); mandatory anchoring with RFC 3161 or OpenTimestamps (both RECOMMENDED; upstream lists Sigstore Rekor in its Implementation Status appendix as an OPTIONAL temporal anchor); and a retention floor tied to specific regulatory articles (upstream is silent on retention).</t>
      <t>Publication dependency: this profile's normative foundation is <xref target="ACTA-RECEIPTS"/>, an Internet-Draft. Publication of this document as an RFC is gated on that draft's publication, because an RFC carrying a normative reference to an unpublished Internet-Draft is held by the RFC Editor until the referenced document publishes.</t>
      <t>Role vocabulary (informative): this document uses "verifier" throughout for a single role. This profile's verifier occupies the use-time position: it checks the receipt, the chain, the validity window, and the action binding, and it does not appraise evidence about the execution environment that produced the Action. The RATS architecture (<xref target="RFC9334"/>, informatively) distinguishes that appraisal position from the use-time one; nothing in this profile imports RATS normatively.</t>
    </section>

    <section anchor="canonicalization-scope"><name>Canonicalization Scope</name>
      <t>This section is normative. The canonicalization rule itself (JCS, <xref target="RFC8785"/>) is inherited unchanged from <xref target="ACTA-RECEIPTS"/>; this section bounds the inputs the rule is applied to, so that the cross-implementation byte equality on which the hash chain of <xref target="hash-chain"/>, the anchor scope of <xref target="anchoring"/>, and the cross-agent binding of <xref target="counterparty-binding"/> all depend is achievable in practice.</t>
      <t>IEEE-754 floating-point numbers MUST NOT appear in the canonical form covered by a SHA-256 digest under this profile. Callers MUST serialize numeric values that are not exact integers in the IEEE-754 safe integer range (the closed interval from minus (2 to the 53 minus 1) to plus (2 to the 53 minus 1) inclusive) either as JSON strings or as integer-rational pairs (numerator and denominator as JSON numbers within that safe integer range) before the canonicalization step.</t>
      <t>Rationale: Section 3.2.2.3 of <xref target="RFC8785"/> specifies, by reference to Section 7.1.12.1 of ECMA-262, a byte-stable serialization that in principle covers all IEEE-754 double-precision values, integer or fractional. In practice, several widely deployed JSON serializers do not implement the ECMA-262 Number-to-String algorithm with byte fidelity: Python <tt>json.dumps</tt>, Go <tt>encoding/json</tt>, and Java Jackson (without explicit configuration) all produce different byte sequences from the same IEEE-754 double in documented cases (round-to-even ties, subnormal values, large-magnitude values requiring scientific notation). Compliance and regulatory contexts (monetary amounts, retention thresholds, anchoring intervals) additionally prefer exact integer or string-encoded decimal representations because float rounding loses the exact bytes that auditors quote. This profile therefore shifts the canonicalization burden off implementers (who would otherwise have to verify ECMA-262 conformance of an underlying JSON library) and onto callers, who are in a better position to choose a portable representation for the use case at hand. A receipt that carries a floating-point number in a digest-covered field is not guaranteed to verify across implementations even when each implementation independently conforms to <xref target="RFC8785"/>, because the conformance burden has not been met by every mainstream JSON library.</t>
      <t>Tool-version-specific semantic equivalence is OUT OF SCOPE for the chain layer of this profile. The chain layer guarantees byte equality only. Examples of semantic equivalence that this profile does not assert and does not require a verifier to assert: SQL keyword case folding (SELECT vs select), filesystem path normalization (trailing slash, redundant separators, symlink resolution), Unicode normalization in any form (NFC, NFD, NFKC, NFKD); Section 3.1 of <xref target="RFC8785"/> requires that all components depending on JCS preserve Unicode string data as-is, and Section 3.2.2.2 of <xref target="RFC8785"/> serializes each code point without normalization, so callers MUST NOT rely on a verifier normalizing strings before comparison, locale-aware string collation (Turkish dotted-i, German sharp-s case folding, ICU collation tables), numeric tolerance (1.0 vs 1, 1e3 vs 1000), or URL percent-encoding choices below the RFC 3986 unreserved set. Higher-level semantic equivalence is a per-tool concern and, where required by a regulator, MUST be expressed in the policy artefact resolved through <tt>policy_digest</tt> (<xref target="policy-digest"/>) rather than in the chain.</t>
      <t>The chain layer of this profile answers a single question for a verifier or a regulator: did the same canonicalized bytes pass through agent X at wall-clock time T, as fixed by the anchor evidence of <xref target="anchoring"/>. Anything beyond that question, including whether two byte sequences are semantically equivalent under a downstream tool, whether a policy update materially changed the meaning of a previously accepted Action, or whether a counterparty's interpretation of the same bytes matched the originator's, is the verifier's concern and is supported by the Audit Pack manifest (<xref target="audit-pack"/>) and the verifier reporting fields of <xref target="reporting"/>, not by the chain itself.</t>
      <t>The envelope of this profile has exactly three top-level members (<tt>payload</tt>, <tt>signature</tt>, <tt>anchors</tt>), and all signed content lives inside the <tt>payload</tt> member; the <tt>signature</tt> and <tt>anchors</tt> members sit beside it, outside the signed content. The digest scopes of this profile therefore resolve to the payload member: the chain-link digest of <xref target="hash-chain"/> and the JSON-framing signature input each cover the JCS-canonical serialization of a receipt's <tt>payload</tt> member (the predecessor's for the chain link, the receipt's own for the signature), and the only envelope-level scope in this profile is the envelope-minus-anchors object of <xref target="counterparty-binding"/>, which exists precisely to bind the peer's signature value. No digest in this profile covers the envelope including the <tt>signature</tt> member. Receipts outside this profile are not re-scoped by this section: an ACTA-family receipt verified under its native format keeps the digest scope its own format defines - for an upstream <xref target="ACTA-RECEIPTS"/> Commitment Mode receipt, the whole-receipt scope of its "Chain Hash Scope" section. An implementation that verifies both Compliance Receipts and upstream ACTA-family receipts therefore switches digest scope on receipt format - payload-member scope under this profile, whole-receipt scope under upstream Commitment Mode - and needs no separate fixture set per format family.</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>
      <t>Compliance Receipts MUST use the upstream wire field name <tt>signature</tt> for the signature object, as defined in Sections 2.1 and 2.1.1 of <xref target="ACTA-RECEIPTS"/>, with one disclosed divergence: this profile encodes <tt>sig</tt> in base64, where upstream requires a lowercase hexadecimal string. The keys inside that object are <tt>alg</tt>, <tt>kid</tt>, <tt>sig</tt>. Implementations whose internal storage uses a different field name MUST translate to <tt>signature</tt> on emission and on canonicalization for verification; receipts that appear on the wire under any other top-level field name are non-conformant to <xref target="ACTA-RECEIPTS"/> and to this profile. Anchors MUST be projected into a top-level <tt>anchors</tt> array with a <tt>type</tt> discriminator and a <tt>value</tt> field carrying the anchor bytes (base64-encoded for binary payloads). Flat-column implementations MUST project on emission and Audit Pack export.</t>

      <section anchor="common-fields"><name>Common Payload Fields</name>
        <section anchor="type"><name>type</name>
          <t>Compliance Receipts MUST set <tt>type</tt> to a value drawn from the namespace <tt>protectmcp:decision</tt>, <tt>protectmcp:restraint</tt>, or <tt>protectmcp:lifecycle</tt>, 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 <tt>issued_at</tt> is more than 300 seconds ahead of the verifier's own clock. Verifiers MUST NOT reject a receipt solely because <tt>issued_at</tt> lies in the past; past skew is bounded by the applicable retention floor in Sections 6 and 7, not by freshness. Historical receipts within retention MUST verify on the same path as fresh ones.</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 <tt>issuer_id</tt> MUST resolve, through the trust anchor metadata in the Audit Pack, to a record naming the Deployer. To preserve the upstream Section 2.2 invariant that <tt>issuer_id</tt> MUST match the <tt>kid</tt> field of the signature object, Compliance Receipts MUST place the same value in both <tt>issuer_id</tt> and <tt>kid</tt>; the verifier resolves that value to a public key through the Audit Pack trust-anchor metadata rather than through the well-known JWK Set endpoint or the RECOMMENDED <tt>sb:issuer:&lt;base58-fingerprint&gt;</tt> form of <xref target="ACTA-RECEIPTS"/> Section 2.1.1. This profile thereby supersedes the upstream RECOMMENDED <tt>kid</tt> format for Compliance Receipts; the upstream RECOMMENDED format remains valid for non-Compliance receipts.</t>
          <t>Implementations SHOULD use a Legal Entity Identifier (LEI) as defined by <xref target="ISO17442"/> where one is allocated to the Deployer. Examples and test fixtures MUST use a placeholder whose four-character LOU prefix (positions 1-4) is not allocated in the GLEIF Local Operating Unit code list, whose positions 5-6 are the ISO 17442 reserved value <tt>00</tt>, and whose two trailing characters (positions 19-20) are the ISO 7064 mod 97-10 check digits computed over positions 1-18 (for example <tt>00000000000000000098</tt>, where the all-zero 18-character base produces the check digits <tt>98</tt> per the ISO 17442-1:2020 Annex A check-digit algorithm, which converts any letters in positions 1-18 to digits A=10 ... Z=35 before the mod 97-10 computation; for an all-zero base the conversion is a no-op); implementations MUST NOT use a real third-party LEI in documentation or test data. Where no LEI is allocated and the Deployer is a US entity, an Employer Identification Number (EIN) issued by the United States Internal Revenue Service or a Central Index Key (CIK) issued by the United States Securities and Exchange Commission MAY be used, expressed as the bare numeric string. Decentralized Identifiers (<xref target="W3C-DID"/>) MAY be used otherwise. Implementations MUST treat the value as opaque on verification; identifier resolution is out of scope for this profile.</t>
          <t><tt>issuer_id</tt> values MUST be bare identifiers without a scheme prefix where the scheme is unambiguous from the value's syntactic form. An LEI is the 20-character alphanumeric string defined by <xref target="ISO17442"/> and is self-identifying through its length and check-digit structure; implementations MUST emit the bare 20-character LEI without a <tt>lei:</tt> or other scheme prefix. EINs and CIKs are likewise emitted as the bare numeric string. Decentralized Identifiers (<xref target="W3C-DID"/>) carry their own scheme prefix (<tt>did:</tt>) as defined by the DID specification and that prefix is intrinsic to the identifier syntax rather than an added scheme tag. The same <tt>kid</tt>-equals-<tt>issuer_id</tt> invariant requires <tt>signature.kid</tt> to be the bare identifier in the same form. The worked example in <xref target="example"/> uses the bare 20-character placeholder LEI <tt>00000000000000000098</tt>; conformant cloud emitters and SDK clients MUST match this form on the wire.</t>
        </section>
        <section anchor="payload-digest"><name>payload_digest (OPTIONAL upstream, REQUIRED in this profile)</name>
          <t>REQUIRED for Compliance Receipts. The value MUST follow the upstream object form (<tt>hash</tt>, <tt>size</tt>, optional <tt>preview</tt>) defined in Section 2.2 of <xref target="ACTA-RECEIPTS"/>; this profile does not redefine the wire shape. The associated payload that this digest covers MUST be retained for the period mandated by the most restrictive applicable regime in Sections 6 and 7 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 <tt>action_ref</tt> 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 under either <xref target="EU-AI-ACT"/> or <xref target="COLORADO-AI-ACT"/>. Upstream defines <tt>sandbox_state</tt> as an OS-level containment status and restricts the value to one of <tt>enabled</tt>, <tt>disabled</tt>, or <tt>unavailable</tt>; this profile inherits that enumeration unchanged. A Deployer that operates a High-Risk AI System and produces a stream of receipts in which <tt>sandbox_state</tt> is consistently disabled SHOULD treat that stream as a finding under the applicable risk-management documentation requirement (Article 9 of <xref target="EU-AI-ACT"/> for the Provider's risk management system, with which a Deployer operating per Article 26(1) is required to be consistent; Section 6-1-1703(2) of the Colorado Revised Statutes) 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. <tt>iteration_id</tt> is distinct from the upstream <tt>session_id</tt> field defined in <xref target="ACTA-RECEIPTS"/> Section 3.1.1, which is an opaque MCP session identifier. A Compliance Receipt MAY carry both: <tt>session_id</tt> for MCP-session correlation and <tt>iteration_id</tt> for logical-task correlation.</t>
        </section>
        <section anchor="key-thumbprint"><name>key_thumbprint (No Upstream Equivalent)</name>
          <t>No upstream equivalent. OPTIONAL for receipts emitted in compatibility with prior revisions of this profile (a -07 receipt remains a conformant receipt under this revision); implementations conformant to this revision SHOULD emit the field on every new receipt, and the issuing platform MUST compute it when it does. The value is a JSON string of the form <tt>sha256:&lt;64 lowercase hex chars&gt;</tt> carrying the JWK Thumbprint of the receipt's signing key, computed per Section 3 of <xref target="RFC7638"/>: SHA-256 over the canonical JSON serialization of the JWK containing only the required members of the key's <tt>kty</tt>, with members in lexicographic order and no whitespace. The JWK input form is the one in which the issuing platform publishes the verification key under <xref target="service-identity"/> or the Audit Pack trust-anchor metadata, so a verifier recomputes the thumbprint from the resolved key with no additional distribution. The field is server-built: it is populated by the issuing platform at signing time from its own signing key, never carried in the producer's signing request, and a caller-supplied value MUST be dropped before signing. The field is covered by the signature scope of <xref target="hash-chain"/>.</t>
          <t>The purpose of the field is key-substitution detection. Receipts bind to a signing key indirectly, through the <tt>kid</tt>-equals-<tt>issuer_id</tt> resolution of <xref target="issuer-id"/>; a compromised or coerced key distribution that substitutes a different public key under the same identifier is invisible at the receipt layer without this binding. With <tt>key_thumbprint</tt> present, the receipt commits to the exact key material: a verifier that resolves a verification key whose recomputed thumbprint differs from the receipt value MUST report the receipt as non-conformant (the key-substitution case) and MUST NOT report it as verified under the substituted key. Absence of the field is the legacy case: a verifier MUST NOT report a receipt non-conformant solely for lacking <tt>key_thumbprint</tt>, and SHOULD note in its report that the key binding was not checked. A future revision is expected to move the field from SHOULD-emit to REQUIRED once adoption permits; the additivity rule of this revision keeps absence conformant until then.</t>
        </section>
      </section>

      <section anchor="decision-fields"><name>Decision Receipt Fields (type protectmcp:decision)</name>
        <t>The <tt>decision</tt> field value MUST be <tt>allow</tt>, <tt>deny</tt>, <tt>rate_limit</tt>, or <tt>observation</tt>. Implementations using a different internal vocabulary (e.g. <tt>permit</tt> for allow) MUST normalise on emission and on Audit Pack export. The <tt>observation</tt> value records that an Action was observed and the receipt was signed without any policy evaluation having taken place; it is the regulator-honest alternative to emitting <tt>allow</tt> when no policy matched, and MUST NOT appear in a receipt of <tt>type</tt> <tt>protectmcp:decision</tt>. A producing system that has not evaluated a policy for an Action MUST either refuse to issue a Compliance Receipt for that Action or MUST emit the receipt with <tt>decision</tt> <tt>observation</tt> under <tt>type</tt> <tt>protectmcp:lifecycle</tt> or any registered namespace of the observation path listed in <xref target="iana-type-namespaces"/> (including <tt>protectmcp:observation</tt> and its sub-namespaces); in the latter case the upstream <tt>policy_decision</tt> internal field, if present in the producing system's internal vocabulary, takes the literal value <tt>none</tt>, which the emitter MUST map to <tt>observation</tt> on the wire. Verifiers MUST reject a Compliance Receipt that carries <tt>decision</tt> <tt>observation</tt> together with <tt>type</tt> <tt>protectmcp:decision</tt>; conversely, a Compliance Receipt of <tt>type</tt> <tt>protectmcp:lifecycle</tt> MAY carry <tt>decision</tt> <tt>observation</tt> in addition to the other three vocabulary values. The <tt>policy_digest</tt> requirement of <xref target="policy-digest"/> applies to <tt>observation</tt> receipts in the form of a digest of the producing system's "no policy matched" sentinel policy artefact, which the Deployer MUST retain alongside its other policy artefacts for the applicable retention window.</t>
        <t>The upstream <tt>tool_name</tt> field (REQUIRED in <xref target="ACTA-RECEIPTS"/> Section 3.1.1) is REQUIRED for Compliance Receipts of type <tt>protectmcp:decision</tt>.</t>
        <section anchor="reason"><name>reason (OPTIONAL upstream, REQUIRED for deny/rate_limit in this profile)</name>
          <t>REQUIRED for Compliance Receipts where <tt>decision</tt> is <tt>deny</tt> or <tt>rate_limit</tt>. The value MUST be a machine-readable <tt>reason</tt> 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 <tt>sha256:&lt;hex&gt;</tt> and MUST reference a policy artefact that the Deployer retains for the applicable retention window. Verifiers MUST reject Compliance Receipts whose <tt>policy_digest</tt> 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 <tt>previousReceiptHash</tt> as part of an optional extension. This profile makes the linkage REQUIRED. Receipts in this profile have the envelope shape {<tt>payload</tt>, <tt>signature</tt>, <tt>anchors</tt>}: every signed field lives inside the <tt>payload</tt> member, and the <tt>signature</tt> and <tt>anchors</tt> members sit beside it, outside the signed content. Implementations MUST emit a <tt>previousReceiptHash</tt> field, populated with the lowercase hex encoding of SHA-256(JCS(R)), where R is the <tt>payload</tt> member of the immediately prior receipt emitted by the same <tt>issuer_id</tt> and JCS denotes the canonicalization of <xref target="RFC8785"/>: the digest covers R, NOT the envelope object that additionally includes the <tt>signature</tt> or <tt>anchors</tt> top-level keys. This digest scope is a deliberate override of upstream's "Chain Hash Scope" section (Section 5.7 of <xref target="ACTA-RECEIPTS"/>), which requires the digest of the entire signed receipt object including the <tt>signature</tt> field; this profile digests the predecessor's payload member instead. The signature scope follows from the envelope shape: in the JSON framing (mandatory-to-implement per <xref target="counterparty-binding-wire"/>), the signature in the <tt>signature</tt> member verifies over the JCS-canonical serialization of the <tt>payload</tt> member and nothing else; COSE-framed and JWS-framed receipts inherit their signature scope from <xref target="RFC9052"/> and <xref target="RFC7515"/> respectively, with the <tt>payload</tt> member carried as the COSE payload or the JWS payload. Upstream's "Signature Scope" section (Section 5.6 of <xref target="ACTA-RECEIPTS"/>) is internally inconsistent on this point - it first requires the signature to cover the canonical JCS bytes of the payload directly, then redefines the payload as the receipt object with the signature field removed - and this profile follows the first sentence, as upstream Section 4.1 does. The <xref target="SCOPEBLIND"/> corpus documents both readings in the wild (<xref target="audit-pack"/>). The first receipt in a chain MUST set this field to the all-zero SHA-256 value (this profile's stipulation; upstream's "Chain Hash Scope" section (Section 5.7 of <xref target="ACTA-RECEIPTS"/>) specifies only the digest scope of subsequent links). JSON key is the literal <tt>previousReceiptHash</tt> (camelCase, case-sensitive); snake_case aliases MUST NOT appear on the wire.</t>
        <t>Rationale for digesting R rather than the envelope-including-signature object: the chain layer's purpose is to make after-the-fact alteration of the predecessor's signed content detectable, and the predecessor's signed content is exactly R, the bytes its <tt>signature</tt> covers. Digesting R binds the chain to what A actually attested to and is recomputable offline from the predecessor's payload alone. The chain does not need to bind the predecessor's signature value directly because the predecessor's signature is verified independently under <xref target="mandatory-checks"/>, and cross-agent envelope integrity (where binding the peer's signature value matters) is the role of <tt>counterparty_binding</tt> per <xref target="counterparty-binding"/>, which digests at the envelope-including-signature scope precisely because the peer signature is the load-bearing artefact in the cross-agent case. Because this section deliberately overrides the upstream digest scope, implementations that previously digested the envelope-including-signature object MUST migrate to SHA-256(JCS(R)) before emitting chained receipts under this profile; verifiers MUST recompute SHA-256(JCS(R)) when checking <tt>previousReceiptHash</tt>.</t>
        <t>Each issuer MUST maintain a single linear per-agent chain. When one agent identity emits receipts from multiple concurrent execution paths (for example parallel tool calls dispatched within a single agent loop, or fan-out work performed by a thread pool inside one issuer), the issuer MUST serialize emission through a single predecessor pointer at a time: each newly emitted receipt's <tt>previousReceiptHash</tt> MUST resolve to SHA-256(JCS(R)) for the immediately prior receipt emitted by that same <tt>issuer_id</tt> (R as defined at the start of this section), taken in emission order, regardless of which concurrent execution path produced it. Parallel sub-chains within one agent identity (for example, a per-receipt <tt>chain_id</tt> discriminator that would partition one issuer's stream into multiple independently advancing chains) are NOT defined by this profile. An issuer that requires parallel sub-chains MUST express each parallel path as a distinct agent identity, with its own <tt>issuer_id</tt> value, its own signing key, and its own per-agent chain rooted at the all-zero SHA-256 genesis value. Rationale: deterministic verification of the chain segment covering an audit window, as required by the regime bindings of Sections 6 and 7 (in particular <xref target="dora-17-2"/>, <xref target="nydfs-500-06"/>, and <xref target="sec-17a-4-f"/>), depends on a single linear total order over the receipts emitted under each agent identity. A verifier reconstructing the chain from a regulator-supplied <tt>issuer_id</tt> needs that ordering to be well-defined without out-of-band metadata.</t>
        <t>Interoperability note: receipts of this profile chain over the payload member R, whereas receipts of the bare <xref target="ACTA-RECEIPTS"/> format chain over the whole-receipt object that includes the signature; the two wire formats are distinguished by the Asqav-only <tt>anchors</tt> key. The normative scope rule is the one defined in this section. The published conformance vectors <tt>asqav-03-chain-link</tt> (payload scope) and <tt>acta-02-chain-link</tt> (whole-receipt scope) corroborate it byte-for-byte and are published in the asqav-sdk repository (<xref target="ASQAV-SDK"/>, maintained by this draft's author and commit-pinned in the reference below), so an implementer or independent verifier choosing between the two scopes need not maintain one fixture set per candidate scope.</t>
      </section>

      <section anchor="anchoring"><name>Anchoring (No Upstream Equivalent)</name>
        <t><xref target="ACTA-RECEIPTS"/> lists Sigstore Rekor in its Implementation Status appendix as an OPTIONAL temporal anchor. This profile imposes a normative anchoring requirement.</t>
        <t>Compliance Receipts MUST be anchored. An anchor is an <xref target="RFC3161"/> timestamp token, an <xref target="OPENTIMESTAMPS"/> commitment, or both, and in every case commits the same bytes, defined in this paragraph; implementations SHOULD emit both forms. For both anchor types, the bytes committed are SHA-256(JCS(envelope_minus_anchors)), where envelope_minus_anchors is the wire envelope object with the <tt>anchors</tt> top-level key removed prior to canonicalization, leaving the two-key object {<tt>payload</tt>, <tt>signature</tt>}. The <tt>anchors</tt> key MUST be removed from the object, not set to null or to an empty array; these produce different JCS output and break interoperability (the remove-don't-null rule of upstream's "Signature Scope" section, Section 5.6 of <xref target="ACTA-RECEIPTS"/>, applied here at the anchor layer). The anchor thereby binds payload and signature without being self-referential. 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>An anchor MAY be attached after issuance if the receipt is persisted with an unambiguous <tt>pending</tt> marker and the anchor lands within a documented bound. For <xref target="OPENTIMESTAMPS"/>, this profile imposes a 7-day deadline; this is a profile-imposed bound, not a property of the OpenTimestamps protocol, whose calendar-to-block upgrade time depends on the calendar operator's publication interval. <xref target="RFC3161"/> tokens MUST be obtained synchronously. A verifier MUST treat a pending receipt as non-conformant once the bound elapses.</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 <tt>type</tt> is <xref target="RFC3161"/>, the full TimeStampResp DER bytes MUST be retained, sufficient for offline verification by a holder with access to the TSA's published public key. Time-stamp tokens carrying ESSCertIDv2 per <xref target="RFC5816"/> MUST be accepted by Compliance Verifiers. An <tt>rfc3161</tt> anchor MAY be obtained from a Time-Stamping Authority operated independently of the issuer (for example a public RFC 3161 TSA under a distinct trust root) in addition to, or instead of, an issuer-operated TSA. The independently operated TSA is the genuinely independent witness referenced in <xref target="anchor-trust"/>, and is one of the N witnesses of <tt>witness_policy</tt> rather than ever the sole anchor. Where the anchor <tt>type</tt> is <xref target="OPENTIMESTAMPS"/>, the upgrade from the initial calendar attestation to the Bitcoin block attestation MUST be completed within the 7-day profile-imposed bound, and the upgraded proof MUST be retained for the applicable retention window per the second paragraph of this section.</t>
        <t>Each entry in the top-level <tt>anchors</tt> array is an object with the following members.</t>
        <dl>
          <dt><tt>type</tt>:</dt>
          <dd>REQUIRED string discriminator. MUST be one of <tt>rfc3161</tt> or <tt>opentimestamps</tt>.</dd>
          <dt><tt>value</tt>:</dt>
          <dd>REQUIRED on every anchor entry. The anchor token bytes, base64-encoded. For <tt>rfc3161</tt> the value is the base64 encoding of the full TimeStampResp DER bytes (sufficient for offline cryptographic re-verification by a holder with access to the TSA's published public key). For <tt>opentimestamps</tt> the value is the base64 encoding of the OpenTimestamps proof blob (the <tt>.ots</tt> serialization). A verifier MUST cryptographically re-verify the anchor against the signed envelope using these bytes per <xref target="mandatory-checks"/>; anchor entries served without <tt>value</tt> MUST NOT be reported as <tt>anchor_valid_*</tt>=true.</dd>
          <dt><tt>status</tt>:</dt>
          <dd>OPTIONAL informational string. When present, MUST be one of <tt>anchored</tt> (the anchor has reached its final attestation state: an <xref target="RFC3161"/> token has been obtained, or an <xref target="OPENTIMESTAMPS"/> commitment has upgraded to its Bitcoin block attestation), <tt>pending</tt> (the anchor has been requested but the final attestation state has not yet been reached, e.g. an OpenTimestamps commitment that has been submitted to a calendar but has not yet upgraded to a Bitcoin block within the 7-day bound of this section), or <tt>failed</tt> (the anchor submission was attempted and did not produce a usable attestation, e.g. a TSA returned an error response or an OpenTimestamps calendar refused the commitment). <tt>status</tt> is operational metadata; a verifier MUST NOT derive cryptographic validity from <tt>status</tt> alone, and MUST always re-verify the <tt>value</tt> bytes per <xref target="mandatory-checks"/>.</dd>
          <dt><tt>anchor_block_hash</tt>:</dt>
          <dd>OPTIONAL informational string. The Bitcoin block hash at which an <xref target="OPENTIMESTAMPS"/> commitment was anchored. Present only on entries with <tt>type</tt>=<tt>opentimestamps</tt> and <tt>status</tt>=<tt>anchored</tt>; absent on <tt>rfc3161</tt> entries and on pending or failed OpenTimestamps entries. <tt>anchor_block_hash</tt> is operational metadata; a verifier MUST NOT derive cryptographic validity from <tt>anchor_block_hash</tt> alone, and MUST always re-verify the <tt>value</tt> bytes against the OpenTimestamps proof per <xref target="mandatory-checks"/>.</dd>
        </dl>
        <t><tt>witness_policy</tt> is an OPTIONAL signing-time declaration the producer gives the issuing platform with the signing request; it is NOT a wire member of the receipt, and the envelope has exactly the three top-level keys of <xref target="hash-chain"/>. It declares an N-of-M durable-anchoring quorum over the receipt's <tt>anchors</tt> array. Because the declaration is not carried in the receipt, there is no policy member an intermediary can lower, rewrite, or strip after signing: the receipt's only anchoring record is the <tt>anchors</tt> array itself, covered by the signature scope and committed by every anchor. <tt>witness_policy</tt> is an object with two members: <tt>required</tt>, a REQUIRED integer in the closed range [1, length of <tt>witnesses</tt>]; and <tt>witnesses</tt>, a REQUIRED non-empty JSON array whose values are a subset of the anchor type vocabulary {<tt>rfc3161</tt>, <tt>opentimestamps</tt>}. The <tt>witnesses</tt> array MUST NOT contain duplicate values and MUST NOT contain any value outside that vocabulary; in particular a transparency-log pointer such as Rekor is NOT a witness type and MUST be rejected if it appears in <tt>witnesses</tt>. The policy declares that the receipt's durable anchoring is satisfied only when at least <tt>required</tt> distinct witness types named in <tt>witnesses</tt> each hold a verifiable inclusion proof, that is, an anchor entry of that <tt>type</tt> whose <tt>value</tt> bytes re-verify against SHA-256(JCS(envelope_minus_anchors)) per <xref target="mandatory-checks"/> and, for <tt>opentimestamps</tt>, has upgraded to its Bitcoin block attestation within the 7-day bound of this section.</t>
        <t>A receipt reaches the quorum-met state (the reference implementation reports this as <tt>witness_quorum_met</tt>) only when the count of distinct witness types satisfying the preceding paragraph is greater than or equal to <tt>required</tt>. A Compliance Receipt MUST NOT assert that durable anchoring has been achieved, and a producer MUST NOT set or report <tt>witness_quorum_met</tt>, unless <tt>required</tt> witnesses each hold a real, verifiable inclusion proof; an <tt>anchors</tt> entry with <tt>status</tt>=<tt>pending</tt> or <tt>status</tt>=<tt>failed</tt>, or with absent or non-verifying <tt>value</tt> bytes, does NOT count toward the quorum. This is the same false-attestation principle that governs the rest of this profile: a receipt MUST NOT claim a cryptographic property it cannot prove from retained bytes, and a verifier MUST recompute the quorum from the re-verified <tt>anchors</tt> entries rather than trust any producer-asserted quorum flag. The reference cloud implementation enforces the quorum honesty rule at signing time and publishes it as the <tt>witness_policy_required_exceeds_confirmed</tt> guard in its <tt>/.well-known/governance.json</tt> wire-vocabulary surface. <tt>witness_policy</tt> places no constraint on receipts signed without such a declaration; the baseline single-anchor requirement of this section continues to apply to every Compliance Receipt regardless of whether <tt>witness_policy</tt> was declared at signing time.</t>
      </section>

      <section anchor="unsigned-gap"><name>Signer-Outage Evidence (unsigned_gap)</name>
        <t>This section is normative. The hash chain of <xref target="hash-chain"/> links the receipts that exist and is silent about Actions for which no receipt could be minted, so a chain verifies perfectly across a signer outage. An issuing platform that fails to mint a receipt for an Action because its signer was unavailable MUST tally that failure and MUST carry the tally in the <tt>unsigned_gap</tt> member of the signed payload of the next receipt it successfully mints for that issuer. The member is an object with three REQUIRED members. <tt>count</tt> is a JSON integer greater than or equal to 1. <tt>from</tt> and <tt>to</tt> are ISO 8601 timestamps with explicit timezone bounding the outage, where <tt>from</tt> is not later than <tt>to</tt>. The member is absent when no outage precedes the receipt, so receipts minted in normal operation are unchanged.</t>
        <t>The tally MUST be cleared only when a receipt carrying it has been signed. A signing attempt refused for an authorization reason (a revoked or suspended agent identity, or a failed policy gate) is NOT a signer outage and MUST NOT be tallied. Such refusals are decisions, evidenced under <xref target="decision-fields"/>. The member is server-built in the sense of <xref target="enforcement-attestation"/>: a caller-supplied value MUST be dropped before signing. A verifier MUST NOT read it as evidence that the unsigned Actions were policy-evaluated.</t>
      </section>

      <section anchor="extension-fields"><name>Extension Fields</name>
        <t>This profile registers extension fields across seven groupings that MAY appear in the signed <tt>payload</tt> object alongside the fields defined by <xref target="ACTA-RECEIPTS"/>: (a) regulatory classification fields (<tt>risk_class</tt>, <tt>incident_class</tt>) defined in this section; (b) the cross-agent envelope-binding field <tt>counterparty_binding</tt> defined in <xref target="counterparty-binding"/>; (c) per-action validity-window and integrity fields (<tt>result_digest</tt>, <tt>expires_at</tt>, <tt>nonce</tt>, <tt>tool_fingerprint</tt>, <tt>config_manifest_digest</tt>, <tt>cve_inventory_digest</tt>) and build-provenance fields (<tt>executable_hash</tt>, <tt>sbom_digest</tt>, <tt>slsa_provenance_pointer</tt>, <tt>supply_chain_pointer</tt>) defined in <xref target="result-bound"/> and <xref target="build-provenance"/>; (d) server-built enforcement-control record fields (<tt>authorized_under_mandate</tt>, <tt>controls_evaluated</tt>) defined in <xref target="enforcement-attestation"/>; (e) producer-asserted risk-acceptance fields (<tt>approver_id</tt>, <tt>initiator_id</tt>, <tt>acceptance_reason</tt>, <tt>accepted_at</tt>, <tt>supersedes</tt>, <tt>sarif_digest</tt>, <tt>finding_ref</tt>, <tt>approval_ref</tt>, <tt>risk_snapshot</tt>) defined in <xref target="risk-acceptance"/>; (f) producer-asserted code-authorship fields (<tt>repo_ref</tt>, <tt>commit_sha</tt>, <tt>base_sha</tt>, <tt>change_digest</tt>, <tt>change_ref</tt>, <tt>change_approval_ref</tt>, <tt>change_class</tt>, <tt>authored_by</tt>) defined in <xref target="code-authorship"/>; and (g) self-declared threat-framework taxonomy fields (<tt>mitre_techniques</tt>, <tt>mitre_atlas</tt>, <tt>owasp_llm_top10</tt>, <tt>nist_ai_rmf</tt>, <tt>iso_42001</tt>, <tt>eu_ai_act_articles</tt>), the opaque caller-supplied <tt>rfc3161_timestamp</tt> token, and the platform-set guard <tt>framework_mappings_self_declared</tt> defined in <xref target="threat-framework"/>. All extension fields appear inside the signed <tt>payload</tt> object and are therefore covered by the signature scope defined in <xref target="hash-chain"/>.</t>
        <dl>
          <dt><tt>risk_class</tt>:</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. Where the Deployer operates under <xref target="EU-AI-ACT"/>, the documentation is the Provider's Article 9 risk management system as referenced via the instructions for use under Article 26(1); where the Deployer operates under <xref target="COLORADO-AI-ACT"/>, the documentation is the Section 6-1-1703(2) risk management policy and program.</dd>
          <dt><tt>incident_class</tt>:</dt>
          <dd>A vocabulary term identifying the incident classification of the Action under the applicable regime: an ICT-related incident under <xref target="DORA"/>, with classification criteria in <xref target="REG-2024-1772"/> and the canonical reporting enumeration of Annex II data glossary, field 3.23 (Type of the incident) of <xref target="REG-2025-302"/> (verifiers MUST resolve the canonical values from the regulation directly); a Cybersecurity Event under 23 NYCRR 500.1(f) (or, where the Section 500.17(a) reporting threshold is met, a Cybersecurity Incident under 23 NYCRR 500.1(g)) for Covered Entities of <xref target="NYDFS-500"/>; a Covered Cyber Incident under <xref target="CIRCIA"/> once the final rule takes effect; or a security incident under 45 CFR 164.304 for Covered Entities of <xref target="HIPAA-SECURITY"/>. Implementations MAY refine the set, provided the flattened mapping in the Audit Pack manifest (<xref target="audit-pack"/>) projects each refinement to the applicable canonical category for each in-scope regime.</dd>
        </dl>
        <t><tt>risk_class</tt> MUST be encoded as a JSON string. <tt>incident_class</tt> MUST be encoded as a JSON string drawn from the canonical vocabulary referenced in the Audit Pack, OR as a JSON array of such strings to preserve cross-regime classification (for example, a single Action that is both a DORA ICT-related incident and a CIRCIA Covered Cyber Incident, or both a NYDFS Cybersecurity Incident and a CIRCIA Covered Cyber Incident). Both fields are OPTIONAL at the syntactic level but MAY be REQUIRED by the regime bindings in Sections 6 and 7 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 anchor="counterparty-binding"><name>Counterparty Binding</name>
        <t>This section is normative. <tt>counterparty_binding</tt> is an in-payload object an acknowledging agent ("B") emits to carry a cryptographic digest of the full signed envelope of an originating agent ("A"). It provides cross-agent byte-equality evidence when a shared intermediary sits between two honest agents and the per-agent hash chains of <xref target="hash-chain"/> validate independently regardless of whether B's observed bytes equal A's signed bytes. <tt>action_ref</tt> is a correlation anchor, not a cryptographic binding (<xref target="ACTA-RECEIPTS"/> Section 2.2); <tt>counterparty_binding</tt> moves the evidence onto B's own COSE or JWS signature, which the verifier already trusts.</t>
        <section anchor="counterparty-binding-wire"><name>Wire Shape</name>
          <t>The field MUST appear inside the signed <tt>payload</tt> object. It MUST NOT appear in unprotected COSE or JWS header parameters, or in <tt>external_aad</tt> per <xref target="RFC9052"/> Section 4.3 when the receipt is used for audit (<tt>external_aad</tt> is permissible only in transport-optimized modes out of scope for Compliance Receipts). For COSE-framed receipts the field sits inside the COSE_Sign1 or COSE_Sign payload per <xref target="RFC9052"/> Section 4.1; for JWS-framed receipts it is a top-level claim per <xref target="RFC7515"/>.</t>
          <t>The field is an object with the following members.</t>
          <dl>
            <dt><tt>envelope_hash</tt>:</dt>
            <dd>
              <t>REQUIRED string. Base64-encoded SHA-256 digest computed over A's entire serialized signed envelope, including A's signature bytes. The digest input is framing-specific:</t>
              <ul>
                <li>JSON-framed (this profile's default for receipts not transported under COSE or JWS, and mandatory-to-implement for any conformant Compliance Receipt implementation): the JCS-canonical UTF-8 byte sequence of A's signed envelope JSON object per <xref target="RFC8785"/>, where the envelope is the three-key object <tt>{"payload": &lt;signed payload object&gt;, "signature": &lt;signature object with alg, kid, sig members&gt;, "anchors": &lt;array of anchor objects, OPTIONAL&gt;}</tt>. The <tt>payload</tt> object carries the signed fields A emitted (including <tt>type</tt>, <tt>issuer_id</tt>, <tt>issued_at</tt>, <tt>action_ref</tt>, <tt>payload_digest</tt>, <tt>previousReceiptHash</tt>, <tt>decision</tt>, and any extension fields under <xref target="extension-fields"/>); the <tt>signature</tt> object carries the algorithm identifier, key identifier, and base64- or base64url-encoded signature bytes exactly as A emitted them. B MUST NOT re-canonicalize A's payload or strip the <tt>anchors</tt> array before computing the digest.</li>
                <li>COSE-framed: the full COSE_Sign1 or COSE_Sign byte string per <xref target="RFC8949"/> Section 4.2 (deterministic encoding).</li>
                <li>JWS-framed: the full JWS Compact Serialization (header.payload.signature) after payload canonicalization per <xref target="RFC8785"/>.</li>
              </ul>
              <t>The digest algorithm is SHA-256 (mandatory-to-implement). The encoding MUST be standard base64 per <xref target="RFC4648"/> Section 4 on emission, OR base64url per Section 5 where the surrounding transport requires URL-safe encoding; verifiers MUST accept both alphabets and MUST normalise to a single alphabet (typically standard base64) before byte-comparing to a recomputed value. Including A's signature in the digest scope binds the signed-over content of A's receipt at the envelope level and prevents an intermediary that re-signs A's claims with a different key from escaping detection.</t>
              <t>The framing in which A's envelope was emitted MUST be preserved through B's binding. The value of <tt>envelope_hash</tt> is framing-specific because JCS-canonical JSON (UTF-16 code-unit lexicographic key ordering per <xref target="RFC8785"/>), COSE deterministic encoding (length-then-byte map-key ordering per <xref target="RFC8949"/> Section 4.2), and JWS Compact Serialization with JCS-canonical payload (UTF-16 code-unit lexicographic ordering per <xref target="RFC8785"/>) produce different byte sequences from the same semantic payload-and-signature, and the three framings therefore yield different <tt>envelope_hash</tt> values for the same underlying receipt. A transcoding intermediary that re-frames A's envelope (JSON to COSE, COSE to JWS, or any other pairing) changes the digest input and MUST be treated as a tampering event by the verifier; verifiers MUST NOT reframe an envelope before recomputing <tt>envelope_hash</tt>.</t>
              <t>Future revisions MAY extend to additional digest algorithms drawn from the <xref target="ACTA-RECEIPTS"/> digest algorithm registry; implementations that require algorithm negotiation SHOULD carry the algorithm identifier out of band in the Audit Pack manifest rather than in the wire field.</t>
            </dd>
            <dt><tt>receipt_ref</tt>:</dt>
            <dd>REQUIRED opaque content-addressed locator the verifier resolves through the Audit Pack or a Deployer-published index to A's full signed envelope. The value is an opaque string from the verifier's perspective; producers MAY use any stable identifier scheme (URI, content-addressed digest, opaque database id) so long as the Audit Pack resolution layer returns the correct envelope bytes. Future profiles (for example, a SCITT-style inclusion-proof profile under <xref target="ACTA-RECEIPTS"/> Section 4.2 extension semantics) MAY layer on this field.</dd>
            <dt><tt>expect_ack_from</tt>:</dt>
            <dd>OPTIONAL string. The expected acknowledging-party identifier, expressed as a <tt>kid</tt> or <tt>issuer_id</tt> value matching the same bare-identifier form required by <xref target="issuer-id"/>. When present, the field declares which acknowledging party A or the producer expects to sign over this receipt's bytes; a verifier cross-checks the acknowledging receipt's <tt>kid</tt> against the expected identifier per <xref target="counterparty-binding-verifier"/>. Verifiers MUST NOT reject solely on absence of an acknowledging receipt; absence is a liveness-loss signal observable through Audit Pack metadata rather than a non-conformance condition on the current receipt.</dd>
            <dt><tt>transport_label</tt>:</dt>
            <dd>OPTIONAL string (<tt>mcp</tt>, <tt>bus</tt>, <tt>orchestrator</tt>, <tt>http</tt>). Operational only; verifiers MUST NOT derive trust from this label.</dd>
          </dl>
          <sourcecode type="json"><![CDATA[
"counterparty_binding": {
  "envelope_hash": "bDqg...5PE=",
  "receipt_ref": "asqav-receipt://org/123/agent_A/seq/4811",
  "expect_ack_from": "00000000000000000098",
  "transport_label": "mcp"
}
]]></sourcecode>
          <t>The COSE form follows the same member set under deterministic CBOR map ordering per <xref target="RFC8949"/> Section 4.2.</t>
        </section>
        <section anchor="counterparty-binding-emitter"><name>Emitter Behaviour</name>
          <t>B SHOULD emit <tt>counterparty_binding</tt> when any of the following hold: A's signing request flagged the action as requiring acknowledgment (for example, by populating an <tt>expect_ack_from</tt> list); the Deployer's risk management documentation requires bilateral byte-binding; or B is operating under the guidance of <xref target="trust-boundary"/>. B MUST compute <tt>envelope_hash</tt> over the exact byte stream it received and accepted, not over a re-canonicalization at B; re-canonicalizing at B masks intermediary tampering whenever the tampered bytes canonicalize to the same payload object, which is the threat case this section addresses. Where one acknowledgment receipt confirms envelopes from N originators, the field MAY be an array of objects; pairwise bindings cannot prove all N originators emitted identical bytes (see <xref target="issuer-misrep"/>).</t>
        </section>
        <section anchor="counterparty-binding-verifier"><name>Verifier Behaviour</name>
          <t>A Compliance Verifier processing a receipt carrying <tt>counterparty_binding</tt> MUST, in addition to <xref target="mandatory-checks"/>, resolve <tt>receipt_ref</tt> through the Audit Pack or a Deployer-published index to A's full signed envelope, recompute the SHA-256 digest of that envelope under the scope rule of <xref target="counterparty-binding-wire"/>, base64-encode the result, and compare to <tt>envelope_hash</tt>. A non-resolving <tt>receipt_ref</tt> or a digest mismatch MUST cause the acknowledging receipt to be reported non-conformant; liveness loss at A MUST NOT be silently treated as success. Where <tt>expect_ack_from</tt> is present, the verifier MUST additionally check that the acknowledging receipt's <tt>signature.kid</tt> matches the declared identifier (under the bare-identifier form required by <xref target="issuer-id"/>); a mismatch MUST cause the acknowledging receipt to be reported non-conformant, exactly as a digest mismatch is. The field is OPTIONAL to emit, but a declared expectation that the acknowledger's identity fails to satisfy is a failed binding, not an informational flag.</t>
          <t>The Deployer or Audit Pack producer MUST retain A's signed envelope for at least as long as any acknowledging receipt binding it remains within retention under Sections 6 and 7. For chains of three or more agents, this profile defaults to pairwise bindings; multi-signer co-presence under <xref target="RFC9052"/> Section 4.1 is OPTIONAL, and verifiers MUST NOT treat a co-signed envelope as a substitute for a pairwise binding chain.</t>
        </section>
      </section>

      <section anchor="result-bound"><name>Result-Bound and Validity-Window Extensions</name>
        <t>This section is normative. It defines six OPTIONAL extension fields that may appear inside the signed <tt>payload</tt> object to bind the receipt to the byte-equality of a downstream result, to bound the validity window of a decision, to declare the tool and configuration that produced the action, and to record the supply-chain Common Vulnerabilities and Exposures (CVE) inventory in effect at signing time. The fields are independently OPTIONAL; an implementation MAY emit any subset. All six are covered by the signature scope defined in <xref target="hash-chain"/>.</t>
        <dl>
          <dt><tt>result_digest</tt>:</dt>
          <dd>OPTIONAL object of the same shape as <tt>payload_digest</tt> defined in Section 2.2 of <xref target="ACTA-RECEIPTS"/>: REQUIRED string <tt>hash</tt> formatted <tt>sha256:&lt;64 lowercase hex chars&gt;</tt>, REQUIRED integer <tt>size</tt> in bytes, OPTIONAL string <tt>preview</tt>. The digest covers the canonicalized bytes of the downstream Action's result body (response payload, tool output, model completion). The field is emitted on a follow-up <tt>protectmcp:observation:result_bound</tt> receipt that references the originating <tt>protectmcp:decision</tt> via <tt>action_ref</tt>; a verifier processing a result-bound observation MUST treat a digest mismatch between <tt>result_digest</tt> and the verifier's local recomputation over retained result bytes as a non-conformance condition. Result bytes covered by <tt>result_digest</tt> are subject to the same retention floor as the originating decision receipt under Sections 6 and 7.</dd>
          <dt><tt>expires_at</tt>:</dt>
          <dd>OPTIONAL ISO 8601 timestamp with explicit timezone, encoded as a JSON string. Declares the wall-clock time after which the producing system considers the decision result stale and not safe to replay. The field provides the upper bound of the decision's validity window, additive to the 300-second forward-skew bound on <tt>issued_at</tt> of <xref target="issued-at"/>; <tt>expires_at</tt> bounds replay safety from above, the forward-skew rule bounds emission honesty from above. The window is declared, not enforced, by this field: enforcement against a replaying action is the verifier's and the Deployer's obligation under the next paragraph, and the receipt record itself never expires. A verifier MUST reject a downstream action that replays a decision whose <tt>expires_at</tt> lies in the past relative to the replay's wall clock; verifiers MUST NOT reject the originating receipt itself solely because <tt>expires_at</tt> has elapsed (the receipt remains valid as a record of the decision at <tt>issued_at</tt>).</dd>
          <dt><tt>nonce</tt>:</dt>
          <dd>OPTIONAL JSON string carrying a producer-generated value that is unique across the producer's emission stream for the lifetime of the cryptographic key identified by <tt>kid</tt>. The field SHOULD be the lowercase hexadecimal encoding of 12 random bytes (24 hexadecimal characters). Verifiers SHOULD reject a second receipt that carries the same <tt>nonce</tt> under the same <tt>issuer_id</tt> as a replay candidate; the rejection is informational where the bound action is idempotent and load-bearing where the bound action is not. The field is OPTIONAL at the syntactic level but is a SHOULD-emit for any producer whose downstream actions are not idempotent. The nonce is NOT a challenge-response freshness proof: it is generated by the producer, not an unpredictable challenge generated and retained by the party appraising the evidence, so it proves uniqueness of emission and supports replay-candidate flagging, nothing more.</dd>
          <dt><tt>tool_fingerprint</tt>:</dt>
          <dd>OPTIONAL JSON string of 32 lowercase hexadecimal characters carrying the first 32 hexadecimal characters (128 bits) of the SHA-256 digest over the JCS canonicalization (<xref target="RFC8785"/>) of the JSON object <tt>{"tool_name": &lt;tool name&gt;, "schema": &lt;declared input schema&gt;}</tt>, where <tt>schema</tt> is the JSON object form of the tool's declared input schema (an empty object when the tool declares none). The field binds a receipt to a specific tool identity; a verifier or auditor reproducing the Action can detect tool drift (the same tool name with a different declared schema) by comparing fingerprints across receipts in the same chain, and a fingerprint change under an unchanged tool name surfaces naming collisions and registry shadowing. The field is OPTIONAL and complementary to <tt>action_ref</tt>: <tt>action_ref</tt> identifies the call, <tt>tool_fingerprint</tt> identifies the callee.</dd>
          <dt><tt>config_manifest_digest</tt>:</dt>
          <dd>OPTIONAL JSON string formatted <tt>sha256:&lt;64 lowercase hex chars&gt;</tt> over the canonical bytes of the producer's configuration manifest in effect at the time the Action was signed. The manifest content is operator-defined and SHOULD include the producer's policy bundle reference, model identifiers and versions, prompt template digests, retrieval index identifiers, and any other inputs whose change would constitute a substantial modification of the producing system under Article 43 of <xref target="EU-AI-ACT"/> or under Section 6-1-1701 of <xref target="COLORADO-AI-ACT"/>. Because the manifest content is operator-defined, an operator's manifest MAY include an attestation or appraisal digest among its inputs; this profile registers no dedicated field for one. The field is OPTIONAL but, when emitted, SHOULD resolve through the Audit Pack to retained manifest bytes for the duration of the longest applicable retention floor in Sections 6 and 7.</dd>
          <dt><tt>cve_inventory_digest</tt>:</dt>
          <dd>OPTIONAL JSON string formatted <tt>sha256:&lt;64 lowercase hex chars&gt;</tt> over the canonical bytes of the producer's CVE inventory at the time the Action was signed. The inventory content SHOULD list the CVE identifiers known to apply to the producer's executing image and its declared runtime dependencies, plus the producer's accepted-residual rationale per <xref target="EU-AI-ACT"/> Article 15 robustness obligations or the equivalent obligations under Sections 6 and 7. The field binds a snapshot of the producer's known-vulnerability surface to the receipt; a regulator examining the receipt can resolve the digest through the Audit Pack to the canonical inventory bytes that were in effect when the Action was signed, rather than relying on a later-time inventory that may have been updated after the Action was performed.</dd>
        </dl>
        <t>Implementations emitting <tt>result_digest</tt> SHOULD use the dedicated <tt>protectmcp:observation:result_bound</tt> type registered in <xref target="iana-type-namespaces"/> for the follow-up receipt that carries the bound digest. Implementations MAY emit <tt>expires_at</tt>, <tt>nonce</tt>, <tt>tool_fingerprint</tt>, <tt>config_manifest_digest</tt>, and <tt>cve_inventory_digest</tt> on any receipt type defined by this profile; the fields are type-agnostic.</t>
        <t>Two type-bound presence rules attach to the fields of this section. The reference cloud implementation rejects at signing time, as the <tt>configuration_change_missing_config_manifest_digest</tt> guard, a receipt of type <tt>protectmcp:lifecycle:configuration_change</tt> (registered in <xref target="iana-type-namespaces"/>) that lacks a well-formed <tt>config_manifest_digest</tt>; and it rejects at signing time, as the <tt>result_bound_missing_result_digest</tt> guard, a receipt of type <tt>protectmcp:observation:result_bound</tt> that lacks a well-formed <tt>result_digest</tt>.</t>
        <t>Layering note on the validity window: this profile places the validity-window bounds in the receipt itself. <tt>nonce</tt> and <tt>expires_at</tt> ride inside the signed <tt>payload</tt>, and the conformant verifier enforces them: the <tt>expires_at</tt> replay rejection is a mandatory check of <xref target="mandatory-checks"/>, and a verifier that maintains a seen-nonce index flags duplicate emissions on the <tt>duplicate_emission_candidate</tt> axis of <xref target="reporting"/>. Enforcement of the <tt>nonce</tt> uniqueness bound requires that seen-nonce state and is therefore conditional; enforcement against replay of an expired decision is an application decision point the verifier's rejection feeds. Section 14.1 of <xref target="DRAFT-SOKOLOV-AEP-COMPOSITION"/> reports that in that composition the freshness check was enforced outside the conformant Verifier, in the application's own appraisal step; a producer composing that pattern with this profile SHOULD emit <tt>nonce</tt> and <tt>expires_at</tt> so the receipt layer carries the bounds.</t>
      </section>

      <section anchor="build-provenance"><name>Build-Provenance Extensions</name>
        <t>This section is normative. It defines four OPTIONAL extension fields that bind the receipt to the supply-chain provenance of the executable that produced the Action. The four fields form a layered subsumption set: <tt>executable_hash</tt> binds the running binary, <tt>sbom_digest</tt> binds the dependency manifest the binary was built from, <tt>slsa_provenance_pointer</tt> resolves to the SLSA attestation envelope for that build, and <tt>supply_chain_pointer</tt> resolves to a transparency-log entry (in-toto, Sigstore, or Rekor) covering the build. An implementation MAY emit any subset. All four are covered by the signature scope defined in <xref target="hash-chain"/>.</t>
        <dl>
          <dt><tt>executable_hash</tt>:</dt>
          <dd>OPTIONAL JSON string formatted <tt>sha256:&lt;64 lowercase hex chars&gt;</tt> over the canonical bytes of the executable that invoked the Action. For container-based producers the canonical bytes are the immutable image manifest digest of the running image (the value an OCI registry returns under the same name plus tag, computed under the OCI Image Manifest Specification). For non-container executables the canonical bytes are the SHA-256 of the on-disk binary file at the path the producer's runtime resolved. The field binds build-side provenance into the signed receipt: a regulator examining the receipt can recover the exact executable identity that produced the Action without trusting any side-channel attestation. A verifier MAY cross-check <tt>executable_hash</tt> against the executable identity declared in the SLSA attestation resolved through <tt>slsa_provenance_pointer</tt>; mismatch SHOULD be reported as an axis flag rather than as non-conformance because the two fields may identify the same artefact under different addressing schemes.</dd>
          <dt><tt>sbom_digest</tt>:</dt>
          <dd>OPTIONAL JSON string formatted <tt>sha256:&lt;64 lowercase hex chars&gt;</tt> over the canonical bytes of the Software Bill of Materials (SBOM) document covering the executing image. The canonical form MUST be either CycloneDX (any 1.x specification version, JSON form, with the canonicalization rule defined by CycloneDX itself) or SPDX (version 2.x or later, JSON form, with the canonicalization rule defined by SPDX itself); the producer SHOULD record the chosen format and version in the Audit Pack manifest entry for the receipt so a verifier can recompute the digest. The field complements <tt>executable_hash</tt>: <tt>executable_hash</tt> identifies the artefact, <tt>sbom_digest</tt> identifies the dependency closure of that artefact.</dd>
          <dt><tt>slsa_provenance_pointer</tt>:</dt>
          <dd>OPTIONAL JSON string carrying an https URL that resolves to the Supply-chain Levels for Software Artifacts (SLSA) provenance attestation envelope for the build that produced the executable identified by <tt>executable_hash</tt>. The pointer target SHOULD be the SLSA Provenance v1.0 in-toto statement form; producers MAY emit earlier SLSA versions where toolchain support is incomplete, and verifiers SHOULD accept any SLSA version they implement. The field shifts the trust root for build-side provenance off the producer's self-attestation and onto the build platform's attestation; the verifier's confidence in the resolved attestation is bounded by the verifier's trust in the build platform's signing root.</dd>
          <dt><tt>supply_chain_pointer</tt>:</dt>
          <dd>OPTIONAL JSON string carrying an https URL that resolves to a transparency-log entry covering the build that produced the executable identified by <tt>executable_hash</tt>. The pointer target SHOULD be an in-toto attestation, a Sigstore entry, or a Rekor entry, in that preference order where the producer can choose; verifiers SHOULD accept any of the three. The field provides a transparency-log-backed audit path for the build, independent of the SLSA attestation envelope referenced by <tt>slsa_provenance_pointer</tt>; the two fields are complementary because a transparency-log entry attests inclusion under a public log, while a SLSA attestation attests build-platform output bytes.</dd>
        </dl>
        <t>The four fields are type-agnostic and MAY appear on any receipt type defined by this profile. Where a Deployer operates under a regulatory regime that requires build-side traceability (Article 12 of <xref target="EU-AI-ACT"/> read together with Article 17 of <xref target="DORA"/>; the audit-controls obligation of 45 CFR 164.312(b) of <xref target="HIPAA-SECURITY"/>; the recordkeeping rule of <xref target="SEC-17A-4"/> read with <xref target="NYDFS-500"/> 23 NYCRR 500.6), the Deployer SHOULD emit at least <tt>executable_hash</tt> on every <tt>protectmcp:decision</tt> receipt and SHOULD retain the SBOM, the SLSA attestation, and the transparency-log entry through the longest applicable retention floor in Sections 6 and 7.</t>
      </section>

      <section anchor="enforcement-attestation"><name>Enforcement-Control Record Extensions</name>
        <t>This section is normative. It defines two OPTIONAL extension fields that record, inside the signed <tt>payload</tt> object, which authorization and enforcement controls the issuing platform genuinely evaluated when it signed the receipt. Both fields are server-built: they are populated by the issuing platform at signing time, never carried in the producer's signing request, and a caller-supplied value for either field MUST be dropped by the issuing platform before signing. Both fields are covered by the signature scope defined in <xref target="hash-chain"/>. The design rule for both fields is omission-over-false attestation: a control that did not run is represented by the absence of its key, never by a present key asserting a result the control did not produce. The same omission discipline extends to freshness (informatively): a deployment that cannot perform an external freshness check inside the party that appraises evidence records that limitation by the absence of any freshness assertion, never by treating an affirming result as fresh. The two fields each carry a false-attestation guard that rejects a present-but-malformed attestation, in the same spirit as the <tt>framework_mappings_self_declared</tt> guard of <xref target="threat-framework"/> and the <tt>witness_policy</tt> quorum guard of <xref target="anchoring"/>. The key set of this section is closed: both fields are server-built, unknown keys MUST be rejected, and this section does not convey remote attestation results.</t>
        <dl>
          <dt><tt>authorized_under_mandate</tt>:</dt>
          <dd>OPTIONAL object recording that the Action was signed under a self-declared authorizing mandate. The object carries four members: <tt>mandate_id</tt> (REQUIRED string, the issuer-scoped identifier of the mandate the Action was authorized under), <tt>issuer_id</tt> (REQUIRED string, the identifier of the party that issued the mandate, in the bare-identifier form required by <xref target="issuer-id"/>), <tt>scope_digest</tt> (REQUIRED string formatted <tt>sha256:&lt;64 lowercase hex chars&gt;</tt> over the canonical bytes of the mandate's authorized-action-types scope), and <tt>verified</tt> (REQUIRED boolean). The trust semantics are deliberately narrow: <tt>verified</tt>=<tt>true</tt> asserts self-declared issuer authority, the same trust level as <tt>framework_mappings_self_declared</tt> of <xref target="threat-framework"/>, and is NEVER an issuing-platform attestation of verified third-party authorization. The mandate binding is self-declared by the issuer, is evaluated against the issuing platform's own clock at signing time, and scopes the Action to a set of authorized action types; this profile does NOT define a value cap, a counterparty restriction, or any other constraint on the mandate, and a verifier MUST NOT infer one from the presence of this field. A verifier resolves <tt>scope_digest</tt> by retrieving the mandate identified by <tt>mandate_id</tt> through the Audit Pack or a Deployer-published mandate index and recomputing the digest over the canonical scope bytes; a mismatch MUST be reported as a non-conformance condition. The false-attestation guard for this field, published as <tt>false_mandate_attestation_guard</tt> in the issuing platform's wire vocabulary, rejects an <tt>authorized_under_mandate</tt> object that is present but does not carry all of <tt>mandate_id</tt>, <tt>issuer_id</tt>, <tt>verified</tt>=<tt>true</tt>, and a well-formed <tt>scope_digest</tt>: a present-but-malformed attestation is rejected at signing time rather than signed and surfaced as truth.</dd>
          <dt><tt>controls_evaluated</tt>:</dt>
          <dd>OPTIONAL object enumerating the enforcement controls that genuinely fired when the issuing platform signed the Action, plus the allow result. The member keys are drawn from a closed set: <tt>emergency_halt</tt>, <tt>delegation_scope</tt>, <tt>quorum</tt>, <tt>mandate</tt>, <tt>policy</tt>, <tt>content_scan</tt>, and <tt>result</tt>; an unknown key MUST be rejected. Each control key is present ONLY when its control actually ran on this sign; an absent key means the control never ran on this sign, and a verifier MUST NOT infer from an absent key that the control ran and passed silently. The <tt>quorum</tt> member, when present, MUST carry <tt>fired</tt>=<tt>true</tt> together with a 64-lowercase-hex <tt>attestation_hash</tt> proving the quorum evaluation; the <tt>policy</tt> member, when present and asserting a policy was evaluated, MUST carry <tt>matched_count</tt> greater than or equal to 1. The false-attestation guard for this field, published as <tt>false_control_attestation_guard</tt> in the issuing platform's wire vocabulary, rejects a present-but-malformed <tt>controls_evaluated</tt> object: an unknown control key, a <tt>quorum</tt> member lacking <tt>fired</tt>=<tt>true</tt> plus a 64-hex <tt>attestation_hash</tt>, or a <tt>policy</tt> member asserting evaluation without <tt>matched_count</tt> greater than or equal to 1, is rejected at signing time. Because the field is server-built and a caller-supplied <tt>controls_evaluated</tt> is dropped before signing, a verifier MAY treat the enumerated keys as the issuing platform's own record of which controls it ran.</dd>
        </dl>
        <t>Both fields are type-agnostic and MAY appear on any receipt type defined by this profile, though they are most commonly emitted on <tt>protectmcp:decision</tt> receipts where an authorization or enforcement evaluation produced the recorded decision. Neither field replaces the policy-evaluation honesty rule that an issuing platform MUST NOT assert a control ran when it did not (the design note carried under <xref target="security"/>): <tt>controls_evaluated</tt> records which controls ran, not that any control blocked, and an absent control key is the conformant representation of a control that did not run.</t>
      </section>

      <section anchor="risk-acceptance"><name>Risk-Acceptance Extensions</name>
        <t>This section is normative. It defines OPTIONAL extension fields that appear inside the signed <tt>payload</tt> object of a receipt of <tt>type</tt> <tt>protectmcp:lifecycle:risk_acceptance</tt> (registered in <xref target="iana-type-namespaces"/>), which records a producer's decision to accept a known risk, security finding, or policy exception. A risk-acceptance receipt is a lifecycle record, not a policy-evaluation outcome: it is emitted through the no-policy lifecycle path of <xref target="decision-fields"/>, carries <tt>decision</tt> <tt>observation</tt>, and asserts that no policy was evaluated for the acceptance. The fields are covered by the signature scope and the <tt>previousReceiptHash</tt> chain link of <xref target="hash-chain"/>, and by the <tt>anchors</tt> timestamp of <xref target="anchoring"/>; taken together these prove only that the producer asserted these values, key-authored them, and chained them at the receipt's <tt>issued_at</tt>. The receipt does NOT make any accepted risk safe, any snapshot value true, reproducible, or verified, or any declared expiry enforced. The scope-honesty labels in the field definitions below are normative and mirror the labels published in the issuing platform's <tt>/.well-known/governance.json</tt> wire-vocabulary surface.</t>
        <dl>
          <dt><tt>approver_id</tt>:</dt>
          <dd>REQUIRED JSON string carrying the producer-asserted identity that authored the risk acceptance, in the bare-identifier form of <xref target="issuer-id"/> (a bare <tt>kid</tt> or <tt>issuer_id</tt>). The field is bound into the signed bytes only: the issuing platform performs NO authority check, NO authentication of the named identity, and NO identity resolution; the only comparison it makes is the <tt>compliance_mode</tt> string-equality refusal against <tt>initiator_id</tt> (the <tt>risk_acceptance_self_approval_guard</tt> of the <tt>initiator_id</tt> entry below). A risk-acceptance receipt that omits <tt>approver_id</tt> MUST be rejected at signing time by the false-attestation guard named in <xref target="iana-extension-fields"/>.</dd>
          <dt><tt>initiator_id</tt>:</dt>
          <dd>OPTIONAL JSON string carrying the producer-asserted identity that requested the acceptance, in the same bare-identifier form. The field is bound into the signed bytes only. The reference cloud implementation refuses at signing time, as the <tt>risk_acceptance_self_approval_guard</tt>, a risk-acceptance receipt signed under <tt>compliance_mode</tt> whose <tt>initiator_id</tt> string-equals <tt>approver_id</tt>, because a receipt asserting an approval flow approved by its own initiator is incoherent on its face. The guard is a string-incoherence check (case-sensitive exact match), NOT identity resolution: it fires only when both fields are present, an absent field never fires it, and any real segregation-of-duties decision belongs to the Deployer's enforcement layer, not to this record format.</dd>
          <dt><tt>acceptance_reason</tt>:</dt>
          <dd>REQUIRED JSON string carrying the free-text producer rationale for accepting the risk. The field proves that the rationale existed and was key-authored at <tt>issued_at</tt>; it is never parsed, scored, or validated by the issuing platform. A risk-acceptance receipt that omits <tt>acceptance_reason</tt> MUST be rejected at signing time by the same false-attestation guard as <tt>approver_id</tt>.</dd>
          <dt><tt>accepted_at</tt>:</dt>
          <dd>OPTIONAL ISO 8601 timestamp with explicit timezone, encoded as a JSON string, carrying the producer-asserted wall-clock time at which the acceptance was authored. This value is self-declared by the producer; the only times the issuing platform attests are <tt>issued_at</tt> (<xref target="issued-at"/>) and the <tt>anchors</tt> evidence (<xref target="anchoring"/>). The field is distinct from <tt>issued_at</tt> so that an acceptance back-dated relative to emission is auditable.</dd>
          <dt><tt>supersedes</tt>:</dt>
          <dd>OPTIONAL JSON string carrying a producer-asserted pointer to the prior risk-acceptance receipt this one replaces, encoded either as an opaque receipt locator or as a <tt>sha256:&lt;64 lowercase hex chars&gt;</tt> digest. The field proves that the supersession claim existed at <tt>issued_at</tt>; resolution is the verifier's job, and the issuing platform NEVER invalidates the prior receipt: the hash chain of <xref target="hash-chain"/> is immutable and <tt>supersedes</tt> is a forward pointer only.</dd>
          <dt><tt>sarif_digest</tt>:</dt>
          <dd>OPTIONAL JSON string formatted <tt>sha256:&lt;64 lowercase hex chars&gt;</tt> over the producer-declared canonical bytes of the static-analysis (SARIF) scan artifact the acceptance rested on. The digest is a shape-only existence proof: it proves THAT the named SARIF artifact existed unaltered at <tt>issued_at</tt> and nothing more. The issuing platform NEVER parses, fetches, re-runs, or validates the scan; a verifier recomputes SHA-256 over the SARIF bytes retained in the Audit Pack and treats a mismatch as a tamper signal, in the same manner as <tt>config_manifest_digest</tt> of <xref target="result-bound"/>.</dd>
          <dt><tt>finding_ref</tt>:</dt>
          <dd>OPTIONAL JSON string carrying a producer-asserted opaque pointer to the specific finding or rule identifier inside the SARIF artifact (for example a ruleId plus a location). The field is free-text; it proves the reference existed at <tt>issued_at</tt> and is never resolved or validated by the issuing platform.</dd>
          <dt><tt>approval_ref</tt>:</dt>
          <dd>OPTIONAL JSON string carrying a producer-asserted opaque correlation pointer to a human-in-the-loop approval identifier or an external ticket. The field is free-text; it proves the correlation pointer existed at <tt>issued_at</tt> and is never resolved or validated by the issuing platform.</dd>
          <dt><tt>risk_snapshot</tt>:</dt>
          <dd>OPTIONAL object carrying a point-in-time snapshot of THIRD-PARTY risk signals as the producer read them, with members: <tt>snapshot_at</tt> (REQUIRED ISO 8601 timestamp with explicit timezone, the producer-asserted read-time the snapshot is pinned to), <tt>snapshot_source</tt> (free-text string naming where the signals came from, for example a named EPSS feed, the CISA KEV catalog, or an NVD CVSS record; OPTIONAL when only <tt>snapshot_at</tt> and <tt>cve_ids</tt> are populated, REQUIRED whenever any of <tt>epss</tt>, <tt>cvss</tt>, <tt>cvss_vector</tt>, or <tt>kev_listed</tt> is populated), <tt>epss</tt> (OPTIONAL string), <tt>cvss</tt> (OPTIONAL string), <tt>cvss_vector</tt> (OPTIONAL string), <tt>kev_listed</tt> (OPTIONAL boolean), and <tt>cve_ids</tt> (OPTIONAL JSON array of CVE-identifier strings). The object is a producer-asserted snapshot, NOT a value the issuing platform computed, fetched, verified, queried, or vouched for; it proves only that the producer asserted these signals at <tt>snapshot_at</tt>, and is explicitly NOT reproducible from any input the issuing platform holds. A verifier MUST NOT read any member as an issuing-platform-derived or verified score. All numeric risk signals (<tt>epss</tt>, <tt>cvss</tt>) MUST be encoded as JSON strings, not as JSON numbers, consistent with the IEEE-754 float prohibition of <xref target="canonicalization-scope"/>; this string encoding is load-bearing for the snapshot-not-score semantics. Whenever any of <tt>epss</tt>, <tt>cvss</tt>, <tt>cvss_vector</tt>, or <tt>kev_listed</tt> is populated, <tt>snapshot_source</tt> MUST be present; a populated numeric or KEV signal without <tt>snapshot_source</tt> MUST be rejected at signing time by the false-attestation guard named in <xref target="iana-extension-fields"/>, so that a value can never be read as an issuing-platform-derived score.</dd>
        </dl>
        <t>A risk-acceptance receipt MAY additionally carry the type-agnostic <tt>expires_at</tt> field of <xref target="result-bound"/> to declare the wall-clock time after which the Deployer considers the acceptance stale, and the server-built <tt>authorized_under_mandate</tt> field of <xref target="enforcement-attestation"/>. Consistent with <xref target="result-bound"/>, <tt>expires_at</tt> on a risk-acceptance receipt is declared, not enforced: the issuing platform records the declared expiry but NEVER auto-revokes an expired acceptance, and a verifier MUST NOT reject the originating risk-acceptance receipt itself solely because <tt>expires_at</tt> has elapsed. The named identities (<tt>approver_id</tt>, <tt>initiator_id</tt>) are bound fields; beyond the string-incoherence refusal of the <tt>risk_acceptance_self_approval_guard</tt>, NO separation-of-duties check is performed by this profile.</t>
      </section>

      <section anchor="code-authorship"><name>Code-Authorship Extensions</name>
        <t>This section is normative. It defines extension fields, two of them REQUIRED on the type and the rest OPTIONAL, that appear inside the signed <tt>payload</tt> object of a receipt of <tt>type</tt> <tt>protectmcp:lifecycle:code_authorship</tt> (registered in <xref target="iana-type-namespaces"/>), which records a producer's assertion that an agent-authored change to a code repository existed at a point in time. A code-authorship receipt is a lifecycle record, not a policy-evaluation outcome: it is emitted through the no-policy lifecycle path of <xref target="decision-fields"/>, carries <tt>decision</tt> <tt>observation</tt>, and asserts that no policy was evaluated for the change. The reference cloud implementation enforces the no-policy rule at signing time as the <tt>code_authorship_requires_no_policy_decision</tt> guard, signs the type only on its compliance signing path (the <tt>code_authorship_requires_compliance_mode</tt> guard), and rejects, as the <tt>code_authorship_fields_require_code_authorship_receipt</tt> guard, a receipt of any other type that carries the fields of this section. The fields are covered by the signature scope and the <tt>previousReceiptHash</tt> chain link of <xref target="hash-chain"/>, and by the <tt>anchors</tt> timestamp of <xref target="anchoring"/>; taken together these prove only that the producer asserted these values, key-authored them, and chained them at the receipt's <tt>issued_at</tt>. The receipt proves only that the change existed, was key-authored, and was chained at time T. It does NOT make the change correct, safe, reviewed, or building: at the receipt layer the issuing platform NEVER clones the repository, never re-runs or re-diffs the change, never verifies that the named code exists or compiles, and never verifies the producing model. The authoritative attestation layer of <xref target="authoritative-rederivation"/> is a distinct artefact: there, and only there, the platform re-fetches and re-diffs the change to re-derive the subject digest. The scope-honesty labels in the field definitions below are normative and mirror the labels published in the issuing platform's <tt>/.well-known/governance.json</tt> wire-vocabulary surface.</t>
        <dl>
          <dt><tt>repo_ref</tt>:</dt>
          <dd>REQUIRED JSON string carrying a producer-asserted opaque pointer to the repository the change was authored against (for example a clone URL or an internal repository identifier). The field is free-text; it proves the reference existed at <tt>issued_at</tt> and is never resolved, cloned, or validated by the issuing platform. A code-authorship receipt that omits <tt>repo_ref</tt> MUST be rejected at signing time by the <tt>code_authorship_missing_required_field</tt> guard named in <xref target="iana-extension-fields"/>.</dd>
          <dt><tt>commit_sha</tt>:</dt>
          <dd>REQUIRED JSON string carrying the producer-asserted commit identifier of the authored change (for example a Git object name). The field is bound into the signed bytes only: the issuing platform NEVER fetches the named commit, never verifies that it exists, and never verifies its contents. It proves only that the producer asserted this commit identifier at <tt>issued_at</tt>. A code-authorship receipt that omits <tt>commit_sha</tt> MUST be rejected at signing time by the same guard as <tt>repo_ref</tt>.</dd>
          <dt><tt>base_sha</tt>:</dt>
          <dd>OPTIONAL JSON string carrying the producer-asserted base commit identifier the change was authored on top of. Like <tt>commit_sha</tt>, the field is bound into the signed bytes only and is NEVER fetched or verified by the issuing platform; it proves only that the producer asserted this base at <tt>issued_at</tt>.</dd>
          <dt><tt>change_digest</tt>:</dt>
          <dd>OPTIONAL JSON string formatted <tt>sha256:&lt;64 lowercase hex chars&gt;</tt> over the producer-declared canonical bytes of the change (for example a unified diff). The digest is a shape-only existence proof: it proves THAT the named change existed unaltered at <tt>issued_at</tt> and nothing more. The issuing platform NEVER fetches, re-diffs, or re-computes the change; a verifier recomputes SHA-256 over the change bytes retained in the Audit Pack and treats a mismatch as a tamper signal, in the same manner as <tt>sarif_digest</tt> of <xref target="risk-acceptance"/> and <tt>config_manifest_digest</tt> of <xref target="result-bound"/>. A <tt>change_digest</tt> value outside the <tt>sha256:&lt;64 lowercase hex chars&gt;</tt> wire form MUST be rejected at signing time by the <tt>change_digest_not_sha256_wire_form</tt> guard.</dd>
          <dt><tt>change_ref</tt>:</dt>
          <dd>OPTIONAL JSON string carrying a producer-asserted opaque pointer to the change as a unit (for example a pull-request or merge-request identifier). The field is free-text; it proves the reference existed at <tt>issued_at</tt> and is never resolved or validated by the issuing platform.</dd>
          <dt><tt>change_approval_ref</tt>:</dt>
          <dd>OPTIONAL JSON string carrying a producer-asserted opaque correlation pointer to a human-in-the-loop approval identifier or an external review ticket for the change. The field is free-text; it proves the correlation pointer existed at <tt>issued_at</tt> and is never resolved or validated by the issuing platform, in the same manner as <tt>approval_ref</tt> of <xref target="risk-acceptance"/>.</dd>
          <dt><tt>change_class</tt>:</dt>
          <dd>OPTIONAL JSON string drawn from the closed vocabulary <tt>read</tt>, <tt>write</tt>, <tt>delete</tt>, <tt>execute</tt>, or <tt>deploy</tt>, declaring the producer-asserted class of the change. The value is self-declared; the issuing platform records it but does NOT verify that the change matches the declared class. A value outside the closed vocabulary MUST be rejected at signing time, the field being constrained to the closed vocabulary.</dd>
          <dt><tt>authored_by</tt>:</dt>
          <dd>OPTIONAL object carrying a producer-asserted description of the authoring agent, with members: <tt>agent_id</tt> (OPTIONAL string identifying the authoring agent), <tt>model_id</tt> (OPTIONAL string naming the model), <tt>model_version</tt> (OPTIONAL string naming the model version), <tt>tool</tt> (OPTIONAL string naming the authoring tool), and <tt>attestation_source</tt> (OPTIONAL string naming where the authorship description came from). The object is producer-asserted, NOT a value the issuing platform computed, verified, queried, or vouched for; it proves only that the producer asserted these values at <tt>issued_at</tt>. The issuing platform NEVER verifies the named model. Whenever any of <tt>model_id</tt> or <tt>model_version</tt> is populated, <tt>attestation_source</tt> MUST be present; a populated model field without <tt>attestation_source</tt> MUST be rejected at signing time by the false-attestation guard named in <xref target="iana-extension-fields"/>, so that a model claim can never be read as an issuing-platform-verified attestation.</dd>
        </dl>
        <t>A code-authorship receipt MAY additionally carry the server-built <tt>authorized_under_mandate</tt> field of <xref target="enforcement-attestation"/> to record the self-declared authorizing mandate the change was signed under; this profile reuses that field for code-authorship authorization and does not define a separate authorization field. Consistent with <xref target="enforcement-attestation"/>, <tt>authorized_under_mandate</tt> asserts self-declared issuer authority only and is NEVER an issuing-platform attestation of verified third-party authorization.</t>
      </section>

      <section anchor="threat-framework"><name>Threat-Framework Taxonomy Extensions</name>
        <t>This section is normative. It defines six OPTIONAL caller-supplied taxonomy fields, one OPTIONAL caller-supplied opaque timestamp token, and one platform-set false-attestation guard boolean, all of which MAY appear inside the signed <tt>payload</tt> object. The six taxonomy fields record producer-asserted mappings of the Action into established threat-and-control catalogues; they are self-declared and are NOT verified by the issuing platform. The guard boolean exists so that a verifier can tell a self-declared classification apart from a platform-verified one. All eight fields are covered by the signature scope defined in <xref target="hash-chain"/>, and an implementation MAY emit any subset.</t>
        <dl>
          <dt><tt>mitre_techniques</tt>:</dt>
          <dd>OPTIONAL JSON array of MITRE ATT&amp;CK technique identifiers (for example <tt>T1059</tt>, <tt>T1078</tt>) self-declared by the producer. The values are referenced by identifier from the MITRE ATT&amp;CK enterprise matrix. The field is not verifier-checked by the issuing platform; when the array is populated the issuing platform MUST set <tt>framework_mappings_self_declared</tt> to <tt>true</tt>.</dd>
          <dt><tt>mitre_atlas</tt>:</dt>
          <dd>OPTIONAL JSON array of MITRE ATLAS identifiers (for example <tt>AML.T0051</tt>) covering AI-system-specific adversary techniques, self-declared by the producer and referenced by identifier from the MITRE ATLAS catalogue. When populated the issuing platform MUST set <tt>framework_mappings_self_declared</tt> to <tt>true</tt>.</dd>
          <dt><tt>owasp_llm_top10</tt>:</dt>
          <dd>OPTIONAL JSON array of OWASP Top 10 for LLM Applications identifiers (for example <tt>LLM01</tt>, <tt>LLM02</tt>), self-declared by the producer and referenced by identifier from the OWASP Top 10 for LLM Applications publication. When populated the issuing platform MUST set <tt>framework_mappings_self_declared</tt> to <tt>true</tt>.</dd>
          <dt><tt>nist_ai_rmf</tt>:</dt>
          <dd>OPTIONAL JSON array of NIST AI Risk Management Framework function identifiers and subcategories (for example <tt>GOVERN-1.1</tt>, <tt>MEASURE-2.7</tt>), self-declared by the producer and referenced from <xref target="NIST-AI-RMF"/>. When populated the issuing platform MUST set <tt>framework_mappings_self_declared</tt> to <tt>true</tt>.</dd>
          <dt><tt>iso_42001</tt>:</dt>
          <dd>OPTIONAL JSON array of ISO/IEC 42001:2023 control identifiers (for example <tt>A.6.2.6</tt>), self-declared by the producer and referenced from ISO/IEC 42001:2023. When populated the issuing platform MUST set <tt>framework_mappings_self_declared</tt> to <tt>true</tt>.</dd>
          <dt><tt>eu_ai_act_articles</tt>:</dt>
          <dd>OPTIONAL JSON array of EU AI Act article identifiers (for example <tt>Article-12</tt>, <tt>Article-15</tt>), self-declared by the producer and referenced from <xref target="EU-AI-ACT"/>. When populated the issuing platform MUST set <tt>framework_mappings_self_declared</tt> to <tt>true</tt>.</dd>
          <dt><tt>rfc3161_timestamp</tt>:</dt>
          <dd>OPTIONAL JSON string carrying a base64-encoded <xref target="RFC3161"/> TimeStampResp (DER) supplied by the producer at signing time and preserved verbatim on the receipt for offline TSA chain verification independent of any platform-issued anchors. The payload entry is an opaque caller-supplied token, NOT the per-receipt anchor produced by the platform under <xref target="anchoring"/>; the base64 encoding is per <xref target="RFC4648"/>. It never counts toward the anchoring requirement of <xref target="anchoring"/> or toward a <tt>witness_policy</tt> quorum, and a verifier MUST NOT read it as the receipt's timestamping evidence. This field does not flip <tt>framework_mappings_self_declared</tt>.</dd>
          <dt><tt>framework_mappings_self_declared</tt>:</dt>
          <dd>OPTIONAL JSON boolean false-attestation guard set by the issuing platform. The platform MUST set it to <tt>true</tt> whenever any of <tt>mitre_techniques</tt>, <tt>mitre_atlas</tt>, <tt>owasp_llm_top10</tt>, <tt>nist_ai_rmf</tt>, <tt>iso_42001</tt>, or <tt>eu_ai_act_articles</tt> is populated. A producer-supplied value of <tt>false</tt> alongside a populated taxonomy field MUST be overridden by the issuing platform, in the same spirit as the false-attestation guards of <xref target="enforcement-attestation"/> and the <tt>witness_policy</tt> quorum guard of <xref target="anchoring"/>. The guard does not assert that the self-declared mappings are correct; it asserts only that they are self-declared rather than platform-verified, and a verifier MUST NOT treat a populated taxonomy field as platform-verified.</dd>
        </dl>
        <t>The eight fields are type-agnostic and MAY appear on any receipt type defined by this profile.</t>
      </section>

      <section anchor="environment-attestation"><name>Environment Attestation Extensions (Normative-Optional)</name>
        <t>This section is normative-optional: it defines one extension field carrying pre-action world-state attestations into the receipt's evidence surface, in the spirit of the environment record family of <xref target="DRAFT-MSEBENZI-EVIDENCE-ACTION"/>. The field is OPTIONAL; a deployment that emits no environment attestations remains fully conformant, and this revision adopts the concept without mandating implementations.</t>
        <dl>
          <dt><tt>environment_attestation</tt>:</dt>
          <dd>OPTIONAL object carrying boolean world-state claims attested before the Action (for example sandbox liveness, egress state, secret-store lock state), signed by an environment key distinct from the receipt's signing key (separation of duty: the runtime asserts facts about itself under its own key, ideally a hardware or CI attestation key). Members: <tt>claims</tt> (REQUIRED object whose values are booleans), <tt>attester_kid</tt> (REQUIRED string identifying the environment key), <tt>attested_at</tt> (REQUIRED ISO 8601 timestamp with explicit timezone), and <tt>sig</tt> (REQUIRED base64 signature over the JCS canonicalization per <xref target="RFC8785"/> of the attestation object with the <tt>sig</tt> member removed, under the algorithm declared for the environment key). The object is covered by the receipt's own signature scope of <xref target="hash-chain"/> in addition to carrying its detached environment-key signature. A verifier that checks the field verifies <tt>sig</tt> against the resolved environment key and bounds the staleness of <tt>attested_at</tt> relative to the receipt's <tt>issued_at</tt> under the verifier's documented bound; a stale, unverifiable, or malformed attestation is reported on its own axis and never folds into the receipt-level verdict of <xref target="verdict-vocabulary"/>.</dd>
        </dl>
        <t>Composition rule (hard): an environment attestation INFORMS the policy gate and appears in the Audit Pack evidence list; it NEVER replaces or short-circuits the policy gate. A receipt carrying a perfect environment attestation and a failed policy evaluation still verifies as policy-failed, and a receipt carrying no environment attestation is not thereby downgraded. The policy gate remains the sole authorization surface.</t>
        <t>Scope honesty: the attestation is only as trustworthy as the environment key's custody. It raises the cost of lying about the execution environment; it does not make producer-asserted state third-party truth, and it conveys no remote-attestation result unless the environment key is itself a hardware attestation key, which this profile does not require (the role separation of <xref target="relationship"/> applies; no field defined by this section carries a remote attestation result per <xref target="receipt-limits"/>).</t>
      </section>
    </section>

    <section anchor="eu-bindings"><name>European Union Bindings</name>
      <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 provides evidence for it.</t>
        <section anchor="art12-1"><name>Article 12(1), automatic recording of events</name>
          <t>Article 12(1) requires High-Risk AI Systems to technically allow for the automatic recording of events (logs) over the lifetime of the system. The signed-receipt format provides one mechanism supporting that logging capability; alternative mechanisms remain valid. Where this profile is chosen, a Compliance Receipt SHOULD be produced for every Action against an external resource, and a configuration change that disables receipt generation SHOULD be recorded as a protectmcp:lifecycle Compliance Receipt. Implementations MAY emit at finer or coarser granularity so long as the log set, taken together, covers Article 12(2)(a) through (c).</t>
        </section>
        <section anchor="art12-2a"><name>Article 12(2)(a), identifying situations that may result in the high-risk AI system presenting a risk within the meaning of Article 79(1) or in a substantial modification</name>
          <t>The combination of <tt>type</tt>, <tt>decision</tt>, <tt>reason</tt>, and <tt>policy_digest</tt> 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 <tt>risk_class</tt> extension field.</t>
        </section>
        <section anchor="art12-2b"><name>Article 12(2)(b), facilitating the post-market monitoring referred to in Article 72</name>
          <t>The hash-chain linkage required by <xref target="hash-chain"/> provides evidence for 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), monitoring the operation of high-risk AI systems referred to in Article 26(5)</name>
          <t>Any change to the policy artefact referenced by <tt>policy_digest</tt> MUST produce a new digest. A change in <tt>policy_digest</tt> 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 itself sets no retention period; the operative deployer floor is Article 26(6) ("at least six months"). The parallel provider floor in Article 19(1) sets the same six-month minimum on Providers; this profile's retention bindings are written from the Deployer perspective, and a Provider that wishes to use Compliance Receipts as its Article 19(1) record SHOULD adopt the Deployer floor explicitly through a separate Provider-role binding (deferred to a future revision).</t>
          <t>EU AI Act Article 26(6) requires six months of logs (interpreted as 184 days when expressed as a day-count floor for hash-chain anchoring intervals). The normative requirement on Compliance Receipts is: implementations MUST retain receipts until the later of (a) the day six calendar months after the date of the Action, computed calendar-arithmetically per <xref target="ISO8601-2"/> duration arithmetic, and (b) any longer Union or national law floor. The six-month period is read calendar-month-wise (the receipt expiry day is the same day-of-month six months later, with end-of-month rollover where the target month is shorter), not as a fixed day count.</t>
          <t>The 184-day figure (the maximum number of days in any rolling six-calendar-month window, worst case Aug-Jan, 31+30+31+30+31+31) is informative only; it expresses a safe day-count floor for hash-chain anchoring intervals and Audit Pack export windows where calendar-arithmetic is impractical at the producer layer. A Deployer that retains receipts strictly under the calendar-month rule above satisfies Article 26(6); a Deployer that uses 184 days as an internal day-count overestimate also satisfies it. A 183-day day-count floor is not endorsed by this profile: under a rolling six-calendar-month window 1 August to 31 January spans 184 days and 183 days is one day short. Where the Deployer is also a Financial Entity, the sectoral floor in <xref target="dora-retention"/> 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><tt>policy_digest</tt> MUST resolve through <xref target="audit-pack"/> to a retained artefact (machine check). The Deployer SHOULD demonstrate consistency with the Provider's instructions for use (process check). Inability to perform the machine check leaves the Article 26(1) obligation unevidenced by this profile; this document creates no evidentiary presumption under Union or national law.</t>
        </section>
        <section anchor="art26-2"><name>Article 26(2), assign human oversight</name>
          <t>For any Action whose <tt>decision</tt> is <tt>allow</tt> and which the Deployer's risk management documentation marks as requiring human oversight, 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 <tt>protectmcp:lifecycle</tt> Compliance Receipt records the absence of such review with a <tt>reason</tt> code. Both records MUST themselves be Compliance Receipts. This profile addresses the trigger and record of oversight; the competence, training, authority, and necessary support of the reviewer required by Article 26(2) remain the Deployer's separate responsibility.</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 the period stated in <xref target="art12-retention"/>. Where the Deployer is also a Financial Entity, the longer sectoral floor in <xref target="dora-retention"/> applies.</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. <tt>action_ref</tt> 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), record all ICT-related incidents and significant cyber threats</name>
          <t>The hash chain required by <xref target="hash-chain"/> supports the recording obligation of Article 17(2) by making after-the-fact alteration of recorded incidents detectable. 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-17-3-b"><name>Article 17(3)(b), establish procedures to identify, track, log, categorise and classify ICT-related incidents</name>
          <t>For Actions identified as part of an ICT-related incident, the producing system MUST emit <tt>incident_class</tt>. The classification criteria are those set out in Article 18(1) of <xref target="DORA"/>, with further specification in <xref target="REG-2024-1772"/>. The canonical reporting enumeration to which <tt>incident_class</tt> flattens is bound by Annex II field 3.23 of <xref target="REG-2025-302"/> (see <xref target="extension-fields"/>). Implementations MUST publish a flattened mapping in the Audit Pack manifest as required by <xref target="extension-fields"/>.</t>
        </section>
        <section anchor="dora-retention"><name>Retention</name>
          <t>Article 17 of <xref target="DORA"/> does not itself set a uniform numeric retention floor. The five-year (1827-day) figure used by this profile derives from sectoral instruments that overlap DORA-scoped Financial Entities. Investment firms keep records of all services, activities and transactions under Article 16(6) of <xref target="MIFID2"/>, with Article 72 and Annex I of <xref target="REG-2017-565"/> fixing the form and content of those records. The explicit five-year retention period in <xref target="MIFID2"/> is set by Article 16(7) for records of telephone conversations and electronic communications, kept for a period of five years and, where requested by the competent authority, for a period of up to seven years.</t>
          <t>Records of customer due diligence and of transactions under Article 40 of <xref target="AMLD"/> are kept for five years after the end of the business relationship. The AMLD record-keeping regime is superseded, in respect of record retention, by Article 77 of <xref target="AMLR"/> from 10 July 2027, which preserves the five-year floor and adds a case-by-case extension up to a further five years where the competent authority so requires. Implementations operating across the AMLD-to-AMLR transition MUST satisfy whichever instrument is in force on the date of the Action.</t>
          <t>Compliance Receipts MUST be retained for the period required by applicable Union or national law; where a sectoral floor applies, retention MUST equal or exceed the longest applicable floor. Absent a more specific rule, this profile RECOMMENDS 1827 days from the date of the Action (the worst-case rolling five-calendar-year window contains two leap days, so 1827 days satisfies "five years" regardless of the calendar years over which the window falls). 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>
        </section>
      </section>
    </section>

    <section anchor="us-bindings"><name>United States Bindings</name>
      <section anchor="nist-ai-rmf"><name>NIST AI RMF Binding</name>
        <t><xref target="NIST-AI-RMF"/> is a voluntary framework. Adoption of this profile, on its own, does not establish conformity with the AI RMF; it provides a tamper-evident receipt substrate that an AI RMF program can use as evidence under the MEASURE function and as a structured input to the GOVERN, MAP, and MANAGE functions. <xref target="NIST-GENAI-PROFILE"/> applies the AI RMF functions to generative AI; the profile bindings below apply to generative and non-generative AI agent deployments alike unless explicitly noted.</t>
        <section anchor="rmf-govern"><name>GOVERN function</name>
          <t>The GOVERN function requires that organizations document AI policies and procedures. The combination of <tt>policy_digest</tt> and the Audit Pack manifest provides a machine-readable binding between every Action and the policy artefact in force at the time of the Action. A change to the policy artefact MUST produce a new <tt>policy_digest</tt> value (per <xref target="policy-digest"/>); the Audit Pack therefore records every policy change in a tamper-evident manner.</t>
        </section>
        <section anchor="rmf-map"><name>MAP function</name>
          <t>The MAP function requires that the context, capabilities, and risks of an AI system be characterised. The combination of <tt>type</tt>, <tt>tool_name</tt>, <tt>action_ref</tt>, and <tt>iteration_id</tt> SHOULD be sufficient for an auditor to reconstruct the operational context of any Action without dereferencing the underlying payload.</t>
        </section>
        <section anchor="rmf-measure"><name>MEASURE function</name>
          <t>The MEASURE function requires that AI risks and impacts be analysed and tracked over time. The hash-chain linkage required by <xref target="hash-chain"/> provides tamper-evident continuity of the receipt stream over the AI system's operational lifetime, satisfying the traceability prerequisite of MEASURE.</t>
        </section>
        <section anchor="rmf-manage"><name>MANAGE function</name>
          <t>The MANAGE function requires that AI risks be prioritised and acted upon based on projected impact. The <tt>risk_class</tt> extension field carries the Deployer's risk classification of the Action; together with <tt>decision</tt>, <tt>reason</tt>, and <tt>policy_digest</tt>, it supports prioritisation and incident response without requiring the verifier to re-derive risk from the underlying payload.</t>
        </section>
      </section>

      <section anchor="colorado-ai-act"><name>Colorado AI Act (SB 24-205) Binding</name>
        <t><xref target="COLORADO-AI-ACT"/> imposes deployer obligations effective June 30, 2026 (per Senate Bill 25B-004, which postponed the original February 1, 2026 effective date). The Act regulates the deployment of High-Risk AI Systems and the prevention of algorithmic discrimination.</t>
        <section anchor="co-1703-2"><name>Section 6-1-1703(2), risk management policy and program</name>
          <t>Section 6-1-1703(2) requires deployers to implement a risk management policy and program for the High-Risk AI System. <tt>policy_digest</tt> MUST resolve through <xref target="audit-pack"/> to the deployer's risk management policy artefact in force at the time of the Action. Where the Deployer classifies an Action as risk-bearing under that policy, the receipt MUST carry a <tt>risk_class</tt> extension field.</t>
        </section>
        <section anchor="co-1703-3"><name>Section 6-1-1703(3), impact assessment</name>
          <t>Section 6-1-1703(3) requires deployers to complete an impact assessment annually and within 90 days after any intentional and substantial modification of the High-Risk AI System. The combination of <tt>type</tt>, <tt>policy_digest</tt>, and <tt>previousReceiptHash</tt> MUST be sufficient for an auditor to identify, by query alone, the receipts that span the period covered by an impact assessment, including any policy changes within that period.</t>
        </section>
        <section anchor="co-1703-7"><name>Section 6-1-1703(7), notice of algorithmic discrimination</name>
          <t>Where a Deployer determines that a High-Risk AI System has caused or is reasonably likely to have caused algorithmic discrimination, the producing system SHOULD record that determination as a <tt>protectmcp:lifecycle</tt> Compliance Receipt naming the determination, the affected receipts by <tt>action_ref</tt>, and the policy or risk-management response with a <tt>reason</tt> code.</t>
        </section>
      </section>

      <section anchor="texas-traiga"><name>Texas Responsible AI Governance Act (HB 149) Binding</name>
        <t><xref target="TEXAS-TRAIGA"/> takes effect January 1, 2026. The Act adopts an intent-based liability framework for the development and deployment of AI systems and provides a safe harbor at Section 552.105(e)(2)(D) of the Texas Business and Commerce Code for organisations that substantially comply with the most recent version of <xref target="NIST-GENAI-PROFILE"/>, or another nationally or internationally recognized risk management framework for AI systems, and operate an internal review process.</t>
        <section anchor="tx-safe-harbor"><name>Safe-harbor evidentiary support</name>
          <t>Where a Deployer relies on the safe-harbor provision of HB 149 by substantially complying with <xref target="NIST-GENAI-PROFILE"/>, the Audit Pack MAY be presented as evidence of that compliance. The bindings of <xref target="nist-ai-rmf"/> apply, with the additional Generative AI Profile bindings of <xref target="NIST-GENAI-PROFILE"/>.</t>
        </section>
        <section anchor="tx-prohibited-use"><name>Prohibited-use detection</name>
          <t>Receipts whose <tt>decision</tt> is <tt>deny</tt> with a <tt>reason</tt> code drawn from a vocabulary documenting the Act's prohibited-use categories under Section 552.052 of the Texas Business and Commerce Code added by HB 149 (incitement or encouragement of physical self-harm including suicide, harm to another person, or engagement in criminal activity) MUST be retained for at least 2192 days from the date of the Action, applying the same six-year worst-case methodology as <xref target="hipaa-retention"/>, or the longer period required by Texas law, whichever is greater.</t>
        </section>
      </section>

      <section anchor="hipaa"><name>HIPAA Security Rule Binding (45 CFR Part 164, Subpart C)</name>
        <t><xref target="HIPAA-SECURITY"/> applies to Covered Entities (HIPAA) that handle electronic protected health information. The bindings below apply only to receipts whose underlying Actions reference electronic protected health information.</t>
        <section anchor="hipaa-164-312-b"><name>45 CFR 164.312(b), audit controls</name>
          <t>45 CFR 164.312(b) requires implementation of "hardware, software, and/or procedural mechanisms that record and examine activity in information systems that contain or use electronic protected health information". The combination of <tt>type</tt>, <tt>action_ref</tt>, <tt>tool_name</tt>, and the hash-chain linkage required by <xref target="hash-chain"/> provides evidence toward the recording requirement; the verification rules of <xref target="mandatory-checks"/> provide evidence toward the examination requirement. The remaining addressable-implementation-policy obligations of 45 CFR 164.312(b) over the Covered Entity's whole information system remain the Covered Entity's own responsibility.</t>
        </section>
        <section anchor="hipaa-retention"><name>45 CFR 164.316(b)(2), six-year retention</name>
          <t>45 CFR 164.316(b)(2) (and in particular the subparagraph 164.316(b)(2)(i)) requires that the documentation required by 45 CFR 164.316(b)(1) be retained "for 6 years from the date of its creation or the date when it last was in effect, whichever is later". The audit-log content produced under 45 CFR 164.312(b) is not itself documentation required by 164.316(b)(1); the Security Rule does not set an explicit retention floor for individual audit-log records. By analogy with the six-year floor that 164.316(b)(2) places on the policies and procedures that govern audit-log generation, this profile applies the same six-year floor to Compliance Receipts whose underlying Actions reference electronic protected health information.</t>
          <t>Records covered by the HIPAA Security Rule audit-trail retention MUST be retained for six years from the date of creation or the date when last in effect, whichever is later, per 45 CFR 164.316(b)(2). This profile expresses that floor as 2192 days from the later of (a) the date of the Action and (b) the date the policy artefact referenced by <tt>policy_digest</tt> ceased to be in effect: 2192 is the maximum number of days in any rolling six-calendar-year window (worst case spans two leap days, e.g. 2024-2030 contains February 29 of 2024 and 2028, yielding 6*365+2 = 2192 days). The six-year analogy floor is grounded in 164.316(b)(2); a Covered Entity that retains receipts strictly under 164.316(b)(2)(i) bound only to the policy artefact's creation-or-cessation date MAY do so when no longer audit-log floor is established by separate Union, state, or sectoral law. Verification keys whose lifetime expires within the retention window MUST have their public components retained so that historical signatures remain verifiable.</t>
        </section>
      </section>

      <section anchor="nydfs"><name>NYDFS Cybersecurity Regulation Binding (23 NYCRR Part 500)</name>
        <t><xref target="NYDFS-500"/> applies to Covered Entities (NYDFS) operating under New York Banking, Insurance, or Financial Services Law. The bindings below apply only to receipts produced by such Covered Entities.</t>
        <section anchor="nydfs-500-06"><name>23 NYCRR 500.6, audit trail</name>
          <t>23 NYCRR 500.6(a) requires Covered Entities to securely maintain systems that, to the extent applicable and based on its risk assessment, (1) are designed to reconstruct material financial transactions, and (2) include audit trails designed to detect and respond to cybersecurity events that have a reasonable likelihood of materially harming any material part of the normal operations of the Covered Entity. The hash chain required by <xref target="hash-chain"/> together with the anchor evidence required by <xref target="anchoring"/> provides evidence toward the tamper-evidence prerequisite of the audit-trail obligation.</t>
        </section>
        <section anchor="nydfs-500-17"><name>23 NYCRR 500.17, notices to superintendent</name>
          <t>23 NYCRR 500.17(a)(1) requires that "Each covered entity shall notify the superintendent electronically in the form set forth on the department's website as promptly as possible but in no event later than 72 hours after determining that a cybersecurity incident has occurred at the covered entity, its affiliates, or a third-party service provider." The reporting trigger is a Cybersecurity Incident under 23 NYCRR 500.1(g), not any Cybersecurity Event under 500.1(f). For Actions identified as part of such an Incident, the producing system MUST emit <tt>incident_class</tt> with a value indicating Cybersecurity Incident under 23 NYCRR 500.1(g), and the Covered Entity MUST be able to produce, on request, the chain segment covering the period of the Incident together with the anchor evidence that fixes the chain to wall-clock time.</t>
        </section>
        <section anchor="nydfs-retention"><name>23 NYCRR 500.6 retention</name>
          <t>23 NYCRR 500.6(b) requires that "Each Covered Entity shall maintain records required by this section for not fewer than five years." The five-year floor applies uniformly to records required by paragraph (a)(1) (designed to reconstruct material financial transactions) and to records required by paragraph (a)(2) (audit trails designed to detect and respond to cybersecurity events that have a reasonable likelihood of materially harming any material part of the normal operations of the Covered Entity). Compliance Receipts produced under this binding MUST be retained for at least 1827 days from the date of the Action (the worst-case rolling five-calendar-year window contains two leap days).</t>
        </section>
      </section>

      <section anchor="sec"><name>SEC Broker-Dealer Recordkeeping Binding (17 CFR 240.17a-4)</name>
        <t><xref target="SEC-17A-4"/> applies to Broker-Dealers, Security-Based Swap Dealers, and Major Security-Based Swap Participants. The bindings below apply only to receipts produced inside such entities.</t>
        <section anchor="sec-17a-4-f"><name>17 CFR 240.17a-4(f), electronic recordkeeping system</name>
          <t>The November 3, 2022 amendments to 17 CFR 240.17a-4 (compliance date May 3, 2023) added an audit-trail alternative to the prior write-once-read-many (WORM) electronic recordkeeping requirement. The audit-trail alternative requires that the electronic recordkeeping system permit the recreation of an original record if it is modified or deleted. The hash-chain linkage required by <xref target="hash-chain"/> together with the retention rule in <xref target="sec-retention"/> and the anchor evidence required by <xref target="anchoring"/> provides evidence toward the technical recreation capability the audit-trail alternative requires; the accompanying undertaking obligations (designated-executive-officer and third-party-access arrangements among them) are outside this profile's scope and remain the broker's or dealer's own responsibility.</t>
        </section>
        <section anchor="sec-retention"><name>17 CFR 240.17a-4(a) and (b) retention</name>
          <t>17 CFR 240.17a-4(a) requires preservation of certain records for not less than 6 years, the first two years in an easily accessible place. 17 CFR 240.17a-4(b) requires preservation of a different list of records for not less than three years, the first two years in an easily accessible place. Compliance Receipts that constitute or support a record listed in 17 CFR 240.17a-4(a) MUST be retained for at least 2192 days from the date of the Action, applying the same six-year worst-case methodology as <xref target="hipaa-retention"/>; receipts that constitute or support a record listed only in 17 CFR 240.17a-4(b) MUST be retained for at least 1096 days from the date of the Action (the worst-case rolling three-calendar-year window contains one leap day). Where both apply, the longer period applies.</t>
        </section>
      </section>

      <section anchor="circia"><name>CIRCIA Binding (Cyber Incident Reporting for Critical Infrastructure Act of 2022)</name>
        <t><xref target="CIRCIA"/> requires Covered Entities (CIRCIA) to report Covered Cyber Incidents to the Cybersecurity and Infrastructure Security Agency within 72 hours of reasonable belief that the incident has occurred, and to report ransom payments within 24 hours. The reporting obligations take effect upon publication of the final rule. Pending publication, the bindings below apply on a voluntary basis.</t>
        <section anchor="circia-incident"><name>Covered Cyber Incident reporting support</name>
          <t>For Actions identified as part of a Covered Cyber Incident, the producing system MUST emit <tt>incident_class</tt> with a value indicating Covered Cyber Incident under <xref target="CIRCIA"/>. The Covered Entity MUST be able to produce, on request, the chain segment covering the period of the incident together with the anchor evidence that fixes the chain to wall-clock time.</t>
        </section>
        <section anchor="circia-retention"><name>Records related to a Covered Cyber Incident report</name>
          <t>Section 2242(a)(4) of the Homeland Security Act of 2002, as enacted by <xref target="CIRCIA"/> and codified at 6 U.S.C. 681b(a)(4), requires Covered Entities to preserve data relevant to a Covered Cyber Incident or ransom payment in accordance with procedures established in the final rule. CISA's notice of proposed rulemaking at 89 FR 23644 (April 4, 2024), proposed Section 226.13(c), proposes a preservation period of not less than two years measured from the submission of the most recently required CIRCIA report (or the date that submission would have been required absent a preservation exception under proposed Section 226.4(a)); this profile uses that proposed floor pending publication of the final rule.</t>
          <t>Records covered by CIRCIA preservation MUST be retained for two years from the submission of the most recently required CIRCIA report under 6 U.S.C. 681b(c)(2). Compliance Receipts that are referenced in a CIRCIA report or that the Covered Entity reasonably anticipates will be so referenced MUST be retained for the longer of (a) the period established by the final rule and (b) two years from the submission of the most recently required CIRCIA report (or the date that submission would have been required absent a preservation exception), per proposed Section 226.13(c) of the CIRCIA NPRM at 89 FR 23644 (April 4, 2024). Covered Entities MUST NOT measure the retention floor from the date of the underlying Action; an Action detected and reported months later carries a preservation window that runs forward from the report submission date.</t>
        </section>
      </section>
    </section>

    <section anchor="attestation-statements"><name>Attestation Statements and Authoritative Re-Derivation</name>
      <t>This section is normative. It defines an attestation statement envelope that the issuing platform emits on top of, and distinct from, the <xref target="ACTA-RECEIPTS"/> receipt envelope of <xref target="field-profile"/>. The receipt envelope of <xref target="field-profile"/> remains the unit that the European Union and United States regime bindings bind to; the attestation statement defined here is an additional, independently verifiable artefact that wraps a claim about an Action (or about a code change) in a form a third party can re-derive from independent evidence. An implementation MAY emit attestation statements in addition to receipts; a Compliance Receipt remains conformant whether or not any attestation statement is emitted. The attestation statement does not modify the receipt envelope, the canonicalization rule of <xref target="canonicalization-scope"/>, the signature scope and the hash chain of <xref target="hash-chain"/>, or the anchoring rules of <xref target="anchoring"/>.</t>

      <section anchor="attestation-envelope"><name>Attestation Statement Envelope</name>
        <t>An attestation statement is a Dead Simple Signing Envelope (DSSE, <xref target="DSSE"/>) whose payload is an in-toto Statement v1 (<xref target="IN-TOTO-ATTESTATION"/>) and whose signature is computed over the DSSE Pre-Authentication Encoding (PAE) of that payload. The issuing platform MUST construct the DSSE envelope as the PAE over the declared payload type and the payload bytes, and MUST sign that PAE with ML-DSA-65 (<xref target="FIPS204"/>) under the service identity of <xref target="service-identity"/>; the signature MUST NOT be computed over any ad-hoc serialization of the statement. The in-toto Statement MUST set <tt>predicateType</tt> to a value under the asqav predicate namespace <tt>https://asqav.com/</tt>; the statement's <tt>subject</tt> array carries one or more subjects, each identified by a digest set. The DSSE envelope and the in-toto Statement it carries are JSON documents; their canonical form for signing is the DSSE PAE defined by <xref target="DSSE"/>, which is independent of the JCS rule that governs the receipt envelope of <xref target="field-profile"/>.</t>
        <t>Two tiers of attestation statement are defined. The tier is a property the issuing platform sets and a verifier reads from the statement; a caller MUST NOT select the tier.</t>
        <dl>
          <dt>Voluntary (observation) attestation:</dt>
          <dd>The statement's <tt>subject</tt> digest is a caller-supplied digest. The issuing platform signs the digest the caller supplied without independently re-deriving it. This tier is a voluntary cryptographic attestation: it is non-repudiable for exactly what was attested (the platform did sign that digest at that time under its key), but it is explicitly NOT a capture and is NOT unbypassable. The producer-asserted receipts of <xref target="code-authorship"/> and <xref target="risk-acceptance"/> are the receipt-layer expression of this tier: the platform signs the producer's asserted values and never re-fetches, re-diffs, re-runs, or otherwise re-derives them. A verifier MUST NOT read a voluntary attestation as evidence that the attested content corresponds to any independently observed fact.</dd>
          <dt>Authoritative attestation:</dt>
          <dd>The statement's <tt>subject</tt> digest is server-re-derived by the issuing platform from independent evidence, per <xref target="authoritative-rederivation"/>. The caller-supplied digest, if any, is advisory only and is never the signed subject. This tier is the only tier that supports the independent re-derivation check of <xref target="attestation-verification"/>.</dd>
        </dl>
      </section>

      <section anchor="authoritative-rederivation"><name>Authoritative Code-Authorship Re-Derivation</name>
        <t>This section is normative and is the principal addition of revision -08. For an authoritative attestation whose subject is a code change, the issuing platform (acting as verifier of the change) MUST re-derive the subject digest from the source host rather than trust any client-supplied digest. The canonical re-derivation rule is as follows.</t>
        <t>The re-derivation input is a commit RANGE, not a single commit. A change authored as a pull request ordinarily carries more than one commit, so a digest computed over the named commit alone would cover only part of the authored change. The issuing platform MUST therefore resolve a base commit identifier for the range before fetching, in the following order, and MUST NOT silently guess one: (a) the base identifier supplied with the attestation request, where it is a full 40-character lowercase hexadecimal object name (this request parameter is distinct from the producer-asserted <tt>base_sha</tt> receipt field of <xref target="code-authorship"/>, which is bound into the signed bytes and never fetched); (b) otherwise the base the source host records for the pull request associated with <tt>commit_sha</tt>, which is the merge-base anchor for the change and is therefore stable across merge and squash commits; (c) otherwise, where <tt>commit_sha</tt> names a parentless commit, the empty tree object name <tt>4b825dc642cb6eb9a060e54bf8d69288fbee4904</tt>. Where none of (a) through (c) yields a base, the platform MUST refuse to emit an authoritative attestation rather than infer a base from the commit parents, which are ambiguous for merge and squash commits.</t>
        <t>Given that resolved base identifier, the named commit identifier <tt>commit_sha</tt> (the field of <xref target="code-authorship"/>) and the named repository <tt>repo_ref</tt>, the issuing platform MUST fetch the raw unified diff for the range from the source host (for a GitHub-hosted repository, the REST comparison endpoint <tt>/repos/{repo}/compare/{base}...{commit_sha}</tt>) with the HTTP <tt>Accept</tt> header set to <tt>application/vnd.github.diff</tt>, so that the response body is the raw unified diff of that range. The subject digest the platform signs is the SHA-256 digest computed over the exact response bytes returned by that fetch, with no re-encoding, re-serialization, whitespace normalization, or truncation applied before hashing. The digest MUST be expressed in the <tt>sha256:&lt;64 lowercase hex chars&gt;</tt> wire form used throughout this profile.</t>
        <t>Scope of this rule: the canonical re-derivation rule is defined for GitHub-hosted repositories only. It depends on a proprietary, unregistered media type (<tt>application/vnd.github.diff</tt>) and on GitHub's diff rendering (rename detection, context lines, binary-file stubs), which is not a versioned specification; if that rendering changes, digests signed under the earlier rendering no longer re-derive, which the detection rule below surfaces rather than hides. Repositories hosted elsewhere require a host-specific rule defined on the same principle - fetch the host's raw diff rendering of the range and hash the exact response bytes - and this revision defines no such rule.</t>
        <t>A client-supplied digest (for example a value the caller placed in <tt>change_digest</tt> of <xref target="code-authorship"/>) is ADVISORY only under the authoritative tier. The issuing platform MAY compare the advisory digest to the re-derived digest and SHOULD flag a mismatch in the attestation predicate, but the signed <tt>subject</tt> digest MUST be the re-derived value; the advisory value MUST NOT be substituted for it, signed in its place, or treated as the subject under any mismatch handling. A mismatch is evidence that the client's view of the change diverges from the source host's view; it does not promote the client value to the signed subject.</t>
        <t>The property reproducibility gives an authoritative attestation is unforgeability, not unbypassability: any third party holding <tt>repo_ref</tt>, <tt>commit_sha</tt>, and the base identifier recorded in the attestation predicate can re-fetch the same range from the source host under the same <tt>Accept: application/vnd.github.diff</tt> rule, recompute SHA-256 over the exact response bytes, and obtain the same digest the platform signed, without trusting the platform and without trusting the client. Reproducibility does NOT make the attestation unbypassable: a client that never requests an attestation bypasses it entirely, and unbypassability is a property of the deployment per <xref target="honest-tiering"/>, never of this digest rule. The canonical re-derivation rule above is therefore stated precisely so that the recomputation is byte-for-byte deterministic across independent verifiers. Where the source host returns different bytes for the same range at different times (for example after a force-push that rewrites the commit), the re-derived digest changes and the earlier attestation no longer re-derives; this is the intended detection behaviour, not a failure of the rule. The platform MUST record both the <tt>commit_sha</tt> and the resolved base identifier it re-fetched in the attestation predicate, so that the whole re-derivation input is named and no verifier has to infer the range. A verifier MUST re-derive over the range the predicate names and MUST NOT substitute a range of its own choosing. The signed subject digest is a claim about exactly that range, and it is not a claim that the range covers every change the producer authored.</t>
      </section>

      <section anchor="capture-layer"><name>Capture-Layer Integrity</name>
        <t>This section is normative. The attestation predicate carries a server-derived <tt>capture_layer</tt> member that names the independent evidence the issuing platform relied on, and a server-enforced <tt>receipt_type</tt> member that encodes whether the statement is authoritative or an observation. Both members are set by the issuing platform at signing time; a caller-supplied value for either member MUST be dropped before signing, in the same manner as the server-built fields of <xref target="enforcement-attestation"/>.</t>
        <t>The <tt>capture_layer</tt> member MUST be derived from independent evidence rather than asserted by the caller. The following values are defined.</t>
        <dl>
          <dt><tt>github_sha_pull</tt>:</dt>
          <dd>The platform re-fetched the raw unified diff for the named commit range from the source host per <xref target="authoritative-rederivation"/>. This is independent evidence and supports an authoritative attestation.</dd>
          <dt><tt>network_proxy</tt>:</dt>
          <dd>The platform observed the Action as routed HTTP egress through a proxy under the deployer's control (the topology catalogued as <tt>network_proxy</tt> in <xref target="capture-topologies"/>). This is independent evidence for the routed egress the proxy actually saw and supports an authoritative attestation for that egress only.</dd>
          <dt><tt>in_process_sdk</tt>:</dt>
          <dd>The evidence originates from an SDK linked into the application's own process (the topology catalogued as <tt>in_process_sdk</tt> in <xref target="capture-topologies"/>). This is OBSERVATION only: the evidence is produced by the same process whose behaviour is being attested, so it is not independent. An <tt>in_process_sdk</tt> capture layer MUST NOT mint an authoritative decision attestation; it yields a voluntary observation attestation only.</dd>
          <dt><tt>passive_telemetry</tt>:</dt>
          <dd>The evidence originates from a post-hoc telemetry ingestion pipeline (the topology catalogued as <tt>passive_telemetry</tt> in <xref target="capture-topologies"/>). This is OBSERVATION only and MUST NOT mint an authoritative decision attestation.</dd>
        </dl>
        <t>The <tt>capture_layer</tt> vocabulary of this section and the <tt>capture_topology</tt> vocabulary of <xref target="capture-topologies"/> are distinct vocabularies at distinct layers: <tt>capture_layer</tt> names the evidence class an attestation statement relied on (the four values above), while <tt>capture_topology</tt> names the emission topology of a receipt (six values). Emission topologies with no independent-evidence <tt>capture_layer</tt> counterpart (<tt>browser_extension</tt>, <tt>ebpf_observer</tt>, <tt>mcp_proxy</tt>) can never mint an authoritative attestation; conversely <tt>github_sha_pull</tt> is a re-derivation evidence class and has no emission-topology counterpart. A deployment mapping one vocabulary onto the other MUST do so per this paragraph and MUST NOT invent values in either.</t>
        <t>The <tt>receipt_type</tt> member MUST be one of <tt>authoritative</tt> or <tt>observation</tt>, and the issuing platform MUST enforce the correspondence between <tt>receipt_type</tt> and <tt>capture_layer</tt>: a statement with <tt>receipt_type</tt> <tt>authoritative</tt> MUST carry a <tt>capture_layer</tt> drawn from the independent-evidence values (<tt>github_sha_pull</tt>, <tt>network_proxy</tt>), and a statement whose <tt>capture_layer</tt> is an observation-only value (<tt>in_process_sdk</tt>, <tt>passive_telemetry</tt>) MUST carry <tt>receipt_type</tt> <tt>observation</tt>. In particular, an in-process capture can never mint an authoritative decision receipt. The authoritative path MUST fail closed: if the independent evidence cannot be obtained (the source host is unreachable, the re-fetch returns an error, or the proxy did not observe the egress), the issuing platform MUST NOT emit an authoritative attestation and MUST instead emit an observation attestation or refuse to emit. A present-but-incoherent combination of <tt>receipt_type</tt> and <tt>capture_layer</tt> MUST be rejected at signing time, in the same spirit as the false-attestation guards of <xref target="enforcement-attestation"/>.</t>
      </section>

      <section anchor="attestation-verification"><name>Independent Verification Protocol</name>
        <t>This section is normative. A third party verifies any authoritative attestation statement independently of the issuing platform's cooperation, by performing all of the following steps. The protocol requires network access to independent surfaces - the issuing platform's published JWK Set, the source host, and, where applicable, the deployer's egress log - and requires no verification step to be performed on the verifier's behalf by the issuing platform; "independent" here never means "offline".</t>
        <ul>
          <li>Fetch the verification key from the issuing platform's published JWK Set at <tt>/.well-known/jwks.json</tt> (<xref target="service-identity"/>), selecting the key whose key identifier equals the signature's <tt>kid</tt>. The verifier MUST NOT trust a verification key embedded in the attestation statement itself, mirroring the rule of <xref target="mandatory-checks"/> for receipts.</li>
          <li>Verify the ML-DSA-65 signature (<xref target="FIPS204"/>) over the DSSE PAE of the in-toto Statement, per <xref target="attestation-envelope"/>. A signature that does not verify under the resolved key MUST cause the attestation to be rejected.</li>
          <li>Re-derive the <tt>subject</tt> digest from independent evidence using the same canonical rule the platform used: for a code subject, re-fetch the raw unified diff for the range named in the predicate (its base identifier and <tt>commit_sha</tt>) from the source host under <tt>Accept: application/vnd.github.diff</tt> and recompute SHA-256 over the exact response bytes per <xref target="authoritative-rederivation"/>; for a routed-egress subject, read the deployer's egress log for the observed flow. The verifier MUST require equality between the re-derived digest and the signed <tt>subject</tt> digest; a mismatch MUST cause the attestation to be rejected.</li>
        </ul>
        <t>These steps compose with, and are additive to, the baseline receipt checks of <xref target="mandatory-checks"/> where the attestation statement accompanies a Compliance Receipt. The combined effect bounds a lying client: a client that controls only its own inputs can at best produce a non-gating observation attestation (which the <tt>receipt_type</tt> of <xref target="capture-layer"/> marks as such and which no verifier treats as authoritative), or an authoritative-shaped statement whose subject digest fails the re-derivation equality check and is therefore rejected. A client cannot produce a passing authoritative attestation for a change the source host does not corroborate, because the signed subject is the re-derived digest and the verifier recomputes it independently.</t>
      </section>

      <section anchor="honest-tiering"><name>Honest Tiering of Capture Claims</name>
        <t>This section is normative and states, precisely and without overclaim, what each deployment tier does and does not capture. The two product tiers and their honest guarantees are as follows.</t>
        <dl>
          <dt>SaaS-SDK tier:</dt>
          <dd>This tier produces a voluntary cryptographic attestation per <xref target="attestation-envelope"/>. The attestation is non-repudiable for exactly what was attested (the platform signed the caller-supplied digest under its key at the attested time), but it is NOT a capture and is NOT unbypassable: the platform signs what the client presents and does not independently observe the client's behaviour. A verifier or regulator MUST NOT read a SaaS-SDK-tier attestation as evidence that the attested action is the complete set of actions the client performed.</dd>
          <dt>Enterprise-proxy tier:</dt>
          <dd>This tier produces a real capture, but only for routed HTTP egress to public model APIs that actually traverses the deployer's proxy, and only when the deployer both firewalls egress so that the model-API traffic is forced through the proxy and configures the proxy and signer to fail closed. Under those deployer-controlled conditions the capture is authoritative for the egress the proxy observed, per the <tt>network_proxy</tt> capture layer of <xref target="capture-layer"/>. The unbypassability of this tier is a property of the deployer's network policy (the firewalling and fail-closed configuration), NOT a property of the product: a deployer that does not firewall egress, or that configures fail-open, has not deployed an unbypassable capture, and the product MUST NOT be represented as providing one in that configuration. This profile does NOT claim, and the Enterprise-proxy tier does NOT provide, host-level capture of arbitrary process behaviour: it does not claim eBPF-based or shell-based capture of actions that do not traverse the routed HTTP egress. The eBPF-observer and passive-telemetry topologies catalogued in <xref target="capture-topologies"/> remain observation-only evidence classes under <xref target="capture-layer"/> and do not mint authoritative attestations.</dd>
        </dl>
      </section>

      <section anchor="service-identity"><name>Service Identity, JWKS, and Revocation</name>
        <t>This section is normative. Attestation statements are signed under a dedicated service identity operated by the issuing platform, distinct from any agent or deployer identity. The service identity's signature algorithm is ML-DSA-65 (<xref target="FIPS204"/>). The corresponding public key MUST be published in a JSON Web Key Set at the well-known location <tt>/.well-known/jwks.json</tt> of the issuing platform, and each attestation statement's signature MUST carry a <tt>kid</tt> that resolves to exactly one key in that set, mirroring the <tt>kid</tt>-resolution discipline of <xref target="mandatory-checks"/> and the <tt>issuer_id</tt>-equals-<tt>kid</tt> invariant of <xref target="issuer-id"/>.</t>
        <t>Revocation of a service-identity key MUST be checkable from the published JWK Set itself: under the revoked-key publication rule of <xref target="key-compromise"/> a revoked key remains published with a revocation time, and key status is determined from that publication. This profile uses no PKIX revocation path: the service identity is a bare JWK, not an X.509 certificate, and OCSP or CRL machinery does not apply to it. A verifier MUST fail closed on key status: a signature made by a key that is revoked at or before the attestation's issued time MUST be rejected, and a signature whose <tt>kid</tt> does not resolve to a known, currently valid key in the JWK Set (an unknown key) MUST be rejected. Under that publication a verifier passes an attestation issued before the revocation instant and fails one issued at or after it. A verifier MUST NOT accept an attestation statement whose signing key is revoked or unknown, regardless of whether the signature otherwise verifies.</t>
      </section>
    </section>

    <section anchor="audit-pack"><name>Audit Pack Composition</name>
      <t>This section is normative. It defines the contents of an Audit Pack as introduced in <xref target="conventions"/>, on which the resolution requirements of <xref target="policy-digest"/> and <xref target="mandatory-checks"/> depend.</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 <tt>previousReceiptHash</tt> and the recomputed chain-link digest of its predecessor per <xref target="hash-chain"/>.</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 other regulated entity associated with each <tt>issuer_id</tt> value.</li>
        <li>The verification key material for every <tt>kid</tt> value present, in a form that does not require online retrieval.</li>
        <li>Vocabularies referenced by <tt>reason</tt>, <tt>risk_class</tt>, <tt>incident_class</tt>, and extension fields, embedded as JSON arrays with a stable identifier. The Audit Pack MUST expose a digest-resolution facility that, given a <tt>policy_digest</tt>, returns the retained artefact.</li>
        <li>A regime mapping document that names which receipts the producer asserts as evidence under any of the regimes addressed by Sections 6 and 7 of this document (EU AI Act Article 12, EU AI Act Article 26, DORA Article 17, NIST AI RMF, Colorado AI Act, Texas Responsible AI Governance Act, NYDFS Part 500, HIPAA Security Rule, SEC Rule 17a-4, CIRCIA).</li>
        <li>The chain heads valid at the start and end of the time window, signed by the Deployer or other regulated entity.</li>
      </ul>
      <t>Receipts with top-level signed fields beside the signature exist in the wild: the APS gateway receipts at <tt>aps-gateway-enforcement/2-external-verification</tt> in the <xref target="SCOPEBLIND"/> corpus are one example, and their signature covers the whole receipt object minus the signature field, a different scope from the signature scope defined in <xref target="hash-chain"/>. A verifier processing a mixed corpus therefore has to select the signature scope by the receipt's format, never assume it.</t>
      <t>An Audit Pack MUST itself be signed per the <xref target="ACTA-RECEIPTS"/> algorithm registry. The manifest MUST include <tt>bundle_digest</tt>, <tt>bundle_signature</tt>, <tt>bundle_public_key</tt>, and <tt>algorithm_registry_version</tt>.</t>
      <t>The following manifest-level fields SHOULD appear on an Audit Pack bundle when the underlying receipt stream exposes the corresponding semantics. Each is informative and does not alter the wire shape of individual receipts.</t>
      <dl>
        <dt><tt>regime_mapping_disclaimer</tt>:</dt>
        <dd>String emitted on bundles whose per-receipt regime predicates derive from mapping logic the original producing system did not sign. The value identifies the producer of the mapping, the document version under which it was computed, and a disclaimer that the regime-satisfaction flags are advisory and remain subject to the verifier's own check against Sections 6 and 7.</dd>
        <dt><tt>stale_pending</tt>:</dt>
        <dd>Boolean flag set per bundle entry whose anchor evidence is still <tt>pending</tt> after the bound of <xref target="anchoring"/> (7 days for OpenTimestamps; synchronous for RFC 3161). When <tt>true</tt>, the bundled receipt is non-conformant per <xref target="anchoring"/>, and a Compliance Verifier consumes the flag to drive <tt>anchor_valid_*</tt> false in its per-axis report (see <xref target="reporting"/>). A verify endpoint over the same bundle SHOULD surface <tt>stale_pending</tt> in its response.</dd>
      </dl>
    </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="verifier-independence"><name>Verifier Independence</name>
        <t>This section is normative. Verification under this profile MUST be performable independently of the issuing platform: any third party holding the receipt, the chain commitments, and the verification key material named in <xref target="mandatory-checks"/> MUST be able to execute every check of this section without the issuing platform's cooperation, and no verification step MAY be conditioned on an account, an API credential, a fee, or any other authorization granted by the issuing platform or a party affiliated with it. A verification facility that reports a verdict only to registered callers, or that withholds key material behind an access control the issuer administers, is not a Compliance Verifier under this profile: its verdicts are issuer-gated attestations, not independent verification.</t>
        <t>Independence is a property of the verification path, not of the verifier's operator. A Compliance Verifier MAY be operated by the issuing platform itself, by the Deployer, by the Counterparty, or by a neutral third party unaffiliated with any of them; what the profile requires is that the same receipt, chain, and published key material yield the same verdict for every operator, and that the neutral-third-party position is always achievable with no step performed on the verifier's behalf by the issuing platform. The Independent Verification Protocol of <xref target="attestation-verification"/> states the same requirement for attestation statements and names the independent surfaces it fetches from.</t>
      </section>
      <section anchor="mandatory-checks"><name>Mandatory Checks</name>
        <t>A Compliance Verifier MUST perform at minimum all of the following checks before treating a receipt as a Compliance Receipt, together with the conditional checks of <xref target="anchoring"/> (pending-anchor bound and witness quorum), <xref target="counterparty-binding-verifier"/>, <xref target="result-bound"/>, and <xref target="enforcement-attestation"/>.</t>
        <ul>
          <li>Verify the signature over the signed bytes defined in <xref target="hash-chain"/>, using the algorithm declared in <tt>signature.alg</tt> per <xref target="ACTA-RECEIPTS"/>.</li>
          <li>Resolve the verification key through one of the key-distribution mechanisms described in Section 4.3 of <xref target="ACTA-RECEIPTS"/> (well-known JWK Set or out-of-band distribution), or through Audit Pack trust-anchor metadata. 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 chain-link digest of the immediately preceding receipt per <xref target="hash-chain"/> and comparing the lowercase hex encoding to <tt>previousReceiptHash</tt>. An explicit JSON null, an empty string, or an absent member is a malformed chain link, not a genesis marker; the genesis value is the all-zero SHA-256 value of <xref target="hash-chain"/>.</li>
          <li>Verify at least one anchor: an <xref target="RFC3161"/> token, an <xref target="OPENTIMESTAMPS"/> commitment, or both. The anchor MUST cover the committed bytes defined in <xref target="anchoring"/>. The verifier MUST cryptographically re-verify the anchor against those bytes; presence of anchor metadata without a successful cryptographic check MUST NOT yield "valid".</li>
          <li>Verify the future-skew bound on <tt>issued_at</tt> per <xref target="issued-at"/>. Past skew MUST NOT cause non-conformance when the receipt is within retention.</li>
          <li>Where the receipt carries <tt>expires_at</tt>, reject a downstream action that replays that decision after <tt>expires_at</tt> per <xref target="result-bound"/>; the receipt itself MUST NOT be rejected solely because <tt>expires_at</tt> has elapsed. Where the verifier maintains a seen-nonce index, a duplicate <tt>nonce</tt> under the same <tt>issuer_id</tt> MUST be flagged as a replay candidate on the reporting axis of <xref target="reporting"/>.</li>
          <li>Verify that <tt>policy_digest</tt> resolves through <xref target="audit-pack"/>. A digest computed over a nonced or otherwise mixed-input form (for example, SHA-256(nonce || JCS(artefact))) MUST NOT be treated as <tt>policy_digest</tt>; the digest scope is the canonical form of the artefact alone. The verifier MUST recompute SHA-256 over the canonical form of the resolved artefact as documented in the Audit Pack manifest, and compare; for JSON artefacts the canonical form is JCS per <xref target="RFC8785"/>.</li>
          <li>Where the receipt carries <tt>key_thumbprint</tt> per <xref target="key-thumbprint"/>, recompute the RFC 7638 thumbprint of the resolved verification key per <xref target="RFC7638"/> and require equality. A mismatch is a key-substitution failure and MUST be reported as non-conformant, never downgraded to a warning or reported as verified. Absence of the field is the legacy case of <xref target="key-thumbprint"/> and is not itself a failure.</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 <tt>issuer_id</tt> against an external registry (LEI, EIN, CIK, NPI, GLEIF, or a Deployer-published list).</li>
          <li>Resolve the policy artefact referenced by <tt>policy_digest</tt> and compare it to a Provider-supplied or Deployer-supplied reference policy.</li>
          <li>Recompute the chain head and compare it to a Deployer-published value.</li>
          <li>Validate <tt>incident_class</tt> (each element if encoded as an array) and <tt>risk_class</tt> 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 per-receipt report that names the regime bindings the receipt satisfies and the outcome of the per-axis checks the verifier performed. The following fields SHOULD be emitted; the axes are independent and consumers MUST NOT collapse them into a single boolean before display.</t>
        <dl>
          <dt><tt>regimes_satisfied</tt>:</dt>
          <dd>Array of short stable regime identifiers drawn from the regimes listed in <xref target="audit-pack"/> (for example <tt>eu_ai_act</tt>, <tt>dora</tt>, <tt>nist_ai_rmf</tt>, <tt>colorado_ai</tt>, <tt>texas_traiga</tt>, <tt>hipaa_security</tt>, <tt>nydfs_500</tt>, <tt>sec_17a4a</tt>, <tt>sec_17a4b</tt>, <tt>circia</tt>). The set is open-ended; consumers MUST treat unknown identifiers as informational. Where this field is inherited from a producer-side mapping in the bundle, the bundle-level <tt>regime_mapping_disclaimer</tt> of <xref target="audit-pack"/> applies.</dd>
          <dt><tt>anchor_valid_ots</tt>:</dt>
          <dd>Boolean. <tt>true</tt> when an <xref target="OPENTIMESTAMPS"/> anchor is present, has upgraded to the Bitcoin block attestation within the 7-day bound of <xref target="anchoring"/>, and re-verifies cryptographically against the signed envelope; otherwise <tt>false</tt> (including the case where the only present anchor is RFC 3161).</dd>
          <dt><tt>anchor_valid_rfc3161</tt>:</dt>
          <dd>Boolean. <tt>true</tt> when an <xref target="RFC3161"/> token is present, carries an ESSCertIDv2 per <xref target="RFC5816"/> where required, and re-verifies cryptographically against the signed envelope; otherwise <tt>false</tt>.</dd>
          <dt><tt>policy_digest_resolved</tt>:</dt>
          <dd>Boolean. <tt>true</tt> when <tt>policy_digest</tt> resolved to a retained artefact whose JCS-canonical SHA-256 matches the receipt value, per <xref target="mandatory-checks"/>; <tt>false</tt> on absence, resolution failure, or digest mismatch.</dd>
          <dt><tt>duplicate_emission_candidate</tt>:</dt>
          <dd>Boolean. <tt>true</tt> when at least one other receipt sharing <tt>action_ref</tt> and <tt>issuer_id</tt> has been observed in the same Audit Pack or in a verifier-maintained index; otherwise <tt>false</tt>. The axis is informational; this profile does not require verifiers to maintain a cross-receipt index. An absent index MUST report <tt>false</tt> rather than omit the axis, so consumers learn "no duplicate" from the value and learn "axis unknown" only from the verifier's documented capability set.</dd>
        </dl>
        <t>A receipt may carry <tt>anchor_valid_ots</tt>=true and <tt>anchor_valid_rfc3161</tt>=false (or vice versa) and still satisfy the mandatory anchor check of <xref target="anchoring"/>, which requires only one valid anchor. Where a receipt carries <tt>counterparty_binding</tt> per <xref target="counterparty-binding"/>, the verifier SHOULD additionally emit the outcome of the check of <xref target="counterparty-binding-verifier"/>. This revision does not define a stable field identifier for that axis; a future revision may define one, following the <tt>duplicate_emission_candidate</tt> pattern in which a verifier that maintains no cross-receipt index reports <tt>false</tt> rather than omitting the axis.</t>
      </section>

      <section anchor="verdict-vocabulary"><name>Verification Verdict and Hash-Algorithm Vocabulary</name>
        <t>This section defines the wire vocabulary a conforming verifier uses to summarize the outcome of its checks, and the hash-algorithm label that distinguishes keyed digests from unkeyed ones. The vocabulary is normative for verifier reporting under <xref target="reporting"/>. The summary verdict complements the per-axis report of <xref target="reporting"/>; it does not replace it, and the axes remain individually reportable under the no-collapse rule of that section.</t>
        <t>The <tt>hash_algo</tt> member of the payload records how the receipt's context digest was produced, as registered in <xref target="iana-extension-fields"/>. The value <tt>sha256</tt> denotes an unkeyed SHA-256 digest; the value <tt>hmac-sha256</tt> denotes an HMAC-SHA256 keyed digest computed under a holder salt. The digest string keeps the <tt>sha256:&lt;64 hex&gt;</tt> wire form of the upstream <tt>payload_digest</tt> in both cases; <tt>hash_algo</tt> is the discriminator. The keyed form exists because a low-entropy context is dictionary-recoverable from an unkeyed digest, and the keyed digest resists that recovery.</t>
        <t>A receipt whose context digest is keyed MUST carry <tt>hash_algo</tt> with the value <tt>hmac-sha256</tt> in its signed payload. Absence of <tt>hash_algo</tt> means the unkeyed <tt>sha256</tt> form, and a verifier reports absence as unkeyed. Because both forms share the <tt>sha256:&lt;64 hex&gt;</tt> digest wire form, <tt>hash_algo</tt> is the only signal that distinguishes them: an issuing platform that emits a keyed digest without the member causes every conforming verifier to report <tt>verified</tt> for a receipt that is not third-party re-derivable, which is exactly the over-claim <tt>verified_keyed</tt> exists to prevent. A verifier that cannot determine the form MUST NOT report <tt>verified</tt>.</t>
        <t>Two terms carry the normative weight of this section. The <tt>context digest</tt> is the digest the receipt commits to as the record of the Action's context, carried in the <tt>payload_digest</tt> member in the <tt>sha256:&lt;64 hex&gt;</tt> wire form. The <tt>holder salt</tt> is a secret the Deployer generates and holds outside the receipt: it is the HMAC key of the <tt>hmac-sha256</tt> form, it MUST NOT appear in any signed field, anchor, or Audit Pack export, and its destruction renders the keyed digest permanently unopenable, composing with the payload-deletion erasure rule of <xref target="privacy"/>. The keyed digest is computed as HMAC-SHA-256 (<xref target="RFC2104"/>) over the same JCS-canonical context bytes the unkeyed form digests, and the result is carried in the same <tt>sha256:&lt;64 hex&gt;</tt> wire form with <tt>hash_algo</tt> as the discriminator.</t>
        <t>The verdict vocabulary has exactly three values.</t>
        <dl>
          <dt><tt>verified</tt>:</dt>
          <dd>The signature, chain, and anchor checks of <xref target="mandatory-checks"/> pass, and the receipt's context digest is unkeyed (<tt>hash_algo</tt> = <tt>sha256</tt>) and re-derivable from evidence any third party can obtain.</dd>
          <dt><tt>verified_keyed</tt>:</dt>
          <dd>The signature, chain, and anchor checks pass, and the receipt's context digest is keyed (<tt>hash_algo</tt> = <tt>hmac-sha256</tt>): the digest is internally consistent and authentic to holders of the salt, but a third party cannot re-derive it without the holder salt, so the receipt is not third-party re-derivable proof of the context. This is a passing verdict. A verifier MUST NOT collapse it into <tt>verified</tt> (that would claim a re-derivability the receipt does not provide) and MUST NOT collapse it into <tt>unverified</tt> (that would discard a valid, anchored receipt).</dd>
          <dt><tt>unverified</tt>:</dt>
          <dd>Any non-passing outcome: a signature, chain, or anchor check failed, or an anchor has not yet produced a cryptographic proof. A receipt whose anchor is still pending reports <tt>unverified</tt> until the proof exists. Implementations MAY surface additional display states (anchor-pending, sealed-commitment) to their users, but the wire verdict MUST be one of these three values, and the three-value verdict is authoritative wherever it conflicts with a display refinement.</dd>
        </dl>
        <t>Non-passing verdicts are further classified by a <tt>failure_class</tt> axis with exactly two values, and implementations MUST NOT collapse the two. <tt>invalid</tt> means the check ran and a cryptographic or policy binding failed: a signature mismatch, a chain-link mismatch, an invalid anchor, a counterparty-binding mismatch, a signer key changed since issuance, an algorithm mismatch, or an <tt>issued_at</tt> beyond the future-skew bound of <xref target="issued-at"/>. <tt>unverifiable</tt> means the recomputation could not be completed: the signing key could not be resolved, the chain predecessor is missing, a member is malformed, canonicalization or parsing failed (including the duplicate-member rejection at ingest), the policy artefact could not be resolved, or the anchor is pending without a cryptographic proof. A verifier MUST NOT report a receipt as passing when the recomputation did not complete: <tt>unverifiable</tt> is not a weaker form of <tt>invalid</tt> and <tt>invalid</tt> is not a stronger form of <tt>unverifiable</tt>, and a failure that moves from one class to the other under retry is a genuine state change, not a relabelling. The reference platform carries the axis as <tt>failure_class</tt> in its verification detail alongside the boolean <tt>verified</tt> axis, and the reference SDK verifier emits it alongside the three-value verdict.</t>
        <t>A receipt carrying a keyed digest MUST NOT be reported as plain <tt>verified</tt>: the absence of third-party re-derivability is exactly the property the <tt>verified_keyed</tt> value exists to surface. The reference cloud implementation historically rendered the non-passing verdict as <tt>failed</tt>; this profile's wire vocabulary is <tt>unverified</tt>, and conforming reports of this profile use <tt>unverified</tt>.</t>
        <t>For interoperability with the deployed reference platform, this paragraph documents that platform's display vocabulary exactly. The reference cloud implementation surfaces five display states on its verification page: <tt>verified</tt>, <tt>verified_keyed</tt>, <tt>pending</tt> (signature valid, the anchor being committed but not yet proven), <tt>not_rederivable</tt> (signature valid and anchored, but the committed claim opens only for its key holder), and <tt>failed</tt> (a cryptographic check failed). It additionally carries a boolean <tt>verified</tt> axis in its JSON output, which stays <tt>true</tt> for both <tt>verified</tt> and <tt>verified_keyed</tt>. Under the three-value wire vocabulary of this section, <tt>verified</tt> and <tt>verified_keyed</tt> map to themselves; <tt>pending</tt> maps to <tt>unverified</tt> until the anchor commits; <tt>not_rederivable</tt> is a passing display state and maps to <tt>verified_keyed</tt>: it is the reference platform's display name for the keyed-digest case of this section, whose committed claim opens only for the salt holder; and <tt>failed</tt> maps to <tt>unverified</tt>. The three-value verdict is authoritative wherever a display refinement and the wire vocabulary disagree.</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, 23 NYCRR 500.17, or <xref target="CIRCIA"/> SHOULD anchor at intervals no longer than one hour, given the four-hour initial-notice deadline (with 72-hour intermediate-report and one-month final-report bounds) per DORA Article 17 and the RTS in <xref target="REG-2025-301"/>, the 72-hour notification clock under 23 NYCRR 500.17, and the 72-hour CIRCIA covered-cyber-incident reporting deadline that will apply once the CIRCIA final rule takes effect.</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="scope-confusion"><name>Chain- and Signature-Scope Confusion</name>
        <t>A verifier that processes more than one receipt format MUST determine the signature scope and the chain-digest scope from the receipt's format before it begins verification, and MUST NOT retry verification under a different scope when the first attempt fails. For Compliance Receipts both scopes are fixed by <xref target="hash-chain"/>: the signature covers the JCS-canonical serialization of the <tt>payload</tt> member, and the chain link digests the predecessor's <tt>payload</tt> member R. Receipts of the bare <xref target="ACTA-RECEIPTS"/> format chain over the whole-receipt object including the signature, and other formats in the wild sign the receipt object minus the signature field (the APS gateway receipts in the <xref target="SCOPEBLIND"/> corpus, per <xref target="audit-pack"/>); the top-level <tt>anchors</tt> key distinguishes this profile's receipts per the interoperability note of <xref target="hash-chain"/>. A scope-derived verification failure MUST be reported distinctly from an integrity failure under the correct scope: retrying the alternate scope on failure converts a format mismatch into an apparent integrity result, concealing both the wrong-format case and the tampered case from the consumer of the verification report.</t>
      </section>
      <section anchor="chain-availability"><name>Chain Availability Under Single-Linear Per-Agent Serialization</name>
        <t>This section is informative. The single-linear per-agent chain requirement of <xref target="hash-chain"/> serializes receipt emission for a given <tt>issuer_id</tt> through a single predecessor pointer. A denial-of-service against the predecessor pointer (database row lock contention, network partition between the emitter and the predecessor store, slow IO, or an adversary deliberately holding the chain-tail lock) therefore bounds the per-agent emission throughput, because every new receipt MUST resolve the digest of the immediately prior receipt before it can be linked. A partial-write failure between predecessor-pointer commit and signature commit can additionally produce chain-head ambiguity if not handled defensively.</t>
        <t>Issuers SHOULD use a bounded predecessor-lookup timeout (operator-tuned, typically on the order of seconds rather than tens of seconds) and SHOULD emit a structured audit event with type <tt>protectmcp:lifecycle</tt> and a stable <tt>reason</tt> code (RECOMMENDED: <tt>chain_emission_blocked</tt>) when the timeout fires, rather than silently dropping the receipt or stalling caller threads. Issuers SHOULD additionally document a chain-head recovery procedure for crashed emitters: on restart, the issuer re-reads the predecessor row, verifies that no orphan signature exists for the next sequence position, and resumes emission. Operators that require parallel per-issuer throughput beyond what a single linear chain sustains MUST use distinct <tt>issuer_id</tt> values per parallel path, with separate signing keys and chains rooted at the all-zero genesis value, per the rule in <xref target="hash-chain"/>.</t>
        <t>The threat profile here is availability, not confidentiality or integrity: a successful chain-availability attack delays or drops emission, but it cannot tamper with already-emitted receipts (those are protected by <xref target="tamper"/>) and it cannot forge receipts (those are protected by <xref target="key-compromise"/>). The <tt>chain_emission_blocked</tt> lifecycle receipt is itself a Compliance Receipt and therefore links into the chain once emission resumes, so the gap is detectable rather than silent.</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 <tt>issued_at</tt>. Where the Deployer publishes its verification keys through a well-known JWK Set endpoint, a revoked key remains published and its entry carries a <tt>revoked_at</tt> timestamp, so that a verifier can pass a receipt issued before that instant and fail one issued at or after it.</t>
      </section>
      <section anchor="long-term"><name>Retention and Long-Term Verifiability</name>
        <t>The longest fixed retention floor in this profile is 2192 days (six calendar years), set by <xref target="hipaa"/> and <xref target="sec"/>; the EU side has a parallel five-year (1827-day) floor under <xref target="dora-17"/>. The CIRCIA preservation floor of <xref target="circia-retention"/> is not measured from the date of the underlying Action: it runs forward from the submission of the most recently required CIRCIA report, so the effective retention period of a receipt referenced in such a report can extend beyond the 2192-day fixed floor. These floors exceed the typical operational crypto-period of a signing key under recommended key-management practice. Implementations SHOULD use ML-DSA-65 from the <xref target="ACTA-RECEIPTS"/> algorithm registry (<xref target="FIPS204"/>) for receipts 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 <tt>risk_class</tt> and <tt>incident_class</tt> 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 <tt>payload_digest</tt> 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 (including but not limited to the General Data Protection Regulation for EU data subjects, the California Consumer Privacy Act and Virginia Consumer Data Protection Act for the corresponding US states, and the HIPAA Privacy Rule where electronic protected health information is involved). 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>
              <t>No field defined or registered by this profile carries a network, hardware, or physical-location identifier. A signed payload or extension field MUST NOT include an IP address, a hostname, a hardware or machine identifier, or a geolocation value in cleartext. Where a deployment needs to bind a receipt to such environment facts, it conveys them as a keyed digest per <xref target="verdict-vocabulary"/> (<tt>hash_algo</tt> = <tt>hmac-sha256</tt> under a holder salt) or through the boolean claims of <xref target="environment-attestation"/>, which by construction carry no identifier. The unkeyed <tt>sha256</tt> form MUST NOT be used for such values: a low-entropy identifier (a region name, a hostname, an address block) is dictionary-recoverable from an unkeyed digest and linkable across every receipt that repeats it. Destruction of the holder salt renders a keyed digest permanently unopenable and composes with the payload-deletion rule of the preceding paragraph as the erasure mechanism for environment data.</t>
      </section>
      <section anchor="anchor-trust"><name>Anchor Trust</name>
        <t>The trust assumptions of an anchor depend on the anchor <tt>type</tt>. <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 <tt>action_ref</tt>. Replay of a Compliance Receipt against a different Action is detectable by <tt>action_ref</tt> mismatch. The 300-second <tt>issued_at</tt> skew bound of <xref target="issued-at"/> bounds only future skew: it rejects receipts dated ahead of the verifier's clock and places no lower bound on past skew, so it does not by itself bound the window in which a replayed receipt can be presented as recent. Clock-based replay bounding is available only through the OPTIONAL validity-window fields of <xref target="result-bound"/>: <tt>expires_at</tt>, which the verifier enforces against replayed decisions, and <tt>nonce</tt>, which flags duplicate emission where the verifier maintains a seen-nonce index. A receipt carrying neither is bounded only by retention: a replayed receipt whose <tt>issued_at</tt> lies within the applicable retention window passes the skew check of <xref target="issued-at"/>, and its replay is detectable only through <tt>action_ref</tt>, chain-link, or index evidence.</t>
        <t>Where the verifier supports it, two receipts sharing <tt>action_ref</tt> and <tt>issuer_id</tt> SHOULD be flagged as a candidate duplicate-emission event for human review. This profile does not require verifiers to maintain a cross-receipt index; deployers needing duplicate-emission detection should arrange it at the Audit Pack production layer.</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 <tt>issued_at</tt>, not the registry in force at the time of verification, provided that the signing key was not revoked.</t>
      </section>
      <section anchor="issuer-misrep"><name>Issuer-Misrepresentation Residual</name>
        <t>Per-agent hash chains under <xref target="hash-chain"/> detect tampering inside a single issuer's stream but not the cross-agent attack in which a compromised intermediary silently swaps payload bytes between two honest agents. Both per-agent chains validate; <tt>action_ref</tt> is a correlation anchor, not a cryptographic binding (<xref target="ACTA-RECEIPTS"/> Section 2.2). Without a cross-agent binding primitive, a regulator obtains no cryptographic answer to "did the acknowledging agent acknowledge the bytes the originating agent actually sent". This profile defines <tt>counterparty_binding</tt> (<xref target="counterparty-binding"/>) as the partial mitigation; the following residuals remain.</t>
        <ul>
          <li>Endpoint collusion. If both signing keys are compromised by the same attacker, the attacker produces a coordinated forgery; no signature scheme defends against this case.</li>
          <li>Intermediary holds the originating agent's key. In hosted-agent deployments where the intermediary possesses the originating agent's private key, it can sign anything as either party. Remote attestation of key origin is the appropriate countermeasure and is out of scope here.</li>
          <li>Originator offline at verification time. <xref target="counterparty-binding-verifier"/> requires the originating envelope to be retrievable; if unpublished, offline, or rate-limited, the binding becomes unverifiable (liveness loss, observable as failure).</li>
          <li>Fan-out witness gap. When an originator broadcasts to N acknowledgers, each emits an independent pairwise binding; none witnesses any other. Append-only log profiles (future SCITT-style transparency) are deferred to a later revision.</li>
          <li>Key rotation orphan. If the originating agent rotates keys after emission but before an acknowledger binds it, the storage obligation of <xref target="counterparty-binding-verifier"/> still requires the old envelope to remain retrievable; if retention discipline fails, the binding orphans.</li>
          <li>Privacy of envelope hashes. <tt>envelope_hash</tt> is computed over the full signed bytes including A's signature; an observer of B's receipt learns a stable identifier for A's exact action and therefore can correlate B's behaviour across receipts even when A's payload is otherwise confidential. Where this correlation is unacceptable, a commitment scheme (for example, HMAC over the envelope with a per-counterparty key disclosed only to the verifier) is appropriate; this profile does not specify one.</li>
          <li>Real-time prevention. <tt>counterparty_binding</tt> is detective, not preventive: B has already accepted the bytes by the time the binding is signed. Verifiers detect tampering only at audit time; the in-flight bytes were not blocked. Where prevention is required, transport-level integrity per <xref target="trust-boundary"/> is the appropriate primitive in addition to (not instead of) this profile.</li>
          <li>Payload-content semantics. The binding proves byte equality, not semantic equality. An intermediary that re-encodes A's bytes into a different but JCS-equivalent canonical form is detected (the SHA-256 differs); an intermediary that swaps A's bytes for entirely different bytes that B's policy happens to interpret as semantically equivalent is detected too. But an intermediary that swaps A's bytes for an A-signed REPLAY of a prior valid envelope from A is not detected by this binding alone; replay protection requires that the verifier also check <tt>action_ref</tt> and <tt>previousReceiptHash</tt> uniqueness within the chain segment.</li>
        </ul>
      </section>
      <section anchor="trust-boundary"><name>Cross-Agent Integrity Trust Boundary</name>
        <t>This section is informative. It records operator guidance for cases where channel-level protection is the only available defence and <tt>counterparty_binding</tt> per <xref target="counterparty-binding"/> has not yet been adopted by both endpoints. For channels between named principals, implementers should secure the channel using mutually authenticated TLS 1.3 per <xref target="RFC9846"/>; may use the tls-exporter channel binding per <xref target="RFC9266"/> derived via <xref target="RFC5705"/> where higher channel uniqueness is required; and may layer HTTP Message Signatures per <xref target="RFC9421"/> where intermediaries perform legitimate transformations.</t>
        <t>Operators must not interpret transport-layer security alone as evidence of cross-agent byte equality. Only <tt>counterparty_binding</tt> produces application-layer, signed, replay-after-the-fact evidence answering that question. Topologies where the intermediary terminates TLS (CDN edges, MCP servers, message buses, orchestrators) defeat transport-layer integrity against the threat case of <xref target="issuer-misrep"/>; in those topologies <tt>counterparty_binding</tt> is the only defence this profile offers, and the absence of channel-binding evidence in the Audit Pack should be documented as a known residual.</t>
      </section>
      <section anchor="compromised-intermediary"><name>Compromised Intermediary Between Two Honest Endpoints</name>
        <t>This section is informative. Where an Action travels from a sending agent A to a receiving agent B through one or more intermediary processes M, and where M is compromised in such a way that M presents byte sequence X to A and a different byte sequence X' to B, neither A's nor B's cryptographic signature detects the divergence in isolation: each endpoint signs the bytes it observed, and each endpoint's per-agent hash chain per <xref target="hash-chain"/> remains internally valid. Absent the <tt>counterparty_binding</tt> primitive this profile introduces, the only available cross-agent primitive is <tt>action_ref</tt> as a SHA-256 join key per <xref target="action-ref"/>; both A's chain and B's chain remain valid in isolation, and divergence is only recoverable through a regulator-driven post-hoc comparison of the two chains.</t>
        <t><tt>counterparty_binding</tt> introduced in <xref target="counterparty-binding"/> closes the case where M silently swaps bytes between two honest endpoints A and B. An acknowledging receipt under this binding is required to carry an <tt>envelope_hash</tt> computed over the exact byte stream B received (SHA-256(A's envelope) under the digest-scope rule of <xref target="counterparty-binding-wire"/>), as specified normatively in <xref target="counterparty-binding-wire"/>. A verifier resolves <tt>receipt_ref</tt> to A's stored envelope, recomputes the digest, and compares; a mismatch indicates that the bytes B signed are not the bytes A signed, and the acknowledging receipt is reported non-conformant per <xref target="counterparty-binding-verifier"/>. The binding is detective rather than preventive: it does not stop M from performing the swap in flight, but it produces signed, replay-after-the-fact evidence that the swap occurred.</t>
        <t>The following residuals remain and are not closed by <tt>counterparty_binding</tt> alone. The list is intentionally honest about the audit-time, not sign-time, nature of the detective evidence: a verifier resolves <tt>receipt_ref</tt> to A's retained envelope and recomputes the digest at audit time, so any residual reasoning that depends on "A is not in the loop at sign time" is rhetorical, not load-bearing.</t>
        <ul>
          <li>Collusion of M and B. If M and B are jointly compromised, M swaps the bytes in flight and B issues an acknowledging receipt carrying an <tt>envelope_hash</tt> computed over the altered bytes that B signs as if they were A's. Under <tt>counterparty_binding</tt> the audit-time verifier resolves <tt>receipt_ref</tt> to A's retained envelope and recomputes the digest, so the binding is reported non-conformant when A's storage is honest and reachable; M+B collusion alone does NOT silently succeed. M+B collusion silently succeeds only when the collusion ALSO extends to corrupting A's retained envelope, suppressing A's chain segment, or making A's storage unreachable to the auditor; that is, the true residual is M+B+(A's-storage compromise or unavailability). Operator mitigation: anchor A's chain on independent witnesses (combined <xref target="RFC3161"/> + <xref target="OPENTIMESTAMPS"/> anchors per <xref target="anchoring"/>, and OPTIONAL deployer-operated transparency logs) so that A's anchored chain-segment digests are independently recoverable from public evidence; regulator-side comparison of A's anchored chain against B's stored chain detects the divergence even when A's local storage is impeached.</li>
          <li>Collusion of M and A. If M and A are jointly compromised, A signs a fabricated envelope at M's direction and M relays it to B; B verifies M's relay normally, B's <tt>counterparty_binding</tt> correctly digests the bytes A signed, A's per-agent chain validates, and B's per-agent chain validates. Every cryptographic invariant in this profile holds because the binding correctly attests that the bytes B received were the bytes A signed; the fraud is in A's intent, not in any byte mismatch. This residual is fundamentally outside the receipt model's threat surface: no application-layer cryptographic primitive in this profile distinguishes a fraudulent A-signed envelope from an honest A-signed envelope when M is also colluding to corroborate plausibility (relay logs, timestamping, message ordering). Operator mitigation: separation of duties between issuer (A) and intermediary (M) so that the same operator cannot control both signing keys and relay logs; anchor evidence on independent witnesses under different trust roots so that an attacker controlling A and M still cannot retroactively coordinate anchor inclusion across uncolluding timestamping authorities; out-of-band attestation by the regulator or auditor of A's operational context (provenance, code signing, runtime attestation) where the policy regime authorises it.</li>
          <li>Compromise of B itself. A B that has been compromised (private key extraction, supply-chain compromise, or insider operation) can sign any <tt>envelope_hash</tt> the attacker chooses; <tt>counterparty_binding</tt> proves only that the signing key acknowledged some bytes, not that those bytes match what an honest B would have observed.</li>
          <li>Loss of A's stored envelope. <tt>counterparty_binding</tt> requires the verifier to resolve <tt>receipt_ref</tt> to A's full signed envelope; if A's chain segment is unavailable (retention discipline failure, key rotation orphan, deliberate withholding), the binding becomes unverifiable and the receipt is reported non-conformant on liveness grounds rather than on byte-equality grounds. An adversary who can arrange A-envelope unavailability and then re-emit colluding bytes can degrade the binding from a byte-equality check to a liveness-loss flag.</li>
        </ul>
        <t>Operators concerned about these residuals in the absence of single-point cryptographic defence should:</t>
        <ul>
          <li>Anchor receipts to multiple independent witnesses. Where both <xref target="RFC3161"/> and <xref target="OPENTIMESTAMPS"/> anchors are present per <xref target="anchoring"/>, a coordinated M-B collusion attack must also induce both timestamping authorities to anchor the colluding bytes within the operator's anchor interval, raising the conjunction-cost of the attack. Operators may add further anchors (e.g. a Deployer-operated transparency log or a witness service) without changing the wire format defined here.</li>
          <li>Use side-by-side chain comparison under regulator subpoena. The audit-trail alternative semantics established for SEC 17a-4 recordkeeping (see <xref target="sec-17a-4-f"/>) and the post-market surveillance regime of EU AI Act Articles 12 and 26 (see <xref target="article-12"/> and <xref target="article-26"/>) authorise the regulator to compel both A's and B's Audit Packs and to reconstruct the relay by joining on <tt>action_ref</tt> per <xref target="action-ref"/>. <tt>counterparty_binding</tt> reduces the regulator's workload from "compare both chains and detect divergence" to "verify B's bound digest against A's stored envelope"; the underlying subpoena-and-compare workflow remains the regulator's ultimate authority and remains operative when the binding is unverifiable.</li>
          <li>Document M's relay logs out-of-band. Where the intermediary M is identifiable (a named MCP server, message bus, orchestrator, or relay), the operator should require M to produce signed relay logs covering the time window of the Action and should submit those logs to the same Audit Pack production layer as A's and B's chains. Out-of-band relay logs do not require a wire-format change in this profile; they are operational evidence that complements <tt>counterparty_binding</tt> rather than replacing it.</li>
        </ul>
        <t>The worst-case latency to detection for an M-only compromise (not M-B collusion) is bounded by the anchor interval recommended in <xref target="tamper"/>: 24 hours by default, one hour for Deployers operating under <xref target="DORA"/> Article 17, 23 NYCRR 500.17, or <xref target="CIRCIA"/>. After the next anchor commits, the divergence between A's anchored chain segment and the digest carried in B's <tt>counterparty_binding</tt> is permanently recoverable from the anchored evidence alone, without trust in M.</t>
      </section>
      <section anchor="receipt-limits"><name>What a Compliance Receipt Does Not Prove</name>
        <t>The preceding subsections state the residual attacks case by case. This subsection consolidates the limits of the artefact itself, so that a regulator or auditor appraising a Compliance Receipt does not credit it with guarantees the format does not provide. A Compliance Receipt, even one that passes every check of <xref target="mandatory-checks"/>, does not prove any of the following.</t>
        <ul>
          <li>That the Action was executed, completed, or produced any outcome. The receipt answers the single question of <xref target="canonicalization-scope"/>: whether the same canonicalized bytes passed through the named agent at the wall-clock time the anchors fix. It records a policy decision and the bytes that passed through; nothing about the effects of the Action.</li>
          <li>That two byte sequences are semantically equivalent under a downstream tool. The chain layer guarantees byte equality only; keyword case folding, path normalization, Unicode normalization, and numeric tolerance are out of scope per <xref target="canonicalization-scope"/>.</li>
          <li>That the policy was correct, lawful, or complete. <tt>policy_digest</tt> proves only that the named policy artefact existed and was retained (<xref target="policy-digest"/>); the content of the policy is the Deployer's responsibility.</li>
          <li>That the execution environment that produced the Action was intact. This profile occupies the use-time verification position and appraises no environment evidence (the role vocabulary of <xref target="relationship"/>); no field defined by this profile carries a remote attestation result (<xref target="enforcement-attestation"/>).</li>
          <li>That the issuer is the entity it claims to be, beyond the signature. <tt>issuer_id</tt> is treated as opaque on verification and identifier resolution is out of scope per <xref target="issuer-id"/>; the identifier's trust rests entirely on the Audit Pack trust-anchor metadata.</li>
          <li>That the signing key remained uncompromised, or that the endpoints did not collude. Signature validity is bounded by the revocation discipline of <xref target="key-compromise"/>, and the collusion and key-compromise residuals are stated in <xref target="issuer-misrep"/> and <xref target="compromised-intermediary"/>.</li>
          <li>That a declared constraint was enforced at runtime. <tt>expires_at</tt> is declared, not enforced, against the receipt itself (<xref target="result-bound"/>); the producer-asserted extension fields of <xref target="threat-framework"/>, <xref target="risk-acceptance"/>, and <xref target="code-authorship"/> prove only that the producer asserted them at <tt>issued_at</tt>; and a voluntary-tier attestation is not a capture and is not unbypassable (<xref target="honest-tiering"/>).</li>
          <li>That the Action was prevented in real time. The receipt is detective, audit-time evidence; it does not block in-flight bytes (<xref target="issuer-misrep"/>).</li>
          <li>That the artefact is tamper-proof. It is tamper-evident: modification of signed bytes, removal of a chain member, or re-signing of history is detectable by the recomputation of <xref target="mandatory-checks"/> under the chain and anchor discipline of <xref target="tamper"/>, but the format exposes tampering rather than preventing it; prevention is a property of key custody, anchor cadence, and the emitter's operational controls.</li>
          <li>That the receipt is neutral third-party attestation. Every field is producer-asserted and the signature is producer-side, except where a Deployer operates an unaffiliated signer - a deployment property the format supports but cannot enforce (<xref target="issuer-misrep"/>). Where the producer signs its own receipt, the receipt proves what the producer committed to, not what an independent party witnessed.</li>
          <li>That the Action's underlying transaction was delivered, settled, or otherwise brought to commercial finality. The receipt records the policy decision and the bytes that passed through; delivery, settlement, and payment finality are out of scope, and where a receipt is cited in a settlement context alongside a payment-gate format such as <xref target="DRAFT-HOPLEY-X402"/>, it contributes only the action-side evidence.</li>
          <li>That every Action produced a receipt. A chain that passes every mandatory check of <xref target="mandatory-checks"/> proves only that the receipts it contains are unaltered and correctly linked; it is silent about an Action for which no receipt was ever minted. Selective omission is therefore invisible to chain integrity: an omitted Action leaves the chain verifying exactly as it would if the Action had never occurred, and a truncated tail is itself a valid chain, because links carry no sequence number and the anchors of <xref target="anchoring"/> fix the presented receipts in time without revealing that later ones were withheld. Completeness comes from deployment, not from the format. Fail-closed capture (<xref target="honest-tiering"/>) refuses the Action when no receipt can be minted, and an Acceptor (<xref target="conventions"/>) refuses to act on an Action that arrives without a verifiable receipt. The issuer evidences the gaps it can itself observe: a signer outage through <tt>unsigned_gap</tt> (<xref target="unsigned-gap"/>), and a blocked emission through the <tt>chain_emission_blocked</tt> lifecycle receipt (<xref target="chain-availability"/>). Independent custody of later receipts, whether by a counterparty whose <tt>counterparty_binding</tt> (<xref target="counterparty-binding"/>) digests them, by the Acceptor that gated on them, or by the holder of an Audit Pack (<xref target="audit-pack"/>) covering them, turns a truncated tail from invisible into contradicted. <xref target="ASQAV-SDK"/> carries these cases as conformance vectors (<tt>asqav-14-omitted-action-chain</tt>, <tt>asqav-15-unsigned-gap</tt>, and <tt>asqav-16-chain-emission-blocked</tt>); all three verify, the first because the chain cannot see the omission and the other two because the gap travels inside a conformant receipt.</li>
        </ul>
      </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>This registry covers both signed-payload fields and envelope-level fields (siblings of <tt>payload</tt> and <tt>signature</tt>), as well as declarations that govern signing but never appear on the wire; each entry's Scope value identifies which.</t>
        <t>Each entry contains:</t>
        <ul>
          <li>Field Name: a JSON object key, lowercase ASCII letters, digits, and underscore.</li>
          <li>Scope: one of <tt>signed-payload</tt>, <tt>envelope-level</tt>, or <tt>signing-time declaration</tt>, disambiguating fields inside the signed payload from envelope-level fields and from declarations that are not wire members.</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>
          <li>Change Controller: the party authorized to request changes to the entry; the Change Controller for all initial entries is the IETF.</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><tt>risk_class</tt> - Scope: signed-payload - Risk classification term under the Deployer's risk management documentation; defined in <xref target="extension-fields"/> - This document - Vocabulary referenced in Audit Pack metadata.</li>
          <li><tt>incident_class</tt> - Scope: signed-payload - Incident classification term spanning DORA Article 18(1) (with further specification in <xref target="REG-2024-1772"/> and the canonical reporting enumeration of Annex II field 3.23 of <xref target="REG-2025-302"/>), 23 NYCRR 500.1 Cybersecurity Event/Incident, <xref target="CIRCIA"/> Covered Cyber Incident, and HIPAA security incident under 45 CFR 164.304; defined in <xref target="extension-fields"/> - This document - Audit Pack metadata.</li>
          <li><tt>counterparty_binding</tt> - Scope: signed-payload - Signed-payload object carrying a base64-encoded SHA-256 digest (<tt>envelope_hash</tt>) of a peer agent's full signed envelope including signature bytes, a resolvable opaque locator (<tt>receipt_ref</tt>), an optional expected-acknowledger identifier (<tt>expect_ack_from</tt>), and an optional operational <tt>transport_label</tt>; see <xref target="counterparty-binding"/> for the full member set and the digest-scope rule - This document - Member vocabulary defined in <xref target="counterparty-binding-wire"/>; digest algorithm is SHA-256 per <xref target="ACTA-RECEIPTS"/> with base64 encoding per <xref target="RFC4648"/>.</li>
          <li><tt>result_digest</tt> - Scope: signed-payload - Object of the upstream <tt>payload_digest</tt> shape (<tt>hash</tt>, <tt>size</tt>, optional <tt>preview</tt>) carrying a SHA-256 digest of the downstream Action's result body; defined in <xref target="result-bound"/> - This document - Digest algorithm is SHA-256 with hex encoding under the <tt>sha256:&lt;64 hex&gt;</tt> form.</li>
          <li><tt>expires_at</tt> - Scope: signed-payload - ISO 8601 timestamp with explicit timezone declaring the wall-clock time after which the producing system considers the decision result stale and not safe to replay; declared, not enforced, against the receipt itself (the receipt record never expires); defined in <xref target="result-bound"/> - This document - Free-form ISO 8601 string.</li>
          <li><tt>nonce</tt> - Scope: signed-payload - Producer-generated string unique across the producer's emission stream for the lifetime of <tt>kid</tt>; defined in <xref target="result-bound"/> - This document - Any unique string; the lowercase hexadecimal encoding of 12 random bytes (24 hexadecimal characters) is the recommended form.</li>
          <li><tt>hash_algo</tt> - Scope: signed-payload - Member of the payload recording how the receipt's context digest was produced; <tt>sha256</tt> denotes an unkeyed SHA-256 digest and <tt>hmac-sha256</tt> an HMAC-SHA256 keyed digest under a holder salt; the digest string keeps the <tt>sha256:&lt;64 hex&gt;</tt> wire form in both cases; defined in <xref target="verdict-vocabulary"/> - This document - Value vocabulary {<tt>sha256</tt>, <tt>hmac-sha256</tt>} per <xref target="verdict-vocabulary"/>.</li>
          <li><tt>tool_fingerprint</tt> - Scope: signed-payload - JSON string of 32 lowercase hex characters carrying the truncated (first 128 bits) SHA-256 digest of the JCS-canonical (<xref target="RFC8785"/>) serialization of the JSON object <tt>{"tool_name": &lt;tool name&gt;, "schema": &lt;declared input schema&gt;}</tt>; defined in <xref target="result-bound"/> - This document - Digest algorithm is SHA-256 over <xref target="RFC8785"/> canonical bytes, truncated to its first 32 hexadecimal characters.</li>
          <li><tt>config_manifest_digest</tt> - Scope: signed-payload - JSON string formatted <tt>sha256:&lt;64 hex&gt;</tt> over the canonical bytes of the producer's configuration manifest in effect at signing time; defined in <xref target="result-bound"/> - This document - Manifest content is operator-defined; canonicalization rule is operator-declared in the Audit Pack manifest entry.</li>
          <li><tt>cve_inventory_digest</tt> - Scope: signed-payload - JSON string formatted <tt>sha256:&lt;64 hex&gt;</tt> over the canonical bytes of the producer's CVE inventory at signing time; defined in <xref target="result-bound"/> - This document - Inventory content lists CVE identifiers per the producer's accepted-residual rationale.</li>
          <li><tt>executable_hash</tt> - Scope: signed-payload - JSON string formatted <tt>sha256:&lt;64 hex&gt;</tt> over the canonical bytes of the executable that invoked the Action (OCI image manifest digest for container producers, on-disk SHA-256 for non-container executables); defined in <xref target="build-provenance"/> - This document - Digest algorithm is SHA-256.</li>
          <li><tt>sbom_digest</tt> - Scope: signed-payload - JSON string formatted <tt>sha256:&lt;64 hex&gt;</tt> over the canonical bytes of the CycloneDX or SPDX SBOM document covering the executing image; defined in <xref target="build-provenance"/> - This document - SBOM format and version declared in the Audit Pack manifest entry.</li>
          <li><tt>slsa_provenance_pointer</tt> - Scope: signed-payload - JSON string carrying an https URL resolving to the SLSA provenance attestation envelope for the build of the executable identified by <tt>executable_hash</tt>; defined in <xref target="build-provenance"/> - This document - Target should be the SLSA Provenance v1.0 in-toto statement form.</li>
          <li><tt>supply_chain_pointer</tt> - Scope: signed-payload - JSON string carrying an https URL resolving to a transparency-log entry (in-toto, Sigstore, or Rekor) covering the build of the executable identified by <tt>executable_hash</tt>; defined in <xref target="build-provenance"/> - This document - Verifier acceptance is recommended across the three log formats.</li>
          <li><tt>anchors</tt> - Scope: envelope-level - Envelope-level array of timestamping anchors covering the signed envelope; entries carry a required <tt>type</tt> discriminator (<tt>rfc3161</tt> or <tt>opentimestamps</tt>; transparency-log pointers are not anchor types) and a required <tt>value</tt> field, plus optional informational members <tt>status</tt> (<tt>anchored</tt> / <tt>pending</tt> / <tt>failed</tt>) and <tt>anchor_block_hash</tt> (string Bitcoin block hash for upgraded OpenTimestamps entries); full schema is defined in <xref target="anchoring"/> - This document - Anchor type vocabulary: <tt>rfc3161</tt> per <xref target="RFC3161"/>, <tt>opentimestamps</tt> per <xref target="OPENTIMESTAMPS"/>.</li>
          <li><tt>witness_policy</tt> - Scope: signing-time declaration (not a wire member) - Declaration the producer gives the issuing platform with the signing request, declaring an N-of-M durable-anchoring quorum over the receipt's <tt>anchors</tt> array; carries a required integer <tt>required</tt> in the closed range [1, length of <tt>witnesses</tt>] and a required non-empty array <tt>witnesses</tt> whose distinct values are a subset of {<tt>rfc3161</tt>, <tt>opentimestamps</tt>} (Rekor and other transparency-log pointers are not witness types and are rejected). The receipt reaches the quorum-met state only when at least <tt>required</tt> distinct witness types each hold a verifiable inclusion proof; a producer must not assert durable anchoring unless that holds, per the false-attestation rule of <xref target="anchoring"/>; defined in <xref target="anchoring"/> - This document - Witness type vocabulary: <tt>rfc3161</tt> per <xref target="RFC3161"/>, <tt>opentimestamps</tt> per <xref target="OPENTIMESTAMPS"/>; inclusion-proof prior art per <xref target="RFC9943"/> and <xref target="RFC9162"/>.</li>
          <li><tt>mitre_techniques</tt> - Scope: signed-payload - JSON array of MITRE ATT&amp;CK technique identifiers (for example <tt>T1059</tt>, <tt>T1078</tt>) self-declared by the producer; not verifier-checked by the issuing platform; flips <tt>framework_mappings_self_declared</tt> to <tt>true</tt> when populated; defined in <xref target="threat-framework"/> - This document - Vocabulary referenced by id from the MITRE ATT&amp;CK enterprise matrix.</li>
          <li><tt>mitre_atlas</tt> - Scope: signed-payload - JSON array of MITRE ATLAS identifiers (for example <tt>AML.T0051</tt>) covering AI-system-specific adversary techniques; self-declared; flips <tt>framework_mappings_self_declared</tt> to <tt>true</tt> when populated; defined in <xref target="threat-framework"/> - This document - Vocabulary referenced by id from the MITRE ATLAS catalogue.</li>
          <li><tt>owasp_llm_top10</tt> - Scope: signed-payload - JSON array of OWASP Top 10 for LLM Applications identifiers (for example <tt>LLM01</tt>, <tt>LLM02</tt>); self-declared; flips <tt>framework_mappings_self_declared</tt> to <tt>true</tt> when populated; defined in <xref target="threat-framework"/> - This document - Vocabulary referenced by id from the OWASP Top 10 for LLM Applications publication.</li>
          <li><tt>nist_ai_rmf</tt> - Scope: signed-payload - JSON array of NIST AI Risk Management Framework function identifiers and subcategories (for example <tt>GOVERN-1.1</tt>, <tt>MEASURE-2.7</tt>); self-declared; flips <tt>framework_mappings_self_declared</tt> to <tt>true</tt> when populated; defined in <xref target="threat-framework"/> - This document - Vocabulary referenced from NIST AI RMF 1.0.</li>
          <li><tt>iso_42001</tt> - Scope: signed-payload - JSON array of ISO/IEC 42001:2023 control identifiers (for example <tt>A.6.2.6</tt>); self-declared; flips <tt>framework_mappings_self_declared</tt> to <tt>true</tt> when populated; defined in <xref target="threat-framework"/> - This document - Vocabulary referenced from ISO/IEC 42001:2023.</li>
          <li><tt>eu_ai_act_articles</tt> - Scope: signed-payload - JSON array of EU AI Act article identifiers (for example <tt>Article-12</tt>, <tt>Article-15</tt>); self-declared; flips <tt>framework_mappings_self_declared</tt> to <tt>true</tt> when populated; defined in <xref target="threat-framework"/> - This document - Vocabulary referenced from <xref target="EU-AI-ACT"/>.</li>
          <li><tt>rfc3161_timestamp</tt> - Scope: signed-payload - JSON string carrying a base64-encoded RFC 3161 TimeStampResp (DER) supplied by the producer at signing time and preserved verbatim on the receipt for offline TSA chain verification independent of any platform-issued anchors; payload entry is an opaque caller-supplied token, not the per-receipt anchor produced by the platform; defined in <xref target="threat-framework"/> - This document - Bytes are an RFC 3161 TimeStampResp per <xref target="RFC3161"/>; base64 encoding per <xref target="RFC4648"/>.</li>
          <li><tt>framework_mappings_self_declared</tt> - Scope: signed-payload - JSON boolean false-attestation guard set by the issuing platform to <tt>true</tt> whenever any of <tt>mitre_techniques</tt>, <tt>mitre_atlas</tt>, <tt>owasp_llm_top10</tt>, <tt>nist_ai_rmf</tt>, <tt>iso_42001</tt>, or <tt>eu_ai_act_articles</tt> is populated; a producer-supplied value of <tt>false</tt> alongside a populated taxonomy field is overridden by the issuing platform; defined in <xref target="threat-framework"/> - This document - Boolean.</li>
          <li><tt>authorized_under_mandate</tt> - Scope: signed-payload - Server-built object recording a self-declared authorizing mandate the Action was signed under; carries required <tt>mandate_id</tt>, required <tt>issuer_id</tt>, a required <tt>scope_digest</tt> formatted <tt>sha256:&lt;64 hex&gt;</tt> over the mandate's authorized-action-types scope, and a required <tt>verified</tt> boolean whose only conformant value is <tt>true</tt>, asserting self-declared issuer authority (the same trust level as <tt>framework_mappings_self_declared</tt>, never issuing-platform-verified third-party authorization); a present-but-malformed object, including one carrying <tt>verified</tt>=<tt>false</tt>, is rejected at signing time by the <tt>false_mandate_attestation_guard</tt>; defined in <xref target="enforcement-attestation"/> - This document - Member vocabulary defined in <xref target="enforcement-attestation"/>; <tt>scope_digest</tt> digest algorithm is SHA-256.</li>
          <li><tt>controls_evaluated</tt> - Scope: signed-payload - Server-built object enumerating the enforcement controls that genuinely fired on this sign plus the allow result; member keys are a closed set (<tt>emergency_halt</tt>, <tt>delegation_scope</tt>, <tt>quorum</tt>, <tt>mandate</tt>, <tt>policy</tt>, <tt>content_scan</tt>, <tt>result</tt>) and an unknown key is rejected; a key is present only when its control ran (omission-over-false attestation), <tt>quorum</tt> requires <tt>fired</tt>=<tt>true</tt> plus a 64-hex <tt>attestation_hash</tt>, and a <tt>policy</tt> member asserting evaluation requires <tt>matched_count</tt> at least 1; a caller-supplied value is dropped before signing (the <tt>false_control_attestation_guard</tt>); defined in <xref target="enforcement-attestation"/> - This document - Control-key vocabulary defined in <xref target="enforcement-attestation"/>.</li>
          <li><tt>approver_id</tt> - Scope: signed-payload - Producer-asserted identity (bare <tt>kid</tt> or <tt>issuer_id</tt>) that authored a risk acceptance on a <tt>protectmcp:lifecycle:risk_acceptance</tt> receipt; a FIELD bound into the signed bytes with NO authority check, NO authentication, and NO identity resolution performed by the issuing platform, only the <tt>compliance_mode</tt> string-equality refusal against <tt>initiator_id</tt> (the <tt>risk_acceptance_self_approval_guard</tt>); required on the receipt type and enforced by the <tt>risk_acceptance_missing_required_field</tt> false-attestation guard; defined in <xref target="risk-acceptance"/> - This document - Bare-identifier form per <xref target="issuer-id"/>.</li>
          <li><tt>initiator_id</tt> - Scope: signed-payload - Producer-asserted identity (bare <tt>kid</tt> or <tt>issuer_id</tt>) that requested the acceptance; a FIELD bound into the signed bytes; under <tt>compliance_mode</tt> a value that string-equals <tt>approver_id</tt> is refused at signing time by the <tt>risk_acceptance_self_approval_guard</tt> (a string-incoherence check, not identity resolution; an absent field never fires it); defined in <xref target="risk-acceptance"/> - This document - Bare-identifier form per <xref target="issuer-id"/>.</li>
          <li><tt>acceptance_reason</tt> - Scope: signed-payload - Free-text producer rationale for accepting a risk; proves the rationale existed and was key-authored at <tt>issued_at</tt>, never parsed or scored; required on the risk-acceptance receipt type and enforced by the <tt>risk_acceptance_missing_required_field</tt> guard; defined in <xref target="risk-acceptance"/> - This document - Free-form string.</li>
          <li><tt>accepted_at</tt> - Scope: signed-payload - Producer-asserted ISO 8601 authoring time of the acceptance; self-declared, distinct from the platform-attested <tt>issued_at</tt> and <tt>anchors</tt> times; defined in <xref target="risk-acceptance"/> - This document - Free-form ISO 8601 string.</li>
          <li><tt>supersedes</tt> - Scope: signed-payload - Producer-asserted pointer (opaque receipt locator OR <tt>sha256:&lt;64 hex&gt;</tt>) to the prior risk-acceptance receipt this one replaces; proves the supersession claim existed at <tt>issued_at</tt>; the issuing platform NEVER invalidates the prior receipt (the chain of <xref target="hash-chain"/> is immutable, this is a forward pointer only); defined in <xref target="risk-acceptance"/> - This document - Opaque locator or <tt>sha256:&lt;64 hex&gt;</tt> digest.</li>
          <li><tt>sarif_digest</tt> - Scope: signed-payload - JSON string formatted <tt>sha256:&lt;64 hex&gt;</tt> over the producer-declared canonical bytes of the SARIF scan artifact the acceptance rested on; a SHAPE-ONLY existence proof that THAT artifact existed unaltered at <tt>issued_at</tt> and nothing more; the issuing platform NEVER parses, fetches, re-runs, or validates the scan; defined in <xref target="risk-acceptance"/> - This document - Digest algorithm is SHA-256; canonicalization rule declared in the Audit Pack manifest entry.</li>
          <li><tt>finding_ref</tt> - Scope: signed-payload - Producer-asserted opaque free-text pointer to a finding or rule id inside the SARIF artifact; proves the reference existed at <tt>issued_at</tt>, never resolved or validated; defined in <xref target="risk-acceptance"/> - This document - Free-form string.</li>
          <li><tt>approval_ref</tt> - Scope: signed-payload - Producer-asserted opaque free-text correlation pointer to a human-in-the-loop approval id or external ticket; proves the pointer existed at <tt>issued_at</tt>, never resolved or validated; defined in <xref target="risk-acceptance"/> - This document - Free-form string.</li>
          <li><tt>risk_snapshot</tt> - Scope: signed-payload - Object carrying a producer-asserted point-in-time snapshot of THIRD-PARTY risk signals (<tt>snapshot_at</tt>, <tt>snapshot_source</tt>, optional <tt>epss</tt>, <tt>cvss</tt>, <tt>cvss_vector</tt>, <tt>kev_listed</tt>, <tt>cve_ids</tt>); the issuing platform does NOT fetch, compute, verify, query, or vouch for these values, and the snapshot is explicitly NOT reproducible from any input the platform holds; numerics are strings (floats prohibited per <xref target="canonicalization-scope"/>) and <tt>snapshot_source</tt> is required whenever any of <tt>epss</tt>, <tt>cvss</tt>, <tt>cvss_vector</tt>, or <tt>kev_listed</tt> is populated (a populated signal without it is rejected at signing time by the <tt>risk_snapshot_numeric_requires_snapshot_source</tt> guard) so a value can never be read as a platform-derived or verified score; defined in <xref target="risk-acceptance"/> - This document - Third-party feed vocabulary named per-receipt in <tt>snapshot_source</tt>; the platform defines no controlled vocabulary for the signal values.</li>
          <li><tt>repo_ref</tt> - Scope: signed-payload - Producer-asserted opaque pointer to the repository a change was authored against, carried on a <tt>protectmcp:lifecycle:code_authorship</tt> receipt; required on the receipt type and enforced by the <tt>code_authorship_missing_required_field</tt> false-attestation guard; free-text, proves the reference existed at <tt>issued_at</tt>, never resolved, cloned, or validated by the issuing platform; defined in <xref target="code-authorship"/> - This document - Free-form string.</li>
          <li><tt>commit_sha</tt> - Scope: signed-payload - Producer-asserted commit identifier of the authored change; required on the receipt type and enforced by the <tt>code_authorship_missing_required_field</tt> false-attestation guard; bound into the signed bytes only, NEVER fetched or verified by the issuing platform, proves only that the producer asserted it at <tt>issued_at</tt>; defined in <xref target="code-authorship"/> - This document - Free-form string.</li>
          <li><tt>base_sha</tt> - Scope: signed-payload - Producer-asserted base commit identifier the change was authored on top of; bound into the signed bytes only, NEVER fetched or verified by the issuing platform; defined in <xref target="code-authorship"/> - This document - Free-form string.</li>
          <li><tt>change_digest</tt> - Scope: signed-payload - JSON string formatted <tt>sha256:&lt;64 hex&gt;</tt> over the producer-declared canonical bytes of the change; a SHAPE-ONLY existence proof that THAT change existed unaltered at <tt>issued_at</tt> and nothing more; the issuing platform NEVER fetches, re-diffs, or re-computes the change; a value outside the <tt>sha256:&lt;64 hex&gt;</tt> wire form is rejected at signing time by the <tt>change_digest_not_sha256_wire_form</tt> guard; defined in <xref target="code-authorship"/> - This document - Digest algorithm is SHA-256; canonicalization rule declared in the Audit Pack manifest entry.</li>
          <li><tt>change_ref</tt> - Scope: signed-payload - Producer-asserted opaque free-text pointer to the change as a unit (for example a pull-request id); proves the reference existed at <tt>issued_at</tt>, never resolved or validated; defined in <xref target="code-authorship"/> - This document - Free-form string.</li>
          <li><tt>change_approval_ref</tt> - Scope: signed-payload - Producer-asserted opaque free-text correlation pointer to a human-in-the-loop approval id or external review ticket for the change; proves the pointer existed at <tt>issued_at</tt>, never resolved or validated; defined in <xref target="code-authorship"/> - This document - Free-form string.</li>
          <li><tt>change_class</tt> - Scope: signed-payload - Producer-asserted class of the change drawn from the closed vocabulary <tt>read</tt>, <tt>write</tt>, <tt>delete</tt>, <tt>execute</tt>, <tt>deploy</tt>; self-declared, the issuing platform records but does NOT verify the change matches the class; a value outside the closed vocabulary is rejected at signing time as an out-of-vocabulary value; defined in <xref target="code-authorship"/> - This document - Closed vocabulary {<tt>read</tt>, <tt>write</tt>, <tt>delete</tt>, <tt>execute</tt>, <tt>deploy</tt>}.</li>
          <li><tt>authored_by</tt> - Scope: signed-payload - Object carrying a producer-asserted description of the authoring agent (<tt>agent_id</tt>, <tt>model_id</tt>, <tt>model_version</tt>, <tt>tool</tt>, <tt>attestation_source</tt>); the issuing platform does NOT verify the named model; <tt>attestation_source</tt> is required whenever <tt>model_id</tt> or <tt>model_version</tt> is populated (a populated model field without it is rejected at signing time by the <tt>authored_by_model_requires_attestation_source</tt> guard) so a model claim can never be read as a platform-verified attestation; defined in <xref target="code-authorship"/> - This document - Member vocabulary defined in <xref target="code-authorship"/>; the platform defines no controlled vocabulary for the member values.</li>
          <li><tt>unsigned_gap</tt> - Scope: signed-payload - Server-built object evidencing a signer outage that preceded this receipt: <tt>count</tt> (REQUIRED integer greater than or equal to 1, the number of Actions the issuer attempted to sign and could not while the signer was unavailable), <tt>from</tt> and <tt>to</tt> (REQUIRED ISO 8601 timestamps with explicit timezone bounding the outage, with <tt>from</tt> not later than <tt>to</tt>). Absent when no outage preceded the receipt. The member is populated by the issuing platform from its own signer-failure tally, never carried in the producer's signing request, and a caller-supplied value MUST be dropped before signing. It makes a gap in the Action stream evidenced rather than silent: the chain links only receipts that exist, so without this member an Action for which no receipt could be minted leaves no trace. A verifier MUST NOT read the member as an assertion that the unsigned Actions were policy-evaluated; defined in <xref target="unsigned-gap"/> - This document - <tt>count</tt> is a JSON integer; timestamps follow <xref target="ISO8601-2"/>.</li>
          <li><tt>key_thumbprint</tt> - Scope: signed-payload - Server-built JSON string formatted <tt>sha256:&lt;64 hex&gt;</tt> carrying the RFC 7638 JWK Thumbprint of the receipt's signing key, committing the receipt to the exact key material so a key substituted under the same identifier is detected at verification; a caller-supplied value is dropped before signing; verifiers recompute the thumbprint of the resolved key and report mismatch as non-conformant, while absence is the legacy case and not itself a failure; defined in <xref target="key-thumbprint"/> - This document - Digest algorithm is SHA-256 over the RFC 7638 canonical JWK form per <xref target="RFC7638"/>.</li>
          <li><tt>environment_attestation</tt> - Scope: signed-payload - Normative-optional object carrying pre-action boolean world-state claims (<tt>claims</tt>) attested under a distinct environment key (<tt>attester_kid</tt>, <tt>attested_at</tt>, detached <tt>sig</tt> over the attestation object minus <tt>sig</tt>); informs the policy gate and the Audit Pack evidence list but never replaces the gate; a stale or unverifiable attestation is reported on its own axis; defined in <xref target="environment-attestation"/> - This document - Member vocabulary defined in <xref target="environment-attestation"/>; claim names are free-form booleans.</li>
        </ul>
        <t>This document additionally requests that IANA register <tt>counterparty_binding</tt> as a new claim in the "CBOR Web Token (CWT) Claims" registry established by Section 9.1 of <xref target="RFC8392"/>, with the semantics defined in <xref target="counterparty-binding"/>. The requested claim key is to be allocated by IANA under the Specification Required policy of that registry, from the integer range 256 to 65535 (or equivalently from the range -65536 to -257); this document does not request a specific value, so as not to consume the Standards Action space of the -256 to 255 range. The registration template of <xref target="RFC8392"/> Section 9.1.1 is completed as follows.</t>
        <dl>
          <dt>Claim Name:</dt>
          <dd><tt>counterparty_binding</tt></dd>
          <dt>Claim Description:</dt>
          <dd>Cross-agent envelope binding: an object carrying a base64-encoded SHA-256 digest of a peer agent's full signed envelope including signature bytes, a resolvable opaque locator for that envelope, and optional members, as defined in the Counterparty Binding section of the specification document below.</dd>
          <dt>JWT Claim Name:</dt>
          <dd>N/A. The claim is specific to the compliance-receipt envelope of this profile; no equivalent JWT claim exists.</dd>
          <dt>Claim Key:</dt>
          <dd>To be allocated by IANA from the Specification Required range.</dd>
          <dt>Claim Value Type(s):</dt>
          <dd>Map (CBOR major type 5).</dd>
          <dt>Change Controller:</dt>
          <dd>IETF.</dd>
          <dt>Specification Document(s):</dt>
          <dd>This document, the section titled "Counterparty Binding" (<xref target="counterparty-binding"/>).</dd>
        </dl>
        <t>The JSON-form claim name is the literal string <tt>counterparty_binding</tt> as registered above in the Compliance Receipt Extension Fields Registry.</t>
        <t>Nothing in the initial contents above carries a remote attestation result, and this document defines no dedicated attestation-result field; such a field is future work only. The registry does not yet exist, and a later registration proposal for one would have to satisfy the Specification Required policy of this section, whose Designated Expert must verify that the Reference is a stable, dereferenceable specification, which an expiring Internet-Draft is not.</t>
      </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 <tt>type</tt> 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>Sub-namespaces are delegated to this registry: a namespace of the form <tt>parent:suffix</tt> under a registered namespace (for example a further sub-namespace under <tt>protectmcp:lifecycle</tt> or <tt>protectmcp:observation</tt>) is registered by a request that names the parent entry and the suffix, under the same Specification Required policy and with the same Change Controller as the parent entry.</t>
        <t>Initial registry contents:</t>
        <ul>
          <li><tt>protectmcp:acknowledgment</tt> - A receipt emitted by the acknowledging party ("B") in a <tt>counterparty_binding</tt> pair under the emitter behaviour of <xref target="counterparty-binding-emitter"/>, carrying the <tt>counterparty_binding</tt> object that digests the bound A-party envelope per <xref target="counterparty-binding"/> - This document.</li>
          <li><tt>protectmcp:decision</tt> - A receipt recording a policy evaluation outcome (<tt>allow</tt>, <tt>deny</tt>, <tt>rate_limit</tt>) for an MCP-mediated tool call where a policy was actually evaluated; <tt>observation</tt> is reserved to <tt>protectmcp:lifecycle</tt> and <tt>protectmcp:observation</tt> per <xref target="decision-fields"/> - This document.</li>
          <li><tt>protectmcp:restraint</tt> - A receipt recording the application of an enforcement restraint on an agent (e.g., quota, rate limit, sandbox tightening); emission otherwise follows the decision path of <xref target="decision-fields"/> - This document.</li>
          <li><tt>protectmcp:lifecycle</tt> - A receipt recording an agent or system lifecycle event (e.g., configuration change, key rotation, oversight review, or a <tt>decision</tt>=<tt>observation</tt> record indicating an Action was signed without policy evaluation per <xref target="decision-fields"/>) - This document.</li>
          <li><tt>protectmcp:lifecycle:configuration_change</tt> - A receipt recording a configuration change to an agent or producing system, including changes that disable or re-enable receipt generation (see <xref target="art12-1"/>); a registered sub-namespace under <tt>protectmcp:lifecycle</tt> that the reference cloud implementation emits today; a receipt of this type that lacks a well-formed <tt>config_manifest_digest</tt> (<xref target="result-bound"/>) is rejected at signing time per the type-bound presence rule of <xref target="result-bound"/> - This document.</li>
          <li><tt>protectmcp:lifecycle:risk_acceptance</tt> - A receipt recording a producer's acceptance of a known risk, security finding, or policy exception; a registered sub-namespace under <tt>protectmcp:lifecycle</tt> that signs through the no-policy lifecycle path (<tt>decision</tt>=<tt>observation</tt>, no policy evaluated) and carries the risk-acceptance extension fields of <xref target="risk-acceptance"/> - This document.</li>
          <li><tt>protectmcp:lifecycle:code_authorship</tt> - A receipt recording a producer's assertion that an agent-authored change to a code repository existed at a point in time; a registered sub-namespace under <tt>protectmcp:lifecycle</tt> that signs through the no-policy lifecycle path (<tt>decision</tt>=<tt>observation</tt>, no policy evaluated) and carries the code-authorship extension fields of <xref target="code-authorship"/>; the receipt proves only that the change existed, was key-authored, and was chained at the receipt time, and the issuing platform never clones the repository, re-diffs the change, verifies the code, or verifies the model - This document.</li>
          <li><tt>protectmcp:observation</tt> - A receipt recording passive telemetry about an Action that was signed without a policy evaluation, emitted under one of the capture topologies catalogued in <xref target="capture-topologies"/> (typically <tt>network_proxy</tt>, <tt>browser_extension</tt>, <tt>ebpf_observer</tt>, or <tt>mcp_proxy</tt>) where the originating application could not call the receipt-emitting SDK directly; the reference cloud implementation rejects at signing time, as the <tt>false_attestation_guard</tt>, a receipt that declares the <tt>passive_telemetry</tt> capture topology but carries a type outside <tt>protectmcp:observation</tt> and its sub-namespaces - This document.</li>
          <li><tt>protectmcp:observation:result_bound</tt> - A sub-namespace under <tt>protectmcp:observation</tt> for a follow-up observation receipt that carries a <tt>result_digest</tt> (<xref target="result-bound"/>) binding the byte-equality of a downstream Action's result to the originating <tt>protectmcp:decision</tt> receipt identified by <tt>action_ref</tt>; the reference cloud implementation emits this type for tool calls whose downstream result is regulator-relevant (LLM completions under EU AI Act Article 12, audit-log entries under HIPAA 164.312(b), broker-dealer communications under SEC 17a-4); a receipt of this type that lacks a well-formed <tt>result_digest</tt> is rejected at signing time per the type-bound presence rule of <xref target="result-bound"/> - This document.</li>
        </ul>
      </section>
    </section>

    <section anchor="related-work"><name>Related Work</name>
      <t>This section catalogues parallel proposals that overlap the problem space of signed records for AI-agent actions. The intent is to position this profile within the broader Independent Submissions and individual drafts landscape so that an implementer can choose the surface that matches the trust model and the regulator that the implementer is bound by. The citations follow the RFC 7322 form and are informative; this section places no normative constraint on a Compliance Receipt implementation.</t>
      <ul>
        <li><xref target="DRAFT-SHARIF-APKI"/> defines a certificate-based Public Key Infrastructure for autonomous AI agents, with X.509 certificate profiles, naming conventions, and revocation considerations. Its scope is identity issuance and trust-root anchoring for agent principals; it does not define a per-action receipt format. This profile is complementary to <xref target="DRAFT-SHARIF-APKI"/>: an implementer that anchors agent identity through APKI can express the resulting <tt>kid</tt> and <tt>issuer_id</tt> values in Compliance Receipts under <xref target="issuer-id"/>, with the trust-anchor metadata of the Audit Pack resolving through the APKI certificate chain.</li>
        <li><xref target="DRAFT-SHARIF-AML"/> defines cryptographic attestation across the AI model lifecycle, from training-data provenance to inference-time output binding. Its scope is the model-lifecycle surface (training-data provenance, weight signing, quantization verification, deployment attestation, and per-inference output signing), addressing what evidence a model producer or model consumer should retain about a model's lineage and the outputs it produced. This profile is complementary at the per-action layer: a Deployer that consumes a model whose lifecycle attestations are produced under <xref target="DRAFT-SHARIF-AML"/> can reference those attestation digests in Compliance Receipts via <tt>config_manifest_digest</tt> (<xref target="result-bound"/>) or via the build-provenance four-tuple of <xref target="build-provenance"/> where the model is delivered as a containerized executable.</li>
        <li><xref target="PIPELOCK-ER2"/> proposes an alternative receipt format for AI agent actions under the EvidenceReceipt v2 schema. The Pipelock format is published as a public reference outside the IETF process and addresses overlapping evidence-class requirements with a different envelope, a different canonicalization choice, and a different anchoring posture. This profile and the Pipelock format are bidding for the same regulator audience under different design tradeoffs; an implementer that already deploys EvidenceReceipt v2 receipts can map the field set across the two surfaces, though byte-equality across the formats is not preserved (the canonicalization rules differ) and a cross-format verifier would have to recompute digests under each format's rule.</li>
        <li><xref target="LYRIE-ATP"/> defines the Agent Trust Protocol, an open cryptographic trust framework for AI agent identity published outside the IETF process, built from five primitives: an Agent Identity Certificate binding an agent name, version, and model to a signed key; a Scoped Authorization Token declaring time-bounded permissions; a Tamper-Evident Action Log of hash-chained signed action records; a Delegation Receipt recording authority transfer between agents; and a Runtime Attestation Bundle tying runtime state to the declared identity. Its Tamper-Evident Action Log overlaps this profile's per-action receipt surface, while its identity, authorization, and delegation primitives sit on the identity-anchoring and delegation layer that this profile composes on top of rather than redefines. This profile is complementary: an implementer that anchors agent identity and delegation through the Agent Trust Protocol can express the resulting identity as the <tt>issuer_id</tt> of Compliance Receipts under <xref target="issuer-id"/>, while this profile's receipts can be signed server-side by an operator unaffiliated with the agent's operator (a separation the format supports but cannot enforce) and carry the regulator-facing field bindings of Sections 6 and 7 that a self-produced action log does not.</li>
        <li><xref target="RFC9943"/> defines the Supply Chain Integrity, Transparency, and Trust architecture: an append-only Transparency Service that admits signed statements about an artefact and returns a receipt proving inclusion in the log, with verification reducing to a Merkle inclusion proof in the tradition of Certificate Transparency <xref target="RFC9162"/>. RFC 9943's own scope is supply-chain transparency over artefacts: its statements are about artefacts moving through a software supply chain, and the architecture defines no receipt semantics for agent actions; the application of its inclusion-proof pattern to agent-action receipts is a generalization this profile performs, not one RFC 9943 defines. SCITT and RFC 6962 are the canonical inclusion-proof prior art that this profile's <tt>witness_policy</tt> (<xref target="anchoring"/>) generalizes from a single log to an N-of-M quorum over heterogeneous durable-anchoring witnesses. This profile is complementary to SCITT rather than competitive with it: a SCITT Transparent Statement may carry a Compliance Receipt as its signed payload, so that a Deployer operating a SCITT Transparency Service obtains a SCITT receipt whose inclusion proof can be named as one witness in a Compliance Receipt's <tt>witness_policy</tt>, while the Compliance Receipt continues to carry the regulator-facing field bindings that SCITT's artefact-neutral envelope does not define. This closes the append-only-log gap deferred under <xref target="compromised-intermediary"/>.</li>
        <li><xref target="A2A"/> defines the Agent2Agent protocol, a vendor-neutral horizontal protocol for communication between independent agents, hosted as a Linux Foundation project. A2A defines an Agent Card, an extension mechanism (data-only, profile, method, and state-machine extension classes declared inside the Agent Card capabilities and activated by clients through a request header), and an Agent Card signature that carries a detached JSON Web Signature over the Agent Card document itself. A2A is complementary to this profile rather than competitive with it: A2A's Agent Card signature attests the integrity of the card, not the execution of a per-action authorization decision, and A2A is explicitly method-agnostic on identity verification. A Deployer can reference a Compliance Receipt from an A2A Agent Card through a verifier-issued attestation pointer (a resolvable URL, a content hash over the referenced receipt, and the verifier identity expressed as a decentralized identifier), so that the Compliance Receipt's <tt>issuer_id</tt> (<xref target="issuer-id"/>) is the receipt subject and the per-action regulator-facing bindings of Sections 6 and 7 compose on top of A2A's identity layer without either layer redefining the other.</li>
        <li><xref target="A2A-IDF"/> is the Agent Identity Verification and Trust Framework proposal under the A2A protocol's contribution process, defining tiered identity verification levels (self-asserted, domain-verified, organization-verified), Agent Card signing for production agents, revocation endpoints, delegation-chain verification, and per-message signing. Its scope is the identity and trust-anchoring layer beneath per-action receipts; it does not define a regulator-facing per-action receipt format, and its post-quantum cryptography work is scheduled for a later cycle. This profile is complementary to <xref target="A2A-IDF"/> at the per-action layer: an implementer that anchors agent identity through an A2A-IDF verification level can express the resulting identity as the <tt>issuer_id</tt> and <tt>kid</tt> of Compliance Receipts under <xref target="issuer-id"/>, while this profile already signs receipts with the ML-DSA-65 post-quantum signature algorithm of <xref target="FIPS204"/> that the surrounding agent-identity ecosystem largely defers.</li>
        <li><xref target="DRAFT-HOPLEY-X402"/> is the closest parallel receipt format: it defines a Compliance Receipt minted at admission time under a payment-gate remote procedure call, carrying an ALLOW, REFER, or DENY verdict bound to a payment mandate. The format canonicalizes under <xref target="RFC8785"/> JCS, digests under SHA-256, and links receipts in a monotonic hash chain (position plus content hash plus previous-hash), in the same family of design primitives as this profile (JCS canonicalization, SHA-256 digests, hash-chain linkage under <xref target="hash-chain"/>, and a categorical decision under <xref target="decision-fields"/> bound to an authorizing mandate under <xref target="enforcement-attestation"/>). The two drafts differ in scope and trust model. <xref target="DRAFT-HOPLEY-X402"/> is narrowed to payment anti-money-laundering and sanctions-screening admission decisions, is bound to a payment-settlement substrate, and its REFER verdict carries a jurisdiction-specific suspicious-activity-reporting meaning. This profile is broader in regulatory scope and narrower in payment semantics: it covers general agent-action receipts across regulatory regimes rather than payment screening alone (Sections 6 and 7), and it defines no counterpart of the payment-settlement binding or the REFER verdict's suspicious-activity-reporting meaning; it is designed to be signed by a neutral third party rather than by the screening party itself (the unaffiliated-custodian posture the recordkeeping bindings of Sections 6 and 7 anchor; a deployment property the format supports but cannot enforce), it carries the organisation-wide enforcement controls enumerated in <tt>controls_evaluated</tt> (<xref target="enforcement-attestation"/>) rather than a single admission verdict, and it signs with the ML-DSA-65 post-quantum algorithm of <xref target="FIPS204"/>. An implementer deploying both can map the verdict and mandate-binding fields across the two surfaces, though byte-equality is not preserved because the envelope shapes differ.</li>
        <li><xref target="IN-TOTO-ATTESTATION"/> defines the in-toto Attestation Framework, a specification for authenticated metadata about software supply-chain artifacts: a signed statement binds a subject (an artifact identified by a digest) to a predicate carrying claims about how that artifact was produced. Its scope is the build-and-provenance surface for software artifacts; it does not define a regulator-facing per-action receipt format. This profile is complementary to <xref target="IN-TOTO-ATTESTATION"/> at the code-authorship layer of <xref target="code-authorship"/>: a producer that authors a change whose build provenance is attested under in-toto can bind the in-toto subject digest into a code-authorship receipt via <tt>change_digest</tt> (<xref target="code-authorship"/>) or reference the in-toto attestation through the build-provenance pointers of <xref target="build-provenance"/>, while the code-authorship receipt carries the time-of-authorship existence proof and the chained per-action evidence that the in-toto statement does not by itself provide.</li>
        <li><xref target="DRAFT-NELSON-DELEGATION"/> proposes a delegation-receipt format for AI agents, recording that one agent delegated a scoped authority to another and the resulting authorization chain. Its scope is the delegation-and-authorization surface between agent principals; it does not define a code-authorship or change-existence receipt. This profile is complementary at the per-action layer: a code-authorship receipt under <xref target="code-authorship"/> can reference the authorizing mandate the change was signed under through the reused <tt>authorized_under_mandate</tt> field of <xref target="enforcement-attestation"/>, while a delegation receipt under <xref target="DRAFT-NELSON-DELEGATION"/> can supply the upstream delegation chain that the mandate's authority rests on, without either layer redefining the other.</li>
        <li><xref target="DRAFT-SHARIF-AAT"/> defines a JSON-based structured logging format for autonomous AI systems, covering event capture, retention, and a compliance mapping of its record fields to the EU AI Act, SOC 2, ISO/IEC 42001, and PCI DSS v4.0.1. Its records are hash-chained within a session by a required <tt>prev_hash</tt> over the JCS bytes of the preceding record, the same JCS-and-SHA-256 discipline this profile applies at payload scope in <xref target="hash-chain"/>, and may carry an ECDSA P-256 signature under the agent's own key; its -01 revision adds recording-independence levels at which an independent recording component should sign under a key distinct from the agent's, and an optional RFC 3161 external timestamp. The two formats differ in what is mandatory and in who signs. Under this profile every receipt is signed by the issuing platform rather than optionally by the agent, anchoring is required per <xref target="anchoring"/>, the governing policy is bound by content digest (<tt>policy_digest</tt>, <xref target="policy-digest"/>) rather than by an identifier string, and regime-specific fields such as <tt>risk_class</tt> and <tt>incident_class</tt> travel inside the signed payload rather than in a mapping table beside it. The formats are complementary: a Deployer that produces audit-log entries under <xref target="DRAFT-SHARIF-AAT"/> can reference a Compliance Receipt's <tt>action_ref</tt> (<xref target="action-ref"/>) as the stable per-action anchor correlating an audit-log entry with the cryptographic evidence of the access-control decision.</li>
        <li><xref target="DRAFT-NARAJALA-ANSv2"/> defines a domain-anchored trust layer for autonomous AI agent identity through a dual-certificate model and a cryptographic Transparency Log, supplying verifiable identity resolution for agent principals at discovery time. Its scope is the naming and identity-anchoring surface; it does not define a per-action receipt format or regulator-facing retention bindings. This profile is complementary: an implementer that resolves agent identity through ANS v2 can express the resulting well-known domain anchor as the <tt>issuer_id</tt> of Compliance Receipts under <xref target="issuer-id"/>, while this profile's receipts can be signed server-side by an operator unaffiliated with the agent's operator (a separation the format supports but cannot enforce), so the trust guarantee at the per-action layer is independent of whether the agent's operator controls the ANS v2 identity anchor.</li>
        <li><xref target="DRAFT-SOKOLOV-AEP-COMPOSITION"/> is, in the words of its own abstract, an individual sketch of a composition pattern: a per-action action evidence package (AEP), a signed, append-only record of an action taken by an automated system, the authority under which it was taken, and its outcome, is conveyed inside a Conceptual Message Wrapper (CMW) collection (<xref target="RFC9999"/>) as application-layer Evidence under the RATS architecture (<xref target="RFC9334"/>), and appraised together with platform Evidence produced by a hardware root of trust. The two documents sit on adjacent layers: this profile fixes what a receipt must state for a regulator about an action, while that composition addresses what an appraiser may conclude about the environment that produced the action. The gap that layer fills is evidence about the execution environment, nothing more; this profile's tamper-evidence is not merely organisational, because every Compliance Receipt must carry at least one timestamping anchor (an <xref target="RFC3161"/> token or an <xref target="OPENTIMESTAMPS"/> commitment) under <xref target="anchoring"/>, and <tt>witness_policy</tt> can require several distinct independent witness types, so the receipt's existence and time are already anchored outside the issuer. Where an environment-related attestation result or digest is to be bound to a receipt, the route available today is <tt>config_manifest_digest</tt> of <xref target="result-bound"/>, the same mechanism this section already uses for model lifecycle attestation digests; <xref target="enforcement-attestation"/> records only which controls the issuing platform ran and does not carry attestation results. Note also that the sketch's feasibility work in its Sections 12 and 13 uses an emulated software TPM (swtpm), explicitly not a hardware guarantee, while the design itself targets a hardware root of trust.</li>
        <li><xref target="DRAFT-MSEBENZI-EVIDENCE-ACTION"/> defines the evidence.* family of post-hoc, independently recomputable evidence records for agent actions, and specifies one reference record type, evidence.action, together with a frozen conformance corpus under which independent implementations demonstrate byte-level agreement. Its scope is operator-signed, session-scoped evidence: records are chained within a single session, verification is tri-state (VALID, INVALID, UNVERIFIABLE), the issuer-asserted timestamp is checked only for non-regression within bounded skew and is explicitly not a trust anchor, and anchoring to independent witnesses is discussed as an optional deployment measure rather than required. This profile differs on each of those axes: receipts are signed by the issuing platform rather than self-signed by the operator, chains are per-agent across sessions under the retention floors of Sections 6 and 7, verdicts are the categorical decision vocabulary of <xref target="decision-fields"/> rather than a verification tri-state, and independent timestamping anchors are mandatory under <xref target="anchoring"/>. The two documents share the discipline of stating what the record does not prove (<xref target="receipt-limits"/>).</li>
        <li><xref target="W3C-VC-2"/> defines the Verifiable Credentials data model and <xref target="W3C-VC-DI"/> defines the Data Integrity mechanism securing it, including the eddsa-jcs-2022 cryptosuite (an Ed25519 signature over the RFC 8785 JCS canonical form of the credential and its proof options). Their scope is the credential-exchange surface: machine-readable claims a holder presents to a verifier under an issuer's signature, with proof-purpose authorization binding the signing key to the issuer. This profile differs on each axis a receipt profile must: a Compliance Receipt records one policy-evaluated Action rather than a presented claim, its hash chain and mandatory timestamping anchors exist to bound a regulator-auditable history rather than a single credential, and its field set carries the regulatory bindings of Sections 6 and 7 that the credential data model leaves open. The two are complementary at the exchange boundary: a Compliance Receipt MAY be embedded as the subject of a Verifiable Credential so that a Counterparty or Acceptor operating a credential-exchange stack consumes the receipt inside its native envelope, and a neutral verifier of the kind <xref target="verifier-independence"/> requires should be able to verify both surfaces - the credential's Data Integrity proof and the embedded receipt's signature, chain, and anchors - without either surface substituting for the other. Neither specification defines the retention floors, the regime mappings, or the neutral-third-party verification requirement of this profile.</li>
      </ul>
      <t>This section is non-exhaustive. The Independent Submissions stream and the individual-draft search surface of the IETF Datatracker host additional proposals whose scope intersects the Compliance Receipt problem space; an implementer evaluating the field is encouraged to re-query the Datatracker against the keywords "agent", "receipt", "attestation", and "audit trail" at the time of implementation. The author welcomes additions to this catalogue: implementers aware of further active parallel work are invited to send the author an email or raise it on the list.</t>
    </section>

    <section anchor="acks"><name>Acknowledgements</name>
      <t>The author thanks Tom 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 thanks Anton Sokolov (Tyche Institute) for review of the attestation and validity-window surface and for <xref target="DRAFT-SOKOLOV-AEP-COMPOSITION"/>, and Michael Msebenzi for technical reviews of the published -07 that corrected the signature-scope and envelope-shape text. The author also thanks the Asqav community for review of early drafts. Acknowledgement of review does not imply endorsement of this document's content by any reviewer named here.</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="RFC8032" target="https://www.rfc-editor.org/info/rfc8032">
        <front>
          <title>Edwards-Curve Digital Signature Algorithm (EdDSA)</title>
          <author fullname="S. Josefsson" initials="S." surname="Josefsson"/>
          <author fullname="I. Liusvaara" initials="I." surname="Liusvaara"/>
          <date year="2017" month="January"/>
        </front>
        <seriesInfo name="RFC" value="8032"/>
        <seriesInfo name="DOI" value="10.17487/RFC8032"/>
      </reference>
      <reference anchor="RFC7518" target="https://www.rfc-editor.org/info/rfc7518">
        <front>
          <title>JSON Web Algorithms (JWA)</title>
          <author fullname="M. Jones" initials="M." surname="Jones"/>
          <date year="2015" month="May"/>
        </front>
        <seriesInfo name="RFC" value="7518"/>
        <seriesInfo name="DOI" value="10.17487/RFC7518"/>
      </reference>
      <reference anchor="FIPS204" target="https://csrc.nist.gov/pubs/fips/204/final">
        <front>
          <title>Module-Lattice-Based Digital Signature Standard</title>
          <author><organization>National Institute of Standards and Technology</organization></author>
          <date year="2024" month="August" day="13"/>
        </front>
        <seriesInfo name="FIPS" value="204"/>
        <seriesInfo name="DOI" value="10.6028/NIST.FIPS.204"/>
      </reference>
      <reference anchor="RFC5816" target="https://www.rfc-editor.org/info/rfc5816">
        <front>
          <title>ESSCertIDv2 Update for RFC 3161</title>
          <author fullname="S. Santesson" initials="S." surname="Santesson"/>
          <author fullname="N. Pope" initials="N." surname="Pope"/>
          <date year="2010" month="April"/>
        </front>
        <seriesInfo name="RFC" value="5816"/>
        <seriesInfo name="DOI" value="10.17487/RFC5816"/>
      </reference>
      <reference anchor="RFC2104" target="https://www.rfc-editor.org/info/rfc2104">
        <front>
          <title>HMAC: Keyed-Hashing for Message Authentication</title>
          <author fullname="H. Krawczyk" initials="H." surname="Krawczyk"/>
          <author fullname="M. Bellare" initials="M." surname="Bellare"/>
          <author fullname="R. Canetti" initials="R." surname="Canetti"/>
          <date year="1997" month="February"/>
        </front>
        <seriesInfo name="RFC" value="2104"/>
        <seriesInfo name="DOI" value="10.17487/RFC2104"/>
      </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://github.com/opentimestamps/opentimestamps-server">
        <front>
          <title>OpenTimestamps Server</title>
          <author>
            <organization>OpenTimestamps</organization>
          </author>
          <date year="2016" month="September"/>
        </front>
        <annotation>Repository pinned at commit 6309db6b2c9ac79f6f444d85c9dc96e39219eb63 of the master branch (accessed 2026-08-03).</annotation>
      </reference>
      <reference anchor="ACTA-RECEIPTS" target="https://datatracker.ietf.org/doc/html/draft-farley-acta-signed-receipts-02">
        <front>
          <title>Signed Decision Receipts for Machine-to-Machine Access Control</title>
          <author fullname="Tom Farley" initials="T." surname="Farley"/>
          <date year="2026" month="June" day="28"/>
        </front>
        <seriesInfo name="Internet-Draft" value="draft-farley-acta-signed-receipts-02"/>
      </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>
      <reference anchor="RFC7638" target="https://www.rfc-editor.org/info/rfc7638">
        <front>
          <title>JSON Web Key (JWK) Thumbprint</title>
          <author fullname="M. Jones" initials="M." surname="Jones"/>
          <author fullname="N. Sakimura" initials="N." surname="Sakimura"/>
          <author fullname="J. Bradley" initials="J." surname="Bradley"/>
          <date year="2015" month="September"/>
        </front>
        <seriesInfo name="RFC" value="7638"/>
        <seriesInfo name="DOI" value="10.17487/RFC7638"/>
      </reference>
      <!-- ISO source title uses em-dashes (U+2014); replaced with ASCII hyphens per profile style. -->
      <reference anchor="ISO17442" target="https://www.iso.org/standard/78829.html">
        <front>
          <title>Financial services - Legal entity identifier (LEI) - Part 1: Assignment</title>
          <author><organization>ISO</organization></author>
          <date year="2020" month="August"/>
        </front>
        <seriesInfo name="ISO" value="17442-1:2020"/>
      </reference>
      <reference anchor="W3C-DID" target="https://www.w3.org/TR/did-1.0/">
        <front>
          <title>Decentralized Identifiers (DIDs) v1.0</title>
          <author><organization>W3C</organization></author>
          <date year="2022" month="July" day="19"/>
        </front>
      </reference>
      <reference anchor="W3C-VC-2" target="https://www.w3.org/TR/vc-data-model-2.0/">
        <front>
          <title>Verifiable Credentials Data Model v2.0</title>
          <author><organization>W3C</organization></author>
          <date year="2025" month="May" day="15"/>
        </front>
      </reference>
      <reference anchor="W3C-VC-DI" target="https://www.w3.org/TR/vc-data-integrity/">
        <front>
          <title>Verifiable Credential Data Integrity 1.0: Securing the Integrity of Verifiable Credential Data</title>
          <author><organization>W3C</organization></author>
          <date year="2025" month="May" day="15"/>
        </front>
      </reference>
      <reference anchor="RFC9052" target="https://www.rfc-editor.org/info/rfc9052">
        <front>
          <title>CBOR Object Signing and Encryption (COSE): Structures and Process</title>
          <author fullname="J. Schaad" initials="J." surname="Schaad"/>
          <date year="2022" month="August"/>
        </front>
        <seriesInfo name="STD" value="96"/>
        <seriesInfo name="RFC" value="9052"/>
        <seriesInfo name="DOI" value="10.17487/RFC9052"/>
      </reference>
      <reference anchor="RFC8949" target="https://www.rfc-editor.org/info/rfc8949">
        <front>
          <title>Concise Binary Object Representation (CBOR)</title>
          <author fullname="C. Bormann" initials="C." surname="Bormann"/>
          <author fullname="P. Hoffman" initials="P." surname="Hoffman"/>
          <date year="2020" month="December"/>
        </front>
        <seriesInfo name="STD" value="94"/>
        <seriesInfo name="RFC" value="8949"/>
        <seriesInfo name="DOI" value="10.17487/RFC8949"/>
      </reference>
      <reference anchor="RFC7515" target="https://www.rfc-editor.org/info/rfc7515">
        <front>
          <title>JSON Web Signature (JWS)</title>
          <author fullname="M. Jones" initials="M." surname="Jones"/>
          <author fullname="J. Bradley" initials="J." surname="Bradley"/>
          <author fullname="N. Sakimura" initials="N." surname="Sakimura"/>
          <date year="2015" month="May"/>
        </front>
        <seriesInfo name="RFC" value="7515"/>
        <seriesInfo name="DOI" value="10.17487/RFC7515"/>
      </reference>
      <reference anchor="RFC8392" target="https://www.rfc-editor.org/info/rfc8392">
        <front>
          <title>CBOR Web Token (CWT)</title>
          <author fullname="M. Jones" initials="M." surname="Jones"/>
          <author fullname="E. Wahlstroem" initials="E." surname="Wahlstroem"/>
          <author fullname="S. Erdtman" initials="S." surname="Erdtman"/>
          <author fullname="H. Tschofenig" initials="H." surname="Tschofenig"/>
          <date year="2018" month="May"/>
        </front>
        <seriesInfo name="RFC" value="8392"/>
        <seriesInfo name="DOI" value="10.17487/RFC8392"/>
      </reference>
      <reference anchor="RFC4648" target="https://www.rfc-editor.org/info/rfc4648">
        <front>
          <title>The Base16, Base32, and Base64 Data Encodings</title>
          <author fullname="S. Josefsson" initials="S." surname="Josefsson"/>
          <date year="2006" month="October"/>
        </front>
        <seriesInfo name="RFC" value="4648"/>
        <seriesInfo name="DOI" value="10.17487/RFC4648"/>
      </reference>
      <reference anchor="ISO8601-2" target="https://www.iso.org/standard/70908.html">
        <front>
          <title>Date and time - Representations for information interchange - Part 2: Extensions</title>
          <author><organization>ISO</organization></author>
          <date year="2019" month="February"/>
        </front>
        <seriesInfo name="ISO" value="8601-2:2019"/>
      </reference>
      <reference anchor="IN-TOTO-ATTESTATION" target="https://github.com/in-toto/attestation">
        <front>
          <title>in-toto Attestation Framework</title>
          <author><organization>in-toto project, a Cloud Native Computing Foundation project</organization></author>
          <date year="2024"/>
        </front>
        <annotation>Specification for authenticated metadata about software supply-chain artifacts, binding a subject artifact digest to a predicate of provenance claims. Cited under <xref target="related-work"/> as parallel work on the build-and-provenance surface complementary to this profile's code-authorship receipt format, and cited under <xref target="attestation-envelope"/> for the in-toto Statement v1 payload form of the attestation statements defined in revision -08.</annotation>
      </reference>
      <reference anchor="DSSE" target="https://github.com/secure-systems-lab/dsse">
        <front>
          <title>Dead Simple Signing Envelope (DSSE)</title>
          <author><organization>Secure Systems Lab, New York University</organization></author>
          <date year="2023"/>
        </front>
        <annotation>Specification of the Dead Simple Signing Envelope (DSSE), defining the Pre-Authentication Encoding (PAE) over which an attestation payload is signed. Cited under <xref target="attestation-envelope"/> as the envelope framing for the attestation statements defined in revision -08 of this profile, complementary to the in-toto Statement payload of <xref target="IN-TOTO-ATTESTATION"/>.</annotation>
      </reference>
    </references>

    <references>
      <name>Informative References</name>
      <reference anchor="RFC9846" target="https://www.rfc-editor.org/info/rfc9846">
        <front>
          <title>The Transport Layer Security (TLS) Protocol Version 1.3</title>
          <author fullname="E. Rescorla" initials="E." surname="Rescorla"/>
          <date year="2026" month="July"/>
        </front>
        <seriesInfo name="RFC" value="9846"/>
        <seriesInfo name="DOI" value="10.17487/RFC9846"/>
      </reference>
      <reference anchor="RFC5705" target="https://www.rfc-editor.org/info/rfc5705">
        <front>
          <title>Keying Material Exporters for Transport Layer Security (TLS)</title>
          <author fullname="E. Rescorla" initials="E." surname="Rescorla"/>
          <date year="2010" month="March"/>
        </front>
        <seriesInfo name="RFC" value="5705"/>
        <seriesInfo name="DOI" value="10.17487/RFC5705"/>
      </reference>
      <reference anchor="RFC9266" target="https://www.rfc-editor.org/info/rfc9266">
        <front>
          <title>Channel Bindings for TLS 1.3</title>
          <author fullname="S. Whited" initials="S." surname="Whited"/>
          <date year="2022" month="July"/>
        </front>
        <seriesInfo name="RFC" value="9266"/>
        <seriesInfo name="DOI" value="10.17487/RFC9266"/>
      </reference>
      <reference anchor="RFC9421" target="https://www.rfc-editor.org/info/rfc9421">
        <front>
          <title>HTTP Message Signatures</title>
          <author fullname="A. Backman" initials="A." surname="Backman" role="editor"/>
          <author fullname="J. Richer" initials="J." surname="Richer" role="editor"/>
          <author fullname="M. Sporny" initials="M." surname="Sporny"/>
          <date year="2024" month="February"/>
        </front>
        <seriesInfo name="RFC" value="9421"/>
        <seriesInfo name="DOI" value="10.17487/RFC9421"/>
      </reference>
      <reference anchor="NIST-GENAI-PROFILE" target="https://nvlpubs.nist.gov/nistpubs/ai/NIST.AI.600-1.pdf">
        <front>
          <title>Artificial Intelligence Risk Management Framework: Generative Artificial Intelligence Profile</title>
          <author><organization>National Institute of Standards and Technology</organization></author>
          <date year="2024" month="July" day="26"/>
        </front>
        <seriesInfo name="NIST" value="AI 600-1"/>
        <seriesInfo name="DOI" value="10.6028/NIST.AI.600-1"/>
      </reference>
      <reference anchor="EU-AI-ACT" target="https://eur-lex.europa.eu/eli/reg/2024/1689/oj">
        <front>
          <title>Regulation (EU) 2024/1689 of the European Parliament and of the Council of 13 June 2024 laying down harmonised rules on artificial intelligence and amending Regulations (EC) No 300/2008, (EU) No 167/2013, (EU) No 168/2013, (EU) 2018/858, (EU) 2018/1139 and (EU) 2019/2144 and Directives 2014/90/EU, (EU) 2016/797 and (EU) 2020/1828 (Artificial Intelligence Act) (Text with EEA relevance)</title>
          <author>
            <organization>European Parliament and Council</organization>
          </author>
          <date year="2024" month="July" day="12"/>
        </front>
      </reference>
      <reference anchor="DORA" target="https://eur-lex.europa.eu/eli/reg/2022/2554/oj">
        <front>
          <title>Regulation (EU) 2022/2554 of the European Parliament and of the Council of 14 December 2022 on digital operational resilience for the financial sector and amending Regulations (EC) No 1060/2009, (EU) No 648/2012, (EU) No 600/2014, (EU) No 909/2014 and (EU) 2016/1011 (Text with EEA relevance)</title>
          <author>
            <organization>European Parliament and Council</organization>
          </author>
          <date year="2022" month="December" day="27"/>
        </front>
      </reference>
      <reference anchor="REG-2025-301" target="https://eur-lex.europa.eu/eli/reg_del/2025/301/oj">
        <front>
          <title>Commission Delegated Regulation (EU) 2025/301 of 23 October 2024 supplementing Regulation (EU) 2022/2554 of the European Parliament and of the Council with regard to regulatory technical standards specifying the content, timelines and templates on the reporting of major ICT-related incidents and significant cyber threats (Text with EEA relevance)</title>
          <author><organization>European Commission</organization></author>
          <date year="2025" month="February" day="20"/>
        </front>
      </reference>
      <reference anchor="REG-2025-302" target="https://eur-lex.europa.eu/eli/reg_impl/2025/302/oj">
        <front>
          <title>Commission Implementing Regulation (EU) 2025/302 of 23 October 2024 laying down implementing technical standards for the application of Regulation (EU) 2022/2554 of the European Parliament and of the Council with regard to the standard forms, templates, and procedures for financial entities to report a major ICT-related incident and to notify a significant cyber threat (Text with EEA relevance)</title>
          <author><organization>European Commission</organization></author>
          <date year="2025" month="February" day="20"/>
        </front>
      </reference>
      <reference anchor="REG-2024-1772" target="https://eur-lex.europa.eu/eli/reg_del/2024/1772/oj">
        <front>
          <title>Commission Delegated Regulation (EU) 2024/1772 of 13 March 2024 supplementing Regulation (EU) 2022/2554 of the European Parliament and of the Council with regard to regulatory technical standards specifying the criteria for the classification of ICT-related incidents and cyber threats, setting out materiality thresholds and specifying the details of reports of major incidents (Text with EEA relevance)</title>
          <author><organization>European Commission</organization></author>
          <date year="2024" month="June" day="25"/>
        </front>
      </reference>
      <reference anchor="MIFID2" target="https://eur-lex.europa.eu/eli/dir/2014/65/oj">
        <front>
          <title>Directive 2014/65/EU of the European Parliament and of the Council of 15 May 2014 on markets in financial instruments and amending Directive 2002/92/EC and Directive 2011/61/EU (recast) (Text with EEA relevance)</title>
          <author><organization>European Parliament and Council</organization></author>
          <date year="2014" month="June" day="12"/>
        </front>
      </reference>
      <reference anchor="REG-2017-565" target="https://eur-lex.europa.eu/eli/reg_del/2017/565/oj">
        <front>
          <title>Commission Delegated Regulation (EU) 2017/565 of 25 April 2016 supplementing Directive 2014/65/EU of the European Parliament and of the Council as regards organisational requirements and operating conditions for investment firms and defined terms for the purposes of that Directive (Text with EEA relevance)</title>
          <author><organization>European Commission</organization></author>
          <date year="2017" month="March" day="31"/>
        </front>
      </reference>
      <reference anchor="AMLD" target="https://eur-lex.europa.eu/eli/dir/2015/849/oj">
        <front>
          <title>Directive (EU) 2015/849 of the European Parliament and of the Council of 20 May 2015 on the prevention of the use of the financial system for the purposes of money laundering or terrorist financing, amending Regulation (EU) No 648/2012 of the European Parliament and of the Council, and repealing Directive 2005/60/EC of the European Parliament and of the Council and Commission Directive 2006/70/EC (Text with EEA relevance)</title>
          <author><organization>European Parliament and Council</organization></author>
          <date year="2015" month="June" day="5"/>
        </front>
      </reference>
      <reference anchor="AMLR" target="https://eur-lex.europa.eu/eli/reg/2024/1624/oj">
        <front>
          <title>Regulation (EU) 2024/1624 of the European Parliament and of the Council of 31 May 2024 on the prevention of the use of the financial system for the purposes of money laundering or terrorist financing (Text with EEA relevance)</title>
          <author><organization>European Parliament and Council</organization></author>
          <date year="2024" month="June" day="19"/>
        </front>
      </reference>
      <reference anchor="NIST-AI-RMF" target="https://nvlpubs.nist.gov/nistpubs/ai/NIST.AI.100-1.pdf">
        <front>
          <title>Artificial Intelligence Risk Management Framework (AI RMF 1.0)</title>
          <author><organization>National Institute of Standards and Technology</organization></author>
          <date year="2023" month="January" day="26"/>
        </front>
        <seriesInfo name="NIST" value="AI 100-1"/>
        <seriesInfo name="DOI" value="10.6028/NIST.AI.100-1"/>
      </reference>
      <reference anchor="COLORADO-AI-ACT" target="https://leg.colorado.gov/bills/sb24-205">
        <front>
          <title>Senate Bill 24-205, Consumer Protections for Artificial Intelligence</title>
          <author><organization>State of Colorado, Seventy-Fourth General Assembly</organization></author>
          <date year="2024" month="May" day="17"/>
        </front>
      </reference>
      <reference anchor="TEXAS-TRAIGA" target="https://capitol.texas.gov/BillLookup/History.aspx?LegSess=89R&amp;Bill=HB149">
        <front>
          <title>House Bill 149, Texas Responsible Artificial Intelligence Governance Act</title>
          <author><organization>State of Texas, 89th Legislature, Regular Session</organization></author>
          <date year="2025" month="June" day="22"/>
        </front>
      </reference>
      <reference anchor="HIPAA-SECURITY" target="https://www.ecfr.gov/current/title-45/subtitle-A/subchapter-C/part-164">
        <front>
          <title>HIPAA Security Rule, 45 CFR Part 164, Subpart C, Security Standards for the Protection of Electronic Protected Health Information</title>
          <author><organization>United States Department of Health and Human Services</organization></author>
          <date year="2003" month="February" day="20"/>
        </front>
      </reference>
      <reference anchor="NYDFS-500" target="https://www.dfs.ny.gov/industry-guidance/cybersecurity">
        <front>
          <title>23 NYCRR Part 500, Cybersecurity Requirements for Financial Services Companies</title>
          <author><organization>New York State Department of Financial Services</organization></author>
          <date year="2017" month="March" day="1"/>
        </front>
      </reference>
      <reference anchor="SEC-17A-4" target="https://www.federalregister.gov/documents/2022/11/03/2022-22670/electronic-recordkeeping-requirements-for-broker-dealers-security-based-swap-dealers-and-major">
        <front>
          <title>Electronic Recordkeeping Requirements for Broker-Dealers, Security-Based Swap Dealers, and Major Security-Based Swap Participants (Rule 17a-4 Amendments)</title>
          <author><organization>United States Securities and Exchange Commission</organization></author>
          <date year="2022" month="November" day="3"/>
        </front>
        <annotation>Effective date January 3, 2023; compliance date for amendments to 17 CFR 240.17a-4 May 3, 2023.</annotation>
      </reference>
      <reference anchor="CIRCIA" target="https://www.congress.gov/117/plaws/publ103/PLAW-117publ103.pdf">
        <front>
          <title>Cyber Incident Reporting for Critical Infrastructure Act of 2022, enacted as Division Y of the Consolidated Appropriations Act, 2022 (Public Law 117-103); statutory authority codified at 6 U.S.C. 681 et seq.</title>
          <author><organization>United States Congress</organization></author>
          <date year="2022" month="March" day="15"/>
        </front>
        <annotation>Public Law 117-103 was enacted on March 15, 2022. Implementing regulations are proceeding under a CISA notice of proposed rulemaking at 89 FR 23644 (April 4, 2024); the final rule is pending publication.</annotation>
      </reference>
      <reference anchor="DRAFT-SHARIF-APKI" target="https://datatracker.ietf.org/doc/draft-sharif-apki-agent-pki/">
        <front>
          <title>Agent Public Key Infrastructure (APKI): Certificate-Based Identity and Trust for Autonomous AI Agents</title>
          <author fullname="Raza Sharif" initials="R." surname="Sharif"><organization>CyberSecAI Ltd</organization></author>
          <date year="2026" month="August" day="26"/>
        </front>
        <seriesInfo name="Internet-Draft" value="draft-sharif-apki-agent-pki-01"/>
        <annotation>Active Independent Submission on the IETF Datatracker; defines a certificate-based PKI for autonomous AI agents. Cited under <xref target="related-work"/> as parallel work on the identity-anchoring surface complementary to this profile's per-action receipt format.</annotation>
      </reference>
      <reference anchor="DRAFT-SHARIF-AML" target="https://datatracker.ietf.org/doc/draft-sharif-ai-model-lifecycle-attestation/">
        <front>
          <title>Cryptographic Attestation for AI Model Lifecycle: From Training Data to Inference Output</title>
          <author fullname="Raza Sharif" initials="R." surname="Sharif"><organization>CyberSecAI Ltd</organization></author>
          <date year="2026" month="August" day="26"/>
        </front>
        <seriesInfo name="Internet-Draft" value="draft-sharif-ai-model-lifecycle-attestation-01"/>
        <annotation>Active Independent Submission on the IETF Datatracker; defines cryptographic attestation across the AI model lifecycle from training-data provenance to inference-time output binding. Cited under <xref target="related-work"/> as parallel work on the model-lifecycle surface complementary to this profile's per-action receipt format.</annotation>
      </reference>
      <reference anchor="PIPELOCK-ER2" target="https://github.com/luckyPipewrench/pipelock">
        <front>
          <title>EvidenceReceipt v2: An Alternative Receipt Format for AI Agent Actions</title>
          <author><organization>Pipelock</organization></author>
          <date year="2025"/>
        </front>
        <annotation>Public reference published outside the IETF process, documented in the project's open-source repository. Cited under <xref target="related-work"/> as an alternative receipt-format proposal under different envelope, canonicalization, and anchoring choices; byte-equality across the two formats is not preserved.</annotation>
      </reference>
      <reference anchor="LYRIE-ATP" target="https://atp.lyrie.ai">
        <front>
          <title>Agent Trust Protocol (ATP)</title>
          <author><organization>OTT Cybersecurity</organization></author>
          <date year="2026"/>
        </front>
        <annotation>Open cryptographic trust framework for AI agent identity published outside the IETF process, defining an Agent Identity Certificate, a Scoped Authorization Token, a Tamper-Evident Action Log of hash-chained signed action records, a Delegation Receipt, and a Runtime Attestation Bundle. Cited under <xref target="related-work"/> as parallel work whose Tamper-Evident Action Log overlaps this profile's per-action receipt surface and whose identity and delegation primitives sit on the identity-anchoring layer beneath it.</annotation>
      </reference>
      <reference anchor="A2A" target="https://github.com/a2aproject/A2A">
        <front>
          <title>Agent2Agent (A2A) Protocol</title>
          <author><organization>A2A Project, a Linux Foundation project</organization></author>
          <date year="2025"/>
        </front>
        <annotation>Vendor-neutral horizontal protocol for communication between independent agents, hosted as a Linux Foundation project. Defines an Agent Card, an extension mechanism, and a JSON Web Signature over the Agent Card document. Cited under <xref target="related-work"/> as parallel work on the agent-interoperation surface complementary to this profile's per-action receipt format; A2A is method-agnostic on identity verification and does not define a regulator-facing per-action receipt format.</annotation>
      </reference>
      <reference anchor="A2A-IDF" target="https://github.com/a2aproject/A2A/issues/1497">
        <front>
          <title>Agent Identity Verification and Trust Framework (A2A-IDF)</title>
          <author><organization>A2A Project contributors</organization></author>
          <date year="2026"/>
        </front>
        <annotation>Identity and trust-framework proposal under the A2A protocol contribution process, defining tiered verification levels, Agent Card signing, revocation, and delegation-chain verification. Cited under <xref target="related-work"/> as parallel work on the identity-anchoring layer beneath this profile's per-action receipts; post-quantum cryptography is scheduled for a later cycle.</annotation>
      </reference>
      <reference anchor="DRAFT-HOPLEY-X402" target="https://datatracker.ietf.org/doc/draft-hopley-x402-compliance-receipt/">
        <front>
          <title>x402 Compliance Receipt</title>
          <author fullname="Christopher Hopley" initials="C." surname="Hopley"/>
          <date year="2026" month="May" day="25"/>
        </front>
        <seriesInfo name="Internet-Draft" value="draft-hopley-x402-compliance-receipt-02"/>
        <annotation>Independent Submission, Informational. Defines a JCS-canonicalized, SHA-256 hash-chained Compliance Receipt carrying an ALLOW, REFER, or DENY admission verdict bound to a payment mandate under the x402 payment substrate. Cited under <xref target="related-work"/> as the closest parallel receipt format; this profile is broader in regulatory scope and narrower in payment semantics (general agent-action receipts, neutral third-party signing, organisation-wide control attestation, ML-DSA-65, but no payment-settlement binding or REFER semantics) and that draft is narrowed to payment anti-money-laundering and sanctions-screening admission decisions.</annotation>
      </reference>
      <reference anchor="RFC9943" target="https://www.rfc-editor.org/info/rfc9943">
        <front>
          <title>An Architecture for Trustworthy and Transparent Digital Supply Chains</title>
          <author fullname="H. Birkholz" initials="H." surname="Birkholz"/>
          <author fullname="A. Delignat-Lavaud" initials="A." surname="Delignat-Lavaud"/>
          <author fullname="C. Fournet" initials="C." surname="Fournet"/>
          <author fullname="Y. Deshpande" initials="Y." surname="Deshpande"/>
          <author fullname="S. Lasker" initials="S." surname="Lasker"/>
          <date year="2026" month="June"/>
        </front>
        <seriesInfo name="RFC" value="9943"/>
        <seriesInfo name="DOI" value="10.17487/RFC9943"/>
        <annotation>Published as RFC 9943 (Proposed Standard), the Supply Chain Integrity, Transparency, and Trust (SCITT) architecture defining an append-only Transparency Service that issues inclusion-proof receipts over signed statements; formerly the Internet-Draft draft-ietf-scitt-architecture. RFC 9943's normative scope is transparency over artefacts in a software supply chain; it defines no receipt semantics for agent actions. Cited under <xref target="related-work"/> as canonical inclusion-proof prior art complementary to this profile's <tt>witness_policy</tt>; the application of the inclusion-proof pattern to agent-action receipts is this profile's generalization, and a SCITT Transparent Statement can carry a Compliance Receipt as its payload.</annotation>
      </reference>
      <reference anchor="RFC9162" target="https://www.rfc-editor.org/info/rfc9162">
        <front>
          <title>Certificate Transparency Version 2.0</title>
          <author fullname="B. Laurie" initials="B." surname="Laurie"/>
          <author fullname="E. Messeri" initials="E." surname="Messeri"/>
          <author fullname="R. Stradling" initials="R." surname="Stradling"/>
          <date year="2021" month="December"/>
        </front>
        <seriesInfo name="RFC" value="9162"/>
        <seriesInfo name="DOI" value="10.17487/RFC9162"/>
        <annotation>Defines the Merkle-tree inclusion-proof model for an append-only public log. Cited under <xref target="related-work"/> as the foundational inclusion-proof prior art that this profile's <tt>witness_policy</tt> generalizes to an N-of-M quorum over heterogeneous durable-anchoring witnesses.</annotation>
      </reference>
      <reference anchor="DRAFT-NELSON-DELEGATION" target="https://datatracker.ietf.org/doc/draft-nelson-agent-delegation-receipts/">
        <front>
          <title>Delegation Receipt Protocol for AI Agent Authorization</title>
          <author fullname="Ryan Nelson" initials="R." surname="Nelson"><organization>Authproof</organization></author>
          <date year="2026" month="June" day="13"/>
        </front>
        <seriesInfo name="Internet-Draft" value="draft-nelson-agent-delegation-receipts-10"/>
        <annotation>Individual Internet-Draft proposing a delegation-receipt format that records scoped authority delegated between agent principals and the resulting authorization chain. Cited under <xref target="related-work"/> as parallel work on the delegation-and-authorization surface complementary to this profile's code-authorship and per-action receipt format.</annotation>
      </reference>
      <reference anchor="DRAFT-SHARIF-AAT" target="https://datatracker.ietf.org/doc/draft-sharif-agent-audit-trail/">
        <front>
          <title>Agent Audit Trail: A Standard Logging Format for Autonomous AI Systems</title>
          <author fullname="Raza Sharif" initials="R." surname="Sharif"><organization>CyberSecAI Ltd</organization></author>
          <date year="2026" month="August" day="19"/>
        </front>
        <seriesInfo name="Internet-Draft" value="draft-sharif-agent-audit-trail-01"/>
        <annotation>Individual Internet-Draft defining a JSON-based structured logging format for autonomous AI systems with compliance mapping to the EU AI Act, SOC 2, ISO/IEC 42001, and PCI DSS v4.0.1. Cited under <xref target="related-work"/> as parallel work on the per-system audit-log surface; it shares this profile's JCS-and-SHA-256 chaining discipline and differs on mandatory platform signing, mandatory anchoring, and policy binding by digest.</annotation>
      </reference>
      <reference anchor="DRAFT-NARAJALA-ANSv2" target="https://datatracker.ietf.org/doc/draft-narajala-courtney-ansv2/">
        <front>
          <title>Agent Name Service v2 (ANS): A Domain-Anchored Trust Layer for Autonomous AI Agent Identity</title>
          <author fullname="Scott Courtney" surname="Courtney"><organization>GoDaddy</organization></author>
          <author fullname="Vineeth Sai Narajala" surname="Narajala"><organization>OWASP</organization></author>
          <author fullname="Ken Huang" surname="Huang"><organization>DistributedApps.ai</organization></author>
          <author fullname="Idan Habler" surname="Habler"><organization>OWASP</organization></author>
          <author fullname="Akram Sheriff" surname="Sheriff"><organization>Cisco Systems</organization></author>
          <date year="2026" month="April"/>
        </front>
        <seriesInfo name="Internet-Draft" value="draft-narajala-courtney-ansv2-01"/>
        <annotation>Individual Internet-Draft defining a domain-anchored trust layer for autonomous AI agent identity through a dual-certificate model and a cryptographic Transparency Log. Cited under <xref target="related-work"/> as parallel work on the naming and identity-anchoring surface complementary to this profile's per-action receipt format; this profile's receipts can be signed by an operator unaffiliated with the agent's operator (a deployment property the format supports but cannot enforce), providing a per-action trust guarantee independent of the identity anchor.</annotation>
      </reference>
      <reference anchor="RFC9334" target="https://www.rfc-editor.org/info/rfc9334">
        <front>
          <title>Remote ATtestation procedureS (RATS) Architecture</title>
          <author initials="H." surname="Birkholz"/>
          <author initials="D." surname="Thaler"/>
          <author initials="M." surname="Richardson"/>
          <author initials="N." surname="Smith"/>
          <author initials="W." surname="Pan"/>
          <date year="2023" month="January"/>
        </front>
        <seriesInfo name="RFC" value="9334"/>
        <seriesInfo name="DOI" value="10.17487/RFC9334"/>
        <annotation>Defines the RATS architecture (Evidence, Verifier, Attestation Result, Relying Party) used to position the adjacent-layer composition of <xref target="DRAFT-SOKOLOV-AEP-COMPOSITION"/> under <xref target="related-work"/>. Cited informatively only; this profile carries no normative dependency on remote attestation.</annotation>
      </reference>
      <reference anchor="RFC9999" target="https://www.rfc-editor.org/info/rfc9999">
        <front>
          <title>Remote ATtestation procedureS (RATS) Conceptual Message Wrapper (CMW)</title>
          <author initials="H." surname="Birkholz"/>
          <author initials="N." surname="Smith"/>
          <author initials="T." surname="Fossati"/>
          <author initials="H." surname="Tschofenig"/>
          <date year="2026" month="July"/>
        </front>
        <seriesInfo name="RFC" value="9999"/>
        <seriesInfo name="DOI" value="10.17487/RFC9999"/>
        <annotation>Defines the Conceptual Message Wrapper (CMW) collection that conveys application-layer Evidence in the composition of <xref target="DRAFT-SOKOLOV-AEP-COMPOSITION"/>. Cited under <xref target="related-work"/> informatively only; this profile carries no normative dependency on remote attestation.</annotation>
      </reference>
      <reference anchor="DRAFT-SOKOLOV-AEP-COMPOSITION" target="https://datatracker.ietf.org/doc/draft-sokolov-rats-aep-composition/">
        <front>
          <title>Composing Application-Layer Action Evidence with Remote Attestation Procedures</title>
          <author fullname="Anton Sokolov" initials="A." surname="Sokolov"><organization>Tyche Institute</organization></author>
          <date year="2026" month="August" day="18"/>
        </front>
        <seriesInfo name="Internet-Draft" value="draft-sokolov-rats-aep-composition-05"/>
        <annotation>Individual sketch of a composition pattern in which a per-action action evidence package (AEP) is carried as application-layer Evidence under the RATS architecture inside a CMW collection and appraised together with platform Evidence from a hardware root of trust; its feasibility work uses an emulated software TPM (swtpm). Cited under <xref target="related-work"/> as adjacent-layer work on execution-environment evidence and under <xref target="result-bound"/> for its freshness-placement report; this profile's scope is unchanged and carries no normative dependency on remote attestation.</annotation>
      </reference>
      <reference anchor="DRAFT-MSEBENZI-EVIDENCE-ACTION" target="https://datatracker.ietf.org/doc/draft-msebenzi-evidence-action/">
        <front>
          <title>The evidence.* Family: Post-Hoc, Independently Recomputable Evidence Records for AI Agent Actions</title>
          <author fullname="Michael Msebenzi" initials="M." surname="Msebenzi"><organization>Headless Oracle</organization></author>
          <date year="2026" month="July" day="28"/>
        </front>
        <seriesInfo name="Internet-Draft" value="draft-msebenzi-evidence-action-00"/>
        <annotation>Individual Internet-Draft defining append-only, hash-chained, signature-bound evidence records of agent actions under a tri-state verification protocol (VALID, INVALID, UNVERIFIABLE); records are operator-signed and session-scoped, and the issuer-asserted timestamp is not a trust anchor. Cited under <xref target="related-work"/> as parallel work on the per-action evidence surface, differing from this profile in signing party, chain scope, verdict model, and anchoring posture.</annotation>
      </reference>
      <reference anchor="ASQAV-SDK" target="https://github.com/jagmarques/asqav-sdk/tree/05c1c49">
        <front>
          <title>asqav-sdk: Verifier Conformance Vectors</title>
          <author><organization>Asqav</organization></author>
          <date year="2026"/>
        </front>
        <annotation>Public SDK repository carrying the byte-level conformance vectors cited under <xref target="hash-chain"/> (asqav-01-genesis-permit, asqav-03-chain-link, acta-02-chain-link), the tiebreaker between the payload-member and whole-receipt chain-digest scopes, and the selective-omission vectors cited under <xref target="receipt-limits"/> (asqav-14-omitted-action-chain, asqav-15-unsigned-gap, asqav-16-chain-emission-blocked). Maintained by this draft's author; pinned at commit 05c1c49 (accessed 2026-08-30).</annotation>
      </reference>
      <reference anchor="SCOPEBLIND" target="https://github.com/ScopeBlind/agent-governance-testvectors/tree/9ad0856164e459024755d60f16f9f172868949ee">
        <front>
          <title>Shared test vectors for conformance between implementations of draft-farley-acta-signed-receipts</title>
          <author><organization>ScopeBlind</organization></author>
          <date year="2026"/>
        </front>
        <annotation>Third-party conformance corpus for ACTA-RECEIPTS implementations. Its ACTA artifacts sign the payload member directly, as upstream Section 4.1 does; its aps-gateway-enforcement receipts use a top-level shape whose signature covers the whole receipt object minus the signature field. Cited under <xref target="hash-chain"/> and <xref target="audit-pack"/> as byte-level evidence that signature scope is format-dependent. Pinned at commit 9ad0856164e459024755d60f16f9f172868949ee (accessed 2026-08-03).</annotation>
      </reference>
    </references>

    <section anchor="example" numbered="true"><name>Worked Example (Informative)</name>
      <t>This appendix illustrates a Compliance Receipt that satisfies the EU AI Act Article 26 binding for a tool invocation by a High-Risk AI System deployed by a Financial Entity. The wire shape applies identically to United States bindings; the only differences are the values placed in <tt>issuer_id</tt> (LEI, EIN, or CIK depending on the regime) and in the <tt>risk_class</tt> and <tt>incident_class</tt> vocabularies referenced in the Audit Pack manifest. Field values are abbreviated for readability and are not cryptographically valid. The example shows a mid-chain receipt; a chain-genesis receipt would carry a <tt>previousReceiptHash</tt> of 64 zero hex characters per <xref target="hash-chain"/>.</t>
      <t>The worked example below is illustrative. The digest-valued fields (<tt>action_ref</tt>, <tt>policy_digest</tt>, the <tt>hash</tt> member of <tt>payload_digest</tt>, and <tt>previousReceiptHash</tt>) are shown abbreviated with an internal ellipsis so each line fits the column width; a real receipt carries the full 64-character lowercase hex digest. The keys are shown in human-readable order rather than JCS-canonical lexicographic order; the JCS-canonical bytes used as input to SHA-256 reorder keys lexicographically (so the on-the-wire byte order for hashing is <tt>action_ref</tt>, <tt>decision</tt>, <tt>issued_at</tt>, <tt>issuer_id</tt>, <tt>iteration_id</tt>, <tt>payload_digest</tt>, <tt>policy_digest</tt>, <tt>previousReceiptHash</tt>, <tt>reason</tt>, <tt>risk_class</tt>, <tt>sandbox_state</tt>, <tt>tool_name</tt>, <tt>type</tt>, with each nested object's keys also lexicographically sorted, per <xref target="RFC8785"/>). The <tt>sig</tt> value, the <tt>anchors</tt> <tt>value</tt> entries, and the <tt>hash</tt> hex values are deterministic placeholders chosen for shape rather than cryptographic validity. Implementations must not replay or trust this example as a real receipt; the example is not signed by any allocated <tt>issuer_id</tt>, is not anchored against any TSA or OpenTimestamps calendar, and does not chain into any retained predecessor.</t>
      <sourcecode type="json"><![CDATA[
{
  "payload": {
    "type": "protectmcp:decision",
    "issued_at": "2026-05-04T09:14:22.118Z",
    "issuer_id": "00000000000000000098",
    "action_ref": "c1f3a09a4d2e7f6b8c5a91e3d7b04f2a...3c5e7f9d",
    "tool_name": "deploy",
    "iteration_id": "task-2026-05-04-01a3",
    "decision": "allow",
    "reason": "policy:within_limits",
    "policy_digest": "sha256:7b214e8c3d9f4a2b1e6c8f5a...1f3a5d7b",
    "sandbox_state": "enabled",
    "payload_digest": {
      "hash": "0a44d2c8e3f5b7a9d1c4e6f8b2a5d7c9...e7f9b2a4",
      "size": 1024
    },
    "previousReceiptHash": "f80c11a3b5d7e9c2f4a6b8d1...b8d1e3c5",
    "risk_class": "deployer:financial:medium"
  },
  "signature": {
    "alg": "EdDSA",
    "kid": "00000000000000000098",
    "sig": "..."
  },
  "anchors": [
    {
      "type": "rfc3161",
      "value": "..."
    },
    {
      "type": "opentimestamps",
      "value": "..."
    }
  ]
}
]]></sourcecode>
      <t>The above receipt satisfies the Article 26 binding because:</t>
      <ul>
        <li><tt>issuer_id</tt> is a 20-character ISO 17442 Legal Entity Identifier (LEI) that resolves through the trust anchor metadata in the Audit Pack to the named Deployer;</li>
        <li><tt>policy_digest</tt> resolves to a retained policy artefact;</li>
        <li><tt>sandbox_state</tt> is enabled, satisfying the High-Risk system constraint of <xref target="sandbox-state"/>;</li>
        <li><tt>previousReceiptHash</tt> links the receipt into the chain per <xref target="hash-chain"/>;</li>
        <li>both an <xref target="RFC3161"/> anchor and an <xref target="OPENTIMESTAMPS"/> anchor are present per <xref target="anchoring"/>.</li>
      </ul>
      <t>Under the DORA Article 17 binding a Compliance Verifier additionally checks the longest applicable sectoral retention floor (1827 days as the default, per <xref target="dora-retention"/>) and, where present, that <tt>incident_class</tt> flattens to the canonical vocabulary referenced in <xref target="extension-fields"/> (resolved from <xref target="REG-2025-302"/> Annex II field 3.23 directly). Under the United States bindings of Section 7 the same verifier additionally checks the longest applicable retention floor (2192 days as the default for receipts under <xref target="hipaa"/> or <xref target="sec"/>) and, where the Deployer is a NYDFS Covered Entity, a HIPAA Covered Entity, or a CIRCIA Covered Entity, that <tt>incident_class</tt> resolves to the applicable canonical category for each in-scope regime.</t>
    </section>

    <section anchor="changelog" numbered="true"><name>Change Log</name>
      <t>[RFC Editor: please remove this appendix and its subsections before publication.]</t>
      <section anchor="cl-08" numbered="true"><name>Changes in draft -08</name>
        <t>Attestation-statement and authoritative re-derivation revision. This revision defines an attestation statement envelope emitted on top of the receipt envelope, together with the rules that make an authoritative attestation independently re-derivable. The additions are additive: a -07 receipt is a conformant -08 receipt, and an implementation that emits no attestation statements remains fully conformant. No change to the wire bytes: the receipt envelope, the canonicalization transformation (JCS), the anchor type set, the retention floors of the European Union and United States bindings, the Audit Pack manifest fields, and the verifier reporting fields are unchanged; the description of the chain-digest scope is corrected, not changed (see the chain-digest bullet below).</t>
        <ul>
          <li>New normative <xref target="attestation-statements"/> defines an attestation statement envelope (<xref target="attestation-envelope"/>) as a Dead Simple Signing Envelope (DSSE, <xref target="DSSE"/>) Pre-Authentication Encoding wrapping an in-toto Statement v1 (<xref target="IN-TOTO-ATTESTATION"/>) under the asqav <tt>predicateType</tt> namespace <tt>https://asqav.com/</tt>, signed with ML-DSA-65 (<xref target="FIPS204"/>). Two tiers are defined: a voluntary (observation) attestation that signs a caller-supplied digest and is explicitly not a capture and not unbypassable, and an authoritative attestation whose <tt>subject</tt> digest the issuing platform re-derives from independent evidence. The producer-asserted receipts of <xref target="code-authorship"/> and <xref target="risk-acceptance"/> are identified as the receipt-layer expression of the voluntary tier and are unchanged.</li>
          <li>New normative <xref target="authoritative-rederivation"/> (the principal -08 addition) states the canonical code-authorship re-derivation rule: the issuing platform resolves a base commit identifier, re-fetches the raw unified diff for the base-to-<tt>commit_sha</tt> range from the source host (GitHub) with HTTP <tt>Accept: application/vnd.github.diff</tt>, and signs the SHA-256 of the exact response bytes; a client-supplied digest (for example <tt>change_digest</tt>) is advisory only, is compared and flagged on mismatch, and is never the signed subject. The signed subject is reproducible by any third party that re-fetches the same range and recomputes, which is what makes the attestation unforgeable; it does not make it unbypassable (unbypassability is a deployment property under <xref target="honest-tiering"/>).</li>
          <li>New normative <xref target="capture-layer"/> defines the server-derived <tt>capture_layer</tt> member (<tt>github_sha_pull</tt> and <tt>network_proxy</tt> as independent evidence; <tt>in_process_sdk</tt> and <tt>passive_telemetry</tt> as observation only) and the server-enforced <tt>receipt_type</tt> member (<tt>authoritative</tt> vs <tt>observation</tt>). An in-process capture can never mint an authoritative decision receipt, and the authoritative path fails closed when independent evidence cannot be obtained.</li>
          <li>New normative <xref target="attestation-verification"/> defines the independent verification protocol: fetch the verification key from <tt>/.well-known/jwks.json</tt> by signature <tt>kid</tt>, verify ML-DSA-65 over the DSSE PAE, then re-derive the subject digest from independent evidence and require equality. A lying client can at best produce a non-gating observation or a digest that fails re-derivation.</li>
          <li>New normative <xref target="honest-tiering"/> states the honest tier guarantees: the SaaS-SDK tier is a voluntary cryptographic attestation (non-repudiable for what was attested; not capture; not unbypassable), and the Enterprise-proxy tier is a real capture only for routed HTTP egress to public model APIs and only when the deployer firewalls egress and sets fail-closed, with unbypassability being the deployer's network policy rather than the product. The profile does not claim eBPF-based or shell-based capture.</li>
          <li>New normative <xref target="service-identity"/> defines the dedicated service identity under which attestation statements are signed (the ML-DSA-65 algorithm is mandated in <xref target="attestation-envelope"/>), publishes the public key at <tt>/.well-known/jwks.json</tt>, makes revocation checkable from the published JWK Set itself under the revocation-time model of <xref target="service-identity"/> (the service identity is a bare JWK, so no PKIX revocation path applies), and requires verifiers to fail closed on revoked or unknown keys, composing with the revoked-key publication rule of <xref target="key-compromise"/>.</li>
          <li>New informative reference: <xref target="DSSE"/> (the Dead Simple Signing Envelope specification). The <xref target="IN-TOTO-ATTESTATION"/> reference, previously cited only under <xref target="related-work"/>, is now also cited under <xref target="attestation-envelope"/> for the in-toto Statement v1 form; its informative registration is unchanged.</li>
          <li>Chain-digest and signature-scope wording revision, answering Michael Msebenzi's first technical review of the published -07. <xref target="hash-chain"/> states the chain digest as SHA-256(JCS(R)) over the predecessor's <tt>payload</tt> member R without attributing that scope to upstream, and states it as a deliberate override of upstream's "Chain Hash Scope" section (Section 5.7 of <xref target="ACTA-RECEIPTS"/>, which digests the entire receipt including the signature field); the "matches Section 5.7 of ACTA-RECEIPTS" claim is deleted and the migration requirement now follows from the override. The single-linear paragraph, the mandatory checks, the extension-field coverage statements, and the chain-commitment item of <xref target="audit-pack"/> point at the same local definition; the conformance bullet of <xref target="relationship"/> no longer defers to upstream's "Signature Scope" section (Section 5.6); the <xref target="cl-04"/> entry is corrected; and the interoperability note cites the published vectors of <xref target="ASQAV-SDK"/> as the byte-level tiebreaker. The wire bytes are unchanged: the reference implementation always signed and chained at the payload-member scope.</li>
          <li>Envelope-shape revision, answering Michael Msebenzi's second technical review of the published -07, whose measurement was taken against the APS gateway receipts of the <xref target="SCOPEBLIND"/> corpus. <xref target="hash-chain"/> fixes the envelope shape {<tt>payload</tt>, <tt>signature</tt>, <tt>anchors</tt>} once, before the exclusion clause, and defines the signed bytes (the JCS of the <tt>payload</tt> member) exactly once, every other site pointing at it. Upstream's "Signature Scope" section (Section 5.6) is noted as internally inconsistent and this profile follows its first sentence, as upstream Section 4.1 and the third-party ACTA artifacts in <xref target="SCOPEBLIND"/> do. <xref target="audit-pack"/> warns that receipts with top-level signed fields beside the signature exist in the wild and that the scope must be selected by format. New informative reference <xref target="SCOPEBLIND"/>.</li>
          <li>Related-work and clarification revision, answering Anton Sokolov's review and the follow-up clarifications agreed with him. <xref target="related-work"/> gains an entry for <xref target="DRAFT-SOKOLOV-AEP-COMPOSITION"/> (an individual sketch, adapted, its swtpm result kept at feasibility level) and an invitation to contribute additions by email or on the list (the draft has no public source repository); new informative references <xref target="RFC9334"/>, <xref target="RFC9999"/>, and <xref target="DRAFT-SOKOLOV-AEP-COMPOSITION"/>. <xref target="enforcement-attestation"/> is retitled "Enforcement-Control Record Extensions", gains a closed-key-set clarification, and extends the omission-over-false-attestation rule to external-freshness-check limitations. <xref target="result-bound"/> is retitled "Result-Bound and Validity-Window Extensions"; its lead-in and the grouping labels are corrected; the nonce definition states that the nonce is NOT a challenge-response freshness proof; and its layering note is reworded accordingly. <xref target="relationship"/> gains an informative role-vocabulary paragraph. <xref target="iana-extension-fields"/> records a dedicated attestation-result field as future work only, and <tt>config_manifest_digest</tt> notes that an operator's manifest MAY include an attestation or appraisal digest while no dedicated field is registered. In-body section self-references are corrected to the rendered numbering (the regulatory bindings are Sections 6 and 7). None of these changes alter a normative wire requirement.</li>
          <li>Independent-review revision, answering the 55-finding independent review of the -08 draft; the fixes below were each verified against the primary sources they cite. The two blocking findings are resolved: <xref target="scope-confusion"/> is a new Security Considerations subsection requiring a verifier to determine the chain- and signature-scope from the receipt's format before verifying, to never retry the other scope on failure, and to report scope-derived failures distinctly from integrity failures; and the CWT claim request of <xref target="iana-extension-fields"/> is rewritten to the Specification Required range and the full registration template of <xref target="RFC8392"/> Section 9.1. Other principal changes: <xref target="anchoring"/> restates <tt>witness_policy</tt> as a signing-time declaration rather than a wire member, matching platform reality; Sections 6 and 7 replace "satisfies" with "provides evidence" framing; <xref target="authoritative-rederivation"/> states unforgeability-not-unbypassability and its GitHub-only scope; <xref target="attestation-verification"/> is retitled "Independent Verification Protocol" and states its online dependencies; <xref target="service-identity"/> moves revocation to a JWKS revocation-time model; <xref target="replay"/> corrects the issued-at skew claim to state that replay bounding rests on the OPTIONAL validity-window fields of <xref target="result-bound"/>; <xref target="long-term"/> states that the CIRCIA preservation floor of <xref target="circia-retention"/> runs forward from report submission; <xref target="receipt-limits"/> consolidates what a Compliance Receipt does not prove; <xref target="iana-extension-fields"/> declares Scope and Change Controller columns, strips BCP-14 wording from registry descriptions, aligns six descriptions with their defining sections, and moves the two type-bound presence guards into <xref target="result-bound"/>; <xref target="related-work"/> qualifies the unaffiliated-operator posture as a deployment property the format cannot enforce, reframes the x402 comparison as broader in regulatory scope and narrower in payment semantics, and gains an entry for <xref target="DRAFT-MSEBENZI-EVIDENCE-ACTION"/>; references are pinned (<xref target="SCOPEBLIND"/>, <xref target="ASQAV-SDK"/>, <xref target="OPENTIMESTAMPS"/>) and corrected to their datatracker-recorded authors and revisions, with <xref target="DSSE"/>, <xref target="IN-TOTO-ATTESTATION"/>, and <xref target="ISO8601-2"/> moved to normative and <xref target="NIST-GENAI-PROFILE"/> to informative; and the appendices become numbered. No change to the wire bytes.</li>
          <li>Keyed-digest and verdict vocabulary revision. New normative <xref target="verdict-vocabulary"/> fixes the verifier verdict vocabulary at exactly three values (<tt>verified</tt>, <tt>verified_keyed</tt>, <tt>unverified</tt>), documents the <tt>hash_algo</tt> label that distinguishes keyed digests (<tt>hmac-sha256</tt> under a holder salt) from unkeyed ones, and records the decision that the non-passing verdict renders as <tt>unverified</tt> (the reference platform's historical <tt>failed</tt> token maps to it). <xref target="iana-extension-fields"/> registers the <tt>hash_algo</tt> signed-payload member with the value vocabulary {<tt>sha256</tt>, <tt>hmac-sha256</tt>}, matching the shipped reference SDK and platform behaviour. A receipt carrying a keyed digest is reported as <tt>verified_keyed</tt>, never as plain <tt>verified</tt>: the digest is internally consistent but not third-party re-derivable without the holder salt.</li>
          <li>Key-binding, environment-attestation, and scope-honesty revision. New normative <xref target="key-thumbprint"/> adds the server-built <tt>key_thumbprint</tt> field (JWK Thumbprint per the new normative reference <xref target="RFC7638"/>), committing each receipt to the exact signing key so a key substituted under the same identifier is detected; <xref target="mandatory-checks"/> enforces the recomputed-thumbprint equality check when the field is present and treats absence as the legacy case. New normative-optional <xref target="environment-attestation"/> defines the <tt>environment_attestation</tt> extension carrying pre-action boolean world-state claims under a distinct environment key, with the hard composition rule that such attestations inform but never replace the policy gate. <xref target="receipt-limits"/> gains the three remaining consolidated non-proofs (tamper-evident not tamper-proof; not neutral third-party attestation; no delivery, settlement, or commercial-finality guarantee), unifying the scattered scope-honesty statements without weakening any of them. <xref target="iana-extension-fields"/> registers both new fields. All additions are additive: a -07 receipt remains a conformant receipt.</li>
          <li>Digest-scope mapping and failure-class revision, answering the external byte-for-byte reimplementation review. <xref target="canonicalization-scope"/> states the payload-versus-envelope mapping explicitly (all signed content lives inside the <tt>payload</tt> member, so every digest in this profile resolves to the payload member, and no digest covers the envelope including the <tt>signature</tt> member) and adds the per-format rule: Compliance Receipts chain at payload-member scope while ACTA-family receipts verified under their native format keep the whole-receipt scope their own format defines, so an implementer switches digest scope on receipt format rather than keeping separate fixture sets. <xref target="verdict-vocabulary"/> adds the <tt>failure_class</tt> axis (<tt>invalid</tt>: a binding check ran and failed; <tt>unverifiable</tt>: the recomputation could not be completed), normative and never collapsed, matching the reference platform's verification detail and the reference SDK verifier. No wire bytes change and no section renumbers.</li>
          <li>Verifier-independence and receiving-side revision. New normative <xref target="verifier-independence"/> requires verification to be performable independently of the issuing platform: no account, API credential, fee, or issuer-administered authorization may gate any verification step, a verification facility reporting verdicts only to registered callers is not a Compliance Verifier, and the neutral-third-party position is always achievable whichever party operates the verifier. <xref target="conventions"/> defines the Counterparty and Acceptor roles - the receiving side of an Action and the verification-gated acceptance position - so the receiving-side demand for receipts is named rather than implied. <xref target="related-work"/> gains an entry positioning the profile against <xref target="W3C-VC-2"/> and <xref target="W3C-VC-DI"/> (a Compliance Receipt MAY be embedded as the subject of a Verifiable Credential, and a neutral verifier should verify both surfaces without either substituting for the other) and sharpens the <xref target="RFC9943"/> citation to state that RFC 9943's normative scope is transparency over artefacts in a software supply chain, so the application of its inclusion-proof pattern to agent actions is this profile's generalization rather than an SCITT-defined semantics. New informative references: <xref target="W3C-VC-2"/>, <xref target="W3C-VC-DI"/>. No change to the wire bytes.</li>
                  <li>Editorial consistency revision. The validity-window layering note now names the registered <tt>duplicate_emission_candidate</tt> reporting axis (it previously named an unregistered <tt>duplicate_emission</tt> axis); the <tt>not_rederivable</tt> display-state mapping is corrected to <tt>verified_keyed</tt> (a passing display state cannot render as the non-passing <tt>unverified</tt> verdict); and the terms <tt>context digest</tt> and <tt>holder salt</tt>, which carry MUST-level verdict semantics in <xref target="verdict-vocabulary"/>, are now defined, including the HMAC-SHA-256 construction and the salt-handling and erasure rules. No change to the wire bytes.</li>
                  <li>Signer-outage and keyed-digest-detectability revision. New normative <xref target="unsigned-gap"/> defines the server-built <tt>unsigned_gap</tt> member, which evidences a signer outage in the next successfully signed receipt and is registered in <xref target="iana-extension-fields"/>. <xref target="verdict-vocabulary"/> gains the presence rule for <tt>hash_algo</tt>: a keyed digest MUST carry the member, because both forms share the <tt>sha256:&lt;64 hex&gt;</tt> digest wire form and without it a conforming verifier reports the stronger <tt>verified</tt>. <xref target="mandatory-checks"/> states that null, empty, and absent are malformed chain links rather than genesis markers. Both additions are additive: a receipt emitted without <tt>unsigned_gap</tt> and with an unkeyed digest is unchanged.</li>
                  <li>Privacy identifier-minimisation revision. <xref target="privacy"/> adds the rule that no signed payload or extension field may carry an IP address, hostname, hardware or machine identifier, or geolocation in cleartext; environment facts travel as keyed digests per <xref target="verdict-vocabulary"/> or as the boolean claims of <xref target="environment-attestation"/>, the unkeyed <tt>sha256</tt> form is barred for low-entropy identifiers as dictionary-recoverable and cross-receipt linkable, and holder-salt destruction is named as the erasure mechanism composing with the payload-deletion rule. No change to the wire bytes.</li>
                  <li>Selective-omission honesty and reference-hygiene revision. <xref target="receipt-limits"/> gains the consolidated non-proof that a chain passing every mandatory check does not prove every Action produced a receipt: the links cover the receipts that exist, so selective omission is invisible to chain integrity and a truncated tail is itself a valid chain, with completeness located in deployment (fail-closed capture, receiving-side demand, the issuer's own gap evidence, independent custody of later receipts) rather than in the format. <xref target="ASQAV-SDK"/> is re-pinned to the commit carrying the three conformance vectors that exercise the omitted-action, <tt>unsigned_gap</tt>, and <tt>chain_emission_blocked</tt> cases. Related work and references are refreshed against their current revisions. The <xref target="DRAFT-SHARIF-AAT"/> entry is corrected: that format already carried a required <tt>prev_hash</tt> chain and an optional agent signature in its -00, so the comparison now turns on mandatory platform signing, mandatory anchoring, and policy binding by digest. The three DRAFT-SHARIF references move to their -01 revisions. <xref target="DRAFT-SOKOLOV-AEP-COMPOSITION"/> moves from -03 to -05 with its pointers re-checked against the renumbered revision (the freshness-placement report is now its Section 14.1 and the swtpm feasibility work its Sections 12 and 13). The citation label for <xref target="DRAFT-MSEBENZI-EVIDENCE-ACTION"/> is corrected to the author's surname as the datatracker records it. RFC 8446 and RFC 6962 are replaced by <xref target="RFC9846"/> and <xref target="RFC9162"/>, the RFCs that obsolete them. Additive throughout: no change to the wire bytes and no section renumbers.</li>
</ul>
      </section>
      <section anchor="cl-07" numbered="true"><name>Changes in draft -07</name>
        <t>Reference-maintenance and editorial revision. This revision refreshes three reference citations to their current canonical locations and adds one parallel Related Work citation. No change to any normative requirement, signing algorithm, canonicalization transformation (JCS), hash-chain scope, anchor type set, retention floor, Audit Pack manifest, verifier reporting field, or IANA registry content; a -06 receipt is a conformant -07 receipt.</t>
        <ul>
          <li>The normative <xref target="ACTA-RECEIPTS"/> reference is advanced from the -01 to the -02 revision of the upstream draft, which is the current revision on the IETF Datatracker; the profiled envelope and field catalogue this document overlays are unchanged across that upstream revision.</li>
          <li>The informative <xref target="PIPELOCK-ER2"/> reference target is updated from the retired standalone vendor page to the project's live open-source repository, where the EvidenceReceipt v2 format is documented; the citation title and framing are otherwise unchanged.</li>
          <li>The informative citation for the Supply Chain Integrity, Transparency, and Trust architecture, cited in -06 as the Internet-Draft draft-ietf-scitt-architecture, is advanced to its published form: that draft has since been published as <xref target="RFC9943"/>, and the reference and its citation label are updated from the Internet-Draft to the RFC. The related-work framing is unchanged.</li>
          <li><xref target="related-work"/> is extended with a cite of <xref target="LYRIE-ATP"/> (the Agent Trust Protocol, an open cryptographic trust framework for AI agent identity published outside the IETF process), framed as parallel work whose Tamper-Evident Action Log of hash-chained signed action records overlaps this profile's per-action receipt surface and whose identity and delegation primitives sit on the identity-anchoring layer beneath it. New informative reference: <xref target="LYRIE-ATP"/>.</li>
        </ul>
      </section>
      <section anchor="cl-06" numbered="true"><name>Changes in draft -06</name>
        <t>Risk-acceptance and code-authorship revision. This revision registers the risk-acceptance and code-authorship receipt types and their extension fields, which the reference cloud implementation, the asqav-sdk Python and TypeScript halves, and the published <tt>/.well-known/governance.json</tt> already emit and accept, keeping the IETF surface in parity with deployed reality. The additions are additive: a -05 receipt is a conformant -06 receipt, and a -06 receipt that carries the new fields remains a conformant <xref target="ACTA-RECEIPTS"/> receipt under the upstream extension semantics of Section 4.2 (verifiers that do not implement the extension ignore it).</t>
        <ul>
          <li><xref target="iana-type-namespaces"/> Initial registry contents are extended with <tt>protectmcp:lifecycle:risk_acceptance</tt>, a registered sub-namespace under <tt>protectmcp:lifecycle</tt> recording a producer's acceptance of a known risk, security finding, or policy exception. It signs through the no-policy lifecycle path of <xref target="decision-fields"/> (<tt>decision</tt>=<tt>observation</tt>, no policy evaluated), so the false-attestation honesty rule is preserved: no policy result is asserted.</li>
          <li>New normative <xref target="risk-acceptance"/> defines the OPTIONAL signed-payload extension fields carried on a risk-acceptance receipt: <tt>approver_id</tt> and <tt>acceptance_reason</tt> (REQUIRED on the type), and OPTIONAL <tt>initiator_id</tt>, <tt>accepted_at</tt>, <tt>supersedes</tt>, <tt>sarif_digest</tt>, <tt>finding_ref</tt>, <tt>approval_ref</tt>, and the <tt>risk_snapshot</tt> object (<tt>snapshot_at</tt>, <tt>snapshot_source</tt>, <tt>epss</tt>, <tt>cvss</tt>, <tt>cvss_vector</tt>, <tt>kev_listed</tt>, <tt>cve_ids</tt>). The scope-honesty labels are normative: <tt>risk_snapshot</tt> is a producer-asserted snapshot the issuing platform never computes, fetches, verifies, queries, or vouches for and that is NOT reproducible from any input the platform holds; <tt>sarif_digest</tt> is a shape-only existence proof of the scan artifact at <tt>issued_at</tt>, never a re-scan; <tt>expires_at</tt> on the type is declared, not enforced (no auto-revoke); and <tt>approver_id</tt> and <tt>initiator_id</tt> are bound fields with NO segregation-of-duties check.</li>
          <li><xref target="iana-extension-fields"/> Initial registry contents are extended with the nine new risk-acceptance fields (<tt>approver_id</tt>, <tt>initiator_id</tt>, <tt>acceptance_reason</tt>, <tt>accepted_at</tt>, <tt>supersedes</tt>, <tt>sarif_digest</tt>, <tt>finding_ref</tt>, <tt>approval_ref</tt>, <tt>risk_snapshot</tt>), each labelled Scope: signed-payload, each carrying the normative producer-asserted scope labels. The existing <tt>expires_at</tt> entry is unchanged and is reused type-agnostically on the risk-acceptance receipt. Two false-attestation guards govern the type: <tt>risk_acceptance_missing_required_field</tt> (rejects a risk-acceptance receipt lacking <tt>approver_id</tt> or <tt>acceptance_reason</tt>) and <tt>risk_snapshot_numeric_requires_snapshot_source</tt> (rejects any populated <tt>epss</tt>, <tt>cvss</tt>, <tt>cvss_vector</tt>, or <tt>kev_listed</tt> without <tt>snapshot_source</tt>).</li>
          <li><xref target="anchoring"/> adds a one-line note that an <tt>rfc3161</tt> anchor MAY be obtained from a Time-Stamping Authority operated independently of the issuer (a public RFC 3161 TSA under a distinct trust root), in addition to or instead of an issuer-operated TSA. The independently operated TSA is the genuinely independent witness of <xref target="anchor-trust"/> and is one of the N witnesses of <tt>witness_policy</tt>, never the sole anchor. The baseline single-anchor requirement of <xref target="anchoring"/> is unchanged.</li>
          <li><xref target="iana-type-namespaces"/> Initial registry contents are extended with <tt>protectmcp:lifecycle:code_authorship</tt>, a registered sub-namespace under <tt>protectmcp:lifecycle</tt> recording a producer's assertion that an agent-authored change to a code repository existed at a point in time. It signs through the no-policy lifecycle path of <xref target="decision-fields"/> (<tt>decision</tt>=<tt>observation</tt>, no policy evaluated), so the false-attestation honesty rule is preserved: no policy result is asserted, and the receipt proves only that the change existed, was key-authored, and was chained at the receipt time.</li>
          <li>New normative <xref target="code-authorship"/> defines eight signed-payload extension fields carried on a code-authorship receipt, <tt>repo_ref</tt> and <tt>commit_sha</tt> REQUIRED on the type and the rest OPTIONAL: <tt>repo_ref</tt>, <tt>commit_sha</tt>, <tt>base_sha</tt>, <tt>change_digest</tt>, <tt>change_ref</tt>, <tt>change_approval_ref</tt>, <tt>change_class</tt>, and the <tt>authored_by</tt> object (<tt>agent_id</tt>, <tt>model_id</tt>, <tt>model_version</tt>, <tt>tool</tt>, <tt>attestation_source</tt>). The scope-honesty labels are normative: the issuing platform NEVER clones the repository, re-diffs the change, verifies the code, or verifies the model; <tt>change_digest</tt> is a shape-only existence proof of the change at <tt>issued_at</tt> never re-diffed; <tt>change_class</tt> is drawn from the closed vocabulary <tt>read</tt>, <tt>write</tt>, <tt>delete</tt>, <tt>execute</tt>, <tt>deploy</tt>; and <tt>authored_by</tt> model fields (<tt>model_id</tt>, <tt>model_version</tt>) require <tt>attestation_source</tt>. Authorization reuses the server-built <tt>authorized_under_mandate</tt> field of <xref target="enforcement-attestation"/>; no separate authorization field is defined.</li>
          <li><xref target="iana-extension-fields"/> Initial registry contents are extended with the eight new code-authorship fields (<tt>repo_ref</tt>, <tt>commit_sha</tt>, <tt>base_sha</tt>, <tt>change_digest</tt>, <tt>change_ref</tt>, <tt>change_approval_ref</tt>, <tt>change_class</tt>, <tt>authored_by</tt>), each labelled Scope: signed-payload. The <tt>authored_by_model_requires_attestation_source</tt> guard rejects a populated <tt>model_id</tt> or <tt>model_version</tt> without <tt>attestation_source</tt>; a <tt>change_class</tt> value outside the closed vocabulary is rejected at signing time as an out-of-vocabulary value.</li>
          <li><xref target="related-work"/> is extended with a cite of <xref target="IN-TOTO-ATTESTATION"/> (the in-toto Attestation Framework, parallel work on the build-and-provenance surface) and <xref target="DRAFT-NELSON-DELEGATION"/> (Agent Delegation Receipts, parallel work on the delegation-and-authorization surface), both framed as complementary to the code-authorship layer. New informative references: <xref target="IN-TOTO-ATTESTATION"/>, <xref target="DRAFT-NELSON-DELEGATION"/>.</li>
          <li>The abstract and the <xref target="extension-fields"/> overview are extended to enumerate the risk-acceptance and code-authorship groupings. No changes to the signing algorithms, the canonicalization transformation (JCS), the hash-chain scope, the anchor type set, the retention floors of Sections 6 and 7, the Audit Pack manifest fields, or the verifier reporting fields.</li>
          <li>The deployed guard tokens that the issuing platform publishes in its <tt>/.well-known/governance.json</tt> wire-vocabulary surface are now named verbatim where the body defines each behaviour, completing the parity that <xref target="risk-acceptance"/> and <xref target="code-authorship"/> began: <tt>witness_policy_required_exceeds_confirmed</tt> (<xref target="anchoring"/>), <tt>false_attestation_guard</tt> and <tt>configuration_change_missing_config_manifest_digest</tt> and <tt>result_bound_missing_result_digest</tt> (<xref target="iana-type-namespaces"/>), <tt>false_mandate_attestation_guard</tt> and <tt>false_control_attestation_guard</tt> (<xref target="enforcement-attestation"/>), and the code-authorship guards <tt>code_authorship_fields_require_code_authorship_receipt</tt>, <tt>code_authorship_requires_compliance_mode</tt>, <tt>code_authorship_requires_no_policy_decision</tt>, <tt>code_authorship_missing_required_field</tt>, and <tt>change_digest_not_sha256_wire_form</tt> (<xref target="code-authorship"/>). <tt>repo_ref</tt> and <tt>commit_sha</tt> are labelled REQUIRED on the code-authorship receipt type, matching the deployed validator that rejects a receipt of the type lacking either field.</li>
          <li><xref target="risk-acceptance"/> names the <tt>risk_acceptance_self_approval_guard</tt>: the reference cloud implementation refuses at signing time a risk-acceptance receipt signed under <tt>compliance_mode</tt> whose <tt>initiator_id</tt> string-equals <tt>approver_id</tt>, because a receipt asserting an approval flow approved by its own initiator is incoherent on its face. The guard is a string-incoherence check (case-sensitive exact match), not identity resolution; it fires only when both fields are present, and an absent field never fires it. The <tt>approver_id</tt> and <tt>initiator_id</tt> prose and their <xref target="iana-extension-fields"/> registry entries are updated to name the guard, matching the deployed validator and the published <tt>/.well-known/governance.json</tt> labels.</li>
          <li>Deployed-vocabulary parity: the OPTIONAL informational member of an <tt>anchors</tt> entry carrying the Bitcoin block hash of an upgraded OpenTimestamps commitment is renamed to <tt>anchor_block_hash</tt> in <xref target="anchoring"/>, in the <tt>anchors</tt> entry of <xref target="iana-extension-fields"/>, and in the <xref target="cl-04"/> recap; the -05 member name tied the member to the Bitcoin chain by name, and the new name matches the wire key the reference implementation emits.</li>
          <li>The <tt>tool_fingerprint</tt> wire form in <xref target="result-bound"/>, its <xref target="iana-extension-fields"/> entry, and the <xref target="cl-05"/> recap are corrected from <tt>sha256:&lt;64 hex&gt;</tt> to a bare string of 32 lowercase hexadecimal characters, and the digest input is pinned to the JCS canonicalization (<xref target="RFC8785"/>) of the JSON object <tt>{"tool_name": &lt;tool name&gt;, "schema": &lt;declared input schema&gt;}</tt>, matching the deployed producer and the deployed validator that rejects any other form.</li>
          <li>The <tt>nonce</tt> SHOULD-form in <xref target="result-bound"/> and its <xref target="iana-extension-fields"/> entry are corrected to the lowercase hexadecimal encoding of 12 random bytes (24 hexadecimal characters), the form the deployed producer emits; the -05 text named base64url and UUID/ULID forms the deployed producer does not use.</li>
          <li>The informational payload-capture manifest attribute recommended by the -05 text of the <xref target="capture-topologies"/> appendix (the eBPF observer and passive-telemetry entries) is struck; the deployed Audit Pack manifest builder carries no such attribute.</li>
          <li>The <tt>mcp_proxy</tt> entry of <xref target="capture-topologies"/> is rewritten to name the manifest attributes the deployed Audit Pack builder carries (<tt>action_type</tt> and, where declared, <tt>capture_topology</tt>) in place of an invoked-method attribute the builder does not emit, and the entry's reference-implementation hint is dropped: the entry defines the topology vocabulary only.</li>
          <li>Normative tightening in <xref target="counterparty-binding-verifier"/>: where <tt>expect_ack_from</tt> is present, a mismatch between the acknowledging receipt's <tt>signature.kid</tt> and the declared identifier MUST cause the acknowledging receipt to be reported non-conformant, exactly as an <tt>envelope_hash</tt> digest mismatch is. This replaces the -05 rule under which the check was a SHOULD and a mismatch was reported as an axis flag; the check now fails closed, matching the deployed verifier. The <tt>expect_ack_from</tt> field definition in <xref target="counterparty-binding-wire"/> is updated to point at the tightened rule.</li>
          <li><xref target="key-compromise"/> adds the JWK Set publication rule for revoked keys: where the Deployer publishes verification keys through a well-known JWK Set endpoint, a revoked key remains published and its entry carries a <tt>revoked_at</tt> timestamp, so a verifier can pass a receipt issued before that instant and fail one issued at or after it, matching the deployed endpoint.</li>
        </ul>
      </section>
      <section anchor="cl-05" numbered="true"><name>Changes in draft -05</name>
        <t>Build-provenance and result-bound extension revision. This revision registers vocabulary that the reference cloud implementation, the asqav-sdk Python and TypeScript halves, and the published <tt>/.well-known/governance.json</tt> already emit and accept, bringing the IETF surface back into parity with deployed reality.</t>
        <ul>
          <li>New normative <xref target="result-bound"/> defines six OPTIONAL signed-payload extension fields: <tt>result_digest</tt> (object of the upstream <tt>payload_digest</tt> shape carrying the downstream Action's result-body SHA-256), <tt>expires_at</tt> (ISO 8601 staleness bound additive to the 300-second forward-skew rule of <xref target="issued-at"/>), <tt>nonce</tt> (producer-unique replay-resistance value), <tt>tool_fingerprint</tt> (truncated tool-declaration SHA-256), <tt>config_manifest_digest</tt> (operator-defined configuration manifest SHA-256), and <tt>cve_inventory_digest</tt> (CVE inventory SHA-256 in effect at signing time). The six fields are type-agnostic; <tt>result_digest</tt> typically appears on receipts of the newly registered <tt>protectmcp:observation:result_bound</tt> namespace.</li>
          <li>New normative <xref target="build-provenance"/> defines a four-tuple of OPTIONAL signed-payload extension fields binding the executing build to the receipt: <tt>executable_hash</tt> (OCI image manifest digest for container producers, on-disk SHA-256 for non-container executables), <tt>sbom_digest</tt> (CycloneDX or SPDX SBOM SHA-256), <tt>slsa_provenance_pointer</tt> (https URL to the SLSA Provenance v1.0 in-toto attestation envelope), and <tt>supply_chain_pointer</tt> (https URL to an in-toto, Sigstore, or Rekor transparency-log entry covering the build). The four fields form a layered subsumption set; an implementation MAY emit any subset.</li>
          <li><xref target="iana-extension-fields"/> Initial registry contents are extended with the ten new fields registered in this revision (<tt>result_digest</tt>, <tt>expires_at</tt>, <tt>nonce</tt>, <tt>tool_fingerprint</tt>, <tt>config_manifest_digest</tt>, <tt>cve_inventory_digest</tt>, <tt>executable_hash</tt>, <tt>sbom_digest</tt>, <tt>slsa_provenance_pointer</tt>, <tt>supply_chain_pointer</tt>), each labelled Scope: signed-payload. The four pre-existing entries (<tt>risk_class</tt>, <tt>incident_class</tt>, <tt>counterparty_binding</tt>, <tt>anchors</tt>) are unchanged.</li>
          <li><xref target="iana-type-namespaces"/> Initial registry contents are extended with <tt>protectmcp:observation</tt> (a passive-telemetry receipt emitted under one of the capture topologies of <xref target="capture-topologies"/> when the originating application could not call the SDK directly) and <tt>protectmcp:observation:result_bound</tt> (a follow-up sub-namespace under <tt>protectmcp:observation</tt> for receipts carrying <tt>result_digest</tt> bindings to an originating <tt>protectmcp:decision</tt> receipt via <tt>action_ref</tt>).</li>
          <li>The abstract and <xref target="profile-not-fork"/> overview text are rewritten to enumerate the full extension-field set in five groupings (regulatory classification; cross-agent envelope binding; per-action freshness and integrity plus build-provenance; server-built enforcement attestation; and self-declared threat-framework taxonomy) rather than the legacy "three extension fields" phrasing carried forward from -02 through -04. The wire shape, the signature scope, the canonicalization rule, the hash chain, and the anchoring rules of earlier revisions are unchanged.</li>
          <li>New informative <xref target="related-work"/> cites parallel proposals under the Independent Submissions and individual-draft surfaces of the IETF Datatracker: <xref target="DRAFT-SHARIF-APKI"/> (certificate-based PKI for autonomous AI agents), <xref target="DRAFT-SHARIF-AML"/> (cryptographic attestation across the AI model lifecycle), and <xref target="PIPELOCK-ER2"/> (the Pipelock EvidenceReceipt v2 alternative receipt-format proposal, published as a public reference outside the IETF process). The section is non-exhaustive and is informative; this profile places no normative constraint on a Compliance Receipt implementation by virtue of citing parallel work.</li>
          <li>New informative references: <xref target="DRAFT-SHARIF-APKI"/>, <xref target="DRAFT-SHARIF-AML"/>, <xref target="PIPELOCK-ER2"/>.</li>
          <li>The four-tuple of build-provenance extensions in <xref target="build-provenance"/> is the wire-level surface of the supply-chain notary use case; Deployers under <xref target="EU-AI-ACT"/> Article 12 read together with <xref target="DORA"/> Article 17, under 45 CFR 164.312(b) of <xref target="HIPAA-SECURITY"/>, and under <xref target="SEC-17A-4"/> read with <xref target="NYDFS-500"/> 23 NYCRR 500.6, SHOULD emit at least <tt>executable_hash</tt> on every <tt>protectmcp:decision</tt> receipt. The wording is hortatory; the underlying regime obligations remain the load-bearing requirement.</li>
          <li>No changes to the signing algorithms, the canonicalization transformation (JCS), the hash-chain scope corrected in <xref target="cl-04"/>, the anchor type set, the retention floors of Sections 6 and 7, the Audit Pack manifest fields, or the verifier reporting fields. A -04 receipt that omits all ten new extensions is a conformant -05 receipt. A -05 receipt that carries any of the ten new extensions remains a conformant <xref target="ACTA-RECEIPTS"/> receipt under the upstream extension semantics of Section 4.2 (verifiers that do not implement the extension ignore it).</li>
          <li>Threat-framework taxonomy subsumption. New normative <xref target="threat-framework"/> defines, and <xref target="iana-extension-fields"/> Initial registry contents are further extended with, eight additional signed-payload entries that the reference cloud implementation, both SDK halves, and the published <tt>/.well-known/governance.json</tt> emit and accept: six caller-supplied taxonomy lists (<tt>mitre_techniques</tt>, <tt>mitre_atlas</tt>, <tt>owasp_llm_top10</tt>, <tt>nist_ai_rmf</tt>, <tt>iso_42001</tt>, <tt>eu_ai_act_articles</tt>), one caller-supplied opaque token (<tt>rfc3161_timestamp</tt>, a base64-encoded TimeStampResp per <xref target="RFC3161"/> preserved verbatim on the receipt for offline TSA chain verification independent of any platform-issued anchors), and one platform-set false-attestation guard boolean (<tt>framework_mappings_self_declared</tt>, set to <tt>true</tt> by the issuing platform whenever any of the six taxonomy lists is populated; a producer-supplied <tt>false</tt> alongside a populated taxonomy field MUST be overridden). The taxonomy fields are not platform-verified; the guard exists so verifiers can tell self-declared classifications apart from platform-verified ones. Pre-existing entries are unchanged. The total Initial registry contents now enumerate twenty-two signed-payload-or-envelope-level fields.</li>
          <li>Durable-anchoring quorum. <xref target="anchoring"/> is extended with a normative OPTIONAL envelope-level <tt>witness_policy</tt> member (a sibling of <tt>payload</tt>, <tt>signature</tt>, and <tt>anchors</tt>) that the reference cloud implementation, both SDK halves, and the published <tt>/.well-known/governance.json</tt> emit and accept. <tt>witness_policy</tt> declares an N-of-M quorum over the <tt>anchors</tt> array: <tt>required</tt> (integer in [1, length of <tt>witnesses</tt>]) and <tt>witnesses</tt> (non-empty array, distinct subset of {<tt>rfc3161</tt>, <tt>opentimestamps</tt>}; Rekor and other transparency-log pointers are rejected). The quorum-met state (reported by the reference implementation as <tt>witness_quorum_met</tt>) is reached only when at least <tt>required</tt> distinct witness types each hold a verifiable inclusion proof; a receipt MUST NOT claim durable anchoring otherwise, extending the false-attestation principle to the anchoring quorum. <xref target="iana-extension-fields"/> Initial registry contents are extended with the <tt>witness_policy</tt> entry, labelled Scope: envelope-level, bringing the total to twenty-three signed-payload-or-envelope-level fields. The baseline single-anchor requirement of <xref target="anchoring"/> is unchanged and continues to apply to every Compliance Receipt regardless of whether <tt>witness_policy</tt> is present.</li>
          <li><xref target="related-work"/> is extended with a cite of <xref target="RFC9943"/> (IETF SCITT architecture) and <xref target="RFC9162"/> (Certificate Transparency Merkle inclusion) as the canonical inclusion-proof prior art that <tt>witness_policy</tt> generalizes; SCITT is framed as complementary (a SCITT Transparent Statement can carry a Compliance Receipt as its payload), closing the append-only-log gap deferred under <xref target="compromised-intermediary"/>. New informative references: <xref target="RFC9943"/>, <xref target="RFC9162"/>.</li>
          <li>Enforcement-attestation extensions. New normative <xref target="enforcement-attestation"/> defines two OPTIONAL server-built signed-payload extension fields that the reference cloud implementation and the published <tt>/.well-known/governance.json</tt> emit: <tt>authorized_under_mandate</tt> (an object recording a self-declared authorizing mandate with <tt>mandate_id</tt>, <tt>issuer_id</tt>, a <tt>scope_digest</tt> over the mandate's authorized-action-types scope, and a <tt>verified</tt> boolean whose <tt>true</tt> value asserts self-declared issuer authority, never platform-verified third-party authorization; the binding is evaluated against the issuing platform's clock and scoped to action types, with no value cap and no counterparty restriction) and <tt>controls_evaluated</tt> (a server-built enumeration of which enforcement controls genuinely fired on the sign, drawn from the closed key set <tt>emergency_halt</tt>, <tt>delegation_scope</tt>, <tt>quorum</tt>, <tt>mandate</tt>, <tt>policy</tt>, <tt>content_scan</tt>, <tt>result</tt>, where an absent key means the control did not run rather than that it passed silently). Both fields are server-built, never request inputs; a caller-supplied value is dropped before signing. Each field carries a false-attestation guard that rejects a present-but-malformed attestation at signing time. <xref target="iana-extension-fields"/> Initial registry contents are extended with the two new entries, each labelled Scope: signed-payload, bringing the total to twenty-five signed-payload-or-envelope-level fields.</li>
          <li><xref target="related-work"/> is further extended with a cite of <xref target="A2A"/> (the Agent2Agent protocol, a Linux Foundation project with an Agent Card, an extension mechanism, and an Agent Card JSON Web Signature), <xref target="A2A-IDF"/> (the Agent Identity Verification and Trust Framework proposal under the A2A contribution process, framed as the identity-anchoring layer beneath this profile's per-action receipts), and <xref target="DRAFT-HOPLEY-X402"/> (the closest parallel receipt format: a JCS-canonicalized, SHA-256 hash-chained Compliance Receipt with an ALLOW, REFER, or DENY admission verdict bound to a payment mandate under the x402 substrate). This profile is framed as the broader superset of the x402 format: general agent-action receipts across regulatory regimes rather than payment screening alone, neutral third-party signing rather than self-signing by the screening party, organisation-wide control attestation via <tt>controls_evaluated</tt> rather than a single admission verdict, and ML-DSA-65 post-quantum signing. New informative references: <xref target="A2A"/>, <xref target="A2A-IDF"/>, <xref target="DRAFT-HOPLEY-X402"/>.</li>
        </ul>
      </section>
      <section anchor="cl-04" numbered="true"><name>Changes in draft -04</name>
        <t>Cross-agent integrity revision. The threat case is a compromised intermediary that swaps payload bytes between two honest agents while both per-agent hash chains validate independently.</t>
        <ul>
          <li><xref target="hash-chain"/> digest-scope correction. The chain-link digest scope is the canonical signing-input bytes (the JCS-canonical serialization of the predecessor's signed payload object, the same bytes the predecessor's signature covers), NOT the envelope object that additionally includes the <tt>signature</tt> or <tt>anchors</tt> top-level keys. The earlier -04 text that said the digest covers "the entire signed receipt object including the signature field" was a Security Considerations over-reach that did not match the reference implementation and would have required every deployed chain to be re-issued. The corrected scope matches the reference implementation; upstream's "Chain Hash Scope" section (Section 5.7 of <xref target="ACTA-RECEIPTS"/>) digests the entire signed receipt object including the signature field, so the corrected scope is a deliberate override of the upstream rule rather than a restatement of it. The security rationale is updated accordingly: the chain binds the signed-over content of the predecessor (recomputable offline from the predecessor's payload alone), and cross-agent envelope-including-signature integrity is delegated to <tt>counterparty_binding</tt> (<xref target="counterparty-binding"/>), which IS at the envelope-including-signature scope precisely because the peer signature is the load-bearing artefact in that case. <xref target="mandatory-checks"/> is updated to match.</li>
          <li>New informative <xref target="chain-availability"/> in Security Considerations acknowledges that the single-linear per-agent chain rule of <xref target="hash-chain"/> creates a per-issuer serialization bottleneck: a denial-of-service against the predecessor pointer (database lock, network partition, slow IO) bounds chain throughput. Mitigation: issuers SHOULD use bounded predecessor-lookup timeouts, emit a structured <tt>protectmcp:lifecycle</tt> audit event with a stable <tt>chain_emission_blocked</tt> reason code when the timeout fires, and document a chain-head recovery procedure for crashed emitters. Parallel per-issuer throughput beyond a single linear chain remains the existing distinct-<tt>issuer_id</tt> escape hatch.</li>
          <li><xref target="compromised-intermediary"/> residual list is rewritten for honesty. The M+B collusion residual is downgraded from "M+B alone defeats <tt>counterparty_binding</tt>" to "M+B+(A's-storage compromise or unavailability) defeats <tt>counterparty_binding</tt>": the audit-time verifier resolves <tt>receipt_ref</tt> to A's retained envelope and recomputes the digest, so an honest reachable A's storage defeats M+B collusion alone. A new M+A collusion residual is added: M and A coordinating to produce a fraudulent A-signed envelope is fundamentally outside the receipt model's threat surface because every cryptographic invariant holds; mitigation is separation of duties between issuer and intermediary plus anchor evidence on independent witnesses under different trust roots.</li>
          <li>The worked-example appendix carries an explicit disclaimer that the keys are shown in human-readable order (not JCS-canonical lexicographic order), the <tt>sig</tt>/<tt>value</tt>/<tt>hash</tt> bytes are deterministic placeholders, and implementations MUST NOT replay or trust the example as a real receipt. The disclaimer states the JCS-canonical key ordering that an implementer would derive on the wire.</li>
          <li><xref target="counterparty-binding-wire"/> <tt>envelope_hash</tt> rule is tightened on three axes. First, the base64 alphabet is no longer ambiguous: standard base64 per <xref target="RFC4648"/> Section 4 on emission, OR base64url per Section 5 where the transport requires URL-safe encoding, and verifiers MUST accept both and normalise before comparison. Second, JSON-framed digest scope is now normative and mandatory-to-implement: the JCS-canonical UTF-8 byte sequence of A's signed envelope JSON object per <xref target="RFC8785"/>, where the envelope is the three-key object <tt>{"payload", "signature", "anchors"}</tt> with <tt>anchors</tt> OPTIONAL and B forbidden from re-canonicalizing or stripping any of the three keys before computing the digest. Third, cross-framing equivalence is explicitly addressed: JCS-canonical JSON, COSE deterministic encoding, and JWS Compact Serialization with JCS-canonical payload produce different byte sequences from the same semantic payload-and-signature, so <tt>envelope_hash</tt> is framing-specific; a transcoding intermediary that re-frames A's envelope MUST be treated as a tampering event, and verifiers MUST NOT reframe before recomputing.</li>
          <li><xref target="iana-extension-fields"/> entries now carry an explicit Scope tag (<tt>signed-payload</tt> for <tt>risk_class</tt>, <tt>incident_class</tt>, <tt>counterparty_binding</tt>; <tt>envelope-level</tt> for <tt>anchors</tt>). The CWT claim request for <tt>counterparty_binding</tt> now proposes allocation from the IANA First Come First Served range of <xref target="RFC8392"/> Section 9.1 rather than the unqualified "unassigned integer range" placeholder, so as not to consume Expert Review or Standards Action space.</li>
          <li>The <xref target="CIRCIA"/> reference is corrected to cite the statutory authority (Public Law 117-103 Division Y, codified at 6 U.S.C. 681 et seq.) rather than CISA's general topic page; the March 15, 2022 enactment date is retained, and the pending NPRM at 89 FR 23644 (April 4, 2024) is named in the reference annotation.</li>
          <li>New normative Section 4.6 (<xref target="counterparty-binding"/>) defines the <tt>counterparty_binding</tt> extension field, an in-payload object carrying a base64-encoded SHA-256 digest (<tt>envelope_hash</tt>) over the full signed envelope of a peer agent (including the peer's signature bytes), a resolvable opaque <tt>receipt_ref</tt>, an OPTIONAL <tt>expect_ack_from</tt> identifier (kid/issuer_id of the expected acknowledger), and an OPTIONAL operational <tt>transport_label</tt>. Section 4.6.3 (<xref target="counterparty-binding-verifier"/>) defines the MUST-reject rule when the bound digest does not resolve, the storage obligation on the Audit Pack production layer, and the pairwise default for N-greater-than-2 chains.</li>
          <li>The <tt>anchors</tt> top-level array schema is now defined inline in <xref target="anchoring"/>: each entry MUST carry <tt>type</tt> and <tt>value</tt> (base64-encoded anchor token bytes), with OPTIONAL informational <tt>status</tt> (<tt>anchored</tt> / <tt>pending</tt> / <tt>failed</tt>) and <tt>anchor_block_hash</tt> (Bitcoin block hash for upgraded OpenTimestamps entries). The IANA Extension Fields Registry entry for <tt>anchors</tt> is updated to reflect the four-member schema.</li>
          <li>The IANA Type Namespaces Registry initial contents now include the registered sub-namespace <tt>protectmcp:lifecycle:configuration_change</tt> emitted by the reference cloud implementation for configuration-change receipts under <xref target="art12-1"/>.</li>
          <li>CIRCIA retention floor (<xref target="circia-retention"/>) is rewritten to measure two years from the submission of the most recently required CIRCIA report per proposed Section 226.13(c) of the CIRCIA NPRM at 89 FR 23644 (April 4, 2024), not from the date of the underlying Action.</li>
          <li>HIPAA retention (<xref target="hipaa-retention"/>) is rewritten to cite 45 CFR 164.316(b)(2) with the six-year floor expressed as "six years from the date of creation or the date when last in effect, whichever is later" and the analogy basis for applying that floor to audit-log content explicitly named.</li>
          <li>EU AI Act Article 26(6) retention (<xref target="art12-retention"/>) is rewritten to express the six-month floor in calendar-arithmetic terms per <xref target="ISO8601-2"/>; the 184-day day-count figure is retained as an informative anchoring-interval floor, and the previously-endorsed 183-day pick is withdrawn.</li>
          <li><xref target="issuer-id"/> now states explicitly that <tt>issuer_id</tt> values MUST be bare identifiers without a scheme prefix where the scheme is unambiguous (LEI: 20-character alphanumeric self-identifying form), aligning the spec with the reference cloud emitter under the cloud-wire-conformance change.</li>
          <li>New informative Section 9.11 (<xref target="compromised-intermediary"/>) documents the residual threat that <tt>counterparty_binding</tt> partially mitigates (M silently swaps bytes between honest A and B) and names three operational mitigations Operators SHOULD adopt: multiple independent anchor witnesses, regulator-driven side-by-side chain comparison under SEC 17a-4 audit-trail workflow, and out-of-band M relay logs.</li>
          <li>Section 7 (<xref target="audit-pack"/>) records two manifest-level fields shipped in the reference Audit Pack producer: <tt>regime_mapping_disclaimer</tt> (when per-receipt regime predicates derive from a producer-side mapping the original signer did not co-sign) and <tt>stale_pending</tt> (per-entry flag set when anchor evidence remains <tt>pending</tt> after the bound of <xref target="anchoring"/>).</li>
          <li>Section 8.3 (<xref target="reporting"/>) replaces the prior one-paragraph clause with five SHOULD-emit per-axis fields: <tt>regimes_satisfied</tt>, <tt>anchor_valid_ots</tt>, <tt>anchor_valid_rfc3161</tt>, <tt>policy_digest_resolved</tt>, <tt>duplicate_emission_candidate</tt>.</li>
          <li>New informative Section 9.9 (<xref target="issuer-misrep"/>) enumerates the residuals <tt>counterparty_binding</tt> does not solve. New informative Section 9.10 (<xref target="trust-boundary"/>) records channel-level operator guidance citing <xref target="RFC9846"/>, <xref target="RFC9266"/>, <xref target="RFC5705"/>, and <xref target="RFC9421"/> and disclaims transport-layer security as a substitute for application-layer byte equality.</li>
          <li>Section 11 (<xref target="iana"/>) adds <tt>counterparty_binding</tt> to the Extension Fields Registry and requests registration as a CWT claim per <xref target="RFC8392"/>.</li>
          <li>New normative references: <xref target="RFC9052"/>, <xref target="RFC8949"/>, <xref target="RFC7515"/>, <xref target="RFC8392"/>. New informative references for channel-level guidance only: <xref target="RFC9846"/>, <xref target="RFC5705"/>, <xref target="RFC9266"/>, <xref target="RFC9421"/>.</li>
          <li>New normative <xref target="canonicalization-scope"/> bounds the inputs to which the inherited JCS rule of <xref target="RFC8785"/> is applied: IEEE-754 floating-point numbers MUST NOT appear in the digest-covered canonical form (callers SHOULD serialize numerics as JSON strings or as integer-rational pairs in the IEEE-754 safe range), and tool-version-specific semantic equivalence (SQL case folding, path normalization, locale-aware string collation, numeric tolerance, URL percent-encoding choices) is OUT OF SCOPE for the chain layer. The chain answers byte equality for one agent identity at one wall-clock time only; semantic equivalence belongs in the <tt>policy_digest</tt> artefact and the Audit Pack manifest.</li>
          <li><xref target="hash-chain"/> now states explicitly that each issuer MUST maintain a single linear per-agent chain and MUST serialize concurrent in-agent emission (parallel tool calls, thread-pool fan-out) through a single predecessor pointer in emission order. Parallel sub-chains within one agent identity (a per-receipt <tt>chain_id</tt> discriminator) are NOT defined by this profile; an issuer that requires parallel sub-chains MUST express each parallel path as a distinct agent identity with its own <tt>issuer_id</tt>, signing key, and chain rooted at the all-zero genesis value.</li>
          <li>Wire tightenings introduced in this revision (additive at the message level, restrictive at the verifier level): (a) the <tt>anchors</tt> entry <tt>value</tt> member is now REQUIRED where the upstream profile leaves it OPTIONAL; (b) issuer chains are normatively single-linear per issuer (no parallel <tt>chain_id</tt> discriminator), so a -03 producer that ran parallel sub-chains under one <tt>issuer_id</tt> emits non-conformant -04 receipts; and (c) IEEE-754 floating-point numbers MUST NOT appear in the canonical form covered by SHA-256 digests. A -03 receipt with a missing anchor <tt>value</tt>, parallel sub-chains, or a digest-covered float is not a conformant -04 receipt. Implementations targeting -04 SHOULD re-emit -03 receipts under -04 emission rules. The signing algorithms, the canonicalization transformation itself (JCS), the anchor types, and the regime bindings of Sections 6 and 7 are unchanged. A -03 verifier remains conformant for receipts that do not carry <tt>counterparty_binding</tt>; -03 verifiers encountering the field will ignore it per <xref target="ACTA-RECEIPTS"/> Section 4.2 extension semantics.</li>
          <li>Rationale paragraph of <xref target="canonicalization-scope"/> is rewritten to ground the IEEE-754 float ban on documented divergence between mainstream JSON serializers (Python <tt>json.dumps</tt>, Go <tt>encoding/json</tt>, Java Jackson) and the ECMA-262 Number-to-String algorithm referenced by Section 3.2.2.3 of <xref target="RFC8785"/>, rather than on a misstated claim that JCS itself fails to specify float serialization outside the safe integer range. The Unicode-normalization bullet of <xref target="canonicalization-scope"/> is corrected to acknowledge that Section 3.1 of <xref target="RFC8785"/> mandates as-is preservation of Unicode strings (no NFC default).</li>
          <li>Security Considerations <xref target="tamper"/> is corrected to reflect the tiered DORA deadlines: the four-hour initial-notice clock (with 72-hour intermediate-report and one-month final-report bounds) per DORA Article 17 and the RTS in <xref target="REG-2025-301"/>, rather than a flat 72-hour reporting deadline. New informative reference <xref target="REG-2025-301"/> added.</li>
          <li>The Annex II field 3.23 (Type of the incident) citation in <xref target="extension-fields"/> and the <tt>incident_class</tt> initial-registry entry of <xref target="iana-extension-fields"/> no longer reproduces the enumeration verbatim; verifiers MUST resolve the canonical values from <xref target="REG-2025-302"/> directly.</li>
          <li><xref target="decision-fields"/> extends the wire <tt>decision</tt> vocabulary with <tt>observation</tt>, a fourth value reserved to <tt>type</tt> <tt>protectmcp:lifecycle</tt> for receipts emitted when an Action was signed without any policy evaluation. The new value is the regulator-honest alternative to a misleading <tt>allow</tt> on the "no policy matched" path; emitters MUST refuse to issue a <tt>protectmcp:decision</tt> receipt that carries <tt>observation</tt>, and verifiers MUST reject the combination. The vocabulary-namespace registry entry for <tt>protectmcp:decision</tt> in <xref target="iana-type-namespaces"/> is updated to reflect that <tt>observation</tt> is reserved to <tt>protectmcp:lifecycle</tt>.</li>
          <li>New informative appendix (<xref target="capture-topologies"/>) catalogues six capture topologies an operator can use to emit conformant Compliance Receipts in environments where the originating application code cannot be modified to call the receipt-emitting SDK directly: <tt>in_process_sdk</tt>, <tt>network_proxy</tt>, <tt>browser_extension</tt>, <tt>ebpf_observer</tt>, <tt>mcp_proxy</tt>, <tt>passive_telemetry</tt>. The appendix is non-normative; the <tt>capture_topology</tt> attribute it defines is OPTIONAL at the wire layer and, where present, lives in the Audit Pack manifest entry rather than inside the signed <tt>payload</tt> object, so the topology declaration does not alter signed bytes. The six values form a closed initial vocabulary at this revision; <xref target="capture-vocabulary-registry"/> sketches a future "Compliance Receipt Capture Topologies" IANA registry under the "Compliance Receipts" registry group with Specification Required registration policy per <xref target="RFC8126"/> for a follow-on revision, and names reserved-value avoidance guidance for early extenders.</li>
        </ul>
      </section>
      <section anchor="cl-03" numbered="true"><name>Changes in draft -03</name>
        <t>Multi-jurisdiction consolidation. The European Union profile (formerly the only profile in -02) and the United States profile (formerly the separate draft draft-marques-asqav-us-compliance-receipts-00) are merged into a single document with two regional bindings sections: Section 5 (European Union) and Section 6 (United States). Sections 1 through 4 (Introduction, Conventions, Relationship to upstream, Receipt Field Profile) and Sections 7 through 11 (Audit Pack, Verifier, Security, IANA, Acknowledgements) are shared across both regimes. Conventions terms that differ across regimes are now disambiguated with regime suffixes (Deployer (EU AI Act) vs Deployer (Colorado AI Act); High-Risk AI System (EU AI Act) vs High-Risk AI System (Colorado AI Act)). The <tt>incident_class</tt> extension field now lists every applicable canonical category in one place: ICT-related incident under <xref target="DORA"/> with the Annex II reporting enumeration, Cybersecurity Event/Incident under <xref target="NYDFS-500"/>, Covered Cyber Incident under <xref target="CIRCIA"/>, and security incident under <xref target="HIPAA-SECURITY"/>. The <tt>issuer_id</tt> rule now permits EIN or CIK as alternatives to LEI for US Deployers without an allocated LEI. The Tamper Resistance security consideration extends the one-hour anchoring SHOULD to NYDFS 500.17 and CIRCIA in addition to DORA Article 17. The Privacy security consideration extends to GDPR for EU data subjects and CCPA / VCDPA / HIPAA Privacy Rule for US data subjects. The Worked Example notes that the wire shape applies identically to US bindings, with only the <tt>issuer_id</tt> identifier and the vocabularies differing. IANA registries are unchanged; the Initial registry contents for <tt>incident_class</tt> now describe the multi-regime category set. No changes to the wire format, the field profile, the hash chain, the anchoring rules, the Audit Pack contents, or the Verifier checks. Section 4.1.6 (sandbox_state) and Section 4.5 (risk_class) corrected to attribute the EU risk-management documentation requirement to Article 9 of <xref target="EU-AI-ACT"/> (Provider's risk management system) rather than Article 26, with Article 26(1) cited as the deployer's instructions-for-use obligation that links to the Provider's Article 9 documentation. Section 6.5.3 (nydfs-retention) corrected to a single-tier five-year floor under 23 NYCRR 500.6(b) (verified verbatim against LII Cornell); the prior tiered 5-year/3-year split (claimed against the DFS Second Amendment) was incorrect because the Second Amendment does not amend Section 500.6, leaving the 2017 single-tier text in force. The 1096-day three-year audit-trail floor previously stated for NYDFS is removed.</t>
      </section>
      <section anchor="cl-02" numbered="true"><name>Changes in draft -02</name>
        <t>Submission-ready EU-only profile. Wire-shape alignment with upstream <xref target="ACTA-RECEIPTS"/> (<tt>payload</tt>/<tt>signature</tt>/<tt>anchors</tt> envelope; <tt>payload_digest</tt> object form; <tt>tool_name</tt> REQUIRED for <tt>protectmcp:decision</tt>; <tt>issuer_id</tt> equals <tt>kid</tt>). EU AI Act and DORA bindings authored against Official Journal text. Anchor MUST (at least one of RFC 3161 or OpenTimestamps); both RECOMMENDED; 7-day OpenTimestamps upgrade deadline profile-imposed. Six-month AI Act floor expressed as 184 days; DORA-bound default expressed as 1827 days. IANA registries created.</t>
      </section>
      <section anchor="cl-01" numbered="true"><name>Changes in draft -01</name>
        <t>Initial wire-shape alignment with upstream and addition of dual-anchor, hash-chain, retention, and DORA classification bindings. Subsequent revisions superseded the specific values introduced here.</t>
      </section>
      <section anchor="cl-00" numbered="true"><name>Changes in draft -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>

    <section anchor="capture-topologies" numbered="true"><name>Capture Topologies for Compliance Receipt Emission</name>
      <t>This appendix is informational and non-normative. It catalogues six capture topologies an operator can use to emit conformant Compliance Receipts in environments where the originating application code cannot be modified to call the receipt-emitting SDK directly. The topologies are listed in order of payload fidelity, from highest (in-process SDK, full payload digest) to lowest (passive telemetry, post-hoc log ingestion only). All six emit receipts that satisfy the wire profile of Section 5; they differ in trust boundary, payload coverage, and the operational identity that the receipt binds. The intent is to give an operator vocabulary for declaring which topology produced a given receipt, so that a verifier or auditor can interpret the receipt's evidentiary weight without re-deriving the architecture from out-of-band documentation.</t>
      <t>An operator MAY declare the producing topology by including a <tt>capture_topology</tt> attribute in the Audit Pack manifest entry for the receipt. The attribute is informational at the wire layer and OPTIONAL. The vocabulary defined below is closed for the topologies catalogued in this appendix; future revisions or third-party profiles MAY extend it through the future-IANA-registry mechanism noted at the end of this appendix.</t>

      <section anchor="capture-in-process-sdk" numbered="true"><name>In-Process SDK</name>
        <t>The originating application links the receipt-emitting SDK directly and calls it inline with the action being recorded. This is the baseline pattern <xref target="ACTA-RECEIPTS"/> and Section 5 of this document are written against. The receipt carries a full <tt>payload_digest</tt> covering the action's request bytes; the SDK has direct access to the application's principal identity, the policy decision, and the request body. Vocabulary value: <tt>in_process_sdk</tt>. Trust boundary: the application process itself; the SDK runs inside the application's memory space and inherits its principal. Threat-model note: captures the full request and response payloads, the deciding principal, and the policy context; does NOT capture out-of-process side effects or actions taken by sibling processes that do not link the SDK. Reference implementation hint: the Asqav Python and TypeScript SDKs published under the asqav-sdk umbrella implement this pattern; an operator MAY substitute any other conformant <xref target="ACTA-RECEIPTS"/> implementation.</t>
      </section>

      <section anchor="capture-network-proxy" numbered="true"><name>Network-Layer Egress Proxy</name>
        <t>A customer-owned reverse proxy or egress gateway (Envoy, NGINX, or an equivalent forward proxy) sits in the network path between the application and the downstream LLM provider. The proxy tees the request to a co-located Compliance Signer process, which receives the request bytes, applies the policy evaluation, and emits a receipt via a signer RPC. A DNS-rewrite on-ramp (CoreDNS rewriting the LLM hostname to the proxy address) or a Server Name Indication (SNI) router (SNIProxy at Layer 4) MAY be used to force application traffic onto the proxy without per-application configuration. Vocabulary value: <tt>network_proxy</tt>. Trust boundary: the customer's network egress; the proxy and signer run under the customer's operational control, and the receipt is signed by a key the customer's signer holds. Threat-model note: captures the request and response bytes that traverse the proxy and the network-layer principal identity (source IP, mTLS client cert if present); does NOT capture traffic that bypasses the proxy (direct outbound from a non-routed host, DNS-over-HTTPS to a hard-coded resolver, or TLS connections to certificate-pinned endpoints that the customer's enterprise CA cannot inspect). The receipt's <tt>issuer_id</tt> binds the customer's signer, not the originating application; the application's identity, where captured, appears as an attribute resolved through the Audit Pack manifest. Reference implementation hint: CoreDNS for the DNS on-ramp, SNIProxy by dlundquist for the SNI router, and Envoy for the Layer-7 reverse proxy plane; none of these are normative requirements.</t>
      </section>

      <section anchor="capture-browser-extension" numbered="true"><name>Browser Extension</name>
        <t>A managed-browser Manifest V3 (MV3) extension installed on employee workstations via the enterprise Mobile Device Management (MDM) system intercepts <tt>fetch</tt>, <tt>XMLHttpRequest</tt>, and EventSource requests to a configured list of LLM hostnames. The extension POSTs the intercepted request and response bytes to a Compliance Signer endpoint, which emits the receipt. For LLM hosts that pin their TLS certificates, the customer's enterprise root Certificate Authority (CA) MUST be installed in the browser trust store via MDM so that the extension's content-script interception can observe decrypted bytes. Vocabulary value: <tt>browser_extension</tt>. Trust boundary: the managed browser process on the employee workstation; the extension runs under the browser's sandbox and the employee's interactive session. Threat-model note: captures the full request and response payload for LLM calls initiated from the browser by the human user, and binds the receipt to the browser's principal identity (the user's enterprise single-sign-on subject, where the extension can read it). Does NOT capture LLM calls made by native desktop applications, server-side daemons, or browsers without the extension installed; does NOT capture traffic in incognito or private-window modes unless the extension is explicitly authorised for those contexts. Reference implementation hint: the open-source Chrome MV3 extension scaffolding published by Google under the chrome-extensions-samples repository is a useful starting point; the customer's signer endpoint is the Asqav signer or any conformant <xref target="ACTA-RECEIPTS"/> implementation.</t>
      </section>

      <section anchor="capture-ebpf-observer" numbered="true"><name>eBPF SNI Observer</name>
        <t>A kernel-level extended Berkeley Packet Filter (eBPF) probe attached to the host's network stack observes outbound TLS ClientHello records. The probe extracts the SNI hostname, the JA3 client fingerprint, the source and destination addresses and ports, and the connection timestamp, and emits a lower-fidelity receipt that binds the employee, the device, the wall-clock time, and the LLM host without observing payload content. Vocabulary value: <tt>ebpf_observer</tt>. Trust boundary: the kernel of the host on which the probe runs; the probe operates below the application's user-space process and observes traffic regardless of application configuration. Threat-model note: captures the existence and counterparty of an LLM call (the "did the call happen" evidence class) and the device-and-employee binding; does NOT capture request or response bytes, the prompt content, the model parameters, or the decision-relevant context. Useful when payload capture is operationally infeasible (TLS certificate pinning that the enterprise CA cannot defeat, third-party SaaS that egresses outside the customer's proxy plane) but the operator still needs evidence that a regulated LLM interaction occurred. Reference implementation hint: Inspektor Gadget and Tetragon both expose SNI and connection-metadata events from eBPF probes; neither is a normative requirement.</t>
      </section>

      <section anchor="capture-mcp-proxy" numbered="true"><name>MCP Transparent Proxy</name>
        <t>A transparent proxy sits in-path between a Model Context Protocol (MCP) client and one or more downstream MCP servers, terminating the client's <tt>stdio</tt>, Server-Sent Events (SSE), or streamable-HTTP transport on one side and re-establishing the same transport to each downstream server on the other side. The proxy observes every <tt>tools/call</tt> and <tt>resources/read</tt> JSON-RPC method invocation, signs a receipt at the moment the call is forwarded, and emits a second acknowledging receipt carrying a <tt>counterparty_binding</tt> (see <xref target="counterparty-binding"/>) at the moment the downstream server's response returns. Both sides of the call are therefore bound bilaterally, with the proxy's signing key serving as the integrity anchor for the pair. Vocabulary value: <tt>mcp_proxy</tt>. The Audit Pack manifest entry for a proxy-captured receipt carries the receipt's <tt>action_type</tt> and, where declared, the <tt>capture_topology</tt> attribute, so a verifier can filter proxy-captured receipts without re-parsing payload bytes. Trust boundary: the proxy process and its signing key; the upstream MCP client and the downstream MCP server are both treated as honest endpoints under the threat model of <xref target="compromised-intermediary"/>, with the proxy itself being the named intermediary whose tampering risk <tt>counterparty_binding</tt> mitigates. Because both receipts of the pair are signed with the same proxy key, <tt>counterparty_binding</tt> detects a tampering proxy but not a compromised one: an attacker holding the proxy's signing key can forge both sides of the pair, so under proxy-key compromise the binding provides no evidence (the collusion residual of <xref target="issuer-misrep"/> applies with the proxy occupying both endpoint roles). Threat-model note: captures the full MCP request and response payload, the method name, and the client and server principal identities visible at the transport boundary; does NOT capture MCP traffic that bypasses the proxy or that uses a transport the proxy does not implement. This entry defines the topology and its vocabulary value only; no particular proxy implementation is referenced or required.</t>
      </section>

      <section anchor="capture-passive-telemetry" numbered="true"><name>Passive Telemetry Ingestion</name>
        <t>A passive ingestion pipeline reads structured records the originating application or its runtime has already emitted (for example, OpenTelemetry spans, application access logs, vendor-managed observability exports, or batch CSV drops) and synthesises a Compliance Receipt for each record after the fact. The synthesiser holds the signing key, applies the receipt-format wire profile, and emits the receipt to the same downstream sink that the in-process SDK and network-proxy paths feed. Vocabulary value: <tt>passive_telemetry</tt>. Trust boundary: the telemetry pipeline operator's signing key plus the integrity of the upstream observability source; the receipt binds the producer of the telemetry, not the originating application's per-request principal. Threat-model note: captures whatever the upstream telemetry source preserved (typically a subset of the action's bytes and metadata, often without request or response payload) plus the wall-clock and counterparty identifiers visible in the telemetry record; does NOT capture data the upstream source dropped, sampled out, or never emitted, and inherits any tampering risk the upstream source carries between emission and ingestion. Useful when the in-process SDK, network proxy, browser extension, eBPF observer, and MCP proxy topologies are all operationally infeasible (legacy applications without instrumentation hooks, third-party SaaS with read-only export, fleet migrations where the producer has only logs to work from) but the operator still needs a signed evidence artefact tied to the historical action. Reference implementation hint: any OpenTelemetry collector exporter feeding a conformant receipt-emitting signer; the upstream telemetry source is out of scope of this profile.</t>
      </section>

      <section anchor="capture-vocabulary-registry" numbered="true"><name>capture_topology Vocabulary and Considerations for a Future IANA Registry</name>
        <t>The six values defined in this appendix (<tt>in_process_sdk</tt>, <tt>network_proxy</tt>, <tt>browser_extension</tt>, <tt>ebpf_observer</tt>, <tt>mcp_proxy</tt>, <tt>passive_telemetry</tt>) form the closed initial vocabulary for the <tt>capture_topology</tt> attribute. The attribute is optional at the wire layer and, where present, appears only in the Audit Pack manifest entry for the receipt, never inside the signed <tt>payload</tt> object, so that the topology declaration is producer-side metadata that does not alter the receipt's signed bytes. A verifier must not treat the absence of a <tt>capture_topology</tt> attribute as a non-conformance condition: absence simply means the producer did not declare a topology, and neither <xref target="mandatory-checks"/> nor <xref target="optional-checks"/> lists the attribute among the verifier's checks.</t>
        <t>This document is an Independent Submission and does not request IANA action for the <tt>capture_topology</tt> vocabulary at this revision. A future revision MAY request creation of a "Compliance Receipt Capture Topologies" registry under the same "Compliance Receipts" registry group described in <xref target="iana"/>, with the registration policy of Specification Required per <xref target="RFC8126"/> and an initial set populated from the six values above. Until such a registry exists, implementations that extend the vocabulary SHOULD document the new value in a reference specification and SHOULD avoid colliding with the six reserved values above. The Designated Expert(s) for any future registry SHOULD verify that a candidate value names a distinct topology (a different trust boundary or a materially different payload-fidelity class) rather than a variant of an existing one, and that the candidate's threat-model note states what is captured and what is not, in the form used by the six entries in this appendix.</t>
      </section>
    </section>
  </back>
</rfc>
