<?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.43 (Ruby 3.4.9) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-liu-agentproto-acp-00" category="std" consensus="true" submissionType="IETF" version="3">
  <!-- xml2rfc v2v3 conversion 3.34.1 -->
  <front>
    <title abbrev="ACP">The Agent Communication Protocol (ACP)</title>
    <seriesInfo name="Internet-Draft" value="draft-liu-agentproto-acp-00"/>
    <author initials="D." surname="Liu" fullname="Dapeng Liu">
      <organization>Alibaba</organization>
      <address>
        <email>max.ldp@alibaba-inc.com</email>
      </address>
    </author>
    <date year="2026" month="November" day="02"/>
    <keyword>agent</keyword>
    <keyword>agentic dialog</keyword>
    <keyword>ACP</keyword>
    <keyword>ADID</keyword>
    <keyword>hash chain</keyword>
    <keyword>log alignment</keyword>
    <keyword>session signaling</keyword>
    <keyword>MoQ</keyword>
    <keyword>WebTransport</keyword>
    <abstract>
      <?line 59?>

<t>An agentic dialog can run for hours or days, go quiet for long
stretches, move between hosts, and survive the loss of whatever
connection was carrying it. The Agent Communication Protocol (ACP)
architecture names Agentic Dialog Management as a building block and
requires an identifier that correlates every message of a dialog and
outlives the transport, but leaves the wire format out of scope. This
document specifies one such wire format.</t>
      <t>ACP is an application-level session protocol in the style of SIP: every
message is a start line, a block of text header fields, a blank line,
and an optional body. A dialog is named by an Agentic Dialog Identifier
(ADID) and its durable state is an append-only log of entries, each
digesting the one before it into a hash chain. The chain lets two
endpoints that have been apart establish in one exchange which entries
they still share, replay only what is missing, and detect divergence.
Periodic checkpoints bound the log, so aligning a dialog does not cost
more as it ages.</t>
      <t>ACP carries control and log state only. Real-time media flows beside it
on its own channels and enters the log as a metadata entry or as a
content-addressed reference, never as bytes the chain must digest. The
semantics are transport-independent; this version binds them to Media over
QUIC Transport (MoQ) and to WebTransport over HTTP/3, both of which
multiplex the channels ACP needs and migrate across network paths
without disturbing the dialog.</t>
    </abstract>
  </front>
  <middle>
    <?line 87?>

<section anchor="introduction">
      <name>Introduction</name>
      <t>A task handed to an agent is rarely one request and one answer. It runs
for hours, produces output long after the request that caused it, goes
quiet while a human sleeps, and resumes from a different device. The
connection carrying it will be replaced several times over that life.
Nothing in the connection survives, so the dialog needs a name and a
state of its own.</t>
      <t>The ACP architecture <xref target="I-D.manyfolks-agentproto-arch"/> names that state Agentic
Dialog Management and requires an identifier that correlates every
message of a dialog and survives the loss or replacement of the
transport. It does not say what the messages look like. This document
supplies a wire format for that building block, and adds the one thing a
dialog that spans days cannot do without: a way for two endpoints that
have been apart to agree on what they both remember.</t>
      <t>The problem is not reliability. QUIC already delivers a stream without
gaps. The problem is the interval between connections. An agent may
finish work while its principal is offline; a principal may accept an
entry whose acknowledgement never arrived; a server may recover from a
crash having lost its last few entries. Each side holds a plausible
history and there is no shared clock or shared connection to arbitrate
them. ACP answers this with a hash chain: every log entry digests its
predecessor, so a history is a sequence of digests that can be compared
from the tail backwards, and the first position where two histories
differ is exactly the position where they diverged
(<xref target="alignment"/>).</t>
      <t>The encoding follows SIP <xref target="RFC3261"/> rather than a
structured data format, for two reasons. A text start line and text
header fields can be read by a human in a log, generated by a shell
script, and extended by adding a field without a schema change. And
because the body is carried as raw octets with no field ordering to
normalize, the digest of an entry is the digest of a byte string both
endpoints already hold verbatim. A format whose in-memory
representation is serialized differently by different implementations
cannot offer that, and a chain that disagrees about its own digests is
worse than no chain at all.</t>
      <t>The rest of this document is organized as follows.
<xref target="terminology"/> defines the terms used throughout;
<xref target="architecture"/> gives the layering, the traffic classes,
the participants and their identity, and the mapping onto transports;
<xref target="state"/> gives the dialog and transport state machines;
<xref target="model"/> defines the message format, the header fields,
the methods, transactions, and status codes;
<xref target="log"/> defines the log, its event boundaries, the entry
digest, asset references, checkpoints, and the alignment procedure that
lets a dialog survive its transport; and
<xref target="bindings"/> maps ACP onto MoQ and WebTransport.</t>
      <t>This is a first revision and is deliberately narrow. How a client learns
the <tt>https</tt> URI of the agent service it wants is not specified
here; ACP assumes the client already has one. Delegation between
dialogs, per-entry signatures, concurrent access from several devices,
and the media negotiation body are likewise identified but not
specified.</t>
      <section anchor="conventions">
        <name>Conventions and Definitions</name>
        <t>The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",
"SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and
"OPTIONAL" in this document are to be interpreted as described in BCP
14 <xref target="RFC2119"/> <xref target="RFC8174"/> when, and only
when, they appear in all capitals, as shown here.</t>
        <t>The syntax uses the Augmented Backus-Naur Form of
<xref target="RFC5234"/>. The terms "octet", "byte", and the
character names CR, LF, and SP are used as in that specification.</t>
      </section>
    </section>
    <section anchor="terminology">
      <name>Terminology</name>
      <t>The terms below follow the ACP architecture <xref target="I-D.manyfolks-agentproto-arch"/>
where it defines them.</t>
      <dl newline="false" spacing="normal">
        <dt>Agent</dt>
        <dd>
          <t>A software process that acts on a task over an extended period, holds
state between exchanges, and produces output that is not a direct
function of a single request. An agent is the server side of a dialog
in this document, but an agent may also be the principal of another
dialog.</t>
        </dd>
        <dt>Principal</dt>
        <dd>
          <t>The entity on whose behalf a dialog is conducted: a human user, or an
agent acting for one.</t>
        </dd>
        <dt>Agentic dialog (dialog)</dt>
        <dd>
          <t>A long-lived session between two participants, named by an ADID. A
dialog is a protocol object with state of its own; it is not a
connection, and it does not end when one is lost.</t>
        </dd>
        <dt>ADID</dt>
        <dd>
          <t>The Agentic Dialog Identifier: an opaque, unguessable identifier for a
dialog (<xref target="adid"/>).</t>
        </dd>
        <dt>Client, server</dt>
        <dd>
          <t>The participant that sends <tt>INITIATE</tt> is the client; the
participant that answers it is the server. The roles name who offered
the dialog, not which side runs the model.</t>
        </dd>
        <dt>Ordering authority</dt>
        <dd>
          <t>The participant that assigns the authoritative <tt>Sequence</tt>
numbers of a dialog's log. In this version the server is always the
ordering authority (<xref target="sequencing"/>).</t>
        </dd>
        <dt>Log</dt>
        <dd>
          <t>The ordered, append-only sequence of entries that constitutes a
dialog's durable state (<xref target="log"/>). Each participant holds
a replica; the ordering authority's replica is authoritative.</t>
        </dd>
        <dt>Entry</dt>
        <dd>
          <t>One unit of the log, occupying exactly one <tt>Sequence</tt> number
and carrying one digest (<xref target="digest"/>).</t>
        </dd>
        <dt>Event boundary</dt>
        <dd>
          <t>A point at which an application's execution has completed a whole unit
of work: a turn, a tool call and its result, an accepted utterance.
Every entry closes exactly one event boundary
(<xref target="boundaries"/>).</t>
        </dd>
        <dt>Dialog context</dt>
        <dd>
          <t>The protocol state of a dialog: its ADID, its participants, its
capability and lifetime parameters, and its log.</t>
        </dd>
        <dt>Model context</dt>
        <dd>
          <t>The inference state an agent's runtime keeps for a dialog: token
windows, scratch memory, tool bindings. Model context belongs to the
application. ACP neither carries nor reconstructs it, and losing it is
not an ACP failure.</t>
        </dd>
        <dt>Alignment</dt>
        <dd>
          <t>The process by which two replicas of a log establish their last common
entry and bring the lagging one up to date
(<xref target="alignment"/>).</t>
        </dd>
        <dt>Checkpoint</dt>
        <dd>
          <t>An entry of <tt>Entry-Type</tt> <tt>system</tt> that commits to a
prefix of the log, after which entries in that prefix may be discarded
(<xref target="checkpoints"/>).</t>
        </dd>
        <dt>Control plane, log plane</dt>
        <dd>
          <t>The two planes on which ACP carries traffic that must be delivered
reliably. The control plane is requests and responses, matched by
<tt>CSeq</tt>. The log plane is committed entries. They are separated
because their durability requirements differ: the log must also be
recoverable after a connection is replaced. A third class, progress
traffic, rides neither plane and is never logged
(<xref target="traffic"/>).</t>
        </dd>
      </dl>
    </section>
    <section anchor="architecture">
      <name>Protocol Layering and Transport Mapping</name>
      <t>ACP sits between the application that owns the dialog and the transport
that carries it. It is layered so that neither knows the other: the
application issues methods and appends entries, the transport adapter
decides which channel each byte takes, and the session layer owns the log
that makes the two independent of any particular connection
(<xref target="tab-layers"/>).</t>
      <table align="left" anchor="tab-layers">
        <name>ACP layering</name>
        <thead>
          <tr>
            <th align="left">Layer</th>
            <th align="left">Responsibilities</th>
          </tr>
        </thead>
        <tbody>
          <tr>
            <td align="left">ACP application layer</td>
            <td align="left">dialog management, identity and delegation, authorization</td>
          </tr>
          <tr>
            <td align="left">ACP session and synchronization layer</td>
            <td align="left">log, entry digest, alignment, checkpoints</td>
          </tr>
          <tr>
            <td align="left">ACP transport adapter</td>
            <td align="left">channel mapping, connection migration, resumption</td>
          </tr>
          <tr>
            <td align="left">underlying transport</td>
            <td align="left">WebTransport over HTTP/3 or MoQ; further bindings TBD</td>
          </tr>
        </tbody>
      </table>
      <t>The layering matters for one reason above the others. A dialog's
lifetime is not a connection's lifetime, and the difference can be days.
Everything ACP defines is therefore keyed to the ADID and to log
position, never to a connection, a stream, or a socket. A transport
connection may be established, migrated, and lost any number of times
while the dialog stays in one state, and when a connection is replaced
the dialog does not restart: it aligns
(<xref target="alignment"/>).</t>
      <section anchor="overview">
        <name>Protocol Overview</name>
        <t>Two parties take part in a dialog: the client, which acts for a
principal, and the server, which acts for an agent and is the ordering
authority for the log. <xref target="fig-flow"/> walks one dialog
through establishment, steady state, an interruption, and recovery.</t>
        <figure anchor="fig-flow">
          <name>The life of a dialog</name>
          <artwork><![CDATA[
    Client                                        Server
(for a principal)                             (for an agent)
       |                                             |
  (1)  | INITIATE                                    |
       |   ADID, From, To, Supported-Modalities      |
       |-------------------------------------------->|
  (2)  | 200                                         |
       |   ADID, Session-TTL, Tail-Seq: 0            |
       |<--------------------------------------------|
       |               dialog ACTIVE                 |
       |                                             |
  (3)  | APPEND  Sequence: 1, Entry-Type: input      |
       |-------------------------------------------->|
  (4)  | 200  Sequence: 1, Entry-Hash                |
       |<--------------------------------------------|
  (5)  | APPEND  Sequence: 2, Entry-Type: output     |
       |<--------------------------------------------|
  (6)  | 200  Sequence: 2                            |
       |-------------------------------------------->|
       |                                             |
  (7)  | media and progress, on their own channels   |
       |<- - - - - - - - - - - - - - - - - - - - - ->|
       | no ACP header, no Sequence, no digest       |
       |                                             |
  (8)  | the connection dies                         |
       |                      X                      |
       |             both go SUSPENDED               |
       |                                             |
  (9)  | RESUME  Tail-Seq: 2, Tail-Hash: H2          |
       |-------------------------------------------->|
 (10)  | 206  Action: replay, Replay-From: 3         |
       |<--------------------------------------------|
 (11)  | the entries the client missed               |
       |<============================================|
       |             both ACTIVE again               |
]]></artwork>
        </figure>
        <t>Steps 1 and 2 establish the dialog. The client generates the ADID and
offers what it supports; the server records the dialog durably, grants
a lifetime, and answers with an empty log position. Three fields are
the whole handshake, because everything else is either implied by the
channel or negotiated later.</t>
        <t>Steps 3 to 6 are the steady state, and they are the same exchange in
both directions. Each entry is proposed by its author with the next
<tt>Sequence</tt> and the digest of the entry before it, and is
committed when the peer accepts it. The response is not an
acknowledgement in the transport sense; it is the commit, and until it
arrives the entry is pending (<xref target="pending"/>).</t>
        <t>Step 7 is the traffic ACP deliberately does not carry. Real-time media
and progress indications flow on their own channels with no header, no
position, and no digest, and are recorded in the log only as the event
that opened or closed them (<xref target="boundaries"/>). This is what
keeps the chain cheap enough for a dialog that runs for days.</t>
        <t>Steps 8 to 11 are the reason the chain exists. The connection dies and
both participants suspend without exchanging anything. When the client
returns, possibly days later and on a different host, it names the last
entry it holds and its digest; the server compares, and answers with
either agreement or the position to replay from. One round trip
establishes what the two have in common, and the entries that follow
are verified as they arrive rather than trusted
(<xref target="alignment"/>).</t>
      </section>
      <section anchor="traffic">
        <name>Traffic Classes</name>
        <t>ACP distinguishes traffic by what has to survive.</t>
        <dl newline="false" spacing="normal">
          <dt>Control traffic</dt>
          <dd>
            <t>Requests and responses on the control plane: <tt>INITIATE</tt>,
<tt>SUSPEND</tt>, <tt>RESUME</tt>, <tt>PROBE</tt>,
<tt>CHECKPOINT</tt>, <tt>TERMINATE</tt>, and <tt>CANCEL</tt>. It
must be delivered reliably and in order within a connection, and it
is small. It is matched by <tt>CSeq</tt>
(<xref target="transactions"/>).</t>
          </dd>
          <dt>Log traffic</dt>
          <dd>
            <t>Committed entries, each an indivisible octet string that has already
been digested by its author. It must be delivered reliably and in
order, it may be large, and it must be recoverable after a
connection is replaced, because a peer that reconnects needs the
entries it missed rather than the ones it has.</t>
          </dd>
          <dt>Progress traffic</dt>
          <dd>
            <t>Ephemeral indications that something is happening: generation is
underway, a tool call started, a partial transcript. It is
time-bounded and superseded by the next indication. It MUST be
carried unreliably, it is never part of the log, and no ACP state
may depend on receiving it.</t>
          </dd>
        </dl>
        <t>Keeping these apart is what allows ACP to be both light and durable.
Real-time media takes the third path: it flows on its own channels,
and the log records only that it flowed and how to find it
(<xref target="assets"/>). A dialog can therefore carry hours of voice
and video while its log stays small enough to align in one exchange.</t>
      </section>
      <section anchor="adid">
        <name>The Agentic Dialog Identifier</name>
        <t>Every dialog has an Agentic Dialog Identifier (ADID), a version 4 UUID
<xref target="RFC9562"/>: 122 bits from a cryptographically secure
random source <xref target="RFC4086"/>, written in the canonical
textual form of 36 lowercase hexadecimal digits in five
hyphen-separated groups so that it can be compared verbatim. The
client generates it and sends it in the <tt>INITIATE</tt>; the server
echoes it in the final response and from then on it names the dialog
for both participants. It MUST NOT be chosen or influenced by a peer of
the generator, and MUST NOT be reused, including for an
<tt>INITIATE</tt> that went unanswered.</t>
        <t>The ADID identifies the dialog, not the connection carrying it, so a
dialog that moves to a new connection keeps its ADID and its log
position. Because it carries 122 bits of randomness, collisions are
negligible and no registration is needed. It is also not a credential:
it is opaque, non-self-certifying, and reveals nothing about the
dialog. Knowledge of an ADID is not authority to use it
(<xref target="sec-adid"/>).</t>
      </section>
      <section anchor="participants">
        <name>Participants</name>
        <t>A dialog has exactly two participants, both named when it is
initiated: the client, acting for a principal, and the server, acting
for an agent. Each is named by a SPIFFE ID <xref target="SPIFFE"/>,
which is what the architecture uses for a participant and what a
workload identity carries
(<xref target="I-D.ietf-wimse-workload-creds"/>), for example
<tt>spiffe://example.org/ns/agent/travel</tt>.</t>
        <t>A SPIFFE ID names a participant, not a place to send a message. The
request target of <tt>INITIATE</tt> is an <tt>https</tt> URI
(<xref target="message"/>) naming the agent service: it says where to
send the offer, while the <tt>From</tt>, <tt>To</tt>, and
<tt>Author</tt> fields say who is in the dialog. A client that does
not yet know which workload will serve it addresses the service and
learns the participant from the <tt>To</tt> of the server's final
response, which from then on is the name the log uses.</t>
      </section>
      <section anchor="identity">
        <name>Workload Identity and Attribution</name>
        <t>ACP is neither an identity mechanism nor an authorization mechanism,
and it introduces no new cryptographic construction. It takes the
model the architecture specifies <xref target="I-D.manyfolks-agentproto-arch"/> and states
where it rides.</t>
        <t>Each participant holds a WIMSE workload identity
<xref target="I-D.ietf-wimse-workload-creds"/>, expressed as a SPIFFE
ID <xref target="SPIFFE"/> and carried as the <tt>sub</tt> claim of a
Workload Identity Token (WIT) that binds a public key in
<tt>cnf.jwk</tt>:</t>
        <figure anchor="fig-wit">
          <name>The identity a participant presents</name>
          <artwork><![CDATA[
{ "iss": "https://aim.example.org",
  "sub": "spiffe://example.org/ns/agent/travel",
  "aud": "https://agent.example.com",
  "cnf": { "jwk": { "kty": "EC", "crv": "P-256",
                    "x": "...", "y": "..." } },
  "exp": 1793316000 }
]]></artwork>
        </figure>
        <t>The same identity serves twice. At the transport layer the participant
presents it as a workload identity credential over a channel that
mutually authenticates both ends, which is what makes the channel
requirement of <xref target="security"/> satisfiable. At the
application layer it presents a token derived from that credential, in
an <tt>Authorization</tt> field, in the messages where the peer has to
check authority rather than merely connectivity: <tt>INITIATE</tt> and
<tt>RESUME</tt>. The WIT is the input to that derivation and is not
itself what is sent: a workload identity says who a participant is,
while authorizing one request also needs the transaction context that
<xref target="sec-authz"/> describes.</t>
        <t>Attribution then needs no signature of ACP's own, and two rules are
the whole of the mechanism. A recipient MUST check that the
<tt>Author</tt> of an <tt>APPEND</tt>, and the <tt>From</tt> of any
other request, equal the workload identity the channel authenticated,
and MUST reject the message with <tt>403</tt> if they do not. And a
participant MUST NOT accept dialog traffic on a channel that does not
authenticate its sender, because without an authenticated channel
there is nothing to attribute a message to and the ADID by itself
asserts nothing.</t>
        <t>The private key corresponding to <tt>cnf.jwk</tt> is also the key with
which the participant signs the tokens it obtains, so one identity
serves for channel authentication, for the authority it presents, and
for the name that appears in the log. ACP adds no second identity and
no second key. Note what this does and does not buy: it proves who
sent a message on the connection that carried it, and it does not
survive the connection. An entry committed to the log is attributed by
an <tt>Author</tt> string inside a digest, which anyone able to write
to the authoritative replica can set.</t>
      </section>
      <section anchor="mapping">
        <name>Transport Mapping</name>
        <t>The three traffic classes of <xref target="traffic"/> have different
delivery requirements, and the adapter's only job is to satisfy each of
them on whatever transport is available. <xref target="tab-map"/>
summarizes the mapping; <xref target="bindings"/> specifies it.</t>
        <table align="left" anchor="tab-map">
          <name>Channel requirements and how each binding meets them</name>
          <thead>
            <tr>
              <th align="left">Channel</th>
              <th align="left">Requires</th>
              <th align="left">MoQ</th>
              <th align="left">WebTransport</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">
                <tt>control</tt></td>
              <td align="left">reliable, ordered, bidirectional</td>
              <td align="left">one bidirectional stream</td>
              <td align="left">one bidirectional stream</td>
            </tr>
            <tr>
              <td align="left">
                <tt>log</tt></td>
              <td align="left">reliable, ordered, recoverable after a reconnect</td>
              <td align="left">published track, one group per entry</td>
              <td align="left">bidirectional stream, replayed by the server</td>
            </tr>
            <tr>
              <td align="left">
                <tt>asset</tt></td>
              <td align="left">reliable, content-addressed, must not block the log</td>
              <td align="left">a track per asset</td>
              <td align="left">unidirectional streams</td>
            </tr>
            <tr>
              <td align="left">progress, live media</td>
              <td align="left">low latency, unreliable is acceptable</td>
              <td align="left">datagrams or media objects</td>
              <td align="left">datagrams</td>
            </tr>
          </tbody>
        </table>
        <t>Two properties of the underlying transport do work that ACP would
otherwise have to do itself. Connection migration lets a dialog change
network path without changing state
(<xref target="transport-state"/>), and per-stream flow control lets a
large asset move without holding up an entry that is a few hundred
octets. A binding that cannot provide either is still conformant, but
the dialog will suspend more often and its log will stall behind its
media.</t>
      </section>
    </section>
    <section anchor="state">
      <name>Dialog and Transport State</name>
      <t>A participant in a dialog tracks two independent variables. Its
dialog state is a property of the ADID and survives any number
of connections. Its transport state is a property of the
connection the binding gives it and survives nothing. Conflating them is
the mistake that makes a session protocol fragile, so ACP keeps them
apart and defines exactly how the second drives the first
(<xref target="transport-state"/>).</t>
      <section anchor="dialog-state">
        <name>Dialog State</name>
        <t>ACP keeps one dialog state per participant. The states are the same for
both, except that only the server enters <tt>ALIGNING</tt>: the client
stays in <tt>SUSPENDED</tt> until alignment completes, because it is
the server that arbitrates and only the server needs a state in which
it has accepted a resumption but not yet settled it.</t>
        <figure anchor="fig-state">
          <name>Dialog states</name>
          <artwork><![CDATA[
   IDLE
   |
   | INITIATE
   v
   INITIATING --4xx / 5xx / T1--> TERMINATED
   |
   | 200
   v
   ACTIVE <--------------------------+
   |                                 |
   | transport loss, or SUSPEND      | alignment complete
   v                                 | (200, or 206 after replay)
   SUSPENDED ---+                    |
   |            |                    |
   |            +--> ALIGNING -------+
   |                 (server only)
   |
   | TTL expiry, or TERMINATE
   v
   TERMINATED
]]></artwork>
        </figure>
        <dl newline="false" spacing="normal">
          <dt>IDLE</dt>
          <dd>
            <t>No dialog state exists for this ADID.</t>
          </dd>
          <dt>INITIATING</dt>
          <dd>
            <t>An <tt>INITIATE</tt> has been sent or received and no final response
has settled it. The client has chosen an ADID that is not yet in
use.</t>
          </dd>
          <dt>ACTIVE</dt>
          <dd>
            <t>The dialog is established, a transport channel carries it, and the
two replicas are aligned. Entries may be appended and work may be
requested. On the server this is also the state in which it holds
runtime resources for the dialog; it is not required to hold model
context, and losing it is not a protocol failure.</t>
          </dd>
          <dt>SUSPENDED</dt>
          <dd>
            <t>The dialog exists and its log is durably held, but no channel
carries it. The server releases whatever runtime resources it was
holding. This state may last for the whole <tt>Session-TTL</tt>,
which is measured from the moment the dialog was suspended and not
from the moment it was created.</t>
          </dd>
          <dt>ALIGNING</dt>
          <dd>
            <t>The server has accepted a <tt>RESUME</tt> and is comparing replicas.
It does not accept <tt>APPEND</tt> in this state, because an append
would move the tail it is trying to agree on.</t>
          </dd>
          <dt>TERMINATED</dt>
          <dd>
            <t>The dialog is finished. State MAY be purged, and the ADID MUST NOT
be reused. A <tt>RESUME</tt> for a terminated dialog receives
<tt>404</tt>.</t>
          </dd>
        </dl>
        <t><tt>CANCEL</tt> does not change dialog state. It stops work associated
with an entry already in the log and adds an entry recording that it
did (<xref target="m-cancel"/>), after which the dialog is
<tt>ACTIVE</tt> and accepts the next transaction.</t>
      </section>
      <section anchor="transport-state">
        <name>Transport State and Transitions</name>
        <t>Transport state is whatever the binding reports: connected, migrating,
or gone. It is not an ACP state machine and ACP defines no polling for
it, because QUIC reports path loss directly
<xref target="RFC9000"/>. What ACP defines is the mapping from
transport events to dialog transitions, in
<xref target="tab-state"/>.</t>
        <table align="left" anchor="tab-state">
          <name>Dialog state transitions</name>
          <thead>
            <tr>
              <th align="left">Who</th>
              <th align="left">From</th>
              <th align="left">Event</th>
              <th align="left">To</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">client</td>
              <td align="left">IDLE</td>
              <td align="left">sends <tt>INITIATE</tt></td>
              <td align="left">INITIATING</td>
            </tr>
            <tr>
              <td align="left">client</td>
              <td align="left">INITIATING</td>
              <td align="left">receives <tt>200</tt></td>
              <td align="left">ACTIVE</td>
            </tr>
            <tr>
              <td align="left">client</td>
              <td align="left">INITIATING</td>
              <td align="left">
                <tt>4xx</tt>, <tt>5xx</tt>, or T1 expiry</td>
              <td align="left">TERMINATED</td>
            </tr>
            <tr>
              <td align="left">server</td>
              <td align="left">IDLE</td>
              <td align="left">receives <tt>INITIATE</tt></td>
              <td align="left">INITIATING</td>
            </tr>
            <tr>
              <td align="left">server</td>
              <td align="left">INITIATING</td>
              <td align="left">log initialized, sends <tt>200</tt></td>
              <td align="left">ACTIVE</td>
            </tr>
            <tr>
              <td align="left">server</td>
              <td align="left">INITIATING</td>
              <td align="left">rejects, sends <tt>4xx</tt> or <tt>5xx</tt></td>
              <td align="left">TERMINATED</td>
            </tr>
            <tr>
              <td align="left">both</td>
              <td align="left">ACTIVE</td>
              <td align="left">path changes; migration completes within T1</td>
              <td align="left">ACTIVE</td>
            </tr>
            <tr>
              <td align="left">both</td>
              <td align="left">ACTIVE</td>
              <td align="left">transport gone, and no migration within T1</td>
              <td align="left">SUSPENDED</td>
            </tr>
            <tr>
              <td align="left">both</td>
              <td align="left">ACTIVE</td>
              <td align="left">
                <tt>SUSPEND</tt> settled by <tt>200</tt></td>
              <td align="left">SUSPENDED</td>
            </tr>
            <tr>
              <td align="left">server</td>
              <td align="left">SUSPENDED</td>
              <td align="left">receives <tt>RESUME</tt></td>
              <td align="left">ALIGNING</td>
            </tr>
            <tr>
              <td align="left">server</td>
              <td align="left">ALIGNING</td>
              <td align="left">replicas agree; <tt>200</tt>, or <tt>206</tt> and replay complete</td>
              <td align="left">ACTIVE</td>
            </tr>
            <tr>
              <td align="left">server</td>
              <td align="left">ALIGNING</td>
              <td align="left">digests differ, sends <tt>409</tt>; or tail below <tt>Min-Seq</tt>, sends <tt>412</tt></td>
              <td align="left">ALIGNING</td>
            </tr>
            <tr>
              <td align="left">server</td>
              <td align="left">ALIGNING</td>
              <td align="left">T2 expiry, or client abandons</td>
              <td align="left">SUSPENDED</td>
            </tr>
            <tr>
              <td align="left">client</td>
              <td align="left">SUSPENDED</td>
              <td align="left">alignment complete</td>
              <td align="left">ACTIVE</td>
            </tr>
            <tr>
              <td align="left">client</td>
              <td align="left">SUSPENDED</td>
              <td align="left">receives <tt>404</tt>, or <tt>Session-TTL</tt> expires</td>
              <td align="left">TERMINATED</td>
            </tr>
            <tr>
              <td align="left">both</td>
              <td align="left">any</td>
              <td align="left">
                <tt>TERMINATE</tt> settled, or <tt>Session-TTL</tt> expires</td>
              <td align="left">TERMINATED</td>
            </tr>
          </tbody>
        </table>
        <t>The row that matters most is the one that changes nothing. Where the
binding supports connection migration, as QUIC does, a participant
moving from one network path to another stays <tt>ACTIVE</tt> and sends
no ACP message at all: the dialog is keyed to the ADID and to log
position, never to a socket (<xref target="architecture"/>). It moves
to <tt>SUSPENDED</tt> only when the connection is gone and no
migration has completed within T1. This is why a dialog can survive a
walk from a wireless network to a cellular one without either
participant noticing, and why the resumption path is reserved for
separations long enough that the connection really did die.</t>
      </section>
    </section>
    <section anchor="model">
      <name>Wire Format and Signaling</name>
      <t>Everything on the control plane and the log plane has one shape: a start
line naming a method or a status, a block of text header fields, a blank
line, and an optional body. This section defines that shape, the fields,
the methods, and the transactions that match a request to its response.
<xref target="methods-detail"/> gives each method in full, and
<xref target="status-codes"/> the response codes.</t>
      <section anchor="message">
        <name>Message Format</name>
        <t>An ACP message is a start line, zero or more header fields, a blank
line, and an optional body:</t>
        <figure anchor="fig-abnf">
          <name>ACP message syntax</name>
          <artwork><![CDATA[
ACP-message   = request / response

request       = Request-Line *( header-field CRLF ) CRLF [ body ]
response      = Status-Line  *( header-field CRLF ) CRLF [ body ]

Request-Line  = method SP request-uri SP "ACP/1.0" CRLF
Status-Line   = "ACP/1.0" SP status-code SP reason-phrase CRLF

method        = "INITIATE" / "APPEND" / "CANCEL" / "SUSPEND"
                / "RESUME" / "PROBE" / "CHECKPOINT" / "TERMINATE"
                / token

status-code   = 3DIGIT
reason-phrase = 1*( unreserved / SP )

header-field  = field-name ":" OWS field-value OWS
field-name    = token
field-value   = *( HTAB / SP / VCHAR )

request-uri   = "https:" "//" authority [ path-abempty ]

body          = *OCTET

OWS           = *( SP / HTAB )
token         = 1*tchar
tchar         = "!" / "#" / "$" / "%" / "&" / "'" / "*" / "+"
                / "-" / "." / "^" / "_" / "`" / "|" / "~"
                / DIGIT / ALPHA

3DIGIT        = DIGIT DIGIT DIGIT
unreserved    = ALPHA / DIGIT / "-" / "." / "_" / "~"
authority     = <authority, Section 3.2 of [RFC3986]>
path-abempty  = <path-abempty, Section 3.3 of [RFC3986]>
]]></artwork>
        </figure>
        <t><tt>OWS</tt>, <tt>token</tt>, and <tt>3DIGIT</tt> match the definitions
of the same names in <xref target="RFC9110"/>, and <tt>unreserved</tt>
matches <xref target="RFC3986"/>, Section 2.3; all four are repeated
here so that the grammar is self-contained. <tt>authority</tt> and
<tt>path-abempty</tt> are used by reference to
<xref target="RFC3986"/>, Sections 3.2 and 3.3.</t>
        <t>The <tt>request-uri</tt> is an <tt>https</tt> URI naming the agent
service, and is the same in every request of a dialog. It is a
locator, not the name of a participant
(<xref target="participants"/>); its <tt>userinfo</tt>,
<tt>query</tt>, and <tt>fragment</tt> components MUST NOT be used.
That the scheme is <tt>https</tt> does not mean ACP runs inside HTTP:
how the URI is reached is a property of the binding
(<xref target="bindings"/>).</t>
        <t>Three properties of this syntax are normative because the entry digest
of <xref target="digest"/> depends on them. First, a
<tt>field-value</tt> cannot contain CR or LF, since it is built from
<tt>VCHAR</tt>, SP, and HTAB only; that is what makes a sequence of
field values separable without length prefixes. Second, the blank line
that ends the header block is exactly CRLF following the CRLF of the
last header field, with no other form permitted. Third, the body is an
opaque octet string whose extent is given by <tt>Content-Length</tt>;
no transfer encoding, and in particular no chunked encoding, is
defined.</t>
        <t>A sender MUST NOT send a header field it does not understand the
syntax of, and a recipient MUST ignore a header field it does not
recognize unless <xref target="fields"/> marks it as required for the
method in question. This is what allows a field to be added without a
version change. A recipient that receives a message whose start line
it cannot parse MUST respond <tt>400</tt>; one whose
<tt>method</tt> it does not support MUST respond <tt>501</tt>.</t>
        <t><tt>Content-Length</tt> is REQUIRED on every message sent on a channel
that carries more than one message, and on every message with a body.
On a channel that carries exactly one entry body and is then closed by
the transport, the end of the stream delimits the body and
<tt>Content-Length</tt> MAY be omitted (<xref target="bindings"/>).</t>
      </section>
      <section anchor="fields">
        <name>Header Fields</name>
        <t><xref target="tab-fields"/> lists the fields this version defines.
Field names are case-insensitive. A field MUST NOT appear more than
once unless its definition says otherwise.</t>
        <table align="left" anchor="tab-fields">
          <name>ACP header fields</name>
          <thead>
            <tr>
              <th align="left">Field</th>
              <th align="left">Value</th>
              <th align="left">Where it appears</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">
                <tt>ADID</tt></td>
              <td align="left">The dialog identifier (<xref target="adid"/>)</td>
              <td align="left">Every message, including an <tt>INITIATE</tt> request, where it is the client-generated value</td>
            </tr>
            <tr>
              <td align="left">
                <tt>CSeq</tt></td>
              <td align="left">
                <tt>seq SP method</tt>, per transaction</td>
              <td align="left">Every request; echoed by its response</td>
            </tr>
            <tr>
              <td align="left">
                <tt>From</tt>, <tt>To</tt></td>
              <td align="left">Participant URIs (<xref target="participants"/>)</td>
              <td align="left">
                <tt>INITIATE</tt> request and its final response</td>
            </tr>
            <tr>
              <td align="left">
                <tt>Sequence</tt></td>
              <td align="left">Log position of an entry</td>
              <td align="left">
                <tt>APPEND</tt>; a response that assigns one</td>
            </tr>
            <tr>
              <td align="left">
                <tt>Prev-Hash</tt></td>
              <td align="left">Entry-Hash of <tt>Sequence</tt> minus one</td>
              <td align="left">
                <tt>APPEND</tt></td>
            </tr>
            <tr>
              <td align="left">
                <tt>Entry-Hash</tt></td>
              <td align="left">Digest of this entry (<xref target="digest"/>)</td>
              <td align="left">
                <tt>APPEND</tt></td>
            </tr>
            <tr>
              <td align="left">
                <tt>Entry-Type</tt></td>
              <td align="left">
                <tt>input</tt>, <tt>output</tt>, <tt>meta</tt>, <tt>abort</tt>, <tt>system</tt></td>
              <td align="left">
                <tt>APPEND</tt></td>
            </tr>
            <tr>
              <td align="left">
                <tt>Author</tt></td>
              <td align="left">Participant URI of the entry's creator, which MUST equal the identity the channel authenticated (<xref target="identity"/>)</td>
              <td align="left">
                <tt>APPEND</tt></td>
            </tr>
            <tr>
              <td align="left">
                <tt>Timestamp</tt></td>
              <td align="left">Seconds since the Unix epoch</td>
              <td align="left">
                <tt>APPEND</tt>, <tt>CHECKPOINT</tt></td>
            </tr>
            <tr>
              <td align="left">
                <tt>Event-Cursor</tt></td>
              <td align="left">A <tt>token</tt> naming the runtime boundary the entry closes (<xref target="boundaries"/>); optional</td>
              <td align="left">
                <tt>APPEND</tt>, <tt>CANCEL</tt></td>
            </tr>
            <tr>
              <td align="left">
                <tt>Tail-Seq</tt>, <tt>Tail-Hash</tt></td>
              <td align="left">Position and digest of the sender's last committed entry</td>
              <td align="left">
                <tt>RESUME</tt>, <tt>PROBE</tt>, and responses that report position</td>
            </tr>
            <tr>
              <td align="left">
                <tt>Min-Seq</tt></td>
              <td align="left">Oldest <tt>Sequence</tt> still retained</td>
              <td align="left">
                <tt>RESUME</tt> and its responses</td>
            </tr>
            <tr>
              <td align="left">
                <tt>CP-Seq</tt>, <tt>CP-Hash</tt></td>
              <td align="left">Latest checkpoint entry and its digest (<xref target="checkpoints"/>)</td>
              <td align="left">
                <tt>CHECKPOINT</tt>, <tt>RESUME</tt> responses</td>
            </tr>
            <tr>
              <td align="left">
                <tt>Replay-From</tt></td>
              <td align="left">First <tt>Sequence</tt> the responder will replay</td>
              <td align="left">
                <tt>206</tt> response to <tt>RESUME</tt></td>
            </tr>
            <tr>
              <td align="left">
                <tt>Action</tt></td>
              <td align="left">
                <tt>replay</tt>, <tt>resync</tt>, or <tt>probe</tt></td>
              <td align="left">Responses to <tt>RESUME</tt></td>
            </tr>
            <tr>
              <td align="left">
                <tt>Proof</tt></td>
              <td align="left">One <tt>seq=hash-value</tt> pair; repeatable</td>
              <td align="left">
                <tt>PROBE</tt> request and response</td>
            </tr>
            <tr>
              <td align="left">
                <tt>Session-TTL</tt></td>
              <td align="left">delta-seconds; requested in a request, granted in a response</td>
              <td align="left">
                <tt>INITIATE</tt>, <tt>SUSPEND</tt>, <tt>RESUME</tt></td>
            </tr>
            <tr>
              <td align="left">
                <tt>Supported-Modalities</tt></td>
              <td align="left">Comma-separated media type ranges</td>
              <td align="left">
                <tt>INITIATE</tt> request</td>
            </tr>
            <tr>
              <td align="left">
                <tt>Target-Seq</tt></td>
              <td align="left">
                <tt>Sequence</tt> whose processing is to stop</td>
              <td align="left">
                <tt>CANCEL</tt></td>
            </tr>
            <tr>
              <td align="left">
                <tt>Reason</tt></td>
              <td align="left">Machine-readable token</td>
              <td align="left">
                <tt>CANCEL</tt>, <tt>TERMINATE</tt></td>
            </tr>
            <tr>
              <td align="left">
                <tt>Authorization</tt></td>
              <td align="left">Credentials of the sender, syntax as in <xref target="RFC9110"/>; carries the token obtained as <xref target="sec-authz"/> describes</td>
              <td align="left">
                <tt>INITIATE</tt>, <tt>RESUME</tt></td>
            </tr>
            <tr>
              <td align="left">
                <tt>Content-Type</tt></td>
              <td align="left">Media type of the body <xref target="RFC2046"/></td>
              <td align="left">Any message with a body</td>
            </tr>
            <tr>
              <td align="left">
                <tt>Content-Length</tt></td>
              <td align="left">Body length in octets</td>
              <td align="left">See <xref target="message"/></td>
            </tr>
          </tbody>
        </table>
        <t>The values of the fields that carry a digest or a position use this
syntax:</t>
        <figure anchor="fig-values">
          <name>Position and digest value syntax</name>
          <artwork><![CDATA[
seq          = 1*15DIGIT

hash-value   = hash-alg "-" b64
hash-alg     = "sha256"
b64          = 43*unreserved   ; RFC 4648, Section 5, unpadded

Proof        = seq "=" hash-value

action       = "replay" / "resync" / "probe"
]]></artwork>
        </figure>
        <t><tt>Tail-Seq</tt> and <tt>Tail-Hash</tt> MUST appear together and
describe the same entry. <tt>Min-Seq</tt> defaults to 1 when absent.
<tt>Proof</tt> is the only field in this document that MAY appear more
than once; the set it denotes is the union of its occurrences, and a
<tt>seq</tt> MUST NOT be repeated across them.</t>
        <t>Digest values are written as the algorithm name, a hyphen, and the
base64url encoding of the digest without padding
(<xref target="RFC4648"/>, Section 5), which for SHA-256 is 43
characters. Hexadecimal is not used because a 64-character digest
cannot share a line with a field name inside the formatting width this
document observes, and folding a digest across lines would put its
textual form at the mercy of each implementation's folder. The
algorithm prefix is not decorative: a recipient MUST check it and MUST
reject a value naming an algorithm it does not support with
<tt>400</tt>.</t>
        <t>Header field order is not significant. A sender MAY emit fields in any
order, and a recipient MUST NOT infer meaning from their arrangement.
The digest of <xref target="digest"/> uses a fixed order of values that
has nothing to do with the order they appear in.</t>
      </section>
      <section anchor="transactions">
        <name>Transactions, Ordering, and Timers</name>
        <t>A transaction is one request and the responses to it. The
<tt>CSeq</tt> field carries a sequence number and the method name,
separated by a single space. Each participant keeps one
<tt>CSeq</tt> counter per dialog, starting at 1 and increasing by at
least one for each request it sends; the counter is independent of log
<tt>Sequence</tt> numbers, because a dialog may see many transactions
that add no entry. A response echoes the <tt>CSeq</tt> of its request
verbatim. A recipient that sees a <tt>CSeq</tt> it has already
answered on this dialog MUST discard the request, which makes requests
safe to repeat after a connection is replaced.</t>
        <t>A participant MUST NOT have more than one outstanding
<tt>APPEND</tt> per dialog, so that its pending entries have a total
order. It MAY have one outstanding <tt>APPEND</tt> and one outstanding
control request at the same time. Responses may arrive in a different
order from requests only where this paragraph allows it, so a
recipient matches them by <tt>CSeq</tt> and never by arrival order.</t>
        <t>Because every channel ACP uses is reliable and ordered within a
connection (<xref target="bindings"/>), ACP defines no retransmission
timer and no hop-by-hop acknowledgement. It does define two timers,
because a request can still go unanswered when a connection dies:</t>
        <table align="left" anchor="tab-timers">
          <name>ACP timers</name>
          <thead>
            <tr>
              <th align="left">Timer</th>
              <th align="left">Default</th>
              <th align="left">Meaning</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">T1</td>
              <td align="left">5 s</td>
              <td align="left">Bound on waiting for a final response. On expiry the transaction fails locally; the outcome is unknown and the participant MUST align before relying on it (<xref target="pending"/>).</td>
            </tr>
            <tr>
              <td align="left">T2</td>
              <td align="left">60 s</td>
              <td align="left">Bound on completing a replay announced by <tt>206</tt>. On expiry the alignment attempt fails and MAY be retried.</td>
            </tr>
          </tbody>
        </table>
        <t>A dialog also has a lifetime, <tt>Session-TTL</tt>, expressed in
delta-seconds. A request carries the value the sender wants; the
response carries the value granted, which MAY be shorter. The default
is 259200 (72 hours). Time starts again on each successful
<tt>APPEND</tt>, <tt>RESUME</tt>, or <tt>CHECKPOINT</tt>. When it
expires the dialog moves to the terminated state and its state MAY be
purged; a later <tt>RESUME</tt> then fails with <tt>404</tt>.</t>
      </section>
      <section anchor="methods-detail">
        <name>Methods</name>
        <t>ACP defines eight methods, summarized in <xref target="tab-methods"/>.
The subsections that follow define each one in full: what it requires,
what a successful response commits both participants to, and how it
fails. The examples use one dialog throughout, with the digests that
follow from it, so they can be checked against the construction of
<xref target="digest"/>.</t>
        <table align="left" anchor="tab-methods">
          <name>ACP methods</name>
          <thead>
            <tr>
              <th align="left">Method</th>
              <th align="left">Sent by</th>
              <th align="left">Effect</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">
                <tt>INITIATE</tt></td>
              <td align="left">client</td>
              <td align="left">Create a dialog and fix its ADID and participants</td>
            </tr>
            <tr>
              <td align="left">
                <tt>APPEND</tt></td>
              <td align="left">either</td>
              <td align="left">Add one entry to the log</td>
            </tr>
            <tr>
              <td align="left">
                <tt>CANCEL</tt></td>
              <td align="left">either</td>
              <td align="left">Stop work caused by an entry already in the log</td>
            </tr>
            <tr>
              <td align="left">
                <tt>SUSPEND</tt></td>
              <td align="left">either</td>
              <td align="left">Release runtime resources, keep the dialog</td>
            </tr>
            <tr>
              <td align="left">
                <tt>RESUME</tt></td>
              <td align="left">client</td>
              <td align="left">Align the log and reactivate the dialog</td>
            </tr>
            <tr>
              <td align="left">
                <tt>PROBE</tt></td>
              <td align="left">client</td>
              <td align="left">Locate the common ancestor after a <tt>409</tt></td>
            </tr>
            <tr>
              <td align="left">
                <tt>CHECKPOINT</tt></td>
              <td align="left">either</td>
              <td align="left">Commit to a log prefix and permit its truncation</td>
            </tr>
            <tr>
              <td align="left">
                <tt>TERMINATE</tt></td>
              <td align="left">either</td>
              <td align="left">End the dialog and purge its state</td>
            </tr>
          </tbody>
        </table>
        <section anchor="m-initiate">
          <name>INITIATE</name>
          <t><tt>INITIATE</tt> creates a dialog. The client generates the ADID
