Skip to content

v6 Pulse won't serve on fresh install: missing runtime deps + unbuilt dashboard, corrupted PULSE.toml cron paths (/n/ rename scar), launchd EX_CONFIG #1435

Description

@rrittich

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.pulselast 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.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions