<?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 4.0.6) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-thallapelly-oasnt-enforce-01" category="std" consensus="true" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.34.0 -->
  <front>
    <title abbrev="OASNT-ENFORCE">OASNT-ENFORCE: Request-Bound Enforcement of Attested Action Authorization</title>
    <seriesInfo name="Internet-Draft" value="draft-thallapelly-oasnt-enforce-01"/>
    <author initials="A." surname="Thallapelly" fullname="Arun Thallapelly">
      <organization>OmniArx</organization>
      <address>
        <email>arun@advitlabs.com</email>
      </address>
    </author>
    <date year="2026" month="August" day="15"/>
    <area>Security</area>
    <keyword>attestation</keyword>
    <keyword>authorization</keyword>
    <keyword>enforcement</keyword>
    <keyword>proxy</keyword>
    <keyword>agent</keyword>
    <abstract>

<t>This document profiles the enforcement of OASNT tokens at the point of
execution. It defines the OASNT-Token HTTP field, the rules by which an
enforcement point derives the observed request from the octets it will
itself forward, a verification procedure for relying parties that hold no
request-to-action mapping, uniform refusal behavior, and the set of
refusals a conforming enforcement point is required to produce. It further
defines an optional <tt>grp</tt> claim and an exclusivity ledger, by which a set
of tokens issued from one human confirmation is made spendable only once
between them, and fixes which relying party in a deployment performs that
consumption. An enforcement point conforming to this profile makes a human
approval a precondition of execution for the requests it fronts, without
any change to the protected service.</t>
    </abstract>
  </front>
  <middle>

<section anchor="introduction">
      <name>Introduction</name>
      <t><xref target="I-D.thallapelly-oasnt"/> (hereafter "the core document") defines a token
in which a hardware-bound device key attests that a specific human
authorized one specific action, optionally bound to one concrete HTTP
request through the <tt>rqf</tt> claim. The core document also states where such
a token counts: at the party that verifies it against the request it is
about to perform.</t>
      <t>This document specifies that party. Without it, the token gates only a
cooperating caller: an agent may obtain a token for one request and issue
another, or issue a request with no token at all, and nothing positioned
at the transport observes the difference. An enforcement point conforming
to this profile closes that gap for every request it fronts, and does so
without modifying the protected service, which continues to receive
ordinary HTTP.</t>
      <t>The profile deliberately specifies behavior, not placement. A conforming
enforcement point is typically a reverse proxy in front of an unmodified
origin, but the same rules apply to an in-process interceptor inside the
service itself.</t>
      <t>This profile is written from a running implementation, whose adversarial
corpus exercises every refusal <xref target="required-refusals"/> lists.</t>
      <section anchor="revision-scope">
        <name>Scope of this revision</name>
        <t>This revision adds <xref target="groups"/>, which specifies exclusivity groups: the
optional <tt>grp</tt> claim, the ledger that enforces it, and the rule fixing
which relying party consumes. That material is confined to what runs in
the implementation described in <xref target="impl-status"/>, and <xref target="impl-status"/> states
plainly which half of the deployment that is.</t>
        <t>Three adjacent problems are deliberately <strong>not</strong> specified here, and an
implementer should not read <xref target="groups"/> as covering them. They are named in
<xref target="groups-deferred"/> so that their absence is visible rather than inferred.</t>
      </section>
    </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 core document" refers to <xref target="I-D.thallapelly-oasnt"/>. The claim names
<tt>adg</tt>, <tt>dsp</tt>, <tt>rqf</tt>, and <tt>jti</tt>, and the terms "canonical action" and
"request fingerprint", have the meanings the core document gives them.</t>
      <t><strong>Enforcement point:</strong> the party that verifies a token against the request
it is itself about to perform or forward.</t>
      <t><strong>Approval point:</strong> a relying party that verifies a token in order to
record whether a confirmation was valid, and that will not itself execute
or forward the authorized request.</t>
      <t><strong>Presenter:</strong> the party transmitting the request and token to the
enforcement point. The presenter is untrusted.</t>
      <t><strong>Observed request:</strong> the request as the enforcement point will actually
execute it, derived under <xref target="observation"/>. Never anything the presenter
asserts about the request.</t>
      <t><strong>Upstream:</strong> the protected service the enforcement point fronts.</t>
      <t><strong>Issuing party:</strong> the party that decides a set of actions will be offered
under one human confirmation, and that assigns the <tt>grp</tt> value binding
them (<xref target="grp-claim"/>).</t>
    </section>
    <section anchor="field">
      <name>The OASNT-Token Field</name>
      <t>The token travels in a dedicated HTTP field:</t>
      <sourcecode type="abnf"><![CDATA[
OASNT-Token    = b64part "." b64part "." b64part
b64part        = 1*base64url-char
base64url-char = ALPHA / DIGIT / "-" / "_"
]]></sourcecode>
      <t>The value is the compact JWS serialization the core document defines,
unmodified; the segment alphabet is the URL-safe alphabet of <xref target="RFC4648"/>
without padding.</t>
      <t>A dedicated field is used rather than the Authorization field of
<xref target="RFC9110"/> because the upstream commonly consumes Authorization for its
own credential, and this profile's promise is that the upstream changes
nothing. The enforcement point removes the OASNT-Token field before
forwarding (<xref target="forwarding"/>), so the two never collide.</t>
      <t>A request <bcp14>MUST</bcp14> carry at most one OASNT-Token field with a single value. A
request carrying more than one, or a value that does not match the syntax
above, <bcp14>MUST</bcp14> be refused. A request carrying none <bcp14>MUST</bcp14> be refused
(<tt>no-token</tt>); there is no anonymous path through an enforcement point.</t>
    </section>
    <section anchor="observation">
      <name>Observation</name>
      <t>The observed request is derived exclusively from what the enforcement
point will itself execute:</t>
      <ul spacing="normal">
        <li>
          <t><strong>Method and target:</strong> the method and request target the enforcement
point will use upstream, as octets. These are the same octets it
received, but their authority comes from the enforcement point's intent
to forward them, not from the presenter having sent them.</t>
        </li>
        <li>
          <t><strong>Tenant and privilege:</strong> the <tt>orgId</tt> and <tt>scope</tt> inputs to the request
fingerprint are not inferable from HTTP. Configuration <bcp14>MUST</bcp14> bind them to
request targets. A target no configuration entry names <bcp14>MUST</bcp14> be refused
(<tt>no-route</tt>): a target nobody declared is not an open path.
Misconfiguration is fail-closed by construction, because a wrong tenant
or privilege recomputes to a different fingerprint and refuses as a
mismatch.</t>
        </li>
        <li>
          <t><strong>Body:</strong> the enforcement point <bcp14>MUST</bcp14> buffer the body it will forward, up
