From c2d033ce9b3de9fbf7180765e44241410d320eb0 Mon Sep 17 00:00:00 2001 From: Alex Newman Date: Sat, 25 Apr 2026 14:07:21 -0700 Subject: [PATCH] docs: update CHANGELOG.md for v12.4.1 --- CHANGELOG.md | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index b6e49e43..36c630a7 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,24 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). +## [12.4.1] - 2026-04-25 + +## perf(chroma): Cache backfill watermarks to skip per-restart Chroma scans + +Worker restarts were re-scanning Chroma's full metadata for every project on every boot to determine which sqlite ids were already embedded. With ~253 projects and ~92k embeddings, this pegged `chroma-mcp` at 100–422% CPU on each spawn. + +### What changed +- New `~/.claude-mem/chroma-sync-state.json` watermark cache — per-project highest synced sqlite_id for observations, summaries, and prompts. +- Backfill SQL changed from `id NOT IN (huge list)` to `id > watermark`. +- Live `syncObservation` / `syncSummary` / `syncUserPrompt` bump the watermark on success. +- One-time bootstrap derives initial watermarks from a single Chroma scan if the state file is missing — after that, Chroma metadata is never scanned again on startup. +- Watermark advances per batch, so partial-failure runs resume cleanly. + +### Result +- Chroma CPU on worker restart: **422% → 0%**. +- State file size for 253 projects: **~3.7 KB**. +- Backfill startup time: **seconds → near-instant** after bootstrap. + ## [12.3.9] - 2026-04-22 ## Highlights