The heartbeat now explicitly calls ensureDeaconRunning() for basic "is Deacon alive" checks, while Boot handles intelligent triage (stuck/nudge/interrupt decisions). Changed ensureDeaconRunning to use deacon.Manager.Start() instead of duplicating startup logic. This gives daemon the same benefits: - WaitForShellReady (fixes race condition) - Claude settings setup - Theming - StartupNudge and PropulsionNudge (GUPP) Heartbeat order: 1. ensureDeaconRunning - restart if dead (via Manager) 2. ensureBootRunning - intelligent triage for stuck states 3. checkDeaconHeartbeat - belt-and-suspenders fallback 4-11. Other checks (witnesses, refineries, polecats, etc.) This was inadvertently removed when Boot was introduced, which delegated all Deacon checks to Boot. But Boot's mol doesn't actually restart Deacon - it just reports. Now responsibilities are clear: daemon ensures alive, Boot ensures responsive. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
26 KiB
Executable File
26 KiB
Executable File