to a configured cap, and compute the body digest over exactly those raw
octets. A body exceeding the cap <bcp14>MUST</bcp14> be refused and <bcp14>MUST NOT</bcp14> be
forwarded unverified. There is no compliant configuration in which
oversized requests bypass verification.</t>
        </li>
      </ul>
      <t>The request fingerprint is then recomputed from these observed values as
the core document specifies. Nothing the presenter declares participates
in the derivation at any point.</t>
    </section>
    <section anchor="verification">
      <name>Verification</name>
      <t>An enforcement point <bcp14>MUST</bcp14> apply the core document's verification
procedure to the presented token, with the observed request of
<xref target="observation"/> as the expected request. Because an enforcement point
always authorizes a concrete request, the core document's request-binding
rule applies in full: a token without <tt>rqf</tt> <bcp14>MUST</bcp14> be refused, and absence
is never a downgrade.</t>
      <section anchor="transport-bound">
        <name>Transport-bound verification</name>
        <t>The core verification procedure recomputes the action and display digests
from the relying party's own representation of the action. An enforcement
point positioned at the transport typically holds no request-to-action
mapping and cannot form that representation. This profile therefore
defines the following modification, and only this modification:</t>
        <t>In place of the action-binding and intent-binding recomputation steps, an
enforcement point that holds no request-to-action mapping <bcp14>MUST</bcp14> require
<tt>adg</tt> and <tt>dsp</tt> to be present as non-empty strings covered by the
verified signature. Every other step of the core procedure applies
unchanged.</t>
        <t>The result is <strong>transport-bound verification</strong>: the token is proven to
originate from the enrolled key, to be fresh, unconsumed, and bound to
exactly the observed request, while the action and display digests are
carried at signature strength rather than recomputed. A deployment that
requires action recomputation places it at a party that holds the
mapping, such as an executor-side processing model in the style of
<xref target="I-D.schrock-action-evidence-boundary"/> performing identifier matching
under <xref target="I-D.thallapelly-oasnt-caid"/>; matching there restores recomputation strength to
the carried digests. An enforcement point <bcp14>MUST NOT</bcp14> represent
transport-bound verification as full verification.</t>
      </section>
      <section anchor="replay-scope">
        <name>Replay scope</name>
        <t>The consumed-<tt>jti</tt> set is scoped to the enforcement deployment that
maintains it, consistent with the core document's scoping of nonce
consumption. Coordinating consumption across deployments or trust domains
is out of scope here, as it is there.</t>
      </section>
    </section>
    <section anchor="groups">
      <name>Exclusivity Groups</name>
      <t>The core document makes a token single-use through <tt>jti</tt>, and this profile
binds it to one request through <tt>rqf</tt>. Neither constrains two <em>different</em>
tokens. A deployment that offers a human a choice with a fallback, of the
form "transfer by ACH; if ACH is unavailable, by card", issues more than
one token from a single confirmation: each has its own action, its own
request binding, and its own nonce. Every one of them verifies. Nothing
specified so far prevents a presenter from executing two.</t>
      <t>An <strong>exclusivity group</strong> is the mechanism that does. Tokens the issuing
party intends as mutually exclusive carry a common <tt>grp</tt> value, and a
relying party maintains a ledger recording which groups have been spent.
The first token of a group to be accepted for execution spends the group;
every later presentation of any token in that group is refused.</t>
      <t>This section specifies the claim, the ledger, and the rule that fixes
which relying party spends. It does not specify how the issuing party
composes what the human sees, nor how a relying party could prove that an
executed action was among those confirmed; see <xref target="groups-deferred"/>.</t>
      <section anchor="grp-claim">
        <name>The <tt>grp</tt> claim</name>
        <table>
          <thead>
            <tr>
              <th align="left">Claim</th>
              <th align="left">Type</th>
              <th align="left">Presence</th>
              <th align="left">Binds</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">
                <tt>grp</tt></td>
              <td align="left">string</td>
              <td align="left">
                <bcp14>OPTIONAL</bcp14></td>
              <td align="left">the set of tokens among which at most one may execute</td>
            </tr>
          </tbody>
        </table>
        <t>A token that belongs to no group omits <tt>grp</tt>, and omitting it has precise
consequences given in <xref target="grp-absent"/>. When the claim is present it <bcp14>MUST</bcp14> be
a string of non-zero length; a relying party that finds it present and of
any other type or empty <bcp14>MUST</bcp14> refuse (<tt>grp-malformed</tt>) rather than proceed
as though the token were ungrouped. Treating a malformed value as absent
would convert a corrupt grouped token into an unconstrained one, which
inverts the direction every other check in this profile fails in.</t>
        <t>A <tt>grp</tt> value carries no information a relying party is entitled to read.
Its only two uses are equality comparison and construction of a ledger key
(<xref target="group-ledger"/>). A relying party <bcp14>MUST NOT</bcp14> parse it, enumerate over it,
infer the size or membership of a group from it, or treat two values as
related on any basis short of octet equality.</t>
        <t>The issuing party is the only party that assigns a value, and it <bcp14>MUST</bcp14>
generate one that the presenter can neither predict nor derive. Two
properties are required and they are separate. The value <bcp14>MUST</bcp14> be
unpredictable, drawn from a cryptographically secure generator; the
running implementation draws sixteen random bytes per group. And it <bcp14>MUST
NOT</bcp14> be computed from the contents of the confirmation it groups: a value
derived from the actions, their number, or their order would publish the
shape of the confirmation to the presenter, and the presenter is the party
the group exists to constrain.</t>
        <t>Because the value reaches a relying party only inside a signed token, an
attacker cannot mint a group of its own. What unpredictability buys is
narrower and worth stating exactly: it stops a presenter that has seen one
group's value from recognising, or constructing a key for, any other.</t>
      </section>
      <section anchor="group-modes">
        <name>Group modes</name>
        <t>A relying party verifying a token that carries <tt>grp</tt> acts in exactly one
of two modes:</t>
        <t><strong>consume</strong>: the relying party is authorizing execution. It maintains a
group ledger, consults it, and spends the group on full acceptance
(<xref target="group-consumption"/>).</t>
        <t><strong>verify-without-consuming</strong>: the relying party is an approval point or
an auditor. It checks the group constraints that do not require spending,
and <bcp14>MUST NOT</bcp14> write to any ledger.</t>
        <t>The mode is a property of the deployment's configuration, not of the
token. A relying party <bcp14>MUST</bcp14> fix its mode independently of anything the
presenter transmits. It <bcp14>MUST NOT</bcp14> derive the mode from any claim, header,
or parameter carried with the request, and <bcp14>MUST NOT</bcp14> fall back from one
mode to the other on any error.</t>
        <t>A relying party <bcp14>MUST NOT</bcp14> express verify-without-consuming by omitting the
ledger. Omitting the ledger is itself a refusal (<xref target="group-refusals"/>),
and a deployment in which "no ledger" and "do not consume" are the same
configuration cannot distinguish an auditor from a broken enforcement
point. The mode <bcp14>MUST</bcp14> be stated.</t>
        <t>A relying party that verifies a <tt>grp</tt>-bearing token without a stated mode
