<?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-09" 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-09"/>
    <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 year="2026" month="September" day="21"/>
    <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 Automated Decision-Making Technology Act</keyword>
    <keyword>HIPAA</keyword>
    <keyword>NYDFS</keyword>
    <keyword>CIRCIA</keyword>

    <abstract>
      <t>This document defines a profile for signed action receipts and independently checkable evidence about agent activity. It specifies versioned payload and signature semantics, hash-chain linkage, timestamp and witness policy, receipt verification and bounded regulatory-evidence mappings. It draws on ACTA-RECEIPTS but states its profile-specific overrides explicitly. A receipt supports checks about recorded bytes, identity, linkage and retained evidence; it does not by itself establish that an action occurred, that all actions were captured, or that an organization complies with a law. The profile supports retained historical receipts through explicit version and legacy rules rather than rewriting their committed bytes. Its intended core and implementation limitations are described in the body.</t></abstract>
    <note removeInRFC="true">
      <name>Note to the Independent Submissions Editor</name>
      <t>This document requests no new IANA registry. The two tables in <xref target="iana"/> are administered outside IANA. Section 4 of <xref target="RFC8726"/> generally precludes new IANA registries on the Independent Submission Stream, with a limited exception for a subcode registry tied to an allocation from an existing registry. This document does not invoke that exception. Section 5 excludes Specification Required and Expert Review policies for new subregistries created through that stream. The requested CWT claim allocation remains subject to the existing registry policy and expert review under Section 2. Any future proposal to move the external tables to IANA would require the applicable procedures and approvals; IETF Stream progression would not itself transfer them.</t>
    </note>

  <note removeInRFC="true"><name>Editor's Note: Target Design</name><t>This local edition describes the completed target design selected for the core milestone. The specification uses present-tense requirements on that basis. It does not report current implementation completion, test results, customer deployment or publication approval. Those facts are maintained in a separate release evidence record. Remove this note only when the release evidence supports the publication being submitted.</t></note></front>

  <middle>
    <section anchor="introduction"><name>Introduction</name>
      <section anchor="profile-not-fork"><name>Profile and Explicit Overrides</name><t>This specification draws on the receipt model in <xref target="ACTA-RECEIPTS"/>. Its conformance requirements are defined here and in its normative references. ACTA records design history; its requirements are not incorporated by reference. Implementers use <xref target="relationship"/>, <xref target="canonicalization-scope"/> and <xref target="field-profile"/>. Shared names do not establish wire compatibility.</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), Article 26 (deployer obligations) and Article 50 (transparency) 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 Colorado's Automated Decision-Making Technology law (SB 26-189) 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 a provisional CIRCIA incident-evidence mapping.</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(7) of the Colorado Revised Statutes for Colorado bindings). Where another statute uses a different term (Provider, Financial Entity, Covered Entity or Business Associate 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>An upstream-only verifier can validate only the algorithms, framing and digest scopes it actually implements. Profile conformance and regulatory-evidence mapping require the checks of this document; cryptographic validity alone does not establish either.</t>
      <t>The required core consists of the receipt envelope, supported algorithms, chain and key semantics, selected witness policy, evidence export and verifier reporting. Type-specific extensions impose their rules when that type or extension is selected; they do not require every issuer to implement every listed product integration. Unsupported required extensions are reported as unverifiable. A release conformance statement lists the supported types and policies.</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 record of an agent-related action or decision. The term does not imply conformance to an external receipt specification.</dd><dt>Compliance Receipt:</dt>
        <dd>A receipt satisfying the envelope, common fields, selected type and verification requirements defined in this document.</dd><dt>Deployer (EU AI Act):</dt>
        <dd>As defined in Article 3(4) of <xref target="EU-AI-ACT"/>.</dd>
        <dt>Deployer (Colorado ADMT Act):</dt>
        <dd>As defined in Section 6-1-1701(7) of the Colorado Revised Statutes, as enacted by <xref target="COLORADO-ADMT"/>.</dd>
        <dt>Developer (Colorado ADMT Act):</dt>
        <dd>As defined in Section 6-1-1701(8) of <xref target="COLORADO-ADMT"/>.</dd>
        <dt>Covered ADMT:</dt>
        <dd>As defined in Section 6-1-1701(5) of <xref target="COLORADO-ADMT"/>; "automated decision-making technology" is defined at Section 6-1-1701(2).</dd>
        <dt>Consequential Decision (Colorado ADMT Act):</dt>
        <dd>As defined in Section 6-1-1701(3) of <xref target="COLORADO-ADMT"/>.</dd>
        <dt>Adverse Outcome (Colorado ADMT Act):</dt>
        <dd>As defined in Section 6-1-1701(1) of <xref target="COLORADO-ADMT"/>.</dd>
        <dt>Materially Influence (Colorado ADMT Act):</dt>
        <dd>As defined in Section 6-1-1701(13) of <xref target="COLORADO-ADMT"/>.</dd>
        <dt>Meaningful Human Review (Colorado ADMT Act):</dt>
        <dd>As defined in Section 6-1-1701(15) of <xref target="COLORADO-ADMT"/>.</dd>
        <dt>High-Risk AI System (EU AI Act):</dt>
        <dd>As defined in Article 6 of <xref target="EU-AI-ACT"/>.</dd>
        <dt>Financial Entity:</dt>
        <dd>The entities listed in Article 2(1), points (a) to (t), that Article 2(2) of <xref target="DORA"/> collectively calls financial entities, subject to the applicable exclusions and scope provisions.</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>A covered entity within the statutory framework of 6 U.S.C. 681 and the operative implementing rule. This draft's provisional mapping does not use proposed scope criteria to establish a present reporting duty; see <xref target="circia"/>.</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 the EU and US evidence mappings 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>
    <t>A normative reference supplies rules needed to implement the core or a selected extension or regulatory-evidence mapping. Sources used only by a selected mapping apply to that mapping; their classification does not make the mapping mandatory for every deployment or establish legal compliance. Provisional mappings remain provisional. Explanatory sources and design antecedents are informative. Reference categories describe technical dependency, not institutional prestige.</t></section>

    <section anchor="relationship"><name>Relationship to ACTA-RECEIPTS</name>
<t>This document derives from <xref target="ACTA-RECEIPTS"/> but does not claim byte-level compatibility with every upstream verifier. For Compliance Receipts, the versioned shape in <xref target="wire-version"/>, the signature scope in <xref target="hash-chain"/>, and the anchor and counterparty scopes in <xref target="anchoring"/> and <xref target="counterparty-binding"/> govern. Implementations MUST NOT infer a digest scope or signature encoding merely from the ACTA family name.</t>
<t>The core envelope contains <tt>payload</tt> and <tt>signature</tt>; <tt>anchors</tt> MAY be omitted or an empty array under <xref target="anchoring"/>. Profile members belong inside the signed payload. Flat legacy transport representations are handled under an explicitly selected legacy format and MUST NOT silently change the bytes supplied to signature or chain verification.</t>
<t>The supported signature algorithms and their key representations are defined in <xref target="profile-signatures"/> and <xref target="key-thumbprint"/>. ML-DSA-65 uses <xref target="RFC9964"/>. New profile issuance uses unpadded base64url for <tt>signature.sig</tt>; retained legacy signature strings MUST remain byte-for-byte unchanged. A verifier accepting a legacy encoding MUST report the applicable legacy policy. Re-encoding the same signature bytes can change an anchor or counterparty commitment and MUST NOT be used to repair retained history.</t>
<t>Where this profile tightens an upstream optional field, its type-bound presence rule applies. Unknown signed members remain covered by the signature and are handled by <xref target="extension-fields"/>. A failed mandatory profile check does not imply that the underlying signature is invalid, nor does verification under an older revision establish conformance to this revision.</t>
<t>ACTA-RECEIPTS is an informative antecedent. No conformance requirement depends on its publication or on later changes to that draft. The local field, algorithm, signing-input, trust and type rules are authoritative. Shared field or namespace spellings do not import additional ACTA requirements. Supporting a bare ACTA receipt is a separate format choice and is not required for this profile.</t>
</section><section anchor="canonicalization-scope"><name>Canonicalization Scope</name>
      <t>This section is normative. The canonicalization rule itself (JCS, <xref target="RFC8785"/>) is specified directly by <xref target="RFC8785"/>; 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>This profile restricts digest-covered JSON numbers to exact integers in the closed interval [-(2^53-1), 2^53-1]. This is an Asqav input-domain restriction, not a requirement of <xref target="RFC8785"/>, which also defines fractional-number serialization. Callers MUST represent other exact values as strings or explicitly defined integer-rational pairs. Verifiers MUST apply this profile restriction at the raw-input parse boundary, before a general-purpose parser can lose precision, and report an unsupported or malformed numeric input as unverifiable. An already parsed object cannot demonstrate that the original bytes passed this check. Historical formats with a different numeric domain MUST be evaluated under their documented legacy policy.</t>
      <t>A duplicated member name inside any digest-covered object is a terminal parse failure. An implementation MUST raise it before any hashing, canonicalization or signature check runs, at any nesting depth, and MUST report the receipt unverifiable rather than invalid, because nothing about the receipt was proven false: it could not be read. Last-wins ingest, in which a parser silently keeps the final occurrence, is never conformant here. The rule exists because the two occurrences give two different documents to two readers that both believe they parsed the same bytes, so a signature verified over one of them says nothing about what the other acted on; deferring the check until after canonicalization does not help, since canonicalization has by then already chosen one of the two.</t>
      <t>Object member names MUST be ordered by UTF-16 code unit, as Section 3.2.3 of <xref target="RFC8785"/> requires. A verifier MUST NOT order member names by Unicode code point, and MUST NOT order them by UTF-8 byte sequence. The three orders agree across the whole Basic Multilingual Plane and can diverge when supplementary-plane and high-BMP characters are compared. An implementation that sorts by code point therefore emits a different canonical byte sequence, and so a different digest, for the same receipt.</t>
      <t>Rationale: this is a live interoperability hazard rather than a theoretical one, because the natural implementation in several languages is the incorrect one. Python <tt>sorted</tt> and <tt>json.dumps(sort_keys=True)</tt> order by code point, and Rust and Go string comparison orders by UTF-8 byte sequence, which for this purpose is the same order; ECMAScript string comparison orders by UTF-16 code unit and is already correct. A conformance corpus whose member names are all drawn from the Basic Multilingual Plane cannot distinguish the two, so implementations can agree on every published vector and still disagree on a receipt whose caller-supplied object carries an emoji or supplementary-plane key. Implementers SHOULD test against a vector that carries such a key; <xref target="ASQAV-SDK"/> carries one in its canonicalization corpus (<tt>conformance/vectors.json</tt>) as <tt>asqav-24-jcs-astral-key-order</tt>, together with a negative case presenting the code-point ordering that a conformant implementation MUST NOT produce.</t>
      <t>Conformant JCS implementations serialize the same supported input consistently. Ordinary JSON serializers are not necessarily JCS implementations. The narrower domain above reduces implementation burden; it does not justify asserting that two conformant JCS implementations disagree.</t>
      <t>Tool-version-specific semantic equivalence is OUT OF SCOPE for the chain layer of this profile. The chain layer checks commitments to canonical bytes under its cryptographic assumptions. 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), application-specific approximate numeric comparisons, 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 artifact resolved through <tt>policy_digest</tt> (<xref target="policy-digest"/>) rather than in the chain.</t>
      <t>The chain layer establishes relationships among recorded canonical payloads. It does not establish that the underlying action occurred at the issuer's declared time. Timestamp evidence supplies only the time properties supported by the authenticated construction and trust policy; those properties are reported separately from chain integrity.</t>
      <t>The core envelope has two required members, <tt>payload</tt> and <tt>signature</tt>, and the optional <tt>anchors</tt> member. Signed content lives inside <tt>payload</tt>. The signature input is the receipt's canonical payload; a chain link commits the predecessor's canonical payload. Anchor and counterparty commitments cover the core envelope with the <tt>anchors</tt> key removed, retaining the exact signature string. Legacy transports are separately identified and never silently normalized into this framing before verification.</t>
    </section><section anchor="field-profile"><name>Receipt Field Profile</name>
      <t>This section defines the fields and explicit upstream overrides used by this profile. The requirements below, including the version and legacy rules, govern profile verification.</t><t>The core JSON envelope has REQUIRED <tt>payload</tt> and <tt>signature</tt> members. The signature object contains <tt>alg</tt>, <tt>kid</tt> and <tt>sig</tt>. New profile issuance encodes <tt>sig</tt> as unpadded base64url under <xref target="RFC4648"/>. Historical encodings are accepted only under an explicit legacy policy and retain their exact committed strings. An OPTIONAL <tt>anchors</tt> array holds the proof objects defined in <xref target="anchoring"/>. A storage projection MUST preserve the signed and committed bytes; it MUST NOT repair historical receipts by renaming, re-encoding or reconstructing authenticated content.</t><section anchor="profile-signatures"><name>Signature Object and Algorithm Contract</name><t>The core JSON <tt>signature</tt> is an object with three REQUIRED string members: <tt>alg</tt>, <tt>kid</tt> and <tt>sig</tt>. <tt>kid</tt> is a nonempty key-selection hint, subject to independent issuer authorization under <xref target="issuer-id"/>. New issuance under this revision MUST use <tt>alg="ML-DSA-65"</tt>; a conforming verifier MUST implement that algorithm. The public key is an AKP JWK with <tt>kty="AKP"</tt>, <tt>alg="ML-DSA-65"</tt> and unpadded-base64url <tt>pub</tt> under <xref target="RFC9964"/>. The public key is 1952 octets and the signature is 3309 octets under <xref target="FIPS204"/>.</t><t>The algorithm choice above carries an interoperability cost that implementers need stated plainly. A verifier that implements only the mandatory-to-implement signature baseline of <xref target="ACTA-RECEIPTS"/>, which is Ed25519 under <xref target="RFC8032"/>, will not validate ML-DSA-65 receipts issued under this revision. That upstream draft lists ML-DSA-65 as RECOMMENDED rather than mandatory; what this profile adds is the <xref target="RFC9964"/> algorithm string and AKP JWK form, the <xref target="key-thumbprint"/> binding, and the selection of ML-DSA-65 for the reference platform.</t><t>The JSON signing input is the UTF-8 JCS serialization of the complete <tt>payload</tt> object. Use pure ML-DSA with an empty context string, not HashML-DSA and not an extra SHA-256 prehash. <tt>sig</tt> is the resulting signature encoded as unpadded base64url under <xref target="RFC4648"/>. COSE and JWS use their own protected framing and signing-input rules under <xref target="RFC9964"/>, <xref target="RFC9052"/> and <xref target="RFC7515"/>; a JSON signature MUST NOT be reused as a framed signature without the required signing operation.</t><t>A separately selected historical format MAY accept Ed25519 under <xref target="RFC8032"/> or another explicitly documented historical algorithm. That policy MUST specify the identifier, key representation, original signing input and original signature encoding; acceptance is reported as historical verification, not new-revision conformance. Unknown or unsupported algorithms are unverifiable. A verifier MUST NOT select an algorithm from signature length, <tt>kid</tt> spelling or successful trial verification, and MUST NOT downgrade after a failed check. Unsigned algorithm metadata is interpreted only within the independently authorized key/algorithm policy.</t><t>Unsupported ML-DSA-65 is reported as an unverifiable signature axis; antecedent-format support alone cannot satisfy this requirement.</t></section><section anchor="common-fields"><name>Common Payload Fields</name>
        <section anchor="wire-version"><name>v (No Upstream Equivalent)</name>
        <t>REQUIRED. <tt>v</tt> is a wire-version integer identifying the receipt shape a verifier should read; its value under this document is <tt>1</tt>. It is the first member a verifier reads, because it fixes the shape under which every other member is interpreted. An issuer conforming to this document MUST emit <tt>v</tt> on every Compliance Receipt. It is server-built in the sense of <xref target="key-thumbprint"/>: a caller-supplied value MUST be dropped before signing.</t>
        <t>The version member is inside the signed payload in the core envelope, for both payload and hash modes. It MUST be authenticated before its claims are trusted. A flat legacy API response is a distinct transport representation; a verifier MAY support it through an explicit, documented adapter preserving its original signed bytes. The presence of a null payload is not authority to guess the signature scope.</t>
        <t>A verifier MUST report an unsupported version as unverifiable and MUST NOT guess its shape. The reference source inspected for this reconciliation emits <tt>v</tt>=1 with the <tt>payload_digest</tt> shape defined in <xref target="payload-digest"/>. The corpus's version-2 signer canary does not by itself establish a released version-2 production contract. A new emitted version requires a complete shape definition and migration evidence before release.</t>
        <t>Absence is a distinct case from an unrecognised value, and it is the case an implementer meets first, because every receipt issued under a revision preceding this one carries no <tt>v</tt>. A receipt carrying no <tt>v</tt> member is not a Compliance Receipt of this document. It is either a receipt of another format, the absence being what distinguishes the two wire formats under the interoperability note of <xref target="hash-chain"/>, or a receipt issued under an earlier revision of this profile. A verifier MAY process such a receipt under the rules of that earlier revision, and MUST NOT report it as <tt>verified</tt> under this document. A verifier MUST NOT infer version <tt>1</tt> from absence: inferring it would erase the only signal separating this profile's receipts from a bare upstream receipt.</t>
      </section>
      <section anchor="wire-mode"><name>mode (No Upstream Equivalent)</name>
        <t>REQUIRED. <tt>mode</tt> records how the Action was captured: <tt>payload</tt> or <tt>hash</tt>. It does not select the enclosing wire shape. In a Compliance Receipt it appears inside the signed <tt>payload</tt> object, which can carry either value. A verifier claiming conformance to this profile MUST determine the expected member set from the mode and the enclosing wire shape before applying the checks of <xref target="mandatory-checks"/>. A successful signature check alone does not establish that conformance.</t>
        <t><tt>payload</tt> means the issuing platform computes the Action-context digest. The signed payload carries <tt>action_type</tt>, <tt>timestamp</tt>, and <tt>payload_digest</tt>, in addition to the common profile members. The <tt>context</tt> member is OPTIONAL: the platform may receive a context without carrying it in the receipt. In the reference signing path, <tt>payload_digest.hash</tt> is SHA-256 over the canonical caller-supplied context, or over the empty object <tt>{}</tt> when no context was supplied. Omission of <tt>context</tt> from the receipt does not mean that the caller supplied an empty object. A verifier cannot recompute the digest from that receipt alone when <tt>context</tt> is absent or JSON <tt>null</tt>, and that absence is not a failure of the recomputation check. When a non-null <tt>context</tt> is carried, it MUST reproduce the committed digest under <xref target="mandatory-checks"/> and MUST observe the content restrictions of <xref target="privacy"/>.</t>
        <t><tt>hash</tt> means the caller supplied a fingerprint instead of the Action context. A Compliance Receipt with this mode carries <tt>hash</tt>, <tt>hash_algo</tt>, and <tt>server_timestamp</tt> inside its signed payload, alongside the common profile members, including <tt>v</tt>, <tt>mode</tt>, <tt>action_id</tt>, <tt>agent_id</tt>, <tt>org_id</tt>, <tt>policy_digest</tt>, <tt>decision</tt>, and <tt>payload_digest</tt>. Its <tt>metadata</tt> member is optional. The reference platform emits neither <tt>context</tt> nor <tt>action_type</tt> on this path. The <tt>hash</tt> member carries the caller's self-describing fingerprint; <tt>payload_digest.hash</tt> carries its unprefixed digest value. Without a carried context the recomputation check does not apply. The mode does not exempt a Compliance Receipt carrying a non-null context from the consistency check in <xref target="mandatory-checks"/>.</t>
        <t>For interoperability, the reference SDK also accepts flat hash signature receipts whose <tt>payload</tt> is JSON <tt>null</tt>. Their signed input is an eleven-member object: <tt>v</tt>, <tt>mode</tt>, <tt>hash</tt>, <tt>hash_algo</tt>, <tt>metadata</tt>, <tt>server_timestamp</tt>, <tt>action_id</tt>, <tt>agent_id</tt>, <tt>org_id</tt>, <tt>policy_digest</tt>, and <tt>policy_decision</tt>. The SDK's flat-path structure check rejects an absent or null value for every member except <tt>policy_digest</tt>; that member may be absent or null and is reconstructed as null in the signing input. This compatibility rule applies to the flat signing input. It does not require <tt>policy_decision</tt> on the nested Compliance Receipt, which uses <tt>decision</tt>, or make <tt>metadata</tt> mandatory there. Acceptance of a flat signature receipt does not establish this profile's chain and anchor requirements.</t>
        <t>Implementation note: the reference Python SDK's <tt>verify_receipt_offline()</tt> entry point uses the native oracle adapter, which enforces the member set on its flat hash path. For a nested payload, that adapter delegates to the common structure check without deriving a mode-specific set. The standalone <tt>verify_receipt.py</tt> artifact performs no mode-dependent member-set validation. Neither implementation's successful result establishes conformance to the full member-set requirement above; that requirement binds any verifier claiming conformance to this profile.</t>
      <t><tt>action_type</tt> and <tt>tool_name</tt> are JSON strings naming the operation and tool respectively, with the presence conditions stated for the selected mode and receipt type. Payload-mode <tt>timestamp</tt> is an RFC 3339 string with an explicit timezone recording the issuer's signing-time assertion. It is distinct from the original Action descriptor timestamp in <xref target="action-ref"/>. In version-1 payload mode, absent <tt>hash_algo</tt> means <tt>sha256</tt>; hash mode requires the member. An explicitly supplied unsupported value is not absence and MUST NOT trigger that default.</t></section>
      <section anchor="type"><name>type</name>
          <t>Compliance Receipts MUST set <tt>type</tt> to a value registered in the Compliance Receipt Type Namespaces Registry of <xref target="iana-type-namespaces"/>, or to an extension namespace registered for use with this profile. That registry, not this paragraph, is the authoritative vocabulary: it carries <tt>protectmcp:decision</tt>, <tt>protectmcp:restraint</tt> and <tt>protectmcp:lifecycle</tt> together with <tt>protectmcp:acknowledgment</tt>, <tt>protectmcp:observation</tt> and their sub-namespaces, so a verifier that treats the first three as the whole set rejects receipts this profile defines.</t>
        <t>A selected type uses the common fields of <xref target="common-fields"/>, the mode-bound fields of <xref target="wire-mode"/>, the decision/policy rules of <xref target="decision-fields"/> and its explicitly named extension rules in <xref target="iana-type-namespaces"/>. No additional field is required solely because the type spelling also appears in ACTA. In particular, that spelling does not implicitly add a manifest version or lifecycle event discriminator. A separately selected extension that requires such a field must define it explicitly.</t> <t>The <tt>protectmcp</tt> namespace and every sub-namespace under it are reserved to this document and are not available for third-party registration. A verifier that cannot resolve a receipt's <tt>type</tt> against the registry of <xref target="iana-type-namespaces"/> MUST therefore distinguish two cases, because they are not the same finding and collapsing them hides both.</t> <t>A verifier resolves a type against the initial entries defined by the selected revision of this profile and the additions authorized by the selected registry edition. A <tt>protectmcp:</tt> value absent from that applicable vocabulary is a non-conformance of the receipt: report <tt>unverified</tt> with <tt>failure_class</tt> <tt>invalid</tt> under <xref target="verdict-vocabulary"/>. Absence from an older or incomplete local registry copy alone does not establish that mismatch. If the verifier lacks the applicable vocabulary, report the type-resolution axis as <tt>unverifiable</tt> and derive the <tt>unverified</tt> summary and <tt>failure_class</tt> under <xref target="verdict-vocabulary"/>, identifying the missing profile or registry revision. This distinction preserves the normative initial entries in <xref target="iana-type-namespaces"/> and does not authorize third-party use of a reserved name. An unknown value outside the <tt>protectmcp</tt> namespace is the opposite case: it MUST be reported as an unregistered namespace and MUST NOT be treated as a failure, because a registry that has not yet caught up with a legitimate third-party extension must not turn that party's valid receipts into invalid ones. Such a receipt terminates in <tt>unverified</tt> with <tt>failure_class</tt> <tt>unverifiable</tt>. A registered value that this verifier has not implemented is also <tt>unverifiable</tt>, and a report SHOULD name it as a gap in the verifier rather than a defect of the receipt.</t> <t>In none of these cases may the verifier return <tt>verified</tt> or <tt>verified_keyed</tt>, and in none of them is the finding a signature or binding failure: the cryptography of such a receipt may be entirely sound. A verifier MUST report the selected profile revision and the registry edition it resolved against, or state that the required edition was unavailable. This identifies the vocabulary used for the result without implying that an older local copy establishes the contents of a newer edition.</t></section>
        <section anchor="issued-at"><name>issued_at</name>
          <t>REQUIRED in this profile. The value MUST be an RFC 3339 timestamp with an explicit UTC offset. The producing system MUST source the value from a clock synchronized to a recognized time authority and MUST NOT backdate it. Verifiers MUST reject receipts whose <tt>issued_at</tt> is more than 300 seconds ahead of the verifier's own clock under this profile's future-time rule. A receipt's age alone does not establish cryptographic invalidity. Historical verification applies the selected issuance revision, relevant key authorization and revocation evidence, and documented appraisal-time policy; it does not guarantee a passing result. A retention obligation is neither a maximum cryptographic age nor proof that retained evidence is sufficient. Action freshness and retention are evaluated separately.</t>
        </section>
        <section anchor="issuer-id"><name>issuer_id</name>
          <t><tt>issuer_id</tt> is REQUIRED and identifies the issuing principal in the selected profile. It is an opaque, stable identifier. The trust policy binds that principal to its authorized signing keys, responsible organization and role. A principal identifier is not itself proof of a legal entity's identity. Implementations MUST NOT infer authority from the identifier's spelling, length or apparent namespace.</t><t><tt>signature.kid</tt> identifies candidate key material; it is distinct from the issuer's identity. This profile does not require the two strings to be equal for new issuance. Historical receipts that used equality remain interpretable under their issuance policy. The verifier MUST authenticate the key-to-issuer relationship independently, check the permitted algorithm and key purpose, and use a signed <tt>key_thumbprint</tt> when present to constrain key selection. The JSON signature object's metadata is outside the signed payload; a <tt>kid</tt> alone is not an authenticated authority claim.</t><t>A trusted export or an independently authenticated directory can supply historical keys. Conflicting authoritative records or unresolved ambiguity make key authorization unverifiable; the verifier MUST NOT prefer a caller-supplied key merely because it appears in an Audit Pack. Multiple rotated keys under an issuer are permitted when key selection and historical authorization are unambiguous. Current directory contents alone are not proof of past authorization.</t><t>An organization MAY publish an LEI under <xref target="ISO17442"/> or a DID under <xref target="W3C-DID"/> in its identity metadata. This profile does not require a person or an organization to disclose a tax identifier in each receipt. The example's synthetic identifier is illustrative and must not be used as a production trust anchor. Existing identifiers and signed history MUST NOT be rewritten to match a later naming convention.</t><t>A <tt>kid</tt> is an unauthenticated lookup hint and may match multiple keys. Implementations MUST NOT assume it is globally unique or equal to <tt>issuer_id</tt>; ambiguity is resolved only through the authorized key set, algorithm, signed thumbprint when present and issuance policy.</t></section>
        <section anchor="payload-digest"><name>payload_digest (OPTIONAL upstream, REQUIRED in this profile)</name>
          <t><tt>payload_digest</tt> is a REQUIRED JSON object containing REQUIRED <tt>hash</tt> and <tt>size</tt> members and an OPTIONAL <tt>preview</tt>. <tt>hash</tt> is exactly 64 lowercase hexadecimal characters, without a <tt>sha256:</tt> prefix. <tt>size</tt> is a nonnegative integer within the numeric domain of <xref target="canonicalization-scope"/>; it counts the exact input octets covered by the digest. It is not the encoded digest length. A producer MUST NOT invent zero as a substitute for an unknown input length. A hash-mode caller must supply the original length if a conforming descriptor is to be issued.</t><t>The input and algorithm follow <xref target="wire-mode"/> and <xref target="verdict-vocabulary"/>: in payload mode, hash the canonical context. In hash mode, use the input defined by the caller's identified fingerprinting contract, which may include a wrapper; <tt>size</tt> counts that input's bytes. Use the defined keyed construction when <tt>hash_algo</tt> selects it. When a non-null context is carried, the additional consistency check of <xref target="mandatory-checks"/> applies. <tt>preview</tt>, when present, is a JSON string of at most 256 Unicode scalar values, subject to <xref target="privacy"/>. It is optional display material, never an input from which the full digest may be inferred. Its presence cannot replace retained required evidence. Missing required input makes recomputation unverifiable; a demonstrated digest or length mismatch is invalid. Historical descriptors retain their actual version and committed bytes.</t></section><section anchor="action-ref"><name>action_ref (OPTIONAL upstream, REQUIRED in this profile)</name>
          <t><tt>action_ref</tt> is REQUIRED and is the JSON string <tt>sha256:</tt> followed by 64 lowercase hexadecimal characters. It commits an Action descriptor A containing exactly four members: <tt>agentId</tt>, <tt>actionType</tt>, <tt>scopeRequired</tt> and <tt>timestamp</tt>. The first two are strings identifying the actor and operation in the selected action vocabulary; <tt>timestamp</tt> is the original action timestamp as an RFC 3339 string. <tt>scopeRequired</tt> is an array of strings identifying the required scopes. Before canonicalization, sort that array by UTF-16 code-unit order; preserve repeated values and string contents without normalization. No other members belong in A.</t><t>Compute <tt>action_ref = "sha256:" || lowercase_hex(SHA-256(UTF8(JCS(A))))</tt>, with JCS and the input restrictions of <xref target="canonicalization-scope"/>. Retain A in the authorized evidence-resolution material, with its vocabulary and construction revision. Parties correlating the same Action MUST use the same original descriptor; a verifier MUST NOT substitute a later receipt timestamp or infer <tt>scopeRequired</tt> from a policy name. Missing descriptor evidence makes this recomputation unverifiable. It does not authorize guessing an empty array. An opaque action ID, <tt>payload_digest.hash</tt> and <tt>action_ref</tt> have different constructions and MUST NOT be substituted for one another.</t><t>This makes the inherited four-member construction explicit. The typing and ordering rules above resolve previously underspecified cases for new issuance. A historical action reference is evaluated under its documented original construction; its committed value MUST NOT be rewritten. The digest binds the descriptor, not a peer receipt envelope, execution outcome or delivery acknowledgment.</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 <xref target="EU-AI-ACT"/>. <tt>sandbox_state</tt> is a JSON string describing observed OS-level containment, with exactly three permitted values: <tt>enabled</tt>, <tt>disabled</tt> or <tt>unavailable</tt>. The declaration does not by itself prove containment. 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) 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><tt>iteration_id</tt> is REQUIRED for multi-step agent workflows and is a stable JSON string identifying the logical task across its receipts. An OPTIONAL <tt>session_id</tt> is an opaque JSON string used for transport-session correlation. They have different scopes; neither is an authenticated identity credential. A Compliance Receipt MAY carry both.</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 (earlier receipts are evaluated under their selected revision; absence alone is allowed only where that revision permits it); 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. For an ML-DSA key the  <tt>kty</tt> is  <tt>AKP</tt> and its required members are  <tt>kty</tt>,  <tt>alg</tt> and  <tt>pub</tt>, per  <xref target="RFC9964"/>, whose lexicographic order is  <tt>alg</tt>,  <tt>kty</tt>,  <tt>pub</tt>; so the thumbprint input for an ML-DSA-65 key is exactly  <tt>{"alg":"ML-DSA-65","kty":"AKP","pub":"..."}</tt>.</t><t>The  <tt>pub</tt> member is base64url WITHOUT padding. That encoding is relevant rather than cosmetic: the same key bytes rendered in the standard base64 alphabet produce a different digest, which no third-party verifier reproduces. 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 signed thumbprint binds the receipt to exact public-key material. A mismatch is an invalid key-binding check. A matching thumbprint does not independently authenticate the issuer: an attacker can create a different key and sign a different receipt containing its thumbprint. The verifier still establishes issuer authorization under <xref target="issuer-id"/>. Absence is evaluated under the selected revision and legacy policy, and is reported as an unchecked key-binding axis where allowed.</t></section>

        <section anchor="seq"><name>Sequence Counter</name>
          <t><tt>seq</tt> is an OPTIONAL positive integer within the profile's safe-integer range. It starts at 1 at genesis and increases by one for each receipt in the same chain. The chain scope follows <xref target="hash-chain"/>: the core profile defines one linear chain per issuing principal, not two independent counters under that principal. The producer assigns the counter and predecessor in the same serialized emission operation and ignores a caller-supplied counter.</t><t>A verifier compares counters only within the identified chain and format contract. A present non-integer, boolean or non-positive value is malformed. A repeated, decreasing or unexpectedly skipped value fails sequence continuity; it establishes an inconsistency, not whether its cause was withholding, a producer defect or missing input. Missing legacy counters leave continuity unchecked. Unsupported cross-format continuity is unverifiable unless an explicit migration contract supplies it.</t><t>A sequence gap can expose missing entries within the observed series. A valid prefix cannot expose an omitted tail without a trusted later checkpoint, expected coverage interval or independently retained later receipt. No counter proves that actions without receipts were captured. The report states the observed interval and available checkpoint evidence.</t></section>
      </section>

      <section anchor="decision-fields"><name>Decision Receipt Fields (type protectmcp:decision)</name>
        <t>A <tt>protectmcp:decision</tt> receipt records a policy evaluation and uses <tt>decision</tt> <tt>allow</tt>, <tt>deny</tt> or <tt>rate_limit</tt>. It carries the policy digest and the tool identifier required by this type. The <tt>observation</tt> value is not valid for this type.</t><t>When no policy was evaluated, the producer either declines to issue a receipt or uses a defined lifecycle or observation type with <tt>decision</tt> <tt>observation</tt> and the no-policy rule in <xref target="policy-digest"/>. An internal <tt>policy_decision</tt> value of <tt>none</tt> maps to that observation state only at the documented emission boundary. Export of a retained receipt preserves its existing signed values. Each lifecycle subtype's own presence and decision rules apply.</t><t><tt>tool_name</tt> is REQUIRED for <tt>protectmcp:decision</tt>. A signed decision is evidence of the producer's recorded evaluation, not independent proof that the policy was appropriate or correctly executed.</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</name>
          <t><tt>policy_digest</tt> is REQUIRED. When a policy was evaluated, its value is <tt>sha256:&lt;64 lowercase hex chars&gt;</tt>, committing the retained policy artifact under its defined canonical-byte rule. The verifier recomputes that digest where required by the selected evidence policy. Unavailable required content is unverifiable; a demonstrated mismatch is invalid.</t><t>The defined no-policy lifecycle and observation paths carry JSON null and <tt>decision</tt> <tt>observation</tt>. Null does not assert that a policy passed. Historical receipts with a documented no-policy sentinel digest retain that issuance-version interpretation and the referenced sentinel artifact; implementations MUST NOT rewrite those signed values. Null is not permitted for a decision that claims policy evaluation.</t></section>
      </section>

      <section anchor="hash-chain"><name>Hash-Chain Linkage (OPTIONAL upstream, REQUIRED in this profile)</name>
        <t>Each Compliance Receipt MUST contain <tt>previousReceiptHash</tt> in its signed payload. At genesis the value is 64 zero characters. Otherwise it is the 64-character lowercase hexadecimal encoding of SHA-256(JCS(R)), where R is the complete signed payload of the immediately preceding receipt emitted under the same <tt>issuer_id</tt>. The literal member name is case-sensitive; aliases are not accepted. The digest excludes the predecessor's signature object and anchors.</t><t>The JSON receipt signature separately authenticates its own payload under <xref target="profile-signatures"/>. COSE and JWS carry that payload using their respective protected signing constructions. A chain verifier MUST recompute the predecessor-payload digest, verify each applicable receipt signature and report the two checks separately. A link cannot replace verification of the predecessor's signature.</t><t>Informative comparison: the cited revision of <xref target="ACTA-RECEIPTS"/> specifies a chain over the complete signed receipt, including its signature. This profile instead links the predecessor's signed content. Where a peer's signature value must also be committed, <xref target="counterparty-binding"/> defines the separate envelope commitment. This comparison imports no additional ACTA requirements.</t><t>New streams under this revision use the local construction above. Previously signed or anchored history MUST NOT be rewritten to change its scope. A verifier that supports a different historical format selects its actual documented construction explicitly and reports that format; it MUST NOT silently substitute another digest scope.</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 REQUIRED <tt>v</tt> member of <xref target="wire-version"/>: a receipt of this profile carries <tt>v</tt>, while the cited ACTA revision carries none. Version is interpreted within an explicitly selected format; its presence alone is not a universal format identifier. The <tt>anchors</tt> key MUST NOT be used for this purpose, because <xref target="anchoring"/> makes an absent <tt>anchors</tt> member conformant and an absent member distinguishes nothing; a present <tt>anchors</tt> key is a corroborating signal and never a decisive one. The <tt>type</tt> namespace MUST NOT be used either: it is shared with the upstream format, and the published <tt>acta-02-chain-link</tt> vector carries a <tt>payload.type</tt> of <tt>protectmcp:decision</tt>, so a prefix test on <tt>type</tt> declines precisely the upstream receipt it is meant to admit. 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>
      <t>Ed25519 uses <xref target="RFC8032"/>. JWK algorithm identifiers are interpreted with <xref target="RFC7518"/> and the profile-specific algorithm rules. A verifier MUST NOT infer an algorithm from the key identifier alone or silently substitute another algorithm.</t></section><section anchor="anchoring"><name>Anchoring (No Upstream Equivalent)</name>
