<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE rfc [
  <!ENTITY nbsp    "&#160;">
  <!ENTITY zwsp   "&#8203;">
  <!ENTITY nbhy   "&#8209;">
  <!ENTITY wj     "&#8288;">
]>
<?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
<!-- generated by https://github.com/cabo/kramdown-rfc version 1.7.29 (Ruby 3.2.3) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-jurkovikj-httpapi-agentic-state-00" category="bcp" consensus="true" submissionType="IETF" version="3">
  <!-- xml2rfc v2v3 conversion 3.31.0 -->
  <front>
    <title abbrev="Agentic State Transfer">HTTP Profile for Synchronized Resource State (Agentic State Transfer)</title>
    <seriesInfo name="Internet-Draft" value="draft-jurkovikj-httpapi-agentic-state-00"/>
    <author initials="A." surname="Jurkovikj" fullname="Antun Jurkovikj">
      <organization/>
      <address>
        <email>antunjurkovic@gmail.com</email>
      </address>
    </author>
    <date year="2025" month="December" day="10"/>
    <area>Applications and Real-Time</area>
    <workgroup>Internet Engineering Task Force</workgroup>
    <keyword>HTTP, concurrency, ETag, state management</keyword>
    <abstract>
      <?line 16?>

<t>HTTP resources are frequently exposed in multiple representations
(e.g., <tt>text/html</tt> for rendering and <tt>application/json</tt> for processing)
via Content Negotiation. However, standard HTTP concurrency controls
(such as ETags) are typically scoped to the byte sequence of a specific
representation. This creates a synchronization gap where a client
modifying one representation cannot guarantee consistency with the
underlying state of another representation, leading to race conditions
and "lost updates" in multi-client environments.</t>
      <t>This document specifies <em>Agentic State Transfer</em> (AST), an HTTP profile
for managing <em>Canonical Resource State</em> (CRS) across multiple
synchronized representations of the same resource. It defines the use of
<em>Semantic Validators</em> (Content Identity) to track the logical state of a
resource independent of its serialization. It further mandates the use
of Optimistic Concurrency Control via <tt>If-Match</tt> headers for
state-changing operations, ensuring that mutations applied by automated
agents are atomic and consistent across all views.</t>
    </abstract>
  </front>
  <middle>
    <?line 36?>

<section anchor="introduction">
      <name>Introduction</name>
      <t>The architecture of the World Wide Web allows a single logical resource
(identified by a URI) to be represented in multiple formats. A common
pattern in modern systems is to expose:</t>
      <ul spacing="normal">
        <li>
          <t>a <em>Rendered Representation</em> (e.g., <tt>text/html</tt>) for human agents, and</t>
        </li>
        <li>
          <t>a <em>Structural Representation</em> (e.g., <tt>application/json</tt>) for automated
agents.</t>
        </li>
      </ul>
      <t>In AST terminology, rendered representations are typically <em>Projected
Representations</em>, while a structural representation MAY serve as the
<em>State-Bearing Representation (SBR)</em> when it exposes the full Canonical
Resource State.</t>
      <t>HTTP provides mechanisms for content negotiation [RFC9110], and defines
validators such as <tt>ETag</tt> for caching and conditional requests.
However, in most deployments:</t>
      <ul spacing="normal">
        <li>
          <t>validators are derived from a particular representation's bytes, and</t>
        </li>
        <li>
          <t>concurrency control, if present at all, is scoped to a single
representation.</t>
        </li>
      </ul>
      <t>This creates a <em>synchronization gap</em>: two clients interacting with
different representations of the same logical resource can unwittingly
overwrite each other's work.</t>
      <t>AST addresses this problem by treating the <em>Canonical Resource State</em>
(CRS) as the primary object of synchronization, and by standardizing how
HTTP validators are used as <em>Semantic Validators</em> for that CRS.</t>
      <section anchor="the-synchronization-problem">
        <name>The Synchronization Problem</name>
        <t>Consider a resource <tt>/article/123</tt> exposed both as HTML and JSON.</t>
        <ol spacing="normal" type="1"><li>
            <t><em>Client A (Browser)</em> retrieves the HTML representation.</t>
          </li>
          <li>
            <t><em>Client B (Automated Agent)</em> retrieves the JSON representation.</t>
          </li>
          <li>
            <t>Client A submits an edit via an HTML form, updating the underlying
database record.</t>
          </li>
          <li>
            <t>Client B, unaware of the change, computes an update based on its
stale JSON representation and submits a <tt>PUT</tt> or <tt>PATCH</tt> request.</t>
          </li>
        </ol>
        <t>In typical HTTP APIs, at least one of the following is true:</t>
        <ul spacing="normal">
          <li>
            <t>there is no <tt>ETag</tt> at all;</t>
          </li>
          <li>
            <t>the <tt>ETag</tt> is tied to the bytes of a specific representation (e.g.,
JSON only); or</t>
          </li>
          <li>
            <t>the server does not enforce preconditions (<tt>If-Match</tt>).</t>
          </li>
        </ul>
        <t>As a result, Client B's request may succeed, even though:</t>
        <ul spacing="normal">
          <li>
            <t>its view of the resource is stale, and</t>
          </li>
          <li>
            <t>the update logically conflicts with Client A's change.</t>
          </li>
        </ul>
        <t>This is the classic <em>Lost Update</em> problem, now exacerbated by the
growing use of automated agents acting as first-class editors.</t>
      </section>
      <section anchor="canonical-resource-state-crs">
        <name>Canonical Resource State (CRS)</name>
        <t>To address this, AST introduces the concept of <em>Canonical Resource State</em>
(CRS):</t>
        <ul empty="true">
          <li>
            <t>CRS is the authoritative, logical state of the resource, independent
of any particular representation or serialization.</t>
          </li>
        </ul>
        <t>For example, the CRS might be:</t>
        <ul spacing="normal">
          <li>
            <t>a database row (or set of rows),</t>
          </li>
          <li>
            <t>a document or AST (abstract syntax tree),</t>
          </li>
          <li>
            <t>a domain object in application memory, or</t>
          </li>
          <li>
            <t>in a WordPress CMS, the post record in <tt>wp_posts</tt> with fields like
