<?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.39 (Ruby 3.2.3) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-morrison-binding-moment-envelope-03" category="info" submissionType="independent" version="3">
  <!-- xml2rfc v2v3 conversion 3.34.0 -->
  <front>
    <title abbrev="Binding-Moment Envelope">The Briefing-and-Binding Envelope: A Delivery Contract for Agent-to-Principal Decision Moments with Dual-Veto Reconciliation</title>
    <seriesInfo name="Internet-Draft" value="draft-morrison-binding-moment-envelope-03"/>
    <author fullname="Blake Morrison">
      <organization>Alter Meridian Pty Ltd (~truealter)</organization>
      <address>
        <email>blake@truealter.com</email>
        <uri>alter:~blake</uri>
      </address>
    </author>
    <author fullname="Christopher Whiteside">
      <organization>Independent</organization>
      <address>
        <email>cwhiteside.engineering@gmail.com</email>
      </address>
    </author>
    <date year="2026" month="September" day="30"/>
    <abstract>
      

<t>This memo specifies the briefing-and-binding envelope: a delivery
contract for the wire-level structure by which an artificial-
intelligence agent surfaces a consequential decision to the human
principal it acts for, and by which the principal commits, declines,
amends, or rejects that decision.  The envelope carries eight named
slots (a synopsis, findings, recommendations, an offer of detail, a
question stem, a set of options each marked with its own reasoning, a
single recommended option, and a pair of escape hatches) and is
emitted as a structured field of a Model Context Protocol tool result.  The contribution is the delivery contract itself: a single
renderer-agnostic envelope so that the briefing an agent delivers and
the binding a principal commits back have one machine-checkable shape
across every consuming surface.  The central element is the
dual-veto handshake: one escape hatch lets the principal revise the
answer space while accepting the question; the other lets the
principal reject the question itself and reopen deliberation.  Either
party may veto.  The memo defines a content digest over the envelope,
canonicalized under JCS and hashed with SHA-256, so that a resolution
names the exact envelope it resolves and an external receipt can
reference that envelope by digest.  The memo is Informational.  No new
transport is introduced; the envelope composes with the handle namespace of draft-morrison-identity-pronouns and the MCP tool surface of draft-morrison-org-alter-policy-provision.</t>
    </abstract>
  </front>
  <middle>
    

<section anchor="introduction">
      <name>Introduction</name>
      <t>An artificial-intelligence agent operated on behalf of a human
principal periodically reaches a point at which it has synthesised a
position and must obtain the principal's commitment before acting:
whether to release a scoped view of the principal's data to a third
party, whether to accept or decline a delegated action, whether to
acknowledge a recommendation, whether to proceed with a step that
changes external state.  This memo names that point a <em>binding
moment</em> and specifies the wire-level structure through which a binding
moment is delivered and resolved.</t>
      <t>In current practice the structure of a binding moment is per-tool ad
hoc.  One agent tool returns a free-text question; another returns a
list of options with no synthesis; a third returns a state dump and
leaves the principal to perform the synthesis themselves.  This has two effects. The principal cannot acquire a stable
scanning habit, because the shape of the decision changes with every
tool.  The more serious effect is that an agent that returns a bare menu
of options has pushed the cost of deliberation back onto the
principal: the agent has measured but not committed, and the
interface has become soft-coercive: the principal must either pick
from a frame they did not author or abandon the interaction.</t>
      <t>This memo specifies a single delivery contract, the briefing-and-
binding envelope, that resolves both problems by construction.  The
envelope has a fixed eight-slot grammar.  The first four slots are the
<em>briefing</em>: a pre-synthesised, scannable account of what the agent
observed and what it concluded.  The last four slots are the
<em>binding</em>: a quantised decision, a recommended path, and two escape
hatches.  The envelope is emitted as a structured field of a Model
Context Protocol <xref target="MCP"/> tool result, and any consuming surface (a
command-line client, a mobile consent sheet, a desktop notifier, an
agent-runtime hook) renders the same eight slots into its native
user interface.  </t>
      <t>The central element is the <em>dual-veto handshake</em>.  A binding
moment is consensual only if both parties can refuse it.  The agent
refuses by declining to emit a binding moment at all when it cannot
commit to a position: a binding moment with a hedged synopsis is
malformed.  The principal refuses through two distinct escape hatches:
one revises the <em>answer space</em> (the principal accepts the question but
answers on their own terms), the other revises the <em>question space</em>
(the principal rejects the question itself and reopens deliberation).
Without both hatches the envelope degrades to a forced-choice
interface and the briefing slots no longer inform a free choice.  Section
7 specifies the handshake.</t>
      <t>This memo specifies a delivery contract and a veto handshake.  It does
NOT specify a persistent log of binding moments, a signed event
history between identifiers, or any derivation of signing authority;
those concerns are out of scope and are addressed by separate work.
The envelope is a transient payload: it is emitted, rendered,
resolved, and the resolution is returned.  What an implementation
durably records of that exchange, and under what attribution, is a
matter for the audit-signal mechanism of <xref target="POLICYPROV"/> and is not
constrained here.</t>
      <t>Cognitive processing of any request or response is likewise out of
scope, and the onus lies with the entities themselves.  This memo
constrains the structure of what is delivered and how it is resolved.
It does not constrain, and makes no claim about, how an agent reaches
the position it synthesises or how a principal reaches the answer they
give.</t>
    </section>
    <section anchor="conventions-and-definitions">
      <name>Conventions and Definitions</name>
      <t>The key words "<bcp14>MUST</bcp14>", "<bcp14>MUST NOT</bcp14>", "<bcp14>REQUIRED</bcp14>", "<bcp14>SHALL</bcp14>", "<bcp14>SHALL NOT</bcp14>",
"<bcp14>SHOULD</bcp14>", "<bcp14>SHOULD NOT</bcp14>", "<bcp14>RECOMMENDED</bcp14>", "<bcp14>NOT RECOMMENDED</bcp14>", "<bcp14>MAY</bcp14>", and
"<bcp14>OPTIONAL</bcp14>" in this document are to be interpreted as described in
BCP 14 <xref target="RFC2119"/> <xref target="RFC8174"/> when, and only when, they appear in all
capitals, as shown here.</t>
      <t>The following terms are defined for the purposes of this document.</t>
      <dl>
        <dt>Principal</dt>
        <dd>
          <t>The human on whose behalf an agent acts, identified by a Sovereign-
tier <tt>~handle</tt> as defined by <xref target="IDPRONOUNS"/>.</t>
        </dd>
        <dt>Agent</dt>
        <dd>
          <t>An artificial-intelligence runtime acting for a principal,
identified by an Instrument-tier <tt>~handle</tt> per <xref target="IDPRONOUNS"/>.  The
agent is the party that emits a briefing-and-binding envelope.</t>
        </dd>
        <dt>Binding moment</dt>
        <dd>
          <t>A point in an agent's operation at which it has synthesised a
