Skip to content

v2.22.0: Namespace scoping and worktree auto-discovery

Choose a tag to compare

@jdx jdx released this 18 Aug 10:31
· 26 commits to main since this release
Immutable release. Only release title and notes can be modified.
5e86c84

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 tui and list (#736) — @qstearns. When you work across several projects the dashboard and list mix every namespace together. Both pitchfork tui and pitchfork list now accept a repeatable --namespace <ns> flag (OR logic) to watch a chosen set of namespaces, plus --project to 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 --json all 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. With proxy.enable = true and the default proxy.sync_hosts = true, proxy add and proxy remove deterministically 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 new PITCHFORK_HOSTS_FILE override 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 /proc scans (which can cost tens to hundreds of milliseconds on busy hosts) were previously triggered on every web API list/show request, 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.