<?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.31 (Ruby 2.6.10) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-nandakumar-atproto-atom-00" category="std" consensus="true" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.31.0 -->
  <front>
    <title abbrev="ATOM">ATOM: AT Protocol Over MoQ Transport</title>
    <seriesInfo name="Internet-Draft" value="draft-nandakumar-atproto-atom-00"/>
    <author initials="S." surname="Nandakumar" fullname="Suhas Nandakumar">
      <organization>Cisco</organization>
      <address>
        <email>snandaku@cisco.com</email>
      </address>
    </author>
    <author initials="C." surname="Jennings" fullname="Cullen Jennings">
      <organization>Cisco Systems</organization>
      <address>
        <email>fluffy@cisco.com</email>
      </address>
    </author>
    <date year="2026" month="February" day="28"/>
    <area>Applications and Real-Time</area>
    <workgroup>Media Over QUIC</workgroup>
    <keyword>authenticated transfer</keyword>
    <keyword>AT Protocol</keyword>
    <keyword>MOQT</keyword>
    <keyword>decentralized social</keyword>
    <keyword>firehose</keyword>
    <abstract>
      <?line 93?>

<t>This document specifies how the Authenticated Transfer (AT) Protocol
can leverage Media over QUIC Transport (MOQT) for efficient data
synchronization across decentralized social networks. The AT Protocol's
firehose event stream and repository synchronization mechanisms map
naturally to MOQT's publish/subscribe model, enabling scalable relay
infrastructure, priority-based delivery, and improved resilience for
large-scale social data distribution.</t>
      <t>This specification addresses the challenges of the current WebSocket-based
transport and demonstrates how MOQT's relay architecture, group-based
caching, and multiplexed streams provide significant benefits for
AT Protocol deployments at scale.</t>
    </abstract>
    <note removeInRFC="true">
      <name>About This Document</name>
      <t>
        The latest revision of this draft can be found at <eref target="https://snandaku.github.io/draft-nandakumar-atproto-atom/draft-nandakumar-atproto-atom.html"/>.
        Status information for this document may be found at <eref target="https://datatracker.ietf.org/doc/draft-nandakumar-atproto-atom/"/>.
      </t>
      <t>
        Discussion of this document takes place on the
        Media Over QUIC Working Group mailing list (<eref target="mailto:moq@ietf.org"/>),
        which is archived at <eref target="https://mailarchive.ietf.org/arch/browse/moq/"/>.
        Subscribe at <eref target="https://www.ietf.org/mailman/listinfo/moq/"/>.
      </t>
      <t>Source for this draft and an issue tracker can be found at
        <eref target="https://github.com/snandaku/draft-nandakumar-atproto-atom"/>.</t>
    </note>
  </front>
  <middle>
    <?line 108?>

<section anchor="introduction">
      <name>Introduction</name>
      <t>The Authenticated Transfer (AT) Protocol <xref target="AT-ARCH"/> provides a framework
for decentralized social web applications using self-certifying data
repositories. The protocol enables users to maintain control over their
data while participating in a federated network of Personal Data Servers
(PDS), relays, and application views (AppViews).</t>
      <t>Currently, AT Protocol relies on two primary transport mechanisms for
data synchronization:</t>
      <ul spacing="normal">
        <li>
          <t><strong>HTTP</strong>: Used for batch repository exports via CAR (Content Addressable
Archive) files</t>
        </li>
        <li>
          <t><strong>WebSocket</strong>: Used for real-time event streams (firehose) with
CBOR-encoded messages</t>
        </li>
      </ul>
      <t>While functional, these transport mechanisms face significant challenges
at scale, particularly for the firehose event stream that must distribute
updates across a network with millions of users generating billions of
records.</t>
      <t>This document defines how Media over QUIC Transport (MOQT) <xref target="MoQ-TRANSPORT"/>
can serve as an enhanced transport for AT Protocol. MOQT enables low-latency
delivery while relay caching supports multiple latency spectrums from
real-time to eventual consistency. The protocol's native publish/subscribe
model, relay infrastructure, and priority-based delivery address current
scalability and resilience challenges.</t>
      <section anchor="current-at-protocol-architecture">
        <name>Current AT Protocol Architecture</name>
        <artwork><![CDATA[
AT Protocol Network Architecture:

                           ┌─────────────────┐
                           │   AppView       │
                           │  (Indexer)      │
                           │                 │
                           └────────▲────────┘
                                    │
                              Firehose (WS)
                                    │
                           ┌────────┴────────┐
                           │     Relay       │
                           │  (Aggregator)   │
                           └────────▲────────┘
                                    │
              ┌─────────────────────┼─────────────────────┐
              │                     │                     │
       ┌──────┴──────┐       ┌──────┴──────┐       ┌──────┴──────┐
       │    PDS A    │       │    PDS B    │       │    PDS C    │
       │  (Hosts)    │       │  (Hosts)    │       │  (Hosts)    │
       │ - User 1    │       │ - User 2    │       │ - User 3    │
       │ - User 2    │       │ - User 5    │       │ - User 6    │
       └─────────────┘       └─────────────┘       └─────────────┘
]]></artwork>
        <t>The current architecture comprises:</t>
        <dl>
          <dt>Personal Data Server (PDS):</dt>
          <dd>
            <t>Hosts user accounts and their data repositories. Each PDS provides
a firehose endpoint for real-time updates and HTTP endpoints for
repository exports.</t>
          </dd>
          <dt>Relay:</dt>
          <dd>
            <t>Aggregates firehose streams from multiple PDS instances into a
unified event stream. Full-network relays attempt to include all
PDS instances in the network.</t>
          </dd>
          <dt>AppView:</dt>
          <dd>
            <t>Application-specific indexing services that consume the firehose
to build aggregated views (e.g., feeds, search, analytics).</t>
          </dd>
        </dl>
      </section>
      <section anchor="requirements-language">
        <name>Requirements Language</name>
        <t>The key words "<bcp14>MUST</bcp14>", "<bcp14>MUST NOT</bcp14>", "<bcp14>REQUIRED</bcp14>", "<bcp14>SHALL</bcp14>", "<bcp14>SHALL
NOT</bcp14>", "<bcp14>SHOULD</bcp14>", "<bcp14>SHOULD NOT</bcp14>", "<bcp14>RECOMMENDED</bcp14>", "<bcp14>NOT RECOMMENDED</bcp14>",
"<bcp14>MAY</bcp14>", and "<bcp14>OPTIONAL</bcp14>" 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>
        <?line -18?>

</section>
    </section>
    <section anchor="challenges-with-current-transport">
      <name>Challenges with Current Transport</name>
      <t>The current WebSocket-based transport for AT Protocol faces several
challenges that impact scalability, reliability, and operational
efficiency.</t>
      <section anchor="scalability-limitations">
        <name>Scalability Limitations</name>
        <section anchor="connection-overhead">
          <name>Connection Overhead</name>
          <t>Each subscriber to a PDS or relay firehose requires a dedicated
WebSocket connection. At network scale, this creates:</t>
          <ul spacing="normal">
            <li>
              <t>Connection state overhead on servers hosting popular content</t>
            </li>
            <li>
              <t>TCP head-of-line blocking affecting all events on a connection</t>
            </li>
            <li>
              <t>Limited ability to prioritize critical events during congestion</t>
            </li>
          </ul>
        </section>
        <section anchor="message-size-constraints">
          <name>Message Size Constraints</name>
          <t>The current protocol specifies a hard maximum of 5 MBytes per WebSocket
frame. While this accommodates most operations, it creates challenges for:</t>
          <ul spacing="normal">
            <li>
              <t>Large repository commits (limited to 2MB blocks, 200 operations)</t>
            </li>
            <li>
              <t>Efficient batching of small updates</t>
            </li>
            <li>
              <t>Variable-size content distribution</t>
            </li>
          </ul>
        </section>
        <section anchor="single-stream-bottleneck">
          <name>Single-Stream Bottleneck</name>
          <artwork><![CDATA[
Current Firehose: Single Stream for All Event Types

WebSocket Connection
│
▼
┌─────────────────────────────────────────────────────────────────┐
│  #commit │ #commit │ #identity │ #commit │ #account │ #commit   │
│  (big)   │ (small) │ (urgent)  │ (med)   │ (urgent) │ (big)     │
└─────────────────────────────────────────────────────────────────┘
                              │
                              ▼
                    Head-of-line blocking:
                    Urgent #identity event must wait
                    for large #commit to complete
]]></artwork>
          <t>All event types flow through a single WebSocket stream without
differentiation, meaning:</t>
          <ul spacing="normal">
            <li>
              <t>High-priority identity changes wait behind large commit events</t>
            </li>
            <li>
              <t>Account status updates cannot preempt in-progress transfers</t>
            </li>
            <li>
              <t>No mechanism for subscribers to filter by event type at transport layer</t>
            </li>
          </ul>
        </section>
      </section>
      <section anchor="reliability-challenges">
        <name>Reliability Challenges</name>
        <section anchor="cursor-based-replay-limitations">
          <name>Cursor-Based Replay Limitations</name>
          <t>The current firehose relies on monotonic cursor values for replay after
disconnection. This approach requires consumers to track cursor state
externally, since the protocol provides no mechanism for server-side
cursor persistence. Gap detection depends entirely on commit chain
validation, which is computationally expensive and requires maintaining
local state. When gaps are detected, recovery requires fetching the
complete repository, creating a thundering herd risk when many
consumers reconnect simultaneously after an outage.</t>
        </section>
        <section anchor="no-native-late-join-support">
          <name>No Native Late-Join Support</name>
          <t>When a new consumer connects to a firehose, it must either start from
the current position and miss all prior events, or replay from a
cursor to catch up. There is no concept of "recent state" that would
allow quick synchronization to a meaningful starting point. Consumers
cannot receive cached recent events without initiating a full replay
sequence, which increases latency for new subscribers and places
additional load on the server.</t>
        </section>
        <section anchor="connection-fragility">
          <name>Connection Fragility</name>
          <t>WebSocket connections over TCP are susceptible to network path changes
that cause connection drops. The protocol provides no mechanism for
connection migration when a client's IP address changes, such as when
moving between networks on a mobile device. Any network transition
requires establishing a completely new connection and resuming from
the last known cursor position.</t>
        </section>
      </section>
      <section anchor="operational-challenges">
        <name>Operational Challenges</name>
        <section anchor="relay-infrastructure-complexity">
          <name>Relay Infrastructure Complexity</name>
          <t>Current relays face significant operational burden in maintaining the
firehose infrastructure. Each relay must establish and maintain persistent
WebSocket connections to all upstream PDS instances it aggregates, scaling
linearly with the number of sources. When connections fail, relays must
handle reconnection logic and cursor tracking independently for each
upstream source. Custom caching and replay logic must be implemented at
the application layer, as the transport provides no native support for
these operations. Additionally, relays must build proprietary distribution
mechanisms to serve their own downstream subscribers, duplicating effort
across the ecosystem.</t>
        </section>
        <section anchor="limited-quality-of-service">
          <name>Limited Quality of Service</name>
          <t>The current transport provides no native mechanism for quality of service
differentiation. All event types receive equal treatment regardless of
their operational importance, so critical account status changes compete
with routine content updates for bandwidth. Rate limiting based on consumer
capacity must be implemented entirely at the application layer, with no
transport-level flow control. Graceful degradation during overload
conditions is difficult to achieve, often resulting in connection failures
rather than controlled service reduction.</t>
        </section>
      </section>
    </section>
    <section anchor="moqt-transport-benefits">
      <name>MOQT Transport Benefits</name>
      <t>MOQT addresses the challenges identified above through its native
architecture designed for large-scale media distribution.</t>
      <section anchor="native-publishsubscribe-model">
        <name>Native Publish/Subscribe Model</name>
        <t>MOQT's publish/subscribe model aligns naturally with AT Protocol's
firehose semantics. Subscribers select specific event tracks of interest
while publishers announce available tracks via PUBLISH_NAMESPACE. Since
relays handle distribution, no dedicated connection is required per
subscriber, and track-level subscription granularity reduces unnecessary
traffic.</t>
        <t>PUBLISH_NAMESPACE enables dynamic discovery of available content. When
a PDS comes online, it announces its namespaces to connected relays,
advertising firehose tracks, repository sync tracks, and blob stores.
Relays learn about new PDS instances automatically without static
configuration, enabling the network to scale organically as new servers
join.</t>
        <t>SUBSCRIBE_NAMESPACE allows subscribers to discover available tracks
using prefix-based queries. A full-network relay can subscribe to
at/firehose/ to discover all PDS instances publishing firehose events,
then selectively subscribe to each. An AppView can query a relay's
namespace to enumerate available event types before subscribing to
specific tracks of interest. This discovery mechanism eliminates the
need for out-of-band coordination when adding new publishers or
subscribers to the network.</t>
        <t>A PDS advertises its available namespaces via PUBLISH_NAMESPACE:</t>
        <table>
          <thead>
            <tr>
              <th align="left">Namespace</th>
              <th align="left">Description</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">
                <tt>at/firehose/pds.example.com</tt></td>
              <td align="left">Firehose events from this PDS</td>
            </tr>
            <tr>
              <td align="left">
                <tt>at/repo/pds.example.com</tt></td>
              <td align="left">Repository sync tracks</td>
            </tr>
            <tr>
              <td align="left">
                <tt>at/blobs/pds.example.com</tt></td>
              <td align="left">Blob storage</td>
            </tr>
          </tbody>
        </table>
        <t>A relay discovering PDS instances issues SUBSCRIBE_NAMESPACE with
<tt>at/firehose/</tt> and receives a NAMESPACE response listing all matching
hosts (potentially thousands of PDS instances).</t>
      </section>
      <section anchor="priority-based-delivery">
        <name>Priority-Based Delivery</name>
        <t>MOQT's 0-255 priority scale enables differentiated event delivery,
ensuring that critical account takedowns (priority 0-15) and urgent
identity changes such as key rotations (priority 16-31) are delivered
ahead of routine commit events (priority 96-191). This prevents large
content transfers from blocking time-sensitive operations.</t>
        <table>
          <thead>
            <tr>
              <th align="left">AT Event Type</th>
              <th align="left">MOQT Priority</th>
              <th align="left">Rationale</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">#account (takedown)</td>
              <td align="left">0-15</td>
              <td align="left">Critical - affects content availability</td>
            </tr>
            <tr>
              <td align="left">#identity</td>
              <td align="left">16-31</td>
              <td align="left">Urgent - key rotation, handle changes</td>
            </tr>
            <tr>
              <td align="left">#account (status)</td>
              <td align="left">32-63</td>
              <td align="left">Important - account state changes</td>
            </tr>
            <tr>
              <td align="left">#sync</td>
              <td align="left">64-95</td>
              <td align="left">Moderate - state reset events</td>
            </tr>
            <tr>
              <td align="left">#commit (small)</td>
              <td align="left">96-127</td>
              <td align="left">Normal - typical record operations</td>
            </tr>
            <tr>
              <td align="left">#commit (large)</td>
              <td align="left">128-191</td>
              <td align="left">Background - bulk content updates</td>
            </tr>
            <tr>
              <td align="left">Repository export</td>
              <td align="left">192-255</td>
              <td align="left">Bulk - full sync operations</td>
            </tr>
          </tbody>
        </table>
      </section>
      <section anchor="relay-infrastructure">
        <name>Relay Infrastructure</name>
        <t>MOQT relays provide purpose-built infrastructure for AT Protocol
distribution. Hierarchical relay topologies reduce origin load by
distributing cached content from regional nodes, while geographic
placement optimizes latency for subscribers. Because the relay protocol
is standardized, operators need not implement custom distribution logic.</t>
        <artwork><![CDATA[
MOQT Relay Network for AT Protocol:

                    ┌─────────────────┐
                    │  Global Relay   │
                    │  (Federation)   │◄─── Cross-region aggregation
                    └────────┬────────┘
                             │
           ┌─────────────────┼─────────────────┐
           │                 │                 │
    ┌──────▼──────┐   ┌──────▼──────┐   ┌──────▼──────┐
    │ Regional    │   │ Regional    │   │ Regional    │
    │ Relay A     │   │ Relay B     │   │ Relay C     │
    └──────┬──────┘   └──────┬──────┘   └──────┬──────┘
           │                 │                 │
     ┌─────┴─────┐     ┌─────┴─────┐     ┌─────┴─────┐
     │           │     │           │     │           │
   PDS 1      PDS 2  PDS 3      PDS 4  PDS 5      PDS 6
     ▲           ▲     ▲           ▲     ▲           ▲
     │           │     │           │     │           │
   Users       Users Users       Users Users       Users
]]></artwork>
      </section>
      <section anchor="group-based-organization-and-caching">
        <name>Group-Based Organization and Caching</name>
        <t>MOQT groups enable efficient caching and late-join support. Late-joining
subscribers receive the most recent group immediately rather than
replaying from the beginning, and relay caches at each tier reduce
upstream load. Group boundaries serve as natural replay points, with
cursor semantics mapping directly to Group ID and Object ID.</t>
        <artwork><![CDATA[
Group Hierarchy:  [G0: events 0-99] [G1: events 100-199] ... [GN: live]
                         ↓                 ↓                    ↓
Relay Cache:          cached            cached              caching
]]></artwork>
        <section anchor="late-join-via-subscribe">
          <name>Late-Join via SUBSCRIBE</name>
          <t>MOQT's SUBSCRIBE message includes filter parameters that control the
starting position for delivery. As defined in <xref target="MoQ-TRANSPORT"/>, these
filters include LatestGroup (start from the newest available group),
LatestObject (start from the most recent object), AbsoluteStart
(begin at a specific group/object position), and AbsoluteRange
(request a bounded range). These filters allow subscribers to join
at any point and then continue receiving live and future content.</t>
          <t>SUBSCRIBE delivers content from the specified starting position
forward, keeping subscribers at the live edge as new content arrives.
For historical content retrieval, subscribers use FETCH operations
instead (see <xref target="fetch-for-on-demand-retrieval"/>).</t>
          <t>This capability supports several AT Protocol scenarios.
A new subscriber joining a track uses LatestGroup to begin
with current activity.</t>
        </section>
        <section anchor="fetch-for-on-demand-retrieval">
          <name>FETCH for On-Demand Retrieval</name>
          <t>MOQT's FETCH operation complements SUBSCRIBE by enabling selective
retrieval of specific objects. While SUBSCRIBE keeps clients at the
live edge, FETCH retrieves historical content
regardless of how far back it exists. FETCH specifies exact group and
object ranges, retrieving precisely the needed data without establishing
a continuous subscription.</t>
          <t>When a subscriber detects a gap in received events, it can FETCH the
missing objects directly rather than replaying an entire group. When
verifying a specific record, a client can FETCH just the MST path blocks
needed for cryptographic validation. For deep historical queries, an
analytics service can FETCH specific commit ranges from months prior.</t>
          <t>Relay caching amplifies the benefit of FETCH operations. Popular content
such as viral images, high-profile account commits, and frequently
accessed MST nodes remain in relay cache. Subsequent FETCH requests
for this content are served locally, reducing latency and eliminating
load on origin servers. For a viral post with an embedded image,
thousands of FETCH requests for the image blob resolve to a single
origin fetch followed by cache hits at the relay tier.</t>
        </section>
        <section anchor="caching-benefits-summary">
          <name>Caching Benefits Summary</name>
          <t>The combination of SUBSCRIBE late-join and FETCH with relay caching
provides several benefits for AT Protocol deployments:</t>
          <ul spacing="normal">
            <li>
              <t>Fan-out efficiency: Origin publishes once, relay serves many subscribers</t>
            </li>
            <li>
              <t>Late-join speed: New subscribers receive cached history immediately</t>
            </li>
            <li>
              <t>Gap recovery: Missing events fetched from relay cache, not origin</t>
            </li>
            <li>
              <t>Popular content: High-demand blobs and commits served from cache</t>
            </li>
            <li>
              <t>Reduced origin load: Relay tier absorbs read amplification</t>
            </li>
          </ul>
        </section>
      </section>
      <section anchor="quic-transport-advantages">
        <name>QUIC Transport Advantages</name>
        <t>Leveraging QUIC <xref target="RFC9000"/> provides connection migration so that
firehose subscriptions survive network changes such as IP address
transitions or WiFi-to-cellular handoffs. Multiplexed streams eliminate
head-of-line blocking between logical channels, while mandatory TLS 1.3
<xref target="RFC8446"/> ensures built-in encryption. Per-stream and connection-level
flow control prevents subscriber overload, and 0-RTT resumption enables
fast reconnection after brief disconnections.</t>
      </section>
    </section>
    <section anchor="moqt-mapping">
      <name>MOQT Mapping</name>
      <t>This section defines how AT Protocol data maps to MOQT primitives.</t>
      <section anchor="connection-establishment">
        <name>Connection Establishment</name>
        <t>AT Protocol endpoints using MOQT establish connections following
the standard MOQT setup procedure:</t>
        <artwork><![CDATA[
AT-over-MOQT Connection Establishment:

PDS/Relay                                            Subscriber
    │                                                     │
    │◄─── QUIC Connection (ALPN: "moqt") ─────────────────│
    │──── QUIC Connection Established ───────────────────▶│
    │                                                     │
    │◄─── MOQT CLIENT_SETUP ──────────────────────────────│
    │     (at-version: 1, supported-events: 0x0F)         │
    │                                                     │
    │──── MOQT SERVER_SETUP ─────────────────────────────▶│
    │     (at-version: 1, relay-capabilities: 0x07)       │
    │                                                     │
    │──── PUBLISH_NAMESPACE ─────────────────────────────▶│
    │     (at/{pds-host}/firehose)                        │
    │                                                     │
    │◄─── SUBSCRIBE_NAMESPACE ────────────────────────────│
    │     (at/{pds-host}/firehose)                        │
    │                                                     │
    │──── NAMESPACE (tracks available) ──────────────────▶│
    │     (commits, identity, account, sync)              │
    │                                                     │
    │◄─── SUBSCRIBE (commits) ────────────────────────────│
    │                                                     │
    │──── SUBSCRIBE_OK ──────────────────────────────────▶│
    │                                                     │
    │═════ Firehose Event Stream ════════════════════════▶│
]]></artwork>
        <t>Setup parameters for AT Protocol:</t>
        <table>
          <thead>
            <tr>
              <th align="left">Parameter</th>
              <th align="left">ID</th>
              <th align="left">Type</th>
              <th align="left">Description</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">at-version</td>
              <td align="left">0x41540001</td>
              <td align="left">varint</td>
              <td align="left">AT Protocol version</td>
            </tr>
            <tr>
              <td align="left">at-supported-events</td>
              <td align="left">0x41540002</td>
              <td align="left">varint</td>
              <td align="left">Bitmask of supported event types</td>
            </tr>
            <tr>
              <td align="left">at-relay-caps</td>
              <td align="left">0x41540003</td>
              <td align="left">varint</td>
              <td align="left">Relay capability flags</td>
            </tr>
          </tbody>
        </table>
        <t>Event type bitmask values: 0x01 (#commit), 0x02 (#identity), 0x04 (#account), 0x08 (#sync).</t>
      </section>
      <section anchor="track-types">
        <name>Track Types</name>
        <t>ATOM defines three track types for different use cases:</t>
        <section anchor="firehose-tracks">
          <name>Firehose Tracks</name>
          <t>Firehose tracks carry real-time event streams from PDS hosts.</t>
          <t>Namespace structure: <tt>at/firehose/{host}/{event-type} -- {did|all}</tt></t>
          <table>
            <thead>
              <tr>
                <th align="left">Track</th>
                <th align="left">Namespace</th>
                <th align="left">Content</th>
                <th align="left">Priority</th>
              </tr>
            </thead>
            <tbody>
              <tr>
                <td align="left">Commits</td>
                <td align="left">
                  <tt>at/firehose/{host}/commits</tt></td>
                <td align="left">Repository updates</td>
                <td align="left">96-191</td>
              </tr>
              <tr>
                <td align="left">Identity</td>
                <td align="left">
                  <tt>at/firehose/{host}/identity</tt></td>
                <td align="left">DID/handle changes</td>
                <td align="left">16-31</td>
              </tr>
              <tr>
                <td align="left">Account</td>
                <td align="left">
                  <tt>at/firehose/{host}/account</tt></td>
                <td align="left">Hosting status</td>
                <td align="left">0-63</td>
              </tr>
              <tr>
                <td align="left">Sync</td>
                <td align="left">
                  <tt>at/firehose/{host}/sync</tt></td>
                <td align="left">State assertions</td>
                <td align="left">64-95</td>
              </tr>
            </tbody>
          </table>
          <t>Groups organize events by sequence number (e.g., 1000 events per group).
Track name is either a specific DID or "all" for aggregated streams.</t>
        </section>
        <section anchor="repository-sync-tracks">
          <name>Repository Sync Tracks</name>
          <t>Repository sync tracks provide full block-level repository data.</t>
          <t>Namespace: <tt>at/repo/{host}/{did}/sync</tt></t>
          <t>The MOQT hierarchy maps to AT Protocol repository concepts:</t>
          <table>
            <thead>
              <tr>
                <th align="left">MOQT Level</th>
                <th align="left">AT Protocol Concept</th>
                <th align="left">Purpose</th>
              </tr>
            </thead>
            <tbody>
              <tr>
                <td align="left">Track</td>
                <td align="left">Repository (DID)</td>
                <td align="left">Subscription unit</td>
              </tr>
              <tr>
                <td align="left">Group</td>
                <td align="left">Commit/Revision</td>
                <td align="left">Temporal progression</td>
              </tr>
              <tr>
                <td align="left">Subgroup</td>
                <td align="left">Collection + MST path</td>
                <td align="left">Structural organization</td>
              </tr>
              <tr>
                <td align="left">Object</td>
                <td align="left">Record/Block</td>
                <td align="left">Individual data items</td>
              </tr>
            </tbody>
          </table>
          <t>Each group represents a commit. Subgroup 0 contains the signed commit
and MST structure; subsequent subgroups contain collections with MST
proof paths for independent verification.</t>
          <table>
            <thead>
              <tr>
                <th align="left">Subgroup</th>
                <th align="left">Contents</th>
              </tr>
            </thead>
            <tbody>
              <tr>
                <td align="left">0</td>
                <td align="left">Commit block + full MST (verification anchor)</td>
              </tr>
              <tr>
                <td align="left">1+</td>
                <td align="left">Collection records + MST proof path</td>
              </tr>
            </tbody>
          </table>
          <t>Objects within a group are ordered: signed commit (ObjectID 0), MST root,
MST intermediate nodes, then records. The at-block-cid extension header
carries the CID for integrity verification.</t>
          <artwork><![CDATA[
MST Structure and MOQT Mapping:

Repository (DID: did:plc:abc123)
│
├── Commit (rev: 3kf7x2...)          ──────────────▶ Group N
│   │
│   ├── Signed Commit Block          ──────────────▶ Subgroup 0, Object 0
│   │
│   └── MST (Merkle Search Tree)
│       │
│       ├── Root Node (CID: bafyr...)──────────────▶ Subgroup 0, Object 1
│       │   ├── key: "app.bsky.feed.post/3k..."
│       │   └── children: [L, R]
│       │
│       ├── Left Node               ───────────────▶ Subgroup 0, Object 2
│       │   └── key: "app.bsky.actor.profile/self"
│       │
│       └── Right Node              ───────────────▶ Subgroup 0, Object 3
│           └── key: "app.bsky.graph.follow/3k..."
│
├── Collection: app.bsky.feed.post   ──────────────▶ Subgroup 1
│   ├── Record 3k7abc... + MST proof ──────────────▶ Object 0
│   └── Record 3k7def... + MST proof ──────────────▶ Object 1
│
├── Collection: app.bsky.actor.profile ────────────▶ Subgroup 2
│   └── Record self + MST proof      ──────────────▶ Object 0
│
└── Collection: app.bsky.graph.follow ─────────────▶ Subgroup 3
    └── Record 3k9xyz... + MST proof ──────────────▶ Object 0
]]></artwork>
          <t>The MST proof path included with each record contains the minimal set
of tree nodes required to verify that record's inclusion in the commit.
This enables independent verification of individual records without
downloading the entire repository.</t>
        </section>
        <section anchor="blob-store-track">
          <name>Blob Store Track</name>
          <t>Blob store tracks enable cross-repository deduplication of large media.</t>
          <t>Namespace: <tt>at/blobs/{host}</tt></t>
          <t>The Group ID is derived from the CID (first 8 bytes of multihash as uint64),
Object ID is always 0. This deterministic mapping ensures identical blobs
from different repositories resolve to the same MOQT location.</t>
        </section>
      </section>
      <section anchor="object-structure">
        <name>Object Structure</name>
        <t>AT Protocol events are encapsulated in MOQT objects:</t>
        <artwork><![CDATA[
MOQT Object Structure:

┌─────────────────────────────────────────────────────────────┐
│ Extension Headers:                                          │
│   at-event-type (0x41544501): varint                        │
│   at-repo-did (0x41544502): string                          │
│   at-repo-rev (0x41544503): string (TID)                    │
│   at-seq (0x41544504): varint (cursor equivalent)           │
│   at-block-cid (0x41544505): bytes (for repo sync blocks)   │
└─────────────────────────────────────────────────────────────┘
┌─────────────────────────────────────────────────────────────┐
│ Payload: CBOR-encoded event (compatible with AT-REPO)       │
└─────────────────────────────────────────────────────────────┘
]]></artwork>
      </section>
      <section anchor="subscription-and-filtering">
        <name>Subscription and Filtering</name>
        <section anchor="firehose-subscription">
          <name>Firehose Subscription</name>
          <t>Subscribers specify start position and filtering:</t>
          <ul spacing="normal">
            <li>
              <t><tt>StartGroup=Latest</tt>: Begin with live events (default)</t>
            </li>
            <li>
              <t><tt>StartGroup=N</tt>: Resume from specific cursor position</t>
            </li>
            <li>
              <t>Track name <tt>all</tt> or specific DID for filtering</t>
            </li>
          </ul>
        </section>
        <section anchor="repository-sync">
          <name>Repository Sync</name>
          <t>Subgroup filtering enables selective synchronization:</t>
          <artwork><![CDATA[
Selective Sync Examples:

Full repository:     SubgroupFilter: [0, 1, 2, 3, ...]
Posts only:          SubgroupFilter: [0, 1]  (~15% bandwidth)
Verification only:   SubgroupFilter: [0]     (~2% bandwidth)
]]></artwork>
          <t>Temporal navigation with groups:</t>
          <ul spacing="normal">
            <li>
              <t><tt>Subscribe StartGroup=LATEST</tt>: Current state + live updates</t>
            </li>
            <li>
              <t><tt>Fetch StartGroup=N, EndGroup=M</tt>: Historical range retrieval</t>
            </li>
          </ul>
        </section>
        <section anchor="late-join-and-catch-up">
          <name>Late-Join and Catch-Up</name>
          <t>New subscribers request <tt>StartGroup=LATEST</tt> to receive current state
immediately. After disconnection, subscribers use <tt>Fetch</tt> with their
last known group to retrieve missed commits before resuming live
subscription.</t>
        </section>
      </section>
      <section anchor="priority-and-parallelism">
        <name>Priority and Parallelism</name>
        <t>MOQT priority enables efficient delivery ordering:</t>
        <table>
          <thead>
            <tr>
              <th align="left">Block Type</th>
              <th align="left">Priority</th>
              <th align="left">Rationale</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">Account takedown</td>
              <td align="left">0-15</td>
              <td align="left">Safety-critical</td>
            </tr>
            <tr>
              <td align="left">Identity changes</td>
              <td align="left">16-31</td>
              <td align="left">Affects routing</td>
            </tr>
            <tr>
              <td align="left">Signed Commit</td>
              <td align="left">0-15</td>
              <td align="left">Required for verification</td>
            </tr>
            <tr>
              <td align="left">MST Root</td>
              <td align="left">16-31</td>
              <td align="left">Unlocks tree traversal</td>
            </tr>
            <tr>
              <td align="left">MST Nodes</td>
              <td align="left">32-63</td>
              <td align="left">Enables record verification</td>
            </tr>
            <tr>
              <td align="left">Small Records</td>
              <td align="left">64-127</td>
              <td align="left">Core content</td>
            </tr>
            <tr>
              <td align="left">Large Records</td>
              <td align="left">128-191</td>
              <td align="left">Less urgent</td>
            </tr>
            <tr>
              <td align="left">Blobs</td>
              <td align="left">192-255</td>
              <td align="left">Media, lazy-loadable</td>
            </tr>
          </tbody>
        </table>
        <t>Content-addressable blocks enable parallel fetching across QUIC streams,
with total transfer time bounded by the slowest stream rather than the
sum of all transfers.</t>
      </section>
      <section anchor="relay-aggregation">
        <name>Relay Aggregation</name>
        <t>MOQT relays aggregate firehose streams from multiple upstream sources:</t>
        <artwork><![CDATA[
Relay Aggregation:

                    Full-Network Relay
                   ┌────────────────────┐
                   │  at/firehose/      │
                   │  relay.network/*   │
                   └─────────▲──────────┘
                             │
        ┌────────────────────┼────────────────────┐
        │                    │                    │
 ┌──────┴──────┐      ┌──────┴──────┐      ┌──────┴──────┐
 │ Regional    │      │ Regional    │      │ Regional    │
 │ Relay       │      │ Relay       │      │ Relay       │
 └──────▲──────┘      └──────▲──────┘      └──────▲──────┘
        │                    │                    │
      PDS hosts            PDS hosts            PDS hosts
]]></artwork>
        <t>Relays perform subscription aggregation, namespace republishing,
event caching for late-join, and deduplication.</t>
      </section>
    </section>
    <section anchor="reliability-and-recovery">
      <name>Reliability and Recovery</name>
      <t>ATOM leverages MOQT's group-based delivery model and QUIC's transport
features to provide robust reliability mechanisms for AT Protocol
data synchronization. The key capabilities include cursor mapping
that translates AT Protocol sequence numbers to MOQT group/object
positions, gap detection that identifies missing events through
sequential object tracking, and multiple recovery strategies ranging
from targeted object fetches to full repository synchronization.
QUIC's connection migration further ensures that subscribers
maintain continuous delivery even when network conditions change.</t>
      <section anchor="cursor-mapping">
        <name>Cursor Mapping</name>
        <t>AT Protocol cursors map to MOQT group and object identifiers, enabling
seamless translation between the existing cursor-based replay mechanism
and MOQT's hierarchical addressing. Each firehose track maintains a
mapping table that records the sequence number base for each group,
allowing bidirectional conversion between AT Protocol cursors and
MOQT positions.</t>
        <t>When a subscriber needs to resume from a specific cursor position,
it converts the cursor value to the corresponding group and object
identifiers. The conversion uses integer division to determine the
group number and the modulo operation to determine the object offset
within that group. This deterministic mapping ensures that any cursor
value can be precisely located within the MOQT track structure.</t>
        <artwork><![CDATA[
Cursor Translation:

AT Cursor (seq: 12345678)
         │
         ▼
┌────────────────────────────────────────┐
│ Cursor Mapping Table (per track)       │
│                                        │
│ seq_base: 12340000                     │
│ group_size: 1000                       │
│                                        │
│ seq 12345678                           │
│   = seq_base + (group * group_size)    │
│     + object                           │
│   = 12340000 + (5 * 1000) + 678        │
│                                        │
│ MOQT: Group 5, Object 678              │
└────────────────────────────────────────┘
]]></artwork>
        <t>Publishers <bcp14>MUST</bcp14> include the <tt>at-seq</tt> extension header in each object
to enable accurate cursor reconstruction.</t>
      </section>
      <section anchor="gap-detection-and-recovery">
        <name>Gap Detection and Recovery</name>
        <t>MOQT's group-based delivery model simplifies gap detection compared
to the current cursor-only approach. This section describes how gaps
are detected and the recovery strategies available to subscribers.</t>
        <section anchor="detecting-missing-objects">
          <name>Detecting Missing Objects</name>
          <t>Because objects within a group are sequentially numbered and groups
themselves are ordered, subscribers can immediately identify when
expected objects are missing by comparing received object identifiers
against their expected sequence.</t>
          <artwork><![CDATA[
Gap Detection:

Subscriber State:
  Last received: Group 5, Object 999
  Expected next: Group 6, Object 0

Incoming object: Group 6, Object 5

     Expected                    Received
        │                           │
        ▼                           ▼
   ┌─────────┐                 ┌─────────┐
   │ G6, O0  │  ← Missing! →   │ G6, O5  │
   └─────────┘                 └─────────┘
        │
        ▼
   Gap detected: Objects 0-4 missing from Group 6
]]></artwork>
        </section>
        <section anchor="recovery-fetch-missing-objects">
          <name>Recovery: Fetch Missing Objects</name>
          <t>The preferred recovery approach is to fetch only the specific missing
objects using MOQT's FETCH operation with precise group and object
boundaries. If relay caches contain the missing data, recovery completes
without any load on the origin server.</t>
          <artwork><![CDATA[
Fetch Missing Objects:

Subscriber                           Relay                    Origin
    │                                  │                        │
    │── FETCH ────────────────────────▶│                        │
    │   StartGroup=6, StartObject=0    │                        │
    │   EndGroup=6, EndObject=4        │                        │
    │                                  │                        │
    │                          [Cache hit?]                     │
    │                              │ Yes                        │
    │◄── Objects 0-4 ──────────────┘                            │
    │    (from cache)                                           │
    │                                                           │
    │    Gap filled, resume live stream                         │
]]></artwork>
        </section>
        <section anchor="recovery-fetch-full-group">
          <name>Recovery: Fetch Full Group</name>
          <t>For larger gaps spanning multiple groups, subscribers may request
entire groups rather than specifying individual object ranges.
This approach is simpler but may retrieve more data than strictly
necessary.</t>
          <artwork><![CDATA[
Fetch Full Group:

Subscriber                           Relay                    Origin
    │                                  │                        │
    │   [Gap spans Groups 6-8]         │                        │
    │                                  │                        │
    │── FETCH ────────────────────────▶│                        │
    │   StartGroup=6, EndGroup=8       │                        │
    │                                  │                        │
    │                          [Partial cache]                  │
    │◄── Group 6 (cached) ─────────────┤                        │
    │◄── Group 7 (cached) ─────────────┤                        │
    │                                  │── FETCH ──────────────▶│
    │                                  │   (Group 8)            │
    │                                  │◄── Group 8 ────────────│
    │◄── Group 8 ──────────────────────┤                        │
    │                                                           │
    │    All groups received, resume live stream                │
]]></artwork>
        </section>
        <section anchor="recovery-full-repository-sync">
          <name>Recovery: Full Repository Sync</name>
          <t>As a fallback when cached data is unavailable or gaps are too
extensive, subscribers can perform a full repository synchronization
using either HTTP CAR exports or the MOQT repository sync track.
This approach validates the entire repository state against a
#sync event.</t>
          <artwork><![CDATA[
Full Repository Sync:

Subscriber                           PDS/Relay
    │                                  │
    │   [Gap too large or cache miss]  │
    │                                  │
    │── GET /xrpc/com.atproto.sync. ──▶│
    │   getRepo?did=...                │
    │                                  │
    │◄── CAR file ─────────────────────│
    │    (complete repository export)  │
    │                                  │
    │   [Validate against #sync event] │
    │                                  │
    │   1. Parse CAR blocks            │
    │   2. Verify MST root matches     │
    │   3. Update local state          │
    │   4. Resume live subscription    │
]]></artwork>
        </section>
      </section>
      <section anchor="disconnection-handling">
        <name>Disconnection Handling</name>
        <t>MOQT over QUIC provides superior disconnection handling through
three complementary mechanisms: 0-RTT session resumption, cursor-based
reconnection, and transparent connection migration.</t>
        <section anchor="brief-disconnections-0-rtt-resumption">
          <name>Brief Disconnections: 0-RTT Resumption</name>
          <t>For brief disconnections (typically under 30 seconds), QUIC's 0-RTT
resumption allows subscribers to restore their session with minimal
latency. The subscriber presents a session ticket from the previous
connection, and the relay resumes delivery from where it left off
if the cached session state remains valid. This typically completes
in a single round trip.</t>
          <artwork><![CDATA[
QUIC 0-RTT Resumption:

Subscriber                                Relay
    │                                       │
    │   [Connection lost briefly]           │
    │                                       │
    │   [Reconnecting with session ticket]  │
    │                                       │
    │── QUIC 0-RTT ────────────────────────▶│
    │   ClientHello + session ticket        │
    │   + early data (SUBSCRIBE)            │
    │                                       │
    │◄── ServerHello + Finished ────────────│
    │                                       │
    │◄── Continue from last position ───────│
    │    (relay cached subscriber state)    │
    │                                       │
    │══ Resume live stream (minimal gap) ══▶│
]]></artwork>
        </section>
        <section anchor="extended-disconnections-cursor-based-reconnection">
          <name>Extended Disconnections: Cursor-Based Reconnection</name>
          <t>For extended disconnections where session state has expired, subscribers
perform a full reconnection using their saved cursor position. The
subscriber first uses FETCH to retrieve any missed events from their
last known position, then establishes a new SUBSCRIBE starting from
the latest group to receive live updates. Relay caches serve the
historical data when available, minimizing load on upstream servers.</t>
          <artwork><![CDATA[
Full Reconnection with Cursor:

Subscriber                                Relay
    │                                       │
    │   [Disconnected for extended period]  │
    │   [Saved state: at-seq = 12345678]    │
    │                                       │
    │── QUIC Handshake (full) ─────────────▶│
    │◄── Connection Established ────────────│
    │                                       │
    │── CLIENT_SETUP ──────────────────────▶│
    │◄── SERVER_SETUP ──────────────────────│
    │                                       │
    │   [Convert cursor to Group/Object]    │
    │   seq 12345678 → Group 5, Object 678  │
    │                                       │
    │── FETCH ─────────────────────────────▶│
    │   StartGroup=5, StartObject=678       │
    │   EndGroup=LATEST                     │
    │                                       │
    │◄── Historical objects (cached) ───────│
    │                                       │
    │── SUBSCRIBE ─────────────────────────▶│
    │   StartGroup=LATEST                   │
    │◄── SUBSCRIBE_OK ──────────────────────│
    │                                       │
    │══ Live stream resumes ═══════════════▶│
]]></artwork>
        </section>
        <section anchor="network-transitions-connection-migration">
          <name>Network Transitions: Connection Migration</name>
          <t>For network transitions such as WiFi-to-cellular handoffs, QUIC's
connection migration enables seamless continuation without any
application-layer intervention. The subscriber's IP address changes
transparently while the MOQT session continues uninterrupted, ensuring
no gaps in the event stream during mobile network transitions.</t>
          <artwork><![CDATA[
QUIC Connection Migration:

Subscriber (mobile)                       Relay
    │                                       │
    │══ Streaming on WiFi ═════════════════▶│
    │   (IP: 192.168.1.50)                  │
    │                                       │
    │   [User moves, WiFi signal lost]      │
    │   [Device switches to cellular]       │
    │   [New IP: 10.0.0.75]                 │
    │                                       │
    │── QUIC PATH_CHALLENGE ───────────────▶│
    │   (from new IP address)               │
    │                                       │
    │◄── QUIC PATH_RESPONSE ────────────────│
    │   (path validated)                    │
    │                                       │
    │══ Continue streaming on cellular ════▶│
    │   (no gap, no reconnection needed)    │
    │                                       │
    │   [Application layer unaware of       │
    │    network transition]                │
]]></artwork>
        </section>
      </section>
    </section>
    <section anchor="authentication-and-authorization">
      <name>Authentication and Authorization</name>
      <t>TODO</t>
    </section>
    <section anchor="security-considerations">
      <name>Security Considerations</name>
      <t>TODO</t>
    </section>
    <section anchor="iana-considerations">
      <name>IANA Considerations</name>
      <t>TODO</t>
    </section>
  </middle>
  <back>
    <references anchor="sec-combined-references">
      <name>References</name>
      <references anchor="sec-normative-references">
        <name>Normative References</name>
        <reference anchor="RFC9000">
          <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="RFC8446">
          <front>
            <title>The Transport Layer Security (TLS) Protocol Version 1.3</title>
            <author fullname="E. Rescorla" initials="E." surname="Rescorla"/>
            <date month="August" year="2018"/>
            <abstract>
              <t>This document specifies version 1.3 of the Transport Layer Security (TLS) protocol. TLS allows client/server applications to communicate over the Internet in a way that is designed to prevent eavesdropping, tampering, and message forgery.</t>
              <t>This document updates RFCs 5705 and 6066, and obsoletes RFCs 5077, 5246, and 6961. This document also specifies new requirements for TLS 1.2 implementations.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8446"/>
          <seriesInfo name="DOI" value="10.17487/RFC8446"/>
        </reference>
        <reference anchor="MoQ-TRANSPORT" target="https://datatracker.ietf.org/doc/draft-ietf-moq-transport/">
          <front>
            <title>Media over QUIC Transport</title>
            <author initials="L." surname="Curley">
              <organization/>
            </author>
            <author initials="K." surname="Pugin">
              <organization/>
            </author>
            <author initials="S." surname="Nandakumar">
              <organization/>
            </author>
            <author initials="V." surname="Vasiliev">
              <organization/>
            </author>
            <author initials="I." surname="Swett">
              <organization/>
            </author>
            <date year="2026" month="January"/>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-moq-transport-16"/>
        </reference>
        <reference anchor="AT-ARCH" target="https://datatracker.ietf.org/doc/draft-newbold-at-architecture/">
          <front>
            <title>Authenticated Transfer (AT) Protocol Architecture</title>
            <author initials="B." surname="Newbold">
              <organization/>
            </author>
            <author initials="D." surname="Holmgren">
              <organization/>
            </author>
            <date year="2025"/>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-newbold-at-architecture"/>
        </reference>
        <reference anchor="AT-REPO" target="https://datatracker.ietf.org/doc/draft-holmgren-at-repository/">
          <front>
            <title>Authenticated Transfer (AT) Repository and Synchronization</title>
            <author initials="D." surname="Holmgren">
              <organization/>
            </author>
            <author initials="B." surname="Newbold">
              <organization/>
            </author>
            <date year="2025"/>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-holmgren-at-repository"/>
        </reference>
        <reference anchor="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">
          <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>
      </references>
      <references anchor="sec-informative-references">
        <name>Informative References</name>
        <reference anchor="RFC7540">
          <front>
            <title>Hypertext Transfer Protocol Version 2 (HTTP/2)</title>
            <author fullname="M. Belshe" initials="M." surname="Belshe"/>
            <author fullname="R. Peon" initials="R." surname="Peon"/>
            <author fullname="M. Thomson" initials="M." role="editor" surname="Thomson"/>
            <date month="May" year="2015"/>
            <abstract>
              <t>This specification describes an optimized expression of the semantics of the Hypertext Transfer Protocol (HTTP), referred to as HTTP version 2 (HTTP/2). HTTP/2 enables a more efficient use of network resources and a reduced perception of latency by introducing header field compression and allowing multiple concurrent exchanges on the same connection. It also introduces unsolicited push of representations from servers to clients.</t>
              <t>This specification is an alternative to, but does not obsolete, the HTTP/1.1 message syntax. HTTP's existing semantics remain unchanged.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7540"/>
          <seriesInfo name="DOI" value="10.17487/RFC7540"/>
        </reference>
        <reference anchor="RFC8949">
          <front>
            <title>Concise Binary Object Representation (CBOR)</title>
            <author fullname="C. Bormann" initials="C." surname="Bormann"/>
            <author fullname="P. Hoffman" initials="P." surname="Hoffman"/>
            <date month="December" year="2020"/>
            <abstract>
              <t>The Concise Binary Object Representation (CBOR) is a data format whose design goals include the possibility of extremely small code size, fairly small message size, and extensibility without the need for version negotiation. These design goals make it different from earlier binary serializations such as ASN.1 and MessagePack.</t>
              <t>This document obsoletes RFC 7049, providing editorial improvements, new details, and errata fixes while keeping full compatibility with the interchange format of RFC 7049. It does not create a new version of the format.</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="94"/>
          <seriesInfo name="RFC" value="8949"/>
          <seriesInfo name="DOI" value="10.17487/RFC8949"/>
        </reference>
        <reference anchor="WebTransport" target="https://www.rfc-editor.org/rfc/rfc9297">
          <front>
            <title>The WebTransport Protocol Framework</title>
            <author initials="V." surname="Vasiliev">
              <organization/>
            </author>
            <date year="2023" month="August"/>
          </front>
          <seriesInfo name="RFC" value="9297"/>
        </reference>
        <reference anchor="MoQ-C4M" target="https://datatracker.ietf.org/doc/draft-ietf-moq-c4m/">
          <front>
            <title>Common Access Token for Media over QUIC</title>
            <author initials="S." surname="Jennings">
              <organization/>
            </author>
            <date year="2025"/>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-moq-c4m"/>
        </reference>
      </references>
    </references>
  </back>
  <!-- ##markdown-source:
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
4qWFDBaB6p0dbZTascLo8N/A8QC0QH8xxL7cWn0V8F/nHnlArhLpY/d60Fj2
Su3lW/Xzzb4tSPCr17ebDb7wW1Ne8fVCllWNxK8lqXxkIuGM132y/tKEudus
+zq9IIMbJ1itvmO1RnK1iZ38ql6WMjvyWhKqKaoJRAFIBd8aVE5jqhXmDSQs
JNSlgUk8t443FZZOKWs+A/Eny20XNuaqVkZGwrZCtkqyGarpwKt4HOtSQ58L
2aa4d3iMRV2Uq89eY15+kX+lfEtjQTPYXYR4qSWl5EH08PX1+7mT+fyV8VHH
DR/6l39BaCxv/80xVudC2xAyiBYW2Mq3RALR61yf5Bp5of9rhdk2x/niZxpn
OVSCl2+KSNfMBOWX1nnBDzcaX11vxg3wPVxx2kvhv2oHv8SOXLXwsBe8xMYy
cVFZVjlylp00M3KcN4Jw9jA/aQyKKNUeI/O11Ovh1Ca8bsPrwnnhb7Kr8lyJ
BQHvfWmqptaDE3/MJi9XQkiqHd1Evr93Yq8c11KrSZzXLalzzQNLanhJqs5C
vLDEx1jNNlZcc5ycFfa4aoHUqkeWK4xyLXRvnkAAWwlCxhJlJN2hNvH6+oTU
OEu+OjjVm++K6RATRbtxRfW1uwiBriWQJtGfmQph8atRMvoSY9WvnP01JuQI
FHd79QyBlagff6233KAoWLVx82nDf7/5WjDMIVGAQq9v0/N2F0OMQOdEkEhc
ydKXd7r6aw7Ht8lufBWEiO/1l+919SsKBdPB3ZTLet7t2jhA5jKhD1bX+It+
EsZo6WeYIuzr79KtLBT34guWzYAvJHkjuIsvE+AQf3YWcga4r+EYh/efYAI6
VXIqJdfTV3Tq1JxbKizp5G4ayko0KGZVqxPQphNQ4afa6tyoJ240FtbbikTp
dbl0IJ1ruqdT39tCu2SejcqNjnURU38qqEfVfpsO3gZDaQxkhbOLJiOFpG0o
qaPH/qTAvxUkodp2VUKX9Ln8BCybleSzUi2AyhW24zMn8HVS40u+cbPSKSak
5eOxSsZsouUDxA5ob26YkHOQ2LMYaj2MvFGETKVyxy/fvABaxVQ4MyFTcxdW
Zc30c03e3EId3+yHlwnilWy4/+n89dIWNxjjxCEuEAXtdH37rnsSNMcQ1hvA
8y7Eo9bzY5/Kcj4zgNr68yYWtq7+c823P5IEsu5KoNxcoFxYvTt7+mRjs5N7
ik7P1Yt43ckM9m3VYqIpimB1cd4rHXOB/XEUkj6R3UZj3BvMlOu2nCyKnes2
ZwxEwg29WIAF+Shlx2A8Y5OVNm6o9t8xTzW2XYOtMs+pc5bzGCvjTpOmh0Qt
iKABw2ehUzhqjO6P5hWtyEqD8u+aU7jIQS91bYPgYjThSoBx/S6qRliyCyTg
/HNXto8uesLyyr5gkas5Hdwni4H9YWgzR1KHkd5dfRLao92lniqoYst1gCkW
wkr2HT5Jku8oFFps0T72U8qv1sTjAJjEoHhHf2lm7PFKYpId5pCgMVpglN/0
abcJdXo2V+lL58Z+fXuCCVgrCkTlefzW6HVEwdV1/xoTrTGLm9ccvP2a7rqE
4JJV3nmVvlsexvsc8KP9teNkU9hky3cLxtTiItAx1xo3cBc7cse2wY8c5YE9
8H7dr+IDIeotnM2QE0BWgPZ14eCwJkhfsU6+j5ncbg9/z65/IbgvhWM7Jd11
+bjbCxKHgQRh9Yob13hDEcNmF5z6Ise9kFEeWdWOJYvF+959yeSlhZGtxtZ+
R73PWpMITAkP9c5k8fKq4HrmiK5n5tI0KDG4iF4vcrRed68CDRZvfKUSy85C
ZiUjexcGmu9oiGI2rVA+spcyqixnU544q8OKaPbe50k+wM5bIBaqY22grksB
69zRMs/dLaUAwSuuJEihIRlt5I2KCjYpb/35cQ/zgrrbDx52t7v3t1oWcevz
BS84AmBfYFkimjlWNgI2htrl69YWTwxdOFACbtnIZ4uzr9vHwCQ9WstWF//3
xf1FN8mdST3He6fPvt1/tnd4ePDiq+tyxoUdIEE6o+lbWmhuwh2dIH7yJwf9
45cv+jfh6rW5UwUOa5AeLc2bv/ncGfedDlmGROC42NUYzoyA7u6uaUh8Scbt
FUj47zd7zWvp0atwSaFt43Y4LDKdBYT1p4Dem6E6VfmqYyN6BOKA+BjU6csn
L/HNvgEpDrMtAGZlMnLX6LgXnu+92FvyZRRFdEWL+v+nHGk1Ha0AAA==

-->

</rfc>