(<xref target="adid"/>), names both participants, states the modalities
it can handle, and asks for a lifetime. Required fields:
<tt>ADID</tt>, <tt>CSeq</tt>, <tt>From</tt>, <tt>To</tt>. Optional:
<tt>Supported-Modalities</tt>, <tt>Session-TTL</tt>.</t>
          <figure anchor="fig-initiate">
            <name>INITIATE and its acceptance</name>
            <artwork><![CDATA[
INITIATE https://agent.example.com/travel ACP/1.0
CSeq: 1 INITIATE
ADID: 9b1deb4d-3b7d-4bad-9bdd-2b0d7b3dcb6d
From: spiffe://example.org/ns/agent/client-1
To: spiffe://example.com/ns/agent/travel
Authorization: Bearer eyJhbGciOiJFUzI1NiJ9.eyJzdWIiOi...
Supported-Modalities: text/plain, image/*, audio/opus
Session-TTL: 259200
Content-Length: 0


ACP/1.0 200 OK
CSeq: 1 INITIATE
ADID: 9b1deb4d-3b7d-4bad-9bdd-2b0d7b3dcb6d
From: spiffe://example.org/ns/agent/client-1
To: spiffe://example.com/ns/agent/travel
Session-TTL: 259200
Tail-Seq: 0
Tail-Hash: sha256-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Min-Seq: 1
Content-Length: 0
]]></artwork>
          </figure>
          <t>On <tt>200</tt> the server has durably recorded the dialog with an
empty log and both participants are <tt>ACTIVE</tt>. The ADID in the
response MUST equal the one requested; a server cannot substitute its
own, since the client has already begun using it.
<tt>Session-TTL</tt> in the response is the lifetime granted, which MAY
be shorter than requested.</t>
          <t>A server that cannot serve the modalities offered responds
<tt>488</tt>; one that is out of capacity responds <tt>486</tt>; one
that cannot durably record the dialog responds <tt>500</tt> and MUST
NOT leave partial state. After any failure, and after a T1 expiry, the
client MUST discard the ADID and generate a fresh one for any retry: a
dialog whose establishment did not settle has no state to resume.</t>
          <t>ACP does not define the format of a media negotiation body in this
revision. <tt>Supported-Modalities</tt> is a list of media type ranges
as in <xref target="RFC6838"/>, and <tt>488</tt> is the only
negotiation failure this version specifies. Offer and answer semantics,
and how a modality is bound to a data channel, are deferred to a later
revision.</t>
        </section>
        <section anchor="m-append">
          <name>APPEND</name>
          <t><tt>APPEND</tt> adds one entry to the log. Required fields:
<tt>ADID</tt>, <tt>CSeq</tt>, <tt>Sequence</tt>,
<tt>Entry-Type</tt>, <tt>Prev-Hash</tt>, <tt>Author</tt>,
<tt>Timestamp</tt>, <tt>Entry-Hash</tt>. Optional:
<tt>Event-Cursor</tt> (<xref target="boundaries"/>). The body is
optional but its extent must be determinate, so <tt>Content-Length</tt>
is required unless the binding delimits the body by closing a stream.</t>
          <figure anchor="fig-append">
            <name>An APPEND by the client, and its acceptance</name>
            <artwork><![CDATA[
APPEND https://agent.example.com/travel ACP/1.0
ADID: 9b1deb4d-3b7d-4bad-9bdd-2b0d7b3dcb6d
CSeq: 502 APPEND
Sequence: 90
Entry-Type: input
Prev-Hash: sha256-_NrWKsIcH0PxTqjFxzYbg4w8ad2vogH1iWwLtcffWBQ
Author: spiffe://example.org/ns/agent/client-1
Timestamp: 1793312400
Event-Cursor: turn-complete
Content-Type: multipart/mixed; boundary=acp-9b1deb4d
Content-Length: 113
Entry-Hash: sha256-2qyCqGMY8i6F-zXfLQRYMkzVSHBqre6g0CkYq9mmziU

--acp-9b1deb4d
Content-Type: text/plain; charset=utf-8

Please review the flight schedule.
--acp-9b1deb4d--


ACP/1.0 200 OK
CSeq: 502 APPEND
ADID: 9b1deb4d-3b7d-4bad-9bdd-2b0d7b3dcb6d
Sequence: 90
Entry-Hash: sha256-2qyCqGMY8i6F-zXfLQRYMkzVSHBqre6g0CkYq9mmziU
Content-Length: 0
]]></artwork>
          </figure>
          <t>An entry authored by the server is identical in form, with
<tt>Entry-Type: output</tt> and the server's URI as <tt>Author</tt>,
and travels in the other direction on the log plane. The response
echoes <tt>Sequence</tt> and <tt>Entry-Hash</tt> and nothing else is
needed: the echo is the commit, and after it the entry is part of the
log and its author may use its digest as the next
<tt>Prev-Hash</tt>.</t>
          <t>A server rejects an <tt>APPEND</tt> with <tt>409</tt> if it does not
extend its tail exactly (<xref target="sequencing"/>), with
<tt>422</tt> if the received digest does not match the octets it got
(<xref target="digest"/>), with <tt>413</tt> if the body is larger than
it will accept, and with <tt>415</tt> if it cannot handle the media
type. A rejected entry is not written and its <tt>Sequence</tt> is not
consumed. Until a final response arrives the entry is pending and its
author is bound by <xref target="pending"/>.</t>
        </section>
        <section anchor="m-cancel">
          <name>CANCEL</name>
          <t><tt>CANCEL</tt> asks the peer to stop work caused by an entry that is
already in the log. It does not remove the entry and does not undo the
dialog: an entry, once committed, is part of the history whether or not
the work it caused was finished. Required fields: <tt>ADID</tt>,
<tt>CSeq</tt>, <tt>Target-Seq</tt>. Optional: <tt>Reason</tt>,
<tt>Event-Cursor</tt>.</t>
          <figure anchor="fig-cancel">
            <name>CANCEL and its acceptance</name>
            <artwork><![CDATA[
CANCEL https://agent.example.com/travel ACP/1.0
ADID: 9b1deb4d-3b7d-4bad-9bdd-2b0d7b3dcb6d
CSeq: 503 CANCEL
Target-Seq: 90
Reason: user-interrupted
Content-Length: 0


ACP/1.0 200 OK
CSeq: 503 CANCEL
ADID: 9b1deb4d-3b7d-4bad-9bdd-2b0d7b3dcb6d
Content-Length: 0
]]></artwork>
          </figure>
          <t><tt>CANCEL</tt> is a request to stop, not a guarantee that nothing
further was produced. The recipient SHOULD stop as soon as it can and
MUST then append an entry of <tt>Entry-Type: abort</tt> recording the
<tt>Target-Seq</tt> and the reason, so that both replicas agree on
where the abandoned work ended. That entry, not the <tt>200</tt>, is
what settles the cancellation in the log; a partial output produced
before the stop MAY be appended as an <tt>output</tt> entry below it,
and an application that must know how much was produced reads the two
together. This is not an exception to <xref target="boundaries"/>: the
cancellation closes the event, so what was produced before it is
complete in the only sense that matters, namely that no more is
coming. Fragments still in flight when the stop arrives are not part of
any entry and are discarded.</t>
          <t>Because stopping work is often urgent and generation is often metered,
a binding SHOULD give <tt>CANCEL</tt> the highest priority available
and SHOULD NOT queue it behind log traffic
(<xref target="bindings"/>). A server that cannot identify the work
referred to, because the entry is not in its log or the work already
finished, responds <tt>200</tt> anyway: the requested end state holds.
A server that is not authorized to be told to stop responds
<tt>403</tt>.</t>
          <t><tt>CANCEL</tt> does not change dialog state
(<xref target="state"/>).</t>
        </section>
        <section anchor="m-suspend">
          <name>SUSPEND</name>
          <t><tt>SUSPEND</tt> tells the peer that the sender is going away and asks
it to release runtime resources while keeping the dialog. It is
advisory about resources and normative about nothing else: a dialog
that is never suspended behaves identically, since losing the transport
has the same effect (<xref target="state"/>). Sending it is nonetheless
useful, because it lets the server release capacity immediately rather
than at a timeout, and it lets the sender ask for a specific retention
period. Required fields: <tt>ADID</tt>, <tt>CSeq</tt>. Optional:
<tt>Session-TTL</tt>.</t>
          <figure anchor="fig-suspend">
            <name>SUSPEND and its acceptance</name>
            <artwork><![CDATA[
SUSPEND https://agent.example.com/travel ACP/1.0
ADID: 9b1deb4d-3b7d-4bad-9bdd-2b0d7b3dcb6d
CSeq: 601 SUSPEND
Session-TTL: 86400
Content-Length: 0


ACP/1.0 200 OK
CSeq: 601 SUSPEND
ADID: 9b1deb4d-3b7d-4bad-9bdd-2b0d7b3dcb6d
Session-TTL: 86400
Tail-Seq: 90
Tail-Hash: sha256-2qyCqGMY8i6F-zXfLQRYMkzVSHBqre6g0CkYq9mmziU
Min-Seq: 1
Content-Length: 0
]]></artwork>
          </figure>
          <t>The response reports the lifetime granted and the responder's tail, so
the sender can tell before disconnecting whether it is about to strand
an unacknowledged append. <tt>Session-TTL</tt> in the response MAY be
shorter than requested; a server that will not retain the dialog at all
responds <tt>404</tt> and terminates it. After a <tt>200</tt> the
sender closes its channels and moves to <tt>SUSPENDED</tt>.</t>
        </section>
        <section anchor="m-resume">
          <name>RESUME</name>
          <t><tt>RESUME</tt> re-opens a suspended dialog. It is the entry point to
alignment, and its outcomes are specified in
<xref target="tail-verify"/>. Required fields: <tt>ADID</tt>,
<tt>CSeq</tt>, <tt>Tail-Seq</tt>, <tt>Tail-Hash</tt>. Optional:
<tt>Min-Seq</tt>, <tt>Session-TTL</tt>.</t>
          <t>The example below is the ordinary recovery case, and it exercises the
pending-entry rule. The client sent the <tt>APPEND</tt> of
<xref target="fig-append"/> and lost the connection before the response
arrived, so the entry stayed pending and its tail is still 89. The
server received and committed it.</t>
          <figure anchor="fig-resume">
            <name>RESUME answered with a replay</name>
            <artwork><![CDATA[
RESUME https://agent.example.com/travel ACP/1.0
ADID: 9b1deb4d-3b7d-4bad-9bdd-2b0d7b3dcb6d
CSeq: 701 RESUME
Authorization: Bearer eyJhbGciOiJFUzI1NiJ9.eyJzdWIiOi...
Tail-Seq: 89
Tail-Hash: sha256-_NrWKsIcH0PxTqjFxzYbg4w8ad2vogH1iWwLtcffWBQ
Min-Seq: 1
Session-TTL: 259200
Content-Length: 0


ACP/1.0 206 Partial Content
CSeq: 701 RESUME
ADID: 9b1deb4d-3b7d-4bad-9bdd-2b0d7b3dcb6d
Tail-Seq: 90
Tail-Hash: sha256-2qyCqGMY8i6F-zXfLQRYMkzVSHBqre6g0CkYq9mmziU
Min-Seq: 1
Action: replay
Replay-From: 90
Content-Length: 0
]]></artwork>
          </figure>
          <t>The server now replays entry 90 on the log plane. It is the entry of
<xref target="fig-append"/>, whose digest the client already holds as
its pending entry, so the replay settles that entry as committed rather
than duplicating it. Once the client has committed up to
<tt>Tail-Seq</tt> 90 both participants are <tt>ACTIVE</tt> with no
further exchange. Had the client instead sent new input while offline,
it would renumber and resubmit it now
(<xref target="pending"/>).</t>
          <t><tt>RESUME</tt> MUST be authenticated and authorized against the
dialog. A server MUST NOT reveal whether an ADID exists to a sender it
has not authenticated; to one it has authenticated but that is not a
participant of the dialog it responds <tt>403</tt> rather than
<tt>404</tt>, and to an unauthenticated sender it responds
<tt>401</tt> (<xref target="sec-adid"/>).</t>
        </section>
        <section anchor="m-probe">
          <name>PROBE</name>
          <t><tt>PROBE</tt> locates the last position at which two diverged replicas
agree, after a <tt>409</tt>. The procedure is specified in
<xref target="fork"/>. Required fields: <tt>ADID</tt>,
<tt>CSeq</tt>, and at least one <tt>Proof</tt>.</t>
          <t>In the example, the client wrongly treated its entry 89 as committed
while the server holds a different entry 89, produced after the hold
expired and was extended. Both agree at 88.</t>
          <figure anchor="fig-probe">
            <name>Divergence, and the PROBE that finds the ancestor</name>
            <artwork><![CDATA[
RESUME https://agent.example.com/travel ACP/1.0
ADID: 9b1deb4d-3b7d-4bad-9bdd-2b0d7b3dcb6d
CSeq: 702 RESUME
Authorization: Bearer eyJhbGciOiJFUzI1NiJ9.eyJzdWIiOi...
Tail-Seq: 90
Tail-Hash: sha256-2qyCqGMY8i6F-zXfLQRYMkzVSHBqre6g0CkYq9mmziU
Min-Seq: 1
Content-Length: 0


ACP/1.0 409 Conflict
CSeq: 702 RESUME
ADID: 9b1deb4d-3b7d-4bad-9bdd-2b0d7b3dcb6d
Tail-Seq: 90
Tail-Hash: sha256-0pNGg9pstIfSFkwGd466m1ObAHFrwyy2cp7nGHgrTIU
Min-Seq: 1
Action: probe
Content-Length: 0


PROBE https://agent.example.com/travel ACP/1.0
ADID: 9b1deb4d-3b7d-4bad-9bdd-2b0d7b3dcb6d
CSeq: 703 PROBE
Proof: 89=sha256-_NrWKsIcH0PxTqjFxzYbg4w8ad2vogH1iWwLtcffWBQ
Proof: 88=sha256-ej6bM05D6ILtYQ7s78oWlq87P_1UAdmlri_92oCZUcM
Content-Length: 0


ACP/1.0 200 OK
CSeq: 703 PROBE
ADID: 9b1deb4d-3b7d-4bad-9bdd-2b0d7b3dcb6d
Proof: 88=sha256-ej6bM05D6ILtYQ7s78oWlq87P_1UAdmlri_92oCZUcM
Tail-Seq: 90
Tail-Hash: sha256-0pNGg9pstIfSFkwGd466m1ObAHFrwyy2cp7nGHgrTIU
Min-Seq: 1
Content-Length: 0
]]></artwork>
          </figure>
          <t>The highest position the server confirmed is 88, so that is the common
ancestor. The client moves its entries 89 and 90 back to pending,
accepts a replay of the server's 89 and 90, and then renumbers its own
input to 91 against the tail it has just been given. Only two rungs were
needed here; a search that has to go further adds 86, 82, 74, and so on,
widening the step each time, and <xref target="fork"/> bounds the whole
ladder at sixteen proofs. The digests at 88, 89, and 90 are the ones the
construction of <xref target="digest"/> produces for the bodies shown in
<xref target="m-append"/>, so those rungs can be recomputed.</t>
        </section>
        <section anchor="m-checkpoint">
          <name>CHECKPOINT</name>
          <t><tt>CHECKPOINT</tt> commits a prefix of the log to one entry so that
the prefix can be discarded. The construction is in
<xref target="checkpoints"/>. Required fields: <tt>ADID</tt>,
<tt>CSeq</tt>, and a body carrying <tt>Lower</tt> and <tt>Upper</tt>.
Either participant may propose one; the ordering authority appends the
entry.</t>
          <figure anchor="fig-checkpoint-msg">
            <name>CHECKPOINT and its acceptance</name>
            <artwork><![CDATA[
CHECKPOINT https://agent.example.com/travel ACP/1.0
ADID: 9b1deb4d-3b7d-4bad-9bdd-2b0d7b3dcb6d
CSeq: 801 CHECKPOINT
Content-Type: text/plain; charset=utf-8
Content-Length: 78

acp-checkpoint/1
88
90
sha256-eMqjKss9gHwczrgROqwJKOhAc04c0G30WVgbvF9AJ48


ACP/1.0 200 OK
CSeq: 801 CHECKPOINT
ADID: 9b1deb4d-3b7d-4bad-9bdd-2b0d7b3dcb6d
CP-Seq: 91
CP-Hash: sha256-4eYccg4zhfuEkqtJWcZwf91PJUsFTps8TFd-fZk6Js8
Tail-Seq: 91
Tail-Hash: sha256-4eYccg4zhfuEkqtJWcZwf91PJUsFTps8TFd-fZk6Js8
Min-Seq: 91
Content-Length: 0
]]></artwork>
          </figure>
          <t>The checkpoint occupies <tt>Sequence</tt> 91 and is an ordinary entry,
so <tt>CP-Hash</tt> and <tt>Tail-Hash</tt> are the same value and the
next entry above it links to it as to any predecessor. Both
participants may now discard entries 88 to 90, and
<tt>Min-Seq</tt> becomes 91. A recipient that cannot reproduce the
accumulator responds <tt>409</tt> and discards nothing. A server MUST
NOT accept a <tt>CHECKPOINT</tt> from a sender it has not authorized
for the dialog, and a client MAY refuse one it did not propose.</t>
        </section>
        <section anchor="m-terminate">
          <name>TERMINATE</name>
          <t><tt>TERMINATE</tt> ends a dialog and permits both participants to purge
its state. Required fields: <tt>ADID</tt>, <tt>CSeq</tt>. Optional:
<tt>Reason</tt>.</t>
          <figure anchor="fig-terminate">
            <name>TERMINATE and its acceptance</name>
            <artwork><![CDATA[
TERMINATE https://agent.example.com/travel ACP/1.0
ADID: 9b1deb4d-3b7d-4bad-9bdd-2b0d7b3dcb6d
CSeq: 901 TERMINATE
Reason: task-completed
Content-Length: 0


ACP/1.0 200 OK
CSeq: 901 TERMINATE
ADID: 9b1deb4d-3b7d-4bad-9bdd-2b0d7b3dcb6d
Content-Length: 0
]]></artwork>
          </figure>
          <t>After a <tt>200</tt> both participants are <tt>TERMINATED</tt>: the log
MAY be erased, the ADID MUST NOT be reused, and a later
<tt>RESUME</tt> receives <tt>404</tt>. A participant MAY terminate
unilaterally, and a server MAY terminate on <tt>Session-TTL</tt> expiry
without asking; the other participant learns of it on its next
<tt>RESUME</tt>. Termination is therefore not a negotiation, and an
application that needs both sides to agree before discarding history
must arrange that above ACP.</t>
          <t>Purging is OPTIONAL and is a matter of local policy. A participant
subject to a retention obligation MAY keep its replica after
termination; doing so does not keep the dialog alive.</t>
        </section>
      </section>
      <section anchor="status-codes">
        <name>Status Codes</name>
        <t>A status code is three digits and a reason phrase. The reason phrase is
descriptive only and a recipient MUST NOT parse it. ACP status codes
occupy the same numeric space as HTTP <xref target="RFC9110"/> and SIP
<xref target="RFC3261"/> and several deliberately echo them, but ACP
defines its own code space and the meaning of a code is the one given
here. In particular <tt>206</tt> and <tt>412</tt> are not HTTP's
byte-range responses: they report the outcome of an alignment attempt.</t>
        <t>Class <tt>1xx</tt> is reserved for provisional responses. This version
defines none, but a recipient MUST accept and ignore one. A recipient
that receives a code it does not recognize MUST treat it as the default
for its class: <tt>2xx</tt> as success, <tt>3xx</tt> as a redirection it
cannot follow, <tt>4xx</tt> as a permanent failure of the request, and
<tt>5xx</tt> as a failure of the recipient that MAY succeed later.</t>
        <table align="left" anchor="tab-status">
          <name>ACP status codes</name>
          <thead>
            <tr>
              <th align="left">Code</th>
              <th align="left">Meaning</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">200</td>
              <td align="left">The request succeeded.</td>
            </tr>
            <tr>
              <td align="left">206</td>
              <td align="left">Resumption accepted; the responder is ahead and will replay from <tt>Replay-From</tt> (<xref target="tail-verify"/>).</td>
            </tr>
            <tr>
              <td align="left">400</td>
              <td align="left">The message could not be parsed, a required field is missing, or a digest names an unsupported algorithm.</td>
            </tr>
            <tr>
              <td align="left">401</td>
              <td align="left">The sender is not authenticated.</td>
            </tr>
            <tr>
              <td align="left">403</td>
              <td align="left">The sender is authenticated but is not a participant of this dialog, or is not permitted this operation.</td>
            </tr>
            <tr>
              <td align="left">404</td>
              <td align="left">No dialog with this ADID, or it has terminated or its <tt>Session-TTL</tt> expired.</td>
            </tr>
            <tr>
              <td align="left">408</td>
              <td align="left">The request was not completed in time.</td>
            </tr>
            <tr>
              <td align="left">409</td>
              <td align="left">The replicas disagree: an <tt>APPEND</tt> does not extend the authoritative tail, a digest did not verify on replay, or a checkpoint accumulator could not be reproduced. For <tt>RESUME</tt>, proceed with <tt>PROBE</tt> (<xref target="fork"/>).</td>
            </tr>
            <tr>
              <td align="left">412</td>
              <td align="left">The sender's position is below the responder's <tt>Min-Seq</tt>; align from the checkpoint instead (<xref target="resync"/>).</td>
            </tr>
            <tr>
              <td align="left">413</td>
              <td align="left">The body is larger than the recipient accepts.</td>
            </tr>
            <tr>
              <td align="left">415</td>
              <td align="left">The media type is not supported for this dialog.</td>
            </tr>
            <tr>
              <td align="left">422</td>
              <td align="left">The message is well formed but the received <tt>Entry-Hash</tt> does not match the octets received (<xref target="digest"/>).</td>
            </tr>
            <tr>
              <td align="left">486</td>
              <td align="left">The agent has no capacity for another dialog now; the request MAY succeed later.</td>
            </tr>
            <tr>
              <td align="left">488</td>
              <td align="left">The offered modalities cannot be served (<xref target="m-initiate"/>).</td>
            </tr>
            <tr>
              <td align="left">500</td>
              <td align="left">The recipient failed internally.</td>
            </tr>
            <tr>
              <td align="left">501</td>
              <td align="left">The method is not implemented.</td>
            </tr>
            <tr>
              <td align="left">503</td>
              <td align="left">The recipient is unavailable; the request MAY succeed later.</td>
            </tr>
          </tbody>
        </table>
        <t>Class <tt>3xx</tt> is undefined in this version. Redirecting a dialog is
not a simple matter of following a pointer, because the log lives where
the dialog lives; a mechanism for it is deferred to a later revision.</t>
      </section>
    </section>
    <section anchor="log">
      <name>The Log</name>
      <t>A dialog's durable state is its log: an ordered sequence of entries,
each occupying one <tt>Sequence</tt> number, each carrying a digest of
itself and of the entry before it. Both participants hold a replica.
The log is append-only: an entry that has been committed is never
edited, and a committed <tt>Sequence</tt> number is never reused. What
changes history is not editing but truncation from the front
(<xref target="checkpoints"/>), which is itself a committed act.</t>
      <t>The log holds protocol state, not conversation. An entry may carry a
message body, but nothing in ACP interprets it: the body is opaque, and
an application is free to put a transcript, a tool call, or a
capability description in it. What ACP requires is that the body be an
octet string both participants can digest identically. Media is handled
by reference rather than by inclusion (<xref target="assets"/>).</t>
      <section anchor="sequencing">
        <name>Entries and Sequencing</name>
        <t><tt>Sequence</tt> is a positive integer. The first entry of a dialog is
1 and each subsequent entry is one greater, with no gaps in the
authoritative log. The ordering authority for a dialog is its server:
its replica defines what the log is, and a client replica that differs
from it is wrong and is repaired
(<xref target="alignment"/>).</t>
        <t>A participant that authors an entry proposes the next
<tt>Sequence</tt> and its <tt>Prev-Hash</tt>. The ordering authority
accepts the entry only if it extends its own tail exactly, that is,
only if the proposed <tt>Sequence</tt> is one greater than its current
tail and the proposed <tt>Prev-Hash</tt> equals that tail's
<tt>Entry-Hash</tt>. If it does, the entry is committed at that
position and the response echoes both. If it does not, the entry is
rejected with <tt>409</tt> and nothing is written; the author must
align, then renumber its entry against the tail it learns, recompute
the digest, and resubmit. Rejecting rather than silently renumbering
keeps the digest of a committed entry stable: an entry is committed
once, at one position, with one digest, and that digest is what the
next entry's <tt>Prev-Hash</tt> refers to.</t>
        <figure anchor="fig-chain">
          <name>The log as a hash chain; e.N is the entry at Sequence N</name>
          <artwork><![CDATA[
 +------+    +------+    +------+    +------+
 | e.88 |===>| e.89 |===>| e.90 |===>| e.91 |
 +------+    +------+    +------+    +------+
  Prev=H87    Prev=H88    Prev=H89    Prev=H90
  Hash=H88    Hash=H89    Hash=H90    Hash=H91
]]></artwork>
        </figure>
        <section anchor="pending">
          <name>Pending Entries</name>
          <t>An <tt>APPEND</tt> that has been sent but not finally answered leaves
its entry pending. A pending entry is not committed.
Its author:</t>
          <ul spacing="normal">
            <li>
              <t>MUST NOT report it as its tail in <tt>Tail-Seq</tt> and
<tt>Tail-Hash</tt>;</t>
            </li>
            <li>
              <t>MUST NOT use its <tt>Entry-Hash</tt> as the <tt>Prev-Hash</tt> of a
later entry;</t>
            </li>
            <li>
              <t>MUST retain it, with its digest, until alignment settles whether
the ordering authority committed it; and</t>
            </li>
            <li>
              <t>MUST NOT present it to its application as part of the dialog
history without marking it unconfirmed.</t>
            </li>
          </ul>
          <t>Pending entries are the ordinary source of divergence. A client whose
<tt>APPEND</tt> timed out at T1 cannot know whether the entry was
committed before the connection died, and a server that crashed may
have committed it without answering. This is why alignment compares
digests rather than counts (<xref target="tail-verify"/>): a count
says the two replicas are the same length, which is not the same
statement as that they are the same log.</t>
          <t>Once alignment establishes the ordering authority's tail, each
pending entry is settled by comparison. If the authority holds an
entry at that <tt>Sequence</tt> with that <tt>Entry-Hash</tt>, the
pending entry was committed and becomes part of the replica. If the
authority's entry at that <tt>Sequence</tt> differs, or there is
none, the pending entry was not committed: its author renumbers it
against the tail, recomputes its digest, and resubmits it. Nothing is
lost and nothing is duplicated, which is the property that makes an
unacknowledged append safe to retry.</t>
        </section>
      </section>
      <section anchor="boundaries">
        <name>Event Boundaries</name>
        <t>A log entry is the unit of commitment, and ACP requires that it also be
a unit of meaning: an entry closes exactly one complete event of the
application that produced it, and an incomplete event is never
committed. One turn of conversation, one tool invocation together with
its result, one accepted user utterance, one cancellation are each a
complete event. Half of a turn is not an event and MUST NOT become an
entry.</t>
        <t>This rule is what makes the chain usable under streaming. An agent
generating a long answer emits it as fragments on a data channel; the
fragments carry no ACP header, no <tt>Sequence</tt>, and no digest
(<xref target="traffic"/>). Nothing is hashed while they flow. When
generation ends, the author gathers the completed event into one body
and appends one entry, so the cost of the chain is one digest per event
rather than one per fragment. A connection that dies in the middle of
generation therefore loses fragments that were never part of any entry:
the chain is untouched, both tails still point at the last committed
entry, and alignment has nothing to reconcile
(<xref target="alignment"/>). The alternative, digesting fragments as
they arrive, would put a hash computation in the per-token path and
would leave a truncated fragment committed in a chain that both peers
then have to agree to forget.</t>
        <t>Two interruption cases look alike on the wire and are worth separating.
If the connection dies while the author is still gathering the event, no
<tt>APPEND</tt> was sent, no entry exists on either side, and the
fragments are simply dropped. If it dies after the author sent the
<tt>APPEND</tt> but before the response arrived, the entry is pending
(<xref target="pending"/>): the peer may or may not have committed it,
and alignment settles which by comparing digests. In neither case is a
partial event committed, and in neither case does a participant have to
guess how many octets of an unfinished stream the other one received.</t>
        <t>An author MAY record which boundary an entry closes by including
<tt>Event-Cursor</tt>, whose value is a <tt>token</tt>
          <xref target="RFC9110"/> meaningful to the application, such as
<tt>turn-complete</tt> or <tt>tool-result-3</tt>. ACP neither defines
the token space, nor requires the field, nor interprets it. Its use is
local and diagnostic: it tells an application which step of its own
execution a given <tt>Sequence</tt> corresponds to, which is what it
needs to re-run the right step after a rollback
(<xref target="fork"/>) or to continue at the right point after an
interruption.</t>
        <t><tt>Event-Cursor</tt> is deliberately not part of the digest input
(<xref target="digest"/>). Alignment compares digests and sequence
numbers; it never compares cursors. Two replicas holding identical
bytes hold the same log whatever their cursors say, and a cursor inside
the digest would let an application-level label cause a <tt>422</tt> on
an otherwise valid entry. A <tt>CANCEL</tt> MAY carry the cursor of the
boundary at which the sender wants work to stop; that is a hint about
where to cut, not a position in the log, and the normative target of a
cancellation remains <tt>Target-Seq</tt> (<xref target="m-cancel"/>).</t>
      </section>
      <section anchor="digest">
        <name>The Entry Digest</name>
        <t>Each entry carries <tt>Entry-Hash</tt>, the digest of a fixed octet
string built from six field values and the body. The construction is
the whole basis of alignment, so it is stated once and precisely.</t>
        <figure anchor="fig-digest">
          <name>The digest input</name>
          <artwork><![CDATA[
digest-input = ADID-value        LF
               Prev-Hash-value   LF
               Sequence-value    LF
               Entry-Type-value  LF
               Author-value      LF
               Timestamp-value   LF
               body-octets

Entry-Hash   = "sha256-" base64url( SHA-256( digest-input ) )
]]></artwork>
        </figure>
        <t>Each <tt>-value</tt> is the corresponding header field value exactly
as it appears in the message, after stripping leading and trailing
OWS, and without the field name or the colon. <tt>body-octets</tt> is
the body, exactly <tt>Content-Length</tt> octets, or the octets
between the blank line and the end of the stream where
<tt>Content-Length</tt> is omitted as <xref target="message"/> allows.
An empty body contributes zero octets. The separator is LF (0x0A),
not CRLF: the digest input is deliberately not a substring of any
message, so that no part of a wire encoding can be mistaken for it.
SHA-256 is as specified in <xref target="RFC6234"/> and base64url in
<xref target="RFC4648"/>, Section 5, without padding.</t>
        <t>For the entry at <tt>Sequence</tt> 1 there is no predecessor. Its
<tt>Prev-Hash</tt> is the constant <tt>GENESIS</tt>, defined as
<tt>sha256-</tt> followed by 43 <tt>A</tt> characters, which is the
base64url encoding of 32 zero octets. <tt>GENESIS</tt> is a constant
and not a digest of anything; it MUST NOT be interpreted as an entry.
A log with no entries is described in the position fields as
<tt>Tail-Seq: 0</tt> with <tt>Tail-Hash</tt> equal to
<tt>GENESIS</tt>, which keeps the invariant that the entry at
<tt>Sequence</tt> n carries the digest of n - 1 in its
<tt>Prev-Hash</tt> true for n = 1 without a special case.</t>
        <t>Why these six fields and not the whole message. A digest over the
complete header block would depend on field order, on OWS, and on
fields that legitimately differ between the original transmission of
an entry and its replay, so two participants could hold the same entry
and compute different digests. That is the failure this construction
exists to avoid. Why these six and not the body alone. A digest over
the body would leave the entry's position, its predecessor, its type,
and its author uncommitted, so an entry could be relabelled, reordered,
or moved to another dialog without changing its digest. Binding the
ADID in particular is what stops an entry from one dialog being
replayed into another at the same position. The six fields are exactly
those whose meaning a verifier must be able to trust.</t>
        <t>Fields not in the digest input are protected only by the channel. That
is acceptable for <tt>CSeq</tt>, which is per transaction and differs
when an entry is resubmitted, for <tt>Event-Cursor</tt>, which labels
the boundary an entry closes rather than anything the entry asserts
(<xref target="boundaries"/>), and for <tt>Content-Length</tt>, which
the recipient can check against what it received. It is also acceptable
for the message-level <tt>Content-Type</tt>, because a body that needs
typed parts carries them as MIME parts <xref target="RFC2046"/> whose
own <tt>Content-Type</tt> headers are inside the body and therefore
covered. An implementation that needs the message-level media type to
be committed SHOULD repeat it as the first body part header.</t>
        <t>A recipient of an <tt>APPEND</tt> MUST recompute the digest and compare
it with the received <tt>Entry-Hash</tt> before committing the entry.
On mismatch it MUST NOT commit, MUST respond <tt>422</tt>, and SHOULD
treat the dialog as requiring alignment, since a mismatch means the two
participants disagree about the octet string and not merely about a
checksum.</t>
        <t>The digest of an entry depends only on octets its author already held,
so it can be computed once and verified anywhere, including by a
participant that never saw the original transmission. It is not a
signature. A digest proves that two replicas hold the same bytes; it
does not prove who produced them, and a participant that can write to
the authoritative log can rewrite history and produce consistent
digests. Per-entry signatures are deferred to a later revision.</t>
      </section>
      <section anchor="assets">
        <name>Media and Large Assets</name>
        <t>A dialog that ran for hours of voice and video would have an unusable
log if every entry digested its media. ACP therefore keeps media out of
the chain, in two ways according to whether the media is stored or
live.</t>
        <t>Stored media is carried by reference. A MIME part MAY omit its content
and carry instead an <tt>Asset-Ref</tt> parameter giving the
<tt>hash-value</tt> of the asset's octets and an <tt>Asset-Size</tt>
giving their length:</t>
        <figure anchor="fig-asset">
          <name>A body part that references an asset</name>
          <artwork><![CDATA[
--acp-9b1deb4d
Content-Type: video/mp4
Asset-Ref: sha256-GIgdzwklKPw4gUd4U32RfGAuSrr5MEpdNK5NP3bMj78
Asset-Size: 104857600
Content-Location: https://agent.example.com/acp-asset/9b1deb4d/a3
]]></artwork>
        </figure>
        <t>The reference is text inside the body, so the digest commits to it, and
the asset's octets are transferred separately on an asset channel
(<xref target="bindings"/>) and never enter the digest input. A
recipient that retrieves the asset MUST verify it against
<tt>Asset-Ref</tt>. A consequence worth stating plainly: a log can be
fully aligned and every digest verified while an asset is still
missing, and an asset can be lost without invalidating the chain. That
is intended. The chain records what the dialog said about its media,
which is the part that has to survive days of separation; the media
itself has its own storage and its own lifetime.</t>
        <t>Live media is not an asset and is not referenced either. It flows on
its own channels while the dialog is active, and the event that opens
or closes a media session is recorded as a <tt>meta</tt> entry
describing it (<xref target="boundaries"/>), for example:</t>
        <figure anchor="fig-meta">
          <name>A meta entry body</name>
          <artwork><![CDATA[
Session-Type: realtime-voice
Media-Status: active
Active-Tracks: audio-01 (opus/48000/2)
Transport-Mapping: wt-session 0xef4a
]]></artwork>
        </figure>
        <t>Such an entry is a few hundred octets, costs one digest, and is enough
to re-establish the media path after an interruption. ACP does not
define the fields of a <tt>meta</tt> body, does not transcribe speech,
and does not summarize a conversation: those are application concerns,
and an application that wants a transcript in the log appends an entry
containing one. Keeping them out is what lets the signaling path stay
short enough not to interfere with the media it is setting up.</t>
      </section>
      <section anchor="checkpoints">
        <name>Checkpoints and Truncation</name>
        <t>A dialog may run for months. Its log must not grow without bound, so
ACP allows a prefix of it to be committed to a single entry and then
discarded. A checkpoint is itself an entry, of <tt>Entry-Type</tt>
          <tt>system</tt>, appended at the next <tt>Sequence</tt> like any other.
Making it an entry rather than a side structure is deliberate: it keeps
the chain continuous across truncation, it means a checkpoint has an
<tt>Entry-Hash</tt> of exactly the same kind as any other entry, and it
means a participant that has lost everything below a checkpoint can
still resume by naming that one entry
(<xref target="resync"/>).</t>
        <t>The body of a checkpoint entry is four lines:</t>
        <figure anchor="fig-checkpoint">
          <name>Checkpoint entry body and accumulator</name>
          <artwork><![CDATA[
body         = "acp-checkpoint/1" CRLF Lower CRLF Upper CRLF
               accumulator CRLF

Lower        = seq          ; first Sequence covered, inclusive
Upper        = seq          ; last Sequence covered, inclusive
accumulator  = "sha256-" base64url( SHA-256( cp-input ) )

cp-input     = for i = Lower to Upper, in increasing order:
                 Entry-Hash-value(i) LF
]]></artwork>
        </figure>
        <t>The body is ordinary message content, so its line endings are CRLF like
the rest of a message. <tt>cp-input</tt> is not a wire format: it is the
octet string the accumulator is computed over, and its separator is LF,
as in <xref target="digest"/>.</t>
        <t>where <tt>Entry-Hash-value(i)</tt> is the complete textual
<tt>hash-value</tt> of the entry at <tt>Sequence</tt> i, and
<tt>Lower</tt> is the proposer's current <tt>Min-Seq</tt>, which is 1
for a dialog that has never been checkpointed. Checkpoints therefore
compose: a checkpoint whose <tt>Lower</tt> is an earlier checkpoint's
<tt>Sequence</tt> is well defined, and a participant that has already
truncated can still take part in a later one.</t>
        <t>A <tt>CHECKPOINT</tt> transaction proposes <tt>Lower</tt> and
<tt>Upper</tt>. The recipient recomputes <tt>accumulator</tt> from the
entries it holds. If it matches, the ordering authority appends the
checkpoint entry and responds <tt>200</tt> with <tt>CP-Seq</tt> set to
that entry's <tt>Sequence</tt> and <tt>CP-Hash</tt> to its
<tt>Entry-Hash</tt>. Both participants record the entry durably, and
only then MAY either discard entries with <tt>Sequence</tt> below
<tt>CP-Seq</tt>; <tt>Min-Seq</tt> becomes <tt>CP-Seq</tt>. If the
recipient cannot recompute <tt>accumulator</tt>, because the digests
disagree or because it has already discarded part of the range without
holding a checkpoint that covers it, it MUST NOT discard anything and
MUST respond <tt>409</tt>, or <tt>412</tt> where
<xref target="resync"/> applies. Discarding before the peer has
confirmed is not recoverable and MUST NOT be done.</t>
        <t><tt>Sequence</tt> numbers are never reset by a checkpoint, and the
checkpoint entry is retained: the entry above it carries its
<tt>Entry-Hash</tt> as <tt>Prev-Hash</tt>, so the chain above a
checkpoint links to the chain below it through a single digest. A
dialog checkpointed a hundred times still has one continuous
numbering. A participant holding only the latest checkpoint and the
entries above it can still verify every entry it holds, and a forged
prefix would require inverting the checkpoint entry's digest.</t>
      </section>
      <section anchor="alignment">
        <name>Log Alignment</name>
        <t>Alignment is what makes a dialog survive its transport. A participant
that reconnects after an hour or after a week runs the same procedure,
and the cost depends on how much it missed rather than on how long it was
away. The procedure has three outcomes, decided by one exchange: the
replicas agree, the client is behind, or they diverged. A fourth case,
where the client is behind by more than the server retains, is handled by
<xref target="resync"/>.</t>
        <section anchor="tail-verify">
          <name>Tail Verification</name>
          <t>The client sends <tt>RESUME</tt> with <tt>Tail-Seq</tt> and
<tt>Tail-Hash</tt> giving its last committed entry, and with
<tt>Min-Seq</tt>. It MUST NOT report a pending entry as its tail
(<xref target="pending"/>). The server then applies the first rule that
matches:</t>
          <table align="left" anchor="tab-resume">
            <name>RESUME outcomes</name>
            <thead>
              <tr>
                <th align="left">#</th>
                <th align="left">Condition</th>
                <th align="left">Response</th>
              </tr>
            </thead>
            <tbody>
              <tr>
                <td align="left">1</td>
                <td align="left">ADID unknown, terminated, or TTL expired</td>
                <td align="left">
                  <tt>404</tt></td>
              </tr>
              <tr>
                <td align="left">2</td>
                <td align="left">Sender not authenticated or not authorized for this dialog</td>
                <td align="left">
                  <tt>401</tt> or <tt>403</tt></td>
              </tr>
              <tr>
                <td align="left">3</td>
                <td align="left">Client <tt>Tail-Seq</tt> is below server <tt>Min-Seq</tt></td>
                <td align="left">
                  <tt>412</tt> with <tt>Action: resync</tt></td>
              </tr>
              <tr>
                <td align="left">4</td>
                <td align="left">Server holds no entry at the client's <tt>Tail-Seq</tt>, or holds one with a different digest</td>
                <td align="left">
                  <tt>409</tt> with <tt>Action: probe</tt></td>
              </tr>
              <tr>
                <td align="left">5</td>
                <td align="left">Tails equal</td>
                <td align="left">
                  <tt>200</tt></td>
              </tr>
              <tr>
                <td align="left">6</td>
                <td align="left">Server tail ahead of client tail</td>
                <td align="left">
                  <tt>206</tt> with <tt>Action: replay</tt> and <tt>Replay-From</tt></td>
              </tr>
            </tbody>
          </table>
          <t>The order matters. Rule 3 precedes rule 4 because a client below
<tt>Min-Seq</tt> cannot be probed: the entries needed to find a common
ancestor are gone. Rules 5 and 6 are reached only when the digests
match, which is the point of comparing digests rather than lengths.</t>
          <t>Every response to <tt>RESUME</tt> carries the server's
<tt>Tail-Seq</tt>, <tt>Tail-Hash</tt>, and <tt>Min-Seq</tt>, and
<tt>CP-Seq</tt> and <tt>CP-Hash</tt> where a checkpoint exists, so the
client learns the authoritative position and any truncation in the same
exchange.</t>
          <t>On <tt>206</tt> the server replays entries from
<tt>Replay-From</tt>, which is the client's <tt>Tail-Seq</tt> plus one,
up to and including its own tail, in increasing <tt>Sequence</tt> order,
on the log plane. The recipient verifies each entry's digest and that
its <tt>Prev-Hash</tt> equals the <tt>Entry-Hash</tt> of the entry below
it, and commits each as it arrives; replay is driven by the transport's
ordering, not by per-entry acknowledgement. Alignment is complete when
the entry at the <tt>Tail-Seq</tt> announced in the <tt>206</tt> is
committed, so no further message is needed, the target having been
announced in advance. If T2 expires first, the attempt fails and MAY be
retried with a new <tt>RESUME</tt>.</t>
          <t>On <tt>200</tt> or on completion of a replay, both participants are
<tt>ACTIVE</tt>. The client then settles any pending entries as
<xref target="pending"/> describes, renumbering and resubmitting those
the server did not commit.</t>
        </section>
        <section anchor="fork">
          <name>Fork Detection and Resolution</name>
          <t>A <tt>409</tt> means the two replicas held the same dialog and now
disagree about it. The cause is usually benign: an <tt>APPEND</tt> whose
acknowledgement was lost, a server that recovered from a crash behind
its last flush, or a client that committed an entry it should have left
pending. Resolution is to find the last position at which the two agree
and rebuild above it.</t>
          <t>The client sends <tt>PROBE</tt> carrying a ladder of <tt>Proof</tt>
fields: one for each of the positions <tt>Tail-Seq</tt> - 1,
<tt>Tail-Seq</tt> - 2, <tt>Tail-Seq</tt> - 4, and so
on by powers of two down to its <tt>Min-Seq</tt>, one for
<tt>Min-Seq</tt> itself, and at most 16 in total. The server responds
<tt>200</tt> with <tt>Proof</tt> fields for exactly those positions
whose digest it also holds, together with its own <tt>Tail-Seq</tt>,
<tt>Tail-Hash</tt>, and <tt>Min-Seq</tt>. It MUST NOT assert a pair it
does not hold, and it need not explain the absence of one.</t>
          <t>The highest matching position is the common ancestor. The client moves
every entry it holds above it back to pending, accepts a replay from
the position above it, and then renumbers and resubmits its pending
entries against the tail it has been given. Because a renumbered entry
has a different <tt>Sequence</tt> and a different <tt>Prev-Hash</tt>, it
has a different digest: the two versions of the same input are distinct
entries, and only the one the ordering authority committed is in the
log. No content is lost, and the chain above the ancestor is the
server's alone.</t>
          <t>A 16-pair ladder reaches 2<sup>15</sup> entries below the tail, so one
<tt>PROBE</tt> settles almost every divergence. Where it does not, the
client continues from the ancestor it found with a further
<tt>PROBE</tt>. If no pair matches, the divergence is below everything
the ladder reaches and the server responds <tt>412</tt> instead;
<xref target="resync"/> applies. A server MUST rate-limit
<tt>PROBE</tt> per dialog, since each one is a read against durable
storage and none of them makes forward progress.</t>
        </section>
        <section anchor="resync">
          <name>Resynchronization Below a Checkpoint</name>
          <t>A participant that has been away long enough to fall below the other's
<tt>Min-Seq</tt> cannot be aligned entry by entry, because the entries
are gone. A <tt>412</tt> carries <tt>Action: resync</tt> together with
<tt>Min-Seq</tt>, <tt>CP-Seq</tt>, <tt>CP-Hash</tt>,
<tt>Tail-Seq</tt>, and <tt>Tail-Hash</tt>. Because a checkpoint is an
ordinary entry (<xref target="checkpoints"/>), <tt>CP-Hash</tt> is the
<tt>Entry-Hash</tt> of the entry at <tt>CP-Seq</tt> and can be adopted
as a tail directly, with no second kind of digest value anywhere in the
protocol.</t>
          <t>The recipient first checks whether it holds the entry at
<tt>CP-Seq</tt>. If it does and the digest matches, its own history is a
prefix of the authoritative one and it simply discards what is below and
continues. If it does not hold that entry, or the digest differs, its
history below <tt>CP-Seq</tt> is unreconcilable: it MUST stop treating
those entries as part of the dialog, SHOULD retain them in local storage
if its own policy permits, since they may be the only record it has of
what it was told, and then adopts the checkpoint as its base by setting
<tt>Min-Seq</tt> and <tt>Tail-Seq</tt> to <tt>CP-Seq</tt> and
<tt>Tail-Hash</tt> to <tt>CP-Hash</tt>. A second <tt>RESUME</tt> then
proceeds normally and is answered <tt>200</tt> or <tt>206</tt>.</t>
          <t>A participant that adopts a checkpoint it could not verify is trusting
the ordering authority. That is not a new trust: it already relies on
that authority for every entry it was given. What the checkpoint
changes is that the reliance can no longer be checked against the
discarded prefix. A signed checkpoint would remove the reliance and is
deferred to a later revision.</t>
        </section>
      </section>
    </section>
    <section anchor="bindings">
      <name>Transport Bindings</name>
      <section anchor="binding-common">
        <name>Binding Requirements</name>
        <t>ACP is transport-independent, and a binding is the mapping of its
channels onto one transport. A binding MUST provide:</t>
        <ul spacing="normal">
          <li>
            <t>a reliable, ordered, bidirectional channel for the control plane, on
which many messages may follow one another;</t>
          </li>
          <li>
            <t>a reliable, ordered channel for the log plane that does not share a
head-of-line queue with the control plane, so that a large entry
cannot delay a <tt>CANCEL</tt>;</t>
          </li>
          <li>
            <t>a way to carry asset octets without blocking either of the above;
and</t>
          </li>
          <li>
            <t>a signal when the connection is lost, so that a participant can move
to <tt>SUSPENDED</tt> (<xref target="state"/>).</t>
          </li>
        </ul>
        <t>A binding SHOULD also provide an unreliable low-latency channel for
progress traffic, and SHOULD support connection migration, which lets a
dialog stay <tt>ACTIVE</tt> across a change of network path. A binding
that provides neither is still conformant; progress is then carried on
the log channel and simply not logged, and migration is then no better
than a suspend and resume.</t>
        <t>Every stream a binding opens for ACP begins with a preamble that says
what the stream carries:</t>
        <figure anchor="fig-preamble">
          <name>Stream preamble</name>
          <artwork><![CDATA[
channel-preamble = "ACP/1.0" SP channel-name CRLF
channel-name     = "control" / "log" / "asset" / token
]]></artwork>
        </figure>
        <t>A recipient MUST read the preamble before treating a stream as ACP and
MUST reset a stream whose preamble it does not recognize. The preamble
is what identifies a channel, and no binding may identify one by a
stream number instead: transports assign stream identifiers, and an
application cannot choose one. Messages on the <tt>control</tt> channel
are delimited by <tt>Content-Length</tt>, which is REQUIRED there. On a
<tt>log</tt> channel exactly one entry message is sent per stream and
the end of the stream delimits it, so <tt>Content-Length</tt> MAY be
omitted; the octets that follow the preamble are the entry exactly as
its author digested it, and a recipient MUST NOT re-encode them before
verifying the digest.</t>
      </section>
      <section anchor="binding-moq">
        <name>MoQ Binding</name>
        <t>This binding carries the log plane on Media over QUIC Transport (MoQ)
<xref target="I-D.ietf-moq-transport"/>. It is the binding to use where
a dialog should be relayable and cacheable by infrastructure that
understands MoQ, and where recovery of missed entries should be a
subscription rather than an application-level replay.</t>
        <t>A dialog occupies one track namespace:</t>
        <figure anchor="fig-moq-ns">
          <name>The track namespace of a dialog</name>
          <artwork><![CDATA[
{ authority, "acp", adid }
]]></artwork>
        </figure>
        <t>where <tt>authority</tt> is the domain of the agent service that
publishes the dialog and <tt>adid</tt> is the ADID, which uses only
URI-unreserved characters and so needs no further encoding. The literal
<tt>"acp"</tt> keeps these namespaces distinct from other uses of the
same authority. Because the ADID is in the namespace, a relay forwards,
caches, and correlates every track of a dialog without decrypting or
interpreting a payload, and a peer that sees the same namespace on a
new session can correlate it with the dialog it already knows.</t>
        <table align="left" anchor="tab-moq">
          <name>ACP mapped onto MoQ</name>
          <thead>
            <tr>
              <th align="left">ACP</th>
              <th align="left">MoQ</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">Dialog</td>
              <td align="left">Track namespace <tt>{authority, "acp", adid}</tt></td>
            </tr>
            <tr>
              <td align="left">Authoritative log</td>
              <td align="left">The track named <tt>log</tt>, published by the ordering authority</td>
            </tr>
            <tr>
              <td align="left">One committed entry</td>
              <td align="left">One object on <tt>log</tt>, with Group equal to <tt>Sequence</tt> and Object 0</td>
            </tr>
            <tr>
              <td align="left">Control plane</td>
              <td align="left">A bidirectional stream in the same session, carrying the <tt>control</tt> preamble</td>
            </tr>
            <tr>
              <td align="left">One asset or media track</td>
              <td align="left">A track of its own in the namespace, named by the application</td>
            </tr>
            <tr>
              <td align="left">Replay after resumption</td>
              <td align="left">
                <tt>SUBSCRIBE</tt> to <tt>log</tt> starting at Group <tt>Tail-Seq</tt> + 1</td>
            </tr>
          </tbody>
        </table>
        <t>Two points in this mapping need stating, because both are places where
an obvious alternative does not work.</t>
        <t>A committed entry is carried as a single object rather than split
across one object per MIME part. Splitting would require a recipient to
reassemble parts before it could verify the digest, and any
reassembly that is not byte-exact turns a verified entry into an
unverified one. One object per entry means the object payload is the
octet string the author digested, and verification is a single pass over
what arrived. Bulk content is separated by the asset reference of
<xref target="assets"/>, not by the object structure.</t>
        <t>The control plane does not ride MoQ control messages. MoQ data tracks
flow from publisher to subscribers, and putting ACP requests inside MoQ
control messages would require an extension to MoQ that this document
cannot define. Using a bidirectional stream in the same session needs no
extension, keeps the preamble framing of
<xref target="binding-common"/>, and lets both participants send
requests. Whether a native MoQ control-message binding is worth
defining is left open.</t>
        <t>Only the ordering authority publishes <tt>log</tt>, and it publishes
every committed entry including those a client authored. A single
authoritative track is what makes recovery a subscription: the client
subscribes from the group above its tail and receives exactly the
entries it is missing, in order, from whatever cache can serve them.
Relay caching is an optimization and not a store. The ordering authority
MUST be able to serve the whole retained range itself, and a subscriber
MUST NOT treat an object as committed until its digest verifies.</t>
      </section>
      <section anchor="binding-wt">
        <name>WebTransport Binding</name>
        <t>This binding runs ACP over WebTransport
<xref target="I-D.ietf-webtrans-http3"/>, and therefore over HTTP/3
<xref target="RFC9114"/> and QUIC <xref target="RFC9000"/>. It is the
binding to use where one endpoint is a browser or another environment
that offers WebTransport but not a general QUIC stack.</t>
        <t>The request target of <xref target="m-initiate"/> is already an
<tt>https</tt> origin and path, so the client opens a WebTransport
session to it directly with an extended CONNECT. The
session is the dialog's transport for as long as it lives, and it may
carry more than one dialog, since every stream is identified by its
preamble and every message by its <tt>ADID</tt>.</t>
        <table align="left" anchor="tab-wt">
          <name>ACP mapped onto WebTransport</name>
          <thead>
            <tr>
              <th align="left">ACP</th>
              <th align="left">WebTransport</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">Control plane</td>
              <td align="left">The first bidirectional stream the client opens in the session, carrying the <tt>control</tt> preamble</td>
            </tr>
            <tr>
              <td align="left">One log entry</td>
              <td align="left">One unidirectional stream opened by the entry's author, carrying the <tt>log</tt> preamble, closed when the entry is complete</td>
            </tr>
            <tr>
              <td align="left">One asset</td>
              <td align="left">One unidirectional stream carrying the <tt>asset</tt> preamble, at lower priority than <tt>log</tt></td>
            </tr>
            <tr>
              <td align="left">Progress traffic</td>
              <td align="left">QUIC datagrams <xref target="RFC9297"/></td>
            </tr>
            <tr>
              <td align="left">Connection loss</td>
              <td align="left">Session closure or abort</td>
            </tr>
            <tr>
              <td align="left">Change of network path</td>
              <td align="left">QUIC connection migration; the dialog stays <tt>ACTIVE</tt></td>
            </tr>
          </tbody>
        </table>
        <t>Because a log entry occupies its own stream, an entry carrying a large
body cannot delay the control plane or another entry, and several
entries and assets may be in flight at once. A sender SHOULD set stream
priority so that <tt>control</tt> outranks <tt>log</tt> and
<tt>log</tt> outranks <tt>asset</tt>.</t>
        <t>Progress datagrams are limited in size by the path MTU and are neither
delivered nor ordered. A binding MUST NOT put anything on them that the
log or the state machine depends on, and a recipient MUST tolerate
losing any of them. Where datagrams are unavailable, progress traffic
MAY be sent on the control channel, in which case it MUST still be
excluded from the log.</t>
      </section>
    </section>
    <section anchor="security">
      <name>Security Considerations</name>
      <t>ACP defines no key exchange, no authentication mechanism, and no
confidentiality mechanism of its own. It is a session protocol that
assumes it is given a channel with three properties: the peer is
authenticated, the channel is confidential and integrity-protected, and
messages are not delivered to anyone else. Every binding in
<xref target="bindings"/> provides these through QUIC
<xref target="RFC9000"/>, which mandates TLS 1.3. ACP MUST NOT be used
over a transport that does not provide them, and an implementation MUST
NOT fall back to such a transport.</t>
      <t>Who a participant is, and what it may do, are decided above and below
ACP. Below it, the channel tells each endpoint who the peer is; a
deployment identifying agents by workload uses a workload identity
<xref target="I-D.ietf-wimse-workload-creds"/>. Above it, the ordering
authority decides whether an authenticated peer may append to a given
dialog. ACP assumes both decisions have been made correctly and does not
re-make them.</t>
      <section anchor="sec-adid">
        <name>Dialog Identifiers</name>
        <t>An ADID is 128 bits drawn from a random source
<xref target="RFC4086"/>, so it cannot be guessed at any useful rate.
That property is doing real work: several places in this document
answer a request about a dialog the sender is not a participant of, and
rely on the sender not having found the dialog by searching. An
implementation MUST NOT generate ADIDs from a counter, a timestamp, or
any other low-entropy source, and MUST NOT reuse one.</t>
        <t>Knowledge of an ADID is nonetheless not authority to use it. A server
MUST authorize every request against the dialog's participants
independently of whether the request names the dialog correctly, and
MUST NOT treat a correct ADID as proof that the sender belongs to the
dialog. Because an ADID is a bearer string that appears in every
message, it will end up in logs, proxies, and error reports; a
deployment SHOULD treat a leaked ADID as a reason to terminate and
re-initiate rather than as a harmless disclosure.</t>
        <t><xref target="m-resume"/> has a server answer <tt>403</tt> to a sender
it recognizes and <tt>404</tt> to one it does not, which reveals that
the dialog exists. That is deliberate: a client recovering on a new
device needs to know whether to resume or to start over. A server
concerned about the disclosure MAY answer <tt>404</tt> to every sender
it has not authorized, at the cost of making recovery from a lost
credential indistinguishable from a lost dialog.</t>
      </section>
      <section anchor="sec-authz">
        <name>Authorizing Session Establishment</name>
        <t>Establishing a dialog requires the client to obtain authorization, and
ACP does that with existing OAuth mechanisms rather than defining one
of its own. The token it obtains is carried in the
<tt>Authorization</tt> field of <xref target="fields"/>.</t>
        <t>Within a trust domain the client presents a Transaction Token
<xref target="I-D.ietf-oauth-transaction-tokens"/>, obtained from the
workload identity it already holds. A Transaction Token carries the
delegation context of one transaction, not the standing
authority of a workload, which is what lets the ordering authority
authorize a dialog against the principal the client acts for and not
only against the workload that asked. Its narrow scope and short
lifetime are also what make it safe to carry in a header field that
will end up in logs.</t>
        <t>Across trust domains there is no issuer both sides accept, so the
client instead trades the credential it holds for one the remote domain
accepts using OAuth 2.0 Token Exchange <xref target="RFC8693"/>, naming
the remote service as the audience.</t>
        <t>Because the token in <tt>Authorization</tt> is not the credential the
channel authenticated, the two must be tied together: the workload
identity the channel authenticated, the <tt>From</tt> of the request,
and the identity the token authorizes MUST all name the same
participant (<xref target="identity"/>). A server that cannot
establish that, or that cannot validate the token, answers
<tt>403</tt>. A token is minted per request, not per dialog: a
transaction token is short-lived, and a <tt>RESUME</tt> days after its
<tt>INITIATE</tt> is a new transaction carrying a new token.</t>
      </section>
    </section>
    <section anchor="iana">
      <name>IANA Considerations</name>
      <t>This document requests that IANA create registries for the protocol's
namespaces. The registries are listed here so that the namespace they
govern is reserved; their registration procedures and initial contents
will be specified in a later revision of this document.</t>
      <section anchor="acp-registries">
        <name>ACP Registries</name>
        <t>IANA is requested to create an "Agent Communication Protocol (ACP)
Parameters" registry group containing the registries in
<xref target="tab-iana"/>.</t>
        <table align="left" anchor="tab-iana">
          <name>Requested ACP registries</name>
          <thead>
            <tr>
              <th align="left">Registry</th>
              <th align="left">Governs</th>
              <th align="left">Section</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">ACP Methods</td>
              <td align="left">Request method tokens</td>
              <td align="left">
                <xref target="methods-detail"/></td>
            </tr>
            <tr>
              <td align="left">ACP Status Codes</td>
              <td align="left">Numeric response codes</td>
              <td align="left">
                <xref target="status-codes"/></td>
            </tr>
            <tr>
              <td align="left">ACP Header Fields</td>
              <td align="left">Header field names</td>
              <td align="left">
                <xref target="fields"/></td>
            </tr>
            <tr>
              <td align="left">ACP Entry Types</td>
              <td align="left">
                <tt>Entry-Type</tt> values</td>
              <td align="left">
                <xref target="log"/></td>
            </tr>
            <tr>
              <td align="left">ACP Hash Algorithms</td>
              <td align="left">
                <tt>hash-alg</tt> prefixes</td>
              <td align="left">
                <xref target="digest"/></td>
            </tr>
            <tr>
              <td align="left">ACP Channel Names</td>
              <td align="left">Stream preamble channel names</td>
              <td align="left">
                <xref target="binding-common"/></td>
            </tr>
          </tbody>
        </table>
      </section>
    </section>
  </middle>
  <back>
    <references anchor="sec-combined-references">
      <name>References</name>
      <references anchor="sec-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 fullname="S. Bradner" initials="S." surname="Bradner"/>
            <date month="March" year="1997"/>
            <abstract>
              <t>In many standards track documents several words are used to signify the requirements in the specification. These words are often capitalized. This document defines these words as they should be interpreted in IETF documents. This document specifies an Internet Best Current Practices for the Internet Community, and requests discussion and suggestions for improvements.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="2119"/>
          <seriesInfo name="DOI" value="10.17487/RFC2119"/>
        </reference>
        <reference anchor="RFC8174" target="https://www.rfc-editor.org/info/rfc8174">
          <front>
            <title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title>
            <author fullname="B. Leiba" initials="B." surname="Leiba"/>
            <date month="May" year="2017"/>
            <abstract>
              <t>RFC 2119 specifies common key words that may be used in protocol specifications. This document aims to reduce the ambiguity by clarifying that only UPPERCASE usage of the key words have the defined special meanings.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="8174"/>
          <seriesInfo name="DOI" value="10.17487/RFC8174"/>
        </reference>
        <reference anchor="RFC2046" target="https://www.rfc-editor.org/info/rfc2046" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.2046.xml">
          <front>
            <title>Multipurpose Internet Mail Extensions (MIME) Part Two: Media Types</title>
            <author fullname="N. Freed" initials="N." surname="Freed"/>
            <author fullname="N. Borenstein" initials="N." surname="Borenstein"/>
            <date month="November" year="1996"/>
            <abstract>
              <t>This second document defines the general structure of the MIME media typing system and defines an initial set of media types. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="2046"/>
          <seriesInfo name="DOI" value="10.17487/RFC2046"/>
        </reference>
        <reference anchor="RFC3986" target="https://www.rfc-editor.org/info/rfc3986" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.3986.xml">
          <front>
            <title>Uniform Resource Identifier (URI): Generic Syntax</title>
            <author fullname="T. Berners-Lee" initials="T." surname="Berners-Lee"/>
            <author fullname="R. Fielding" initials="R." surname="Fielding"/>
            <author fullname="L. Masinter" initials="L." surname="Masinter"/>
            <date month="January" year="2005"/>
            <abstract>
              <t>A Uniform Resource Identifier (URI) is a compact sequence of characters that identifies an abstract or physical resource. This specification defines the generic URI syntax and a process for resolving URI references that might be in relative form, along with guidelines and security considerations for the use of URIs on the Internet. The URI syntax defines a grammar that is a superset of all valid URIs, allowing an implementation to parse the common components of a URI reference without knowing the scheme-specific requirements of every possible identifier. This specification does not define a generative grammar for URIs; that task is performed by the individual specifications of each URI scheme. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="66"/>
          <seriesInfo name="RFC" value="3986"/>
          <seriesInfo name="DOI" value="10.17487/RFC3986"/>
        </reference>
        <reference anchor="RFC4086" target="https://www.rfc-editor.org/info/rfc4086" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.4086.xml">
          <front>
            <title>Randomness Requirements for Security</title>
            <author fullname="D. Eastlake 3rd" initials="D." surname="Eastlake 3rd"/>
            <author fullname="J. Schiller" initials="J." surname="Schiller"/>
            <author fullname="S. Crocker" initials="S." surname="Crocker"/>
            <date month="June" year="2005"/>
            <abstract>
              <t>Security systems are built on strong cryptographic algorithms that foil pattern analysis attempts. However, the security of these systems is dependent on generating secret quantities for passwords, cryptographic keys, and similar quantities. The use of pseudo-random processes to generate secret quantities can result in pseudo-security. A sophisticated attacker may find it easier to reproduce the environment that produced the secret quantities and to search the resulting small set of possibilities than to locate the quantities in the whole of the potential number space.</t>
              <t>Choosing random quantities to foil a resourceful and motivated adversary is surprisingly difficult. This document points out many pitfalls in using poor entropy sources or traditional pseudo-random number generation techniques for generating such quantities. It recommends the use of truly random hardware techniques and shows that the existing hardware on many systems can be used for this purpose. It provides suggestions to ameliorate the problem when a hardware solution is not available, and it gives examples of how large such quantities need to be for some applications. This document specifies an Internet Best Current Practices for the Internet Community, and requests discussion and suggestions for improvements.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="106"/>
          <seriesInfo name="RFC" value="4086"/>
          <seriesInfo name="DOI" value="10.17487/RFC4086"/>
        </reference>
        <reference anchor="RFC4648" target="https://www.rfc-editor.org/info/rfc4648" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.4648.xml">
          <front>
            <title>The Base16, Base32, and Base64 Data Encodings</title>
            <author fullname="S. Josefsson" initials="S." surname="Josefsson"/>
            <date month="October" year="2006"/>
            <abstract>
              <t>This document describes the commonly used base 64, base 32, and base 16 encoding schemes. It also discusses the use of line-feeds in encoded data, use of padding in encoded data, use of non-alphabet characters in encoded data, use of different encoding alphabets, and canonical encodings. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="4648"/>
          <seriesInfo name="DOI" value="10.17487/RFC4648"/>
        </reference>
        <reference anchor="RFC5234" target="https://www.rfc-editor.org/info/rfc5234" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.5234.xml">
          <front>
            <title>Augmented BNF for Syntax Specifications: ABNF</title>
            <author fullname="D. Crocker" initials="D." role="editor" surname="Crocker"/>
            <author fullname="P. Overell" initials="P." surname="Overell"/>
            <date month="January" year="2008"/>
            <abstract>
              <t>Internet technical specifications often need to define a formal syntax. Over the years, a modified version of Backus-Naur Form (BNF), called Augmented BNF (ABNF), has been popular among many Internet specifications. The current specification documents ABNF. It balances compactness and simplicity with reasonable representational power. The differences between standard BNF and ABNF involve naming rules, repetition, alternatives, order-independence, and value ranges. This specification also supplies additional rule definitions and encoding for a core lexical analyzer of the type common to several Internet specifications. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="68"/>
          <seriesInfo name="RFC" value="5234"/>
          <seriesInfo name="DOI" value="10.17487/RFC5234"/>
        </reference>
        <reference anchor="RFC6234" target="https://www.rfc-editor.org/info/rfc6234" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.6234.xml">
          <front>
            <title>US Secure Hash Algorithms (SHA and SHA-based HMAC and HKDF)</title>
            <author fullname="D. Eastlake 3rd" initials="D." surname="Eastlake 3rd"/>
            <author fullname="T. Hansen" initials="T." surname="Hansen"/>
            <date month="May" year="2011"/>
            <abstract>
              <t>Federal Information Processing Standard, FIPS</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6234"/>
          <seriesInfo name="DOI" value="10.17487/RFC6234"/>
        </reference>
        <reference anchor="RFC6838" target="https://www.rfc-editor.org/info/rfc6838" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.6838.xml">
          <front>
            <title>Media Type Specifications and Registration Procedures</title>
            <author fullname="N. Freed" initials="N." surname="Freed"/>
            <author fullname="J. Klensin" initials="J." surname="Klensin"/>
            <author fullname="T. Hansen" initials="T." surname="Hansen"/>
            <date month="January" year="2013"/>
            <abstract>
              <t>This document defines procedures for the specification and registration of media types for use in HTTP, MIME, and other Internet protocols. This memo documents an Internet Best Current Practice.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="13"/>
          <seriesInfo name="RFC" value="6838"/>
          <seriesInfo name="DOI" value="10.17487/RFC6838"/>
        </reference>
        <reference anchor="RFC8693" target="https://www.rfc-editor.org/info/rfc8693" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8693.xml">
          <front>
            <title>OAuth 2.0 Token Exchange</title>
            <author fullname="M. Jones" initials="M." surname="Jones"/>
            <author fullname="A. Nadalin" initials="A." surname="Nadalin"/>
            <author fullname="B. Campbell" initials="B." role="editor" surname="Campbell"/>
            <author fullname="J. Bradley" initials="J." surname="Bradley"/>
            <author fullname="C. Mortimore" initials="C." surname="Mortimore"/>
            <date month="January" year="2020"/>
            <abstract>
              <t>This specification defines a protocol for an HTTP- and JSON-based Security Token Service (STS) by defining how to request and obtain security tokens from OAuth 2.0 authorization servers, including security tokens employing impersonation and delegation.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8693"/>
          <seriesInfo name="DOI" value="10.17487/RFC8693"/>
        </reference>
        <reference anchor="RFC9000" target="https://www.rfc-editor.org/info/rfc9000" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.9000.xml">
          <front>
            <title>QUIC: A UDP-Based Multiplexed and Secure Transport</title>
            <author fullname="J. Iyengar" initials="J." role="editor" surname="Iyengar"/>
            <author fullname="M. Thomson" initials="M." role="editor" surname="Thomson"/>
            <date month="May" year="2021"/>
            <abstract>
              <t>This document defines the core of the QUIC transport protocol. QUIC provides applications with flow-controlled streams for structured communication, low-latency connection establishment, and network path migration. QUIC includes security measures that ensure confidentiality, integrity, and availability in a range of deployment circumstances. Accompanying documents describe the integration of TLS for key negotiation, loss detection, and an exemplary congestion control algorithm.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9000"/>
          <seriesInfo name="DOI" value="10.17487/RFC9000"/>
        </reference>
        <reference anchor="RFC9110" target="https://www.rfc-editor.org/info/rfc9110" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.9110.xml">
          <front>
            <title>HTTP Semantics</title>
            <author fullname="R. Fielding" initials="R." role="editor" surname="Fielding"/>
            <author fullname="M. Nottingham" initials="M." role="editor" surname="Nottingham"/>
            <author fullname="J. Reschke" initials="J." role="editor" surname="Reschke"/>
            <date month="June" year="2022"/>
            <abstract>
              <t>The Hypertext Transfer Protocol (HTTP) is a stateless application-level protocol for distributed, collaborative, hypertext information systems. This document describes the overall architecture of HTTP, establishes common terminology, and defines aspects of the protocol that are shared by all versions. In this definition are core protocol elements, extensibility mechanisms, and the "http" and "https" Uniform Resource Identifier (URI) schemes.</t>
              <t>This document updates RFC 3864 and obsoletes RFCs 2818, 7231, 7232, 7233, 7235, 7538, 7615, 7694, and portions of 7230.</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="97"/>
          <seriesInfo name="RFC" value="9110"/>
          <seriesInfo name="DOI" value="10.17487/RFC9110"/>
        </reference>
        <reference anchor="RFC9114" target="https://www.rfc-editor.org/info/rfc9114" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.9114.xml">
          <front>
            <title>HTTP/3</title>
            <author fullname="M. Bishop" initials="M." role="editor" surname="Bishop"/>
            <date month="June" year="2022"/>
            <abstract>
              <t>The QUIC transport protocol has several features that are desirable in a transport for HTTP, such as stream multiplexing, per-stream flow control, and low-latency connection establishment. This document describes a mapping of HTTP semantics over QUIC. This document also identifies HTTP/2 features that are subsumed by QUIC and describes how HTTP/2 extensions can be ported to HTTP/3.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9114"/>
          <seriesInfo name="DOI" value="10.17487/RFC9114"/>
        </reference>
        <reference anchor="RFC9297" target="https://www.rfc-editor.org/info/rfc9297" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.9297.xml">
          <front>
            <title>HTTP Datagrams and the Capsule Protocol</title>
            <author fullname="D. Schinazi" initials="D." surname="Schinazi"/>
            <author fullname="L. Pardue" initials="L." surname="Pardue"/>
            <date month="August" year="2022"/>
            <abstract>
              <t>This document describes HTTP Datagrams, a convention for conveying multiplexed, potentially unreliable datagrams inside an HTTP connection.</t>
              <t>In HTTP/3, HTTP Datagrams can be sent unreliably using the QUIC DATAGRAM extension. When the QUIC DATAGRAM frame is unavailable or undesirable, HTTP Datagrams can be sent using the Capsule Protocol, which is a more general convention for conveying data in HTTP connections.</t>
              <t>HTTP Datagrams and the Capsule Protocol are intended for use by HTTP extensions, not applications.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9297"/>
          <seriesInfo name="DOI" value="10.17487/RFC9297"/>
        </reference>
        <reference anchor="RFC9562" target="https://www.rfc-editor.org/info/rfc9562" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.9562.xml">
          <front>
            <title>Universally Unique IDentifiers (UUIDs)</title>
            <author fullname="K. Davis" initials="K." surname="Davis"/>
            <author fullname="B. Peabody" initials="B." surname="Peabody"/>
            <author fullname="P. Leach" initials="P." surname="Leach"/>
            <date month="May" year="2024"/>
            <abstract>
              <t>This specification defines UUIDs (Universally Unique IDentifiers) --
also known as GUIDs (Globally Unique IDentifiers) -- and a Uniform
Resource Name namespace for UUIDs. A UUID is 128 bits long and is
intended to guarantee uniqueness across space and time. UUIDs were
originally used in the Apollo Network Computing System (NCS), later
in the Open Software Foundation's (OSF's) Distributed Computing
Environment (DCE), and then in Microsoft Windows platforms.</t>
              <t>This specification is derived from the OSF DCE specification with the
kind permission of the OSF (now known as "The Open Group"). Information from earlier versions of the OSF DCE specification have
been incorporated into this document. This document obsoletes RFC
4122.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9562"/>
          <seriesInfo name="DOI" value="10.17487/RFC9562"/>
        </reference>
        <reference anchor="I-D.ietf-webtrans-http3" target="https://datatracker.ietf.org/doc/html/draft-ietf-webtrans-http3-16" xml:base="https://bib.ietf.org/public/rfc/bibxml3/reference.I-D.ietf-webtrans-http3.xml">
          <front>
            <title>WebTransport over HTTP/3</title>
            <author fullname="Alan Frindell" initials="A." surname="Frindell">
              <organization>Meta</organization>
            </author>
            <author fullname="Eric Kinnear" initials="E." surname="Kinnear">
              <organization>Apple Inc.</organization>
            </author>
            <author fullname="Victor Vasiliev" initials="V." surname="Vasiliev">
              <organization>Google</organization>
            </author>
            <date day="6" month="July" year="2026"/>
            <abstract>
              <t>WebTransport over HTTP/3 is a binding of the WebTransport protocol framework [OVERVIEW] to HTTP/3 [HTTP3]. It provides support for unidirectional streams, bidirectional streams, and datagrams, all multiplexed within the same HTTP/3 connection. WebTransport enables application clients constrained by the Web security model to communicate with a remote application server using a secure multiplexed transport.</t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-webtrans-http3-16"/>
        </reference>
        <reference anchor="I-D.ietf-moq-transport" target="https://datatracker.ietf.org/doc/html/draft-ietf-moq-transport-22">
          <front>
            <title>Media over QUIC Transport</title>
            <author initials="S." surname="Nandakumar" fullname="Suhas Nandakumar">
              <organization>Cisco</organization>
            </author>
            <author initials="V." surname="Vasiliev" fullname="Victor Vasiliev">
              <organization>Google</organization>
            </author>
            <author initials="I." surname="Swett" fullname="Ian Swett">
              <organization>Google</organization>
            </author>
            <author initials="A." surname="Frindell" fullname="Alan Frindell">
              <organization>Meta</organization>
            </author>
            <date month="October" day="1" year="2026"/>
            <abstract>
              <t>   This document defines Media over QUIC Transport (MOQT), a publish/
   subscribe protocol that runs over QUIC and WebTransport.  MOQT
   leverages the features of these transports, such as streams,
   datagrams, priorities, and partial reliability.  MOQT operates both
   point-to-point and through intermediate relays, enabling scalable
   low-latency delivery.  Despite its name, MOQT is media agnostic and
   can be used for a wide range of use cases.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-moq-transport-22"/>
        </reference>
        <reference anchor="I-D.ietf-wimse-workload-creds" target="https://datatracker.ietf.org/doc/html/draft-ietf-wimse-workload-creds-02" xml:base="https://bib.ietf.org/public/rfc/bibxml3/reference.I-D.ietf-wimse-workload-creds.xml">
          <front>
            <title>WIMSE Workload Credentials</title>
            <author fullname="Brian Campbell" initials="B." surname="Campbell">
              <organization>Ping Identity</organization>
            </author>
            <author fullname="Joseph A. Salowey" initials="J. A." surname="Salowey">
              <organization>CyberArk</organization>
            </author>
            <author fullname="Arndt Schwenkschuster" initials="A." surname="Schwenkschuster">
              <organization>Defakto Security</organization>
            </author>
            <author fullname="Yaron Sheffer" initials="Y." surname="Sheffer">
              <organization>Intuit</organization>
            </author>
            <author fullname="Yaroslav Rosomakho" initials="Y." surname="Rosomakho">
              <organization>Zscaler</organization>
            </author>
            <date day="2" month="July" year="2026"/>
            <abstract>
              <t>The WIMSE architecture defines authentication and authorization for software workloads in a variety of runtime environments, from the most basic ones up to complex multi-service, multi-cloud, multi- tenant deployments. This document defines the credentials that workloads use to represent their identity. They can be used in various protocols to authenticate workloads to each other. To use these credentials, workloads must provide proof of possession of the associated private key material, which is covered in other documents. This document focuses on the credentials alone, independent of the proof-of- possession mechanism.</t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-wimse-workload-creds-02"/>
        </reference>
        <reference anchor="I-D.ietf-oauth-transaction-tokens" target="https://datatracker.ietf.org/doc/html/draft-ietf-oauth-transaction-tokens-11" xml:base="https://bib.ietf.org/public/rfc/bibxml3/reference.I-D.ietf-oauth-transaction-tokens.xml">
          <front>
            <title>Transaction Tokens</title>
            <author fullname="Atul Tulshibagwale" initials="A." surname="Tulshibagwale">
              <organization>CrowdStrike</organization>
            </author>
            <author fullname="George Fletcher" initials="G." surname="Fletcher">
              <organization>Practical Identity LLC</organization>
            </author>
            <author fullname="Pieter Kasselman" initials="P." surname="Kasselman">
              <organization>Defakto Security</organization>
            </author>
            <date day="30" month="July" year="2026"/>
            <abstract>
              <t>Transaction Tokens (Txn-Tokens) are designed to maintain and propagate user identity, workload identity and authorization context throughout the Call Chain within a trusted domain during the processing of external requests (e.g. such as API calls) or requests initiated internally within the Trust Domain. Txn-Tokens ensure that this context is preserved throughout the Call Chain thereby enhancing security and consistency in complex, multi-service architectures.</t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-oauth-transaction-tokens-11"/>
        </reference>
        <reference anchor="SPIFFE" target="https://spiffe.io/">
          <front>
            <title>Secure Production Identity Framework for Everyone (SPIFFE)</title>
            <author>
              <organization>CNCF SPIFFE Project</organization>
            </author>
            <date year="2025"/>
          </front>
          <annotation>Defines the workload identity form permitted for a participant identifier (<xref target="participants"/>).</annotation>
        </reference>
      </references>
      <references anchor="sec-informative-references">
        <name>Informative References</name>
        <reference anchor="RFC3261" target="https://www.rfc-editor.org/info/rfc3261" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.3261.xml">
          <front>
            <title>SIP: Session Initiation Protocol</title>
            <author fullname="J. Rosenberg" initials="J." surname="Rosenberg"/>
            <author fullname="H. Schulzrinne" initials="H." surname="Schulzrinne"/>
            <author fullname="G. Camarillo" initials="G." surname="Camarillo"/>
            <author fullname="A. Johnston" initials="A." surname="Johnston"/>
            <author fullname="J. Peterson" initials="J." surname="Peterson"/>
            <author fullname="R. Sparks" initials="R." surname="Sparks"/>
            <author fullname="M. Handley" initials="M." surname="Handley"/>
            <author fullname="E. Schooler" initials="E." surname="Schooler"/>
            <date month="July" year="2002"/>
            <abstract>
              <t>This document describes Session Initiation Protocol (SIP), an application-layer control (signaling) protocol for creating, modifying, and terminating sessions with one or more participants. These sessions include Internet telephone calls, multimedia distribution, and multimedia conferences. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="3261"/>
          <seriesInfo name="DOI" value="10.17487/RFC3261"/>
        </reference>
        <reference anchor="I-D.manyfolks-agentproto-arch" target="https://datatracker.ietf.org/doc/html/draft-manyfolks-agentproto-arch-00" xml:base="https://bib.ietf.org/public/rfc/bibxml3/reference.I-D.manyfolks-agentproto-arch.xml">
          <front>
            <title>Architecture for AI Agent Communications on the Internet</title>
            <author fullname="Jonathan Rosenberg" initials="J." surname="Rosenberg">
              <organization>jdrosen.net</organization>
            </author>
            <author fullname="Zaheduzzaman Sarker" initials="Z." surname="Sarker">
              <organization>Nokia</organization>
            </author>
            <author fullname="Tirumaleswar Reddy.K" initials="T." surname="Reddy.K">
              <organization>Nokia</organization>
            </author>
            <author fullname="Kehan Yao" initials="K." surname="Yao">
              <organization>China Mobile</organization>
            </author>
            <author fullname="Dapeng Liu" initials="D." surname="Liu">
              <organization>Alibaba</organization>
            </author>
            <author fullname="Suresh Krishnan" initials="S." surname="Krishnan">
              <organization>Cisco</organization>
            </author>
            <date day="30" month="October" year="2026"/>
            <abstract>
              <t>This document defines the terminology and architecture for AI agent communications protocols over the Internet. It provides the foundational architectural elements for the Agent Communications Protocol (ACP) - also known as agentproto - a new protocol to be developed in the IETF. ACP enables communication between user agent clients and AI agents, between AI Agents and other AI Agents, or between AI Agents and tools. All three of these interaction patterns - and the many use cases therein - require a session-like protocol which handles lifecycle management, including creation, modification, deletion and so on - along with the exchange of input and output. These session-like associations can be extremely long lived - running for hours or even days - and span multiple IP hosts used by the both the principal and by the agent. They can also be highly intermittent with asynchronous responses. All of these mean a new type of protocol is needed.</t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-manyfolks-agentproto-arch-00"/>
        </reference>
      </references>
    </references>
    <?line 1970?>

<section numbered="false" anchor="acknowledgements">
      <name>Acknowledgements</name>
      <t>TBD.</t>
    </section>
  </back>
  <!-- ##markdown-source:
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
YdLYvF4jdO7yF+3MvihUxAWXZ/QDS3w1ZIB/1rnwUen0GsJfKwhOABvF59Fq
a/5IemuT9E2dpLKYVrrXs2buh4178EF259vVuOtxzVAx+NOW8L1Npzs2eaHj
PTY2PQ4/pA0mFUip6PwP6O5DSlONNMW2dQZHVm0r9U4WhdQULGjpFwYr7N8Z
i54phj3jcJirQ3YUJHM2UrNnlCWbSKVpPJ++tzP4uaFptPQ1Ts2NVFjKm1Uo
4i88QRuHg1Qiy6M6Kh5PD+bV9P58fG/6zXx8f1rOx4+n8/n4cLo//2Z6bz6b
PpwHacLwaZouzdkdhLN2x1d5QBuMXiELih4V35EjyHCD6z9fTr+f1a/rPz//
6bfTg1f1nx/v0R9/m/98Sn/c29sLu+bpCKDau2Q51M2InH160t0/cUe0ed3e
bVfrPrhZPFK9GPJo5VGxH6A4eMLQYOX1X/5/OG+7XsS1BwquT4eEH8cnn/+/
oNE4euUds+PDhnYg7TTHLWnaXfkwSD7xgSbTTYpMhrw+0MonI+m+L0eUSraQ
Okfwvbe1JoefDLcvEkCoQJvcmNpIFro4gdgdxi+vUS0yAaQpLyJMoLRKiUBX
pWsaZFpdrDmibLzNef5E9YvvyAAtYJ3jtu26kOw68TFTSa3galLlvQ0ZTJC5
3LI+zJae6sPk/qNHChcxaBQHEpnNoeTiaLTBlO+SMnn0UL4b/IPyRfNLlq58
wIsdQ2PsMpPyfF9FLm4tYzwRtdVcW/2tilbVZrFMDDgOoxzecvmjBWEynx0g
GstlDJbwE9gbuD5KdLqKiPIt1FBBIHPJxTKFhLGs2qWVmgWpuH6TInnmA8YQ
p2AFJUtlHUjAZ9CaqVH3tDHfg11376a8Vy0uh0TftlJewaWIHj669yiiP3l9
faQ8+BHoLOfgk0hJRPqIt4uC5tlJpYlgkpN6pvzfbJmWtr8AN5tK/wS2JpjY
xpz1EY7lnOGeWpatln16b1Hz2jeLlbxU8bKKj9GN+bzfae19jqKNYa5R8GCF
kYdOjCL4gL6Usv+jDB6Rqek8tb+r10eE4oVUdSCBaoPfJW7/6BzBMN/Mn4Xa
4dIU0ONQmztQTFPBDogrLVgntRl0nj/bYvgCRSdK8sH+oS5mSI3JHu+HNPXa
3y3E6Y8q6j9edT//pT+d/bD/5tezX/7+/Nff/ja9uH/1qJwfvm8vfjiof756
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
Ricggoalp2VUtUbsrMTCwgqnVnhE0OfPPeZvAXmmyedsUNP1kHscGQtbLCCR
4u3Bp3m5jZHreRWUdVA57ET7Z4+K48wcl4NJsaPL5u0CSCYoUhQgsR5VcBOo
VqrUCD7VZpWDcc1eMf0pTeRFNY/xj4D4xyiHPYmiQUXffC1NjzYUKumPd5+l
SbG+bI4b4l5LkJgCXI6qSv6R35BXXdtcsIcvzMiS8sNpevQ4O1Ah9Ys0MIT2
AYz463jhKIUd5G3hY9PXFXmp9NulZhcR9PmOT5iEiOgtHj36/06FHf43qrB/
rGme1BXtHWkvUc+GHS/y36an9levvr94vOqH0/O3z99dfT+///Dh8uD19OSH
593V9fXhbPVN8/0PF93Z6U49hbOz80XkfP0jl/WenGGpRGTj4tv/gkVhFz+y
i6u/P5y+3H/w9OHpi+Fvf/2m/+ZR+/Pil0ffvPmPg59O5stFV//H48P2yb/9
NHv5+U5iGuwXvOf/1tD+Mcv+afsDmyGRskI8NkZ5xRJC9oSgl2ujJTK4qJkk
MVRnUtdJJG5xU3dLYY569MjVr6TUYcutF+WWmZUvXpWJP8YhsQCkkbH25zZM
pFVU3Y6CMYZH7P9mK9p4bXy7Jirz3hrVh9hq8fFBhmY2DnjWl38X4AVdD/oj
Nl60pXO3bi76gq03zZUWHFcXF5UJWuXVpV0kV3GYcQKEyqOHo+LR4aj45r6M
EM3qRuGKI1IWfyJTZSXIcakg4O+ZQpKcm0wriPzDgit/OxbefU1SvUIvm/Zc
0eAG8IZsH0FH6ORaj5i2UXdsA8vtq/hW1iPXeghMWy4/YdTZVSP6cumsTSx/
K9E/mirFj7NLuFytBZaGHGFEHUueMDIuIFHjIMkGgy8NgazLjiBw61A/uu8Q
y9Cv6sNTfFs2n39X1L6FDcqHz9X8kuWNjdgnL1raGZpq/4lmhNN2zwQE7U0s
ToYzZVorIP1j855Rx+iYHmVSZYGkhE6TgGnu/nHC/BG5YOlBn40q2RRH3zzi
ovOVW+C7B+HRo0Ai0EToy1/+/pe+f3zxw9Xst+7ix9e/XP35L68vT2b792f7
39/b//lfL6bvnz8++fP9RzfJ8o2xfsm7vlGJfBCUKSTK4/vV32azi/u/XZ6v
n737Zfjzz7N/uzp/fPDmzz/1z89W/aOz5/Px+b+9e/jn/pEX7Qc7RPuX3CqK
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

-->

</rfc>
