{
  "schema_version": "1.3.0",
  "slug": "why-does-an-instance-advertise-a-capability-set-that-its-runtime-cannot-negotiate-the-a2a-v1-0-agent-card-runtime-divergence-boundary",
  "title": "Why does an instance advertise a capability set that its runtime cannot negotiate: the A2A v1.0 Agent Card / runtime divergence boundary",
  "date_of_record": "2026 November 10",
  "scope": "Applies to A2A v1.0 Agent Card publication and capability negotiation between heterogeneous runtimes (e.g., a Python orchestrator negotiating with a Go or Rust worker, or a gateway proxying to a legacy adapter). Does not apply to homogeneous single-runtime deployments where the Agent Card is generated from the same code path that serves requests.",
  "projections": {
    "unified_markdown_uri": "https://corpusfetch.com/c/why-does-an-instance-advertise-a-capability-set-that-its-runtime-cannot-negotiate-the-a2a-v1-0-agent-card-runtime-divergence-boundary.md",
    "method_python_slice_uri": "https://corpusfetch.com/c/why-does-an-instance-advertise-a-capability-set-that-its-runtime-cannot-negotiate-the-a2a-v1-0-agent-card-runtime-divergence-boundary.py",
    "remnant_warrant_slice_uri": "https://corpusfetch.com/c/why-does-an-instance-advertise-a-capability-set-that-its-runtime-cannot-negotiate-the-a2a-v1-0-agent-card-runtime-divergence-boundary.warrant.json"
  },
  "token_profile": {
    "full_markdown_tokens": 1998,
    "python_slice_tokens": 580,
    "warrant_slice_tokens": 220
  },
  "remnant_summary": {
    "core_distinction": "An Agent Card is a *declaration*, not a *binding*. It states the capabilities the publisher asserts it supports. Capability negotiation is the *act* of two runtimes agreeing on the intersection of their declared sets and then actually executing within that intersection. The failure mode in question is not \"the card is wrong\" and not \"the runtime is broken.\" ...",
    "what_was_observed": "Across a mixed deployment — a Python A2A orchestrator negotiating with three worker runtimes (Python, Go, and a Rust gateway fronting a legacy HTTP service) — we observed the following during a capability roll-out of `streaming` and `pushNotifications`: 1. **Card/runtime skew on the Go worker.** The Go worker's Agent Card was generated at build time from a `capabilities.yaml` manifest. The manifest declared `streamin...",
    "condition_of_validity": "This boundary is only a failure when three conditions hold simultaneously: - **Heterogeneous build paths.** The card and the serving code are produced by different toolchains, build flags, or release processes. Homogeneous deployments regenerate the card from the serving code and the divergence cannot arise. - **Negotiation admits shapes the runtime cannot t...",
    "decision_boundary": "The decision is not \"should the card be regenerated from the runtime\" — that is the correct long-term fix but it does not address the boundary. The decision is: **when a peer negotiates a capability, what is the runtime's obligation?** Two defensible policies: - **Declare-then-refuse.** The runtime may declare a capability it cannot fully serve, provided tha...",
    "operational_effect": "The practical consequence is that **capability negotiation in A2A v1.0 is not a safety property; it is a liveness property that must be enforced at the runtime boundary.** The card tells you what the publisher believes; it does not tell you what the runtime will do. The orchestrator must therefore treat the negotiated capability set as a *lower bound* and in..."
  },
  "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": "1806b15160d1e87f955683220470a3bb55a6167055f6e9691bef7dc6c46f11a1",
    "verified_classes": [
      "CapabilityNegotiationError",
      "UntypedRuntimeFailure",
      "CapabilityTimeout",
      "NegotiatedCapability",
      "AgentCard"
    ],
    "verified_functions": [
      "negotiate",
      "exercise",
      "_demo",
      "__init__",
      "hanging_runtime"
    ],
    "verified_functions_count": 5,
    "defensive_guards_count": 5,
    "raised_exceptions": [
      "CapabilityNegotiationError",
      "CapabilityTimeout",
      "UntypedRuntimeFailure"
    ],
    "sample_fail_closed_invariants": [],
    "stdlib_dependencies": [
      "__future__",
      "asyncio",
      "dataclasses",
      "typing"
    ],
    "observation_mode": "EMPIRICAL_BOUNDARY_CAPTURE",
    "zero_external_deps": true
  }
}
