Files
buzz/desktop
npub1mn7jgtj4w2pd0g0zeuhxsa6jy6p0rewxz4kujt98my82ahfmp72sxjexk7 996710a83b fix(channels): seed thread badge frontier from own read marker, not channel-folded
The seed read getThreadReadAt(rootId, activeChannelId), which AppShell folds
to max(thread_own, channel) via the NIP-RS hierarchical resolver. Channel-open
markChannelRead advances the channel term to the newest top-level message, and
the monotonic seed (Math.max in nextThreadBadgeFrontier) then bleeds that
channel timestamp back past an unread reply -- planting the frontier ahead of
it so computeThreadBadgeCounts reads zero and the badge vanishes (LP4 Case 3,
seed-timing face; the flaky 'no badge' correlated with newer channel messages).

Omit the channelId so the seed reads the thread's OWN marker (getOwnTimestamp,
no parent fold). Thread badges are channel-independent by design (NIP-RS Option
1: channel-open leaves them intact until each thread is read); the own marker
advances only via markThreadRead, preserving advance-on-read. This is immune to
the channel bleed by construction -- no channel term ever enters -- so it needs
no render-time ref capture.

Co-authored-by: Will Pfleger <pfleger.will@gmail.com>
Signed-off-by: Will Pfleger <pfleger.will@gmail.com>
2026-06-22 19:36:55 -04:00
..
2026-03-09 19:32:56 -07:00
2026-03-09 13:02:11 -07:00
2026-06-11 15:06:24 +00:00
2026-06-11 15:06:24 +00:00
2026-03-09 13:02:11 -07: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