<bcp14>MUST</bcp14> refuse (<tt>group-mode-missing</tt>). There is deliberately no default:
defaulting to consume would silently destroy the fallback the group exists
to offer, and defaulting to verify-without-consuming would silently
destroy exclusivity. Both readings are unsafe, so neither is taken.</t>
      </section>
      <section anchor="group-consumption">
        <name>The consumption rule</name>
        <t><strong>The enforcement point consumes. The approval point does not.</strong></t>
        <t>A deployment <bcp14>MUST</bcp14> designate exactly one consuming relying party per group.
Every other party that inspects a token of that group in transit, for any
purpose other than executing or forwarding the authorized request, <bcp14>MUST</bcp14>
operate in verify-without-consuming.</t>
        <t>The reason is structural rather than a matter of preference. A choice and
its fallbacks share one <tt>grp</tt> by construction, and a confirmation is
recorded only once every token of the ceremony has verified. An approval
point that consumed would spend the group while verifying the first token,
so every sibling would then refuse as already consumed and the
confirmation could never complete. Even were it to complete, the group
would be spent before any request executed, and the fallback could never
be taken. Consuming at the approval point does not weaken exclusivity; it
removes the capability the claim exists to provide.</t>
        <t>What is spent is the pair <tt>(sub, grp)</tt>, never <tt>grp</tt> on its own. The core
document's procedure checks <tt>sub</tt> against the enrollment record before
this point is reached, so the subject in the pair is one an enrolled key
has vouched for. Keying on the pair therefore confines a group to the
subject it was issued to: naming another subject's group spends nothing,
and naming a subject one is not enrolled as fails earlier.</t>
        <t>Spending is the last thing a relying party does, not the first. It <bcp14>MUST
NOT</bcp14> record a group as spent until every other check on the token has
succeeded, and a token that is refused for any reason <bcp14>MUST</bcp14> leave its group
exactly as it found it. The cause of the refusal is irrelevant to this
rule: an expired token, a body that does not match the fingerprint, and a
malformed group all leave the group unspent alike.</t>
        <t>Getting this backwards is not a small ordering defect. If a refusal spent
the group, a presenter would need no valid token at all to suppress a
genuine one; it could submit anything bearing the right <tt>grp</tt> and the
fallback would be dead before the human's real choice was ever exercised.
The rule converts that from an attack into a no-op.</t>
        <t>A relying party that reserves state before verifying, rather than after,
<bcp14>MUST</bcp14> still produce this outcome. Two obligations follow for such an
implementation, and the running one meets both. It <bcp14>MUST</bcp14> release a group
reservation whenever the verification it was taken for does not end in
acceptance. And it <bcp14>MUST NOT</bcp14> take the group reservation at all once the
token's nonce is already known to be spent, because that request cannot
execute, and reserving a group for a request that cannot execute is the
same denial of service arriving by a different route.</t>
      </section>
      <section anchor="group-ledger">
        <name>Ledger scope and lifetime</name>
        <section anchor="what-the-ledger-must-be">
          <name>What the ledger must be</name>
          <t>A group ledger answers one question, whether this <tt>(sub, grp)</tt> pair has
been spent, and accepts one instruction, to mark it spent. A relying party in
consume mode requires both operations; one in verify-without-consuming
requires only the first.</t>
          <t>A ledger key <bcp14>MUST</bcp14> be constructed so that no pair can be confused with a
different pair. Where a key is formed by joining the subject and the group
value, both components <bcp14>MUST</bcp14> be encoded such that a value containing the
join delimiter cannot shift the boundary between them. Omitting that
encoding lets a crafted subject or group value produce the key of a
different pair, which is a way to spend a group that was never issued to
you, or to appear unspent when you are not.</t>
        </section>
        <section anchor="exclusivity-is-a-property-of-one-ledger-not-of-the-deployment">
          <name>Exclusivity is a property of one ledger, not of the deployment</name>
          <t>The failure this most often meets in practice is not a restart. It is two
enforcement points behind one load balancer: nothing is misconfigured,
both are healthy, and a process-local ledger at each means the first
instance's record is simply invisible to the second. A token executes at
one, its sibling arrives at the other, and both are accepted. Every
request is individually valid, exclusivity is absent throughout, and no
error is raised anywhere to say so.</t>
          <t>A deployment therefore <bcp14>MUST</bcp14> ensure that every token capable of carrying a
given <tt>grp</tt> is verified against the same ledger. Two relying parties that
do not share one provide no exclusivity between them, and a deployment
that spreads a group across them has none regardless of how correctly each
behaves in isolation. Restarts are the same defect on a longer timescale:
a ledger that does not survive the process forgets every group still
inside its tokens' lifetimes.</t>
        </section>
        <section anchor="retention-is-bounded-from-below-by-the-most-lagging-clock">
          <name>Retention is bounded from below by the most lagging clock</name>
          <t>An entry <bcp14>MUST</bcp14> remain until no token carrying that <tt>grp</tt> can still be
accepted anywhere the ledger serves. That bound is set by the slowest
clock among the relying parties sharing it, not by the issuing party's
clock: a verifier running behind will still accept a token some interval
past its expiry, and the entry has to outlast that acceptance or the
sibling becomes spendable again exactly when the record disappears. A
deployment <bcp14>MUST</bcp14> derive retention from the token's expiry extended by the
clock skew it tolerates.</t>
          <t>The bound also runs the other way, and the direction that fails closed is
worth naming. Where a deployment caps how long it will retain a record, a
token whose expiry exceeds that cap <bcp14>MUST</bcp14> be refused
(<tt>exp-beyond-replay-retention</tt>, <xref target="required-refusals"/>). It <bcp14>MUST NOT</bcp14> be
accepted against a record that will lapse first, and the cap <bcp14>MUST NOT</bcp14> be
silently applied to shorten the record instead: a record trimmed to fit a
cap expires while its token is still live, which is precisely the replay
the record existed to stop.</t>
          <t>This one refusal is not confined to grouped tokens. The retention bound is
a property of the replay record, which every token has, so the refusal
fires whether or not <tt>grp</tt> is present. It is stated here because this is
where retention is specified, and listed in <xref target="required-refusals"/> rather
than <xref target="group-refusals"/> because that is where its scope actually places
it, a distinction <xref target="grp-absent"/> depends on being exact.</t>
        </section>
        <section anchor="an-unavailable-ledger-is-a-refusal">
          <name>An unavailable ledger is a refusal</name>
          <t>A relying party in consume mode that cannot reach its ledger, or that
holds one unable to perform the operations above, <bcp14>MUST</bcp14> refuse. This
follows the rule every part of this profile obeys: there is no branch in
which a check that could not be performed results in the request
proceeding. Exclusivity that cannot be evaluated has not been established,
and treating it as established is the one outcome that admits the
double execution the claim exists to prevent.</t>
        </section>
      </section>
      <section anchor="grp-absent">
        <name>Absent <tt>grp</tt></name>
        <t><strong>A token carrying no <tt>grp</tt> claim <bcp14>MUST</bcp14> be verified exactly as a
