v2.22.0: Namespace scoping and worktree auto-discovery
This release adds namespace scoping to the TUI and pitchfork list, auto-discovers daemons defined in git worktrees and jj workspaces, and fixes a proxy self-deadlock that could wedge every pitchfork command on the machine.
Added
-
Namespace scoping for
tuiandlist(#736) — @qstearns. When you work across several projects the dashboard and list mix every namespace together. Bothpitchfork tuiandpitchfork listnow accept a repeatable--namespace <ns>flag (OR logic) to watch a chosen set of namespaces, plus--projectto scope to the current directory's namespace (resolved the same way short daemon IDs are). Scoping happens as the list is built, so fuzzy search (/), sorting, multi-select, batch operations,--status, and--jsonall operate on the already-scoped set. Namespace values are validated, so typos fail loudly instead of silently matching nothing.$ pitchfork tui --project $ pitchfork list --namespace api --namespace web
-
Auto-discovery of daemons in git worktrees and jj workspaces (#737) — @gaojunran. Supervisor background tasks (cron registration,
boot_start, file watch) now discover daemons defined in worktrees whose namespace was never registered in the global[namespaces]table. A config-only cron daemon living in a worktree is auto-registered and triggered without ever being started manually. See the new "Git Worktrees" section in the namespaces docs.
Fixed
-
Proxy self-deadlock on
proxy add/proxy remove(#739) — @qstearns. Withproxy.enable = trueand the defaultproxy.sync_hosts = true,proxy addandproxy removedeterministically deadlocked against themselves while syncing the hosts file, and every other pitchfork command on the machine queued behind the same lock until the hung process was killed. The hosts sync no longer re-reads the global config under the held lock. A newPITCHFORK_HOSTS_FILEoverride lets you redirect the sync away from the system hosts file. This bug affected releases since v2.10.0. -
Command examples now render as code blocks in generated docs (#738) — @gaojunran. Example and output blocks in the CLI docs previously collapsed into a single paragraph with lost column alignment; they now render as proper code blocks. Command behavior is unchanged.
Changed
- Throttled process-table refreshes (#728) — @gaojunran. Full
/procscans (which can cost tens to hundreds of milliseconds on busy hosts) were previously triggered on every web APIlist/showrequest, process-tree lookup, and TUI frame. Display paths now share a 5s TTL cache and run the scan on a blocking worker so async handlers never block, dropping repeat calls from ~38ms to ~58µs. The longer window also smooths reported CPU%, reducing spurious resource-limit kills. Resource enforcement still forces a fresh scan.
New Contributors
Full Changelog: v2.21.0...v2.22.0
💚 Sponsor pitchfork
pitchfork is maintained by @jdx, an open source developer for entire.io, the title sponsor of the jdx.dev open source tools including mise, aube, hk, and more. Development is sustained by sponsorships.
If pitchfork has a place in your dev workflow, please consider sponsoring at jdx.dev. Individual and company sponsorships are what keep the project healthy and moving forward.