position and requires the principal's commitment, decline,
amendment, or rejection before proceeding.</t>
        </dd>
        <dt>Briefing-and-binding envelope</dt>
        <dd>
          <t>The eight-slot structured payload defined by this memo, emitted by
an agent at a binding moment as a field of an MCP tool result.</t>
        </dd>
        <dt>Briefing slots</dt>
        <dd>
          <t>The first four slots of the envelope (synopsis, findings,
recommendations, offer).  Pre-synthesised material the principal
scans.</t>
        </dd>
        <dt>Binding slots</dt>
        <dd>
          <t>The last four slots of the envelope (question stem, options,
recommended option, escape hatches).  The quantised decision the
principal resolves.</t>
        </dd>
        <dt>Escape hatch</dt>
        <dd>
          <t>A binding-slot affordance through which the principal declines the
question as posed.  Two are defined: the <em>answer-space hatch</em>, which
accepts the question and revises the answer; and the <em>question-space
hatch</em>, which rejects the question and reopens deliberation.</t>
        </dd>
        <dt>Dual veto</dt>
        <dd>
          <t>The property that a binding moment may be refused by either party:
the agent by withholding a malformed binding moment, the principal
by invoking either escape hatch.</t>
        </dd>
        <dt>Consuming surface</dt>
        <dd>
          <t>A client that receives an MCP tool result carrying a briefing-and-
binding envelope and renders the eight slots into a native user
interface.</t>
        </dd>
        <dt>Resolution</dt>
        <dd>
          <t>The principal's response to a binding moment: selection of an
option, invocation of the answer-space hatch with an answer, or
invocation of the question-space hatch.</t>
        </dd>
      </dl>
    </section>
    <section anchor="architecture">
      <name>Architecture</name>
      <t>The briefing-and-binding envelope is a payload, not a protocol.  It is
carried by the existing request/response semantics of the Model
Context Protocol <xref target="MCP"/> and introduces no new transport, no new
handle category, and no new discovery mechanism.</t>
      <t>The arrangement has three roles and one round trip.</t>
      <t>The <em>agent</em> reaches a binding moment in the course of operating for
its principal.  Instead of returning an ad hoc question, it constructs
a briefing-and-binding envelope and emits it as a structured field of
the MCP tool result.</t>
      <t>The <em>consuming surface</em> receives the tool result, detects the
envelope field, and renders the eight slots into its native interface.
The consuming surface performs no synthesis: the briefing slots are
rendered as written; the binding slots are rendered as the
interactive decision element the surface natively supports.</t>
      <t>The <em>principal</em> observes the rendered briefing, resolves the binding,
and the resolution is returned to the agent as the input to the next
tool invocation.</t>
      <t>The round trip is therefore: agent emits envelope -&gt; surface renders
-&gt; principal resolves -&gt; resolution returns to agent.  No state is
held between trips by the envelope itself.  An envelope is valid only
for the single resolution it solicits; an agent that requires a
further commitment emits a further envelope.</t>
      <t>This memo specifies the envelope (Section 4), the slot grammar
(Section 5), the envelope digest (Section 6), the dual-veto handshake
(Section 7), the MCP delivery binding (Section 8), and the renderer
contract (Section 9).</t>
    </section>
    <section anchor="the-briefing-and-binding-envelope">
      <name>The Briefing-and-Binding Envelope</name>
      <t>An agent at a binding moment <bcp14>SHALL</bcp14> emit a briefing-and-binding
envelope as a structured field, named <tt>binding_moment</tt>, of the MCP
tool result it returns.  The field's value is a JSON <xref target="RFC8259"/> object
with exactly the members specified below.</t>
      <artwork><![CDATA[
{
  "binding_moment": {
    "synopsis":        <string>,
    "findings":        [ <string>, ... ],
    "recommendations": [ <string>, ... ],
    "offer":           <string>,
    "question": {
      "stem":            <string>,
      "options": [
        { "label": <string>, "reasoning": <string> },
        ...
      ],
      "recommended_idx": <integer>,
      "hatches": {
        "free_text": <boolean>,
        "dialogue":  <boolean>
      }
    },
    "meta": {
      "decision_class":   <string>,   ; OPTIONAL
      "calibration_note": <string>    ; OPTIONAL
    }
  }
}
]]></artwork>
      <t>The members <tt>synopsis</tt>, <tt>findings</tt>, <tt>recommendations</tt>, <tt>offer</tt>, and
<tt>question</tt> are <bcp14>REQUIRED</bcp14>.  The member <tt>meta</tt> is <bcp14>OPTIONAL</bcp14>; when present,
both of its members are individually <bcp14>OPTIONAL</bcp14>.</t>
      <t>A consuming surface that receives a tool result with a
<tt>binding_moment</tt> field that is not a well-formed envelope (a missing
<bcp14>REQUIRED</bcp14> member, an out-of-range <tt>recommended_idx</tt>, an <tt>options</tt> list
with fewer than two entries) <bcp14>SHALL</bcp14> treat the binding moment as
malformed.  A malformed binding moment <bcp14>SHALL NOT</bcp14> be rendered as a
decision; the surface <bcp14>SHOULD</bcp14> instead render the underlying tool result
in its fallback non-envelope form (Section 9.3) and <bcp14>SHOULD</bcp14> surface a
diagnostic indicating the envelope was discarded.</t>
      <t>The eight slots referenced throughout this memo are: (1) synopsis,
(2) findings, (3) recommendations, (4) offer, (5) question stem,
(6) options with per-option reasoning, (7) the recommended option,
and (8) the escape hatches.  Slots 1 through 4 are the briefing
slots; slots 5 through 8 are the binding slots.</t>
    </section>
    <section anchor="slot-grammar">
      <name>Slot Grammar</name>
      <t>This section specifies the content contract for each slot.  The
contract is partly machine-checkable (cardinality, type) and partly a
construction discipline the agent <bcp14>SHALL</bcp14> observe for the envelope to be
well-formed in the sense Section 4 requires.</t>
      <section anchor="slot-1-synopsis">
        <name>Slot 1: Synopsis</name>
        <t><tt>synopsis</tt> is a string carrying a single sentence that states the
agent's position answer-first.  The synopsis <bcp14>SHALL</bcp14> commit to a
position.  A synopsis that hedges (one that defers the decision rather
than stating it) renders the envelope malformed: if the agent cannot
commit, the binding moment is premature and the agent <bcp14>SHOULD</bcp14> instead
return non-binding-moment material that surfaces state and requests
permission to deliberate further.  The synopsis is the slot that
carries the decision if the principal scans nothing else.</t>
      </section>
      <section anchor="slot-2-findings">
        <name>Slot 2: Findings</name>
        <t><tt>findings</tt> is a JSON array of strings.  Each string is one terse
