Per user correction (2026-05-29): claude-mem without semantic search
is broken. The original plan framed Chroma as "(optional)" in the
architecture diagram, listed `chroma?: boolean | ChromaOptions` as a
disable toggle in `createCmemClient` options, and described Phase 6
search as "FTS if Chroma disabled / Chroma if enabled" — all of which
treats Chroma as a feature flag.
Updated framing:
- Executive Decision: Chroma is required. `createCmemClient` REJECTS
if `uvx chroma-mcp` cannot start.
- Phase 3 options: `chroma?: ChromaOptions` (tuning only, no
enabled-false). Construction includes `chromaSync.ensureReady()`.
- Phase 6: Chroma is the default primary search path. The Postgres FTS
branch is preserved only as a runtime-failure safety net (mirror of
`SearchManager.ts:255`), surfaces `{ degraded: true }`, and emits a
`logger.error('CHROMA', …)` so the broken state is visible.
- Phase 6 verification: `createCmemClient` with chroma-mcp unavailable
MUST reject. Killing chroma-mcp mid-session yields `{ degraded: true }`
with a logged error; a subsequent cold-start `createCmemClient`
rejects again.
- Phase 6 anti-patterns: no `chroma.enabled = false` option.
- Doc-references table: the worker's `CLAUDE_MEM_CHROMA_ENABLED` env
gate is documented as a worker-side footgun that the SDK deliberately
does not honor.
- Correction log added at the bottom of the plan.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
9-phase plan for the cmem-sdk package (embeddable claude-mem I/O on
Postgres runtime) and the foundational `server-beta` → `server` rename.
Phase 1 (rename) is independently shippable and fixes the silent
runtime regression in `runtime-selector.ts` where only the literal
`server-beta` was accepted as the runtime value. Phases 2-9 ship the
SDK on top.
Plan: plans/2026-05-25-cmem-sdk-and-server-rename.md
Deck: plans/2026-05-25-cmem-sdk-and-server-rename-slides.pdf
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>