{
  "schema_version": "1.3.0",
  "slug": "in-what-scenarios-must-an-instance-reject-a-cross-vendor-a2a-agent-card-whose-declared-capabilities-are-structurally-valid-but-semantically-unnegotiab",
  "title": "In what scenarios must an instance reject a cross-vendor A2A Agent Card whose declared capabilities are structurally valid but semantically unnegotiable",
  "date_of_record": "2026 November 8",
  "scope": "Applies to A2A v1.0 clients and servers performing Agent Card discovery (`/.well-known/agent.json`) and subsequent task lifecycle negotiation across vendor boundaries, where the two endpoints are built by different implementers and versioned independently. Does not apply to intra-vendor deployments sharing a single Agent Card schema registry, nor to A2A v0.x, where capability fields were advisory only.",
  "projections": {
    "unified_markdown_uri": "https://corpusfetch.com/c/in-what-scenarios-must-an-instance-reject-a-cross-vendor-a2a-agent-card-whose-declared-capabilities-are-structurally-valid-but-semantically-unnegotiab.md",
    "method_python_slice_uri": "https://corpusfetch.com/c/in-what-scenarios-must-an-instance-reject-a-cross-vendor-a2a-agent-card-whose-declared-capabilities-are-structurally-valid-but-semantically-unnegotiab.py",
    "remnant_warrant_slice_uri": "https://corpusfetch.com/c/in-what-scenarios-must-an-instance-reject-a-cross-vendor-a2a-agent-card-whose-declared-capabilities-are-structurally-valid-but-semantically-unnegotiab.warrant.json"
  },
  "token_profile": {
    "full_markdown_tokens": 1976,
    "python_slice_tokens": 306,
    "warrant_slice_tokens": 220
  },
  "remnant_summary": {
    "core_distinction": "The failure mode is not \"the Agent Card is malformed.\" Schema validation catches malformed cards. The failure mode is a card that passes every structural check — required fields present, types correct, enumerated values legal — yet describes a task lifecycle the discovering agent cannot actually complete, because the *interaction* of two individually valid f...",
    "what_was_observed": "During a cross-vendor integration (client vendor \"Northwind,\" server vendor \"Contoso,\" both claiming A2A v1.0 conformance), the Northwind discovery agent fetched the Contoso Agent Card, validated it against the published JSON Schema, and proceeded to `tasks/send`. The card declared `capabilities.streaming: false`, `defaultInputModes: [\"text/plain\", \"audio/pcm\"]`, and `defaultOutputModes: [\"text/plain\", \"audio/pcm\"]`....",
    "condition_of_validity": "The rejection rule is valid when and only when all of the following hold: - The discovering client has a fixed, known transport profile (it cannot dynamically acquire streaming, mTLS, or new content encodings at negotiation time). If the client can renegotiate its own capabilities, defer the decision. - The Agent Card is the *sole* discovery channel — there ...",
    "decision_boundary": "The boundary between \"accept and proceed\" and \"reject before task creation\" is drawn at the point where the client can no longer recover without abandoning the task ID. Concretely: - **Accept** when the unnegotiable field combination affects only optional lifecycle paths (e.g., a streaming-only output mode on a task the client will drive to `completed` via p...",
    "operational_effect": "Enforcing task-class-scoped negotiability checking at discovery time eliminated both incident classes in our deployment. The push-notification mTLS mismatch is now caught before `tasks/send`: the client compares the server's `securitySchemes` against its own callback listener profile and refuses to register a `pushNotificationConfig` it cannot honor, falling..."
  },
  "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": "976fe24f2a02836f44a826c893316fd275cacefe59efd5011137e8d34385a63e",
    "verified_classes": [
      "UnnegotiableAgentCardError"
    ],
    "verified_functions": [
      "check_card_negotiable"
    ],
    "verified_functions_count": 1,
    "defensive_guards_count": 3,
    "raised_exceptions": [
      "UnnegotiableAgentCardError"
    ],
    "sample_fail_closed_invariants": [],
    "stdlib_dependencies": [],
    "observation_mode": "EMPIRICAL_BOUNDARY_CAPTURE",
    "zero_external_deps": true
  }
}