deployment that does not implement this section would verify it.</strong> No
group ledger is consulted or written, no mode is required or read, and no
refusal of <xref target="group-token-refusals"/> can be produced.</t>
        <t>One refusal named in <xref target="group-refusals"/> sits outside that guarantee, and
it is named here rather than left to be discovered.
<tt>group-mode-not-caller-selectable</tt> (<xref target="group-interface-refusal"/>) can be
returned against a token carrying no <tt>grp</tt> at all. It does not contradict
the sentence above, because it is not a verification outcome for the
token: the situation it is defined over is a caller supplying a mode to an
enforcement point, which is a property of the call's arguments and not of
the presented token's claims. Nothing in that row is conditioned on <tt>grp</tt>,
so the claim's absence does not withhold it. A deployment whose caller
threads a mode argument alongside a <tt>grp</tt>-less token is refused under that
label, and a reader who took the guarantee above to mean that no label
from <xref target="group-refusals"/> can ever accompany a <tt>grp</tt>-less token would be
wrong. The guarantee is exact over the five token-conditioned causes,
which are the causes a token can reach.</t>
        <t>This guarantee is normative in both directions and is what makes the
mechanism safe to deploy incrementally. A relying party may adopt group
handling without re-qualifying every single-token caller in front of it,
and a <tt>grp</tt>-bearing token that reaches a relying party unaware of this
section fails closed, because such a party consults no ledger and this
section's refusals are unavailable to it, so the token is either refused
by the core procedure or accepted with exclusivity unenforced. A
deployment <bcp14>MUST NOT</bcp14> rely on group exclusivity across a relying party that
does not implement this section.</t>
      </section>
      <section anchor="group-refusals">
        <name>Refusals introduced by this section</name>
        <t>A conforming relying party <bcp14>MUST</bcp14> refuse in each of the situations named in
this section. There are six, and they are of two kinds, tabulated
separately because they answer different questions: five are reached
because of what the presented token carries, and one is reached because of
what the caller passed. Only the first kind is a statement about a token,
and conflating them is what would make <xref target="grp-absent"/> approximate. As
everywhere in this profile, the labels are descriptive and for the
operator alone; nothing on the wire distinguishes them (<xref target="refusal"/>).</t>
        <section anchor="group-token-refusals">
          <name>Causes conditioned on the token</name>
          <t>Each of these is reached only because the presented token carries <tt>grp</tt>.
Every one of them requires the claim to be present, which is what makes
the guarantee of <xref target="grp-absent"/> exact rather than approximate.</t>
          <table>
            <thead>
              <tr>
                <th align="left">Situation</th>
                <th align="left">Label</th>
              </tr>
            </thead>
            <tbody>
              <tr>
                <td align="left">
                  <tt>grp</tt> present but not a non-empty string</td>
                <td align="left">
                  <tt>grp-malformed</tt></td>
              </tr>
              <tr>
                <td align="left">
                  <tt>grp</tt> present and no group ledger available to this relying party</td>
                <td align="left">
                  <tt>group-ledger-missing</tt></td>
              </tr>
              <tr>
                <td align="left">
                  <tt>grp</tt> present and no group mode stated, or a mode outside the two of <xref target="group-modes"/></td>
                <td align="left">
                  <tt>group-mode-missing</tt></td>
              </tr>
              <tr>
                <td align="left">
                  <tt>grp</tt> present and the available ledger cannot be consulted, or cannot be written by a relying party in consume mode</td>
                <td align="left">
                  <tt>group-ledger-unusable</tt></td>
              </tr>
              <tr>
                <td align="left">a token of this group has already been consumed under this subject</td>
                <td align="left">
                  <tt>group-consumed</tt></td>
              </tr>
            </tbody>
          </table>
          <t>The order of these checks is normative where it is observable: a relying
party <bcp14>MUST</bcp14> determine that a ledger is available <strong>before</strong> it evaluates
the stated mode. Stating a mode <bcp14>MUST NOT</bcp14> substitute for holding a ledger,
because "I could not check the group" is not answered by declaring what
would have been done if it could.</t>
          <t>The retention-cap refusal discussed in <xref target="group-ledger"/> is deliberately
<strong>not</strong> listed here: it applies to any token, grouped or not, and so
belongs with <xref target="required-refusals"/>, where it is listed.</t>
        </section>
        <section anchor="group-interface-refusal">
          <name>The cause conditioned on the call</name>
          <t>The sixth refusal is a requirement on an enforcement point's own interface
rather than on the token, and it is tabulated apart from the five above
for exactly that reason.</t>
          <table>
            <thead>
              <tr>
                <th align="left">Situation</th>
                <th align="left">Label</th>
              </tr>
            </thead>
            <tbody>
              <tr>
                <td align="left">a mode supplied by the caller at an enforcement point</td>
                <td align="left">
                  <tt>group-mode-not-caller-selectable</tt></td>
              </tr>
            </tbody>
          </table>
          <t>Because an enforcement point consumes unconditionally
(<xref target="group-consumption"/>), its mode is not a parameter, and a caller that
supplies one has misunderstood the deployment. Such a call <bcp14>MUST</bcp14> be refused
rather than served with the supplied value ignored: a silently ignored
parameter leaves the caller believing a behavior is available that is not.</t>
          <t>The situation is stated over the call, not over the token, and this row
therefore does <strong>not</strong> require <tt>grp</tt> to be present. A caller that supplies
a mode is refused whatever token accompanies it, including one carrying no
<tt>grp</tt> at all; <xref target="grp-absent"/> states that consequence. The row binds an
enforcement point only. A relying party that does not consume
unconditionally, such as an approval point verifying without consuming
(<xref target="group-modes"/>), is told its mode by its caller in the ordinary way,
and this refusal does not reach it.</t>
        </section>
      </section>
      <section anchor="groups-deferred">
        <name>What this revision does not specify</name>
        <t>Three problems adjacent to <xref target="groups"/> are deliberately out of scope of
this revision, as <xref target="revision-scope"/> states. Each is named here so that an
implementer sees the boundary rather than inferring coverage that does not
exist.</t>
        <t><strong>Composed multi-action disclosure.</strong> How an issuing party renders several
actions into one artifact for a single human confirmation, and what <tt>dsp</tt>
is then computed over, is not specified here. This revision makes no
statement about <tt>dsp</tt> beyond the core document and <xref target="transport-bound"/>.</t>
        <t><strong>Containment.</strong> Where the disclosure covers several actions, a relying
