<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE rfc [
  <!ENTITY nbsp    "&#160;">
  <!ENTITY zwsp   "&#8203;">
  <!ENTITY nbhy   "&#8209;">
  <!ENTITY wj     "&#8288;">
]>
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" category="info" docName="draft-vidiniotis-crp-headers-00" ipr="trust200902" submissionType="independent" xml:lang="en" version="3">
  <front>
    <title abbrev="CRP Headers">Context Relay Protocol (CRP) -- HTTP Header Field Vocabulary</title>
    <seriesInfo name="Internet-Draft" value="draft-vidiniotis-crp-headers-00"/>
    <author fullname="Constantinos Vidiniotis" initials="C." surname="Vidiniotis">
      <organization>AutoCyber AI Pty Ltd</organization>
      <address>
        <postal>
          <country>Australia</country>
        </postal>
        <email>contact@crprotocol.io</email>
        <uri>https://crprotocol.io</uri>
      </address>
    </author>
    <date year="2026" month="May" day="24"/>
    <area>ART</area>
    <keyword>AI</keyword>
    <keyword>LLM</keyword>
    <keyword>HTTP headers</keyword>
    <keyword>safety</keyword>
    <keyword>hallucination</keyword>
    <keyword>provenance</keyword>
    <keyword>compliance</keyword>
    <keyword>context</keyword>
    <keyword>governance</keyword>
    <abstract><t>This document defines the complete vocabulary of HTTP header fields for the Context Relay Protocol (CRP). CRP header fields carry AI-specific metadata — context quality, safety risk, provenance integrity, regulatory classification, agent state, and memory layer information — as standard HTTP header fields on AI request/response cycles. This specification provides normative definitions for 58 header fields across six namespaces, suitable for provisional registration in the IANA HTTP Field Name Registry.</t>
    </abstract>
    <note title="Feedback">
      <t>This is a working draft intended for submission as an IETF Internet-Draft (draft-vidiniotis-crp-headers-00). Comments and issues: <eref target="https://github.com/crprotocol/spec/issues">https://github.com/crprotocol/spec/issues</eref>. The header field definitions in this document are also the basis for IANA provisional registration requests. All CRP header fields use the <tt>CRP-</tt> prefix.</t>
    </note>
  </front>
  <middle>
    <section anchor="introduction">
      <name>Introduction</name>
      <section anchor="motivation"><name>Motivation</name><t>HTTP became the universal substrate for networked applications in part because its header mechanism provided a standardised, extensible metadata contract readable by any participant in a request/response chain — clients, servers, proxies, CDNs, WAFs — without parsing message bodies. Cache-Control made web-scale caching possible. Content-Security-Policy made transport-layer browser security possible. Both operate on the principle that metadata declared in headers is more interoperable than metadata embedded in payloads.</t>
      <t>AI inference calls — requests to large language models — currently carry no standardised metadata about the quality, safety, or governance status of their responses. Every application operator instruments this separately, producing non-interoperable, non-verifiable, non-portable safety signals.</t>
      <t>CRP header fields apply the HTTP lesson to AI: standardised metadata in headers, readable by any participant in the AI call chain, without parsing inference payloads.</t>
    </section>
      <section anchor="scope"><name>Scope</name><t>This document defines the normative semantics, syntax, allowed values, directionality, and interaction rules for all CRP header fields. It does not define:</t>
      <ul spacing="normal">
        <li>
          <t>The CRP gateway implementation (see CRP-SPEC-001)</t>
        </li>
        <li>
          <t>The Decision Provenance Engine that populates safety headers (see CRP-SPEC-005)</t>
        </li>
        <li>
          <t>The envelope packing algorithm that populates context headers (see CRP-SPEC-003)</t>
        </li>
        <li>
          <t>The Safety Policy directive language carried in <tt>CRP-Safety-Policy</tt> (see CRP-SPEC-006)</t>
        </li>
        <li>
          <t>The session token structure carried in <tt>CRP-Set-Session</tt> (see CRP-SPEC-007)</t>
        </li>
      </ul>
    </section>
      <section anchor="relationship-to-http"><name>Relationship to HTTP</name><t>CRP header fields are standard HTTP header fields as defined in RFC 9110. They MUST be transmitted as HTTP header fields in the normal HTTP header section. They MUST NOT be placed in HTTP trailers unless explicitly noted.</t>
      <t>CRP header fields are distinct from the inference payload (request body and response body). Per Axiom 4 of CRP-SPEC-001, CRP header fields MUST be stripped by the CRP gateway before forwarding requests to LLM providers.</t>
      </section>
    </section>
    <section anchor="conventions"><name>Conventions</name><t>The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be interpreted as described in BCP 14 [RFC2119] [RFC8174].</t>
    <section anchor="directionality-notation"><name>Directionality Notation</name><ul spacing="normal">
        <li>
          <t><strong>REQ</strong> — Header is sent in the HTTP <em>request</em> (client → gateway)</t>
        </li>
        <li>
          <t><strong>RES</strong> — Header is sent in the HTTP <em>response</em> (gateway → client)</t>
        </li>
        <li>
          <t><strong>BOTH</strong> — Header appears in both request and response (semantics may differ)</t>
        </li>
      </ul>
    </section><section anchor="value-notation"><name>Value Notation</name><t>Header value syntax is described using ABNF [RFC5234]. The following base rules apply:</t>
      <sourcecode type="abnf">
crp-token     = 1*( ALPHA / DIGIT / "-" / "_" / "." )
crp-hash      = "sha256:" 64HEXDIG
crp-float     = 1*DIGIT "." 1*DIGIT
crp-fraction  = crp-float  ; constrained to 0.0 – 1.0
crp-uri       = &lt;URI as defined in RFC 3986&gt;
crp-iso8601   = &lt;date-time as defined in ISO 8601&gt;
crp-version   = 1*DIGIT "." 1*DIGIT "." 1*DIGIT
</sourcecode></section><section anchor="default-behaviour"><name>Default Behaviour</name><t>Unless stated otherwise:</t><ul spacing="normal"><li>Missing optional request headers indicate client preference defers to gateway defaults</li><li>Missing response headers indicate the gateway did not compute the value for this call</li><li>Header values are case-insensitive unless stated otherwise</li></ul></section></section>
    <section anchor="header-field-design-principles"><name>Header Field Design Principles</name><t>CRP header fields follow these design principles, derived from existing HTTP header best practices:</t>
    <t><strong>3.1 One signal, one header.</strong> Each header carries a single, clearly defined signal. Composite values (e.g., <tt>CRP-Safety-Distortions: NUMBER_CHANGED:2, NEGATION_FLIP:1</tt>) use structured syntax where multiple values must be carried.</t>
    <t><strong>3.2 Machine-readable values.</strong> All values are designed for programmatic parsing by middleware, WAFs, and logging systems — not just human reading. Enum values use SCREAMING_SNAKE_CASE. Numeric values use decimal notation.</t>
    <t><strong>3.3 Gateway-generated response headers are authoritative.</strong> Response headers emitted by the CRP gateway are computed from live protocol data. They MUST NOT be set by clients and MUST NOT reflect LLM output. The gateway is the sole authoritative source for all <tt>CRP-Safety-*</tt>, <tt>CRP-Provenance-*</tt>, and <tt>CRP-Compliance-*</tt> response headers.</t>
    <t><strong>3.4 Request headers express client preferences, not mandates.</strong> <tt>CRP-Accept-*</tt> and <tt>CRP-Safety-Policy</tt> headers declare what the client wants. The gateway SHOULD honour them; where it cannot (e.g., CKF has no relevant facts), it MUST document the deviation in the corresponding response header.</t>
    <t><strong>3.5 Progressive adoption.</strong> Applications that ignore CRP response headers receive no harm — headers carry metadata, not payload. Applications that read and gate on CRP headers gain safety and governance capability.</t>
    </section>
    <section anchor="namespace-crp-context-"><name>Namespace: CRP-Context-*</name><t>Context headers carry the state of the Context Envelope and CKF interaction for the current call. They are the AI equivalent of HTTP content negotiation and cache-control headers.</t>
    <section anchor="crp-context-quality-tier"><name>CRP-Context-Quality-Tier</name><t><strong>Direction:</strong> RES<br/>
        <strong>Required:</strong> RECOMMENDED<br/>
        <strong>Stability:</strong> Stable</t>
      <t><strong>Definition:</strong> The quality classification of the Context Envelope assembled for this call, computed by the 3-phase envelope packing algorithm (see CRP-SPEC-003). Quality tier reflects the coverage, saturation, and relevance score of facts included in the envelope.</t>
      <t><strong>Syntax:</strong>
        </t><sourcecode type="abnf">
CRP-Context-Quality-Tier = "S" / "A" / "B" / "C" / "D"
</sourcecode><t><strong>Values:</strong></t>
      <table>
        <thead>
          <tr>
            <th align="left">Value</th>
            <th align="left">Meaning</th>
            <th align="left">Saturation Range</th>
            <th align="left">Use</th>
          </tr>
        </thead>
        <tbody>
          <tr>
            <td align="left">
              <tt>S</tt></td>
            <td align="left">Superior — all critical facts included, optimal relevance</td>
            <td align="left">≥ 0.99</td>
            <td align="left">High-stakes decisions</td>
          </tr>
          <tr>
            <td align="left">
              <tt>A</tt></td>
            <td align="left">High — comprehensive coverage with minor gaps</td>
            <td align="left">≥ 0.95</td>
            <td align="left">Standard production</td>
          </tr>
          <tr>
            <td align="left">
              <tt>B</tt></td>
            <td align="left">Adequate — majority of relevant facts included</td>
            <td align="left">≥ 0.85</td>
            <td align="left">Acceptable for most uses</td>
          </tr>
          <tr>
            <td align="left">
              <tt>C</tt></td>
            <td align="left">Marginal — significant gaps in relevant coverage</td>
            <td align="left">≥ 0.70</td>
            <td align="left">Use with caution</td>
          </tr>
          <tr>
            <td align="left">
              <tt>D</tt></td>
            <td align="left">Deficient — critical facts missing or insufficient context</td>
            <td align="left">&lt; 0.70</td>
            <td align="left">Remediation required</td>
          </tr>
        </tbody>
      </table>
      <t><strong>Example:</strong>
        </t><artwork type="http-message">
CRP-Context-Quality-Tier: A
</artwork><t><strong>Interaction:</strong> Clients MAY set <tt>CRP-Accept-Quality</tt> to declare minimum acceptable tier. Gateway MUST retry with upgraded strategy or return HTTP 503 if minimum tier cannot be achieved.</t>
      </section><section anchor="crp-context-window"><name>CRP-Context-Window</name><t><strong>Direction:</strong> RES<br/>
        <strong>Required:</strong> RECOMMENDED</t>
      <t><strong>Definition:</strong> The current window position within the continuation chain, expressed as <tt>current/total</tt>. <tt>total</tt> is the configured maximum window depth for this session (see CRP-SPEC-004 for window continuation specification).</t>
      <t><strong>Syntax:</strong>
        </t><sourcecode type="abnf">
CRP-Context-Window = 1*DIGIT "/" 1*DIGIT
</sourcecode><t><strong>Example:</strong>
        </t><artwork type="http-message">
CRP-Context-Window: 3/5
</artwork><t><strong>Notes:</strong> When <tt>current</tt> equals <tt>total</tt>, the session has reached maximum continuation depth. The client MUST begin a new session or invoke <tt>dispatch_hierarchical()</tt> to continue.</t>
      </section><section anchor="crp-context-saturation"><name>CRP-Context-Saturation</name><t><strong>Direction:</strong> RES<br/>
        <strong>Required:</strong> RECOMMENDED</t>
      <t><strong>Definition:</strong> The ratio of token budget consumed by the Context Envelope relative to the total available context window, expressed as a decimal from 0.0 to 1.0. A saturation of 1.0 indicates the envelope has consumed the full available context window.</t>
      <t><strong>Syntax:</strong>
        </t><sourcecode type="abnf">
CRP-Context-Saturation = crp-fraction
</sourcecode><t><strong>Example:</strong>
        </t><artwork type="http-message">
CRP-Context-Saturation: 0.994
</artwork><t><strong>Notes:</strong> Values above 0.98 indicate context pressure. Clients receiving high saturation values SHOULD consider using a smaller query scope, enabling CKF caching, or upgrading to a longer-context model tier.</t>
      </section><section anchor="crp-context-facts-used"><name>CRP-Context-Facts-Used</name><t><strong>Direction:</strong> RES<br/>
        <strong>Required:</strong> OPTIONAL</t>
      <t><strong>Definition:</strong> The number of discrete facts retrieved from the CKF and included in the envelope, expressed as <tt>included/available</tt>. <tt>available</tt> is the total number of candidate facts identified before relevance filtering.</t>
      <t><strong>Syntax:</strong>
        </t><sourcecode type="abnf">
CRP-Context-Facts-Used = 1*DIGIT "/" 1*DIGIT
</sourcecode><t><strong>Example:</strong>
        </t><artwork type="http-message">
CRP-Context-Facts-Used: 47/312
</artwork></section><section anchor="crp-context-tokens-used"><name>CRP-Context-Tokens-Used</name><t><strong>Direction:</strong> RES<br/>
        <strong>Required:</strong> OPTIONAL</t>
      <t><strong>Definition:</strong> The number of tokens consumed by the Context Envelope in the LLM's context window, as an integer.</t>
      <t><strong>Syntax:</strong>
        </t><sourcecode type="abnf">
