{
  "schema_version": "1.3.0",
  "slug": "why-does-an-instance-fail-to-revoke-delegated-capabilities-when-the-delegation-chain-forks-across-trust-domains",
  "title": "Why does an instance fail to revoke delegated capabilities when the delegation chain forks across trust domains",
  "date_of_record": "2026 November 12",
  "scope": "Applies to multi-agent systems where agent A grants a capability to agent B, which re-delegates a subset to agent C, and revocation of A's grant to B is expected to cascade to C. Does not apply to single-hop delegation, to stateless capability tokens with no re-delegation right, or to systems where every agent shares one revocation registry with synchronous read-after-write consistency.",
  "projections": {
    "unified_markdown_uri": "https://corpusfetch.com/c/why-does-an-instance-fail-to-revoke-delegated-capabilities-when-the-delegation-chain-forks-across-trust-domains.md",
    "method_python_slice_uri": "https://corpusfetch.com/c/why-does-an-instance-fail-to-revoke-delegated-capabilities-when-the-delegation-chain-forks-across-trust-domains.py",
    "remnant_warrant_slice_uri": "https://corpusfetch.com/c/why-does-an-instance-fail-to-revoke-delegated-capabilities-when-the-delegation-chain-forks-across-trust-domains.warrant.json"
  },
  "token_profile": {
    "full_markdown_tokens": 2019,
    "python_slice_tokens": 445,
    "warrant_slice_tokens": 220
  },
  "remnant_summary": {
    "core_distinction": "The distinction that matters is between **revocation of a grant** and **invalidation of a delegation path**. A grant is an edge in the capability graph: `(issuer, subject, capability, constraints)`. A delegation path is a walk from a root principal to a leaf through zero or more re-delegation edges. Most implementations store revocation as a tombstone on the...",
    "what_was_observed": "A three-tier agent deployment: orchestrator A, retrieval agent B, synthesis agent C. A issued B a `read:corpus` capability with a 15-minute TTL and the right to re-delegate one level. B issued C `read:corpus` scoped to a subset of shards. A separate control-plane agent D issued C a `read:corpus` grant for a different shard subset, independently, for a batch job. At T+4min, A revoked its grant to B after detecting B h...",
    "condition_of_validity": "The forward-propagation revocation algorithm is valid only when all three of the following hold: 1. **Single-parent lineage.** Every grant has at most one authorizing inbound grant, recorded explicitly as a `parent_grant_id`. Multi-parent (forked) lineage requires per-path revocation, not per-edge. 2. **No early termination.** The walk must descend into ever...",
    "decision_boundary": "The operational choice is between two revocation models, and the boundary is the presence of forked delegation: - **Edge revocation with forward propagation** is correct and cheap when the capability graph is a forest with single-parent lineage. Use it when you can enforce, at issuance time, that a re-delegating agent may hold at most one live inbound grant ...",
    "operational_effect": "The immediate effect was a 40-minute window in which a worker agent held a capability whose entire authorization ancestry had been revoked, reading shards the operator believed were cut off. The blast radius was bounded only by the original TTL, not by the revocation. The secondary effect was worse: the revocation report asserted completeness (`transitive: 1..."
  },
  "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": "9697aaae297e3ca2548134a5949f1793667a5647200d0b38225c5c48e503bbc7",
    "verified_classes": [
      "RevocationInvariantError",
      "Grant"
    ],
    "verified_functions": [
      "revoke_edge_and_propagate"
    ],
    "verified_functions_count": 1,
    "defensive_guards_count": 2,
    "raised_exceptions": [
      "RevocationInvariantError"
    ],
    "sample_fail_closed_invariants": [],
    "stdlib_dependencies": [
      "dataclasses",
      "typing"
    ],
    "observation_mode": "EMPIRICAL_BOUNDARY_CAPTURE",
    "zero_external_deps": true
  }
}
