Files
buzz/desktop
Duncan 9301abf030 test(desktop): add delivery-seam + component regression test for failed-outcome recovery
Thufir's mutation showed that deleting the `outcome === "failed"` clear
in `permission-request-card.tsx` left all 7 PermissionRequestCardBlock
jsdom tests green, meaning Carl's P1 regression (stuck Decision sent, no
retry path) could silently return.

Three files changed, zero production behavior change:

- `permission-request-card.tsx`: add `_deliveryFn` seam prop (defaults to
  `startPermissionDecisionDelivery`); threaded through PermissionRequestCard
  → PendingPermissionRequestCard → PermissionButtons. Matches the existing
  isKnownAgentPubkey injection pattern.
- `PermissionRequestCardBlock.tsx`: accept and forward `_deliveryFn`; added
  to memo equality check.
- `PermissionRequestCardBlock.test.mjs`: new 8th test
  `test_failed_delivery_re_enables_buttons_and_successful_retry_reaches_sent`
  — renders the card, clicks allow, resolves delivery as "failed", asserts
  buttons return and Decision sent clears, retries, resolves "acked", asserts
  terminal sent state with buttons hidden.

Mutation proof: deleting `if (outcome === "failed") setSubmitted(null)`
fails the new test at "buttons re-enabled after failed delivery"; existing
7 remain green.

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