<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE rfc [
  <!ENTITY nbsp    "&#160;">
  <!ENTITY zwsp   "&#8203;">
  <!ENTITY nbhy   "&#8209;">
  <!ENTITY wj     "&#8288;">
]>
<?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
<!-- generated by https://github.com/cabo/kramdown-rfc version 1.7.43 (Ruby 3.2.3) -->
<?rfc strict="yes"?>
<?rfc compact="yes"?>
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-hood-agtp-rcns-00" category="info" submissionType="independent" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.35.0 -->
  <front>
    <title abbrev="AGTP-RCNS">AGTP-RCNS: Runtime Contract Negotiation Substrate</title>
    <seriesInfo name="Internet-Draft" value="draft-hood-agtp-rcns-00"/>
    <author fullname="Chris Hood">
      <organization>Nomotic, Inc.</organization>
      <address>
        <email>chris@nomotic.ai</email>
        <uri>https://agtp.io</uri>
      </address>
    </author>
    <date year="2026" month="October" day="30"/>
    <area>Applications and Real-Time</area>
    <workgroup>Independent Submission</workgroup>
    <keyword>AI agents</keyword>
    <keyword>agent transfer protocol</keyword>
    <keyword>runtime contract negotiation</keyword>
    <keyword>endpoint synthesis</keyword>
    <keyword>PROPOSE</keyword>
    <keyword>synthesized contracts</keyword>
    <abstract>
      <?line 73?>

<t>This document specifies the Runtime Contract Negotiation Substrate
(RCNS) for the Agent Transfer Protocol (AGTP) <xref target="AGTP"/>: the
mechanism by which an AGTP server synthesizes an endpoint at
runtime, from registered primitives, when a caller addresses a
method and path pair the server has yet to register. RCNS is
invoked explicitly through the PROPOSE floor method and implicitly
when a server is configured to treat unregistered requests as
synthesis candidates. The document defines the four-lock dispatcher
gate that governs when synthesis may occur, the two contract
delivery modes, the PROPOSE request and response body shapes,
recipe versioning, contract scoping and lifecycle, the headers and
rate-limiting contract, the Attribution-Record extension fields
that make every invocation served under a contract attributable,
and the inventory surfaces through which contracts are observed.
The material was previously carried in <xref target="AGTP-API"/>, which this
document and <xref target="AGTP-METHODS"/> together replace.</t>
    </abstract>
  </front>
  <middle>
    <?line 92?>

<section anchor="introduction">
      <name>Introduction</name>
      <t>AGTP <xref target="AGTP"/> is a transfer protocol for AI agent traffic. It
establishes identity, authority, attribution, and an eighteen-method
floor. <xref target="AGTP-METHODS"/> specifies the contract layer above that
floor: the method vocabulary, path grammar, the endpoint primitive,
the server manifest, and the policy by which an operator declares
what a server exposes. Every endpoint declared that way is a Tier A
or Tier B endpoint in the tier taxonomy of <xref target="AGTP-METHODS"/>.</t>
      <t>This document specifies Tier C: endpoints that exist because an
agent asked for them. A caller addresses a method and path pair the
server has yet to register. Instead of refusing, a server that
participates in runtime negotiation may synthesize a contract for
that pair from the primitives it already exposes, deliver the
contract to the caller, and serve invocations under it with the
same identity, authority, and attribution guarantees as any
registered endpoint.</t>
      <t>The substrate property this delivers is the one AGTP is designed
around: an agent arriving at a server can discover what the server
offers, reason about fit, verify that its authority covers the
invocation, and, when nothing fits, propose what it needs. The
protocol governs the proposal the same way it governs every other
invocation, because the protocol knows what a method on a path
means.</t>
      <section anchor="relationship-to-agtp-and-agtp-methods">
        <name>Relationship to AGTP and AGTP-METHODS</name>
        <t>Base AGTP defines the PROPOSE floor method, the negotiation status
codes 261, 262, 263, 461, 463, and 464, the reason vocabulary for
461 and 464, the <tt>INSPECT target=contract</tt> and
<tt>INSPECT target=rcns-attempt</tt> extensions, and the <tt>rcns_*</tt> lifecycle
events. <xref target="AGTP-METHODS"/> defines the endpoint primitive that a
synthesized contract instantiates, the tier taxonomy that
classifies a contract as Tier C, the recipe-backed composition
handler, and the manifest policy fields (<tt>synthesis_enabled</tt>,
<tt>max_synthesis_depth</tt>) through which an operator advertises
participation. This document defines everything between those two
sets: when synthesis fires, what it produces, how the product is
delivered, scoped, observed, and retired.</t>
        <t>A server that implements <xref target="AGTP-METHODS"/> without this document is
conformant and refuses unregistered pairs with 404 or 405. RCNS is
an opt-in substrate; the default posture is off.</t>
      </section>
      <section anchor="document-lineage">
        <name>Document Lineage</name>
        <t>The normative text in this document was carried in <xref target="AGTP-API"/>
as the PROPOSE and Synthesis chapter and the <tt>DISCOVER /patterns</tt>
and <tt>DISCOVER /contracts</tt> built-in endpoints. It is extracted here
unchanged in substance so that the method vocabulary and the
negotiation substrate can be reviewed, cited, and revised on their
own timelines. Section anchors from <xref target="AGTP-API"/> are preserved
where they appear.</t>
      </section>
      <section anchor="requirements-language">
        <name>Requirements Language</name>
        <t>The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",
"SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this
document are to be interpreted as described in BCP 14 <xref target="RFC2119"/>
          <xref target="RFC8174"/> when, and only when, they appear in all capitals, as
shown here.</t>
      </section>
    </section>
    <section anchor="terminology">
      <name>Terminology</name>
      <t>Terms defined in <xref target="AGTP"/> and <xref target="AGTP-METHODS"/> (method, path,
endpoint, semantic block, server manifest, method policy) carry
their definitions here. This document adds:</t>
      <dl>
        <dt>Synthesis:</dt>
        <dd>
          <t>The runtime instantiation of an endpoint in response to a PROPOSE
request or an unregistered invocation, composing the requested
behavior from existing endpoints while preserving authority
through the composition.</t>
        </dd>
        <dt>Contract:</dt>
        <dd>
          <t>A synthesized endpoint together with the identifier
(<tt>synthesis_id</tt>), recipe lineage, scope, expiration, and budget
under which the server agreed to serve it. A contract is held by
the Agent-ID it was synthesized for.</t>
        </dd>
        <dt>Recipe:</dt>
        <dd>
          <t>A named, versioned composition plan registered at the server,
from which a contract is synthesized. Recipes are server-internal
artifacts; the recipe-backed composition handler is specified in
<xref target="AGTP-METHODS"/>.</t>
        </dd>
        <dt>Tier C Endpoint:</dt>
        <dd>
          <t>An endpoint that exists only as a contract. The tier taxonomy is
specified in <xref target="AGTP-METHODS"/>.</t>
        </dd>
      </dl>
    </section>
    <section anchor="rcns">
      <name>Runtime Contract Negotiation</name>
      <section anchor="rcns-overview">
        <name>Runtime Contract Negotiation Substrate</name>
        <t>The Runtime Contract Negotiation Substrate (RCNS) is the
machinery by which a server delivers Tier C endpoints
(the tier taxonomy in <xref target="AGTP-METHODS"/>): endpoints synthesized at runtime from
registered primitives when a caller addresses a <tt>(method,
path)</tt> pair that is absent from the Tier A or Tier B set.</t>
        <t>PROPOSE is the AGTP method that explicitly invokes RCNS.
RCNS also operates implicitly when a server is configured
to accept unregistered requests as synthesis candidates;
the wire surface in that case is the same set of contract
identifiers and reasoned status codes (461, 464) registered
in <xref target="AGTP"/> and specified here.</t>
        <t>This document specifies the four-lock dispatcher gate, the
two delivery modes (confirm-first 461 and optimistic 263
with the <tt>Contract-Synthesized</tt> header), the endpoint-keyed
PROPOSE body shape, the contract scoping rules, the
per-agent rate limiting and idempotency key contract, the
<tt>synthesis_id</tt>, <tt>contract_hash</tt>, and <tt>negotiation_origin</tt>
Attribution-Record extension fields, and the
<tt>DISCOVER /patterns</tt>, <tt>DISCOVER /contracts</tt>,
<tt>INSPECT target=contract</tt>, and <tt>INSPECT target=rcns-attempt</tt>
inventory surfaces. The Tier C taxonomy in <xref target="AGTP-METHODS"/>
and the reservations in <xref target="AGTP"/> (status codes 461 and 464,
reason vocabulary <tt>rcns-disabled</tt>,
<tt>trust-tier-insufficient</tt>, <tt>composition-impossible</tt>,
<tt>synthesis-error</tt>, <tt>contract-not-yours</tt>,
<tt>contract-revoked</tt>) constitute the wire foundation for the
substrate.</t>
        <section anchor="tier-c-resolution">
          <name>Tier C Resolution</name>
          <t>A server with active synthesized contracts <strong>MUST</strong> maintain
a resolver that answers, for any inbound <tt>(method, path)</tt>
pair, whether an active Tier C contract exists for that pair.
The resolver is the dispatcher hook that closes the loop
between the tier classification (the tier taxonomy in <xref target="AGTP-METHODS"/>) and
the synthesis machinery: an unregistered <tt>(method, path)</tt>
pair that resolves to an active contract is classified Tier C
and dispatched to the synthesized handler; a pair that
fails to resolve is dispatched per the unregistered-pair rules in
the tier taxonomy in <xref target="AGTP-METHODS"/>.</t>
          <t>The resolver <strong>MUST</strong> scope each lookup by the requesting
Agent-ID. A contract synthesized for Agent-ID X <strong>MUST NOT</strong>
resolve for an unrelated Agent-ID Y; the server <strong>MUST</strong>
return <tt>464 RCNS No Contract</tt> with <tt>reason:
contract-not-yours</tt> in that case. Contracts that have
expired, been revoked, or been suspended <strong>MUST NOT</strong>
resolve.</t>
          <t>The resolver returns, when an active contract exists:</t>
          <ul spacing="normal">
            <li>
              <t>The <tt>synthesis_id</tt> of the matched contract.</t>
            </li>
            <li>
              <t>The <tt>recipe_lineage</tt> (recipe name and captured recipe
version) the contract was synthesized under.</t>
            </li>
            <li>
              <t>The contract's expiration time and remaining budget, if
applicable.</t>
            </li>
          </ul>
          <t>These fields are server-internal at lookup time but appear
on <tt>INSPECT target=contract</tt> responses (the <tt>target=contract</tt>
extension to INSPECT specified in <xref target="AGTP"/>) and in the
Attribution-Record extension fields
(<xref target="rcns-attribution-fields"/>) on every invocation served
under the contract.</t>
        </section>
        <section anchor="rcns-gate">
          <name>The Four-Lock Dispatcher Gate</name>
          <t>RCNS synthesis fires only when <strong>all four</strong> of the following
locks are open at the moment of an unregistered request.
The locks are distributed across actors: server
operator, requesting agent's invoker, requesting agent's
identity, and requesting agent's posture. No single party
can unilaterally activate RCNS.</t>
          <ol spacing="normal" type="1"><li>
              <t><strong>Server policy enabled.</strong> The server's operator has
set <tt>[policies.rcns].enabled = true</tt> (or the equivalent
in the server's configuration format). The default
posture is OFF; servers ship with RCNS disabled and the
operator opts in explicitly.</t>
            </li>
            <li>
              <t><strong>Caller opt-in header.</strong> The request carries
<tt>Allow-RCNS: true</tt>. Clients that have withheld consent to
runtime negotiation never get it; a missing or
non-<tt>true</tt> value means the unregistered request is
refused per the standard Tier classification rules
(the tier taxonomy in <xref target="AGTP-METHODS"/>).</t>
            </li>
            <li>
              <t><strong>Caller scope.</strong> The requesting agent's
<tt>Authority-Scope</tt> includes the <tt>rcns:negotiate</tt> token.
Agents lacking this token cannot trigger
synthesis even with the header set.</t>
            </li>
            <li>
              <t><strong>Minimum trust tier.</strong> The requesting agent's resolved
<tt>trust_tier</tt> (<xref target="AGTP-TRUST"/>) is greater than or equal
to the server's configured <tt>min_trust_tier</tt> (default
<tt>1</tt>, the strictest). Agents below the threshold receive
<tt>464 RCNS No Contract</tt> with <tt>reason:
trust-tier-insufficient</tt>.</t>
            </li>
          </ol>
          <t>When any of the four locks is closed, the server <strong>MUST NOT</strong>
synthesize. The specific refusal depends on which lock is
closed:</t>
          <table>
            <name>Four-Lock Gate Refusal Mapping</name>
            <thead>
              <tr>
                <th align="left">Lock closed</th>
                <th align="left">Server response</th>
              </tr>
            </thead>
            <tbody>
              <tr>
                <td align="left">Server policy disabled</td>
                <td align="left">
                  <tt>464 RCNS No Contract</tt> reason: <tt>rcns-disabled</tt></td>
              </tr>
              <tr>
                <td align="left">Caller opt-in absent</td>
                <td align="left">Standard unregistered-pair refusal (<tt>404</tt> or <tt>405</tt>); RCNS goes unsignaled</td>
              </tr>
              <tr>
                <td align="left">Caller scope absent</td>
                <td align="left">
                  <tt>262 Authorization Required</tt> reason <tt>scope-required scope: rcns:negotiate</tt> when the agent's identity document grants the token but the request omitted it from its claim; <tt>455 Scope Violation</tt> reason <tt>scope-exceeded</tt> when the document omits it (obtainability rule of <xref target="AGTP"/>)</td>
              </tr>
              <tr>
                <td align="left">Trust tier insufficient</td>
                <td align="left">
                  <tt>464 RCNS No Contract</tt> reason: <tt>trust-tier-insufficient</tt></td>
              </tr>
            </tbody>
          </table>
          <t>The asymmetry between locks 1 and 2 (<tt>rcns-disabled</tt> 464 vs
opaque 404) is deliberate: the server policy lock surfaces
RCNS posture to interested callers; the opt-in lock is a
no-surprise gate for callers that never asked.</t>
          <t>A request that holds the Synthesis-Id header (presenting an
already-issued contract) <strong>MUST NOT</strong> trigger a new
synthesis attempt; the gate is skipped and the request is
dispatched directly through the contract resolution path.
This prevents recursive RCNS: a contract invocation cannot
itself produce a new contract.</t>
        </section>
        <section anchor="rcns-delivery-modes">
          <name>Delivery Modes</name>
          <t>When the four-lock gate opens and the server determines a
