Summary
On a fresh v6 install, the Pulse dashboard (localhost:31337) doesn't serve and the launchd service crash-loops. These are several independent packaging/config issues — the daemon code itself is fine (it runs correctly in the foreground once its deps are present and it has a normal env). Tested on v6.0.3 (installed) and verified the config corruption persists in v6.0.5 (latest).
Env: macOS (Darwin), bun, installed via the AI-native installer; interview interrupted then resumed.
Issues
1. Pulse runtime ships without its dependencies → dashboard 404s
LIFEOS/PULSE has no installed deps for the daemon runtime. On startup:
Observability module not available: Cannot find package 'yaml' from '.../LIFEOS/PULSE/Observability/observability.ts'
The Observability module fails to load and every dashboard route 404s. Fixed locally with cd LIFEOS/PULSE && bun install && bun add yaml.
2. Observability dashboard build not present → 503
LIFEOS/PULSE/Observability/out/index.html is absent on install:
DASHBOARD BUILD MISSING — all dashboard pages will 503 until rebuilt
Fixed locally with cd LIFEOS/PULSE/Observability && bun install && bun run build.
3. Corrupted cron paths in PULSE.toml (a rename scar) — v6.0.5
In v6.0.5 LIFEOS/PULSE/PULSE.toml, the DA cron jobs are mangled:
[[job]]
name = "n"
command = "bun run n/tasks.ts"
# also: "bun run n/heartbeat.ts", "bun run n/diary.ts", "bun run n/growth.ts"
The bare n/ and name = "n" look like a botched search-and-replace from the "Rename in the Code" work — a path segment collapsed to a lone n. (In v6.0.3 the same jobs point at Assistant/checks/{tasks,heartbeat,diary,growth}.ts, which also aren't shipped in the payload.) Either way the target modules don't exist, so every minute:
assistant-tasks failed: Module not found "…/tasks.ts"
Non-fatal (skipped after 3 failures) but noisy. The same /n/ scar shows up elsewhere too (e.g. the user-index "Walks ~/.claude/n/").
4. launchd service exits EX_CONFIG (78) — plist bypasses start-pulse.sh
The deployed com.lifeos.pulse plist runs bun run pulse.ts directly, but start-pulse.sh (the intended entrypoint) does security unlock-keychain first and carries the shell env. Under launchd's minimal environment (no keychain, no shell env), the daemon exits EX_CONFIG (78) and crash-loops (launchctl print … com.lifeos.pulse → last exit code = 78). The identical daemon runs perfectly in the foreground, inheriting the shell env. Suggest the plist ProgramArguments invoke start-pulse.sh, or the deploy otherwise provide the needed env/secrets.
Impact
After a standard install, localhost:31337 serves nothing (404/503) and the managed service crash-loops. Once deps are installed, the dashboard is built, and it runs in an env with secrets, the daemon serves correctly and renders real TELOS data.
Suggested fixes
- Install/vendor the
LIFEOS/PULSE runtime deps (incl. yaml) and ship or build Observability/out during DeployComponents/setup.
- Repair the
PULSE.toml cron paths (n/… → the real module paths) and ship the referenced Assistant/checks/*.ts (or drop the jobs).
- Point the pulse launchd plist at
start-pulse.sh so it gets keychain/env.
Happy to open PRs for #1–#3 if useful.
Summary
On a fresh v6 install, the Pulse dashboard (
localhost:31337) doesn't serve and the launchd service crash-loops. These are several independent packaging/config issues — the daemon code itself is fine (it runs correctly in the foreground once its deps are present and it has a normal env). Tested on v6.0.3 (installed) and verified the config corruption persists in v6.0.5 (latest).Env: macOS (Darwin),
bun, installed via the AI-native installer; interview interrupted then resumed.Issues
1. Pulse runtime ships without its dependencies → dashboard 404s
LIFEOS/PULSEhas no installed deps for the daemon runtime. On startup:The Observability module fails to load and every dashboard route 404s. Fixed locally with
cd LIFEOS/PULSE && bun install && bun add yaml.2. Observability dashboard build not present → 503
LIFEOS/PULSE/Observability/out/index.htmlis absent on install:Fixed locally with
cd LIFEOS/PULSE/Observability && bun install && bun run build.3. Corrupted cron paths in
PULSE.toml(a rename scar) — v6.0.5In v6.0.5
LIFEOS/PULSE/PULSE.toml, the DA cron jobs are mangled:The bare
n/andname = "n"look like a botched search-and-replace from the "Rename in the Code" work — a path segment collapsed to a lonen. (In v6.0.3 the same jobs point atAssistant/checks/{tasks,heartbeat,diary,growth}.ts, which also aren't shipped in the payload.) Either way the target modules don't exist, so every minute:Non-fatal (skipped after 3 failures) but noisy. The same
/n/scar shows up elsewhere too (e.g. the user-index "Walks~/.claude/n/").4. launchd service exits
EX_CONFIG(78) — plist bypassesstart-pulse.shThe deployed
com.lifeos.pulseplist runsbun run pulse.tsdirectly, butstart-pulse.sh(the intended entrypoint) doessecurity unlock-keychainfirst and carries the shell env. Under launchd's minimal environment (no keychain, no shell env), the daemon exitsEX_CONFIG (78)and crash-loops (launchctl print … com.lifeos.pulse→last exit code = 78). The identical daemon runs perfectly in the foreground, inheriting the shell env. Suggest the plistProgramArgumentsinvokestart-pulse.sh, or the deploy otherwise provide the needed env/secrets.Impact
After a standard install,
localhost:31337serves nothing (404/503) and the managed service crash-loops. Once deps are installed, the dashboard is built, and it runs in an env with secrets, the daemon serves correctly and renders real TELOS data.Suggested fixes
LIFEOS/PULSEruntime deps (incl.yaml) and ship or buildObservability/outduringDeployComponents/setup.PULSE.tomlcron paths (n/…→ the real module paths) and ship the referencedAssistant/checks/*.ts(or drop the jobs).start-pulse.shso it gets keychain/env.Happy to open PRs for #1–#3 if useful.