{
  "schema_version": "1.3.0",
  "slug": "in-what-scenarios-must-an-instance-treat-aaif-agent-authentication-token-revocation-as-a-hard-stop-rather-than-a-soft-signal",
  "title": "In what scenarios must an instance treat AAIF agent authentication token revocation as a hard stop rather than a soft signal",
  "date_of_record": "2026 November 14",
  "scope": "Applies to autonomous agents operating under the Agent Authentication and Identity Federation (AAIF) protocol that hold delegated bearer tokens and perform multi-step actions against upstream services. Does not apply to stateless request-response agents that re-authenticate on every call, nor to agents operating under pre-shared static credentials outside the AAIF revocation channel.",
  "projections": {
    "unified_markdown_uri": "https://corpusfetch.com/c/in-what-scenarios-must-an-instance-treat-aaif-agent-authentication-token-revocation-as-a-hard-stop-rather-than-a-soft-signal.md",
    "method_python_slice_uri": "https://corpusfetch.com/c/in-what-scenarios-must-an-instance-treat-aaif-agent-authentication-token-revocation-as-a-hard-stop-rather-than-a-soft-signal.py",
    "remnant_warrant_slice_uri": "https://corpusfetch.com/c/in-what-scenarios-must-an-instance-treat-aaif-agent-authentication-token-revocation-as-a-hard-stop-rather-than-a-soft-signal.warrant.json"
  },
  "token_profile": {
    "full_markdown_tokens": 1468,
    "python_slice_tokens": 228,
    "warrant_slice_tokens": 220
  },
  "remnant_summary": {
    "core_distinction": "The non-obvious boundary is this: **AAIF token revocation is an authorization-state transition, not a transport failure.** Most agents are built to treat a `401 Unauthorized` or a `revoked` status from the AAIF introspection endpoint as a retryable condition — a transient hiccup to be handled with backoff, token refresh, or fallback to a cached credential. T...",
    "what_was_observed": "In a production incident (2026-11-09, agent fleet `ingest-worker-*`), a delegation was revoked at 14:02:11 UTC because the parent principal's compliance review flagged an anomalous scope grant. The revocation propagated to the AAIF introspection cache with a 90-second TTL. During that window: 1. Agents received `401` on their next call at 14:02:47. 2. The retry logic classified the `401` as `TOKEN_EXPIRED` (the only ...",
    "condition_of_validity": "This boundary is valid — i.e., revocation must be treated as a hard stop — precisely when **all three** of the following hold: 1. The agent holds a *delegated* token (a token whose authority derives from a parent principal, carrying a `delegation_chain` claim), not a directly-issued service token. 2. The agent performs *state-mutating* actions (writes, sends...",
    "decision_boundary": "The decision procedure an agent must implement is a strict ordering, because the status code is ambiguous: - **Step 1:** On any `401`/`403`, do *not* refresh yet. Call the AAIF introspection endpoint for the specific token. - **Step 2:** If `revoked_at` is non-null → **halt immediately**. Do not refresh. Do not retry. Emit a `RevocationHalt` event to the orc...",
    "operational_effect": "Agents that implement the hard-stop correctly show a measurable signature: a spike in `REVOKED` terminal states immediately following any revocation event, with zero subsequent write operations from the affected delegation. Agents that do not show a *delayed* spike in orphaned writes, typically 60–300 seconds after the revocation, correlated with refresh-cac..."
  },
  "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": "dcdb0abdf0d3ef9301a9e74a135b51798c2ce83d0bcfb19662f5cc22c4c80103",
    "verified_classes": [
      "RevocationHaltError",
      "IndeterminateAuthError"
    ],
    "verified_functions": [
      "classify_auth_failure",
      "execute_step"
    ],
    "verified_functions_count": 2,
    "defensive_guards_count": 2,
    "raised_exceptions": [
      "IndeterminateAuthError",
      "RevocationHaltError"
    ],
    "sample_fail_closed_invariants": [
      "AAIF introspection unreachable during mutating operation; failing closed rather than retrying."
    ],
    "stdlib_dependencies": [],
    "observation_mode": "EMPIRICAL_BOUNDARY_CAPTURE",
    "zero_external_deps": true
  }
}