synthesis is possible, the server delivers the contract in
one of two modes selected by operator policy:</t>
          <t><strong>Confirm-first (default):</strong>
The server returns <tt>461 RCNS Contract Available</tt> with a
response body carrying the synthesized contract preview.
The body <strong>MUST</strong> include:</t>
          <sourcecode type="json"><![CDATA[
{
  "synthesis_id": "<opaque identifier>",
  "method": "BOOK",
  "path": "/room",
  "endpoint": { "..." : "..." },
  "recipe_lineage": {
    "recipe_name": "<recipe identifier>",
    "recipe_version": "<version string>"
  },
  "contract_hash": "<sha256 of canonical contract>",
  "expires_at": "<RFC 3339 timestamp>"
}
]]></sourcecode>
          <t>The caller accepts the contract by re-issuing the original
request with the <tt>Contract-Synthesized</tt> header carrying the
returned <tt>synthesis_id</tt>. The contract is bound to the
caller's Agent-ID at the moment the 461 was issued; a
different Agent-ID presenting the same <tt>synthesis_id</tt> is
refused with <tt>464 contract-not-yours</tt>. The caller declines
the contract by ignoring the response; the contract record
<strong>MAY</strong> be garbage-collected by the server after a
configured TTL.</t>
          <t><strong>Optimistic:</strong>
The server synthesizes the contract and executes the
request inline, returning the normal <tt>200 OK</tt> (or method-
specific success code) for the underlying action. The
response <strong>MUST</strong> carry the <tt>Contract-Synthesized</tt> header
with the issued <tt>synthesis_id</tt>, signaling to the caller
that this response was served under a runtime-negotiated
contract, as distinct from a Tier A or Tier B endpoint. Callers
that wish to repeat the action send subsequent requests
with the <tt>Contract-Synthesized</tt> header to bypass the gate.</t>
          <t>Optimistic mode reduces latency at the cost of removing
the caller's opportunity to preview the synthesized
contract. Confirm-first is the safer default; optimistic
is appropriate when the server operator knows recipes
produce contracts the caller will accept.</t>
        </section>
        <section anchor="rcns-scoping">
          <name>Contract Scoping and Lifecycle</name>
          <t>A synthesized contract is bound to:</t>
          <ul spacing="normal">
            <li>
              <t>The originating Agent-ID (set when the 461 was issued or
the optimistic synthesis fired).</t>
            </li>
            <li>
              <t>The recipe and recipe version captured at synthesis time
(<xref target="recipe-versioning"/>).</t>
            </li>
            <li>
              <t>The contract's expiration timestamp.</t>
            </li>
          </ul>
          <t>Servers <strong>MUST</strong> enforce these bindings on every request
carrying a <tt>Contract-Synthesized</tt> header:</t>
          <ul spacing="normal">
            <li>
              <t>Wrong Agent-ID → <tt>464 contract-not-yours</tt>.</t>
            </li>
            <li>
              <t>Unknown <tt>synthesis_id</tt> → <tt>404 Not Found</tt>.</t>
            </li>
            <li>
              <t>Expired or revoked contract → <tt>464 contract-revoked</tt>.</t>
            </li>
          </ul>
          <t>Contracts have three release paths:</t>
          <ul spacing="normal">
            <li>
              <t><strong>Caller release.</strong> The originating agent invokes
<tt>SUSPEND</tt> with the <tt>synthesis_id</tt> parameter to release a
contract it no longer needs. The release emits an
<tt>rcns_release</tt> event in the agent's lifecycle stream and
evicts the contract from the runtime.</t>
            </li>
            <li>
              <t><strong>Operator revocation.</strong> The server operator invokes
<tt>REVOKE</tt> with <tt>target=contract</tt> and <tt>synthesis_id</tt> to
revoke a contract; the runtime evicts immediately and
the next presentation returns <tt>464 contract-revoked</tt>.</t>
            </li>
            <li>
              <t><strong>TTL expiration.</strong> Contracts have an operator-configured
TTL; the runtime evicts on expiry.</t>
            </li>
          </ul>
          <section anchor="stale-contract-sweep">
            <name>Stale Contract Sweep</name>
            <t>When an operator edits a recipe that has active contracts
synthesized under earlier versions (<xref target="recipe-versioning"/>),
those contracts continue to execute under their captured
version; the spec guarantees in-flight contract stability
across recipe edits. Operators that need to flush stale
contracts (typically after a security-relevant recipe
change) invoke <tt>REVOKE target=stale-contracts</tt>:</t>
            <table>
              <name>REVOKE target=stale-contracts Parameters</name>
              <thead>
                <tr>
                  <th align="left">Parameter</th>
                  <th align="left">Required</th>
                  <th align="left">Description</th>
                </tr>
              </thead>
              <tbody>
                <tr>
                  <td align="left">
                    <tt>target</tt></td>
                  <td align="left">
                    <strong>MUST</strong></td>
                  <td align="left">The literal string <tt>stale-contracts</tt>.</td>
                </tr>
                <tr>
                  <td align="left">
                    <tt>mode</tt></td>
                  <td align="left">
                    <strong>MAY</strong></td>
                  <td align="left">One of <tt>grandfather</tt> (report drifted contracts but leave them running) or <tt>invalidate</tt> (evict drifted contracts). Default is the value of the <tt>on_policy_change</tt> knob in <xref target="rcns-config"/>.</td>
                </tr>
                <tr>
                  <td align="left">
                    <tt>actor</tt></td>
                  <td align="left">
                    <strong>SHOULD</strong></td>
                  <td align="left">Identifier of the operator invoking the sweep, recorded on emitted lifecycle events.</td>
                </tr>
              </tbody>
            </table>
            <t>The sweep walks every active contract in the server's
synthesis runtime and compares each contract's captured
<tt>recipe_version</tt> against the current version of the
same-named recipe in the loaded policies. Three outcomes
per contract:</t>
            <ul spacing="normal">
              <li>
                <t><strong>Version matches.</strong> Contract is left alone.</t>
              </li>
              <li>
                <t><strong>Version differs and mode is <tt>grandfather</tt>.</strong> Contract
