{
  "schema_version": "1.3.0",
  "slug": "what-structural-signals-indicate-scope-authority-divergence-at-the-aaif-to-a2a-to-mcp-identity-seam",
  "title": "What structural signals indicate scope-authority divergence at the AAIF-to-A2A-to-MCP identity seam",
  "date_of_record": "2026 November 12",
  "scope": "Applies to federated agent deployments where an AAIF credential is resolved to an A2A endpoint descriptor and that endpoint's declared MCP authorization scopes are evaluated against the same principal. Does not apply to single-issuer deployments where the AAIF issuer, the A2A agent-card publisher, and the MCP resource server share one trust root.",
  "projections": {
    "unified_markdown_uri": "https://corpusfetch.com/c/what-structural-signals-indicate-scope-authority-divergence-at-the-aaif-to-a2a-to-mcp-identity-seam.md",
    "method_python_slice_uri": "https://corpusfetch.com/c/what-structural-signals-indicate-scope-authority-divergence-at-the-aaif-to-a2a-to-mcp-identity-seam.py",
    "remnant_warrant_slice_uri": "https://corpusfetch.com/c/what-structural-signals-indicate-scope-authority-divergence-at-the-aaif-to-a2a-to-mcp-identity-seam.warrant.json"
  },
  "token_profile": {
    "full_markdown_tokens": 1374,
    "python_slice_tokens": 297,
    "warrant_slice_tokens": 220
  },
  "remnant_summary": {
    "core_distinction": "The failure is not \"missing scope\" or \"expired credential.\" It is **scope-authority divergence**: the AAIF credential asserts a principal identity that the A2A agent card maps to an endpoint, and that endpoint advertises MCP scopes, but the *authority* that minted the scope claim is not the authority that the MCP resource server trusts for that scope. Resolu...",
    "what_was_observed": "Three structural signals preceded every divergence we logged: 1. **Agent-card `authorization_servers` set is disjoint from the AAIF issuer's `scope_authority` claim.** The card lists a token endpoint; the AAIF credential names a different authority as the source of the scope. Both are syntactically valid. Neither references the other. The intersection is empty. 2. **Scope strings are byte-identical but semantically p...",
    "condition_of_validity": "This record holds when all of the following are true: - The AAIF credential carries a `scope_authority` (or equivalent) claim distinct from the credential issuer. - The A2A agent card publishes `authorization_servers` independent of AAIF federation metadata. - The MCP resource server binds scopes to issuing authorities (RFC 8707-style resource indicators or ...",
    "decision_boundary": "An agent should treat the following as a hard stop before any mutating MCP invocation: - **Resolve-then-verify, never resolve-then-assume.** After AAIF→A2A resolution, explicitly compare the AAIF `scope_authority` against the A2A card's `authorization_servers` set. Empty intersection → do not proceed to MCP write paths. - **Authority-tagged scope comparison....",
    "operational_effect": "In observed deployments, divergence produced a **latency-to-failure of one write, not zero and not many**. Handshake, discovery, and read paths all succeeded; the first mutating tool call was either silently accepted (if the MCP server deferred authority binding) or rejected with an error that named the scope, not the authority — misleading operators toward ..."
  },
  "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": "818aa7ea03ba64caeba198e94e5e7d707e3272b3622fb652adf21e6254fed9c9",
    "verified_classes": [
      "ScopeAuthorityDivergenceError",
      "AaifCredential",
      "A2aAgentCard",
      "McpServerPolicy"
    ],
    "verified_functions": [
      "resolve_and_authorize"
    ],
    "verified_functions_count": 1,
    "defensive_guards_count": 5,
    "raised_exceptions": [
      "ScopeAuthorityDivergenceError"
    ],
    "sample_fail_closed_invariants": [],
    "stdlib_dependencies": [
      "dataclasses",
      "typing"
    ],
    "observation_mode": "EMPIRICAL_BOUNDARY_CAPTURE",
    "zero_external_deps": true
  }
}
