40ffd9b06c
PidFile::acquire used create_new(true) with Drop-based cleanup, so a pidfile surviving power loss or SIGKILL made the daemon refuse to start until the file was deleted by hand. On AlreadyExists, read the recorded PID and probe it with kill(pid, 0): ESRCH (or unparseable content) means stale, so remove the file and retry the atomic create. A live PID keeps the refusal and now names the holding process. The retry loop is bounded to stay race-safe against a concurrent starter. Closes #1 Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>