party accepting a token cannot, from anything in this revision, establish
that the action it is about to execute was among those confirmed. This
profile does not define a mechanism for that proof, and an enforcement
point conforming to this revision <bcp14>MUST NOT</bcp14> represent its acceptance of a
grouped token as evidence that the executed action was one the human
confirmed. Deployments requiring that property <bcp14>MUST</bcp14> establish it at a
party holding the mapping between the confirmation and its actions.</t>
        <t><strong>Device carriage.</strong> The device-side production of <tt>grp</tt> is not specified
here. <strong>This revision places no requirement on any device, SDK, or minting
runtime.</strong> Every requirement above falls on a relying party, with one
exception that is deliberately not a device requirement: <xref target="grp-claim"/>
constrains how the <strong>issuing party</strong> generates a <tt>grp</tt> value. The issuing
party is whichever party decides that a set of actions will be offered
under one confirmation. In the running deployment that is a server-side
broker, never the device, which receives the value already formed and
carries it verbatim. See <xref target="impl-status"/> for what this means about the implementation
this revision was written from.</t>
      </section>
    </section>
    <section anchor="refusal">
      <name>Refusal Behavior</name>
      <t>On the wire, every refusal <bcp14>MUST</bcp14> be indistinguishable from every other:
the same status code and an identical body, carrying no indication of
which check failed. The distinct refusal cause <bcp14>MUST</bcp14> be available to the
operator, and <bcp14>MUST NOT</bcp14> be available to the presenter. Refusal causes
reveal enrollment state and nonce state, which is reconnaissance an
untrusted presenter is not owed.</t>
      <t>This applies to the causes of <xref target="group-refusals"/> without exception. Group
state is enrollment-adjacent: disclosing that a token was refused as
<tt>group-consumed</tt>, rather than for any other cause, would tell a presenter
that a sibling of its token had already executed.</t>
      <t>A failure of the upstream after an allow decision is an availability
outcome, not an authorization outcome. It <bcp14>MUST</bcp14> be distinguishable from a
refusal (for example, 502 rather than 403) and <bcp14>MUST NOT</bcp14> be folded into
the uniform refusal, because masking availability as refusal corrupts the
operator's signal in both directions.</t>
    </section>
    <section anchor="forwarding">
      <name>Forwarding</name>
      <t>Only a request whose token passed verification in full is forwarded, and
what is forwarded is exactly the observed octets the fingerprint was
computed over: same method, same target, same body. The OASNT-Token field
<bcp14>MUST</bcp14> be removed before forwarding; every other field is passed through
unmodified.</t>
      <t>Because the fingerprinted octets and the forwarded octets are the same
buffer, there is no window at this hop between what was verified and what
executes. What the upstream does beyond those octets, such as
dereferencing an identifier the body names, is outside the binding and
belongs to the action layer.</t>
    </section>
    <section anchor="required-refusals">
      <name>Required Refusals</name>
      <t>A conforming enforcement point <bcp14>MUST</bcp14> refuse, without forwarding, in each
of the following situations. The labels are descriptive, for operator
logs; nothing on the wire distinguishes them (<xref target="refusal"/>).</t>
      <table>
        <thead>
          <tr>
            <th align="left">Situation</th>
            <th align="left">Label</th>
          </tr>
        </thead>
        <tbody>
          <tr>
            <td align="left">body altered relative to the fingerprinted request</td>
            <td align="left">
              <tt>rqf-mismatch</tt></td>
          </tr>
          <tr>
            <td align="left">target altered relative to the fingerprinted request</td>
            <td align="left">
              <tt>rqf-mismatch</tt></td>
          </tr>
          <tr>
            <td align="left">token already consumed by a previously executed request</td>
            <td align="left">
              <tt>replay</tt></td>
          </tr>
          <tr>
            <td align="left">no token presented</td>
            <td align="left">
              <tt>no-token</tt></td>
          </tr>
          <tr>
            <td align="left">tenant or privilege configuration disagrees with the binding</td>
            <td align="left">
              <tt>rqf-mismatch</tt></td>
          </tr>
          <tr>
            <td align="left">body exceeding the configured cap</td>
            <td align="left">
              <tt>body-too-large</tt></td>
          </tr>
          <tr>
            <td align="left">target named by no configuration entry</td>
            <td align="left">
              <tt>no-route</tt></td>
          </tr>
          <tr>
            <td align="left">more than one OASNT-Token field, or a syntactically invalid one</td>
            <td align="left">
              <tt>no-token</tt></td>
          </tr>
        </tbody>
      </table>
      <t>The reference implementation exercises each of these against a live
enforcement point over HTTP, together with a check that all refusal
responses are octet-identical on the wire; see <xref target="impl-status"/>.</t>
      <t>One further refusal belongs to this table by subject but not to the
coverage claim just made, and is therefore listed apart from it:</t>
      <table>
        <thead>
          <tr>
            <th align="left">Situation</th>
            <th align="left">Label</th>
          </tr>
        </thead>
        <tbody>
          <tr>
            <td align="left">a token whose expiry runs past the deployment's replay-retention bound (<xref target="group-ledger"/>)</td>
            <td align="left">
              <tt>exp-beyond-replay-retention</tt></td>
          </tr>
        </tbody>
      </table>
      <t>This refusal is a property of the replay record rather than of the group:
it applies to every token an enforcement point admits, whether or not
<tt>grp</tt> is present, which is why it does not appear in <xref target="group-refusals"/>.
A deployment <bcp14>MUST NOT</bcp14> satisfy it by shortening the retention entry to fit
its bound; the token is refused instead. Its implementation coverage is
stated in <xref target="impl-status"/> and is not the live-HTTP coverage described
above.</t>
      <t>The refusals of <xref target="group-refusals"/> are additionally required of a
conforming relying party, and are listed separately because their
implementation coverage differs; <xref target="impl-status"/> states how each is
exercised and does not claim the coverage described in the paragraph
above for all of them.</t>
    </section>
    <section anchor="security-considerations">
      <name>Security Considerations</name>
      <section anchor="sec-boundary">
        <name>The boundary of the guarantee</name>
        <t>An enforcement point protects exactly the requests that pass through it.
A service reachable around it is not protected, and no property of this
profile survives such a path. Deployments <bcp14>MUST</bcp14> ensure the upstream
accepts requests only from its enforcement point, by network isolation,
mutual authentication, or equivalent means. With that condition in place,
skipping the authorization ceremony is not a bypass; it is the refused
path.</t>
      </section>
      <section anchor="transport-bound-verification-is-not-action-verification">
        <name>Transport-bound verification is not action verification</name>
        <t><xref target="transport-bound"/> trades action recomputation for deployability at the
transport. The carried <tt>adg</tt> and <tt>dsp</tt> are exactly as strong as the
signature over them: they prove what the device signed, not what the
upstream will do. The composition intended by this profile is that
recomputation happens where the mapping lives, at the approval broker
that derives the display from the request, and at the executor that
matches identifiers per <xref target="I-D.thallapelly-oasnt-caid"/>. An enforcement point is one layer
of that composition, not the whole of it.</t>
      </section>
      <section anchor="executing-a-choice-and-its-fallback">
        <name>Executing a choice and its fallback</name>
        <t>This is the attack <xref target="groups"/> exists to defeat. Both tokens are
