hephaestus/docs
Erich Blume f6b27414a8
All checks were successful
Build / validate (pull_request) Successful in 8m39s
fix(heph): make macOS heph daemon restart race-free
`restart` bootstrapped immediately after `bootout`, but `launchctl bootout` is
asynchronous: launchd may still be killing/reaping the job and removing its
label when the command returns. Bootstrapping into that transitional domain
fails with a generic `5: Input/output error`, intermittently — the odds depend
on how fast hephd (sync client + SQLite + a heph-quickadd child) shuts down.

- Wait for the label to actually clear (poll `launchctl print`, bounded) before
  re-bootstrapping, and retry the bootstrap to cover the residual settle window.
- When the plist is unchanged (the common binary-upgrade restart), use
  `launchctl kickstart -k` to restart the loaded job atomically — no
  bootout/bootstrap, no race. The full reload path is reserved for genuine
  config changes, where launchd must re-read the plist.

Start's bootstrap shares the same retry helper.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-08 13:38:47 -07:00
..
changelog.d fix(heph): make macOS heph daemon restart race-free 2026-06-08 13:38:47 -07:00
explanation doc(explanation): hub+spoke data-evolution / migration rules 2026-06-05 17:31:11 -07:00
how-to feat(heph): bake daemon mode/hub/oidc/self-update-interval into the service 2026-06-08 13:25:15 -07:00
reference docs: release bumps Cargo.toml/lock on a tag-only commit; --version reports X.Y.Z (sha) 2026-06-04 09:37:14 -07:00
tutorials Set up hephaestus from template and add design + tech spec 2026-05-31 09:37:28 -07:00
index.md Initial commit 2026-05-31 06:13:36 -07:00
quartz.config.ts Set up hephaestus from template and add design + tech spec 2026-05-31 09:37:28 -07:00
quartz.layout.ts Initial commit 2026-05-31 06:13:36 -07:00