Skip to content

feat(mcp): introduce facade-v1 tool surface for Codex#290

Open
zzet wants to merge 1 commit into
mainfrom
feat/mcp-facade-v1
Open

feat(mcp): introduce facade-v1 tool surface for Codex#290
zzet wants to merge 1 commit into
mainfrom
feat/mcp-facade-v1

Conversation

@zzet

@zzet zzet commented Jul 11, 2026

Copy link
Copy Markdown
Owner

Summary

  • add a versioned, static 21-tool MCP facade backed by the existing 178 legacy handlers
  • make facade-v1 the Codex default in hide mode, with capabilities for exact operation schemas and no deferred-tool promotion dependency
  • preserve legacy client schemas and calls while preventing dedicated facade names from leaking into legacy sessions
  • document the complete contract, effect model, migration table, rollout gates, and telemetry/privacy rules

Design and safety

  • centralize facade-to-handler routing in one canonical operation registry
  • keep read, local write, session write, control write, and external write boundaries homogeneous
  • split effect-sensitive adapters: change.simulate fixes keep=false, overlay.simulate fixes keep=true, overlay.merge fixes to_disk=false, and edit.apply_overlay fixes to_disk=true
  • keep temporal_verify out of read-only analyze and expose it through workspace_admin
  • make direct deferred promotion session-aware so hidden legacy calls cannot mutate the global lazy registry
  • refuse every effectful operation on remote federation routes
  • make planning/workflow/preset recovery guidance reference tools callable on the active facade
  • preserve freshness riders, overlay context, query logging, momentum safeguards, panic recovery, and hard gates across facade dispatch

Observability

  • record consent-gated, allow-listed facade calls, bounded outcomes, validation failures, status, and coarse latency buckets
  • collapse unknown caller-provided operation/domain values to fixed sentinels; no path, symbol, query, or raw operation is recorded
  • attach _meta.gortex_facade routing metadata and log surface/facade/operation/canonical-tool fields locally

Validation

  • canonical registry covers 178/178 legacy MCP tools
  • Codex first tools/list is exactly 21 static facade names and stays below the 15 KB regression ceiling
  • real protocol test covers uncompressed read(operation="file") plus guarded edit(operation="file", dry_run=true) without a disk write
  • all tracked Go packages pass
  • go vet ./internal/mcp ./internal/daemon ./internal/telemetry ./cmd/gortex
  • git diff --check

Related to #241: this removes the Codex deferred-read mismatch and unavailable-tool guidance failure mode. Hook classifier and daemon-transport behavior remain independently testable concerns.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant