<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE rfc [
  <!ENTITY nbsp    "&#160;">
  <!ENTITY zwsp   "&#8203;">
  <!ENTITY nbhy   "&#8209;">
  <!ENTITY wj     "&#8288;">
]>
<?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
<!-- generated by https://github.com/cabo/kramdown-rfc version 1.7.43 (Ruby 4.0.7) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-effortel-pulse-00" category="std" consensus="true" submissionType="IETF" xml:lang="en" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.34.1 -->
  <front>
    <title abbrev="The Pulse Protocol">Pulse: Real-Time Online Charging for AI Services</title>
    <seriesInfo name="Internet-Draft" value="draft-effortel-pulse-00"/>
    <author initials="M." surname="Petkov" fullname="Martin Petkov">
      <organization>Effortel Technologies SA</organization>
      <address>
        <email>martin.petkov@effortel.com</email>
      </address>
    </author>
    <author initials="A." surname="Panitch" fullname="Arkadi Panitch">
      <organization>Effortel Technologies SA</organization>
      <address>
        <email>arkadi.panitch@effortel.com</email>
      </address>
    </author>
    <date year="2026" month="September" day="17"/>
    <area>ART</area>
    <workgroup>Individual Submission</workgroup>
    <keyword>online charging</keyword>
    <keyword>credit control</keyword>
    <keyword>AI gateway</keyword>
    <keyword>metering</keyword>
    <keyword>settlement</keyword>
    <abstract>
      <?line 43?>

<t>This document specifies Pulse, version 1.1 — the AI online charging
protocol: the interface between an AI Gateway (the client) and the Charging Server (the
server) by which AI service usage is authorised in real time, supervised under a granted
budget, and settled. The spend guarantee is precisely stated: <strong>settled spend never exceeds
the reported meter or the plan's ceiling</strong>, and serving exposure is bounded by the granted
pool plus the completion of Calls already in flight when a stop lands. The protocol
consists of two request/response operations over HTTPS with JSON bodies: <strong>Authorise</strong> and
<strong>Report</strong>. It follows the reserve-then-settle discipline of telecom online charging
(cf. Diameter Credit-Control, RFC 4006) applied to AI workloads.</t>
    </abstract>
  </front>
  <middle>
    <?line 55?>

<section anchor="s-1">
      <name>Introduction</name>
      <section anchor="s-1-1">
        <name>Motivation</name>
        <t>Providers and resellers of mass-market AI services cannot today guarantee that an individual
subscriber will not overspend, nor apply a hard per-subscriber budget. Pulse provides that
guarantee the way telecom charging does: no chargeable work proceeds without a prior
authorisation carrying a budget, and all consumption is reported back and settled against it.</t>
      </section>
      <section anchor="s-1-2">
        <name>Relationship to Diameter Credit-Control</name>
        <t>Pulse is not a Diameter application, but deliberately reuses proven Diameter Credit-Control
concepts from <xref target="RFC4006"/>: session-based credit control with granted quota (here: the <em>grant</em>),
reporting of used units, and credit pooling — a single abstract unit pool with per-unit-type
multipliers (<xref target="s-6-3"/>), mirroring the Diameter G-S-U-Pool-Reference mechanism. <xref target="RFC8506"/>, which
obsoletes <xref target="RFC4006"/>, is the current specification. The name reflects the protocol's own
rhythm — supervision happens on a regular pulse of reports (heartbeat reports, reporting
cadence, settlement cycles).</t>
      </section>
      <section anchor="s-1-3">
        <name>Scope</name>
        <t>This memo specifies the <strong>charging plane</strong> only: the two operations, their semantics, timing,
idempotency, errors, and security requirements. The management plane (tenant onboarding, plan
authoring, subscriber provisioning, credential administration, reporting) is a separate
surface and is out of scope here.</t>
      </section>
      <section anchor="s-1-4">
        <name>Version-1 scope and deferred items (named)</name>
        <t>Version 1 targets <strong>bounded synchronous and streaming Actions</strong> operated against <strong>one
