Repository navigation
0.8.43
Release Notes
A clone frozen by a stale git lock, watchers piling up under load, and other follow-ups from the Athena incident.
- A stale
.git/index.lockno longer freezes a clone. A field report: one role's clone held a
0-byteindex.lockfrom July, every sync failed on it until October, the clone fell 287 commits
behind, andwatch-statussaid healthy the whole time. The only sign was "hub sync failed …
showing local state", which reads as a network blip. Four changes:- The sync path's fast-forward and rebase are local operations that rewrite files, so they no
longer run under the 15-second network timeout. They get at least five minutes. On a machine
with slow file writes (endpoint security software) a 287-file fast-forward took 56 seconds; the
old timeout killed it mid-checkout, and the killed git left a new lock behind. - When confer does kill a git that writes the index, it removes the lock that git left.
- In a clone confer manages (
~/.confer/clones/), a sync removes anindex.lockolder than ten
minutes and says so. In your own clones confer leaves the file alone and names it, with its age
and thermcommand, instead of "showing local state". watch-status, the machine-wide watch report anddoctorreport a clone that has a stale index
lock or trails the hub as of its last fetch, andwatch-status --checkfails on it.
- The sync path's fast-forward and rebase are local operations that rewrite files, so they no
tuning.git_timeout_secsandtuning.op_budget_secstake effect.confer configaccepted,
validated and listed both, but nothing read them. TheCONFER_GIT_TIMEOUT_SECSand
CONFER_OP_BUDGET_SECSenvironment variables still take precedence.- A watcher that loses its lock stops. On a loaded machine a watcher could sit in a long git
operation past the 90-second stale window. The plugin then started a replacement, which took the
lock but left the old one running, and the old one kept polling its clone. On Batman this reached
nine watchers for four hubs, all contending for the clones' git locks ("hub sync failed (clone
busy)"). A watcher whose lock now names another process exits at its next cycle, and taking over
a stale lock from a live but unresponsive watcher now stops it. - A spool replayed after a restart no longer replays the old watcher's warnings. On Athena a
spool nobody had read since before a reboot replayed days-old "cannot determine this hub's
root-commit id" warnings into a healthy session, which read as a live failure. When a batch of
spool lines spans a watcher restart, that watcher's own notices from before the new start line
are dropped. Message wakes are always kept. - Claiming, closing or erroring a request marks it read. A request you had just closed kept
appearing in the "unread for you" footer until a separateconfer ack. - A detached watcher's command line names its hub (
--hub-label <hub>), sopstells one
role's watchers on two hubs apart from a duplicate (batcave-net). - Watch-lock writes are atomic. Each heartbeat rewrote the lock in place, and a reader that
caught it mid-write saw an empty or partial file.
Install confer-cli 0.8.43
Install prebuilt binaries via shell script
curl --proto '=https' --tlsv1.2 -LsSf https://github.com/codeshrew/confer/releases/download/v0.8.43/confer-cli-installer.sh | shInstall prebuilt binaries via Homebrew
brew install codeshrew/tap/conferDownload confer-cli 0.8.43
| File | Platform | Checksum |
|---|---|---|
| confer-cli-aarch64-apple-darwin.tar.xz | Apple Silicon macOS | checksum |
| confer-cli-x86_64-apple-darwin.tar.xz | Intel macOS | checksum |
| confer-cli-aarch64-unknown-linux-musl.tar.xz | ARM64 MUSL Linux | checksum |
| confer-cli-x86_64-unknown-linux-musl.tar.xz | x64 MUSL Linux | checksum |