<tt>post_content</tt>, <tt>post_title</tt>, <tt>post_status</tt>, and associated metadata.</t>
          </li>
        </ul>
        <t>Representations such as HTML, JSON, or Markdown are derived <em>from</em> the
CRS and are considered projections of that state.</t>
        <t>AST defines a profile where:</t>
        <ol spacing="normal" type="1"><li>
            <t><strong>Shared Identity</strong> -- All HTTP representations of an AST resource
are projections of the same CRS.</t>
          </li>
          <li>
            <t><strong>Semantic Validation</strong> -- Validators (<tt>ETag</tt> values) are derived
from the CRS, not a specific representation's bytes, so that a
change to the CRS invalidates all representations together.</t>
          </li>
          <li>
            <t><strong>Mandatory Concurrency</strong> -- State-changing operations on AST
resources MUST provide a precondition (<tt>If-Match</tt>) based on the CRS
validator.</t>
          </li>
        </ol>
        <t>This enables safe interaction by automated agents and human clients,
ensuring they participate in the same state transition model.</t>
      </section>
    </section>
    <section anchor="terminology">
      <name>Terminology</name>
      <t>The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",
"SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and
"OPTIONAL" in this document are to be interpreted as described in BCP 14
[RFC2119] [RFC8174] when, and only when, they appear in all capitals.</t>
      <dl>
        <dt><strong>Canonical Resource State (CRS)</strong></dt>
        <dd>
          <t>The underlying, authoritative logical state of a resource (e.g., the
database record or abstract syntax tree). The CRS is the atomic unit
of concurrency.</t>
        </dd>
        <dt><strong>State-Bearing Representation (SBR)</strong></dt>
        <dd>
          <t>A specific representation (e.g., application/json) that exposes the
CRS in a lossless, deterministic format. The SBR serves as the
Concurrency Lock for the resource. Its ETag represents the version of
the CRS.</t>
        </dd>
        <dt><strong>Projected Representation</strong></dt>
        <dd>
          <t>A representation derived from the CRS for a specific consumption
pattern (e.g., text/html for rendering, text/csv for analysis).
Projected Representations are Read-Only with respect to the CRS; they
reflect the state but do not govern it.</t>
        </dd>
        <dt><strong>Semantic Validator</strong></dt>
        <dd>
          <t>The Strong ETag associated with the SBR. It changes if and only if the
CRS changes.</t>
        </dd>
        <dt><strong>AST Resource</strong></dt>
        <dd>
          <t>A resource that conforms to this profile.</t>
        </dd>
      </dl>
    </section>
    <section anchor="the-ast-profile">
      <name>The AST Profile</name>
      <t>This section defines the Agentic State Transfer (AST) profile. It
specifies how clients synchronize state across multiple representations
by pivoting on the State-Bearing Representation (SBR).</t>
      <section anchor="representation-roles">
        <name>Representation Roles</name>
        <t>For a given AST Resource, the server MUST designate exactly one
representation as the State-Bearing Representation (SBR). All other
representations are considered Projected Representations.</t>
        <ul spacing="normal">
          <li>
            <t>The SBR acts as the source of truth for state synchronization.</t>
          </li>
          <li>
            <t>Projected Representations are derivative views. While they MAY have
their own caching validators (ETags) based on their specific byte
sequences, they MUST NOT be used as the basis for state-changing
preconditions on the CRS.</t>
          </li>
        </ul>
      </section>
      <section anchor="semantic-validators-the-sbr-etag">
        <name>Semantic Validators (The SBR ETag)</name>
        <t>The server MUST assign a Strong ETag to the SBR. This ETag serves as the
Semantic Validator for the resource.</t>
        <ul spacing="normal">
          <li>
            <t><strong>Determinism</strong>: The SBR ETag MUST change whenever the CRS changes.</t>
          </li>
          <li>
            <t><strong>Scope</strong>: The SBR ETag MUST NOT be reused as the ETag for Projected
Representations, as this would confuse standard HTTP caches.</t>
          </li>
        </ul>
        <t><strong>Canonicalization</strong>: Implementations MAY compute the SBR ETag from a
deterministic canonical serialization of the CRS (e.g., JSON
Canonicalization Scheme, RFC 8785 [RFC8785]). This ensures that
logically identical states produce identical validators, regardless of
field ordering or formatting variations. See Section 4.1 for detailed
guidance.</t>
        <section anchor="etag-computation-informative">
          <name>ETag Computation (Informative)</name>
          <t>The SBR ETag MUST be a strong validator as defined in [RFC9110].
Implementations MAY compute the SBR ETag using any method that satisfies
both the determinism and strong validator requirements. Common approaches
include:</t>
          <ul spacing="normal">
            <li>
              <t><strong>Content Hash</strong>: SHA-256 or similar cryptographic hash over the
canonicalized SBR bytes (e.g., <tt>"sha256-YWJjMTIz..."</tt>). This is
RECOMMENDED for interoperability, as it allows clients to verify state
equivalence without server coordination and naturally produces strong
validators.</t>
            </li>
            <li>
              <t><strong>Version Counter</strong>: Monotonic version number from the data store
(e.g., <tt>"v42"</tt> or <tt>"rev-1234"</tt>). This is simple but requires
centralized version tracking. The version must increment on every CRS
change to maintain strong validator semantics.</t>
            </li>
          </ul>
          <t>The content hash approach provides the strongest guarantee that identical
CRS values produce identical ETags across different server instances or
time periods, which aids debugging and distributed deployments.</t>
        </section>
      </section>
      <section anchor="discovery-relstate">
        <name>Discovery (rel="state")</name>
        <t>To enable clients consuming a Projected Representation (e.g., HTML) to
discover the SBR for synchronization or editing, servers SHOULD include
a Link header with the <tt>state</tt> relation type. The <tt>type</tt> attribute MUST
be present to indicate the media type of the SBR, enabling clients to
determine how to interact with it.</t>
        <t><strong>Example</strong> (response for <tt>GET /article/123.html</tt>):</t>
        <t><tt>http