observation on which the synopsis rests.  An array of three to six
entries is <bcp14>RECOMMENDED</bcp14>.  Each finding <bcp14>SHALL</bcp14> add an observation the
synopsis does not itself carry; a finding that restates the synopsis
or recapitulates the principal's prior input is filler and <bcp14>SHOULD</bcp14> be
omitted.</t>
      </section>
      <section anchor="slot-3-recommendations">
        <name>Slot 3: Recommendations</name>
        <t><tt>recommendations</tt> is a JSON array of strings.  Each string is one
concrete move: an action that would change state if taken.  An array
of two to four entries is <bcp14>RECOMMENDED</bcp14>.  A recommendation that names a
consideration rather than an action ("weigh the trade-offs") does not
satisfy the slot.</t>
      </section>
      <section anchor="slot-4-offer">
        <name>Slot 4: Offer</name>
        <t><tt>offer</tt> is a string offering the principal bounded, on-demand
elaboration of any briefing item (for example, "Ask for detail on any
item.").  The offer is a bounded-pull affordance: depth is available
when the principal requests it and is never pushed into the briefing.</t>
      </section>
      <section anchor="slot-5-question-stem">
        <name>Slot 5: Question Stem</name>
        <t><tt>question.stem</tt> is a string carrying a single neutral, plain-language
sentence that poses the decision.  The stem <bcp14>SHALL NOT</bcp14> be leading: it
<bcp14>SHALL NOT</bcp14> embed the agent's recommendation, and it <bcp14>SHALL NOT</bcp14> be
phrased to make one option the path of least resistance.  The agent's
lean is carried by slot 7, on the option, never by the stem.</t>
      </section>
      <section anchor="slot-6-options">
        <name>Slot 6: Options</name>
        <t><tt>question.options</tt> is a JSON array of objects.  The array <bcp14>SHALL</bcp14>
contain at least two and at most four entries.  Each entry is an
object with two <bcp14>REQUIRED</bcp14> string members:</t>
        <dl>
          <dt><tt>label</tt></dt>
          <dd>
            <t>A short, action-shaped statement of the option.</t>
          </dd>
          <dt><tt>reasoning</tt></dt>
          <dd>
            <t>A single line stating why the principal might choose this option.
The reasoning lives on the option, not in the stem; the principal can read the comparison without working it out.</t>
          </dd>
        </dl>
        <t>The options enumerate the substantive answers to the question.  They
do not include the escape hatches; the hatches are slot 8 and are not
members of the <tt>options</tt> array.</t>
      </section>
      <section anchor="slot-7-recommended-option">
        <name>Slot 7: Recommended Option</name>
        <t><tt>question.recommended_idx</tt> is an integer: the zero-based index, into
the <tt>options</tt> array, of the option the agent recommends.  Exactly one
option <bcp14>SHALL</bcp14> be marked.  <tt>recommended_idx</tt> <bcp14>SHALL</bcp14> be present, <bcp14>SHALL</bcp14> be
non-negative, and <bcp14>SHALL</bcp14> be strictly less than the length of the
<tt>options</tt> array; the value-absent and the two-marked cases are both
malformed.</t>
        <t>The recommended option is the agent's committed synthesis offered as
a contestable position; the principal validates it or vetoes it.
Where the agent's analysis genuinely ties two options, the agent
<bcp14>SHALL</bcp14> still mark exactly one: the synopsis names the tie, and the mark
<bcp14>SHALL</bcp14> fall on the option that minimises the cost of being wrong.</t>
      </section>
      <section anchor="slot-8-escape-hatches">
        <name>Slot 8: Escape Hatches</name>
        <t><tt>question.hatches</tt> is a JSON object with two <bcp14>REQUIRED</bcp14> boolean members:</t>
        <dl>
          <dt><tt>free_text</tt></dt>
          <dd>
            <t>The <em>answer-space hatch</em>.  When <tt>true</tt>, the consuming surface <bcp14>SHALL</bcp14>
render an affordance through which the principal may submit a
free-form answer instead of selecting an option.  Invoking this
hatch accepts the question as posed and revises the answer.</t>
          </dd>
          <dt><tt>dialogue</tt></dt>
          <dd>
            <t>The <em>question-space hatch</em>.  When <tt>true</tt>, the consuming surface
<bcp14>SHALL</bcp14> render an affordance through which the principal may decline
the question itself and reopen deliberation with the agent.
Invoking this hatch rejects the framing.</t>
          </dd>
        </dl>
        <t>Both members <bcp14>SHALL</bcp14> default to <tt>true</tt>.  An agent that emits a binding
moment with either hatch set to <tt>false</tt> removes a veto path and <bcp14>SHALL</bcp14>
do so only where the corresponding revision is genuinely
inapplicable; the default posture is that both hatches are open.
Section 7 specifies the handshake the hatches realise.</t>
      </section>
      <section anchor="the-meta-slot">
        <name>The <tt>meta</tt> Slot</name>
        <t><tt>meta</tt>, when present, <bcp14>MAY</bcp14> carry two members.  <tt>decision_class</tt> is a
string naming the category of the decision (for example, a consent
decision, a permission-delta decision, a recompute decision); a
consuming surface <bcp14>MAY</bcp14> use it to select a rendering style.
<tt>calibration_note</tt> is a string carrying a short honesty-line preface,
included only when the agent's prior framing in the session now reads
as materially understating what the agent has since concluded.  The
note is a costly signal and <bcp14>SHALL NOT</bcp14> be emitted ritually; an
implementation <bcp14>SHOULD</bcp14> monitor the rate at which <tt>calibration_note</tt> is
populated and treat a persistently high rate as a defect in the
agent's earlier framing rather than as normal operation.</t>
      </section>
    </section>
    <section anchor="the-envelope-digest">
      <name>The Envelope Digest</name>
      <t>A binding moment is a decision, and a decision that cannot afterwards be
named cannot be audited, contested, or carried into any durable record.
The envelope does not itself persist (Section 10), so a durable record of
a resolved binding moment must reference the envelope rather than contain
it.  This section defines that reference: a content digest over the
envelope, computed identically by every implementation.</t>
      <t>The digest has three consumers.  A resolution names the envelope it
resolves (Section 7.3).  An audit signal recorded through the durable
channel of <xref target="POLICYPROV"/> names the envelope a principal was shown.  An
external receipt that binds a named human approver to an action, such as
the authorization receipt of <xref target="EPRECEIPTS"/>, references the envelope by
digest.</t>
      <section anchor="canonical-form">
        <name>Canonical Form</name>
        <t>The envelope is delivered as a JSON <xref target="RFC8259"/> object (Section 4).  Its
canonical form is the JSON Canonicalization Scheme <xref target="RFC8785"/> applied to
the value of the <tt>binding_moment</tt> member.  That value alone is
canonicalized, not the enclosing tool result, whose other members are
outside the scope of this memo.</t>
        <t>JCS is defined over the JSON data model the envelope already inhabits, so
a verifier that can read the envelope can check its digest without
acquiring a second codec.  An implementation <bcp14>MUST NOT</bcp14> canonicalize the
envelope by any other scheme.</t>
      </section>
      <section anchor="digest-computation">
        <name>Digest Computation</name>
        <t>The envelope digest is the SHA-256 <xref target="FIPS180-4"/> digest of the canonical
form, presented as the string <tt>sha256:</tt> followed by exactly 64 lowercase
hexadecimal characters.</t>
        <artwork><![CDATA[
envelope-digest = "sha256:" 64HEXDIGLOWER
                ; over JCS(binding_moment)
]]></artwork>
        <t>The string form is that of the external-artifact hash of <xref target="EPRECEIPTS"/>, so
a receipt referencing an envelope carries the value verbatim and neither
memo transforms the other's material at the boundary.</t>
      </section>
      <section anchor="profile-bounds">
        <name>Profile Bounds</name>
        <t>Any divergence between two implementations' canonicalization behaviour is
a divergence in the digest, and therefore a misbinding hazard: the two
parties disagree about which envelope a resolution names.  An
implementation <bcp14>MUST</bcp14> reject the following inputs rather than normalise
them, and <bcp14>MUST</bcp14> reject them identically.</t>
        <dl>
          <dt>Duplicate member names</dt>
          <dd>
            <t>An object whose member names collide after escape decoding.  An
implementation that silently retains one of the two digests material
its peer did not send.  A verifier handed an already-parsed value
cannot observe this class at all, so the check <bcp14>MUST</bcp14> be applied at the
parse boundary.</t>
          </dd>
          <dt>Unpaired surrogates</dt>
          <dd>
            <t>A string carrying a UTF-16 surrogate code point without its pair.  Such
a string has no UTF-8 encoding, and implementations differ in whether
they substitute, drop, or reject.</t>
          </dd>
          <dt>Numbers outside the integer profile</dt>
          <dd>
            <t>A number that is not an integer, or an integer of magnitude greater
than 2^53-1.  The only number the envelope grammar carries is
<tt>recommended_idx</tt> (Section 5.7), a small non-negative integer, so this
bound costs the grammar nothing.  It removes the floating-point
formatting rules that are the main source of canonicalization
divergence between implementations in practice.</t>
          </dd>
          <dt>Excessive nesting</dt>
          <dd>
            <t>A container nested more deeply than 64.  The envelope grammar is of
fixed and shallow depth, so this bound reaches only pathological input.</t>
          </dd>
        </dl>
        <t>These bounds are those of the <xref target="EPRECEIPTS"/> canonicalization profile,
adopted here without variation.  An envelope digest and a receipt that
references it are checked by the same verifier, and a verifier obliged to
hold two canonicalization profiles at once is a defect in the pair of
memos rather than in the verifier.</t>
      </section>
    </section>
    <section anchor="the-dual-veto-handshake">
      <name>The Dual-Veto Handshake</name>
      <t>The defining property of a binding moment, as opposed to a
notification, is that either party may refuse it.  This section
specifies the handshake.</t>
      <section anchor="agent-side-veto">
        <name>Agent-Side Veto</name>
        <t>The agent's veto is exercised by <em>not emitting a binding moment</em>.  An
agent reaches many points at which a principal-facing question would
be premature: the agent has not yet synthesised a position, or the
available options do not yet partition the decision, or the agent
needs to deliberate further before it can commit.  At such a point the
agent <bcp14>SHALL NOT</bcp14> emit a briefing-and-binding envelope.  It <bcp14>SHOULD</bcp14>
instead return material that surfaces its current state and requests
the principal's permission to continue deliberating.  Emitting an
envelope with a hedged synopsis (Section 5.1) is the failure this rule
forbids: it presents the appearance of a committed decision while
pushing the synthesis cost back to the principal.</t>
        <t>The agent-side veto is therefore a precondition on emission: a
well-formed envelope is, by construction, one the agent has not
vetoed.</t>
      </section>
      <section anchor="principal-side-veto-two-hatches">
        <name>Principal-Side Veto: Two Hatches</name>
        <t>The principal's veto is exercised through the two escape hatches of
slot 8.  The two hatches are not redundant; they refuse two
structurally different things.</t>
        <t>The <em>answer-space hatch</em> (<tt>free_text</tt>) refuses the <em>quantisation</em>
while accepting the <em>frame</em>.  The principal agrees the agent has
asked the right question but holds an answer not among the enumerated
options.  Invoking this hatch returns a free-form answer; the agent
incorporates the answer and proceeds.  The frame stands; the option
set is treated as non-exhaustive.</t>
        <t>The <em>question-space hatch</em> (<tt>dialogue</tt>) refuses the <em>frame</em> itself.
The principal judges that the agent has asked the wrong question, or
has asked a question that rests on a premise the agent does not have
grounds for, or that the decision is not ripe.  Invoking this hatch
does not return an answer; it returns the binding moment to
deliberation.  The agent <bcp14>SHALL</bcp14> treat a question-space veto as a
genuine reopening: it <bcp14>SHALL NOT</bcp14> respond by re-emitting the same
question, and it <bcp14>SHALL NOT</bcp14> respond by emitting a further forced-choice
envelope without first incorporating the principal's objection.  A
question-space hatch that leads only to another menu is a failure of the handshake.</t>
        <t>The mapping to deliberative procedure is exact.  Selecting an option
is a vote.  The answer-space hatch is an amendment to the motion.  The
question-space hatch is a motion to refer the question back.  An interface that offers only the vote is forced-choice.</t>
      </section>
      <section anchor="resolution">
        <name>Resolution</name>
        <t>A binding moment is resolved by exactly one of: selection of an
option from slot 6; invocation of the answer-space hatch with a
free-form answer; or invocation of the question-space hatch.  The
consuming surface <bcp14>SHALL</bcp14> return the resolution to the agent in a form
that distinguishes which of the three occurred, because the agent's
correct continuation differs in each case.  The resolution is carried
as the argument to the agent's next tool invocation under the <xref target="MCP"/>
semantics already in force.  It is a JSON <xref target="RFC8259"/> object with
exactly the members specified below.</t>
        <artwork><![CDATA[
{
  "binding_moment_resolution": {
    "envelope_digest": <string>,
    "resolution":      "option" | "answer" | "question",
    "option_idx":      <integer>,  ; "option" only
    "answer":          <string>    ; "answer" only
  }
}
]]></artwork>
        <t>The member <tt>envelope_digest</tt> is <bcp14>REQUIRED</bcp14>.  It carries the digest
(Section 6.2) of the envelope being resolved.</t>
        <t>The member <tt>resolution</tt> is <bcp14>REQUIRED</bcp14> and distinguishes the three cases.
The value <tt>option</tt> denotes selection from slot 6; <tt>answer</tt> denotes the
answer-space hatch; <tt>question</tt> denotes the question-space hatch.</t>
        <t>The member <tt>option_idx</tt> carries the zero-based index into slot 6 of the
selected option.  It is <bcp14>REQUIRED</bcp14> when <tt>resolution</tt> is <tt>option</tt>, <bcp14>MUST</bcp14> be
absent otherwise, and <bcp14>MUST</bcp14> be within range for the resolved envelope's
option list.</t>
        <t>The member <tt>answer</tt> carries the principal's free-form answer.  It is
<bcp14>REQUIRED</bcp14> when <tt>resolution</tt> is <tt>answer</tt> and <bcp14>MUST</bcp14> be absent otherwise.</t>
        <t>The question-space hatch carries no further member.  Its content is the
refusal itself, and the agent's continuation is to reopen deliberation
rather than to read a value.</t>
        <t>An agent <bcp14>SHALL</bcp14> discard a resolution whose <tt>envelope_digest</tt> does not
match an envelope it emitted and has not already resolved.  A resolution
naming an unknown envelope, or naming one already resolved, is not a
decision, and an agent that acts on one has acted without its
principal's commitment.</t>
      </section>
    </section>
    <section anchor="mcp-delivery-binding">
      <name>MCP Delivery Binding</name>
      <t>The briefing-and-binding envelope is delivered as a structured field
of a Model Context Protocol <xref target="MCP"/> tool result.  This section specifies
the binding.</t>
      <section anchor="envelope-placement">
        <name>Envelope Placement</name>
        <t>An agent tool that surfaces a binding moment <bcp14>SHALL</bcp14> include, in the
tool result, a top-level member named <tt>binding_moment</tt> whose value is
the envelope object of Section 4.  The remainder of the tool result,
the tool's ordinary domain payload, is unaffected: the
<tt>binding_moment</tt> field is additive.  A tool result <bcp14>MAY</bcp14> therefore carry
both its conventional payload and a <tt>binding_moment</tt> envelope; a
consuming surface that does not understand the envelope ignores the
field and renders the conventional payload, and a surface that does
understand it renders the envelope.</t>
      </section>
      <section anchor="tool-manifest-advertisement">
        <name>Tool-Manifest Advertisement</name>
        <t>A tool that may emit a <tt>binding_moment</tt> envelope <bcp14>SHOULD</bcp14> advertise the
fact in its entry in the MCP <tt>tools/list</tt> manifest, by carrying a
boolean annotation (a <bcp14>RECOMMENDED</bcp14> name is <tt>emits_binding_moment</tt>).
The annotation lets a consuming surface decide, before any invocation,
whether to prepare its envelope renderer.  The annotation is advisory:
a surface <bcp14>SHALL</bcp14> still inspect each tool result for the
<tt>binding_moment</tt> field, because a tool that sometimes emits an
envelope and sometimes does not is conformant.</t>
      </section>
      <section anchor="staged-adoption">
        <name>Staged Adoption</name>
        <t>A binding-moment-emitting tool <bcp14>MAY</bcp14> be introduced behind an
implementation-defined feature flag, so that the envelope and the
tool's conventional payload are emitted side by side during a
migration window and the conventional payload is the fallback.  This
memo places no requirement on the flag mechanism; it notes only that
the additive placement of Section 8.1 makes such staged adoption
possible without a flag day.</t>
      </section>
      <section anchor="single-surface-delivery-not-broadcast">
        <name>Single-Surface Delivery, Not Broadcast</name>
        <t>The briefing-and-binding envelope is delivered to the principal's own
consuming surface as the result of a tool the principal's agent
invoked.  It is a one-to-one delivery between an agent and its
principal.  The envelope is not a broadcast format: a payload that
informs or persuades a population, rather than soliciting one
principal's resolution of one decision, is outside the scope of this
memo and <bcp14>SHALL NOT</bcp14> be carried as a <tt>binding_moment</tt> envelope.</t>
      </section>
    </section>
    <section anchor="renderer-contract">
      <name>Renderer Contract</name>
      <t>A consuming surface renders the eight slots into its native interface.
This section specifies what the rendering <bcp14>SHALL</bcp14> preserve and what it
<bcp14>MAY</bcp14> vary.</t>
      <section anchor="invariants">
        <name>Invariants</name>
        <t>A conforming renderer <bcp14>SHALL</bcp14> preserve the following across every
surface:</t>
        <ul spacing="normal">
          <li>
            <t>All four briefing slots are rendered.  A renderer <bcp14>SHALL NOT</bcp14> drop the
findings or the recommendations to save space; the briefing is what allows the binding to be resolved quickly.</t>
          </li>
          <li>
            <t>The recommended option (slot 7) is rendered as visibly
distinguished from the other options.  The principal <bcp14>SHALL</bcp14> be able
to see, without acting, which option the agent recommends.</t>
          </li>
          <li>
            <t>Both escape hatches whose slot-8 boolean is <tt>true</tt> are rendered as
invocable affordances.  A renderer <bcp14>SHALL NOT</bcp14> omit a hatch on the
grounds that the option set appears exhaustive; the hatches are the
principal's veto and their availability is not the renderer's to
withdraw.</t>
          </li>
          <li>
            <t>The per-option reasoning (slot 6) is rendered with, or made
immediately available from, each option.  A renderer that shows
option labels but hides the reasoning has removed the comparison and left the principal to deliberate unaided.</t>
          </li>
        </ul>
      </section>
      <section anchor="native-variation">
        <name>Native Variation</name>
        <t>Within the invariants of Section 9.1, a renderer <bcp14>MAY</bcp14> map the slots to
whatever native element it supports.  A command-line client may render
the binding as an arrow-key picker with the escape hatches bound to
distinct keys.  A mobile client may render it as a consent sheet with
chip-style options and the recommended chip styled distinctly.  A
desktop notifier may render the synopsis as a notification title and
defer the full envelope to an expanded view.  An agent-runtime hook
may render the envelope as plain text with a labelled multiple-choice
block.  The rendering differs; the eight slots and their semantics do
not.</t>
      </section>
      <section anchor="fallback-rendering">
        <name>Fallback Rendering</name>
        <t>A consuming surface that does not implement the envelope renderer, or
that has received a malformed envelope per Section 4, <bcp14>SHALL</bcp14> fall back
to rendering the tool result's conventional payload.  Because the
<tt>binding_moment</tt> field is additive (Section 8.1), the conventional
payload is always present and the fallback is always available.  A
surface <bcp14>SHOULD NOT</bcp14> fail an interaction solely because it could not
render an envelope.</t>
      </section>
    </section>
    <section anchor="relationship-to-companion-memos">
      <name>Relationship to Companion Memos</name>
      <t>This memo composes with the Morrison-family Internet-Drafts as
follows.</t>
      <t><xref target="IDPRONOUNS"/> supplies the <tt>~handle</tt> namespace and the Sovereign /
Instrument trust-tier taxonomy.  The principal is a Sovereign-tier
handle and the agent an Instrument-tier handle; this memo introduces
no new handle category.</t>
      <t><xref target="POLICYPROV"/> supplies the Model Context Protocol tool surface over an
identity substrate from which an agent retrieves policy and to which
it emits audit signals.  The briefing-and-binding envelope is carried
by a tool result on that same surface; a binding moment and its
resolution are among the runtime events an implementation <bcp14>MAY</bcp14> record
through the audit-signal mechanism that memo specifies.  This memo
specifies the transient delivery contract; <xref target="POLICYPROV"/> specifies the
durable audit channel.  The two are deliberately separated: the
envelope does not itself persist.</t>
      <t><xref target="IDCOMMITS"/> supplies the attribution grammar.  Where an
implementation records a resolved binding moment, the attribution of
that record (the Sovereign-tier handle that resolved it and the
Instrument-tier handle that drafted the envelope) follows the
trailer grammar of <xref target="IDCOMMITS"/>.  This memo does not place attribution
slots in the envelope itself; attribution is a property of any durable
record, not of the transient payload.</t>
      <t><xref target="MCPDNS"/> supplies the discovery mechanism by which a consuming
surface locates the MCP server whose tools emit envelopes.  This memo
introduces no new discovery surface.</t>
      <t><xref target="SUBSTRATE"/> supplies the coordination posture for the case in which a
principal operates several agent sessions concurrently.  A binding
moment emitted by one session and a binding moment emitted by another
are independent payloads; this memo does not coordinate them, and an
implementation that surfaces concurrent binding moments deconflicts
them under the substrate-observation posture of that memo rather than
through any mechanism specified here.</t>
    </section>
    <section anchor="iana-considerations">
      <name>IANA Considerations</name>
      <t>This memo requests no IANA action.</t>
      <t>The structured-field name <tt>binding_moment</tt> (Section 4) and the
tool-manifest annotation name <tt>emits_binding_moment</tt> (Section 8.2) are
illustrative of the reference implementation operated by the present
author.  They are member names within a Model Context Protocol tool
result and tool manifest respectively; they are not protocol
identifiers requiring registration.  A conforming implementation <bcp14>MAY</bcp14>
name these fields by any convention consistent with its MCP tool
schema.  If a future revision of this memo, or a companion
specification, proposes a registry for canonical tool-result field
names, that revision will request the corresponding IANA action.</t>
      <t>No new transport, port number, URI scheme, media type, or DNS record
type is introduced by this memo.</t>
    </section>
    <section anchor="security-considerations">
      <name>Security Considerations</name>
      <t>The briefing-and-binding envelope is a delivery contract for decisions
a principal makes about an agent's behaviour.  Its security
considerations concern the integrity of the decision, not the
confidentiality of a stored record; the envelope holds no durable
state.</t>
      <section anchor="synthesis-spoofing">
        <name>Synthesis Spoofing</name>
        <t>An agent, or a compromised tool impersonating one, may emit an
envelope whose briefing slots misrepresent what the agent observed,
inducing the principal to validate a recommendation grounded in
falsified findings.  The envelope cannot prevent this; the briefing is
the agent's own account.  Mitigation is twofold.  First, the offer
slot (slot 4) and the answer-space hatch exist precisely so the
principal may interrogate any finding or supply an answer the agent
did not anticipate; a renderer that drops the offer or the hatch
(Section 9.1) removes this defence.  Second, the binding moment is a
tool result delivered over the <xref target="MCP"/> session, and an implementation
<bcp14>SHOULD</bcp14> authenticate the tool surface (for example via the
cryptographic identity envelope of <xref target="MCPDNS"/>) so that the principal's
agent is interacting with the substrate it intends.</t>
      </section>
      <section anchor="recommendation-as-coercion">
        <name>Recommendation as Coercion</name>
        <t>The recommended option (slot 7) carries the agent's lean.  An agent
that consistently recommends the option most favourable to the agent's
operator, rather than to the principal, turns the envelope into a
manipulation surface.  The structural mitigations are the leading-stem
prohibition (Section 5.5), which keeps the lean visibly confined to
the option rather than smuggled into the question, and the
question-space hatch, which lets the principal reject a frame whose
options are all skewed.  An implementation <bcp14>SHOULD</bcp14> additionally monitor
the rate at which principals invoke the question-space hatch: a
persistently high rate against a particular agent or decision class is
evidence that the option grammar is systematically mis-framed.</t>
      </section>
      <section anchor="hatch-suppression">
        <name>Hatch Suppression</name>
        <t>An agent or a renderer that disables an escape hatch removes a veto
path.  Disabling the question-space hatch in particular converts a
consensual binding moment into a forced choice.  An agent <bcp14>SHALL</bcp14> set a
hatch to <tt>false</tt> only where the corresponding revision is genuinely
inapplicable (Section 5.8), and a renderer <bcp14>SHALL NOT</bcp14> omit a hatch the
envelope marks <tt>true</tt> (Section 9.1).  An implementation <bcp14>SHOULD</bcp14> treat a
binding moment that disables a hatch as an event worth recording, so
that systematic hatch suppression is detectable by post-hoc audit
through the mechanism of <xref target="POLICYPROV"/>.</t>
      </section>
      <section anchor="confirmation-routing-under-concurrent-sessions">
        <name>Confirmation Routing Under Concurrent Sessions</name>
        <t>Where a principal operates several agent sessions concurrently, a
binding moment that delegates a consequential action <bcp14>SHOULD</bcp14> be
rendered on a surface bound to the principal's own handle, so that an
agent session in possession of the principal's session credential
cannot resolve the binding moment on the principal's behalf.  The
envelope itself does not route; routing is a property of the consuming
surface and of the session-credential discipline of <xref target="POLICYPROV"/> and
<xref target="SUBSTRATE"/>.</t>
      </section>
      <section anchor="resolution-misbinding-and-replay">
        <name>Resolution Misbinding and Replay</name>
        <t>A resolution that did not name its envelope could be applied to the wrong
one.  Two hazards follow.  A resolution captured from one binding moment
could be replayed against a later one, so that a principal's assent to a
small action becomes assent to a large one.  A resolution produced for
one concurrent session could be applied by another (Section 12.4), and
because two envelopes need not order slot 6 alike, an index chosen
against one selects a different option under the other.</t>
        <t>The <tt>envelope_digest</tt> member (Section 7.3) closes both.  It names one
envelope, including its option ordering and its recommended option, so a
resolution is meaningful against exactly that envelope and is discarded
against every other.  This is a binding mechanism and not a routing one;
the routing discipline of Section 12.4 continues to apply.</t>
      </section>
      <section anchor="canonicalization-divergence">
        <name>Canonicalization Divergence</name>
        <t>Every use of the envelope digest rests on two implementations agreeing on
the canonical bytes of one envelope.  Where they disagree, a resolution
is discarded against the envelope it genuinely resolves, or accepted
against one it does not.  The profile bounds of Section 6.3 are therefore
normative, and they are rejections rather than repairs.  An
implementation that normalises a duplicate member name, substitutes an
unpaired surrogate, or rounds an out-of-profile number produces a digest
over material no other implementation reproduces, and the disagreement
surfaces as a misbinding rather than as a parse error.</t>
      </section>
      <section anchor="malformed-envelope-handling">
        <name>Malformed-Envelope Handling</name>
        <t>A malformed envelope (Section 4) that a renderer still attempts
to render as a decision risks presenting the principal with a
decision whose options or recommendation are incoherent.  A renderer
<bcp14>SHALL</bcp14> discard a malformed envelope and fall back to the conventional
payload (Section 9.3) rather than render a partial or repaired
decision.</t>
      </section>
    </section>
    <section anchor="privacy-considerations">
      <name>Privacy Considerations</name>
      <t>The briefing-and-binding envelope is a transient payload.  It is
emitted, rendered, resolved, and discarded; this memo specifies no
durable store of envelopes and no log of resolutions.  An
implementation that does record resolved binding moments does so
through the audit-signal mechanism of <xref target="POLICYPROV"/>, and the privacy
considerations of that mechanism (significance-predicate scope,
argument redaction) apply to such records.  This memo adds two
considerations specific to the envelope.</t>
      <t>First, the briefing slots may contain, in the agent's findings, an
account of observations the agent has made about the principal or
about third parties.  An agent <bcp14>SHOULD</bcp14> construct the findings slot to
the minimum needed for the principal to validate the decision, and
<bcp14>SHOULD NOT</bcp14> use the findings slot as an incidental disclosure channel
for material unrelated to the binding moment at hand.</t>
      <t>Second, the principal's resolution, including a free-form
answer submitted through the answer-space hatch, is principal-
authored content returned to the agent.  An implementation <bcp14>SHALL</bcp14> treat
an answer-space response with the same care as any other principal
input and <bcp14>SHALL NOT</bcp14> persist it beyond what the audit-signal
significance predicate of <xref target="POLICYPROV"/> requires.</t>
    </section>
    <section anchor="implementation-status">
      <name>Implementation Status</name>
      <t>This section records implementation experience in the spirit of
<xref target="RFC7942"/> and is expected to be removed before the document advances
beyond the Independent Stream.</t>
      <t>A reference implementation of the briefing-and-binding envelope is
operated by the present author against a production Model Context
Protocol substrate.  An agent tool that records a submitted answer to
a conversational identity-discovery flow emits the envelope as an
additive <tt>binding_moment</tt> field of its tool result, behind a feature
flag, alongside the tool's conventional payload.  The envelope's
eight slots are populated as specified in Section 5: the synopsis and
findings report the state of the discovery flow, the follow-on
question solicits whether to continue, and the escape hatches are set
per Section 5.8 with the question-space hatch open and the free-text
hatch closed.  Consuming surfaces render the envelope to a plain-text
multiple-choice block with a visibly marked recommended option and
the open hatch.</t>
      <t>The recommended option is marked positionally in the reference
deployment rather than derived from an analysis of the options, so the
committed-synthesis property Section 5.7 requires of the mark is not
exercised by it.</t>
      <t>No claim of interoperability is made; the reference deployment is a
single substrate operated by the specification's author.</t>
    </section>
    <section anchor="document-history">
      <name>Document History</name>
      <t>draft-morrison-binding-moment-envelope-03 (September 2026):</t>
      <ul spacing="normal">
        <li>
          <t>Corrects the Implementation Status to describe the single emitting
tool the reference deployment carries, and records that the recommended
option is marked positionally rather than derived from an analysis of
the options.</t>
        </li>
      </ul>
      <t>draft-morrison-binding-moment-envelope-02 (July 2026):</t>
      <ul spacing="normal">
        <li>
          <t>Adds the envelope digest (Section 6): JCS <xref target="RFC8785"/> canonical form,
SHA-256 <xref target="FIPS180-4"/> over it, and the <tt>sha256:</tt> string presentation.
The -00 bound no digest to the envelope, so a resolution, an audit
signal, or an external receipt had no way to name the envelope it
referred to.</t>
        </li>
        <li>
          <t>Adopts the <xref target="EPRECEIPTS"/> canonicalization profile without variation
(Section 6.3), so that an envelope digest and a receipt referencing it
are checkable by one verifier holding one profile.</t>
        </li>
        <li>
          <t>Specifies the wire form of the resolution (Section 7.3), which -00
left unmandated.  The resolution now names its envelope by digest.</t>
        </li>
        <li>
          <t>Adds Section 12.5 (resolution misbinding and replay) and Section 12.6
(canonicalization divergence) to the security considerations.</t>
        </li>
        <li>
          <t>Removes the hand-authored "Status of This Memo" section.  The RFC
formatter emits that boilerplate from the document's own attributes,
so -00 carried it twice, and the duplicate was numbered as Section 1.
Every cross-reference in -00 was therefore off by one against the
rendered document: "the envelope (Section 4)" resolved to
"Architecture".  All cross-references are corrected here.</t>
        </li>
        <li>
          <t>Corrects the fallback-rendering cross-reference in Section 4, which
cited the native-variation subsection rather than the fallback
subsection.</t>
        </li>
      </ul>
      <t>draft-morrison-binding-moment-envelope-00 (May 2026):</t>
      <ul spacing="normal">
        <li>
          <t>Initial submission.</t>
        </li>
        <li>
          <t>Specifies the eight-slot briefing-and-binding envelope (Section 4):
synopsis, findings, recommendations, offer, question stem, options
with per-option reasoning, recommended option, and dual escape
hatches.</t>
        </li>
        <li>
          <t>Specifies the per-slot grammar and construction discipline
(Section 5), including the no-hedge rule on the synopsis and the
leading-stem prohibition.</t>
        </li>
        <li>
          <t>Specifies the dual-veto handshake (Section 7): the agent-side veto
by withheld emission and the two principal-side escape hatches
refusing the answer space and the question space respectively.</t>
        </li>
        <li>
          <t>Specifies the MCP delivery binding (Section 8): additive
<tt>binding_moment</tt> field, tool-manifest advertisement, staged
adoption, single-surface delivery.</t>
        </li>
        <li>
          <t>Specifies the renderer contract (Section 9): rendering invariants,
permitted native variation, and fallback rendering.</t>
        </li>
      </ul>
    </section>
  </middle>
  <back>
    <references anchor="sec-normative-references">
        <name>Normative References</name>
        <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="RFC8259" target="https://www.rfc-editor.org/info/rfc8259" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8259.xml">
          <front>
            <title>The JavaScript Object Notation (JSON) Data Interchange Format</title>
            <author fullname="T. Bray" initials="T." role="editor" surname="Bray"/>
            <date month="December" year="2017"/>
            <abstract>
              <t>JavaScript Object Notation (JSON) is a lightweight, text-based, language-independent data interchange format. It was derived from the ECMAScript Programming Language Standard. JSON defines a small set of formatting rules for the portable representation of structured data.</t>
              <t>This document removes inconsistencies with other specifications of JSON, repairs specification errors, and offers experience-based interoperability guidance.</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="90"/>
          <seriesInfo name="RFC" value="8259"/>
          <seriesInfo name="DOI" value="10.17487/RFC8259"/>
        </reference>
        <reference anchor="RFC8785" target="https://www.rfc-editor.org/info/rfc8785" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8785.xml">
          <front>
            <title>JSON Canonicalization Scheme (JCS)</title>
            <author fullname="A. Rundgren" initials="A." surname="Rundgren"/>
            <author fullname="B. Jordan" initials="B." surname="Jordan"/>
            <author fullname="S. Erdtman" initials="S." surname="Erdtman"/>
            <date month="June" year="2020"/>
            <abstract>
              <t>Cryptographic operations like hashing and signing need the data to be expressed in an invariant format so that the operations are reliably repeatable. One way to address this is to create a canonical representation of the data. Canonicalization also permits data to be exchanged in its original form on the "wire" while cryptographic operations performed on the canonicalized counterpart of the data in the producer and consumer endpoints generate consistent results.</t>
              <t>This document describes the JSON Canonicalization Scheme (JCS). This specification defines how to create a canonical representation of JSON data by building on the strict serialization methods for JSON primitives defined by ECMAScript, constraining JSON data to the Internet JSON (I-JSON) subset, and by using deterministic property sorting.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8785"/>
          <seriesInfo name="DOI" value="10.17487/RFC8785"/>
        </reference>
        <reference anchor="FIPS180-4" target="https://doi.org/10.6028/NIST.FIPS.180-4">
          <front>
            <title>Secure Hash Standard (SHS)</title>
            <author>
              <organization>National Institute of Standards and Technology</organization>
            </author>
            <date year="2015"/>
          </front>
          <seriesInfo name="FIPS" value="PUB 180-4"/>
        </reference>
        <reference anchor="MCP" target="https://modelcontextprotocol.io">
          <front>
            <title>Model Context Protocol Specification</title>
            <author>
              <organization>Agentic AI Foundation</organization>
            </author>
            <date year="2026"/>
          </front>
        </reference>
        <reference anchor="IDPRONOUNS" target="https://datatracker.ietf.org/doc/draft-morrison-identity-pronouns/">
          <front>
            <title>Identity Pronouns: A Reference-Axis Extension to ~handle Identity Systems</title>
            <author fullname="Blake Morrison">
              <organization>Alter Meridian Pty Ltd</organization>
            </author>
            <date year="2026"/>
          </front>
        </reference>
      </references>
      <references anchor="sec-informative-references">
        <name>Informative References</name>
        <reference anchor="EPRECEIPTS" target="https://datatracker.ietf.org/doc/draft-schrock-ep-authorization-receipts/">
          <front>
            <title>Authorization Receipts for High-Risk Agent Actions</title>
            <author fullname="Iman Schrock">
              <organization>EMILIA Protocol, Inc.</organization>
            </author>
            <date year="2026"/>
          </front>
        </reference>
        <reference anchor="MCPDNS" target="https://datatracker.ietf.org/doc/draft-morrison-mcp-dns-discovery/">
          <front>
            <title>Discovery of Model Context Protocol Servers via DNS TXT Records</title>
            <author fullname="Blake Morrison">
              <organization>Alter Meridian Pty Ltd</organization>
            </author>
            <date year="2026"/>
          </front>
        </reference>
        <reference anchor="IDCOMMITS" target="https://datatracker.ietf.org/doc/draft-morrison-identity-attributed-commits/">
          <front>
            <title>Identity-Attributed Git Commits via Tier-Structured Trailers</title>
            <author fullname="Blake Morrison">
              <organization>Alter Meridian Pty Ltd</organization>
            </author>
            <date year="2026"/>
          </front>
        </reference>
        <reference anchor="POLICYPROV" target="https://datatracker.ietf.org/doc/draft-morrison-org-alter-policy-provision/">
          <front>
            <title>Policy Provision and Governance Inheritance from an Organisational Identity Substrate</title>
            <author fullname="Blake Morrison">
              <organization>Alter Meridian Pty Ltd</organization>
            </author>
            <date year="2026"/>
          </front>
        </reference>
        <reference anchor="SUBSTRATE" target="https://datatracker.ietf.org/doc/draft-morrison-substrate-observation/">
          <front>
            <title>Substrate-Observation as an Alternative to Envelope Coordination for Concurrent Sessions</title>
            <author fullname="Blake Morrison">
              <organization>Alter Meridian Pty Ltd</organization>
            </author>
            <date year="2026"/>
          </front>
        </reference>
        <reference anchor="RFC7942" target="https://www.rfc-editor.org/info/rfc7942" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.7942.xml">
          <front>
            <title>Improving Awareness of Running Code: The Implementation Status Section</title>
            <author fullname="Y. Sheffer" initials="Y." surname="Sheffer"/>
            <author fullname="A. Farrel" initials="A." surname="Farrel"/>
            <date month="July" year="2016"/>
            <abstract>
              <t>This document describes a simple process that allows authors of Internet-Drafts to record the status of known implementations by including an Implementation Status section. This will allow reviewers and working groups to assign due consideration to documents that have the benefit of running code, which may serve as evidence of valuable experimentation and feedback that have made the implemented protocols more mature.</t>
              <t>This process is not mandatory. Authors of Internet-Drafts are encouraged to consider using the process for their documents, and working groups are invited to think about applying the process to all of their protocol specifications. This document obsoletes RFC 6982, advancing it to a Best Current Practice.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="205"/>
          <seriesInfo name="RFC" value="7942"/>
          <seriesInfo name="DOI" value="10.17487/RFC7942"/>
        </reference>
      </references>
    
    

<section numbered="false" anchor="acknowledgements">
      <name>Acknowledgements</name>
      <t>This memo grew out of internal design work on the structure of agent-
to-principal decision moments.  </t>
    </section>
  </back>
  

</rfc>
