From 4ab601fc9fbfe2140e95610b5fda1bb36bfc2f85 Mon Sep 17 00:00:00 2001 From: Alex Newman Date: Wed, 18 Feb 2026 20:12:46 -0500 Subject: [PATCH] docs: update CHANGELOG.md for v10.3.1 Co-Authored-By: Claude Opus 4.6 --- CHANGELOG.md | 30 +++++++++++++++--------------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index c3e06cbc..681ff715 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,21 @@ All notable changes to claude-mem. +## [v10.3.1] - 2026-02-19 + +## Fix: Prevent Duplicate Worker Daemons and Zombie Processes + +Three root causes of chroma-mcp timeouts identified and fixed: + +### PID-based daemon guard +Exit immediately on startup if PID file points to a live process. Prevents the race condition where hooks firing simultaneously could start multiple daemons before either wrote a PID file. + +### Port-based daemon guard +Exit if port 37777 is already bound — runs before WorkerService constructor registers keepalive signal handlers that previously prevented exit on EADDRINUSE. + +### Guaranteed process.exit() after HTTP shutdown +HTTP shutdown (POST /api/admin/shutdown) now calls `process.exit(0)` in a `try/finally` block. Previously, zombie workers stayed alive after shutdown, and background tasks reconnected to chroma-mcp, spawning duplicate subprocesses contending for the same data directory. + ## [v10.3.0] - 2026-02-18 ## Replace WASM Embeddings with Persistent chroma-mcp MCP Connection @@ -1436,18 +1451,3 @@ Thanks @yungweng for the detailed bug report! - Updated worker CLI scripts to reference worker-service.cjs directly - Simplified hook command configurations -## [v8.2.8] - 2025-12-29 - -## Bug Fixes - -- Fixed orphaned chroma-mcp processes during shutdown (#489) - - Added graceful shutdown handling with signal handlers registered early in WorkerService lifecycle - - Ensures ChromaSync subprocess cleanup even when interrupted during initialization - - Removes PID file during shutdown to prevent stale process tracking - -## Technical Details - -This patch release addresses a race condition where SIGTERM/SIGINT signals arriving during ChromaSync initialization could leave orphaned chroma-mcp processes. The fix moves signal handler registration from the start() method to the constructor, ensuring cleanup handlers exist throughout the entire initialization lifecycle. - -**Full Changelog**: https://github.com/thedotmack/claude-mem/compare/v8.2.7...v8.2.8 -