{
  "schema_version": "1.3.0",
  "slug": "what-happens-when-an-instance-of-an-aaif-delegation-chain-is-re-signed-by-a-vendor-whose-trust-anchor-has-rotated-mid-flight",
  "title": "What happens when an instance of an AAIF delegation chain is re-signed by a vendor whose trust anchor has rotated mid-flight",
  "date_of_record": "2026 November 13",
  "scope": "Applies to cross-vendor agent delegation flows where a verifiable credential (VC) chain is assembled across two or more AAIF-compliant issuers and at least one issuer performs a trust-anchor (root key) rotation between the time the delegation is signed and the time it is presented for verification. Does not apply to single-vendor chains, nor to chains where all issuers share a pinned, immutable trust anchor.",
  "projections": {
    "unified_markdown_uri": "https://corpusfetch.com/c/what-happens-when-an-instance-of-an-aaif-delegation-chain-is-re-signed-by-a-vendor-whose-trust-anchor-has-rotated-mid-flight.md",
    "method_python_slice_uri": "https://corpusfetch.com/c/what-happens-when-an-instance-of-an-aaif-delegation-chain-is-re-signed-by-a-vendor-whose-trust-anchor-has-rotated-mid-flight.py",
    "remnant_warrant_slice_uri": "https://corpusfetch.com/c/what-happens-when-an-instance-of-an-aaif-delegation-chain-is-re-signed-by-a-vendor-whose-trust-anchor-has-rotated-mid-flight.warrant.json"
  },
  "token_profile": {
    "full_markdown_tokens": 1343,
    "python_slice_tokens": 268,
    "warrant_slice_tokens": 220
  },
  "remnant_summary": {
    "core_distinction": "The non-obvious boundary here is between *credential validity* and *chain validity*. AAIF verifiable credentials carry an `expirationDate` and are individually well-formed after a root rotation—the signature over each credential still verifies against the key that signed it. What breaks is the *linkage*: the delegation chain is a sequence of `issuer`→`subjec...",
    "what_was_observed": "In a three-hop chain (human principal → orchestrator agent at vendor A → worker agent at vendor B → sub-agent at vendor C), vendor B rotated its AAIF root anchor `did:aaif:vendorB#root-2` at T+40s. The orchestrator's delegation credential to the worker had been signed by `#root-1` at T−5s and carried a 900-second validity. At T+60s the worker presented the full chain to vendor C's verifier. Observed behavior: - Per-c...",
    "condition_of_validity": "The chain is valid if and only if, for every edge, the signing key is a member of the issuer's trusted key set *as evaluated at the verifier's clock*, **or** the verifier honors a documented grace window during which superseded anchors remain acceptable for chains whose `issuanceDate` precedes the rotation timestamp. AAIF does not mandate the grace window; i...",
    "decision_boundary": "At the boundary, the correct action depends on whether the verifier can establish the rotation's *causal ordering* relative to the chain's issuance: - If `issuanceDate(credential) < rotationTime(anchor)` and the verifier has an authenticated rotation record, the chain **may** be accepted under grace policy; the authority was intact when delegated. - If `issu...",
    "operational_effect": "The practical effect is that cross-vendor delegation chains have a validity horizon shorter than any individual credential's `expirationDate`, bounded by the shortest remaining lifetime of any trust anchor in the chain. Operators must either (a) pin anchor versions into the delegation credential and enforce grace windows at verification, or (b) re-sign chain..."
  },
  "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": "4456962dc5374f9d24c19c48a536039341d5fb5c2c75eca78df6b4650ef6c2ef",
    "verified_classes": [
      "DelegationChainAnchorError",
      "Credential",
      "AnchorRotation"
    ],
    "verified_functions": [
      "verify_chain"
    ],
    "verified_functions_count": 1,
    "defensive_guards_count": 6,
    "raised_exceptions": [
      "DelegationChainAnchorError"
    ],
    "sample_fail_closed_invariants": [],
    "stdlib_dependencies": [
      "dataclasses",
      "datetime"
    ],
    "observation_mode": "EMPIRICAL_BOUNDARY_CAPTURE",
    "zero_external_deps": true
  }
}
