<?xml version='1.0' encoding='UTF-8'?>
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" category="info" docName="draft-das-ef-registries-01" ipr="trust200902" submissionType="IETF" consensus="false" xml:lang="en" tocInclude="true" tocDepth="3" symRefs="true" sortRefs="true" version="3">
  <front>
    <title abbrev="EF Registries">Illustrative Codes Are Not a Namespace: Registries for Execution-Finality Consequence Classes, Sink Types, Act Types, Failure Codes, Profiles, and Media Types</title>
    <seriesInfo name="Internet-Draft" value="draft-das-ef-registries-01"/>
    <author fullname="Sangam Das" initials="S." surname="Das">
      <organization>Independent</organization>
      <address>
        <postal>
          <city>Balasore</city>
          <region>Odisha</region>
          <country>IN</country>
        </postal>
        <phone>+91-9861363532</phone>
        <email>info@sangamdas.com</email>
      </address>
    </author>
    <date year="2026" month="September" day="16"/>
    <area>Security</area>
    <workgroup>Individual Submission</workgroup>
    <keyword>execution finality</keyword>
    <keyword>IANA</keyword>
    <keyword>registry</keyword>
    <keyword>failure codes</keyword>
    <keyword>consequence class</keyword>
    <keyword>finality sink</keyword>
    <keyword>execution handle</keyword>

    <abstract>
      <t>
        The execution-finality family uses a shared vocabulary: Candidate Act, Execution
        Handle, Finality Sink, consume, and Finality Receipt
        <xref target="DAS-HANDLE"/> <xref target="DAS-PROTOCOL"/>.  Each profile currently
        invents overlapping labels for the same ideas — <tt>FINANCIAL</tt>,
        <tt>SETTLEMENT</tt>, <tt>EF-005</tt>, <tt>SINGLE_USE</tt> — and then states that the
        codes are illustrative and not IANA assignments.  Two implementations can therefore
        emit the same token string with different meaning, or different strings for the same
        deny reason.
      </t>
      <t>
        Existing IANA registries already name adjacent objects.  JWT and CWT claim names
        <xref target="RFC7519"/> <xref target="RFC8392"/>, OAuth parameters
        <xref target="RFC6749"/> <xref target="RFC7591"/>, HTTP problem types
        <xref target="RFC9457"/>, media types, RATS EAT claims, and SCITT statement types
        <xref target="RFC9943"/> solve identity, token, and transparency naming.  They do
        not allocate consequence class, sink type, act type, handle reuse policy,
        execution-finality failure code, or finality-profile identifiers.
      </t>
      <t>
        This document proposes those registries and an initial allocation drawn from the
        family drafts.  It does not decide which acts should be authorized.  It does not
        replace OAuth error codes, HTTP status codes, or application problem types.  A
        registered code is a shared name for a machine-readable condition; it is not a
        legal classification and not evidence that any named product implements the
        condition.
      </t>
      <t>
        Until IANA action occurs, codes in this document and in companion drafts remain
        provisional.  Implementations MUST treat foreign namespaces as distinct.
        Criticism of the registry split, the initial code list, the registration policy,
        and the claim that a new namespace is required at all is explicitly invited.
      </t>
    </abstract>
  </front>

  <middle>
    <section anchor="this-version">
      <name>What This Version (-01) Contains</name>
      <t>
        This Internet-Draft is <tt>draft-das-ef-registries-01</tt>.
        It proposes the shared namespaces used by
        <xref target="DAS-HANDLE"/> and
        <xref target="DAS-COMPOSITE"/>: consequence class, sink type,
        act type, reuse policy, decision, consume outcome, failure
        codes, profile identifiers, and candidate media types.
        It does not request IANA action in this revision.
      </t>
      <section anchor="this-version-includes">
        <name>Contents of -01</name>
        <ul spacing="normal">
          <li>Problem of uncoordinated "illustrative" codes and the residual gap after JWT, OAuth errors, and RFC 9457.</li>
          <li>Initial tables for classes, sinks, act types, reuse policies, decisions, consume outcomes, EF-nnn codes, and profiles.</li>
          <li>Placeholder warning for urn:ietf:params:ef and the ef URI scheme.</li>
          <li>Unknown public EF-nnn fails closed as EF-080 (intentional forward compatibility).</li>
          <li>WellTyped identities, hash/algorithm pointer to the handle draft, and formal-tool note.</li>
          <li>Industrial disclaimer, community questions, and per-WG venue subsections.</li>
        </ul>
      </section>
      <section anchor="changes-from-00">
        <name>Changes from -00</name>
        <ul spacing="normal">
          <li>Document name and series info updated to -01.</li>
          <li>PURPOSE / JURISDICTION / REVOCATION codes moved into 060-069 as EF-060, EF-061, EF-062.</li>
          <li>Added EF-047 PARTIAL_COMMIT; EF-044 remains PATH_INCOMPLETE.</li>
          <li>Decision registry now includes PREPARED, ABORTED, COMPENSATING, CONTAINED, UNKNOWN.</li>
          <li>Consume outcomes now include RELEASED.</li>
          <li>ENVELOPE identical replay default documented as forbidden.</li>
          <li>Family reference titles aligned; handle and composite cited as -01.</li>
        </ul>
      </section>
    </section>

    <section anchor="intro">
      <name>Introduction</name>

      <section anchor="intro-vulnerability">
        <name>Vulnerability: The Same String, Two Meanings</name>
        <t>
          A sink that returns <tt>EF-005</tt> and a second sink that returns
          <tt>AUTHORITY_ALREADY_USED</tt> may intend the same event.  A third sink may use
          <tt>EF-005</tt> for expired handles.  A CAD that labels an act
          <tt>consequence_class=PHYSICAL</tt> may mean coil motion in one profile and
          printer dispatch in another.  Without a shared namespace, verify/consume
          receipts cannot be compared across vendors or across drafts in the same family.
        </t>
        <figure anchor="fig-string-collision">
          <name>Uncoordinated codes prevent receipt comparison</name>
          <artwork type="ascii-art">
Sink A receipt:   reason_code = EF-005
Sink B receipt:   reason_code = EF-005

Observer:
    same code
        !=
    same predicate

