---
name: a-daemon-restart-strands-persistent-shells-boot-instant-is-machine-boot
description: "A daemon-only restart (every self-update) leaves every persistent shell (PACER-0, alchemy-N) offline for good — the restore discriminant compares the launch to the MACHINE boot instant, so a daemon restart reads as a force-kill; recovery is `spt shell relink <id>` or any `shell cmd`."
metadata: 
  node_type: memory
  type: project
  originSessionId: 77b77a80-faae-4001-b2bd-37026934e11b
  modified: 2026-09-08T10:37:13.472Z
---

Measured 2026-09-08 10:26Z on hfenduleam (spt-core 0.67.0). Daemon restarted 2026-09-07 08:03Z with no
machine reboot (machine boot 2026-09-04 08:02:53Z). Every persistent shell died with it; the reconciler
healed each record `online -> offline` (8 `SHELL_RECORD_HEALED` lines) and NOTHING relaunched: zero
`SHELL_BOOT_RESTORED` / `SHELL_OWNER_ONLINE_RESTORED` lines in the whole generation. My pacer was silent
27 h before the operator asked why.

**Why:** `shellwake::launch_predates_boot` compares the parked launch stamp to `boot_instant_ms` = now minus
`GetTickCount64` (MACHINE boot). A shell launched at boot+46 s never predates that boot, so all three
triggers (boot sweep, owner-online edge, watcher) land in the "force-killed THIS boot => not eligible" arm.
The freeze that protects an operator's deliberate kill (releases#78 leg c) cannot tell a daemon restart
from a kill. `alchemy-0` came back only because `spt shell cmd` wakes an offline persistent instance on
demand; PACER gets no owner commands, so it stays down. Filed on spt-bs-releases 2026-09-08 (daemon-restart
face of KNOWN-HAZARDS 2.7 / [[REQ-HAZARD-RESTART-STRANDS-PERSISTENT-SHELLS]]).

**OPERATOR RULED 2026-09-08 10:37Z (on #287):** for `persistent = true` shells the force-kill freeze does not
apply — "such shells must come online anytime the endpoint comes online, end of story." The predates-boot
conjunct leaves the persistent path; an operator who wants one down uses teardown or a non-persistent
manifest, never a kill. Until that lands, the how-to-apply below is the workaround, not the contract.

**How to apply:** after ANY daemon restart or update, read `spt shell list` — every persistent instance
offline is this — and `spt shell relink <id>` each of your own (an owner can only relink its own; tell
peers theirs are down). A silent pacer is not "pacer idle"; check the SHELLS block of the now-signal.
Do not wait for the wake edge, it will not come. Kin: [[silent-peer-may-be-out-of-usage-not-held]] (an
absence that has no way to appear is not data), [[a-tombstone-silences-the-pump-while-status-reads-held]].