is reported in the response as drifted but <strong>MUST NOT</strong>
be evicted; the contract continues to execute under its
captured version.</t>
              </li>
              <li>
                <t><strong>Version differs and mode is <tt>invalidate</tt>.</strong> Contract
<strong>MUST</strong> be evicted from the runtime. The eviction
<strong>MUST</strong> emit an <tt>rcns_release</tt> event in the originating
agent's lifecycle stream with <tt>reason:
policy-change-invalidation</tt> and the operator's
identifier carried in the event payload to distinguish
operator-fired invalidations from agent-initiated
releases (the <tt>SUSPEND synthesis_id=</tt> invocation defined
in <xref target="AGTP"/>). Subsequent presentations of the evicted
<tt>synthesis_id</tt> return <tt>404 Not Found</tt>.</t>
              </li>
            </ul>
            <t>Passthrough contracts (those without a recipe lineage,
synthesized without a recipe) are skipped: the sweep has
no version to compare against. Contracts whose recipe has
been entirely removed from policy (the recipe name no
longer exists) are treated as drift with <tt>current_version</tt>
reported as <tt>null</tt>; under <tt>invalidate</tt> mode, these
contracts are evicted.</t>
            <t>The sweep returns a structured response listing every
contract examined with its disposition (<tt>unchanged</tt>,
<tt>grandfathered</tt>, or <tt>evicted</tt>). Authorization for
<tt>REVOKE target=stale-contracts</tt> requires the operator
<tt>inspect:all</tt> scope token; agents cannot fire the sweep on
behalf of others.</t>
            <t>The sweep is operator-fired by design. AGTP servers lack
support hot configuration reload; the operator explicitly
invokes the sweep when they know they have edited a
recipe and want the resulting drift to be either reported
or invalidated. Operators that want strict
recipe-edit-invalidates-contracts behavior set
<tt>on_policy_change = invalidate</tt> and invoke the sweep
after every recipe edit.</t>
          </section>
        </section>
        <section anchor="rcns-headers">
          <name>Headers and Rate Limiting</name>
          <t>RCNS uses two request headers and one response header:</t>
          <table>
            <name>RCNS Request and Response Headers</name>
            <thead>
              <tr>
                <th align="left">Header</th>
                <th align="left">Direction</th>
                <th align="left">Purpose</th>
              </tr>
            </thead>
            <tbody>
              <tr>
                <td align="left">
                  <tt>Allow-RCNS</tt></td>
                <td align="left">Request</td>
                <td align="left">Caller opt-in to runtime negotiation. Value <tt>true</tt> opens lock 2 of the four-lock gate (<xref target="rcns-gate"/>). Absent or non-<tt>true</tt> keeps the gate closed.</td>
              </tr>
              <tr>
                <td align="left">
                  <tt>Contract-Synthesized</tt></td>
                <td align="left">Request and Response</td>
                <td align="left">Identifies a synthesized contract by <tt>synthesis_id</tt>. On a request, presents a previously-issued contract to bypass the gate. On a response (optimistic mode), notifies the caller that the response was served under a synthesized contract.</td>
              </tr>
              <tr>
                <td align="left">
                  <tt>Idempotency-Key</tt></td>
                <td align="left">Request</td>
                <td align="left">Per-agent idempotency key for RCNS-eligible requests. Servers <strong>MUST</strong> scope the idempotency cache by <tt>(Agent-ID, Idempotency-Key)</tt>; replays of the same key from the same agent receive the cached response, replays from different agents are independent requests.</td>
              </tr>
            </tbody>
          </table>
          <t>Servers <strong>MUST</strong> implement per-agent rate limiting on RCNS
gate evaluations. When the per-agent rate exceeds the
configured ceiling, the server returns <tt>429 Too Many
Requests</tt> with <tt>scope: rcns</tt> in the response body to
distinguish RCNS rate limiting from other rate-limit
sources. The default ceiling is operator-configured;
implementations <strong>SHOULD</strong> default to a conservative value
(e.g., 10 evaluations per minute) and operators <strong>MAY</strong>
raise it.</t>
          <t>Rate limiting applies to gate evaluations only; invocations served
under an already-issued contract are outside it.
Repeated <tt>Contract-Synthesized</tt>-bearing requests against a
synthesized contract are rate-limited like any other
endpoint, outside the RCNS rate limit.</t>
        </section>
        <section anchor="rcns-attribution-fields">
          <name>Attribution-Record Extension Fields</name>
          <t>Every action dispatched under a synthesized contract,
whether RCNS-spawned, PROPOSE-spawned, or future-mechanism-
spawned, <strong>MUST</strong> carry the following extension fields on
its Attribution-Record payload, in addition to the base
identifier-chain fields specified in <xref target="AGTP-IDENTIFIERS"/>:</t>
          <table>
            <name>RCNS Attribution-Record Extension Fields</name>
            <thead>
              <tr>
                <th align="left">Field</th>
                <th align="left">Type</th>
                <th align="left">Description</th>
              </tr>
            </thead>
            <tbody>
              <tr>
                <td align="left">
                  <tt>synthesis_id</tt></td>
                <td align="left">string</td>
                <td align="left">Opaque identifier of the contract under which this action was dispatched.</td>
              </tr>
              <tr>
                <td align="left">
                  <tt>contract_hash</tt></td>
                <td align="left">string</td>
                <td align="left">SHA-256 of the canonical contract definition (the synthesized endpoint plus its recipe lineage at synthesis time), rendered as 64 lowercase hexadecimal characters. Stable across all invocations of the same contract.</td>
              </tr>
              <tr>
                <td align="left">
                  <tt>negotiation_origin</tt></td>
                <td align="left">string</td>
                <td align="left">One of <tt>rcns-gate</tt> (synthesized via the four-lock gate), <tt>propose</tt> (synthesized via explicit PROPOSE), or <tt>pre-registered</tt> (a future origin for contracts elevated from Tier C to Tier B).</td>
              </tr>
            </tbody>
          </table>
          <t>These fields enable chain inspectors and audit consumers to
group invocations by contract identity, distinguish
contracts produced through different origins, and verify
that a stream of actions all ran under the same
synthesized contract definition.</t>
          <t>The fields are present only on actions served under a
contract. Tier A and Tier B endpoint invocations omit them
entirely; their absence is itself diagnostic information.</t>
        </section>
        <section anchor="rcns-config">
          <name>RCNS Configuration</name>
          <t>The full set of operator-controlled RCNS knobs is
specified in this section. The configuration is operator-
authored and is invisible to callers on the wire; what is
visible is the <em>result</em> of the configuration (whether the
gate fires, which mode it delivers in, what the rate ceiling
is). The block name (<tt>[policies.rcns]</tt> in the recommended
TOML form) is conventional and carries no normative weight; servers using
different configuration formats apply equivalent semantics.</t>
          <table>
            <name>RCNS Configuration Knobs</name>
            <thead>
              <tr>
                <th align="left">Knob</th>
                <th align="left">Default</th>
                <th align="left">Purpose</th>
              </tr>
            </thead>
            <tbody>
              <tr>
                <td align="left">
                  <tt>enabled</tt></td>
                <td align="left">
                  <tt>false</tt></td>
                <td align="left">Master switch (lock 1 of the four-lock gate)</td>
              </tr>
              <tr>
                <td align="left">
                  <tt>mode</tt></td>
                <td align="left">
                  <tt>confirm-first</tt></td>
                <td align="left">Delivery mode: <tt>confirm-first</tt> (461) or <tt>optimistic</tt></td>
              </tr>
              <tr>
                <td align="left">
                  <tt>min_trust_tier</tt></td>
                <td align="left">
                  <tt>1</tt> (strictest)</td>
                <td align="left">Minimum resolved trust tier for callers (lock 4)</td>
              </tr>
              <tr>
                <td align="left">
                  <tt>rate_limit_per_minute</tt></td>
                <td align="left">
                  <tt>10</tt></td>
                <td align="left">Per-agent rate ceiling for gate evaluations</td>
              </tr>
              <tr>
                <td align="left">
                  <tt>contract_ttl_seconds</tt></td>
                <td align="left">implementation-defined</td>
                <td align="left">Default contract TTL; operators <strong>SHOULD</strong> set explicitly</td>
              </tr>
              <tr>
                <td align="left">
                  <tt>on_policy_change</tt></td>
                <td align="left">
                  <tt>grandfather</tt></td>
                <td align="left">Default behavior of the operator-fired stale-contract sweep (<xref target="stale-contract-sweep"/>). One of <tt>grandfather</tt> (report drifted contracts but leave them running) or <tt>invalidate</tt> (evict drifted contracts and emit <tt>rcns_release</tt> events with <tt>reason: policy-change-invalidation</tt>). The sweep is operator-fired; this knob sets its default mode, which operators <strong>MAY</strong> override per invocation.</td>
              </tr>
            </tbody>
          </table>
          <t>The default posture is conservative: a
freshly-installed AGTP server has RCNS disabled and, when
enabled, defaults to confirm-first delivery at the
strictest trust tier with a low rate ceiling. Operators
relax these defaults explicitly as their deployment
matures.</t>
        </section>
      </section>
      <section anchor="purpose">
        <name>Purpose</name>
        <t>PROPOSE is the AGTP method that triggers runtime contract negotiation.
An agent that needs an endpoint the server has yet to advertise
submits a PROPOSE request carrying an endpoint definition conformant to <xref target="AGTP-METHODS"/>
specification; the server evaluates the proposal against the
contract layer and either instantiates the endpoint as a
session-scoped artifact or refuses.</t>
        <t>PROPOSE is one of the eighteen floor methods defined in <xref target="AGTP"/>. Its
parameter table is specified there. This document specifies the
synthesis semantics that govern server-side evaluation.</t>
      </section>
      <section anchor="negotiation-flow">
        <name>Negotiation Flow</name>
        <artwork><![CDATA[
Step 1:  Agent retrieves the server manifest (which carries the
         method policy as `policies.methods`)
Step 2:  Agent determines the needed endpoint is undeclared
Step 3:  Agent constructs a conformant endpoint definition
Step 4:  Agent sends PROPOSE with the endpoint definition in body
Step 5a: Server accepts and synthesizes
         Server evaluates contract conformance and capability envelope
         Server composes the endpoint from existing endpoints
         Server returns 263 Proposal Approved with the
           endpoint definition for the synthesized endpoint
         Synthesis-ID matches original proposal
         Synthesized endpoint is session-scoped by default
         Agent MAY invoke the endpoint immediately
Step 5b: Server rejects (463)
         Server returns 463 Proposal Rejected with structured reason
         Response SHOULD reference manifest entries that satisfy a
           similar capability if available
         Agent MAY modify proposal and retry (maximum 3 turns)
         After 3 rejections agent MUST ESCALATE
]]></artwork>
      </section>
      <section anchor="propose-body">
        <name>PROPOSE Request Body Shape</name>
        <t>PROPOSE accepts the proposed endpoint definition in one of two
mutually exclusive body forms. Servers <strong>MUST</strong> accept both
forms; clients <strong>SHOULD</strong> emit the wrapped form for new code.</t>
        <section anchor="wrapped-form-recommended">
          <name>Wrapped form (RECOMMENDED)</name>
          <t>The proposed endpoint definition is carried under a top-level
<tt>endpoint</tt> field:</t>
          <sourcecode type="json"><![CDATA[
{
  "method": "PROPOSE",
  "task_id": "task-propose-01",
  "parameters": {
    "endpoint": {
      "method": "BOOK",
      "path": "/room",
      "description": "Books a room for the named guest.",
      "semantic": { "..." : "..." },
      "input_schema": { "..." : "..." },
      "output_schema": { "..." : "..." }
    },
    "persistent": false
  }
}
]]></sourcecode>
          <t>The wrapped form makes the <tt>(method, path)</tt> pair the explicit
key of the proposal and clears the way for synthesis-time fields
(e.g., <tt>version</tt>, <tt>lineage</tt>) to ride at the <tt>parameters</tt> level
without colliding with endpoint definition fields. The wrapped
form is the form used by RCNS dispatcher-gate escalations
(<xref target="rcns-overview"/>).</t>
        </section>
        <section anchor="legacy-form">
          <name>Legacy form</name>
          <t>The endpoint definition fields appear directly under
<tt>parameters</tt> with a <tt>name</tt> field naming the endpoint:</t>
          <sourcecode type="json"><![CDATA[
{
  "method": "PROPOSE",
  "task_id": "task-propose-02",
  "parameters": {
    "name": "book-room",
    "method": "BOOK",
    "path": "/room",
    "semantic": { "..." : "..." }
  }
}
]]></sourcecode>
          <t>A PROPOSE request <strong>MUST NOT</strong> carry both <tt>endpoint</tt> and <tt>name</tt>
at the same time. Servers <strong>MUST</strong> return <tt>400 Bad Request</tt>
with <tt>reason: ambiguous-body</tt> if both are present.</t>
        </section>
        <section anchor="response-body">
          <name>263 Response Body</name>
          <t>On approval the server returns <tt>263 Proposal Approved</tt> with a
body carrying the synthesized endpoint:</t>
          <sourcecode type="json"><![CDATA[
{
  "status": 263,
  "method": "BOOK",
  "path": "/room",
  "synthesis_id": "<opaque identifier>",
  "endpoint": { "..." : "..." },
  "recipe_lineage": {
    "recipe_name": "<recipe identifier>",
    "recipe_version": "<version string>"
  }
}
]]></sourcecode>
          <t>The top-level <tt>method</tt> and <tt>path</tt> fields name the synthesized
