mirror of
https://github.com/block/buzz.git
synced 2026-10-30 14:01:37 +00:00
P1 — restored-outbox replay re-mints queuedAt and triggers the failed-bootstrap exception designed only for fresh in-session clicks. Hook-replayed outbox calls now pass isRestoredReplay=true through publishSections/publishSortPrefs → publish(), which suppresses the exception (pendingIsRestoredReplay) and does not re-freeze publishBaseline from mutable lastRemoteHead. P2a-1 — hook .then() replay after releaseDeferred establishes the correct baseline called publish() unconditionally, overwriting the baseline with the mutable lastRemoteHead (which by then could carry a suppressed live peer head). The isRestoredReplay flag added for P1 also closes this path: restored replays skip the publishBaseline re-freeze so the baseline releaseDeferred established is preserved through the callback. P2b — fetchRemoteBlob (periodic/reconnect path) called recordRemoteHead before decryptAndParse, leaving a decrypt-gap window where a concurrent click could freeze its publishBaseline against the pre-decrypt head. Moved recordRemoteHead to after decryptAndParse succeeds, mirroring the existing subscribeLive fix. P3 — isStarsStoreSubsumedBy / isMutesStoreSubsumedBy proved subsumption via a capacity-bounded mergeStores(head, candidate) without a preservedKey. At the 500-entry cap the clicked channel (lexicographically smallest) could be evicted during the proof merge, certifying retention of a click the relay never kept. Two consumers affected: bootstrap suppression (hook files pass outboxMeta.preservedKey to the subsumption check) and ACK confirmation (mergeLaneSyncManager passes this.pendingPreservedKey to config.isSubsumedBy). Both storage functions now take an optional preservedKey and use a direct membership check when present: head must contain the preserved channel with rev >= candidate's before the rest of the store is verified. Regressions — hook-layer tests in new shared suites: - wholeBlobSyncCarl.shared.test.mjs: P1 (failed-bootstrap replay adopts newer retained head), P2a-1 (H102 survives hook replay as genuine advance), P2b (fetchRemoteBlob decrypt gap). Wired from useChannelSections and useChannelSortPreference test files. - mergeLaneSyncCarl.shared.test.mjs: P3-bootstrap (500-entry head does not subsume click via eviction) and P3-ack (confirmRetainedHeadSubsumes retains outbox when relay head omits clicked channel). Wired from useChannelStars and useChannelMutes test files. All 47 targeted tests pass (43 pre-existing + 4 new Carl-round P3 tests plus 6 new P1/P2a-1/P2b tests). T1-T6 manager-level contracts unchanged. Co-authored-by: Will Pfleger <pfleger.will@gmail.com> Signed-off-by: Will Pfleger <pfleger.will@gmail.com>
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 frontendpnpm tauri dev- run the desktop apppnpm build- typecheck and build frontendpnpm typecheck- TypeScript checkspnpm lint- Biome lintpnpm 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