Files
buzz/docs
Duncan 77f74405e8 fix(desktop): propagate control_result status; failure re-enables card for retry
retransmitPermissionDecision settled "acked" on any matching control_result
frame without reading frame.status. The four failure statuses (no_active_turn,
channel_full, channel_closed, no_channel) mean the harness received the frame
but could not route the decision — retransmitting the same nonce cannot change
that. The loop now resolves "failed" for those statuses and "acked" only for
"sent" / "already_decided", so the card re-enables for owner retry on failure.

Thread card (permission-request-card.tsx): .then checks the outcome and clears
submitted on "failed" so the owner can retry. LifecycleActivity fast-path does
the same before the reducer deliveryFailed path fires. Comments in both callers
updated to reflect the non-throwing-but-tri-outcome contract.

A11y: status text nodes ("Decision sent" / "Timed out" in thread card) now carry
role="status" / aria-live="polite" so AT hears the async confirmation.

NIP-AO: adds already_decided to the permission_decision status set with one line
of meaning; updates the failure-status sentence to name the retry semantics.

Co-authored-by: Will Pfleger <pfleger.will@gmail.com>
Signed-off-by: Will Pfleger <pfleger.will@gmail.com>
2026-08-28 16:10:37 -04:00
..
2026-07-21 17:16:23 +00:00