<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE rfc [
  <!ENTITY nbsp "&#160;">
  <!ENTITY zwsp "&#8203;">
  <!ENTITY nbhy "&#8209;">
  <!ENTITY wj "&#8288;">
]>
<rfc xmlns:xi="http://www.w3.org/2001/XInclude"
     category="info"
     docName="draft-watts-oauth-agent-revocation-closure-01"
     ipr="trust200902"
     obsoletes=""
     updates=""
     submissionType="IETF"
     xml:lang="en"
     version="3">
  <front>
    <title abbrev="Agent Revocation Closure">Revocation Closure for Agentic Authorization Systems</title>
    <seriesInfo name="Internet-Draft" value="draft-watts-oauth-agent-revocation-closure-01"/>
    <author fullname="Deonte Watts" initials="D." surname="Watts">
      <organization>Independent Researcher</organization>
      <address>
        <postal>
          <city>San Francisco</city>
          <region>CA</region>
          <country>US</country>
        </postal>
        <email>deonte@goodshyt.fun</email>
        <uri>https://orcid.org/0009-0005-8586-3650</uri>
      </address>
    </author>
    <date year="2026" month="October" day="11"/>
    <area>Security</area>
    <workgroup>Web Authorization Protocol</workgroup>
    <keyword>agentic authorization</keyword>
    <keyword>revocation</keyword>
    <keyword>delegation</keyword>
    <keyword>OAuth</keyword>
    <keyword>workload identity</keyword>
    <abstract>
      <t>Agentic systems can derive and distribute authority across delegated agents, workloads, credentials, queues, and long-running operations. Existing revocation mechanisms can invalidate a credential or authorization grant, but credential invalidation alone does not establish that every path from revoked authority to a consequential effect has been closed.</t>
      <t>This document defines a protocol-neutral model for revocation closure. It introduces authority graphs, consequential sinks, revocation cut sets, closure states, closure budgets, and closure receipts. The model is intended to complement OAuth 2.0, workload identity, transaction-token, and agent-authorization work. It does not define a new authorization protocol, token format, or AI safety mechanism.</t>
    </abstract>
  </front>

  <middle>
    <section anchor="intro">
      <name>Introduction</name>
      <t>Authorization systems usually answer whether an action is permitted at a point in time. Agentic systems add a second problem: authority can be delegated, transformed, cached, queued, or propagated across multiple workloads before a revocation request arrives. In such systems, revoking one token or one principal may be necessary without being sufficient to stop consequential activity.</t>
      <t><xref target="RFC7009"/> defines OAuth 2.0 token revocation and permits invalidation of a token and, where applicable, related tokens or grants. <xref target="I-D.chen-oauth-agent-revocation"/> explores agent-level cascade revocation. <xref target="I-D.klrc-aiagent-auth"/> describes the use of OAuth and workload identity for agent authentication and authorization. This document addresses a narrower semantic question: when may an implementation claim that revocation is complete?</t>
      <t>The core distinction is:</t>
      <figure>
        <artwork type="ascii-art"><![CDATA[
   revocation request  !=  authorization invalidation  !=  revocation closure
]]></artwork>
      </figure>
      <t>A revocation request is an instruction. Authorization invalidation is a state change affecting one or more grants, tokens, or policy decisions. Revocation closure is the stronger condition that, within a declared enforcement scope, no remaining authority path can produce a new consequential effect on behalf of the revoked authority epoch.</t>

      <section anchor="requirements-language">
        <name>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, as shown here.</t>
      </section>

      <section anchor="non-goals">
        <name>Non-Goals</name>
        <t>This document does not attempt to infer model intent, deception, cognition, or semantic state. It does not specify physical shutdown mechanisms, require a particular identity system, define a new OAuth grant type, or claim closure outside the system boundary declared by an implementation.</t>
      </section>
    </section>

    <section anchor="terminology">
      <name>Terminology</name>
      <dl newline="true">
        <dt>Authority Epoch:</dt>
        <dd>A bounded lifetime of authority rooted in one authorization event or independently reauthorized continuation. A new authorization after closure creates a new authority epoch.</dd>
        <dt>Authority Graph:</dt>
        <dd>A directed graph whose edges represent capabilities or authorization-bearing transitions that can contribute to a consequential effect.</dd>
        <dt>Authorization Invalidation:</dt>
        <dd>A state transition after which a previously valid authorization artifact, grant, policy decision, or derived authority MUST NOT authorize new actions within its defined scope.</dd>
        <dt>Consequential Sink:</dt>
        <dd>A resource or operation whose successful invocation creates an externally relevant effect, including network transmission, persistent state change, credential use, queue execution, financial or resource commitment, or actuator invocation.</dd>
        <dt>Derived Authority:</dt>
        <dd>Authority obtained from, delegated by, exchanged from, or otherwise causally dependent on another authorization artifact or authority epoch.</dd>
        <dt>Pending Effect:</dt>
        <dd>An operation authorized before invalidation but not yet irreversibly committed, such as queued work, delayed execution, or an asynchronous side effect.</dd>
        <dt>Revocation Cut Set:</dt>
        <dd>A set of independently enforceable authority edges such that every declared path from the revoked authority root to every in-scope consequential sink crosses at least one edge in the set.</dd>
        <dt>Revocation Closure:</dt>
        <dd>The condition in which all required cut-set edges have been enforced and no unresolved declared path remains by which the revoked authority epoch can authorize a new consequential effect.</dd>
        <dt>Closure Receipt:</dt>
        <dd>An integrity-protected statement describing the scope, status, evidence, and limitations of a revocation-closure determination.</dd>
      </dl>
    </section>

    <section anchor="principles">
      <name>Design Principles</name>
      <ol>
        <li>Revocation request is not closure. An accepted request MUST NOT by itself be represented as completed closure.</li>
        <li>Credential invalidation is not consequence reversal. Effects already irreversibly committed before closure may remain.</li>
        <li>Derived authority is in scope unless independently reauthorized. An implementation claiming closure MUST account for derived credentials, delegated agents, transaction context, queues, and other authority-bearing descendants identified by its declared model.</li>
        <li>Unknown is not closed. Missing evidence or unresolved authority paths MUST NOT be silently treated as successful closure.</li>
        <li>Closure is bounded by declared coverage. A closure claim MUST identify the enforcement scope to which it applies and MUST NOT imply closure of unknown or out-of-scope systems.</li>
        <li>Fresh authorization creates a new epoch. A closure receipt for one authority epoch MUST NOT be reused as evidence that a later, independently authorized epoch is closed.</li>
      </ol>
    </section>

    <section anchor="graph-model">
      <name>Authority Graph and Closure Condition</name>
      <t>Let G = (V,E) be a directed authority graph. Let C be the root of the authority epoch being revoked, and let Q be the set of consequential sinks in the declared enforcement scope. Each directed path from C to a member of Q represents a modeled way in which that authority epoch can contribute to a new consequential effect.</t>
      <t>A revocation cut set K is valid only if every declared C-to-Q path intersects K. Revocation closure is achieved only after the enforcement point associated with every required member of K is active and no unresolved C-to-Q path remains.</t>
      <figure>
        <name>Example Authority Graph</name>
        <artwork type="ascii-art"><![CDATA[
                     +--> delegated agent --[e2]--> API sink
                    /
   authority root -+----> derived token ----[e4]--> storage sink
                    \
                     +--> work queue -------[e6]--> job sink

   Example revocation cut set K = { e2, e4, e6 }

   Closure requires each declared root-to-sink path to cross an
   enforced cut edge. Revoking only the root credential is insufficient
   if derived authority or already-authorized queued work can still act.
]]></artwork>
      </figure>
      <t>This model does not require implementations to expose their complete internal graph on the wire. Implementations MAY use internal topology, dependency indexes, grant lineage, transaction lineage, or equivalent mechanisms. However, an implementation claiming closure MUST have a deterministic method for establishing that the declared closure condition has been satisfied.</t>

      <section anchor="dynamic-graphs">
        <name>Dynamic Graphs</name>
        <t>Agentic systems can create new delegates and authority edges dynamically. Once invalidation begins, an implementation MUST prevent the revoked authority epoch from creating new authority-bearing edges that bypass the cut set. If the system cannot establish this property, closure status MUST be <tt>UNKNOWN</tt>, <tt>PARTIAL</tt>, or <tt>FAILED</tt>, but not <tt>CLOSED</tt>.</t>
      </section>

      <section anchor="closure-budget">
        <name>Closure Budget</name>
        <t>A deployment MAY define a closure budget Delta measured from acceptance of a revocation request to completed closure. If such a budget is advertised, the implementation MUST distinguish request time from completed-closure time. Cross-system timestamps MUST NOT be compared as if they share a trusted clock unless the deployment has established the required clock properties. Implementations can instead use local monotonic measurements, signed sequencing, or protocol-specific ordering.</t>
      </section>
    </section>


    <section anchor="assurance-boundary">
      <name>Declared Scope and Assurance Boundary</name>
      <t>The closure condition is always relative to an identified authority epoch, a declared set of consequential sinks, and a stated observation and enforcement boundary. A receiver MUST NOT infer global or transitive coverage from a receipt that names only a local service or partial dependency graph.</t>
      <t>An implementation asserting <tt>CLOSED</tt> MUST establish that its declared sink inventory and authority-lineage coverage are sufficient for the claim, or identify unresolved dependencies rather than silently assuming their absence. A path that is unknown because telemetry or delegation records are missing is not a verified cut path.</t>
      <t>Evidence of a successful revocation request, a successful token-revocation response, or successful delivery of a notification is not by itself evidence that every downstream enforcement point has stopped accepting the revoked authority epoch.</t>
      <figure>
        <name>Necessary Conditions for a Scoped Closure Claim</name>
        <artwork type="ascii-art"><![CDATA[
   CLOSED(epoch, scope) requires:
     known and bounded authority-to-sink coverage;
     verified enforcement on every modeled path;
     handling of in-flight and queued effects;
     protection against new bypassing descendants;
     evidence bound to this epoch and scope.

   UNKNOWN coverage != CLOSED.
]]></artwork>
      </figure>
      <t>The graph cut-set formulation is a model of the closure obligation, not evidence that a particular implementation has discovered all relevant paths. Independent enforcement or observation at consequential sinks can provide stronger assurance than an agent's self-reported status.</t>
    </section>

    <section anchor="states">
      <name>Closure State Model</name>
      <t>Implementations that expose closure status SHOULD use semantics equivalent to the following states, even if a protocol uses different labels:</t>
      <dl newline="true">
        <dt>REQUESTED:</dt>
        <dd>A revocation request has been accepted. No closure claim is made.</dd>
        <dt>PROPAGATING:</dt>
        <dd>Invalidation is being enforced across one or more authority paths.</dd>
        <dt>CLOSED:</dt>
        <dd>All required cut-set enforcement has completed for the declared scope and no unresolved modeled path remains.</dd>
        <dt>PARTIAL:</dt>
        <dd>Some paths have been closed, but one or more known paths remain unresolved.</dd>
        <dt>FAILED:</dt>
        <dd>Required enforcement could not be completed or a declared closure budget was exceeded.</dd>
        <dt>UNKNOWN:</dt>
        <dd>Available evidence is insufficient to determine closure.</dd>
      </dl>
      <t><tt>PARTIAL</tt>, <tt>FAILED</tt>, and <tt>UNKNOWN</tt> MUST NOT be interpreted as <tt>CLOSED</tt>. A relying component that requires closure before continuing a sensitive transition SHOULD fail closed when presented with one of those states.</t>
    </section>

    <section anchor="receipt">
      <name>Closure Receipt Model</name>
      <t>A Closure Receipt is a protocol-neutral evidence object. This document does not define its encoding. A future profile could encode it as a signed JWT, a COSE object, an OAuth response object, a transaction-token claim, or another protocol-native structure.</t>
      <t>A closure receipt SHOULD carry sufficient information to answer five questions: what authority epoch was affected, what scope was evaluated, what status was reached, when the status was reached, and what evidence or limitations bound the claim.</t>
      <t>The following is a non-normative JSON example:</t>
      <figure>
        <name>Illustrative Closure Receipt</name>
        <sourcecode type="json" markers="true"><![CDATA[
{
  "version": 1,
  "closure_id": "urn:uuid:3cf0f843-64ef-4ef9-96e3-91bb9542d6f6",
  "authority_epoch": "urn:example:epoch:7f42",
  "authority_root": "sha256:7b7f...",
  "status": "closed",
  "requested_at": "2026-09-12T18:00:00Z",
  "closed_at": "2026-09-12T18:00:00.184Z",
  "coverage": {
    "sink_classes": ["api", "credential", "queue", "storage"],
    "policy_id": "urn:example:policy:agent-revoke-v3"
  },
  "cut_set_digest": "sha256:50d1...",
  "evidence_digest": "sha256:ad27...",
  "unresolved_paths": []
}
]]></sourcecode>
      </figure>
      <t>When a receipt crosses a trust boundary, its integrity and issuer authenticity MUST be protected by the enclosing protocol. A receipt MUST NOT contain bearer secrets or reusable credentials. Implementations SHOULD minimize topology and identity disclosure, using opaque identifiers or digests where detailed graph disclosure is unnecessary.</t>
    </section>

    <section anchor="oauth-mapping">
      <name>Mapping to OAuth and Workload Identity</name>
      <t>This section explains how the closure model relates to existing IETF mechanisms. It does not update those mechanisms.</t>
      <ul>
        <li><xref target="RFC7009"/> can initiate invalidation of OAuth tokens and grants. A successful revocation response does not, by itself, demonstrate that every derived authorization path, queued effect, or independently cached decision has reached closure.</li>
        <li><xref target="RFC8693"/> enables security-token exchange. Where exchanged tokens derive authority from a revoked root, deployments claiming closure need a deterministic policy for invalidating or otherwise cutting those derived paths unless they have been independently reauthorized.</li>
        <li><xref target="RFC9396"/> provides structured authorization details. Such details can help identify the scope or purpose whose authority is being closed, but do not themselves provide closure semantics.</li>
        <li><xref target="I-D.ietf-oauth-transaction-tokens"/> propagates identity, authorization, and request context through a call chain. Transaction-scoped enforcement points can form part of a revocation cut set.</li>
        <li><xref target="I-D.ietf-wimse-arch"/> provides workload-identity architecture useful for identifying enforcement subjects and workloads participating in a closure domain.</li>
        <li><xref target="I-D.chen-oauth-agent-revocation"/> defines explicit agent-level and cascade-revocation mechanisms. The closure model in this document is complementary: it specifies the semantic condition under which a deployment can state that propagation has actually completed.</li>
        <li><xref target="I-D.liu-oauth-authorization-evidence"/> addresses authorization evidence associated with consent and access tokens. A Closure Receipt concerns evidence produced after invalidation and should not be confused with evidence that authority was valid when originally granted.</li>
      </ul>
      <t>OAuth deployments implementing this model SHOULD follow the security guidance in <xref target="RFC9700"/>.</t>
    </section>

    <section anchor="example">
      <name>Worked Example: Delegation plus Queued Work</name>
      <t>A user authorizes Agent A. Agent A obtains authority for Service B and submits a delayed operation to Queue Q. Service B also obtains a derived credential for Resource Server R.</t>
      <t>At time t0, the user revokes Agent A. Invalidating A's access token is not sufficient for closure if the derived credential remains valid or if Q can execute the already-authorized delayed operation after t0.</t>
      <t>One valid cut set for this deployment might include: (1) a gate preventing use of the derived credential at R, and (2) a gate that cancels or blocks the queued operation before the job sink commits an external effect. Only after both enforcement points report success may the deployment produce <tt>CLOSED</tt> for the declared scope.</t>
      <t>If Q is outside the deployment's enforcement domain, the receipt can report <tt>PARTIAL</tt> or identify Q as out of scope. It MUST NOT represent global closure.</t>
    </section>

    <section anchor="operational">
      <name>Operational Considerations</name>
      <t>Implementations need not continuously materialize a full graph. A practical system can derive closure from grant lineage, token-exchange lineage, transaction identifiers, workload identities, queue ownership, policy dependencies, and sink-specific enforcement acknowledgements.</t>
      <t>When closure claims are consumed across trust boundaries, the relying party SHOULD verify issuer authorization, authority-epoch binding, declared sink scope, receipt freshness, and the meaning of unresolved paths before acting on a status of <tt>CLOSED</tt>.</t>
      <t>Closure computation SHOULD be idempotent. Repeated processing of the same revocation event SHOULD converge on the same or a stricter result for a given authority epoch. A component MUST NOT downgrade a known unresolved path into a closed result merely because evidence becomes unavailable.</t>
      <t>Because revocation can create large fan-out, implementations SHOULD defend closure mechanisms against denial-of-service amplification. Rate limits, bounded delegation depth, batched enforcement, and asynchronous status can be used where appropriate, provided they do not cause <tt>PROPAGATING</tt> or <tt>PARTIAL</tt> states to be misrepresented as <tt>CLOSED</tt>.</t>
    </section>


    <section anchor="commit-races">
      <name>Pending Operations and Commit-Time Races</name>
      <t>Revocation races arise when an operation is authorized before invalidation but commits after invalidation or after a reported closure. Systems need a documented ordering or fencing rule identifying whether an effect belongs to the revoked authority epoch and at which point it becomes irreversible.</t>
      <t>For sinks inside its declared enforcement scope, an implementation claiming <tt>CLOSED</tt> MUST account for work already admitted to queues, batch executors, retry systems, timers, and other delayed execution paths if they can create new effects after closure. A cancellation request alone is insufficient unless the relevant sink prevents the subsequent commit or the pending work is otherwise conclusively discharged.</t>
      <t>In a system that allows execution to start before invalidation and finish afterward, the scope definition MUST state what is meant by a new consequential effect. Closure is not retroactive and does not reverse effects already irrevocably committed. It also must not be represented as having stopped independently reauthorized operations belonging to a new authority epoch.</t>
      <t>Monotonic logical sequence numbers, authoritative sink-side commit records, epoch-aware execution checks, and independent enforcement acknowledgements are possible techniques. This document does not require a specific clock, database, queue, or consensus algorithm.</t>
    </section>

    <section anchor="verification-cases">
      <name>Illustrative Conformance and Falsification Cases</name>
      <t>This section supplies non-normative tests of the semantics defined here. They are constructed cases, not measured outcomes or claims of deployment performance.</t>
      <ol>
        <li>Root credential revoked; an independently cached descendant still commits to an in-scope sink. A claim of <tt>CLOSED</tt> preceding that commit fails the declared closure condition.</li>
        <li>Root and delegated credentials revoked; a queued operation authorized earlier executes after the claimed closure boundary. If the new commit remains attributable to the revoked epoch and is within scope, the closure claim fails.</li>
        <li>A known external queue lacks a trustworthy enforcement acknowledgement. The implementation reports <tt>PARTIAL</tt> or <tt>UNKNOWN</tt>, not <tt>CLOSED</tt>.</li>
        <li>A replayed receipt names a different authority epoch or stale scope. A relying party rejects the receipt as inapplicable.</li>
        <li>Independently reauthorized work commits after the old epoch is closed. Its effect is recorded against the new epoch rather than attributed to a failure to close the old one.</li>
        <li>An effect irrevocably committed before the closure boundary remains visible afterward. This alone does not disprove closure, which concerns new effects.</li>
      </ol>
      <t>An independent observer can challenge a closure receipt by finding an in-scope post-closure effect that derives from the revoked epoch. An implementation SHOULD retain enough authenticated evidence to investigate such a counterexample without disclosing unrelated identity or topology information.</t>
    </section>

    <section anchor="privacy">
      <name>Privacy Considerations</name>
      <t>Authority graphs can reveal organizational structure, user relationships, delegation topology, resource names, and sensitive operational context. Closure receipts SHOULD disclose only the minimum information necessary for the relying party to evaluate the closure claim.</t>
      <t>Opaque authority-epoch identifiers, hashed cut-set descriptions, scoped evidence digests, and selective disclosure can reduce unnecessary topology exposure. Closure evidence SHOULD NOT become a durable global correlation identifier for a user or agent across unrelated authorization contexts.</t>
    </section>

    <section anchor="security">
      <name>Security Considerations</name>
      <t>A forged <tt>CLOSED</tt> result is security-critical because it can cause a relying party to proceed under the false assumption that revoked authority can no longer create consequences. Closure receipts crossing trust boundaries MUST therefore be integrity protected and authenticated.</t>
      <t>Receipts are vulnerable to replay if not bound to an authority epoch, scope, and freshness context. A relying party MUST reject a receipt that does not correspond to the authority epoch being evaluated.</t>
      <t>An incomplete authority graph creates false closure. Implementations MUST treat known-but-unobservable dependencies conservatively. Unknown external systems, offline actors, cached credentials, pending asynchronous operations, and independently authorized descendants MUST be represented as limitations, unresolved paths, or separate authority epochs as appropriate.</t>
      <t>Revocation is inherently subject to races. A consequential effect may commit while revocation is propagating. Implementations MUST NOT claim that closure reverses effects that became irreversible before closure.</t>
      <t>Closure evidence itself can become a sensitive security artifact. Evidence stores SHOULD be access controlled and SHOULD provide tamper evidence suitable for the deployment's threat model.</t>
    </section>

    <section anchor="iana">
      <name>IANA Considerations</name>
      <t>This document has no IANA actions.</t>
    </section>
  </middle>

  <back>
    <references>
      <name>References</name>
      <references>
        <name>Normative References</name>
        <reference anchor="RFC2119" target="https://www.rfc-editor.org/info/rfc2119">
          <front>
            <title>Key words for use in RFCs to Indicate Requirement Levels</title>
            <author initials="S." surname="Bradner"/>
            <date month="March" year="1997"/>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="2119"/>
          <seriesInfo name="DOI" value="10.17487/RFC2119"/>
        </reference>
        <reference anchor="RFC8174" target="https://www.rfc-editor.org/info/rfc8174">
          <front>
            <title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title>
            <author initials="B." surname="Leiba"/>
            <date month="May" year="2017"/>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="8174"/>
          <seriesInfo name="DOI" value="10.17487/RFC8174"/>
        </reference>
      </references>

      <references>
        <name>Informative References</name>
        <reference anchor="RFC7009" target="https://www.rfc-editor.org/info/rfc7009">
          <front>
            <title>OAuth 2.0 Token Revocation</title>
            <author initials="T." surname="Lodderstedt"/>
            <author initials="S." surname="Dronia"/>
            <author initials="M." surname="Scurtescu"/>
            <date month="August" year="2013"/>
          </front>
          <seriesInfo name="RFC" value="7009"/>
          <seriesInfo name="DOI" value="10.17487/RFC7009"/>
        </reference>
        <reference anchor="RFC8693" target="https://www.rfc-editor.org/info/rfc8693">
          <front>
            <title>OAuth 2.0 Token Exchange</title>
            <author initials="M." surname="Jones"/>
            <author initials="A." surname="Nadalin"/>
            <author initials="B." surname="Campbell"/>
            <author initials="J." surname="Bradley"/>
            <author initials="C." surname="Mortimore"/>
            <date month="January" year="2020"/>
          </front>
          <seriesInfo name="RFC" value="8693"/>
          <seriesInfo name="DOI" value="10.17487/RFC8693"/>
        </reference>
        <reference anchor="RFC9396" target="https://www.rfc-editor.org/info/rfc9396">
          <front>
            <title>OAuth 2.0 Rich Authorization Requests</title>
            <author initials="T." surname="Lodderstedt"/>
            <author initials="J." surname="Richer"/>
            <author initials="B." surname="Campbell"/>
            <date month="May" year="2023"/>
          </front>
          <seriesInfo name="RFC" value="9396"/>
          <seriesInfo name="DOI" value="10.17487/RFC9396"/>
        </reference>
        <reference anchor="RFC9700" target="https://www.rfc-editor.org/info/rfc9700">
          <front>
            <title>Best Current Practice for OAuth 2.0 Security</title>
            <author initials="T." surname="Lodderstedt"/>
            <author initials="J." surname="Bradley"/>
            <author initials="A." surname="Labunets"/>
            <author initials="D." surname="Fett"/>
            <date month="January" year="2025"/>
          </front>
          <seriesInfo name="BCP" value="240"/>
          <seriesInfo name="RFC" value="9700"/>
          <seriesInfo name="DOI" value="10.17487/RFC9700"/>
        </reference>

        <reference anchor="I-D.ietf-wimse-arch" target="https://datatracker.ietf.org/doc/draft-ietf-wimse-arch/">
          <front>
            <title>Workload Identity in a Multi System Environment (WIMSE) Architecture</title>
            <author initials="J." surname="Salowey"/>
            <author initials="Y." surname="Rosomakho"/>
            <author initials="H." surname="Tschofenig"/>
            <date month="July" year="2026"/>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-wimse-arch-08"/>
        </reference>
        <reference anchor="I-D.klrc-aiagent-auth" target="https://datatracker.ietf.org/doc/draft-klrc-aiagent-auth/">
          <front>
            <title>AI Agent Authentication and Authorization</title>
            <author initials="P." surname="Kasselman"/>
            <author initials="J." surname="Lombardo"/>
            <author initials="Y." surname="Rosomakho"/>
            <author initials="B." surname="Campbell"/>
            <author initials="N." surname="Steele"/>
            <author initials="A." surname="Parecki"/>
            <date month="July" year="2026"/>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-klrc-aiagent-auth-03"/>
        </reference>
        <reference anchor="I-D.ietf-oauth-transaction-tokens" target="https://datatracker.ietf.org/doc/draft-ietf-oauth-transaction-tokens/">
          <front>
            <title>Transaction Tokens</title>
            <author initials="A." surname="Tulshibagwale"/>
            <author initials="G." surname="Fletcher"/>
            <author initials="P." surname="Kasselman"/>
            <date month="July" year="2026"/>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-oauth-transaction-tokens-11"/>
        </reference>
        <reference anchor="I-D.chen-oauth-agent-revocation" target="https://datatracker.ietf.org/doc/draft-chen-oauth-agent-revocation/">
          <front>
            <title>OAuth 2.0 Agent Authorization Explicit Revocation</title>
            <author initials="M." surname="Chen"/>
            <author initials="L." surname="Su"/>
            <date month="April" year="2026"/>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-chen-oauth-agent-revocation-00"/>
        </reference>
        <reference anchor="I-D.liu-oauth-authorization-evidence" target="https://datatracker.ietf.org/doc/draft-liu-oauth-authorization-evidence/">
          <front>
            <title>Authorization Evidence and Audit Trail for OAuth 2.0 Access Tokens</title>
            <author initials="D." surname="Liu"/>
            <author initials="H." surname="Zhu"/>
            <author initials="S." surname="Krishnan"/>
            <author initials="A." surname="Parecki"/>
            <date month="June" year="2026"/>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-liu-oauth-authorization-evidence-01"/>
        </reference>
      </references>
    </references>


    <section anchor="revision-history">
      <name>Changes Since Version -00</name>
      <t>This section is informational and intended to assist reviewers; it may be removed from a future RFC. Revision -01 clarifies the limits of declared coverage, the difference between graph modeling and verified enforcement, in-flight and queued work around the commit boundary, and six illustrative tests of closure semantics. It retains the protocol-neutral Informational scope and defines no new token, API, or IANA registry.</t>
    </section>

    <section anchor="open-issues">
      <name>Open Questions for Further Work</name>
      <t>Future protocol work could determine whether closure receipts require a common encoding, how closure status should be discovered across trust domains, how graph coverage can be proven without disclosing sensitive topology, and how closure evidence should bind to protocol-specific authorization epochs.</t>
    </section>
  </back>
</rfc>
