The gap
library.publish_confirm (core/orchestrator-config.ts) is read and acted on only by Pi: extensions/codecarto/index.ts gates /codecarto-publish behind ctx.ui.confirm(...) when it is set. MCP's handlePublish never reads the key — the only occurrences in mcp-server/server.ts are inside handleConfig's display logic, which shows the value but never enforces it. An MCP user who sets it sees zero behavior change and no explanation why.
The internal design note (docs/synthesis-roadmap.md: "the 'fill in before commit?' prompt is host-side UX, out of scope for the MCP transport itself") justifies the divergence, but the shipped doc served to MCP hosts (agent-skill/codecartographer/references/library.md) described the key with no surface caveat. The doc caveat ships with the v0.17.0 parity-docs pass; this issue tracks the remaining behavioral question:
The question
Should MCP honor publish_confirm with a refuse-unless-force handshake — the exact pattern codecarto_broadside uses for its spend gate (MCP cannot ask a human, so it refuses and the caller re-invokes with force: true)? That would make the key mean something on every executable surface, at the cost of an extra round trip for MCP hosts that set it.
Alternative: keep it Pi-only and documented as such (status quo after the docs pass).
The gap
library.publish_confirm(core/orchestrator-config.ts) is read and acted on only by Pi:extensions/codecarto/index.tsgates/codecarto-publishbehindctx.ui.confirm(...)when it is set. MCP'shandlePublishnever reads the key — the only occurrences inmcp-server/server.tsare insidehandleConfig's display logic, which shows the value but never enforces it. An MCP user who sets it sees zero behavior change and no explanation why.The internal design note (docs/synthesis-roadmap.md: "the 'fill in before commit?' prompt is host-side UX, out of scope for the MCP transport itself") justifies the divergence, but the shipped doc served to MCP hosts (
agent-skill/codecartographer/references/library.md) described the key with no surface caveat. The doc caveat ships with the v0.17.0 parity-docs pass; this issue tracks the remaining behavioral question:The question
Should MCP honor
publish_confirmwith a refuse-unless-forcehandshake — the exact patterncodecarto_broadsideuses for its spend gate (MCP cannot ask a human, so it refuses and the caller re-invokes withforce: true)? That would make the key mean something on every executable surface, at the cost of an extra round trip for MCP hosts that set it.Alternative: keep it Pi-only and documented as such (status quo after the docs pass).