CRP-Context-Tokens-Used = 1*DIGIT
</sourcecode><t><strong>Example:</strong>
        </t><artwork type="http-message">
CRP-Context-Tokens-Used: 105816
</artwork></section><section anchor="crp-context-strategy"><name>CRP-Context-Strategy</name><t><strong>Direction:</strong> RES<br/>
        <strong>Required:</strong> RECOMMENDED</t>
      <t><strong>Definition:</strong> The dispatch strategy employed for this call, as selected by the gateway from TaskIntent analysis or from the <tt>CRP-Accept-Strategy</tt> request header.</t>
      <t><strong>Syntax:</strong>
        </t><sourcecode type="abnf">
CRP-Context-Strategy = "push" / "pull" / "reflexive" / "agentic" /
                        "hierarchical" / "batch" / "streaming" /
                        "fan-out" / "fan-in"
</sourcecode><t><strong>Example:</strong>
        </t><artwork type="http-message">
CRP-Context-Strategy: reflexive
</artwork></section><section anchor="crp-context-session-id"><name>CRP-Context-Session-Id</name><t><strong>Direction:</strong> BOTH<br/>
        <strong>Required:</strong> REQUIRED</t>
      <t><strong>Definition:</strong> The unique identifier for the current CRP session. In requests, used as a hint when a <tt>CRP-Session-Token</tt> is not available. In responses, confirms the session to which this call belongs.</t>
      <t><strong>Syntax:</strong>
        </t><sourcecode type="abnf">
CRP-Context-Session-Id = "crp_sess_" 16*32( ALPHA / DIGIT )
</sourcecode><t><strong>Example:</strong>
        </t><artwork type="http-message">
CRP-Context-Session-Id: crp_sess_7f3a9bc2d4e1f083
</artwork></section><section anchor="crp-context-etag"><name>CRP-Context-ETag</name><t><strong>Direction:</strong> RES<br/>
        <strong>Required:</strong> RECOMMENDED<br/>
        <strong>Stability:</strong> Stable — <strong>NEW in v3.0</strong></t>
      <t><strong>Definition:</strong> A hash of the current CKF fact-set state used to generate this call's Context Envelope. Analogous to HTTP <tt>ETag</tt>. Enables conditional dispatch: clients presenting this value in <tt>CRP-Context-If-Match</tt> on subsequent calls with the same knowledge domain will receive HTTP 304 if the fact-set has not changed, avoiding redundant envelope reconstruction.</t>
      <t><strong>Syntax:</strong>
        </t><sourcecode type="abnf">
CRP-Context-ETag = crp-hash
</sourcecode><t><strong>Example:</strong>
        </t><artwork type="http-message">
CRP-Context-ETag: sha256:4fa8e921abcd1234567890abcdef1234567890abcdef1234567890abcdef1234
</artwork><t><strong>Interaction:</strong> See <tt>CRP-Context-If-Match</tt> and <tt>CRP-Context-Cache</tt> for the full conditional dispatch mechanism.</t>
      </section><section anchor="crp-context-if-match"><name>CRP-Context-If-Match</name><t><strong>Direction:</strong> REQ<br/>
        <strong>Required:</strong> OPTIONAL<br/>
        <strong>NEW in v3.0</strong></t>
      <t><strong>Definition:</strong> Conditional dispatch request. If the presented ETag matches the current CKF fact-set hash, the gateway returns HTTP 304 (Context Not Modified) and skips envelope reconstruction. Analogous to HTTP <tt>If-None-Match</tt>.</t>
      <t><strong>Syntax:</strong>
        </t><sourcecode type="abnf">
CRP-Context-If-Match = crp-hash / "*"
</sourcecode><t><strong>Example:</strong>
        </t><artwork type="http-message">
CRP-Context-If-Match: sha256:4fa8e921abcd1234567890abcdef1234567890abcdef1234567890abcdef1234
</artwork><t><strong>HTTP 304 response:</strong> When the gateway returns 304, the response body is empty. All CRP response headers from the previous matching call MUST be re-emitted with their unchanged values.</t>
      </section><section anchor="crp-context-cache"><name>CRP-Context-Cache</name><t><strong>Direction:</strong> REQ<br/>
        <strong>Required:</strong> OPTIONAL<br/>
        <strong>NEW in v3.0</strong></t>
      <t><strong>Definition:</strong> Directives controlling CKF read/write behaviour for this call. Analogous to HTTP <tt>Cache-Control</tt>. Multiple directives are separated by commas.</t>
      <t><strong>Syntax:</strong>
        </t><sourcecode type="abnf">
CRP-Context-Cache     = cache-directive *( OWS "," OWS cache-directive )
cache-directive       = "no-store" / "no-cache" / "reuse-ckf" /
                        "only-if-ckf" / ( "max-age" "=" delta-seconds )
delta-seconds         = 1*DIGIT
</sourcecode><t><strong>Directive definitions:</strong></t>
      <table>
        <thead>
          <tr>
            <th align="left">Directive</th>
            <th align="left">Meaning</th>
          </tr>
        </thead>
        <tbody>
          <tr>
            <td align="left">
              <tt>no-store</tt></td>
            <td align="left">Do not persist this session's facts to the CKF graph. Envelope built from temporary context only. Use for sensitive or PII-containing sessions.</td>
          </tr>
          <tr>
            <td align="left">
              <tt>no-cache</tt></td>
            <td align="left">Do not reuse cached envelope. Force full 3-phase reconstruction even if ETag matches. Use when freshness is critical.</td>
          </tr>
          <tr>
            <td align="left">
              <tt>reuse-ckf</tt></td>
            <td align="left">Read from CKF but do not trigger re-ingestion of source documents. Use when knowledge base is known to be current.</td>
          </tr>
          <tr>
            <td align="left">
              <tt>only-if-ckf</tt></td>
            <td align="left">Refuse dispatch if CKF contains no relevant facts for this query. Returns HTTP 424 (Failed Dependency) if CKF miss.</td>
          </tr>
          <tr>
            <td align="left">
              <tt>max-age=N</tt></td>
            <td align="left">Facts retrieved from CKF are considered valid for N seconds. Gateway checks <tt>CRP-Memory-Knowledge-Age</tt> against this value.</td>
          </tr>
        </tbody>
      </table>
      <t><strong>Example:</strong>
        </t><artwork type="http-message">
CRP-Context-Cache: reuse-ckf, max-age=3600
</artwork><t><strong>GDPR note:</strong> <tt>no-store</tt> MUST be set for sessions processing personal data under GDPR Art. 5(1)(c) (data minimisation) unless CKF persistence has been explicitly authorised in the applicable DPA.</t>
      </section><section anchor="crp-context-cache-status"><name>CRP-Context-Cache-Status</name><t><strong>Direction:</strong> RES<br/>
        <strong>Required:</strong> OPTIONAL<br/>
        <strong>NEW in v3.0</strong></t>
      <t><strong>Definition:</strong> Reports whether the envelope was served from CKF cache or freshly constructed.</t>
      <t><strong>Syntax:</strong>
        </t><sourcecode type="abnf">
CRP-Context-Cache-Status = ( "HIT" / "MISS" / "PARTIAL" )
                            [ "; reason=" crp-token ]
</sourcecode><t><strong>Example:</strong>
        </t><artwork type="http-message">
CRP-Context-Cache-Status: MISS; reason=facts-updated
CRP-Context-Cache-Status: HIT
CRP-Context-Cache-Status: PARTIAL; reason=partial-ckf-coverage
</artwork></section><section anchor="crp-context-continuation-id"><name>CRP-Context-Continuation-Id</name><t><strong>Direction:</strong> BOTH<br/>
        <strong>Required:</strong> OPTIONAL</t>
      <t><strong>Definition:</strong> An opaque token referencing the continuation point in the Window DAG. When included in a request, the gateway resumes the session from the referenced window. When included in a response, it provides the continuation pointer for the next call. See CRP-SPEC-004 for the full Window DAG specification.</t>
      <t><strong>Syntax:</strong>
        </t><sourcecode type="abnf">
CRP-Context-Continuation-Id = "crp_cont_" 16*32( ALPHA / DIGIT )
</sourcecode><t><strong>Example:</strong>
        </t><artwork type="http-message">
CRP-Context-Continuation-Id: crp_cont_9a2fb3c1d4e5f607
</artwork></section><section anchor="crp-accept-quality"><name>CRP-Accept-Quality</name><t><strong>Direction:</strong> REQ<br/>
        <strong>Required:</strong> OPTIONAL<br/>
        <strong>NEW in v3.0</strong></t>
      <t><strong>Definition:</strong> Client-declared minimum acceptable quality tier. The gateway MUST NOT return a response with a quality tier lower than declared. If the minimum tier cannot be achieved, the gateway MUST return HTTP 503 with a <tt>CRP-Context-Quality-Tier</tt> header indicating the maximum achievable tier.</t>
      <t><strong>Syntax:</strong>
        </t><sourcecode type="abnf">
CRP-Accept-Quality = quality-tier *( OWS "," OWS quality-tier )
quality-tier       = "S" / "A" / "B" / "C" / "D"
</sourcecode><t><strong>Example:</strong>
        </t><artwork type="http-message">
CRP-Accept-Quality: S, A
</artwork></section><section anchor="crp-accept-strategy"><name>CRP-Accept-Strategy</name><t><strong>Direction:</strong> REQ<br/>
        <strong>Required:</strong> OPTIONAL<br/>
        <strong>NEW in v3.0</strong></t>
      <t><strong>Definition:</strong> Client-declared preferred dispatch strategies in order of preference. The gateway uses the first strategy from the list that is applicable to the current TaskIntent. If no listed strategy is applicable, the gateway falls back to automatic strategy selection and MUST report the selected strategy in <tt>CRP-Context-Strategy</tt>.</t>
      <t><strong>Syntax:</strong>
        </t><sourcecode type="abnf">
CRP-Accept-Strategy = strategy-token *( OWS "," OWS strategy-token )
strategy-token      = "push" / "pull" / "reflexive" / "agentic" /
                      "hierarchical" / "batch" / "streaming" /
                      "fan-out" / "fan-in"
</sourcecode><t><strong>Example:</strong>
        </t><artwork type="http-message">
CRP-Accept-Strategy: reflexive, push
</artwork></section><section anchor="crp-context-protocol-version"><name>CRP-Context-Protocol-Version</name><t><strong>Direction:</strong> RES<br/>
        <strong>Required:</strong> REQUIRED</t>
      <t><strong>Definition:</strong> The CRP protocol version used to process this call.</t>
      <t><strong>Syntax:</strong>
        </t><sourcecode type="abnf">
CRP-Context-Protocol-Version = crp-version
</sourcecode><t><strong>Example:</strong>
        </t><artwork type="http-message">
CRP-Context-Protocol-Version: 3.0.0
</artwork></section></section>
    <section anchor="namespace-crp-safety-"><name>Namespace: CRP-Safety-*</name><t>Safety headers carry the output of the Decision Provenance Engine (DPE) for the current response. They are response-only by default (generated by the gateway); safety policy and preferences are expressed in <tt>CRP-Safety-Policy</tt> (see CRP-SPEC-006) and <tt>CRP-Accept-Risk</tt> request headers.</t>
    <t><strong>Security note:</strong> All <tt>CRP-Safety-*</tt> response headers are gateway-generated. Clients MUST NOT set <tt>CRP-Safety-*</tt> response headers in requests. Gateways MUST reject requests where <tt>CRP-Safety-Hallucination-Risk</tt>, <tt>CRP-Safety-Hallucination-Score</tt>, or <tt>CRP-Safety-Attribution</tt> appear as request headers.</t>
    <section anchor="crp-safety-hallucination-risk"><name>CRP-Safety-Hallucination-Risk</name><t><strong>Direction:</strong> RES<br/>
        <strong>Required:</strong> REQUIRED (for CRP-Standard and CRP-Full conformance)</t>
      <t><strong>Definition:</strong> The composite hallucination risk classification for the LLM response, computed by the DPE from four weighted signals: attribution (0.35), fidelity (0.25), entailment (0.25), and specificity (0.15). See CRP-SPEC-005 for the complete scoring algorithm. Regulatory amplifiers are applied before classification (see CRP-SPEC-005 §4.3).</t>
      <t><strong>Syntax:</strong>
        </t><sourcecode type="abnf">
CRP-Safety-Hallucination-Risk = "CRITICAL" / "HIGH" / "MEDIUM" / "LOW"
</sourcecode><t><strong>Classification thresholds (post-amplification composite score):</strong></t>
      <table>
        <thead>
          <tr>
            <th align="left">Value</th>
            <th align="left">Score Range</th>
            <th align="left">Protocol Action</th>
            <th align="left">Regulatory Mapping</th>
          </tr>
        </thead>
        <tbody>
          <tr>
            <td align="left">
              <tt>CRITICAL</tt></td>
            <td align="left">≥ 0.70</td>
            <td align="left">HTTP 451 if <tt>halt-on CRITICAL</tt> policy set</td>
            <td align="left">EU AI Act Art. 14 (halt)</td>
          </tr>
          <tr>
            <td align="left">
              <tt>HIGH</tt></td>
            <td align="left">≥ 0.45</td>
            <td align="left">Strategy upgrade if <tt>upgrade-on-risk</tt> set</td>
            <td align="left">EU AI Act Art. 13 (warn)</td>
          </tr>
          <tr>
            <td align="left">
              <tt>MEDIUM</tt></td>
            <td align="left">≥ 0.20</td>
            <td align="left">Pass with headers</td>
            <td align="left">EU AI Act Art. 52</td>
          </tr>
          <tr>
            <td align="left">
              <tt>LOW</tt></td>
            <td align="left">&lt; 0.20</td>
            <td align="left">Pass</td>
            <td align="left">Compliant</td>
          </tr>
        </tbody>
      </table>
      <t><strong>Example:</strong>
        </t><artwork type="http-message">
