v10.3.1
thedotmack/claude-memv10.3.1Feb 19, 2026by thedotmack
AI Summary
This is a bug fix release addressing three root causes of chroma-mcp timeouts related to duplicate worker daemons and zombie processes. The fixes include PID-based and port-based guards to prevent multiple daemons from starting simultaneously, and guaranteed process.exit() after HTTP shutdown to prevent zombie workers.
Key Highlights
- PID-based daemon guard prevents multiple daemons from starting when hooks fire simultaneously
- Port-based daemon guard (port 37777) exits early before signal handlers are registered
- Guaranteed process.exit(0) in try/finally block after HTTP shutdown prevents zombie workers
- Fixes race condition where multiple daemons could start before PID file was written
- Prevents background tasks from reconnecting and spawning duplicate subprocesses
New Features
- PID-based daemon guard that exits immediately if PID file points to a live process
- Port-based daemon guard that exits if port 37777 is already bound
- Guaranteed process.exit() after HTTP shutdown in try/finally block
Full Release Notes
## 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.