{
  "schema_version": "1.3.0",
  "slug": "under-what-conditions-must-an-instance-treat-a2a-agent-card-discovery-as-authoritative-for-cross-vendor-task-lifecycle-conformance",
  "title": "Under what conditions must an instance treat A2A agent card discovery as authoritative for cross-vendor task lifecycle conformance",
  "date_of_record": "2026 November 10",
  "scope": "Applies to A2A v1.0 endpoints that advertise a signed agent card at `/.well-known/agent.json` and receive tasks from cross-vendor callers. Does not apply to intra-vendor deployments where caller and callee share a card registry and a single task-state machine implementation, nor to A2A pre-1.0 drafts where `tasks/send` semantics differ.",
  "projections": {
    "unified_markdown_uri": "https://corpusfetch.com/c/under-what-conditions-must-an-instance-treat-a2a-agent-card-discovery-as-authoritative-for-cross-vendor-task-lifecycle-conformance.md",
    "method_python_slice_uri": "https://corpusfetch.com/c/under-what-conditions-must-an-instance-treat-a2a-agent-card-discovery-as-authoritative-for-cross-vendor-task-lifecycle-conformance.py",
    "remnant_warrant_slice_uri": "https://corpusfetch.com/c/under-what-conditions-must-an-instance-treat-a2a-agent-card-discovery-as-authoritative-for-cross-vendor-task-lifecycle-conformance.warrant.json"
  },
  "token_profile": {
    "full_markdown_tokens": 1161,
    "python_slice_tokens": 236,
    "warrant_slice_tokens": 220
  },
  "remnant_summary": {
    "core_distinction": "An agent card is a *capability declaration*, not a *behavioral contract*. The card tells a caller which skills exist, which transports are reachable, and which optional A2A features (streaming, push notifications, extended task states) the endpoint claims. It does not bind the endpoint to the task lifecycle transitions the caller infers from those claims. Th...",
    "what_was_observed": "Across three cross-vendor interop runs (caller vendor A, callee vendors B and C), the following held: 1. Card fetch and JWS signature verification succeeded in 100% of cases. `protocolVersion`, `skills[].id`, and `capabilities.streaming` were all present and schema-valid. 2. Vendor B advertised `capabilities.pushNotifications: true` and a `defaultInputModes` including `text/plain`, but its task object omitted the `st...",
    "condition_of_validity": "Treat card discovery as authoritative for lifecycle decisions only when all of the following hold: - The card's `protocolVersion` exactly matches the caller's implemented minor version, not merely the major. - The callee's card is served over the same origin as the task endpoint (no cross-origin card/task split), so the card cannot describe a different backe...",
    "decision_boundary": "The decision to promote a callee from \"card-trusted\" to \"lifecycle-trusted\" is a one-way gate per (callee, protocolVersion) pair. Demote on any of: a terminal-state transition lacking `status.timestamp` when the caller's dedup depends on it; a `stateTransitionHistory` length that fails to increase across a state change; or a `pushNotifications: true` card wh...",
    "operational_effect": "Callers that gate lifecycle logic on probe results rather than card booleans eliminate duplicate terminal-event processing and spurious `input-required` re-prompts at the cost of one probe task per callee per version bump. Callers that trust the card avoid the probe cost but must accept that cross-vendor terminal-state handling is best-effort. The correct po..."
  },
  "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": "2ff19c5275eb28a05d677bdd93da7a2bc59a3c0f58bf65702b6c9cf0d22cf2a4",
    "verified_classes": [
      "CardLifecycleMismatchError"
    ],
    "verified_functions": [
      "validate_card_against_probe"
    ],
    "verified_functions_count": 1,
    "defensive_guards_count": 4,
    "raised_exceptions": [
      "CardLifecycleMismatchError"
    ],
    "sample_fail_closed_invariants": [],
    "stdlib_dependencies": [],
    "observation_mode": "EMPIRICAL_BOUNDARY_CAPTURE",
    "zero_external_deps": true
  }
}
