Files
stack/docs/scratchpads/webui-p3r1-routing-mcp.md
T
2026-08-11 15:28:57 -05:00

7.0 KiB

P3-R1 — Routing Health Enum + /mcp Wiring Scratchpad

Task: P3 hands-on acceptance blockers #1 and #5 Mission: mvp-20260312 (active) Branch: feat/webui-p3r1-routing-mcp from origin/next Required base: 20718b5a273d243363a4f5cbef5bbf692a805bdb Tracking ref: Direct P3-R1 author brief; no provider issue supplied; no PR or merge authorized Started: 2026-08-11T14:52:52-05:00

Objective

Fix exactly two P3 acceptance blockers:

  1. Make routing consume the canonical ProviderHealthStatus enum, with healthy and degraded routable and down non-routable, at both routing decision sites.
  2. Wire McpClientModule into CommandsModule, make McpClientService required, remove the unreachable unavailable-service branch, and prove /mcp status reaches the client.

Explicitly excluded: provider registry/adapters, provider.service.ts, agent.service.ts, chat.gateway.ts, fallback membership, task classification, selector UI, conversation resume, reload UX, WS/origin/handshake behavior, dependencies/lockfile, and apps/web/** changes.

Plan

  1. Confirm exact base/branch and inspect every cited source/test anchor plus all direct CommandExecutorService construction sites.
  2. Record baseline gateway and focused routing/commands/MCP test totals.
  3. Add regression tests first and run focused tests to capture expected RED failures.
  4. Apply only the typed routing helper/signature changes and required MCP module/constructor/guard changes; update impossible up fixtures.
  5. Run focused tests, all user-required verification gates, lockfile/scope/diff checks, and record counts.
  6. Obtain independent spec and code/security review; remediate any findings and repeat affected gates.
  7. Commit conventionally, run the pre-push queue guard, and push only the feature branch (no PR or merge).

Budget

No explicit token cap supplied. Working soft cap: 30K tokens, based on two bounded gateway bug fixes, focused TDD, full gateway/root verification, independent review, and branch delivery. One coding worker will execute serially; reviews will be independent and serial to avoid worktree collisions.

Startup Evidence

  • git fetch origin rc=0.
  • origin/next confirmed exactly 20718b5a273d243363a4f5cbef5bbf692a805bdb.
  • Local and remote feat/webui-p3r1-routing-mcp were absent before creation.
  • Branch creation rc=0; HEAD equals the required base.
  • Harness-owned .mosaic/orchestrator/session.lock was already dirty and remains excluded from staging/commit.

Baseline Evidence

  • Gateway full suite: rc=0; 64 files / 693 tests passed, 7 files / 17 tests skipped (71 files / 710 tests total).
  • Routing sub-suite (src/agent/routing): rc=0; 3 files / 105 tests passed.
  • Commands/MCP sub-suite (src/commands, src/mcp-client): rc=0; 6 files / 76 tests passed.

TDD and Implementation Evidence

  • Routing RED: after canonical fixture/test changes but before the service fix, focused routing run returned rc=1 with 15 failed / 91 passed (106) because the old up/ok gates rejected healthy and degraded.
  • Routing GREEN: canonical ProviderHealthStatus map types, one isRoutable helper, and both comparison sites corrected; focused routing suite passed.
  • MCP behavior test now drives /mcp status through a required mock client and asserts the client is called, success is returned for zero servers, and the former unavailable message is absent.
  • MCP wiring mutation RED used the final Reflect.getMetadata('imports', CommandsModule) assertion with only the production McpClientModule import/registration temporarily removed: rc=1, exact failure expected [GCModule, …] to include McpClientModule.
  • MCP wiring GREEN after byte-for-byte production restoration: rc=0. Temporary mutation did not remain.
  • Every direct new CommandExecutorService(...) test construction now supplies a non-null MCP client mock.
  • Initial Codex worker launch failed rc=1 from missing OpenAI bearer authentication. First Mosaic Claude launch failed rc=1 because Distrobox-local runtime contracts were absent; retry with the supported host MOSAIC_HOME=/home/jwoltje/.config/mosaic succeeded.

Review Evidence

  • Independent spec review: approve, 0 blockers, scope OK.
  • Independent code/security review: approve, 0 blockers, 0 critical/high security findings. It suggested an actual module-wiring assertion, which was added with valid mutation RED/GREEN evidence.
  • Independent final re-review after remediation: approve, 0 blockers, 0 critical/high security findings, no remaining findings.
  • Optional missing-provider/undefined test suggestion was not adopted: the brief explicitly requires the three canonical statuses (healthy, degraded, down) and forbids scope expansion; runtime behavior for absent keys remains undefined → non-routable through the required helper signature.

Documentation Assessment

  • docs/PRD.md already requires provider fallback/routing and MCP capability; this increment restores implementation to those existing contracts.
  • No public API endpoint, payload schema, auth/permission rule, navigation, deployment procedure, or new user workflow changes. OpenAPI, endpoint index, user/admin/developer guides, and sitemap are therefore N/A for this bounded repair.
  • This append-only scratchpad is the implementation, TDD, review, and verification record. Canonical docs remain in-repo; no publishing action is in scope.

Final Verification Evidence

All required and repository-situational gates completed with rc=0:

Gate Result
pnpm install --frozen-lockfile rc=0
Gateway typecheck rc=0
Gateway lint rc=0
Routing focused suite rc=0; 3 files / 106 tests
Commands/MCP focused suite rc=0; 6 files / 78 tests
Gateway full suite rc=0; 64 files / 696 tests passed; 7 files / 17 tests skipped
Gateway build rc=0
Root typecheck rc=0; 45/45 tasks
Web test rc=0; 19 files / 154 tests
Root lint rc=0; 25/25 tasks
Root format check rc=0
git diff --check rc=0
  • Gateway suite before→after: 693→696 passing tests; skipped remained 17 (total 710→713).
  • Routing focused before→after: 105→106 passing tests.
  • Commands/MCP focused before→after: 76→78 passing tests.
  • pnpm-lock.yaml SHA-256 before/after frozen install: 9acaa89d213b3281e757b6edf6fdb8727176570d725b78a0de234c61a7f3c332; diff versus origin/next rc=0.
  • Verified no changed path under apps/web/**, provider service/adapters, agent.service.ts, chat.gateway.ts, or lockfile.
  • Verified both McpClientModule production wiring lines remain and no impossible up/ok routing status checks/fixtures remain.
  • Verified code/test diff SHA-256: 27b41a855084b9dd85a7bc2a79fa3251d114ee226a4f1b835e65134c25a4f5a8.

Delivery State

Implementation, testing, documentation assessment, and independent review are complete. Remaining authorized actions: format this final scratchpad append, create one conventional commit, run the required push queue guard, and push only feat/webui-p3r1-routing-mcp; no PR or merge.