Files
buzz/desktop
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
..
…

Buzz

Desktop chat shell with:

  • Tauri + React + TypeScript + Vite
  • Tailwind CSS
  • shadcn/ui-ready shared components
  • Biome (lint/format/check)
  • Feature-driven frontend structure

Scripts

  • pnpm dev - run the web frontend
  • pnpm tauri dev - run the desktop app
  • pnpm build - typecheck and build frontend
  • pnpm typecheck - TypeScript checks
  • pnpm lint - Biome lint
  • pnpm format - Biome format (write)
  • pnpm check - Biome check

Structure

  • src/shared - reusable app-wide code (ui, lib, styles)
  • src/features - feature modules (vertical slices)
  • src/app - top-level app composition