fix(installer): silence cosmetic launchd boot-out error on fresh install - #570
Merged
jlong merged 1 commit intoAug 16, 2026
Conversation
The daemon-registration step printed "Boot-out failed: 3: No such process" mid-install, which looks like a real error even though the install proceeds correctly and the daemon ends up running. Key decision — the fix is NOT in scripts/install.sh (as the task suggested), because install.sh only calls `shelbi daemon install`; it never runs launchctl directly and can't selectively suppress one line of that subcommand's stderr without hiding genuine errors. The scary line comes from Rust: the primary bootout in `bootstrap_launchd` already nulls stdout/stderr, but `migrate_legacy_launchd` ran `launchctl bootout` with `.status()`, inheriting stderr. When no legacy-labeled daemon is loaded — every fresh install, and every upgrade that isn't from a pre-rename version — that bootout exits 3 and prints the "No such process" noise. Fixed at the source by nulling its stdout/stderr, matching `bootstrap_launchd`. Upgrade path is unchanged: the bootout still runs (now silently), so a loaded legacy daemon is still retired before the new one bootstraps. `shelbi daemon status` reports the daemon running in both cases. Note: this lands in crates/, not the scripts/install.sh Zen danger path the task anticipated — so the danger-path review gate won't fire. Flagging here so the reviewer knows the root cause moved. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
jlong
deleted the
jlong/installer-suppress-cosmetic-launchd-boot-out-no-such-process-error-on-fresh-install
branch
August 16, 2026 19:55
jlong
restored the
jlong/installer-suppress-cosmetic-launchd-boot-out-no-such-process-error-on-fresh-install
branch
August 16, 2026 20:43
5 tasks
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Task
The installer runs
launchctl bootoutto unload any previously-running daemon before itbootstraps the new one, so upgrades replace cleanly. On a fresh install (or any time the daemon isn't currently loaded)bootouthas nothing to unload and exits withBoot-out failed: 3: No such process. This looks like a real error to the user even though it's benign: the install proceeds correctly and the daemon ends up running.Current Behavior
Fresh install prints a scary-looking line mid-run:
launchctl bootoutreturns exit code 3 ("No such process") because there was no loaded daemon to boot out. The install still succeeds andshelbi daemon statusreports the daemon running.Expected Behavior
On a fresh install (nothing loaded), the boot-out step is a no-op with no error line — optionally an informational note like
no existing daemon to stop. On an upgrade (daemon already loaded), the old daemon is still stopped before the new one is bootstrapped, exactly as today.Technical Details
The fix is in
scripts/install.sharound the daemon-registration step. Tolerate the "no such process" case rather than letting it surface as an error, e.g. guard thebootout(launchctl bootout ... 2>/dev/null || true) or check the load state first (launchctl print/ list) and only boot out when a daemon is actually loaded. Keep the upgrade path (stop-then-bootstrap) working.Note:
scripts/install.shis a Zen danger path, so this will not auto-merge — it will be surfaced for John's review at handoff.Acceptance Criteria
Boot-out failed: 3: No such process(or any error-looking line) for the boot-out step.shelbi daemon statusreports the daemon running in both the fresh-install and upgrade cases.Auto-opened by Shelbi — review at: /Users/jlong/.shelbi/projects/shelbi/tasks/installer-suppress-cosmetic-launchd-boot-out-no-such-process-error-on-fresh-install.md