v10.2.4

thedotmack/claude-memv10.2.4Feb 18, 2026by thedotmack

AI Summary

This release fixes critical bugs in the Chroma vector database backfill system. The backfill process now runs on worker startup to ensure all SQLite observations are synced to Chroma, and fixes a critical routing bug that caused orphan collections instead of using the shared collection.

Key Highlights

  • Backfill now runs automatically on worker startup to sync all SQLite observations to Chroma
  • Fixed critical collection routing bug - now uses shared `cm__claude-mem` collection instead of creating per-project orphans
  • Hardened collection name sanitization for project names with special characters
  • Eliminated shared mutable state by passing project as parameter
  • Added Chroma readiness guard to prevent errors during startup

New Features

  • Backfill all projects on startup via `backfillAllProjects()`
  • Fixed collection routing to use shared Chroma collection
  • Collection name sanitization for special characters (e.g., trailing non-alphanumeric)
  • Refactored `ensureBackfilled()` and `getExistingChromaIds()` to accept project parameter
  • Chroma server readiness check before backfill runs

Full Release Notes

## Chroma Vector DB Backfill Fix

Fixes the Chroma backfill system to correctly sync all SQLite observations into the vector database on worker startup.

### Bug Fixes

- **Backfill all projects on startup** — `backfillAllProjects()` now runs on worker startup, iterating all projects in SQLite and syncing missing observations to Chroma. Previously `ensureBackfilled()` existed but was never called, leaving Chroma with incomplete data after cache clears.

- **Fixed critical collection routing bug** — Backfill now uses the shared `cm__claude-mem` collection (matching how DatabaseManager and SearchManager operate) instead of creating per-project orphan collections that no search path reads from.

- **Hardened collection name sanitization** — Project names with special characters (e.g., "YC Stuff") are sanitized for Chroma's naming constraints, including stripping trailing non-alphanumeric characters.

- **Eliminated shared mutable state** — `ensureBackfilled()` and `getExistingChromaIds()` now accept project as a parameter instead of mutating instance state, keeping a single Chroma connection while avoiding fragile property mutation across iterations.

- **Chroma readiness guard** — Backfill waits for Chroma server readiness before running, preventing spurious error logs when Chroma fails to start.

### Changed Files

- `src/services/sync/ChromaSync.ts` — Core backfill logic, sanitization, parameter passing
- `src/services/worker-service.ts` — Startup backfill trigger + readiness guard
- `src/utils/logger.ts` — Added `CHROMA_SYNC` log component