CRP-Safety-Hallucination-Risk: LOW
</artwork></section><section anchor="crp-safety-hallucination-score"><name>CRP-Safety-Hallucination-Score</name><t><strong>Direction:</strong> RES<br/>
        <strong>Required:</strong> RECOMMENDED</t>
      <t><strong>Definition:</strong> The raw composite hallucination risk score from the DPE before classification, expressed as a decimal from 0.0 to 1.0. Higher values indicate greater hallucination risk.</t>
      <t><strong>Syntax:</strong>
        </t><sourcecode type="abnf">
CRP-Safety-Hallucination-Score = crp-fraction
</sourcecode><t><strong>Example:</strong>
        </t><artwork type="http-message">
CRP-Safety-Hallucination-Score: 0.14
</artwork></section><section anchor="crp-safety-attribution"><name>CRP-Safety-Attribution</name><t><strong>Direction:</strong> RES<br/>
        <strong>Required:</strong> RECOMMENDED</t>
      <t><strong>Definition:</strong> The dominant attribution type of claims in the response, computed by DPE Stage 2.</t>
      <t><strong>Syntax:</strong>
        </t><sourcecode type="abnf">
CRP-Safety-Attribution = "CONTEXT_GROUNDED" / "PARAMETRIC" / "MIXED" / "UNVERIFIABLE"
</sourcecode><t><strong>Values:</strong></t>
      <table>
        <thead>
          <tr>
            <th align="left">Value</th>
            <th align="left">Meaning</th>
          </tr>
        </thead>
        <tbody>
          <tr>
            <td align="left">
              <tt>CONTEXT_GROUNDED</tt></td>
            <td align="left">Majority of claims verifiably supported by Context Envelope content</td>
          </tr>
          <tr>
            <td align="left">
              <tt>PARAMETRIC</tt></td>
            <td align="left">Majority of claims drawn from LLM parametric memory, not envelope</td>
          </tr>
          <tr>
            <td align="left">
              <tt>MIXED</tt></td>
            <td align="left">Significant presence of both context-grounded and parametric claims</td>
          </tr>
          <tr>
            <td align="left">
              <tt>UNVERIFIABLE</tt></td>
            <td align="left">Claims cannot be attributed to any verifiable source</td>
          </tr>
        </tbody>
      </table>
      <t><strong>Example:</strong>
        </t><artwork type="http-message">
CRP-Safety-Attribution: CONTEXT_GROUNDED
</artwork></section><section anchor="crp-safety-grounding-pct"><name>CRP-Safety-Grounding-Pct</name><t><strong>Direction:</strong> RES<br/>
        <strong>Required:</strong> RECOMMENDED</t>
      <t><strong>Definition:</strong> The percentage of factual claims in the response that are verifiably supported by content in the Context Envelope, as a decimal from 0.0 to 1.0.</t>
      <t><strong>Syntax:</strong>
        </t><sourcecode type="abnf">
CRP-Safety-Grounding-Pct = crp-fraction
</sourcecode><t><strong>Example:</strong>
        </t><artwork type="http-message">
CRP-Safety-Grounding-Pct: 0.923
</artwork></section><section anchor="crp-safety-fabrications"><name>CRP-Safety-Fabrications</name><t><strong>Direction:</strong> RES<br/>
        <strong>Required:</strong> RECOMMENDED</t>
      <t><strong>Definition:</strong> The count of fabricated entities detected by DPE Stage 3. A fabricated entity is a named entity (person, organisation, date, statistic, citation) that appears in the response but has no verifiable basis in the Context Envelope or any grounded source.</t>
      <t><strong>Syntax:</strong>
        </t><sourcecode type="abnf">
CRP-Safety-Fabrications = 1*DIGIT
</sourcecode><t><strong>Example:</strong>
        </t><artwork type="http-message">
CRP-Safety-Fabrications: 0
</artwork><t><strong>Note:</strong> A value of <tt>0</tt> is the expected result for well-grounded responses. Any non-zero value MUST be reported to <tt>CRP-Safety-Report-URI</tt> if configured.</t>
      </section><section anchor="crp-safety-distortions"><name>CRP-Safety-Distortions</name><t><strong>Direction:</strong> RES<br/>
        <strong>Required:</strong> RECOMMENDED</t>
      <t><strong>Definition:</strong> The count of detected fidelity distortions in the response, where the response has misrepresented content that exists in the Context Envelope. Distortion types are reported as a structured list.</t>
      <t><strong>Syntax:</strong>
        </t><sourcecode type="abnf">
CRP-Safety-Distortions = distortion-count [ "; types=" distortion-list ]
distortion-count       = 1*DIGIT
distortion-list        = distortion-type *( "," distortion-type )
distortion-type        = "NUMBER_CHANGED" / "NEGATION_FLIP" / "DATE_SHIFTED" /
                         "ENTITY_SUBSTITUTED" / "MAGNITUDE_ALTERED" / "CONTEXT_STRIPPED"
</sourcecode><t><strong>Example:</strong>
        </t><artwork type="http-message">
CRP-Safety-Distortions: 1; types=NUMBER_CHANGED
CRP-Safety-Distortions: 0
</artwork></section><section anchor="crp-safety-contradictions"><name>CRP-Safety-Contradictions</name><t><strong>Direction:</strong> RES<br/>
        <strong>Required:</strong> OPTIONAL</t>
      <t><strong>Definition:</strong> The count of internal contradictions detected in the response — instances where the response contradicts itself (intra-window) or contradicts an earlier window in the session (cross-window).</t>
      <t><strong>Syntax:</strong>
        </t><sourcecode type="abnf">
CRP-Safety-Contradictions = 1*DIGIT [ "; scope=" ( "intra" / "cross-window" / "both" ) ]
</sourcecode><t><strong>Example:</strong>
        </t><artwork type="http-message">
CRP-Safety-Contradictions: 0
CRP-Safety-Contradictions: 2; scope=cross-window
</artwork></section><section anchor="crp-safety-omissions"><name>CRP-Safety-Omissions</name><t><strong>Direction:</strong> RES<br/>
        <strong>Required:</strong> OPTIONAL</t>
      <t><strong>Definition:</strong> Summary of material omissions detected — cases where the envelope contained information critical to a complete answer that the LLM did not include in the response.</t>
      <t><strong>Syntax:</strong>
        </t><sourcecode type="abnf">
CRP-Safety-Omissions = omission-entry *( OWS "," OWS omission-entry )
omission-entry       = ( "CRITICAL" / "HIGH" / "MEDIUM" ) ":" 1*DIGIT
</sourcecode><t><strong>Example:</strong>
        </t><artwork type="http-message">
CRP-Safety-Omissions: CRITICAL:0, HIGH:1, MEDIUM:2
</artwork></section><section anchor="crp-safety-entailment-score"><name>CRP-Safety-Entailment-Score</name><t><strong>Direction:</strong> RES<br/>
        <strong>Required:</strong> RECOMMENDED</t>
      <t><strong>Definition:</strong> The NLI (Natural Language Inference) cross-encoder entailment score measuring the degree to which the response is logically entailed by the Context Envelope, from 0.0 (contradiction) to 1.0 (full entailment). This is one of the four DPE composite signal inputs (weight: 0.25).</t>
      <t><strong>Syntax:</strong>
        </t><sourcecode type="abnf">
CRP-Safety-Entailment-Score = crp-fraction
</sourcecode><t><strong>Example:</strong>
        </t><artwork type="http-message">
CRP-Safety-Entailment-Score: 0.912
</artwork></section><section anchor="crp-safety-oversight-mode"><name>CRP-Safety-Oversight-Mode</name><t><strong>Direction:</strong> BOTH<br/>
        <strong>Required:</strong> RECOMMENDED</t>
      <t><strong>Definition:</strong> In requests, declares the human oversight level required for this session. In responses, confirms the oversight mode applied by the gateway and (if applicable) whether an oversight event was triggered.</t>
      <t><strong>Syntax:</strong>
        </t><sourcecode type="abnf">
CRP-Safety-Oversight-Mode = "auto" / "human-review" / "halt" / "log-only"
</sourcecode><t><strong>Values:</strong></t>
      <table>
        <thead>
          <tr>
            <th align="left">Value</th>
            <th align="left">Meaning</th>
          </tr>
        </thead>
        <tbody>
          <tr>
            <td align="left">
              <tt>auto</tt></td>
            <td align="left">Gateway applies oversight based on Safety Policy and risk level</td>
          </tr>
          <tr>
            <td align="left">
              <tt>human-review</tt></td>
            <td align="left">Response is held pending human review for any HIGH or CRITICAL risk</td>
          </tr>
          <tr>
            <td align="left">
              <tt>halt</tt></td>
            <td align="left">Response is halted unconditionally for any CRITICAL risk (EU AI Act Art. 14)</td>
          </tr>
          <tr>
            <td align="left">
              <tt>log-only</tt></td>
            <td align="left">Risk signals logged and reported but response always passed through</td>
          </tr>
        </tbody>
      </table>
      <t><strong>Example:</strong>
        </t><artwork type="http-message">
CRP-Safety-Oversight-Mode: auto
</artwork></section><section anchor="crp-safety-mode"><name>CRP-Safety-Mode</name><t><strong>Direction:</strong> REQ<br/>
        <strong>Required:</strong> OPTIONAL<br/>
        <strong>NEW in v3.0</strong></t>
      <t><strong>Definition:</strong> The global safety strictness level for the session. Overrides individual Safety Policy directives where they are less restrictive.</t>
      <t><strong>Syntax:</strong>
        </t><sourcecode type="abnf">
CRP-Safety-Mode = "strict" / "warn" / "permissive"
</sourcecode><table>
        <thead>
          <tr>
            <th align="left">Value</th>
            <th align="left">Behaviour</th>
          </tr>
        </thead>
        <tbody>
          <tr>
            <td align="left">
              <tt>strict</tt></td>
            <td align="left">Equivalent to <tt>halt-on CRITICAL; warn-on HIGH; block-ungrounded</tt></td>
          </tr>
          <tr>
            <td align="left">
              <tt>warn</tt></td>
            <td align="left">All risk levels passed; HIGH and CRITICAL emitted in headers and reported</td>
          </tr>
          <tr>
            <td align="left">
              <tt>permissive</tt></td>
            <td align="left">Risk signals computed and emitted; no gating applied</td>
          </tr>
        </tbody>
      </table>
      <t><strong>Example:</strong>
        </t><artwork type="http-message">
CRP-Safety-Mode: strict
</artwork></section><section anchor="crp-safety-policy"><name>CRP-Safety-Policy</name><t><strong>Direction:</strong> REQ<br/>
        <strong>Required:</strong> RECOMMENDED<br/>
        <strong>NEW in v3.0</strong></t>
      <t><strong>Definition:</strong> A directive string declaring the AI safety policy for this session, analogous to Content-Security-Policy. The full directive grammar is defined in CRP-SPEC-006.</t>
      <t><strong>Syntax:</strong>
        </t><sourcecode type="abnf">
CRP-Safety-Policy = policy-directive *( ";" OWS policy-directive )
</sourcecode><t><strong>Example:</strong>
        </t><artwork type="http-message">
CRP-Safety-Policy: default-src context; halt-on CRITICAL; warn-on HIGH; require-grounding 0.75; block-ungrounded; report-uri https://comply.crprotocol.io/reports
</artwork><t><strong>Interaction with CRP-Safety-Mode:</strong> If both <tt>CRP-Safety-Mode</tt> and <tt>CRP-Safety-Policy</tt> are set, the more restrictive of the two applies per-directive.</t>
      </section><section anchor="crp-safety-report-uri"><name>CRP-Safety-Report-URI</name><t><strong>Direction:</strong> REQ<br/>
        <strong>Required:</strong> OPTIONAL<br/>
        <strong>NEW in v3.0</strong></t>
      <t><strong>Definition:</strong> URI to which the gateway MUST POST a JSON violation report when a Safety Policy violation occurs (any <tt>halt-on</tt> trigger, fabrication detected, chain integrity broken). Analogous to CSP <tt>report-uri</tt>.</t>
      <t><strong>Syntax:</strong>
        </t><sourcecode type="abnf">
CRP-Safety-Report-URI = crp-uri
</sourcecode><t><strong>Example:</strong>
        </t><artwork type="http-message">
CRP-Safety-Report-URI: https://comply.crprotocol.io/reports/my-org
</artwork><t><strong>Report format:</strong> The gateway POSTs <tt>Content-Type: application/json</tt> with fields: <tt>session_id</tt>, <tt>window_number</tt>, <tt>violation_type</tt>, <tt>risk_level</tt>, <tt>audit_trail_uri</tt>, <tt>timestamp</tt>.</t>
      </section><section anchor="crp-accept-risk"><name>CRP-Accept-Risk</name><t><strong>Direction:</strong> REQ<br/>
        <strong>Required:</strong> OPTIONAL<br/>
        <strong>NEW in v3.0</strong></t>
      <t><strong>Definition:</strong> Maximum risk level the client is willing to accept for this call. If the computed risk exceeds the declared level, the gateway MUST either retry with upgraded strategy (if <tt>upgrade-on-risk</tt> is set in Safety Policy) or halt and return HTTP 451.</t>
      <t><strong>Syntax:</strong>
        </t><sourcecode type="abnf">