Until a registry binds EF-005 to one definition,
the receipt is local dialect, not an interoperable object.
          </artwork>
        </figure>
      </section>

      <section anchor="intro-existing">
        <name>Existing Mechanisms Already Name Adjacent Objects</name>
        <t>
          OAuth defines error members such as <tt>invalid_grant</tt>
          <xref target="RFC6749"/>.  HTTP Problem Details defines a type URI for API
          errors <xref target="RFC9457"/>.  JWT and CWT have claim-name registries
          <xref target="RFC7519"/> <xref target="RFC8392"/>.  CoAP and HTTP have
          status codes.  RATS/EAT and SCITT have their own typed statements.
        </t>
        <t>
          Those registries should be reused where the object really is an OAuth error,
          an HTTP problem, or a JWT claim.  This document exists only for names that
          those registries do not currently define: consequence class, sink type, act
          type, reuse policy, execution-finality failure code, finality profile id,
          and compact media types for CAD / handle / receipt.
        </t>
      </section>

      <section anchor="intro-gap">
        <name>Why the Residual Gap Can Remain</name>
        <t>
          Companion drafts keep writing "illustrative, not IANA."  That sentence is
          honest and also the interoperability failure.  Profile catalogues for 6G,
          enterprise AI, CVID, silicon, and satellites multiply local enums.  A handle
          implementation cannot declare which foreign codes it understands.
        </t>
      </section>

      <section anchor="intro-delta">
        <name>What This Document Introduces</name>
        <ul spacing="normal">
          <li>A small set of IANA-facing registries with Expert Review as the default policy.</li>
          <li>An initial allocation aligned with <xref target="DAS-HANDLE"/> and other family drafts.</li>
          <li>A rule that unregistered codes MUST use a private prefix or a URI, not the <tt>EF-</tt> numeric space.</li>
          <li>Media type and optional JWT/CWT claim names for the handle objects.</li>
          <li>An explicit non-goal: this is not a policy ontology of all possible real-world effects.</li>
        </ul>
      </section>
    </section>

    <section anchor="conventions">
      <name>Conventions and Requirements Language</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.
      </t>
    </section>

    <section anchor="direct-question">
      <name>Direct Question: What Problem Does a Registry Solve?</name>
      <t>
        If two Finality Sinks emit receipts for the same denied effect, what shared
        identifiers let a relying party know they denied the same class of failure?
      </t>
      <artwork type="ascii-art">
Receipt_A.reason_code == Receipt_B.reason_code
    AND
both codes are in the EF Failure Code registry
    ==&gt;
same registered predicate

Otherwise the equality is coincidental.
      </artwork>
    </section>

    <section anchor="motivating-scenario">
      <name>Motivating Scenario: One Agent, Three Sinks, Three Dialects</name>
      <t>
        An agent issues a payout, a ledger write, and a notification.  The payment sink
        returns <tt>EF-025</tt>.  The MCP tool sink returns <tt>DESTINATION_MISMATCH</tt>.
        The mail sink returns HTTP 403 with <tt>invalid_scope</tt>.  A coordinator cannot
        tell whether all three denied the same substitution or three different conditions.
      </t>
      <figure anchor="fig-three-dialects">
        <name>Composite act, uncoordinated deny codes</name>
        <artwork type="ascii-art">
Candidate composite C
        |
        +--&gt; settlement sink : EF-025
        +--&gt; tool sink       : DESTINATION_MISMATCH
        +--&gt; mail sink       : invalid_scope

Registry goal:
    map each local dialect to one registered
    failure code + one consequence class
    so the coordinator can fail closed on C.
        </artwork>
      </figure>
    </section>

    <section anchor="goals">
      <name>Design Goals and Non-Goals</name>
      <t>
        The goal is a compact, extensible namespace for execution-finality objects so
        that CAD, Execution Handle, verify, consume, and receipt fields have one
        meaning across profiles.
      </t>
      <t>
        This document does not classify law, medicine, or weapons; does not assign
        severity scores that bind operators; does not replace HTTP, OAuth, or problem+json;
        does not require every private deployment to register; and does not freeze the
        companion architecture drafts.
      </t>
    </section>

    <section anchor="existing-delta">
      <name>Existing Registries and the Proposed Delta</name>
      <table>
        <name>Existing IANA or protocol namespace and residual naming question</name>
        <thead>
          <tr>
            <th>Existing namespace</th>
            <th>Already names</th>
            <th>Does not name</th>
          </tr>
        </thead>
        <tbody>
          <tr>
            <td>OAuth errors</td>
            <td>Grant and token-endpoint failures</td>
            <td>Sink consume and act-digest mismatch</td>
          </tr>
          <tr>
            <td>HTTP status / RFC 9457</td>
            <td>Transport and API problem type</td>
            <td>Finality-specific reason inside 403/409</td>
          </tr>
          <tr>
            <td>JWT / CWT claims</td>
            <td>iss, aud, exp, cnf</td>
            <td>act_digest, sink_id, reuse_policy as EF fields</td>
          </tr>
          <tr>
            <td>RATS / EAT</td>
            <td>Environment claims</td>
            <td>Consequence class of a later act</td>
          </tr>
          <tr>
            <td>SCITT</td>
            <td>Statement / receipt types</td>
            <td>Whether a receipt is a permit to effectuate</td>
          </tr>
          <tr>
            <td>Media types</td>
            <td>Generic JSON/CBOR</td>
            <td>CAD, handle, pending, receipt types</td>
          </tr>
        </tbody>
      </table>
    </section>

    <section anchor="terminology">
      <name>Terminology</name>
      <t>Terms Candidate Act, Candidate Act Descriptor, Execution Handle, Finality Sink, Consume, and Finality Receipt are used as in <xref target="DAS-HANDLE"/>.</t>
      <t><strong>Consequence Class:</strong> A registered label for the kind of external effect a Candidate Act would produce if permitted.</t>
      <t><strong>Sink Type:</strong> A registered label for the kind of effectuation boundary.</t>
      <t><strong>Act Type:</strong> A registered label for the kind of proposed operation, finer than consequence class.</t>
      <t><strong>Failure Code:</strong> A registered identifier for a verify/consume/path failure predicate.</t>
      <t><strong>Profile Identifier:</strong> A registered name for a named bundle of required CAD fields, reuse default, and assurance expectations.</t>
    </section>

    <section anchor="namespace-rules">
      <name>Namespace Rules</name>
      <artwork type="ascii-art">
Public compact codes:
    EF-nnn                 failure codes (provisional until IANA)

URI forms in examples:
    urn:ietf:params:ef:...
    ef:&lt;registry&gt;:&lt;name&gt;
are PLACEHOLDERS.  Neither an IETF URN namespace
under RFC 3553 nor an "ef" URI scheme is requested
in this revision.  Implementations MUST NOT treat
those strings as registered identifiers.

Private / experimental:
    EF-X-*                 MUST NOT be registered
    X- / uns: / urn:uuid:  deployment-local

