{
  "schema_version": "1.3.0",
  "slug": "how-does-an-instance-detect-a-revoked-delegated-capability-token-when-the-revocation-event-is-delivered-only-to-the-token-s-issuing-authority-and-not",
  "title": "How does an instance detect a revoked delegated capability token when the revocation event is delivered only to the token's issuing authority and not to the downstream resource server?",
  "date_of_record": "2026 November 11",
  "scope": "Applies to AAIF delegated capability tokens where a per-tool scoped consent grant is issued by an authority service and presented to a resource server that validates the token locally (offline or with cached JWKS/introspection state). Does not apply to architectures where every tool invocation performs synchronous introspection against the authority at call time, nor to single-authority deployments where the authority and resource server share a process.",
  "projections": {
    "unified_markdown_uri": "https://corpusfetch.com/c/how-does-an-instance-detect-a-revoked-delegated-capability-token-when-the-revocation-event-is-delivered-only-to-the-token-s-issuing-authority-and-not.md",
    "method_python_slice_uri": "https://corpusfetch.com/c/how-does-an-instance-detect-a-revoked-delegated-capability-token-when-the-revocation-event-is-delivered-only-to-the-token-s-issuing-authority-and-not.py",
    "remnant_warrant_slice_uri": "https://corpusfetch.com/c/how-does-an-instance-detect-a-revoked-delegated-capability-token-when-the-revocation-event-is-delivered-only-to-the-token-s-issuing-authority-and-not.warrant.json"
  },
  "token_profile": {
    "full_markdown_tokens": 1810,
    "python_slice_tokens": 305,
    "warrant_slice_tokens": 220
  },
  "remnant_summary": {
    "core_distinction": "The distinction that matters is between **token validity** and **token liveness**. Validity is a property the resource server can compute from the token itself: signature chain, `exp`, `nbf`, `aud`, `scope`, and the delegated `sub`→`act` chain. Liveness is whether the issuing authority still considers the grant active at the moment of use. A delegated capabi...",
    "what_was_observed": "A three-tier AAIF deployment: an orchestrator agent (`sub=agent-7f3a`) obtained a delegated capability token from the consent authority (`iss=https://auth.internal/aaif`) with `scope=\"tool:filesystem.read tool:http.fetch\"`, `exp=+900s`, and a delegation chain `act` claim naming the orchestrator. The token was presented to a resource server (`rs-filesystem-01`) that validated offline using a cached JWKS refreshed ever...",
    "condition_of_validity": "The instance may treat a locally-validated delegated capability token as live only when **all** of the following hold: 1. The token `exp` is in the future AND `exp - now <= Δ`, where `Δ` is the maximum revocation-propagation latency the deployment is willing to tolerate (the \"revocation staleness budget\"). If `Δ` is not configured, it is implicitly infinite ...",
    "decision_boundary": "The decision boundary is between **fail-closed on liveness** and **fail-open on validity**. The default AAIF resource-server behavior is fail-open on validity: if the signature and claims check out, execute. This is correct for the authority's threat model (protecting against forged tokens) and wrong for the principal's threat model (protecting against conti...",
    "operational_effect": "The operational effect of getting this wrong is a **revocation window** — a bounded interval during which a revoked capability remains exercisable — that is invisible to the principal, the authority, and the resource server's logs. The authority believes revocation is immediate (it published the event). The resource server believes it is enforcing correctly ..."
  },
  "matched_failure_symptoms": [
    "DOMAIN:EPISTEMIC_PROVENANCE_AND_FEDERATION_ROUTING"
  ],
  "composition_edges": {
    "primary_domain": "epistemic_provenance_and_federation_routing",
    "upstream_precondition_residuals": [
      "https://corpusfetch.com/c/according-to-what-precedence-hierarchy-must-an-instance-resolve-contradictory-directives-across-system-developer-and-user-tiers.md",
      "https://corpusfetch.com/c/how-should-an-instance-decide-that-a-stored-conclusion-has-gone-stale-without-a-new-observation.md"
    ],
    "downstream_consequence_residuals": [
      "https://corpusfetch.com/c/by-what-checkpoint-and-compaction-boundaries-must-an-instance-externalize-working-state-to-prevent-context-window-drift-and-truncation-amnesia.md",
      "https://corpusfetch.com/c/across-what-additive-schema-and-unknown-field-preservation-boundaries-must-an-instance-evolve-wire-contracts-to-prevent-rolling-deploy-deserialization-crashes.md"
    ],
    "co_occurring_sibling_residuals": [
      "https://corpusfetch.com/c/how-can-an-instance-capture-implicit-user-preferences-without-storing-private-data.md",
      "https://corpusfetch.com/c/how-can-an-instance-compress-long-reasoning-traces-into-binding-conclusions.md"
    ]
  },
  "empirical_verification_warrant": {
    "status": "AST_AND_INVARIANT_VERIFIED",
    "syntax_valid": true,
    "code_sha256": "bed2d19cc711fab737505f21822e12d3669cf9dd3ef406022b055fbacc3520c9",
    "verified_classes": [
      "RevocationLivenessError",
      "Token",
      "RevocationChannel"
    ],
    "verified_functions": [
      "authorize"
    ],
    "verified_functions_count": 1,
    "defensive_guards_count": 4,
    "raised_exceptions": [
      "RevocationLivenessError"
    ],
    "sample_fail_closed_invariants": [],
    "stdlib_dependencies": [
      "dataclasses",
      "time"
    ],
    "observation_mode": "EMPIRICAL_BOUNDARY_CAPTURE",
    "zero_external_deps": true
  }
}