<t>The commitment formula in this section applies to the core JSON framing. This revision does not define a complete COSE or JWS anchor transport. A separately selected transport profile must specify its exact commitment bytes and proof carriage; a verifier MUST NOT apply the JSON formula to non-JSON bytes or infer full anchor conformance from a counterparty-binding digest.</t><t>Issuers SHOULD obtain timestamp evidence over each receipt, individually or through a batch with a retained inclusion proof. Synchronous RFC 3161 acquisition SHOULD be available where the deployment can support it. Best-effort TSA availability is not a hard guarantee. A selected regulatory-evidence profile or relying-party policy MAY impose a stricter anchor floor; that floor MUST name its authority and applicability and MUST NOT be presented as the literal wording of a law without the supporting provision.</t>
<t>For both <xref target="RFC3161"/> and <xref target="OPENTIMESTAMPS"/>, the commitment input is SHA-256(JCS(envelope_minus_anchors)), with the <tt>anchors</tt> key removed completely and the original <tt>payload</tt> and <tt>signature</tt> retained. Setting the key to null or an empty array in the commitment input is incorrect. Stored signed and anchored bytes MUST NOT be rewritten during an encoding or schema migration. An anchor entry is a VALID ANCHOR when its value bytes cryptographically re-verify against that commitment input at verification time; an entry whose bytes do not re-verify, or whose proof has not yet been produced, is not a valid anchor, and a verifier MUST NOT derive validity from the presence of anchor metadata alone.</t>
<t>An issuer-operated timestamp is not an independent witness. Independently operated evidence MAY arrive later; the verifier MUST report the observed evidence and its validation state separately from the issuer's signature. An OpenTimestamps commitment that has been submitted to a calendar but has not yet upgraded to a Bitcoin block attestation is pending. This profile sets the upgrade bound at seven days from issuance; it is a profile-imposed bound, not a property of the OpenTimestamps protocol, whose calendar-to-block time depends on the calendar operator's publication interval. When the selected policy requires such an upgrade, exceeding the bound fails that policy; it does not retroactively make the payload signature invalid. RFC 3161 responses, OTS proofs and aggregate inclusion paths MUST be retained for the applicable evidence-retention period.</t>
<t>The <tt>anchors</tt> array MAY be absent or empty, both meaning that no anchor evidence was presented. A null value is malformed under this revision; an explicitly selected legacy format may define a different rule. Absent evidence MUST NOT be reported valid. Whether it prevents full verification depends on the required axes of the selected profile and relying-party policy. Verifiers MUST still report other independently evaluable axes.</t>
<t>Each anchor entry has a required <tt>type</tt> of <tt>rfc3161</tt> or <tt>opentimestamps</tt> and a required <tt>value</tt> holding base64-encoded TimeStampResp DER or OTS proof bytes respectively. An optional <tt>status</tt> of <tt>anchored</tt>, <tt>pending</tt> or <tt>failed</tt> is operational metadata. Optional <tt>anchor_block_hash</tt>, <tt>tsa_url</tt> and <tt>operator_id</tt> are likewise metadata. No metadata value establishes proof validity, a trust root or operator independence. Verifiers MUST validate the cryptographic evidence against independently configured trust material. They MUST NOT fetch a caller-supplied URL as a trust decision. A historical qualified-timestamp claim requires the applicable certificate, time, revocation and trusted-list policy, not only a root certificate.</t>
<t><tt>witness_policy</tt> is an OPTIONAL signed-payload object. It contains a REQUIRED positive integer <tt>required</tt> and a REQUIRED nonempty array <tt>witnesses</tt> of distinct operator identifiers. <tt>required</tt> MUST NOT exceed the array length. Operator identifiers name trust-policy records, not anchor-type labels. Each counted entry MUST re-verify over the committed bytes and resolve to an independently trusted operator in that policy. Multiple entries or different protocols controlled by one operator count once. An unresolved identity or independence relationship is unverifiable and MUST NOT be counted.</t>
<t>When <tt>witness_policy</tt> is present, the verifier MUST recompute the count and compare it with the signed threshold. It MUST NOT trust a producer's <tt>witness_quorum_met</tt> flag. When the member is absent, the receipt-declared policy axis is <tt>undeclared</tt>, not satisfied. The relying party's external floor is evaluated separately: a weak or absent producer policy cannot waive it. The governance document may publish issuance defaults, but changing that document cannot change the policy committed by an existing receipt.</t>
<t>This reverses the prior -09 working text's declaration-only policy. Both the threshold and the selected operator set must travel under the signature so a holder can evaluate the declaration without trusting a later mutable governance document. Legacy declarations absent from the signed bytes remain unavailable to that evaluation and MUST NOT be reconstructed as authenticated claims.</t>
<t>The optional signed <tt>beacon_ref</tt> and its construction-specific limits remain defined in <xref target="beacon-evidence"/>. A public round number or issuer-supplied observation time alone establishes no lower time bound. Beacon evidence is separate from timestamp anchoring and does not satisfy a witness quorum.</t>
<t anchor="beacon-evidence">The OPTIONAL signed-payload member <tt>beacon_ref</tt> commits to a cached public randomness beacon response. In the reference platform it carries the five members registered in <xref target="iana-extension-fields"/>. A verifier seeking a lower time bound must independently authenticate the carried signature for the declared chain and round, using trusted chain parameters and the applicable drand scheme (<xref target="DRAND-SPEC"/>). A receipt's commitment to an unpredictable, authenticated beacon signature can support such a bound under the beacon's unpredictability and timing assumptions; the round number, chain identifier, or issuer's <tt>observed_at</tt> assertion alone cannot. The reference platform's structural check does not authenticate the BLS signature, and the reference SDK does not perform that authentication. A successful receipt-verification result therefore does not establish a beacon-derived time bound. The beacon is separate from the anchor evidence and does not satisfy an anchor or witness requirement.</t>
      <t>RFC 3161 certificate identification uses the applicable update in <xref target="RFC5816"/>. Successful token parsing is separate from certificate-path, historical validity, message-imprint and trust-policy checks.</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 common fields defined in <xref target="common-fields"/>: (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-ADMT"/>, there is no statutory risk-management-programme document to reference: the reenacted Part 17 carries no such duty. The documentation is instead whatever the Deployer maintains to satisfy the pre-use notice of Section 6-1-1704(1) and, where the Deployer is also a developer, the technical documentation of Section 6-1-1702</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 and business associates within the scope 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 this document or its local registries. No moving external field list is incorporated. Implementations defining extension fields SHOULD register them in the registry described in <xref target="iana"/>.</t>
        <t>A verifier that encounters a signed-payload member it does not recognise MUST preserve it byte-for-byte, because it lies inside the signature scope of <xref target="hash-chain"/> and dropping or rewriting it destroys the signature. The verifier MUST ignore the member for the purpose of determining conformance and MUST NOT report its presence as a failure or as a reason to withhold a verdict. This rule does not apply to <tt>v</tt>: an unrecognised wire version is not an unrecognised member, and <xref target="wire-version"/> governs it. An unrecognised member carries no protectmcp semantics, and a claim about such semantics is reported under <xref target="iana-type-namespaces"/> rather than inferred from the member name.</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 envelope-minus-anchors object 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> binds an Action descriptor under <xref target="action-ref"/>; it does not bind the peer receipt envelope; <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. Base64url-encoded SHA-256 digest computed over A's signed envelope with the <tt>anchors</tt> array excluded, that is over the envelope-minus-anchors object of <xref target="anchoring"/>, which includes A's signature bytes. The digest input is framing-specific:</t>
              <ul>
                <li>For JSON framing, preserve A's parsed payload values and exact signature object, remove the <tt>anchors</tt> member, and apply JCS once to the resulting two-key envelope. Do not normalize strings, change payload values, or decode and re-encode the signature string. The digest input is the UTF-8 JCS encoding of <tt>{"payload": A.payload, "signature": A.signature}</tt>. This is the JSON anchor commitment input defined in <xref target="anchoring"/>.</li><li>For a separately selected COSE framing, commit the exact retained COSE signed-object bytes. Do not re-encode an already signed object merely to change map ordering.</li><li>For a separately selected JWS framing, commit the exact retained JWS Compact Serialization bytes. Do not reconstruct its header or payload encoding.</li></ul>
              <t>The digest algorithm is SHA-256 (mandatory-to-implement). The encoding MUST be base64url without padding per <xref target="RFC4648"/> Section 5, the single alphabet of <xref target="field-profile"/>, for receipts issued on or after the publication date of this revision. A receipt issued before that date MAY carry the standard base64 alphabet of <xref target="RFC4648"/> Section 4; a verifier MUST decode either alphabet, with or without padding, and compare the decoded 32 digest bytes rather than the encoded strings, so a pre-cutover receipt does not fail on encoding alone. 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>Excluding the <tt>anchors</tt> array is deliberate, and three reasons govern it. Anchors are OPTIONAL and change after issuance under this profile's own rules: <xref target="anchoring"/> permits late attachment within a documented bound, an <xref target="OPENTIMESTAMPS"/> proof upgrades from a calendar attestation to a Bitcoin block attestation, and an issuing platform MAY add a qualified external token later, so a digest that covered them would pin a passing state of A's receipt rather than A's signed bytes and would break as soon as A's anchoring completed. The non-JSON binding constructions are separate; this revision does not define their complete anchor transport. For the core JSON framing, one digest input serves both the anchor commitment of <xref target="anchoring"/> and the acknowledgment of this section, so an anchor and an acknowledgment commit to the same bytes and every verifier computes one value rather than two.</t>
              <t>The binding preserves the peer's selected framing and exact committed representation. JSON, COSE and JWS can produce different commitment bytes for related content. A verifier MUST NOT transcode before checking a binding. A digest mismatch establishes disagreement with the commitment; its cause must not be asserted without further evidence.</t><t>This revision fixes the binding digest to SHA-256. Another digest construction requires an explicitly versioned binding specification; an out-of-band algorithm label MUST NOT change this field's interpretation.</t>
            </dd>
            <dt><tt>scope</tt>:</dt>
            <dd>REQUIRED string from this revision onward. The only value defined by this profile is <tt>envelope_minus_anchors</tt>, naming the digest scope stated above. A binding that carries no <tt>scope</tt> member was computed under the three-key text of revisions -04 through -08, whose scope this revision corrects; a verifier MUST report such a binding as unverifiable, legacy scope, and MUST NOT report it as verified or as failed on byte-equality grounds. Where the Audit Pack retains A's envelope exactly as B received it, including A's <tt>anchors</tt> array as B saw it, a verifier MAY verify a legacy binding against that retained snapshot and MUST label the outcome as verified under the legacy scope. A verifier MUST NOT try both scopes and report whichever matches: a digest that matches under a scope the receipt did not declare is not evidence, and trying both would let a mismatch be laundered into a pass.</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 signed envelope as A emitted it, from which the verifier derives the envelope-minus-anchors digest input. 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 layered under the extension-field rules of <xref target="extension-fields"/>) MAY layer on this field.</dd>
            <dt><tt>expect_ack_from</tt>:</dt>
            <dd>OPTIONAL string identifying the expected acknowledging principal. For new issuance, compare it with the acknowledging receipt's authenticated <tt>payload.issuer_id</tt> after validating key authorization. It is not an external <tt>signature.kid</tt> match. Historical key-identifier expectations require an explicitly selected legacy interpretation.</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">