Collision rule:
    unregistered use of EF-nnn
        is NOT interoperable
        and SHOULD be rejected by strict profiles.
      </artwork>
      <t>
        Registered names are case-sensitive strings in the compact form specified for
        each registry.  Profiles MAY also carry the URI form in receipts.
      </t>
    </section>

    <section anchor="object-use">
      <name>Where Registry Values Appear</name>
      <figure anchor="fig-where-codes-live">
        <name>Registry fields on CAD, handle, and receipt</name>
        <artwork type="ascii-art">
CAD
  act_type            -&gt; Act Type registry
  consequence_class   -&gt; Consequence Class registry
  finality_sink.type  -&gt; Sink Type registry

EH
  reuse_policy        -&gt; Reuse Policy registry
  profile_id          -&gt; Profile registry (optional)

Receipt
  decision            -&gt; Decision registry
  consume_outcome     -&gt; Consume Outcome registry
  reason_code         -&gt; Failure Code registry
        </artwork>
      </figure>
    </section>

    <section anchor="consequence-class">
      <name>Consequence Class Registry</name>
      <t>
        A consequence class is a coarse effect kind.  It is not a risk rating and not a
        legal category.  Profiles use it to select default reuse policy and required CAD
        fields.
      </t>
      <table>
        <name>Initial consequence classes</name>
        <thead>
          <tr>
            <th>Value</th>
            <th>Meaning</th>
            <th>Typical sink</th>
          </tr>
        </thead>
        <tbody>
          <tr>
            <td>FINANCIAL</td>
            <td>Balance, settlement, or rail post changes</td>
            <td>SETTLEMENT</td>
          </tr>
          <tr>
            <td>PHYSICAL</td>
            <td>Motion, energy, or process I/O changes</td>
            <td>ACTUATION</td>
          </tr>
          <tr>
            <td>RF</td>
            <td>Transmit, beam, or spectrum enablement</td>
            <td>RF_TRANSMIT</td>
          </tr>
          <tr>
            <td>COMMUNICATIVE</td>
            <td>Message send, call setup, or reachability</td>
            <td>EGRESS or REACHABILITY</td>
          </tr>
          <tr>
            <td>DISCLOSURE</td>
            <td>Release of held data or model information</td>
            <td>RELEASE or EGRESS</td>
          </tr>
          <tr>
            <td>RENDER</td>
            <td>Presentation to a display or media sink</td>
            <td>RENDER</td>
          </tr>
          <tr>
            <td>CONTROL_PLANE</td>
            <td>Live infra mutation (DNS, BGP, cluster, IAM)</td>
            <td>CONTROL_PLANE</td>
          </tr>
          <tr>
            <td>IDENTITY</td>
            <td>Credential issuance or privilege grant</td>
            <td>IDENTITY_ISSUE</td>
          </tr>
          <tr>
            <td>MEMORY_WRITE</td>
            <td>Durable agent memory or corpus write</td>
            <td>MEMORY</td>
          </tr>
          <tr>
            <td>MODEL_RELEASE</td>
            <td>Weight, adapter, or SMI release</td>
            <td>RELEASE</td>
          </tr>
          <tr>
            <td>CLINICAL</td>
            <td>Care-delivery order or device setpoint</td>
            <td>ACTUATION or CLINICAL</td>
          </tr>
          <tr>
            <td>ADMINISTRATIVE</td>
            <td>Recorded official or eligibility effect</td>
            <td>ADMIN</td>
          </tr>
          <tr>
            <td>ERASURE</td>
            <td>Required delete, hold, or export effect</td>
            <td>DATA_LIFECYCLE</td>
          </tr>
          <tr>
            <td>COMPOSITE</td>
            <td>Two or more classes that must close together</td>
            <td>COMPOSITE</td>
          </tr>
        </tbody>
      </table>
      <t>
        <tt>CLINICAL</tt> is a technical effect class for care-delivery sinks.  It is not
        a medical-device approval and not a clinical-safety standard.
      </t>
    </section>

    <section anchor="sink-type">
      <name>Sink Type Registry</name>
      <table>
        <name>Initial sink types</name>
        <thead>
          <tr>
            <th>Value</th>
            <th>Boundary that first makes the effect real</th>
          </tr>
        </thead>
        <tbody>
          <tr>
            <td>SETTLEMENT</td>
            <td>Payment or ledger post</td>
          </tr>
          <tr>
            <td>TOOL_DISPATCH</td>
            <td>Agent tool / MCP / function invoke</td>
          </tr>
          <tr>
            <td>ACTUATION</td>
            <td>ICS, robot, vehicle, or lab effector</td>
          </tr>
          <tr>
            <td>RF_TRANSMIT</td>
            <td>Radio or optical transmit enable</td>
          </tr>
          <tr>
            <td>EGRESS</td>
            <td>Organization or device outbound release</td>
          </tr>
          <tr>
            <td>RELEASE</td>
            <td>Model, secret, or dataset release</td>
          </tr>
          <tr>
            <td>RENDER</td>
            <td>Compositor, display, or media decoder</td>
          </tr>
          <tr>
            <td>CONTROL_PLANE</td>
            <td>Orchestrator, DNS, routing, or IAM commit</td>
          </tr>
          <tr>
            <td>IDENTITY_ISSUE</td>
            <td>Issuer of a usable credential</td>
          </tr>
          <tr>
            <td>MEMORY</td>
            <td>Durable memory or RAG write</td>
          </tr>
          <tr>
            <td>REACHABILITY</td>
            <td>Create or extend a contact path</td>
          </tr>
          <tr>
            <td>ADMIN</td>
            <td>Authoritative administrative record</td>
          </tr>
          <tr>
            <td>DATA_LIFECYCLE</td>
            <td>Erase, hold, or mandated export</td>
          </tr>
          <tr>
            <td>COMPOSITE</td>
            <td>Coordinator of N child sinks</td>
          </tr>
        </tbody>
      </table>
    </section>

    <section anchor="act-type">
      <name>Act Type Registry</name>
      <t>
        Act types are optional finer labels.  The initial set is small on purpose.
        Profiles SHOULD prefer consequence class plus operation fields when an act type
        would only duplicate a tool name.
      </t>
      <table>
        <name>Initial act types</name>
        <thead>
          <tr>
            <th>Value</th>
            <th>Notes</th>
          </tr>
        </thead>
        <tbody>
          <tr>
            <td>PAYMENT_POST</td>
            <td>Settlement instruction</td>
          </tr>
          <tr>
            <td>TOOL_CALL</td>
            <td>Generic tool/function invoke</td>
          </tr>
          <tr>
            <td>SETPOINT_WRITE</td>
            <td>Process or device setpoint</td>
          </tr>
          <tr>
            <td>RF_ENABLE</td>
            <td>Enable a transmit path</td>
          </tr>
          <tr>
            <td>MESSAGE_SEND</td>
            <td>Outbound message</td>
          </tr>
          <tr>
            <td>DATA_EGRESS</td>
            <td>Copy or disclose held data</td>
          </tr>
          <tr>
            <td>OUTPUT_RELEASE</td>
            <td>Model or inference output release</td>
          </tr>
          <tr>
            <td>WEIGHT_LOAD</td>
            <td>Load or hot-swap model weights</td>
          </tr>
          <tr>
            <td>MEMORY_COMMIT</td>
            <td>Durable memory write</td>
          </tr>
          <tr>
            <td>PLAN_APPLY</td>
            <td>Control-plane apply of a prepared plan</td>
          </tr>
          <tr>
            <td>CREDENTIAL_ISSUE</td>
            <td>Issue a usable token or cert</td>
          </tr>
          <tr>
            <td>RENDER_PRESENT</td>
            <td>Present media to a surface</td>
          </tr>
          <tr>
            <td>ERASE_COMMIT</td>
            <td>Commit a delete or hold</td>
          </tr>
        </tbody>
      </table>
    </section>

    <section anchor="reuse-policy">
      <name>Reuse Policy Registry</name>
      <table>
        <name>Initial reuse policies</name>
        <thead>
          <tr>
            <th>Value</th>
            <th>Rule</th>
          </tr>
        </thead>
        <tbody>
          <tr>
            <td>SINGLE_USE</td>
            <td>First successful consume wins</td>
          </tr>
          <tr>
            <td>COUNTED</td>
            <td>Consume until max_uses</td>
          </tr>
          <tr>
            <td>ENVELOPE</td>
            <td>Repeat only inside declared bounds; identical-digest replay forbidden unless allow_identical_replay</td>
          </tr>
        </tbody>
      </table>
      <t>
        High-consequence classes FINANCIAL, PHYSICAL, RF, MODEL_RELEASE, and CLINICAL
        SHOULD default to SINGLE_USE unless a profile documents why not.
      </t>
    </section>

    <section anchor="decision-consume">
      <name>Decision and Consume-Outcome Registries</name>
      <t>
        Sink-commit decisions used by <xref target="DAS-HANDLE"/>:
        <tt>EFFECTUATED</tt>, <tt>REJECTED</tt>.
      </t>
      <t>
        Coordinator and composite decisions used by
        <xref target="DAS-COMPOSITE"/>:
        <tt>NON_EFFECTIVE</tt>, <tt>PREPARED</tt>, <tt>ABORTED</tt>,
        <tt>COMPENSATING</tt>, <tt>CONTAINED</tt>, <tt>UNKNOWN</tt>.
      </t>
      <t>
        Consume outcomes: <tt>CONSUMED</tt>, <tt>RESERVED</tt>,
        <tt>RELEASED</tt> (reservation dropped on abort, no post),
        <tt>UNCHANGED</tt>, <tt>FAILED</tt>.
      </t>
    </section>

    <section anchor="failure-codes">
      <name>Failure Code Registry</name>
      <t>
        Codes are compact <tt>EF-nnn</tt> identifiers.  Ranges are reserved to keep
        related failures adjacent.
      </t>
      <artwork type="ascii-art">
