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:
- Make routing consume the canonical
ProviderHealthStatusenum, withhealthyanddegradedroutable anddownnon-routable, at both routing decision sites. - Wire
McpClientModuleintoCommandsModule, makeMcpClientServicerequired, remove the unreachable unavailable-service branch, and prove/mcp statusreaches 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
- Confirm exact base/branch and inspect every cited source/test anchor plus all direct
CommandExecutorServiceconstruction sites. - Record baseline gateway and focused routing/commands/MCP test totals.
- Add regression tests first and run focused tests to capture expected RED failures.
- Apply only the typed routing helper/signature changes and required MCP module/constructor/guard changes; update impossible
upfixtures. - Run focused tests, all user-required verification gates, lockfile/scope/diff checks, and record counts.
- Obtain independent spec and code/security review; remediate any findings and repeat affected gates.
- 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 originrc=0.origin/nextconfirmed exactly20718b5a273d243363a4f5cbef5bbf692a805bdb.- Local and remote
feat/webui-p3r1-routing-mcpwere absent before creation. - Branch creation rc=0; HEAD equals the required base.
- Harness-owned
.mosaic/orchestrator/session.lockwas 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/okgates rejectedhealthyanddegraded. - Routing GREEN: canonical
ProviderHealthStatusmap types, oneisRoutablehelper, and both comparison sites corrected; focused routing suite passed. - MCP behavior test now drives
/mcp statusthrough 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 productionMcpClientModuleimport/registration temporarily removed: rc=1, exact failureexpected [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/mosaicsucceeded.
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/
undefinedtest suggestion was not adopted: the brief explicitly requires the three canonical statuses (healthy,degraded,down) and forbids scope expansion; runtime behavior for absent keys remainsundefined→ non-routable through the required helper signature.
Documentation Assessment
docs/PRD.mdalready 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.yamlSHA-256 before/after frozen install:9acaa89d213b3281e757b6edf6fdb8727176570d725b78a0de234c61a7f3c332; diff versusorigin/nextrc=0.- Verified no changed path under
apps/web/**, provider service/adapters,agent.service.ts,chat.gateway.ts, or lockfile. - Verified both
McpClientModuleproduction wiring lines remain and no impossibleup/okrouting 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.