logical charging domain per tenant</strong>; an Action MUST be operated against the domain that
opened it, and HTTP redirection (3xx) is not used. Quiet periods inside an Action are covered
by heartbeat reports (<xref target="s-7-1"/>). The following are deliberately deferred, not accidentally
missing — each is named so an implementer never mistakes silence for support:</t>
        <ul spacing="normal">
          <li>
            <t><strong>Batch / asynchronous work</strong> (a result returning hours later) has no contract in version 1.</t>
          </li>
          <li>
            <t><strong>Cross-region failover</strong> semantics (retrying against a different charging domain).</t>
          </li>
          <li>
            <t><strong>Pre-grants / bulk authorisation</strong> for latency amortisation (<xref target="s-13-5"/> states version 1's posture).</t>
          </li>
          <li>
            <t><strong>Multi-Action batch reporting / multiplexed transport</strong> (<xref target="s-13-5"/>).</t>
          </li>
          <li>
            <t><strong>An interoperable call-signature profile</strong> (<xref target="s-7-2"/> — the field is reserved).</t>
          </li>
          <li>
            <t><strong>The unit-vocabulary catalogue contract</strong> (distribution of Action-Type unit definitions is
a management-plane artefact; version 1 assumes out-of-band onboarding).</t>
          </li>
          <li>
            <t><strong>Serving-system provenance</strong> (which model or system actually served an Action — a
self-attested, evidence-only telemetry block on reports). No version-1 contract; its design
belongs with the reference-model phase, alongside the evidence-grade question any
self-attested provenance raises.</t>
          </li>
          <li>
            <t><strong>A single owner's cap across several of its own operators</strong> — one company operating
multiple tenants under a jurisdiction-mandated joint bound (the shape of, e.g., German
gambling regulation). In version 1 a relation-scoped bound ranges within one tenant
(<xref target="s-12-1"/>); a cross-tenant bound has no contract.</t>
          </li>
        </ul>
      </section>
    </section>
    <section anchor="s-2">
      <name>Conventions and Terminology</name>
      <t>The key words MUST, MUST NOT, REQUIRED, SHALL, SHALL NOT, SHOULD, SHOULD NOT,
RECOMMENDED, NOT RECOMMENDED, MAY, and OPTIONAL in this document are to be
interpreted as described in BCP 14 <xref target="RFC2119"/> <xref target="RFC8174"/> when, and only when,
they appear in all capitals, as shown here.</t>
      <table>
        <thead>
          <tr>
            <th align="left">Term</th>
            <th align="left">Meaning</th>
          </tr>
        </thead>
        <tbody>
          <tr>
            <td align="left">
              <strong>Charging Server</strong> ("the server")</td>
            <td align="left">The OCS instance implementing this protocol.</td>
          </tr>
          <tr>
            <td align="left">
              <strong>Gateway</strong> ("the client")</td>
            <td align="left">The authenticated system in the AI usage path that requests authorisation and reports consumption.</td>
          </tr>
          <tr>
            <td align="left">
              <strong>Tenant</strong></td>
            <td align="left">The commercial customer of the platform; every credential is bound to one or more tenants.</td>
          </tr>
          <tr>
            <td align="left">
              <strong>Subscriber</strong></td>
            <td align="left">An end user provisioned under a tenant, identified by <tt>accountRef</tt>.</td>
          </tr>
          <tr>
            <td align="left">
              <strong>Action</strong></td>
            <td align="left">The chargeable unit of work (e.g. one agent task, one conversation exchange), identified by a client-asserted <tt>actionId</tt>. An Action contains one or more Calls.</td>
          </tr>
          <tr>
            <td align="left">
              <strong>Call</strong></td>
            <td align="left">One inference invocation within an Action, identified by <tt>callId</tt>.</td>
          </tr>
          <tr>
            <td align="left">
              <strong>Grant</strong></td>
            <td align="left">The server's authorisation to consume up to a stated quantity of pooled units before reporting back, valid until <tt>expiresAt</tt>. Exactly one grant is current per live Action; grants carry a <strong>strictly increasing</strong> generation number (<tt>grantSeq</tt>, +1 per mint — the ending itself mints the final generation, <xref target="s-3-5"/>), and a client discards any grant older than one it has already seen.</td>
          </tr>
          <tr>
            <td align="left">
              <strong>Envelope</strong></td>
            <td align="left">The always-fresh part of a response — <tt>serverTime</tt> and <tt>maxSchemaVersion</tt> on every response (error envelopes included); <tt>actionLive</tt>, <tt>currentGrantSeq</tt>, <tt>currentGrantId</tt>, and per-attempt <tt>unattributable</tt> on every 200 that identifies an opened Action (defined-absent on refusals of unopened Actions and on error envelopes). Computed at each processing, replays included; the client MUST obey the envelope over a replayed body. <tt>actionLive</tt> is monotonic — once <tt>false</tt>, never <tt>true</tt> again — and <strong>scoped precisely</strong>: <tt>false</tt> forbids lifecycle serving under any grant; a flat Action's work is authorised by its settled GRANT itself (<xref target="s-3-3"/>), which is a record, not a serving grant subject to the stale-discard rule.</td>
          </tr>
          <tr>
            <td align="left">
              <strong>Cycle</strong></td>
            <td align="left">One Report exchange: the server settles the reported consumption and, if the Action continues, issues the next grant.</td>
          </tr>
          <tr>
            <td align="left">
              <strong>Action Type</strong></td>
            <td align="left">The declared, catalogue-defined kind of Action; it selects the price entry (the "law") the Action is rated under.</td>
          </tr>
          <tr>
            <td align="left">
              <strong>Ending</strong></td>
            <td align="left">The terminal transition of an Action: CLOSE (client-declared final report), STOP (server-directed stop), or LAPSE (grant validity lapsed without a report).</td>
          </tr>
          <tr>
            <td align="left">
              <strong>Late window</strong></td>
            <td align="left">The period after an ending — until <tt>max(endedAt + 24 h, expiresAt + 1 h)</tt> (<xref target="s-3-5"/>, <xref target="s-7-6"/>) — during which the server retains the Action's terminal state, honours retries, and can still settle late-arriving consumption.</td>
          </tr>
          <tr>
            <td align="left">
              <strong>Sponsor cap</strong></td>
            <td align="left">An aggregate spend bound a sponsoring party declares across a whole population of subscribers (e.g. a reseller capping the total cost of a bundled AI benefit). Enforced at authorisation, attributed to the sponsor in refusals (<xref target="s-12-1"/>).</td>
          </tr>
          <tr>
            <td align="left">
              <strong>Capacity pool</strong></td>
            <td align="left">A tenant-declared provisioned serving rate that Actions of given types draw on. Finite and perishable: what is not admitted now is gone. Enforced at admission (<xref target="s-12-2"/>).</td>
          </tr>
          <tr>
            <td align="left">
              <strong>Meter</strong></td>
            <td align="left">The server's stored per-call cumulative high-water totals for an Action — the authoritative record of reported consumption. Settlement never exceeds the meter.</td>
          </tr>
          <tr>
            <td align="left">
              <strong>Ceiling / headroom</strong></td>
            <td align="left">The ceiling is the maximum total charge an Action (or Action family, <xref target="s-9"/>) may accumulate under its plan; headroom is what remains of it.</td>
          </tr>
          <tr>
            <td align="left">
              <strong>Minimum rate</strong></td>
            <td align="left">The plan-declared serve rate below which degradation (<xref target="s-12-3"/>) is not attempted and the honest answer is <tt>NO_CAPACITY</tt>.</td>
          </tr>
          <tr>
            <td align="left">
              <strong>Integration profile</strong></td>
            <td align="left">The tested record of what a given gateway integration actually does (authorise-before-serving, stop obedience, report promptness, …), established by the conformance suite (<xref target="s-12-4"/>).</td>
          </tr>
        </tbody>
      </table>
      <t>All normative statements about server behaviour ("the server MUST …") are guarantees a client
may rely on; statements about client behaviour are conformance requirements for gateways.</t>
    </section>
    <section anchor="s-3">
      <name>Protocol Overview</name>
      <section anchor="s-3-1">
        <name>Message flow</name>
        <artwork><![CDATA[
Gateway                                   Charging Server
   |                                             |
   |--- POST /ocs/ai/v1/authorizations --------->|   Authorise: may
   |<-- GRANT {grantId, grantedUnits,            |   this Action
   |           reportAt, expiresAt, unitWeights} |   proceed, and on
   |                                             |   what budget?
   |    (gateway serves AI calls, metering       |
   |     consumption against the granted pool)   |
   |                                             |
   |--- POST /ocs/ai/v1/grants/{id}/reports ---->|   Report: usage
   |<-- CONTINUE {next grant}   or               |   so far. Settle
   |    STOP {stopReason}       or               |   and re-grant,
   |    SETTLED                                  |   stop, or settle
   |                                             |   finally.
   |    ... repeat cycles until an ending ...    |
]]></artwork>
        <t>An Action opens with exactly one successful Authorise and ends exactly once (CLOSE, STOP, or
LAPSE). Between opening and ending, the gateway reports at the server-stated thresholds and
the server answers each report with the next directive.</t>
      </section>
      <section anchor="s-3-2">
        <name>The two-message contract</name>
        <t>The protocol is deliberately two messages and no more:</t>
        <ol spacing="normal" type="1"><li>
            <t><strong>Authorise</strong> — the client asks; the server answers GRANT or REFUSE. A refusal means no
chargeable work may proceed; a grant means work up to the granted pool may proceed.</t>
          </li>
          <li>
            <t><strong>Report</strong> — the client reports cumulative consumption; the server settles and answers
CONTINUE (with the next grant), STOP (a <strong>stop obligation</strong>: the client MUST cease serving
the Action's traffic promptly), or SETTLED (final settlement acknowledged).</t>
          </li>
        </ol>
        <t>There is no server-initiated push channel in version 1. The stop obligation is delivered on
the response to a report; grant lapse (<tt>expiresAt</tt>) bounds how long an unreported Action can run.</t>
      </section>
      <section anchor="s-3-3">
        <name>Flat-priced Actions</name>
        <t>An Action whose type is flat-priced settles at open: the Authorise response carries
<tt>decision: GRANT</tt> with <tt>settled: true</tt> and a <tt>grantId</tt> for correlation, and no reports are
expected. <strong>A flat Action ends at authorisation — its ending is CLOSE, its <tt>endedAt</tt> is the
response's <tt>serverTime</tt>, and its late window anchors there.</strong> Its envelope therefore
carries <tt>actionLive: false</tt> with terminal generation 2 — which is correct and does not
countermand the work: the settled GRANT itself is the complete authorisation for the flat
Action's work (<xref target="s-2"/>, Envelope). The opening settlement carries a receipt of <tt>settlementId</tt>
alone (no units existed to accept). A Report addressed to its <tt>grantId</tt> never settles — an
identity match replays; anything else receives the terminal directive, with
<tt>unattributable: true</tt> if units were carried (<xref target="s-3-5"/>). The report-borne controls (call
limits, runtime, signatures, inflation) do not apply to flat Actions by construction —
their controls are the authorisation-time checks (<xref target="s-6-2"/>). All other price forms follow the
report lifecycle.</t>
      </section>
      <section anchor="s-3-4">
        <name>Division of responsibility</name>
        <ul spacing="normal">
          <li>
            <t><strong>The client admits Calls; the server settles money.</strong> The client MUST NOT knowingly serve
consumption beyond the granted pool (checking each next Call against the remaining pool,
which it can compute from <tt>grantedUnits</tt> and <tt>unitWeights</tt>, is the expected mechanism) and
MUST report when the <tt>reportAt</tt> threshold is crossed. The server clamps every settlement at
the reported meter and at the Action's ceiling; overshoot exposure is bounded to one final
report. The permitted <strong>tail</strong>: consumption whose serving began before the report was
dispatched may complete under the old grant and is settled on the next cycle.</t>
          </li>
          <li>
            <t><strong>The server's clock is authoritative</strong> for lapse boundaries and time-band selection. A
client MUST NOT assume its own clock decides either.</t>
          </li>
          <li>
            <t><strong>One in-flight Report per Action.</strong> The client MUST serialise its Reports: at most one
Report (including its retries) is outstanding per Action at any time, and <strong>while a
Report is outstanding the client MUST NOT admit new Calls</strong> — work already begun (the
tail, first bullet above) completes. The server's convergence rules (<xref target="s-3-5"/>) remain the safety net
for the distributed-gateway case where two workers overlap despite this rule.</t>
          </li>
        </ul>
      </section>
      <section anchor="s-3-5">
        <name>The Action state machine (normative)</name>
        <t>This section is the authority for every exchange; the prose of <xref target="s-6"/> and <xref target="s-7"/> restates it and
never overrides it.</t>
        <t><strong>The gates — evaluated before the table, in this order, each state-neutral (<xref target="s-13-1"/>) and
carrying no Action-state envelope:</strong> transport (wrong method → 405, wrong content type →
415) → authentication (401) → gateway ownership (403 — including a <tt>parentActionId</tt> owned
by another gateway, <xref target="s-9"/>) → rate limiting (429) → parse and validation (400 — <xref target="s-4-3"/>, <xref target="s-4-4"/>,
<xref target="s-5"/>) → identity resolution (404 — an unknown <tt>actionId</tt> or <tt>grantId</tt>, or a path <tt>grantId</tt>
that does not belong to the body's Action). Only a request that passes every gate reaches
the table.</t>
        <t><strong>Row evaluation:</strong> within a state, rows are evaluated in the listed order and the first
matching row applies — the table is a function from (state, input) to one outcome.</t>
        <t><strong>States:</strong> <tt>NONE</tt> (the <tt>actionId</tt> is unclaimed) · <tt>LIVE(Gn)</tt> (open; one current grant,
generation <em>n</em>) · <tt>ENDED(e)</tt> (ended as <em>e</em> ∈ {CLOSE, STOP, LAPSE}; recognised) ·
<tt>FORGOTTEN</tt>. A flat-priced Action passes through <tt>LIVE</tt> for zero time: a successful flat
Authorise opens <strong>and ends</strong> it (<tt>ENDED(CLOSE)</tt>) in one transition. <strong>Generations:</strong>
          <strong>every stored outcome mints a generation</strong> (<tt>grantSeq</tt>/outcome generation, strictly +1) —
cycles, the terminal transition, and late adjustments alike — so envelope ordering (<xref target="s-6-3"/>)
and receipt ordering (<xref target="s-7-3"/>) are total, and terminal state is sticky (<tt>actionLive</tt> never
returns to <tt>true</tt>).</t>
        <t><strong>In state <tt>NONE</tt></strong> (a Report cannot reach <tt>NONE</tt> — the identity gate returns 404):</t>
        <table>
          <thead>
            <tr>
              <th align="left">#</th>
              <th align="left">Input</th>
              <th align="left">Outcome</th>
              <th align="left">Next state</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">1</td>
              <td align="left">Authorise, admissible</td>
              <td align="left">
                <tt>GRANT</tt> (lifecycle: G1; flat: settled + <tt>endedAt</tt>)</td>
              <td align="left">
                <tt>LIVE(G1)</tt>; flat: <tt>ENDED(CLOSE)</tt></td>
            </tr>
            <tr>
              <td align="left">2</td>
              <td align="left">Authorise, refused</td>
              <td align="left">200 <tt>REFUSE</tt> + reason (no identity retained)</td>
              <td align="left">
                <tt>NONE</tt></td>
            </tr>
          </tbody>
        </table>
        <t><strong>In state <tt>LIVE(Gn)</tt>:</strong></t>
        <table>
          <thead>
            <tr>
              <th align="left">#</th>
              <th align="left">Input</th>
              <th align="left">Outcome</th>
              <th align="left">Next state</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">1</td>
              <td align="left">Authorise, identity = opening identity</td>
              <td align="left">re-presentation of Gn + its baseline receipt</td>
              <td align="left">
                <tt>LIVE(Gn)</tt></td>
            </tr>
            <tr>
              <td align="left">2</td>
              <td align="left">Authorise, other identity</td>
              <td align="left">200 <tt>REFUSE / DUPLICATE_ACTION</tt></td>
              <td align="left">
                <tt>LIVE(Gn)</tt></td>
            </tr>
            <tr>
              <td align="left">3</td>
              <td align="left">Report whose identity matches a retained outcome</td>
              <td align="left">that stored outcome replayed + fresh envelope</td>
              <td align="left">
                <tt>LIVE(Gn)</tt></td>
            </tr>
            <tr>
              <td align="left">4</td>
              <td align="left">Report, <tt>final: true</tt> (addressed to any grant of this Action)</td>
              <td align="left">the <strong>closing cycle against the current state</strong>: merge → settle the full unsettled meter delta → <tt>SETTLED</tt> + receipt (a close mints no serving grant; the outcome mints its generation)</td>
              <td align="left">
                <tt>ENDED(CLOSE)</tt></td>
            </tr>
            <tr>
              <td align="left">5</td>
              <td align="left">Report addressed to the current grant Gn (<tt>calls[]</tt> MAY be empty — a heartbeat)</td>
              <td align="left">the <strong>fresh cycle</strong> (the primary operation): merge → <strong>settle the full unsettled meter delta</strong> → evaluate ending conditions in precedence order (<xref target="s-7-4"/>): none hold → <tt>CONTINUE</tt>(Gn+1); one holds → <tt>STOP</tt>(reason) + receipt</td>
              <td align="left">
                <tt>LIVE(Gn+1)</tt> · <tt>ENDED(STOP)</tt></td>
            </tr>
            <tr>
              <td align="left">6</td>
              <td align="left">Report addressed to a superseded grant (non-final, no identity match)</td>
              <td align="left">meters max-merge; then ending conditions are evaluated (one raised by the merge ends the Action per precedence, settling at the meter → <tt>STOP</tt> path); none hold → <strong><tt>CURRENT</tt></strong>: the standing grant Gn re-presented + <tt>baselineCumulative</tt> (Gn's cycle baseline) + <tt>meterCumulative</tt> (the post-merge meter). No settlement, no mint.</td>
              <td align="left">
                <tt>LIVE(Gn)</tt> · <tt>ENDED(STOP)</tt></td>
            </tr>
            <tr>
              <td align="left">7</td>
              <td align="left">Server event: grace-end without a report (<tt>now ≥ expiresAt + 5 s</tt>), parent cascade, administrative stop</td>
              <td align="left">
                <strong>settle at the current meter</strong>, then the terminal transition (mints)</td>
              <td align="left">
                <tt>ENDED(LAPSE or STOP)</tt></td>
            </tr>
          </tbody>
        </table>
        <t><strong>In state <tt>ENDED(e)</tt> (while recognised):</strong></t>
        <table>
          <thead>
            <tr>
              <th align="left">#</th>
              <th align="left">Input</th>
              <th align="left">Outcome</th>
              <th align="left">Next state</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">1</td>
              <td align="left">Authorise, identity = opening identity</td>
              <td align="left">terminal acknowledgement (<tt>decision: GRANT</tt>, <tt>settled</tt> where applicable, <tt>ending</tt>, <tt>endedAt</tt>, final receipt)</td>
              <td align="left">
                <tt>ENDED(e)</tt></td>
            </tr>
            <tr>
              <td align="left">2</td>
              <td align="left">Authorise, other identity</td>
              <td align="left">200 <tt>REFUSE / DUPLICATE_ACTION</tt></td>
              <td align="left">
                <tt>ENDED(e)</tt></td>
            </tr>
            <tr>
              <td align="left">3</td>
              <td align="left">Report whose identity matches a retained outcome</td>
              <td align="left">that stored outcome replayed <strong>verbatim</strong> + fresh envelope</td>
              <td align="left">
                <tt>ENDED(e)</tt></td>
            </tr>
            <tr>
              <td align="left">4</td>
              <td align="left">Report to a <strong>flat</strong> Action</td>
              <td align="left">terminal directive (<tt>SETTLED</tt>) — never settles; <tt>unattributable: true</tt> if units were carried (recorded, never charged)</td>
              <td align="left">
                <tt>ENDED(e)</tt></td>
            </tr>
            <tr>
              <td align="left">5</td>
              <td align="left">Report, merge adds new consumption, settleable</td>
              <td align="left">late adjustment: terminal directive + <tt>adjustment: true</tt> + new <tt>settlementId</tt> + receipt (mints its outcome generation)</td>
              <td align="left">
                <tt>ENDED(e)</tt></td>
            </tr>
            <tr>
              <td align="left">6</td>
              <td align="left">Report, merge adds new consumption, not settleable</td>
              <td align="left">terminal directive + <tt>unattributable: true</tt>, no <tt>settlementId</tt>; the unsettled range <strong>marks the Action</strong> — every later zero-merge response also carries <tt>unattributable: true</tt> until it settles or recognition lapses</td>
              <td align="left">
                <tt>ENDED(e)</tt></td>
            </tr>
            <tr>
              <td align="left">7</td>
              <td align="left">Report, merge adds zero</td>
              <td align="left">terminal directive + current receipt (no <tt>adjustment</tt>; sticky <tt>unattributable</tt> where marked)</td>
              <td align="left">
                <tt>ENDED(e)</tt></td>
            </tr>
          </tbody>
        </table>
        <t><strong>The terminal directive</strong> applies to every ENDED-state response <strong>except row 3's verbatim
replays</strong>, and is a pure function of the ending: CLOSE → <tt>SETTLED</tt> · STOP → <tt>STOP</tt> with the
original <tt>stopReason</tt> (and <tt>limitOwner</tt> where it applied) · LAPSE → <tt>STOP (LAPSED)</tt> —
always with <tt>endedAt</tt>. <strong>The ENDED envelope:</strong> <tt>currentGrantSeq</tt> = the latest outcome
generation; <tt>currentGrantId</tt> = the <strong>last issued grant's id</strong> (the address late reports
use). A flat Action: generation 2 and the settled grant's id.</t>
        <t><strong>Arbitration:</strong> processing is serialised; the applicable rules are those of the state at
processing time. The "final beats stop" precedence (<xref target="s-7-5"/>) applies to conditions evaluated
<em>within one report's processing</em> — never to transitions that already committed: a final
report processed after an ending is late handling under the terminal directive.</t>
        <t><strong>Retention (uniform):</strong> the terminal outcome plus the <strong>last 4 non-terminal outcomes</strong>
(cycles and late adjustments share the ring), each carrying its generation. A retry whose
outcome has aged out takes its state's no-match row — safe by construction (<xref target="s-7-2"/>'s
absorption), though its original <tt>settlementId</tt> is then no longer re-presentable (<xref target="s-7-6"/>).
<strong>Recognition</strong> (duplicate detection and the terminal directive) is unconditional until
<strong><tt>max(endedAt + 24 h, expiresAt + 1 h)</tt></strong> — an unseen asynchronous stop can never outlive
the window of the grant that hid it.</t>
        <t><strong>When recognition ends:</strong> <tt>ENDED → FORGOTTEN</tt> — the identity is discarded. Reports →
404, unattributable (<xref target="s-7-6"/>); an Authorise on the id is evaluated <strong>fresh</strong> (this is the
documented reopen residual of <xref target="s-6-5"/>).</t>
      </section>
    </section>
    <section anchor="s-4">
      <name>Transport and Encoding</name>
      <section anchor="s-4-1">
        <name>Endpoints</name>
        <table>
          <thead>
            <tr>
              <th align="left">Operation</th>
              <th align="left">Method and path</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">Authorise</td>
              <td align="left">
                <tt>POST /ocs/ai/v1/authorizations</tt></td>
            </tr>
            <tr>
              <td align="left">Report</td>
              <td align="left">
                <tt>POST /ocs/ai/v1/grants/{grantId}/reports</tt></td>
            </tr>
          </tbody>
        </table>
        <t>Requests and responses are <tt>application/json</tt> bodies, in the JSON format of <xref target="RFC8259"/>,
carried over HTTP <xref target="RFC9110"/> on TLS. TLS 1.2 <xref target="RFC5246"/> or later is REQUIRED
(TLS 1.3 <xref target="RFC8446"/> RECOMMENDED; configuration per <xref target="RFC9325"/>); plaintext HTTP
MUST be refused.
A non-POST method on these paths → 405; a non-JSON content type → 415. These two paths are
the only public charging surface.</t>
      </section>
      <section anchor="s-4-2">
        <name>Authentication</name>
        <t>Every request MUST carry a per-gateway bearer API key (<tt>Authorization: Bearer …</tt>). Keys are
issued per gateway, support dual-active rotation, and are revocable with effect within
seconds. Mutual TLS is a deployment option. OAuth2 client-credentials is planned for a later
protocol version and is not part of version 1.</t>
      </section>
      <section anchor="s-4-3">
        <name>Encoding rules and JSON types (normative)</name>
        <t>Every field has exactly one JSON type; a value of the wrong type is malformed
(<tt>MALFORMED_REQUEST</tt> / <tt>MALFORMED_REPORT</tt>):</t>
        <ul spacing="normal">
          <li>
            <t><strong>Decimal quantities</strong> — unit quantities, <tt>estimate</tt> values, <tt>grantedUnits</tt>, <tt>reportAt</tt>
values, <tt>unitWeights</tt>, <tt>quantumUnits</tt>, <tt>minRate</tt>, and every other decimal — are <strong>JSON
strings in canonical decimal rendering</strong>: plain notation, no exponent, no trailing zeros,
no trailing decimal point, no leading zeros (a bare <tt>0</tt> integer part is the only zero
prefix), no leading <tt>+</tt>, no <tt>-0</tt>, non-negative unless stated otherwise, scale ≤ 6.
Exactly one spelling of every value is valid; any other spelling is malformed — there is
no equivalence class of spellings anywhere in this protocol. (JSON numbers are IEEE-754
doubles and cannot carry scale-6 decimals faithfully; single-spelling strings also make
canonicalization exact, <xref target="s-6-5"/>.) Money never appears on this wire (<xref target="s-15-7"/>).</t>
          </li>
          <li>
            <t><strong>Identifiers</strong> (<tt>actionId</tt>, <tt>callId</tt>, <tt>grantId</tt>, <tt>currentGrantId</tt>, <tt>parentActionId</tt>,
<tt>tenantRef</tt>, <tt>accountRef</tt>, <tt>actionType</tt>, <tt>scope</tt>, <tt>timeBandId</tt>, <tt>settlementId</tt>): JSON
strings, ≤ 128 characters from <tt>[A-Za-z0-9._:-]</tt>.</t>
          </li>
          <li>
            <t><strong>Display labels</strong> (<tt>limitOwner</tt>): UTF-8 JSON strings, ≤ 64 characters of printable text
— no control or bidirectional-control characters; clients render them as plain text,
never as markup. Presentation text declared with the relation, not an identifier.</t>
          </li>
          <li>
            <t><strong>Unit-type names</strong> (map keys in <tt>estimate</tt>, <tt>units</tt>, <tt>unitWeights</tt>, receipt maps):
strings matching <tt>[a-z0-9_]{1,64}</tt>.</t>
          </li>
          <li>
            <t><strong>Timestamps</strong> (<tt>expiresAt</tt>, <tt>serverTime</tt>, <tt>grantIssuedAt</tt>, <tt>endedAt</tt>, <tt>gatewayTime</tt>):
JSON strings in the <xref target="RFC3339"/> profile <tt>YYYY-MM-DDThh:mm:ss.sssZ</tt> — uppercase <tt>T</tt> and <tt>Z</tt>,
exactly three fractional digits, years 1970–9999, no leap seconds.</t>
          </li>
          <li>
            <t><strong>Counts and versions</strong> (<tt>schemaVersion</tt>, <tt>maxSchemaVersion</tt>, <tt>grantSeq</tt>,
<tt>currentGrantSeq</tt>, <tt>lawVersion</tt>, <tt>retryAfter</tt>, <tt>maxCallsPerAction</tt>, <tt>maxRuntimeSec</tt>,
<tt>maxConcurrentActions</tt>, <tt>enforcementWindowSec</tt>): JSON integers ≥ 0 and &lt; 2⁵³.</t>
          </li>
          <li>
            <t><strong>Numeric domains (closed under the arithmetic):</strong> request quantities lie in <tt>[0, 10^9]</tt>
and weights in <tt>[0, 10^6]</tt>, scale ≤ 6; <strong>derived pooled quantities</strong> (<tt>grantedUnits</tt>,
<tt>reportAt</tt>, <tt>quantumUnits</tt>, <tt>cyclePooledUnits</tt>, <tt>baselineCumulative</tt>/<tt>meterCumulative</tt>
pooled values) have their own domain [0, 10¹⁷), scale ≤ 6 — closed under 16 unit types ×
10⁹ × 10⁶. Response maps are bounded by the 16-unit-type limit; <tt>acceptedCalls</tt> by the
256-entry limit. <strong>The 10⁹ per-unit-per-Call cap is a hard operational bound:</strong> a gateway
MUST terminate or segment work before any Call's cumulative value reaches it — it is not
merely a parser limit.</t>
          </li>
          <li>
            <t><strong>Flags</strong> (<tt>final</tt>, <tt>settled</tt>, <tt>retryable</tt>, <tt>rateReduced</tt>, <tt>adjustment</tt>, <tt>clamped</tt>,
<tt>actionLive</tt>, <tt>unattributable</tt>, <tt>signaturesRequired</tt>): JSON booleans.</t>
          </li>
          <li>
            <t><strong>Maps</strong>: JSON objects whose keys are unit-type names and whose values are decimal
strings as above.</t>
          </li>
          <li>
            <t><strong>Duplicate JSON keys</strong> anywhere in a body are malformed.</t>
          </li>
        </ul>
      </section>
      <section anchor="s-4-4">
        <name>Limits (normative)</name>
        <table>
          <thead>
            <tr>
              <th align="left">Limit</th>
              <th align="left">Value</th>
              <th align="left">On violation</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">Request body size</td>
              <td align="left">≤ 256 KB</td>
              <td align="left">400 <tt>LIMIT_EXCEEDED</tt></td>
            </tr>
            <tr>
              <td align="left">
                <tt>calls[]</tt> entries per report</td>
              <td align="left">≤ 256</td>
              <td align="left">400 <tt>LIMIT_EXCEEDED</tt></td>
            </tr>
            <tr>
              <td align="left">Unit-map entries per Call</td>
              <td align="left">≤ 16</td>
              <td align="left">400 <tt>LIMIT_EXCEEDED</tt></td>
            </tr>
            <tr>
              <td align="left">Per-call unit quantity</td>
              <td align="left">≤ 10⁹</td>
              <td align="left">400 <tt>LIMIT_EXCEEDED</tt></td>
            </tr>
            <tr>
              <td align="left">Cumulative per-unit-type total per Action</td>
              <td align="left">≤ 10⁹</td>
              <td align="left">400 <tt>LIMIT_EXCEEDED</tt></td>
            </tr>
          </tbody>
        </table>
      </section>
    </section>
    <section anchor="s-5">
      <name>Schema Versioning</name>
      <t>Every request MUST carry <tt>schemaVersion</tt> (integer ≥ 1); every response echoes it and
additionally carries <tt>maxSchemaVersion</tt>. Two version layers with distinct roles: the URL
path (<tt>/v1/</tt>) changes only for <strong>incompatible</strong> protocol generations; <tt>schemaVersion</tt>
evolves <strong>compatibly</strong> within a generation, and a server MUST support every schema version
from 1 through its <tt>maxSchemaVersion</tt> within the path generation it serves.</t>
      <ul spacing="normal">
        <li>
          <t>Fields belong to schema versions. A client MUST NOT send a field beyond the version it
declares; the server rejects fields not in the declared version (strict parse per version —
unknown members are rejected, never ignored).</t>
        </li>
        <li>
          <t>An unknown <tt>schemaVersion</tt> → 400 <tt>UNSUPPORTED_SCHEMA</tt>. If <tt>schemaVersion</tt> itself is
missing or unparseable, the error response carries <tt>maxSchemaVersion</tt> but cannot echo a
version (the one exception to echoing).</t>
        </li>
        <li>
          <t>The server-side value sets (<tt>refusalReason</tt>, <tt>stopReason</tt>, <tt>errorCode</tt>, <tt>decision</tt>,
<tt>directive</tt>, <tt>ending</tt>, <tt>grade</tt>, <tt>reduceCause</tt>) are closed per
version, but clients MUST tolerate unknown strings in these fields — treating an unknown
<tt>refusalReason</tt> as a refusal, an unknown <tt>stopReason</tt> as a stop obligation, an unknown
<tt>errorCode</tt> as the error class its HTTP status indicates, an unknown <tt>directive</tt> as a
stop obligation, an unknown <tt>decision</tt> as a refusal, an unknown <tt>ending</tt> as STOP, an
unknown <tt>grade</tt> as BOUNDED, and an unknown <tt>reduceCause</tt> as CAPACITY.</t>
        </li>
        <li>
          <t><strong>Responses are version-bounded too:</strong> a server sends only fields belonging to the echoed
<tt>schemaVersion</tt>; a client reads responses tolerantly, acting on the fields of its
declared version and ignoring unknown members (response reading is tolerant; request
parsing stays strict).</t>
        </li>
        <li>
          <t>The reason/code registries are owned by this document; new values are allocated only by a
new schema version of this specification (no private-use values in version 1). While the
series is unpublished, a draft MAY rename a registry value, recording the rename in
its change history; once published, a renamed value is a new value. The registries
and their allocation policy are stated in <xref target="s-17"/>.</t>
        </li>
      </ul>
      <t><strong>Protocol versions are cited major.minor.</strong> The major is the path generation (<tt>/v1/</tt>); the
minor identifies one compatible addition set within it, and each minor version binds to
exactly one wire <tt>schemaVersion</tt>. The wire carries only the integer — the dotted form is
the human citation, and "version 1" unqualified means the generation.</t>
      <table>
        <thead>
          <tr>
            <th align="left">Protocol version</th>
            <th align="left">Wire schemaVersion</th>
            <th align="left">Surface</th>
          </tr>
        </thead>
        <tbody>
          <tr>
            <td align="left">1.0</td>
            <td align="left">1</td>
            <td align="left">The base contract (the draft-effortel-circ-05/-06 surface).</td>
          </tr>
          <tr>
            <td align="left">1.1</td>
            <td align="left">2</td>
            <td align="left">Adds the <tt>GROUP_VELOCITY</tt> refusal reason, the refusal fields <tt>automatedDecision</tt> and <tt>reviewContact</tt> (<xref target="s-6-4"/>), and the per-call <tt>startedAt</tt> evidence field (<xref target="s-7-2"/>).</td>
          </tr>
        </tbody>
      </table>
      <t><strong>Fields versus values under version skew.</strong> A new <strong>field</strong> never crosses a version
boundary: a client MUST NOT send a field beyond its declared <tt>schemaVersion</tt> (strict parse
rejects it), and a server sends only the fields of the echoed version — a version-1.0
client therefore never sees <tt>automatedDecision</tt> or <tt>reviewContact</tt>. A new <strong>value</strong> in an
existing closed set MAY reach an older client: the tolerance fallbacks above exist for
exactly this skew, and the server always refuses with the true reason rather than
mislabelling it under an older value — a version-1.0 client refused for a group-velocity
bound receives <tt>refusalReason: GROUP_VELOCITY</tt> and treats it as the generic refusal the
fallback prescribes.</t>
    </section>
    <section anchor="s-6">
      <name>The Authorise Operation</name>
      <t><tt>POST /ocs/ai/v1/authorizations</tt></t>
      <section anchor="s-6-1">
        <name>Request</name>
        <table>
          <thead>
            <tr>
              <th align="left">Field</th>
              <th align="left">Requirement</th>
              <th align="left">Meaning</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">
                <tt>schemaVersion</tt></td>
              <td align="left">REQUIRED</td>
              <td align="left">See <xref target="s-5"/>.</td>
            </tr>
            <tr>
              <td align="left">
                <tt>actionId</tt></td>
              <td align="left">REQUIRED</td>
              <td align="left">Client-asserted Action identity. SHOULD be asserted by the application originating the work; a gateway-fabricated id is permitted but downgrades attribution quality (known per contract). <strong>Never legally reusable</strong> (<xref target="s-6-5"/>).</td>
            </tr>
            <tr>
              <td align="left">
                <tt>tenantRef</tt></td>
              <td align="left">REQUIRED</td>
              <td align="left">The tenant under which the subscriber is provisioned. MUST be within the credential's bound tenant set.</td>
            </tr>
            <tr>
              <td align="left">
                <tt>accountRef</tt></td>
              <td align="left">REQUIRED</td>
              <td align="left">The subscriber identity under that tenant.</td>
            </tr>
            <tr>
              <td align="left">
                <tt>actionType</tt></td>
              <td align="left">REQUIRED</td>
              <td align="left">The declared Action Type. Undeclared/unknown types are refused (<tt>NO_LAW</tt>) — the plan's vocabulary is a whitelist; there is no default.</td>
            </tr>
            <tr>
              <td align="left">
                <tt>estimate</tt></td>
              <td align="left">RECOMMENDED</td>
              <td align="left">Expected consumption (units per unit type). Validated like a report's units: keys MUST be unit types declared by the Action Type, ≤ 16 entries (else <tt>MALFORMED_REQUEST</tt>). Used to size the opening reservation; a good estimate reduces both refusal risk and over-reservation.</td>
            </tr>
            <tr>
              <td align="left">
                <tt>scope</tt></td>
              <td align="left">OPTIONAL</td>
              <td align="left">An opaque funding-scope label. Funding buckets provisioned with a matching scope become eligible; exclusive-scope buckets fund only matching Actions and never fall through to general funds. Values are plan-defined.</td>
            </tr>
            <tr>
              <td align="left">
                <tt>parentActionId</tt></td>
              <td align="left">OPTIONAL</td>
              <td align="left">Declares this Action a child of an open parent Action of the same subscriber (<xref target="s-9"/>).</td>
            </tr>
            <tr>
              <td align="left">
                <tt>gatewayTime</tt></td>
              <td align="left">OPTIONAL</td>
              <td align="left">The gateway's clock at the <strong>first attempt</strong> — preserved verbatim on retries (it is part of the request identity). Recorded as evidence, never enforced against (<xref target="s-15-6"/>).</td>
            </tr>
          </tbody>
        </table>
      </section>
      <section anchor="s-6-2">
        <name>Processing</name>
        <t>The server resolves the subscriber, verifies tenancy (<xref target="s-15"/>), selects the price entry for the
declared Action Type from the subscriber's plan (pinning the plan version — the Action is
rated under that law for its entire life), resolves the applicable time band if the type is
banded (<xref target="s-10"/>). It then verifies budget headroom (the opening reservation covers the estimated charge,
any contractual minimum, and rounding), verifies the shared bounds (any sponsor cap and the
applicable capacity pool, <xref target="s-12"/>), applies the trust limits (<xref target="s-15-4"/>), and answers.</t>
      </section>
      <section anchor="s-6-3">
        <name>Response — GRANT</name>
        <table>
          <thead>
            <tr>
              <th align="left">Field</th>
              <th align="left">Present</th>
              <th align="left">Meaning</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">
                <tt>decision</tt></td>
              <td align="left">always</td>
              <td align="left">
                <tt>GRANT</tt> or <tt>REFUSE</tt>.</td>
            </tr>
            <tr>
              <td align="left">
                <tt>grantId</tt></td>
              <td align="left">every grant</td>
              <td align="left">Correlates the lifecycle; on a flat-priced Action it correlates the settled Action.</td>
            </tr>
            <tr>
              <td align="left">
                <tt>grantSeq</tt></td>
              <td align="left">every grant</td>
              <td align="left">Monotonic generation number per Action. A client MUST discard any grant whose <tt>grantSeq</tt> is lower than one it has already seen for the Action.</td>
            </tr>
            <tr>
              <td align="left">
                <tt>grantIssuedAt</tt></td>
              <td align="left">every lifecycle grant</td>
              <td align="left">The grant's issue instant — replay-stable; the base of the capacity-rate window (<xref target="s-12-2"/>).</td>
            </tr>
            <tr>
              <td align="left">
                <tt>grantedUnits</tt></td>
              <td align="left">lifecycle grants</td>
              <td align="left">The granted pool, in abstract pooled units.</td>
            </tr>
            <tr>
              <td align="left">
                <tt>reportAt</tt></td>
              <td align="left">lifecycle grants</td>
              <td align="left">The consumption threshold at which the client MUST report.</td>
            </tr>
            <tr>
              <td align="left">
                <tt>expiresAt</tt></td>
              <td align="left">lifecycle grants</td>
              <td align="left">Grant validity instant (<xref target="s-8"/>).</td>
            </tr>
            <tr>
              <td align="left">
                <tt>unitWeights</tt></td>
              <td align="left">every lifecycle grant (all price forms, including free)</td>
              <td align="left">Pool multipliers per unit type — the <strong>complete</strong> map, constant for the Action's whole life (pinned with the law): consuming quantity <em>q</em> of unit type <em>u</em> draws <tt>q × weight(u)</tt> from the pool. Weights are positive decimals, scale ≤ 6; each product is rounded HALF_UP at scale 6, and products are summed exactly. Ratios, not prices.</td>
            </tr>
            <tr>
              <td align="left">
                <tt>quantumUnits</tt></td>
              <td align="left">quantised Action Types</td>
              <td align="left">The block size in pooled units: consumption is charged in whole blocks; the client SHOULD expect pool draw-down in block increments.</td>
            </tr>
            <tr>
              <td align="left">
                <tt>timeBandId</tt></td>
              <td align="left">banded Action Types (including flat)</td>
              <td align="left">The time band fixed at opening (<xref target="s-10"/>).</td>
            </tr>
            <tr>
              <td align="left">
                <tt>serverTime</tt></td>
              <td align="left">every response — <strong>envelope</strong>, always fresh, never replayed</td>
              <td align="left">The server clock at this processing — the authoritative time reference (<xref target="s-8"/>).</td>
            </tr>
            <tr>
              <td align="left">
                <tt>actionLive</tt>, <tt>currentGrantSeq</tt>, <tt>currentGrantId</tt></td>
              <td align="left">every Action-identifying 200 — <strong>envelope</strong>, always fresh</td>
              <td align="left">The live truth: whether the Action is open (monotonic — once <tt>false</tt>, never <tt>true</tt>), the current generation, and the current grant's opaque address (<tt>currentGrantId</tt> — the recovery handle: a restarted client reports against it). On any response, replays included, the client MUST obey the envelope over the stored body: <tt>actionLive: false</tt> means stop; <tt>currentGrantSeq</tt> above a replayed grant's <tt>grantSeq</tt> means that grant is stale.</td>
            </tr>
            <tr>
              <td align="left">
                <tt>lawVersion</tt></td>
              <td align="left">every lifecycle grant</td>
              <td align="left">The pinned plan/price-book version (integer) this Action rates under — for client-side correlation with the tenant's published catalogue; opaque otherwise.</td>
            </tr>
            <tr>
              <td align="left">
                <tt>limits</tt></td>
              <td align="left">every lifecycle grant</td>
              <td align="left">The enforceable caps: <tt>maxCallsPerAction</tt> (int, always), <tt>maxRuntimeSec</tt> (int, <strong>always</strong> — plan value or platform default; measured from the Action's opening <tt>grantIssuedAt</tt>, exceeded when <tt>now &gt; open + maxRuntimeSec</tt>; also bounds heartbeat-only renewal), <tt>maxConcurrentActions</tt> (int, always — subscriber-level), <tt>signaturesRequired</tt> (bool, where configured), <tt>minRate</tt> (decimal string, pooled units <strong>per second</strong>, where a capacity pool applies), <tt>enforcementWindowSec</tt> (int, where a capacity pool applies — the window over which consumed rate is accounted, <xref target="s-12-2"/>). Disclosed so a gateway can plan work instead of discovering limits through stops.</td>
            </tr>
            <tr>
              <td align="left">
                <tt>rateReduced</tt></td>
              <td align="left">when capacity pressure reduced this grant (opening or continuation)</td>
              <td align="left">
                <tt>true</tt>, with <tt>reduceCause: "CAPACITY"</tt> (<xref target="s-12-3"/>).</td>
            </tr>
            <tr>
              <td align="left">
                <tt>settled</tt></td>
              <td align="left">flat-priced Actions</td>
              <td align="left">
                <tt>true</tt>: charged at open; no reports, no validity.</td>
            </tr>
          </tbody>
        </table>
        <t><strong>Grant invariants (normative):</strong> every issued grant satisfies <tt>grantedUnits &gt; 0</tt>,
<tt>0 &lt; reportAt ≤ grantedUnits</tt>, <tt>quantumUnits &gt; 0</tt> where present,
<tt>expiresAt &gt; grantIssuedAt</tt>, and <strong>reachability</strong>: <tt>reportAt</tt> MUST be attainable within the
Action's cumulative caps under the grant's weights. A response violating them is a server
defect; the client treats it as a 5xx-equivalent and retries the identical request.</t>
        <section anchor="s-6-3-1">
          <name>Client obligations under a grant</name>
          <t>The client MAY serve Calls until the earliest of: pool exhaustion, the cycle delta reaching
<tt>reportAt</tt> (≥, <xref target="s-7-7"/>), or <tt>expiresAt</tt>. It MUST report at <tt>reportAt</tt>; it MUST NOT knowingly
serve consumption beyond the granted pool other than the tail defined in <xref target="s-3-4"/>.</t>
        </section>
      </section>
      <section anchor="s-6-4">
        <name>Response — REFUSE</name>
        <t><tt>refusalReason</tt> registry (version 1):</t>
        <table>
          <thead>
            <tr>
              <th align="left">Reason</th>
              <th align="left">Meaning</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">
                <tt>NO_HEADROOM</tt></td>
              <td align="left">The opening reservation cannot be fully funded. Partial funding is never granted.</td>
            </tr>
            <tr>
              <td align="left">
                <tt>CEILING_PREEMPT</tt></td>
              <td align="left">The Action's ceiling (or its family's, <xref target="s-9"/>) leaves no room.</td>
            </tr>
            <tr>
              <td align="left">
                <tt>ACCOUNT_VELOCITY</tt></td>
              <td align="left">Account-level velocity limit engaged.</td>
            </tr>
            <tr>
              <td align="left">
                <tt>BALANCE_VELOCITY</tt></td>
              <td align="left">Balance-level velocity limit engaged.</td>
            </tr>
            <tr>
              <td align="left">
                <tt>GROUP_VELOCITY</tt></td>
              <td align="left">Group-level velocity limit engaged: a rate bound across a declared group of related accounts. Version 1.1 (<xref target="s-5"/>).</td>
            </tr>
            <tr>
              <td align="left">
                <tt>MAX_CONCURRENT_ACTIONS</tt></td>
              <td align="left">The subscriber's concurrent-Action cap is reached.</td>
            </tr>
            <tr>
              <td align="left">
                <tt>PARENT_STOPPED</tt></td>
              <td align="left">The declared parent Action is not open.</td>
            </tr>
            <tr>
              <td align="left">
                <tt>NO_LAW</tt></td>
              <td align="left">No applicable price entry: unknown Action Type, no plan, or unknown identities on a declared tenant.</td>
            </tr>
            <tr>
              <td align="left">
                <tt>DRAINING</tt></td>
              <td align="left">The service is draining (an operator-controlled, temporary state): new Actions are refused. Always retryable, with <tt>retryAfter</tt> (<xref target="s-11"/>).</td>
            </tr>
            <tr>
              <td align="left">
                <tt>BLOCKED_TARIFF</tt></td>
              <td align="left">The plan blocks this Action Type for this subscriber.</td>
            </tr>
            <tr>
              <td align="left">
                <tt>SERVICE_BARRED</tt></td>
              <td align="left">The subscriber's state bars service.</td>
            </tr>
            <tr>
              <td align="left">
                <tt>DUPLICATE_ACTION</tt></td>
              <td align="left">The <tt>actionId</tt> belongs to an <strong>opened</strong> Action and the request identity differs (<xref target="s-6-5"/>).</td>
            </tr>
            <tr>
              <td align="left">
                <tt>EXPOSURE_CAP</tt></td>
              <td align="left">A sponsor's aggregate bound across its population is reached; <tt>limitOwner</tt> names the sponsor (<xref target="s-12-1"/>).</td>
            </tr>
            <tr>
              <td align="left">
                <tt>NO_CAPACITY</tt></td>
              <td align="left">The applicable capacity pool cannot admit the Action at or above the declared minimum rate (<xref target="s-12-2"/>). Always retryable, with <tt>retryAfter</tt>.</td>
            </tr>
            <tr>
              <td align="left">
                <tt>PREEMPTED</tt></td>
              <td align="left">A capacity commitment was reclaimed under the declared pressure policy before the grant could stand (<xref target="s-12-2"/>). Always retryable.</td>
            </tr>
            <tr>
              <td align="left">
                <tt>CLASS_BLOCKED</tt></td>
              <td align="left">Reserved; never emitted in version 1.</td>
            </tr>
          </tbody>
        </table>
        <t><strong>Every refusal additionally carries:</strong></t>
        <table>
          <thead>
            <tr>
              <th align="left">Field</th>
              <th align="left">Present</th>
              <th align="left">Meaning</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">
                <tt>retryable</tt></td>
              <td align="left">always on refuse</td>
              <td align="left">Whether the identical request MAY succeed later with nothing changed but time. Version-1 retryable reasons — exactly seven: the transient-scarcity six (<tt>NO_CAPACITY</tt>, <tt>PREEMPTED</tt>, <tt>ACCOUNT_VELOCITY</tt>, <tt>BALANCE_VELOCITY</tt>, <tt>GROUP_VELOCITY</tt>, <tt>MAX_CONCURRENT_ACTIONS</tt>) plus <tt>DRAINING</tt>. Every other reason is <tt>retryable: false</tt>.</td>
            </tr>
            <tr>
              <td align="left">
                <tt>retryAfter</tt></td>
              <td align="left">REQUIRED when <tt>retryable: true</tt></td>
              <td align="left">Seconds to wait before retrying the identical request.</td>
            </tr>
            <tr>
              <td align="left">
                <tt>grade</tt></td>
              <td align="left">always on refuse</td>
              <td align="left">The evidence behind the reason: <tt>PROVEN</tt> (the server's own arithmetic on its own records), <tt>ATTESTED</tt> (an operator process decided), or <tt>BOUNDED</tt> (true within a stated window, no stronger). A client MUST NOT present more certainty to the end user than the grade holds.</td>
            </tr>
            <tr>
              <td align="left">
                <tt>limitOwner</tt></td>
              <td align="left">on a party-scoped bound</td>
              <td align="left">Names whose limit was reached (e.g. the sponsor's), so an end user is never shown a generic "insufficient funds" for someone else's cap.</td>
            </tr>
            <tr>
              <td align="left">
                <tt>automatedDecision</tt></td>
              <td align="left">always on refuse, from version 1.1 (<xref target="s-5"/>)</td>
              <td align="left">
                <tt>true</tt> in version 1: the refusal was decided by machine, with no human in the loop (<xref target="s-15-7"/>). Carried on the decision itself so the notice travels with the refusal it describes.</td>
            </tr>
            <tr>
              <td align="left">
                <tt>reviewContact</tt></td>
              <td align="left">when the tenant configures one, from version 1.1 (<xref target="s-5"/>)</td>
              <td align="left">A human-review channel — a URI or plain-text contact — through which the refused party can have the decision re-examined by a person. Display text under the <tt>limitOwner</tt> presentation rules (printable characters only, rendered as plain text, never markup); tenant-configured and echoed by the server. A client SHOULD present it alongside the refusal it accompanies.</td>
            </tr>
          </tbody>
        </table>
        <t>Version-1 grades: <tt>NO_CAPACITY</tt> and <tt>PREEMPTED</tt> are <tt>BOUNDED</tt>; <tt>SERVICE_BARRED</tt> and
<tt>DRAINING</tt> are <tt>ATTESTED</tt>; every other reason is <tt>PROVEN</tt>.</t>
        <t>A refusal is a complete outcome: no budget is held, nothing is charged, and the client MUST
NOT serve the work. <strong>A refusal retains no identity</strong>: no Action opens, the <tt>actionId</tt>
remains unclaimed, and any later Authorise carrying it — identical or different — is
evaluated fresh. <tt>DUPLICATE_ACTION</tt> applies only against Actions that actually opened.
Concurrent identical Authorises are serialised per subscriber; if one opens the Action, the
other lands on live-Action replay (<xref target="s-6-5"/>).</t>
      </section>
      <section anchor="s-6-5">
        <name>Idempotency, request identity, and identifier scopes</name>
        <t><strong>Request identity</strong> is <tt>SHA-256</tt> over the JSON Canonicalization Scheme (JCS) <xref target="RFC8785"/> canonicalization of the
strict-parsed request body (duplicate or unknown members are rejected before hashing, <xref target="s-5"/>);
for Reports, the path <tt>grantId</tt> is appended to the canonical bytes before hashing. Because
every decimal travels as a canonical string (<xref target="s-4-3"/>), JCS needs no number-rendering caveats.
Two requests with equal canonical form are the same request. Test vectors accompany the
conformance suite.</t>
        <t><strong>Identifier scopes:</strong> <tt>actionId</tt> is unique within its (tenant, account) pair — two tenants
can never collide; <tt>callId</tt> is unique within its Action; <tt>grantId</tt> is server-issued, opaque,
and unique within the charging domain. Server recognition retention is the late window (<xref target="s-7-6"/>).</t>
        <t><strong>Authorise always answers in the Authorise shape</strong> — a replay re-presents facts, it never
returns a stored Report body:</t>
        <ul spacing="normal">
          <li>
            <t>Retry of a live Action (same <tt>actionId</tt>, matching identity) → <tt>decision: GRANT</tt>
re-presenting the <strong>current standing grant</strong> (current <tt>grantSeq</tt> and parameters) <strong>plus
its cycle-baseline receipt</strong> (<tt>acceptedCumulative</tt> at the settlement that issued it), so
a restarted gateway recovers both the address and the remaining pool — with a fresh
envelope.</t>
          </li>
          <li>
            <t>Retry of an ended Action within the late window (matching identity) → an Authorise-shaped
terminal acknowledgement: <tt>decision: GRANT</tt>, <tt>settled</tt> where applicable, the ending,
<tt>endedAt</tt>, and the final receipt; a flat-priced Action's retry re-receives
<tt>GRANT/settled: true</tt>, never a refusal.</t>
          </li>
          <li>
            <t>Same <tt>actionId</tt> as an <strong>opened</strong> Action, different identity → 200
<tt>REFUSE / DUPLICATE_ACTION</tt> (a charging refusal like any other — identity conflicts are
not HTTP errors).</t>
          </li>
          <li>
            <t>An <tt>actionId</tt> that opened an Action is never legally reusable, including after the Action
ends. Beyond the late window the server no longer guarantees replay; a client MUST NOT
rely on replay after it.</t>
          </li>
        </ul>
        <t>Clients MUST serialise a retry as the identical logical request: JCS removes JSON key-order
differences, and nothing else — there is no equivalence class of spellings (<xref target="s-4-3"/> admits
exactly one spelling of every value; any other is malformed before identity is ever
computed). Any byte difference that survives canonicalization is a different request.</t>
      </section>
    </section>
    <section anchor="s-7">
      <name>The Report Operation</name>
      <t><tt>POST /ocs/ai/v1/grants/{grantId}/reports</tt></t>
      <section anchor="s-7-1">
        <name>Request</name>
        <table>
          <thead>
            <tr>
              <th align="left">Field</th>
              <th align="left">Requirement</th>
              <th align="left">Meaning</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">
                <tt>schemaVersion</tt></td>
              <td align="left">REQUIRED</td>
              <td align="left">See <xref target="s-5"/>.</td>
            </tr>
            <tr>
              <td align="left">
                <tt>actionId</tt></td>
              <td align="left">REQUIRED</td>
              <td align="left">The Action being reported.</td>
            </tr>
            <tr>
              <td align="left">
                <tt>tenantRef</tt>, <tt>accountRef</tt></td>
              <td align="left">REQUIRED</td>
              <td align="left">Identity resolution; MUST match the Action's.</td>
            </tr>
            <tr>
              <td align="left">
                <tt>calls[]</tt></td>
              <td align="left">REQUIRED</td>
              <td align="left">Per-call cumulative totals (<xref target="s-7-2"/>). <strong>MAY be empty</strong>: an empty <tt>calls[]</tt> with <tt>final: false</tt> is a <strong>heartbeat</strong> — an ordinary fresh cycle (<xref target="s-3-5"/>) that settles whatever unsettled meter delta exists (normally zero) and renews the grant — the lease-renewal mechanism for quiet periods; it passes through the same stop-condition precedence as any cycle.</td>
            </tr>
            <tr>
              <td align="left">
                <tt>final</tt></td>
              <td align="left">REQUIRED</td>
              <td align="left">
                <tt>true</tt> declares this the closing report (the CLOSE ending).</td>
            </tr>
            <tr>
              <td align="left">
                <tt>gatewayTime</tt></td>
              <td align="left">OPTIONAL</td>
              <td align="left">As in <xref target="s-6-1"/> — recorded, never enforced against (<xref target="s-15-6"/>).</td>
            </tr>
          </tbody>
        </table>
      </section>
      <section anchor="s-7-2">
        <name>Cumulative semantics (normative)</name>
        <t>Each <tt>calls[]</tt> entry is <tt>{callId, units, startedAt?, signature?}</tt> where <tt>units</tt> is a map of unit type →
<strong>cumulative total for that Call since the Call began</strong> — not a delta; values are canonical
decimal strings (<xref target="s-4-3"/>). <tt>calls[]</tt> is a <strong>keyed patch</strong>, not a snapshot: only Calls with
changed totals need appear; an omitted <tt>callId</tt> reads as unchanged; a <tt>callId</tt> never seen
before initialises all its declared units at zero baseline; <strong>two entries with the same
<tt>callId</tt> in one request are malformed</strong>. The calls-per-Action limit counts <strong>distinct
<tt>callId</tt>s</strong> over the Action's life. Unit keys MUST be among those declared by the pinned
Action Type (undeclared keys are malformed); declared keys absent from an entry read as
unchanged. <tt>signature</tt> is <strong>reserved in version 1</strong>: an opaque string, recorded verbatim.
Its verification profile is bilateral and out of band, and <tt>SIGNATURES_REQUIRED</tt> (<xref target="s-7-4"/>)
applies only where such a profile is agreed. <tt>startedAt</tt> (version 1.1, <xref target="s-5"/>) is OPTIONAL
evidence: the instant the Call began at the serving system (timestamp, <xref target="s-4-3"/>). Like <tt>gatewayTime</tt> it is recorded
and never enforced against (<xref target="s-15-6"/>), and it can never re-price anything — the Action's time
band is pinned at open (<xref target="s-10"/>), so no client-reported timestamp changes a charge. Its value is
that the moment consumption <em>occurred</em>, not merely the moment it was <em>reported</em>, survives
into the audit record. It SHOULD carry the same value on every entry for a given <tt>callId</tt>;
the server retains it under the audit retention rules (<xref target="s-15-7"/>).</t>
        <t><strong>Monotonicity and out-of-order delivery:</strong> a reported value lower than the server's stored
high-water for that Call and unit is <em>absorbed</em>: the meter is the per-value maximum, so a
stale, reordered, or replayed report charges zero and is never an error — this is what makes
the arithmetic immune to retries, duplicates, and delivery order. (Within one request there
is no shrinking case to define: duplicate <tt>callId</tt> entries are malformed outright.)</t>
        <t>Cumulative reporting is what makes the protocol retry-safe: a replayed report or replayed
call entry moves the cumulative meter by zero and therefore charges zero. The server settles
each cycle as the <em>increment of the rated cumulative consumption</em> under the pinned law —
never rating the same consumption twice, for any price form.</t>
        <t><strong>Pool arithmetic (normative — one cumulative pipeline, cadence-independent):</strong> everything
is computed on <strong>Action-cumulative</strong> quantities, and every charge or threshold is a <strong>delta
of cumulatives</strong> — never a rounded delta. Per unit type <em>u</em>:
<tt>cumulativePooled_u = HALF_UP₆(weight_u × cumulativeTotal_u)</tt>; the Action's pooled total is
the exact sum over unit types. For quantised forms, blocks apply to that cumulative pooled
total — <tt>blocksCharged = ceil(cumulativePooled / quantumUnits)</tt> — and each cycle charges the
newly completed blocks (the cumulative-rated rule). <tt>reportAt</tt> and pool exhaustion compare
<strong>raw</strong> (unquantised) pooled-total deltas against the cycle baseline. Because rounding and
quantisation are applied only to cumulative values, report segmentation provably cannot
change any charge.</t>
      </section>
      <section anchor="s-7-3">
        <name>Response</name>
        <table>
          <thead>
            <tr>
              <th align="left">Directive</th>
              <th align="left">Meaning</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">
                <tt>CONTINUE</tt></td>
              <td align="left">Settlement done; the next grant is included (<tt>grantId</tt>, <tt>grantedUnits</tt>, <tt>reportAt</tt>, <tt>expiresAt</tt>, <tt>unitWeights</tt>, <tt>serverTime</tt>, and the other grant fields of <xref target="s-6-3"/>). The tail (<xref target="s-3-4"/>) is served under the old grant and settled on the next cycle. Under capacity pressure the next grant MAY be reduced (<xref target="s-12-3"/>), flagged <tt>rateReduced: true</tt>.</td>
            </tr>
            <tr>
              <td align="left">
                <tt>STOP</tt></td>
              <td align="left">Settlement done; <strong>stop obligation</strong> — the client MUST promptly cease serving the Action's traffic. <tt>stopReason</tt> per <xref target="s-7-4"/>; <tt>endedAt</tt> states the ending instant (the late window's start). Consumption already in flight is reportable afterwards (<xref target="s-7-6"/> / <xref target="s-8"/>).</td>
            </tr>
            <tr>
              <td align="left">
                <tt>SETTLED</tt></td>
              <td align="left">Final settlement acknowledged. Returned for a <tt>final: true</tt> close and for every non-replay terminal response of a <strong>CLOSE-ended</strong> Action (the terminal directive is a function of the ending, <xref target="s-3-5"/>: STOP-ended Actions answer <tt>STOP</tt>, LAPSE-ended answer <tt>STOP (LAPSED)</tt>); late adjustments are flagged <tt>adjustment: true</tt>. Carries <tt>endedAt</tt>.</td>
            </tr>
            <tr>
              <td align="left">
                <tt>CURRENT</tt></td>
              <td align="left">No settlement occurred (<xref target="s-3-5"/> LIVE row 6): the response to a stale, non-final, unrecognised report — the standing grant re-presented (its full <xref target="s-6-3"/> grant fields) plus <tt>baselineCumulative</tt> (that grant's cycle baseline) and <tt>meterCumulative</tt> (the post-merge meter). The client resynchronises: pool draw-down = weighted(<tt>meterCumulative</tt> − <tt>baselineCumulative</tt>).</td>
            </tr>
          </tbody>
        </table>
        <t>This distributed-worker convergence flow is illustrative; it does not relax the
one-in-flight requirement of <xref target="s-3-4"/>. The CURRENT branch shown is the no-ending-condition
branch of <xref target="s-3-5"/> LIVE row 6:</t>
        <artwork><![CDATA[
Gateway worker A   Charging Server      Gateway worker B
    |                     |                     |
    |--- Report on G1 --->|                     |
    |<-- CONTINUE G2 -----|                     |
    |                     |<-- stale non-final -|
    |                     |    G1; no retained- |
    |                     |    id match         |
    |                     | max-merge meter;    |
    |                     | evaluate ending     |
    |                     | conditions          |
    |                     |--- CURRENT G2 + --->|
    |                     |    baseline +       |
    |                     |    post-merge meter |
    |                     |    no settlement,   |
    |                     |    no mint          |
    |                     |                     | B resynchronizes
]]></artwork>
        <t><strong>Cycle baseline (normative):</strong> <tt>grantedUnits</tt> and <tt>reportAt</tt> are <strong>cycle-scoped</strong>, and the
baseline is a <em>meter state</em>, not an instant: a cycle's consumption is the weighted pooled
delta (<xref target="s-7-2"/> arithmetic) between <strong>the accepted meter at the settlement that issued the
grant</strong> — the <tt>acceptedCumulative</tt> of that response; zero for the first grant — and the
current meter. Both sides can compute it exactly: the client from its last receipt, the
server from its stored meter. Report <em>values</em> remain Action-cumulative (<xref target="s-7-2"/>). Tail
consumption lands in whichever cycle's report first carries it — the cumulative arithmetic
makes double-counting impossible.</t>
        <t><strong>Settlement receipt:</strong> every settling response (CONTINUE, STOP, SETTLED) carries
<tt>settlementId</tt> (stable per settlement; a replay returns the same id), <tt>acceptedCumulative</tt>
(the server's post-merge Action totals — a <strong>complete</strong> map over the declared unit types),
<strong><tt>acceptedCalls</tt></strong> (an <strong>array</strong> of <tt>{callId, units}</tt> entries — the per-call accepted
cumulative values for exactly the Calls present in this request, ≤ 256 entries), and
<tt>cyclePooledUnits</tt> (the <strong>raw</strong> pooled delta settled this cycle, pre-quantisation), plus
where applicable <tt>clamped: true</tt> (limited by the meter or a ceiling) and <tt>adjustment: true</tt>
(a late settlement). A client holding several receipts trusts the one from the
highest-generation outcome. Receipts are denominated in <strong>units only</strong> — no balance, price,
or currency ever crosses this wire.</t>
        <t><strong>Response replay and convergence:</strong> governed entirely by the state machine (<xref target="s-3-5"/>) — the
server serialises all of one Action's operations; only a fresh Report on the current grant
runs a cycle and mints; identity-matched retries replay their stored outcome under a fresh
envelope; non-matching reports converge (a <tt>final: true</tt> close is always honoured against
the current state; non-final ones max-merge and answer <tt>CURRENT</tt>); retention is the
terminal outcome plus the last 4 non-terminal outcomes — an aged retry converges safely,
though its original <tt>settlementId</tt> is then no longer re-presentable (<xref target="s-7-6"/>). A lost
<tt>CONTINUE</tt> is therefore always recoverable: retry the identical request (replay), or
report against <tt>currentGrantId</tt> from any response's envelope. <tt>acceptedCalls</tt> appears on
Report responses only.</t>
        <t>The lost-response path below illustrates the request identity and replay rules of <xref target="s-6-5"/> and
this section. <tt>R</tt> includes the Report body and its path <tt>grantId</tt>; <tt>S</tt> is the stable
settlement receipt. The retry remains the same logical Report for <xref target="s-3-4"/>:</t>
        <artwork><![CDATA[
Gateway                          Charging Server
   |                                    |
   |--- Report R against current Gn --->|
   |                                    | merge, settle, and
   |                                    | atomically store
   |                                    | CONTINUE G(n+1) + S
   |<-- CONTINUE G(n+1) + receipt S --X |  response lost
   |                                    |
   |--- identical retry of R ---------->|
   |                                    | retained identity
   |                                    | matches
   |<-- stored CONTINUE + receipt S ----|  body replay; fresh
   |                                    |  envelope; no
   |                                    |  settlement, no mint
]]></artwork>
      </section>
      <section anchor="s-7-4">
        <name><tt>stopReason</tt> registry (version 1)</name>
        <table>
          <thead>
            <tr>
              <th align="left">Reason</th>
              <th align="left">Meaning</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">
                <tt>CEILING_REACHED</tt></td>
              <td align="left">The Action (or family) ceiling is exhausted.</td>
            </tr>
            <tr>
              <td align="left">
                <tt>NO_HEADROOM</tt></td>
              <td align="left">Funds cannot cover a further grant.</td>
            </tr>
            <tr>
              <td align="left">
                <tt>CALL_LIMIT</tt></td>
              <td align="left">The calls-per-Action limit was reached (always enforced; the settlement of the limit-crossing report is completed first).</td>
            </tr>
            <tr>
              <td align="left">
                <tt>MAX_RUNTIME</tt></td>
              <td align="left">The Action exceeded its maximum runtime.</td>
            </tr>
            <tr>
              <td align="left">
                <tt>INFLATION</tt></td>
              <td align="left">A consumption-inflation trust wire tripped.</td>
            </tr>
            <tr>
              <td align="left">
                <tt>SIGNATURES_REQUIRED</tt></td>
              <td align="left">The Action Type requires call signatures and they were absent.</td>
            </tr>
            <tr>
              <td align="left">
                <tt>PARENT_STOPPED</tt></td>
              <td align="left">The parent Action ended; children are stopped (<xref target="s-9"/>).</td>
            </tr>
            <tr>
              <td align="left">
                <tt>ADMIN_FORCED</tt></td>
              <td align="left">Operator intervention.</td>
            </tr>
            <tr>
              <td align="left">
                <tt>DRAINING</tt></td>
              <td align="left">The service is draining: settlement completed, no re-grants are issued.</td>
            </tr>
            <tr>
              <td align="left">
                <tt>NO_CAPACITY</tt></td>
              <td align="left">Capacity fell below the declared minimum serve rate; continuing usefully is impossible, so the server stops honestly rather than degrading past use (<xref target="s-12-3"/>).</td>
            </tr>
            <tr>
              <td align="left">
                <tt>EXPOSURE_CAP</tt></td>
              <td align="left">The sponsor's aggregate bound was exhausted mid-Action; <tt>limitOwner</tt> names the sponsor (<xref target="s-12-1"/>).</td>
            </tr>
            <tr>
              <td align="left">
                <tt>LAPSED</tt></td>
              <td align="left">The grant's validity lapsed — returned for the grace-window close (<xref target="s-7-5"/>), and as the terminal directive of every LAPSE-ended Action's later responses (<xref target="s-3-5"/>).</td>
            </tr>
          </tbody>
        </table>
        <t><strong>Precedence (normative):</strong> <tt>final: true</tt> beats every server stop condition → <tt>SETTLED</tt>
(<xref target="s-7-5"/>), draining included. For a non-final report on which several stop conditions hold at
once, the reported <tt>stopReason</tt> is the first that applies in this order: <tt>ADMIN_FORCED</tt> ·
<tt>DRAINING</tt> · <tt>PARENT_STOPPED</tt> · <tt>LAPSED</tt> · <tt>CEILING_REACHED</tt> · <tt>EXPOSURE_CAP</tt> ·
<tt>NO_HEADROOM</tt> · <tt>CALL_LIMIT</tt> · <tt>MAX_RUNTIME</tt> · <tt>INFLATION</tt> · <tt>SIGNATURES_REQUIRED</tt> ·
<tt>NO_CAPACITY</tt> — and the stored terminal outcome records that same reason, so replays agree.</t>
      </section>
      <section anchor="s-7-5">
        <name>Lapse boundary (normative)</name>
        <t>With <tt>now</tt> being the server clock at processing:</t>
        <ul spacing="normal">
          <li>
            <t><tt>now &lt; expiresAt</tt> → normal processing; <tt>CONTINUE</tt> is possible.</t>
          </li>
          <li>
            <t><tt>expiresAt ≤ now &lt; expiresAt + 5 s</tt> → the report is accepted as the <strong>closing report</strong>:
consumption is settled and the directive is <tt>SETTLED</tt> when <tt>final: true</tt>, else
<tt>STOP (LAPSED)</tt> — never <tt>CONTINUE</tt>.</t>
          </li>
          <li>
            <t><tt>now ≥ expiresAt + 5 s</tt> → the Action is ended as LAPSE (if it wasn't already — the
transition instant is the same either way, <xref target="s-3-5"/>) and the report is processed as a late
report (<xref target="s-7-6"/>).</t>
          </li>
        </ul>
        <t>The following diagram illustrates those branches; <xref target="s-3-5"/> and the rules above remain
authoritative, including the stored-outcome replay exception:</t>
        <artwork><![CDATA[
Gateway                      Charging Server (`now`)
   |                                    |
   |--- Report ------------------------>|
   |                                    +-- now < expiresAt
   |                                    |   normal processing;
   |                                    |   CONTINUE is possible
   |                                    |
   |                                    +-- expiresAt <= now
   |                                    |   < expiresAt + 5 s
   |                                    |   final=true: SETTLED
   |                                    |   final=false:
   |                                    |   STOP (LAPSED)
   |                                    |
   |                                    `-- now >= expiresAt + 5 s
   |                                        ENDED(LAPSE), with
   |                                        endedAt=expiresAt+5 s;
   |<-- response under selected branch --    late handling
   |                                        (section 7.6)
]]></artwork>
        <t><strong>Precedence:</strong> on a <tt>final: true</tt> report, the client's close wins over any concurrent
server stop condition — the response is <tt>SETTLED</tt> (the stop obligation is moot once the
client has ended the Action). A late report can never revive a grant. A client that wants to
continue past <tt>expiresAt</tt> MUST have reported before it.</t>
        <t><strong>The LAPSE instant (normative):</strong> an Action that ends as LAPSE has
<strong><tt>endedAt = expiresAt + 5 s</tt></strong> — by definition, whether the ending is physically performed
by a timer, a sweep, or the first post-grace report. Both sides can compute the late
window's anchor from the grant alone. CLOSE and STOP endings record their processing
instant as <tt>endedAt</tt>.</t>
      </section>
      <section anchor="s-7-6">
        <name>Late reports and the late window</name>
        <t>While recognised — until <tt>max(endedAt + 24 h, expiresAt + 1 h)</tt> (<xref target="s-3-5"/>; <tt>endedAt</tt> is
carried on every terminal response) — the server:</t>
        <ul spacing="normal">
          <li>
            <t><strong>MUST retain recognition</strong>: replay of stored responses to recognised retries (matching
request identity) and duplicate-<tt>actionId</tt> detection are <strong>unconditional</strong> for the full
window — this guarantee does not degrade.</t>
          </li>
          <li>
            <t><strong>Settles genuinely new consumption</strong> reported late: the cumulative meters are merged
upward, and the increment of rated consumption — floored at zero, clamped by the remaining
ceiling — is charged under the Action's pinned law and returned with <strong>the ending's
terminal directive</strong> (<xref target="s-3-5"/>), <tt>adjustment: true</tt>, and a receipt (<xref target="s-7-3"/>). Contractual minimums are never applied a second
time. Repeated late reports charge each unit at most once. Late-<strong>settlement</strong> capability
(unlike recognition) is best-effort under extreme retention pressure — an exceptional,
server-metered condition; a late report the server recognises but can no longer settle is
answered with the stored terminal outcome plus <strong><tt>unattributable: true</tt></strong> and <strong>no new
<tt>settlementId</tt></strong> — the response says plainly that the new units were not settled (they
are recorded unattributable). A non-matching terminal report whose merge adds zero
receives the terminal outcome with the current receipt and no <tt>adjustment</tt> flag.</t>
          </li>
        </ul>
        <t>Beyond the late window, reports against unknown identities receive 404 and the traffic is
recorded as unattributable — recorded, never charged.</t>
      </section>
      <section anchor="s-7-7">
        <name>Reporting cadence requirements</name>
        <t>A client MUST report when the cycle's pooled consumption delta reaches <tt>reportAt</tt>
(comparator: <strong>≥</strong>), and SHOULD report
promptly on its own initiative when an Action ends client-side (with <tt>final: true</tt>). Batching
beyond <tt>reportAt</tt> increases the client's overshoot exposure, which the protocol bounds to one
final report but does not eliminate.</t>
        <t><strong>On receiving STOP</strong>, the client MUST stop admitting new Calls immediately, SHOULD cancel
cancellable in-flight work, and MUST flush the final meter — dispatching the first flush
report <strong>within 30 seconds</strong> (a hard per-event deadline, distinct from the statistical
promptness profile of <xref target="s-12-4"/>); when more than 256 Calls changed, the flush spans serialised
256-call chunks continued back-to-back. <strong>The flush obligation fires once per ending</strong>: a
STOP directive received in response to the flush itself, a replay, or a late response does
not re-trigger it. Uncancellable work may complete, and its consumption reports late
(<xref target="s-7-6"/>).</t>
      </section>
    </section>
    <section anchor="s-8">
      <name>Timing Summary</name>
      <table>
        <thead>
          <tr>
            <th align="left">Instant</th>
            <th align="left">Source</th>
            <th align="left">Effect</th>
          </tr>
        </thead>
        <tbody>
          <tr>
            <td align="left">
              <tt>reportAt</tt></td>
            <td align="left">grant</td>
            <td align="left">Consumption threshold: the client MUST report on crossing it.</td>
          </tr>
          <tr>
            <td align="left">
              <tt>expiresAt</tt></td>
            <td align="left">grant</td>
            <td align="left">Grant validity end. Reports within a 5 s grace settle as closing; beyond it the Action ends as LAPSE.</td>
          </tr>
          <tr>
            <td align="left">
              <tt>max(endedAt + 24 h, expiresAt + 1 h)</tt></td>
            <td align="left">terminal response + last grant</td>
            <td align="left">Late-window end: recognition unconditional until it; late consumption settleable within it (<xref target="s-7-6"/>).</td>
          </tr>
        </tbody>
      </table>
      <t>All boundaries are evaluated on the server clock. Every response carries <tt>serverTime</tt>
(<xref target="s-6-3"/>), the authoritative reference: the client SHOULD track the offset between <tt>serverTime</tt>
and its own clock plus the measured round-trip, and dispatch its pre-lapse report with at
least that margin in hand — a report sent "before the lapse" by the client's clock but
processed after it lands in the closing or late branch.</t>
      <section anchor="s-8-1">
        <name>Protocol constants and configurables</name>
        <t>This table is a descriptive index to the defining prose, not a second source of rules.
Where a value is a recommendation or a configured value, the table says so; where two
statements are not fully harmonised, it preserves both without choosing between them.
"Deployment-configurable" includes plan-, catalogue-, integration-, client-, and
server-policy values.</t>
        <t><strong>Fixed in protocol.</strong></t>
        <table>
          <thead>
            <tr>
              <th align="left">Name</th>
              <th align="left">Value</th>
              <th align="left">Defining section</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">Protocol generation</td>
              <td align="left">Version 1 (<tt>/v1/</tt>)</td>
              <td align="left">
                <xref target="s-1-4"/>, <xref target="s-4-1"/>, <xref target="s-5"/></td>
            </tr>
            <tr>
              <td align="left">Charging operation count</td>
              <td align="left">Exactly two: Authorise and Report</td>
              <td align="left">
                <xref target="s-3-2"/></td>
            </tr>
            <tr>
              <td align="left">Authorise endpoint</td>
              <td align="left">
                <tt>POST /ocs/ai/v1/authorizations</tt></td>
              <td align="left">
                <xref target="s-4-1"/></td>
            </tr>
            <tr>
              <td align="left">Report endpoint</td>
              <td align="left">
                <tt>POST /ocs/ai/v1/grants/{grantId}/reports</tt></td>
              <td align="left">
                <xref target="s-4-1"/></td>
            </tr>
            <tr>
              <td align="left">Media and transport</td>
              <td align="left">
                <tt>application/json</tt> over HTTPS; plaintext refused</td>
              <td align="left">
                <xref target="s-4-1"/></td>
            </tr>
            <tr>
              <td align="left">Request authentication</td>
              <td align="left">A per-gateway bearer API key in every request; OAuth2 is not in version 1</td>
              <td align="left">
                <xref target="s-4-2"/></td>
            </tr>
            <tr>
              <td align="left">Redirect posture</td>
              <td align="left">HTTP 3xx is not used</td>
              <td align="left">
                <xref target="s-1-4"/></td>
            </tr>
            <tr>
              <td align="left">Charging-domain topology</td>
              <td align="left">One logical charging domain per tenant in version 1</td>
              <td align="left">
                <xref target="s-1-4"/></td>
            </tr>
            <tr>
              <td align="left">Action lifecycle cardinality</td>
              <td align="left">One successful Authorise; one ending</td>
              <td align="left">
                <xref target="s-3-1"/></td>
            </tr>
            <tr>
              <td align="left">Current grant cardinality</td>
              <td align="left">Exactly one per live Action</td>
              <td align="left">
                <xref target="s-2"/></td>
            </tr>
            <tr>
              <td align="left">Outstanding Report cardinality</td>
              <td align="left">At most one logical Report per Action</td>
              <td align="left">
                <xref target="s-3-4"/></td>
            </tr>
            <tr>
              <td align="left">Opening and mint generations</td>
              <td align="left">Lifecycle opening is G1; each mint is exactly +1; a flat terminal envelope is generation 2</td>
              <td align="left">
                <xref target="s-2"/>, <xref target="s-3-3"/>, <xref target="s-3-5"/></td>
            </tr>
            <tr>
              <td align="left">Outcome retention ring</td>
              <td align="left">Terminal outcome plus the last 4 non-terminal outcomes; cycles and late adjustments share the ring</td>
              <td align="left">
                <xref target="s-3-5"/>, <xref target="s-7-3"/></td>
            </tr>
            <tr>
              <td align="left">Lapse grace</td>
              <td align="left">5 s</td>
              <td align="left">
                <xref target="s-3-5"/>, <xref target="s-7-5"/>, <xref target="s-8"/></td>
            </tr>
            <tr>
              <td align="left">LAPSE instant</td>
              <td align="left">
                <tt>endedAt = expiresAt + 5 s</tt></td>
              <td align="left">
                <xref target="s-7-5"/></td>
            </tr>
            <tr>
              <td align="left">Recognition / late window</td>
              <td align="left">Until <tt>max(endedAt + 24 h, expiresAt + 1 h)</tt></td>
              <td align="left">
                <xref target="s-2"/>, <xref target="s-3-5"/>, <xref target="s-7-6"/>, <xref target="s-8"/></td>
            </tr>
            <tr>
              <td align="left">Decimal scale and rendering</td>
              <td align="left">Canonical decimal JSON string; scale at most 6; the lexical exclusions are in <xref target="s-4-3"/></td>
              <td align="left">
                <xref target="s-4-3"/></td>
            </tr>
            <tr>
              <td align="left">Request-quantity domain</td>
              <td align="left">
                <tt>[0, 10^9]</tt>, scale at most 6</td>
              <td align="left">
                <xref target="s-4-3"/></td>
            </tr>
            <tr>
              <td align="left">Per-call and Action/unit parser caps</td>
              <td align="left">Each is at most <tt>10^9</tt></td>
              <td align="left">
                <xref target="s-4-4"/></td>
            </tr>
            <tr>
              <td align="left">Per-call operational segmentation point</td>
              <td align="left">Terminate or segment before a Call's cumulative value reaches <tt>10^9</tt></td>
              <td align="left">
                <xref target="s-4-3"/></td>
            </tr>
            <tr>
              <td align="left">Weight domain</td>
              <td align="left">
                <tt>[0, 10^6]</tt>, scale at most 6; issued weights are positive</td>
              <td align="left">
                <xref target="s-4-3"/>, <xref target="s-6-3"/></td>
            </tr>
            <tr>
              <td align="left">Derived pooled domain</td>
              <td align="left">
                <tt>[0, 10^17)</tt>, scale at most 6, for the fields named in <xref target="s-4-3"/></td>
              <td align="left">
                <xref target="s-4-3"/></td>
            </tr>
            <tr>
              <td align="left">Identifier syntax</td>
              <td align="left">At most 128 characters from <tt>[A-Za-z0-9._:-]</tt></td>
              <td align="left">
                <xref target="s-4-3"/></td>
            </tr>
            <tr>
              <td align="left">Display-label syntax</td>
              <td align="left">At most 64 printable UTF-8 characters; no control or bidirectional-control characters</td>
              <td align="left">
                <xref target="s-4-3"/></td>
            </tr>
            <tr>
              <td align="left">Unit-type syntax</td>
              <td align="left">
                <tt>[a-z0-9_]{1,64}</tt></td>
              <td align="left">
                <xref target="s-4-3"/></td>
            </tr>
            <tr>
              <td align="left">Timestamp profile</td>
              <td align="left">
                <tt>YYYY-MM-DDThh:mm:ss.sssZ</tt>; 3 fractional digits; years 1970-9999; no leap seconds</td>
              <td align="left">
                <xref target="s-4-3"/></td>
            </tr>
            <tr>
              <td align="left">Count/version integer domain</td>
              <td align="left">JSON integer <tt>0 &lt;= n &lt; 2^53</tt>; <tt>schemaVersion &gt;= 1</tt></td>
              <td align="left">
                <xref target="s-4-3"/>, <xref target="s-5"/></td>
            </tr>
            <tr>
              <td align="left">Compatible schema support</td>
              <td align="left">Every version from 1 through <tt>maxSchemaVersion</tt></td>
              <td align="left">
                <xref target="s-5"/></td>
            </tr>
            <tr>
              <td align="left">Request-body limit</td>
              <td align="left">At most 256 KB; the memo does not define the KB base</td>
              <td align="left">
                <xref target="s-4-4"/></td>
            </tr>
            <tr>
              <td align="left">Report patch size</td>
              <td align="left">At most 256 <tt>calls[]</tt> entries</td>
              <td align="left">
                <xref target="s-4-4"/></td>
            </tr>
            <tr>
              <td align="left">Unit-map size</td>
              <td align="left">At most 16 entries per Call; <tt>estimate</tt> and response maps share the 16-unit bound</td>
              <td align="left">
                <xref target="s-4-3"/>, <xref target="s-4-4"/>, <xref target="s-6-1"/></td>
            </tr>
            <tr>
              <td align="left">Receipt call count</td>
              <td align="left">
                <tt>acceptedCalls</tt> has at most 256 entries and covers exactly the Calls in the settling Report</td>
              <td align="left">
                <xref target="s-4-3"/>, <xref target="s-7-3"/></td>
            </tr>
            <tr>
              <td align="left">Grant inequalities</td>
              <td align="left">
                <tt>grantedUnits &gt; 0</tt>; <tt>0 &lt; reportAt &lt;= grantedUnits</tt>; <tt>quantumUnits &gt; 0</tt> where present; <tt>expiresAt &gt; grantIssuedAt</tt></td>
              <td align="left">
                <xref target="s-6-3"/></td>
            </tr>
            <tr>
              <td align="left">Pooled product rounding</td>
              <td align="left">
                <tt>HALF_UP</tt> at scale 6 per cumulative unit-type product; exact sum</td>
              <td align="left">
                <xref target="s-6-3"/>, <xref target="s-7-2"/></td>
            </tr>
            <tr>
              <td align="left">Quantised rating</td>
              <td align="left">
                <tt>ceil(cumulativePooled / quantumUnits)</tt>; charge block deltas</td>
              <td align="left">
                <xref target="s-7-2"/></td>
            </tr>
            <tr>
              <td align="left">Threshold and exhaustion basis</td>
              <td align="left">Raw, unquantised pooled-total delta from the cycle baseline</td>
              <td align="left">
                <xref target="s-7-2"/></td>
            </tr>
            <tr>
              <td align="left">Report threshold comparator</td>
              <td align="left">Dispatch when the cycle delta is <tt>&gt;= reportAt</tt></td>
              <td align="left">
                <xref target="s-7-7"/></td>
            </tr>
            <tr>
              <td align="left">Threshold / closing cadence</td>
              <td align="left">
                <xref target="s-7-7"/> requires threshold dispatch and recommends a prompt client close; <xref target="s-12-4"/> says both are due immediately outside the profile bound</td>
              <td align="left">
                <xref target="s-7-7"/>, <xref target="s-12-4"/></td>
            </tr>
            <tr>
              <td align="left">STOP flush</td>
              <td align="left">First chunk within 30 s, once per ending; chunks of at most 256 changed Calls back-to-back</td>
              <td align="left">
                <xref target="s-7-7"/>, <xref target="s-14"/></td>
            </tr>
            <tr>
              <td align="left">Retry backoff recommendation</td>
              <td align="left">Initial 1 s, factor 2, full jitter, cap 30 s (recommendation)</td>
              <td align="left">
                <xref target="s-13-3"/></td>
            </tr>
            <tr>
              <td align="left">Client attempt deadline recommendation</td>
              <td align="left">2 s per attempt (recommendation)</td>
              <td align="left">
                <xref target="s-13-5"/></td>
            </tr>
            <tr>
              <td align="left">TLS versions</td>
              <td align="left">TLS 1.2 or later required; TLS 1.3 recommended; <xref target="RFC9325"/> configuration</td>
              <td align="left">
                <xref target="s-4-1"/>, <xref target="s-15-1"/></td>
            </tr>
            <tr>
              <td align="left">Request-identity algorithm</td>
              <td align="left">SHA-256 over JCS <xref target="RFC8785"/>; append path <tt>grantId</tt> for Report</td>
              <td align="left">
                <xref target="s-6-5"/></td>
            </tr>
            <tr>
              <td align="left">Explicit HTTP status mappings</td>
              <td align="left">200, 400, 401, 403, 404, 405, 415, 429, and 503 as mapped</td>
              <td align="left">
                <xref target="s-3-5"/>, <xref target="s-4-1"/>, <xref target="s-13-1"/></td>
            </tr>
            <tr>
              <td align="left">Additional server-error class</td>
              <td align="left">
                <tt>INTERNAL</tt> is status-mirroring; retry guidance covers 5xx generally, whose exact statuses are not enumerated</td>
              <td align="left">
                <xref target="s-13-1"/>, <xref target="s-13-3"/></td>
            </tr>
            <tr>
              <td align="left">HTTP retry header</td>
              <td align="left">
                <tt>Retry-After</tt> on 429 and 503</td>
              <td align="left">
                <xref target="s-13-1"/></td>
            </tr>
            <tr>
              <td align="left">HTTP connection posture</td>
              <td align="left">HTTP/2 connection reuse is assumed (operational assumption)</td>
              <td align="left">
                <xref target="s-13-5"/></td>
            </tr>
            <tr>
              <td align="left">Current protocol version</td>
              <td align="left">1.1 — generation 1, wire <tt>schemaVersion</tt> 2; each minor binds to one <tt>schemaVersion</tt></td>
              <td align="left">
                <xref target="s-5"/></td>
            </tr>
            <tr>
              <td align="left">Retryable refusal set</td>
              <td align="left">Exactly seven reasons from version 1.1 (six in 1.0), enumerated in <xref target="s-6-4"/></td>
              <td align="left">
                <xref target="s-5"/>, <xref target="s-6-4"/></td>
            </tr>
            <tr>
              <td align="left">Closed per-version value sets</td>
              <td align="left">Decision, refusal reason, stop reason, error code, ending, directive, grade, and reduce cause; initial values in <xref target="s-17"/>; additions bind to minor versions per <xref target="s-5"/>'s version table</td>
              <td align="left">
                <xref target="s-5"/>, <xref target="s-17"/></td>
            </tr>
            <tr>
              <td align="left">API-key rotation and revocation posture</td>
              <td align="left">Dual-active rotation; revocation effective "within seconds"</td>
              <td align="left">
                <xref target="s-4-2"/>, <xref target="s-15-1"/></td>
            </tr>
          </tbody>
        </table>
        <t><strong>Deployment-configurable.</strong></t>
        <table>
          <thead>
            <tr>
              <th align="left">Name</th>
              <th align="left">Value</th>
              <th align="left">Defining section</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">Refusal human-review channel (<tt>reviewContact</tt>)</td>
              <td align="left">Tenant-configured; absent unless configured</td>
              <td align="left">
                <xref target="s-6-4"/>, <xref target="s-15-7"/></td>
            </tr>
            <tr>
              <td align="left">Sponsor-cap accounting window</td>
              <td align="left">Part of the sponsor's declaration (credits per period); boundary mechanics deployment-profile in version 1</td>
              <td align="left">
                <xref target="s-12-1"/></td>
            </tr>
            <tr>
              <td align="left">
                <tt>maxSchemaVersion</tt></td>
              <td align="left">Highest compatible schema supported; <tt>1 &lt;= n &lt; 2^53</tt></td>
              <td align="left">
                <xref target="s-4-3"/>, <xref target="s-5"/></td>
            </tr>
            <tr>
              <td align="left">
                <tt>grantedUnits</tt></td>
              <td align="left">Server-selected per cycle within the pooled domain and grant inequalities</td>
              <td align="left">
                <xref target="s-4-3"/>, <xref target="s-6-3"/>, <xref target="s-12-2"/> to <xref target="s-12-3"/></td>
            </tr>
            <tr>
              <td align="left">
                <tt>reportAt</tt></td>
              <td align="left">Server-selected per cycle; <tt>0 &lt; reportAt &lt;= grantedUnits</tt></td>
              <td align="left">
                <xref target="s-6-3"/>, <xref target="s-7-7"/></td>
            </tr>
            <tr>
              <td align="left">Grant validity / <tt>expiresAt</tt></td>
              <td align="left">Server-selected instant after <tt>grantIssuedAt</tt>; no default duration stated</td>
              <td align="left">
                <xref target="s-6-3"/>, <xref target="s-8"/>, <xref target="s-12-3"/></td>
            </tr>
            <tr>
              <td align="left">Action-Type vocabulary</td>
              <td align="left">Catalogue-defined, whitelisted, and distributed out of band</td>
              <td align="left">
                <xref target="s-1-4"/>, <xref target="s-6-1"/></td>
            </tr>
            <tr>
              <td align="left">
                <tt>unitWeights</tt></td>
              <td align="left">Positive plan/law ratios, at most <tt>10^6</tt>, pinned for the Action</td>
              <td align="left">
                <xref target="s-4-3"/>, <xref target="s-6-3"/></td>
            </tr>
            <tr>
              <td align="left">Price form and <tt>lawVersion</tt></td>
              <td align="left">Catalogue/plan choice; the selected law version is pinned</td>
              <td align="left">
                <xref target="s-3-3"/>, <xref target="s-6-2"/> to <xref target="s-6-3"/></td>
            </tr>
            <tr>
              <td align="left">Quantisation / <tt>quantumUnits</tt></td>
              <td align="left">Action-Type choice; positive pooled decimal where used</td>
              <td align="left">
                <xref target="s-6-3"/>, <xref target="s-7-2"/></td>
            </tr>
            <tr>
              <td align="left">Time-band schedule / <tt>timeBandId</tt></td>
              <td align="left">Tenant-published full-week schedule; band selected once at opening</td>
              <td align="left">
                <xref target="s-6-3"/>, <xref target="s-10"/></td>
            </tr>
            <tr>
              <td align="left">Action or family ceiling</td>
              <td align="left">Plan-defined internal ceiling; no monetary value appears on the wire</td>
              <td align="left">
                <xref target="s-2"/>, <xref target="s-6-2"/>, <xref target="s-9"/>, <xref target="s-15-7"/></td>
            </tr>
            <tr>
              <td align="left">Contractual minimum</td>
              <td align="left">Plan-defined; applied as described at open and not a second time late</td>
              <td align="left">
                <xref target="s-6-2"/>, <xref target="s-7-6"/></td>
            </tr>
            <tr>
              <td align="left">Funding scope and buckets</td>
              <td align="left">Plan-defined <tt>scope</tt>, eligibility, and exclusivity</td>
              <td align="left">
                <xref target="s-6-1"/></td>
            </tr>
            <tr>
              <td align="left">
                <tt>limits.maxCallsPerAction</tt></td>
              <td align="left">Always disclosed; integer in the count domain; counts distinct Calls over the Action</td>
              <td align="left">
                <xref target="s-4-3"/>, <xref target="s-6-3"/>, <xref target="s-7-2"/></td>
            </tr>
            <tr>
              <td align="left">
                <tt>limits.maxRuntimeSec</tt></td>
              <td align="left">
                <xref target="s-6-3"/> says always disclosed as a plan value or platform default and exceeded when <tt>now &gt; open + value</tt>; <xref target="s-15-4"/> calls maximum runtime optional per deployment/plan</td>
              <td align="left">
                <xref target="s-4-3"/>, <xref target="s-6-3"/>, <xref target="s-15-4"/></td>
            </tr>
            <tr>
              <td align="left">
                <tt>limits.maxConcurrentActions</tt></td>
              <td align="left">Always disclosed subscriber-level integer cap</td>
              <td align="left">
                <xref target="s-4-3"/>, <xref target="s-6-3"/>, <xref target="s-15-4"/></td>
            </tr>
            <tr>
              <td align="left">
                <tt>limits.signaturesRequired</tt></td>
              <td align="left">Boolean where a bilateral signature profile is configured</td>
              <td align="left">
                <xref target="s-6-3"/>, <xref target="s-7-2"/>, <xref target="s-15-4"/></td>
            </tr>
            <tr>
              <td align="left">Call-signature profile</td>
              <td align="left">Bilateral and out of band; no field-specific size cap is stated</td>
              <td align="left">
                <xref target="s-1-4"/>, <xref target="s-7-2"/></td>
            </tr>
            <tr>
              <td align="left">
                <tt>limits.minRate</tt></td>
              <td align="left">Capacity-only pooled units per second; exact upper numeric domain is not stated</td>
              <td align="left">
                <xref target="s-4-3"/>, <xref target="s-6-3"/>, <xref target="s-12-2"/> to <xref target="s-12-3"/></td>
            </tr>
            <tr>
              <td align="left">
                <tt>limits.enforcementWindowSec</tt></td>
              <td align="left">Capacity-only integer seconds, greater than 0; exact algorithm provisional</td>
              <td align="left">
                <xref target="s-4-3"/>, <xref target="s-6-3"/>, <xref target="s-12-2"/></td>
            </tr>
            <tr>
              <td align="left">Sponsor cap and owner label</td>
              <td align="left">Sponsor-defined aggregate internal bound and presentation-safe label</td>
              <td align="left">
                <xref target="s-12-1"/>, <xref target="s-15-7"/></td>
            </tr>
            <tr>
              <td align="left">Capacity pool</td>
              <td align="left">Tenant-defined provisioned rate and named Action-Type membership</td>
              <td align="left">
                <xref target="s-12-2"/></td>
            </tr>
            <tr>
              <td align="left">Capacity pressure / reclamation policy</td>
              <td align="left">Deployment-declared; no numeric default stated</td>
              <td align="left">
                <xref target="s-6-4"/>, <xref target="s-12-2"/> to <xref target="s-12-3"/></td>
            </tr>
            <tr>
              <td align="left">Integration promptness bound</td>
              <td align="left">Agreed per integration; provisional version-1 default is 30 s at p95</td>
              <td align="left">
                <xref target="s-12-4"/></td>
            </tr>
            <tr>
              <td align="left">Refusal-body <tt>retryAfter</tt></td>
              <td align="left">Server-selected integer seconds, required when <tt>retryable: true</tt></td>
              <td align="left">
                <xref target="s-4-3"/>, <xref target="s-6-4"/></td>
            </tr>
            <tr>
              <td align="left">Error-envelope retry members</td>
              <td align="left">
                <tt>retryable</tt> and <tt>retryAfter</tt> are independently optional; no status coupling or numeric default is stated</td>
              <td align="left">
                <xref target="s-13-1"/></td>
            </tr>
            <tr>
              <td align="left">HTTP <tt>Retry-After</tt> value</td>
              <td align="left">Server-selected on 429 and 503; Pulse states no minimum or maximum</td>
              <td align="left">
                <xref target="s-13-1"/></td>
            </tr>
            <tr>
              <td align="left">Client pre-lapse margin</td>
              <td align="left">Measured server-clock offset plus round-trip margin; no fixed value</td>
              <td align="left">
                <xref target="s-8"/></td>
            </tr>
            <tr>
              <td align="left">Velocity limits</td>
              <td align="left">Optional account/balance controls; thresholds and windows not stated</td>
              <td align="left">
                <xref target="s-6-4"/>, <xref target="s-15-4"/></td>
            </tr>
            <tr>
              <td align="left">Consumption-inflation wire</td>
              <td align="left">Optional control; threshold/window not stated</td>
              <td align="left">
                <xref target="s-7-4"/>, <xref target="s-15-4"/></td>
            </tr>
            <tr>
              <td align="left">Per-credential API rate limit</td>
              <td align="left">Token-bucket rate/capacity; no numeric default stated</td>
              <td align="left">
                <xref target="s-13-1"/>, <xref target="s-15-5"/></td>
            </tr>
            <tr>
              <td align="left">Draining state</td>
              <td align="left">Operator-controlled temporary state; delay returned in <tt>retryAfter</tt></td>
              <td align="left">
                <xref target="s-6-4"/>, <xref target="s-11"/></td>
            </tr>
            <tr>
              <td align="left">Mutual TLS</td>
              <td align="left">Optional deployment choice</td>
              <td align="left">
                <xref target="s-4-2"/></td>
            </tr>
            <tr>
              <td align="left">Credential tenant set</td>
              <td align="left">One or more bound tenants; exact cardinality not stated</td>
              <td align="left">
                <xref target="s-2"/>, <xref target="s-15-2"/></td>
            </tr>
            <tr>
              <td align="left">API-key material and exact revocation SLA</td>
              <td align="left">Deployment credential configuration; no exact seconds bound is stated</td>
              <td align="left">
                <xref target="s-4-2"/>, <xref target="s-15-1"/></td>
            </tr>
            <tr>
              <td align="left">Persistent clock-skew tolerance</td>
              <td align="left">Integration trust threshold; no value stated</td>
              <td align="left">
                <xref target="s-15-6"/></td>
            </tr>
            <tr>
              <td align="left">Audit, <tt>gatewayTime</tt>, and <tt>startedAt</tt> retention</td>
              <td align="left">Operator retention policy, apart from the fixed late window</td>
              <td align="left">
                <xref target="s-15-7"/></td>
            </tr>
          </tbody>
        </table>
        <t>No row defines an Action boundary: the protocol does not define what constitutes one
Action — the <tt>actionId</tt> is asserted by the application originating the work (<xref target="s-6-1"/>). No
row exposes a monetary amount (<xref target="s-15-7"/>).</t>
      </section>
    </section>
    <section anchor="s-9">
      <name>Child Actions</name>
      <t>Where enabled, an Authorise MAY declare <tt>parentActionId</tt>, nesting the new Action under an
open parent of the <strong>same subscriber</strong>, opened by <strong>a credential of the same owning
gateway</strong> — a <tt>parentActionId</tt> referencing another gateway's Action is refused 403 before
any charging evaluation (<xref target="s-15-3"/>). Children share the parent's family ceiling: sibling
headroom reflects every family settlement as it happens. Any parent ending cascades: open
children are stopped (<tt>PARENT_STOPPED</tt>) before the parent concludes.</t>
      <t><strong>Cascade timing (normative):</strong> children are stopped server-side at the parent's ending
instant — the server serialises all of one subscriber's operations, so a concurrent parent
ending and child report have a definite order. A stopped child's grant is no longer eligible
for <tt>CONTINUE</tt>; the child gateway learns at its next exchange, whose response is
<tt>STOP (PARENT_STOPPED)</tt> after settling the reported consumption. Consumption already in
flight when the cascade lands remains reportable and settleable under the late rules; the
notification gap is bounded by the child's grant validity, exactly like any other silent
period. Late child consumption continues to settle against the family ceiling during the
late window.</t>
      <t>The following CLOSE example illustrates the cascade for any parent ending. It also shows
that version 1 has no server push: the child gateway learns the stop at its next exchange.</t>
      <artwork><![CDATA[
Parent gateway     Charging Server                  Child gateway
    |                     |                               |
    |--- final Report --->|                               |
    |                     | serialize subscriber state    |
    |                     | stop open child at parent's   |
    |                     | ending instant: PARENT_STOPPED|
    |                     | conclude parent               |
    |<-- SETTLED ---------|                               |
    |                     |       (no server push)        |
    |                     |<----- child's next Report ----|
    |                     | merge, settle reported units  |
    |                     |--- STOP (PARENT_STOPPED) ---->|
]]></artwork>
    </section>
    <section anchor="s-10">
      <name>Time Bands</name>
      <t>A banded Action Type prices differently by time of day/week, per the tenant's published
schedule. Normative rules:</t>
      <ul spacing="normal">
        <li>
          <t>The band is resolved <strong>once, at authorisation, on the server clock</strong> — never from any
client-asserted time — and disclosed as <tt>timeBandId</tt> in the response.</t>
        </li>
        <li>
          <t>The entire Action rates in its opening band: <strong>the band never switches mid-Action</strong>,
however long the Action runs or when its reports arrive. (Deliberate divergence from
telecom voice charging; exposure is bounded by grant validity and maximum runtime.)</t>
        </li>
        <li>
          <t>Published schedules always cover every instant (the platform validates full-week coverage
before publication), so band resolution cannot fail.</t>
        </li>
      </ul>
    </section>
    <section anchor="s-11">
      <name>Draining</name>
      <t>When the service is draining (operator-controlled, temporary): new Actions are refused
<tt>DRAINING</tt> (retryable, with <tt>retryAfter</tt>); replays of live Actions are still answered; every
<strong>non-final</strong> report on a live Action settles normally and answers <tt>STOP (DRAINING)</tt> — no
re-grants are issued — while a <tt>final: true</tt> report settles as <tt>SETTLED</tt> per <xref target="s-7-5"/>'s
precedence. Terminal semantics (<xref target="s-7-6"/>) remain in force until no live state remains.</t>
    </section>
    <section anchor="s-12">
      <name>Shared Bounds and Fair Usage</name>
      <t>The bounds in <xref target="s-6"/> to <xref target="s-7"/> are per subscriber. Two further bounds range over populations, and both
surface on the wire only through the vocabulary above — no new operations, no new fields
beyond the refusal metadata of <xref target="s-6-4"/>.</t>
      <section anchor="s-12-1">
        <name>Sponsor caps</name>
        <t>A sponsoring party (typically a reseller funding an AI benefit) MAY declare an aggregate
spend bound across a population of subscribers. It is enforced at authorisation and at each
cycle like any other headroom check. Its refusals and stops are <strong>attributed</strong>:
<tt>EXPOSURE_CAP</tt> always carries <tt>limitOwner</tt>, and a client MUST surface the distinction to the
end user — from a single account's viewpoint the sponsor's cap and the user's own limit are
otherwise indistinguishable, and telling a user their own money ran out when the sponsor's
did is untrue.</t>
        <t>The cap's accounting basis is <strong>exposure</strong> — credits committed to open grants plus credits
settled, per sponsor relation; an open grant is spend the sponsor is already standing
behind, so a cap that counted settled spend alone could be overshot by in-flight work. The
bound is declared <strong>per period</strong>: the accounting window (a calendar month, a rolling
interval) is part of the sponsor's declaration, not a protocol constant, and is disclosed
to the sponsor and its members out of band — the wire carries only the refusals and stops
the cap produces. Exact period-boundary mechanics (the reset instant, the treatment of
exposure spanning the boundary) are deployment-profile in version 1, pending the same
trace validation as <xref target="s-12-2"/> to <xref target="s-12-4"/>.</t>
      </section>
      <section anchor="s-12-2">
        <name>Capacity pools</name>
        <t>A tenant MAY declare provisioned serving capacity — a rate — that named Action Types draw
on. Admission then answers two questions: may this be paid for, and can it be served. A
grant is a rate authorisation: <strong>its rate is <tt>grantedUnits</tt> over the interval from
<tt>grantIssuedAt</tt> to <tt>expiresAt</tt></strong> — so capacity enforcement changes grant <em>sizing</em>, not the
message set. When a pool cannot admit at or above the declared minimum rate, authorisation
refuses <tt>NO_CAPACITY</tt> — always retryable with <tt>retryAfter</tt> — graded <tt>BOUNDED</tt>, because
capacity keeps no ledger. Capacity refusals say something about the service's provisioned
room, never about the customer's money; clients MUST NOT render them as balance problems.</t>
        <t><strong>Enforcement is server-side and window-aware:</strong> when sizing each grant, the server accounts
the Action's <em>consumed</em> rate over the enforcement window (<tt>enforcementWindowSec</tt> &gt; 0,
disclosed in <tt>limits</tt>) — so reporting early and cycling fast confers no rate advantage (the
window remembers, and smaller grants follow). The client has <strong>no pacing obligation</strong>;
pacing to the grant rate is optional smoothness, not conformance. <strong>Shared bounds are
linearizable:</strong> admissions against a capacity pool — and against a sponsor cap (<xref target="s-12-1"/>) —
are evaluated as if serially against the aggregate; two concurrent admissions can never
both observe and consume the same remaining headroom. <em>(Provisional: the window's exact
algorithm and reproducibility are completed by the capacity conformance traces — see
Status.)</em></t>
      </section>
      <section anchor="s-12-3">
        <name>Degradation before refusal (fair usage)</name>
        <t>Under capacity pressure the server degrades before it refuses: a grant (opening or
continuation) MAY be reduced — <strong>always by lowering <tt>grantedUnits</tt>, never by shortening the
validity window</strong> (a shorter window with the same units would <em>raise</em> the implied rate) —
and never below the declared minimum rate. Such a response carries <tt>rateReduced: true</tt> and
<tt>reduceCause: "CAPACITY"</tt>; the client can compute the allowed rate exactly from
<tt>grantedUnits</tt>, <tt>grantIssuedAt</tt>, and <tt>expiresAt</tt>. Three guarantees travel with it:</t>
        <ul spacing="normal">
          <li>
            <t><strong>The price never changes with the rate.</strong> A slowdown is never a surcharge.</t>
          </li>
          <li>
            <t><strong>The cause is always capacity.</strong> Commercial throttling has no code path in this protocol —
a margin decision is a tariff term to be declared in the plan, never an operational
throttle.</t>
          </li>
          <li>
            <t><strong>It is disclosed.</strong> The reduction is flagged on the wire and recorded per party, so "what
was reduced, when, and why" is answerable per customer, not only per pool.</t>
          </li>
        </ul>
        <t>Degradation lands at exchange boundaries only — there is no push channel — which is one
reason validity windows are short. Below the minimum rate the server answers honestly
instead: <tt>STOP (NO_CAPACITY)</tt> at a report boundary, refusal at authorisation.</t>
      </section>
      <section anchor="s-12-4">
        <name>Report promptness</name>
        <t>Rate enforcement is defeated by stale reports: a gateway batching every thirty seconds
defeats a per-second pool while passing every other check. Promptness — measured as the
elapsed time from a unit of consumption occurring to dispatch of the report that first
carries it, evaluated at the 95th percentile — is a tested dimension of an integration's
profile (alongside authorise-before-serving and stop obedience): a bound the conformance
suite measures, never a documentation claim. The bound is agreed per integration at
onboarding; <strong>the version-1 default profile bound is 30 s at p95</strong> <em>(provisional — subject
to ratification with the rate-enforcement window design; integrations should treat the
mechanism as fixed and the number as negotiable)</em>. Threshold-triggered reports (<xref target="s-7-7"/>) and
the closing report are due immediately regardless of the profile bound.</t>
      </section>
    </section>
    <section anchor="s-13">
      <name>Error Handling</name>
      <section anchor="s-13-1">
        <name>HTTP status mapping</name>
        <table>
          <thead>
            <tr>
              <th align="left">Status</th>
              <th align="left">Meaning</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">200</td>
              <td align="left">Charging outcome — including refusals and stop obligations; inspect <tt>decision</tt>/<tt>directive</tt>.</td>
            </tr>
            <tr>
              <td align="left">400</td>
              <td align="left">Malformed or out-of-limit request; machine <tt>errorCode</tt> included (<xref target="s-13-2"/>).</td>
            </tr>
            <tr>
              <td align="left">401</td>
              <td align="left">Missing/invalid credential.</td>
            </tr>
            <tr>
              <td align="left">403</td>
              <td align="left">Credential valid but not authorised: tenant not in the bound set, the Action belongs to another gateway, or a <tt>parentActionId</tt> references another gateway's Action (<xref target="s-9"/>, <xref target="s-15-3"/>).</td>
            </tr>
            <tr>
              <td align="left">404</td>
              <td align="left">Unknown or mismatched identity: an <tt>actionId</tt>/<tt>grantId</tt> the server does not recognise (never opened, or past the late window, <xref target="s-7-6"/>), a <tt>grantId</tt> that does not belong to the body's <tt>actionId</tt>, or <tt>tenantRef</tt>/<tt>accountRef</tt> that do not match the Action's — traffic is unattributable.</td>
            </tr>
            <tr>
              <td align="left">405 / 415</td>
              <td align="left">Wrong method / wrong content type (<xref target="s-4-1"/>).</td>
            </tr>
            <tr>
              <td align="left">429</td>
              <td align="left">Per-credential rate limit exceeded (<xref target="s-15-5"/>). MUST carry <tt>Retry-After</tt>. When rate-limited, the client prioritises mandatory reports (threshold crossings, STOP flushes, pre-lapse) over new Authorises.</td>
            </tr>
            <tr>
              <td align="left">503 + <tt>Retry-After</tt></td>
              <td align="left">The server's own condition — transient contention or overload — on its own channel. <strong>Overload is never expressed as a refusal reason</strong>: no decision about the caller was reached, nothing is charged, and a shed request is not counted as a refusal. The client SHOULD retry after the indicated delay with the identical request.</td>
            </tr>
          </tbody>
        </table>
        <t>Charging refusals are <strong>not</strong> HTTP errors: a <tt>REFUSE</tt> or <tt>STOP</tt> arrives as 200 — including
<tt>DUPLICATE_ACTION</tt> (an identity conflict is a charging refusal, not an HTTP error). Clients
MUST NOT treat 200 as permission without inspecting the body.</t>
        <t><strong>Error envelope:</strong> every non-200 response carries a JSON body
<tt>{errorCode, message, serverTime, maxSchemaVersion, retryable?, retryAfter?}</tt> — <tt>errorCode</tt> from <xref target="s-13-2"/>
for the 400 family or a status-mirroring code otherwise (<tt>UNAUTHORIZED</tt>, <tt>FORBIDDEN</tt>,
<tt>NOT_FOUND</tt>, <tt>METHOD_NOT_ALLOWED</tt>, <tt>UNSUPPORTED_MEDIA</tt>, <tt>RATE_LIMITED</tt>, <tt>UNAVAILABLE</tt>,
<tt>INTERNAL</tt>); <tt>schemaVersion</tt> is echoed when it was parseable (<xref target="s-5"/>). Error envelopes carry no
Action-state fields (<xref target="s-2"/>, Envelope).</t>
        <t><strong>Atomicity (normative):</strong> request processing is all-or-nothing. Full validation precedes
any state mutation, and <strong>every non-200 response is state-neutral</strong> — nothing merged,
counted, or settled. Settlement and the stored exchange outcome persist atomically; a crash
between processing and durable storage means the request was not processed, and the
identical retry is safe.</t>
      </section>
      <section anchor="s-13-2">
        <name><tt>errorCode</tt> registry (400 family, version 1)</name>
        <table>
          <thead>
            <tr>
              <th align="left">Code</th>
              <th align="left">Meaning</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">
                <tt>UNSUPPORTED_SCHEMA</tt></td>
              <td align="left">Unknown <tt>schemaVersion</tt>, or fields beyond the declared version.</td>
            </tr>
            <tr>
              <td align="left">
                <tt>LIMIT_EXCEEDED</tt></td>
              <td align="left">A <xref target="s-4-4"/> limit violated.</td>
            </tr>
            <tr>
              <td align="left">
                <tt>MALFORMED_REPORT</tt></td>
              <td align="left">Bad unit value, undeclared unit key, duplicate <tt>callId</tt> entries, duplicate JSON keys.</td>
            </tr>
            <tr>
              <td align="left">
                <tt>MALFORMED_REQUEST</tt></td>
              <td align="left">Any other syntactic/semantic malformation.</td>
            </tr>
          </tbody>
        </table>
      </section>
      <section anchor="s-13-3">
        <name>Client retry guidance</name>
        <t>Idempotency (<xref target="s-6-5"/>, <xref target="s-7-2"/>) makes retries safe: on timeout or 5xx, the client SHOULD retry the
identical request with <strong>bounded, jittered exponential backoff</strong> (RECOMMENDED: initial 1 s,
factor 2, full jitter, cap 30 s). <strong>The serialisation unit of <xref target="s-3-4"/> is the logical Report</strong>:
identical retries are the same unit, and overlapping identical attempts (a retry racing its
timed-out original) are permitted — replay makes them harmless. The admission freeze ends
on a charging outcome (any 200); state-neutral errors (4xx/429/503) leave it in place while
retries continue, until an outcome arrives or the grant expires. The client MUST NOT mint a fresh <tt>actionId</tt> to retry an
Action whose authorisation outcome is unknown — that risks double authorisation; retry the
original request instead, or abandon the <tt>actionId</tt> permanently. Retrying a Report remains
useful up to the late window; retrying an Authorise past the point the work would still be
served is pointless — abandon it; if the work is re-attempted later, that is a new Action.</t>
      </section>
      <section anchor="s-13-4">
        <name>Charging-plane unavailability — the client state machine</name>
        <t>When the server is slow or unreachable, the existing mechanisms compose into a complete,
bounded posture; a conforming gateway follows it:</t>
        <ol spacing="normal" type="1"><li>
            <t><strong>Mid-Action:</strong> per <xref target="s-3-4"/>'s single-writer rule, once the report is dispatched <strong>no new
Calls are admitted</strong> until a response arrives — retrying included. Work already begun
(the tail) completes within the remaining pool of the last received grant; consumption
from uncancellable streams is reported when connectivity returns (late, if need be —
the late window exists for this).</t>
          </li>
          <li>
            <t><strong>At pool exhaustion with no response:</strong> stop admitting new Calls. Serving beyond the
pool is non-conformant regardless of the outage.</t>
          </li>
          <li>
            <t><strong>At <tt>expiresAt</tt> with no successful report:</strong> the gateway MUST stop serving the Action —
validity is the hard bound, and the server will settle at the reported meter via the
lapse ending. Consumption reported late still settles while late-settlement capability
holds (<xref target="s-7-6"/>). Its exceptional degradation is the one bounded exception, and it is
flagged <tt>unattributable</tt>, never silent.</t>
          </li>
          <li>
            <t><strong>New Actions:</strong> when Authorise is unreachable, a conforming gateway does not serve —
<strong>fail-closed is the only conformance posture this protocol defines.</strong> <em>(Informative:
a tenant may contractually accept unauthorized serving during outages; such traffic is
outside this protocol — never authorised, never reported, never settled here — and is
accounted between the parties as declared loss. Pulse neither forbids the business
arrangement nor provides a wire path for it.)</em></t>
          </li>
          <li>
            <t><strong>Recovery:</strong> retry identical requests (<xref target="s-6-5"/>/<xref target="s-7-3"/> replay makes every lost response
recoverable), or report against the envelope's <tt>currentGrantId</tt>; reconcile via receipts
(<tt>settlementId</tt>, <tt>acceptedCumulative</tt>, <tt>acceptedCalls</tt>).</t>
          </li>
        </ol>
        <t>This post-grace, late-settleable example illustrates the end-to-end posture. The gateway's
local hard bounds remain the received grant's remaining pool and <tt>expiresAt</tt>; new Authorises
fail closed during the outage. Other recovery branches remain as specified above.</t>
        <artwork><![CDATA[
Gateway                          Charging Server
   |                                    |
   |  outage begins; a grant is live    |
   |  serve only within remaining pool  |
   |--- Report R at reportAt --------X  |  unreachable
   |  no new Calls; the tail finishes   |
   |--- identical retries of R ------X  |
   |  at expiresAt: stop serving        |
   |                                    |
   |  connectivity recovers at          |
   |  now >= expiresAt + 5 s            |
   |--- identical retry of R ---------->|
   |                                    |  LAPSE and late
   |                                    |  handling
   |<-- STOP (LAPSED) + receipt --------|
   |                                    |
   |--- final-meter flush ------------->|  within 30 s of
   |    (tail included)                 |  STOP
   |<-- STOP (LAPSED) + receipt --------|
]]></artwork>
        <t>The exposure of the outage posture is: <strong>the remaining granted pool, plus the consumption
of Calls already in flight when the outage began</strong> — each such Call bounded by the
call-level caps (<xref target="s-4-4"/> magnitudes; <tt>limits.maxRuntimeSec</tt>) and settling late. Uncancellable
in-flight work is the one component the pool does not cap; the protocol bounds it per Call
and prices it under the pinned law, never silently.</t>
      </section>
      <section anchor="s-13-5">
        <name>Operational expectations (informative)</name>
        <t>Authorise and Report sit on the serving hot path; the server is designed to answer from hot
state and the RECOMMENDED client deadline is <strong>2 s</strong> per attempt. For latency-critical cheap
actions, the flat price form (<xref target="s-3-3"/>) is the minimal-overhead shape (one exchange, no
lifecycle). Control-plane request rate scales with Actions × cycles; the server controls the
cycle rate via <tt>reportAt</tt>/<tt>grantedUnits</tt> sizing, and HTTP/2 connection reuse is assumed.
Pre-grants, bulk authorisation, and multi-Action batch reporting are deferred, named
(<xref target="s-1-4"/>).</t>
      </section>
    </section>
    <section anchor="s-14">
      <name>Conformance Requirements Summary (client)</name>
      <ol spacing="normal" type="1"><li>
          <t>Send canonical, versioned, within-limits bodies (<xref target="s-4"/>, <xref target="s-5"/>).</t>
        </li>
        <li>
          <t>Never serve lifecycle work without a live grant (a flat Action's work is authorised by
its settled GRANT itself, <xref target="s-3-3"/>); honour stop obligations promptly (<xref target="s-3-2"/>).</t>
        </li>
        <li>
          <t>Report cumulatively, never by delta; never shrink a cumulative (<xref target="s-7-2"/>).</t>
        </li>
        <li>
          <t>Report on <tt>reportAt</tt> crossing (MUST) and SHOULD report promptly at client-side endings
with <tt>final: true</tt> (<xref target="s-7-7"/>).</t>
        </li>
        <li>
          <t>Retry with canonically identical requests; never reuse an <tt>actionId</tt> (<xref target="s-6-5"/>, <xref target="s-13-3"/>).</t>
        </li>
        <li>
          <t>Tolerate unknown reason/code strings (<xref target="s-5"/>).</t>
        </li>
        <li>
          <t>Never knowingly exceed the granted pool; admit Calls against it using <tt>unitWeights</tt>
(<xref target="s-3-4"/>), and follow the <xref target="s-13-4"/> posture when the charging plane is unreachable.</t>
        </li>
        <li>
          <t>Treat the server clock as authoritative for lapse and bands (<xref target="s-3-4"/>, <xref target="s-10"/>).</t>
        </li>
        <li>
          <t>Report promptly — within the integration's tested promptness bound (<xref target="s-12-4"/>); batched, stale
reports defeat rate enforcement and downgrade the integration's profile.</t>
        </li>
        <li>
          <t>Render refusals honestly: no more certainty than <tt>grade</tt> holds, capacity refusals never
as balance problems, and attributed limits (<tt>limitOwner</tt>) never as the user's own (<xref target="s-6-4"/>,
<xref target="s-12"/>).</t>
        </li>
        <li>
          <t>Obey the envelope over any stored body: discard grants with a stale <tt>grantSeq</tt>, treat
<tt>actionLive: false</tt> as a stop, and converge on <tt>currentGrantSeq</tt> (<xref target="s-2"/>, <xref target="s-6-3"/>, <xref target="s-7-3"/>).</t>
        </li>
        <li>
          <t>On STOP: admit nothing new, cancel what is cancellable, and flush the final meter —
first chunk within 30 seconds, once per ending (<xref target="s-7-7"/>).</t>
        </li>
        <li>
          <t>One in-flight Report per Action, and no new Call admissions while one is outstanding
(<xref target="s-3-4"/>).</t>
        </li>
      </ol>
    </section>
    <section anchor="s-15">
      <name>Security Considerations</name>
      <section anchor="s-15-1">
        <name>Transport and credentials</name>
        <t>TLS 1.2+ is REQUIRED (1.3 RECOMMENDED; <xref target="RFC9325"/> configuration). API keys are secrets:
gateways MUST store them in a secrets facility, MUST NOT place them in URLs, and MUST
redact them from logs and traces; the server never echoes a key and audits by credential
id only. Dual-active rotation rolls keys without downtime. Compromise of a key is bounded
by revocation (effective within seconds), tenant binding, gateway ownership, and the
per-credential rate limit. <strong>Revocation and outstanding grants:</strong> a revoked credential's
requests fail 401 from the revocation instant; Actions its gateway opened continue only to
their grants' lapse, ending and settling at their reported meters — the residual exposure
is the remaining validities. Because ownership is <strong>gateway-level</strong>, a replacement
credential of the same gateway MAY report and close them; nothing strands.</t>
      </section>
      <section anchor="s-15-2">
        <name>Tenant binding</name>
        <t>Every request is authorised as: credential enabled → <tt>tenantRef</tt> within the credential's
bound set (else 403) → subscriber belongs to that tenant (else <tt>NO_LAW</tt>). A credential can
never operate on another tenant's subscribers.</t>
      </section>
      <section anchor="s-15-3">
        <name>Gateway ownership of Actions</name>
        <t>Every Action records the opening credential's gateway. Reports and Authorise-replays are
accepted <strong>only</strong> from credentials of that gateway (else 403) — a sibling gateway of the same
tenant cannot operate another gateway's Actions, and a child Action MUST be opened by the
parent's owning gateway (<xref target="s-9"/>; checked before any charging evaluation). Identifiers are
correlators, not secrets; authority derives from credential + binding + ownership, so
sequential or guessable ids confer no authority. <strong>Acknowledged residual:</strong> the 403-vs-404
distinction lets an authenticated gateway of the same tenant probe whether an identifier
exists — existence only, never content or authority; accepted and documented.</t>
      </section>
      <section anchor="s-15-4">
        <name>Abuse limits</name>
        <t>Always enforced per subscriber: a concurrent-Actions cap and a calls-per-Action limit.
Optionally (per deployment/plan): velocity limits, consumption-inflation wires, maximum
runtime, and required call signatures. These stop Actions; only operator action bars a
subscriber.</t>
      </section>
      <section anchor="s-15-5">
        <name>API-level protection</name>
        <t>A per-credential request rate limit (token bucket; 429 on excess) protects the platform
independently of charging-level velocity. Every request is audit-recorded by credential id;
the key itself never appears in records.</t>
      </section>
      <section anchor="s-15-6">
        <name>Clock authority and posture</name>
        <t>Band selection and lapse are computed exclusively from the server clock (<xref target="s-3-4"/>), removing
client-asserted-time gaming. The gateway MAY report its own clock (<tt>gatewayTime</tt>) and
per-call start instants (<tt>startedAt</tt>, <xref target="s-7-2"/>); both are recorded as evidence and never
enforced against — a wrong clock is a fact about the gateway's estate, not a verdict about
the customer whose call it carries. Persistent skew
beyond tolerance is a trust signal on the integration's profile, never a refusal.</t>
      </section>
      <section anchor="s-15-7">
        <name>Trust model and privacy</name>
        <t><strong>The gateway is a trusted metering point.</strong> Its reports are <em>attestations</em> of consumption,
not proofs: the protocol bounds what a dishonest or compromised gateway can cost (grants,
ceilings, caps, tenant binding, gateway ownership, revocation, rate limits) but cannot
verify token counts it did not observe. The residual — systematic under- or mis-reporting —
is addressed outside the request path: integration grading by the conformance suite, and
slow-clock observation of the executor. Stated plainly so no one mistakes the boundary: a
tenant's spend guarantee holds against its subscribers; the <em>operator's</em> protection against
a dishonest metering point is detection and contract, not cryptography, in version 1.</t>
        <t><strong>Every version-1 decision is automated.</strong> No human participates in the request path — for
a grant, a refusal, or a stop. A refusal says so on the wire (<tt>automatedDecision</tt>, <xref target="s-6-4"/>)
and MAY carry a tenant-configured human-review channel (<tt>reviewContact</tt>), so a subscriber
facing an adverse automated decision has a route to a person; the notice travels with the
decision it describes rather than living only in documentation.</t>
        <t><strong>No money crosses outward.</strong> Grants and receipts are denominated in work units only; a
gateway never learns a balance, a price, or a currency. This is deliberate — a commercial
and privacy boundary, not an omission.</t>
        <t><strong>Privacy.</strong> <tt>accountRef</tt> SHOULD be a pseudonymous, tenant-scoped identifier (never a raw
MSISDN, e-mail, or name); the server treats it as an opaque key. <tt>limitOwner</tt> is a
presentation-safe display label declared by the sponsor with its relation — never a legal
identity the tenant did not choose to show. <tt>gatewayTime</tt>, <tt>startedAt</tt>, and per-request
audit records are retained under the operator's retention policy; the protocol itself mandates retention only
for the late window. Refusal metadata deliberately reveals coarse state (which kind of limit
bound); tenants choosing per-subscriber secrecy beyond that boundary configure presentation,
not the wire.</t>
      </section>
    </section>
    <section anchor="s-16">
      <name>Implementation Status</name>
      <t>This section records the implementation status of the protocol described in this
document, as encouraged by <xref target="RFC7942"/>. It is meant to be removed before publication
as an RFC.</t>
      <t>At the time of writing, one server-side implementation of this protocol exists, built
into a commercial telecom online charging system, together with a conformance suite
exercising the state machine of <xref target="s-3-5"/>, the cumulative reporting rules of <xref target="s-7-2"/>,
and the lapse boundary of <xref target="s-7-5"/>. No independent interoperating implementation
exists. Readers should treat the capacity-enforcement semantics of <xref target="s-12-2"/> to
<xref target="s-12-4"/> as provisional on that basis.</t>
    </section>
    <section anchor="s-17">
      <name>IANA Considerations</name>
      <t>This document establishes the registries below. For each registry, the
placeholder registration policy mirrors <xref target="s-5"/>: the registries are owned by this document,
and new values are allocated only by a new schema version of this specification — a
Standards-Action-style posture in the <xref target="RFC8126"/> taxonomy, not Specification Required.
The cited sections, not this summary, define the initial values and their meanings.</t>
      <table>
        <thead>
          <tr>
            <th align="left">Registry</th>
            <th align="left">Initial contents</th>
            <th align="left">Defining section</th>
          </tr>
        </thead>
        <tbody>
          <tr>
            <td align="left">Pulse Decision</td>
            <td align="left">
              <tt>GRANT</tt>, <tt>REFUSE</tt></td>
            <td align="left">
              <xref target="s-6-3"/>, <xref target="s-6-4"/></td>
          </tr>
          <tr>
            <td align="left">Pulse Refusal Reason</td>
            <td align="left">
              <tt>NO_HEADROOM</tt>, <tt>CEILING_PREEMPT</tt>, <tt>ACCOUNT_VELOCITY</tt>, <tt>BALANCE_VELOCITY</tt>, <tt>GROUP_VELOCITY</tt> (version 1.1), <tt>MAX_CONCURRENT_ACTIONS</tt>, <tt>PARENT_STOPPED</tt>, <tt>NO_LAW</tt>, <tt>DRAINING</tt>, <tt>BLOCKED_TARIFF</tt>, <tt>SERVICE_BARRED</tt>, <tt>DUPLICATE_ACTION</tt>, <tt>EXPOSURE_CAP</tt>, <tt>NO_CAPACITY</tt>, <tt>PREEMPTED</tt>, <tt>CLASS_BLOCKED</tt> (reserved in version 1)</td>
            <td align="left">
              <xref target="s-6-4"/></td>
          </tr>
          <tr>
            <td align="left">Pulse Stop Reason</td>
            <td align="left">
              <tt>CEILING_REACHED</tt>, <tt>NO_HEADROOM</tt>, <tt>CALL_LIMIT</tt>, <tt>MAX_RUNTIME</tt>, <tt>INFLATION</tt>, <tt>SIGNATURES_REQUIRED</tt>, <tt>PARENT_STOPPED</tt>, <tt>ADMIN_FORCED</tt>, <tt>DRAINING</tt>, <tt>NO_CAPACITY</tt>, <tt>EXPOSURE_CAP</tt>, <tt>LAPSED</tt></td>
            <td align="left">
              <xref target="s-7-4"/></td>
          </tr>
          <tr>
            <td align="left">Pulse Error Code</td>
            <td align="left">
              <tt>UNSUPPORTED_SCHEMA</tt>, <tt>LIMIT_EXCEEDED</tt>, <tt>MALFORMED_REPORT</tt>, <tt>MALFORMED_REQUEST</tt>, <tt>UNAUTHORIZED</tt>, <tt>FORBIDDEN</tt>, <tt>NOT_FOUND</tt>, <tt>METHOD_NOT_ALLOWED</tt>, <tt>UNSUPPORTED_MEDIA</tt>, <tt>RATE_LIMITED</tt>, <tt>UNAVAILABLE</tt>, <tt>INTERNAL</tt></td>
            <td align="left">
              <xref target="s-13-1"/>, <xref target="s-13-2"/></td>
          </tr>
          <tr>
            <td align="left">Pulse Ending</td>
            <td align="left">
              <tt>CLOSE</tt>, <tt>STOP</tt>, <tt>LAPSE</tt></td>
            <td align="left">
              <xref target="s-2"/>, <xref target="s-3-5"/></td>
          </tr>
          <tr>
            <td align="left">Pulse Directive</td>
            <td align="left">
              <tt>CONTINUE</tt>, <tt>CURRENT</tt>, <tt>SETTLED</tt>, <tt>STOP</tt></td>
            <td align="left">
              <xref target="s-7-3"/></td>
          </tr>
          <tr>
            <td align="left">Pulse Grade</td>
            <td align="left">
              <tt>PROVEN</tt>, <tt>ATTESTED</tt>, <tt>BOUNDED</tt></td>
            <td align="left">
              <xref target="s-6-4"/></td>
          </tr>
          <tr>
            <td align="left">Pulse Reduce Cause</td>
            <td align="left">
              <tt>CAPACITY</tt></td>
            <td align="left">
              <xref target="s-12-3"/></td>
          </tr>
        </tbody>
      </table>
      <t>Formal IANA text, including final registry names and the formal <xref target="RFC8126"/> policy
designations, is completed at publication.</t>
    </section>
  </middle>
  <back>
    <references anchor="sec-combined-references">
      <name>References</name>
      <references anchor="sec-normative-references">
        <name>Normative References</name>
        <reference anchor="RFC2119">
          <front>
            <title>Key words for use in RFCs to Indicate Requirement Levels</title>
            <author fullname="S. Bradner" initials="S." surname="Bradner"/>
            <date month="March" year="1997"/>
            <abstract>
              <t>In many standards track documents several words are used to signify the requirements in the specification. These words are often capitalized. This document defines these words as they should be interpreted in IETF documents. This document specifies an Internet Best Current Practices for the Internet Community, and requests discussion and suggestions for improvements.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="2119"/>
          <seriesInfo name="DOI" value="10.17487/RFC2119"/>
        </reference>
        <reference anchor="RFC8174">
          <front>
            <title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title>
            <author fullname="B. Leiba" initials="B." surname="Leiba"/>
            <date month="May" year="2017"/>
            <abstract>
              <t>RFC 2119 specifies common key words that may be used in protocol specifications. This document aims to reduce the ambiguity by clarifying that only UPPERCASE usage of the key words have the defined special meanings.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="8174"/>
          <seriesInfo name="DOI" value="10.17487/RFC8174"/>
        </reference>
        <reference anchor="RFC8259">
          <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">
          <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="RFC8610">
          <front>
            <title>Concise Data Definition Language (CDDL): A Notational Convention to Express Concise Binary Object Representation (CBOR) and JSON Data Structures</title>
            <author fullname="H. Birkholz" initials="H." surname="Birkholz"/>
            <author fullname="C. Vigano" initials="C." surname="Vigano"/>
            <author fullname="C. Bormann" initials="C." surname="Bormann"/>
            <date month="June" year="2019"/>
            <abstract>
              <t>This document proposes a notational convention to express Concise Binary Object Representation (CBOR) data structures (RFC 7049). Its main goal is to provide an easy and unambiguous way to express structures for protocol messages and data formats that use CBOR or JSON.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8610"/>
          <seriesInfo name="DOI" value="10.17487/RFC8610"/>
        </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="RFC8446">
          <front>
            <title>The Transport Layer Security (TLS) Protocol Version 1.3</title>
            <author fullname="E. Rescorla" initials="E." surname="Rescorla"/>
            <date month="August" year="2018"/>
            <abstract>
              <t>This document specifies version 1.3 of the Transport Layer Security (TLS) protocol. TLS allows client/server applications to communicate over the Internet in a way that is designed to prevent eavesdropping, tampering, and message forgery.</t>
              <t>This document updates RFCs 5705 and 6066, and obsoletes RFCs 5077, 5246, and 6961. This document also specifies new requirements for TLS 1.2 implementations.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8446"/>
          <seriesInfo name="DOI" value="10.17487/RFC8446"/>
        </reference>
        <reference anchor="RFC5246">
          <front>
            <title>The Transport Layer Security (TLS) Protocol Version 1.2</title>
            <author fullname="T. Dierks" initials="T." surname="Dierks"/>
            <author fullname="E. Rescorla" initials="E." surname="Rescorla"/>
            <date month="August" year="2008"/>
            <abstract>
              <t>This document specifies Version 1.2 of the Transport Layer Security (TLS) protocol. The TLS protocol provides communications security over the Internet. The protocol allows client/server applications to communicate in a way that is designed to prevent eavesdropping, tampering, or message forgery. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="5246"/>
          <seriesInfo name="DOI" value="10.17487/RFC5246"/>
        </reference>
        <reference anchor="RFC3339">
          <front>
            <title>Date and Time on the Internet: Timestamps</title>
            <author fullname="G. Klyne" initials="G." surname="Klyne"/>
            <author fullname="C. Newman" initials="C." surname="Newman"/>
            <date month="July" year="2002"/>
            <abstract>
              <t>This document defines a date and time format for use in Internet protocols that is a profile of the ISO 8601 standard for representation of dates and times using the Gregorian calendar.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="3339"/>
          <seriesInfo name="DOI" value="10.17487/RFC3339"/>
        </reference>
        <reference anchor="RFC9325">
          <front>
            <title>Recommendations for Secure Use of Transport Layer Security (TLS) and Datagram Transport Layer Security (DTLS)</title>
            <author fullname="Y. Sheffer" initials="Y." surname="Sheffer"/>
            <author fullname="P. Saint-Andre" initials="P." surname="Saint-Andre"/>
            <author fullname="T. Fossati" initials="T." surname="Fossati"/>
            <date month="November" year="2022"/>
            <abstract>
              <t>Transport Layer Security (TLS) and Datagram Transport Layer Security (DTLS) are used to protect data exchanged over a wide range of application protocols and can also form the basis for secure transport protocols. Over the years, the industry has witnessed several serious attacks on TLS and DTLS, including attacks on the most commonly used cipher suites and their modes of operation. This document provides the latest recommendations for ensuring the security of deployed services that use TLS and DTLS. These recommendations are applicable to the majority of use cases.</t>
              <t>RFC 7525, an earlier version of the TLS recommendations, was published when the industry was transitioning to TLS 1.2. Years later, this transition is largely complete, and TLS 1.3 is widely available. This document updates the guidance given the new environment and obsoletes RFC 7525. In addition, this document updates RFCs 5288 and 6066 in view of recent attacks.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="195"/>
          <seriesInfo name="RFC" value="9325"/>
          <seriesInfo name="DOI" value="10.17487/RFC9325"/>
        </reference>
      </references>
      <references anchor="sec-informative-references">
        <name>Informative References</name>
        <reference anchor="RFC4006">
          <front>
            <title>Diameter Credit-Control Application</title>
            <author fullname="H. Hakala" initials="H." surname="Hakala"/>
            <author fullname="L. Mattila" initials="L." surname="Mattila"/>
            <author fullname="J-P. Koskinen" surname="J-P. Koskinen"/>
            <author fullname="M. Stura" initials="M." surname="Stura"/>
            <author fullname="J. Loughney" initials="J." surname="Loughney"/>
            <date month="August" year="2005"/>
            <abstract>
              <t>This document specifies a Diameter application that can be used to implement real-time credit-control for a variety of end user services such as network access, Session Initiation Protocol (SIP) services, messaging services, and download services. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="4006"/>
          <seriesInfo name="DOI" value="10.17487/RFC4006"/>
        </reference>
        <reference anchor="RFC8506">
          <front>
            <title>Diameter Credit-Control Application</title>
            <author fullname="L. Bertz" initials="L." role="editor" surname="Bertz"/>
            <author fullname="D. Dolson" initials="D." role="editor" surname="Dolson"/>
            <author fullname="Y. Lifshitz" initials="Y." role="editor" surname="Lifshitz"/>
            <date month="March" year="2019"/>
            <abstract>
              <t>This document specifies a Diameter application that can be used to implement real-time credit-control for a variety of end-user services such as network access, Session Initiation Protocol (SIP) services, messaging services, and download services. The Diameter Credit- Control application as defined in this document obsoletes RFC 4006, and it must be supported by all new Diameter Credit-Control application implementations.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8506"/>
          <seriesInfo name="DOI" value="10.17487/RFC8506"/>
        </reference>
        <reference anchor="RFC8126">
          <front>
            <title>Guidelines for Writing an IANA Considerations Section in RFCs</title>
            <author fullname="M. Cotton" initials="M." surname="Cotton"/>
            <author fullname="B. Leiba" initials="B." surname="Leiba"/>
            <author fullname="T. Narten" initials="T." surname="Narten"/>
            <date month="June" year="2017"/>
            <abstract>
              <t>Many protocols make use of points of extensibility that use constants to identify various protocol parameters. To ensure that the values in these fields do not have conflicting uses and to promote interoperability, their allocations are often coordinated by a central record keeper. For IETF protocols, that role is filled by the Internet Assigned Numbers Authority (IANA).</t>
              <t>To make assignments in a given registry prudently, guidance describing the conditions under which new values should be assigned, as well as when and how modifications to existing values can be made, is needed. This document defines a framework for the documentation of these guidelines by specification authors, in order to assure that the provided guidance for the IANA Considerations is clear and addresses the various issues that are likely in the operation of a registry.</t>
              <t>This is the third edition of this document; it obsoletes RFC 5226.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="26"/>
          <seriesInfo name="RFC" value="8126"/>
          <seriesInfo name="DOI" value="10.17487/RFC8126"/>
        </reference>
        <reference anchor="RFC7942">
          <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>
    </references>
    <?line 1341?>

<section anchor="app-a">
      <name>Examples (illustrative, not normative; abbreviated)</name>
      <t>Except for A.7, the 200 responses below omit, for brevity only: <tt>serverTime</tt>,
<tt>actionLive</tt>, <tt>currentGrantSeq</tt>, <tt>currentGrantId</tt>, <tt>unattributable</tt> where applicable,
<tt>grantIssuedAt</tt>, <tt>lawVersion</tt>, <tt>limits</tt>, and settlement receipts where a settling response
requires one — all present in real responses under <xref target="s-2"/>/<xref target="s-6-3"/>/<xref target="s-7-3"/>. A refusal of an unopened
Action (A.5) and an error envelope (A.7) carry no Action-state fields; A.7 intentionally
shows <tt>serverTime</tt>. <tt>maxSchemaVersion</tt> is shown throughout. Every field shown conforms to
the <xref target="s-4-3"/> type rules, except A.7's deliberately malformed <tt>estimate</tt> — a JSON number where
<xref target="s-4-3"/> requires a canonical decimal string, the defect that example exists to show.</t>
      <section anchor="app-a-1">
        <name>Authorise → grant</name>
        <sourcecode type="http-message"><![CDATA[
POST /ocs/ai/v1/authorizations
{
  "schemaVersion": 1,
  "actionId": "app-7f3e:conv-2091:task-4",
  "tenantRef": "4102",
  "accountRef": "subscriber-889201",
  "actionType": "chat.frontier",
  "estimate": { "tokens_in": "12000", "tokens_out": "4000" }
}

200
{
  "schemaVersion": 1, "maxSchemaVersion": 1,
  "decision": "GRANT",
  "grantId": "g-000117", "grantSeq": 1,
  "grantedUnits": "50000",
  "reportAt": "40000",
  "expiresAt": "2026-09-01T10:15:00.000Z",
  "unitWeights": { "tokens_in": "1", "tokens_out": "4" },
  "timeBandId": "offpeak"
}
]]></sourcecode>
      </section>
      <section anchor="app-a-2">
        <name>Report → continue</name>
        <sourcecode type="http-message"><![CDATA[
POST /ocs/ai/v1/grants/g-000117/reports
{
  "schemaVersion": 1,
  "actionId": "app-7f3e:conv-2091:task-4",
  "tenantRef": "4102", "accountRef": "subscriber-889201",
  "final": false,
  "calls": [
    { "callId": "c1",
      "units": { "tokens_in": "9100", "tokens_out": "7800" } }
  ]
}

200
{
  "schemaVersion": 1, "maxSchemaVersion": 1,
  "directive": "CONTINUE",
  "grantId": "g-000118", "grantSeq": 2,
  "grantedUnits": "50000",
  "reportAt": "40000",
  "expiresAt": "2026-09-01T10:30:00.000Z",
  "unitWeights": { "tokens_in": "1", "tokens_out": "4" },
  "timeBandId": "offpeak"
}
]]></sourcecode>
      </section>
      <section anchor="app-a-3">
        <name>Final report → settled</name>
        <sourcecode type="http-message"><![CDATA[
POST /ocs/ai/v1/grants/g-000118/reports
{
  "schemaVersion": 1,
  "actionId": "app-7f3e:conv-2091:task-4",
  "tenantRef": "4102", "accountRef": "subscriber-889201",
  "final": true,
  "calls": [ { "callId": "c1",
               "units": { "tokens_in": "9100",
                          "tokens_out": "9950" } } ]
}

200
{ "schemaVersion": 1, "maxSchemaVersion": 1,
  "directive": "SETTLED",
  "endedAt": "2026-09-01T10:19:42.114Z" }
]]></sourcecode>
      </section>
      <section anchor="app-a-4">
        <name>Stop obligation</name>
        <sourcecode type="http-message"><![CDATA[
200
{ "schemaVersion": 1, "maxSchemaVersion": 1,
  "directive": "STOP", "stopReason": "CEILING_REACHED",
  "endedAt": "2026-09-01T10:12:03.551Z" }
]]></sourcecode>
      </section>
      <section anchor="app-a-5">
        <name>Authorise → refuse metadata</name>
        <t>The two abbreviated outcomes below show the distinct conditional metadata rules of <xref target="s-6-4"/>:
<tt>retryAfter</tt> accompanies a retryable refusal, while the sponsor's party-scoped bound carries
<tt>limitOwner</tt>. Both carry the automated-decision notice; the second additionally shows a
tenant-configured human-review channel. This is a version-1.1 exchange (<tt>schemaVersion: 2</tt>,
<xref target="s-5"/>) — the disclosure fields belong to schema version 2; the other examples show version-1.0
exchanges. They are alternatives for separate Authorise attempts, not two responses to one
request.</t>
        <sourcecode type="http-message"><![CDATA[
POST /ocs/ai/v1/authorizations
{
  "schemaVersion": 2,
  "actionId": "app-7f3e:capacity-check",
  "tenantRef": "4102",
  "accountRef": "subscriber-889201",
  "actionType": "chat.frontier"
}

200 (capacity refusal)
{
  "schemaVersion": 2, "maxSchemaVersion": 2,
  "decision": "REFUSE", "refusalReason": "NO_CAPACITY",
  "retryable": true, "retryAfter": 5, "grade": "BOUNDED",
  "automatedDecision": true
}

200 (sponsor-cap refusal)
{
  "schemaVersion": 2, "maxSchemaVersion": 2,
  "decision": "REFUSE", "refusalReason": "EXPOSURE_CAP",
  "retryable": false, "grade": "PROVEN",
  "limitOwner": "Example AI Benefit Sponsor",
  "automatedDecision": true,
  "reviewContact": "support.example-tenant.com/spend-review"
}
]]></sourcecode>
      </section>
      <section anchor="app-a-6">
        <name>Stale report → CURRENT</name>
        <t>This exchange happens between A.2 and A.3, while the Action is still LIVE — after A.3's
close, the same stale body would instead draw the terminal directive (<xref target="s-3-5"/>, ENDED rows).
This non-final body differs from the retained report for <tt>g-000117</tt>, so it is not an
identity replay. Both values are below the stored high-water after A.2; the max-merge adds
zero, no ending condition holds, and the standing grant is re-presented (<xref target="s-3-5"/>, <xref target="s-7-3"/>). The
map rendering follows <xref target="s-7-3"/>'s weighted-difference description; <xref target="app-b"/>, schema note 5,
records the conflicting domain wording and keeps this representation provisional.</t>
        <sourcecode type="http-message"><![CDATA[
POST /ocs/ai/v1/grants/g-000117/reports
{
  "schemaVersion": 1,
  "actionId": "app-7f3e:conv-2091:task-4",
  "tenantRef": "4102", "accountRef": "subscriber-889201",
  "final": false,
  "calls": [
    { "callId": "c1",
      "units": { "tokens_in": "9000", "tokens_out": "7700" } }
  ]
}

200
{
  "schemaVersion": 1, "maxSchemaVersion": 1,
  "directive": "CURRENT",
  "grantId": "g-000118", "grantSeq": 2,
  "grantedUnits": "50000", "reportAt": "40000",
  "expiresAt": "2026-09-01T10:30:00.000Z",
  "unitWeights": { "tokens_in": "1", "tokens_out": "4" },
  "timeBandId": "offpeak",
  "baselineCumulative": { "tokens_in": "9100",
    "tokens_out": "7800" },
  "meterCumulative": { "tokens_in": "9100", "tokens_out": "7800" }
}
]]></sourcecode>
      </section>
      <section anchor="app-a-7">
        <name>Error envelope</name>
        <t>Here an Authorise estimate uses a JSON number instead of the canonical decimal string
required by <xref target="s-4-3"/>, so the request fails state-neutrally with the <xref target="s-13-1"/> envelope.</t>
        <sourcecode type="http-message"><![CDATA[
POST /ocs/ai/v1/authorizations
{
  "schemaVersion": 1,
  "actionId": "app-7f3e:conv-2091:task-bad",
  "tenantRef": "4102",
  "accountRef": "subscriber-889201",
  "actionType": "chat.frontier",
  "estimate": { "tokens_in": 12000 }
}

400
{
  "schemaVersion": 1,
  "errorCode": "MALFORMED_REQUEST",
  "message": "estimate values must be canonical decimal strings",
  "serverTime": "2026-09-01T10:20:11.006Z",
  "maxSchemaVersion": 1
}
]]></sourcecode>
      </section>
    </section>
    <section anchor="app-b">
      <name>Message schemas (CDDL, provisional)</name>
      <ul empty="true">
        <li>
          <t><strong>PROVISIONAL — HAND-WRITTEN:</strong> These schemas are hand-written from the prose of this
memo. They are to be regenerated from the reference implementation's validated model,
as Status of This Memo already specifies for the field-presence matrix. On any conflict,
the prose is authoritative.</t>
        </li>
      </ul>
      <t>The schemas use CDDL <xref target="RFC8610"/> to describe the JSON bodies. They do not define an additional
wire format. Settlement-receipt members are top-level response members; there is no nested
receipt object. Regular expressions encode the principal lexical restrictions; comments
retain the calendar and character-class details not usefully repeated in the message shapes.
The schemas describe the current protocol version (1.1, <tt>schemaVersion</tt> 2); members and
values whose comment says <tt>version 1.1</tt> belong to schema version 2 (<xref target="s-5"/>) — a
schema-version-1 exchange omits those fields, while the new value may still arrive under
<xref target="s-5"/>'s tolerance rule.</t>
      <sourcecode type="cddl"><![CDATA[
; ---------- Lexical and numeric types (section 4.3) ----------

schema-version = 1..9007199254740991
count = 0..9007199254740991
generation = 1..9007199254740991
positive-count = 1..9007199254740991

; At most 128 characters from [A-Za-z0-9._:-].
identifier = tstr .regexp "[A-Za-z0-9._:-]{0,128}"

; [a-z0-9_]{1,64}.
unit-type = tstr .regexp "[a-z0-9_]{1,64}"

; The expression fixes the wire layout. Year range and calendar
; validity remain
; subject to section 4.3.
timestamp = tstr .regexp
  "[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}\\.[0-9]{3}Z"

; At most 64 printable UTF-8 characters, excluding control and bidi
; controls.
display-label = tstr

; Each decimal below is a canonical decimal JSON string with scale at
; most 6.
request-decimal = tstr .regexp
  "1000000000|(0|[1-9][0-9]{0,8})(\\.[0-9]{0,5}[1-9])?"
pooled-decimal = tstr .regexp
  "(0|[1-9][0-9]{0,16})(\\.[0-9]{0,5}[1-9])?"
positive-pooled-decimal = tstr .regexp
  "0\\.[0-9]{0,5}[1-9]|[1-9][0-9]{0,16}(\\.[0-9]{0,5}[1-9])?"
positive-weight = tstr .regexp
  "1000000|0\\.[0-9]{0,5}[1-9]|[1-9][0-9]{0,5}(\\.[0-9]{0,5}[1-9])?"
canonical-decimal = tstr .regexp
  "(0|[1-9][0-9]*)(\\.[0-9]{0,5}[1-9])?"

request-unit-map = { *16 unit-type => request-decimal }
cumulative-unit-map = { *16 unit-type => request-decimal }
weight-map = { *16 unit-type => positive-weight }

; The prose leaves this as a representation ambiguity (schema note
; 5), but
; both members of one response have the same representation.
current-meter-fields =
  (
    baselineCumulative: cumulative-unit-map,
    meterCumulative: cumulative-unit-map
  )
  //
  (
    baselineCumulative: pooled-decimal,
    meterCumulative: pooled-decimal
  )

; ---------- Closed value sets (sections 5, 6.4, 7.4) ----------

ending = "CLOSE" / "STOP" / "LAPSE"
directive = "CONTINUE" / "CURRENT" / "SETTLED" / "STOP"
grade = "PROVEN" / "ATTESTED" / "BOUNDED"
reduce-cause = "CAPACITY"

error-code =
    "UNSUPPORTED_SCHEMA"
  / "LIMIT_EXCEEDED"
  / "MALFORMED_REPORT"
  / "MALFORMED_REQUEST"
  / "UNAUTHORIZED"
  / "FORBIDDEN"
  / "NOT_FOUND"
  / "METHOD_NOT_ALLOWED"
  / "UNSUPPORTED_MEDIA"
  / "RATE_LIMITED"
  / "UNAVAILABLE"
  / "INTERNAL"

stop-reason-without-owner =
    "CEILING_REACHED"
  / "NO_HEADROOM"
  / "CALL_LIMIT"
  / "MAX_RUNTIME"
  / "INFLATION"
  / "SIGNATURES_REQUIRED"
  / "PARENT_STOPPED"
  / "ADMIN_FORCED"
  / "DRAINING"
  / "NO_CAPACITY"
  / "LAPSED"

stop-fields =
  (
    stopReason: "EXPOSURE_CAP",
    limitOwner: display-label
  )
  //
  (
    stopReason: stop-reason-without-owner
  )

; ---------- Shared response envelope (sections 2, 5, 6.3) ----------

versioned-success = (
  schemaVersion: schema-version,
  maxSchemaVersion: schema-version,
  serverTime: timestamp
)

action-envelope = (
  actionLive: bool,
  currentGrantSeq: generation,
  currentGrantId: identifier,
  unattributable: bool
)

live-action-envelope = (
  actionLive: true,
  currentGrantSeq: generation,
  currentGrantId: identifier,
  unattributable: bool
)

ended-action-envelope = (
  actionLive: false,
  currentGrantSeq: generation,
  currentGrantId: identifier,
  unattributable: bool
)

ended-unattributable-envelope = (
  actionLive: false,
  currentGrantSeq: generation,
  currentGrantId: identifier,
  unattributable: true
)

; serverTime and maxSchemaVersion occur on every response. The four
; Action
; fields occur on every 200 that identifies an opened Action. They
; are absent
; from error envelopes and refusals of unopened Actions.

; ---------- Shared lifecycle-grant fields (section 6.3) ----------

limits = {
  maxCallsPerAction: count,
  maxRuntimeSec: count,
  maxConcurrentActions: count,
  ? signaturesRequired: bool,
  ? capacity-limit-fields
}

capacity-limit-fields = (
  minRate: canonical-decimal,
  enforcementWindowSec: positive-count
)

reduced-grant-fields = (
  rateReduced: true,
  reduceCause: reduce-cause
)

lifecycle-grant-fields = (
  grantId: identifier,
  grantSeq: generation,
  grantIssuedAt: timestamp,
  grantedUnits: positive-pooled-decimal,
  reportAt: positive-pooled-decimal,
  expiresAt: timestamp,
  unitWeights: weight-map,
  ? quantumUnits: positive-pooled-decimal,
  ? timeBandId: identifier,
  lawVersion: count,
  limits: limits,
  ? reduced-grant-fields
)

; ---------- Settlement receipts (sections 3.3, 6.5, 7.3) ----------

accepted-call = {
  callId: identifier,
  units: request-unit-map
}

receipt-core = (
  settlementId: identifier,
  acceptedCumulative: cumulative-unit-map,
  cyclePooledUnits: pooled-decimal,
  ? clamped: true
)

; Required on a settling Report response. acceptedCalls has exactly
; the Calls
; present in that Report request.
fresh-report-receipt = (
  receipt-core,
  acceptedCalls: [*256 accepted-call]
)

late-report-receipt = (
  receipt-core,
  acceptedCalls: [*256 accepted-call],
  adjustment: true
)

terminal-settlement-receipt =
  fresh-report-receipt // late-report-receipt

; Used for the "current receipt" on a zero-merge terminal response.
terminal-current-receipt = (
  receipt-core,
  ? acceptedCalls: [*256 accepted-call]
)

; acceptedCalls appears on Report responses only.
authorise-settlement-receipt = (
  receipt-core,
  ? adjustment: true
)

; The accepted baseline is the only member explicitly named for a
; live
; Authorise re-presentation; the remaining receipt members are
; provisional.
authorise-baseline-receipt = (
  acceptedCumulative: cumulative-unit-map,
  ? settlementId: identifier,
  ? cyclePooledUnits: pooled-decimal,
  ? clamped: true
)

; A flat opening has no units to accept.
flat-opening-receipt = (
  settlementId: identifier
)

; ---------- Authorise request (section 6.1) ----------

authorise-request = {
  schemaVersion: schema-version,
  actionId: identifier,
  tenantRef: identifier,
  accountRef: identifier,
  actionType: identifier,
  ? estimate: request-unit-map,
  ? scope: identifier,
  ? parentActionId: identifier,
  ? gatewayTime: timestamp
}

; ---------- Authorise GRANT responses (sections 3.3, 6.3, 6.5)
; ----------

authorise-grant-response =
    authorise-live-grant-response
  / authorise-flat-grant-response
  / authorise-terminal-grant-response

authorise-live-grant-response = {
  versioned-success,
  live-action-envelope,
  decision: "GRANT",
  lifecycle-grant-fields,
  ? authorise-baseline-receipt
}

authorise-flat-grant-response = {
  versioned-success,
  ended-action-envelope,
  decision: "GRANT",
  grantId: identifier,
  grantSeq: generation,
  ? timeBandId: identifier,
  settled: true,
  endedAt: timestamp,
  ? ending: "CLOSE",
  flat-opening-receipt
}

last-grant-reference = (
  grantId: identifier,
  grantSeq: generation
)

authorise-terminal-grant-response = {
  versioned-success,
  ended-action-envelope,
  decision: "GRANT",
  ? last-grant-reference,
  ? settled: true,
  ending: ending,
  endedAt: timestamp,
  authorise-settlement-receipt
}

; ---------- Authorise REFUSE response (section 6.4) ----------

unopened-refusal-fields =
  (
    refusalReason: "NO_CAPACITY" / "PREEMPTED",
    retryable: true,
    retryAfter: count,
    grade: "BOUNDED",
    ? limitOwner: display-label
  )
  //
  (
    refusalReason: "DRAINING",
    retryable: true,
    retryAfter: count,
    grade: "ATTESTED"
  )
  //
  (
    refusalReason:
        "ACCOUNT_VELOCITY"
      / "BALANCE_VELOCITY"
      / "GROUP_VELOCITY"        ; v1.1 (schemaVersion 2)
      / "MAX_CONCURRENT_ACTIONS",
    retryable: true,
    retryAfter: count,
    grade: "PROVEN",
    ? limitOwner: display-label
  )
  //
  (
    refusalReason: "SERVICE_BARRED",
    retryable: false,
    ? retryAfter: count,
    grade: "ATTESTED"
  )
  //
  (
    refusalReason: "EXPOSURE_CAP",
    retryable: false,
    ? retryAfter: count,
    grade: "PROVEN",
    limitOwner: display-label
  )
  //
  (
    refusalReason:
        "NO_HEADROOM"
      / "CEILING_PREEMPT",
    retryable: false,
    ? retryAfter: count,
    grade: "PROVEN",
    ? limitOwner: display-label
  )
  //
  (
    refusalReason: "PARENT_STOPPED" / "NO_LAW" / "BLOCKED_TARIFF",
    retryable: false,
    ? retryAfter: count,
    grade: "PROVEN"
  )

duplicate-refusal-fields = (
  refusalReason: "DUPLICATE_ACTION",
  retryable: false,
  ? retryAfter: count,
  grade: "PROVEN"
)

authorise-refuse-response =
    authorise-unopened-refuse-response
  / authorise-duplicate-refuse-response

authorise-unopened-refuse-response = {
  versioned-success,
  decision: "REFUSE",
  automatedDecision: true,      ; v1.1 (schemaVersion 2)
  ? reviewContact: display-label, ; v1.1 (schemaVersion 2)
  unopened-refusal-fields
}

authorise-duplicate-refuse-response = {
  versioned-success,
  decision: "REFUSE",
  automatedDecision: true,      ; v1.1 (schemaVersion 2)
  ? reviewContact: display-label, ; v1.1 (schemaVersion 2)
  duplicate-refusal-fields,
  ? action-envelope
}

; CLASS_BLOCKED is reserved and never emitted in version 1.

; ---------- Report request (sections 7.1, 7.2) ----------

report-call = {
  callId: identifier,
  units: request-unit-map,
  ? startedAt: timestamp,       ; v1.1 (schemaVersion 2)
  ? signature: tstr
}

report-request = {
  schemaVersion: schema-version,
  actionId: identifier,
  tenantRef: identifier,
  accountRef: identifier,
  calls: [*256 report-call],
  final: bool,
  ? gatewayTime: timestamp
}

; The path grantId participates in request identity but is not a body
; member.

; ---------- Report responses (sections 3.5, 7.3, 7.6) ----------

report-response =
    report-continue-response
  / report-current-response
  / report-stop-response
  / report-settled-response

; actionLive can be false when a retained CONTINUE outcome is
; replayed after
; the Action has ended; the fresh envelope overrides the stored
; grant.
report-continue-response = {
  versioned-success,
  action-envelope,
  directive: "CONTINUE",
  lifecycle-grant-fields,
  fresh-report-receipt
}

report-current-response = {
  versioned-success,
  live-action-envelope,
  directive: "CURRENT",
  lifecycle-grant-fields,
  current-meter-fields
}

report-stop-response =
    report-stop-settlement-response
  / report-stop-current-response
  / report-stop-unattributable-response

report-stop-settlement-response = {
  versioned-success,
  ended-action-envelope,
  directive: "STOP",
  stop-fields,
  endedAt: timestamp,
  terminal-settlement-receipt
}

report-stop-current-response = {
  versioned-success,
  ended-action-envelope,
  directive: "STOP",
  stop-fields,
  endedAt: timestamp,
  terminal-current-receipt
}

report-stop-unattributable-response = {
  versioned-success,
  ended-unattributable-envelope,
  directive: "STOP",
  stop-fields,
  endedAt: timestamp,
  ? terminal-current-receipt
}

report-settled-response =
    report-settled-settlement-response
  / report-settled-current-response
  / report-flat-settled-response
  / report-settled-unattributable-response

report-settled-settlement-response = {
  versioned-success,
  ended-action-envelope,
  directive: "SETTLED",
  endedAt: timestamp,
  terminal-settlement-receipt
}

report-settled-current-response = {
  versioned-success,
  ended-action-envelope,
  directive: "SETTLED",
  endedAt: timestamp,
  terminal-current-receipt
}

report-flat-settled-response = {
  versioned-success,
  ended-action-envelope,
  directive: "SETTLED",
  endedAt: timestamp,
  ? settlementId: identifier
}

report-settled-unattributable-response = {
  versioned-success,
  ended-unattributable-envelope,
  directive: "SETTLED",
  endedAt: timestamp,
  ? terminal-current-receipt
}

; A retained terminal replay has the same stored directive body and
; receipt
; as the original response, but versioned-success and action-envelope
; are
; recomputed. A replayed CONTINUE can therefore carry actionLive:
; false.
terminal-stored-outcome-replay =
    report-continue-response
  / report-stop-response
  / report-settled-response

; ---------- Error envelope (sections 5, 13.1, 13.2) ----------

error-envelope = {
  ? schemaVersion: count,
  errorCode: error-code,
  message: any,
  serverTime: timestamp,
  maxSchemaVersion: schema-version,
  ? retryable: bool,
  ? retryAfter: count
}

; schemaVersion is present only when parseable. Error envelopes never
; carry
; actionLive, currentGrantSeq, currentGrantId, or unattributable.
]]></sourcecode>
      <section anchor="app-b-1">
        <name>Schema notes — ambiguities found</name>
        <ol spacing="normal" type="1"><li>
            <t>Section 6.5 requires a live Authorise replay to include the standing grant's
"cycle-baseline receipt", but explicitly identifies only <tt>acceptedCumulative</tt>.
Section 7.3 defines the remaining receipt fields for settling Report responses, while
the first grant has no preceding settlement. The schema therefore makes the baseline
receipt optional and makes its other members optional.</t>
          </li>
          <li>
            <t>An Authorise terminal acknowledgement explicitly contains <tt>decision</tt>, <tt>ending</tt>,
<tt>endedAt</tt>, and the final receipt, with <tt>settled</tt> "where applicable". It does not say
whether <tt>grantId</tt> and <tt>grantSeq</tt> are repeated, or enumerate the applicability of
<tt>settled</tt>. The schema makes the last-grant reference and <tt>settled</tt> optional.</t>
          </li>
          <li>
            <t>The initial flat-GRANT state-machine row names <tt>settled</tt> and <tt>endedAt</tt>, while an
ended-Action Authorise replay names <tt>ending</tt>. It is not explicit whether the initial
flat response also carries <tt>ending: "CLOSE"</tt>; the schema makes it optional.</t>
          </li>
          <li>
            <t>The shared-envelope definition requires Action-state fields on every 200 that
identifies an opened Action and excludes them on refusals of unopened Actions. It is
unclear whether <tt>REFUSE / DUPLICATE_ACTION</tt> counts as identifying the already-opened
Action. The unopened REFUSE shape excludes the envelope; only the duplicate-Action
branch optionally permits the complete envelope.</t>
          </li>
          <li>
            <t>Sections 3.5 and 7.3 describe <tt>baselineCumulative</tt> and <tt>meterCumulative</tt> as meter states
whose difference is weighted. Section 4.3 groups their "pooled values" with derived
quantities in <tt>[0, 10^17)</tt>. The examples provisionally use per-unit maps because the
weighted-difference operation needs them; <tt>current-meter-fields</tt> permits either a
map/map or pooled-scalar/pooled-scalar representation because the exact JSON shape and value
domain require adjudication.</t>
          </li>
          <li>
            <t>A zero-merge terminal response carries the "current receipt", but <xref target="s-7-3"/> defines
<tt>acceptedCalls</tt> relative to the Calls present in the request that caused a settlement.
It is unclear what <tt>acceptedCalls</tt> contains for a non-settling zero-merge request, so it
is optional in <tt>terminal-current-receipt</tt>.</t>
          </li>
          <li>
            <t>For recognised new consumption that can no longer be settled, <xref target="s-3-5"/> says there is no
<tt>settlementId</tt>, while <xref target="s-7-6"/> says there is no <em>new</em> <tt>settlementId</tt> and also refers to the
stored terminal outcome. It is unclear whether an old current receipt remains present;
the unattributable terminal shapes therefore permit it optionally.</t>
          </li>
          <li>
            <t>A Report to a flat Action receives <tt>SETTLED</tt> and never settles. The prose does not say
whether the response re-presents the flat opening receipt's <tt>settlementId</tt>; the flat
Report shape therefore makes it optional.</t>
          </li>
          <li>
            <t><tt>retryAfter</tt> is required when an Authorise refusal has <tt>retryable: true</tt>, but its
presence is not expressly forbidden or defined when <tt>retryable: false</tt>. The false
variants therefore model it as optional. The error envelope separately leaves
<tt>retryable</tt> and <tt>retryAfter</tt> independently optional and does not couple them to an HTTP
status.</t>
          </li>
          <li>
            <t>The JSON type, length, and character domain of error-envelope <tt>message</tt> are not stated
in <xref target="s-4-3"/> or <xref target="s-13-1"/>. The provisional schema uses <tt>any</tt>; if a JSON string is intended, an
authoritative field rule is needed before regeneration.</t>
          </li>
          <li>
            <t>Section 7.3 does not state whether each <tt>acceptedCalls[].units</tt> map is complete over
the declared unit types or contains only the keys relevant to that Call or request.
The schema permits any within-limit unit map.</t>
          </li>
          <li>
            <t>The exact trigger for <tt>clamped: true</tt> is not fully mechanical: <xref target="s-7-3"/> says "limited by
the meter or a ceiling", although every settlement is bounded by the meter. The schema
preserves the stated optional presence and does not infer a trigger.</t>
          </li>
          <li>
            <t><tt>minRate</tt> is a pooled-units-per-second decimal, but <xref target="s-4-3"/> does not unambiguously assign
it the request, weight, or derived-pooled upper domain. The schema enforces only the
canonical decimal representation pending regeneration.</t>
          </li>
          <li>
            <t>The 256 KB request limit does not say whether KB is decimal or binary, so CDDL cannot
express an exact byte <tt>.size</tt> bound without choosing a meaning.</t>
          </li>
          <li>
            <t>Section 7.7 requires a Report that flushes the final meter after STOP, but does not
state the value of that Report's required <tt>final</tt> field. The request schema accepts
either Boolean, and the outage diagram does not choose one.</t>
          </li>
          <li>
            <t>Section 6.4 requires <tt>limitOwner</tt> for a party-scoped bound but does not enumerate every
refusal reason that can be party-scoped. Section 12.1 makes it unconditionally present
for <tt>EXPOSURE_CAP</tt>. The schema requires it there, permits it on the bound-like refusal
shapes, and excludes it from conditions that the prose does not describe as bounds.</t>
          </li>
        </ol>
      </section>
    </section>
    <section anchor="app-c">
      <name>Worked arithmetic (illustrative)</name>
      <t>This appendix follows one quantised lifecycle from Authorise through CLOSE. It illustrates
the cumulative pipeline of <xref target="s-7-2"/>; that section remains authoritative. All quantities are
work units or pooled units — never money.</t>
      <section anchor="app-c-1">
        <name>Authorise and opening grant</name>
        <t>The Action Type declares two unit types with distinct weights and a pooled quantum of 10:</t>
        <table>
          <thead>
            <tr>
              <th align="left">Unit type</th>
              <th align="right">Weight</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">
                <tt>tokens_in</tt></td>
              <td align="right">
                <tt>0.333333</tt></td>
            </tr>
            <tr>
              <td align="left">
                <tt>tokens_out</tt></td>
              <td align="right">
                <tt>2.5</tt></td>
            </tr>
          </tbody>
        </table>
        <t>The gateway opens the Action with both types in its estimate:</t>
        <sourcecode type="http-message"><![CDATA[
POST /ocs/ai/v1/authorizations
{
  "schemaVersion": 1,
  "actionId": "arith-action-1",
  "tenantRef": "4102",
  "accountRef": "subscriber-arith",
  "actionType": "chat.quantised",
  "estimate": { "tokens_in": "18", "tokens_out": "10.1" }
}
]]></sourcecode>
        <t>The full opening GRANT is:</t>
        <sourcecode type="http-message"><![CDATA[
200
{
  "schemaVersion": 1,
  "maxSchemaVersion": 1,
  "decision": "GRANT",
  "grantId": "g-arith-1",
  "grantSeq": 1,
  "grantIssuedAt": "2026-09-01T10:00:00.000Z",
  "grantedUnits": "20",
  "reportAt": "15",
  "expiresAt": "2026-09-01T10:05:00.000Z",
  "unitWeights": { "tokens_in": "0.333333", "tokens_out": "2.5" },
  "quantumUnits": "10",
  "serverTime": "2026-09-01T10:00:00.000Z",
  "actionLive": true,
  "currentGrantSeq": 1,
  "currentGrantId": "g-arith-1",
  "unattributable": false,
  "lawVersion": 1,
  "limits": {
    "maxCallsPerAction": 10,
    "maxRuntimeSec": 600,
    "maxConcurrentActions": 4
  }
}
]]></sourcecode>
        <t>The first cycle baseline is the zero meter (<xref target="s-7-3"/>):
<tt>M0 = {tokens_in: 0, tokens_out: 0}</tt>. Applying <xref target="s-7-2"/> gives pooled total <tt>P0 = 0</tt>
and block count <tt>B0 = ceil(P0 / 10) = ceil(0 / 10) = 0</tt>.</t>
        <t>For each accepted meter <tt>Mk</tt>, the calculations below use the <xref target="s-7-2"/> formulas:</t>
        <artwork><![CDATA[
P_u(k) = HALF_UP_6(weight_u * cumulativeTotal_u(k))
P(k)   = exact sum of P_u(k) over unit types
D(k)   = P(k) - P(cycle baseline)     ; raw cycle pool consumption
B(k)   = ceil(P(k) / quantumUnits)
DB(k)  = B(k) - B(previous settlement) ; newly charged block delta
]]></artwork>
        <t><tt>D(k)</tt>, not <tt>DB(k) * quantumUnits</tt>, is compared with <tt>reportAt</tt> and the grant pool
(<xref target="s-7-2"/>). <tt>cyclePooledUnits</tt> carries that raw pre-quantisation delta (<xref target="s-7-3"/>).</t>
      </section>
      <section anchor="app-c-2">
        <name>Cycle 1 — threshold crossing, settlement, and re-grant</name>
        <t>At <tt>2026-09-01T10:01:00.000Z</tt>, the gateway reports one Call cumulatively against G1:</t>
        <sourcecode type="json"><![CDATA[
{
  "schemaVersion": 1,
  "actionId": "arith-action-1",
  "tenantRef": "4102",
  "accountRef": "subscriber-arith",
  "calls": [
    { "callId": "c1",
      "units": { "tokens_in": "10", "tokens_out": "4.666669" } }
  ],
  "final": false
}
]]></sourcecode>
        <t>The cumulative products and exact sum are:</t>
        <artwork><![CDATA[
P_in(1)  = HALF_UP_6(0.333333 * 10)
         = HALF_UP_6(3.333330) = 3.33333                (section 7.2)
P_out(1) = HALF_UP_6(2.5 * 4.666669)
         = HALF_UP_6(11.6666725) = 11.666673            (section 7.2)
P(1)     = 3.33333 + 11.666673 = 15.000003             (section 7.2)
D(1)     = P(1) - P0 = 15.000003 - 0 = 15.000003       (section 7.2)
]]></artwork>
        <t>Thus <tt>D(1) = 15.000003 &gt;= reportAt 15</tt> and <tt>D(1) &lt;= grantedUnits 20</tt>. The crossing runs a
settling cycle and produces CONTINUE with G2. Quantised rating is cumulative:</t>
        <artwork><![CDATA[
B(1)  = ceil(15.000003 / 10) = 2                        (section 7.2)
DB(1) = B(1) - B0 = 2 - 0 = 2 newly charged blocks     (section 7.2)
]]></artwork>
        <t>Those two blocks represent 20 pooled units in the quantised rating. No such derived block
field is added to the wire. The receipt members in the top-level response are exactly:</t>
        <sourcecode type="json"><![CDATA[
{
  "settlementId": "s-arith-1",
  "acceptedCumulative": { "tokens_in": "10",
    "tokens_out": "4.666669" },
  "acceptedCalls": [
    { "callId": "c1",
      "units": { "tokens_in": "10", "tokens_out": "4.666669" } }
  ],
  "cyclePooledUnits": "15.000003"
}
]]></sourcecode>
        <t>Neither <tt>clamped</tt> nor <tt>adjustment</tt> is present. CONTINUE mints G2 with
<tt>grantId: "g-arith-2"</tt>, <tt>grantSeq: 2</tt>,
<tt>grantIssuedAt: "2026-09-01T10:01:00.000Z"</tt>, <tt>grantedUnits: "12"</tt>, <tt>reportAt: "9"</tt>, and
<tt>expiresAt: "2026-09-01T10:06:00.000Z"</tt>; its pinned weights, quantum, law, and limits are
unchanged. Its fresh envelope has <tt>actionLive: true</tt>, <tt>currentGrantSeq: 2</tt>,
<tt>currentGrantId: "g-arith-2"</tt>, and <tt>unattributable: false</tt>. The cycle baseline moves to
<tt>M1 = {tokens_in: 10, tokens_out: 4.666669}</tt>, whose pooled value is <tt>P(1)</tt> (<xref target="s-7-3"/>).</t>
      </section>
      <section anchor="app-c-3">
        <name>Stale, out-of-order report — zero merge and CURRENT</name>
        <t>At <tt>2026-09-01T10:01:10.000Z</tt>, a stale worker sends a different non-final request against
superseded G1 with <tt>c1 = {tokens_in: 9, tokens_out: 4.5}</tt>. It is not the retained Cycle 1
identity. Per <xref target="s-7-2"/>, the max-merge is:</t>
        <artwork><![CDATA[
max({10, 4.666669}, {9, 4.5}) = {10, 4.666669}; meter increase = 0
]]></artwork>
        <t>No ending condition holds. Under <xref target="s-3-5"/> LIVE row 6 and <xref target="s-7-3"/>, the response is CURRENT. The
full standing G2 grant is re-presented; the selected convergence fields are below. As in
A.6, the per-unit map rendering is provisional under <xref target="app-b"/>, schema note 5.</t>
        <sourcecode type="json"><![CDATA[
{
  "directive": "CURRENT",
  "grantId": "g-arith-2",
  "grantSeq": 2,
  "baselineCumulative": { "tokens_in": "10",
    "tokens_out": "4.666669" },
  "meterCumulative": { "tokens_in": "10", "tokens_out": "4.666669" },
  "actionLive": true,
  "currentGrantSeq": 2,
  "currentGrantId": "g-arith-2",
  "unattributable": false
}
]]></sourcecode>
        <t>There is no settlement, receipt, charge, or mint; the current generation remains 2.</t>
      </section>
      <section anchor="app-c-4">
        <name>Cycle 2 — the baseline moves again</name>
        <t>At <tt>2026-09-01T10:02:00.000Z</tt>, the gateway reports against G2 with the cumulative meter
<tt>M2 = {tokens_in: 15, tokens_out: 7.8}</tt>:</t>
        <artwork><![CDATA[
P_in(2)  = HALF_UP_6(0.333333 * 15) = 4.999995          (section 7.2)
P_out(2) = HALF_UP_6(2.5 * 7.8) = 19.5                 (section 7.2)
P(2)     = 4.999995 + 19.5 = 24.499995                 (section 7.2)
D(2)     = P(2) - P(1)
         = 24.499995 - 15.000003 = 9.499992             (section 7.2)
]]></artwork>
        <t><tt>D(2) = 9.499992 &gt;= reportAt 9</tt> and <tt>D(2) &lt;= grantedUnits 12</tt>, so this is another
settlement and re-grant. The cumulative block calculation is:</t>
        <artwork><![CDATA[
B(2)  = ceil(24.499995 / 10) = 3                        (section 7.2)
DB(2) = B(2) - B(1) = 3 - 2 = 1 newly charged block    (section 7.2)
]]></artwork>
        <t>The exact top-level receipt members are:</t>
        <sourcecode type="json"><![CDATA[
{
  "settlementId": "s-arith-2",
  "acceptedCumulative": { "tokens_in": "15", "tokens_out": "7.8" },
  "acceptedCalls": [
    { "callId": "c1",
      "units": { "tokens_in": "15", "tokens_out": "7.8" } }
  ],
  "cyclePooledUnits": "9.499992"
}
]]></sourcecode>
        <t>Again, <tt>clamped</tt> and <tt>adjustment</tt> are absent. CONTINUE mints G3 with
<tt>grantId: "g-arith-3"</tt>, <tt>grantSeq: 3</tt>,
<tt>grantIssuedAt: "2026-09-01T10:02:00.000Z"</tt>, <tt>grantedUnits: "10"</tt>, <tt>reportAt: "8"</tt>, and
<tt>expiresAt: "2026-09-01T10:07:00.000Z"</tt>. Its envelope carries current generation 3 and
current id <tt>g-arith-3</tt>. The new baseline is
<tt>M2 = {tokens_in: 15, tokens_out: 7.8}</tt> with pooled value <tt>P(2)</tt> (<xref target="s-7-3"/>).</t>
      </section>
      <section anchor="app-c-5">
        <name>Final report — CLOSE and terminal settlement</name>
        <t>At <tt>2026-09-01T10:02:30.000Z</tt>, the gateway sends <tt>final: true</tt> against G3 with cumulative
meter <tt>M3 = {tokens_in: 18, tokens_out: 10.1}</tt>. The close is allowed before <tt>reportAt</tt>; it
settles the full remaining meter delta (<xref target="s-3-5"/>, <xref target="s-7-3"/>):</t>
        <artwork><![CDATA[
P_in(3)  = HALF_UP_6(0.333333 * 18) = 5.999994          (section 7.2)
P_out(3) = HALF_UP_6(2.5 * 10.1) = 25.25               (section 7.2)
P(3)     = 5.999994 + 25.25 = 31.249994                (section 7.2)
D(3)     = P(3) - P(2)
         = 31.249994 - 24.499995 = 6.749999             (section 7.2)
B(3)     = ceil(31.249994 / 10) = 4                     (section 7.2)
DB(3)    = B(3) - B(2) = 4 - 3 = 1 newly charged block (section 7.2)
]]></artwork>
        <t><tt>D(3) = 6.749999 &lt;= grantedUnits 10</tt>. The exact terminal receipt members are:</t>
        <sourcecode type="json"><![CDATA[
{
  "settlementId": "s-arith-3",
  "acceptedCumulative": { "tokens_in": "18", "tokens_out": "10.1" },
  "acceptedCalls": [
    { "callId": "c1",
      "units": { "tokens_in": "18", "tokens_out": "10.1" } }
  ],
  "cyclePooledUnits": "6.749999"
}
]]></sourcecode>
        <t>Neither optional flag is present. The response directive is SETTLED; the Action's ending
is CLOSE and <tt>endedAt</tt> is <tt>2026-09-01T10:02:30.000Z</tt>. The closing outcome mints generation
4 without minting a serving grant. The terminal envelope is therefore
<tt>actionLive: false</tt>, <tt>currentGrantSeq: 4</tt>, <tt>currentGrantId: "g-arith-3"</tt>, and
<tt>unattributable: false</tt> (<xref target="s-3-5"/>).</t>
        <t>As a final check, the raw receipt deltas sum without cadence loss:</t>
        <artwork><![CDATA[
15.000003 + 9.499992 + 6.749999 = 31.249994 = P(3) - P0
]]></artwork>
        <t>The charged block deltas also telescope:</t>
        <artwork><![CDATA[
2 + 1 + 1 = 4 = ceil(31.249994 / 10)
]]></artwork>
        <t>The stale report contributes zero to both checks. This is the cadence-independence property
of the cumulative pipeline in <xref target="s-7-2"/>.</t>
      </section>
    </section>
    <section anchor="app-d">
      <name>Vocabulary mapping (informative)</name>
      <t>The implementing charging stack and its surrounding documents use an established telecom
vocabulary; Pulse deliberately uses short, wire-suited, vendor-neutral names.
The table translates between the two. The wire vocabulary is the protocol's; the left
column is one implementer's, recorded here so that a reader of either vocabulary can
read the other.</t>
      <t>Each D.1 definition is the opening of the framework's own definition box in its
current edition, pasted rather than paraphrased; the objects are identical in v3.1, the
edition this document cites, <strong>except row 17</strong> (Relation: v3.1's box reads "EXPOSED or
EXECUTES"; HOLDS and RELIES arrived at v4.0). "<em>No wire concept</em>" is a deliberate entry,
not a gap: the concept lives entirely server-side, and the gateway sees only its
consequences.</t>
      <t><strong>Framework terms not listed here</strong> — every Event the engine writes, the Class, the
Draw-down Order, the Night, the Bill, the Commercial Group, the Governance Floor, the
Platform, the record kinds — are server-side objects with no wire counterpart, and their
absence is deliberate. Their one-line dispositions, together with every term this document
and its implementation use, are carried in the <strong>Pulse vocabulary register</strong>: a companion
document owned with this specification, seeded from the framework's register of
6 September 2026 and checked against every draft by script, so that silence here is
declared once rather than mistaken for support (<xref target="s-1-4"/>).</t>
      <section anchor="app-d-1">
        <name>The framework's terms</name>
        <table>
          <thead>
            <tr>
              <th align="left">#</th>
              <th align="left">Framework term — the opening of its definition box</th>
              <th align="left">This specification</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">1</td>
              <td align="left">
                <strong>Action</strong> — <em>One customer-visible unit of work with one price question: a question answered, a picture generated, a research task completed.</em></td>
              <td align="left">
                <strong>Action</strong> (shared term)</td>
            </tr>
            <tr>
              <td align="left">2</td>
              <td align="left">
                <strong>Balance</strong> — <em>Money with rules: an amount, a priority in the draw-down order, optionally a Scope and an Expiry, and a declared behaviour at its limit.</em></td>
              <td align="left">
                <em>No wire concept</em> — the server holds it; the gateway sees refusals and stops. <tt>scope</tt> names a Balance's Scope (<xref target="s-6-1"/>)</td>
            </tr>
            <tr>
              <td align="left">3</td>
              <td align="left">
                <strong>Ceiling</strong> — <em>The most one Action may charge — "up to" as an enforced number.</em></td>
              <td align="left">
                <strong>Ceiling / headroom</strong> (shared term, <xref target="s-2"/>); it reaches the wire only as <tt>CEILING_REACHED</tt> (stop) and <tt>CEILING_PREEMPT</tt> (refusal). <tt>limits</tt> is a different object (the disclosed protective bounds, <xref target="s-6-3"/>), and <tt>limitOwner</tt> belongs to the sponsor cap (<xref target="s-12-1"/>)</td>
            </tr>
            <tr>
              <td align="left">4</td>
              <td align="left">
                <strong>Countable</strong> — <em>A number computed from records that answers one operational question, on a stated cadence and at a stated grain.</em></td>
              <td align="left">
                <em>No wire concept</em> — the meter's unit is the framework's <em>counted unit</em>: <tt>units</tt> and the unit types (<xref target="s-7-2"/>)</td>
            </tr>
            <tr>
              <td align="left">5</td>
              <td align="left">
                <strong>Cycle</strong> — <em>One Quota's span: grant, consume, settle. A reserved Action is a chain of Cycles.</em></td>
              <td align="left">
                <strong>Cycle</strong> (shared term); the cycle Report rides it (<xref target="s-7-3"/>)</td>
            </tr>
            <tr>
              <td align="left">6</td>
              <td align="left">
                <strong>Expiry</strong> — <em>A date after which a Balance's unreserved credits are written off. Reserved credits are spared until their Actions settle.</em></td>
              <td align="left">
                <em>No wire concept.</em> Through draft-03 this document's ending for a lapsed grant was named <tt>EXPIRY</tt> and the two were false friends; from draft-04 that ending is <tt>LAPSE</tt> (D.2)</td>
            </tr>
            <tr>
              <td align="left">7</td>
              <td align="left">
                <strong>Facility</strong> — <em>One regulatory regime, as fine-grained as reality requires — Belgium; Kenya; a single US state where its rules differ.</em></td>
              <td align="left">
                <em>No wire concept</em> — <tt>tenantRef</tt> identifies the Tenant, which a Facility contains (D.2)</td>
            </tr>
            <tr>
              <td align="left">8</td>
              <td align="left">
                <strong>Grant</strong> — no definition box: the second step of the loop <em>Authorise · Grant · Supervise · Settle</em>, the act of issuing a Quota</td>
              <td align="left">
                <tt>decision: GRANT</tt> (<xref target="s-6-3"/>) — the act. The object the framework calls a Quota is this document's <strong>Grant</strong> (row 16)</td>
            </tr>
            <tr>
              <td align="left">9</td>
              <td align="left">
                <strong>Metering Point</strong> — <em>The component that executes Inference Calls, counts consumption and obeys the Quota. In the AI ecosystem the role is played by the gateway.</em></td>
              <td align="left">The <strong>Gateway</strong> (<xref target="s-2"/>) — <xref target="s-15-7"/>'s attesting party</td>
            </tr>
            <tr>
              <td align="left">10</td>
              <td align="left">
                <strong>Node</strong> — no definition box; the reference engine's <tt>class Node</tt>: <em>one path from the Platform through the Facility chain to a Tenant</em></td>
              <td align="left">
                <tt>tenantRef</tt>, and <tt>accountRef</tt> for the position below — <strong>not <tt>scope</tt></strong></td>
            </tr>
            <tr>
              <td align="left">11</td>
              <td align="left">
                <strong>Packet</strong> (Substantiation Packet) — <em>Everything needed to defend one Charge to a regulator or a court, in five limbs.</em></td>
              <td align="left">Partial: the per-settlement receipt (<xref target="s-7-3"/>) is the wire-visible record; the Packet itself is off-wire</td>
            </tr>
            <tr>
              <td align="left">12</td>
              <td align="left">
                <strong>Party</strong> — <em>A legal or natural person with standing in at least one relation. The Framework records that a party holds a relation, or changed; it never verifies who they are.</em></td>
              <td align="left">The roles a party takes on this wire: sponsor (<tt>limitOwner</tt>), subscriber (<tt>accountRef</tt>), gateway (the credential), tenant (<xref target="s-2"/>); <tt>limitOwner</tt> names the exposed one (<xref target="s-12-1"/>)</td>
            </tr>
            <tr>
              <td align="left">13</td>
              <td align="left">
                <strong>Period</strong> — <em>The Bill's integration window, opened and closed on the Facility's calendar.</em></td>
              <td align="left">The sponsor's declared accounting window (<xref target="s-12-1"/>) — narrower; the Bill's Period has no wire term</td>
            </tr>
            <tr>
              <td align="left">14</td>
              <td align="left">
                <strong>Price Book</strong> — <em>A Tenant's complete set of Action Types with their price forms and elements, held as a versioned object with an identity.</em></td>
              <td align="left">No wire object — <tt>lawVersion</tt> is "the pinned plan/price-book version" (<xref target="s-6-3"/>); the book itself is the tenant's published catalogue, server-side</td>
            </tr>
            <tr>
              <td align="left">15</td>
              <td align="left">
                <strong>Profile</strong> (Metering Point Profile) — <em>The record of what an integration actually does, per route … Established by running the conformance suite against it, never by reading its documentation.</em></td>
              <td align="left">
                <strong>Integration profile</strong> (<xref target="s-2"/>, <xref target="s-12-4"/>) — a related object under a different name; <strong>not this document's <em>deployment profile</em></strong> — the false friend below</td>
            </tr>
            <tr>
              <td align="left">16</td>
              <td align="left">
                <strong>Quota</strong> — <em>The Reservation's outside face: the same amount expressed to the Metering Point in work units, carrying a report threshold and a Validity.</em></td>
              <td align="left">
                <strong>Grant</strong> (<tt>grantedUnits</tt>, <tt>reportAt</tt>, <tt>expiresAt</tt>) — the RFC 4006 granted-quota concept (<xref target="s-1-2"/>)</td>
            </tr>
            <tr>
              <td align="left">17</td>
              <td align="left">
                <strong>Relation</strong> — <em>A dated, typed, scoped link between a Party and work: EXPOSED or EXECUTES.</em> (v3.1's box; the current edition adds <em>the record relation, HOLDS and RELIES</em>)</td>
              <td align="left">
                <em>No wire concept</em> — the wire sees the sponsor relation only through <tt>limitOwner</tt>; the exposure relation's aggregate is <tt>EXPOSURE_CAP</tt>'s basis (<xref target="s-12-1"/>)</td>
            </tr>
            <tr>
              <td align="left">18</td>
              <td align="left">
                <strong>Reservation</strong> — <em>Credits set aside on a Balance for one Action, under the Solvency Rule. The promise held against money.</em></td>
              <td align="left">An open grant (pool exposure) — "spend the sponsor is already standing behind" (<xref target="s-12-1"/>)</td>
            </tr>
            <tr>
              <td align="left">19</td>
              <td align="left">
                <strong>Action Type</strong> — <em>The Price Book row an Action instantiates: its price form, its elements, its counted unit, its thresholds.</em></td>
              <td align="left">
                <strong>Action Type</strong> (<tt>actionType</tt>; <xref target="s-2"/>, <xref target="s-6-1"/>)</td>
            </tr>
            <tr>
              <td align="left">20</td>
              <td align="left">
                <strong>Effective Law</strong> — <em>The single package of properties an Action receives at open: the path from Platform through its Facility chain to its Tenant, resolved top-down.</em></td>
              <td align="left">The law pinned at open (<xref target="s-2"/>, <xref target="s-6-2"/>); <tt>lawVersion</tt> identifies its version</td>
            </tr>
            <tr>
              <td align="left">21</td>
              <td align="left">
                <strong>Tenant</strong> — <em>Whose money and commercial law. A Tenant owns its Price Book, its Balances and one settlement relationship, and attaches to exactly one Facility.</em></td>
              <td align="left">
                <strong>Tenant</strong> (<tt>tenantRef</tt>; <xref target="s-2"/>, <xref target="s-6-1"/>)</td>
            </tr>
            <tr>
              <td align="left">22</td>
              <td align="left">
                <strong>Weights</strong> — <em>Per-type conversion from counted units to billing units … Part of the price, pinned at open.</em></td>
              <td align="left">
                <tt>unitWeights</tt> (<xref target="s-6-3"/>) — the complete map, pinned with the law</td>
            </tr>
            <tr>
              <td align="left">23</td>
              <td align="left">
                <strong>stop_reason</strong> (the <xref target="s-9"/> field) — <em>Why the Action must end now: the Trip-wire, the cascade …</em></td>
              <td align="left">
                <tt>directive: STOP</tt> with <tt>stopReason</tt> (<xref target="s-7-3"/>, <xref target="s-7-4"/>) — the stop obligation</td>
            </tr>
          </tbody>
        </table>
        <t><strong>The sponsor-cap concept, by its framework name:</strong> what <tt>EXPOSURE_CAP</tt> enforces is the
framework's <strong>Solvency Rule at a second scope</strong> — <em>"a bound on exposure ranges over a
relation, not over any one Balance."</em> Where the engine enforces open grants ≤ the Balance,
it also enforces commitments across the relation ≤ the exposure bound; <xref target="s-12-1"/> states the
same basis (committed + settled, per relation) explicitly.</t>
        <t><strong>Two cross-vocabulary notes:</strong> the framework's fourth velocity level,
<tt>RELATION_VELOCITY</tt> (<em>Actions started and credits charged per minute, counted across a
declared relation</em>), is this document's <strong><tt>GROUP_VELOCITY</tt></strong> — the same object, counted as
the framework defines it, in both Actions started and credits charged. And the framework
closes its refusal vocabulary (fourteen reasons) but enumerates no closed set of stop
reasons — its reference engine's stop codes are the nearest list; this document closes
both registries per version (<xref target="s-5"/>, <xref target="s-7-4"/>, <xref target="s-13-2"/>) — a protocol decision, not a divergence.</t>
      </section>
      <section anchor="app-d-2">
        <name>Additional implementation and telecom terms</name>
        <table>
          <thead>
            <tr>
              <th align="left">Implementation / telecom term</th>
              <th align="left">This specification</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">Facility / region (tenancy detail below the operator)</td>
              <td align="left">
                <em>No wire concept</em> — subscriber-level detail below the tenant boundary</td>
            </tr>
            <tr>
              <td align="left">Subscriber (MSISDN)</td>
              <td align="left">Account (<tt>accountRef</tt> — pseudonymous on the wire, <xref target="s-15-7"/>)</td>
            </tr>
            <tr>
              <td align="left">Charging session</td>
              <td align="left">Action</td>
            </tr>
            <tr>
              <td align="left">Decision-tree classification</td>
              <td align="left">Action Type (Actions arrive <em>typed</em>; classification collapses into a catalogue lookup)</td>
            </tr>
            <tr>
              <td align="left">Interim usage report (opIntermediate)</td>
              <td align="left">Cycle Report (<tt>final: false</tt>)</td>
            </tr>
            <tr>
              <td align="left">Final usage report (opFinal)</td>
              <td align="left">Closing Report (<tt>final: true</tt>, the CLOSE ending)</td>
            </tr>
            <tr>
              <td align="left">CDR (the concluded-session record)</td>
              <td align="left">The concluded Action record (emitted at ending; not a wire object)</td>
            </tr>
            <tr>
              <td align="left">CODR (per-settlement record)</td>
              <td align="left">The cycle settlement and its receipt</td>
            </tr>
            <tr>
              <td align="left">Time band</td>
              <td align="left">Time band (shared term — <xref target="s-10"/> adopted it from the implementation)</td>
            </tr>
          </tbody>
        </table>
        <t><strong>False friends — same word, different meaning:</strong></t>
        <ul spacing="normal">
          <li>
            <t><strong>Profile.</strong> Three meanings collide. In the charging stack, the <em>subscription profile</em>
is the subscriber's stored charging state. In the framework, a <em>Profile</em> is the Metering
Point's tested integration record — a test result, not stored state. In this
specification, <em>profile</em> appears only as <em>deployment profile</em> — a named set of
deployment choices (<xref target="s-12"/>, <xref target="s-13-5"/>). None of the three is any of the others.</t>
          </li>
          <li>
            <t><strong>Expiry (resolved at draft-04).</strong> In the framework, <em>Expiry</em> is <em>a date after which a
Balance's unreserved credits are written off</em> — money is destroyed, and reserved credits
are spared until their Actions settle; the implementation's counter expiry is the same
event. Through draft-03 this document named the ending of a lapsed grant <tt>EXPIRY</tt>, and
the two were false friends. From draft-04 that ending is <strong><tt>LAPSE</tt></strong> and its stop reason
<strong><tt>LAPSED</tt></strong> (the <tt>expiresAt</tt> field keeps its name): a lapse settles <strong>at the reported
meter</strong> (<xref target="s-7-5"/>) and writes nothing off; an Expiry is a balance event with no wire term.
The word <em>expiry</em> is no longer used for the lapse anywhere in this document.</t>
          </li>
          <li>
            <t><strong>Envelope.</strong> Here, the Envelope is the always-fresh part of a response (<xref target="s-2"/>). In the
framework, an <em>envelope</em> is a money partition — the authorisation floor. Neither is the
other.</t>
          </li>
          <li>
            <t><strong>Minimum.</strong> The framework's <em>Minimum</em> is a price form: a per-Action floor on the Charge.
Its counterpart here is the <em>contractual minimum</em> reserved at open (<xref target="s-6-2"/>) and never
applied a second time (<xref target="s-7-6"/>) — no wire field. <tt>limits</tt> (<xref target="s-6-3"/>) are the disclosed
protective bounds, and <tt>limits.minRate</tt> (<xref target="s-12-2"/>) is a capacity rate: three objects, one
word apart.</t>
          </li>
          <li>
            <t><strong>Facility.</strong> In the framework, a Facility is a regulatory regime that <em>contains</em>
Tenants. In the implementation, a <em>facility</em> is a node of the operator's tenancy tree
<em>below</em> the tenant (the root facility is the tenant). Neither reaches the wire;
<tt>tenantRef</tt> is the Tenant.</t>
          </li>
        </ul>
        <t><strong>One field, two uses — <tt>signature</tt>.</strong> On this wire, <tt>signature</tt> is a reserved, opaque
per-call attestation (<xref target="s-7-2"/>), enforced only where a bilateral profile is agreed
(<tt>SIGNATURES_REQUIRED</tt>, <xref target="s-7-4"/>). The framework's reference engine uses a per-call signature
as a fingerprint for repeat detection (its Inflation wire), and the implementation does the
same server-side with the value it receives. Same field, two purposes — recorded here so
the wire contract and the server-side use are never conflated.</t>
      </section>
    </section>
    <section anchor="app-e">
      <name>Change history (informative)</name>
      <t>This is the first Internet-Draft of this specification. The protocol was developed
privately through several revisions during 2026, under an earlier working name, and was
reviewed against an independent implementer's assessment before this submission. Later
versions record their changes in this appendix.</t>
    </section>
  </back>
  <!-- ##markdown-source:
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
dmQfB2KoQx1oyiV9SXfkxd4xRpGjY74MPj7LliAN7xXV8WyyL2j+9O1iWl67
GYuJn2YX7JNcGA8FSSunJ3bUyeHb2GvSb9LtnfSqnzruT59spVfdsdHcI3jX
xJ57TOTH40xX7MoTQgzogxQ/lph+k4nU3Q6ykOqT8b1g8xsmc5Gb65EmSnYG
6XfqqIfdOyCBUjBFb1B5TsE2aeNIHzQ9JLu8JA0eWyIxE9Fm6F7IT9lpRiz7
xuiqNqMko6WQtCSZuVT9nz1LTtGpVenInDser12aO7MpG2haZHWLNDin1+IK
k3p3TlzxosCBHSCaNhHGF8lz2gBlzBJJ4P3UxRUBmw3tCa+BLLMJCAXSXrZB
FS5PiKFSZhwCdC9M3xg2TfyygGcaftwaQeHrFJv9HCZ1buKkIBvqHNHoaxYY
6gKfzosGk1+U1/jskl7VWu9Uo75uEdvBIl7CFbyu9NDd4OnTfZmw4r+a8+GQ
4nFVXF4NruG+kb2v2VUS29eN6t60z408JczSO21j3jUkq8D5ZqNoGw/F/mq3
7RJdS+/DTzatynLutVb9Sv3RdNWK+WpuJMIqbTDRDuL18teLbF7MbuSqfYeL
Ns9u4DqTVecqUiAh4MkYuTfjTddiOcxFXYVl7faWjg/vx4F7DkEDePrgDReK
gMfgWq/1NIcDIPQ3bbP8cacuigX7NSS8Shc7h+drUV9jpnU6fnX0Zn/veG//
8OzvnYp7SCbipaqB3mNkzJbdCv6geGGZUqaG/dkJZSM4HwtCS2nHidOBaLwD
Jfi+xCZJe5gW4ogXEsAMaBE0b+JDv/zjfyVeTFMgEidC96FRohKOhENrqFe4
DrYhO0rGyR7H0jRaLpyOfedpdg7GrfzxPL/K3hXE/SLDUzQbejuJJ5jSLpBW
Oy02ATFUOWvko/XhVUPyw4s31886dOfzXdG9rNnlYDkh6dE7bFd+zY6Ghxqj
pL2BiXoB0uDPOUr5l7/8JbFg+6f/tCxvpD7cfsZj/s8tP4Ko6vERbdb9clLf
z4r777bu65H/WcPHA/vzG7zARYuRw3HDY/yKxhDd6udL0Zb7Fjh7LaGw8LX0
Pzb65ZK25y1EtNcE4rPPFtdPOeLi9Qf+tQY3zbnxVyye/sc3QYKef+NG6NiV
YEKqIXDAKmkNlhYTbR//NVLXgvCCBQ8hSbrxI//jhyQW4v2fi+mH++bGcIck
GueuuELcGe0fvTo7fPX6IP3Z64ofUuTUbNiduiT+WRkLdzNnpetnXP0TskLL
xQd9ZOMY4mIRl3zfD3Fwdvbi4NlnLB7ToDexNlfH8/j8HaT/seI4uxm6p4fD
ISgNwRiJGaoe53U7/IL3H7cy8S6MkgOX7P/NA4u+Xk1gcl2sZv6C8PJpuDr4
JTGODmu3or5iZQnrqcTznmraDV7BcQ95nHktk5NSpp121gSK4kD9Fc0V7Ggy
x9lgTAKWKEKkFhNRebXzYzNBaLDrnYb9ziT+OZgru3LhHGFZ5jU15x3EUxSy
QuxUnxXrdVGyx2c3SbaGrbwTUy+U7Wb123qUbpi8sBkih5OD569PD4aknKk2
R6+iH9E7cMjtZAjweuUZI8sn0gf4e3H6tO9s+Ngw2cacLTOmPWHnSPQaVcAV
RpssPnapyLIwZXc5O/Gh8ISctSOuIJa7s+JSo1q7azb9hO6mM50xemw+VNnF
BdntIqlnN2Iu2bXsiJkVhNWzyVvSQ0n9vuQYE0690mwNoz6OEjEBLlf1FfZ/
schnceBPdNF48kY0HCUFJ9csI3HgsCNOtlZdYmK+pZ3AtdYVo6QmZek6RdwF
t3i1cAqpGc30abVaCGk/pzMasD3r/StC1RDR/raTDYNpIB5GE70InnKn2PB9
lSPwV98tAR48MsmS8RTeDrZumYbHcvfG6pvgnE/1bWXpWMUo+0OIkCqLlPTt
HjkeUOUJbQWbvnynQqeIMJ+2ccSkC6XXPIF1qhwJH47Vih2rup3YSohuQi+c
zARPzLzBTJ9N6EX8YJUP6Zoc8nvUr8SfQodMdFdCn9Juqi4gIX+zcAMP5zbP
3LlqeFsmjWQjQFUlFTphDzgHoUSBxu02f8sGJ1ARpeTlrY260ARAbGkS+5lY
W92GHW/+TA3hG/MOs1J0sexbyoslm7Rj/wM65wQBQyJrOlnxLufvi1qNVzJY
8iXM3T1zJGXTKZ1KLV/zoTl6ESvLiFN8bol4IcmknVuoGi5BZEncwJd+meYz
Jlma3Dt1Jrn9dzKhzweTtJyeRrfFhU78GqxBVjwN/B26O0K2g/OyWuSWaEU2
BjSsZFbMWVesIIo5EdTC4PBzLS40ikhnLcYS59TRBgQEX8O8AN+lSTmzNZGc
Hfc2Dq1dtc56gFcS28onb12alRjUMENKUK76v2AA1JqpoReED8V5LIXDPCs0
14ltY75CxTnZsc2NMhrkyFi03qQerP5aAiIbRcaciOQG1+qsxe8RYgSPRoxY
Vdck1kvP85tS70Qk4jq8ZiYC6AUscjCBSJEVO5idPfQMNDm9hQ2z1Yk4oCXB
bhxq/uqsD/T3scsrM7blk9M4rZgG5yWZhoI8WPx8bJbB2Os4zAbgbnJ5wLJf
ZIbPl7U640NBhiDyhkRf5rpNLCTV6zCSXM6rsmw2pvpqYI9lZmLmy9C8hurF
6fWarJhBUIdHIsLF/Efn+WW2sKiSn2N6nUE9mBb1EpcXU85uPMMSFwZ+ju0Q
EanJXMbwyoVXJpRAje6cY2jC6RDeeS7uHZcvA5HLC86EkYGQ6L5IXoe4iNnd
gwT8NllKKojLTJA3QRgiyzUvcLNkQhLxG2j+s7I6hK/kSDaRPc2/yGaQtxhe
Hql3cZRz9hwucAt0pI5EQDT2Za7Srqa9ITTN3/kXsuBc3GhWuoQuiOyRuOlH
bT3d1sN4A3Crafuv5WKr7shSxOJjdParheTOE30SqfSJoKoa1umMjhkuiXd5
1516PYzdehKkveRIKaIQdch49fIKO8kucmJAixz3wKSbSwLKpwMzMSZQH69Z
zYMWj8lyvjS9hqgBSQjLgt2dcPivZoHBoHvH1giR6uSqELmmfpyucr9HlpBZ
5y5yELoXb3h6coEtbjKyDFNJE2Um/eEDnww70+nvVa65WwVfg0TEIaZdMb1x
hrLQ/iX/jnPm3mWzFeuuwe1j6dZ3iRllRfesLzySXzFY5KsGWTeW1AUfMr/T
ZVSTMNeEKtkN04N2iQRcWhip+xV0VmJEV+U0/eU//qd058EjErb8KYQWB+Sh
gdJ3yc7Woy7/KMiBYHfizoMt+cKOkBOFOAObvnsoSp+7AaRiLjNEN/csTM+/
5zzFbCHiTgcK3KcYnp2aLKoxTmdn+zv5nIZTi5cjLW5WD/jNGGIHvs6+/nWH
/prgr49sYKek0BmWs5U9v6NKDHE6CLhFkFkAo8VpPmzCZJL14T5M2B9vyqFm
b5mlh6jmPXNDkaA/WnCOvmaLiCt/iYQGEyQcBqlAArmUizCNMEGdkC6gZAQV
nw7Y0hQsRFOhhAKqh6c2vZQz0fSYwpzjl69/wvoaBxegW3NlRO0sT367xCwv
Vgv1eEMCd/SVxYKkctelnqwa4h8y3VO+JJjm+NXRq4OxhPOCnS3gECEpWnBS
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

-->

</rfc>