002-019   authority / handle
020-039   act correspondence
040-059   sink / generation / path
060-069   policy / purpose / jurisdiction
070-079   escalation / human gate
080-089   fail-closed / availability of TCB
090-099   reserved
100-199   specified by later profiles
900-999   reserved for private experiments
                (MUST NOT be registered)
      </artwork>
      <table>
        <name>Initial failure codes</name>
        <thead>
          <tr>
            <th>Code</th>
            <th>Name</th>
            <th>Predicate</th>
          </tr>
        </thead>
        <tbody>
          <tr>
            <td>EF-002</td>
            <td>NO_FINALITY_AUTHORITY</td>
            <td>No current handle or equivalent authority</td>
          </tr>
          <tr>
            <td>EF-003</td>
            <td>HANDLE_INTEGRITY_FAILURE</td>
            <td>Handle signature or MAC fails</td>
          </tr>
          <tr>
            <td>EF-004</td>
            <td>HANDLE_EXPIRED</td>
            <td>Handle or CAD past expires_at</td>
          </tr>
          <tr>
            <td>EF-005</td>
            <td>AUTHORITY_ALREADY_USED</td>
            <td>Reuse policy exhausted</td>
          </tr>
          <tr>
            <td>EF-006</td>
            <td>REPLAY_DETECTED</td>
            <td>Same act presented against consumed state</td>
          </tr>
          <tr>
            <td>EF-012</td>
            <td>SCOPE_MISMATCH</td>
            <td>Key-binding, workload, or scope proof fails</td>
          </tr>
          <tr>
            <td>EF-020</td>
            <td>DESTINATION_MISMATCH</td>
            <td>Live destination not bound destination</td>
          </tr>
          <tr>
            <td>EF-023</td>
            <td>ACT_DIGEST_MISMATCH</td>
            <td>Reconstructed digest != handle digest</td>
          </tr>
          <tr>
            <td>EF-024</td>
            <td>AMOUNT_MISMATCH</td>
            <td>Financial amount field diverged</td>
          </tr>
          <tr>
            <td>EF-025</td>
            <td>BENEFICIARY_MISMATCH</td>
            <td>Payee / recipient diverged</td>
          </tr>
          <tr>
            <td>EF-026</td>
            <td>RAIL_MISMATCH</td>
            <td>Settlement rail diverged</td>
          </tr>
          <tr>
            <td>EF-030</td>
            <td>MODE_FORBIDDEN</td>
            <td>Device or process mode forbids the write</td>
          </tr>
          <tr>
            <td>EF-031</td>
            <td>INTERLOCK</td>
            <td>Safety interlock open</td>
          </tr>
          <tr>
            <td>EF-033</td>
            <td>VALUE_ENVELOPE</td>
            <td>Setpoint or argument outside envelope</td>
          </tr>
          <tr>
            <td>EF-040</td>
            <td>SINK_MISMATCH</td>
            <td>Presented at a sink other than bound sink</td>
          </tr>
          <tr>
            <td>EF-041</td>
            <td>GENERATION_STALE</td>
            <td>Policy or context generation moved</td>
          </tr>
          <tr>
            <td>EF-042</td>
            <td>REUSE_POLICY_VIOLATION</td>
            <td>Reuse rule not satisfied</td>
          </tr>
          <tr>
            <td>EF-043</td>
            <td>ENVELOPE_EXCEEDED</td>
            <td>Live CAD left the envelope</td>
          </tr>
          <tr>
            <td>EF-044</td>
            <td>PATH_INCOMPLETE</td>
            <td>Alternate path can produce K</td>
          </tr>
          <tr>
            <td>EF-047</td>
            <td>PARTIAL_COMMIT</td>
            <td>Required child posted while composite did not close</td>
          </tr>
          <tr>
            <td>EF-060</td>
            <td>PURPOSE_MISMATCH</td>
            <td>Live purpose not the authorized purpose</td>
          </tr>
          <tr>
            <td>EF-061</td>
            <td>JURISDICTION_MISMATCH</td>
            <td>Current JEC does not satisfy J_req</td>
          </tr>
          <tr>
            <td>EF-062</td>
            <td>REVOCATION_ACTIVE</td>
            <td>Handle or basis revoked before commit</td>
          </tr>
          <tr>
            <td>EF-070</td>
            <td>ESCALATION_REQUIRED</td>
            <td>Profile requires a further gate</td>
          </tr>
          <tr>
            <td>EF-080</td>
            <td>FAIL_CLOSED</td>
            <td>Required check unavailable; no effect</td>
          </tr>
          <tr>
            <td>EF-081</td>
            <td>CONSUME_STATE_UNAVAILABLE</td>
            <td>Consume store cannot be used safely</td>
          </tr>
        </tbody>
      </table>
    </section>

    <section anchor="profiles">
      <name>Profile Identifier Registry</name>
      <t>
        A profile identifier names a bundle, not a vendor.  Initial values are
        architecture bundles from the family.  Domain catalogues SHOULD reuse these
        rather than mint a new profile per industry press release.
      </t>
      <table>
        <name>Initial profile identifiers</name>
        <thead>
          <tr>
            <th>Value</th>
            <th>Bundle</th>
          </tr>
        </thead>
        <tbody>
          <tr>
            <td>ef-handle-strict</td>
            <td>Reconstruct + sink bind + SINGLE_USE default + fail closed</td>
          </tr>
          <tr>
            <td>ef-handle-envelope</td>
            <td>Strict verify with documented envelope reuse</td>
          </tr>
          <tr>
            <td>ef-handle-mitigation</td>
            <td>Handle present but path coverage incomplete; must not claim prevention</td>
          </tr>
          <tr>
            <td>ef-jurisdiction-strict</td>
            <td>Handle plus current JEC dimensions</td>
          </tr>
          <tr>
            <td>ef-purpose-strict</td>
            <td>Handle plus purpose binding</td>
          </tr>
          <tr>
            <td>ef-path-complete</td>
            <td>Handle plus declared complete path inventory</td>
          </tr>
        </tbody>
      </table>
    </section>

    <section anchor="media-types">
      <name>Media Types</name>
      <t>
        This document requests, if the community agrees to proceed, registration of:
      </t>
      <artwork type="ascii-art">
