Parent: #13860
Related: #13914, #13920, #13923, #13924, #13874, ADR-0025, ADR-0026.
Problem
#13914 correctly targets a public inspect_deployment MCP surface, but its current shape still leans too hard on Memory Core graph readout. That is not sufficient for the live cloud failure class: the model runner can pin CPU, Memory Core can be unhealthy, and graph publication/readout can lag or be unavailable exactly when deployment proof is needed.
Only KB and MC are public MCP surfaces. The Docker socket must stay off both of them. The missing substrate is a graph-independent bridge from the internal orchestrator daemon to those public tools.
Scope
Add a model-free, graph-independent deployment-state bridge that #13914 can consume:
- orchestrator remains the only holder of Docker/runtime access (#13920);
- KB/MC get read-only MCP tools, not a socket mount and not a write actuator;
- latest diagnostics/recovery input is readable without an embedding/model call and without relying 100% on graph availability;
- MC-down cases still have a public path through KB if KB is healthy;
- payloads are bounded and allowlisted to Neo deployment services only.
Acceptance Criteria
Contract Ledger
| Contract |
Owner |
Consumer |
Required behavior |
Fallback / failure mode |
Evidence |
| Internal diagnosis snapshot |
orchestrator daemon |
bridge writer |
bounded, allowlisted latest deployment diagnosis; no model call |
stale/unavailable is explicit, not silent |
unit + fixture |
| Graph-independent bridge payload |
bridge substrate |
KB + MC tools |
read-only snapshot with size cap, timestamp, source, and service allowlist |
MC unhealthy still leaves KB path if KB is healthy |
live smoke |
| Public KB read tool |
KB MCP |
inspect_deployment / operators |
read current snapshot without Docker/socket/shell authority |
returns structured unavailable/stale result |
MCP schema + test |
| Public MC read tool |
MC MCP |
inspect_deployment / graph archive |
read graph/archive when healthy, but not required for current proof |
graph unavailable does not mask KB snapshot |
MCP schema + test |
| Deployment wiring |
private deployment config |
stack runtime |
internal-only bridge mount/env; no public route |
missing config fails closed and logs the exact migration key |
private MR + short migration note |
Non-negotiables: no public orchestrator or daemon route; no Docker socket on KB or MC; no shell/exec/write tool; bounded allowlisted payloads; model-free read path; graph remains archive/SSOT when available, not the only proof surface.
Security invariant
Public surfaces remain KB and MC only. Runtime authority remains internal to the orchestrator holder and is never exposed as an arbitrary container operation, shell, exec, or public write tool.
Parent: #13860
Related: #13914, #13920, #13923, #13924, #13874, ADR-0025, ADR-0026.
Problem
#13914 correctly targets a public
inspect_deploymentMCP surface, but its current shape still leans too hard on Memory Core graph readout. That is not sufficient for the live cloud failure class: the model runner can pin CPU, Memory Core can be unhealthy, and graph publication/readout can lag or be unavailable exactly when deployment proof is needed.Only KB and MC are public MCP surfaces. The Docker socket must stay off both of them. The missing substrate is a graph-independent bridge from the internal orchestrator daemon to those public tools.
Scope
Add a model-free, graph-independent deployment-state bridge that #13914 can consume:
Acceptance Criteria
inspect_deploymentcan read latest daemon diagnostics/recovery input through a model-free bridge, not only graph records.Contract Ledger
Non-negotiables: no public orchestrator or daemon route; no Docker socket on KB or MC; no shell/exec/write tool; bounded allowlisted payloads; model-free read path; graph remains archive/SSOT when available, not the only proof surface.
Security invariant
Public surfaces remain KB and MC only. Runtime authority remains internal to the orchestrator holder and is never exposed as an arbitrary container operation, shell, exec, or public write tool.