Files
buzz/crates
npub1mn7jgtj4w2pd0g0zeuhxsa6jy6p0rewxz4kujt98my82ahfmp72sxjexk7 6685fa7fb2 feat(buzz-acp): gate prompting on client-side leader check
When multiple Buzz dev instances share an agent keypair, the relay fans
each mention out to every connected buzz-acp (NIP-01) and all of them
respond. Add a per-agent-key leader lock so only the leader instance
promotes queued events to prompts; non-leaders keep their queue
populated for UI rendering but stay silent.

Reads ~/.buzz/leader-locks/<pubkey>.lock: absent or self-owned means
leader, foreign-owned means observer, malformed fails safe to leader so
a corrupt lock never silences the only responder. Solo dev has no lock
file, so behavior is unchanged. The 👀 reaction fires at queue-push time
before dispatch, so it is gated separately from dispatch_pending.

The election identity is sourced from BUZZ_INSTANCE_ELECTION_ID behind a
single named constant. It is deliberately NOT the Tauri bundle
identifier (BUZZ_MANAGED_AGENT): that collides across same-class windows
(DMG + dev, or worktrees whose icon-gen fell back to the shared dev id),
which would let two windows both lead. Phase 2 writes a process-unique
value; Phase 1 reads whatever that env carries and defaults to leader
when it is unset.

Phase 1 of 3: read side only. Lock acquire/steal/failover (Phase 2) and
claim UI (Phase 3) follow.

Co-authored-by: Will Pfleger <pfleger.will@gmail.com>
Signed-off-by: Will Pfleger <pfleger.will@gmail.com>
2026-06-24 17:27:14 -04:00
..