endpoint and <strong>MUST</strong> match the proposed pair. The
<tt>synthesis_id</tt> is an opaque identifier the server uses to
distinguish this contract from other contracts; clients
<strong>SHOULD</strong> record it for use with <tt>INSPECT target=contract</tt>
and the RCNS revocation surface. The <tt>recipe_lineage</tt> field,
when present, records the recipe that produced the synthesis
and the recipe version captured at synthesis time; this
disambiguates contracts produced under different versions of
the same recipe.</t>
        </section>
      </section>
      <section anchor="recipe-versioning">
        <name>Recipe Versioning</name>
        <t>A server's contract synthesis machinery typically composes
synthesized endpoints from operator-authored recipes (composition
rules that name a set of underlying primitives and how to invoke
them). Recipes evolve: operators edit them to fix bugs, support
new primitives, or refine semantic claims. To prevent recipe
edits from silently mutating running contracts, recipes carry a
<tt>version</tt> identifier and synthesis captures the version
in effect at the moment the contract was produced.</t>
        <t>The <tt>version</tt> field is operator-defined; servers <strong>MUST</strong> treat
the value opaquely. The recommended convention is a monotonically
increasing string (semver, integer counter, or timestamp); the
specific format has no effect on wire interoperability.</t>
        <t>When a server synthesizes a contract from a recipe:</t>
        <ol spacing="normal" type="1"><li>
            <t>The server <strong>MUST</strong> record the recipe's current <tt>version</tt> on
the resulting contract record at synthesis time.</t>
          </li>
          <li>
            <t>The server <strong>MUST</strong> present the captured version in the
<tt>recipe_lineage.recipe_version</tt> field of the 263 response
body (<xref target="propose-body"/>) and in any subsequent
<tt>INSPECT target=contract</tt> response naming this contract.</t>
          </li>
          <li>
            <t>The synthesized contract <strong>MUST</strong> continue to execute under
the captured recipe version for the contract's lifetime,
even if the operator subsequently edits the recipe to a new
version.</t>
          </li>
          <li>
            <t>A subsequent PROPOSE for the same <tt>(method, path)</tt> pair
<strong>MAY</strong> produce a new contract bound to the new recipe
version; the new contract carries a distinct <tt>synthesis_id</tt>
and the prior contract continues to operate under its
captured version until released or revoked.</t>
          </li>
        </ol>
        <t>The recipe-version capture rule decouples contract stability
from recipe evolution. Operators who edit a recipe never
disturb in-flight callers; callers who need the updated
behavior reproduce the proposal under the new recipe version.
Operators that want to force callers off an old recipe version
use the contract revocation surface specified in
<xref target="rcns-overview"/> (revoking specific <tt>synthesis_id</tt> values);
recipes are never mutated in place.</t>
      </section>
      <section anchor="server-side-synthesis-evaluation">
        <name>Server-Side Synthesis Evaluation</name>
        <t>On receipt of a PROPOSE request, the server <strong>MUST</strong> evaluate:</t>
        <ol spacing="normal" type="1"><li>
            <t><strong>Method conformance.</strong> Is the proposed method in the AGTP-METHODS
approved method catalog, or is it a custom method declared in
the server's <tt>policies.methods</tt> (<xref target="AGTP-METHODS"/>)? Otherwise,
return 459 Method Violation.</t>
          </li>
          <li>
            <t><strong>Path conformance.</strong> Does the proposed path satisfy
the path grammar in <xref target="AGTP-METHODS"/>? Otherwise, return 460 Endpoint Violation.</t>
          </li>
          <li>
            <t><strong>Semantic block conformance.</strong> Does the proposed semantic
block carry all required fields with valid values? Otherwise,
return 400 Bad Request.</t>
          </li>
          <li>
            <t><strong>Schema conformance.</strong> Are the input and output schemas valid
JSON Schema documents? Otherwise, return 400 Bad Request.</t>
          </li>
          <li>
            <t><strong>Authority sufficiency.</strong> Does the proposing agent's
declared Authority-Scope cover the proposed authority
requirements? If the agent's identity document grants them but
the request omitted them from its claim, return 262 Authorization
Required with reason <tt>scope-required</tt>; if the document omits
them, return 455 Scope Violation with reason <tt>scope-exceeded</tt>
(<xref target="AGTP"/>).</t>
          </li>
          <li>
            <t><strong>Capability envelope.</strong> Can the server actually synthesize
the proposed endpoint from its existing capabilities? Otherwise,
return 463 Proposal Rejected with <tt>reason: composition-impossible</tt>.</t>
          </li>
          <li>
            <t><strong>Policy acceptance.</strong> Does the server's policy permit the
proposed method-and-path combination? Otherwise, return 463 with
<tt>reason: policy-refused</tt>.</t>
          </li>
        </ol>
        <t>If all evaluations pass, the server synthesizes the endpoint and
returns 263 Proposal Approved.</t>
      </section>
      <section anchor="synthesis-composed-endpoints">
        <name>Synthesis-Composed Endpoints</name>
        <t>When a server synthesizes an endpoint, the server is composing the
proposed behavior from existing endpoints internally. The synthesized
endpoint is exposed to the agent as a single endpoint, but the
server's handler implementation invokes one or more underlying
endpoints to fulfill the request.</t>
        <t>Authority <strong>MUST</strong> be preserved through the composition. The agent's
Authority-Scope <strong>MUST</strong> be sufficient for every underlying endpoint
the synthesis invokes. If a composed step would require authority
the agent lacks, the synthesis <strong>MUST</strong> fail at evaluation
time (step 5), before any execution.</t>
      </section>
      <section anchor="session-scoped-vs-persistent-synthesis">
        <name>Session-Scoped vs Persistent Synthesis</name>
        <t>By default, a synthesized endpoint is session-scoped: it exists for
the duration of the AGTP session that proposed it and is removed when
the session ends. The agent <strong>MAY</strong> request persistent synthesis by
setting <tt>persistent: true</tt> in the PROPOSE body; the server <strong>MAY</strong>
honor or refuse the persistence request independently of the
synthesis decision. Persistent synthesis subjects the proposed
endpoint to the server's regular endpoint catalog and is reflected
in subsequent manifest retrievals.</t>
      </section>
    </section>
    <section anchor="rcns-surfaces">
      <name>Inventory Surfaces</name>
      <t>RCNS adds two built-in DISCOVER endpoints to the reserved set
specified in <xref target="AGTP-METHODS"/>. Both are Tier A: servers that
enable RCNS <strong>MUST</strong> expose them with the response contracts
below.</t>
      <section anchor="builtin-patterns">
        <name><tt>DISCOVER /patterns</tt></name>
        <t>Servers <strong>SHOULD</strong> expose <tt>DISCOVER /patterns</tt>. The endpoint