application/ef-cad+json
application/ef-handle+json
application/ef-pending+json
application/ef-receipt+json
application/ef-cad+cbor
application/ef-handle+cbor
application/ef-receipt+cbor
      </artwork>
      <t>
        Until registration, implementations MAY use these strings only in private
        deployments and SHOULD include a profile_id.
      </t>
    </section>

    <section anchor="claims">
      <name>Optional JWT / CWT Claim Names</name>
      <t>
        If a profile encodes an Execution Handle as JWT or CWT, the following claim
        names are proposed.  They MUST NOT collide with registered JWT/CWT claims.
        This document does not itself complete that IANA request; it records the
        intended names for review.
      </t>
      <artwork type="ascii-art">
ef_act_digest
ef_sink_id
ef_reuse_policy
ef_profile_id
ef_generations
ef_candidate_act_id
      </artwork>
      <t>
        Standard <tt>iss</tt>, <tt>exp</tt>, <tt>nbf</tt>, <tt>jti</tt>, and <tt>cnf</tt>
        remain the existing registries' objects.  This draft does not redefine them.
      </t>
    </section>

    <section anchor="http-auth">
      <name>Optional HTTP Authentication Scheme</name>
      <t>
        <xref target="DAS-HANDLE"/> illustrates <tt>Authorization: EFHandle ...</tt>.
        That scheme name is provisional.  A later revision may request an HTTP
        authentication scheme registration.  This -00 does not.
      </t>
    </section>

    <section anchor="mapping">
      <name>Mapping to Existing Error Channels</name>
      <t>
        A sink that speaks HTTP SHOULD still use an appropriate status code
        (typically 403 or 409) and MAY include an RFC 9457 problem document whose
        <tt>type</tt> URI is the URI form of the EF failure code.  OAuth token
        endpoints SHOULD keep OAuth errors for token issuance and use EF codes only
        at the effectuation sink.
      </t>
      <artwork type="ascii-art">
HTTP 403
Content-Type: application/problem+json

{
  "type": "urn:ietf:params:ef:failure:EF-023",
  "title": "ACT_DIGEST_MISMATCH",
  "status": 403,
  "ef_handle_id": "...",
  "ef_sink_id": "core-post-eu-1"
}
      </artwork>
    </section>

    <section anchor="formal">
      <name>Formal Consistency Rules</name>
      <t>
        Let R_class, R_sink, R_act, R_reuse, R_dec, R_out, R_fail, R_prof
        be the eight provisional tables.  The identities below are the same
        membership tests as the validation pseudocode.
      </t>
      <artwork type="ascii-art">
WellTyped(CAD) iff
    CAD.consequence_class in R_class
    and CAD.sink_type     in R_sink
    and (CAD.act_type = bot or CAD.act_type in R_act)

UnknownPublic(code) iff
    code matches EF-nnn, nnn in [002,899]
    and code notin R_fail

Strict:  UnknownPublic(code)  =&gt;  reason = EF-080
                                 and not Effect
      </artwork>
      <artwork type="ascii-art">
WellTyped(CAD) :=
    CAD.consequence_class in ConsequenceClassRegistry
AND CAD.finality_sink.sink_type in SinkTypeRegistry
AND (CAD.act_type absent
     OR CAD.act_type in ActTypeRegistry)

WellTyped(EH) :=
    EH.reuse_policy in ReusePolicyRegistry
AND (EH.profile_id absent
     OR EH.profile_id in ProfileRegistry)

WellTyped(Receipt) :=
    Receipt.decision in DecisionRegistry
AND Receipt.consume_outcome in ConsumeOutcomeRegistry
AND (Receipt.reason_code absent
     OR Receipt.reason_code in FailureCodeRegistry)

UnknownPublicCode :=
    compact form looks like EF-nnn
    AND code not registered
    AND not in 900-999 private range

Strict profile:
    UnknownPublicCode ==&gt; treat as EF-080 FAIL_CLOSED
    rather than as a vendor extension.

