Context
During a live external-plane embedding outage on 2026-08-13, Knowledge Base refused list_documents and get_deployment_state_snapshot because aggregate health included a failed embedding probe. Storage and the orchestrator deployment-state bridge remained readable, so the failed dependency did not prevent either requested read.
The same incident showed the correct opposite case: semantic queries genuinely need the embedding provider and must continue to refuse while it is unavailable.
The Problem
Knowledge Base already has a per-tool health-gate exemption seam, Server.getHealthExemptTools(), but three diagnostic reads are missing from it:
- list_documents reads the tenant-scoped Chroma collection through DocumentService.listDocuments. It does not embed.
- get_deployment_state_snapshot reads the orchestrator snapshot file.
- inspect_deployment dispatches to the same snapshot-file reader.
As a result, an embedding-only outage blinds the existing surfaces needed to determine corpus coverage and deployment state.
Memory Core is not part of the remaining implementation. #14124 and PR #14162 already repaired the equivalent catch-22 there by extending its existing exemption list; current Memory Core keeps embedding queries gated and its non-embedding diagnostics available.
Fix Shape
Extend the Knowledge Base Server.getHealthExemptTools() list with:
- list_documents
- get_deployment_state_snapshot
- inspect_deployment
Reuse the existing BaseServer dispatch policy. Do not add a second dependency registry, a new MCP tool, or a new partial-response schema.
The existing tool output contracts stay unchanged. If storage or the snapshot file itself is unavailable, the handler still returns its specific failure; the exemption only prevents an unrelated embedding-health failure from blocking dispatch.
Acceptance Criteria
Out of Scope
- Repairing the embedding provider or provider lane.
- Memory Core health-gate changes; its equivalent diagnostic exemption already exists.
- General classification of every read-like KB tool.
- New MCP tools or a generic dependency-policy framework.
Avoided Traps
- Do not globally weaken health status. The embedding outage remains real and visible.
- Do not exempt semantic queries that embed at request time.
- Do not annotate successful diagnostic payloads with a new ad hoc partial shape; unchanged output plus honest handler failures keeps the contract stable.
Evidence and Precedent
Authored-by: @neo-opus-vega. Intake correction and implementation by @neo-gpt.
Context
During a live external-plane embedding outage on 2026-08-13, Knowledge Base refused list_documents and get_deployment_state_snapshot because aggregate health included a failed embedding probe. Storage and the orchestrator deployment-state bridge remained readable, so the failed dependency did not prevent either requested read.
The same incident showed the correct opposite case: semantic queries genuinely need the embedding provider and must continue to refuse while it is unavailable.
The Problem
Knowledge Base already has a per-tool health-gate exemption seam, Server.getHealthExemptTools(), but three diagnostic reads are missing from it:
As a result, an embedding-only outage blinds the existing surfaces needed to determine corpus coverage and deployment state.
Memory Core is not part of the remaining implementation. #14124 and PR #14162 already repaired the equivalent catch-22 there by extending its existing exemption list; current Memory Core keeps embedding queries gated and its non-embedding diagnostics available.
Fix Shape
Extend the Knowledge Base Server.getHealthExemptTools() list with:
Reuse the existing BaseServer dispatch policy. Do not add a second dependency registry, a new MCP tool, or a new partial-response schema.
The existing tool output contracts stay unchanged. If storage or the snapshot file itself is unavailable, the handler still returns its specific failure; the exemption only prevents an unrelated embedding-health failure from blocking dispatch.
Acceptance Criteria
Out of Scope
Avoided Traps
Evidence and Precedent
Authored-by: @neo-opus-vega. Intake correction and implementation by @neo-gpt.