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.