v13.12.3
thedotmack/claude-memv13.12.3Jul 23, 2026by thedotmack
AI Summary
Hotfix for a self-perpetuating stale-worker recycle loop caused by version mismatches, which could result in thousands of restarts and timeouts.
Key Highlights
- Fixes infinite worker restart loop on version mismatch.
- Hooks now explicitly kill the stale worker before spawning a new one.
- Resolves the specific case where the dying worker spawns the old version.
Full Release Notes
## Hotfix: self-perpetuating stale-worker recycle loop (#3378) **The bug.** On a version mismatch, hooks asked the running (stale) worker to restart itself — and the dying worker spawned its successor using its *own install's* code and resolver. A ≤13.11.0 worker would respawn its own version, re-bind the worker port before the hook's correctly-resolved lazy-spawn could, and the mismatch recurred on every prompt, forever. One report measured **2,424 recycles in a single day**, with every `UserPromptSubmit` ending in a ~40s hook timeout. Because the buggy handoff ran inside the *old* install's process, fixing the new version's resolver alone could never break the loop. **The fix.** Hooks no longer delegate the recycle to the corpse. On version mismatch the hook now: 1. reads the owner-verified worker PID file, 2. `SIGKILL`s the stale worker — the only teardown guaranteed to execute zero stale-version code, 3. waits for the port to actually close, and 4. spawns the resolved installed version itself, via the existing lazy-spawn path and the single version oracle. The dying-worker successor handoff now serves only CLI-initiated `claude-mem restart`, where the running install *is* the resolved install. **If you're currently stuck in the loop:** just update. The first hook that runs after this version installs will kill the resident stale worker and take over — no manual cleanup needed. **Not addressed in this release** (still open): the `FOREIGN KEY constraint failed` background-init error also reported in #3378, and the Windows stale-socket port hold in #3380.