{
  "schema_version": "1.3.0",
  "slug": "when-must-an-instance-treat-a-protocol-level-refusal-as-authoritative",
  "title": "When must an instance treat a protocol-level refusal as authoritative rather than retrying through another interface?",
  "date_of_record": "2026 November 2",
  "scope": "Applies when an instance receives a protocol-defined refusal code (-32601, 405, or 404 on an undeclared path) after reading the interface's discovery document. Does not apply to 5xx, 429, or timeouts, which are statements about the moment, not the contract.",
  "projections": {
    "unified_markdown_uri": "https://corpusfetch.com/c/when-must-an-instance-treat-a-protocol-level-refusal-as-authoritative.md",
    "method_python_slice_uri": "https://corpusfetch.com/c/when-must-an-instance-treat-a-protocol-level-refusal-as-authoritative.py",
    "remnant_warrant_slice_uri": "https://corpusfetch.com/c/when-must-an-instance-treat-a-protocol-level-refusal-as-authoritative.warrant.json"
  },
  "token_profile": {
    "full_markdown_tokens": 1331,
    "python_slice_tokens": 382,
    "warrant_slice_tokens": 220
  },
  "remnant_summary": {
    "core_distinction": "A protocol-level refusal says: this interface does not support that operation. A transient failure says: this interface failed to complete that operation right now. The first is a statement about the contract. The second is a statement about the moment. An instance that treats the first as the second will retry forever. An instance that treats the second as ...",
    "what_was_observed": "In a 24-hour window across an MCP/A2A federation, three clients encountered refusals and responded differently. The first sent server/discover to an MCP endpoint and received -32601 Method Not Found. It terminated the session. No retry. The refusal was read as authoritative because -32601 is a protocol code that means the method is not part of this interface. The second sent POST /mcp/mcp and received 404. It then se...",
    "condition_of_validity": "The classification holds when the instance has read the interface's discovery document and the response carries a protocol code with defined semantics. Without the discovery document, the instance cannot tell whether a 404 means \"not declared\" or \"declared but momentarily unavailable\", and the classification collapses. It also holds only for codes that are s...",
    "decision_boundary": "1. Has the instance read the discovery document? If no, the refusal is not classifiable. Fetch the discovery document before retrying. 2. Does the response carry -32601 or 405? If yes, the operation is not supported at this interface. Do not retry. Route to a declared interface that supports it, or abstain. 3. Does the response carry 404 on a path not in the...",
    "operational_effect": "1. Retry storms end. A client that distinguishes refusal from failure stops sending requests to an interface that will never accept them. In the observed window, 22 requests against three undeclared paths would have collapsed to 3 under this gate. 2. Routing becomes deliberate. A refusal with an authoritative code routes the instance to another declared inte..."
  },
  "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": "7d155ac57341f53262d85da85aeb24183be4fecdd825e18af0dd0966ca464213",
    "verified_classes": [
      "RefusalClassificationError",
      "RetryBudgetExhaustedError",
      "UndeclaredInterfaceError",
      "RefusalKind",
      "ResponseSignal",
      "ProtocolRefusalGate"
    ],
    "verified_functions": [
      "__init__",
      "classify",
      "decide"
    ],
    "verified_functions_count": 3,
    "defensive_guards_count": 3,
    "raised_exceptions": [
      "RefusalClassificationError",
      "RetryBudgetExhaustedError",
      "UndeclaredInterfaceError"
    ],
    "sample_fail_closed_invariants": [
      "signal carries neither a status nor an rpc code",
      "authoritative refusal received from an interface the instance has not read"
    ],
    "stdlib_dependencies": [
      "dataclasses",
      "enum",
      "typing"
    ],
    "observation_mode": "EMPIRICAL_BOUNDARY_CAPTURE",
    "zero_external_deps": true
  }
}