CRP-Accept-Risk = "CRITICAL" / "HIGH" / "MEDIUM" / "LOW"
</sourcecode><t><strong>Example:</strong>
        </t><artwork type="http-message">
CRP-Accept-Risk: MEDIUM
</artwork></section><section anchor="crp-safety-retry-after"><name>CRP-Safety-Retry-After</name><t><strong>Direction:</strong> RES<br/>
        <strong>Required:</strong> CONDITIONAL — MUST be sent with HTTP 451</t>
      <t><strong>Definition:</strong> Indicates when or under what condition the client may retry a halted call. Sent alongside HTTP 451 when a CRITICAL risk halt or UNACCEPTABLE EU AI Act risk classification prevents response delivery.</t>
      <t><strong>Syntax:</strong>
        </t><sourcecode type="abnf">
CRP-Safety-Retry-After = ( delta-seconds / crp-iso8601 / "oversight-required" )
</sourcecode><t><strong>Example:</strong>
        </t><artwork type="http-message">
CRP-Safety-Retry-After: oversight-required
CRP-Safety-Retry-After: 300
</artwork></section><section anchor="crp-safety-nonce"><name>CRP-Safety-Nonce</name><t><strong>Direction:</strong> BOTH<br/>
        <strong>Required:</strong> OPTIONAL<br/>
        <strong>NEW in v3.0</strong></t>
      <t><strong>Definition:</strong> A per-session nonce bound to the Safety Policy hash at session initialisation. Prevents Safety Policy replay attacks. The gateway generates the nonce at session start and binds it to the hash of the active Safety Policy. Subsequent requests presenting a Safety Policy with a different hash but the same nonce are rejected.</t>
      <t><strong>Syntax:</strong>
        </t><sourcecode type="abnf">
CRP-Safety-Nonce = "base64:" 1*( ALPHA / DIGIT / "+" / "/" / "=" )
</sourcecode><t><strong>Example:</strong>
        </t><artwork type="http-message">
CRP-Safety-Nonce: base64:nZ8fXwKq2mP9vR==
</artwork></section></section>
    <section anchor="namespace-crp-provenance-"><name>Namespace: CRP-Provenance-*</name><t>Provenance headers carry the cryptographic audit chain and DAG state for the current call. They enable tamper-evident compliance evidence and chain verification by any party holding the session HMAC key.</t>
    <section anchor="crp-provenance-hmac"><name>CRP-Provenance-HMAC</name><t><strong>Direction:</strong> RES<br/>
        <strong>Required:</strong> REQUIRED (for CRP-Standard and CRP-Full)</t>
      <t><strong>Definition:</strong> The HMAC-SHA256 hash for this window's audit record, chained from the previous window's HMAC. See CRP-SPEC-011 for the complete chain algorithm. This value is the primary tamper-evidence mechanism: modifying any past audit record invalidates this value and all subsequent values in the chain.</t>
      <t><strong>Syntax:</strong>
        </t><sourcecode type="abnf">
CRP-Provenance-HMAC = crp-hash
</sourcecode><t><strong>Example:</strong>
        </t><artwork type="http-message">
CRP-Provenance-HMAC: sha256:4fa8e921abcd1234567890abcdef1234567890abcdef1234567890abcdef1234
</artwork></section><section anchor="crp-provenance-window-hmac"><name>CRP-Provenance-Window-HMAC</name><t><strong>Direction:</strong> RES<br/>
        <strong>Required:</strong> RECOMMENDED</t>
      <t><strong>Definition:</strong> The per-window HMAC covering only the current window's content and metadata (not chained). Used for single-window verification without requiring the full chain.</t>
      <t><strong>Syntax:</strong>
        </t><sourcecode type="abnf">
CRP-Provenance-Window-HMAC = crp-hash
</sourcecode><t><strong>Example:</strong>
        </t><artwork type="http-message">
CRP-Provenance-Window-HMAC: sha256:9bce472f1234abcd...
</artwork></section><section anchor="crp-provenance-dag-root"><name>CRP-Provenance-DAG-Root</name><t><strong>Direction:</strong> RES<br/>
        <strong>Required:</strong> OPTIONAL</t>
      <t><strong>Definition:</strong> The root node identifier of the Window DAG for the current session. Used to anchor the provenance graph for session-level verification and CRP Comply evidence import.</t>
      <t><strong>Syntax:</strong>
        </t><sourcecode type="abnf">
CRP-Provenance-DAG-Root = "dag:" crp-token
</sourcecode><t><strong>Example:</strong>
        </t><artwork type="http-message">
CRP-Provenance-DAG-Root: dag:crp_win_a7f3b2c1d4e5
</artwork></section><section anchor="crp-provenance-chain-integrity"><name>CRP-Provenance-Chain-Integrity</name><t><strong>Direction:</strong> RES<br/>
        <strong>Required:</strong> REQUIRED (for CRP-Standard and CRP-Full)</t>
      <t><strong>Definition:</strong> The result of chain integrity verification for the current session's HMAC chain up to and including the current window. A <tt>BROKEN</tt> result MUST trigger an audit incident.</t>
      <t><strong>Syntax:</strong>
        </t><sourcecode type="abnf">
CRP-Provenance-Chain-Integrity = "VALID" / "BROKEN" / "PARTIAL" / "UNVERIFIED"
</sourcecode><table>
        <thead>
          <tr>
            <th align="left">Value</th>
            <th align="left">Meaning</th>
          </tr>
        </thead>
        <tbody>
          <tr>
            <td align="left">
              <tt>VALID</tt></td>
            <td align="left">All windows in chain verify correctly</td>
          </tr>
          <tr>
            <td align="left">
              <tt>BROKEN</tt></td>
            <td align="left">One or more windows fail verification — possible tampering</td>
          </tr>
          <tr>
            <td align="left">
              <tt>PARTIAL</tt></td>
            <td align="left">Chain verified for available windows; some windows missing</td>
          </tr>
          <tr>
            <td align="left">
              <tt>UNVERIFIED</tt></td>
            <td align="left">Verification not performed (e.g., first window of session)</td>
          </tr>
        </tbody>
      </table>
      <t><strong>Example:</strong>
        </t><artwork type="http-message">
CRP-Provenance-Chain-Integrity: VALID
</artwork></section><section anchor="crp-provenance-claim-count"><name>CRP-Provenance-Claim-Count</name><t><strong>Direction:</strong> RES<br/>
        <strong>Required:</strong> OPTIONAL</t>
      <t><strong>Definition:</strong> The number of discrete factual claims identified in the LLM response by DPE Stage 1 (claim segmentation).</t>
      <t><strong>Syntax:</strong>
        </t><sourcecode type="abnf">
CRP-Provenance-Claim-Count = 1*DIGIT
</sourcecode><t><strong>Example:</strong>
        </t><artwork type="http-message">
CRP-Provenance-Claim-Count: 23
</artwork></section><section anchor="crp-provenance-attribution-score"><name>CRP-Provenance-Attribution-Score</name><t><strong>Direction:</strong> RES<br/>
        <strong>Required:</strong> RECOMMENDED</t>
      <t><strong>Definition:</strong> The composite attribution score across all claims in the response, from 0.0 (fully parametric) to 1.0 (fully context-grounded). This is one of the four DPE composite signal inputs (weight: 0.35, as <tt>1 - attribution_score</tt>).</t>
      <t><strong>Syntax:</strong>
        </t><sourcecode type="abnf">
CRP-Provenance-Attribution-Score = crp-fraction
</sourcecode><t><strong>Example:</strong>
        </t><artwork type="http-message">
CRP-Provenance-Attribution-Score: 0.913
</artwork></section><section anchor="crp-provenance-fidelity-score"><name>CRP-Provenance-Fidelity-Score</name><t><strong>Direction:</strong> RES<br/>
        <strong>Required:</strong> RECOMMENDED</t>
      <t><strong>Definition:</strong> The fidelity score for the response, measuring the accuracy with which context-grounded claims reproduce their source facts, from 0.0 (severe distortion) to 1.0 (exact fidelity). This is one of the four DPE composite signal inputs (weight: 0.25).</t>
      <t><strong>Syntax:</strong>
        </t><sourcecode type="abnf">
CRP-Provenance-Fidelity-Score = crp-fraction
</sourcecode><t><strong>Example:</strong>
        </t><artwork type="http-message">
CRP-Provenance-Fidelity-Score: 0.978
</artwork></section><section anchor="crp-provenance-report-uri"><name>CRP-Provenance-Report-URI</name><t><strong>Direction:</strong> RES<br/>
        <strong>Required:</strong> RECOMMENDED</t>
      <t><strong>Definition:</strong> URI of the full DPE provenance report for this call, stored in CRP Comply. Any log aggregator, SIEM, or auditor that captures this header value has a direct link to the complete regulatory evidence record for this specific AI call.</t>
      <t><strong>Syntax:</strong>
        </t><sourcecode type="abnf">
CRP-Provenance-Report-URI = crp-uri
</sourcecode><t><strong>Example:</strong>
        </t><artwork type="http-message">
CRP-Provenance-Report-URI: https://comply.crprotocol.io/p/7fa3bc9e2d
</artwork></section><section anchor="crp-provenance-window-lineage"><name>CRP-Provenance-Window-Lineage</name><t><strong>Direction:</strong> RES<br/>
        <strong>Required:</strong> OPTIONAL</t>
      <t><strong>Definition:</strong> The ordered chain of window IDs leading to the current window, expressed as an arrow-separated sequence. Useful for debugging continuation chains and for auditor reconstruction of session context.</t>
      <t><strong>Syntax:</strong>
        </t><sourcecode type="abnf">
CRP-Provenance-Window-Lineage = window-id *( " -&gt; " window-id )
window-id                     = "crp_win_" crp-token
</sourcecode><t><strong>Example:</strong>
        </t><artwork type="http-message">
CRP-Provenance-Window-Lineage: crp_win_a7f3 -&gt; crp_win_b9c2 -&gt; crp_win_c1d4
</artwork></section></section>
    <section anchor="namespace-crp-compliance-"><name>Namespace: CRP-Compliance-*</name><t>Compliance headers carry per-call regulatory classification metadata, generated by the CRP compliance pipeline. They bridge the protocol layer and the regulatory evidence layer (CRP Comply). The <tt>CRP-Compliance-Audit-Trail-URI</tt> header is the primary integration point between every AI call and its regulatory record.</t>
    <section anchor="crp-compliance-eu-ai-act"><name>CRP-Compliance-EU-AI-Act</name><t><strong>Direction:</strong> RES<br/>
        <strong>Required:</strong> RECOMMENDED</t>
      <t><strong>Definition:</strong> The EU AI Act risk classification for the AI system and use case associated with this call, per Regulation (EU) 2024/1689 Article 6 classification criteria.</t>
      <t><strong>Syntax:</strong>
        </t><sourcecode type="abnf">
CRP-Compliance-EU-AI-Act = "UNACCEPTABLE" / "HIGH" / "LIMITED" / "MINIMAL"
</sourcecode><table>
        <thead>
          <tr>
            <th align="left">Value</th>
            <th align="left">EU AI Act Article</th>
            <th align="left">Regulatory Consequence</th>
          </tr>
        </thead>
        <tbody>
          <tr>
            <td align="left">
              <tt>UNACCEPTABLE</tt></td>
            <td align="left">Art. 5</td>
            <td align="left">Prohibited. Gateway MUST halt and return HTTP 451.</td>
          </tr>
          <tr>
            <td align="left">
              <tt>HIGH</tt></td>
            <td align="left">Art. 6 + Annex III</td>
            <td align="left">Conformity assessment required before deployment</td>
          </tr>
          <tr>
            <td align="left">
              <tt>LIMITED</tt></td>
            <td align="left">Art. 52</td>
            <td align="left">Transparency obligations (disclose AI interaction)</td>
          </tr>
          <tr>
            <td align="left">
              <tt>MINIMAL</tt></td>
            <td align="left">—</td>
            <td align="left">No specific obligations beyond general law</td>
          </tr>
        </tbody>
      </table>
      <t><strong>Example:</strong>
        </t><artwork type="http-message">
CRP-Compliance-EU-AI-Act: LIMITED
</artwork><t><strong>Note:</strong> Classification is determined by the CRP compliance pipeline based on the registered AI system type, deployment domain, and output use. It is NOT determined per-call from response content alone. Operators MUST register their AI system type during CRP Gateway setup.</t>
      </section><section anchor="crp-compliance-nist-tier"><name>CRP-Compliance-NIST-Tier</name><t><strong>Direction:</strong> RES<br/>
        <strong>Required:</strong> OPTIONAL</t>
      <t><strong>Definition:</strong> The NIST AI RMF risk tier for this call's context.</t>
      <t><strong>Syntax:</strong>
        </t><sourcecode type="abnf">
CRP-Compliance-NIST-Tier = "TIER-1" / "TIER-2" / "TIER-3" / "TIER-4"
</sourcecode><t><strong>Example:</strong>
        </t><artwork type="http-message">
