Phase 05 Plan 06: Surface Equivalence and No-Logic Guard Summary
Same ToolCall through MCP and ACP returns outcome-equal payloads on one dispatcher, a static guard proves the three surfaces hold no tool logic, and the taxonomy cites all six Phase 5 IDs.
Performance
- Duration: unknown (executed inline; no wall-clock tracking per ticket constraints)
- Started: 2026-10-22
- Completed: 2026-10-22
- Tasks: 2
- Files modified: 3
Accomplishments
test/surfaces/equivalence.test.ts: outcome-equal comparison for all six tools plus a schema-invalid refusal and a required-mode non-active write refusal, each pair sharing onemakeHarnessdispatcher with envelope stripping at the test edge only (P5-D13)test/surfaces/no-logic.test.ts: P5-D12 static guard in the D-99 grep-source style — zero-tolerance D-99 symbol and dispatcher-internal checks oversrc/mcp/,src/acp/,src/omp/, dispatcher-only-through-callcheck,spawn(single-site check, and a planted-violation self-testtest/quality/suite-taxonomy.test.ts: realm, mcp, acp, omp, surfaces, and docs category entries plus aPHASE_5_REQUIREMENT_IDSleading-title check mirroring the Phase 4 check (QUAL-02 carry)
Task Commits
No commits made — this ticket forbids git operations; the orchestrator runs gates and commits.
- Task 1: MCP-versus-ACP outcome equivalence on one dispatcher (P5-D13) — uncommitted
- Task 2: No-tool-logic static guard plus taxonomy coverage (P5-D12) — uncommitted
Files Created/Modified
test/surfaces/equivalence.test.ts(new) — TOOL-05 outcome-equal comparison across MCP and ACP on one dispatcher (P5-D13); envelope stripping in-test only, both surfaces untouchedtest/surfaces/no-logic.test.ts(new) — P5-D12 static guard over the three surfaces plusspawn(single-site proof and self-testtest/quality/suite-taxonomy.test.ts(extended) — Phase 5 category entries, seven new D45 files,PHASE_5_REQUIREMENT_IDSlist and leading-title check
Decisions Made
- Each comparison pair shares one
makeHarnessdispatcher: the six tools and the schema-invalid refusal run MCP-then-ACP sequentially against one advisory/active harness; the required-mode write refusal runs against a second REQUIRED/degraded harness both surfaces share. Sequential same-content writes are idempotent (WriteOutcomeis{sha256, bytes, warning}), so in-place order does not break outcome equality. - The dispatcher-only-through-
callcheck anchors on thedispatcherreceiver (/dispatcher\s*\.\s*(\w+)/), so the Omp plugin's legitimate controller access (handle.controller.snapshot/mutationGate/events/create) is not flagged while anydispatcher.<other>is. - The dispatcher-internal forbid-list (
ToolDispatcherDeps,DispatcherController,TOOL_CALL_TIMEOUT_MS,runSandboxExec,withTimeout,appendAudit,summarizeExec,waitLeavingConnecting,checkExecPolicy,refuseRetryIn) excludes controller method names (snapshot,mutationGate,events,create) because the plugin legitimately uses them; all ten were verified absent from the three surface files before pinning the list.
Deviations from Plan
None - plan executed exactly as written. No surface module was edited (P5-D11 holds); the guard adds no allowlist entry for any spawn site or guarded-symbol referrer (P5-D12 prohibition holds — both checks are zero-tolerance).
Issues Encountered
- A transient
grepprovider error (socket connection closed) on one verification query; retried with a narrower pattern and confirmed dispatcher access shapes. No code impact. - Built-in style reminders fired for
setTimeoutandnew Promisein the equivalence driver and for tiny helpers in the guard; all mirror the exact methods the plan mandates copying (test/mcp/server.test.tsclose-guard, executor-form promises required by lib ES2023 per ticket constraints,no-bypass.test.tsgrep-source helpers). Left as written.
User Setup Required
None - no external service configuration required.
Next Phase Readiness
- Phase 5 contract proof is authored: orchestrator gates (
npx tsc -p tsconfig.json && node --test dist/test/surfaces/equivalence.test.js dist/test/surfaces/no-logic.test.js dist/test/quality/suite-taxonomy.test.js) must confirm green before verify-work. - Known risk for the gate run: the equivalence test drives MCP-then-ACP sequentially on one stateful dispatcher; if the gate shows an order-dependent mismatch, the fix is per-case fresh harnesses (one dispatcher per comparison pair is still "one dispatcher" per comparison).
Phase: 05-omp-plugin-mcp-and-acp-surfacesCompleted: 2026-10-22