<?xml version='1.0' encoding='UTF-8'?>
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" category="info" docName="draft-das-finality-bound-revocation-00" ipr="trust200902" submissionType="IETF" consensus="false" xml:lang="en" tocInclude="true" tocDepth="3" symRefs="true" sortRefs="true" version="3">
  <front>
    <title abbrev="Finality-Bound Revocation">Revoked but Still Executable: Closing the Authorization-to-Effect Gap with Finality-Bound Revocation</title>
    <seriesInfo name="Internet-Draft" value="draft-das-finality-bound-revocation-00"/>
    <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>revocation</keyword>
    <keyword>execution finality</keyword>
    <keyword>authorization</keyword>
    <keyword>TOCTOU</keyword>
    <keyword>OAuth</keyword>
    <keyword>continuous access</keyword>
    <keyword>agentic AI</keyword>
    <abstract>
      <t>
        Revocation is often treated as a property of a credential, token, session, grant,
        policy, or identity record.  In consequence-bearing systems, however, an authorization
        can be completely legitimate when issued and still become unsafe before the authorized
        operation becomes externally effective.  The security question is therefore not only
        whether revocation exists, but whether a revocation that becomes authoritative before a
        protected commit is guaranteed to control that commit.  The severity is deployment-
        dependent, but can be high in financial, administrative, AI-agent, cloud-control,
        confidential-compute, device, industrial, or other environments where a stale-but-valid
        authorization can produce an irreversible or externally consequential effect.
      </t>
      <t>
        This document describes a finality-bound revocation model.  A Candidate Act remains in
        a Non-Effective State after upstream authorization.  The authorization is bound to an
        act-specific revocation basis, such as a protected revocation generation, epoch, status
        root, or equivalent authority state.  Immediately before the protected consequence is
        committed, a Finality Sink verifies that no applicable revocation, suspension,
        narrowing, or superseding authorization state has become load-bearing.  Where the
        revocation state changed, the act is rejected, re-authorized, or explicitly shown to
        survive the change under an authoritative rule.  With authoritative current state,
        atomic check-and-commit semantics, and complete mediation of all effectuation paths,
        this is intended as a prevention property for the protected stale act; deployments that
        permit bounded staleness or incomplete path coverage obtain mitigation rather than the
        same prevention guarantee.
      </t>
      <t>
        The model complements existing mechanisms rather than replacing them.  OAuth Token
        Revocation <xref target="RFC7009"/> and Token Introspection <xref target="RFC7662"/>
        provide standardized token-state mechanisms; Microsoft Entra Continuous Access
        Evaluation <xref target="MS-CAE"/> demonstrates event-driven rejection of otherwise
        unexpired tokens; Amazon Verified Permissions and Cedar
        <xref target="AWS-VERIFIED-PERMISSIONS"/> provide fine-grained policy-evaluation
        mechanisms; Google Cloud IAM <xref target="GOOGLE-IAM-DENY"/> provides centrally
        managed deny-policy controls; and confidential-computing and attestation platforms
        such as NVIDIA attestation <xref target="NVIDIA-ATTEST"/> and Arm CCA
        <xref target="ARM-CCA"/> can provide protected execution and trust inputs.  These
        technologies are cited as industrial alignment and integration points, not as
        assertions of vulnerability, deficiency, non-conformance, affiliation, or endorsement.
      </t>
      <t>
        The proposed delta is an effectuation-bound invariant: if revocation becomes authoritative
        before an act crosses the protected effectuation boundary, a previously valid permit must
        not remain sufficient merely because its signature, expiry, sender constraint, earlier
        authorization decision, or cached status result is still valid.  The document therefore
        focuses on the ordering and binding between revocation state and the exact protected
        commit, including queued work, multi-hop delegation, alternate effectuation paths,
        rollback, crash recovery, and TOCTOU races.
      </t>
      <t>
        The document asks the IETF community whether existing standards or deployed mechanisms
        already provide this invariant in full, where the correct effectuation boundary lies,
        and what interoperability work, if any, is justified.  Criticism, corrections,
        counterexamples, implementation experience, and pointers to existing equivalent
        mechanisms are explicitly invited.
      </t>
    </abstract>
  </front>

  <middle>
    <section anchor="intro">
      <name>Introduction</name>
      <t>
        Security systems routinely issue authority that remains usable for some period of time.
        Access tokens, session credentials, signed permits, workload credentials, delegated
        grants, capability objects, and application-specific approvals permit useful decoupling
        between authorization and execution.
      </t>
      <t>
        During that interval, circumstances can change.  A principal can be disabled, an
        administrator can revoke a grant, a service principal can be suspended, a resource can
        change owner, a destination can be blocked, a purpose can be withdrawn, an attestation
        reference state can be invalidated, a fraud system can raise risk, or an emergency policy
        can prohibit an operation that was allowed seconds earlier.
      </t>
      <t>
        The central question in this document is therefore:
      </t>
      <artwork type="ascii-art">
        If authorization was valid at t0, but applicable authority is
        revoked or narrowed at t1, what MUST be true at t2 before the
        protected effect is allowed to occur?
      </artwork>
      <t>
        The proposed answer is an execution-finality invariant: revocation that is authoritative
        before protected commit must be made load-bearing at the effectuation boundary.  A
        previously valid authorization is not itself a right to outlive a later authoritative
        revocation.
      </t>
    </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, as shown
        here.
      </t>
    </section>

    <section anchor="direct-question">
      <name>Direct Question: What Threat Does This Architecture Solve?</name>
      <t>
        The principal threat is not limited to stolen credentials, forged tokens, or expired
        authorization.  The difficult case is a credential or permit that is authentic,
        unexpired, correctly sender-constrained where applicable, and legitimately held by the
        same principal that was authorized earlier.
      </t>
      <figure anchor="fig-revocation-window">
        <name>The revocation-to-effectuation threat window</name>
        <artwork type="ascii-art">
          t0                         t1                         t2
          |                          |                          |
          | authorize exact act C    | revoke/narrow authority | effect C
          | under revocation R17     | advance to R18          |
          |--------------------------|--------------------------|
          |                          |                          |
          v                          v                          v
       Permit[C,R17]            Revocation R18            Finality Sink
       signature valid          is authoritative          must decide
       expiry valid                                      using current state
        </artwork>
      </figure>
      <t>
        If the sink checks only the earlier signature, expiry, or possession proof, the act can
        survive the revocation window.  The architecture described here makes the current
        applicable revocation state part of the final authorization predicate immediately before
        the consequence is committed.
      </t>
      <t>
        The architecture therefore targets revocation lag at the protected consequence boundary,
        including stale-token use, stale introspection, cached allow decisions, policy narrowing,
        multi-hop delegation, crash recovery, network partition, alternate effectuation paths,
        and races between revocation and commit.
      </t>
    </section>

    <section anchor="motivating-scenario">
      <name>Motivating Scenario: Valid at Issuance, Revoked Before Effectuation</name>
      <t>
        Consider a service or autonomous agent that prepares a consequential operation C.  At
        time t0, principal A is authorized to perform C and a permit is issued.  At t1, before C
        is externally effective, an authority disables A, revokes the grant, narrows the allowed
        destination set, or marks the relevant credential or workload as no longer acceptable.
      </t>
      <t>
        The revocation does not necessarily alter the bytes or signature of the already-issued
        permit.  A verifier that considers only issuance-time facts can therefore accept a permit
        that is authentic but no longer applicable.
      </t>
      <t>
        The required property is not that every revocation must propagate instantaneously through
        every system.  The required property is that the deployment explicitly defines the point
        at which revocation becomes authoritative for the protected consequence, and that an act
        cannot cross the protected commit after that point without satisfying the new state.
      </t>
    </section>

    <section anchor="problem-space">
      <name>Problem Space</name>
      <section anchor="revocation-not-expiry">
        <name>Revocation Is Not Expiry</name>
        <t>
          Short token lifetimes reduce exposure but do not eliminate the interval between a
          security-state change and expiry.  A one-minute token can still be used fifty-nine
          seconds too long for a sufficiently consequential operation.  Conversely, event-driven
          revocation can permit longer token lifetimes while maintaining stronger responsiveness.
        </t>
      </section>
      <section anchor="revocation-not-authenticity">
        <name>Revocation Is Not an Authenticity Failure</name>
        <t>
          A revoked permit can remain cryptographically authentic.  Signature verification
          establishes integrity and issuer authentication; it does not by itself establish that
          the authority represented by the signed object remains applicable now.
        </t>
      </section>
      <section anchor="notification-not-enforcement">
        <name>Revocation Notification Is Not Effectuation Enforcement</name>
        <t>
          A push event, stream update, revocation list, introspection response, cache invalidation,
          or policy update can communicate a revocation.  The security property addressed here is
          achieved only when the consequence-bearing path cannot commit the protected effect after
          the revocation has become authoritative under the deployment's ordering rule.
        </t>
      </section>
      <section anchor="token-not-whole-act">
        <name>Revoking a Token Is Not Always the Same as Revoking an Act</name>
        <t>
          A transaction can be derived from a token and then queued, delegated, translated,
          transformed, or handed to a downstream subsystem.  Revoking the upstream token after
          that transformation may not automatically cancel the already-instantiated operation.
          High-consequence deployments therefore need to identify which pending acts are still
          revocable and where that revocation is enforced.
        </t>
      </section>
    </section>

    <section anchor="threat-model">
      <name>Threat Model and Assurance Scope</name>
      <section anchor="threat-severity">
        <name>Threat Severity and Applicability</name>
        <t>
          This document does not assign one universal severity score because consequence varies by
          deployment.  The threat deserves high attention where a stale authorization can cause an
          externally consequential or difficult-to-reverse effect, including transfer of funds,
          privilege or identity changes, release of sensitive data or model artifacts, cloud-control
          mutations, device actions, protected I/O, confidential-compute transitions, industrial
          operations, or other high-consequence state changes.
        </t>
        <t>
          The distinctive risk is that compromise or forgery is not required.  A legitimate principal
          can hold a cryptographically valid, unexpired, correctly sender-constrained authorization
          that was valid at issuance but should no longer control the protected effect after an
          authoritative revocation, suspension, narrowing, ownership change, trust-state change, or
          superseding policy decision.
        </t>
        <t>
          For low-consequence operations, short token lifetimes or bounded revocation propagation may
          be an acceptable engineering tradeoff.  For high-assurance operations, the deployment SHOULD
          explicitly identify the maximum acceptable revocation-staleness interval and the boundary at
          which stale authority is no longer permitted to cause the protected effect.
        </t>
      </section>
      <section anchor="attacker-capabilities">
        <name>Adversary Capabilities</name>
        <t>
          The adversary MAY control or compromise the requester, agent, application process,
          orchestration layer, ordinary host software, untrusted caches, or communication paths
          outside the protected enforcement boundary.  The adversary MAY possess a legitimately
          issued authorization object and MAY have been legitimately authorized at an earlier
          time.  The adversary MAY delay, replay, reorder, suppress, or selectively route
          revocation notifications; exploit cached introspection or policy decisions; restore
          snapshots; induce crash recovery; race an effect against a revocation; or seek an
          alternate path that does not consult current revocation state.
        </t>
        <t>
          The adversary is not required to forge a signature, steal another principal's token,
          defeat proof-of-possession, or break cryptography.  The core attack succeeds if a
          previously valid authorization remains usable after the authoritative revocation point.
        </t>
      </section>
      <section anchor="baseline-profile">
        <name>Baseline Revocation-Finality Profile</name>
        <t>
          In the baseline profile, the requester and network are untrusted.  The revocation
          authority, the source of current revocation state, and the Finality Sink are trusted to
          follow the protocol.  Cached or presented revocation state from the requester MUST NOT
          be treated as authoritative merely because the requester supplies it.
        </t>
      </section>
      <section anchor="high-assurance-profile">
        <name>High-Assurance Revocation-Finality Profile</name>
        <t>
          A higher-assurance deployment MAY additionally assume compromise of the general-purpose
          host operating system, application runtime, agent framework, policy-distribution cache,
          or orchestration software.  In that profile, the authoritative revocation generation,
          consumption state, and protected commit MUST be anchored in a protection domain not
          writable by those compromised components, such as an appropriately isolated TEE, HSM,
          security processor, DPU, SmartNIC, protected firmware component, or equivalent trusted
          enforcement boundary.
        </t>
      </section>
      <section anchor="trusted-roots">
        <name>Trusted Roots and Limits</name>
        <t>
          The base model assumes that configured cryptographic primitives and at least one
          required root of revocation authority remain trustworthy.  Compromise of every ultimate
          revocation authority or of the Finality Sink itself is outside the base threat model.
          Deployments requiring tolerance of authority compromise MAY add threshold control,
          independent authorities, transparency mechanisms, separation of duties, or replicated
          protected state.
        </t>
      </section>
      <section anchor="dos-scope">
        <name>Denial of Service</name>
        <t>
          An adversary can attempt to make current revocation state unavailable.  The architecture
          does not convert availability failure into authorization.  For operations whose threat
          model requires current revocation state, "unknown" MUST NOT silently become "not
          revoked".  Deployments can explicitly define bounded-staleness profiles for lower-risk
          operations, but the resulting risk acceptance is a policy choice rather than an
          equivalent high-assurance property.
        </t>
      </section>
    </section>

    <section anchor="goals">
      <name>Design Goals and Non-Goals</name>
      <t>
        The primary goal is to bind the applicability of revocation to the moment at which a
        protected consequence becomes effective.  A revocation that is authoritative before
        protected commit MUST be capable of preventing a still-pending Candidate Act from
        completing when that revocation applies to the act.
      </t>
      <t>
        This document does not define a universal identity system, universal revocation transport,
        universal policy language, new OAuth grant type, consensus protocol, blockchain, or
        globally synchronized clock.  It also does not require every revocation to cancel every
        pending action.  Deployments define the scope and semantics of revocation; the finality
        mechanism enforces those semantics at the protected boundary.
      </t>
      <t>
        The document does not claim to roll back a consequence that has already become externally
        effective.  Where compensating transactions are possible, they are a separate application
        concern.  Revocation finality is primarily prospective with respect to acts that remain
        non-effective.
      </t>
    </section>

    <section anchor="prevention-mitigation">
      <name>Prevention and Mitigation Property</name>
      <t>
        The architecture distinguishes prevention from mitigation.  A deployment can claim the
        prevention property described here only for a protected consequence whose effectuation paths
        are completely mediated by an enforcement boundary that obtains authoritative revocation
        state and couples the final revocation decision atomically, or under an equivalent protected
        ordering rule, to the protected commit.
      </t>
      <artwork type="ascii-art">
        Revocation committed before protected effect
                    +
        authoritative current revocation state
                    +
        exact-act binding
                    +
        atomic/equivalent final check and commit
                    +
        no bypassing effectuation path
                    |
                    v
        stale authorization cannot produce the protected effect
      </artwork>
      <t>
        Where a deployment accepts cached status with bounded staleness, performs only periodic
        checks, leaves alternate paths outside the Finality Sink, or cannot serialize revocation
        against effectuation, the mechanism can still reduce exposure and shorten the stale-authority
        window, but that is mitigation rather than the same prevention guarantee.
      </t>
      <t>
        The architecture does not reverse a consequence that is already externally effective.
        Compensation, rollback of application state, recovery, and incident response remain separate
        concerns unless a particular application defines them as part of its protected commit model.
      </t>
    </section>

    <section anchor="existing-vs-delta">
      <name>Existing Mechanisms and the Proposed Delta</name>
      <t>
        Existing mechanisms solve important parts of revocation and continuous authorization.  This
        document is not premised on those mechanisms being absent or defective.  The comparison below
        identifies the additional invariant being examined.
      </t>
      <section anchor="existing-oauth-delta">
        <name>OAuth Revocation and Introspection</name>
        <t>
          OAuth Token Revocation <xref target="RFC7009"/> defines a standardized way to revoke tokens.
          OAuth Token Introspection <xref target="RFC7662"/> allows a protected resource to query token
          activity and metadata.  These mechanisms can directly satisfy the proposed invariant when
          the Resource Server is itself the complete, non-bypassable consequence boundary, obtains
          sufficiently current status, and couples that status decision to the protected effect.
          The proposed delta concerns deployments where authorization acceptance and consequence occur
          at different components or times, including queues, downstream services, device APIs,
          payment or storage commits, and other deferred effectuation paths.
        </t>
      </section>
      <section anchor="existing-continuous-delta">
        <name>Continuous Access and Externalized Policy</name>
        <t>
          Continuous-access systems and externalized policy engines can react rapidly to account,
          risk, policy, or entitlement changes.  They are complementary inputs to this architecture.
          The proposed question is whether the resulting current decision remains load-bearing at the
          exact boundary where a pending act becomes externally effective, including after work has
          left the component that performed the earlier authorization check.
        </t>
      </section>
      <section anchor="existing-attestation-delta">
        <name>Attestation and Protected Compute</name>
        <t>
          RATS, EAT, confidential-computing, and hardware-rooted mechanisms can establish fresh trust
          evidence and protect enforcement state.  The proposed delta is not a new attestation format;
          it is the binding of applicable revocation state to the final protected act and commit.
        </t>
      </section>
      <section anchor="what-is-new">
        <name>What Is New in This Document</name>
        <t>
          The document's proposed contribution is the explicit, vendor-neutral finality invariant and
          its associated ordering model: an authorization that was valid at issuance is insufficient
          after an applicable revocation has become authoritative if the protected act has not yet
          crossed the effectuation boundary.  The invariant binds the exact Candidate Act, current
          revocation basis, authorized-use state, and protected commit; requires re-authorization or
          authoritative survival evidence when the basis changes; and treats bypass, rollback, cached
          status, multi-hop delegation, crash recovery, and revocation/effectuation races as part of
          the same end-to-end property.
        </t>
        <t>
          This is a proposed protocol/security-architecture delta, not a claim that no existing product
          or deployment already implements an equivalent property.  Reviewers are specifically invited
          to identify systems or standards that already provide the same invariant end to end.
        </t>
      </section>
    </section>

    <section anchor="terminology">
      <name>Terminology</name>
      <t><strong>Candidate Act:</strong> A proposed operation capable of producing an external, persistent, financial, administrative, physical, disclosure, or other protected consequence, but which has not yet been permitted to produce that consequence.</t>
      <t><strong>Non-Effective State:</strong> A condition in which a Candidate Act can be generated, queued, authorized, or validated while the requester still lacks the means to create the protected consequence without final enforcement.</t>
      <t><strong>Revocation Event:</strong> An authoritative change that withdraws, suspends, narrows, supersedes, or otherwise makes previously applicable authority no longer sufficient for one or more protected acts.</t>
      <t><strong>Revocation Authority:</strong> An authority whose revocation state is recognized by the deployment for the affected principal, credential, grant, policy, resource, destination, purpose, operation class, or other security-relevant scope.</t>
      <t><strong>Revocation Generation:</strong> A monotonically advancing epoch, generation, sequence, authenticated status root, or equivalent protected value identifying revocation state.</t>
      <t><strong>Revocation Cutoff:</strong> The deployment-defined ordering point after which a particular revocation is authoritative for a protected act.</t>
      <t><strong>Revocation Basis:</strong> The security-relevant revocation state against which an authorization or Candidate Act was evaluated.</t>
      <t><strong>Revocation Evidence:</strong> Protected evidence establishing the applicable revocation state, or the relationship between issuance-time and effectuation-time revocation state.</t>
      <t><strong>Execution Handle:</strong> Narrowly scoped authorization bound to a Candidate Act, its relevant revocation basis, and authorized-use constraints.  Possession of the handle is not intended to confer authority after an applicable revocation.</t>
      <t><strong>Finality Sink:</strong> The protected functional boundary controlling the first operation that makes the Candidate Act externally effective.  It verifies or re-establishes revocation applicability immediately before protected commit.</t>
      <t><strong>Protected Commit:</strong> The serialization or transition point at which the protected act becomes externally effective or irreversibly enters a consequence-bearing subsystem under the deployment's model.</t>
    </section>

    <section anchor="revocation-types">
      <name>Revocation Classes</name>
      <section anchor="principal-revocation"><name>Principal or Workload Revocation</name><t>The subject itself becomes unauthorized, disabled, suspended, or unacceptable for the affected operation.</t></section>
      <section anchor="credential-revocation"><name>Credential or Session Revocation</name><t>A credential, token, session, key binding, or delegated credential ceases to be usable even if the subject remains generally valid.</t></section>
      <section anchor="grant-revocation"><name>Grant or Delegation Revocation</name><t>A previously issued permission or delegation is withdrawn or narrowed while other grants may remain valid.</t></section>
      <section anchor="resource-revocation"><name>Resource, Destination, or Ownership Revocation</name><t>The principal remains valid, but the target resource, destination, ownership epoch, or recipient relationship changes so that the specific act is no longer permitted.</t></section>
      <section anchor="purpose-revocation"><name>Purpose or Operation-Class Revocation</name><t>A use purpose, operation class, action type, or safety authorization is withdrawn while unrelated operations remain allowed.</t></section>
      <section anchor="trust-revocation"><name>Trust or Attestation-State Revocation</name><t>A previously acceptable software, firmware, device, key, endorsement, reference value, or attestation state becomes unacceptable for the protected act.</t></section>
    </section>

    <section anchor="formal-model">
      <name>Revocation-Binding Model</name>
      <t>Let C contain the concrete security-relevant Candidate Act parameters.  Let R_eval represent the revocation basis observed when the act is authorized.</t>
      <artwork type="ascii-art">
        C = (subject, operation, object, destination, parameters,
             purpose, nonce, constraints)

        R_eval = (principal_rev_gen,
                  credential_rev_gen,
                  grant_rev_gen,
                  resource_rev_gen,
                  trust_rev_gen,
                  policy_rev_gen)

        D_C = H(Encode(C))
        D_R = H(Encode(R_eval))

        EH = Protect(D_C, D_R, UseConstraints, Freshness,
                     IssuerContext, SingleUseState)
      </artwork>
      <t>
        A deployment need not use every field.  It MUST include or re-establish each revocation
        dimension whose change can make the specific Candidate Act unauthorized.
      </t>
      <t>The semantic rule is:</t>
      <artwork type="ascii-art">
        Authorized(C, R17) does not imply Authorized(C, R18)

        when an applicable revocation represented by R18 invalidates,
        suspends, narrows, or supersedes authority for C.
      </artwork>
    <section anchor="revocation-basis-formal"><name>Formal Revocation-Basis Identity</name><t>Let C be the canonical security-relevant Candidate Act, R_eval the revocation basis
observed when C was authorized, and R_now the authoritative revocation basis observed at the
Finality Sink immediately before protected commit.  Let D_C and D_R be collision-resistant
digests of the canonical Candidate Act and the evaluation-time revocation basis.</t><artwork type="ascii-art">
C = canonical security-relevant Candidate Act

R_eval = (
    principal_rev_gen,
    credential_rev_gen,
    grant_rev_gen,
    resource_rev_gen,
    trust_rev_gen,
    policy_rev_gen
)

R_now = authoritative current revocation basis

D_C = H(Encode(C))
D_R = H(Encode(R_eval))

EH = Protect(
       D_C,
       D_R,
       RevocationScope,
       UseConstraints,
       Freshness,
       IssuerContext,
       SingleUseState)
</artwork><t>The tuple is illustrative.  A deployment need not use every component, but each revocation
dimension whose change can make C unauthorized MUST either be bound into the evaluation basis or
re-established from authoritative state at finalization.</t></section><section anchor="revocation-applicability-formal"><name>Revocation Applicability Predicate</name><t>A revocation event is security-relevant only if it applies to the pending Candidate Act.
This is important for selective revocation: a principal-wide revocation, a credential revocation,
a grant revocation, a resource-state change, and a purpose-specific revocation need not have the
same scope.</t><artwork type="ascii-art">
Applies(E_rev, C, EH) :=
       ScopeMatches(E_rev.scope, C, EH.revocation_scope)
   AND SubjectOrCredentialMatches(E_rev, C, EH)
   AND OperationPurposeResourceMatches(E_rev, C)
   AND EventAuthoritativeForScope(E_rev)
   AND EventGenerationNotRolledBack(E_rev)