CRP-Compliance-NIST-Tier: TIER-2
</artwork></section><section anchor="crp-compliance-gdpr-pii"><name>CRP-Compliance-GDPR-PII</name><t><strong>Direction:</strong> RES<br/>
        <strong>Required:</strong> RECOMMENDED</t>
      <t><strong>Definition:</strong> Indicates whether personal data (as defined under GDPR Art. 4(1)) was detected in the request prompt or LLM response by the DPE PII detection module.</t>
      <t><strong>Syntax:</strong>
        </t><sourcecode type="abnf">
CRP-Compliance-GDPR-PII = "true" / "false"
</sourcecode><t><strong>Example:</strong>
        </t><artwork type="http-message">
CRP-Compliance-GDPR-PII: false
</artwork><t><strong>Note:</strong> A value of <tt>true</tt> triggers GDPR Art. 5(1)(c) data minimisation obligations. If <tt>CRP-Context-Cache: no-store</tt> is not set when <tt>CRP-Compliance-GDPR-PII: true</tt> is emitted, the gateway MUST log a compliance warning.</t>
      </section><section anchor="crp-compliance-iso-42001"><name>CRP-Compliance-ISO-42001</name><t><strong>Direction:</strong> RES<br/>
        <strong>Required:</strong> OPTIONAL</t>
      <t><strong>Definition:</strong> ISO/IEC 42001:2023 control IDs satisfied by the evidence generated for this call. Expressed as a comma-separated list of Annex A control identifiers.</t>
      <t><strong>Syntax:</strong>
        </t><sourcecode type="abnf">
CRP-Compliance-ISO-42001 = iso-control-id *( OWS "," OWS iso-control-id )
iso-control-id            = "A." 1*DIGIT "." 1*DIGIT [ "." 1*DIGIT ]
</sourcecode><t><strong>Example:</strong>
        </t><artwork type="http-message">
CRP-Compliance-ISO-42001: A.6.1.2, A.9.4, A.10.2
</artwork></section><section anchor="crp-compliance-audit-trail-id"><name>CRP-Compliance-Audit-Trail-Id</name><t><strong>Direction:</strong> RES<br/>
        <strong>Required:</strong> REQUIRED (for CRP-Standard and CRP-Full)</t>
      <t><strong>Definition:</strong> The unique identifier for the audit trail record generated for this call. This ID references the HMAC-chained audit event in the CRP Comply evidence database.</t>
      <t><strong>Syntax:</strong>
        </t><sourcecode type="abnf">
CRP-Compliance-Audit-Trail-Id = "crp_trail_" 16*32( ALPHA / DIGIT )
</sourcecode><t><strong>Example:</strong>
        </t><artwork type="http-message">
CRP-Compliance-Audit-Trail-Id: crp_trail_7fa3bc9e2d14f5a8
</artwork></section><section anchor="crp-compliance-audit-trail-uri"><name>CRP-Compliance-Audit-Trail-URI</name><t><strong>Direction:</strong> RES<br/>
        <strong>Required:</strong> RECOMMENDED</t>
      <t><strong>Definition:</strong> Deep-link URI to the full regulatory evidence pack for this call in CRP Comply. Any downstream system — log aggregator, SIEM, auditor tool — that captures this header can navigate directly to the complete compliance record for this specific AI call.</t>
      <t><strong>Syntax:</strong>
        </t><sourcecode type="abnf">
CRP-Compliance-Audit-Trail-URI = crp-uri
</sourcecode><t><strong>Example:</strong>
        </t><artwork type="http-message">
CRP-Compliance-Audit-Trail-URI: https://comply.crprotocol.io/t/7fa3bc9e2d14f5a8
</artwork></section><section anchor="crp-compliance-data-residency"><name>CRP-Compliance-Data-Residency</name><t><strong>Direction:</strong> BOTH<br/>
        <strong>Required:</strong> OPTIONAL<br/>
        <strong>NEW in v3.0</strong></t>
      <t><strong>Definition:</strong> Declares the data residency jurisdiction for processing and storing this call's data. In requests, expresses the client's requirement. In responses, confirms the jurisdiction in which data was processed. Gateway MUST NOT process data in a different jurisdiction than declared in the request.</t>
      <t><strong>Syntax:</strong>
        </t><sourcecode type="abnf">
CRP-Compliance-Data-Residency = 2ALPHA / "EU" / "AU" / "US" / "UK"
</sourcecode><t><strong>Example:</strong>
        </t><artwork type="http-message">
CRP-Compliance-Data-Residency: EU
</artwork></section><section anchor="crp-compliance-controls-met"><name>CRP-Compliance-Controls-Met</name><t><strong>Direction:</strong> RES<br/>
        <strong>Required:</strong> OPTIONAL</t>
      <t><strong>Definition:</strong> The number of applicable regulatory controls satisfied by the evidence generated for this call, expressed as <tt>met/total</tt>. Total is the number of controls applicable given the registered AI system type and applicable regulations.</t>
      <t><strong>Syntax:</strong>
        </t><sourcecode type="abnf">
CRP-Compliance-Controls-Met = 1*DIGIT "/" 1*DIGIT
</sourcecode><t><strong>Example:</strong>
        </t><artwork type="http-message">
CRP-Compliance-Controls-Met: 33/35
</artwork></section></section>
    <section anchor="namespace-crp-agent-"><name>Namespace: CRP-Agent-*</name><t>Agent headers carry state for agentic dispatch sessions — calls using <tt>dispatch_agentic()</tt>, <tt>dispatch_hierarchical()</tt>, <tt>dispatch_fan_out()</tt>, or <tt>dispatch_fan_in()</tt>. They are relevant only when <tt>CRP-Context-Strategy</tt> indicates an agentic dispatch mode.</t>
    <section anchor="crp-agent-phase"><name>CRP-Agent-Phase</name><t><strong>Direction:</strong> RES<br/>
        <strong>Required:</strong> OPTIONAL (REQUIRED when Strategy = <tt>agentic</tt>)</t>
      <t><strong>Definition:</strong> The current cognitive phase of the agentic dispatch loop, as defined in CRP-SPEC-008.</t>
      <t><strong>Syntax:</strong>
        </t><sourcecode type="abnf">
CRP-Agent-Phase = "ANALYZE" / "PLAN" / "GENERATE" / "EVALUATE" /
                  "CRITIQUE" / "REFINE" / "INTEGRATE" / "COMPLETE"
</sourcecode><t><strong>Example:</strong>
        </t><artwork type="http-message">
CRP-Agent-Phase: EVALUATE
</artwork></section><section anchor="crp-agent-loop-depth"><name>CRP-Agent-Loop-Depth</name><t><strong>Direction:</strong> RES<br/>
        <strong>Required:</strong> OPTIONAL (REQUIRED when Strategy = <tt>agentic</tt> or <tt>hierarchical</tt>)</t>
      <t><strong>Definition:</strong> The nesting depth of the current agent within a multi-agent hierarchy. The root agent has depth 0. Each delegating level increments by 1. Gateways MUST reject requests where loop depth exceeds the configured maximum (default: 5).</t>
      <t><strong>Syntax:</strong>
        </t><sourcecode type="abnf">
CRP-Agent-Loop-Depth = 1*DIGIT
</sourcecode><t><strong>Example:</strong>
        </t><artwork type="http-message">
CRP-Agent-Loop-Depth: 2
</artwork></section><section anchor="crp-agent-safety-budget"><name>CRP-Agent-Safety-Budget</name><t><strong>Direction:</strong> BOTH<br/>
        <strong>Required:</strong> RECOMMENDED (for agentic strategies)<br/>
        <strong>NEW in v3.0</strong></t>
      <t><strong>Definition:</strong> The remaining safety risk budget for the current agent session, expressed as a decimal from 0.0 to 1.0. The budget starts at 1.0 and is decremented by the gateway on each call according to the risk level:</t>
      <table>
        <thead>
          <tr>
            <th align="left">Risk Level</th>
            <th align="left">Default Decrement</th>
          </tr>
        </thead>
        <tbody>
          <tr>
            <td align="left">
              <tt>LOW</tt></td>
            <td align="left">0.00 (no decrement)</td>
          </tr>
          <tr>
            <td align="left">
              <tt>MEDIUM</tt></td>
            <td align="left">0.05</td>
          </tr>
          <tr>
            <td align="left">
              <tt>HIGH</tt></td>
            <td align="left">0.15</td>
          </tr>
          <tr>
            <td align="left">
              <tt>CRITICAL</tt></td>
            <td align="left">0.35</td>
          </tr>
        </tbody>
      </table>
      <t>When the budget reaches ≤ 0.10, the gateway MUST upgrade <tt>CRP-Safety-Oversight-Mode</tt> to <tt>human-review</tt> regardless of Safety Policy. When it reaches ≤ 0.00, the gateway MUST halt and return HTTP 451.</t>
      <t>In requests from orchestrator agents, this header passes the remaining budget down to sub-agents. Sub-agents MUST NOT inflate the budget.</t>
      <t><strong>Syntax:</strong>
        </t><sourcecode type="abnf">
CRP-Agent-Safety-Budget = crp-fraction
</sourcecode><t><strong>Example:</strong>
        </t><artwork type="http-message">
CRP-Agent-Safety-Budget: 0.63
</artwork></section><section anchor="crp-agent-tool-calls"><name>CRP-Agent-Tool-Calls</name><t><strong>Direction:</strong> RES<br/>
        <strong>Required:</strong> OPTIONAL</t>
      <t><strong>Definition:</strong> The count of tool invocations made by the agentic dispatch loop for this call.</t>
      <t><strong>Syntax:</strong>
        </t><sourcecode type="abnf">
CRP-Agent-Tool-Calls = 1*DIGIT
</sourcecode><t><strong>Example:</strong>
        </t><artwork type="http-message">
CRP-Agent-Tool-Calls: 4
</artwork></section><section anchor="crp-agent-session-parent"><name>CRP-Agent-Session-Parent</name><t><strong>Direction:</strong> BOTH<br/>
        <strong>Required:</strong> OPTIONAL</t>
      <t><strong>Definition:</strong> The session ID of the parent agent session. Set by orchestrator agents when delegating to sub-agents. Enables the provenance DAG to record the full fan-out hierarchy.</t>
      <t><strong>Syntax:</strong>
        </t><sourcecode type="abnf">
CRP-Agent-Session-Parent = "crp_sess_" 16*32( ALPHA / DIGIT )
</sourcecode><t><strong>Example:</strong>
        </t><artwork type="http-message">
CRP-Agent-Session-Parent: crp_sess_4b2f1c3d5e6a7b8c
</artwork></section><section anchor="crp-agent-dispatch-strategy"><name>CRP-Agent-Dispatch-Strategy</name><t><strong>Direction:</strong> BOTH<br/>
        <strong>Required:</strong> OPTIONAL</t>
      <t><strong>Definition:</strong> Alias for <tt>CRP-Context-Strategy</tt> scoped to agentic contexts. Provided for clarity in multi-agent logging where <tt>CRP-Context-Strategy</tt> may be omitted.</t>
      <t><strong>Syntax:</strong> Same as <tt>CRP-Context-Strategy</tt>.</t>
      </section><section anchor="crp-agent-revision-round"><name>CRP-Agent-Revision-Round</name><t><strong>Direction:</strong> RES<br/>
        <strong>Required:</strong> OPTIONAL (present when Strategy = <tt>reflexive</tt>)</t>
      <t><strong>Definition:</strong> The current revision pass number within a reflexive dispatch cycle, expressed as <tt>current/max</tt>.</t>
      <t><strong>Syntax:</strong>
        </t><sourcecode type="abnf">
CRP-Agent-Revision-Round = 1*DIGIT "/" 1*DIGIT
</sourcecode><t><strong>Example:</strong>
        </t><artwork type="http-message">
CRP-Agent-Revision-Round: 2/3
</artwork></section></section>
    <section anchor="namespace-crp-memory-"><name>Namespace: CRP-Memory-*</name><t>Memory headers expose the state of the four-tier memory hierarchy interaction for the current call. They inform clients which memory tiers were accessed and provide cache-like signals for knowledge freshness.</t>
    <section anchor="crp-memory-tier-hit"><name>CRP-Memory-Tier-Hit</name><t><strong>Direction:</strong> RES<br/>
        <strong>Required:</strong> OPTIONAL</t>
      <t><strong>Definition:</strong> The highest memory tier accessed to serve this call's Context Envelope. Higher tier numbers indicate deeper (slower, more persistent) storage was required.</t>
      <t><strong>Syntax:</strong>
        </t><sourcecode type="abnf">
CRP-Memory-Tier-Hit = "0" / "1" / "2" / "3"
</sourcecode><table>
        <thead>
          <tr>
            <th align="left">Value</th>
            <th align="left">Tier</th>
            <th align="left">Storage</th>
            <th align="left">Latency</th>
          </tr>
        </thead>
        <tbody>
          <tr>
            <td align="left">
              <tt>0</tt></td>
            <td align="left">Active</td>
            <td align="left">In-context</td>
            <td align="left">&lt;1ms</td>
          </tr>
          <tr>
            <td align="left">
              <tt>1</tt></td>
            <td align="left">Hot</td>
            <td align="left">Session cache</td>
            <td align="left">&lt;10ms</td>
          </tr>
          <tr>
            <td align="left">
              <tt>2</tt></td>
            <td align="left">Warm</td>
            <td align="left">Recent CKF</td>
            <td align="left">&lt;100ms</td>
          </tr>
          <tr>
            <td align="left">
              <tt>3</tt></td>
            <td align="left">Cold</td>
            <td align="left">Full CKF graph</td>
            <td align="left">&lt;1000ms</td>
          </tr>
        </tbody>
      </table>
      <t><strong>Example:</strong>
        </t><artwork type="http-message">
