Summary
PULSE/Observability/observability.ts hardcodes the runtime dir as ~/.claude/LifeOS (mixed case) while DeployCore deploys the runtime to ALL-CAPS ~/.claude/LIFEOS. On case-sensitive filesystems (Linux) Pulse crash-loops with ENOENT on first start — and as a side effect the crash loop mkdir's a stray REAL ~/.claude/LifeOS/ directory (it captures PULSE/state/pulse.pid), which then shadows any later symlink fix.
On macOS (default case-insensitive APFS) both paths resolve to the same dir, which is why this only bites Linux.
Environment
Ubuntu 24.04, LifeOS v6.0.0, Pulse via manage.sh install (systemd user unit).
Repro
- Fresh install on Linux, Setup toolchain,
manage.sh install.
- Unit enters
activating (auto-restart); pulse-stderr.log shows repeated {"msg":"Pulse crashed","error":"ENOENT: No such file or directory"}.
ls ~/.claude/ now shows BOTH LIFEOS/ and a stray LifeOS/ real dir created by the crash loop.
Workaround (verified)
Stop the unit, remove the stray dir, ln -s ~/.claude/LIFEOS ~/.claude/LifeOS, start → Pulse boots clean (all modules load, port 31337 binds).
Fix suggestion
Use the same constant the deployer uses (LIFEOS, or a shared resolve helper — DeployComponents.resolveLifeosDir already tolerates both). Happy to send a small PR.
Summary
PULSE/Observability/observability.tshardcodes the runtime dir as~/.claude/LifeOS(mixed case) whileDeployCoredeploys the runtime to ALL-CAPS~/.claude/LIFEOS. On case-sensitive filesystems (Linux) Pulse crash-loops withENOENTon first start — and as a side effect the crash loop mkdir's a stray REAL~/.claude/LifeOS/directory (it capturesPULSE/state/pulse.pid), which then shadows any later symlink fix.On macOS (default case-insensitive APFS) both paths resolve to the same dir, which is why this only bites Linux.
Environment
Ubuntu 24.04, LifeOS v6.0.0, Pulse via
manage.sh install(systemd user unit).Repro
manage.sh install.activating (auto-restart);pulse-stderr.logshows repeated{"msg":"Pulse crashed","error":"ENOENT: No such file or directory"}.ls ~/.claude/now shows BOTHLIFEOS/and a strayLifeOS/real dir created by the crash loop.Workaround (verified)
Stop the unit, remove the stray dir,
ln -s ~/.claude/LIFEOS ~/.claude/LifeOS, start → Pulse boots clean (all modules load, port 31337 binds).Fix suggestion
Use the same constant the deployer uses (
LIFEOS, or a shared resolve helper —DeployComponents.resolveLifeosDiralready tolerates both). Happy to send a small PR.