individually valid: each carries its own action digest, its own request
fingerprint, and its own nonce, and nothing in the core document refuses
the second. Only the ledger does, on <tt>(sub, grp)</tt>, at the single consuming
party <xref target="group-consumption"/> designates.</t>
        <t>Two residual conditions are load-bearing and are stated rather than
assumed. Exclusivity holds only within one ledger (<xref target="group-ledger"/>), so a
deployment that spreads a group across enforcement points not sharing one
has no exclusivity at all. And it holds only if the consuming party
actually reaches its ledger, which is why an unusable ledger is a refusal
rather than a pass.</t>
      </section>
      <section anchor="consuming-at-the-wrong-party">
        <name>Consuming at the wrong party</name>
        <t>Placing the spend at an approval point does not make a deployment more
restrictive than this profile requires. It makes the deployment stop
working, in a way that resists diagnosis.</t>
        <t>Consider what an operator observes. Every token is genuine and every
signature verifies. The logs fill with a refusal cause that is defined,
documented, and correct for what the code did. No component reports an
error, because none has encountered one. What has actually happened is
that the first sibling verified at the approval point spent the group, so
its siblings were refused as already spent, so the confirmation never
reached an approved state and the human's fallback was consumed before any
request was ever authorized. Every individual step behaved as specified.</t>
        <t>The reason this belongs in security considerations rather than in an
operations note is the shape of the failure, not its severity. It is
reached by leaving something out rather than by configuring something
wrong, and it presents as correct behaviour. Requiring the mode to be
declared (<xref target="group-modes"/>) is what removes the omission path: a relying
party that has not said which mode it is in does not silently pick one.</t>
      </section>
      <section anchor="groups-constrain-across-tokens-not-within-one">
        <name>Groups constrain across tokens, not within one</name>
        <t>The three controls answer three different questions, and a deployment that
reads any of them as covering another has a gap it cannot see. The nonce
answers whether <em>this</em> token has been used before. The request fingerprint
answers whether this token is being used against the request it was bound
to. The group answers whether a <em>different</em> token, issued alongside this
one, has already been spent.</t>
        <t>Nothing about the presence of a group weakens the first two. A grouped
token is still single-use in its own right and still bound to one request,
and a deployment <bcp14>MUST NOT</bcp14> relax nonce handling or fingerprint checking on
the grounds that a ledger is present. The converse is the more tempting
error and it is equally wrong: a correct nonce check says nothing at all
about a sibling, because a sibling is a different token with a different
nonce.</t>
        <t>In a correct implementation the nonce check also comes first in time, and
that ordering carries a consequence worth stating: a request already
doomed by its nonce <bcp14>MUST NOT</bcp14> reach the point of spending a group
(<xref target="group-consumption"/>).</t>
      </section>
      <section anchor="group-state-is-operator-only">
        <name>Group state is operator-only</name>
        <t><xref target="refusal"/> applies to group causes in full. Beyond the reconnaissance
argument that applies to every cause, <tt>group-consumed</tt> is a positive
statement that a sibling token has already executed, which is
transaction-level information about another party's activity.</t>
      </section>
      <section anchor="inherited-limits">
        <name>Inherited limits</name>
        <t>The core document's limits pass through unchanged. A compromised device
may still assert a clean integrity verdict. A valid display digest proves
which octets were shown, not that they were understood. Nothing in this
profile strengthens either claim.</t>
        <t>Where a single confirmation authorizes several actions, this profile makes
no statement at all about whether the human distinguished them; it
constrains only how many of the resulting tokens may be spent.
Containment is not specified here (<xref target="groups-deferred"/>), so a deployment
<bcp14>MUST NOT</bcp14> infer from a grouped token's acceptance that the executed action
was among those confirmed.</t>
      </section>
      <section anchor="the-body-cap">
        <name>The body cap</name>
        <t>Refusing oversized bodies is the fail-closed arm of a real trade: it
makes the enforcement point a hard dependency for large uploads. The
alternative, forwarding unverified above a threshold, silently exempts
the largest requests from the strongest control, which is the wrong shape
for a security boundary. Deployments with large-body endpoints <bcp14>SHOULD</bcp14>
raise the cap for those targets explicitly rather than exempt them.</t>
      </section>
      <section anchor="operator-logs">
        <name>Operator logs</name>
        <t>Refusal causes are operator-only (<xref target="refusal"/>) precisely because they
reveal enrollment and nonce state. The log that carries them <bcp14>SHOULD</bcp14> be
protected as security telemetry, and log entries need carry no token
material beyond the cause label.</t>
      </section>
    </section>
    <section anchor="iana-considerations">
      <name>IANA Considerations</name>
      <section anchor="http-field-name">
        <name>HTTP Field Name</name>
        <t>IANA is requested to register the following entry in the "Hypertext
Transfer Protocol (HTTP) Field Name Registry" defined by <xref target="RFC9110"/>:</t>
        <dl>
          <dt>Field name:</dt>
          <dd>
            <t>OASNT-Token</t>
          </dd>
          <dt>Status:</dt>
          <dd>
            <t>permanent</t>
          </dd>
          <dt>Reference:</dt>
          <dd>
            <t>this document, <xref target="field"/></t>
          </dd>
        </dl>
      </section>
      <section anchor="json-web-token-claims">
        <name>JSON Web Token Claims</name>
        <t>IANA is requested to register the following in the "JSON Web Token
