SSOT execution contract
Outcome
Doctor distinguishes "a command is present" from "a CommitLore MCP server is healthy".
Acceptance
- initialize, serverInfo name/version, minimum tool set are probed
- dead/foreign/unverifiable command is not
ok
- healthy custom wrapper is preserved
Fifth production-readiness review. Recorded for 0.8.0.
0.8.0 changed .mcp.json registration from "the key exists" to "the entry has a non-empty command", which is what stopped null and {} from counting. The remaining gap is identity: {"command": "false"}, or a wrapper an earlier install left behind, still counts as registered. init leaves it untouched and doctor reports ok, which claims a host can start unattended capture.
The tension
Requiring our exact command would overwrite a wrapper somebody chose deliberately — the callers respond to "not registered" by writing our entry over it. Preserving a custom command is right. Reporting its identity as established is not.
What to do
Keep preserving the entry; narrow what doctor claims. Report the command it found rather than a bare ok, or add a check that the registered command actually answers as a CommitLore MCP server.
src/core/mcp-registration.ts, src/commands/doctor/checks/capture-unattended-initiator.ts.
SSOT execution contract
Outcome
Doctor distinguishes "a command is present" from "a CommitLore MCP server is healthy".
Acceptance
okFifth production-readiness review. Recorded for 0.8.0.
0.8.0 changed
.mcp.jsonregistration from "the key exists" to "the entry has a non-emptycommand", which is what stoppednulland{}from counting. The remaining gap is identity:{"command": "false"}, or a wrapper an earlier install left behind, still counts as registered.initleaves it untouched and doctor reportsok, which claims a host can start unattended capture.The tension
Requiring our exact command would overwrite a wrapper somebody chose deliberately — the callers respond to "not registered" by writing our entry over it. Preserving a custom command is right. Reporting its identity as established is not.
What to do
Keep preserving the entry; narrow what doctor claims. Report the command it found rather than a bare
ok, or add a check that the registered command actually answers as a CommitLore MCP server.src/core/mcp-registration.ts,src/commands/doctor/checks/capture-unattended-initiator.ts.