Skip to content

feat: add macOS launchd daemon support#172

Merged
ScriptedAlchemy merged 6 commits into
ScriptedAlchemy:masterfrom
spa5k:feat/macos-launchd-daemon-support
Jul 1, 2026
Merged

feat: add macOS launchd daemon support#172
ScriptedAlchemy merged 6 commits into
ScriptedAlchemy:masterfrom
spa5k:feat/macos-launchd-daemon-support

Conversation

@spa5k

@spa5k spa5k commented Jul 1, 2026

Copy link
Copy Markdown
Contributor

Summary

  • add macOS launchd user-agent support for daemon install, refresh, uninstall, and status
  • document the finalized macOS launchd daemon support plan
  • split daemon service management into src/daemon/service.rs while keeping the existing daemon API

Tests

  • cargo check -p tracedecay
  • cargo test -p tracedecay --lib daemon

@changeset-bot

changeset-bot Bot commented Jul 1, 2026

Copy link
Copy Markdown

⚠️ No Changeset found

Latest commit: 61022e4

Merging this PR will not cause a version bump for any packages. If these changes should not result in a new version, you're good to go. If these changes should result in a version bump, you need to add a changeset.

Click here to learn what changesets are, and how to add one.

Click here if you're a maintainer who wants to add a changeset to this PR

ScriptedAlchemy and others added 3 commits July 1, 2026 22:37
- Make ServiceRunner variants unconditional so match dispatch compiles on
  every platform (fixes E0004 zero-arm matches on Windows); platform
  selection now lives only in ServiceRunner::current()
- Fix Linux clippy failures (unused parameters, unnecessary Result wraps,
  underscore-prefixed binding read in the systemd arm)
- Restore the PermissionDenied socket-state arm dropped in the module
  split and type socket state as an enum with a Display impl instead of
  comparing display strings
- Make macOS install idempotent: bootout (tolerating not-loaded) before
  enable/bootstrap/kickstart, shared with the refresh path
- Replace the positional Vec-of-Vec launchctl command plan with
  LaunchdCommand entries carrying an explicit failure mode; match
  not-loaded errors against launchctl stderr instead of formatted
  error prose
- Disable the launchd agent on install --no-start so the plist stays
  inert at the next login, and create runtime dirs on --no-start too
- Preserve the TRACEDECAY_DATA_DIR override from the installed plist
  when refreshing so refresh from a clean shell keeps the data dir
- Move service tests into src/daemon/service.rs, removing the
  pub(super) test-only leaks and the test-gating asymmetry
@ScriptedAlchemy ScriptedAlchemy merged commit df5f4d2 into ScriptedAlchemy:master Jul 1, 2026
18 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants