<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE rfc [
  <!ENTITY nbsp    "&#160;">
  <!ENTITY zwsp   "&#8203;">
  <!ENTITY nbhy   "&#8209;">
  <!ENTITY wj     "&#8288;">
]>
<?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
<!-- generated by https://github.com/cabo/kramdown-rfc version 1.7.29 (Ruby 3.2.3) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-jurkovikj-collab-tunnel-00" category="std" consensus="true" submissionType="IETF" version="3">
  <!-- xml2rfc v2v3 conversion 3.31.0 -->
  <front>
    <title abbrev="Collab-Tunnel">The Collaboration Tunnel Protocol</title>
    <seriesInfo name="Internet-Draft" value="draft-jurkovikj-collab-tunnel-00"/>
    <author initials="A." surname="Jurkovikj" fullname="Antun Jurkovikj">
      <organization/>
      <address>
        <postal>
          <country>North Macedonia</country>
        </postal>
        <email>antunjurkovic@gmail.com</email>
      </address>
    </author>
    <date year="2025" month="November" day="04"/>
    <abstract>
      <?line 168?>

<t>This document specifies the Collaboration Tunnel Protocol, a method for efficient, verifiable content delivery between web publishers and automated agents. The protocol typically achieves up to 90% bandwidth reduction (83% median measured) through bidirectional URL discovery, template-invariant content fingerprinting, sitemap-first verification, and strict conditional request discipline.</t>
      <?line 1591?>

<t>Test Vector 2: Entity and Unicode
- Input String (literal): <tt>Test &amp;amp; Unicode: café-</tt>
- Normalized String: <tt>test &amp; unicode: café-</tt>
- SHA‑256 (hex): <tt>f58639b586fac9cb70d4513c83a6b2954178a80f12f5c1069aad09d124ef7b24</tt>
- <tt>contentHash</tt>: <tt>sha256-f58639b586fac9cb70d4513c83a6b2954178a80f12f5c1069aad09d124ef7b24</tt>
- <tt>ETag</tt>: <tt>"sha256-f58639b586fac9cb70d4513c83a6b2954178a80f12f5c1069aad09d124ef7b24"</tt></t>
    </abstract>
  </front>
  <middle>
    <?line 172?>