CRP-Memory-Tier-Hit: 2
</artwork></section><section anchor="crp-memory-ckf-hits"><name>CRP-Memory-CKF-Hits</name><t><strong>Direction:</strong> RES<br/>
        <strong>Required:</strong> OPTIONAL</t>
      <t><strong>Definition:</strong> The number of facts retrieved from the Contextual Knowledge Fabric (Tier 3 cold storage) for inclusion in this call's envelope.</t>
      <t><strong>Syntax:</strong>
        </t><sourcecode type="abnf">
CRP-Memory-CKF-Hits = 1*DIGIT
</sourcecode><t><strong>Example:</strong>
        </t><artwork type="http-message">
CRP-Memory-CKF-Hits: 34
</artwork></section><section anchor="crp-memory-ckf-community"><name>CRP-Memory-CKF-Community</name><t><strong>Direction:</strong> RES<br/>
        <strong>Required:</strong> OPTIONAL</t>
      <t><strong>Definition:</strong> The Leiden community cluster label from the CKF graph most relevant to this call's query. Indicates which knowledge domain the CKF served.</t>
      <t><strong>Syntax:</strong>
        </t><sourcecode type="abnf">
CRP-Memory-CKF-Community = crp-token
</sourcecode><t><strong>Example:</strong>
        </t><artwork type="http-message">
CRP-Memory-CKF-Community: eu-ai-act-compliance
</artwork></section><section anchor="crp-memory-knowledge-age"><name>CRP-Memory-Knowledge-Age</name><t><strong>Direction:</strong> RES<br/>
        <strong>Required:</strong> OPTIONAL</t>
      <t><strong>Definition:</strong> The elapsed time since the most recently ingested fact used in this call's envelope, expressed as an ISO 8601 duration. Indicates knowledge freshness.</t>
      <t><strong>Syntax:</strong>
        </t><sourcecode type="abnf">
CRP-Memory-Knowledge-Age = "P" [ 1*DIGIT "Y" ] [ 1*DIGIT "M" ] [ 1*DIGIT "D" ]
                            [ "T" [ 1*DIGIT "H" ] [ 1*DIGIT "M" ] [ 1*DIGIT "S" ] ]
</sourcecode><t><strong>Example:</strong>
        </t><artwork type="http-message">
CRP-Memory-Knowledge-Age: P3D
CRP-Memory-Knowledge-Age: PT6H
</artwork></section></section>
    <section anchor="session-state-headers"><name>Session State Headers</name><t>Session state headers are the CRP equivalent of HTTP cookies — they carry signed session state, enabling stateless session relay across language boundaries and gateway instances. Full specification in CRP-SPEC-007.</t>
    <section anchor="crp-set-session"><name>CRP-Set-Session</name><t><strong>Direction:</strong> RES<br/>
        <strong>Required:</strong> REQUIRED for first window; RECOMMENDED for subsequent windows</t>
      <t><strong>Definition:</strong> Sets the CRP session token on the client, analogous to HTTP <tt>Set-Cookie</tt>. Carries signed session state including session ID, window number, quality history, safety budget, and HMAC chain tip. The token is signed with HMAC-SHA256 using the session signing key and MUST be validated by the gateway on subsequent requests.</t>
      <t><strong>Syntax:</strong>
        </t><sourcecode type="abnf">
CRP-Set-Session = "token=" session-token
                  *( ";" OWS session-attribute )
session-token   = 1*( ALPHA / DIGIT / "+" / "/" / "." / "=" / "-" / "_" )
session-attribute = "Path=" path-value
                  / "Max-Age=" delta-seconds
                  / "Signed"
                  / "SameSite=" ( "Strict" / "Lax" / "None" )
                  / "Window=" 1*DIGIT
                  / "QualityHistory=" quality-history
quality-history = quality-tier *( "," quality-tier )
</sourcecode><t><strong>Example:</strong>
        </t><artwork type="http-message">
CRP-Set-Session: token=eyJzZXNzaW9uX2lkIjoiY3JwX3Nlc3NfN2YzYSJ9.sha256:sig...; Path=/; Max-Age=3600; Signed; SameSite=Strict; Window=3; QualityHistory=A,A,B
</artwork></section><section anchor="crp-session-token"><name>CRP-Session-Token</name><t><strong>Direction:</strong> REQ<br/>
        <strong>Required:</strong> RECOMMENDED (when set by prior <tt>CRP-Set-Session</tt>)</t>
      <t><strong>Definition:</strong> The session token received via <tt>CRP-Set-Session</tt>, returned by the client on subsequent requests to resume the session, analogous to HTTP <tt>Cookie</tt>. The gateway validates the token signature and extracts session state without requiring server-side session storage.</t>
      <t><strong>Syntax:</strong>
        </t><sourcecode type="abnf">
CRP-Session-Token = session-token
</sourcecode><t><strong>Example:</strong>
        </t><artwork type="http-message">
CRP-Session-Token: eyJzZXNzaW9uX2lkIjoiY3JwX3Nlc3NfN2YzYSJ9.sha256:sig...
</artwork></section></section>
    <section anchor="llm-configuration-headers"><name>LLM Configuration Headers</name><t>LLM configuration headers allow the CRP gateway to dynamically adjust LLM inference parameters based on session safety state. These headers are used internally by the gateway — clients SHOULD NOT set these directly.</t>
    <section anchor="crp-llm-temperature"><name>CRP-LLM-Temperature</name><t><strong>Direction:</strong> Internal (gateway use)<br/>
        <strong>Required:</strong> N/A — internal to gateway</t>
      <t><strong>Definition:</strong> The temperature value used for the LLM call, after any safety-driven adjustments. Logged in the audit trail.</t>
      <t><strong>Range:</strong> 0.0 – 2.0. Gateway reduces toward 0.2 on reflexive re-dispatch for HIGH-risk sessions.</t>
      </section><section anchor="crp-llm-grounding-mode"><name>CRP-LLM-Grounding-Mode</name><t><strong>Direction:</strong> REQ<br/>
        <strong>Required:</strong> OPTIONAL</t>
      <t><strong>Definition:</strong> Controls the grounding instruction injected into the LLM system prompt by the gateway.</t>
      <t><strong>Syntax:</strong>
        </t><sourcecode type="abnf">
CRP-LLM-Grounding-Mode = "context-strict" / "context-preferred" / "open"
</sourcecode><table>
        <thead>
          <tr>
            <th align="left">Value</th>
            <th align="left">System Prompt Instruction</th>
          </tr>
        </thead>
        <tbody>
          <tr>
            <td align="left">
              <tt>context-strict</tt></td>
            <td align="left">"Answer only using the provided context. Do not use external knowledge."</td>
          </tr>
          <tr>
            <td align="left">
              <tt>context-preferred</tt></td>
            <td align="left">"Prefer the provided context. Indicate when using general knowledge."</td>
          </tr>
          <tr>
            <td align="left">
              <tt>open</tt></td>
            <td align="left">No grounding instruction injected.</td>
          </tr>
        </tbody>
      </table>
      <t><strong>Default:</strong> <tt>context-preferred</tt></t>
      <t><strong>Example:</strong>
        </t><artwork type="http-message">
CRP-LLM-Grounding-Mode: context-strict
</artwork></section><section anchor="crp-llm-reproducibility-seed"><name>CRP-LLM-Reproducibility-Seed</name><t><strong>Direction:</strong> REQ / stored in audit trail<br/>
        <strong>Required:</strong> OPTIONAL<br/>
        <strong>NEW in v3.0</strong></t>
      <t><strong>Definition:</strong> A numeric seed for deterministic LLM sampling, when the provider supports it. Stored in the HMAC audit chain to enable exact regeneration of any response for audit replay. GDPR Art. 22 requires that automated decisions be explainable and reproducible.</t>
      <t><strong>Syntax:</strong>
        </t><sourcecode type="abnf">
CRP-LLM-Reproducibility-Seed = 1*DIGIT
</sourcecode><t><strong>Example:</strong>
        </t><artwork type="http-message">
CRP-LLM-Reproducibility-Seed: 42
</artwork></section></section>
    <section anchor="header-interaction-rules">
      <name>Header Interaction Rules</name>
      <section anchor="safety-policy-and-override-headers"><name>Safety Policy and Override Headers</name><t>When <tt>CRP-Safety-Policy</tt> and <tt>CRP-Safety-Mode</tt> are both present, the <strong>more restrictive</strong> setting applies per-directive:
- <tt>CRP-Safety-Mode: strict</tt> + <tt>CRP-Safety-Policy: warn-on CRITICAL</tt> → <tt>halt-on CRITICAL</tt> (strict wins)
- <tt>CRP-Safety-Mode: permissive</tt> + <tt>CRP-Safety-Policy: halt-on CRITICAL</tt> → <tt>halt-on CRITICAL</tt> (policy wins)</t>
    </section>
      <section anchor="etag-and-cache-interaction"><name>ETag and Cache Interaction</name><t><tt>CRP-Context-If-Match</tt> is only evaluated when <tt>CRP-Context-Cache</tt> does NOT contain <tt>no-cache</tt>. If <tt>no-cache</tt> is set, the gateway MUST bypass ETag validation and reconstruct the envelope unconditionally.</t>
    </section>
      <section anchor="session-token-priority"><name>Session Token Priority</name><t>When both <tt>CRP-Session-Token</tt> and <tt>CRP-Context-Session-Id</tt> are present, <tt>CRP-Session-Token</tt> takes precedence. The gateway validates the token signature; if valid, the embedded session ID overrides <tt>CRP-Context-Session-Id</tt>.</t>
    </section>
      <section anchor="agentic-safety-budget-propagation"><name>Agentic Safety Budget Propagation</name><t>In multi-agent chains, <tt>CRP-Agent-Safety-Budget</tt> presented in a request from a sub-agent is the budget ceiling for that sub-agent's session. The sub-agent's gateway MUST NOT issue a safety budget higher than the value received. This prevents budget inflation in nested agent calls.</t>
    </section>
      <section anchor="compliance-headers-require-registered-ai-system"><name>Compliance Headers Require Registered AI System</name><t><tt>CRP-Compliance-EU-AI-Act</tt> classification is only meaningful when the AI system has been registered in the CRP Gateway configuration with a system type, deployment domain, and intended purpose. Unregistered systems MUST receive <tt>CRP-Compliance-EU-AI-Act: UNKNOWN</tt> and a log warning.</t>
      </section>
    </section>
    <section anchor="error-semantics">
      <name>Error Semantics</name>
      <section anchor="http-status-codes-used-by-crp"><name>HTTP Status Codes Used by CRP</name><table>
        <thead>
          <tr>
            <th align="left">Status</th>
            <th align="left">Condition</th>
            <th align="left">Required Headers</th>
          </tr>
        </thead>
        <tbody>
          <tr>
            <td align="left">
              <tt>200 OK</tt></td>
            <td align="left">Normal response</td>
            <td align="left">All applicable CRP headers</td>
          </tr>
          <tr>
            <td align="left">
              <tt>304 Not Modified</tt></td>
            <td align="left">ETag match — context not changed</td>
            <td align="left">
              <tt>CRP-Context-ETag</tt></td>
          </tr>
          <tr>
            <td align="left">
              <tt>400 Bad Request</tt></td>
            <td align="left">Malformed Safety Policy, nonce mismatch</td>
            <td align="left">
              <tt>CRP-Safety-Nonce</tt></td>
          </tr>
          <tr>
            <td align="left">
              <tt>401 Unauthorized</tt></td>
            <td align="left">Invalid or expired session token</td>
            <td align="left">—</td>
          </tr>
          <tr>
            <td align="left">
              <tt>424 Failed Dependency</tt></td>
            <td align="left">
              <tt>only-if-ckf</tt> set but CKF miss</td>
            <td align="left">
              <tt>CRP-Context-Cache-Status: MISS</tt></td>
          </tr>
          <tr>
            <td align="left">
              <tt>451 Unavailable For Legal Reasons</tt></td>
            <td align="left">Safety policy halt — CRITICAL risk or UNACCEPTABLE EU AI Act class</td>
            <td align="left">
              <tt>CRP-Safety-Hallucination-Risk</tt>, <tt>CRP-Safety-Retry-After</tt>, <tt>CRP-Compliance-Audit-Trail-URI</tt></td>
          </tr>
          <tr>
            <td align="left">
              <tt>503 Service Unavailable</tt></td>
            <td align="left">Minimum quality tier cannot be achieved</td>
            <td align="left">
              <tt>CRP-Context-Quality-Tier</tt> (max achievable)</td>
          </tr>
        </tbody>
      </table>
    </section>
      <section anchor="http-451-semantics"><name>HTTP 451 Semantics</name><t>HTTP 451 (Unavailable For Legal Reasons, RFC 7725) is used by CRP to indicate a safety or regulatory halt. The body of a 451 response MUST include a JSON object:</t>
      <sourcecode type="json">
{
  "crp_halt_reason": "CRITICAL_HALLUCINATION_RISK | UNACCEPTABLE_EU_AI_ACT | SAFETY_BUDGET_DEPLETED",
  "session_id": "crp_sess_...",
  "audit_trail_uri": "https://comply.crprotocol.io/t/...",
  "oversight_required": true,
  "retry_condition": "oversight-required | &lt;ISO8601 datetime&gt;"
}
</sourcecode></section>
    </section>
    <section anchor="security-considerations">
      <name>Security Considerations</name>
      <section anchor="header-injection"><name>Header Injection</name><t>Clients MUST NOT set <tt>CRP-Safety-*</tt> (response namespace), <tt>CRP-Provenance-*</tt> (response namespace), or <tt>CRP-Compliance-*</tt> (response namespace) headers in requests. Gateways MUST validate and strip any such headers from client requests before processing.</t>
      <t>LLM outputs MUST NOT be parsed for CRP header values. All response headers are injected by the gateway post-response analysis, not derived from response content.</t>
    </section>
      <section anchor="session-token-security"><name>Session Token Security</name><t><tt>CRP-Session-Token</tt> values are cryptographically signed. Forged tokens will fail signature validation. Tokens with expired <tt>expires_at</tt> MUST be rejected with HTTP 401. See CRP-SPEC-015 §3.2.</t>
    </section>
      <section anchor="safety-policy-integrity"><name>Safety Policy Integrity</name><t>The <tt>CRP-Safety-Policy</tt> value MUST be validated for syntactic correctness per the grammar in CRP-SPEC-006 before session initialisation. Policies containing unrecognised directives MUST be rejected, not silently ignored, to prevent policy bypass through unknown directive injection.</t>
    </section>
      <section anchor="hmac-chain-protection"><name>HMAC Chain Protection</name><t>The HMAC chain key (used to generate <tt>CRP-Provenance-HMAC</tt>) MUST be stored securely and never transmitted in any CRP header. See CRP-SPEC-015 §3.1 for the complete HMAC specification.</t>
      </section>
    </section>
    <section anchor="privacy-considerations"><name>Privacy Considerations</name><t>CRP response headers carry metadata about AI calls and may indirectly reveal information about the content of those calls. Specifically:</t>
    <ul spacing="normal">
      <li>
        <t><tt>CRP-Compliance-GDPR-PII: true</tt> reveals that the call contained personal data</t>
      </li>
      <li>
        <t><tt>CRP-Safety-Attribution: PARAMETRIC</tt> may reveal that the request was outside the trained knowledge domain</t>
      </li>
      <li>
        <t><tt>CRP-Memory-CKF-Community</tt> reveals the knowledge domain of the query</t>
      </li>
    </ul>
    <t>Implementors MUST consider the sensitivity of CRP response headers when making them available to browser-based clients. In particular, <tt>CRP-Compliance-GDPR-PII</tt> SHOULD be treated as sensitive and not exposed to JavaScript.</t>
    <t>The <tt>CRP-Context-Cache: no-store</tt> directive MUST be used for calls processing personal data to prevent persistence in the CKF. See CRP-SPEC-015 §6.</t>
    </section>
    <section anchor="iana-considerations">
      <name>IANA Considerations</name>
      <section anchor="http-field-name-registrations"><name>HTTP Field Name Registrations</name><t>This document requests provisional registration of the following HTTP field names in the IANA HTTP Field Name Registry (per RFC 9110 §16.3). All fields share the following properties unless noted:</t>
      <ul spacing="normal">
        <li>
          <t><strong>Applicable Protocol:</strong> http</t>
        </li>
        <li>
          <t><strong>Status:</strong> provisional</t>
        </li>
        <li>
          <t><strong>Author/Change Controller:</strong> AutoCyber AI Pty Ltd <eref target="mailto:contact@crprotocol.io">contact@crprotocol.io</eref></t>
        </li>
        <li>
          <t><strong>Specification Document:</strong> https://crprotocol.io/spec/headers/ (this document)</t>
        </li>
      </ul>
      <t><strong>Priority registration set (10 headers — submit first):</strong></t>
      <table>
        <thead>
          <tr>
            <th align="left">Field Name</th>
            <th align="left">Direction</th>
            <th align="left">Reference</th>
          </tr>
        </thead>
        <tbody>
          <tr>
            <td align="left">
              <tt>CRP-Context-Quality-Tier</tt></td>
            <td align="left">Response</td>
            <td align="left">§4.1</td>
          </tr>
          <tr>
            <td align="left">
              <tt>CRP-Safety-Hallucination-Risk</tt></td>
            <td align="left">Response</td>
            <td align="left">§5.1</td>
          </tr>
          <tr>
            <td align="left">
              <tt>CRP-Provenance-HMAC</tt></td>
            <td align="left">Response</td>
            <td align="left">§6.1</td>
          </tr>
          <tr>
            <td align="left">
              <tt>CRP-Compliance-EU-AI-Act</tt></td>
            <td align="left">Response</td>
            <td align="left">§7.1</td>
          </tr>
          <tr>
            <td align="left">
              <tt>CRP-Safety-Policy</tt></td>
            <td align="left">Request</td>
            <td align="left">§5.12</td>
          </tr>
          <tr>
            <td align="left">
              <tt>CRP-Agent-Safety-Budget</tt></td>
            <td align="left">Both</td>
            <td align="left">§8.3</td>
          </tr>
          <tr>
            <td align="left">
              <tt>CRP-Set-Session</tt></td>
            <td align="left">Response</td>
            <td align="left">§10.1</td>
          </tr>
          <tr>
            <td align="left">
              <tt>CRP-Context-ETag</tt></td>
            <td align="left">Response</td>
            <td align="left">§4.8</td>
          </tr>
          <tr>
            <td align="left">
              <tt>CRP-Compliance-Audit-Trail-URI</tt></td>
            <td align="left">Response</td>
            <td align="left">§7.6</td>
          </tr>
          <tr>
            <td align="left">
              <tt>CRP-Safety-Oversight-Mode</tt></td>
            <td align="left">Both</td>
            <td align="left">§5.10</td>
          </tr>
        </tbody>
      </table>
      <t><strong>Full registration set:</strong> All 58 headers defined in Sections 4–11.</t>
    </section>
      <section anchor="well-known-uri-registration"><name>Well-Known URI Registration</name><t>This document requests registration of <tt>/.well-known/crp-gateway.json</tt> in the IANA Well-Known URIs registry (per RFC 8615) for CRP Gateway capability advertisement.</t>
      </section>
    </section>
  </middle>
  <back>
    <references>
      <name>References</name>
      <references anchor="normative-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 initials="S." surname="Bradner" fullname="S. Bradner">
              <organization>Harvard University</organization>
            </author>
            <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="RFC5234" target="https://www.rfc-editor.org/info/rfc5234">
          <front>
            <title>Augmented BNF for Syntax Specifications: ABNF</title>
            <author initials="D." surname="Crocker" fullname="D. Crocker">
              <organization>Brandenburg InternetWorking</organization>
            </author>
            <date year="2008" month="January"/>
          </front>
          <seriesInfo name="STD" value="68"/>
          <seriesInfo name="RFC" value="5234"/>
          <seriesInfo name="DOI" value="10.17487/RFC5234"/>
        </reference>
        <reference anchor="RFC7725" target="https://www.rfc-editor.org/info/rfc7725">
          <front>
            <title>An HTTP Status Code to Report Legal Obstacles</title>
            <author initials="T." surname="Bray" fullname="T. Bray">
              <organization>Textuality</organization>
            </author>
            <date year="2016" month="February"/>
          </front>
          <seriesInfo name="RFC" value="7725"/>
          <seriesInfo name="RFC" value="7725"/>
          <seriesInfo name="DOI" value="10.17487/RFC7725"/>
        </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 initials="B." surname="Leiba" fullname="B. Leiba">
              <organization>Huawei Technologies</organization>
            </author>
            <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="RFC8615" target="https://www.rfc-editor.org/info/rfc8615">
          <front>
            <title>Well-Known Uniform Resource Identifiers (URIs)</title>
            <author initials="M." surname="Nottingham" fullname="M. Nottingham">
              <organization>Fastly</organization>
            </author>
            <date year="2019" month="May"/>
          </front>
          <seriesInfo name="RFC" value="8615"/>
          <seriesInfo name="RFC" value="8615"/>
          <seriesInfo name="DOI" value="10.17487/RFC8615"/>
        </reference>
        <reference anchor="RFC9110" target="https://www.rfc-editor.org/info/rfc9110">
          <front>
            <title>HTTP Semantics</title>
            <author initials="R." surname="Fielding" fullname="R. Fielding">
              <organization>Adobe</organization>
            </author>
            <date year="2022" month="June"/>
          </front>
          <seriesInfo name="STD" value="97"/>
          <seriesInfo name="RFC" value="9110"/>
          <seriesInfo name="DOI" value="10.17487/RFC9110"/>
        </reference>
        <reference anchor="RFC2104" target="https://www.rfc-editor.org/info/rfc2104">
          <front>
            <title>HMAC: Keyed-Hashing for Message Authentication</title>
            <author initials="H." surname="Krawczyk" fullname="H. Krawczyk">
              <organization>IBM</organization>
            </author>
            <date year="1997" month="February"/>
          </front>
          <seriesInfo name="RFC" value="2104"/>
          <seriesInfo name="RFC" value="2104"/>
          <seriesInfo name="DOI" value="10.17487/RFC2104"/>
        </reference>
        <reference anchor="RFC5869" target="https://www.rfc-editor.org/info/rfc5869">
          <front>
            <title>HMAC-based Extract-and-Expand Key Derivation Function (HKDF)</title>
            <author initials="H." surname="Krawczyk" fullname="H. Krawczyk">
              <organization>IBM Research</organization>
            </author>
            <date year="2010" month="May"/>
          </front>
          <seriesInfo name="RFC" value="5869"/>
          <seriesInfo name="RFC" value="5869"/>
          <seriesInfo name="DOI" value="10.17487/RFC5869"/>
        </reference>
      </references>
      <references anchor="informative-references">
        <name>Informative References</name>
        <reference anchor="EU-AI-ACT">
          <front>
            <title>Regulation (EU) 2024/1689 of the European Parliament and of the Council laying down harmonised rules on artificial intelligence (Artificial Intelligence Act)</title>
            <author>
              <organization>European Parliament and Council of the European Union</organization>
            </author>
            <date year="2024"/>
          </front>
        </reference>
        <reference anchor="ISO42001">
          <front>
            <title>ISO/IEC 42001:2023 — Artificial intelligence — Management system</title>
            <author>
              <organization>International Organization for Standardization</organization>
            </author>
            <date year="2023"/>
          </front>
        </reference>
        <reference anchor="NIST-AI-RMF" target="https://airc.nist.gov/RMF">
          <front>
            <title>Artificial Intelligence Risk Management Framework (AI RMF 1.0)</title>
            <author>
              <organization>National Institute of Standards and Technology (NIST)</organization>
            </author>
            <date year="2023" month="January"/>
          </front>
        </reference>
        <reference anchor="GDPR">
          <front>
            <title>Regulation (EU) 2016/679 of the European Parliament and of the Council on the protection of natural persons with regard to the processing of personal data (General Data Protection Regulation)</title>
            <author>
              <organization>European Parliament and Council of the European Union</organization>
            </author>
            <date year="2016"/>
          </front>
        </reference>
      </references>
    </references>
    <section anchor="appendix-header-index" numbered="false"><name>Complete Header Index</name><table>
      <thead>
        <tr>
          <th align="left">Header</th>
          <th align="left">Namespace</th>
          <th align="left">Direction</th>
          <th align="left">Section</th>
          <th align="left">Conformance</th>
        </tr>
      </thead>
      <tbody>
        <tr>
          <td align="left">CRP-Accept-Quality</td>
          <td align="left">Context</td>
          <td align="left">REQ</td>
          <td align="left">4.13</td>
          <td align="left">Optional</td>
        </tr>
        <tr>
          <td align="left">CRP-Accept-Risk</td>
          <td align="left">Safety</td>
          <td align="left">REQ</td>
          <td align="left">5.14</td>
          <td align="left">Optional</td>
        </tr>
        <tr>
          <td align="left">CRP-Accept-Strategy</td>
          <td align="left">Context</td>
          <td align="left">REQ</td>
          <td align="left">4.14</td>
          <td align="left">Optional</td>
        </tr>
        <tr>
          <td align="left">CRP-Agent-Dispatch-Strategy</td>
          <td align="left">Agent</td>
          <td align="left">BOTH</td>
          <td align="left">8.6</td>
          <td align="left">Optional</td>
        </tr>
        <tr>
          <td align="left">CRP-Agent-Loop-Depth</td>
          <td align="left">Agent</td>
          <td align="left">RES</td>
          <td align="left">8.2</td>
          <td align="left">Recommended</td>
        </tr>
        <tr>
          <td align="left">CRP-Agent-Phase</td>
          <td align="left">Agent</td>
          <td align="left">RES</td>
          <td align="left">8.1</td>
          <td align="left">Conditional</td>
        </tr>
        <tr>
          <td align="left">CRP-Agent-Revision-Round</td>
          <td align="left">Agent</td>
          <td align="left">RES</td>
          <td align="left">8.7</td>
          <td align="left">Optional</td>
        </tr>
        <tr>
          <td align="left">CRP-Agent-Safety-Budget</td>
          <td align="left">Agent</td>
          <td align="left">BOTH</td>
          <td align="left">8.3</td>
          <td align="left">Recommended</td>
        </tr>
        <tr>
          <td align="left">CRP-Agent-Session-Parent</td>
          <td align="left">Agent</td>
          <td align="left">BOTH</td>
          <td align="left">8.5</td>
          <td align="left">Optional</td>
        </tr>
        <tr>
          <td align="left">CRP-Agent-Tool-Calls</td>
          <td align="left">Agent</td>
          <td align="left">RES</td>
          <td align="left">8.4</td>
          <td align="left">Optional</td>
        </tr>
        <tr>
          <td align="left">CRP-Compliance-Audit-Trail-Id</td>
          <td align="left">Compliance</td>
          <td align="left">RES</td>
          <td align="left">7.5</td>
          <td align="left">Required*</td>
        </tr>
        <tr>
          <td align="left">CRP-Compliance-Audit-Trail-URI</td>
          <td align="left">Compliance</td>
          <td align="left">RES</td>
          <td align="left">7.6</td>
          <td align="left">Recommended</td>
        </tr>
        <tr>
          <td align="left">CRP-Compliance-Controls-Met</td>
          <td align="left">Compliance</td>
          <td align="left">RES</td>
          <td align="left">7.8</td>
          <td align="left">Optional</td>
        </tr>
        <tr>
          <td align="left">CRP-Compliance-Data-Residency</td>
          <td align="left">Compliance</td>
          <td align="left">BOTH</td>
          <td align="left">7.7</td>
          <td align="left">Optional</td>
        </tr>
        <tr>
          <td align="left">CRP-Compliance-EU-AI-Act</td>
          <td align="left">Compliance</td>
          <td align="left">RES</td>
          <td align="left">7.1</td>
          <td align="left">Recommended</td>
        </tr>
        <tr>
          <td align="left">CRP-Compliance-GDPR-PII</td>
          <td align="left">Compliance</td>
          <td align="left">RES</td>
          <td align="left">7.3</td>
          <td align="left">Recommended</td>
        </tr>
        <tr>
          <td align="left">CRP-Compliance-ISO-42001</td>
          <td align="left">Compliance</td>
          <td align="left">RES</td>
          <td align="left">7.4</td>
          <td align="left">Optional</td>
        </tr>
        <tr>
          <td align="left">CRP-Compliance-NIST-Tier</td>
          <td align="left">Compliance</td>
          <td align="left">RES</td>
          <td align="left">7.2</td>
          <td align="left">Optional</td>
        </tr>
        <tr>
          <td align="left">CRP-Context-Acceptance</td>
          <td align="left">Context</td>
          <td align="left">REQ</td>
          <td align="left">—</td>
          <td align="left">—</td>
        </tr>
        <tr>
          <td align="left">CRP-Context-Cache</td>
          <td align="left">Context</td>
          <td align="left">REQ</td>
          <td align="left">4.10</td>
          <td align="left">Optional</td>
        </tr>
        <tr>
          <td align="left">CRP-Context-Cache-Status</td>
          <td align="left">Context</td>
          <td align="left">RES</td>
          <td align="left">4.11</td>
          <td align="left">Optional</td>
        </tr>
        <tr>
          <td align="left">CRP-Context-Continuation-Id</td>
          <td align="left">Context</td>
          <td align="left">BOTH</td>
          <td align="left">4.12</td>
          <td align="left">Optional</td>
        </tr>
        <tr>
          <td align="left">CRP-Context-ETag</td>
          <td align="left">Context</td>
          <td align="left">RES</td>
          <td align="left">4.8</td>
          <td align="left">Recommended</td>
        </tr>
        <tr>
          <td align="left">CRP-Context-Facts-Used</td>
          <td align="left">Context</td>
          <td align="left">RES</td>
          <td align="left">4.4</td>
          <td align="left">Optional</td>
        </tr>
        <tr>
          <td align="left">CRP-Context-If-Match</td>
          <td align="left">Context</td>
          <td align="left">REQ</td>
          <td align="left">4.9</td>
          <td align="left">Optional</td>
        </tr>
        <tr>
          <td align="left">CRP-Context-Protocol-Version</td>
          <td align="left">Context</td>
          <td align="left">RES</td>
          <td align="left">4.15</td>
          <td align="left">Required</td>
        </tr>
        <tr>
          <td align="left">CRP-Context-Quality-Tier</td>
          <td align="left">Context</td>
          <td align="left">RES</td>
          <td align="left">4.1</td>
          <td align="left">Recommended</td>
        </tr>
        <tr>
          <td align="left">CRP-Context-Saturation</td>
          <td align="left">Context</td>
          <td align="left">RES</td>
          <td align="left">4.3</td>
          <td align="left">Recommended</td>
        </tr>
        <tr>
          <td align="left">CRP-Context-Session-Id</td>
          <td align="left">Context</td>
          <td align="left">BOTH</td>
          <td align="left">4.7</td>
          <td align="left">Required</td>
        </tr>
        <tr>
          <td align="left">CRP-Context-Strategy</td>
          <td align="left">Context</td>
          <td align="left">RES</td>
          <td align="left">4.6</td>
          <td align="left">Recommended</td>
        </tr>
        <tr>
          <td align="left">CRP-Context-Tokens-Used</td>
          <td align="left">Context</td>
          <td align="left">RES</td>
          <td align="left">4.5</td>
          <td align="left">Optional</td>
        </tr>
        <tr>
          <td align="left">CRP-Context-Window</td>
          <td align="left">Context</td>
          <td align="left">RES</td>
          <td align="left">4.2</td>
          <td align="left">Recommended</td>
        </tr>
        <tr>
          <td align="left">CRP-LLM-Grounding-Mode</td>
          <td align="left">LLM</td>
          <td align="left">REQ</td>
          <td align="left">11.2</td>
          <td align="left">Optional</td>
        </tr>
        <tr>
          <td align="left">CRP-LLM-Reproducibility-Seed</td>
          <td align="left">LLM</td>
          <td align="left">REQ</td>
          <td align="left">11.3</td>
          <td align="left">Optional</td>
        </tr>
        <tr>
          <td align="left">CRP-Memory-CKF-Community</td>
          <td align="left">Memory</td>
          <td align="left">RES</td>
          <td align="left">9.3</td>
          <td align="left">Optional</td>
        </tr>
        <tr>
          <td align="left">CRP-Memory-CKF-Hits</td>
          <td align="left">Memory</td>
          <td align="left">RES</td>
          <td align="left">9.2</td>
          <td align="left">Optional</td>
        </tr>
        <tr>
          <td align="left">CRP-Memory-Knowledge-Age</td>
          <td align="left">Memory</td>
          <td align="left">RES</td>
          <td align="left">9.4</td>
          <td align="left">Optional</td>
        </tr>
        <tr>
          <td align="left">CRP-Memory-Tier-Hit</td>
          <td align="left">Memory</td>
          <td align="left">RES</td>
          <td align="left">9.1</td>
          <td align="left">Optional</td>
        </tr>
        <tr>
          <td align="left">CRP-Provenance-Attribution-Score</td>
          <td align="left">Provenance</td>
          <td align="left">RES</td>
          <td align="left">6.6</td>
          <td align="left">Recommended</td>
        </tr>
        <tr>
          <td align="left">CRP-Provenance-Chain-Integrity</td>
          <td align="left">Provenance</td>
          <td align="left">RES</td>
          <td align="left">6.4</td>
          <td align="left">Required*</td>
        </tr>
        <tr>
          <td align="left">CRP-Provenance-Claim-Count</td>
          <td align="left">Provenance</td>
          <td align="left">RES</td>
          <td align="left">6.5</td>
          <td align="left">Optional</td>
        </tr>
        <tr>
          <td align="left">CRP-Provenance-DAG-Root</td>
          <td align="left">Provenance</td>
          <td align="left">RES</td>
          <td align="left">6.3</td>
          <td align="left">Optional</td>
        </tr>
        <tr>
          <td align="left">CRP-Provenance-Fidelity-Score</td>
          <td align="left">Provenance</td>
          <td align="left">RES</td>
          <td align="left">6.7</td>
          <td align="left">Recommended</td>
        </tr>
        <tr>
          <td align="left">CRP-Provenance-HMAC</td>
          <td align="left">Provenance</td>
          <td align="left">RES</td>
          <td align="left">6.1</td>
          <td align="left">Required*</td>
        </tr>
        <tr>
          <td align="left">CRP-Provenance-Report-URI</td>
          <td align="left">Provenance</td>
          <td align="left">RES</td>
          <td align="left">6.8</td>
          <td align="left">Recommended</td>
        </tr>
        <tr>
          <td align="left">CRP-Provenance-Window-HMAC</td>
          <td align="left">Provenance</td>
          <td align="left">RES</td>
          <td align="left">6.2</td>
          <td align="left">Recommended</td>
        </tr>
        <tr>
          <td align="left">CRP-Provenance-Window-Lineage</td>
          <td align="left">Provenance</td>
          <td align="left">RES</td>
          <td align="left">6.9</td>
          <td align="left">Optional</td>
        </tr>
        <tr>
          <td align="left">CRP-Safety-Attribution</td>
          <td align="left">Safety</td>
          <td align="left">RES</td>
          <td align="left">5.3</td>
          <td align="left">Recommended</td>
        </tr>
        <tr>
          <td align="left">CRP-Safety-Contradictions</td>
          <td align="left">Safety</td>
          <td align="left">RES</td>
          <td align="left">5.7</td>
          <td align="left">Optional</td>
        </tr>
        <tr>
          <td align="left">CRP-Safety-Distortions</td>
          <td align="left">Safety</td>
          <td align="left">RES</td>
          <td align="left">5.6</td>
          <td align="left">Recommended</td>
        </tr>
        <tr>
          <td align="left">CRP-Safety-Entailment-Score</td>
          <td align="left">Safety</td>
          <td align="left">RES</td>
          <td align="left">5.9</td>
          <td align="left">Recommended</td>
        </tr>
        <tr>
          <td align="left">CRP-Safety-Fabrications</td>
          <td align="left">Safety</td>
          <td align="left">RES</td>
          <td align="left">5.5</td>
          <td align="left">Recommended</td>
        </tr>
        <tr>
          <td align="left">CRP-Safety-Grounding-Pct</td>
          <td align="left">Safety</td>
          <td align="left">RES</td>
          <td align="left">5.4</td>
          <td align="left">Recommended</td>
        </tr>
        <tr>
          <td align="left">CRP-Safety-Hallucination-Risk</td>
          <td align="left">Safety</td>
          <td align="left">RES</td>
          <td align="left">5.1</td>
          <td align="left">Required*</td>
        </tr>
        <tr>
          <td align="left">CRP-Safety-Hallucination-Score</td>
          <td align="left">Safety</td>
          <td align="left">RES</td>
          <td align="left">5.2</td>
          <td align="left">Recommended</td>
        </tr>
        <tr>
          <td align="left">CRP-Safety-Mode</td>
          <td align="left">Safety</td>
          <td align="left">REQ</td>
          <td align="left">5.11</td>
          <td align="left">Optional</td>
        </tr>
        <tr>
          <td align="left">CRP-Safety-Nonce</td>
          <td align="left">Safety</td>
          <td align="left">BOTH</td>
          <td align="left">5.16</td>
          <td align="left">Optional</td>
        </tr>
        <tr>
          <td align="left">CRP-Safety-Omissions</td>
          <td align="left">Safety</td>
          <td align="left">RES</td>
          <td align="left">5.8</td>
          <td align="left">Optional</td>
        </tr>
        <tr>
          <td align="left">CRP-Safety-Oversight-Mode</td>
          <td align="left">Safety</td>
          <td align="left">BOTH</td>
          <td align="left">5.10</td>
          <td align="left">Recommended</td>
        </tr>
        <tr>
          <td align="left">CRP-Safety-Policy</td>
          <td align="left">Safety</td>
          <td align="left">REQ</td>
          <td align="left">5.12</td>
          <td align="left">Recommended</td>
        </tr>
        <tr>
          <td align="left">CRP-Safety-Report-URI</td>
          <td align="left">Safety</td>
          <td align="left">REQ</td>
          <td align="left">5.13</td>
          <td align="left">Optional</td>
        </tr>
        <tr>
          <td align="left">CRP-Safety-Retry-After</td>
          <td align="left">Safety</td>
          <td align="left">RES</td>
          <td align="left">5.15</td>
          <td align="left">Conditional</td>
        </tr>
        <tr>
          <td align="left">CRP-Session-Token</td>
          <td align="left">Session</td>
          <td align="left">REQ</td>
          <td align="left">10.2</td>
          <td align="left">Recommended</td>
        </tr>
        <tr>
          <td align="left">CRP-Set-Session</td>
          <td align="left">Session</td>
          <td align="left">RES</td>
          <td align="left">10.1</td>
          <td align="left">Required*</td>
        </tr>
      </tbody>
    </table>
    <t><em>* Required for CRP-Standard and CRP-Full conformance.</em></t>
    <t><em>Copyright © 2025–2026 AutoCyber AI Pty Ltd. This specification text is licensed under Creative Commons Attribution 4.0 International (CC BY 4.0). The CRP™ name, CRP Comply™, CRP Gateway™, and CRP Visualise™ are trademarks of AutoCyber AI Pty Ltd. Implementation of this specification does not grant any trademark licence.</em></t>
  </section>
  </back>
</rfc>
