feat: implement daemon dependency resolution#135
Merged
Conversation
The rust-embed assets folder was not being included in the crate package because the include path was wrong (assets/**/* instead of src/web/assets/**/*). This was causing Release-plz to fail. Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Add support for the `depends` field in daemon configuration, allowing daemons to declare dependencies on other daemons. When starting a daemon, its dependencies are automatically started first in the correct order. - Add `depends: Vec<String>` field to daemon config and state - Implement topological sort (Kahn's algorithm) for dependency resolution - Start daemons level-by-level (parallel within levels, sequential between) - Detect and report circular dependencies - Skip already-running dependencies (don't restart them) - Force flag only affects explicitly requested daemons, not their deps - Add comprehensive unit and E2E tests for dependency behavior Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Add detailed explanation of dependency behavior including auto-start, parallel execution, circular detection, and force flag behavior. Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This was referenced Jan 19, 2026
Merged
jdx
added a commit
that referenced
this pull request
Jan 19, 2026
## Summary - Add missing `depends` field to `RunOptions` in restart command ## Problem The restart command (PR #134) was merged after the daemon dependencies feature (PR #135), causing a build failure on main due to the missing `depends` field in `RunOptions`. ## Test plan - [x] `cargo build` passes 🤖 Generated with [Claude Code](https://claude.com/claude-code) <!-- CURSOR_SUMMARY --> --- > [!NOTE] > Ensures the restart command constructs `RunOptions` with an explicit empty `depends` list when calling `ipc.run`, aligning with the updated `RunOptions` struct. > > - Update `src/cli/restart.rs` to set `depends: vec![]` in `RunOptions` > > <sup>Written by [Cursor Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit 6874f15. This will update automatically on new commits. Configure [here](https://cursor.com/dashboard?tab=bugbot).</sup> <!-- /CURSOR_SUMMARY --> Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com>
jdx
added a commit
that referenced
this pull request
Jan 19, 2026
## 🤖 New release * `pitchfork-cli`: 0.3.0 -> 0.3.1 <details><summary><i><b>Changelog</b></i></summary><p> <blockquote> ## [0.3.1](v0.3.0...v0.3.1) - 2026-01-19 ### Added - implement daemon dependency resolution ([#135](#135)) - add restart command to CLI ([#134](#134)) ### Fixed - restart command preserves daemon dependency configuration ([#142](#142)) - add missing depends field to restart command ([#136](#136)) - set IPC socket permissions to 0600 for security ([#133](#133)) - handle shell command parsing errors instead of silently failing ([#132](#132)) ### Other - reduce unnecessary daemon cloning in loops ([#144](#144)) - use periodic log flushing instead of per-line ([#139](#139)) - refresh only tracked PIDs instead of all processes ([#141](#141)) - cache compiled regex patterns ([#143](#143)) ### Security - add rate limiting to IPC server ([#137](#137)) - canonicalize config paths to prevent symlink exploitation ([#138](#138)) - add centralized daemon ID validation ([#140](#140)) </blockquote> </p></details> --- This PR was generated with [release-plz](https://github.com/release-plz/release-plz/). <!-- CURSOR_SUMMARY --> --- > [!NOTE] > Prepares the 0.3.1 release and updates metadata/documentation accordingly. > > - **Changelog**: Adds `0.3.1` entry detailing added dependency resolution, new `restart` command, fixes, performance tweaks, and security hardening > - **Version bumps**: Updates `version` to `0.3.1` in `Cargo.toml`, `Cargo.lock`, `docs/cli/commands.json`, `docs/cli/index.md`, and `pitchfork.usage.kdl` > - **Docs regen**: Refreshes CLI docs/spec to reflect the new version (no behavioral changes in this diff) > > <sup>Written by [Cursor Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit 9f9d386. This will update automatically on new commits. Configure [here](https://cursor.com/dashboard?tab=bugbot).</sup> <!-- /CURSOR_SUMMARY --> --------- Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
Merged
jdx
added a commit
that referenced
this pull request
Jan 19, 2026
## 🤖 New release * `pitchfork-cli`: 1.0.0 <details><summary><i><b>Changelog</b></i></summary><p> <blockquote> ## [1.0.0](https://github.com/jdx/pitchfork/releases/tag/v1.0.0) - 2026-01-19 ### Added - implement daemon dependency resolution ([#135](#135)) - add restart command to CLI ([#134](#134)) ### Fixed - restart command preserves daemon dependency configuration ([#142](#142)) - add missing depends field to restart command ([#136](#136)) - set IPC socket permissions to 0600 for security ([#133](#133)) - handle shell command parsing errors instead of silently failing ([#132](#132)) ### Other - bump version to 1.0.0 ([#147](#147)) - release v0.3.1 ([#121](#121)) - reduce unnecessary daemon cloning in loops ([#144](#144)) - use periodic log flushing instead of per-line ([#139](#139)) - refresh only tracked PIDs instead of all processes ([#141](#141)) - cache compiled regex patterns ([#143](#143)) ### Security - add rate limiting to IPC server ([#137](#137)) - canonicalize config paths to prevent symlink exploitation ([#138](#138)) - add centralized daemon ID validation ([#140](#140)) </blockquote> </p></details> --- This PR was generated with [release-plz](https://github.com/release-plz/release-plz/). <!-- CURSOR_SUMMARY --> --- > [!NOTE] > Prepares the 1.0.0 release and updates `CHANGELOG.md` with the finalized notes. > > - Adds `1.0.0` section: daemon dependency resolution, new CLI `restart` command, fixes for dependency preservation and shell parsing, secure IPC socket perms, plus performance/maintenance updates > - Documents security hardening: IPC rate limiting, config path canonicalization, centralized daemon ID validation > - Retains prior `0.3.1` notes for historical context > > <sup>Written by [Cursor Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit 4182984. This will update automatically on new commits. Configure [here](https://cursor.com/dashboard?tab=bugbot).</sup> <!-- /CURSOR_SUMMARY -->
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.
Summary
dependsfield for daemon configuration that was documented but not functionalChanges
depends: Vec<String>toPitchforkTomlDaemon,Daemon, andRunOptionsstructssrc/deps.rsmodule with dependency resolution logiccli/start.rsto resolve dependencies and start in correct orderdeps.rsand E2E tests intest_e2e_depends.rsBehavior
pitchfork start apiwhere api depends on postgres will start postgres first, then api-f) only affects explicitly requested daemons, not their dependenciesTest plan
cargo nextest run deps)cargo nextest run test_daemon_with_depends)cargo nextest run test_e2e_depends)🤖 Generated with Claude Code
Note
Enables dependency-aware startup across the CLI, supervisor, TUI, and web paths.
dependstopitchfork.tomlparsing and threads it throughDaemonandRunOptionsdepsmodule performs topological resolution (Kahn) returning parallelizable levelsstartcommand resolves transitive deps, skips already-running deps, honors-fonly for explicitly requested daemons, and aborts on failed depsdepends; one-offrunsets empty depsdependsbehavior and examples; added unit tests for resolver and E2E tests for start behaviorsrc/web/assets/**/*in package manifestWritten by Cursor Bugbot for commit 180eb92. This will update automatically on new commits. Configure here.