diff --git a/docs/MEMPALACE_INTEGRATION_ROADMAP.md b/docs/MEMPALACE_INTEGRATION_ROADMAP.md index bc0d7ed..7d210ed 100644 --- a/docs/MEMPALACE_INTEGRATION_ROADMAP.md +++ b/docs/MEMPALACE_INTEGRATION_ROADMAP.md @@ -864,12 +864,12 @@ export async function getPalaceStats(): Promise; | Phase | Description | Days | Tests | Depends On | |-------|-------------|------|-------|------------| | **N0** | `@bytelyst/palace` shared package in common-plat (types, cosine, dedup, decay, extraction, KG, wakeup) — d1c6cf4 | 3-4 | 91 ✅ | — | -| **N1** | Palace Core (Cosmos containers, repository, extraction, dedup, encryption) — consumes `@bytelyst/palace` | 4-5 | ~30 | N0 | -| **N2** | Wake-Up Context (L0/L1/L2 at ~600 tokens) | 3 | ~12 | N1 | -| **N3** | Knowledge Graph (temporal entity triples) | 4 | ~16 | N1 | -| **N4** | Auto-Save Hooks (note create/update/agent action triggers) | 3 | ~10 | N1 | -| **N5** | Palace API Routes (REST endpoints + Zod validation) | 3 | ~14 | N1, N2, N3 | -| **N6** | MCP Memory Tools (6 `mempalace_*` tools) | 2 | ~10 | N1, N5 | +| **N1** | Palace Core (Cosmos containers, repository, extraction, dedup, encryption) — 38006af…632b5df | 4-5 | 31 ✅ | N0 | +| **N2** | Wake-Up Context (L0/L1/L2 at ~600 tokens) — a5dbeac | 3 | 9 ✅ | N1 | +| **N3** | Knowledge Graph (temporal entity triples) — 31bdb0a | 4 | 10 ✅ | N1 | +| **N4** | Auto-Save Hooks (note create/update/agent action triggers) — 0af5f87 | 3 | 7 ✅ | N1 | +| **N5** | Palace API Routes (REST endpoints + Zod validation) — be2f4ff | 3 | 9 ✅ | N1, N2, N3 | +| **N6** | MCP Memory Tools (6 `mempalace_*` tools) — c7c1eba | 2 | 7 ✅ | N1, N5 | | **N7** | Web UI (palace panel, KG view, timeline, stats) — e6dacbe | 4 | 21 ✅ | N5 | | **Total** | | **27-32 days** | **~125** | | @@ -960,11 +960,11 @@ This gives auto-saving memories on note create/update after N1+N4 (~9 days), wit Every phase must satisfy these checks before merging: -- [ ] **Every new Cosmos container** uses `/userId` as partition key -- [ ] **Every repository function** takes `userId` as first parameter -- [ ] **Every query filter** includes `userId` — no exceptions -- [ ] **Every route handler** extracts userId via `getUserId(req)` — never from request body/params -- [ ] **Every test file** includes at least one cross-user isolation test -- [ ] **No endpoint** accepts userId as a URL parameter or request body field -- [ ] **Field encryption** uses `userId` in encryption context -- [ ] **MCP tools** use `requireUserId(req)` guard (from existing pattern) +- [x] **Every new Cosmos container** uses `/userId` as partition key — all 6 containers +- [x] **Every repository function** takes `userId` as first parameter +- [x] **Every query filter** includes `userId` — no exceptions +- [x] **Every route handler** extracts userId via `getUserId(req)` — never from request body/params +- [x] **Every test file** includes at least one cross-user isolation test +- [x] **No endpoint** accepts userId as a URL parameter or request body field +- [x] **Field encryption** uses `userId` in encryption context +- [x] **MCP tools** use `requireUserId(req)` guard (from existing pattern)