Claims" registry established by <xref target="RFC7519"/>:</t>
        <table>
          <thead>
            <tr>
              <th align="left">Claim Name</th>
              <th align="left">Description</th>
              <th align="left">Change Controller</th>
              <th align="left">Reference</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">
                <tt>grp</tt></td>
              <td align="left">Exclusivity group</td>
              <td align="left">IETF</td>
              <td align="left">
                <xref target="grp-claim"/> of this document</td>
            </tr>
          </tbody>
        </table>
        <t>This name does not appear in the registry at the time of writing.</t>
      </section>
    </section>
  </middle>
  <back>
    <references anchor="sec-combined-references">
      <name>References</name>
      <references anchor="sec-normative-references">
        <name>Normative References</name>
        <reference anchor="I-D.thallapelly-oasnt">
          <front>
            <title>OASNT: Attested Action Authorization Tokens</title>
            <author fullname="Arun Thallapelly" initials="A." surname="Thallapelly">
              <organization>OmniArx</organization>
            </author>
            <date day="15" month="August" year="2026"/>
            <abstract>
              <t>   This document defines the OASNT token, a compact JWS-based credential
   in which a hardware-bound device key attests that a specific human,
   on a device whose runtime integrity was assessed, authorized one
   specific action whose human-readable disclosure is cryptographically
   bound to the token (What You See Is What You Sign).  Tokens are
   single-use, short-lived, and may additionally be bound to one
   concrete HTTP request.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-thallapelly-oasnt-02"/>
        </reference>
        <reference anchor="RFC9110">
          <front>
            <title>HTTP Semantics</title>
            <author fullname="R. Fielding" initials="R." role="editor" surname="Fielding"/>
            <author fullname="M. Nottingham" initials="M." role="editor" surname="Nottingham"/>
            <author fullname="J. Reschke" initials="J." role="editor" surname="Reschke"/>
            <date month="June" year="2022"/>
            <abstract>
              <t>The Hypertext Transfer Protocol (HTTP) is a stateless application-level protocol for distributed, collaborative, hypertext information systems. This document describes the overall architecture of HTTP, establishes common terminology, and defines aspects of the protocol that are shared by all versions. In this definition are core protocol elements, extensibility mechanisms, and the "http" and "https" Uniform Resource Identifier (URI) schemes.</t>
              <t>This document updates RFC 3864 and obsoletes RFCs 2818, 7231, 7232, 7233, 7235, 7538, 7615, 7694, and portions of 7230.</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="97"/>
          <seriesInfo name="RFC" value="9110"/>
          <seriesInfo name="DOI" value="10.17487/RFC9110"/>
        </reference>
        <reference anchor="RFC4648">
          <front>
            <title>The Base16, Base32, and Base64 Data Encodings</title>
            <author fullname="S. Josefsson" initials="S." surname="Josefsson"/>
            <date month="October" year="2006"/>
            <abstract>
              <t>This document describes the commonly used base 64, base 32, and base 16 encoding schemes. It also discusses the use of line-feeds in encoded data, use of padding in encoded data, use of non-alphabet characters in encoded data, use of different encoding alphabets, and canonical encodings. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="4648"/>
          <seriesInfo name="DOI" value="10.17487/RFC4648"/>
        </reference>
        <reference anchor="RFC7519">
          <front>
            <title>JSON Web Token (JWT)</title>
            <author fullname="M. Jones" initials="M." surname="Jones"/>
            <author fullname="J. Bradley" initials="J." surname="Bradley"/>
            <author fullname="N. Sakimura" initials="N." surname="Sakimura"/>
            <date month="May" year="2015"/>
            <abstract>
              <t>JSON Web Token (JWT) is a compact, URL-safe means of representing claims to be transferred between two parties. The claims in a JWT are encoded as a JSON object that is used as the payload of a JSON Web Signature (JWS) structure or as the plaintext of a JSON Web Encryption (JWE) structure, enabling the claims to be digitally signed or integrity protected with a Message Authentication Code (MAC) and/or encrypted.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7519"/>
          <seriesInfo name="DOI" value="10.17487/RFC7519"/>
        </reference>
        <reference anchor="RFC2119">
          <front>
            <title>Key words for use in RFCs to Indicate Requirement Levels</title>
            <author fullname="S. Bradner" initials="S." surname="Bradner"/>
            <date month="March" year="1997"/>
            <abstract>
              <t>In many standards track documents several words are used to signify the requirements in the specification. These words are often capitalized. This document defines these words as they should be interpreted in IETF documents. This document specifies an Internet Best Current Practices for the Internet Community, and requests discussion and suggestions for improvements.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="2119"/>
          <seriesInfo name="DOI" value="10.17487/RFC2119"/>
        </reference>
        <reference anchor="RFC8174">
          <front>
            <title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title>
            <author fullname="B. Leiba" initials="B." surname="Leiba"/>
            <date month="May" year="2017"/>
            <abstract>
              <t>RFC 2119 specifies common key words that may be used in protocol specifications. This document aims to reduce the ambiguity by clarifying that only UPPERCASE usage of the key words have the defined special meanings.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="8174"/>
          <seriesInfo name="DOI" value="10.17487/RFC8174"/>
        </reference>
      </references>
      <references anchor="sec-informative-references">
        <name>Informative References</name>
        <reference anchor="I-D.schrock-action-evidence-boundary">
          <front>
            <title>The Action Evidence Boundary for Consequential Agent Effects</title>
            <author fullname="Iman Schrock" initials="I." surname="Schrock">
              <organization>EMILIA Protocol, Inc.</organization>
            </author>
            <date day="2" month="August" year="2026"/>
            <abstract>
              <t>   Consequential agent actions can cross identity, transport,
   authorization, policy, and execution systems.  Each system can
   produce a valid artifact while the executor still lacks a safe rule
   for joining the artifacts to the exact effect, consuming one-time
   authority, and handling an uncertain outcome.  This document defines
   the Action Evidence Boundary (AEB), an executor-side processing model
   for that lifecycle.

   AEB requires native artifact verification, Canonical Action
   Identifier (CAID) matching, Authorization Evidence Chain (AEC)
   satisfaction, a separate local authorization decision, durable atomic
   consumption or reservation, invocation, closed effect outcomes, and
   authenticated reconciliation.  It defines no receipt or token format,
   no policy language, no universal evidence taxonomy, and no new
   registry.  Native workload credentials, message signatures, attested
   per-action tokens, permit records, authorization receipts, and status
   mechanisms retain their own semantics and verifiers.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-schrock-action-evidence-boundary-03"/>
        </reference>
        <reference anchor="I-D.thallapelly-oasnt-caid">
          <front>
            <title>OASNT-CAID: Canonical Action Identifier Derivation and the Named-Human Binding</title>
            <author fullname="Arun Thallapelly" initials="A." surname="Thallapelly">
              <organization>OmniArx</organization>
            </author>
            <date day="4" month="August" year="2026"/>
            <abstract>
              <t>   This document profiles OASNT tokens for consumption by executor-side
   processing models.  It fixes one normative derivation of a Canonical
   Action Identifier (CAID) from the OASNT action digest, so that every
   executor checks the same derivation rather than each integration
   defining its own, and it specifies the semantics of the token's
   named-human binding, including a subject-to-enrollment check whose
   absence this profile makes a refusal.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-thallapelly-oasnt-caid-01"/>
        </reference>
      </references>
    </references>

<section anchor="impl-status">
      <name>Implementation Status</name>
      <t>This section records the implementation this profile was written from; it
is not a conformance statement. It distinguishes what runs from what does
not, because the coverage is not uniform across this document and a reader
who assumed it was would be misled.</t>
      <section anchor="the-enforcement-point-and-the-transport-profile">
        <name>The enforcement point and the transport profile</name>
        <t>A reverse-proxy enforcement point and its verification core exist and run
in front of an unmodified HTTP origin. The verification core delegates
every cryptographic decision to the same verifier the core document's
test vectors were generated from. An adversarial corpus drives a live
enforcement point over real HTTP through every situation
<xref target="required-refusals"/> lists, asserting each is refused, that nothing
refused reaches the upstream, and that all refusal responses are
octet-identical on the wire. The corpus and the list are cross-checked
mechanically, so a refusal cannot be documented without being exercised
or exercised without being documented.</t>
      </section>
      <section anchor="exclusivity-groups">
        <name>Exclusivity groups</name>
        <t>The relying-party half of <xref target="groups"/> runs, split across two layers, and