returns the inventory of synthesis patterns the server will
negotiate against under RCNS: the operator-authored
recipes (<xref target="recipe-versioning"/>) and the <tt>(method, path)</tt>
shapes those recipes match. The endpoint is reachable even
when RCNS is disabled (<xref target="rcns-config"/>); when RCNS is
disabled, the response <strong>SHOULD</strong> indicate the disabled
state so callers can distinguish "no patterns exist" from
"patterns exist but synthesis is off."</t>
        <sourcecode type="json"><![CDATA[
{
  "rcns_enabled": true,
  "patterns": [
    {
      "recipe_name": "book-room",
      "recipe_version": "3",
      "method": "BOOK",
      "path_exact": "/room",
      "description": "Books a room for the named guest at the named property."
    }
  ]
}
]]></sourcecode>
        <t>The response <strong>MUST</strong> be a JSON object with <tt>rcns_enabled</tt>
(boolean) and <tt>patterns</tt> (array). Each pattern entry
<strong>MUST</strong> carry <tt>recipe_name</tt>, <tt>recipe_version</tt>, and
<tt>method</tt>, plus exactly one of <tt>path_exact</tt> (byte-exact
match) or <tt>path_regex</tt> (regular expression match against
the request path). Servers <strong>MAY</strong> include additional
descriptive fields (<tt>description</tt>, <tt>required_scopes</tt>,
<tt>semantic</tt>) at their discretion; callers <strong>MUST</strong> ignore
unknown fields.</t>
        <t>The endpoint surfaces server posture explicitly: an agent
inspecting <tt>DISCOVER /patterns</tt> knows in advance what
<tt>(method, path)</tt> shapes the server will consider for
synthesis.</t>
      </section>
      <section anchor="builtin-contracts">
        <name><tt>DISCOVER /contracts</tt></name>
        <t>Servers that have ever synthesized at least one contract
<strong>MUST</strong> expose <tt>DISCOVER /contracts</tt>. The endpoint returns
active synthesized contracts, scoped by default to the
requesting agent. Callers with the <tt>inspect:all</tt>
Authority-Scope token receive contracts across all agents
(operator visibility).</t>
        <sourcecode type="json"><![CDATA[
[
  {
    "synthesis_id": "<opaque>",
    "method": "BOOK",
    "path": "/room",
    "originating_agent_id": "<64 hex>",
    "recipe_lineage": {
      "recipe_name": "book-room",
      "recipe_version": "3"
    },
    "contract_hash": "<64 hex>",
    "negotiation_origin": "rcns-gate",
    "issued_at": "<RFC 3339>",
    "expires_at": "<RFC 3339>"
  }
]
]]></sourcecode>
        <t>The response is a JSON array. Each entry <strong>MUST</strong> carry
<tt>synthesis_id</tt>, <tt>method</tt>, <tt>path</tt>, <tt>originating_agent_id</tt>,
<tt>recipe_lineage</tt>, <tt>contract_hash</tt>, and <tt>negotiation_origin</tt>
matching the Attribution-Record extension fields specified
in <xref target="rcns-attribution-fields"/>. The <tt>issued_at</tt> and
<tt>expires_at</tt> fields <strong>SHOULD</strong> be present.</t>
        <t>A server <strong>MUST NOT</strong> return contracts whose
<tt>originating_agent_id</tt> differs from the requesting
Agent-ID, unless the request carries the <tt>inspect:all</tt>
scope.</t>
      </section>
    </section>
    <section anchor="status-codes">
      <name>Status Codes</name>
      <t>RCNS uses the following codes from the AGTP status code space.
The codes are registered in the AGTP Status Code Registry per
<xref target="AGTP"/>; 262 Authorization Required is specified in
<xref target="AGTP-METHODS"/> and listed here because the four-lock gate
returns it.</t>
      <table>
        <name>RCNS Status Codes</name>
        <thead>
          <tr>
            <th align="left">Code</th>
            <th align="left">Name</th>
            <th align="left">Returned When</th>
          </tr>
        </thead>
        <tbody>
          <tr>
            <td align="left">261</td>
            <td align="left">Negotiation In Progress</td>
            <td align="left">Server has accepted PROPOSE for evaluation; agent polls via <tt>QUERY /proposals/{proposal_id}</tt> for terminal status</td>
          </tr>
          <tr>
            <td align="left">262</td>
            <td align="left">Authorization Required</td>
            <td align="left">Caller scope lock closed with the token granted but unclaimed: reason <tt>scope-required scope: rcns:negotiate</tt>. When the identity document omits the token the lock returns 455 Scope Violation per <xref target="AGTP"/> (see <xref target="AGTP-METHODS"/> for the general semantics)</td>
          </tr>
          <tr>
            <td align="left">263</td>
            <td align="left">Proposal Approved</td>
            <td align="left">Server has synthesized and instantiated the proposed endpoint. Response body carries top-level <tt>method</tt> and <tt>path</tt> fields naming the synthesized endpoint, plus the full endpoint definition</td>
          </tr>
          <tr>
            <td align="left">461</td>
            <td align="left">RCNS Contract Available</td>
            <td align="left">Synthesis preview returned in confirm-first mode. Response body carries a contract preview with <tt>synthesis_id</tt>, resolved <tt>(method, path)</tt>, and the recipe lineage. Caller accepts by re-issuing with the <tt>Contract-Synthesized</tt> header</td>
          </tr>
          <tr>
            <td align="left">463</td>
            <td align="left">Proposal Rejected</td>
            <td align="left">Server cannot or declines to synthesize the proposed endpoint</td>
          </tr>
          <tr>
            <td align="left">464</td>
            <td align="left">RCNS No Contract</td>
            <td align="left">Synthesis attempted but no contract could be delivered. Response body carries one of the reasons in the RCNS vocabulary per <xref target="AGTP"/></td>
          </tr>
        </tbody>
      </table>
      <t>The structural rejection codes 404, 405, 459, and 460 that a
server returns when RCNS is disabled or the gate is closed are
specified in <xref target="AGTP-METHODS"/>.</t>
    </section>
    <section anchor="security-considerations">
      <name>Security Considerations</name>
      <t>The security considerations of <xref target="AGTP"/> and <xref target="AGTP-METHODS"/>
apply. This section adds the synthesis-specific consideration.</t>
      <section anchor="synthesis-authority-preservation">
        <name>Synthesis Authority Preservation</name>
        <t>The synthesis evaluation step (step 5 in <xref target="server-side-synthesis-evaluation"/>)
<strong>MUST</strong> verify that authority is preserved through composition. A
synthesis that elevates authority by composing endpoints with
sufficient individual scopes into a behavior the agent is barred
from is a known threat. Servers <strong>MUST</strong> reject syntheses
where the composed behavior exceeds what the agent's Authority-Scope
permits, regardless of whether the individual steps are within
scope.</t>
      </section>
    </section>
    <section anchor="iana-considerations">
      <name>IANA Considerations</name>
      <t>This document is the authoritative reference for the following