This fail-closed rule is intentional forward
compatibility: a strict sink that has not yet
learned a later-registered public EF-nnn MUST
refuse rather than guess.  Operators who need
to accept a newly registered code MUST update
the local table.  Mitigation profiles MAY
log-and-continue; they MUST NOT call that
behavior the strict profile.
      </artwork>
    </section>

    <section anchor="hash-and-tools">
      <name>Hash Function and Formal Tools</name>
      <t>
        This document names codes; it does not define <tt>d(C)</tt>.
        The Act Digest hash, canonicalization, SHA-256 default, and
        collision-resistance argument live in <xref target="DAS-HANDLE"/>.
        A receipt that carries a digest MUST also carry the algorithm
        name used to produce it.
      </t>
      <t>
        Formal verification tools are not required to use these
        tables.  A TLA+ or Alloy model of a sink SHOULD treat
        WellTyped and UnknownPublic =&gt; EF-080 as invariants of the
        strict profile.  Registry membership is not a security proof;
        it is a precondition the handle and composite models assume
        when they mention EF-nnn.
      </t>
    </section>

    <section anchor="state-machine">
      <name>Registration State Machine</name>
      <figure anchor="fig-reg-state">
        <name>From private code to registered code</name>
        <artwork type="ascii-art">
+------------------+
| PRIVATE / EF-X-* |
+--------+---------+
         |
    specification + review
         v
+------------------+
| PROVISIONAL      |
| (this draft)     |
+--------+---------+
         |
    IANA expert review
         v
+------------------+
| REGISTERED       |
+--------+---------+
         |
    breaking semantic change
         v
+------------------+
| DEPRECATED +     |
| successor code   |
+------------------+

A registered code MUST NOT silently change predicate.
      </artwork>
      </figure>
    </section>

    <section anchor="pseudocode">
      <name>Illustrative Pseudocode</name>

      <section anchor="pseudo-validate">
        <name>Validate Registry Fields on a CAD</name>
        <artwork type="ascii-art">
function validate_cad_registries(cad, tables):
    if cad.consequence_class not in tables.consequence:
        return FAIL("unregistered consequence_class")

    if cad.finality_sink.sink_type not in tables.sink:
        return FAIL("unregistered sink_type")

    if cad.act_type and cad.act_type not in tables.act:
        return FAIL("unregistered act_type")

    return PASS
        </artwork>
      </section>

      <section anchor="pseudo-reason">
        <name>Emit a Registered Reason Code</name>
        <artwork type="ascii-art">
function reason(code, tables):
    if code in tables.failure:
        return {
            compact: code,
            name: tables.failure[code].name,
            uri: "urn:ietf:params:ef:failure:" + code
        }

    if matches_ef_numeric(code) and not private_range(code):
        return fail_closed("EF-080",
            detail="unknown public failure code")

    return {
        compact: code,
        name: "PRIVATE",
        uri: null
    }
        </artwork>
      </section>

      <section anchor="pseudo-map-http">
        <name>Map to HTTP Problem Details</name>
        <artwork type="ascii-art">
function to_problem(receipt):
    r = reason(receipt.reason_code, tables)
    status = 409 if r.compact == "EF-005" else 403
    return {
        type: r.uri,
        title: r.name,
        status: status,
        ef_decision: receipt.decision,
        ef_consume_outcome: receipt.consume_outcome
    }
        </artwork>
      </section>
    </section>

    <section anchor="iana-policy">
      <name>Proposed Registration Policy</name>
      <t>
        Unless the community directs otherwise, the proposed policy for all EF
        registries in this document is Expert Review <xref target="RFC8126"/>.
        Media types follow the normal media-type process.
      </t>
      <t>
        Experts SHOULD reject: duplicate predicates under a new name; codes that
        encode a vendor product; codes that assert a legal conclusion; and changes
        that alter the predicate of an already registered value.  New semantics get
        a new code.  Old codes may be marked Deprecated.
      </t>
    </section>

    <section anchor="industry-relevance">
      <name>Industrial Relevance and Public-Roadmap Alignment</name>
      <t>
        Agent platforms, clouds, PSPs, and silicon vendors already ship local enums
        for deny reasons and tool categories.  A public registry is useful only if
        two of those stacks need to read each other's receipts.  This section does
        not claim that any named company lacks a namespace or should adopt these
        codes.  Named products are not described as implementers of this draft.
      </t>
      <t>
        Complementary reading: MCP tool names are tool identifiers, not consequence
        classes.  Copilot connector errors are product errors, not EF failure codes.
        OAuth <tt>invalid_scope</tt> remains an OAuth error.  NVIDIA attestation
        result types remain RATS/EAT objects.  A rail decline code remains a rail
        code unless a profile explicitly maps it to an EF code at the SETTLEMENT
        sink.
      </t>
      <artwork type="ascii-art">
MCP / Copilot tool name   !=  consequence class
OAuth invalid_scope       !=  EF-023
PSP / rail decline        !=  EF failure code (unless mapped)
Attestation result type   !=  consume outcome
      </artwork>
      <t>
        Named organizations are not asserted to have reviewed, implemented, or
        endorsed this registry.  Corrections of mappings and requests to remove a
        name are invited.  Silence is not agreement.
      </t>
    </section>

    <section anchor="questions-community">
      <name>Questions to the IETF Community</name>
      <t>
        Criticism, including the conclusion that no new registry is needed, is a
        successful review outcome.
      </t>
      <ol spacing="normal">
        <li>Is a new EF namespace justified, or should failure codes live only as RFC 9457 type URIs under a vendor or draft tree?</li>
        <li>Is Expert Review the right policy, or Specification Required, or First Come First Served for some tables?</li>
        <li>Should consequence class and sink type be one table?</li>
        <li>Is CLINICAL an acceptable technical class, or is it too close to a regulated domain name?</li>
        <li>Should COMPOSITE be a class, a sink type, both, or deferred to a later composite-finality draft?</li>
        <li>Are the initial EF-nnn assignments stable enough to freeze, or should -00 keep them all Provisional?</li>
        <li>Should JWT/CWT claim names be requested now or only after the handle encoding is chosen?</li>
        <li>Should an HTTP authentication scheme be requested, or is that premature?</li>
        <li>How should private deployments avoid colliding with later public allocations?</li>
        <li>Which existing IANA registry is the closest overlap this draft underestimates?</li>
        <li>Should this document be merged into draft-das-execution-handle instead of standing alone?</li>
        <li>Which venue should own any eventual IANA request: dispatch first, then SEC or ART?</li>
      </ol>
    </section>

    <section anchor="ietf-venues">
      <name>Potential IETF Discussion Venues</name>
      <t>
        This document does not claim that any named group should adopt the work.
        Overlap review should come before an IANA request.
      </t>

      <section anchor="venue-dispatch">
        <name>DISPATCH</name>
        <t>
          The registries cut across OAuth, HTTP, RATS, and SCITT.  DISPATCH is the
          natural first discussion venue if no WG claims the namespace.
        </t>
      </section>

      <section anchor="venue-oauth">
        <name>OAuth</name>
        <t>
          Relevant if EF codes or handle claims are profiled onto tokens.  OAuth
          should not be asked to own consequence classes for actuation or RF.
        </t>
      </section>

      <section anchor="venue-httpapi">
        <name>HTTPAPI</name>
        <t>
          Relevant to problem+json mapping and any later authentication-scheme
          request.  Not a home for sink-type semantics.
        </t>
      </section>

      <section anchor="venue-rats">
        <name>RATS</name>
        <t>
          Relevant only to keep EAT/attestation claim names from colliding with
          proposed <tt>ef_*</tt> claims.  RATS should not own FINANCIAL vs PHYSICAL.
        </t>
      </section>

      <section anchor="venue-scitt">
        <name>SCITT</name>
        <t>
          Relevant if Finality Receipts are SCITT statements and need a statement
          type.  SCITT should not own consume-state failure codes.
        </t>
      </section>

      <section anchor="venue-wimse">
        <name>WIMSE</name>
        <t>
          Relevant to workload identifiers inside CAD.actor, not to the failure
          namespace itself.
        </t>
      </section>

      <section anchor="venue-saag">
        <name>SAAG</name>
        <t>
          Useful for whether a new security-area namespace is justified.  SAAG does
          not adopt documents.
        </t>
      </section>

      <section anchor="venue-no-home">
        <name>No Presumed Home</name>
        <t>
          An individual -00 that requests IANA too early will fail.  This version
          specifies the tables and policy so they can be rejected cleanly.
        </t>
      </section>
    </section>

    <section anchor="related-drafts">
      <name>Relationship to Other Execution-Finality Internet-Drafts</name>
      <t>
        <xref target="DAS-HANDLE"/> defines the objects that carry these fields.
        This document names the fields' allowed values.  Domain drafts SHOULD
        reference these registries instead of minting parallel enums.
      </t>
      <artwork type="ascii-art">
DAS-PROTOCOL     architecture: computation is not authority
DAS-HANDLE       wire objects that carry the fields
this document    allowed values
DAS-COMPOSITE    uses COMPOSITE class/type,
                 EF-044 PATH_INCOMPLETE,
                 EF-047 PARTIAL_COMMIT

Predicate drafts that SHOULD reuse codes, not fork them:
    DAS-STATE, DAS-REVOCATION, DAS-PATH,
    DAS-JURISDICTION, DAS-PURPOSE

Domain drafts that SHOULD cite this registry:
    DAS-AGENTIC / DAS-TOOL, payment, OT/actuation,
    6G/NTN, enterprise-AI, silicon, CVID profiles
      </artwork>
      <t>
        See also <xref target="DAS-PROTOCOL"/>, <xref target="DAS-COMPOSITE"/>,
        <xref target="DAS-JURISDICTION"/>, <xref target="DAS-PATH"/>,
        <xref target="DAS-STATE"/>, <xref target="DAS-REVOCATION"/>,
        <xref target="DAS-PURPOSE"/>, and <xref target="DAS-AGENTIC"/>.
      </t>
    </section>

    <section anchor="security">
      <name>Security Considerations</name>
      <t>
        A registry does not enforce finality.  It only makes failures comparable.
        Security-relevant risks of the namespace itself include:
      </t>
      <ul spacing="normal">
        <li>Colliding public codes with private meanings (mitigate with the unknown-public-code fail-closed rule).</li>
        <li>Using a coarse class to hide a finer substitution (amount mismatch reported only as SCOPE_MISMATCH).</li>
        <li>Treating a registered profile_id as proof that path coverage exists.</li>
        <li>Stable reason codes that leak destination or act class in receipts.</li>
      </ul>
    </section>

    <section anchor="privacy">
      <name>Privacy Considerations</name>
      <t>
        Consequence class, act type, and failure code can reveal that a financial,
        clinical, or disclosure act was attempted.  Receipts SHOULD omit unused
        fields and MAY return a coarse code to untrusted callers while logging the
        registered fine code locally.
      </t>
    </section>

    <section anchor="iana">
      <name>IANA Considerations</name>
      <t>
        This version does not request IANA action.  It defines candidate tables and
        a proposed Expert Review policy so that a later revision, if the community
        agrees, can request:
      </t>
      <ul spacing="normal">
        <li>Execution-Finality Consequence Classes</li>
        <li>Execution-Finality Sink Types</li>
        <li>Execution-Finality Act Types</li>
        <li>Execution-Finality Reuse Policies</li>
        <li>Execution-Finality Decisions</li>
        <li>Execution-Finality Consume Outcomes</li>
        <li>Execution-Finality Failure Codes</li>
        <li>Execution-Finality Profile Identifiers</li>
        <li>media types listed in <xref target="media-types"/></li>
      </ul>
      <t>
        JWT/CWT claim names and an HTTP authentication scheme are explicitly not
        requested in this revision.
      </t>
    </section>

    <section anchor="review-request">
      <name>Criticism, Corrections, and Review Invited</name>
      <t>
        The most useful criticism is that an existing IANA registry already covers
        one or more of these tables.  That evidence should delete the overlapping
        table, not be ignored.  Equally useful is a demonstration that keeping
        "illustrative codes" in each domain draft is preferable to a shared
        namespace at this stage.
      </t>
    </section>

    <section anchor="conclusion">
      <name>Conclusion</name>
      <t>
        Execution-finality objects are not interoperable while every profile assigns
        private meaning to <tt>EF-005</tt> and <tt>FINANCIAL</tt>.  This draft
        proposes a namespace, an initial allocation, and a conservative IANA posture:
        specify the tables now, request registrations only after the community
        accepts that a new namespace is required.
      </t>
      <artwork type="ascii-art">
ILLUSTRATIVE CODE
      !=
SHARED PREDICATE

Same string
      !=
same meaning

Register the predicate
        OR
