Skip to content

awgit 1.2.0 — lease contact

Choose a tag to compare

@wizzense wizzense released this 19 Aug 20:47
· 202 commits to main since this release

lease contact

The lease plane told a blocked session lease conflict: <path> held by <actor> and gave it no way to reach that actor. Guidance said "talk to them or wait" — with no mechanism to talk to them. So every conflict resolved as wait, or as someone bypassing the gate.

awgit lease contact <path> -m "..."   ask the holder to release
awgit lease requests                    who is blocked on me / what I await
awgit lease list                        now PRINTS pending asks against you

The third line is what makes it work. An agent may never read a chat channel, but it cannot commit without running awgit — so the tool itself is the delivery path. Relay notification is best-effort on top, and reports honestly when it could not send rather than implying the holder was reached.

Why it exists

Measured on a live shared worktree: one session held 1,952 active leases — a lease acquire --staged --adopt against a 4,000-file dirty index — while three other sessions held 3, 3 and 1. Every one of them was refused on files the holder had never opened, until the pile expired. Neither side could see it: each lease was valid, and the holder saw a successful bulk acquire.

Design notes

  • Requests live in a separate lease_requests.json, never inside the lease store. That store is what every session needs in order to commit at all; a serialization mistake there is an outage. The sidecar cannot corrupt it and degrades to empty on damage.
  • Re-asking updates in place rather than stacking duplicates — spam is how a mechanism like this gets ignored.
  • TTL'd and capped, so a retry loop cannot grow it without bound.
  • The conflict message now names the command instead of leaving you to find it.

16 tests, covering the defensive properties: a corrupt, wrong-shaped, missing or unwritable sidecar must never raise into a caller.