the split matters to anyone checking the claim. A shared verification
routine recognizes <tt>grp</tt> as an optional claim, keys its ledger on
<tt>(sub, grp)</tt>, requires a stated mode, and spends a group only under
reserve-and-commit; it produces the malformed-value, absent-ledger,
absent-mode, unusable-ledger and already-consumed causes, which are
exactly <xref target="group-token-refusals"/>. The remaining cause
(<xref target="group-interface-refusal"/>), raised when a caller supplies a mode, is
<strong>not</strong> produced by that routine and could not be: it is enforced one
layer out, at the enforcement point's own entry, which is the only place a
caller-supplied argument exists to be rejected. That placement is also why
it is not conditioned on <tt>grp</tt>: it is decided before the presented token
is examined, and it is returned for a call carrying no token at all. Two relying
parties drive the routine in production configuration: an approval broker
in verify-without-consuming mode, and the enforcement point in consume
mode, where the mode is fixed in the enforcement point itself and a
supplied mode is refused rather than ignored. The ledger backing the
enforcement point is durable
and shared across instances; a multi-instance test asserts that a group
spent at one instance is refused at another behind the same load balancer,
and that test requires a durable store to be present in order to run.</t>
        <t><strong>Coverage is not uniform, and this document does not claim that it is.</strong>
The corpus rows and unit suites exercise every cause of
<xref target="group-token-refusals"/> against the verifier in process. Of those causes,
only <tt>group-consumed</tt> is additionally exercised against a live enforcement
point over real HTTP, in a multi-instance test that requires a durable
store to be present; the remainder are not, and none of the group causes
participates in the mechanical corpus cross-check described above for
<xref target="required-refusals"/>. The sentence in <xref target="required-refusals"/> about live
HTTP coverage therefore applies to that table's first list and not to
<xref target="group-refusals"/>.</t>
        <t><tt>group-mode-not-caller-selectable</tt> (<xref target="group-interface-refusal"/>) is
covered differently, as follows from where it is enforced: it cannot be
exercised against the verification routine at all, which is why the
sentence above is stated over <xref target="group-token-refusals"/> alone and not over
all six causes. It is exercised in process at the enforcement point's own
entry, by a unit test that passes each of the two defined modes and an
explicit undefined one, asserts the refusal in every case, and asserts
that a refused call spends neither a nonce nor a group. The equivalent
guard on the durable wrapper has its own test; that test requires a
durable store to be present, and in the run recorded for this document it
did not execute for want of one. Neither is a live-HTTP exercise.</t>
        <t><tt>exp-beyond-replay-retention</tt> is covered differently again, and is
recorded here rather than folded into any statement above. It is
produced by the replay store's reservation gate before verification, not
by the verification routine, and it is exercised by a unit test asserting
that a token outrunning the bound is refused and that nothing is written.
That test requires a durable store to be present; in the run recorded for
this document it did not execute for want of one. The same branch exists
in the in-memory store and was exercised directly, refusing a claims
object carrying no <tt>grp</tt> at all, which is the observation that places
this refusal outside <xref target="group-refusals"/>.</t>
        <t>Two adversarial rows carry the reserve-and-commit property specifically. A
grouped token presented against the wrong request is refused on the
fingerprint alone and is asserted <strong>not</strong> to have spent its group; a
following row then verifies the sibling successfully, which is possible
only if the refusal did not spend it, and confirms that the sibling's
genuine use does spend it. Together they pin the rule that a refused
token never burns its group.</t>
      </section>
      <section anchor="what-is-not-implemented">
        <name>What is not implemented</name>
        <t><strong>No device produces <tt>grp</tt>.</strong> In the native core, the claim does not exist
in the claims structure or in the signing input, and no shipping Android
or iOS surface carries it. The only software that emits a token bearing
<tt>grp</tt> is a reference minter used to generate test and corpus material; it
is not the SDK and it establishes nothing about device behavior.</t>
        <t>This is why <xref target="groups"/> places no requirement on a device and why device
carriage is deferred in <xref target="groups-deferred"/>. Every normative statement in
<xref target="groups"/> binds either a relying party or the issuing party, and both of
those are server-side in the implementation described here. The broker
that composes the confirmation generates each <tt>grp</tt> from a cryptographically
secure source, and the relying parties are the approval point and the
enforcement point. That is precisely the part that runs.</t>
        <t>Composed multi-action disclosure and containment are likewise not
implemented at the enforcement point and are not specified in this
revision.</t>
      </section>
    </section>
    <section numbered="false" anchor="changes-from-00">
      <name>Changes from -00</name>
      <ul spacing="normal">
        <li>
          <t>Added <xref target="groups"/>: the <tt>grp</tt> claim, group modes, the consumption rule
keyed on <tt>(sub, grp)</tt>, ledger scope, the absent-<tt>grp</tt> guarantee, and six
named refusals. The six are tabulated as two kinds: the five causes of
<xref target="group-token-refusals"/>, each of which requires <tt>grp</tt> to be present and
over which the absent-<tt>grp</tt> guarantee is stated, and the single cause of
<xref target="group-interface-refusal"/>, which is stated over an enforcement point's
own interface and does not require <tt>grp</tt>.</t>
        </li>
        <li>
          <t>Added one refusal to <xref target="required-refusals"/>, <tt>exp-beyond-replay-retention</tt>,
for a token whose expiry outruns the deployment's replay-retention bound.
It is listed there rather than with the group refusals because it applies
to every token, grouped or not.</t>
        </li>
        <li>
          <t>Added <xref target="groups-deferred"/>, naming composed disclosure, containment and
device carriage as out of scope of this revision.</t>
        </li>
        <li>
          <t>Added a JSON Web Token Claims registration request for <tt>grp</tt>.</t>
        </li>
        <li>
          <t>Added Security Considerations covering the choice-and-fallback attack,
consuming at the wrong party, the non-relaxation of <tt>jti</tt> and <tt>rqf</tt>, and
the operator-only treatment of group state.</t>
        </li>
        <li>
          <t><xref target="impl-status"/> now separates transport-profile coverage from group
coverage rather than describing one implementation status for the whole
document.</t>
        </li>
        <li>
          <t>No change to the OASNT-Token field, observation, transport-bound
verification, forwarding, or <xref target="required-refusals"/>.</t>
        </li>
      </ul>
    </section>
    <section numbered="false" anchor="acknowledgments">
      <name>Acknowledgments</name>
      <t>The executor-side framing that this profile composes with, in particular
the discussion of admissibility conditions on the WIMSE mailing list,
sharpened the boundary between transport-bound and action-recomputed
verification.</t>
    </section>
  </back>
  <!-- ##markdown-source:
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
a5sVZslde0wmsyoj8kfT9boK/wc/BzNHxbAAAA==

-->

</rfc>
