Files
buzz/desktop
Duncan 247f897d74 fix(desktop): survive rejected send in permission retransmit loop
The retransmit orchestrator installed its listener and interval, then
awaited the first send outside the loop's settle path. A rejected first
send propagated to the caller with the loop never torn down: the
listener and interval stayed live firing unhandled `void send()`, while
both UI callers re-enabled the buttons — so a retry with the opposite
option left two loops retransmitting different optionIds under one nonce.

Route the first send through the same guarded transmit path as every
tick and swallow a rejected send: a rejection is the transport failure
this loop exists to survive, so the next tick retries. The orchestrator
never rejects, guaranteeing exactly one loop per click and no unhandled
promise on any path. Permanent send failure ends like silence — retry
until `expiresAt`, then the card fails closed.

Co-authored-by: Will Pfleger <pfleger.will@gmail.com>
Signed-off-by: Will Pfleger <pfleger.will@gmail.com>
2026-08-28 13:16:54 -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