<section anchor="introduction">
      <name>Introduction</name>
      <t>Automated agents (AI crawlers, search engines, content aggregators) increasingly consume web content at scale. Traditional HTML delivery designed for human browsers imposes unnecessary overhead: presentational boilerplate (navigation, footers, advertisements), large CSS/JavaScript bundles, and redundant fetches of unchanged content.</t>
      <t>Existing approaches address portions of this problem:</t>
      <ul spacing="normal">
        <li>
          <t>XML Sitemaps <xref target="XMLSitemaps"/> provide discovery but lack content fingerprints</t>
        </li>
        <li>
          <t>AMP <xref target="AMP"/> reduces HTML overhead but lacks synchronized hashing</t>
        </li>
        <li>
          <t>ResourceSync <xref target="ResourceSync"/> provides digest-based synchronization but lacks endpoint-level validator discipline</t>
        </li>
      </ul>
      <t>The Collaboration Tunnel Protocol (TCT, also referred to as "collab-tunnel") integrates these concepts into a cohesive system optimized for machine consumption while preserving human-readable canonical URLs for SEO and web compatibility.</t>
      <section anchor="problem-statement">
        <name>Problem Statement</name>
        <t>Current AI crawler behavior (2025) demonstrates:</t>
        <ol spacing="normal" type="1"><li>
            <t><strong>Bandwidth Waste</strong>: Fetching full HTML documents when only core content is needed</t>
          </li>
          <li>
            <t><strong>Token Overhead</strong>: Processing boilerplate (navigation, footers) consumes 86% of tokens</t>
          </li>
          <li>
            <t><strong>Redundant Fetches</strong>: No efficient skip mechanism when content unchanged</t>
          </li>
          <li>
            <t><strong>Lack of Verification</strong>: No cryptographic proof of content delivery</t>
          </li>
        </ol>
        <t>Measured impact (from live deployments):</t>
        <ul spacing="normal">
          <li>
            <t>HTML-only retrieval: 103 KB average (13,900 tokens)</t>
          </li>
          <li>
            <t>TCT JSON delivery: 17.7 KB average (1,960 tokens)</t>
          </li>
          <li>
            <t><strong>Savings: 83% bandwidth, 86% tokens</strong></t>
          </li>
        </ul>
      </section>
      <section anchor="terminology">
        <name>Terminology</name>
        <t>The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be interpreted as described in BCP 14 <xref target="RFC2119"/> <xref target="RFC8174"/> when, and only when, they appear in all capitals, as shown here.</t>
        <t><strong>C-URL (Canonical URL)</strong>: The human-readable URL of a web resource, typically serving HTML.</t>
        <t><strong>M-URL (Machine URL)</strong>: A deterministically mapped endpoint serving machine-readable structured content for the same resource.</t>
        <t><strong>Template-Invariant Fingerprint</strong>: A cryptographic hash computed from normalized core content, stable across presentation changes.</t>
        <t><strong>Core Content</strong>: The primary informational content of a resource, excluding presentational boilerplate.</t>
      </section>
    </section>
    <section anchor="protocol-overview">
      <name>Protocol Overview</name>
      <t>The Collaboration Tunnel Protocol consists of four coordinated mechanisms:</t>
      <ol spacing="normal" type="1"><li>
          <t><strong>Bidirectional Discovery</strong>: Explicit C-URL &lt;-&gt; M-URL handshake preventing SEO conflicts</t>
        </li>
        <li>
          <t><strong>Template-Invariant Fingerprinting</strong>: Normalized content hashing for stable cache validation</t>
        </li>
        <li>
          <t><strong>Conditional Request Discipline</strong>: Strict If-None-Match precedence and 304 responses</t>
        </li>
        <li>
          <t><strong>Sitemap-First Verification</strong>: Zero-fetch skip logic when content unchanged</t>
        </li>
      </ol>
      <section anchor="architecture">
        <name>Architecture</name>
        <artwork><![CDATA[
+------------------------+          +----------------------+
|  Publisher (Origin)    |          |  Automated Agent     |
+------------------------+          +----------------------+
|                        |          |                      |
|  C-URL (HTML)          |<---------|  1. Fetch Sitemap    |
|  +- <link rel=         |          |                      |
|  |  "alternate"        |          |  2. Compare Hashes   |
|  |  type="application/ |          |     (Zero-Fetch)     |
|  |       json"         |          |                      |
|  |  href="/llm/">      |          |  3. If Changed:      |
|                        |          |     GET /llm/        |
|  M-URL (/llm/)         |<---------|     If-None-Match    |
|  +- Link: canonical    |          |                      |
|  +- ETag: sha256-...   |          |                      |
|  +- Content-Type: JSON |--------->|  4. 304 or 200+JSON  |
|                        |          |                      |
|  /llm-sitemap.json     |          |  5. Cache ETag       |
|  +- {cUrl, mUrl,       |<---------|                      |
|  |   contentHash}      |          |                      |
+------------------------+          +----------------------+
]]></artwork>
      </section>
    </section>
    <section anchor="protocol-requirements">
      <name>Protocol Requirements</name>
      <t>This section defines the normative requirements for TCT compliance.</t>
      <section anchor="must-requirements">
        <name>MUST Requirements</name>
        <t>Implementations MUST:</t>
        <ol spacing="normal" type="1"><li>
            <t><strong>Bidirectional Discovery</strong>
            </t>
            <ul spacing="normal">
              <li>
                <t>C-URL HTML MUST include <tt>&lt;link rel="alternate" type="application/json"&gt;</tt> pointing to M-URL</t>
              </li>
              <li>
                <t>M-URL response MUST include <tt>Link: &lt;c-url&gt;; rel="canonical"</tt> HTTP header</t>
              </li>
            </ul>
          </li>
          <li>
            <t><strong>Validators</strong>
            </t>
            <ul spacing="normal">
              <li>
                <t>M-URL response MUST include <tt>ETag</tt> header</t>
              </li>
              <li>
                <t>M-URL response SHOULD include <tt>Last-Modified</tt> header when available</t>
              </li>
              <li>
                <t>Sitemap MUST include <tt>contentHash</tt> field for each URL</t>
              </li>
            </ul>
          </li>
          <li>
            <t><strong>Conditional Requests</strong>
            </t>
            <ul spacing="normal">
              <li>
                <t>M-URL responses MUST use strong ETags for template-invariant fingerprints: <tt>"sha256-&lt;64 lowercase ASCII hex chars&gt;"</tt></t>
              </li>
              <li>
                <t>Server MUST honor <tt>If-None-Match</tt> header</t>
              </li>
              <li>
                <t>Server MUST return <tt>304 Not Modified</tt> when ETag matches</t>
              </li>
              <li>
                <t>Server MUST give <tt>If-None-Match</tt> precedence over <tt>If-Modified-Since</tt> (see <xref target="RFC9110"/>, Section 13.1.2)</t>
              </li>
              <li>
                <t>If-Range requires a strong validator. If the If-Range validator is weak or does not match, the server MUST ignore the Range header and send <tt>200 OK</tt> with the full representation (per <xref target="RFC9110"/>, Section 13.1.5)</t>
              </li>
              <li>
                <t>Servers MUST NOT assemble ranges across different encodings; ranges apply only to the selected representation variant.</t>
              </li>
            </ul>
          </li>
          <li>
            <t><strong>304 Response</strong>
            </t>
            <ul spacing="normal">
              <li>
                <t>Response MUST NOT include message body</t>
              </li>
              <li>
                <t>Servers MUST include ETag if the corresponding 200 would; otherwise SHOULD include ETag</t>
              </li>
              <li>
                <t>Servers SHOULD include Cache-Control (consistent with <xref target="RFC9110"/>, Section 15.4.5)</t>
              </li>
            </ul>
          </li>
          <li>
            <t><strong>HEAD Support</strong>
            </t>
            <ul spacing="normal">
              <li>
                <t>Servers SHOULD support HEAD requests for all M-URLs and sitemaps</t>
              </li>
              <li>
                <t>HEAD responses MUST return the same validators and cache headers as GET and MUST NOT include a message body</t>
              </li>
              <li>
                <t>Body-dependent headers (e.g., Content-Length) MAY reflect the size of the corresponding GET response</t>
              </li>
              <li>
                <t>This behavior applies across HTTP/1.1, HTTP/2, and HTTP/3</t>
              </li>
              <li>
                <t>Implementations MUST avoid hop-by-hop headers on M-URLs and sitemaps and SHOULD NOT use transfer-codings or trailers on these responses</t>
              </li>
            </ul>
          </li>
          <li>
            <t><strong>Sitemap Parity</strong>
            </t>
            <ul spacing="normal">
              <li>
                <t>Sitemap <tt>contentHash</tt> value MUST equal M-URL <tt>ETag</tt> value (excluding quotes)</t>
              </li>
              <li>
                <t>Example: M-URL ETag <tt>"sha256-abc"</tt> -&gt; Sitemap contentHash <tt>sha256-abc</tt></t>
              </li>
              <li>
                <t>See "Template-Invariant Fingerprinting" and "ETag Generation" for computation and format details</t>
              </li>
            </ul>
          </li>
          <li>
            <t><strong>Canonical Verification (Agents)</strong>
            </t>
            <ul spacing="normal">
              <li>
                <t>Agents MUST verify that the M-URL response includes <tt>Link: &lt;c-url&gt;; rel="canonical"</tt> and that the canonical URL matches the expected C-URL before processing</t>
              </li>
              <li>
                <t>If the canonical link is missing or mismatched, agents SHOULD treat the endpoint as non-compliant and skip ingestion</t>
              </li>
              <li>
                <t>If HTML <tt>&lt;link rel="alternate"&gt;</tt> discovery and the M-URL's self-declared canonical conflict, agents SHOULD prefer the M-URL's self-declared canonical and flag for operator review</t>
              </li>
            </ul>
          </li>
          <li>
            <t><strong>Protected Sitemaps</strong>
            </t>
            <ul spacing="normal">
              <li>
                <t>Sitemaps that list protected M-URLs MUST NOT be served without access controls equivalent to those applied to the corresponding M-URLs</t>
              </li>
            </ul>
          </li>
          <li>
            <t><strong>Client Parity Behavior (Agents)</strong>
            </t>
            <ul spacing="normal">
              <li>
                <t>Agents MUST NOT attempt to recompute the fingerprint from C-URL HTML to verify parity</t>
              </li>
              <li>
                <t>Agents MUST verify parity by comparing the sitemap <tt>contentHash</tt> value to the M-URL <tt>ETag</tt> value (excluding quotes)</t>
              </li>
              <li>
                <t>The comparison is a simple string equality check: <tt>contentHash === cleanETag(ETag)</tt></t>
              </li>
              <li>
                <t>Agents SHOULD NOT implement the normalization algorithm for compliance purposes; parity verification is sufficient</t>
              </li>
            </ul>
          </li>
          <li>
            <t><strong>Content Pages Only</strong>
   - Publishers SHOULD NOT provide M-URLs for archive, category, tag, search, or date-based listing pages; where requested, servers SHOULD return 404
   - Deployments with strong rationale MAY include such endpoints but MUST maintain parity semantics
   - Sitemaps SHOULD include only content pages (posts, articles, pages)
   - A homepage MAY be included only if it represents stable content</t>
          </li>
        </ol>
      </section>
      <section anchor="should-recommendations">
        <name>SHOULD Recommendations</name>
        <t>Implementations SHOULD:</t>
        <ol spacing="normal" type="1"><li>
            <t><strong>Cache-Control</strong>
            </t>
            <ul spacing="normal">
              <li>
                <t>Use: <tt>max-age=0, must-revalidate, stale-while-revalidate=60, stale-if-error=86400</tt></t>
              </li>
              <li>
                <t>Rationale: Enables revalidation with graceful stale serving</t>
              </li>
            </ul>
          </li>
          <li>
            <t><strong>Vary Header</strong>
            </t>
            <ul spacing="normal">
              <li>
                <t>Include: <tt>Vary: Accept-Encoding</tt></t>
              </li>
              <li>
                <t>Rationale: Content varies by compression (gzip, br)</t>
              </li>
            </ul>
          </li>
          <li>
            <t><strong>Strong ETags</strong>
            </t>
            <ul spacing="normal">
              <li>
                <t>Use strong ETags (<tt>"sha256-..."</tt>) for TCT semantic fingerprints (per MUST requirement #3)</t>
              </li>
              <li>
                <t>Rationale: Normalized content produces byte-identical JSON responses; strong validators ensure reliable cache compatibility</t>
              </li>
              <li>
                <t>Note: Strong ETags MAY be used for representation-specific caching outside TCT parity (e.g., CDN byte-level caching)</t>
              </li>
            </ul>
          </li>
          <li>
            <t><strong>Content Pages Only</strong>
            </t>
            <ul spacing="normal">
              <li>
                <t>Return 404 for M-URL requests to archive pages</t>
              </li>
              <li>
                <t>Include only content pages in sitemap</t>
              </li>
            </ul>
          </li>
        </ol>
      </section>
      <section anchor="may-extensions">
        <name>MAY Extensions</name>
        <t>Implementations MAY:</t>
        <ol spacing="normal" type="1"><li>
            <t><strong>Policy Descriptor</strong>
            </t>
            <ul spacing="normal">
              <li>
                <t>Servers MAY advertise a machine-readable policy via <tt>Link: &lt;/llm-policy.json&gt;; rel="describedby"; type="application/json"</tt></t>
              </li>
              <li>
                <t>The policy document format is informative and out of scope for the core protocol (see Publisher Policy Descriptor section)</t>
              </li>
            </ul>
          </li>
          <li>
            <t><strong>Additional Integrity</strong>
            </t>
            <ul spacing="normal">
              <li>
                <t>Use <tt>Content-Digest</tt> header (<xref target="RFC9530"/>)</t>
              </li>
              <li>
                <t>Use HTTP Message Signatures (<xref target="RFC9421"/>)</t>
              </li>
            </ul>
          </li>
          <li>
            <t><strong>Additional Formats</strong>
            </t>
            <ul spacing="normal">
              <li>
                <t>Provide PDF JSON alternates</t>
              </li>
              <li>
                <t>Provide receipt/proof systems</t>
              </li>
            </ul>
          </li>
        </ol>
      </section>
    </section>
    <section anchor="bidirectional-discovery">
      <name>Bidirectional Discovery</name>
      <t>Note: Path names in examples are non-normative. This specification does not require any specific URL paths. Example path "/llm/" is illustrative. Servers MAY choose alternative slugs or publish mappings. Agents MUST NOT assume a fixed path and SHOULD discover M-URLs via HTML <tt>rel="alternate"</tt>, HTTP <tt>Link</tt> headers, or the JSON sitemap.</t>
      <section anchor="c-url-to-m-url-mapping">
        <name>C-URL to M-URL Mapping</name>
        <t>The C-URL MUST include an HTML <tt>&lt;link&gt;</tt> element in the document <tt>&lt;head&gt;</tt>:</t>
        <sourcecode type="html"><![CDATA[
<link rel="alternate"
      type="application/json"
      href="https://example.com/post/llm/">
]]></sourcecode>
        <t><strong>Attributes:</strong></t>
        <ul spacing="normal">
          <li>
            <t><tt>rel="alternate"</tt>: Indicates alternate representation (<xref target="RFC8288"/>)</t>
          </li>
          <li>
            <t><tt>type="application/json"</tt>: Machine-readable format</t>
          </li>
          <li>
            <t><tt>href</tt>: Absolute or relative URL to M-URL</t>
          </li>
        </ul>
      </section>
      <section anchor="m-url-to-c-url-canonicalization">
        <name>M-URL to C-URL Canonicalization</name>
        <t>The M-URL response MUST include an HTTP <tt>Link</tt> header with <tt>rel="canonical"</tt>:</t>
        <sourcecode type="http"><![CDATA[
Link: <https://example.com/post/>; rel="canonical"
]]></sourcecode>
        <t>This establishes bidirectional verification and prevents SEO duplication. The canonical link relation is registered by <xref target="RFC6596"/>.</t>
      </section>
      <section anchor="deterministic-mapping">
        <name>Deterministic Mapping</name>
        <t>M-URLs SHOULD follow a deterministic pattern from C-URLs.</t>
        <t><strong>Non-normative examples</strong>: Append a slug to the C-URL path, such as <tt>/llm/</tt>.</t>
        <t>Example:
- C-URL: <tt>https://example.com/post/</tt>
- M-URL: <tt>https://example.com/post/llm/</tt></t>
        <t><strong>Guidance</strong>:
- These path patterns are examples, not protocol requirements. If a preferred slug collides with existing site routes, publishers MAY choose an alternate (e.g., <tt>/api/llm/</tt>, <tt>/content/llm/</tt>) or publish a mapping in a site-level manifest.
- Agents MUST NOT assume a fixed path. Agents SHOULD discover M-URLs via HTML <tt>&lt;link rel="alternate" type="application/json"&gt;</tt>, HTTP <tt>Link</tt> headers, or the JSON sitemap.</t>
        <t><strong>Migration Note</strong>: Publishers MAY use HTTP 308 Permanent Redirect to migrate from legacy paths to preferred endpoints and SHOULD list only the primary M-URL in the sitemap.</t>
        <t><strong>Sitemap Discovery</strong>:</t>
        <t>Publishers SHOULD advertise the sitemap via one or both of:</t>
        <ol spacing="normal" type="1"><li>
            <t><strong>Link header</strong> (RECOMMENDED) on the homepage or C-URL responses:</t>
          </li>
        </ol>
        <sourcecode type="http"><![CDATA[
Link: </llm-sitemap.json>; rel="index"; type="application/json"
]]></sourcecode>
        <ol spacing="normal" type="1"><li>
            <t><strong>Well-known URI</strong> (OPTIONAL): Agents MAY check <tt>/.well-known/llm-sitemap.json</tt>. The <tt>.well-known</tt> URI convention follows <xref target="RFC8615"/>.</t>
          </li>
        </ol>
        <t>Note: The well-known URI is not registered in IANA for -00; future versions may formalize this. Agents SHOULD try the Link header first, then fall back to well-known URI if needed.</t>
      </section>
      <section anchor="content-pages-only">
        <name>Content Pages Only</name>
        <t>Publishers SHOULD NOT provide M-URLs for archive, category, tag, search, or date-based listing pages; where requested, servers SHOULD return 404. Deployments with strong rationale MAY include such endpoints but MUST maintain parity semantics.</t>
        <t><strong>Rationale:</strong></t>
        <ul spacing="normal">
          <li>
            <t>Archive pages contain navigation and lists, not primary content</t>
          </li>
          <li>
            <t>Template-invariant fingerprinting is designed for stable content, not dynamic lists</t>
          </li>
          <li>
            <t>Archive pages change frequently as new content is published</t>
          </li>
        </ul>
        <t><strong>Implementation:</strong></t>
        <ul spacing="normal">
          <li>
            <t>Publishers SHOULD return HTTP 404 for M-URL requests to archive pages</t>
          </li>
          <li>
            <t>Sitemaps SHOULD include only content page URLs, not archives</t>
          </li>
          <li>
            <t>Homepage MAY be included if it represents stable content</t>
          </li>
        </ul>
        <t><strong>Dynamic Homepage Guidance:</strong></t>
        <t>If the homepage displays a dynamic content roll-up (e.g., recent posts, latest articles), publishers SHOULD prefer one of:</t>
        <ul spacing="normal">
          <li>
            <t>Provide a synthesized stable overview representing the site (name, description, purpose)</t>
          </li>
          <li>
            <t>Include a stable "About" page as the first sitemap item instead of the homepage</t>
          </li>
        </ul>
        <t>Rationale: Dynamic homepages change frequently and may not provide valuable semantic content for automated agents.
 - CMS guidance (non-normative): For platforms like WordPress, exclude archive-like routes (e.g., category, tag, search, date, author) from M-URL handling and return 404 rather than 200 with empty payload. Ensure only singular content types (posts, pages, articles) emit M-URLs and sitemap entries.</t>
        <t><strong>Content page examples:</strong>
- Blog posts: <tt>/blog/understanding-tct/</tt>
- Articles: <tt>/news/2025/protocol-launch/</tt>
- Static pages: <tt>/about/</tt>, <tt>/contact/</tt></t>
        <t><strong>Archive page examples (should NOT have M-URLs):</strong>
- Category archives: <tt>/category/technology/</tt>
- Tag archives: <tt>/tag/web-protocols/</tt>
- Date archives: <tt>/2025/10/</tt>
- Search results: <tt>/search/?q=protocol</tt>
- Author archives: <tt>/author/john/</tt></t>
      </section>
    </section>
    <section anchor="template-invariant-fingerprinting">
      <name>Template-Invariant Fingerprinting</name>
      <section anchor="publisher-source-of-content-informative">
        <name>Publisher Source of Content (Informative)</name>
        <t>The M-URL JSON payload SHOULD be produced from the platform's core content body (e.g., the WordPress post content field, a CMS article body), independent of the theme or template layer. This ensures the fingerprint is template-invariant.</t>
        <t>Publishers MAY include additional semantic text in the <tt>content</tt> field to make the fingerprint sensitive to changes in those elements. For example:</t>
        <ul spacing="normal">
          <li>
            <t>Title: Including the resource title ensures title changes produce new fingerprints</t>
          </li>
          <li>
            <t>Media descriptions: Including image alt text or &lt;figcaption&gt; content ensures accessibility metadata is tracked</t>
          </li>
          <li>
            <t>Deterministic order: If multiple elements are included, use a consistent order (e.g., title, blank line, main content)</t>
          </li>
        </ul>
        <t>Example reconstructed content:</t>
        <artwork><![CDATA[
Understanding the Collaboration Tunnel Protocol

The Collaboration Tunnel Protocol enables efficient content delivery.
Diagram showing protocol flow. The protocol achieves 80-90% bandwidth
reduction through conditional requests.
]]></artwork>
        <t>This approach balances template-invariance (content independent of presentation) with semantic completeness (title and media descriptions included). Publishers using this approach should ensure all included text goes through the same normalization pipeline defined in the next section.</t>
        <t><strong>Example of <tt>content</tt> Field Construction:</strong></t>
        <t>A publisher implementation might construct the <tt>content</tt> field by combining several data sources in a deterministic order.</t>
        <t>Input Data:
- Title: <tt>TCT Protocol Guide</tt>
- Body Paragraph 1: <tt>The protocol is simple.</tt>
- Image Alt: <tt>A flow diagram</tt>
- Body Paragraph 2: <tt>It saves bandwidth.</tt></t>
        <t>Resulting <tt>content</tt> string in the JSON Payload:</t>
        <artwork><![CDATA[
TCT Protocol Guide

The protocol is simple.

[Image: A flow diagram]

It saves bandwidth.
]]></artwork>
        <t>This creates a readable representation that is also a stable and reliable input for the fingerprinting algorithm.</t>
      </section>
      <section anchor="normalization-algorithm">
        <name>Normalization Algorithm</name>
        <t>To generate the template-invariant fingerprint, the server MUST operate on the JSON payload's <tt>content</tt> field (not on the C-URL HTML), applying the following steps in order:</t>
        <ol spacing="normal" type="1"><li>
            <t>Decode HTML Entities: Decode any HTML entities present in the content string (e.g., <tt>&amp;amp;</tt> -&gt; <tt>&amp;</tt>, <tt>&amp;#x2014;</tt> -&gt; <tt>-</tt>)</t>
          </li>
          <li>
            <t>Apply Unicode Normalization: Apply Unicode Normalization Form KC (NFKC) as defined in Unicode Standard Annex #15</t>
          </li>
          <li>
            <t>Apply Unicode Case Folding: Convert to lowercase using the standard, locale-independent Unicode case-folding algorithm as defined in the Unicode Standard</t>
          </li>
          <li>
            <t>Remove Control Characters: Remove all characters in the Unicode general category "Control" (Cc), which includes characters U+0000 through U+001F and U+007F through U+009F. Preserve only U+0009 (TAB), U+000A (LINE FEED), and U+000D (CARRIAGE RETURN) for subsequent whitespace collapsing.</t>
          </li>
          <li>
            <t>Collapse Whitespace: Replace any sequence of one or more ASCII whitespace characters (U+0020 SPACE, U+0009 TAB, U+000A LINE FEED, U+000D CARRIAGE RETURN) with a single ASCII SPACE (U+0020)</t>
          </li>
          <li>
            <t>Trim Whitespace: Remove any leading or trailing ASCII SPACE characters</t>
          </li>
          <li>
            <t>Compute Hash: Compute the SHA-256 hash over the resulting string (encoded as UTF-8)</t>
          </li>
        </ol>
        <t>The strong ETag MUST be <tt>"sha256-&lt;64 lowercase ASCII hex chars&gt;"</tt> from this hash. The sitemap <tt>contentHash</tt> MUST be <tt>sha256-&lt;64 lowercase ASCII hex chars&gt;</tt> from the same hash (without the <tt>W/</tt> prefix and quotes).</t>
        <t>Example (pseudocode):</t>
        <artwork><![CDATA[
function generateFingerprint(contentString):
  normalized = contentString
    .decodeEntities()
    .unicodeNormalize('NFKC')
    .casefold()
    .removeControlChars()
    .collapseWhitespace()
    .trim()

  return "sha256-" + sha256(normalized)
]]></artwork>
        <t>Note: This normalization operates on the plain-text <tt>content</tt> field in the JSON payload, not on HTML from the C-URL.</t>
        <t>Normalization uses Unicode NFKC <xref target="UAX15"/> and Unicode case folding <xref target="Unicode-CaseFolding"/>; named character references are decoded per the HTML Living Standard <xref target="WHATWG-HTML"/>.</t>
      </section>
      <section anchor="deterministic-json-serialization-normative">
        <name>Deterministic JSON Serialization (Normative)</name>
        <t>Implementations MUST use deterministic JSON serialization when generating M-URL responses to ensure that identical inputs yield byte-identical JSON.</t>
        <t><strong>Required Properties:</strong></t>
        <ul spacing="normal">
          <li>
            <t><strong>Stable object key order:</strong> Lexicographic ordering by Unicode codepoint at every depth</t>
          </li>
          <li>
            <t><strong>Preserve array order:</strong> Arrays MUST maintain element order as defined</t>
          </li>
          <li>
            <t><strong>UTF-8 encoding:</strong> Without BOM; emit exactly one JSON document; no trailing newline</t>
          </li>
          <li>
            <t><strong>Compact serialization:</strong> No pretty-print; no extraneous whitespace</t>
          </li>
          <li>
            <t><strong>Consistent escaping per <xref target="RFC8259"/>:</strong>
            </t>
            <ul spacing="normal">
              <li>
                <t>Escape quotation mark (U+0022) and backslash (U+005C)</t>
              </li>
              <li>
                <t>Do not escape solidus (U+002F)</t>
              </li>
              <li>
                <t>Emit Unicode as UTF-8; use <tt>\uXXXX</tt> only where required by <xref target="RFC8259"/></t>
              </li>
            </ul>
          </li>
          <li>
            <t><strong>Numbers:</strong> MUST be in minimal canonical form (no leading zeros, no "+", lowercase "e")</t>
          </li>
          <li>
            <t><strong>Non-finite numbers:</strong> JSON numbers MUST NOT represent NaN or infinite values. Producers MUST NOT emit non-finite values; consumers encountering them MUST treat the payload as invalid. Values that cannot be portably represented SHOULD be encoded as strings with schema guidance</t>
          </li>
        </ul>
        <t><strong>Deterministic field inclusion:</strong></t>
        <t>The set of fields included and their values for a given resource MUST be deterministic. Fields that vary independently of the normalized content MUST NOT be included unless they are a deterministic function of that content.</t>
        <t><strong>Recommendation:</strong></t>
        <t>Implementations SHOULD use <xref target="RFC8785"/> (JSON Canonicalization Scheme) or document an equivalent deterministic serialization profile to ensure cross-platform consistency.</t>
      </section>
      <section anchor="strong-etag-and-parity-normative">
        <name>Strong ETag and Parity (Normative)</name>
        <t>Servers emitting strong validators MUST ensure that the ETag value changes whenever the final serialized JSON payload bytes change; equality of strong ETag values MUST imply byte-identical representations.</t>
        <t>The 64 hexadecimal digits in the hash value MUST be lowercase ASCII.</t>
        <t>ETag values MUST be sent as a quoted-string per <xref target="RFC9110"/>.</t>
        <section anchor="method-a-canonical-json-strong-byte-recommended">
          <name>Method A: Canonical JSON Strong-Byte (Recommended)</name>
          <t><strong>Computation:</strong></t>
          <ol spacing="normal" type="1"><li>
              <t>Build the JSON response object WITHOUT the <tt>hash</tt> field</t>
            </li>
            <li>
              <t>Canonicalize the JSON per the deterministic serialization requirements above</t>
            </li>
            <li>
              <t>Compute <tt>F = SHA-256(canonical_json_bytes)</tt> as 64 hexadecimal characters</t>
            </li>
            <li>
              <t>Set the hash value: <tt>hash_value = "sha256-" + F</tt></t>
            </li>
            <li>
              <t>Add the <tt>hash</tt> field to the JSON payload: <tt>payload.hash = hash_value</tt></t>
            </li>
            <li>
              <t>Set HTTP headers:
              </t>
              <ul spacing="normal">
                <li>
                  <t><tt>ETag: "sha256-" + F</tt></t>
                </li>
                <li>
                  <t>Sitemap: <tt>contentHash: "sha256-" + F</tt></t>
                </li>
              </ul>
            </li>
            <li>
              <t>Servers MUST canonicalize the final payload (now including the hash field) before sending, using the same deterministic serialization profile</t>
            </li>
          </ol>
          <t><strong>Rationale:</strong></t>
          <t>This method guarantees strong ETag semantics even as the protocol evolves to add new fields. Any change to the JSON representation correctly changes the ETag, ensuring byte-identical validation per <xref target="RFC9110"/>.</t>
          <t>Computing the ETag over the canonical form of the payload without the <tt>hash</tt> field still satisfies strong validator semantics because the final payload bytes are a deterministic function of that canonical pre-hash payload and the ETag value.</t>
          <t>Servers SHOULD compute F over identity-coded (uncompressed) canonical bytes and MAY reuse the same ETag across compressed variants; servers MUST set Vary: Accept-Encoding.</t>
          <t><strong>Example:</strong></t>
          <sourcecode type="pseudocode"><![CDATA[
json_without_hash = {
  "profile": "tct-1",
  "canonical_url": "https://example.com/post/",
  "title": "Article Title",
  "content": "Normalized content text..."
}

canonical_bytes = canonicalize_json(json_without_hash)
F = sha256(canonical_bytes).hexdigest()  // 64 hex chars
hash_value = "sha256-" + F

json_with_hash = json_without_hash
json_with_hash["hash"] = hash_value

response.setHeader("ETag", '"' + hash_value + '"')
response.send(json_with_hash)
]]></sourcecode>
        </section>
        <section anchor="method-b-content-locked-strong-content-allowed-with-restrictions">
          <name>Method B: Content-Locked Strong-Content (Allowed with Restrictions)</name>
          <t><strong>Computation:</strong></t>
          <ol spacing="normal" type="1"><li>
              <t>Extract and normalize content per the 6-step normalization algorithm</t>
            </li>
            <li>
              <t>Compute <tt>F = SHA-256(normalized_content_utf8_bytes)</tt> as 64 hexadecimal characters</t>
            </li>
            <li>
              <t>Set the hash value: <tt>hash_value = "sha256-" + F</tt></t>
            </li>
            <li>
              <t>Build the JSON payload deterministically from the normalized content</t>
            </li>
            <li>
              <t>Set HTTP headers:
              </t>
              <ul spacing="normal">
                <li>
                  <t><tt>ETag: "sha256-" + F</tt></t>
                </li>
                <li>
                  <t>Sitemap: <tt>contentHash: "sha256-" + F</tt></t>
                </li>
                <li>
                  <t>JSON payload: <tt>hash: "sha256-" + F</tt></t>
                </li>
              </ul>
            </li>
          </ol>
          <t><strong>Restrictions:</strong></t>
          <t>This method is ONLY valid if:</t>
          <ul spacing="normal">
            <li>
              <t>The ENTIRE JSON representation is a deterministic function of the normalized content and fixed protocol constants</t>
            </li>
            <li>
              <t>NO field may vary independently of the normalized content</t>
            </li>
            <li>
              <t>Adding or changing any field REQUIRES recomputing the hash from updated content</t>
            </li>
          </ul>
          <t><strong>Rationale:</strong></t>
          <t>If the final JSON bytes are strictly determined by content, then content-hashing produces the same result as JSON-hashing. This preserves template-invariance: same content text produces the same hash regardless of HTML/theme presentation.</t>
          <t><strong>Caution:</strong></t>
          <t>Future protocol versions that add metadata fields (e.g., <tt>language</tt>, <tt>author</tt>, <tt>published_date</tt>) independent of content text would violate strong semantics with this method. Such deployments MUST migrate to Method A.</t>
        </section>
      </section>
      <section anchor="parity-rule-normative">
        <name>Parity Rule (Normative)</name>
        <t>Sitemap <tt>contentHash</tt>, JSON payload <tt>hash</tt> field, and M-URL ETag value MUST satisfy:</t>
        <artwork><![CDATA[
contentHash == clean(ETag) == payload.hash
]]></artwork>
        <t>Where <tt>clean(ETag)</tt> removes surrounding quotes from the ETag header value.</t>
        <t><strong>Example:</strong></t>
        <ul spacing="normal">
          <li>
            <t>HTTP Header: <tt>ETag: "sha256-2c26b46b68ffc68f..."</tt></t>
          </li>
          <li>
            <t>Sitemap: <tt>contentHash: sha256-2c26b46b68ffc68f...</tt></t>
          </li>
          <li>
            <t>JSON Payload: <tt>"hash": "sha256-2c26b46b68ffc68f..."</tt></t>
          </li>
        </ul>
        <t><strong>Verification:</strong></t>
        <t>Clients MUST verify parity through string equality and MUST NOT recompute hashes from HTML. Clients that detect parity violations SHOULD log a warning and MAY reject the response.</t>
      </section>
      <section anchor="template-invariance">
        <name>Template-Invariance</name>
        <t>TCT's template-invariance property means that HTML presentation changes (theme updates, CSS/JavaScript modifications, navigation restructuring) do not affect the protocol's hash values, provided the core content (title + body text) remains unchanged.</t>
        <t><strong>With Method A (Canonical JSON Strong-Byte):</strong></t>
        <ul spacing="normal">
          <li>
            <t>HTML changes -&gt; No effect on normalized content -&gt; No effect on JSON -&gt; ETag unchanged OK</t>
          </li>
          <li>
            <t>JSON field addition/change -&gt; JSON bytes change -&gt; ETag changes OK</t>
          </li>
          <li>
            <t>Result: Template-invariance preserved AND strong ETag semantics correct</t>
          </li>
        </ul>
        <t><strong>With Method B (Content-Locked Strong-Content):</strong></t>
        <ul spacing="normal">
          <li>
            <t>HTML changes -&gt; No effect on normalized content -&gt; ETag unchanged OK</t>
          </li>
          <li>
            <t>Content changes -&gt; Hash changes -&gt; ETag changes OK</t>
          </li>
          <li>
            <t>Independent JSON field changes -&gt; FAIL Would violate strong semantics (not allowed)</t>
          </li>
        </ul>
        <t><strong>Summary:</strong></t>
        <t>Template-invariance addresses HTML/theme independence. Strong ETag semantics address JSON byte-identity. Both properties are compatible when JSON is deterministic.</t>
      </section>
    </section>
    <section anchor="conditional-request-discipline">
      <name>Conditional Request Discipline</name>
      <section anchor="if-none-match-precedence">
        <name>If-None-Match Precedence</name>
        <t>When both <tt>If-None-Match</tt> and <tt>If-Modified-Since</tt> headers are present, servers MUST give <tt>If-None-Match</tt> precedence per <xref target="RFC9110"/>, Section 13.1.2. This means:</t>
        <ol spacing="normal" type="1"><li>
            <t>Evaluate <tt>If-None-Match</tt> first</t>
          </li>
          <li>
            <t>If ETag matches, return <tt>304 Not Modified</tt> (ignore <tt>If-Modified-Since</tt>)</t>
          </li>
          <li>
            <t>If ETag doesn't match, process <tt>If-Modified-Since</tt> (if present)</t>
          </li>
        </ol>
        <t><strong>Rationale:</strong> ETags provide stronger validation than modification dates, especially for semantic fingerprints.</t>
      </section>
      <section anchor="not-modified-response">
        <name>304 Not Modified Response</name>
        <t>When the ETag matches the <tt>If-None-Match</tt> value:</t>
        <ol spacing="normal" type="1"><li>
            <t>Server MUST respond with <tt>304 Not Modified</tt></t>
          </li>
          <li>
            <t>Response MUST NOT include a message body. Servers MUST include ETag if the corresponding 200 OK would include it; otherwise SHOULD include ETag. Servers SHOULD include Cache-Control (per <xref target="RFC9111"/>) and MAY include Last-Modified</t>
          </li>
        </ol>
        <t><strong>Example:</strong></t>
        <sourcecode type="http"><![CDATA[
HTTP/1.1 304 Not Modified
ETag: "sha256-2c26b46b68ffc68f..."
Last-Modified: Wed, 21 Oct 2025 07:28:00 GMT
Cache-Control: max-age=0, must-revalidate
Cache-Control: stale-while-revalidate=60
Cache-Control: stale-if-error=86400
Vary: Accept-Encoding
]]></sourcecode>
      </section>
      <section anchor="replay-and-stale-intermediaries">
        <name>Replay and Stale Intermediaries</name>
        <t>If an agent receives a 200 whose ETag is older than its cached parity while the sitemap contentHash matches the cached parity, it SHOULD treat the cached/sitemap state as authoritative unless the server signals otherwise (e.g., newer Last-Modified or sitemap value). The agent SHOULD revalidate end-to-end (e.g., Cache-Control: no-cache + If-None-Match) before adopting a regression.</t>
      </section>
      <section anchor="cache-control-directives">
        <name>Cache-Control Directives</name>
        <t>M-URL responses SHOULD use:</t>
        <sourcecode type="http"><![CDATA[
Cache-Control: max-age=0, must-revalidate
Cache-Control: stale-while-revalidate=60
Cache-Control: stale-if-error=86400
]]></sourcecode>
        <t><strong>Directives:</strong>
- <tt>max-age=0</tt>: Require revalidation before serving from cache
- <tt>must-revalidate</tt>: Do not serve stale without successful revalidation
- <tt>stale-while-revalidate=60</tt>: Serve stale while revalidating in background (60s window)
- <tt>stale-if-error=86400</tt>: Serve stale if origin unavailable (24h window)</t>
        <t>Note: Avoid <tt>private</tt> on M-URLs and sitemaps (they are cacheable by shared caches).</t>
      </section>
      <section anchor="vary-header">
        <name>Vary Header</name>
        <t>Responses SHOULD include <tt>Vary: Accept-Encoding</tt> to indicate compression variance:</t>
        <sourcecode type="http"><![CDATA[
Vary: Accept-Encoding
]]></sourcecode>
        <t>M-URL responses primarily vary by compression (gzip, brotli), not by content type (always <tt>application/json</tt>).</t>
        <t>Servers SHOULD NOT vary on User-Agent for M-URLs and sitemaps to preserve cacheability and reduce fragmentation.</t>
      </section>
      <section anchor="head-request-support">
        <name>HEAD Request Support</name>
        <t>Servers SHOULD support HEAD requests for all M-URLs and sitemaps.</t>
        <t>HEAD responses MUST:
- Return same HTTP headers as equivalent GET request
- NOT include a message body
- Include all validators (<tt>ETag</tt>, <tt>Last-Modified</tt>, <tt>Cache-Control</tt>)</t>
        <t><strong>Example:</strong></t>
        <sourcecode type="http"><![CDATA[
HEAD /post/llm/ HTTP/1.1
Host: example.com

HTTP/1.1 200 OK
ETag: "sha256-abc123..."
Last-Modified: Wed, 21 Oct 2025 07:28:00 GMT
Cache-Control: max-age=0, must-revalidate, stale-while-revalidate=60
Vary: Accept-Encoding
Content-Type: application/json
Content-Length: 1234
]]></sourcecode>
        <t>This enables efficient validation without transferring the full response body.</t>
      </section>
    </section>
    <section anchor="sitemap-first-verification">
      <name>Sitemap-First Verification</name>
      <section anchor="json-sitemap-format">
        <name>JSON Sitemap Format</name>
        <t>Publishers SHOULD provide a machine-readable sitemap at a well-known location (e.g., <tt>/llm-sitemap.json</tt>).</t>
        <t>Publishers MAY also include a <tt>Sitemap:</tt> directive in <tt>robots.txt</tt> pointing to the JSON sitemap; agents MAY use it as a discovery hint. If both XML and JSON sitemaps are present, agents that implement this protocol SHOULD prefer the JSON sitemap for TCT.</t>
        <t><strong>Schema:</strong></t>
        <sourcecode type="json"><![CDATA[
{
  "version": 1,
  "profile": "tct-1",
  "items": [
    {
      "cUrl": "https://example.com/post/",
      "mUrl": "https://example.com/post/llm/",
      "modified": "2025-10-01T12:34:56Z",
      "contentHash": "sha256-2c26b46b68ffc68f..."
    }
  ]
}
]]></sourcecode>
        <t><strong>Fields:</strong></t>
        <ul spacing="normal">
          <li>
            <t><tt>version</tt> (integer): Sitemap format version (currently 1)</t>
          </li>
          <li>
            <t><tt>profile</tt> (string, RECOMMENDED): Protocol version identifier (e.g., "tct-1"). Enables clients to detect protocol capabilities and maintain forward compatibility as the specification evolves.</t>
          </li>
          <li>
            <t><tt>items</tt> (array): List of URL pairs
            </t>
            <ul spacing="normal">
              <li>
                <t><tt>cUrl</tt> (string, required): Canonical URL</t>
              </li>
              <li>
                <t><tt>mUrl</tt> (string, required): Machine URL</t>
              </li>
              <li>
                <t><tt>modified</tt> (string, <xref target="RFC3339"/>): Last modification timestamp</t>
              </li>
              <li>
                <t><tt>contentHash</tt> (string, required): Template-invariant fingerprint (same as M-URL ETag)</t>
              </li>
            </ul>
          </li>
        </ul>
        <t><strong>Parity Rule:</strong></t>
        <t>The sitemap <tt>contentHash</tt> value MUST match the M-URL <tt>ETag</tt> header value, excluding quotes. This enables zero-fetch skip optimization: clients compare sitemap hash to cached ETag without fetching the M-URL.</t>
        <t><strong>Forward Compatibility:</strong></t>
        <t>Clients MUST ignore unknown fields in the sitemap JSON. Servers MAY add additional fields to support future protocol versions. Agents SHOULD read the <tt>profile</tt> field when present; unknown profile values SHOULD NOT cause ingestion failure but MAY be logged for analysis.</t>
      </section>
      <section anchor="sitemap-scalability">
        <name>Sitemap Scalability</name>
        <t>Publishers and agents SHOULD consider scalability for large sites:</t>
        <ul spacing="normal">
          <li>
            <t>Publishers MAY split sitemaps into an index (a sitemap-of-sitemaps) to segment large URL sets (analogous to XML Sitemaps sitemapindex)</t>
          </li>
          <li>
            <t>Servers SHOULD support compression (e.g., <tt>Content-Encoding: gzip</tt> or <tt>br</tt>) for sitemap responses; agents SHOULD accept compressed responses</t>
          </li>
          <li>
            <t>Agents SHOULD use streaming JSON parsers for large sitemaps and enforce a maximum sitemap size (e.g., 100 MB)</t>
          </li>
          <li>
            <t>Servers SHOULD keep per-item objects compact (RECOMMENDED &lt;= 2 KB). Servers MUST bound total sitemap size by an operator-configured budget. When budgets would be exceeded (RECOMMENDED &lt;= 50,000 items per sitemap), servers SHOULD publish a sitemap index and split content</t>
          </li>
        </ul>
        <t><strong>Sitemap Index (Large Sites):</strong></t>
        <t>For sites with thousands of URLs, publishers SHOULD segment sitemaps using a sitemap index (analogous to XML Sitemaps <tt>sitemapindex</tt>). A formal JSON sitemap index schema MAY be specified in future protocol versions. Agents SHOULD support consuming multiple sitemap files.</t>
        <t><strong>Homepage Handling:</strong></t>
        <t>Publishers SHOULD include the site homepage as the <strong>first item</strong> in the sitemap array. This provides automated agents with immediate access to site-level context (site name, description, purpose) before processing individual content pages.</t>
        <t>For homepages that display dynamic content listings (blog roll, latest posts), publishers MAY synthesize stable content representing the site overview rather than the dynamic list.</t>
        <t><strong>Example with homepage first:</strong></t>
        <sourcecode type="json"><![CDATA[
{
  "version": 1,
  "profile": "tct-1",
  "items": [
    {
      "cUrl": "https://example.com/",
      "mUrl": "https://example.com/llm/",
      "modified": "2025-10-15T08:00:00Z",
      "contentHash": "sha256-abc123..."
    },
    {
      "cUrl": "https://example.com/about/",
      "mUrl": "https://example.com/about/llm/",
      "modified": "2025-10-01T10:00:00Z",
      "contentHash": "sha256-def456..."
    }
  ]
}
]]></sourcecode>
        <t><strong>Sitemap HTTP Response:</strong></t>
        <sourcecode type="http"><![CDATA[
GET /llm-sitemap.json HTTP/1.1
Host: example.com

HTTP/1.1 200 OK
Content-Type: application/json
ETag: "sha256-sitemap-fingerprint"
Last-Modified: Wed, 21 Oct 2025 12:00:00 GMT
Cache-Control: max-age=0, must-revalidate, stale-while-revalidate=60
Vary: Accept-Encoding
Content-Length: 4567

{
  "version": 1,
  "profile": "tct-1",
  "items": [...]
}
]]></sourcecode>
        <t><strong>Conditional Sitemap Fetch:</strong></t>
        <sourcecode type="http"><![CDATA[
GET /llm-sitemap.json HTTP/1.1
Host: example.com
If-None-Match: "sha256-sitemap-fingerprint"

HTTP/1.1 304 Not Modified
ETag: "sha256-sitemap-fingerprint"
Cache-Control: max-age=0, must-revalidate, stale-while-revalidate=60
]]></sourcecode>
        <t>Clients SHOULD use conditional requests for sitemap to avoid unnecessary bandwidth when sitemap unchanged.</t>
      </section>
      <section anchor="error-handling-informative">
        <name>Error Handling (Informative)</name>
        <t><strong>Malformed sitemap:</strong> Agents SHOULD treat this as non-fatal; skip entries that fail structural validation; log and continue.</t>
        <t><strong>ETag/contentHash mismatch:</strong> Agents SHOULD treat the endpoint ETag as authoritative, process the change, and update caches. Publishers SHOULD publish sitemaps atomically or include <tt>Last-Modified</tt>.</t>
        <t><strong>M-URL unavailable:</strong> Agents MAY defer the fetch or fall back to the C-URL HTML as a last resort; publishers SHOULD return a 4xx/5xx rather than an empty 200.</t>
        <t><strong>HTTP Status Code Handling:</strong></t>
        <t>Agents SHOULD respect common HTTP status codes for retries and backoff. If a server responds with 410 Gone, the agent SHOULD treat the resource as permanently deleted. If a server responds with 429 Too Many Requests or 503 Service Unavailable, the agent SHOULD honor the Retry-After header if present.</t>
      </section>
      <section anchor="zero-fetch-skip-logic">
        <name>Zero-Fetch Skip Logic</name>
        <t>Automated agents SHOULD:</t>
        <ol spacing="normal" type="1"><li>
            <t>Fetch <tt>/llm-sitemap.json</tt> periodically</t>
          </li>
          <li>
            <t>Compare <tt>contentHash</tt> values to locally cached hashes</t>
          </li>
          <li>
            <t><strong>If hash unchanged</strong>: Skip fetching both C-URL and M-URL (zero-fetch optimization)</t>
          </li>
          <li>
            <t><strong>If hash changed</strong>: Issue conditional GET to M-URL with <tt>If-None-Match</tt></t>
          </li>
        </ol>
        <t>This enables 90%+ skip rate for unchanged content.</t>
        <t><strong>Example workflow:</strong></t>
        <artwork><![CDATA[
Agent: Fetch /llm-sitemap.json
Agent: item.contentHash = "sha256-abc123..."
Agent: cachedHash = lookup(item.mUrl)

if (item.contentHash === cachedHash):
  // Zero-fetch: Content unchanged, skip all requests
  skip()
else:
  // Hash changed, fetch with conditional request
  GET item.mUrl
  Headers: If-None-Match: "sha256-abc123..."

  if (response.status == 304):
    // Still matched at endpoint, update cache
    cache(item.mUrl, item.contentHash)
  else:
    // Content changed, process new data
    process(response.body)
    cache(item.mUrl, response.headers['ETag'])
]]></artwork>
      </section>
    </section>
    <section anchor="publisher-policy-descriptor">
      <name>Publisher Policy Descriptor</name>
      <t>This section is informative.</t>
      <t>Publishers MAY provide a machine-readable policy descriptor at a well-known location (e.g., <tt>/llm-policy.json</tt> or <tt>/.well-known/llm-policy.json</tt>) to communicate usage terms, rate limits, and content licensing preferences to automated agents. Example paths are non-normative.</t>
      <section anchor="policy-endpoint">
        <name>Policy Endpoint</name>
        <t>The policy descriptor SHOULD be available at a stable URL. Example paths (non-normative):</t>
        <artwork><![CDATA[
https://example.com/llm-policy.json
https://example.com/.well-known/llm-policy.json
]]></artwork>
      </section>
      <section anchor="json-schema">
        <name>JSON Schema</name>
        <sourcecode type="json"><![CDATA[
{
  "profile": "tct-policy-1",
  "version": 1,
  "effective": "2025-10-01T00:00:00Z",
  "updated": "2025-10-15T12:00:00Z",

  "policy_urls": {
    "terms_of_service": "https://example.com/terms/",
    "payment_info": "https://example.com/pricing/",
    "contact": "https://example.com/contact/"
  },

  "purposes": {
    "allow_ai_input": true,
    "allow_ai_train": false,
    "allow_search_indexing": true
  },

  "requirements": {
    "attribution_required": true,
    "link_back_required": false,
    "notice_required": true
  },

  "rate_hints": {
    "max_requests_per_second": null,
    "max_requests_per_day": 10000,
    "note": "Advisory limits, honor system"
  }
}
]]></sourcecode>
        <t><strong>Fields:</strong></t>
        <ul spacing="normal">
          <li>
            <t><tt>profile</tt> (string): Policy schema version identifier (e.g., "tct-policy-1")</t>
          </li>
          <li>
            <t><tt>version</tt> (integer): Policy revision number</t>
          </li>
          <li>
            <t><tt>effective</tt> (string, RFC 3339): When policy took effect</t>
          </li>
          <li>
            <t><tt>updated</tt> (string, RFC 3339): Last policy modification</t>
          </li>
          <li>
            <t><tt>policy_urls</tt> (object): URLs to human-readable policy documents
            </t>
            <ul spacing="normal">
              <li>
                <t><tt>terms_of_service</tt>: Legal terms URL</t>
              </li>
              <li>
                <t><tt>payment_info</tt>: Pricing/billing information URL (for paid access)</t>
              </li>
              <li>
                <t><tt>contact</tt>: Publisher contact for licensing inquiries</t>
              </li>
            </ul>
          </li>
          <li>
            <t><tt>purposes</tt> (object): Usage permissions
            </t>
            <ul spacing="normal">
              <li>
                <t><tt>allow_ai_input</tt>: Content may be used as AI input (RAG, context)</t>
              </li>
              <li>
                <t><tt>allow_ai_train</tt>: Content may be used for model training</t>
              </li>
              <li>
                <t><tt>allow_search_indexing</tt>: Content may be indexed for search</t>
              </li>
            </ul>
          </li>
          <li>
            <t><tt>requirements</tt> (object): Usage conditions
            </t>
            <ul spacing="normal">
              <li>
                <t><tt>attribution_required</tt>: Must credit publisher when using content</t>
              </li>
              <li>
                <t><tt>link_back_required</tt>: Must link to canonical URL when republishing</t>
              </li>
              <li>
                <t><tt>notice_required</tt>: Must notify publisher of commercial use</t>
              </li>
            </ul>
          </li>
          <li>
            <t><tt>rate_hints</tt> (object): Advisory crawl rate limits (non-binding)
            </t>
            <ul spacing="normal">
              <li>
                <t><tt>max_requests_per_second</tt>: Requests per second limit (null = no limit)</t>
              </li>
              <li>
                <t><tt>max_requests_per_day</tt>: Requests per day limit</t>
              </li>
              <li>
                <t><tt>note</tt>: Additional guidance</t>
              </li>
            </ul>
          </li>
        </ul>
        <t>Rate hints are advisory only; enforcement, payment, and economic arrangements are out of scope for this specification. Vocabulary alignment with IETF AIPREF is expected as that work matures.</t>
      </section>
      <section anchor="discovery">
        <name>Discovery</name>
        <t>The policy descriptor SHOULD be linked from the sitemap with a <tt>describedby</tt> Link header (example paths only):</t>
        <sourcecode type="http"><![CDATA[
Link: </llm-policy.json>; rel="describedby"; type="application/json"
]]></sourcecode>
        <t>Automated agents SHOULD:</t>
        <ol spacing="normal" type="1"><li>
            <t>Fetch <tt>/llm-policy.json</tt> before crawling</t>
          </li>
          <li>
            <t>Honor stated usage restrictions</t>
          </li>
          <li>
            <t>Respect rate hints to avoid overwhelming origin</t>
          </li>
          <li>
            <t>Review terms before commercial use</t>
          </li>
        </ol>
        <t>This specification uses registered relations (alternate/index/describedby). A dedicated relation for TCT sitemaps might be registered in the future; this document does not create new link relations.</t>
      </section>
      <section anchor="alignment-with-ietf-aipref">
        <name>Alignment with IETF AIPREF</name>
        <t>This policy format is designed to complement the IETF AIPREF (AI Preferences) proposal, providing machine-readable expressions of publisher preferences for automated agent behavior.</t>
      </section>
    </section>
    <section anchor="m-url-response-format">
      <name>M-URL Response Format</name>
      <section anchor="content-type">
        <name>Content-Type</name>
        <t>M-URL responses MUST set <tt>Content-Type: application/json</tt>:</t>
        <sourcecode type="http"><![CDATA[
Content-Type: application/json; charset=utf-8
]]></sourcecode>
      </section>
      <section anchor="json-payload-schema">
        <name>JSON Payload Schema</name>
        <t><strong>Minimal required fields:</strong></t>
        <sourcecode type="json"><![CDATA[
{
  "profile": "tct-1",
  "canonical_url": "https://example.com/post/",
  "title": "Article Title",
  "content": "Core article content...",
  "hash": "sha256-2c26b46b68ffc68f..."
}
]]></sourcecode>
        <t><strong>Fields:</strong></t>
        <ul spacing="normal">
          <li>
            <t><tt>profile</tt> (string, RECOMMENDED): Protocol version identifier (e.g., "tct-1"). Future versions (e.g., "tct-2") can introduce new fields while maintaining backward compatibility.</t>
          </li>
          <li>
            <t><tt>canonical_url</tt> (string, required): The C-URL for this resource</t>
          </li>
          <li>
            <t><tt>title</tt> (string, required): Resource title</t>
          </li>
          <li>
            <t><tt>content</tt> (string, required): Plain‑text core content (UTF‑8). This field is the input to the normalization algorithm. The content field MUST NOT contain HTML tags or markup. Publishers MUST strip or escape any embedded HTML before inclusion. To ensure fingerprint stability, publishers SHOULD avoid including volatile, non‑semantic elements (e.g., dynamic view counts, timestamps) in this string. Publishers SHOULD provide content independent of template/theme presentation. Publishers MAY include semantic metadata (such as title or media captions) to create a more complete fingerprint.</t>
          </li>
          <li>
            <t><tt>hash</tt> (string, required): Template-invariant fingerprint. MUST equal the M-URL ETag value excluding quotes. This is the same value as the sitemap <tt>contentHash</tt> field. Format: <tt>sha256-&lt;64 hex&gt;</tt>. Example: if M-URL ETag is <tt>"sha256-abc123"</tt>, then <tt>hash</tt> is <tt>sha256-abc123</tt> and sitemap <tt>contentHash</tt> is <tt>sha256-abc123</tt>.</t>
          </li>
        </ul>
        <t><strong>Forward Compatibility:</strong></t>
        <t>Clients MUST ignore unknown fields in the JSON payload. Servers MAY add additional fields to support future protocol versions or domain-specific metadata. Agents SHOULD read the <tt>profile</tt> field when present; unknown values SHOULD NOT cause ingestion failure but MAY be logged.</t>
        <t><strong>Extended fields example:</strong></t>
        <sourcecode type="json"><![CDATA[
{
  "profile": "tct-1",
  "canonical_url": "https://example.com/post/",
  "title": "Article Title",
  "language": "en-US",
  "published": "2025-10-01T10:00:00Z",
  "modified": "2025-10-15T14:30:00Z",
  "content": "Core article content...",
  "hash": "sha256-2c26b46b68ffc68f...",
  "structured_data": {
    "@context": "https://schema.org",
    "@type": "Article",
    "headline": "Article Title"
  }
}
]]></sourcecode>
      </section>
      <section anchor="complete-response-example">
        <name>Complete Response Example</name>
        <sourcecode type="http"><![CDATA[
HTTP/1.1 200 OK
Content-Type: application/json; charset=utf-8
ETag: "sha256-2c26b46b68ffc68f..."
Link: <https://example.com/post/>; rel="canonical"
Last-Modified: Wed, 15 Oct 2025 14:30:00 GMT
Cache-Control: max-age=0, must-revalidate
Cache-Control: stale-while-revalidate=60
Cache-Control: stale-if-error=86400
Vary: Accept-Encoding
Content-Length: 1234

{
  "profile": "tct-1",
  "canonical_url": "https://example.com/post/",
  "title": "Understanding the Collaboration Tunnel Protocol",
  "language": "en",
  "published": "2025-10-01T10:00:00Z",
  "modified": "2025-10-15T14:30:00Z",
  "content": "The Collaboration Tunnel Protocol enables...",
  "hash": "sha256-2c26b46b68ffc68f..."
}
]]></sourcecode>
      </section>
    </section>
    <section anchor="operational-considerations-informative">
      <name>Operational Considerations (Informative)</name>
      <t>This section provides non-normative operational guidance for deployers and automated agents.</t>
      <t><strong>Migration and Path Collisions</strong>
- If a preferred slug (e.g., <tt>/llm/</tt>) collides with existing routes, choose an alternate (e.g., <tt>/api/llm/</tt>, <tt>/content/llm/</tt>) and publish a 308 Permanent Redirect from legacy to primary endpoints
- List only the primary M-URL in the sitemap to avoid duplication; agents SHOULD follow redirects but rely on sitemap entries for canonical endpoint discovery
- Ensure robots.txt permits the chosen machine paths as appropriate for your policy</t>
      <t><strong>Caching and CDNs</strong>
- Configure intermediaries to honor validators and serve 304 responses; avoid <tt>private</tt> on M-URLs and sitemaps to enable shared caching
- Enable compression (gzip or br) for sitemaps and JSON payloads</t>
      <t><strong>Discovery and Verification</strong>
- Prefer discovery via HTML <tt>&lt;link rel="alternate" type="application/json"&gt;</tt>, HTTP <tt>Link</tt> headers, or sitemap entries; agents MUST NOT assume a fixed path
- Agents SHOULD verify the M-URL's canonical link header before processing and skip ingestion if missing or mismatched</t>
      <t><strong>Network and WAFs</strong>
- Allow the HEAD method (some WAFs block by default) to enable efficient validation
- If using an edge worker/proxy, ensure required headers (<tt>Link</tt>, <tt>ETag</tt>, <tt>Cache-Control</tt>, <tt>Vary</tt>) are preserved or injected consistently</t>
    </section>
    <section anchor="security-considerations">
      <name>Security Considerations</name>
      <section anchor="https-and-tls">
        <name>HTTPS and TLS</name>
        <t>M-URLs and sitemaps MUST be served over HTTPS. Agents MUST validate TLS certificates using platform trust stores and MUST reject invalid certificates.</t>
      </section>
      <section anchor="rate-limiting">
        <name>Rate Limiting</name>
        <t>Servers MAY expose RateLimit fields (<xref target="RFC9448"/>); agents SHOULD respect them.</t>
      </section>
      <section anchor="content-integrity">
        <name>Content Integrity</name>
        <t>The template-invariant fingerprint (SHA-256) provides:
- <strong>Tamper detection</strong>: Agents can verify content integrity
- <strong>Cache validation</strong>: Ensures served content matches expected hash</t>
        <t>However, SHA-256 alone does NOT provide:
- <strong>Authentication</strong>: Does not prove publisher identity
- <strong>Non-repudiation</strong>: Publisher can deny serving content</t>
        <t>For authenticated content delivery, publishers MAY implement digital signatures (outside scope of this specification).</t>
      </section>
      <section anchor="privacy">
        <name>Privacy</name>
        <t>Sitemap exposure MAY reveal:
- <strong>Content inventory</strong>: All published URLs
- <strong>Modification patterns</strong>: Publishing/update frequency</t>
        <t>Publishers SHOULD:
- Apply access controls if sitemaps contain sensitive URLs
- Use robots.txt to restrict crawler access if needed</t>
        <t>The <tt>content</tt> field may contain sensitive or personally identifiable information (PII). Publishers MUST apply access controls to M-URLs equivalent to those applied to the corresponding C-URLs, and to any sitemaps listing protected resources (see "Protected Sitemaps" in MUST Requirements).</t>
        <t>For general privacy considerations related to Internet protocols, see <xref target="RFC6973"/>.</t>
      </section>
      <section anchor="denial-of-service">
        <name>Denial of Service</name>
        <section anchor="sitemap-abuse">
          <name>Sitemap Abuse</name>
          <t>Large sitemaps MAY be used for DoS attacks. Agents SHOULD:
- Implement request rate limiting
- Set maximum sitemap size limits (e.g., 100 MB)
- Use streaming JSON parsers for large sitemaps</t>
        </section>
        <section anchor="head-vs-get-bandwidth">
          <name>HEAD vs GET Bandwidth</name>
          <t>HEAD requests provide DoS mitigation by enabling validation without body transfer:
- HEAD request: ~500 bytes (headers only)
- GET request: 1-100 KB (full JSON body)</t>
          <t>Agents SHOULD use HEAD for validation before GET.</t>
        </section>
      </section>
      <section anchor="injection-surface-reduction">
        <name>Injection Surface Reduction</name>
        <t>M-URL JSON responses contain only structured text, reducing injection attack surface compared to HTML:
- No <tt>&lt;script&gt;</tt> tags or inline JavaScript
- No CSS injection vectors
- No HTML parsing ambiguities</t>
        <t>However, agents MUST:
- Validate JSON syntax before processing
- Sanitize content before rendering to users
- Treat URLs in JSON as untrusted input</t>
      </section>
      <section anchor="cache-poisoning">
        <name>Cache Poisoning</name>
        <t>Shared caches that ignore validators can serve stale or mixed content. Publishers SHOULD include <tt>Cache-Control: must-revalidate</tt>; agents SHOULD verify the endpoint ETag against cached values and MUST NOT treat mismatched ETags as fresh.</t>
      </section>
      <section anchor="fingerprint-collision-and-normalization-variance">
        <name>Fingerprint Collision and Normalization Variance</name>
        <t>SHA-256 fingerprints provide practical collision resistance. The greater risk is normalization variance. Implementations MUST apply the baseline normalization consistently; agents MUST NOT infer byte identity from strong ETags.</t>
      </section>
      <section anchor="content-provenance-and-origin-authentication-optional">
        <name>Content Provenance and Origin Authentication (Optional)</name>
        <t>For authenticated origin verification of content representations, see HTTP Message Signatures <xref target="RFC9421"/>.</t>
        <t>Publishers MAY enhance content authenticity using:</t>
        <t><strong>Content-Digest (<xref target="RFC9530"/>):</strong></t>
        <t>Provides base64-encoded digest over the representation body.</t>
        <sourcecode type="http"><![CDATA[
Content-Digest: sha-256=:X48E9qOokqqrvdts8nOJRJN3OWDUoyWxBf7kbu9DBPE=:
]]></sourcecode>
        <t>Note: The value is base64 encoding of the binary SHA-256 digest per <xref target="RFC9530"/>.</t>
        <t><strong>HTTP Message Signatures (RFC 9421):</strong>
~~~http
Signature: sig1=:MEUCIQDXlI...;
Signature-Input: sig1=("content-digest" "content-type");
 created=1618884473; keyid="key-1"
~~~</t>
        <t>These mechanisms are OPTIONAL extensions outside TCT core requirements.</t>
      </section>
      <section anchor="privacy-and-pii">
        <name>Privacy and PII</name>
        <t>M-URL JSON MAY contain personally identifiable information (PII) or sensitive content. Publishers SHOULD:
- Apply same access controls as C-URL HTML
- Respect user privacy preferences
- Comply with applicable data protection regulations (GDPR, CCPA, etc.)</t>
        <t>Agents SHOULD:
- Honor robots.txt and meta robots directives as a site-wide policy across resources
- Respect HTTP authentication
  requirements
- Not expose cached content beyond publisher-specified Cache-Control directives</t>
      </section>
      <section anchor="access-control">
        <name>Access Control</name>
        <t>Publishers MAY restrict M-URL access using standard HTTP mechanisms:
- HTTP Authentication (Basic, Bearer, etc.)
- IP allowlisting
- Rate limiting per client
- Geographic restrictions</t>
        <t>Access controls SHOULD be consistent between C-URL and M-URL for the same resource.</t>
        <t><strong>Authenticated Content Caching:</strong></t>
        <t>Agents that access authenticated M-URLs MUST NOT store the resulting responses in caches that could be accessed by other unauthenticated parties. Authenticated content MUST be stored in a private, credential-scoped cache.</t>
        <t><strong>Authenticated Sitemaps (Informative):</strong>
Publishers that protect M-URLs MAY apply equivalent access controls to sitemap endpoints. Agents SHOULD obtain and reuse credentials to access protected sitemaps. Sitemaps MUST NOT disclose protected resources without equivalent access controls.</t>
        <t><strong>Security Note</strong>: Authenticated M-URLs MUST NOT leak protected content via publicly accessible sitemaps. Publishers MUST either exclude protected resources from sitemaps or apply equivalent access controls to the sitemap itself.</t>
      </section>
    </section>
    <section anchor="energy-efficiency-considerations">
      <name>Energy Efficiency Considerations</name>
      <t>Summary: Network transmission savings are direct and measurable. The impact on AI inference energy depends on model architecture and deployment specifics and is presented for illustrative context.</t>
      <section anchor="overview">
        <name>Overview</name>
        <t>The Collaboration Tunnel Protocol's bandwidth and token reduction directly translates to significant energy savings across network infrastructure and AI model inference operations. This section quantifies the environmental impact of TCT deployment at scale.</t>
      </section>
      <section anchor="network-energy-consumption">
        <name>Network Energy Consumption</name>
        <t>Data transmission consumes energy at every network layer: routers, switches, content delivery networks (CDNs), data centers, and end-user devices. Current estimates for network energy intensity range from 0.03 kWh/GB (fixed networks) to 0.14 kWh/GB (mobile networks), with a conservative industry standard of 0.06 kWh/GB for mixed-mode transmission.</t>
        <t><strong>TCT bandwidth reduction (measured):</strong>
- HTML-only retrieval: 103 KB average
- TCT JSON delivery: 17.7 KB average
- <strong>Reduction: 85.3 KB per fetch (83% savings)</strong></t>
        <t><strong>Energy savings per fetch:</strong>
- Bandwidth saved: 85.3 KB = 0.0000853 GB
- Energy saved: 0.0000853 GB x 0.06 kWh/GB = <strong>0.0000051 kWh</strong> (0.0051 Wh) per fetch</t>
        <t><strong>Scaled impact (1 million fetches/day):</strong>
- Daily energy savings: 5.1 kWh (5,100 Wh)
- Annual energy savings: 1,861.5 kWh
- <strong>Carbon equivalent</strong>: ~930 kg CO2 avoided (assuming 0.5 kg CO2/kWh grid average)</t>
      </section>
      <section anchor="ai-inference-impact-informative-summary">
        <name>AI Inference Impact (Informative Summary)</name>
        <t>TCT reduces tokenized payloads by ~86% through normalized JSON delivery. The impact on inference energy depends on model size, hardware, batching, and caching; therefore specific kWh figures vary significantly across deployments. See Appendix "Energy Methodology" for an illustrative, non-normative scenario and assumptions.</t>
      </section>
      <section anchor="sitemap-first-zero-fetch-optimization">
        <name>Sitemap-First Zero-Fetch Optimization</name>
        <t>Beyond per-fetch savings, TCT's sitemap-first verification enables complete request elimination when content is unchanged.</t>
        <t><strong>Measured skip rate:</strong> 90%+ for unchanged content</t>
        <t>For a typical deployment with 1,000 URLs checked daily:
- Traditional crawler: 1,000 full fetches/day
- TCT deployment: ~100 fetches/day (90% skipped via sitemap comparison)
- <strong>Additional savings: 900 fetches avoided</strong></t>
        <t><strong>Combined energy impact:</strong>
- Network: Fewer full responses reduce transmission energy proportionally to bytes avoided
- Computation: Fewer fetches and elimination of local rendering/extraction reduce crawler CPU/memory work
- Inference: Reduced token processing (impact varies by model and deployment; see Energy Methodology appendix)</t>
      </section>
      <section anchor="comparison-to-existing-approaches">
        <name>Comparison to Existing Approaches</name>
        <table>
          <thead>
            <tr>
              <th align="left">Method</th>
              <th align="left">Avg Size</th>
              <th align="left">Tokens</th>
              <th align="left">Bandwidth Reduction</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">Full HTML page</td>
              <td align="left">350 KB</td>
              <td align="left">47,000</td>
              <td align="left">Baseline</td>
            </tr>
            <tr>
              <td align="left">HTML body only</td>
              <td align="left">103 KB</td>
              <td align="left">13,900</td>
              <td align="left">71%</td>
            </tr>
            <tr>
              <td align="left">AMP HTML</td>
              <td align="left">52 KB</td>
              <td align="left">7,000</td>
              <td align="left">85%</td>
            </tr>
            <tr>
              <td align="left">
                <strong>TCT JSON</strong></td>
              <td align="left">
                <strong>17.7 KB</strong></td>
              <td align="left">
                <strong>1,960</strong></td>
              <td align="left">
                <strong>95%</strong></td>
            </tr>
          </tbody>
        </table>
        <t>Energy impact per fetch depends on network infrastructure, model architecture, and deployment patterns. See Energy Methodology appendix for illustrative calculations.</t>
      </section>
      <section anchor="cumulative-environmental-impact">
        <name>Cumulative Environmental Impact</name>
        <t>TCT's bandwidth reduction (typically 80-90%) and elimination of client-side rendering translate to measurable energy savings at scale. Actual impact depends on:</t>
        <ul spacing="normal">
          <li>
            <t>Deployment scope (number of sites, request volume)</t>
          </li>
          <li>
            <t>Network infrastructure efficiency</t>
          </li>
          <li>
            <t>Model provider's hardware and batching strategies</t>
          </li>
          <li>
            <t>Grid carbon intensity in serving regions</t>
          </li>
        </ul>
        <t><strong>Measured improvements:</strong>
- 95% smaller payloads (measured across production deployments)
- 90%+ fetch elimination via sitemap-first logic
- 94% reduction in crawler CPU/memory usage</t>
        <t>Organizations deploying TCT should measure baseline energy consumption and monitor post-deployment savings specific to their infrastructure. See Energy Methodology appendix for example calculation approaches.</t>
      </section>
      <section anchor="relationship-to-ietf-green-working-group">
        <name>Relationship to IETF GREEN Working Group</name>
        <t>The IETF Getting Ready for Energy-Efficient Networking (GREEN) Working Group focuses on infrastructure-level energy optimization through monitoring, measurement, and network-wide traffic optimization.</t>
        <t>TCT complements GREEN's infrastructure focus by addressing <strong>application-layer efficiency</strong>:</t>
        <ul spacing="normal">
          <li>
            <t>GREEN targets: Device power consumption, network-wide traffic flow optimization</t>
          </li>
          <li>
            <t>TCT targets: Content delivery efficiency, redundant fetch elimination, token cost reduction</t>
          </li>
        </ul>
        <t>Together, these approaches create a comprehensive energy reduction strategy spanning both network infrastructure (GREEN WG) and application protocols (TCT).</t>
      </section>
      <section anchor="recommendations-for-implementers">
        <name>Recommendations for Implementers</name>
        <t>Publishers deploying TCT SHOULD:</t>
        <ol spacing="normal" type="1"><li>
            <t><strong>Monitor metrics</strong>: Track bandwidth savings, 304 hit rates, and skip rates</t>
          </li>
          <li>
            <t><strong>Report impact</strong>: Document energy savings for sustainability reporting</t>
          </li>
          <li>
            <t><strong>Optimize aggressively</strong>: Minimize JSON payload size to maximize efficiency</t>
          </li>
          <li>
            <t><strong>Promote adoption</strong>: Encourage crawler operators to implement sitemap-first logic</t>
          </li>
        </ol>
        <t>Automated agents consuming TCT endpoints SHOULD:</t>
        <ol spacing="normal" type="1"><li>
            <t><strong>Implement zero-fetch</strong>: Use sitemap hashes to skip unchanged content</t>
          </li>
          <li>
            <t><strong>Respect 304 responses</strong>: Honor conditional request discipline</t>
          </li>
          <li>
            <t><strong>Cache aggressively</strong>: Store ETags and avoid redundant fetches</t>
          </li>
          <li>
            <t><strong>Measure savings</strong>: Track bandwidth, token, and energy reduction</t>
          </li>
        </ol>
      </section>
      <section anchor="future-work">
        <name>Future Work</name>
        <t>Potential enhancements for energy optimization:</t>
        <ul spacing="normal">
          <li>
            <t><strong>Delta encoding</strong>: Transmit only content changes instead of full payloads</t>
          </li>
          <li>
            <t><strong>Push notifications</strong>: WebSub or IndexNow integration to eliminate polling</t>
          </li>
          <li>
            <t><strong>Compression</strong>: Brotli/gzip to further reduce transmission size</t>
          </li>
          <li>
            <t><strong>Edge caching</strong>: CDN-level 304 responses to reduce origin load</t>
          </li>
        </ul>
      </section>
    </section>
    <section anchor="iana-considerations">
      <name>IANA Considerations</name>
      <t>This document has no IANA actions.</t>
      <t>Future versions may register:</t>
      <ol spacing="normal" type="1"><li>
          <t><strong>Well-known URI</strong>: <tt>/.well-known/llm-sitemap.json</tt> for sitemap discovery</t>
        </li>
        <li>
          <t><strong>Profile URI</strong>: Identifying the JSON payload/sitemap format (e.g., <tt>https://llmpages.org/profile/tct-1</tt>)</t>
        </li>
        <li>
          <t><strong>Link Relation</strong>: If <tt>rel="index"</tt> with <tt>type="application/json"</tt> proves insufficient, a dedicated relation may be registered</t>
        </li>
      </ol>
      <t>Note: The protocol name and URL slug convention (/llm/) is a non-normative example; implementations choose their own paths.</t>
    </section>
    <section anchor="comparison-to-prior-art">
      <name>Comparison to Prior Art</name>
      <section anchor="resourcesync">
        <name>ResourceSync</name>
        <t>ResourceSync <xref target="ResourceSync"/> provides sitemap-based
synchronization.
It includes content digests (<tt>md5</tt>, <tt>sha-256</tt>)
in ResourceSync Change Lists.</t>
        <t><strong>Key differences:</strong></t>
        <ol spacing="normal" type="1"><li>
            <t><strong>Endpoint validator</strong>: ResourceSync does NOT specify using the digest as endpoint ETag</t>
          </li>
          <li>
            <t><strong>Handshake</strong>: No bidirectional C-URL &lt;-&gt; M-URL discovery</t>
          </li>
          <li>
            <t><strong>Zero-fetch</strong>: No specification for skipping endpoint fetch when sitemap hash matches</t>
          </li>
          <li>
            <t><strong>Precedence discipline</strong>: No requirement for If-None-Match precedence</t>
          </li>
        </ol>
        <t>TCT integrates the SAME hash in both sitemap AND endpoint ETag, enabling zero-fetch optimization.</t>
        <t>Unlike ResourceSync, which provides digests over entire representation files, TCT provides a semantic fingerprint of the textual <tt>content</tt> payload, decoupling it from a specific file or HTML representation.</t>
      </section>
      <section anchor="amp">
        <name>AMP</name>
        <t>Accelerated Mobile Pages <xref target="AMP"/> provides:
- C-URL -&gt; AMP-URL mapping via <tt>&lt;link rel="amphtml"&gt;</tt>
- Lighter HTML (no JavaScript allowed)</t>
        <t><strong>Key differences:</strong></t>
        <ol spacing="normal" type="1"><li>
            <t><strong>Format</strong>: AMP uses HTML; TCT uses JSON</t>
          </li>
          <li>
            <t><strong>Fingerprinting</strong>: AMP has no content hashing</t>
          </li>
          <li>
            <t><strong>Sitemap</strong>: AMP sitemaps lack content hashes</t>
          </li>
          <li>
            <t><strong>Conditional requests</strong>: No specified validator discipline</t>
          </li>
        </ol>
      </section>
      <section anchor="xml-sitemaps">
        <name>XML Sitemaps</name>
        <t>Traditional XML sitemaps provide:
- URL discovery
- <tt>&lt;lastmod&gt;</tt> timestamp</t>
        <t><strong>Key differences:</strong></t>
        <ol spacing="normal" type="1"><li>
            <t><strong>Hashes</strong>: XML sitemaps lack content fingerprints</t>
          </li>
          <li>
            <t><strong>Timestamps</strong>: <tt>lastmod</tt> insufficient for template changes</t>
          </li>
          <li>
            <t><strong>Conditional requests</strong>: No integration with HTTP caching</t>
          </li>
        </ol>
        <t>TCT adds content hashes enabling efficient change detection.</t>
      </section>
    </section>
    <section anchor="implementation-status">
      <name>Implementation Status</name>
      <t>[Note to RFC Editor: Remove this section before publication.]</t>
      <t><strong>Reference Implementations:</strong></t>
      <ul spacing="normal">
        <li>
          <t>WordPress Plugin: https://github.com/antunjurkovic-collab/trusted-collab-tunnel</t>
        </li>
        <li>
          <t>Python Client: https://github.com/antunjurkovic-collab/collab-tunnel-python</t>
        </li>
        <li>
          <t>Cloudflare Worker: https://github.com/antunjurkovic-collab/trusted-collab-worker</t>
        </li>
        <li>
          <t>Protocol Specification: https://github.com/antunjurkovic-collab/collab-tunnel-spec</t>
        </li>
      </ul>
      <t>As of October 2025, TCT has been implemented in:</t>
      <t><strong>Publisher implementations:</strong>
- WordPress plugin (970 URLs across 3 production sites, 100% compliance)
- Cloudflare Worker (edge-based implementation)</t>
      <t><strong>Measurements:</strong>
- HTML-only: 103 KB average (13,900 tokens)
- TCT JSON: 17.7 KB average (1,960 tokens)
- <strong>Bandwidth savings: 83%</strong>
- <strong>Token savings: 86%</strong></t>
      <t><strong>Sitemap-first performance:</strong>
- Skip rate: 90%+ for unchanged content
- 304 hit rate: 95%+ on changed content</t>
    </section>
    <section anchor="acknowledgments">
      <name>Acknowledgments</name>
      <t>Thanks to the WordPress, Cloudflare, and IETF HTTP Working Group communities for feedback on early drafts.</t>
      <?line 1582?>

<t>Test Vector 1: Basic ASCII with Whitespace
- Input String: literal <tt>Hello␠␠World\n\t\nTesting</tt> (two spaces, newline, tab, newline)
- Normalized String: <tt>hello world testing</tt>
- SHA‑256 (hex): <tt>479045cd11cebe841bab15d5ffba3dbac4fed0ca5c4eb74d1102e562a45f4f1f</tt>
- <tt>contentHash</tt>: <tt>sha256-479045cd11cebe841bab15d5ffba3dbac4fed0ca5c4eb74d1102e562a45f4f1f</tt>
- <tt>ETag</tt>: <tt>"sha256-479045cd11cebe841bab15d5ffba3dbac4fed0ca5c4eb74d1102e562a45f4f1f"</tt></t>
    </section>
  </middle>
  <back>
    <references anchor="sec-combined-references">
      <name>References</name>
      <references anchor="sec-normative-references">
        <name>Normative References</name>
        <reference anchor="RFC9110" target="https://www.rfc-editor.org/rfc/rfc9110">
          <front>
            <title>HTTP Semantics</title>
            <author initials="R." surname="Fielding" fullname="R. Fielding">
              <organization/>
            </author>
            <author initials="M." surname="Nottingham" fullname="M. Nottingham">
              <organization/>
            </author>
            <author initials="J." surname="Reschke" fullname="J. Reschke">
              <organization/>
            </author>
            <date year="2022" month="June"/>
          </front>
        </reference>
        <reference anchor="RFC9111" target="https://www.rfc-editor.org/rfc/rfc9111">
          <front>
            <title>HTTP Caching</title>
            <author initials="R." surname="Fielding" fullname="R. Fielding">
              <organization/>
            </author>
            <author initials="M." surname="Nottingham" fullname="M. Nottingham">
              <organization/>
            </author>
            <author initials="J." surname="Reschke" fullname="J. Reschke">
              <organization/>
            </author>
            <date year="2022" month="June"/>
          </front>
        </reference>
        <reference anchor="RFC8288" target="https://www.rfc-editor.org/rfc/rfc8288">
          <front>
            <title>Web Linking</title>
            <author initials="M." surname="Nottingham" fullname="M. Nottingham">
              <organization/>
            </author>
            <date year="2017" month="October"/>
          </front>
        </reference>
        <reference anchor="RFC2119" target="https://www.rfc-editor.org/info/rfc2119" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.2119.xml">
          <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" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8174.xml">
          <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="RFC3339" target="https://www.rfc-editor.org/rfc/rfc3339">
          <front>
            <title>Date and Time on the Internet: Timestamps</title>
            <author initials="G." surname="Klyne" fullname="G. Klyne">
              <organization/>
            </author>
            <author initials="C." surname="Newman" fullname="C. Newman">
              <organization/>
            </author>
            <date year="2002" month="July"/>
          </front>
        </reference>
        <reference anchor="RFC8259" target="https://www.rfc-editor.org/rfc/rfc8259">
          <front>
            <title>The JavaScript Object Notation (JSON) Data Interchange Format</title>
            <author initials="T." surname="Bray" fullname="T. Bray">
              <organization/>
            </author>
            <date year="2017" month="December"/>
          </front>
        </reference>
        <reference anchor="UAX15" target="https://www.unicode.org/reports/tr15/">
          <front>
            <title>Unicode Standard Annex #15: Unicode Normalization Forms</title>
            <author>
              <organization>Unicode Consortium</organization>
            </author>
            <date year="2024"/>
          </front>
        </reference>
        <reference anchor="Unicode-CaseFolding" target="https://www.unicode.org/versions/Unicode15.1.0/ch03.pdf">
          <front>
            <title>Unicode Case Folding</title>
            <author>
              <organization>Unicode Consortium</organization>
            </author>
            <date year="2024"/>
          </front>
        </reference>
      </references>
      <references anchor="sec-informative-references">
        <name>Informative References</name>
        <reference anchor="RFC9530" target="https://www.rfc-editor.org/rfc/rfc9530">
          <front>
            <title>Digest Fields</title>
            <author initials="L." surname="Pardue" fullname="L. Pardue">
              <organization/>
            </author>
            <author initials="R." surname="Polli" fullname="R. Polli">
              <organization/>
            </author>
            <date year="2024" month="February"/>
          </front>
        </reference>
        <reference anchor="RFC9421" target="https://www.rfc-editor.org/rfc/rfc9421">
          <front>
            <title>HTTP Message Signatures</title>
            <author initials="A." surname="Backman" fullname="A. Backman">
              <organization/>
            </author>
            <author initials="J." surname="Richer" fullname="J. Richer">
              <organization/>
            </author>
            <author initials="M." surname="Sporny" fullname="M. Sporny">
              <organization/>
            </author>
            <date year="2024" month="February"/>
          </front>
        </reference>
        <reference anchor="RFC9448" target="https://www.rfc-editor.org/rfc/rfc9448">
          <front>
            <title>RateLimit Fields for HTTP</title>
            <author initials="R." surname="Polli" fullname="R. Polli">
              <organization/>
            </author>
            <author initials="A." surname="Martinez" fullname="A. Martinez">
              <organization/>
            </author>
            <date year="2023" month="October"/>
          </front>
        </reference>
        <reference anchor="RFC6596" target="https://www.rfc-editor.org/rfc/rfc6596">
          <front>
            <title>The Canonical Link Relation</title>
            <author initials="M." surname="Ohye" fullname="M. Ohye">
              <organization/>
            </author>
            <author initials="J." surname="Kupke" fullname="J. Kupke">
              <organization/>
            </author>
            <date year="2012" month="April"/>
          </front>
        </reference>
        <reference anchor="RFC6973" target="https://www.rfc-editor.org/rfc/rfc6973">
          <front>
            <title>Privacy Considerations for Internet Protocols</title>
            <author initials="A." surname="Cooper" fullname="A. Cooper">
              <organization/>
            </author>
            <author initials="H." surname="Tschofenig" fullname="H. Tschofenig">
              <organization/>
            </author>
            <author initials="B." surname="Aboba" fullname="B. Aboba">
              <organization/>
            </author>
            <author initials="J." surname="Peterson" fullname="J. Peterson">
              <organization/>
            </author>
            <author initials="J." surname="Morris" fullname="J. Morris">
              <organization/>
            </author>
            <author initials="M." surname="Hansen" fullname="M. Hansen">
              <organization/>
            </author>
            <author initials="R." surname="Smith" fullname="R. Smith">
              <organization/>
            </author>
            <date year="2013" month="July"/>
          </front>
        </reference>
        <reference anchor="RFC8785" target="https://www.rfc-editor.org/rfc/rfc8785">
          <front>
            <title>JSON Canonicalization Scheme (JCS)</title>
            <author initials="A." surname="Rundgren" fullname="A. Rundgren">
              <organization/>
            </author>
            <author initials="B." surname="Jordan" fullname="B. Jordan">
              <organization/>
            </author>
            <author initials="S." surname="Erdtman" fullname="S. Erdtman">
              <organization/>
            </author>
            <date year="2020" month="June"/>
          </front>
        </reference>
        <reference anchor="RFC8615" target="https://www.rfc-editor.org/rfc/rfc8615">
          <front>
            <title>Well-Known Uniform Resource Identifiers (URIs)</title>
            <author initials="M." surname="Nottingham" fullname="M. Nottingham">
              <organization/>
            </author>
            <date year="2019" month="May"/>
          </front>
        </reference>
        <reference anchor="ResourceSync" target="https://www.openarchives.org/rs/1.1/resourcesync">
          <front>
            <title>ResourceSync Framework Specification</title>
            <author>
              <organization>Open Archives Initiative</organization>
            </author>
            <date year="2017" month="May"/>
          </front>
        </reference>
        <reference anchor="AMP" target="https://amp.dev/documentation/guides-and-tutorials/learn/spec/amphtml/">
          <front>
            <title>Accelerated Mobile Pages (AMP) HTML Specification</title>
            <author>
              <organization/>
            </author>
            <date>n.d.</date>
          </front>
        </reference>
        <reference anchor="WHATWG-HTML" target="https://html.spec.whatwg.org/multipage/named-characters.html">
          <front>
            <title>HTML Living Standard - Named character references</title>
            <author>
              <organization>WHATWG</organization>
            </author>
            <date>n.d.</date>
          </front>
        </reference>
        <reference anchor="XMLSitemaps" target="https://www.sitemaps.org/protocol.html">
          <front>
            <title>Sitemap XML format</title>
            <author>
              <organization>sitemaps.org</organization>
            </author>
            <date>n.d.</date>
          </front>
        </reference>
      </references>
    </references>
    <?line 1469?>

<section anchor="example-implementation-wordpress">
      <name>Example Implementation (WordPress)</name>
      <t>This section is informative.</t>
      <t><strong>PHP implementation</strong> (simplified, using Method A - Canonical JSON Strong-Byte):</t>
      <sourcecode type="php"><![CDATA[
function handle_llm_endpoint() {
  // Get the current post
  $post_id = get_the_ID();

  // Build content string (plain text, no HTML)
  $title = get_the_title($post_id);
  $body = apply_filters(
    'the_content',
    get_post_field('post_content', $post_id)
  );
  $body_text = wp_strip_all_tags($body);

  // Combine with deterministic separator
  $content = $title . "\n\n" . $body_text;

  // Generate ETag from content string
  $normalized = normalize_text($content);
  $hash_hex = hash('sha256', $normalized);
  $hash = "sha256-{$hash_hex}";
  $etag = "\"{$hash}\"";  // Strong ETag (no W/ prefix)

  $canonical_url = get_permalink($post_id);

  // Check If-None-Match
  if (
    isset($_SERVER['HTTP_IF_NONE_MATCH'])
    && trim($_SERVER['HTTP_IF_NONE_MATCH']) === $etag
  ) {
    header('HTTP/1.1 304 Not Modified');
    header("ETag: {$etag}");
    header("Link: <{$canonical_url}>; rel=\"canonical\"");
    exit;
  }

  // Return JSON
  header('Content-Type: application/json');
  header("ETag: {$etag}");
  header("Link: <{$canonical_url}>; rel=\"canonical\"");
  header(
    'Cache-Control: max-age=0, must-revalidate, '
    . 'stale-while-revalidate=60, stale-if-error=86400'
  );
  header('Vary: Accept-Encoding');

  echo json_encode([
    'profile' => 'tct-1',
    'canonical_url' => $canonical_url,
    'title' => $title,
    'content' => $content,
    'hash' => $hash
  ]);
}
// Minimal normalization helper (for Method B implementations)
function normalize_text($text) {
  $text = html_entity_decode($text, ENT_QUOTES | ENT_HTML5, 'UTF-8');
  if (class_exists('Normalizer')) {
    $text = Normalizer::normalize($text, Normalizer::NFKC);
  }
  if (function_exists('mb_convert_case')) {
    $text = mb_convert_case($text, MB_CASE_FOLD, 'UTF-8');
  } else {
    $text = strtolower($text);
  }
  $text = preg_replace(
    '/[\x00-\x08\x0B-\x0C\x0E-\x1F\x7F-\x9F]/u',
    '',
    $text
  );
  $text = preg_replace(
    '/[ \t\n\r\f]+/',
    ' ',
    $text
  );
  return trim($text);
}
]]></sourcecode>
    </section>
    <section anchor="example-sitemap">
      <name>Example Sitemap</name>
      <t>This section is informative.</t>
      <sourcecode type="json"><![CDATA[
{
  "version": 1,
  "items": [
    {
      "cUrl": "https://example.com/article-1/",
      "mUrl": "https://example.com/article-1/llm/",
      "modified": "2025-10-01T12:00:00Z",
      "contentHash": "sha256-abc123..."
    },
    {
      "cUrl": "https://example.com/article-2/",
      "mUrl": "https://example.com/article-2/llm/",
      "modified": "2025-09-15T08:30:00Z",
      "contentHash": "sha256-def456..."
    }
  ]
}
]]></sourcecode>
      <t># Normalization Test Vectors (Informative)</t>
      <t>This appendix provides test vectors to assist implementers in validating normalization logic. The final hash MUST be an exact byte‑for‑byte match of the normalized string encoded as UTF‑8.</t>
    </section>
  </back>
  <!-- ##markdown-source:
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
A599r+9/zTVjMq6NL53Ixicnsr4n96Vt/j7XjX1Vqey7Cumu7SFfn16L1WOD
19ZLRTfiSSUopdPnWEbh2VgZVSpoNSwoCmXWRnEqzgYcR2j6kyaiJQgIqXGP
SRaYAvWf//v/wJDg31Szx5fdijfM04pE49TqNDD6BOlR1XWajJuq6fYMFZ6Y
/cuD42PW695j1ks+CxiRkiq2UM/BWg4Tw09Y/t1/E8Zx+p//9/8D/w/6fTyC
IwnHErtGMG7TKO7Q2QN95Bg/RuhevJcnGNhPnPfhhq5v6E+wZ0zBike0wNgf
WVBv9mEmWLvWANWsCS23nu+tb20PR93uMByEu1vdQTDobo+2x+NBsIlWy9Y4
HK0Pg+3hVjh4vgXt1jfC7Z2NYGt7vDXujvs+hiYh+jkswd+nb0I36TnMwd/a
60p/yT5uYKyUqjgp/gCyGgigun2mIduHi0dP/wGO4gttjrfhjP+//7fdX7Yz
RO5/MPOa5oubM97e3dncG8C/x8Fwbzh4vj7a2u5uDnc3g53Bxt72Vvf5brC7
Pu5ujLeH3fWdvSAYre+Nuhtb4fj5YGPrsc35ffqubs5v7RU3p2ZrNnsEVGmO
QkQ0lcu5Fk8Wn6gfxnyaxthD326Y/vzXd9+sr68f/EiN9AM15VRqutbqsghn
Zss0xE93MGzq4/SY9OzGlFG7UbWHbdOgGo4ZqAZ3eW0fYPDcWWbBaND8QLUv
IIsrEMM1nTzKBYgJFNpMS1eVwoJd2IJwvLMbBJtbz+F4bGyPRnuj7cHzze54
Zzjsbu1tBztwssbB9ijc2Rxvbw+Gz/fGwfj59mhvvPsYhf0+fVcp7Lf2uiLL
hZ4ht38NpgMJLUptEmEkgvCgSDXtL0oiJo2WINwoqhJq1t4+yiaKd1komjUm
63JxDhef1Buni1LTk5ECB5UzMhllckhyiXgRbfcV9V4cQ1w8rG5jQp1UgjJE
UX0BQCvI67v4i3/HQs9Fm32NhOiuTYS31hc/LRpKyP4o/izuPlxIFJ7k8Cll
urw/vnpz9u6KZTm5YWrxSz8LbNEfzSKgoTc/BU+sB3a0OI3+E5WrV3FCIEXs
GtHl3DGYHUNbUPohxCsTR5h/JfdvtwzZEVLFUvHCqfur293hLG7vlqaffuUS
PLYC9QuwdP5PPlZmv9mT3PLQshqKWtIUeQY8zwVGNN57vjMMhjuj7eHu3tbG
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

-->

</rfc>
