Skip to content

herdlet 0.10.0

Latest

Choose a tag to compare

@genkio genkio released this 11 Sep 03:07
· 12 commits to main since this release
76f09e3

Five fixes in the daemon and pane-addressing layers. The coordination protocol is unchanged.

  • One daemon per socket. Concurrent auto-starts (parallel hooks) could bind several daemons to one path, because asyncio.start_unix_server unlinks an existing socket before binding. serve now holds an flock on <socket>.lock for its lifetime, binds the socket itself, and unlinks only the inode it bound.
  • Waits are pinned to the occupant they started on. Records carry an instance that bumps when an id moves to another pane, or to the same pane number on another tmux server. A re-registered id can no longer wake a waiter that was waiting on the old one. --prefix waits stay unpinned.
  • Hook reports are retried. hook retries once (1 s, then 2 s) and logs a lost report to ~/.herdlet.log instead of dropping it silently.
  • send into a bare shell works again. A shell pane has no TUI input box, so verified send refused it with exit 6. It now types the line unverified and says so on stderr. TUI panes without an input box still exit 6.
  • Pane ids are per tmux server. Records carry the server socket, and every pane operation (peek, send, approve, resume, kill, the limited sweep, list) uses the record's server, so a daemon on server A never reads or kills a same-numbered pane on server B.

Restart the daemon after upgrading: pkill -f 'herdlet.*serve', then any herdlet command. Old persisted records gain the new fields at read time.