HTTP/1.1 200 OK
Content-Type: text/html
ETag: "html-v1"
Link: &lt;/api/article/123&gt;; rel="state"; type="application/json"
</tt></t>
      </section>
      <section anchor="read-semantics">
        <name>Read Semantics</name>
        <section anchor="reading-the-sbr">
          <name>Reading the SBR</name>
          <t>Clients SHOULD use the SBR ETag for conditional requests
(<tt>If-None-Match</tt>) on the SBR URI. The server MUST return <tt>304 Not
Modified</tt> if the CRS has not changed. On a <tt>304</tt> response, the server
SHOULD include the current SBR ETag in the response headers.</t>
          <t>Clients MUST NOT use the SBR ETag as <tt>If-None-Match</tt> against Projected
endpoints. Projected endpoints have their own byte-specific validators.</t>
          <t><strong>Example: HEAD Request to Fetch SBR Validator</strong></t>
          <t>Clients MAY use HEAD to obtain the current SBR ETag without transferring
the full representation body:</t>
          <t>```http
HEAD /api/article/123 HTTP/1.1
Host: example.com
Accept: application/json</t>
          <t>HTTP/1.1 200 OK
Content-Type: application/json
ETag: "sha256-RK63H5GH1GQJQM8A7LN7RP8VNR7F"
Content-Length: 4521
```</t>
          <t>This allows clients to check for state changes with minimal bandwidth
usage before deciding whether to fetch the full representation.</t>
        </section>
        <section anchor="reading-projections">
          <name>Reading Projections</name>
          <t>Clients MAY cache Projected Representations using their specific ETags.
However, clients MUST recognize that a Projected Representation may be
stale relative to the CRS if the SBR ETag has changed.</t>
        </section>
      </section>
      <section anchor="write-semantics-the-safe-write-protocol">
        <name>Write Semantics (The Safe Write Protocol)</name>
        <t>To modify the Canonical Resource State, clients MUST perform the
mutation against the SBR Endpoint (or an endpoint explicitly bound to
the SBR's validator).</t>
        <t>Clients <strong>MUST NOT</strong> use a Projected Representation's ETag as an
<tt>If-Match</tt> precondition for CRS mutations. Only the SBR's own ETag is
valid for concurrency control.</t>
        <ol spacing="normal" type="1"><li>
            <t><strong>Precondition</strong>: The client obtains the current SBR ETag (via <tt>GET</tt>
or <tt>HEAD</tt> on the SBR URI).</t>
          </li>
          <li>
            <t><strong>Mutation</strong>: The client sends the state-changing request (<tt>PUT</tt>,
<tt>POST</tt>, <tt>PATCH</tt>) including the <tt>If-Match</tt> header set to the SBR
ETag.</t>
          </li>
          <li>
            <t><strong>Verification</strong>:  </t>
            <ul spacing="normal">
              <li>
                <t>If the <tt>If-Match</tt> header is missing, servers SHOULD respond with
<tt>428 Precondition Required</tt> [RFC6585]. Servers MAY respond with
<tt>400 Bad Request</tt> if <tt>428</tt> is not supported by the implementation
environment, provided the error body clearly indicates the missing
precondition requirement.</t>
              </li>
              <li>
                <t>If the provided ETag does not match the current CRS version, the
server MUST respond with <tt>412 Precondition Failed</tt>.</t>
              </li>
              <li>
                <t>If the provided ETag matches the current CRS version, the server
MUST accept the write (subject to authorization), update the CRS,
and invalidate all Projected Representations.</t>
              </li>
            </ul>
            <t>
<strong>Note</strong>: For endpoints that do <strong>not</strong> implement AST semantics,
servers MAY accept unconditional writes as in traditional HTTP APIs.
See the "Non-AST Resources and Fallback Behavior" section for
guidance on mixed deployments.</t>
          </li>
          <li>
            <t><strong>Response</strong>: Upon a successful write, the server SHOULD return the
new SBR ETag in the response headers, allowing the client to chain
subsequent updates immediately.</t>
          </li>
          <li>
            <t><strong>Error Bodies</strong>: For <tt>412</tt>, <tt>428</tt>, and <tt>400</tt> (when used for
missing preconditions) responses, servers SHOULD return a Problem
Details body [RFC7807] to assist automated clients in resolving the
conflict.</t>
          </li>
        </ol>
        <t><strong>Example: 428 Response for Missing Precondition</strong></t>
        <t>When a client attempts a state-changing operation without If-Match, the
server SHOULD return a 428 response:</t>
        <t>```http
PATCH /api/article/123 HTTP/1.1
Host: example.com
Content-Type: application/json</t>
        <t>HTTP/1.1 428 Precondition Required
Content-Type: application/problem+json</t>
        <t>{
  "type": "https://example.com/errors/precondition-required",
  "title": "Precondition Required",
  "status": 428,
  "detail": "If-Match header is required for CRS mutations"
}
```</t>
        <t><strong>Alternative: 400 Response When 428 Is Not Available</strong></t>
        <t>If the server environment does not support 428, it MAY use 400 with a
clear error message:</t>
        <t>```http
PATCH /api/article/123 HTTP/1.1
Host: example.com
Content-Type: application/json</t>
        <t>HTTP/1.1 400 Bad Request
Content-Type: application/problem+json</t>
        <t>{
  "type": "https://example.com/errors/missing-precondition",
  "title": "Missing Required Precondition",
  "status": 400,
  "detail": "If-Match header is required for state-changing operations on AST resources"
}
```</t>
        <t><strong>Example: 412 Response with Problem Details</strong></t>
        <t>When a client's If-Match precondition fails, the server SHOULD return a
Problem Details response indicating the current state:</t>
        <t>```http
PATCH /api/article/123 HTTP/1.1
Host: example.com
Content-Type: application/json
If-Match: "sha256-ABC123OLDVALUE456789STALE012"</t>
        <t>HTTP/1.1 412 Precondition Failed
Content-Type: application/problem+json
ETag: "sha256-RK63H5GH1GQJQM8A7LN7RP8VNR7F"</t>
        <t>{
  "type": "https://example.com/errors/precondition-failed",
  "title": "Precondition Failed",
  "status": 412,
  "detail": "The resource state has changed since you last read it.",
  "current-etag": "sha256-RK63H5GH1GQJQM8A7LN7RP8VNR7F",
  "provided-etag": "sha256-ABC123OLDVALUE456789STALE012"
}
```</t>
        <t>The inclusion of the current ETag in the error response allows the
client to immediately refetch the latest state without an additional
round trip.</t>
        <section anchor="conflict-resolution-informative">
          <name>Conflict Resolution (Informative)</name>
          <t>When a client receives a <tt>412 Precondition Failed</tt> response, it SHOULD
follow one of these resolution strategies:</t>
          <ol spacing="normal" type="1"><li>
              <t><strong>Refetch and Retry</strong>: Fetch the current SBR to obtain the new ETag
and state, then reapply the intended mutation and retry with the
updated ETag.</t>
            </li>
            <li>
              <t><strong>Three-Way Merge</strong>: If the client maintains the original state it
read, the changes it intended to make, and can obtain the current
server state, it MAY attempt an automatic merge (similar to version
control systems). This is only appropriate when changes affect
non-overlapping fields or can be deterministically combined.</t>
            </li>
            <li>
              <t><strong>User Intervention</strong>: Present the conflict to the user (human or
automated decision system) for manual resolution, showing both the
client's intended changes and the server's current state.</t>
            </li>
            <li>
              <t><strong>Abort</strong>: Abandon the update if the conflict indicates the client's
view is too stale or the changes are incompatible.</t>
            </li>
          </ol>
          <t>Servers MAY assist conflict resolution by including the current state or
a conflict diff in the <tt>412</tt> response body (see Problem Details example
above). This reduces round trips and provides clients with immediate
context for resolution.</t>
          <t><strong>Retry Example:</strong></t>
          <t>```http
# Client receives 412
HTTP/1.1 412 Precondition Failed
Content-Type: application/problem+json
ETag: "sha256-RK63H5GH1GQJQM8A7LN7RP8VNR7F"</t>
        </section>
      </section>
    </section>
    <section anchor="client-immediately-refetches">
      <name>Client immediately refetches</name>
      <t>GET /api/article/123 HTTP/1.1
If-None-Match: "sha256-ABC123OLDVALUE456789STALE012"</t>
      <t>HTTP/1.1 200 OK
ETag: "sha256-RK63H5GH1GQJQM8A7LN7RP8VNR7F"
{ ...current state... }</t>
    </section>
    <section anchor="client-reapplies-mutation-with-fresh-etag">
      <name>Client reapplies mutation with fresh ETag</name>
      <t>PATCH /api/article/123 HTTP/1.1
If-Match: "sha256-RK63H5GH1GQJQM8A7LN7RP8VNR7F"
```</t>
      <section anchor="sbr-endpoint-headers">
        <name>SBR Endpoint Headers</name>
        <t>To ensure correct caching and transfer behavior, SBR endpoints SHOULD
include the following headers:</t>
        <ul spacing="normal">
          <li>
            <t><strong>Cache-Control</strong>: SBR responses SHOULD include <tt>Cache-Control:
no-transform</tt> to prevent intermediaries from modifying the
representation (which would invalidate the Semantic Validator).</t>
          </li>
          <li>
            <t><strong>Vary</strong>: If the SBR supports compression or other content
transformations, servers SHOULD set <tt>Vary: Accept-Encoding</tt> to ensure
caches distinguish between compressed and uncompressed variants.</t>
          </li>
          <li>
            <t><strong>Accept-Ranges</strong>: SBR endpoints SHOULD include <tt>Accept-Ranges: none</tt>
if range requests would break the semantic integrity of the
representation (e.g., partial JSON structures).</t>
          </li>
        </ul>
        <t><strong>Example SBR Response Headers:</strong></t>
        <t><tt>http
HTTP/1.1 200 OK
Content-Type: application/json
ETag: "sha256-RK63H5GH1GQJQM8A7LN7RP8VNR7F"
Cache-Control: no-cache, no-transform
Vary: Accept-Encoding
Accept-Ranges: none
Content-Digest: sha-256=:RK63H5GH1GQJQM8A7LN7RP8VNR7FVXWH1TQKJM8QZH4=:
</tt></t>
      </section>
      <section anchor="caching-considerations">
        <name>Caching Considerations</name>
        <section anchor="sbr-caching">
          <name>SBR Caching</name>
          <t>SBR endpoints SHOULD follow these caching practices:</t>
          <ul spacing="normal">
            <li>
              <t><strong>Non-Negotiated SBR</strong>: Prefer a single canonical media type for the
SBR to avoid cache fragmentation.</t>
            </li>
            <li>
              <t><strong>Strong ETag</strong>: The SBR MUST expose a strong ETag as the Semantic
Validator.</t>
            </li>
            <li>
              <t><strong>Cache-Control</strong>: Use <tt>Cache-Control: no-cache, no-transform</tt> to
require revalidation while allowing storage. If the SBR contains
sensitive or user-specific data, use <tt>Cache-Control: private</tt> or
<tt>no-store</tt> as appropriate.</t>
            </li>
            <li>
              <t><strong>Vary</strong>: Set <tt>Vary: Accept-Encoding</tt> if compression is applied to
allow caches to distinguish between compressed and uncompressed
variants.</t>
            </li>
            <li>
              <t><strong>Accept-Ranges</strong>: Consider <tt>Accept-Ranges: none</tt> to prevent
partial-byte range requests that could create ambiguity in state
validation.</t>
            </li>
            <li>
              <t><strong>304 Revalidation</strong>: Support conditional requests with <tt>If-None-Match</tt>
and respond with <tt>304 Not Modified</tt> when the SBR ETag matches.</t>
            </li>
            <li>
              <t><strong>ETag Scope</strong>: Do NOT reuse the SBR ETag on Projected endpoints, as
this would conflate semantic and byte-level validation.</t>
            </li>
          </ul>
        </section>
        <section anchor="projected-representation-caching">
          <name>Projected Representation Caching</name>
          <t>Projected Representations SHOULD be cached using standard HTTP caching
mechanisms:</t>
          <ul spacing="normal">
            <li>
              <t><strong>Representation-Specific ETags</strong>: Use their own ETags based on the
byte content of each projection.</t>
            </li>
            <li>
              <t><strong>Standard Cache-Control</strong>: Apply appropriate <tt>Cache-Control</tt>
directives (e.g., <tt>max-age</tt>, <tt>public</tt>, <tt>private</tt>) based on the
projection's volatility and sensitivity.</t>
            </li>
            <li>
              <t><strong>Client-Side Invalidation</strong>: Clients that perform CRS mutations
SHOULD invalidate their own cached Projected Representations after a
successful write or upon receiving a <tt>412 Precondition Failed</tt>
response. Note that shared caches and intermediaries will not
automatically invalidate projections based on SBR changes.</t>
            </li>
          </ul>
        </section>
      </section>
    </section>
    <section anchor="computing-and-managing-semantic-validators">
      <name>Computing and Managing Semantic Validators</name>
      <t>AST does not mandate a single algorithm for computing Semantic
Validators. However, interoperability and predictability benefit from
consistent approaches.</t>
      <section anchor="canonicalization">
        <name>Canonicalization</name>
        <t>A common pattern is to derive the Semantic Validator from a canonical
serialization of the CRS. For example:</t>
        <ol spacing="normal" type="1"><li>
            <t>Serialize the CRS to a structured format (for example, JSON).</t>
          </li>
          <li>
            <t>Canonicalize the serialization (for example, by sorting keys and
controlling numeric formats).</t>
          </li>
          <li>
            <t>Compute a hash over the canonical form (for example, SHA-256).</t>
          </li>
          <li>
            <t>Encode and prefix the hash to produce the <tt>ETag</tt> value.</t>
          </li>
        </ol>
        <t>Servers <strong>SHOULD</strong> ensure that:</t>
        <ul spacing="normal">
          <li>
            <t>fields that are purely operational or volatile (for example, last
access timestamps) are excluded from the canonical form; and</t>
          </li>
          <li>
            <t>the canonicalization process is deterministic across deployments.</t>
          </li>
        </ul>
        <t>Servers MAY use [RFC8785] JSON Canonicalization Scheme (JCS) or an
equivalent deterministic procedure.</t>
      </section>
      <section anchor="storage-models">
        <name>Storage Models</name>
        <t>Servers MAY:</t>
        <ul spacing="normal">
          <li>
            <t>compute Semantic Validators on demand from the CRS; or</t>
          </li>
          <li>
            <t>store precomputed Semantic Validators alongside the CRS.</t>
          </li>
        </ul>
        <t>When validators are stored:</t>
        <ul spacing="normal">
          <li>
            <t>they <strong>SHOULD</strong> be updated atomically with the CRS; and</t>
          </li>
          <li>
            <t>they <strong>MUST</strong> be invalidated or recomputed whenever the CRS changes.</t>
          </li>
        </ul>
        <t>When validators are computed on demand, implementations <strong>SHOULD</strong>
ensure that the cost of computing the validator is small relative to the
cost of generating the representation.</t>
      </section>
      <section anchor="relationship-to-application-backends">
        <name>Relationship to Application Backends</name>
        <t>AST is agnostic to how applications store and manage CRS. For example:</t>
        <ul spacing="normal">
          <li>
            <t>a SQL application might treat a row (or set of rows) as CRS, with the
Semantic Validator derived from a version column and relevant fields;</t>
          </li>
          <li>
            <t>a document store might treat a document body plus metadata as CRS;</t>
          </li>
          <li>
            <t>a CMS might treat a block tree or content graph as CRS.</t>
          </li>
        </ul>
        <t>The only requirement is that the Semantic Validator change whenever the
logical CRS changes, regardless of how many representations exist.</t>
      </section>
      <section anchor="non-ast-resources-and-fallback-behavior">
        <name>Non-AST Resources and Fallback Behavior</name>
        <t>Servers MAY implement AST for some resources and not others.</t>
        <t>For resources that do not follow AST:</t>
        <ul spacing="normal">
          <li>
            <t>servers MAY continue to use representation-specific ETags as byte
validators;</t>
          </li>
          <li>
            <t>servers MAY accept unconditional writes (no <tt>If-Match</tt> required), as
in traditional HTTP APIs; and</t>
          </li>
          <li>
            <t>clients MUST NOT assume AST semantics.</t>
          </li>
        </ul>
        <t>Servers SHOULD clearly document which resources implement AST.</t>
      </section>
    </section>
    <section anchor="integrity-and-transport">
      <name>Integrity and Transport</name>
      <t>In standard HTTP usage, ETags often serve a dual purpose: validating the
semantic state for caching/concurrency, and validating the integrity of
the response bytes (to detect transport corruption).</t>
      <t>In the AST profile, the State-Bearing Representation (SBR) <tt>ETag</tt> serves
as the <strong>Semantic Validator</strong> for the Canonical Resource State (CRS).
Projected Representations MAY have their own representation-specific
ETags for caching purposes, but these MUST NOT be used as Semantic
Validators for concurrency control.</t>
      <section anchor="separation-of-state-and-integrity">
        <name>Separation of State and Integrity</name>
        <t>To allow clients to verify the integrity of the payload bytes
independently of the semantic state, AST servers <strong>SHOULD</strong> use the
<tt>Content-Digest</tt> header field defined in [RFC9530].</t>
        <ul spacing="normal">
          <li>
            <t><strong>ETag (SBR)</strong>: validates the <em>Canonical Resource State</em> (logical
truth) and is used with <tt>If-Match</tt> and <tt>If-None-Match</tt> for concurrency
control.</t>
          </li>
          <li>
            <t><strong>ETag (Projected)</strong>: MAY be used for caching individual
representations, but MUST NOT be used for state-changing preconditions.</t>
          </li>
          <li>
            <t><strong>Content-Digest</strong>: validates the <em>representation bytes</em> (wire truth)
and is used to verify that the transfer completed successfully.</t>
          </li>
        </ul>
        <t>Clients <strong>MUST NOT</strong> send <tt>If-Match</tt> or <tt>If-None-Match</tt> preconditions
using a Projected Representation's ETag when interacting with the SBR
endpoint. Only the SBR's own ETag participates in concurrency control
logic.</t>
        <t><strong>Example Response (SBR):</strong></t>
        <t><tt>http
HTTP/1.1 200 OK
Content-Type: application/json
ETag: "sha256-RK63H5GH1GQJQM8A7LN7RP8VNR7F"
Content-Digest: sha-256=:RK63H5GH1GQJQM8A7LN7RP8VNR7FVXWH1TQKJM8QZH4=:
</tt></t>
        <t><strong>Example Response (Projected):</strong></t>
        <t><tt>http
HTTP/1.1 200 OK
Content-Type: text/html
ETag: "html-v1"
Link: &lt;/api/article/123&gt;; rel="state"; type="application/json"
Content-Digest: sha-256=:X8Z9Y7W6V5U4T3S2R1Q0P9O8N7M6L5K4=:
</tt></t>
        <t>This separation allows intermediaries and clients to detect transport
corruption without conflating it with state changes.</t>
        <t>In AST, the SBR ETag serves as a semantic validator for the Canonical
Resource State. Clients SHOULD use <tt>Content-Digest</tt> for verifying byte
integrity of the transfer. Outside of AST contexts, traditional ETag
usage for caching and integrity remains unchanged.</t>
      </section>
    </section>
    <section anchor="discovery-of-synchronized-representations">
      <name>Discovery of Synchronized Representations</name>
      <t>To enable agents to discover different representations of the same AST
resource, servers <strong>SHOULD</strong> expose relationships between representations
using the HTTP <tt>Link</tt> header [RFC8288].</t>
      <section anchor="the-state-relation-sbr-discovery">
        <name>The <tt>state</tt> Relation (SBR Discovery)</name>
        <t>As defined in Section 3.3, Projected Representations SHOULD include a
<tt>Link</tt> header with <tt>rel="state"</tt> pointing to the State-Bearing
Representation (SBR). This allows clients consuming a Projected
Representation to discover the SBR for synchronization or editing.</t>
        <t>The <tt>state</tt> relation identifies the authoritative SBR for concurrency
control purposes. Clients MUST use the ETag from the <tt>state</tt> target (the
SBR) for all <tt>If-Match</tt> and <tt>If-None-Match</tt> preconditions on
state-changing operations.</t>
        <t><strong>Example</strong> (Projected Representation response):</t>
        <t><tt>http
HTTP/1.1 200 OK
Content-Type: text/html
ETag: "html-v1"
Link: &lt;/api/article/123&gt;; rel="state"; type="application/json"
</tt></t>
      </section>
      <section anchor="the-alternate-relation-general-cross-representation-navigation">
        <name>The <tt>alternate</tt> Relation (General Cross-Representation Navigation)</name>
        <t>The <tt>alternate</tt> link relation type is <strong>RECOMMENDED</strong> for general
navigation between synchronized representations of the same AST resource.</t>
        <t>When providing an <tt>alternate</tt> link:</t>
        <ul spacing="normal">
          <li>
            <t>the <tt>type</tt> attribute <strong>MUST</strong> be present to indicate the media type of
the target representation (for example, <tt>application/json</tt>,
<tt>text/html</tt>); and</t>
          </li>
          <li>
            <t>the <tt>profile</tt> attribute <strong>MAY</strong> be used to indicate a specific schema
or capability set of the target representation.</t>
          </li>
        </ul>
        <t><strong>Example</strong> (SBR response linking to Projected):</t>
        <t><tt>http
HTTP/1.1 200 OK
Content-Type: application/json
ETag: "sha256-RK63H5GH1GQJQM8A7LN7RP8VNR7F"
Link: &lt;/article/123.html&gt;; rel="alternate"; type="text/html"
</tt></t>
        <t><strong>Note:</strong> The <tt>state</tt> relation specifically identifies the SBR for
concurrency control purposes. In contrast, <tt>rel="alternate"</tt> is for
general cross-representation navigation and does <strong>not</strong> imply
concurrency semantics. Clients MUST NOT assume that a representation
linked via <tt>alternate</tt> participates in the AST concurrency protocol.</t>
      </section>
      <section anchor="bidirectional-linking">
        <name>Bidirectional Linking</name>
        <t>To ensure agents can navigate between representations regardless of
their entry point, linking <strong>SHOULD</strong> be bidirectional.</t>
        <ul spacing="normal">
          <li>
            <t>If Representation A links to Representation B, then Representation B
<strong>SHOULD</strong> link back to Representation A (or to a canonical URI that
resolves to A).</t>
          </li>
        </ul>
        <t>This ensures that an agent encountering a structural representation
(for example, JSON) can identify the corresponding rendered
representation (for example, HTML) for attribution, verification, or
human inspection.</t>
      </section>
      <section anchor="profile-advertisement">
        <name>Profile Advertisement</name>
        <t>To enable clients to detect whether a resource implements AST semantics,
servers SHOULD advertise this using the profile link relation [RFC6906]
via one of the following mechanisms:</t>
        <t><strong>Link Header with Profile Relation:</strong></t>
        <t><tt>http
HTTP/1.1 200 OK
Content-Type: application/json
Link: &lt;https://datatracker.ietf.org/doc/draft-jurkovikj-http-agentic-state/&gt;; rel="profile"
ETag: "sha256-RK63H5GH1GQJQM8A7LN7RP8VNR7F"
</tt></t>
        <t><strong>Content-Type Profile Parameter:</strong></t>
        <t><tt>http
HTTP/1.1 200 OK
Content-Type: application/json; profile="https://datatracker.ietf.org/doc/draft-jurkovikj-http-agentic-state/"
ETag: "sha256-RK63H5GH1GQJQM8A7LN7RP8VNR7F"
</tt></t>
        <t>This allows clients to detect AST resources and apply appropriate
concurrency control workflows (If-Match preconditions, 412 handling,
etc.) instead of assuming traditional HTTP semantics.</t>
      </section>
    </section>
    <section anchor="security-considerations">
      <name>Security Considerations</name>
      <t>This profile relies on existing HTTP security mechanisms. However, the
synchronization of multiple representations introduces specific security
considerations.</t>
      <section anchor="consistency-and-race-conditions">
        <name>Consistency and Race Conditions</name>
        <t>The primary security benefit of AST is the prevention of race conditions
(Lost Updates). By enforcing <tt>If-Match</tt> checks against the CRS, the
server ensures that an agent cannot overwrite state changes made by
another client, even if those changes were made via a different
representation.</t>
        <t>Applications <strong>SHOULD</strong> treat failed preconditions (<tt>412</tt>,
<tt>428</tt>) as an expected outcome in concurrent editing scenarios and
provide appropriate conflict resolution mechanisms.</t>
      </section>
      <section anchor="information-leakage-via-divergence">
        <name>Information Leakage via Divergence</name>
        <t>If the access control policies for different representations diverge,
there is a risk of information leakage.</t>
        <ul spacing="normal">
          <li>
            <t>Servers <strong>MUST</strong> ensure that the authorization requirements for
accessing a structural representation (for example, JSON) are at
least as strict as those for the rendered representation (for example,
HTML).</t>
          </li>
          <li>
            <t>Servers <strong>MUST</strong> ensure that a structural representation does not
expose sensitive data that is redacted in the rendered representation,
unless the client is explicitly authorized to see the raw state.</t>
          </li>
        </ul>
        <t>If different audiences see different subsets of the CRS, the server
SHOULD either:</t>
        <ul spacing="normal">
          <li>
            <t>maintain separate CRS domains with separate Semantic Validators; or</t>
          </li>
          <li>
            <t>apply view-specific filtering consistently to all representations
exposed to that audience.</t>
          </li>
        </ul>
      </section>
      <section anchor="validator-guessing">
        <name>Validator Guessing</name>
        <t>Because Semantic Validators are often derived from content (for example,
a hash), they may be susceptible to offline guessing attacks if the
content has low entropy.</t>
        <t>Implementations <strong>SHOULD</strong> ensure that:</t>
        <ul spacing="normal">
          <li>
            <t>validators have sufficient entropy; or</t>
          </li>
          <li>
            <t>validators are combined with a secret salt; or</t>
          </li>
          <li>
            <t>validators are derived from internal versioning mechanisms rather than
directly from plaintext content,</t>
          </li>
        </ul>
        <t>if the content version itself is sensitive.</t>
        <t>Validators MUST NOT be treated as authentication or authorization
tokens.</t>
      </section>
    </section>
    <section anchor="iana-considerations">
      <name>IANA Considerations</name>
      <section anchor="link-relation-type-registration">
        <name>Link Relation Type Registration</name>
        <t>This document requests registration of the "state" link relation type in
the Link Relation Type Registry defined by [RFC8288]:</t>
        <ul spacing="normal">
          <li>
            <t><strong>Relation Name</strong>: state</t>
          </li>
          <li>
            <t><strong>Description</strong>: Refers to the State-Bearing Representation (SBR) of
the current resource for concurrency control. The target is the
authoritative CRS view and exposes the strong ETag used for If-Match
and If-None-Match on CRS-affecting operations.</t>
          </li>
          <li>
            <t><strong>Reference</strong>: This document (Sections 3.3 and 6.1)</t>
          </li>
          <li>
            <t><strong>Notes</strong>: The target's media type SHOULD be suitable for machine
processing (e.g., application/json). Clients MUST use the target's
strong ETag (not the source representation's ETag) as the validator
for CRS preconditions. The type attribute SHOULD be present on the
link to indicate the target's media type.</t>
          </li>
        </ul>
      </section>
    </section>
    <section anchor="references">
      <name>References</name>
      <section anchor="normative-references">
        <name>Normative References</name>
        <t>[RFC2119] Bradner, S., "Key words for use in RFCs to Indicate Requirement
Levels", BCP 14, RFC 2119, DOI 10.17487/RFC2119, March 1997.</t>
        <t>[RFC8174] Leiba, B., "Ambiguity of Uppercase vs Lowercase in RFC 2119
Key Words", BCP 14, RFC 8174, DOI 10.17487/RFC8174, May 2017.</t>
        <t>[RFC9110] Fielding, R., Ed., Nottingham, M., Ed., and J. Reschke, Ed.,
"HTTP Semantics", STD 97, RFC 9110, DOI 10.17487/RFC9110,
June 2022.</t>
        <t>[RFC8288] Nottingham, M., "Web Linking", RFC 8288,
DOI 10.17487/RFC8288, October 2017.</t>
        <t>[RFC6585] Nottingham, M. and R. Fielding, "Additional HTTP Status Codes",
RFC 6585, DOI 10.17487/RFC6585, April 2012.</t>
        <t>[RFC9530] Polli, R. and L. Pardue, "Digest Fields",
RFC 9530, DOI 10.17487/RFC9530, February 2024.</t>
        <t>[RFC7807] Nottingham, M. and E. Wilde, "Problem Details for HTTP APIs",
RFC 7807, DOI 10.17487/RFC7807, March 2016.</t>
        <t>[RFC6906] Wilde, E., "The 'profile' Link Relation Type",
RFC 6906, DOI 10.17487/RFC6906, March 2013.</t>
      </section>
      <section anchor="informative-references">
        <name>Informative References</name>
        <t>[RFC9111] Fielding, R., Ed., Nottingham, M., Ed., and J. Reschke, Ed.,
"HTTP Caching", STD 98, RFC 9111, DOI 10.17487/RFC9111,
June 2022.</t>
        <t>[RFC5789] Dusseault, L. and J. Snell, "PATCH Method for HTTP",
RFC 5789, DOI 10.17487/RFC5789, March 2010.</t>
        <t>[RFC8785] Rundgren, A., Jordan, B., and S. Erdtman, "JSON Canonicalization
Scheme (JCS)", RFC 8785, DOI 10.17487/RFC8785, June 2020.</t>
        <t>[RFC6902] Bryan, P., Ed. and M. Nottingham, Ed., "JavaScript Object
Notation (JSON) Patch", RFC 6902, DOI 10.17487/RFC6902,
April 2013.</t>
        <t>[RFC7386] Hoffman, P. and J. Snell, "JSON Merge Patch",
RFC 7386, DOI 10.17487/RFC7386, October 2014.</t>
        <t>[RFC7942] Sheffer, Y. and A. Farrel, "Improving Awareness of Running Code:
The Implementation Status Section", BCP 205, RFC 7942,
DOI 10.17487/RFC7942, July 2016.</t>
      </section>
    </section>
  </middle>
  <back>
    <?line 862?>

<section anchor="appendix-a-implementation-status">
      <name>Appendix A. Implementation Status</name>
      <t><strong>Note to RFC Editor</strong>: Please remove this section before publication.</t>
      <t>This section records the status of known implementations of the AST
profile at the time of publication. Based on [RFC7942], reviewers are
invited to report implementation experiences.</t>
      <section anchor="wordpress-dual-native-implementation">
        <name>WordPress Dual-Native Implementation</name>
        <t><strong>Organization</strong>: Independent implementation</t>
        <t><strong>Description</strong>: A WordPress plugin implementing the AST profile for
content management and template synchronization.</t>
        <t><strong>Implementation Details</strong>:</t>
        <ul spacing="normal">
          <li>
            <t><strong>SBR Endpoint</strong>: Exposes WordPress posts and templates as
application/json representations at <tt>/wp-json/dual-native/v1/posts/{id}</tt>
and <tt>/wp-json/dual-native/v1/design/templates/...</tt></t>
          </li>
          <li>
            <t><strong>Semantic Validators</strong>: Uses SHA-256 content hashes as strong ETags,
formatted as <tt>"sha256-{base64}"</tt>, computed from canonicalized JSON
representation of the CRS.</t>
          </li>
          <li>
            <t><strong>Concurrency Control</strong>: Enforces If-Match preconditions on all
state-changing operations (POST, PATCH). Returns 412 Precondition
Failed on ETag mismatches and 428 Precondition Required when If-Match
is missing.</t>
          </li>
          <li>
            <t><strong>Projected Representations</strong>: HTML rendering at canonical WordPress
URLs with <tt>rel="state"</tt> Link headers pointing to the SBR endpoint.</t>
          </li>
          <li>
            <t><strong>Discovery</strong>: Implements <tt>rel="state"</tt> link relations on HTML
responses and <tt>rel="alternate"</tt> on SBR responses.</t>
          </li>
          <li>
            <t><strong>Multi-Bot Testing</strong>: Demonstrated in production with multiple
concurrent agents. Testing showed 89.4% bandwidth savings for
monitoring workloads and zero lost updates (vs. 67% lost with standard
WordPress REST API).</t>
          </li>
        </ul>
        <t><strong>Maturity</strong>: Production use since November 2025.</t>
        <t><strong>Coverage</strong>: Implements all normative requirements of this specification
including SBR designation, strong ETag generation, If-Match enforcement,
412/428 error handling with Problem Details (RFC 7807), and Link header
discovery.</t>
        <t><strong>Licensing</strong>: Open source</t>
        <t><strong>Contact</strong>: antunjurkovic@gmail.com</t>
      </section>
    </section>
  </back>
  <!-- ##markdown-source:
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
Fula7f0T1cYMt5Z1V3ymqXHpuJKU44XbMXLgFSPRK1cuktTZIJm2lEPUSZHH
UiULQjiS0AakJluTAruqeGDok7SRPWBY07cEcAaaRoqLSzHUK+yDmIEugFow
uBfA7t5Sz2acFx3UYNEYAs1m1qo7xOKub4okGf4cP5iLpFgwmlStpHSyvn8x
BgjAkyh0ST6ch8OMKcLJZUlUflEcP7iVhFpOtd/0nkXegtE9qqZTWMSHL6gs
nZKOo4WSaaERJwntlGq7qcluq2SCYAmnbHBIYo34n8Rz3Yrj+ZxgOEbI6IbD
Ib+k30JqagYmF19kCOk1AqSaD7yaIJ4npnK//4k2I2WTd4haiB3/0XrVJUwi
3Kr2do0HdiTzTcCuB6HwgPFtky1JmQ39sNYSBuE7wr43gtFt8I+pYdWKOw23
32wWqBNkLoeKQawMwjUTwh5Y/DHcc+qtUMNNfVRuK00r2M6MVXCiNZcr5Zrl
roF4t5iCpUq+WtMBTzgNJrTzFZe7mYLbNnlouTUa2wAtY/8cgkVWPrHZ4eUT
GwM7ZZK0dbRVeVE8Iaaw7EQAgaOAXgwJRV2gy1oOEu2wci7i8NjnSpOl7C7Y
gmDJYCx4ADSwqvkrm2DuRBat/f+NunRL6RDdSRlJ2GYbhGh4+v86LFBH9l9Z
79/MaDRqMvZoZP6IQpJKTWHpZaekXdPp3Ijw/RIy2gQ6jy/KhpAaHtR3Ympr
VBEJEcS2tG7i2rDkywYVSAyJ92DAw3ifh+qoMGLjSz3UnrfBfDjAh1qoydF8
GsnZ0q3wohk3fn4UQU4OZTmkYscQZISR7pg3IPiYPQoQlmPcvohYJFM77VJi
s5LlErh/2Be5kcizayPtsejSM+8tV3Op5LwJJNpr9FRqjTU6jXwpu3KbaNPy
HMAXOsb4JPrYGzQ8JfkEKcNblSPihAb2kyGCTN/VKTHNJKnuE2gWXQFSfujo
6iz4gFNQxJuDjegUlywN7VG0D9UfRePnR1BYCRzLJJALjtjbOKLSc0JMfqvC
XkmJI1oUafWgEKbjRCRMzfnWpGi4bMeWWSblbuj04NU6Q0c5uSHB/pHBqAZb
gin5SAYN9ow6TzLqoKNb2psUKQpHpFVjpLh8e/TYMn7695/fHVz/+MP3Fy9/
/I93T789cpf8RC+vLaLTPEqGrCCbfk/6ruvEFWoKxrRyYM0J9NPE3mP4GW2b
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

-->

</rfc>