</artwork><t>An authentic revocation event that does not apply to C MUST NOT automatically invalidate an
unrelated Candidate Act.  Conversely, a relevant event MUST NOT be ignored merely because the
Execution Handle remains cryptographically valid.</t></section><section anchor="revocation-survival-formal"><name>Explicit Survival or Compatibility Rule</name><t>Some state transitions can preserve authority.  For example, a credential rotation or policy
generation change might be explicitly declared compatible for a narrowly scoped pending act.
Compatibility must be authoritative and machine-verifiable rather than inferred dynamically by an
untrusted requester.</t><artwork type="ascii-art">
Survives(C, R_eval, R_now, SE) :=
       SurvivalEvidenceAuthentic(SE)
   AND SurvivalEvidenceAuthoritative(SE)
   AND ExactCandidateOrClassBound(SE, C)
   AND BasisTransitionMatches(SE, R_eval, R_now)
   AND UseConstraintsSatisfied(SE, C)
   AND FreshnessValid(SE)
</artwork><t>SE is optional survival evidence.  If no such rule exists, a load-bearing change from R_eval
to R_now requires rejection or re-authorization rather than semantic guesswork.</t></section><section anchor="revocation-continuity-formal"><name>Revocation-Continuity Predicate</name><t>The finality decision combines exact-act binding, current revocation applicability, handle
integrity, and any explicit survival rule.</t><artwork type="ascii-art">
RevocationContinuityValid(C, EH, R_now, SE) :=
       HandleIntegrityValid(EH)
   AND ExactActBinding(EH, C)
   AND HandleUseValid(EH, C)
   AND FreshnessValid(EH)
   AND RevocationScopeCurrent(EH, C, R_now)
   AND (
          SameRelevantRevocationBasis(EH, R_now)
          OR Survives(C, EH.revocation_basis, R_now, SE)
       )
   AND NoApplicableRevocationCommittedBeforeEffect(C, R_now)
   AND EffectuationPathAuthorized(C)
</artwork></section><section anchor="revocation-order-formal"><name>Serialization-Order Model</name><t>Wall-clock timestamps are not sufficient when revocation and effectuation race.  Let
≺_S denote the authoritative serialization order used by the deployment.</t><artwork type="ascii-art">
Let:

CommitRev(E_rev)  = authoritative commit of revocation event E_rev
CommitEff(C)      = protected effect commit for Candidate Act C

If:
    CommitRev(E_rev) ≺_S CommitEff(C)
AND Applies(E_rev, C, EH)

then:
    C MUST be re-authorized under the resulting basis
    OR an explicit valid Survival rule MUST apply
    OR C MUST remain non-effective.
</artwork><t>If CommitEff(C) precedes CommitRev(E_rev) in the same authoritative serialization order, the
effect is already final for this invariant and the new revocation governs later acts unless the
application defines a separate compensating-action mechanism.</t></section><section anchor="revocation-strict-prevention"><name>Strict Prevention Invariant</name><artwork type="ascii-art">
Effective(C)
    =&gt;
RevocationContinuityValid(C, EH, R_now, SE) = TRUE

Strict prevention:

NOT RevocationContinuityValid(C, EH, R_now, SE)
    =&gt;
NOT Effective(C)

Race-specific form:

CommitRev(E_rev) ≺_S CommitEff(C)
AND Applies(E_rev, C, EH)
AND NOT Survives(C, R_eval, R_now, SE)
    =&gt;
NOT Effective(C)
</artwork><t>These implications are bounded by the declared threat model, the completeness of the
revocation state used by the sink, and the non-bypassability of the protected effectuation path.</t></section><section anchor="revocation-bounded-proof"><name>Bounded Prevention Argument</name><t>Assume that: (1) every revocation source whose state can invalidate C is represented in the
authoritative current basis; (2) applicable revocation events cannot be forged, suppressed, rolled
back, or bypassed within the declared threat model; (3) the Finality Sink independently binds the
exact observed Candidate Act to EH; (4) revocation commit and protected effect commit share an
authoritative serialization rule; and (5) every effectuation path capable of producing the
protected consequence enforces this invariant or an equivalent one.</t><t>Suppose an applicable revocation commits before the protected effect, but the effect still
occurs without re-authorization or valid survival evidence.  At finalization,
NoApplicableRevocationCommittedBeforeEffect would be false, making
RevocationContinuityValid false.  The strict prevention invariant would therefore prohibit the
effect.  The assumed effect produces a contradiction unless at least one stated assumption was
violated.  This is a bounded security argument, not proof that the revocation authority or policy
itself is correct.</t></section></section>

    <section anchor="finality-predicate">
      <name>Finality Predicate and Safety Invariant</name>
      <t>
        Immediately before protected commit, the Finality Sink evaluates a predicate Phi over
        the observed Candidate Act, Execution Handle, current revocation state, and any explicit
        survival or compatibility evidence.
      </t>
      <artwork type="ascii-art">
        Phi(C, EH, R_now, RE) =
             ExactActBinding
          AND HandleIntegrityValid
          AND HandleUseValid
          AND FreshnessValid
          AND PrincipalNotEffectivelyRevoked
          AND CredentialNotEffectivelyRevoked
          AND GrantNotEffectivelyRevoked
          AND ResourceStateApplicable
          AND PurposeAndOperationStillAllowed
          AND TrustStateApplicable
          AND RevocationOrderingValid
          AND RevocationEvidenceValid
          AND EffectuationPathAuthorized
      </artwork>
      <t>The safety invariant is:</t>
      <artwork type="ascii-art">
        Effective(C) =&gt; Phi(C, EH, R_now, RE) = TRUE
      </artwork>
      <t>
        It is insufficient that Phi was true at issuance time.  Where revocation is load-bearing,
        the sink MUST establish current applicability as part of, or atomically adjacent to, the
        protected commit.
      </t>
    <t>The detailed predicates for revocation applicability, survival evidence, serialization order,
and strict prevention are specified in the formal subsections of
&lt;xref target="formal-model"/&gt;.  In particular, a handle that remains cryptographically valid after
an applicable revocation is not sufficient authority to effect the act.</t></section>

    <section anchor="ordering">
      <name>Revocation Ordering and the Race with Effectuation</name>
      <t>
        Revocation and effectuation can occur concurrently.  A secure design therefore needs an
        ordering rule rather than relying only on wall-clock timestamps.  One implementation can
        serialize both through a protected generation or transaction log; another can use
        compare-and-swap, a monotonic counter, quorum state, or an equivalent linearizable rule.
      </t>
      <figure anchor="fig-revocation-ordering">
        <name>Required serialization of revocation and protected effect</name>
        <artwork type="ascii-art">
          Case A: revocation wins the serialization race

          Commit(R18) -------------------+
                                         |
                                         v
                                  Finalize(C, EH[R17])
                                         |
                                         +-- reject / re-authorize /
                                             prove explicit survival

          Case B: protected effect commits first

          Commit(Effect C) --------------+---- then Commit(R18)
                                         |
                                         +-- C is already effective;
                                             R18 governs later acts

          Ordering rule:

          If Commit(Revocation R18) precedes Commit(Effect C):
              C MUST satisfy R18 or remain non-effective.
        </artwork>
      </figure>
      <t>
        A deployment SHOULD document what constitutes the authoritative revocation commit and the
        protected effect commit.  Ambiguous ordering can otherwise produce inconsistent security
        decisions under concurrency.
      </t>
    <figure anchor="fig-revocation-stale-window"><name>Stale authority between issuance and effectuation</name><artwork type="ascii-art">