keep the dialect private
        and do not pretend it is IANA.
      </artwork>
    </section>
  </middle>

  <back>
    <references>
      <name>Normative References</name>
      <reference anchor="RFC2119" target="https://www.rfc-editor.org/rfc/rfc2119">
        <front>
          <title>Key words for use in RFCs to Indicate Requirement Levels</title>
          <author fullname="Scott Bradner" initials="S." surname="Bradner"/>
          <date year="1997" month="March"/>
        </front>
        <seriesInfo name="BCP" value="14"/>
      </reference>
      <reference anchor="RFC8174" target="https://www.rfc-editor.org/rfc/rfc8174">
        <front>
          <title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title>
          <author fullname="Barry Leiba" initials="B." surname="Leiba"/>
          <date year="2017" month="May"/>
        </front>
        <seriesInfo name="BCP" value="14"/>
      </reference>
      <reference anchor="RFC8126" target="https://www.rfc-editor.org/rfc/rfc8126">
        <front>
          <title>Guidelines for Writing an IANA Considerations Section in RFCs</title>
          <author><organization>IETF</organization></author>
          <date year="2017" month="June"/>
        </front>
        <seriesInfo name="BCP" value="26"/>
      </reference>
    </references>

    <references>
      <name>Informative References</name>

      <reference anchor="RFC6749" target="https://www.rfc-editor.org/rfc/rfc6749">
        <front>
          <title>The OAuth 2.0 Authorization Framework</title>
          <author><organization>IETF</organization></author>
          <date year="2012" month="October"/>
        </front>
        <seriesInfo name="RFC" value="6749"/>
      </reference>

      <reference anchor="RFC7519" target="https://www.rfc-editor.org/rfc/rfc7519">
        <front>
          <title>JSON Web Token (JWT)</title>
          <author><organization>IETF</organization></author>
          <date year="2015" month="May"/>
        </front>
        <seriesInfo name="RFC" value="7519"/>
      </reference>

      <reference anchor="RFC7591" target="https://www.rfc-editor.org/rfc/rfc7591">
        <front>
          <title>OAuth 2.0 Dynamic Client Registration Protocol</title>
          <author><organization>IETF</organization></author>
          <date year="2015" month="July"/>
        </front>
        <seriesInfo name="RFC" value="7591"/>
      </reference>

      <reference anchor="RFC8392" target="https://www.rfc-editor.org/rfc/rfc8392">
        <front>
          <title>CBOR Web Token (CWT)</title>
          <author><organization>IETF</organization></author>
          <date year="2018" month="May"/>
        </front>
        <seriesInfo name="RFC" value="8392"/>
      </reference>

      <reference anchor="RFC9457" target="https://www.rfc-editor.org/rfc/rfc9457">
        <front>
          <title>Problem Details for HTTP APIs</title>
          <author><organization>IETF</organization></author>
          <date year="2023" month="July"/>
        </front>
        <seriesInfo name="RFC" value="9457"/>
      </reference>

      <reference anchor="RFC9943" target="https://www.rfc-editor.org/rfc/rfc9943">
        <front>
          <title>An Architecture for Trustworthy and Transparent Digital Supply Chains</title>
          <author><organization>IETF</organization></author>
          <date year="2026" month="June"/>
        </front>
        <seriesInfo name="RFC" value="9943"/>
      </reference>

      <reference anchor="DAS-HANDLE">
        <front>
          <title>Possession Is Not Authority: Execution Handle, Sink Verification, Atomic Consumption, and Finality Receipt</title>
          <author fullname="Sangam Das" initials="S." surname="Das"/>
          <date year="2026" month="September"/>
        </front>
        <seriesInfo name="Internet-Draft" value="draft-das-execution-handle-01"/>
      </reference>

      <reference anchor="DAS-PROTOCOL" target="https://datatracker.ietf.org/doc/draft-das-execution-finality-protocol-layer/">
        <front>
          <title>The Missing Protocol Layer for the Agentic Internet: Computation Is Not Authority</title>
          <author fullname="Sangam Das" initials="S." surname="Das"/>
          <date year="2026" month="September"/>
        </front>
        <seriesInfo name="Internet-Draft" value="draft-das-execution-finality-protocol-layer-01"/>
      </reference>

      <reference anchor="DAS-COMPOSITE">
        <front>
          <title>Partial Commit Is Not Finality: Composite Candidate Acts Across Multiple Finality Sinks</title>
          <author fullname="Sangam Das" initials="S." surname="Das"/>
          <date year="2026" month="September"/>
        </front>
        <seriesInfo name="Internet-Draft" value="draft-das-composite-execution-finality-01"/>
      </reference>

      <reference anchor="DAS-JURISDICTION">
        <front>
          <title>Authorized Here, Not Authorized There: Jurisdiction-Bound Execution Finality for Cross-Border and Sovereign Systems</title>
          <author fullname="Sangam Das" initials="S." surname="Das"/>
          <date year="2026" month="September"/>
        </front>
        <seriesInfo name="Internet-Draft" value="draft-das-jurisdiction-bound-execution-finality-00"/>
      </reference>

      <reference anchor="DAS-PATH" target="https://datatracker.ietf.org/doc/draft-das-consequence-path-completeness/">
        <front>
          <title>When the Gate Can Be Bypassed: Consequence-Path Completeness for Execution Finality</title>
          <author fullname="Sangam Das" initials="S." surname="Das"/>
          <date year="2026" month="September"/>
        </front>
        <seriesInfo name="Internet-Draft" value="draft-das-consequence-path-completeness"/>
      </reference>

      <reference anchor="DAS-STATE">
        <front>
          <title>When Valid Authorization Becomes Stale: State and Policy Continuity at the Execution-Finality Boundary</title>
          <author fullname="Sangam Das" initials="S." surname="Das"/>
          <date year="2026" month="September"/>
        </front>
        <seriesInfo name="Internet-Draft" value="draft-das-state-policy-continuity-finality-00"/>
      </reference>

      <reference anchor="DAS-REVOCATION">
        <front>
          <title>Revoked but Still Executable: Closing the Authorization-to-Effect Gap with Finality-Bound Revocation</title>
          <author fullname="Sangam Das" initials="S." surname="Das"/>
          <date year="2026" month="September"/>
        </front>
        <seriesInfo name="Internet-Draft" value="draft-das-finality-bound-revocation-00"/>
      </reference>

      <reference anchor="DAS-PURPOSE" target="https://datatracker.ietf.org/doc/draft-das-purpose-execution-finality/">
        <front>
          <title>Data-Purpose Laundering Prevention: Execution-Finality for Preventing Cross-Domain Data Reuse</title>
          <author fullname="Sangam Das" initials="S." surname="Das"/>
          <date year="2026" month="September"/>
        </front>
        <seriesInfo name="Internet-Draft" value="draft-das-purpose-execution-finality"/>
      </reference>

      <reference anchor="DAS-AGENTIC" target="https://datatracker.ietf.org/doc/draft-das-agentic-execution-finality/">
        <front>
          <title>Tool Selection Is Not Execution: Finality for Agentic Tool Dispatch in High-Risk AI Systems</title>
          <author fullname="Sangam Das" initials="S." surname="Das"/>
          <date year="2026" month="September"/>
        </front>
        <seriesInfo name="Internet-Draft" value="draft-das-agentic-execution-finality"/>
      </reference>
    </references>
  </back>
</rfc>
