mirror of
https://github.com/block/buzz.git
synced 2026-10-30 05:51:46 +00:00
When a permission decision resolves, finish_permission publishes the resolved kind-40003 edit that retires the UI card. This was fire-and-forget (publish_event only enqueues; the relay task drops non-observer publishes while disconnected), so a socket failure at that instant permanently lost the only resolved edit after the decision was already irreversible — the thread card stuck as "Timed out" while execution continued. Retransmit the same signed event through the acked lane (register_publish_ack), detached so the read loop never blocks: idempotent resend on Uncertain, bounded by the card's expiry deadline, terminal on Accepted/Rejected or a closed command channel. Mirrors the pending sentinel path's precedent. The lib.rs change adds the permission_decision_tx: None field to a TaskMeta construction that a main merge left incomplete. The two cancel-test edits transition each registered Ask entry Publishing -> Pending explicitly, as the production read loop does on relay ACK before the next request arrives, so the publish-in-flight guard does not deny the second registration. Co-authored-by: Will Pfleger <pfleger.will@gmail.com> Signed-off-by: Will Pfleger <pfleger.will@gmail.com>