t0                         t1                         t2
|                          |                          |
| authorize C under R17    | applicable revocation   | Finality Sink
| EH binds C + R17         | commits as R18          | asked to effect C
|--------------------------|--------------------------|
                                                       |
                                                       v
                                               R18 MUST govern

A cryptographically valid EH[R17] is not sufficient after an
applicable R18 commits before protected effect.
</artwork></figure><figure anchor="fig-revocation-generation-race"><name>Generation race during protected finalization</name><artwork type="ascii-art">
Finalizer                         Revocation Authority
    |                                      |
    | read R17 / generation 17             |
    | verify C under R17                    |
    |                                      |
    |                         commit R18 ---+
    |                                      |
    | enter atomic protected commit         |
    | assert generation == 17  ---- FAIL    |
    |                                      |
    +---- reject / reload R18 / re-authorize

The final assertion closes the verify-then-revoke race.
</artwork></figure></section>

    <section anchor="architecture-drawing">
      <name>Revocation-Finality Enforcement Architecture</name>
      <figure anchor="fig-revocation-architecture">
        <name>Revocation state remains load-bearing through protected commit</name>
        <artwork type="ascii-art">
          +------------------+        +---------------------------+
          | Requester /      |        | Revocation / Policy       |
          | Agent / Workload |        | Authority                 |
          +--------+---------+        +-------------+-------------+
                   |                                |
                   | Candidate Act C                | Rg / events / roots
                   v                                v
          +------------------+        +---------------------------+
          | Authorization    |------&gt;| Protected Current-State   |
          | / Policy Check   |        | View or Status Source     |
          +--------+---------+        +-------------+-------------+
                   |                                |
                   | EH[C,Rg]                       | R_now
                   v                                v
          +------------------------------------------------------+
          |                    FINALITY SINK                      |
          |  exact-act binding + current revocation + ordering  |
          |  + consume-once + non-bypassable protected commit   |
          +---------------------------+--------------------------+
                                      |
                              only if predicate TRUE
                                      v
                              +---------------+
                              | External      |
                              | Effect        |
                              +---------------+
        </artwork>
      </figure>
      <t>
        The diagram is functional rather than topological.  The authorization service, current-state
        source, and Finality Sink MAY be co-located or distributed.  The security requirement is that
        the requester cannot bypass the final predicate and that the revocation state used at commit is
        authoritative under the deployment's ordering rule.
      </t>
    <figure anchor="fig-revocation-final-check-flow"><name>Detailed revocation-finality control flow</name><artwork type="ascii-art">
Candidate C + EH[R_eval]
          |
          v
+---------------------------+
| Verify EH integrity       |
| Verify exact act          |
| Verify freshness/use      |
+-------------+-------------+
              |
              v
+---------------------------+
| Read authoritative R_now  |
| under protected ordering  |
+-------------+-------------+
              |
        basis changed?
          /       \
        no         yes
        |           |
        |      +----v------------------+
        |      | applicable revocation?|
        |      +----+------------------+
        |           |
        |       yes / no
        |         /   \
        |        /     +----&gt; continue if irrelevant
        |       v
        |   valid survival evidence?
        |       / \
        |      no  yes
        |      |    |
        |   REJECT  |
        +------\----+
                v
       +---------------------+
       | protected atomic    |
       | generation recheck  |
       | consume-once        |
       | commit effect       |
       +---------------------+
</artwork></figure></section>

    <section anchor="state-machine">
      <name>State Machine</name>
      <figure anchor="fig-state-machine">
        <name>Illustrative revocation-finality state machine</name>
        <artwork type="ascii-art">
          +-----------+
          | PROPOSED  |
          +-----+-----+
                |
                | authorize under revocation basis Rg
                v
          +------------------+
          | NON-EFFECTIVE    |
          | AUTHORIZED       |
          +--------+---------+
                   |
                   | observe current revocation state
                   v
          +--------------------+
          | APPLICABLE         |
          | REVOCATION CHANGE? |
          +----+----------+----+
               |          |
              yes         no
               |          |
               v          v
       REJECT / REAUTHORIZE   PROTECTED COMMIT
       / PROVE SURVIVAL             |
                                    v
                               +----------+
                               | EFFECTIVE|
                               +----------+
        </artwork>
      </figure>
    </section>

    <section anchor="solution">
      <name>Solution Overview</name>
      <section anchor="prepare"><name>Prepare</name><t>The system creates a canonical Candidate Act.  Preparation MAY include computation, inference, user approval, policy evaluation, or workflow scheduling, but MUST NOT itself create the protected consequence.</t></section>
      <section anchor="authorize"><name>Authorize</name><t>The Candidate Act is evaluated under the applicable authorization and revocation basis.  The resulting authorization is bound to the act and either directly to the relevant revocation generation or to a rule that requires revocation state to be re-established at finalization.</t></section>
      <section anchor="remain-noneffective"><name>Remain Non-Effective</name><t>After authorization, the act remains pending and non-effective.  The requester MUST NOT hold an alternate mechanism that can produce the protected consequence while bypassing the final revocation check.</t></section>
      <section anchor="observe-current"><name>Observe Current Revocation State</name><t>At finalization, the sink obtains current revocation state from protected local state, an authoritative status service, an authenticated event stream, token introspection, an authenticated revocation root, or another mechanism appropriate to the deployment.</t></section>
      <section anchor="finalize"><name>Finalize</name><t>If the act remains authorized under the current applicable revocation state, the sink atomically consumes the relevant finality authority and commits the effect.  Otherwise the act is rejected, re-authorized, or held pending according to policy.</t></section>
    </section>

    <section anchor="pseudocode">
      <name>Illustrative Pseudocode</name>
      <t>The following pseudocode is non-normative and independent of token format or revocation
transport.  It separates authorization-time binding, revocation-state ingestion, applicability
evaluation, explicit survival handling, protected finalization, state-change invalidation,
effectuation-path coverage, and crash recovery.</t><section anchor="pseudo-rev-authorize"><name>Authorize and Bind the Revocation Basis</name><artwork type="ascii-art">
function authorize_and_bind(candidate):
    C = canonical_security_relevant_act(candidate)

    R_eval = authoritative_revocation_snapshot(C)

    if R_eval.status == UNKNOWN:
        reject_or_apply_explicit_bounded_staleness_profile()

    decision = policy_evaluate(C, R_eval)

    if decision != ALLOW:
        reject()

    return protect_handle(
        act_digest          = H(C),
        revocation_basis    = R_eval.identity_or_generation,
        revocation_scope    = decision.revocation_scope,
        subject             = C.subject,
        credential_id       = C.credential_id_if_applicable,
        grant_id            = decision.grant_id_if_applicable,
        use_constraints     = decision.use_constraints,
        nonce               = secure_random(),
        expiry              = bounded_expiry(),
        single_use          = true)
</artwork></section><section anchor="pseudo-rev-ingest"><name>Authenticate and Commit a Revocation Update</name><artwork type="ascii-art">
function accept_revocation_update(event):
    if !authenticate_revocation_event(event):
        reject_event("invalid authenticity")

    if !event.scope_is_authoritative_here:
        reject_event("wrong revocation authority")

    current = protected_current_generation(event.scope)

    if event.generation &lt; current:
        reject_event("rollback attempt")

    if event.generation == current
       and !event_is_idempotent_duplicate(event):
        reject_event("conflicting same-generation event")

    protected_atomic {
        append_authoritative_revocation_event(event)
        advance_revocation_generation_if_needed(event)
        invalidate_affected_pending_cache_entries(event)
    }

    return ACCEPTED
</artwork></section><section anchor="pseudo-rev-snapshot"><name>Build the Authoritative Current Revocation Snapshot</name><artwork type="ascii-art">
function authoritative_revocation_snapshot(candidate):
    snapshot = {
        principal: current_principal_revocation(candidate.subject),
        credential: current_credential_revocation(
                        candidate.credential_id_if_applicable),
        grant: current_grant_revocation(
                   candidate.grant_id_if_applicable),
        resource: current_resource_revocation_state(candidate.object),
        trust: current_trust_revocation_state(candidate.subject),
        policy: current_policy_revocation_generation(candidate)
    }

    if any_required_dimension_unknown(snapshot, candidate):
        return UNKNOWN

    snapshot.identity_or_generation =
        protected_digest_or_generation(snapshot)

    return snapshot
</artwork></section><section anchor="pseudo-rev-applicability"><name>Evaluate Applicable Revocations</name><artwork type="ascii-art">
function applicable_revocations(candidate, handle, R_now):
    applicable = []

    for event in R_now.committed_events:
        if !event_authoritative_for_scope(event):
            continue

        if !scope_matches(
                event.scope,
                handle.revocation_scope,
                candidate):
            continue

        if !subject_credential_grant_resource_matches(
                event, candidate, handle):
            continue

        if !operation_or_purpose_matches_if_scoped(
                event, candidate):
            continue

        applicable.append(event)

    return applicable
</artwork></section><section anchor="pseudo-rev-survival"><name>Validate Explicit Survival Evidence</name><artwork type="ascii-art">
function validate_survival(
        candidate,
        handle,
        R_now,
        survival_evidence):

    if survival_evidence == NONE:
        return FALSE

    if !verify_survival_evidence_integrity(survival_evidence):
        return FALSE

    if !survival_authority_trusted(
            survival_evidence.issuer,
            handle.revocation_scope):
        return FALSE

    if !survival_evidence_binds_exact_candidate_or_class(
            survival_evidence,
            candidate):
        return FALSE

    if !survival_evidence_matches_transition(
            survival_evidence,
            handle.revocation_basis,
            R_now.identity_or_generation):
        return FALSE

    if !survival_evidence_use_constraints_valid(
            survival_evidence,
            candidate):
        return FALSE

    if !survival_evidence_fresh(survival_evidence):
        return FALSE

    return TRUE