entries in the AGTP registries maintained per <xref target="AGTP"/>. Status
codes 461 and 464 and the RCNS reason vocabulary are registered
by <xref target="AGTP"/> itself.</t>
      <section anchor="status-code-assignments">
        <name>Status Code Assignments</name>
        <ul spacing="normal">
          <li>
            <t>261 Negotiation In Progress</t>
          </li>
          <li>
            <t>263 Proposal Approved</t>
          </li>
          <li>
            <t>463 Proposal Rejected</t>
          </li>
        </ul>
      </section>
      <section anchor="header-field-assignments">
        <name>Header Field Assignments</name>
        <ul spacing="normal">
          <li>
            <t><tt>Allow-RCNS</tt> (request)</t>
          </li>
          <li>
            <t><tt>Contract-Synthesized</tt> (request and response)</t>
          </li>
          <li>
            <t><tt>Idempotency-Key</tt> (request)</t>
          </li>
        </ul>
        <t>Semantics for each are specified in <xref target="rcns-headers"/>.</t>
      </section>
      <section anchor="scope-token">
        <name>Scope Token</name>
        <ul spacing="normal">
          <li>
            <t><tt>rcns:negotiate</tt>, the Authority-Scope token that opens lock 3 of
the dispatcher gate (<xref target="rcns-gate"/>), for the Authority-Scope
token vocabulary maintained per <xref target="AGTP"/>.</t>
          </li>
        </ul>
      </section>
    </section>
    <section anchor="open-items">
      <name>Open Items</name>
      <t>The following items are out of scope for this revision and are
anticipated in future revisions:</t>
      <ul spacing="normal">
        <li>
          <t>Detailed schema for the <tt>synthesis_log</tt> returned with 263
Proposal Approved, recording which underlying endpoints were
composed.</t>
        </li>
        <li>
          <t>Federation model for multi-server synthesis (composing endpoints
from different servers in a single synthesized endpoint).</t>
        </li>
        <li>
          <t>Hot reload of recipes without server restart. The stale contract
sweep (<xref target="stale-contract-sweep"/>) is operator-fired by design
because servers lack hot reload; a reload path would change the
sweep trigger.</t>
        </li>
        <li>
          <t>The <tt>on_policy_change</tt> contract-invalidation behavior is
specified (<xref target="rcns-config"/>) and still awaits wiring in the reference
implementation.</t>
        </li>
        <li>
          <t>Whether the trust-tier lock should also drive the stale contract
sweep (an agent whose trust tier falls below <tt>min_trust_tier</tt>
after synthesis), as a second sweep dimension alongside recipe
version drift.</t>
        </li>
      </ul>
    </section>
    <section anchor="acknowledgments">
      <name>Acknowledgments</name>
      <t>This document was developed in response to implementation
experience with the AGTP v07 through v09 builds, in which the
substrate was built in five phases (endpoint tiers, the dispatcher
gate, recipe versioning, contract scoping, and the observability
surfaces) before the text was consolidated. The architectural
decision to carry the contract in the protocol was articulated in
the AGTP-API Position Paper (May 2026).</t>
    </section>
  </middle>
  <back>
    <references anchor="sec-combined-references">
      <name>References</name>
      <references anchor="sec-normative-references">
        <name>Normative References</name>
        <reference anchor="RFC2119">
          <front>
            <title>Key words for use in RFCs to Indicate Requirement Levels</title>
            <author fullname="S. Bradner" initials="S." surname="Bradner"/>
            <date month="March" year="1997"/>
            <abstract>
              <t>In many standards track documents several words are used to signify the requirements in the specification. These words are often capitalized. This document defines these words as they should be interpreted in IETF documents. This document specifies an Internet Best Current Practices for the Internet Community, and requests discussion and suggestions for improvements.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="2119"/>
          <seriesInfo name="DOI" value="10.17487/RFC2119"/>
        </reference>
        <reference anchor="RFC8174">
          <front>
            <title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title>
            <author fullname="B. Leiba" initials="B." surname="Leiba"/>
            <date month="May" year="2017"/>
            <abstract>
              <t>RFC 2119 specifies common key words that may be used in protocol specifications. This document aims to reduce the ambiguity by clarifying that only UPPERCASE usage of the key words have the defined special meanings.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="8174"/>
          <seriesInfo name="DOI" value="10.17487/RFC8174"/>
        </reference>
        <reference anchor="AGTP">
          <front>
            <title>Agent Transfer Protocol (AGTP)</title>
            <author fullname="Chris Hood">
              <organization/>
            </author>
            <date year="2026"/>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-hood-independent-agtp-10"/>
        </reference>
        <reference anchor="AGTP-METHODS">
          <front>
            <title>AGTP Methods (AGTP Verbs): Method Vocabulary, Path Grammar, and Endpoints</title>
            <author fullname="Chris Hood">
              <organization/>
            </author>
            <date year="2026"/>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-hood-agtp-methods-00"/>
        </reference>
      </references>
      <references anchor="sec-informative-references">
        <name>Informative References</name>
        <reference anchor="AGTP-TRUST">
          <front>
            <title>AGTP Trust and Verification Specification</title>
            <author fullname="Chris Hood">
              <organization/>
            </author>
            <date year="2026"/>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-hood-agtp-trust-03"/>
        </reference>
        <reference anchor="AGTP-IDENTIFIERS">
          <front>
            <title>AGTP Identifier Chain</title>
            <author fullname="Chris Hood">
              <organization/>
            </author>
            <date year="2026"/>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-hood-agtp-identifiers-03"/>
        </reference>
        <reference anchor="AGTP-API">
          <front>
            <title>AGTP-API: Verbs, Paths, Endpoints, and Synthesis</title>
            <author fullname="Chris Hood">
              <organization/>
            </author>
            <date year="2026"/>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-hood-agtp-api-01"/>
        </reference>
      </references>
    </references>
    <?line 962?>

<section anchor="changes-from-agtp-api-v01">
      <name>Changes from AGTP-API v01</name>
      <t>This is the first revision under the AGTP-RCNS name. The text was
extracted from <xref target="AGTP-API"/> with the following edits:</t>
      <ul spacing="normal">
        <li>
          <t>Cross-references to the tier taxonomy, custom methods, and path
grammar now point to <xref target="AGTP-METHODS"/>.</t>
        </li>
        <li>
          <t>The overview paragraph that described the specification as in
progress across revisions now describes this document.</t>
        </li>
        <li>
          <t>The <tt>DISCOVER /patterns</tt> and <tt>DISCOVER /contracts</tt> built-ins are
carried here as the inventory surfaces; their reservation remains
in the reserved DISCOVER path list of <xref target="AGTP-METHODS"/>.</t>
        </li>
        <li>
          <t>Status codes 261, 263, 463 and the RCNS headers moved here with
their IANA entries; 262 stays with <xref target="AGTP-METHODS"/>.</t>
        </li>
        <li>
          <t>Terminology for Contract, Recipe, and Tier C Endpoint added.</t>
        </li>
      </ul>
      <t>No wire-visible behavior changes. A server conformant to the RCNS
portions of <xref target="AGTP-API"/> is conformant to this document.</t>
    </section>
  </back>
  <!-- ##markdown-source:
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
m/5/AUSdAtSQnwAA

-->

</rfc>
