Files
buzz/crates
HaytandWill Pfleger d8cf983c21 fix(buzz-agent): make undeliverable permission asks terminal, prove claim-before-wake ordering, reject noncanonical ids
Address three review findings on the permission broker's ask surface.

An undeliverable ask is now terminal. wire::send_checked surfaces the
mpsc send failure that occurs exactly when the writer task has exited on
a closed/broken stdout; request_permission fails closed immediately on
that error (dropping the lease removes the entry and releases the permit
synchronously) instead of leaving a resident waiter to time out. async_main
now selects on both the reader and the writer JoinHandle: writer death
cancels every session and closes the reader lifecycle rather than reading
input while asks wait out their deadline for a reply that can never be
written.

Claim-before-wake ordering is now mutation-sensitive. Production enforces
it structurally — the oneshot sender is consumed by remove, so a
send-before-remove mutant cannot compile without swapping the channel type.
A test-only wake observer fires synchronously in the waiter's response arm
and asserts the entry is already absent from pending at the wake; a faithful
wake-before-claim mutant makes it observe false and the test goes red while
the behavioral delivery tests stay green.

parse_id now requires an exact canonical round-trip, so noncanonical
aliases (perm-01, perm-+0, perm-00) that u64::parse would accept are
rejected as foreign ids rather than resolving live asks.

Co-authored-by: Will Pfleger <pfleger.will@gmail.com>
Signed-off-by: Will Pfleger <pfleger.will@gmail.com>
2026-08-12 20:58:28 -04:00
..