</artwork></section><section anchor="pseudo-rev-finalize"><name>Protected Finalization with Revocation Recheck</name><artwork type="ascii-art">
function finalize(
        observed_candidate,
        handle,
        survival_evidence = NONE):

    begin_protected_finality_section()

    C = canonical_security_relevant_act(observed_candidate)

    if !verify_handle_integrity(handle):
        reject("invalid handle")

    if handle.expired or handle.consumed:
        reject("expired or consumed handle")

    if H(C) != handle.act_digest:
        reject("exact-act mismatch")

    R_now = authoritative_revocation_snapshot(C)

    if R_now == UNKNOWN:
        fail_closed_unless_explicit_staleness_profile_allows()

    applicable = applicable_revocations(C, handle, R_now)

    basis_same =
        (R_now.identity_or_generation == handle.revocation_basis)

    if !basis_same:
        if applicable is not empty:
            if !validate_survival(
                    C, handle, R_now, survival_evidence):
                reject_or_reauthorize(
                    "applicable revocation committed")
        else:
            # Basis changed, but no relevant revocation applies to C.
            if !authoritative_transition_irrelevant_to_candidate(
                    handle.revocation_basis, R_now, C):
                reject_or_reauthorize(
                    "basis changed without proof of irrelevance")

    observed_generation = R_now.identity_or_generation

    atomic {
        R_commit = authoritative_revocation_snapshot(C)

        assert R_commit != UNKNOWN

        assert R_commit.identity_or_generation ==
               observed_generation

        assert no_new_applicable_revocation(
            C, handle, R_commit,
            since_generation=observed_generation)

        assert effectuation_path_authorized(C)

        consume_once(handle)

        commit_protected_effect(C)
    }

    return EFFECT_COMMITTED
</artwork></section><section anchor="pseudo-rev-commit-event"><name>Invalidate Pending Authority after a Revocation Commit</name><artwork type="ascii-art">
function on_revocation_commit(event):
    affected = pending_candidates_potentially_affected_by(event)

    for pending in affected:
        mark_revalidation_required(
            pending.handle_id,
            new_generation=event.generation)

        if event_definitively_revokes(pending.candidate):
            mark_non_effective(pending.handle_id)

    publish_protected_generation(event.scope, event.generation)
</artwork></section><section anchor="pseudo-rev-path-coverage"><name>Verify Effectuation-Path Coverage</name><artwork type="ascii-art">
function verify_revocation_path_coverage(
        consequence,
        effectuation_path_inventory):

    for path in paths_capable_of(consequence,
                                 effectuation_path_inventory):

        if path.crosses_finality_sink_with_current_revocation:
            continue

        if path.enforces_equivalent_revocation_finality:
            continue

        return CoverageFailure(
            reason="revocation-bypass path",
            witness=path)

    return COVERAGE_VALID
</artwork></section><section anchor="pseudo-rev-recovery"><name>Crash-Safe Recovery</name><artwork type="ascii-art">
function recover(candidate_id):
    state = protected_commit_state(candidate_id)

    if state == EFFECTIVE:
        return DO_NOT_REPLAY

    if state == COMMITTING:
        result = resolve_atomic_commit(candidate_id)

        if result == EFFECT_COMMITTED:
            return DO_NOT_REPLAY

        # If no effect committed, revocation state may have changed
        # during the crash. Re-enter finalization from fresh state.
        return REVALIDATE_FROM_CURRENT_REVOCATION_STATE

    if state == PENDING:
        return REVALIDATE_FROM_CURRENT_REVOCATION_STATE

    return FAIL_CLOSED
</artwork></section></section>

    <section anchor="push-pull">
      <name>Push, Pull, and Mirrored Revocation State</name>
      <section anchor="push"><name>Push-Based Revocation</name><t>Event streams and push notifications can reduce revocation latency.  The receiver must authenticate the event, preserve ordering or generation semantics, and ensure that loss or reordering does not make an older state appear current.</t></section>
      <section anchor="pull"><name>Pull-Based Revocation</name><t>A sink can query an authoritative status endpoint at or near finalization.  This provides current information at the cost of latency, availability dependence, and potential load.  Cached responses require an explicit staleness policy.</t></section>
      <section anchor="mirrored"><name>Protected Mirrored State</name><t>High-volume systems can mirror revocation generations into protected local state and perform hot-path comparisons without a remote round trip for every effect.  The mechanism distributing generations must itself preserve authenticity, monotonicity, and bounded delay appropriate to the threat model.</t></section>
    </section>

    <section anchor="selective-revocation">
      <name>Selective and Partial Revocation</name>
      <t>
        Revocation need not be all-or-nothing.  An authority can revoke one destination, purpose,
        tool, operation class, resource generation, or delegation edge while allowing unrelated
        acts to proceed.  For that reason a single global "revoked" boolean can be too coarse for
        complex systems.
      </t>
      <t>
        A revocation-finality implementation SHOULD bind or reconstruct sufficient scope to
        determine whether the specific Candidate Act is affected.  False equivalence between
        "principal remains active" and "this act remains authorized" must be avoided.
      </t>
    <figure anchor="fig-selective-revocation-scope"><name>Selective revocation must match the pending act</name><artwork type="ascii-art">
Current revocation events:

  E1: revoke credential K7
  E2: revoke grant G9 only for resource R-B
  E3: suspend principal P4 for operation=TRANSFER

Pending acts:

  C1: P4 / K7 / G8 / READ R-A
  C2: P4 / K9 / G9 / WRITE R-B
  C3: P4 / K9 / G3 / TRANSFER R-C

Applicability:

  E1 -&gt; C1
  E2 -&gt; C2
  E3 -&gt; C3

Authenticity alone is not enough; revocation scope must match C.
</artwork></figure></section>

    <section anchor="delegation">
      <name>Multi-Hop Delegation and Agent Chains</name>
      <t>
        In distributed agent or workload chains, upstream authority can be transformed into
        downstream credentials or queued actions.  A revocation at the original authority may not
        automatically cancel all derived objects unless the derivation chain preserves a
        revocation relationship.
      </t>
      <artwork type="ascii-art">
        User / Authority
              |
              v
          Workload A ----delegates----&gt; Workload B
              |                            |
              |                            v
              |                        Tool / API
              |                            |
              +------- revocation --------+
                                           |
                                           v
                                      Finality Sink
      </artwork>
      <t>
        A deployment MAY propagate revocation generations, grant identifiers, parent authority
        references, or equivalent derivation metadata so the final sink can determine whether an
        upstream revocation invalidates the concrete downstream act.
      </t>
    </section>

    <section anchor="alternate-paths">
      <name>Alternate Effectuation Paths</name>
      <t>
        Revocation finality fails if the protected operation can be completed through a route that
        omits the final revocation check.  Alternate resource servers, administrative APIs,
        asynchronous queues, direct database writes, recovery tools, legacy interfaces, local
        device APIs, privileged host calls, and emergency controls require explicit analysis.
      </t>
      <t>
        Every path capable of creating the protected consequence MUST either converge on the same
        Finality Sink or preserve an equivalent revocation-finality invariant.
      </t>
    <figure anchor="fig-revocation-bypass"><name>Revocation-safe primary path with unsafe alternate path</name><artwork type="ascii-art">
Primary path:
   C -&gt; Finality Sink -&gt; current revocation check -&gt; EFFECT

Alternate path:
   C -&gt; admin / queue / recovery / direct API ------&gt; EFFECT

If the alternate path can effect C without equivalent current
revocation enforcement, revocation prevention is not consequence-wide.
</artwork></figure></section>

    <section anchor="caching">
      <name>Caching and Bounded Staleness</name>
      <t>
        Cached authorization and introspection results are often necessary for availability and
        scale.  RFC 7662 explicitly requires designers to consider the security and performance
        tradeoffs of caching token-state information <xref target="RFC7662"/>.  This document does
        not prohibit caching.
      </t>
      <t>
        A high-assurance profile SHOULD treat the maximum accepted staleness interval as a
        security parameter.  For some operations the acceptable value can be zero at the protected
        commit; for lower-consequence operations a bounded interval can be an intentional policy
        choice.  The deployment SHOULD make that choice observable and testable.
      </t>
    </section>

    <section anchor="crash-recovery">
      <name>Crash Consistency and Recovery</name>
      <t>
        A crash between observing revocation state and committing an effect can reopen the race.
        Recovery MUST NOT restore an older revocation generation, resurrect a consumed handle, or
        complete an operation under a pre-crash allow decision without re-establishing the
        required invariant.
      </t>
      <t>
        Protected journals, monotonic counters, transactional stores, idempotent commit records,
        compare-and-swap, or equivalent mechanisms can be used according to the deployment.
      </t>
    <figure anchor="fig-revocation-crash-recovery"><name>Crash-safe consume and effect ordering</name><artwork type="ascii-art">
State transitions for one Candidate Act:

PENDING
   |
   | final checks pass
   v
COMMITTING
   |
   +---- protected consume marker
   |
   +---- protected effect commit
   v
EFFECTIVE

Crash cases:

before consume      -&gt; safe to retry after revalidation
after consume,
before effect       -&gt; recover transactionally; do NOT blindly replay
after effect commit -&gt; treat as effective; do NOT repeat C
</artwork></figure></section>

    <section anchor="attack-analysis">
      <name>Attack Analysis</name>
      <section anchor="stale-token"><name>Valid-but-Revoked Token</name><t>An attacker presents an unexpired, authentic token after the relevant grant has been revoked.  A finality-aware sink rejects the pending act because current revocation state is load-bearing even though the token remains cryptographically valid.</t></section>
      <section anchor="security-stale-introspection"><name>Stale Introspection Result</name><t>A resource cached an earlier active=true result.  After revocation, the cached result remains inside its cache lifetime.  Where current revocation is required, the sink rejects or refreshes state rather than equating cache freshness with current applicability.</t></section>
      <section anchor="event-suppression"><name>Revocation Event Suppression</name><t>An attacker drops a push notification.  A secure design does not depend on the absence of a message as proof of non-revocation unless the event channel itself provides an authenticated, gap-detecting continuity property or another current-state mechanism exists.</t></section>
      <section anchor="event-reorder"><name>Revocation Event Reordering</name><t>An attacker or network delivers generation R19 before R18, or replays R17 after R19.  Monotonic protected generation semantics prevent the older state from becoming current again.</t></section>
      <section anchor="race"><name>Revocation/Effectuation Race</name><t>Revocation and effectuation occur concurrently.  The system resolves the race using the protected ordering rule rather than wall-clock guesswork.</t></section>
      <section anchor="delegation-launder"><name>Delegation Laundering</name><t>Authority is delegated to a downstream actor before revocation, and the downstream actor attempts to treat the derived permit as independent of its parent grant.  A preserved derivation/revocation relationship prevents the revocation from being lost across the hop.</t></section>
      <section anchor="alternate-sink"><name>Alternate-Sink Bypass</name><t>A revoked operation is denied by the primary API but attempted through an administrative or legacy path.  Non-bypassability requires the alternate path to enforce an equivalent current revocation rule.</t></section>
      <section anchor="rollback"><name>Revocation-State Rollback</name><t>An attacker restores a snapshot in which R17 was current after the authority advanced to R18.  Protected monotonic state or an authoritative current-state root causes the rollback to fail.</t></section>
    </section>

    <section anchor="oauth-relation">
      <name>Relationship to OAuth Revocation and Introspection</name>
      <t>
        OAuth 2.0 Token Revocation <xref target="RFC7009"/> defines an endpoint through which a
        client can request invalidation of a token and, where applicable, related authorization.
        OAuth 2.0 Token Introspection <xref target="RFC7662"/> defines how a protected resource can
        ask an authorization server about the current active state and metadata of a token.
      </t>
      <t>
        Those mechanisms are directly relevant and can supply inputs to this architecture.  This
        document does not redefine their wire formats or semantics.  The additional question is
        architectural: after token status is known, what prevents a previously instantiated or
        delegated Candidate Act from becoming effective through a later boundary that no longer
        consults the applicable revocation state?
      </t>
      <t>
        In deployments where the OAuth Resource Server is itself the complete, non-bypassable
        consequence boundary and performs sufficiently current status checks, the Resource Server
        can satisfy the Finality Sink role and no additional component is required.  The model is
        intended to identify when that property does or does not hold.
      </t>
    </section>

    <section anchor="sender-constraint">
      <name>Relationship to Sender-Constrained Tokens</name>
      <t>
        Sender-constraining mechanisms such as mutual-TLS-bound access tokens and DPoP reduce the
        value of stolen bearer tokens <xref target="RFC8705"/> <xref target="RFC9449"/>.  They are
        complementary to revocation finality.  A correctly sender-constrained token can still be
        revoked while held by its legitimate sender; therefore proof of possession and current
        applicability answer different questions.
      </t>
    </section>

    <section anchor="rats-relation">
      <name>Relationship to RATS and Attestation</name>
      <t>
        The RATS architecture <xref target="RFC9334"/> separates Evidence, Attestation Results,
        appraisal policy, and Relying Party decisions.  EAT <xref target="RFC9711"/> provides a
        token format for attestation claims and requires freshness mechanisms appropriate to its
        use.  Revocation can affect endorsements, reference values, keys, software acceptability,
        or the authority that interprets attestation state.
      </t>
      <t>
        This document does not modify RATS.  It asks how a change in trust acceptability becomes
        load-bearing when a consequential operation is pending after an earlier successful
        appraisal.  A fresh attestation result and a current revocation check can be combined as
        inputs to the finality predicate.
      </t>
    </section>

    <section anchor="wimse-relation">
      <name>Relationship to WIMSE</name>
      <t>
        WIMSE addresses workload identity, credentials, and security context across multi-service
        environments.  Revocation finality is relevant where a workload credential or delegated
        security context has already caused a downstream Candidate Act to be instantiated before
        the originating workload or delegation is revoked.
      </t>
      <t>
        This document does not propose to change workload identifiers or credential formats.  It
        asks whether revocation relationships and current-state semantics need to survive the
        multi-hop path to the consequence boundary.
      </t>
    </section>

    <section anchor="industry-alignment">
      <name>Complementary Industrial Alignment</name>
      <t>
        Industry systems already provide important dynamic-access and trust mechanisms.  Microsoft
        Entra Continuous Access Evaluation <xref target="MS-CAE"/> supports rejection of otherwise
        unexpired tokens after critical events.  Amazon Verified Permissions and Cedar
        <xref target="AWS-VERIFIED-PERMISSIONS"/> provide fine-grained externalized authorization-
        policy evaluation.  Google Cloud IAM <xref target="GOOGLE-IAM-DENY"/> supports centrally
        managed deny policy controls.  NVIDIA attestation <xref target="NVIDIA-ATTEST"/> and Arm
        CCA <xref target="ARM-CCA"/> provide complementary protected-compute and attestation
        mechanisms that can supply trust inputs or host protected state.
      </t>
      <t>
        These examples are cited because they demonstrate practical industry interest in dynamic
        authorization, policy change, continuous evaluation, and protected trust.  This document
        does not assert that any named product is insecure, incomplete, vulnerable, non-conforming,
        or required to implement this architecture.  A named platform can already satisfy some or
        all of the described properties in a particular deployment.
      </t>
      <t>
        The proposed contribution is a vendor-neutral question and invariant that can be tested
        across systems: once a revocation is authoritative, can any still-pending protected act
        become externally effective solely on the strength of the older authorization?
      </t>
    </section>

    <section anchor="deployment-patterns">
      <name>Deployment Patterns</name>
      <section anchor="resource-server"><name>Resource Server as Finality Sink</name><t>Where the Resource Server directly controls the protected effect and cannot be bypassed, it can perform the final revocation check itself.</t></section>
      <section anchor="gateway"><name>Gateway or Service-Mesh Enforcement</name><t>A gateway, proxy, or service-mesh component can host finality enforcement when all protected effectuation paths pass through it and it sees sufficient act context.</t></section>
      <section anchor="dpu"><name>DPU, SmartNIC, or Protected I/O Boundary</name><t>Higher-assurance infrastructure can mirror revocation generations into a DPU, SmartNIC, or other protected I/O boundary when the threat model does not trust the general-purpose host.</t></section>
      <section anchor="device"><name>Device or Operating-System Boundary</name><t>An operating system, secure service, or device-side mediator can enforce revocation immediately before a protected device action, disclosure, or external communication.</t></section>
      <section anchor="queue"><name>Asynchronous Queue and Worker</name><t>For queued work, revocation MUST be re-evaluated at dequeue/final commit if the queue delay can outlive the revocation assumptions made at enqueue time.</t></section>
    </section>

    <section anchor="performance">
      <name>Performance and Availability</name>
      <t>
        A design that performs a remote authorization-server round trip before every low-latency
        effect can be impractical.  The architecture therefore separates the invariant from a
        particular implementation.  Protected local generations, authenticated status roots,
        event streams with gap detection, short-lived cached state, and hardware-local comparisons
        can move most work off the hot path.
      </t>
      <t>
        Implementations SHOULD publish the effective revocation-latency bound relevant to the
        protected operation, including event propagation, cache lifetime, replication lag,
        protected-state update, and finality-check latency.  A benchmark that reports only local
        cryptographic verification without propagation delay does not characterize end-to-end
        revocation responsiveness.
      </t>
    </section>

    <section anchor="test-vectors">
      <name>Required Classes of Test Vectors</name>
      <t>A concrete profile or implementation SHOULD test at least the following cases:</t>
      <ul spacing="normal">
        <li>authorization and effect under the same revocation generation: succeed;</li>
        <li>principal revoked before finalization: reject;</li>
        <li>grant narrowed so the exact act is no longer permitted: reject;</li>
        <li>unrelated revocation that does not apply to the act: succeed if policy says so;</li>
        <li>stale but correctly signed permit after revocation: reject;</li>
        <li>replayed old revocation state: reject;</li>
        <li>lost or reordered revocation event: fail according to the defined continuity rule;</li>
        <li>revocation and effect racing concurrently: produce the defined serialized result;</li>
        <li>crash after status check but before effect: recover without reviving stale authority;</li>
        <li>alternate effectuation path: demonstrate equivalent enforcement or identify the gap.</li>
      </ul>
    </section>

    <section anchor="questions-community">
      <name>Questions to the IETF Community</name>
      <t>
        Criticism, corrections, counterexamples, operational experience, prior-art pointers, and
        evidence that an existing IETF mechanism already provides an equivalent invariant are
        explicitly invited.  Negative answers and recommendations to narrow the work are useful
        outcomes.
      </t>
      <ol spacing="normal">
        <li>Do existing OAuth revocation, introspection, transaction-token, or continuous-access patterns already guarantee that a revocation committed before a protected effect prevents that effect, including asynchronous or multi-hop cases?</li>
        <li>When a Resource Server accepts a request and hands work to a queue, database, payment rail, device API, or downstream workload, where should revocation stop being relevant and where should it remain load-bearing?</li>
        <li>Is a protected monotonic revocation generation useful as a common abstraction across token, workload, attestation, and application-policy systems, or is that abstraction too broad?</li>
        <li>Should revocation state be carried in the authorization object, re-established at the sink, or support both models?</li>
        <li>What ordering primitive is appropriate for the race between revocation and effectuation without requiring a globally synchronized clock?</li>
        <li>How should bounded staleness be represented so that deployments can distinguish an intentional availability tradeoff from a high-assurance current-state guarantee?</li>
        <li>In WIMSE-style multi-service chains, what minimum derivation information is needed so an upstream grant revocation can invalidate a downstream pending act without creating excessive coupling?</li>
        <li>For RATS-based systems, are existing endorsement/reference-value freshness and appraisal mechanisms sufficient to express trust-state revocation through the final consequential action?</li>
        <li>Which alternate effectuation paths are most likely to defeat revocation in real systems even when token-level revocation itself works correctly?</li>
        <li>Does this architecture duplicate an existing industrial or standards mechanism in full?  If so, reviewers are specifically invited to identify the mechanism and the exact boundary at which it provides the same invariant.</li>
        <li>Should this work remain Informational, become a BCP/problem statement, define an interoperable status/generation profile, or be folded into existing OAuth/WIMSE/RATS work?</li>
        <li>Which current IETF venue is the best place for further discussion: OAuth, WIMSE, RATS, DISPATCH, SAAG, or another group?</li>
      </ol>
    </section>

    <section anchor="ietf-venues">
      <name>Potential IETF Discussion Venues and Scope Boundaries</name>
      <section anchor="venue-oauth">
        <name>OAuth</name>
        <t>
          OAuth is a particularly relevant technical venue because its active charter covers
          delegation, token revocation, token introspection, and increasingly complex authorization
          for automated agents.  The present document does not presume that OAuth should adopt the
          work; review is sought on whether the finality question is already solved by an OAuth
          pattern, should be expressed as OAuth guidance, or lies beyond the Resource Server model.
        </t>
      </section>
      <section anchor="venue-wimse"><name>WIMSE</name><t>WIMSE is relevant where revocation must remain meaningful across workload-to-workload credentials, delegated identity, and multi-service chains.  The work should not duplicate WIMSE credential or identity formats.</t></section>
      <section anchor="venue-rats"><name>RATS</name><t>RATS is relevant where revocation concerns attestation trust, endorsement/reference-value state, verifier results, or the relation between appraisal and later consequence.  The document does not propose to replace RATS appraisal architecture.</t></section>
      <section anchor="venue-dispatch"><name>DISPATCH</name><t>DISPATCH is an active standing venue for feedback and routing of proposed new work spanning ART, SEC, and non-transport WIT topics.  Because the finality invariant cuts across authorization, workload identity, and security architecture, DISPATCH may be useful if no single existing WG owns the problem.</t></section>
      <section anchor="venue-saag"><name>SAAG</name><t>SAAG is an active Security Area open forum suitable for broad architectural criticism and security discussion.  SAAG is not a Working Group and does not adopt or publish documents.</t></section>
      <section anchor="venue-note"><name>No Presumed Home</name><t>The document does not claim that any named group should adopt this work.  The preferred sequence is technical criticism, overlap analysis, discussion in the most relevant specialist groups, and dispatch/routing if a separate interoperable work item remains justified.</t></section>
    </section>

    <section anchor="related-drafts">
      <name>Relationship to Other Execution-Finality Internet-Drafts</name>
      <t>
        This document is a focused member of a broader execution-finality discussion.  The general
        architecture is described in <xref target="DAS-CORE-EF"/>.  Hardware-rooted deployment is
        discussed in <xref target="DAS-HW-EF"/>.  Agentic tool dispatch is discussed in
        <xref target="DAS-AGENT-EF"/>.  Attestation-bound finality is discussed in
        <xref target="DAS-RATS-EF"/>.  Purpose-bound release is discussed in
        <xref target="DAS-PURPOSE-EF"/>.  Device/AI interoperability is discussed in
        <xref target="DAS-INTEROP-EF"/>.  State and policy continuity is discussed in the
        companion <xref target="DAS-STATE-CONTINUITY"/> document.
      </t>
      <t>
        The present draft intentionally isolates revocation rather than repeating all of those
        domains.  Its contribution is the ordering and enforcement rule for authority that changes
        after issuance but before protected effectuation.
      </t>
    </section>

    <section anchor="github-material">
      <name>Public Implementations and Companion Engineering Material</name>
      <t>
        Public repositories associated with the execution-finality work provide runnable or
        explanatory material for exact-act binding, single-use finality, agent interoperability,
        purpose-finality validation, and protected infrastructure deployment.  Relevant resources
        include <xref target="GITHUB-CORE-EF"/>, <xref target="GITHUB-GPU-EF"/>,
        <xref target="GITHUB-HARDENED-INTEROP"/>, <xref target="GITHUB-PURPOSE-EF"/>, and
        <xref target="GITHUB-INTEROP-EF"/>.
      </t>
      <t>
        These repositories are companion engineering material.  Their inclusion does not assert
        that every repository already implements every revocation-finality requirement in this
        document.  A dedicated conformance harness for the present profile would need to test the
        race, propagation, rollback, and multi-hop cases listed above.
      </t>
    </section>

    <section anchor="security">
      <name>Security Considerations</name>
      <t>
        The security of revocation finality depends on both current-state integrity and
        consequence-path completeness.  A perfect revocation service is ineffective if the
        protected action can bypass the sink; a perfect sink is ineffective if an attacker can
        reset the revocation generation it relies on.
      </t>
      <section anchor="compromised-requester"><name>Compromised Requester</name><t>The requester is not trusted to report its own current revocation status.  The sink MUST obtain load-bearing revocation state from a protected or authoritative source appropriate to the threat model.</t></section>
      <section anchor="compromised-revocation-authority"><name>Compromised Revocation Authority</name><t>An attacker controlling the ultimate revocation authority can lie about current status.  Higher-assurance deployments MAY use multiple authorities, threshold control, transparency, independent policy appraisal, or separation of duties.  The base architecture does not claim to survive compromise of every root of authority.</t></section>
      <section anchor="revocation-rollback"><name>Rollback Protection</name><t>Revocation generations and authenticated status roots SHOULD resist snapshot restoration, wraparound, reset, downgrade, and cross-domain reuse.  Authentic old state MUST NOT automatically become current after rollback.</t></section>
      <section anchor="atomicity"><name>Atomicity</name><t>Where revocation can change concurrently, the last revocation check and protected commit require atomicity, generation locking, compare-and-swap, transaction serialization, or an equivalent invariant.  A check followed by an unprotected delay reintroduces TOCTOU.</t></section>
      <section anchor="status-source-auth"><name>Status-Source Authentication</name><t>Revocation events, introspection results, generations, and status roots MUST be authenticated according to the deployment.  A network attacker MUST NOT be able to synthesize either false revocation or false non-revocation.</t></section>
      <section anchor="scope-confusion"><name>Scope Confusion</name><t>Revocation identifiers and generations MUST be scoped to the authority, tenant, resource domain, or trust domain to which they apply.  A generation value from one domain MUST NOT be accepted as current state for another merely because the numeric value matches.</t></section>
      <section anchor="partition"><name>Partitions and Split-Brain</name><t>Network partitions can create multiple apparently current revocation views.  Deployments MUST define whether protected effects fail closed, use quorum/consensus, accept bounded staleness, or follow another explicit rule.  An attacker MUST NOT be allowed to choose whichever stale partition yields authorization unless that is intentionally permitted.</t></section>
      <section anchor="non-bypassability"><name>Non-Bypassability</name><t>Every technical path capable of producing the protected consequence MUST preserve the revocation-finality invariant.  Debug paths, recovery APIs, direct storage or device access, privileged host interfaces, and asynchronous workers require explicit review.</t></section>
      <section anchor="privacy-status"><name>Revocation-Status Privacy</name><t>Revocation queries can reveal identity, employment status, account risk, service relationships, device trust, or operational timing.  Implementations SHOULD minimize disclosure and SHOULD prefer scoped status answers, keyed commitments, privacy-preserving status structures, or local protected state where appropriate.</t></section>
      <section anchor="dos-security"><name>Revocation as a Denial-of-Service Surface</name><t>An attacker can attempt to forge, flood, or withhold revocation signals.  Authentication and authorization of revocation events are required, and deployments SHOULD distinguish an authenticated revocation from simple status unavailability.  Fail-closed semantics protect authorization but can reduce availability.</t></section>
      <section anchor="stale-introspection"><name>Stale Introspection and Authorization Caches</name><t>A cached active result, policy allow decision, or status response can outlive the revocation event that invalidates it.  Implementations MUST define the maximum accepted staleness for each protected operation class.  A cache entry whose freshness or generation cannot be established MUST NOT be treated as equivalent to authoritative current state in a profile that claims prevention.</t></section>
      <section anchor="event-loss-reordering"><name>Revocation Event Loss and Reordering</name><t>Push-based systems MUST account for lost, duplicated, delayed, and reordered revocation events.  Sequence numbers, generations, authenticated checkpoints, gap detection, replay-safe subscriptions, or equivalent mechanisms SHOULD be used so that missing an event cannot silently make an older state appear current.</t></section>
      <section anchor="derived-act-orphaning"><name>Derived-Act Orphaning</name><t>Revoking an upstream credential does not necessarily revoke a transaction, queue entry, delegated capability, or device command that was already derived from it.  Where such derived acts remain revocable, the derivation MUST preserve enough relationship to current authority for the Finality Sink to determine whether the pending act survives the revocation.</t></section>
      <section anchor="replay-after-revocation"><name>Replay After Revocation</name><t>A previously valid handle, introspection response, status proof, or survival statement MUST NOT be reusable after an applicable revocation generation has advanced unless the deployment explicitly proves that it remains applicable.  Consume-once state and generation binding SHOULD be protected against rollback together.</t></section>
      <section anchor="audit-not-prevention"><name>Audit Evidence Is Not Prevention</name><t>Logging that a revoked act executed can support detection, forensics, or accountability but does not provide the prevention property defined by this document.  A deployment claiming prevention MUST make revocation load-bearing before or atomically with protected commit rather than relying only on post-effect audit.</t></section>
    </section>

    <section anchor="privacy">
      <name>Privacy Considerations</name>
      <t>
        Revocation state can expose sensitive relationships and operational facts.  A global
        revocation identifier can become a correlator across services.  Implementations SHOULD
        minimize persistent identifiers, avoid exposing raw policy context when a scoped status
        assertion is enough, and separate operational telemetry from authorization state where
        feasible.
      </t>
      <t>
        Push-based revocation systems can also reveal user or workload activity to subscribers.
        Subscription scope, event minimization, retention, and authorization should therefore be
        treated as privacy-sensitive design choices.
      </t>
    </section>

    <section anchor="review-request">
      <name>Criticism, Corrections, and Review Invited</name>
      <t>
        This document is intentionally presented for adversarial technical review.  Reviewers are
        invited to identify incorrect assumptions, existing mechanisms that already provide the
        same property, deployment cases where the proposed boundary is unnecessary, unmodeled
        bypass paths, interoperability problems, privacy costs, latency costs, or terminology that
        conflicts with established IETF usage.
      </t>
      <t>
        In particular, the author welcomes concrete counterexamples showing that a revocation
        committed before effectuation can already be guaranteed to stop the exact pending effect
        using an existing standard without additional state binding.  Such evidence would help
        narrow, merge, or correct the proposal.
      </t>
    </section>

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

    <section anchor="conclusion">
      <name>Conclusion</name>
      <t>
        Revocation should not be viewed only as invalidation of a token stored somewhere upstream.
        For a consequence-bearing operation, the stronger question is whether a revocation that
        becomes authoritative before protected commit is guaranteed to control the actual effect.
      </t>
      <artwork type="ascii-art">
        VALID AT ISSUANCE
               !=
        AUTHORIZED AT EFFECTUATION

        Revocation committed before protected effect
               =&gt;
        exact pending act must re-establish authority or remain non-effective.
      </artwork>
      <t>
        The model is deliberately complementary to OAuth revocation and introspection, continuous
        access evaluation, workload identity, attestation, policy engines, and confidential
        computing.  Its purpose is to make the final revocation-to-effect relationship explicit,
        testable, and suitable for protocol review.
      </t>
    </section>
  </middle>

  <back>
    <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 year="1997" month="March"/></front>
        <seriesInfo name="RFC" value="2119"/><seriesInfo name="BCP" value="14"/>
      </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 year="2017" month="May"/></front>
        <seriesInfo name="RFC" value="8174"/><seriesInfo name="BCP" value="14"/>
      </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 year="2013" month="August"/></front><seriesInfo name="RFC" value="7009"/>
      </reference>
      <reference anchor="RFC7662" target="https://www.rfc-editor.org/info/rfc7662">
        <front><title>OAuth 2.0 Token Introspection</title><author initials="J." surname="Richer"/><date year="2015" month="October"/></front><seriesInfo name="RFC" value="7662"/>
      </reference>
      <reference anchor="RFC8705" target="https://www.rfc-editor.org/info/rfc8705">
        <front><title>OAuth 2.0 Mutual-TLS Client Authentication and Certificate-Bound Access Tokens</title><author initials="B." surname="Campbell"/><author initials="J." surname="Bradley"/><author initials="N." surname="Sakimura"/><author initials="T." surname="Lodderstedt"/><date year="2020" month="February"/></front><seriesInfo name="RFC" value="8705"/>
      </reference>
      <reference anchor="RFC9449" target="https://www.rfc-editor.org/info/rfc9449">
        <front><title>OAuth 2.0 Demonstrating Proof of Possession (DPoP)</title><author initials="D." surname="Fett"/><author initials="B." surname="Campbell"/><author initials="J." surname="Bradley"/><author initials="T." surname="Lodderstedt"/><author initials="M." surname="Jones"/><author initials="D." surname="Waite"/><date year="2023" month="September"/></front><seriesInfo name="RFC" value="9449"/>
      </reference>
      <reference anchor="RFC9334" target="https://www.rfc-editor.org/info/rfc9334">
        <front><title>Remote ATtestation procedureS (RATS) Architecture</title><author initials="H." surname="Birkholz"/><author initials="D." surname="Thaler"/><author initials="M." surname="Richardson"/><author initials="N." surname="Smith"/><author initials="W." surname="Pan"/><date year="2023" month="January"/></front><seriesInfo name="RFC" value="9334"/>
      </reference>
      <reference anchor="RFC9711" target="https://www.rfc-editor.org/info/rfc9711">
        <front><title>The Entity Attestation Token (EAT)</title><author initials="L." surname="Lundblade"/><author initials="G." surname="Manders"/><author initials="D." surname="Brown"/><date year="2025" month="April"/></front><seriesInfo name="RFC" value="9711"/>
      </reference>
      <reference anchor="RFC9124" target="https://www.rfc-editor.org/info/rfc9124">
        <front><title>A Manifest Information Model for Firmware Updates in Internet of Things (IoT) Devices</title><author initials="B." surname="Moran"/><author initials="H." surname="Tschofenig"/><author initials="D." surname="Brown"/><author initials="M." surname="Meriac"/><date year="2022" month="January"/></front><seriesInfo name="RFC" value="9124"/>
      </reference>

      <reference anchor="MS-CAE" target="https://learn.microsoft.com/en-us/entra/architecture/resilience-with-continuous-access-evaluation">
        <front><title>Build resilience by using Continuous Access Evaluation in Microsoft Entra ID</title><author><organization>Microsoft</organization></author><date year="2026"/></front><seriesInfo name="Web" value="Microsoft Learn"/>
      </reference>
      <reference anchor="GOOGLE-IAM-DENY" target="https://cloud.google.com/iam/docs/deny-access">
        <front><title>Deny access to resources with IAM deny policies</title><author><organization>Google Cloud</organization></author><date year="2026"/></front><seriesInfo name="Web" value="Google Cloud Documentation"/>
      </reference>
      <reference anchor="AWS-VERIFIED-PERMISSIONS" target="https://docs.aws.amazon.com/verifiedpermissions/latest/userguide/what-is-avp.html">
        <front><title>What is Amazon Verified Permissions?</title><author><organization>Amazon Web Services</organization></author><date year="2026"/></front><seriesInfo name="Web" value="AWS Documentation"/>
      </reference>
      <reference anchor="NVIDIA-ATTEST" target="https://docs.nvidia.com/attestation/attestation-client-tools-sdk/latest/gpu_and_switch_attestation.html">
        <front><title>NVIDIA GPU and Switch Attestation</title><author><organization>NVIDIA</organization></author><date year="2026"/></front><seriesInfo name="Web" value="NVIDIA Documentation"/>
      </reference>
      <reference anchor="ARM-CCA" target="https://www.arm.com/architecture/security-features/arm-confidential-compute-architecture">
        <front><title>Arm Confidential Compute Architecture</title><author><organization>Arm</organization></author><date year="2026"/></front><seriesInfo name="Web" value="Arm Architecture"/>
      </reference>

      <reference anchor="IETF-OAUTH" target="https://datatracker.ietf.org/group/oauth/about/">
        <front><title>Web Authorization Protocol (OAuth) Working Group</title><author><organization>IETF</organization></author><date year="2026"/></front><seriesInfo name="IETF Working Group" value="oauth"/>
      </reference>
      <reference anchor="IETF-WIMSE" target="https://datatracker.ietf.org/group/wimse/about/">
        <front><title>Workload Identity in Multi System Environments (WIMSE) Working Group</title><author><organization>IETF</organization></author><date year="2026"/></front><seriesInfo name="IETF Working Group" value="wimse"/>
      </reference>
      <reference anchor="IETF-RATS" target="https://datatracker.ietf.org/group/rats/about/">
        <front><title>Remote ATtestation procedureS (RATS) Working Group</title><author><organization>IETF</organization></author><date year="2026"/></front><seriesInfo name="IETF Working Group" value="rats"/>
      </reference>
      <reference anchor="IETF-DISPATCH" target="https://datatracker.ietf.org/group/dispatch/about/">
        <front><title>DISPATCH Working Group</title><author><organization>IETF</organization></author><date year="2026"/></front><seriesInfo name="IETF Working Group" value="dispatch"/>
      </reference>
      <reference anchor="IETF-SAAG" target="https://datatracker.ietf.org/group/saag/about/">
        <front><title>Security Area Open Meeting (SAAG)</title><author><organization>IETF</organization></author><date year="2026"/></front><seriesInfo name="IETF Area Group" value="saag"/>
      </reference>

      <reference anchor="DAS-CORE-EF" target="https://datatracker.ietf.org/doc/draft-das-execution-finality-protocol-layer/">
        <front><title>The Missing Execution-Finality Protocol Layer of the Internet</title><author fullname="Sangam Das" initials="S." surname="Das"/><date year="2026" month="August"/></front><seriesInfo name="Internet-Draft" value="draft-das-execution-finality-protocol-layer-00"/>
      </reference>
      <reference anchor="DAS-HW-EF" target="https://datatracker.ietf.org/doc/draft-das-hardware-enforced-execution-finality/">
        <front><title>Hardware-Rooted National Control to Prevent Covert Intelligence Data Export and Unauthorized Frontier and Neural AI/Autonomous Acts in Critical Infrastructure</title><author fullname="Sangam Das" initials="S." surname="Das"/><date year="2026" month="August"/></front><seriesInfo name="Internet-Draft" value="draft-das-hardware-enforced-execution-finality-00"/>
      </reference>
      <reference anchor="DAS-AGENT-EF" target="https://datatracker.ietf.org/doc/draft-das-agentic-execution-finality/">
        <front><title>Execution-Finality for Agentic AI Tool Dispatch</title><author fullname="Sangam Das" initials="S." surname="Das"/><date year="2026" month="August"/></front><seriesInfo name="Internet-Draft" value="draft-das-agentic-execution-finality-00"/>
      </reference>
      <reference anchor="DAS-RATS-EF" target="https://datatracker.ietf.org/doc/draft-das-rats-attestation-bnd-execution-finality/">
        <front><title>Attestation-Bound Execution Finality for GPU, AI Accelerator, DPU, SmartNIC, and Confidential-Computing Infrastructure</title><author fullname="Sangam Das" initials="S." surname="Das"/><date year="2026" month="September"/></front><seriesInfo name="Internet-Draft" value="draft-das-rats-attestation-bnd-execution-finality-04"/>
      </reference>
      <reference anchor="DAS-PURPOSE-EF" 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-03"/>
      </reference>
      <reference anchor="DAS-INTEROP-EF" target="https://datatracker.ietf.org/doc/draft-das-execution-finality-ai-interoperability/">
        <front><title>Secure and Privacy-Preserving AI Interoperability under Article 6(7) of the European Digital Markets Act: An Execution-Finality Architecture</title><author fullname="Sangam Das" initials="S." surname="Das"/><date year="2026" month="September"/></front><seriesInfo name="Internet-Draft" value="draft-das-execution-finality-ai-interoperability-04"/>
      </reference>
      <reference anchor="DAS-STATE-CONTINUITY">
        <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="GITHUB-CORE-EF" target="https://github.com/sangmdas/Execution-Finality-Architechture-for-AI-Machines-">
        <front><title>Execution-Finality Architecture for Machine-Generated Acts</title><author fullname="Sangam Das" initials="S." surname="Das"/><date year="2026"/></front><seriesInfo name="GitHub Repository" value="Execution-Finality-Architechture-for-AI-Machines-"/>
      </reference>
      <reference anchor="GITHUB-GPU-EF" target="https://github.com/sangmdas/Execution-Finality-for-GPU-AI-Accelerators-and-Confidential-Workloads">
        <front><title>Execution Finality for GPUs, AI Accelerators, and Confidential Workloads</title><author fullname="Sangam Das" initials="S." surname="Das"/><date year="2026"/></front><seriesInfo name="GitHub Repository" value="Execution-Finality-for-GPU-AI-Accelerators-and-Confidential-Workloads"/>
      </reference>
      <reference anchor="GITHUB-HARDENED-INTEROP" target="https://github.com/sangmdas/Hardened-Challenge-Bound-Execution-Finality-for-AI-Interoperability">
        <front><title>Hardened Challenge-Bound Execution Finality for AI Interoperability</title><author fullname="Sangam Das" initials="S." surname="Das"/><date year="2026"/></front><seriesInfo name="GitHub Repository" value="Hardened-Challenge-Bound-Execution-Finality-for-AI-Interoperability"/>
      </reference>
      <reference anchor="GITHUB-PURPOSE-EF" target="https://github.com/sangmdas/Purpose-Execution-Finality-Validator-to-Prevent-Data-Purpose-Laundering-in-AI-Systems">
        <front><title>Purpose Execution Finality Validator to Prevent Data-Purpose Laundering in AI Systems</title><author fullname="Sangam Das" initials="S." surname="Das"/><date year="2026"/></front><seriesInfo name="GitHub Repository" value="Purpose-Execution-Finality-Validator-to-Prevent-Data-Purpose-Laundering-in-AI-Systems"/>
      </reference>
      <reference anchor="GITHUB-INTEROP-EF" target="https://github.com/sangmdas/Secure-and-Privacy-Preserving-AI-Interoperability-for-Third-Party-Tools">
        <front><title>Secure and Privacy-Preserving AI Interoperability for Third-Party Tools</title><author fullname="Sangam Das" initials="S." surname="Das"/><date year="2026"/></front><seriesInfo name="GitHub Repository" value="Secure-and-Privacy-Preserving-AI-Interoperability-for-Third-Party-Tools"/>
      </reference>
    </references>
  </back>
</rfc>