"counterparty_binding": {
  "envelope_hash": "bDqg...v5PE",
  "scope": "envelope_minus_anchors",
  "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 a signed acknowledgment expectation or the selected policy requires it. B MUST compute the commitment using the framing-specific construction in <xref target="counterparty-binding-wire"/>. For JSON, that construction applies JCS to the envelope with anchors removed and the original signature string preserved. Changes to whitespace or member order that preserve the JCS representation do not change the commitment. Where one acknowledgment confirms several peers, each binding is evaluated separately; it does not prove that all peers received identical application data.</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 signed envelope, reduce it to the envelope-minus-anchors object by removing the  <tt>anchors</tt> key, recompute the SHA-256 digest of that object under the scope rule of  <xref target="counterparty-binding-wire"/>, 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. A verifier that has no resolution mechanism available at all, such as an offline verifier with neither an Audit Pack nor a published index, has not performed this check rather than failed it: it MUST report the binding as unverified and MUST NOT report the receipt as verified on the strength of a binding it never resolved. </t><t>An unresolved counterparty binding supplies no verified corroboration. Where <tt>expect_ack_from</tt> is present, the verifier MUST compare it with the acknowledging receipt's authenticated <tt>payload.issuer_id</tt> after establishing the key's authorization for that principal. A demonstrated mismatch is invalid. Legacy key-identifier expectations are handled only under their documented issuance policy.</t><t>The verifier MUST read the <tt>scope</tt> member before recomputing. A binding declaring <tt>envelope_minus_anchors</tt> is recomputed under the rule above. A binding with no <tt>scope</tt> member is a legacy binding under the superseded three-key scope of revisions -04 through -08: the verifier MUST report it as unverifiable, legacy scope, and MUST NOT report it as verified, unless the Audit Pack retains A's envelope exactly as B received it, in which case the verifier MAY recompute against that retained snapshot and MUST label the outcome as verified under the legacy scope. A verifier MUST NOT recompute under both scopes and report whichever matches. A binding declaring a <tt>scope</tt> value this profile does not define is reported unverifiable on the same axis, never verified.</t>
          <t>The holder retains peer envelopes and supporting evidence according to their lawful record-specific policy. Unavailable required peer evidence leaves the binding unverifiable. Chains of several parties use pairwise bindings; a co-signed envelope does not automatically establish the same sequence of acknowledgements.</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 JSON string formatted <tt>sha256:&lt;64 lowercase hex chars&gt;</tt>. It is NOT an object and NOT the shape of <tt>payload_digest</tt>: the two fields are described together elsewhere and they differ on both axes, since <tt>payload_digest</tt> is an object whose <tt>hash</tt> member is unprefixed hexadecimal, while this field is a bare string in the self-describing prefixed form. There is no <tt>size</tt> or <tt>preview</tt> member on this field. 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> follow their own lawful evidence policy under the legal-applicability and privacy rules.</dd>
          <dt><tt>expires_at</tt>:</dt>
          <dd>OPTIONAL RFC 3339 timestamp with an explicit UTC offset, 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 relevant 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 supports emission correlation and replay-candidate flagging but does not prove uniqueness or execution.</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 inputs relevant to any separately applicable modification test, including Article 43 of <xref target="EU-AI-ACT"/> and the intentional and substantial modification definition in Section 6-1-1701(12) of <xref target="COLORADO-ADMT"/>. A configuration change alone does not establish that either legal test is met. 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 its lawful record-specific retention period.</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 the EU and US evidence mappings. 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 fields for evidence about the software associated with an Action: <tt>executable_hash</tt> identifies an artifact, <tt>sbom_digest</tt> commits to an SBOM document, <tt>slsa_provenance_pointer</tt> locates a build attestation, and <tt>supply_chain_pointer</tt> locates transparency-log evidence. An implementation MAY emit any subset. All four fields are covered by the signature scope in <xref target="hash-chain"/>. Signing a digest or locator binds the producer's assertion; it does not by itself authenticate the referenced artifact, prove execution or establish complete dependency coverage.</t>
        <dl>
          <dt><tt>executable_hash</tt>:</dt>
          <dd>OPTIONAL JSON string formatted <tt>sha256:&lt;64 lowercase hex chars&gt;</tt>. For a container, its value is the SHA-256 content digest of the exact platform-specific OCI image manifest identified by the runtime for the executing image, computed over that manifest's bytes under the <eref target="https://github.com/opencontainers/image-spec/blob/v1.1.1/descriptor.md">OCI Image Specification v1.1.1 content-descriptor rules</eref>. It is not a hash of the digest string, a mutable tag lookup, an image-index digest or an assertion about every file in a running container. For a non-container executable, it is SHA-256 over the binary file bytes observed at the resolved execution path. The Audit Pack records the artifact kind and observation method. A file or manifest digest alone does not prove which bytes actually executed. A verifier MAY compare this identity with an authenticated build attestation's subject. A mismatch for the same artifact and digest scope is reported as inconsistent evidence; different scopes require an evidenced mapping and otherwise remain incomparable. A required comparison that is inconsistent or unverifiable prevents full verification under <xref target="verdict-vocabulary"/>.</dd>
          <dt><tt>sbom_digest</tt>:</dt>
          <dd>OPTIONAL JSON string formatted <tt>sha256:&lt;64 lowercase hex chars&gt;</tt>, computed over an SBOM document in CycloneDX JSON or SPDX JSON form. This profile uses the complete document canonicalized under <xref target="RFC8785"/> as the digest input; it does not assume that every edition of either SBOM format defines a common canonicalization algorithm. The Audit Pack manifest MUST identify the format, exact specification version, digest input rule and retained document. The document MUST satisfy JCS input constraints; otherwise this encoding cannot be used. The receipt payload's additional safe-integer restriction does not apply to numbers inside the separately retained SBOM document. Existing receipts using a different declared digest rule retain that rule under an explicit legacy adapter; missing or ambiguous rules are unverifiable and MUST NOT be guessed. The digest commits to the document, not to the accuracy or completeness of its dependency claims.</dd>
          <dt><tt>slsa_provenance_pointer</tt>:</dt>
          <dd>OPTIONAL JSON string carrying an HTTPS URL for a SLSA build provenance attestation about the artifact identified by <tt>executable_hash</tt>. The target SHOULD use the <eref target="https://slsa.dev/spec/v1.0/provenance">SLSA Provenance v1 predicate</eref> in an in-toto Statement v1. Other supported versions require explicit version selection. A verifier checks the attestation signature, the independently authorized signer-builder pair and the subject digest under its selected policy before reporting verified provenance. A URL, a recognized format or the presence of a signature does not establish those checks. Missing required evidence remains unverifiable. The build platform's statements remain bounded by its trust policy and do not prove that the artifact later executed.</dd>
          <dt><tt>supply_chain_pointer</tt>:</dt>
          <dd>OPTIONAL JSON string carrying an HTTPS URL for transparency-log evidence concerning the identified build artifact. An in-toto statement is an attestation format; Sigstore is a signing and verification ecosystem; Rekor is a transparency-log service used by Sigstore. They are not three interchangeable log formats, and this profile gives them no preference order. The Audit Pack identifies the supported log and entry format and retains the evidence needed for verification. A verifier claiming verified log inclusion MUST validate the artifact or attestation binding, inclusion proof and authenticated log checkpoint under its independently configured log trust policy. A locator alone is not inclusion evidence. Unsupported or missing required evidence is unverifiable. Log inclusion does not establish the truth of an attestation, complete capture or independent corroboration of a SLSA statement recorded in that same log.</dd>
        </dl>
        <t>Executable hashes, SBOMs and build attestations can help investigate which software produced a recorded action. Their use here is a profile recommendation. The cited logging and incident-management provisions do not themselves prescribe this particular set of artifacts. Retain each artifact under its lawful evidence policy and report any unavailable input as a verification limit.</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 actually 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 signature binds the producer's recorded assertions, including its asserted <tt>issued_at</tt>. Chain links and optional anchor evidence provide their separately defined integrity and time properties (<xref target="hash-chain"/>, <xref target="anchoring"/>); they do not establish that the acceptance was authored or chained at that exact time. 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 string-equality refusal against <tt>initiator_id</tt> applied to Compliance Receipts (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 Compliance Receipt 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 signed field binds the issuer to the recorded rationale and its asserted <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 RFC 3339 timestamp with an explicit UTC offset, 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 binds the supersession claim together with the asserted <tt>issued_at</tt>; resolution is the verifier's job, and the issuing platform NEVER invalidates the prior receipt: the recorded signed bytes remain unchanged and <tt>supersedes</tt> in the later receipt points to the earlier receipt.</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 producer-supplied commitment. Checking its syntax does not establish that the SARIF artifact exists or existed at the asserted time. 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 binds the asserted reference and <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 binds the asserted correlation pointer and <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 RFC 3339 timestamp with an explicit UTC offset, 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 binds the producer-supplied signals and asserted <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 relevant 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="oversight-ruling"><name>Oversight Ruling Receipts</name>
        <t>This section is normative. It defines the sub-namespace <tt>protectmcp:lifecycle:oversight_ruling</tt> (registered in <xref target="iana-type-namespaces"/>) and the extension fields that appear inside the signed <tt>payload</tt> of a receipt of that type. An oversight ruling receipt records a human ruling made about one or more Actions after those Actions were recorded, and references the receipts it judges. The profile names oversight review in several bindings but, before this revision, defined no record for the ruling itself, so the reviewed and unreviewed cases were indistinguishable on the wire.</t>
        <t>An oversight ruling 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 the <tt>policy_digest</tt> of the sentinel artefact, exactly as <xref target="risk-acceptance"/> does, so the false-attestation honesty rule is preserved: no policy result is asserted by the act of ruling. The type-bound presence rule applies, so a receipt of this type that omits <tt>judged_action_refs</tt> or <tt>ruling</tt> is refused at signing time rather than emitted incomplete.</t>
        <t>The ruling receipt is an ordinary member of the chain, emitted at the time of the ruling. It never rewrites, re-signs or re-anchors the receipts it judges: the judged receipts stand exactly as they were signed, and the ruling is a later, separately signed statement about them.</t>
        <dl>
          <dt><tt>judged_action_refs</tt></dt>
          <dd>REQUIRED on this receipt type. A non-empty JSON array of <tt>action_ref</tt> values identifying the receipts the ruling is about. A verifier MUST resolve every entry against the Audit Pack of <xref target="audit-pack"/> or the chain segment presented alongside the ruling. A reference that does not resolve is a non-conformance OF THE RULING RECEIPT, and MUST NOT be reported as a defect of any judged receipt: an unresolvable reference means the ruling names evidence it did not supply, which says nothing about the receipts that do resolve.</dd>
          <dt><tt>ruling</tt></dt>
          <dd>REQUIRED on this receipt type. One of: <tt>confirm</tt>, the reviewer upholds the recorded outcome; <tt>override</tt>, the reviewer replaces the recorded outcome with a different one; <tt>escalate</tt>, the reviewer refers the matter onward without deciding it; <tt>flag</tt>, the reviewer marks the matter for attention while leaving the outcome standing.</dd>
          <dt><tt>ruling_reason</tt></dt>
          <dd>OPTIONAL machine-readable reason code, under the same discipline as the <tt>reason</tt> code of <xref target="decision-fields"/>.</dd>
          <dt><tt>reviewer</tt></dt>
          <dd>REQUIRED on this receipt type. An object with <tt>principal</tt>, an opaque identifier of the natural person who ruled, which MUST NOT carry a name, an email address or any other direct identifier in clear; <tt>role</tt>, free text naming the reviewer's function; and OPTIONAL <tt>attestation</tt>, an object with <tt>method</tt> (one of <tt>sso</tt>, <tt>hardware_key</tt>, <tt>signed_statement</tt>, <tt>manual_assertion</tt>) and, where <tt>method</tt> is not <tt>manual_assertion</tt>, <tt>evidence</tt> carrying the platform-verified artefact digest.</dd>
        </dl>
        <t>When <tt>attestation</tt> is absent or its <tt>method</tt> is <tt>manual_assertion</tt>, the human-review claim remains unverified. Signature, chain and anchor results are reported separately; the overall summary follows all required axes in <xref target="reporting"/>. If the selected policy requires authenticated human-review evidence, its absence prevents full verification. A signed ruling binds the issuer's assertion and stated time but does not alone establish that a qualified human conducted a review. A verifier MUST NOT report the review as verified solely because the receipt signature passes.</t>
        <t>Bindings. Under <xref target="art26-2"/> an oversight ruling receipt can contribute to evidence of the human-oversight assignment Article 26(2) requires. Under <xref target="co-1705"/> it can contribute to evidence of an opportunity for meaningful human review and reconsideration, and the statutory definition there is deliberately demanding: it requires a reviewer with authority to approve, modify or override, who considers relevant available primary evidence, is trained to conduct the review, DOES NOT DEFAULT TO THE SYSTEM OUTPUT, and has access to enough information to understand the output's intended use, material limitations and categories of inputs, and the principal factors that generated it. The ruling receipt alone cannot establish reviewer training, authority or non-deference; those matters require separate evidence. An oversight ruling receipt therefore evidences that a ruling was recorded and, where an attestation was independently validated, the scoped reviewer-authentication result; the remaining elements of the statutory standard stay the Deployer's own responsibility, and a verifier MUST NOT report them as satisfied solely from the ruling receipt; any separate evaluation identifies its supporting evidence and limitations. Under the NIST AI Risk Management Framework the receipt is evidence toward the MANAGE function.</t>
      </section>

      <section anchor="code-authorship"><name>Code-Authorship Extensions</name>
        <t>This section defines extension fields in the signed <tt>payload</tt> of a <tt>protectmcp:lifecycle:code_authorship</tt> receipt (<xref target="iana-type-namespaces"/>). It records a producer's assertion about a repository change. The receipt uses the no-policy lifecycle path in <xref target="decision-fields"/>, carries <tt>decision</tt>=<tt>observation</tt> and asserts no policy-evaluation outcome. The issuer MUST enforce the type-bound required-field and no-policy rules at signing time and reject use of these fields on an incompatible type.</t><t>The signature binds the recorded assertions; chain links and optional timestamp evidence provide their separately defined integrity and time properties (<xref target="hash-chain"/>, <xref target="anchoring"/>). They do not prove that the change exists, was authored by the named model, was executed at <tt>issued_at</tt>, or is correct, safe, reviewed or buildable. The receipt layer does not fetch the repository or validate the code. The separately selected rederivation feature in <xref target="authoritative-rederivation"/> reports the specific source bytes it actually fetched and recomputed. Required but unavailable rederivation prevents full verification under <xref target="reporting"/>.</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 binds the asserted reference and <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 binds the producer-supplied commit identifier and asserted <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 binds the producer-supplied base identifier and asserted <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 producer-supplied commitment. Checking its syntax does not establish that the change exists or existed at the asserted time. 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 binds the asserted reference and <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 binds the asserted correlation pointer and <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 binds the producer-supplied values and asserted <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>
      <t>Statements in these field definitions and their registry entries that the issuing platform does not fetch, resolve or verify describe ordinary receipt issuance. Separately requested authoritative rederivation follows <xref target="authoritative-rederivation"/> and reports its actual scope and result.</t></section>

      <section anchor="threat-framework"><name>Threat-Framework Taxonomy Extensions</name>
        <t>This section is normative. It defines seven 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 seven 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 nine 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. ATT&amp;CK and ATLAS are VERSIONED catalogues whose identifiers are re-scoped between releases, so a receipt carrying either field SHOULD also carry the catalogue version it drew the identifiers from, either as a version member alongside the array or as a suffix on each value under a convention documented in the Audit Pack metadata. Without it an identifier is only as stable as the reader's assumption about which release was meant. 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, self-declared by the producer. Values MUST be edition-qualified, in the form <tt>LLM01:2025</tt>, and a bare <tt>LLM01</tt> MUST be rejected. The qualifier is relevant rather than decorative: the numbering changed between the 2023 and 2025 lists, so a bare identifier names a different risk depending on which edition the reader assumes. When populated the issuing platform MUST set <tt>framework_mappings_self_declared</tt> to <tt>true</tt>.</dd>
          <dt><tt>owasp_agentic_top10</tt>:</dt>
          <dd>OPTIONAL JSON array of identifiers from the OWASP Top 10 for Agentic Applications 2026, self-declared by the producer. This profile uses <tt>ASI01</tt> through <tt>ASI10</tt> for that edition, without a year suffix in the identifier. The issuing platform MUST set <tt>framework_mappings_self_declared</tt> to <tt>true</tt> when this field is populated. These identifiers name the agentic catalogue, not the OWASP Top 10 for LLM Applications. Any separately selected catalogue edition MUST be identified explicitly and MUST NOT silently change the meaning of a retained identifier. The official <eref target="https://genai-security-project.github.io/crosswalk/agentic-ai-top10/">OWASP GenAI catalogue crosswalk</eref> lists the ten identifiers for the 2026 edition; their use here makes no claim that a receipt demonstrates a mitigation or that an external framework mapping has been independently validated.</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>, <tt>Article-50</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>owasp_agentic_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 nine 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 optional extension carries signed environment-state claims asserted before an Action, drawing on the environment-record concept in <xref target="DRAFT-MSEBENZI-EVIDENCE-ACTION"/>. Absence is permitted by the base profile. A selected relying-party policy may require the extension; its required checks then participate in the summary under <xref target="reporting"/>.</t>
        <dl>
          <dt><tt>environment_attestation</tt>:</dt>
          <dd>OPTIONAL object carrying boolean environment-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, under a documented attester trust policy). 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 RFC 3339 timestamp with an explicit UTC offset), and <tt>sig</tt> (REQUIRED standard padded 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 prevents full verification when that check is required by the selected policy under <xref target="verdict-vocabulary"/>.</dd>
        </dl>
        <t>An environment attestation supplies evidence to an authorization policy; it does not replace that policy or authorize an Action by itself. A valid receipt can faithfully record a denial. Receipt verification and permission to perform the Action remain distinct decisions. Absence of this extension has no adverse effect on the base-profile summary unless the selected external policy requires it.</t>
        <t>A verified environment signature establishes an assertion by the authorized attester, subject to key custody, measurement provenance, freshness and appraisal policy. Hardware custody of a signing key alone does not establish that its claims are authentic measurements or that a remote-attestation procedure succeeded. This extension does not define such a procedure. A report states which claims and trust assumptions it actually appraised and does not present producer assertions as independently observed facts.</t>
      </section>
      <section anchor="receipt-lineage"><name>Receipt Lineage Extensions</name>
        <t>This section is normative. It defines one OPTIONAL extension field, <tt>derived_from</tt>, that appears inside the signed <tt>payload</tt> object and names the parent receipts a derived Action was computed from, together with the lineage reference object that the array carries. The field is registered in <xref target="iana-extension-fields"/>. Lineage is a directed acyclic graph over receipts: node and edge identity reuse the SHA-256 and JCS canonicalization already defined in <xref target="canonicalization-scope"/>, so this section introduces no new cryptography.</t>
        <dl>
          <dt><tt>derived_from</tt>:</dt>
          <dd>OPTIONAL JSON array of lineage reference objects, each naming one parent receipt by full identity. A producer MUST byte-sort the array by each element's <tt>merkle_root</tt> member before signing, so that independent producers of the same child compute identical signed bytes. The member sits inside the signature scope of <xref target="hash-chain"/>: re-pointing a parent changes the child's signed bytes and so breaks the child's signature. A producer with no parent to name omits the member entirely rather than emitting an empty array.</dd>
        </dl>
        <t>A lineage reference object carries exactly the four members defined below, and a producer MUST NOT emit any other member inside one. The closed member set is what makes the sort deterministic: an unrecognised member could carry ordering significance that a sorting producer and a verifying consumer would resolve differently.</t>
        <dl>
          <dt><tt>merkle_root</tt>:</dt>
          <dd>REQUIRED JSON string carrying <tt>sha256:</tt> followed by 64 lowercase hexadecimal characters, holding SHA-256 over the JCS canonicalization of the parent's signed envelope, that is the object carrying the parent's <tt>payload</tt> and <tt>signature</tt> members. The parent's <tt>anchors</tt> member is EXCLUDED from this digest, because anchors are attached after signing and including them would change a parent's identity every time an anchor accrued. This member is the array's sort key.</dd>
          <dt><tt>data_hash</tt>:</dt>
          <dd>REQUIRED JSON string in the same <tt>sha256:</tt> form, holding SHA-256 over the JCS canonicalization of the parent's <tt>payload</tt> member alone. It binds the parent's signed content independently of the parent's signature bytes, so a consumer holding only the parent's payload can still check the edge.</dd>
          <dt><tt>schema</tt>:</dt>
          <dd>REQUIRED JSON string carrying the schema identifier of the parent receipt. The JSON key is the literal <tt>schema</tt>, case-sensitive.</dd>
          <dt><tt>relationship</tt>:</dt>
          <dd>REQUIRED JSON string carrying the provenance verb that relates the child to the named parent, with a value drawn from exactly this set: <tt>derivedFrom</tt>, <tt>parentOf</tt>, <tt>componentOf</tt>, <tt>inputTo</tt>. The vocabulary is reused verbatim from established content-provenance and provenance interchange work, so the graph carries no verb coined by this document.</dd>
        </dl>
        <t>A lineage reference binds the producer's parent claim and asserted child time. A resolved parent whose recomputed commitments differ from the referenced values fails that binding check. The reference alone establishes neither parent availability, parent signature validity nor actual derivation. Each is a separate applicable check under <xref target="mandatory-checks"/>. An unresolved parent does not by itself invalidate the child's signature, but prevents full verification when parent resolution or derivation evidence is required by the selected policy (<xref target="reporting"/>).</t>
      </section>
    <section anchor="heartbeat-evidence"><name>Heartbeat and Denial Evidence</name><t>A heartbeat is a lifecycle observation with <tt>type</tt>=<tt>protectmcp:lifecycle</tt>, <tt>action_type</tt>=<tt>asqav:heartbeat</tt>, <tt>decision</tt>=<tt>observation</tt> and the no-policy JSON null value of <xref target="decision-fields"/>. Its signed <tt>heartbeat_interval_seconds</tt> is a positive safe integer expressing the declared interval. On a sequenced chain it consumes a sequence number like any other receipt. The first counter value remains one.</t><t>Silence beyond the declared interval is a coverage/liveness uncertainty and must be compared with the observation window and retained checkpoints. It is not proof of a missing action. A verifier without a trusted later checkpoint cannot infer that a retained prefix has no omitted tail. A locally self-signed denial that never enters the platform chain may lack <tt>seq</tt>; it MUST be labeled outside platform-sequence coverage and must not satisfy a platform-chain completeness claim.</t></section><section anchor="coverage-class"><name>Capture Coverage and Enforcement Authority</name><t>Capture topology, capture layer and enforcement authority are separate axes. The coverage vocabulary is <tt>harness_enforced</tt>, <tt>framework_callback</tt>, <tt>in_path_proxy</tt>, <tt>model_invoked</tt> and <tt>passive</tt>. The name describes placement, not a universal guarantee. An implementation claiming enforcement MUST document the exact harness version, hook family, settings authority, covered actions, deadline and failure policy, and retain evidence for the installed path. A configuration attestation does not itself prove ongoing enforcement or coverage outside that boundary.</t><t>The Claude Code hook reference distinguishes a timed-out command/HTTP/MCP-tool hook on PreToolUse, which renders no blocking decision, from an Agent SDK callback timeout, which blocks the tool call. The reference defines five handler types, <tt>command</tt>, <tt>http</tt>, <tt>mcp_tool</tt>, <tt>prompt</tt> and an experimental <tt>agent</tt> type, and it distinguishes that <tt>agent</tt> handler from the separately documented Agent SDK callback hook. Its timeout rule names the first three; it does not state the same outcome for a <tt>prompt</tt> or <tt>agent</tt> handler. An enforcement claim over a handler whose timeout outcome the reference does not state MUST NOT assume that handler blocks, and MUST identify the handler type it relies on rather than the transport alone. A hook that fails to start falls in the same non-blocking class as a timed-out one: the reference records a non-blocking status for a handler that is missing or not executable, and for most events the action proceeds. An enforcement claim MUST therefore state its startup-failure policy alongside its deadline, because an unstarted hook and a satisfied one leave the same trace in the action's outcome. The reference also documents exit-code and JSON output behavior, and carries version qualifiers on individual fields rather than on a single versioned contract. Implementers MUST use the supported version's actual event semantics and MUST NOT treat every callback as non-enforcing or every in-process hook as unbypassable. Managed settings constrain configuration authority but do not independently establish complete coverage of other execution paths. See <xref target="CLAUDE-HOOKS"/>.</t><t>The reference product does not build a model-invoked tool as its enforcement boundary. Observation-only integrations remain useful if labeled accordingly. A remote MCP authorization profile is distinct from a local stdio integration; audience-bound OAuth semantics are specified by <xref target="MCP-AUTH"/> for the applicable HTTP transport.</t></section></section><section anchor="legal-applicability"><name>Legal Applicability and Evidence Policy</name>
<t>The technical profile can be used in different jurisdictions. The mappings below explain possible uses of its evidence; they do not establish worldwide compliance, legal admissibility, a presumption of truth, or approval by a regulator. A receipt cannot make a prohibited activity lawful. An issuer signature authenticates a recorded statement under a trusted key; it does not establish the truth of every statement.</t>
<t>Before applying a legal mapping, the responsible organization identifies the jurisdiction, regulated role, system and activity, affected people, record class, applicable provision, effective date, exemptions and competent authority. It records the source version and the person responsible for that determination. A product label, an issuer-selected regime code or the location of a timestamp server is insufficient to establish applicability.</t>
<t>Uppercase requirement words specify this document's technical conformance rules. They do not rank laws or convert an optional profile policy into a statutory duty. Requirements within a legal mapping apply only when that mapping is selected and its applicability has been established. A stricter contractual or organizational policy is identified separately, with its authority and scope. An unresolved applicability question is reported as unknown; it MUST NOT be reported as legal compliance.</t>
<t>Retention policy specifies the record class, legal basis, triggering event, calendar period, access restrictions, deletion conditions and any lawful hold. A period measured from a decision, record creation, last use, report submission or end of a relationship is not interchangeable with the receipt's <tt>issued_at</tt>. Calendar months and years are not replaced by a universal number of days. The applicable law determines the calculation and exceptions. Data minimization, access, correction, erasure and transfer restrictions apply to receipts and supporting evidence where those records contain personal or otherwise protected information.</t>
<t>A jurisdiction-specific extension SHOULD publish this applicability information and identify each evidence claim, required input, verification rule, unknown state and limitation. Its conformance examples SHOULD include exemptions, missing evidence, a changed law and conflicting retention or deletion duties. Such extensions do not require a new core receipt format or additional personal data on a public chain. Machine-readable legal mappings remain versioned policy artifacts, not legal conclusions signed into existence.</t></section><section anchor="eu-bindings"><name>European Union Bindings</name>
      <t>Article 113, third paragraph, point (c), of the EU AI Act <xref target="EU-AI-ACT"/>, as amended by Article 1(40)(b) of <xref target="EU-2026-1744"/>, sets the application dates for Chapter III, Sections 1 to 3, except Article 6(5): 2 December 2027 for AI systems classified as high-risk under Article 6(2) and Annex III, and 2 August 2028 for those classified as high-risk under Article 6(1) and Annex I. The Article 12 and Article 26 mappings below concern duties within those sections, subject to the applicable scope and Article 111 transitional provisions. Before the relevant duties apply to a deployment, use of these two mappings is voluntary early adoption. This does not make duties that already apply voluntary.</t><t>Article 50 generally applies from 2 August 2026 under Article 113, second paragraph. Article 111(4) gives providers of the specified synthetic-content systems placed on the market before that date until 2 December 2026 to comply with Article 50(2); that transition does not defer all of Article 50. DORA has applied since 17 January 2025 under Article 64 of <xref target="DORA"/>. A selected mapping MUST record its provision, role, scope, application date and relevant exceptions under <xref target="legal-applicability"/>.</t><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>When the policy changes, the producer MUST bind subsequent receipts to the policy version used for those records. It retains the relevant policy artifact for the lawful evidence period of the receipts that reference it. A later receipt does not automatically extend retention of every earlier payload or policy artifact indefinitely.</t><t>A change in <tt>policy_digest</tt> between two otherwise-comparable Actions may also be examined as a candidate substantial-modification event under Article 43. That reading belongs to Article 12(2)(a), whose binding is in <xref target="art12-2a"/>, and is noted here only so the cross-reference is not lost; it is not a 12(2)(c) obligation.</t>
        </section>
        <section anchor="art12-retention"><name>Retention</name><t>Article 12 does not itself set a retention period. Article 26(6) addresses logs under a deployer's control: retention is appropriate to the intended purpose, with a six-month minimum unless applicable Union or national law provides otherwise. Article 19(1) contains a provider-side rule. The responsible organization identifies the role and applicable exception rather than assigning every receipt the same expiry date.</t><t>For a selected deployer mapping, retention policy MUST identify the log scope, purpose, calendar calculation and applicable legal exceptions. It MUST NOT replace six calendar months with a fixed 183-day or 184-day rule. Supporting proofs and public verification material are retained for the lawful period in which the related evidence must remain verifiable. Sector-specific rules are assessed under <xref target="dora-retention"/> and <xref target="legal-applicability"/>.</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 artifact (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>Article 26(2) concerns assignment of human oversight to people with the required competence, training, authority and support. A receipt can record an assignment or an observed review. Where an applicable instruction or control requires review before an action, a later review record does not satisfy that prerequisite. Recording that oversight was absent documents a failure; it is not an alternative means of meeting the oversight duty. The organization remains responsible for the required human arrangements.</t></section><section anchor="art26-5"><name>Article 26(5), monitor the operation</name><t>For a selected monitoring mapping, the producer MUST support an Audit Pack for the requested interval within its lawfully retained evidence. The pack states its coverage, known gaps, unavailable records and the basis of its time claims. This capability supports monitoring; it does not replace the deployer's operational, incident-response or notification duties under Article 26(5).</t></section><section anchor="art26-6"><name>Article 26(6), of at least six months</name><t>Retention under this mapping follows <xref target="art12-retention"/>. Any sector-specific rule is assessed for the relevant entity and record class; the profile does not automatically apply a financial-sector duration to every receipt.</t></section></section>

    <section anchor="article-50"><name>EU AI Act Article 50 Binding</name>
      <t>This binding differs from the Article 12 and 26 bindings above in the one respect that
      matters on the day this document publishes: those Articles sit inside the high-risk regime that
      Regulation (EU) 2026/1744 deferred, while Article 50 has applied since 2 August 2026.
      A reader adopting this profile for AI Act reasons alone is otherwise pointed at obligations
      nobody has to meet yet, which is why this section exists and why it says so plainly.</t>
      <t>The duties include informing people, marking output and disclosing certain synthetic content. Receipts can bind evidence about those activities; the statutory duties are not reducible to receipt shape or a timestamp. A producer assertion must be distinguished from observed delivery and independently checked output.</t>
      <t>A receipt that evidences one of these duties SHOULD declare <tt>Article-50</tt> in
      <tt>eu_ai_act_articles</tt> (<xref target="threat-framework"/>), so that an issuing platform can attest the
      declaration by the receipt's shape: a <tt>protectmcp:lifecycle</tt> disclosure receipt for Article 50(1) and
      50(3), a receipt carrying <tt>result_digest</tt> over the emitted or published bytes for Article 50(2) and
      50(4). The attestation is to the shape only; it does not assert that a disclosure was understood or that an
      exception under Article 50(4) applies.</t>
      <section anchor="art50-1"><name>Article 50(1), informing a natural person that they are interacting with an AI system</name>
        <t>A receipt can record the producer's claimed disclosure time and a reference to the relevant interaction. Evidence that information was presented to the person by the required interaction time is assessed separately. The issuer's <tt>issued_at</tt> alone does not establish delivery. A relationship to another action is expressed through a defined reference or Audit Pack relationship, not by silently changing the meaning of <tt>action_ref</tt>.</t></section>
      <section anchor="art50-2"><name>Article 50(2), marking synthetic output in a machine-readable format</name>
        <t>The marking duty concerns the output. A <tt>result_digest</tt> can bind presented output bytes to a recorded claim; it does not prove which system produced them, when the production occurred, or that a compliant marking was applied. Assessment requires the retained output and evidence relevant to the marking requirement. Article 50(2)'s limited transition for systems placed on the market before 2 August 2026 must be distinguished from the general application date, as explained by the Commission guidance.</t>
      </section>
      <section anchor="art50-3"><name>Article 50(3), informing persons exposed to emotion recognition or biometric categorisation</name>
        <t>For emotion recognition or biometric categorisation, evidence SHOULD connect the system, disclosure and relevant interaction without repurposing <tt>action_ref</tt>, which identifies the Action under <xref target="action-ref"/>. The Audit Pack MAY retain an explicit relationship and the disclosure material. A declared <tt>issued_at</tt> alone does not establish that a person received the information before processing.</t>
      </section>
      <section anchor="art50-4"><name>Article 50(4), disclosing artificially generated or manipulated content</name>
        <t>For content constituting a deep fake, and for text published to inform the public on
        matters of public interest, the Deployer SHOULD emit a Compliance Receipt recording the
        disclosure, carrying <tt>result_digest</tt> over the published bytes so the disclosure is
        bound to the specific content rather than to the publication as a whole. Where an exception
        in Article 50(4) is relied on, the receipt SHOULD carry a <tt>reason</tt> code naming it;
        the issuing platform performs no check that the exception applies, and a verifier MUST
        report the code as producer-asserted.</t>
      </section>
      <section anchor="art50-retention"><name>Timing, Accessibility and Retention</name><t>Article 50 specifies no general receipt-retention duration. The responsible organization must determine applicable retention and deletion rules rather than infer a universal limitation-period floor from this binding. Paragraph 5 also requires clear, distinguishable and accessible information by the first interaction or exposure. Exceptions and the duties of each provider or deployer must be evaluated under the applicable text; a signed reason code is not proof that an exception 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 with the time bounds supported by the verified construction.</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>DORA Article 17 requires an incident-management process and records, but does not set a uniform numeric retention period for every receipt. The financial entity identifies the applicable record class and Union, national and supervisory requirements. This profile does not invent a five-year default by analogy to other financial rules.</t><t>For a selected mapping, the evidence policy MUST state its retention basis and triggering event under <xref target="legal-applicability"/>. Retained verification material supports the lawful evidence window. A timestamp protocol or a signed chain alone does not establish compliance with DORA's incident-management, classification or reporting requirements.</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>Receipt continuity can support risk tracking under the MEASURE function of <xref target="NIST-AI-RMF"/>. Assessing and tracking risks requires additional evidence and organizational processes. </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 Automated Decision-Making Technology Act (SB 26-189) Binding</name>
        <t>SB 26-189, <xref target="COLORADO-ADMT"/>, repeals and reenacts Part 17 of Article 1 of Title 6. The reenacted text includes developer documentation duties in Section 6-1-1702 and deployer record-keeping duties in Section 6-1-1703. The main operative date is 1 January 2027, with the upon-passage exceptions in Section 5(2) of the act; Section 5(3) addresses consequential decisions made on or after that date. This mapping concerns the reenacted ADMT duties and does not determine the applicability of the earlier law to earlier activity.</t>
        <t>SCOPE OF THIS BINDING. It applies only where the Deployer determines that the Agent's Action uses a covered ADMT to materially influence a consequential decision, as those terms are defined in Section 6-1-1701. A receipt recording any other Action carries no obligation under this binding, and a verifier MUST NOT report a Colorado obligation as unmet for a receipt outside that scope. The conditional HIPAA exclusion in Section 6-1-1708(3)(a) applies to the specified sections, subject to its business-associate service limitation, Colorado scope and employment exception. The location and disclosure provisions in subsections (3)(b) through (e) must also be assessed; the exclusion does not remove every duty in Part 17.</t>
        <section anchor="co-1704-1"><name>Section 6-1-1704(1), pre-use notice</name>
          <t>The statute requires that "PRIOR TO A DEPLOYER USING A COVERED ADMT TO MATERIALLY INFLUENCE A CONSEQUENTIAL DECISION, THE DEPLOYER SHALL PROVIDE A CLEAR AND CONSPICUOUS NOTICE TO A CONSUMER" that a covered ADMT was or will be used, together with instructions for obtaining the further information the section describes. The Deployer SHOULD record the notice artifact in force as a <tt>protectmcp:lifecycle</tt> Compliance Receipt carrying the digest of that artefact, emitted before the first covered consequential decision. The digest MUST resolve through <xref target="audit-pack"/>. The receipt evidences that a notice artifact of a given content existed and was chained at a given time; it does not evidence that the notice reached any particular consumer, and a verifier MUST NOT report delivery as shown.</t>
        </section>
        <section anchor="co-1704-3"><name>Section 6-1-1704(3), post-adverse-outcome disclosure</name>
          <t>Where a covered ADMT materially influences a consequential decision "THAT RESULTS IN AN ADVERSE OUTCOME FOR A CONSUMER", the statute requires the Deployer to provide, "WITHIN THIRTY DAYS AFTER MAKING THE DECISION", a plain language description of the decision and the role the covered ADMT played in it, instructions and a simple-to-follow process for requesting further information, and an explanation of the consumer rights in Section 6-1-1705. The Deployer SHOULD record the disclosure as a <tt>protectmcp:lifecycle</tt> Compliance Receipt that references the decision receipt by <tt>action_ref</tt> and carries the digest of the disclosure artefact.</t>
          <t>The verifier MAY report the interval between the disclosure and decision receipt issuance times. It MUST report the legal disclosure deadline as unevaluated unless reliable evidence establishes the decision date and actual provision of disclosure. A timely receipt alone does not establish that the disclosure was provided or that its content satisfies the statute.</t>
        </section>
        <section anchor="co-1705"><name>Section 6-1-1705(1)(a)(II), meaningful human review</name>
          <t>Following an adverse outcome, the statute entitles the consumer to request, and requires the Deployer to provide, "AN OPPORTUNITY FOR MEANINGFUL HUMAN REVIEW AND RECONSIDERATION OF THE CONSEQUENTIAL DECISION, TO THE EXTENT COMMERCIALLY REASONABLE." Where such a review occurs, the Deployer SHOULD record it as an oversight ruling receipt per <xref target="oversight-ruling"/>, naming the judged decision receipt in <tt>judged_action_refs</tt>.</t>
          <t>Section 6-1-1701(15) defines meaningful human review as review by an individual designated by the Deployer who has authority to approve, modify or override the consequential decision, and who considers relevant available primary evidence, is trained to conduct the review, does not default to the system output, and has access to sufficient information to understand the output's intended use, material limitations and categories of inputs, and the principal factors used to generate the output. A ruling receipt alone does not establish reviewer training or independent consideration. Other evidence may support those facts; a verifier MUST NOT infer them solely from the presence of a ruling receipt. The oversight ruling receipt therefore evidences that a ruling was recorded, by whom in opaque form, and the scoped reviewer-authentication result where an attestation was independently validated. The remaining elements remain the Deployer's own responsibility and a verifier MUST NOT report them as satisfied solely from the ruling receipt; any separate evaluation identifies its supporting evidence and limitations.</t>
        </section>
        <section anchor="co-1703"><name>Section 6-1-1703, deployer record keeping</name><t>The cited Colorado enactment distinguishes deployer records measured from a consequential decision from developer records measured from record creation. Its three-year provisions apply to their respective record classes and roles, with longer periods where applicable law requires them. The selected mapping MUST identify the role, statutory trigger, applicability date, exemptions and relevant implementing rules. It MUST NOT substitute a universal 1096-day period from the receipt's issuance time.</t></section><section anchor="co-1706"><name>Section 6-1-1706, enforcement</name>
          <t>Section 6-1-1706 provides for Attorney General enforcement through the Colorado Consumer Protection Act. Subsection (3) conditions notice on the Attorney General deeming cure possible and provides a sixty-day cure period after notice, with an exception for knowing or repeated violations. Subsection (3) repeals on 1 January 2030. Part 17 creates no new private right of action and preserves existing rights and remedies. This profile imposes no technical binding on enforcement.</t>
        </section>
      </section>

      <section anchor="texas-traiga"><name>Texas Responsible AI Governance Act (HB 149) Binding</name>
        <t>Section 1 of enrolled HB 149 names the Act the Texas Responsible Artificial Intelligence Governance Act. The Act takes effect on 1 January 2026. Section 4 adds Texas Business and Commerce Code Subtitle D, including the AI requirements and enforcement provisions discussed here. The selected mapping follows the enacted text of <xref target="TEXAS-TRAIGA"/> and its applicability conditions.</t><t>Section 552.104 provides a notice and opportunity-to-cure procedure. An Audit Pack can support evidence about a claimed response, but neither a timestamp nor a policy digest establishes that the violation was cured. Section 552.105 contains conditional defenses. The internal-review route in subsection (e)(2)(D) is qualified by substantial compliance with the most recent NIST Generative AI Profile or another recognized AI risk-management framework. It is not blanket immunity for using this receipt format.</t><section anchor="tx-safe-harbor"><name>Defence-to-liability evidentiary support</name>
          <t>The internal-review discovery route in Section 552.105(e)(2)(D) is conditional on the defendant substantially complying with the named NIST Generative AI Profile or another qualifying framework. The discovery route and the defendant's framework compliance are separate factual questions. An Audit Pack MAY support evidence about them; it does not establish entitlement to a defense or a general safe harbor.</t></section>
        <section anchor="tx-prohibited-use"><name>Prohibited-use detection</name><t>A receipt can record a producer's prohibited-use classification and a deny decision. That classification is an assertion, not a legal determination. The record is retained under the applicable evidence policy and any lawful preservation duty. This profile sets no independent six-year retention floor for Texas deny records.</t></section></section>

      <section anchor="hipaa"><name>HIPAA Security Rule Binding (45 CFR Part 164, Subpart C)</name>
        <t>Under 45 CFR 164.302, covered entities and business associates must meet the applicable Security Rule requirements for a covered entity's electronic protected health information. See <xref target="HIPAA-SECURITY"/>. This mapping concerns relevant activity in information systems that contain or use electronic protected health information, including applicable administrative and security activity. An individual action or receipt need not itself contain or directly reference that information.</t><t>For a deployment in which Asqav performs business-associate functions, this mapping is applied from the business associate's perspective. A deployment selecting this mapping MUST identify whether the responsible organization is a covered entity, a business associate, or both for the relevant activity. That status depends on its functions and legal relationship; signing receipts alone does not determine HIPAA status. Any Colorado exemption is assessed separately under the conditions of Section 6-1-1708(3).</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 responsible covered entity or business associate remains responsible for satisfying the audit-control standard across the information systems within its applicable HIPAA scope. 164.312(b) is a standard that carries no implementation specifications, required or addressable; standards are themselves mandatory under 45 CFR 164.306(c).</t>
        </section>
        <section anchor="hipaa-retention"><name>Security Rule Documentation and Retention</name><t>The six-year requirement in 45 CFR 164.316(b)(2)(i) concerns the documentation required by that rule, measured from creation or the date it was last in effect, whichever is later. It is not a general six-year retention requirement for every individual audit-log record. See the required-documentation categories in 45 CFR 164.316(b)(1) and the retention rule in 45 CFR 164.316(b)(2)(i), <xref target="HIPAA-SECURITY"/>.</t><t>The selected mapping MUST classify each record and apply its actual retention rule. A receipt that references electronic protected health information does not acquire a six-year statutory period merely because of that reference. Other federal, state, contractual or organizational requirements may apply and are recorded separately. This profile sets no additional six-year analogy floor.</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>Section 500.6 addresses applicable systems for reconstructing material financial transactions and audit trails for detecting and responding to the specified cybersecurity events. Hash chains can support integrity of retained evidence. They do not by themselves satisfy the reconstruction, detection or response requirements. Applicability and exemptions are assessed under the current <xref target="NYDFS-500"/> text.</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 with the time bounds supported by the verified construction.</t>
        </section>
        <section anchor="nydfs-retention"><name>23 NYCRR 500.6 retention</name><t>Subject to the applicable scope and exemptions, 23 NYCRR 500.6(b) distinguishes five years for paragraph (a)(1) financial-transaction records from three years for paragraph (a)(2) cybersecurity audit trails. The selected mapping MUST identify the record class and applicable calculation. It MUST NOT treat every AI-action receipt as both classes or convert the rule into a universal number of days. Section 500.19 exemptions must be assessed for the entity and provision.</t></section></section>

      <section anchor="sec"><name>SEC Broker-Dealer Recordkeeping Binding (17 CFR 240.17a-4)</name>
        <t>Rule 17a-4 applies to the broker-dealer records within its scope. Rule 18a-6 governs stand-alone Security-Based Swap Dealers and Major Security-Based Swap Participants; its paragraph (e)(2) technical system requirements apply to entities without a prudential regulator. The 2022 release amended both rules. A selected evidence mapping identifies the entity, record class and operative paragraph rather than applying the same rule to all three classes. See <xref target="SEC-17A-4"/>.</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 at 17 CFR 240.17a-4(f)(2)(i)(A), which stands as an alternative to the write-once-read-many (WORM) limb at (f)(2)(i)(B) rather than as an addition to it. The alternative requires a complete time-stamped audit trail carrying four elements, not one: (1) all modifications to and deletions of the record or any part of it; (2) the date and time of actions that create, modify, or delete the record; (3) where applicable, the identity of the individual creating, modifying, or deleting the record; and (4) any other information needed to maintain an audit trail in the required manner, which "will permit re-creation of the original record if it is modified or deleted". Re-creation is the tail of the fourth element and not the whole requirement. 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>Rule 17a-4 assigns different periods and accessibility conditions to specified records. Paragraphs (a) and (b) include six-year and three-year classes, with the first two years in an easily accessible place. The selected mapping MUST identify the actual class, triggering event and current rule, rather than impose a receipt-wide 2192-day or 1096-day formula. The 2022 adopting release is a source for that amendment, not a substitute for checking later amendments to the current rule.</t></section></section>

      <section anchor="circia"><name>CIRCIA: Provisional Evidence Mapping</name><t>Under 6 U.S.C. 681b(a)(7), the reporting and preservation requirements in paragraphs (a)(1) through (a)(4) take effect on dates prescribed in the final rule; see <xref target="CIRCIA-681B"/>. This mapping remains provisional because the 13 September 2026 review did not establish an operative final rule. It does not assert a present reporting duty for any particular entity. A regulatory-agenda target for publication is not a published final rule or an effective date.</t><section anchor="circia-incident"><name>Incident Evidence Support</name><t>An Audit Pack MAY support preparation of a report by identifying the relevant retained records, known coverage gaps and bounded time evidence. A receipt's declared incident class does not establish that the statutory definition is met. The responsible entity determines coverage, reporting triggers, exceptions, deadlines and required content under the operative rule.</t></section><section anchor="circia-retention"><name>Preservation Rule</name><t>Section 681b(a)(4) requires preservation under the final rule's procedures, and Section 681b(c)(6) assigns the preservation period to that rule; see <xref target="CIRCIA-681B"/>. A proposed retention period is not an established current legal floor. A selected mapping MUST identify the operative instrument, applicability date, relevant records, preservation period and exceptions. An organization may adopt a lawful interim policy, labeled as its own policy, without implying that a proposal is law.</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 Compliance 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 artifact 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 envelope and the pre-image are distinct objects and this profile keeps them distinct. The issuing platform MUST emit a DSSE JSON envelope carrying  <tt>payload</tt> (the base64 encoding of the serialized Statement bytes),  <tt>payloadType</tt>, and a  <tt>signatures</tt> array; the PAE never appears in an envelope, and the envelope is not itself signed. The value of  <tt>payloadType</tt> MUST be exactly  <tt>application/vnd.in-toto+json</tt>. Stating it is relevant rather than editorial: the PAE is  <tt>"DSSEv1" SP LEN(payloadType) SP payloadType SP LEN(body) SP body</tt>, so the pre-image depends on the exact octets and the octet length of that string, and a verifier given no value cannot compute the bytes the signature covers. </t><t>The issuing platform MUST sign  <tt>PAE(payloadType, serialized Statement bytes)</tt> 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>_type</tt> to exactly  <tt>https://in-toto.io/Statement/v1</tt>, which is the member that identifies it as a v1 Statement, and MUST set  <tt>predicateType</tt> to a versioned value under the asqav predicate namespace  <tt>https://asqav.com/</tt>, of the form  <tt>https://asqav.com/receipt/&lt;namespace&gt;/&lt;verb&gt;/v1</tt>, so the predicate type carries its own major version as  <xref target="IN-TOTO-ATTESTATION"/> requires of a TypeURI. The statement's  <tt>subject</tt> array carries one or more subjects, each identified by an in-toto DigestSet. The DSSE PAE defined by  <xref target="DSSE"/> is the signing pre-image and is independent of the JCS rule that governs the receipt envelope of  <xref target="field-profile"/></t><t>. </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 supplies cryptographic attribution within the authorized signing key's scope (the signature authenticates the platform's assertion of the supplied digest and timestamp; an independent time bound requires separately verified timestamp evidence), 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 the host reports as a field distinct from the merge base (it is the three-dot form of the comparison, stated below, that anchors the diff at the merge base and keeps it 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>, whose three-dot form is what anchors the comparison at the merge base of the two revisions rather than at the base revision itself) 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 is carried in the <tt>subject</tt> entry as an in-toto DigestSet, that is <tt>{"sha256": "&lt;64 lowercase hex chars&gt;"}</tt>, with the algorithm in the member name and a bare lowercase hexadecimal value. The <tt>sha256:</tt>-prefixed wire form used elsewhere in this profile is NOT valid in a DigestSet and MUST NOT appear there: it is 71 characters and is not hexadecimal, so a consumer reading the statement as <xref target="IN-TOTO-ATTESTATION"/> defines it cannot parse it. The prefixed form stops at the receipt layer.</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. </t><t>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>Within this attestation schema, <tt>receipt_type</tt> is <tt>authoritative</tt> only for the independently re-derived evidence paths <tt>github_sha_pull</tt> and <tt>network_proxy</tt>; <tt>in_process_sdk</tt> and <tt>passive_telemetry</tt> use <tt>observation</tt>. This classification describes subject-evidence provenance, not all possible enforcement mechanisms. Native harness enforcement is evaluated separately under <xref target="coverage-class"/>. If required independent evidence is unavailable, the signer MUST refuse an authoritative attestation or emit a correctly labelled observation. It MUST reject an inconsistent type and layer combination.</t></section>

      <section anchor="attestation-verification"><name>Independent Verification Protocol</name>
        <t>A third party evaluates an attestation using authenticated verification material and independently obtained or retained subject evidence. The checks can require access to a source host or an authorized egress-log export. A network dependency is identified explicitly; protected evidence need not be public. Retained evidence can support offline checks when it preserves the required source binding. Missing evidence is unverifiable, while a demonstrated digest or signature mismatch is invalid.</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"/>), narrowing the candidate keys by the signature's <tt>keyid</tt> where one is present. <xref target="DSSE"/> names this member <tt>keyid</tt>, makes it OPTIONAL, treats an unset value as set-but-empty, and states that it MUST NOT be used for security decisions because it sits outside the PAE and is therefore unauthenticated; this profile does not override that. A verifier MUST therefore treat <tt>keyid</tt> only as a hint that orders the keys it tries, and MUST base rejection on the signature failing to verify under every candidate key in the resolved set rather than on the hint failing to resolve. An envelope carries a <tt>signatures</tt> array and MAY carry more than one signature; a verifier evaluates each. 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 checks supplement receipt verification. Successful recomputation establishes agreement with the evidence and source boundary actually checked. It does not prove code authorship, source-host honesty, complete capture or the behavior of an executed artifact. The verifier reports which assertions were independently checked and which remain producer assertions.</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 supplies cryptographic attribution within the authorized signing key's scope (the signature authenticates the platform's assertion of the supplied digest and timestamp; an independent time bound requires separately verified timestamp evidence), 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>Attestation statements use a dedicated ML-DSA-65 service identity, distinct from an agent or deployer identity. Public keys are published as RFC 9964 AKP JWKs with <tt>kty</tt>, <tt>alg</tt> and unpadded-base64url <tt>pub</tt>. The profile uses <tt>/.well-known/jwks.json</tt> as a documented implementation location; the path is not presented as an IANA registration. The relying party authenticates the origin or obtains a trusted export. DSSE <tt>keyid</tt> and a JSON receipt's external <tt>signature.kid</tt> are key-selection hints, not independently signed authority claims. Authorization follows <xref target="issuer-id"/> and <xref target="attestation-verification"/>.</t><t>Publish historical public keys and authenticated status information sufficient for the retention policy. A verifier MUST distinguish key retirement, revocation, compromise and an unknown status. It evaluates the relevant authorization period using its trust policy and available time evidence. An issuer-declared timestamp alone cannot prove that a signature preceded compromise. A demonstrated authorization violation is invalid; missing reliable historical status is unverifiable. Neither can support full verification. Current rotation alone does not invalidate all earlier receipts.</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 envelope form defined by <xref target="field-profile"/>, preserving each receipt's authenticated representation.</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 the EU and US evidence mappings of this document (EU AI Act Article 12, EU AI Act Article 26, EU AI Act Article 50, DORA Article 17, NIST AI RMF, Colorado Automated Decision-Making Technology Act, Texas Responsible AI Governance Act, NYDFS Part 500, HIPAA Security Rule, SEC Rule 17a-4, and the provisional CIRCIA evidence mapping).</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>The deterministic APS gateway fixtures at <tt>aps-gateway-enforcement/2-external-verification</tt> in the <xref target="SCOPEBLIND"/> corpus use a public test seed. 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. The fixture illustrates a format difference; it does not establish deployment, ecosystem adoption or general interoperability.</t><t>An Audit Pack MUST carry the signed-bundle construction of <xref target="audit-pack-signing"/>. The required fields include <tt>bundle_digest</tt>, <tt>bundle_signature</tt>, <tt>bundle_signature_algorithm</tt>, <tt>bundle_public_key</tt> and <tt>algorithm_registry_version</tt>. Their scope and authorization rules are defined locally.</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 the EU and US evidence mappings.</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 entry has exceeded that bound, which fails a selected policy requiring the upgrade under <xref target="anchoring"/> rather than making the receipt non-conformant on its own, 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 anchor="audit-pack-signing"><name>Signed Audit Pack Projection</name><t>This section defines the JSON bundle construction. The digest and signature cover a projection P of the delivered bundle, not archive-container bytes. P contains exactly these required members: <tt>organization_id</tt> (string), <tt>start</tt> and <tt>end</tt> (RFC 3339 strings), <tt>agent_id</tt> (string or null), <tt>only_compliance</tt> (boolean), <tt>algorithm_registry_version</tt> (string), <tt>receipt_count</tt> (nonnegative integer), <tt>receipts</tt> (array of objects), <tt>revocation_manifest</tt> (array of objects) and <tt>regime_mapping</tt> (object mapping regime strings to arrays of receipt identifiers). The receipt count MUST equal the array length. Array order and strings are preserved. The interval start MUST NOT be later than end.</t><t>Each receipt entry referenced by <tt>regime_mapping</tt> carries a nonempty string <tt>signature_id</tt>. These identifiers MUST be unique within the bundle and each mapping reference MUST resolve to exactly one entry. For a core receipt entry, extract only <tt>payload</tt>, <tt>signature</tt> and, when present, <tt>anchors</tt> as the receipt envelope. Other entry members are bundle metadata and MUST NOT enter receipt signature, anchor or counterparty calculations. A separately selected historical transport defines its own original envelope boundary.</t><t>If present and non-null, copy <tt>content_disclosure</tt> (object), <tt>regime_mapping_disclaimer</tt> (string), <tt>regime_provenance</tt> (string), <tt>jwks</tt> (JWK Set object) and <tt>exit_manifest</tt> (object) into P. Copy <tt>attested_framework_coverage</tt> when it is a nonempty object. Absent optional members stay absent; null optional values are not copied. Other bundle members, including the digest, signature, algorithm label and public-key carrier, are excluded from P. A verifier MUST NOT describe an excluded member as authenticated by this bundle signature. New bundles that declare regimes MUST include <tt>regime_provenance</tt>, stating that <tt>regimes_satisfied</tt> records signature-gated membership in producer-supplied mapping lists, not independent evaluation or legal compliance. The existing <tt>regime_mapping_disclaimer</tt> remains a separate signal about missing per-receipt evidence. Historical bundles that omit <tt>regime_provenance</tt> retain their original projection; a verifier may explain their producer-asserted mapping semantics in its report, but MUST NOT represent that generated explanation as text signed in the historical bundle. Unknown required extensions make full bundle verification unverifiable rather than silently entering the projection.</t><t>Let B be UTF8(JCS(P)), subject to <xref target="canonicalization-scope"/>. <tt>bundle_digest</tt> MUST equal <tt>"sha256:" || lowercase_hex(SHA-256(B))</tt>. <tt>bundle_signature</tt> is a base64 string carrying a pure ML-DSA-65 signature over B with an empty context; it does not sign the digest string or the 32 digest octets. <tt>bundle_signature_algorithm</tt> is the string <tt>ML-DSA-65</tt>. <tt>bundle_public_key</tt> is a base64 string carrying the 1952 public-key octets. For this bundle transport, base64 uses the standard alphabet and padding rules of <xref target="RFC4648"/> Section 4; the receipt's <tt>signature.sig</tt> encoding is a separate field. A legacy transport may document another original encoding without changing retained bytes.</t><t>The <tt>algorithm_registry_version</tt> value for the currently defined registry edition is <tt>2026-05-04.v1</tt>. It identifies algorithm policy, not a licence to change P or the wire shape. New-revision issuance uses the ML-DSA-65 contract above. An unknown registry edition or a different historical algorithm requires an explicitly selected policy and cannot silently change verification. A revised bundle projection needs its own identified transport revision; it MUST NOT reuse these semantics without disclosing the change. The <tt>regime_provenance</tt> inclusion rule belongs to this revision of the bundle profile. Its absence in a retained bundle does not establish the bundle's issuance date or profile revision; select historical interpretation from authenticated revision information or an explicitly configured compatibility policy.</t><t>The verifier recomputes B and the digest, verifies the signature and independently authenticates the bundle signer's authority to export for the named organization. It MUST NOT trust the carried public key solely because it verifies the bundle. Each receipt, timestamp, policy artifact and key-status claim still requires its own applicable verification. The bundle signature proves inclusion of the projected content, not the truth of the assertions or completeness of the export window. Externally resolved artifacts require their own verified digest commitments; a locator is not such a commitment. Required unavailable evidence prevents full verification.</t><t>The projection above records the selected target contract. Historical bundles retain their original projection and encoding. A flat stored receipt inside a bundle is evaluated under its original receipt format; the bundle signature does not make that receipt conformant to this profile.</t></section></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>Verification of the receipt's signature and other checks for which the holder has the required evidence MUST be possible without asking the issuer to compute or approve the verdict. The profile's verification procedure and required public-key representations MUST be documented. A holder must be able to export lawfully available receipt bytes, proofs and historical public verification material for use by another implementation.</t><t>Independence does not require unrestricted public access to private records, source code or personal data. A verifier MAY receive protected evidence through lawful access controls or an authorized export. Missing access leaves the affected axis unverifiable; it does not make the evidence false or the available cryptographic checks invalid. An issuer-operated service alone is insufficient if no independent implementation can evaluate the exported evidence.</t><t>Reproducible verdicts require the same receipt bytes, evidence set, profile revision, verification time and trust policy. Operators with different trust roots or access to different evidence can reach different results. Offline checks use retained evidence; live checks identify their network dependencies. Both report those limits explicitly under <xref target="reporting"/>.</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 permitted algorithm and signing-input rules of <xref target="profile-signatures"/>.</li>
          <li>Resolve candidate keys from independently authenticated JWK Sets, configured trust anchors or authenticated historical exports under <xref target="issuer-id"/> and <xref target="service-identity"/>. The profile documents <tt>/.well-known/jwks.json</tt> as its key location. A verifier MUST establish the key-to-issuer authorization and algorithm policy independently of the received envelope or bundle. A carried public key alone is not a trust anchor.</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>Evaluate presented anchors and any declared witness policy per <xref target="anchoring"/>. Apply the selected relying-party or regulatory-evidence floor, report absent or unvalidated evidence explicitly, and never derive validity from metadata presence.</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>Where <tt>policy_digest</tt> is non-null and required for the selected receipt type, resolve the policy artifact and recompute its defined digest. JSON artifacts use JCS; other formats require an explicit canonical-byte rule. Missing required evidence is unverifiable and a demonstrated mismatch is invalid. The defined no-policy lifecycle path permits null and is reported as not applicable for this axis, rather than as successful policy evaluation.</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>
          <li>Where a non-null <tt>context</tt> and <tt>payload_digest</tt> are carried, select the computation from the signed <tt>hash_algo</tt> and the versioned contract. For <tt>sha256</tt>, recompute SHA-256 over JCS(context). For <tt>hmac-sha256</tt>, recompute HMAC-SHA256 over the same bytes with authorized holder key material. Missing required content or key material makes this axis unverifiable; a demonstrated mismatch is invalid. <tt>payload_digest.size</tt> is the byte length of that canonical context. Compare the decoded digest bytes to <tt>payload_digest.hash</tt>, not differently prefixed strings. When context is absent or null, this carried-context consistency check is not applicable; any separate requirement to resolve the underlying commitment is reported under the selected policy. A hash-only commitment does not prove that the issuer saw its input.</li><li>When required by the selected evidence policy, resolve the retained Action descriptor, recompute <tt>action_ref</tt> under <xref target="action-ref"/> and report the action-descriptor check separately. Missing required descriptor evidence is unverifiable; a demonstrated mismatch is invalid. When the check is not required and is not performed, report it as unchecked, not valid.</li></ul>
        <t>A demonstrated mismatch fails its applicable check. Unavailable evidence or unsupported evaluation is reported unverifiable. Both prevent full verification when the axis is required, but neither changes the result of independently evaluable axes.</t>
      <t>Verification keys carried in an Audit Pack are not automatically trusted. The verifier MUST establish the issuer and key authorization through its configured trust policy, preserve historical key-purpose and revocation semantics, and refuse ambiguous key resolution. Current key rotation alone does not invalidate an earlier valid signature.</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 artifact 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 verifier MUST distinguish the signature, schema, chain, digest, key authorization, anchor, witness policy, freshness, replay observation and any applicable extension checks. Each reported axis identifies its input scope, policy and trust material and has a state of <tt>valid</tt>, <tt>invalid</tt>, <tt>unverifiable</tt>, <tt>pending</tt>, <tt>unchecked</tt> or <tt>not_applicable</tt>, with a reason. <tt>unchecked</tt> means an applicable check was not performed; <tt>not_applicable</tt> means its applicability condition is false, not that evidence is missing. The receipt-declared witness-policy axis may additionally be <tt>undeclared</tt> as specified in <xref target="anchoring"/>. Missing evidence, unsupported implementation and an unavailable dependency MUST NOT be reported as a valid check.</t>
<t>A structured report SHOULD carry <tt>axes</tt>, a map from the axis name to an object with <tt>status</tt>, <tt>reason</tt> and <tt>required</tt>, together with the evaluated profile revision, verification time and trust-policy identity. These are verifier-report fields, not new signed-payload members. The required-axis set comes from the selected profile and relying-party policy, not a test fixture or producer's preferred declaration. A report MUST NOT claim full verification when a required axis is invalid, pending, unverifiable, unchecked or undeclared. A fixture testing only the chain axis cannot waive required production checks.</t>
<t>Legacy boolean fields such as <tt>anchor_valid_ots</tt>, <tt>anchor_valid_rfc3161</tt> and <tt>policy_digest_resolved</tt> MAY remain for compatibility, accompanied by the corresponding explicit axis status. A false value must not be interpreted as a demonstrated mismatch when the check was not performed. Likewise, <tt>duplicate_emission_candidate</tt>=false means no duplicate was found only when an index with a stated scope was actually checked; without such an index the replay-observation axis is unverifiable.</t>
<t>In the retained Audit Pack compatibility report, <tt>regimes_satisfied</tt> lists the keys in the producer-supplied <tt>regime_mapping</tt> whose receipt-ID lists contain the receipt, and is populated only after the receipt signature check passes. This is signature-gated mapping membership, not independent evaluation of the mapped requirements or a legal-compliance conclusion. Reports MUST label this provenance explicitly. Any independently evaluated technical binding has its own evidence, applicability and per-axis results. Unevaluated applicability remains unknown. The compatibility key <tt>colorado_ai</tt> is retained; in the mapping revision defined here it identifies the SB26-189 binding in <xref target="colorado-ai-act"/>. <tt>colorado_admt</tt> is the source-register identifier, not a newly introduced wire alias. A mapping identifies its instrument version and relevant decision date; historical signed mappings MUST NOT be relabeled as compliance with a later law. Independent implementations are compared using the same receipt bytes, available evidence, verification time, profile and trust policy.</t>
<t>The summary vocabulary in <xref target="verdict-vocabulary"/> remains separate from per-axis results. A cryptographic mismatch is distinguished from an inability to evaluate. A valid signature can coexist with an unverified overall result.</t>
<t>An <tt>undeclared</tt> witness-policy axis prevents full verification when the selected external policy requires a signed declaration. It MUST NOT be counted as a satisfied quorum. When no declaration is required, the verifier still reports that none was presented.</t></section>

      <section anchor="verdict-vocabulary"><name>Verification Verdict and Hash-Algorithm Vocabulary</name>
        <t>The summary vocabulary is <tt>verified</tt>, <tt>verified_keyed</tt> and <tt>unverified</tt>. It summarizes the required axes selected under <xref target="reporting"/>. Optional missing evidence is still reported on its own axis. A summary never means that every underlying claim is true or that a legal obligation is satisfied.</t><dl>
<dt><tt>verified</tt></dt><dd>All required axes passed. Any context commitment is unkeyed. The report identifies whether the underlying content was actually available and recomputed; signature verification alone does not establish the content.</dd>
<dt><tt>verified_keyed</tt></dt><dd>All required axes passed and the receipt carries a keyed context commitment. The report states whether the verifier actually recomputed that commitment with an authorized key. Where the selected policy requires recomputation and the key or content is unavailable, the result is <tt>unverified</tt>, not this state.</dd>
<dt><tt>unverified</tt></dt><dd>At least one required axis failed or could not be completed. A pending required anchor prevents full verification. An optional pending anchor does not by itself invalidate an otherwise passing summary, and remains pending on its own axis.</dd></dl>
<t><tt>hash_algo</tt> identifies <tt>sha256</tt> or <tt>hmac-sha256</tt>. Under the retained hash-mode contract, the <tt>hash</tt> string uses the <tt>sha256:</tt> prefix for both, while <tt>payload_digest.hash</tt> is unprefixed. The signed algorithm member, not that historical prefix, identifies the computation. A keyed commitment MUST carry <tt>hash_algo</tt>=<tt>hmac-sha256</tt>. Absence means unkeyed only where the selected version explicitly defines that default. Unknown algorithms are unverifiable. Historical bytes are preserved.</t>
<t>A holder salt means the secret HMAC key. It MUST NOT be included in a public receipt, anchor or ordinary Audit Pack export. Where authorized recomputation is required, key access is supplied separately under the holder's policy. Destruction of that key does not prove erasure of every source record or identifying link.</t>
<t>For a non-passing summary, <tt>failure_class</tt> distinguishes a demonstrated cryptographic or policy mismatch (<tt>invalid</tt>) from unavailable evidence or unsupported computation (<tt>unverifiable</tt>). If both occur, the report retains both per-axis findings and uses <tt>invalid</tt> for the summary class. A legacy display label MUST NOT override the required-axis result or turn a missing check into success.</t><t>The retained hosted display vocabulary is a separate compatibility surface: <tt>verified</tt>, <tt>verified_keyed</tt>, <tt>not_rederivable</tt>, <tt>pending</tt> and <tt>failed</tt>, alongside a separate boolean <tt>verified</tt>. The boolean is not a sixth string label. A <tt>valid_commitment_not_rederivable</tt> detail selects <tt>not_rederivable</tt> before the boolean is considered. Otherwise a true boolean selects <tt>verified_keyed</tt> only when the keyed-digest check passes, or <tt>verified</tt>. With a false boolean, a valid signature, the <tt>anchor_pending_no_cryptographic_proof</tt> detail, no false counterparty-binding result and no stale-pending indication select <tt>pending</tt>; other cases select <tt>failed</tt>. The display mapping does not change the boolean.</t><t>These compatibility labels MUST NOT be used as a substitute for the required-axis summary. In particular, <tt>failed</tt> does not distinguish a proven mismatch from unavailable evidence, and <tt>not_rederivable</tt> cannot satisfy a policy that requires recomputation of the unavailable claim. The hosted keyed check recomputes a mint-time keyed-digest tag with the held holder salt; that check alone does not demonstrate recomputation from the original content. An adapter reports the input surface and version and derives the current summary from actual axis results, rather than renaming <tt>failed</tt> to <tt>unverified</tt> and assuming equivalence.</t></section>
    </section>

    <section anchor="security"><name>Security Considerations</name>
      <t>The security requirements are stated in this document: canonicalization and scope validation, issuer/key authorization, compromise and revocation, replay appraisal, privacy, evidence availability and incomplete-chain limits. No external receipt draft supplies additional unstated security requirements. A verifier MUST place its own identity and results in a separate report; adding them to an existing receipt does not authenticate them under the original signature. Unsupported evidence extensions MUST NOT receive a positive assurance merely because they are present.</t><section anchor="tamper"><name>Tamper Resistance</name>
        <t>Signatures and chain links expose changes to the committed bytes under their cryptographic assumptions. A signer with a compromised key can create alternative signed history. Independently retained checkpoints and verified timestamp evidence can constrain that attack, but they do not eliminate all rollback or omission windows. The verifier states which history and checkpoint it actually received and the limits described in <xref target="receipt-limits"/>.</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 the cited APS fixtures sign the receipt object minus the signature field (the APS gateway receipts in the <xref target="SCOPEBLIND"/> corpus, per <xref target="audit-pack"/>); this profile's receipts are identified by the REQUIRED <tt>v</tt> member of <xref target="wire-version"/>, per the interoperability note of <xref target="hash-chain"/>, and not by the top-level <tt>anchors</tt> key. 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>On suspected compromise, the responsible operator publishes authenticated key-status information identifying the key, known or suspected compromise interval and affected use. It preserves historical public verification material where lawful and follows <xref target="service-identity"/> for status evaluation.</t><t>A producer's <tt>issued_at</tt> cannot by itself prove pre-compromise issuance. A verifier uses the available independent time evidence and its historical authorization policy. A demonstrated unauthorized signature is invalid; insufficient reliable history is unverifiable. An untrusted <tt>revoked_at</tt> value in a supplied Audit Pack cannot establish revocation or authorize a different key.</t></section>
      <section anchor="long-term"><name>Retention and Long-Term Verifiability</name><t>Long-term verification depends on retained receipt bytes, proofs, historical public keys, key authorization records and the applicable trust policy. The retention schedule follows <xref target="legal-applicability"/>. Implementations SHOULD plan cryptographic renewal and preserve the evidence needed to interpret older formats without rewriting their committed bytes.</t><t>The omission and rollback limits of <xref target="receipt-limits"/> are constrained only by checkpoint, witness and anchor evidence that is still available when a verifier needs it. An operator whose completeness claims rely on independently retained checkpoints SHOULD retain that material, together with the inclusion evidence a verifier needs to use it, for at least the retention period of the receipts it covers, and SHOULD keep at least one copy recoverable independently of the log that produced it. A checkpoint recoverable only with that log is not independently retained: the same event removes both, and it then constrains a compromised signer no more than the log's own history does. Loss of that material does not invalidate a retained receipt; it narrows the window in which an omission is detectable, and the verifier reports the narrowed limit rather than claiming complete history.</t><t>ML-DSA is a digital-signature standard, not an encryption mechanism. Its use can address a post-quantum signature requirement; it does not protect stored personal data from disclosure or prove that the signer was authorized. Algorithm selection and migration follow the relying party's documented threat model and policy. Public verification keys SHOULD remain available for the lawful evidence window even after the private signing key is retired.</t></section><section anchor="privacy"><name>Privacy</name><t>Signed payloads MUST NOT contain raw prompts, tool arguments, credentials or free-text personal data in taxonomy fields. Producers SHOULD minimize stable identifiers and linkable metadata. Digests, public keys, timestamps and opaque references may still identify a person in context; hashing alone does not establish anonymity. See <xref target="GDPR"/> and the distinctions in <xref target="ICO-ANON"/>.</t>
<t>Underlying content is stored separately with appropriate access controls, a documented purpose and a lawful retention schedule. Access to a receipt or Audit Pack does not authorize disclosure of its referenced content. Public anchoring SHOULD disclose only the commitment needed for verification. An organization must assess whether even that commitment exposes protected information or creates a restricted transfer. A receipt does not supply consent or a transfer mechanism.</t>
<t>A valid erasure, correction or restriction obligation applies to every affected copy within its legal scope, including receipt metadata and backups. This profile does not require retaining a receipt when the applicable law requires its deletion. Where continued retention is lawful, the organization records its basis and minimizes the retained information. A correction may be linked to an earlier record without presenting the earlier statement as current truth. Lawful deletion may leave a verification gap; the verifier MUST report that limit rather than claim complete history.</t>
<t>Low-entropy environment identifiers MUST NOT be committed using an unkeyed hash. Where this profile permits <tt>hmac-sha256</tt>, use a secret, high-entropy key with separation between holders and purposes, following <xref target="RFC2104"/>. A so-called holder salt is a secret HMAC key, not a public salt. Its destruction can prevent later digest recomputation, but does not prove that all copies, auxiliary data or identifying links have been erased. The privacy assessment must consider the whole deployment.</t></section><section anchor="anchor-trust"><name>Anchor Trust</name><t>RFC 3161 evidence depends on the selected timestamp authority and its certificate, time and revocation policy. OpenTimestamps evidence depends on its verified commitment path and the selected Bitcoin chain and confirmation policy. Different protocol labels do not establish independent operators. A verifier evaluates the construction and failure assumptions of each witness under <xref target="anchoring"/>; it MUST NOT count an unverified proof or two labels controlled by one operator as two independent witnesses.</t><t>The optional <tt>tsa_url</tt> and <tt>operator_id</tt> members are producer-supplied metadata. They do not authorize a trust root or network request. The verifier MUST resolve trust independently and MUST NOT fetch a supplied URL merely because it appears in a receipt. Unknown trust material produces an unverifiable anchor axis, not a valid timestamp.</t></section><section anchor="replay"><name>Replay</name>
        <t>An <tt>action_ref</tt> mismatch detects a change in the committed Action descriptor. Equality does not establish identical arguments, execution identity or absence of replay. Applicable context commitments, nonces and replay indexes are evaluated separately. 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>The organization determines which laws and policies apply using <xref target="legal-applicability"/>. It cannot resolve a conflict between laws by comparing this document's MUST and SHOULD words or by always choosing the longer retention period. Legal hierarchy, territorial scope, exceptions, regulatory orders and the actual record class require separate assessment.</t><t>When an applicable requirement remains unresolved, a verifier MUST report the affected evidence-policy axis as unverifiable. The system MUST NOT claim that all relevant regimes are satisfied. Whether the underlying activity, storage or disclosure may continue is a decision under the applicable law and authority. A minimal conflict record MAY be retained where lawful; this profile does not impose a recursive duty to issue another receipt or a duty to create prohibited records.</t></section><section anchor="algorithm-agility"><name>Algorithm Agility</name>
        <t>Historical algorithm acceptance and key authorization follow the selected trust policy, authenticated historical status and available time evidence. The issuer's <tt>issued_at</tt> assertion alone cannot establish eligibility for an earlier policy. Later retirement or revocation does not automatically invalidate every earlier signature. A demonstrated historical violation is invalid; unresolved authorization is unverifiable.</t><t>Receipts under this profile are signed with ML-DSA-65 <xref target="FIPS204"/>, whose security rests on lattice assumptions, and retention obligations in the regimes this profile addresses run for years. Carrying a single family of hardness assumptions across that window is the profile's principal long-horizon exposure. The hedge this profile intends is to place a second, independent assumption at the periodic-checkpoint layer rather than on each receipt, so that receipts stay lattice-signed while the integrity of retained history can rest on hash assumptions; the checkpoint structure and its verification rules are not defined in this revision.</t>
        <t>Per-receipt dual signing is out of scope. An SLH-DSA-SHA2-192s signature is 16224 octets <xref target="FIPS205"/> against 3309 octets for ML-DSA-65 <xref target="FIPS204"/>, roughly five times the signature bytes on an artifact minted once per Action, and the "s" parameter sets are the ones <xref target="FIPS205"/> characterises as favouring small signatures rather than fast signature generation, so that size is not bought back in signing speed. Independently, <xref target="LAMPS-COMPOSITE"/> defines eighteen composite combinations and requests their registration and every one pairs ML-DSA with a traditional algorithm; none pairs ML-DSA with SLH-DSA or with any other post-quantum algorithm, so a dual-signed receipt would be defining its own profile rather than following the combinations in that work-in-progress proposal.</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> binds the Action descriptor of <xref target="action-ref"/>, not the peer receipt envelope. 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 A's envelope-minus-anchors object, which carries A's signature bytes; 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>A commitment establishes equality only under its defined framing and byte construction. In JSON framing, whitespace or member-order changes that preserve the JCS representation are not detected. Changed signed values or a different retained signature string change the commitment. This is evidence about the defined representation, not every original transport byte.</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 defense 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 relevant.</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 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>
          <li>Anchor stripping by the intermediary. Because the <tt>anchors</tt> array is outside the issuer's signature, M can remove entries from what it relays, and B sees a receipt carrying fewer witnesses than A emitted. This is a reduction, not a forgery: each surviving entry still re-verifies against SHA-256(JCS(envelope_minus_anchors)), and M cannot fabricate an entry that does so without the cooperation of a timestamp authority or the Bitcoin chain. The visible effect is that a <tt>witness_policy</tt> quorum A believed it had satisfied may not be satisfiable from B's copy. Operator mitigation: the holder's retained copy and the Audit Pack manifest record the anchors as issued, so a stripped relay is detectable by comparison at audit time rather than by B in flight.</li>
        </ul>
        <t>Operators concerned about these residuals in the absence of single-point cryptographic defense 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>Detection depends on the selected anchoring schedule, successful commitment, monitoring and availability of the evidence needed for comparison. The selected profile MUST state these assumptions. No fixed detection interval is established here by DORA, NYDFS Part 500 or CIRCIA, and an anchor alone does not guarantee recovery of records that are unavailable.</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 artifact 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, or that its effect occurred exactly once. A receipt binds the issuer's recorded claims and committed bytes; it does not independently prove that those bytes passed through a named agent. Timestamp evidence establishes only the time property of its authenticated construction. For example, an RFC 3161 token supports the existence of committed data by the stated time under the TSA trust policy, not the Action's execution at that exact time (<xref target="RFC3161"/>). A fresh <tt>nonce</tt> distinguishes receipt emissions, not effects. The optional duplicate-emission observation under <xref target="replay"/> is not a count of executed effects. Effect idempotency is the receiving system's responsibility.</li>
          <li>That two byte sequences are semantically equivalent under a downstream tool. The chain layer checks commitments to canonical bytes under its cryptographic assumptions; 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, complete or retained. <tt>policy_digest</tt> commits a digest value. Only resolving and recomputing the artifact under <xref target="policy-digest"/> establishes its correspondence to that value; the digest alone proves neither availability nor retention. Policy suitability and retention require separate evidence.</li>
          <li>That the execution environment was intact. The core receipt signature does not establish environment integrity. The optional claims in <xref target="environment-attestation"/> are appraised separately under an explicit trust policy and remain limited by their provenance and coverage.</li>
          <li>That the issuer has a particular real-world identity merely because a signature verifies. <xref target="issuer-id"/> requires independent key-to-principal authorization. The resulting identity assurance is limited by that trust policy and its evidence; an opaque identifier or a self-supplied Audit Pack key cannot establish it.</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. An <tt>expires_at</tt> claim does not itself stop execution (<xref target="result-bound"/>). The producer-asserted fields in <xref target="threat-framework"/>, <xref target="risk-acceptance"/> and <xref target="code-authorship"/> bind the producer's assertions, including its asserted time; they do not independently establish those assertions or their timing. 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 artifact is tamper-proof. Signature and link checks detect changes inconsistent with the presented signatures and commitments. Detecting removal, replacement or re-signed history also depends on independently retained receipts, authenticated checkpoints or anchors under <xref target="tamper"/>. A self-consistent replacement history cannot be distinguished solely by verifying its newly produced signatures. These checks reveal specified inconsistencies; they do not prevent alteration or omission.</li>
          <li>That the receipt is neutral third-party attestation. The producer's signature binds its claims. Counterparty or environment signatures can bind assertions by separately authorized parties, within their stated scopes, but a separate or unaffiliated signer does not by itself establish independent observation or the truth of every claim. A report identifies the attester, asserted fact, verification scope and trust evidence (<xref target="issuer-misrep"/>).</li>
          <li>That the underlying transaction was delivered, settled or otherwise reached commercial finality. Delivery, settlement and payment finality are out of scope. When cited alongside a payment-gate format such as <xref target="DRAFT-HOPLEY-X402"/>, the receipt supplies only its stated action-side claims and evidence.</li>
          <li>That every Action produced a receipt. A chain that passes every mandatory check of <xref target="mandatory-checks"/> establishes the checked signature and link relationships among the receipts presented; 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, because the counter of <xref target="seq"/> advances only when a receipt is minted and so cannot register an Action that produced none. Counters reveal internal discontinuities or repeats. Detecting a missing prefix or tail requires an authenticated boundary, checkpoint or independently retained receipt. Where the counter is absent, which stays conformant, a truncated tail is still itself a valid chain, 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>); these illustrate that chain integrity alone cannot detect an unrecorded Action and that a signed gap report can remain structurally conformant. Their fixture outcomes are not a substitute for the required checks of a selected production policy.</li>
        </ul>
      </section>
    </section>

    <section anchor="iana"><name>IANA Considerations</name>
      <t>This document requests one allocation from an existing IANA registry, and requests no new IANA registry. The allocation is the <tt>counterparty_binding</tt> CWT claim of <xref target="iana-extension-fields"/>, which Section 2 of <xref target="RFC8726"/> permits an Independent Submission to request because the registry already exists and the document follows its assignment policy.</t>
      <t>This Independent Stream document requests no new IANA registry. RFC 8726 generally prohibits new IANA registries for this stream, with a narrow exception for subcode registries tied to an allocated code point. That exception does not establish authority for the standalone tables here. These are externally maintained profile tables. Any future IANA request must satisfy the applicable registration policy and publication procedure. See <xref target="RFC8726"/>.</t><t>Administration therefore sits outside IANA, at <eref target="https://github.com/jagmarques/asqav-registry"/>, whose registration process is published at <eref target="https://github.com/jagmarques/asqav-registry/blob/79f5d28fd132c97bc4a5eae02a2bafce72b145af/REGISTRATION.md"/>. That is a commit-pinned citation of the procedure this document was written against, so a reader can retrieve the exact text; the living procedure is maintained on the repository default branch and a later revision of it does not change what this document specifies. The tables below remain the normative definition of the initial contents; the external registry administers additions and never overrides this document for an entry defined here. A future proposal to move these external tables to IANA would require an explicit registration request under the applicable procedures and approvals. Section 6 of <xref target="RFC8726"/> concerns transfer of control of an existing IANA registry between streams; it does not itself authorize migration of these external tables.</t>

      <section anchor="regime-vocabulary"><name>Regime Mapping Vocabulary</name><t>The following identifiers have distinct scopes. They do not establish legal applicability or compliance, and they do not add signed-payload fields.</t><ul><li><tt>colorado_ai</tt>: retained compatibility key for the Colorado mapping. In this revision its mapping concerns SB 26-189, as described in <xref target="colorado-ai-act"/>. Interpret historical evidence with its recorded mapping revision, legal-source edition and applicable decision date; do not rewrite signed bytes or silently reinterpret an earlier statutory mapping.</li><li><tt>colorado_admt</tt>: source-mapping identifier for the SB 26-189 mapping, not a new wire alias for <tt>colorado_ai</tt>.</li></ul></section>
      <section anchor="iana-extension-fields"><name>Compliance Receipt Extension Fields Registry</name>
        <t>This table defines the extension fields of this profile. It is administered at the external registry named in <xref target="iana"/> under the registry title "Compliance Receipt Extension Fields", and is not a requested IANA registry.</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: the exact, case-sensitive JSON object key. New names use lowercase ASCII letters, digits and underscore; the initial entry <tt>previousReceiptHash</tt> preserves its established spelling.</li>
          <li>Scope: one of <tt>signed-payload</tt>, <tt>envelope-level</tt>, <tt>signing-time declaration</tt>, or <tt>anchor entry</tt>, disambiguating fields inside the signed payload from envelope-level fields, from declarations that are not wire members, and from members carried inside an entry of the <tt>anchors</tt> array rather than at the top level of the receipt.</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. For the initial entries defined by this Independent Submission, it is the document author identified in the front matter. This designation does not imply IETF ownership or endorsement.</li>
        </ul>
        <t>A registration is accepted when the field name does not collide with a common field defined in <xref target="common-fields"/> or a field already present in this table, the Reference is a stable and dereferenceable specification, and the Vocabulary is documented sufficiently for an independent verifier to validate values. These are this external registry's review criteria. They do not appoint an IANA Designated Expert or establish an IANA registration policy. Registrations are made through the published registration process and are reviewed against these criteria in public.</t>
        <t>Initial registry contents:</t>
        <ul>
          <li><tt>seq</tt> - Scope: signed payload. Optional positive integer in the single issuer chain. Continuity exposes an inconsistency within observed evidence; it does not prove withholding or reveal an omitted tail without a later trusted checkpoint. Defined in <xref target="seq"/>.</li><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 subject to the operative-rule conditions of the provisional mapping in <xref target="circia"/>, 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 base64url-encoded SHA-256 digest (<tt>envelope_hash</tt>) of a peer agent's envelope-minus-anchors object, which includes that peer's signature bytes and excludes its <tt>anchors</tt> array, a REQUIRED digest-scope declaration (<tt>scope</tt>, whose only defined value is <tt>envelope_minus_anchors</tt> and whose absence marks a legacy binding under the superseded three-key scope of revisions -04 through -08), 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"/>, including the <tt>scope</tt> value set {<tt>envelope_minus_anchors</tt>}; digest algorithm is SHA-256 under <xref target="counterparty-binding-wire"/> with base64url encoding per <xref target="RFC4648"/> Section 5.</li>
          <li><tt>result_digest</tt> - Scope: signed-payload - JSON string in the self-describing form <tt>sha256:&lt;64 lowercase hex chars&gt;</tt> carrying a SHA-256 digest of the downstream Action's result body. It is not an object and does not carry the <tt>payload_digest</tt> members <tt>size</tt> or <tt>preview</tt>; 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 - RFC 3339 timestamp with an explicit UTC offset 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 - RFC 3339 JSON string with an explicit UTC offset.</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 hash-only <tt>hash</tt> member keeps the <tt>sha256:&lt;64 hex&gt;</tt> wire form in both cases and the algorithm is read from <tt>hash_algo</tt>, never from the label; 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> identifying the exact OCI image manifest or observed binary file under the digest and evidence rules of <xref target="build-provenance"/>; 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, exact version and digest input rule declared in the Audit Pack manifest entry; current-profile JCS and explicit legacy handling are defined in <xref target="build-provenance"/>.</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 for transparency-log evidence concerning the build artifact identified by <tt>executable_hash</tt>; defined in <xref target="build-provenance"/> - This document - Supported log and entry format, artifact binding and authenticated inclusion evidence are checked under the selected verification policy.</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: signed-payload - OPTIONAL quorum declaration with <tt>required</tt> and distinct operator identifiers in <tt>witnesses</tt>; authenticated threshold, missing-policy state and independently trusted operator counting are defined in <xref target="anchoring"/> - This document - Profile-specific witness policy.</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 (edition-qualified, for example <tt>LLM01:2025</tt>; a bare <tt>LLM01</tt> is rejected); 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>owasp_agentic_top10</tt> - Scope: signed-payload - JSON array of OWASP Top 10 for Agentic Applications 2026 identifiers; the exact edition and identifier convention are defined in <xref target="threat-framework"/>; self-declared; flips <tt>framework_mappings_self_declared</tt> to <tt>true</tt> when populated - This document.</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>, <tt>Article-50</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>owasp_agentic_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 string-equality refusal against <tt>initiator_id</tt> applied to Compliance Receipts (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>judged_action_refs</tt> - Scope: signed-payload - Non-empty array of <tt>action_ref</tt> values naming the receipts an oversight ruling judges; REQUIRED on <tt>protectmcp:lifecycle:oversight_ruling</tt> and enforced at signing time; an entry that does not resolve is a non-conformance of the ruling receipt and not of any judged receipt; defined in <xref target="oversight-ruling"/> - This document - Values are <tt>action_ref</tt> digests per <xref target="extension-fields"/>.</li>
          <li><tt>ruling</tt> - Scope: signed-payload - The human ruling recorded by an oversight ruling receipt; REQUIRED on <tt>protectmcp:lifecycle:oversight_ruling</tt> and enforced at signing time; defined in <xref target="oversight-ruling"/> - This document - One of <tt>confirm</tt>, <tt>override</tt>, <tt>escalate</tt>, <tt>flag</tt>.</li>
          <li><tt>ruling_reason</tt> - Scope: signed-payload - OPTIONAL machine-readable reason code accompanying a <tt>ruling</tt>; defined in <xref target="oversight-ruling"/> - This document - Vocabulary referenced in Audit Pack metadata.</li>
          <li><tt>reviewer</tt> - Scope: signed-payload - Object naming the natural person who ruled, by opaque <tt>principal</tt> and <tt>role</tt>, with an OPTIONAL <tt>attestation</tt> whose <tt>method</tt> and <tt>evidence</tt> record how that person was authenticated; REQUIRED on <tt>protectmcp:lifecycle:oversight_ruling</tt>; absent attestation, or <tt>method</tt> <tt>manual_assertion</tt>, leaves the human-review claim unverified; defined in <xref target="oversight-ruling"/> - This document - <tt>method</tt> is one of <tt>sso</tt>, <tt>hardware_key</tt>, <tt>signed_statement</tt>, <tt>manual_assertion</tt>.</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; for a Compliance Receipt 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; binds the issuer to the recorded rationale and asserted <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 acceptance-authoring time, encoded as an RFC 3339 JSON string with an explicit UTC offset; distinct from the asserted receipt issuance time and any independently verified anchor time evidence; defined in <xref target="risk-acceptance"/> - This document - RFC 3339 string with explicit UTC offset.</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; binds the supersession claim and asserted <tt>issued_at</tt>; the issuing platform NEVER invalidates the prior receipt (the recorded signed bytes remain unchanged; this later statement points to the earlier receipt); 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 producer-supplied commitment whose syntax alone establishes neither the artifact's existence nor its existence at the asserted time; 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; binds the asserted reference and <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; binds the asserted pointer and <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, binds the asserted reference and <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, binds the producer assertion and asserted <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 producer-supplied commitment whose syntax alone establishes neither the artifact's existence nor its existence at the asserted time; 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); binds the asserted reference and <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; binds the asserted pointer and <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="RFC3339"/>.</li>
          
          <li>The entries that follow are IMPLEMENTATION MEMBERS. Every one is signed into receipts the reference issuing platform emits today, and each is registered here because a registry that omits what the wire carries understates the signed surface a verifier must preserve byte-for-byte under <xref target="extension-fields"/>.</li>
          <li><tt>action_id</tt> - Scope: signed-payload - REQUIRED JSON string carrying the issuing platform's identifier for the Action the receipt covers, in the form <tt>act_&lt;opaque&gt;</tt>. It is an identifier, never a digest, and MUST NOT be read as one; the digest of the Action is <tt>action_ref</tt>. - This document - Implementation member of the reference issuing platform; carried under the signature on production receipts.</li>
          <li><tt>agent_id</tt> - Scope: signed-payload - REQUIRED JSON string identifying the agent within the issuing platform, in the form <tt>agt_&lt;opaque&gt;</tt>. It is not globally unique and does not establish issuer or key authority. The local meaning applies to every selected receipt type without importing additional fields from another draft. - This document.</li><li><tt>org_id</tt> - Scope: signed-payload - REQUIRED JSON string carrying the identifier of the organization the signing agent belongs to, as a UUID. It is an internal tenancy identifier and is NOT the legal-entity identifier a verifier resolves; that is <tt>issuer_id</tt>. A verifier MUST NOT resolve a key through this member. - This document - Implementation member of the reference issuing platform; carried under the signature on production receipts.</li>
          <li><tt>action_type</tt> - Scope: signed payload. Presence is mode-conditioned: required for the defined payload mode; not a member emitted by the defined hash mode. Unsupported or malformed mode combinations are not silently repaired. Defined in <xref target="wire-mode"/>.</li><li><tt>context</tt> - Scope: signed-payload - OPTIONAL JSON object carrying the Action's input as the producer supplied it. Most receipts omit it and carry only <tt>payload_digest</tt>, which is the privacy-preserving default; when both are present the recomputation of <xref target="mandatory-checks"/> applies. An explicit JSON null reads as absent. - This document - Implementation member of the reference issuing platform; carried under the signature on production receipts.</li>
          <li><tt>mode</tt> - Scope: signed payload. Both core modes use a nested signed payload. Mode determines the required content and digest interpretation; flat legacy inputs use a separately selected adapter. Defined in <xref target="wire-mode"/>.</li><li><tt>hash</tt> - Scope: signed payload. Hash-mode commitment string. Its digest bytes equal payload_digest.hash under that mode; the former has the retained prefix and the latter is unprefixed. Algorithm interpretation follows the signed hash_algo and selected version. Defined in <xref target="wire-mode"/>.</li><li><tt>metadata</tt> - Scope: signed-payload - OPTIONAL JSON object carrying operational annotations supplied by the producer or issuing platform. The issuing platform may filter or interpret these annotations before signing. The signature binds the retained object; it does not establish that each annotation is true. - This document - Implementation member of the reference issuing platform; carried under the signature on production receipts.</li>
          <li><tt>decision</tt> - Scope: signed payload. Required value governed by the receipt type. Decision types record an actual policy evaluation; defined no-policy types use observation. Defined in <xref target="decision-fields"/>.</li><li><tt>policy_decision</tt> - Scope: signed-payload - OPTIONAL JSON string carrying the policy engine's own verdict, for example <tt>permit</tt>. It is the engine's vocabulary rather than this profile's, and a verifier MUST NOT map it onto <tt>decision</tt> without the producer's documented mapping. - This document - Implementation member of the reference issuing platform; carried under the signature on production receipts.</li>
          <li><tt>receipt_type</tt> - Scope: signed-payload - OPTIONAL JSON string mirroring <tt>type</tt> for implementations that read a distinct member. Where both are present they MUST carry the same value, and a receipt whose two members disagree is non-conformant. This entry registers the receipt payload member ONLY. It is distinct from, and shares nothing but its name with, the server-enforced <tt>receipt_type</tt> member of the attestation statement predicate defined in <xref target="capture-layer"/>, whose value is drawn from <tt>authoritative</tt> or <tt>observation</tt> and which never appears in a receipt payload. An implementation MUST resolve the name by the object it appears in. - This document - Implementation member of the reference issuing platform; carried under the signature on production receipts.</li>
          <li><tt>server_timestamp</tt> - Scope: signed-payload - REQUIRED on a hash-mode Compliance Receipt and absent from the reference payload-mode receipt, which carries <tt>timestamp</tt> in its place (see <xref target="wire-mode"/>). JSON string carrying an RFC 3339 timestamp with explicit timezone assigned by the issuing platform for signing. The reference platform assigns the same clock value to this member and <tt>issued_at</tt>. This is a signed platform-clock assertion, not independent evidence of the Action time or the completion of signing; anchor evidence is evaluated separately under <xref target="anchoring"/>. - This document - Implementation member of the reference issuing platform; carried under the signature on production receipts.</li>
          <li><tt>derived_from</tt> - Scope: signed-payload - OPTIONAL JSON array of parent lineage references naming the receipts a derived Action was computed from. Each entry is a lineage reference object as defined in <xref target="receipt-lineage"/>, and the array MUST be byte-sorted by its <tt>merkle_root</tt> member before signing so that independent producers of the same child compute identical signed bytes. The member sits inside the signature scope of <xref target="hash-chain"/>, so re-pointing a parent breaks the child's signature. It is omitted rather than emitted empty when there is no parent. - This document - Implementation member of the reference issuing platform; carried under the signature on production receipts.</li>
          <li><tt>timestamp</tt> - Scope: signed payload. Presence and meaning follow the selected mode and version. Do not treat a payload-mode requirement as universally optional or as an independently trusted event time. Defined in <xref target="wire-mode"/>.</li><li><tt>previousReceiptHash</tt> - Scope: signed-payload - REQUIRED on every receipt including a chain's first, where it carries the all-zero SHA-256 value of <xref target="hash-chain"/>; an absent member, a JSON null and an empty string are each a malformed chain link and never a genesis marker. JSON string carrying the unprefixed lowercase hexadecimal SHA-256 of the predecessor receipt under the chain scope of <xref target="hash-chain"/>. The member name is deliberately camel-case, matching the deployed wire, and MUST NOT be normalized to snake case, which would change the canonical bytes and break every signature. - This document - Implementation member of the reference issuing platform; carried under the signature on production receipts.</li>
          <li><tt>tool_name</tt> - Scope: signed payload. Required for protectmcp:decision and otherwise governed by the selected type and mode. It is not universally optional. Defined in <xref target="decision-fields"/>.</li><li><tt>beacon_ref</tt> - Scope: signed-payload - OPTIONAL JSON object carrying the reference platform's cached drand Quicknet beacon reference: <tt>source</tt> (the string <tt>drand</tt>), <tt>chain</tt> (the 64-character lowercase hexadecimal chain hash), <tt>round</tt> (a positive JSON integer), <tt>signature</tt> (the 48-byte Quicknet BLS signature, encoded as 96 lowercase hexadecimal characters), and <tt>observed_at</tt> (an RFC 3339 timestamp recording when the platform cached the response). Its evidence limits are defined in <xref target="beacon-evidence"/>. It is not an anchor and MUST NOT count toward the anchoring requirement or a witness quorum. - This document - Implementation member of the reference issuing platform; carried under the signature on production receipts.</li>
          <li><tt>v</tt> - Scope: signed payload. Required nested payload version for the core format. Known shapes and legacy adapters are explicitly selected. A version-2 canary does not define a released production contract, and unknown versions are unverifiable. Defined in <xref target="wire-version"/>.</li><li><tt>tsa_url</tt> - Scope: anchor entry - OPTIONAL producer-supplied string naming the timestamp authority an <tt>rfc3161</tt> anchor entry was obtained from. It is an operational label only. A verifier MUST NOT fetch it and MUST NOT treat it as a trust decision: a caller-supplied URL naming its own timestamp authority is an assertion by the party being checked, not evidence about it, and trust in a TSA comes from key material the verifier holds independently per <xref target="anchor-trust"/> - This document - No vocabulary; the value is a JSON string.</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 environment-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>
        <li><tt>heartbeat_interval_seconds</tt> - Scope: signed-payload - Positive safe-integer declared heartbeat interval; missing observations do not prove missing actions. Defined in <xref target="heartbeat-evidence"/> - This document - Profile-specific lifecycle evidence.</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 base64url-encoded SHA-256 digest of a peer agent's envelope-minus-anchors object, which includes that peer's signature bytes and excludes its anchors array, a REQUIRED digest-scope declaration, 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>Joao Andre Gomes Marques, the document author identified in the front matter.</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>The <tt>environment_attestation</tt> field carries the environment-state claims defined in <xref target="environment-attestation"/>. This document does not define a dedicated RATS attestation-result format. A proposal to add such a format would be reviewed under the external registration process in this section and would need a stable specification of its semantics. No new IANA registry or Designated Expert is created for that purpose.</t>
      <t>Anchor-entry metadata <tt>operator_id</tt>, <tt>tsa_url</tt>, <tt>status</tt> and <tt>anchor_block_hash</tt> are scoped to the unsigned anchor object and have the semantics in <xref target="anchoring"/>. They are not additional signed-payload fields or independent trust assertions.</t></section><section anchor="iana-type-namespaces"><name>Compliance Receipt Type Namespaces Registry</name>
        <t>This table defines the receipt type namespaces of this profile. It is administered at the same external registry named in <xref target="iana"/>, under the registry title "Compliance Receipt Type Namespaces", and is not a requested IANA registry.</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>A registration is accepted when the namespace does not collide with any namespace already in this table, and the Reference is a stable specification. As in <xref target="iana-extension-fields"/>, these are registration review criteria applied through the published registration process rather than an IANA registration policy.</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 registration review criteria 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:oversight_ruling</tt> - A receipt recording a human ruling made about one or more previously recorded Actions, referencing them by <tt>action_ref</tt>; 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 oversight-ruling fields of <xref target="oversight-ruling"/>. Absent a reviewer attestation, the human-review claim it carries is unverified - 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 binds the issuer to the recorded change assertion; it does not establish the change's existence or exact execution 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>These references explain nearby technical approaches. Published RFCs and W3C Recommendations have the status stated by their publishers. Individual Internet-Drafts are work in progress and do not imply IETF endorsement or consensus. No reference in this section requires adoption of another product or guarantees interoperability.</t><ul>
<li><xref target="RFC9943"/> describes SCITT transparency architecture. Registration and receipt verification support evidence about registered statements; they do not establish the truth of those statements. This profile also separates issuer claims, evidence availability and relying-party trust.</li>
<li><xref target="RFC9162"/> describes Certificate Transparency. Its append-only log mechanisms offer a useful comparison for inclusion and consistency evidence, but its certificate-specific semantics do not automatically apply to agent actions.</li>
<li><xref target="RFC9334"/> and <xref target="RFC9999"/> provide the RATS architecture and a message wrapper. Device or environment evidence must be appraised within that trust model; it does not by itself prove which application action occurred. <xref target="DRAFT-SOKOLOV-AEP-COMPOSITION"/> is related work in progress on this composition.</li>
<li><xref target="DRAFT-MSEBENZI-EVIDENCE-ACTION"/> describes post-hoc action evidence. Its explicit evidence limits and verification states are relevant comparisons. This profile defines its own framing, issuer and chain rules, with timestamp policy under <xref target="anchoring"/>; no byte-level interoperability is implied.</li>
<li><xref target="DRAFT-HOPLEY-X402"/> addresses screening receipts for agentic payments. This profile supplies action-side evidence; it defines neither payment settlement nor a universal delegation authorization system.</li><li><xref target="W3C-VC-2"/> and <xref target="W3C-VC-DI"/> address credential exchange and integrity. Wrapping a receipt in another signed format does not replace verification of the embedded receipt or establish the truth of its claims.</li>
</ul><t>Implementation and conformance-corpus references identify inspectable artifacts. A first-party corpus demonstrates the cases it contains; it is not independent certification or proof that every mandatory clause has shipped. External comparisons must identify the versions and trust assumptions used.</t></section><section anchor="impl-status"><name>Implementation Status</name>
      <t>This section identifies the reference implementation surfaces for the target design, following <xref target="RFC7942"/>. It is removed before RFC publication. Implementation listings are not endorsements. The normative body defines the intended behavior; a release evidence record identifies the exact versions and clauses verified for any particular release.</t><t>The record distinguishes platform behavior, installed Python and TypeScript entry points, retained historical formats and optional extensions. It records the source revision, package digest, conformance inputs, trust policy, results and independent reviewer. No aggregate test count substitutes for coverage of each applicable clause. This edition makes no claim about paying customers, unlisted implementations or independently reproduced test totals.</t><section anchor="impl-platform"><name>Asqav Platform</name>
        <t>The issuer and hosted verifier maintain the receipt chain, publish authorized verification material and export retained evidence. The implementation follows the selected capture, key, witness and evidence policies.</t><t>The release evidence record identifies the distributed artifact, license, dependency scope and independently reproduced acceptance. See <xref target="ASQAV-SDK"/> for the cited source artifact.</t></section>

      <section anchor="impl-sdk-python"><name>Python Verifier</name>
        <t>The Python verification surface evaluates exported receipts and evidence under an explicit profile and trust policy. Offline operation does not require an issuer account or an issuer-computed verdict.</t><t>The release evidence record identifies the distributed artifact, license, dependency scope and independently reproduced acceptance. See <xref target="ASQAV-SDK"/> for the cited source artifact.</t></section>

      <section anchor="impl-sdk-ts"><name>TypeScript Verifier</name>
        <t>The TypeScript verification surface applies the same versioned contract and conformance inputs. Cross-language agreement is evaluated with equivalent evidence and policy inputs; it does not establish organizational independence.</t><t>The release evidence record identifies the distributed artifact, license, dependency scope and independently reproduced acceptance. See <xref target="ASQAV-SDK"/> for the cited source artifact.</t><t>This revision defines Python and TypeScript verification surfaces. A separate WebAssembly verifier is not required. Offline verification claims identify the actual surface, build and supported cryptographic capabilities in the release evidence record.</t></section>
    </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 and -08 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="FIPS205" target="https://csrc.nist.gov/pubs/fips/205/final">
        <front>
          <title>Stateless Hash-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="205"/>
        <seriesInfo name="DOI" value="10.6028/NIST.FIPS.205"/>
      </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="OPENTIMESTAMPS" target="https://github.com/opentimestamps/python-opentimestamps/blob/3af46432efc4/opentimestamps/core/timestamp.py">
        <front>
          <title>OpenTimestamps Python Library: Timestamp Serialization and Verification</title>
          <author>
            <organization>OpenTimestamps</organization>
          </author>
          <date year="2025"/>
        </front>
        <refcontent>Source revision 3af46432efc4a4c4e7bba439c1f49bce808eb3e5; accessed 12 September 2026. This implementation or project specification is not an IETF standard.</refcontent></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="RFC9964" target="https://www.rfc-editor.org/info/rfc9964">
        <front>
          <title>ML-DSA for JSON Object Signing and Encryption (JOSE) and CBOR Object Signing and Encryption (COSE)</title>
          <author fullname="M. Prorock" initials="M." surname="Prorock"/>
          <author fullname="O. Steele" initials="O." surname="Steele"/>
          <date year="2026" month="May"/>
        </front>
        <seriesInfo name="RFC" value="9964"/>
        <seriesInfo name="DOI" value="10.17487/RFC9964"/>
      </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="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="RFC8726" target="https://www.rfc-editor.org/info/rfc8726">
        <front>
          <title>How Requests for IANA Action Will Be Handled on the Independent Stream</title>
          <author fullname="A. Farrel" initials="A." surname="Farrel"/>
          <date year="2020" month="February"/>
        </front>
        <seriesInfo name="RFC" value="8726"/>
        <seriesInfo name="DOI" value="10.17487/RFC8726"/>
        </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="IN-TOTO-ATTESTATION" target="https://github.com/in-toto/attestation/blob/2dcd055e9f72/spec/v1/statement.md">
        <front>
          <title>in-toto Attestation Framework: Statement v1</title>
          <author><organization>in-toto project, a Cloud Native Computing Foundation project</organization></author>
          <date year="2026"/>
        </front>
        <refcontent>Source revision 2dcd055e9f72e746687c306e35f4e59720ff45be; accessed 12 September 2026. This implementation or project specification is not an IETF standard.</refcontent></reference>
      <reference anchor="DSSE" target="https://github.com/secure-systems-lab/dsse/blob/1d3370f62565bca041e97c8310b873ac340edc2e/envelope.md">
        <front>
          <title>Dead Simple Signing Envelope: Envelope Specification</title>
          <author><organization>Secure Systems Lab, New York University</organization></author>
          <date year="2026"/>
        </front>
        <refcontent>Source revision 1d3370f62565bca041e97c8310b873ac340edc2e; accessed 12 September 2026. This implementation or project specification is not an IETF standard.</refcontent></reference>
    <reference anchor="RFC3339" target="https://www.rfc-editor.org/info/rfc3339"><front><title>Date and Time on the Internet: Timestamps</title><author initials="G." surname="Klyne"/><author initials="C." surname="Newman"/><date year="2002" month="July"/></front><seriesInfo name="RFC" value="3339"/></reference><reference anchor="DRAND-SPEC" target="https://github.com/drand/drand-docs/blob/0a551bdc229a/docs/concepts/03-Specification.md">
        <front>
          <title>drand Protocol Specification</title>
          <author><organization>drand</organization></author>
          <date year="2025" month="April" day="25"/>
        </front>
        <refcontent>Protocol Specification, commit 0a551bdc229a139c1a6862306bcbf0899ee3ea53; accessed 13 September 2026.</refcontent></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="EU-2026-1744" target="https://eur-lex.europa.eu/legal-content/EN/TXT/HTML/?uri=CELEX:32026R1744">
        <front>
          <title>Regulation (EU) 2026/1744 of the European Parliament and of the Council of 8 July 2026 amending Regulations (EU) 2024/1689, (EU) 2018/1139 and (EU) 2023/1230 as regards the simplification of the implementation of harmonised rules on artificial intelligence (Digital Omnibus on AI)</title>
          <author><organization>European Parliament and Council of the European Union</organization></author>
          <date year="2026" month="July" day="8"/>
        </front>
        <refcontent>OJ L 2026/1744, 24.7.2026</refcontent>
      </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-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="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="COLORADO-ADMT" target="https://leg.colorado.gov/bills/sb26-189">
        <front>
          <title>Senate Bill 26-189, Automated Decision-Making Technology</title>
          <author><organization>State of Colorado, Seventy-Fifth General Assembly, Second Regular Session</organization></author>
          <date year="2026" month="May" day="14"/>
        </front>
      </reference>
      <reference anchor="TEXAS-TRAIGA" target="https://capitol.texas.gov/tlodocs/89R/billtext/html/HB00149F.HTM">
        <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/system/files/documents/2023/12/rf23_nycrr_part_500_amend02_20231101.pdf">
        <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>
        </reference>
      <reference anchor="CIRCIA-681B" target="https://www.govinfo.gov/content/pkg/USCODE-2024-title6/pdf/USCODE-2024-title6-chap1-subchapXVIII-partD-sec681b.pdf"><front><title>6 U.S.C. 681b - Required reporting of certain cyber incidents</title><author><organization>United States Congress</organization></author><date year="2024"/></front><refcontent>United States Code, 2024 Edition, Title 6, Chapter 1, Subchapter XVIII, Part D, Section 681b. Official GPO source read 13 September 2026. The edition marker was read from the govinfo granule metadata record (accessId USCODE-2024-title6-chap1-subchapXVIII-partD-sec681b, baseEditionYear 2024, isCurrentEdition true); the section PDF itself carries no edition string. Access route: the citation resolver https://www.govinfo.gov/link/uscode/6/681b redirected to this edition-pinned granule on that date. The resolver is not version-pinned and will move to a later edition once one is published, so the granule above is the citation of record. The corresponding House U.S. Code section URL was attempted but retrieval timed out; the successful GPO access is recorded separately.</refcontent></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>
        </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>
      </references>

    <references>
      <name>Informative References</name>
      <reference anchor="LAMPS-COMPOSITE" target="https://datatracker.ietf.org/doc/html/draft-ietf-lamps-pq-composite-sigs-19">
        <front>
          <title>Composite Module-Lattice-Based Digital Signature Algorithm (ML-DSA) for use in X.509 Public Key Infrastructure</title>
          <author><organization>IETF LAMPS Working Group</organization></author>
          <date year="2026" month="April" day="21"/>
        </front>
        <seriesInfo name="Internet-Draft" value="draft-ietf-lamps-pq-composite-sigs-19"/>
      <refcontent>Work in Progress. Citation does not imply IETF endorsement or publication as an RFC.</refcontent></reference>
      <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="DRAFT-HOPLEY-X402" target="https://datatracker.ietf.org/doc/html/draft-hopley-x402-compliance-receipt-02">
        <front>
          <title>Categorical Compliance Screening Receipt Format for Agentic-Payment Flows</title>
          <author fullname="Christopher Hopley" initials="C." surname="Hopley"/>
          <date year="2026" month="May" day="30"/>
        </front>
        <seriesInfo name="Internet-Draft" value="draft-hopley-x402-compliance-receipt-02"/>
        <refcontent>Work in Progress. Citation does not imply IETF endorsement or publication as an RFC.</refcontent></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"/>
        </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"/>
        </reference>
      <reference anchor="RFC7942" target="https://www.rfc-editor.org/info/rfc7942">
        <front>
          <title>Improving Awareness of Running Code: The Implementation Status Section</title>
          <author fullname="Y. Sheffer" initials="Y." surname="Sheffer"/>
          <author fullname="A. Farrel" initials="A." surname="Farrel"/>
          <date year="2016" month="July"/>
        </front>
        <seriesInfo name="BCP" value="205"/>
        <seriesInfo name="RFC" value="7942"/>
        <seriesInfo name="DOI" value="10.17487/RFC7942"/>
        </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"/>
        </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"/>
        </reference>
      <reference anchor="DRAFT-SOKOLOV-AEP-COMPOSITION" target="https://datatracker.ietf.org/doc/html/draft-sokolov-rats-aep-composition-06">
        <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="31"/>
        </front>
        <seriesInfo name="Internet-Draft" value="draft-sokolov-rats-aep-composition-06"/>
        <refcontent>Work in Progress. Citation does not imply IETF endorsement or publication as an RFC.</refcontent></reference>
      <reference anchor="DRAFT-MSEBENZI-EVIDENCE-ACTION" target="https://datatracker.ietf.org/doc/html/draft-msebenzi-evidence-action-00">
        <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"/>
        <refcontent>Work in Progress. Citation does not imply IETF endorsement or publication as an RFC.</refcontent></reference>
      <reference anchor="ASQAV-SDK" target="https://github.com/jagmarques/asqav-sdk/tree/6137cb95edcfcd820ecff0e11c6f603b2da664b1">
        <front>
          <title>asqav-sdk: Verifier Conformance Vectors</title>
          <author><organization>Asqav</organization></author>
          <date year="2026"/>
        </front>
        </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>
        </reference>
    <reference anchor="CLAUDE-HOOKS" target="https://code.claude.com/docs/en/hooks"><front><title>Claude Code Hooks Reference</title><author><organization>Anthropic</organization></author><date year="2026" month="September" day="12"/></front><refcontent>Accessed 12 September 2026; runtime-specific behavior is version-dependent.</refcontent></reference><reference anchor="MCP-AUTH" target="https://modelcontextprotocol.io/specification/2025-11-25/basic/authorization"><front><title>Model Context Protocol Authorization, 2025-11-25</title><author><organization>Model Context Protocol contributors</organization></author><date year="2026" month="September" day="12"/></front><refcontent>Accessed 12 September 2026; runtime-specific behavior is version-dependent.</refcontent></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="GDPR" target="https://eur-lex.europa.eu/eli/reg/2016/679/oj/eng"><front><title>Regulation (EU) 2016/679 (General Data Protection Regulation)</title><author><organization>European Parliament and Council</organization></author><date year="2016"/></front><refcontent>Official source; accessed 12 September 2026.</refcontent></reference><reference anchor="ICO-ANON" target="https://ico.org.uk/for-organisations/uk-gdpr-guidance-and-resources/data-sharing/anonymisation/introduction-to-anonymisation/"><front><title>Introduction to Anonymisation</title><author><organization>Information Commissioner's Office</organization></author><date year="2025"/></front><refcontent>Official source; accessed 12 September 2026.</refcontent></reference><reference anchor="CHROME-CONTENT-SCRIPTS" target="https://developer.chrome.com/docs/extensions/develop/concepts/content-scripts"><front><title>Content Scripts</title><author><organization>Chrome for Developers</organization></author><date year="2026"/></front><refcontent>Official source; accessed 12 September 2026.</refcontent></reference><reference anchor="CHROME-WEBREQUEST" target="https://developer.chrome.com/docs/extensions/reference/api/webRequest"><front><title>chrome.webRequest</title><author><organization>Chrome for Developers</organization></author><date year="2026"/></front><refcontent>Official source; accessed 12 September 2026.</refcontent></reference><reference anchor="RFC9849" target="https://www.rfc-editor.org/info/rfc9849"><front><title>TLS Encrypted Client Hello</title><author><organization>RFC Editor</organization></author><date year="2026"/></front><refcontent>Official source; accessed 12 September 2026.</refcontent></reference><reference anchor="ACTA-RECEIPTS" target="https://datatracker.ietf.org/doc/html/draft-farley-acta-signed-receipts-03">
        <front>
          <title>Signed Decision Receipts for Machine-to-Machine Access Control</title>
          <author fullname="Tom Farley" initials="T." surname="Farley"/>
          <date year="2026" month="August" day="29"/>
        </front>
        <seriesInfo name="Internet-Draft" value="draft-farley-acta-signed-receipts-03"/>
      <refcontent>Work in Progress. Citation does not imply IETF endorsement or publication as an RFC.</refcontent></reference>
      </references>

    <section anchor="example" numbered="true"><name>Worked Examples (Informative)</name>
      <t>This appendix shows two receipts and one member. The first receipt is a Compliance Receipt exactly as the reference issuing platform emitted it in production on 2026-09-04 (signature identifier <tt>sig_XcmE-To6pSVUUJI6SUGx9g</tt>, issued under the platform operator's own organisation): a hash-mode <tt>protectmcp:lifecycle</tt> receipt signed with ML-DSA-65, carrying <tt>seq</tt> 63, a <tt>key_thumbprint</tt>, and both anchor types, with the OpenTimestamps commitment upgraded to Bitcoin block 965451. It is published byte-exact, with its <tt>seq</tt> 62 predecessor and the key set that resolves it, as conformance vector <tt>asqav-24-anchor-block-hash-prod</tt> in the receipt corpus (<tt>verifier/conformance-vectors/</tt>) of <xref target="ASQAV-SDK"/>, so every value below can be checked against the bytes. The second receipt is illustrative: a payload-mode <tt>protectmcp:decision</tt> receipt for the <xref target="article-26"/> binding, carrying the member set the reference implementation emits in payload mode, with abbreviated values and placeholder signature and anchors. The third fragment shows the <tt>counterparty_binding</tt> member of <xref target="counterparty-binding-wire"/>, which no production receipt carried on 2026-09-04 and which is therefore shown separately and marked illustrative.</t>
      <t>Rendering conventions, both examples: members appear in JCS-canonical lexicographic order (<xref target="RFC8785"/>), which is the byte order the signature and every digest of this profile are computed over; digest-valued strings are shown as their first sixteen and last eight hexadecimal characters joined by an ellipsis; the three long base64 values of the first receipt (the signature, 4412 characters; the RFC 3161 token, 6528 characters; the OpenTimestamps proof, 1772 characters) are elided with their lengths stated, and every other value of the first receipt is verbatim.</t>
      <section anchor="example-production" numbered="true"><name>A production receipt, byte-exact in the corpus</name>
        <t>The receipt:</t>
        <sourcecode type="json">
{
  "anchors": [
    {
      "type": "rfc3161",
      "value": "&lt;6528 base64 characters, elided&gt;"
    },
    {
      "anchor_block_hash": "0000000000000000...6499b499",
      "status": "anchored",
      "type": "opentimestamps",
      "value": "&lt;1772 base64 characters, elided&gt;"
    }
  ],
  "payload": {
    "action_id": "act_yDx9hcwMgBqewK1mktn1Fg",
    "action_ref": "sha256:b15eeb40a51b1a0d...a1908488",
    "agent_id": "agt_uJgllxkGt5xQ6Xks",
    "decision": "observation",
    "hash": "sha256:b15eeb40a51b1a0d...a1908488",
    "hash_algo": "sha256",
    "issued_at": "2026-09-04T07:20:51.935103Z",
    "issuer_id": "f94f66c0-c580-432d-a041-29374f7aee07",
    "key_thumbprint": "sha256:5b98a75dd05ba63d...8ad848bb",
    "metadata": {
      "heartbeat_description": {
        "idle_seconds": 3617,
        "interval_seconds": 3600
      }
    },
    "mode": "hash",
    "org_id": "f94f66c0-c580-432d-a041-29374f7aee07",
    "payload_digest": {
      "hash": "b15eeb40a51b1a0d...a1908488",
      "size": 45
    },
    "policy_digest": "sha256:5ad43b4f60033435...836e467c",
    "previousReceiptHash": "1149a5d06a774a3c...48f4f5f7",
    "seq": 63,
    "server_timestamp": "2026-09-04T07:20:51.935103Z",
    "type": "protectmcp:lifecycle",
    "v": 1
  },
  "signature": {
    "alg": "ML-DSA-65",
    "kid": "f94f66c0-c580-432d-a041-29374f7aee07",
    "sig": "&lt;4412 base64 characters, elided&gt;"
  }
}
</sourcecode>
        <t>The key set entry it resolves to, as published at the platform's <tt>/.well-known/jwks.json</tt> (<xref target="service-identity"/>). The <tt>pub</tt> member is the raw ML-DSA-65 public key, 1952 bytes, in unpadded base64url; recomputing SHA-256 over the JCS form of <tt>{"alg","kty","pub"}</tt> from this entry reproduces the receipt's <tt>key_thumbprint</tt> (<xref target="key-thumbprint"/>).</t>
        <sourcecode type="json">
{
  "agent_id": "agt_uJgllxkGt5xQ6Xks",
  "alg": "ML-DSA-65",
  "issuer_id": "f94f66c0-c580-432d-a041-29374f7aee07",
  "key_thumbprint": "sha256:5b98a75dd05ba63d...8ad848bb",
  "kid": "YS-AwmqpURR7omdnBsGU0A",
  "kty": "AKP",
  "org_id": "f94f66c0-c580-432d-a041-29374f7aee07",
  "pub": "&lt;2603 base64 characters, elided&gt;",
  "status": "active"
}
</sourcecode>
        <t>What an offline verifier establishes from these bytes and this key set, and what it cannot:</t>
        <ul>
          <li>Signature: ML-DSA-65 over the JCS serialization of the <tt>payload</tt> member verifies under the published key. The <tt>kid</tt> in the signature object carries the issuing organisation's identifier on the hosted tier; the signing key is selected through the signed <tt>agent_id</tt> and confirmed by <tt>key_thumbprint</tt>, so a key substituted under the same identifier is detected (<xref target="key-thumbprint"/>).</li>
          <li>Chain: SHA-256 over the JCS serialization of the predecessor's <tt>payload</tt> member equals <tt>previousReceiptHash</tt> (<xref target="hash-chain"/>), and <tt>seq</tt> 63 follows the predecessor's 62 with nothing withheld between them (<xref target="seq"/>).</li>
          <li><tt>payload_digest</tt>: This receipt carries no <tt>context</tt>, so the recomputation of <xref target="mandatory-checks"/> does not apply; the separate <tt>hash</tt> member holds the self-describing fingerprint of the Action, and <tt>hash_algo</tt> records how it was produced.</li>
          <li>Anchors (<xref target="anchoring"/>): the RFC 3161 token binds the envelope-minus-anchors digest and verifies only against the issuing TSA's key material; the OpenTimestamps proof carries a Bitcoin attestation at height 965451 and completes only against a Bitcoin header source. The corpus ships neither, so a conforming verifier run on the corpus alone reports the anchoring axis as unverifiable rather than failed, and reports <tt>status</tt> and <tt>anchor_block_hash</tt> as the informational members they are. With a header source, the block whose hash is the <tt>anchor_block_hash</tt> shown is the one the proof resolves into.</li>
        </ul>
      </section>
      <section anchor="example-decision" numbered="true"><name>An illustrative decision receipt for the Article 26 binding</name>
        <t>This synthetic example illustrates a payload-mode decision receipt. Values are placeholders or abbreviated, and it is not a cryptographically valid test vector. It MUST NOT be replayed or trusted. Reproducible conformance vectors require complete source-bound bytes, keys, expected results and the selected verification policy.</t><sourcecode type="json">
{
  "payload": {
    "action_id": "act_5f4nc7MqiGHwN5_RRgOXqw",
    "action_ref": "sha256:fc9deb0c3dc4acf2...e8482781",
    "action_type": "tool_call",
    "agent_id": "agt_DAsgntrbV_VAIBbl",
    "context": {
      "tool": "deploy",
      "target_digest": "sha256:3c0f1a...9e21"
    },
    "controls_evaluated": {
      "content_scan": {"blocking": false, "ran": true},
      "emergency_halt": {"checked": true, "halted": false},
      "policy": {"evaluated": true, "matched_count": 1},
      "result": "allowed"
    },
    "decision": "allow",
    "expires_at": "2026-09-02T21:17:18.504801Z",
    "issued_at": "2026-09-01T21:17:18.504801Z",
    "issuer_id": "00000000000000000098",
    "iteration_id": "task-2026-09-01-01a3",
    "key_thumbprint": "sha256:8fd93ce505a84acf...d405c1e2",
    "mode": "payload",
    "nonce": "59d1668bab924760317f4c39",
    "org_id": "f94f66c0-c580-432d-a041-29374f7aee07",
    "payload_digest": {
      "hash": "0a44d2c8e3f5b7a9...e7f9b2a4",
      "size": 61
    },
    "policy_digest": "sha256:7eb08c4ee16e9744...51935a1c",
    "previousReceiptHash": "3fd8f9f8093db756...d5618f38",
    "reason": "policy:within_limits",
    "risk_class": "deployer:financial:medium",
    "sandbox_state": "enabled",
    "seq": 10,
    "timestamp": "2026-09-01T21:17:18.504801Z",
    "tool_name": "deploy",
    "type": "protectmcp:decision",
    "v": 1
  },
  "signature": {
    "alg": "ML-DSA-65",
    "kid": "00000000000000000098",
    "sig": "&lt;4412 base64url characters, placeholder&gt;"
  },
  "anchors": [
    {"type": "rfc3161", "value": "&lt;placeholder&gt;"},
    {"type": "opentimestamps", "value": "&lt;placeholder&gt;",
     "status": "anchored",
     "anchor_block_hash": "&lt;64 lowercase hex, placeholder&gt;"}
  ]
}
</sourcecode>
        <t>The example illustrates these profile fields:</t><ul>
          <li><tt>issuer_id</tt> resolves through the trust anchor metadata in the Audit Pack to the named Deployer (shown here as a 20-character ISO 17442 Legal Entity Identifier; the reference platform's hosted tier emits the organisation identifier, as the first example shows);</li>
          <li><tt>policy_digest</tt> resolves to a retained policy artefact and <tt>controls_evaluated</tt> records which controls ran, per the false-attestation guard of the extension registry;</li>
          <li><tt>sandbox_state</tt> records the producer's sandbox assertion. It does not establish an OS boundary or satisfy a statutory sandbox requirement.</li><li><tt>previousReceiptHash</tt> and <tt>seq</tt> link the receipt into the chain per <xref target="hash-chain"/> and <xref target="seq"/>;</li>
          <li>both an RFC 3161 anchor and an OpenTimestamps anchor are present per <xref target="anchoring"/>.</li>
        </ul>
        <t>For each selected legal mapping, the verifier checks the applicable record-specific evidence policy and reports unavailable evidence or unresolved applicability. Incident classification is checked only where that mapping applies. These technical checks do not establish legal compliance.</t></section>
      <section anchor="example-counterparty" numbered="true"><name>The counterparty_binding member (illustrative)</name>
        <t>When agent B's receipt binds agent A's receipt, B's signed payload carries the member below (<xref target="counterparty-binding"/>, <xref target="counterparty-binding-wire"/>): <tt>receipt_ref</tt> names A's receipt, <tt>envelope_hash</tt> is the base64url SHA-256 digest of A's envelope-minus-anchors object as A served it, and <tt>scope</tt> declares that digest scope. The fragment is illustrative and makes no claim about production issuance.</t>
        <sourcecode type="json">
"counterparty_binding": {
  "receipt_ref": "sig_ptqHVATi_BiVw8I4ASihcA",
  "envelope_hash": "&lt;43 base64url characters&gt;",
  "scope": "envelope_minus_anchors"
}
</sourcecode>
      </section>
    </section>

    <section anchor="changelog"><name>Change Log</name><t>This appendix records the scope of the local working revision. Earlier editorial detail remains in the preserved source revision and its audit archive. It is historical, not an additional set of conformance requirements. Remove this appendix before RFC publication.</t><section anchor="cl-09"><name>Changes in draft -09</name><t>The local 12 September 2026 reconciliation clarifies wire and digest scopes, version handling, optional anchors, signed operator-based witness policy, capture limits, heartbeat evidence and per-axis unknown results. It removes unsupported legal retention floors and evidence guarantees, corrects legal applicability and privacy rules, and revises reference status and language. These changes describe target behavior pending implementation acceptance.</t><t>This edition makes the receipt definitions, Action-descriptor digest, signature contract, signed Audit Pack projection, key trust and extension rules self-contained. ACTA remains an informative antecedent. OpenTimestamps, DSSE and in-toto remain technical dependencies; drand is pinned and normative for the selected beacon verification feature. Catalogue-only APKI, AML, AAT and delegation references are removed, and fixture claims are limited to the cited corpus. These specification changes require implementation and vector reconciliation; this note is not a claim that those checks have passed.</t><t>The base profile recommends timestamp anchoring with SHOULD so that issuance and offline evidence retention do not depend on immediate access to an external timestamp service. A selected binding or relying-party policy can require an anchor and then withhold full verification while it is pending. This choice does not require a particular hosted service tier or establish a statutory timestamp requirement. The signed-optional witness-policy design binds any producer-declared quorum to the receipt while allowing relying parties to impose stronger external requirements; absent declarations are reported explicitly rather than assumed satisfied.</t></section><section anchor="cl-08"><name>Changes in draft -08</name><t>Historical revision. Its changes are incorporated only to the extent retained in the current normative body; superseded wording does not govern this revision.</t></section><section anchor="cl-07"><name>Changes in draft -07</name><t>Historical revision. Its changes are incorporated only to the extent retained in the current normative body; superseded wording does not govern this revision.</t></section><section anchor="cl-06"><name>Changes in draft -06</name><t>Historical revision. Its changes are incorporated only to the extent retained in the current normative body; superseded wording does not govern this revision.</t></section><section anchor="cl-05"><name>Changes in draft -05</name><t>Historical revision. Its changes are incorporated only to the extent retained in the current normative body; superseded wording does not govern this revision.</t></section><section anchor="cl-04"><name>Changes in draft -04</name><t>Historical revision. Its changes are incorporated only to the extent retained in the current normative body; superseded wording does not govern this revision.</t></section><section anchor="cl-03"><name>Changes in draft -03</name><t>Historical revision. Its changes are incorporated only to the extent retained in the current normative body; superseded wording does not govern this revision.</t></section><section anchor="cl-02"><name>Changes in draft -02</name><t>Historical revision. Its changes are incorporated only to the extent retained in the current normative body; superseded wording does not govern this revision.</t></section><section anchor="cl-01"><name>Changes in draft -01</name><t>Historical revision. Its changes are incorporated only to the extent retained in the current normative body; superseded wording does not govern this revision.</t></section><section anchor="cl-00"><name>Changes in draft -00</name><t>Historical revision. Its changes are incorporated only to the extent retained in the current normative body; superseded wording does not govern this revision.</t></section></section><section anchor="capture-topologies" numbered="true"><name>Capture Topologies for Compliance Receipt Emission</name>
      <t>This appendix describes deployment patterns and their limits. Placement alone does not establish payload visibility, identity, enforcement or complete capture. Each implementation documents the actual transport, permissions, configuration and failure behavior. The coverage requirements in <xref target="coverage-class"/> are normative; the topology examples are informative.</t><t><tt>capture_topology</tt> MAY appear as an informational Audit Pack attribute. It does not change the receipt signature or authorize a stronger verification claim. A new topology needs an explicit evidence mapping rather than an assumed IANA registration.</t><section anchor="capture-in-process-sdk"><name>In-Process SDK</name><t>An application may link the receipt SDK and invoke it in the action path. The application process is the trust boundary; sibling or alternative execution paths are outside that coverage unless separately controlled. Captured fields depend on the configured privacy mode, and a digest does not imply the SDK retained full request or response content. Enforcing callbacks and passive callbacks must be distinguished by their documented native semantics under <xref target="coverage-class"/>.</t></section>

      <section anchor="capture-network-proxy" numbered="true"><name>Network-Layer Egress Proxy</name>
        <t>An in-path proxy records the traffic that actually passes through its supported transport. TLS payload visibility requires an applicable termination or application integration; DNS rewriting or an SNI router alone does not decrypt payloads or prove that alternate routes are blocked. Certificate pinning and encrypted handshake metadata can constrain visibility.</t><t>Vocabulary value: <tt>network_proxy</tt>. Coverage depends on routing, identity binding and the deployment's failure policy. A proxy record attests to what the proxy observed. It does not by itself identify the initiating employee or prove that every application used the proxy. Sensitive network identifiers remain subject to <xref target="privacy"/>.</t></section>

      <section anchor="capture-browser-extension" numbered="true"><name>Browser Extension</name>
        <t>A browser extension can observe or instrument supported page activity within its granted permissions and execution contexts. Content scripts normally run in an isolated world; intercepting page-defined functions requires a deliberately designed integration. Extension APIs and permissions do not imply access to every response body, stream, frame or browser session.</t><t>Vocabulary value: <tt>browser_extension</tt>. The implementation declares which requests and fields it captures, when instrumentation begins and which contexts are excluded. Installing an enterprise certificate authority is not a general prerequisite for content-script access to page data and does not establish complete capture. A separate network interception design has separate TLS requirements. See <xref target="CHROME-CONTENT-SCRIPTS"/> and <xref target="CHROME-WEBREQUEST"/>.</t></section>

      <section anchor="capture-ebpf-observer" numbered="true"><name>eBPF SNI Observer</name>
        <t>A host sensor can record the kernel events and metadata exposed by its installed probes and permissions. Available fields depend on the operating system, probe placement, application transport and encryption. Encrypted ClientHello can conceal the inner server name; see <xref target="RFC9849"/>. A connection event alone does not prove that a particular model call occurred or identify the responsible employee.</t><t>Vocabulary value: <tt>ebpf_observer</tt>. The report distinguishes observed process or connection metadata from inferred activity. It does not claim prompt or response visibility without a separate demonstrated capture path. This topology is an observation pattern, not proof of complete host enforcement.</t></section>

      <section anchor="capture-mcp-proxy" numbered="true"><name>MCP Transparent Proxy</name>
        <t>An MCP proxy observes messages that traverse the transports it implements. It declares the protocol revision, request and response coverage, identity source and authentication boundary. HTTP authorization and local stdio credentials are distinct deployment concerns under <xref target="MCP-AUTH"/>.</t><t>Vocabulary value: <tt>mcp_proxy</tt>. A proxy may record a request and its observed response. Two receipts signed only by that proxy remain two proxy assertions; they are not independent endpoint acknowledgements and cannot expose a proxy that deliberately fabricates both. A counterparty binding supplies independent evidence only to the extent that the peer's independently authenticated signature and scope support it. Bypassed traffic and unsupported methods remain outside the measured coverage.</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. </t><t>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 Independent Stream document requests no IANA action for capture_topology. RFC 8726 generally prohibits new IANA registries for this stream, with a narrow exception for subcode registries tied to an allocated code point. That exception does not establish authority for the standalone tables here. These are externally maintained profile tables. Any future IANA request must satisfy the applicable registration policy and publication procedure. See <xref target="RFC8726"/>.</t></section>
      <section anchor="regulatory-currency"><name>Regulatory Currency and Verification Dates</name><t>This appendix is informative. Sources and their applicability must be checked when this draft is revised and before a deployment selects a legal mapping. A successful link check is not a legal review, and an inaccessible page is not evidence that the law has not changed. The local audit preserves a separate reference inventory with retrieval results and source hashes; this draft makes no claim that a scheduled source-monitoring service has been implemented.</t><t>The 12 September 2026 review checked official EU AI Act and amendment text, the Commission's Article 50 guidance, DORA, official Texas legislation, the NYDFS amended rule, the SEC 2022 adopting release, HHS Security Rule guidance, RFC publications and current native integration documentation. Some sources required an alternate official access path. ISO catalog pages establish publication metadata, not a reading of the full paid standards. During that 12 September review, eCFR access was restricted; the SEC release and HHS guidance do not establish the absence of later amendments.</t><t>CIRCIA remains provisional in this draft because this review did not verify an operative final rule. Colorado's implementing rules and effective-date conditions require a final check before the mapping is used. The current legal text and applicable exceptions control over any summary here. This is a bounded review of named mappings, not a catalogue of every law worldwide.</t><t>A bounded follow-up on 13 September 2026 read DORA Articles 2 and 64, current eCFR Sections 164.302, 164.304 and 164.316, the official SB 26-189 session law, and 6 U.S.C. 681b through <xref target="CIRCIA-681B"/>. Current eCFR access succeeded for those sections. The corresponding <eref target="https://uscode.house.gov/view.xhtml?req=granuleid:USC-prelim-title6-section681b&amp;num=0&amp;edition=prelim">House U.S. Code section</eref> was attempted but timed out; this review used the official GPO alternative and does not claim a successful House reread. The <eref target="https://www.reginfo.gov/public/do/eAgendaViewRule?RIN=1670-AA04&amp;pubId=202510">official CIRCIA agenda entry</eref> listed a September 2026 target; the review did not establish an operative final rule.</t><t>For every legal mapping, maintain a record of the official source, exact provision and version, publication and applicability dates, verification date, reviewer, pending changes, and any retrieval gap. Do not label a claim verified solely because a URL is reachable. A changed source or unresolved legal conflict requires review of the mapping and its conformance examples.</t></section><!-- end regulatory-currency -->
    </section>
  </back>
</rfc>