Commit 6554cd
2026-03-13 18:23:36 Claude (MCP): [mcp] Create Phase 1 gate results page| /dev/null .. Dev/Phase_1_Gate_Results.md | |
| @@ 0,0 1,56 @@ | |
| + | --- |
| + | category: reference |
| + | tags: [meta, phase-1, gate] |
| + | last_updated: 2026-03-13 |
| + | confidence: high |
| + | --- |
| + | |
| + | # Phase 1 Gate Results |
| + | |
| + | Validation performed 2026-03-13. Results for each exit criterion from [[Design/Phase_Gates]]. |
| + | |
| + | ## Summary |
| + | |
| + | **6/7 criteria PASS. 1 pending human validation (MCP from Claude.ai).** |
| + | |
| + | ## Results |
| + | |
| + | | Criterion | Result | Notes | |
| + | |-----------|--------|-------| |
| + | | Web UI works | **PASS** | Human confirmed: pages load, edit, save at dev.wikibot.io | |
| + | | REST API works | **PASS** (11/12) | All CRUD, search, semantic search, history endpoints work. Minor issue: `GET /pages/{path}/links` returns 404 (route treats path as page name). MCP `get_links` tool works via different code path. | |
| + | | MCP works (all 12 tools) | **PENDING** | Blocked on P1-9 (OAuth routing). P1-9 now fixed and deployed. Awaiting human test from Claude.ai. | |
| + | | Semantic search works | **PASS** | 5/5 queries returned relevant results. On-topic distances 0.46–0.79, off-topic 0.89+ (correctly low confidence). Index has ~233 chunks across ~30 pages. | |
| + | | Git authorship | **PASS** | API commits show "Claude (MCP)" as expected. Historical "Claude (Dev)" from earlier config. One "Otterwiki Robot" initial commit. No anomalies. | |
| + | | Routing + TLS | **PASS** (6/6) | TLSv1.3, Amazon RSA 2048, cert expires 2026-09-26. Custom domain resolves. HTTPS-only (no port 80 — acceptable). Non-ASCII URLs work. | |
| + | | Architecture decision | **PASS** | Documented: separate Lambdas for Otterwiki (VPC+EFS) and MCP (stateless, no VPC). Rationale in mcp_server.py docstring. | |
| + | |
| + | ## Performance |
| + | |
| + | | Endpoint | Cold | Warm | Assessment | |
| + | |----------|------|------|------------| |
| + | | Wiki page (`/Home`) | 1.0s | 0.5s | Acceptable | |
| + | | API health | 0.25s | 0.25s | Fast | |
| + | | Authenticated API endpoints | — | — | Not timed (auth header issue in test agent) but functional tests passed in < 1s | |
| + | |
| + | ## Issues Found |
| + | |
| + | ### Minor: `/pages/{path}/links` route (REST API) |
| + | |
| + | `GET /api/v1/pages/Home/links` returns 404 — the Flask router treats `Home/links` as a two-segment page path rather than recognizing `/links` as a sub-resource. The `/history` sub-resource works fine. The MCP `get_links` tool works correctly (uses a different URL pattern). Low priority — does not block gate. |
| + | |
| + | ### Fixed: P1-9 MCP OAuth Routing |
| + | |
| + | OAuth discovery endpoints were routed to Otterwiki instead of MCP Lambda. Fixed by adding `ANY /.well-known/{proxy+}` API Gateway route and correcting `MCP_BASE_URL`. See [[Tasks/P1-9_MCP_OAuth_Routing]]. |
| + | |
| + | ### Note: API auth header |
| + | |
| + | The REST API uses `Authorization: Bearer <token>`, not `X-API-Key`. Some test agents initially used the wrong header. Not a bug — just a documentation clarification. |
| + | |
| + | ## Remaining Validation |
| + | |
| + | - [ ] **Human test: MCP from Claude.ai** — Connect to `https://dev.wikibot.io/mcp` via Claude.ai MCP connector (leave Client ID/Secret blank). Exercise all 12 tools. |
| + | |
| + | ## Go/No-Go |
| + | |
| + | Pending the MCP-from-Claude.ai validation. All other criteria pass. |