Commit Graph
1185 Commits
Author SHA1 Message Date
npub1mn7jgtj4w2pd0g0zeuhxsa6jy6p0rewxz4kujt98my82ahfmp72sxjexk7andWill Pfleger cc3fcddfcb test(onboarding): force controller into phase 3 to prove reconnect card success path
Previous E2E tests used setRelayConnectionState() before the click but left
the mock socket alive (wsId !== null), so ensureConnected() always fast-pathed
and reconnect() returned true — the phase-3 connection-state effect in
ProfileStep.tsx was never exercised.

Add __BUZZ_E2E_FAIL_NEXT_MOCK_CONNECT__ seam to e2eBridge.ts: arms a counter
that makes the next connectMockSocket call throw before assigning wsId. This
forces connect() to reject, withDeadline to race-reject, the fast-path catch
to fire, and the controller to enter phase 3.

forcePhase3() helper:
- Arms the fail counter N times
- Closes all live sockets (disconnectMockSocket, sets wsId=null)
- Drives emitter to 'disconnected' immediately so useRelayConnection()
  commits a non-connected state (bypasses the 2s debounce on transient
  states); without this the hook never transitions away from 'connected'
  and the ProfileStep effect doesn't re-fire when we later drive success

Tests (3 total):
1. Phase-3 positive: click -> assert 'Connecting' (phase-3 proof) ->
   drive connected -> assert 'Connected' + auto-dismiss
2. Phase-3 negative: click -> assert 'Connecting' -> hold disconnected ->
   assert no 'Connected' (5 fail slots block retries for 15+ seconds)
3. No-click negative: drive connected without clicking -> assert
   hadActiveReconnectRef guard blocks markSuccess() (unchanged)

Co-authored-by: Will Pfleger <pfleger.will@gmail.com>
Signed-off-by: Will Pfleger <pfleger.will@gmail.com>
2026-07-02 15:38:22 -04:00
npub1mn7jgtj4w2pd0g0zeuhxsa6jy6p0rewxz4kujt98my82ahfmp72sxjexk7andWill Pfleger 7f98dc15f3 test(onboarding): replace mirror test with E2E specs for reconnect card
The OnboardingRelayConnectionErrorCard.test.mjs unit test was a mirror
state machine — it duplicated the component's ref/effect logic in the test
file itself, meaning it would pass even if ProfileStep.tsx regressed. Thufir
flagged this as not exercising the production path.

Replace with two E2E tests in onboarding.spec.ts that drive the real
component against the real relay state seam:

- 'click shows Connected then auto-dismisses': produces the error card via
  a relay-unreachable profile save error, drives relay to disconnected,
  clicks onboarding-reconnect-relay, drives relay to connected, and asserts
  the card transitions to 'Connected' then auto-dismisses. Exercises the full
  hadActiveReconnectRef guard and markSuccess() path through real code.

- 'connected without a prior click does not show Connected': same card setup,
  drives disconnected → connected with no click, asserts the card stays in
  error state. Guards against spurious success on background recovery without
  user action.

Also adds the setRelayConnectionState helper to onboarding.spec.ts, copied
from sidebar-relay-card.spec.ts (same seam, same bidirectional guard).

Co-authored-by: Will Pfleger <pfleger.will@gmail.com>
Signed-off-by: Will Pfleger <pfleger.will@gmail.com>
2026-07-02 15:17:54 -04:00
npub1mn7jgtj4w2pd0g0zeuhxsa6jy6p0rewxz4kujt98my82ahfmp72sxjexk7andWill Pfleger cdb09e8c15 fix(onboarding): use relay connection state for phase-3 success signal
ProfileStep was observing the sidebar's relayConnectivitySuccess store to
detect phase-3 reconnect success. That store is only ever produced by
useSidebarRelayConnectionCard, which never mounts during onboarding —
AppReady returns OnboardingFlow before the sidebar path renders.

Replace the dead cross-surface coupling with a local approach:
- Add useRelayConnection() to OnboardingRelayConnectionErrorCard
- Add hadActiveReconnectRef to gate markSuccess() on a genuine attempt
- Set the ref true when runConnectivityAction starts; clear it and call
  markSuccess() synchronously on phase-1 success, or leave it armed for
  the connection-state effect to fire on phase-3 connected transition
- Remove the two exports added to useSidebarRelayConnectionCard (no dead
  API surface)

Also fix the controller comment: the first comment incorrectly implied
cancelTimers() reached the subscription handle during sync emission. In
the assignment-order race, cancelTimers() ran before the handle was
assigned; cleanup happens in the if (resolved) block. Say that directly.

Add OnboardingRelayConnectionErrorCard.test.mjs: 5 tests covering the
guard contract — phase-3 async success, disconnected no-op, no-attempt
guard, phase-1 sync success idempotency, and double-connected no-op.

Co-authored-by: Will Pfleger <pfleger.will@gmail.com>
Signed-off-by: Will Pfleger <pfleger.will@gmail.com>
2026-07-02 15:07:52 -04:00
npub1mn7jgtj4w2pd0g0zeuhxsa6jy6p0rewxz4kujt98my82ahfmp72sxjexk7andWill Pfleger 8b44499a3e fix(relay-reconnect): address Wes's CHANGES_REQUESTED findings
Finding 1 (relayReconnectController.ts): subscribeToConnectionState can invoke
its listener synchronously with the current state before returning. When that
sync emission signals connected, onConnected() → finish() → cancelTimers() runs
while unsubscribeConnectionState is still null — then the caller assigns all
three handles after finish, leaking them for the app lifetime.

Fix: subscribe first, then check resolved immediately after the return value is
assigned. If resolved, unsubscribe the handle (which cancelTimers couldn't reach
because the assignment hadn't happened yet) and return before installing the
poll interval and backstop timer.

Finding 2 (ProfileStep.tsx): reconnect() always returns false in phase 3, so
runConnectivityAction never calls markSuccess(), and the onboarding component
had no connection-state subscription. The error card stayed showing failure
even after the relay healed.

Fix: observe the shared relayConnectivitySuccess store (already used by the
sidebar) via useSyncExternalStore + useEffect in OnboardingRelayConnectionErrorCard.
Export subscribeRelayConnectivitySuccess and getRelayConnectivitySuccessSnapshot
from useSidebarRelayConnectionCard.ts so both surfaces share exactly one
success-signalling mechanism.

Test: add a sync-emission unit test with a subscribeToConnectionState fake that
calls the listener before returning its cleanup handle — asserts onSuccess fires
once, no interval/backstop installed, cleanup called.

Co-authored-by: Will Pfleger <pfleger.will@gmail.com>
Signed-off-by: Will Pfleger <pfleger.will@gmail.com>
2026-07-02 14:56:52 -04:00
npub1mn7jgtj4w2pd0g0zeuhxsa6jy6p0rewxz4kujt98my82ahfmp72sxjexk7andWill Pfleger a978e1b8bb chore(relay-reconnect): fix biome formatting in sidebar-relay-card spec
Collapse waitForFunction arrow style to match biome's expected format
(remove trailing comma wrapping around the callback).

Co-authored-by: Will Pfleger <pfleger.will@gmail.com>
Signed-off-by: Will Pfleger <pfleger.will@gmail.com>
2026-07-02 14:09:29 -04:00
npub1mn7jgtj4w2pd0g0zeuhxsa6jy6p0rewxz4kujt98my82ahfmp72sxjexk7andWill Pfleger 3f7723428e fix(relay-reconnect): update e2e specs for connected-state gate
sidebar-relay-card.spec.ts and relay-connectivity.spec.ts both tested
the old contract where a stale channelsReadError alone could pin the
relay card visible while connection state was "connected". The new gate
(hasActiveRelayUnreachableError && !isRelayConnectionConnected) correctly
suppresses stale errors when connected is authoritative.

Add __BUZZ_E2E_GET_RELAY_CONNECTION_STATE__ seam to e2eBridge.ts so
specs can observe the relay state before overriding it. Gate the seam
wait on the target state: when driving to a degraded state, wait for
the relay to reach "connected" first (prevents the async auth handshake
from racing back over the override); when driving to "connected",
just wait for the seam to be installed — no baseline required.

All 15 targeted E2E tests pass locally (6 smoke + 9 integration).

Co-authored-by: Will Pfleger <pfleger.will@gmail.com>
Signed-off-by: Will Pfleger <pfleger.will@gmail.com>
2026-07-02 14:05:09 -04:00
npub1mn7jgtj4w2pd0g0zeuhxsa6jy6p0rewxz4kujt98my82ahfmp72sxjexk7andWill Pfleger 675acd681c fix(relay-reconnect): update relay-connectivity spec 01 for connected-state gate
test 01 previously booted with channelsReadError and expected the card
to show while the relay was still connected — relying on the old behavior
where a stale query error alone could pin the card open.

After the connected-state authority change, the card is suppressed when
state === 'connected', even if channelsReadError is present. Drive the
relay to 'reconnecting' (which IS in isRelayConnectionStateDegraded) so
the card appears via the state path, independent of query-error timing.
Drop the connection-banner count 0 assertion: the banner correctly shows
for any degraded state, including reconnecting.

Co-authored-by: Will Pfleger <pfleger.will@gmail.com>
Signed-off-by: Will Pfleger <pfleger.will@gmail.com>
2026-07-02 13:07:02 -04:00
npub1mn7jgtj4w2pd0g0zeuhxsa6jy6p0rewxz4kujt98my82ahfmp72sxjexk7andWill Pfleger 529965ebd8 chore(relay-reconnect): update Rust doc comment to hook-agnostic wording
Replace stale sign-in wording in relay_reconnect_hook_configured() doc
comment with the same hook-agnostic copy used in the UI.

Co-authored-by: Will Pfleger <pfleger.will@gmail.com>
Signed-off-by: Will Pfleger <pfleger.will@gmail.com>
2026-07-02 12:31:15 -04:00
npub1mn7jgtj4w2pd0g0zeuhxsa6jy6p0rewxz4kujt98my82ahfmp72sxjexk7andWill Pfleger 04524e17ab fix(relay-reconnect): dismiss reconnect card on auto-reconnect without user click
connected state is now authoritative for recovery UI — a stale query
error no longer pins the reconnect card while the relay is healthy.

- useSidebarRelayConnectionCard: gate hasActiveRelayUnreachableError on
  !isRelayConnectionConnected so connected state clears the card even
  when channelsQuery.error has not yet been cleared
- ConnectionBanner: add state !== connected guard to
  hasCollapsedRelayError for the same reason
- RelayAutoHealScheduler: expand constructor parameter properties to
  explicit field declarations so node --experimental-strip-types can
  load the class in tests; initialize lastHealAt to -Infinity so the
  first recovery is never rate-limited
- Add useRelayAutoHeal.test.mjs covering all scheduler state transitions

Co-authored-by: Will Pfleger <pfleger.will@gmail.com>
Signed-off-by: Will Pfleger <pfleger.will@gmail.com>
2026-07-02 12:23:56 -04:00
npub1mn7jgtj4w2pd0g0zeuhxsa6jy6p0rewxz4kujt98my82ahfmp72sxjexk7andWill Pfleger f42a301af1 fix(relay-reconnect): resilient reconnect with fast-path, escalation, and polling
The reconnect button had three compounding failure modes:

1. Instant false-fail during sign-in: the transport-recovery hook ran and
   exited in ~0.1s, but the tunnel liveness check passed while the Access
   layer was still blocked, so preconnect() hit the unreachable network and
   failed immediately — the user saw a 'failed' toast mid-login.

2. False-fail after actual reconnect: a single promise race with a 15s cap
   determined the verdict. preconnect() set keepAliveRequested=true so the
   background retry loop kept going and often succeeded right after the
   toast fired, leaving the user confused.

3. Spurious browser tab on transient blips: the hook ran unconditionally
   even when the transport was healthy and the disconnect was a network flap.

New strategy — try-fast-first → escalate → poll-until-connected:

- Phase 1 (fast path): attempt preconnect() with a 4s cap. Succeeds
  immediately for transient blips — no hook fires, no browser tab opens.

- Phase 2 (escalation, hook-configured builds only): only if the fast path
  fails and relay_reconnect_hook_configured() returns true, run the
  transport-recovery hook. The hook returns quickly; any browser-based
  network sign-in it triggers runs asynchronously.

- Phase 3 (poll-until-connected): retry preconnect() every 3s and watch the
  connection-state emitter. The moment the relay is reachable the next poll
  or emitter event declares success — no waiting for a timer. A 120s backstop
  fires a soft toast only; keepAliveRequested keeps the background loop alive.

Extracts a RelayReconnectController singleton (plain TS, injected deps) so
all three consumers — ConnectionBanner, useSidebarRelayConnectionCard, and
ProfileStep — share one in-flight state via useSyncExternalStore-style
subscribe. No double browser tabs; consistent 'Waiting for sign-in' state
across surfaces. Cancellation token (generation counter) is checked after
every await and inside every async continuation, closing the gap where a
cancelled poll's .then() could still mutate state.

Adds relay_reconnect_hook_configured Rust command (OSS-clean, bool) so the
frontend skips escalation and 'Waiting for sign-in...' copy in OSS builds.
e2eBridge returns false for this command in test environments.

Tests rewritten to exercise the real RelayReconnectController class with
injected fakes — no simulation helpers.

Co-authored-by: Will Pfleger <pfleger.will@gmail.com>
Signed-off-by: Will Pfleger <pfleger.will@gmail.com>
2026-07-02 11:26:49 -04:00
7da936fff8 fix(read-path): reach complete threads, dense-second timelines, and all people in the GUI (#1418)
Signed-off-by: Tyler Longwell <tlongwell@block.xyz>
Co-authored-by: npub12gtutshhh76rx0jx697f32f9tffd4hhp3hx58fp4x6u4uemkm7sqf8f757 <5217c5c2f7bfb4333e46d17c98a9255a52dadee18dcd43a43536b95e6776dfa0@sprout-oss.stage.blox.sqprod.co>
Co-authored-by: Tyler Longwell <tlongwell@block.xyz>
Co-authored-by: npub1qyvc0c5kl4gqv2fd97fsk46tu378sqgy35vc83rvgfwne90sel7s0ed67d <011987e296fd5006292d2f930b574be47c7801048d1983c46c425d3c95f0cffd@sprout-oss.stage.blox.sqprod.co>
2026-07-02 10:36:11 -04:00
a504ad6197 E1+E3: reduce relay ingest/fan-out DB round trips; ack p99 −7–16%, fd p99 −6–28%, p999 tails −29–53% vs PR #1453 tip (#1454)
Signed-off-by: Tyler Longwell <tlongwell@block.xyz>
Co-authored-by: npub1qyvc0c5kl4gqv2fd97fsk46tu378sqgy35vc83rvgfwne90sel7s0ed67d <011987e296fd5006292d2f930b574be47c7801048d1983c46c425d3c95f0cffd@sprout-oss.stage.blox.sqprod.co>
Co-authored-by: Tyler Longwell <tlongwell@block.xyz>
2026-07-02 09:09:09 -04:00
7bd3760c82 perf(relay): defer post-commit dispatch and avoid verify clone (#1453)
Signed-off-by: npub12gtutshhh76rx0jx697f32f9tffd4hhp3hx58fp4x6u4uemkm7sqf8f757 <5217c5c2f7bfb4333e46d17c98a9255a52dadee18dcd43a43536b95e6776dfa0@sprout-oss.stage.blox.sqprod.co>
Signed-off-by: Tyler Longwell <tlongwell@block.xyz>
Co-authored-by: npub12gtutshhh76rx0jx697f32f9tffd4hhp3hx58fp4x6u4uemkm7sqf8f757 <5217c5c2f7bfb4333e46d17c98a9255a52dadee18dcd43a43536b95e6776dfa0@sprout-oss.stage.blox.sqprod.co>
Co-authored-by: npub1qyvc0c5kl4gqv2fd97fsk46tu378sqgy35vc83rvgfwne90sel7s0ed67d <011987e296fd5006292d2f930b574be47c7801048d1983c46c425d3c95f0cffd@sprout-oss.stage.blox.sqprod.co>
Co-authored-by: Tyler Longwell <tlongwell@block.xyz>
2026-07-02 08:46:25 -04:00
thomaspblockandGitHub 88c089d3b6 fix(relay): include git hook tools in runtime image (#1326)
Signed-off-by: Thomas Petersen <thomasp@squareup.com>
2026-07-01 21:12:21 -04:00
c88799ac6c feat(chart): per-pod emptyDir git scratch when persistence disabled (multi-replica HA) (#1450)
Signed-off-by: Tyler Longwell <tlongwell@block.xyz>
Co-authored-by: npub1qyvc0c5kl4gqv2fd97fsk46tu378sqgy35vc83rvgfwne90sel7s0ed67d <011987e296fd5006292d2f930b574be47c7801048d1983c46c425d3c95f0cffd@sprout-oss.stage.blox.sqprod.co>
Co-authored-by: Tyler Longwell <tlongwell@block.xyz>
chart-v0.1.2
2026-07-01 19:55:34 -04:00
0701f47f4a fix(relay): remove media bearer-token auth (#1444)
Signed-off-by: npub12gtutshhh76rx0jx697f32f9tffd4hhp3hx58fp4x6u4uemkm7sqf8f757 <5217c5c2f7bfb4333e46d17c98a9255a52dadee18dcd43a43536b95e6776dfa0@sprout-oss.stage.blox.sqprod.co>
Signed-off-by: Tyler Longwell <tlongwell@block.xyz>
Co-authored-by: npub12gtutshhh76rx0jx697f32f9tffd4hhp3hx58fp4x6u4uemkm7sqf8f757 <5217c5c2f7bfb4333e46d17c98a9255a52dadee18dcd43a43536b95e6776dfa0@sprout-oss.stage.blox.sqprod.co>
Co-authored-by: npub1qyvc0c5kl4gqv2fd97fsk46tu378sqgy35vc83rvgfwne90sel7s0ed67d <011987e296fd5006292d2f930b574be47c7801048d1983c46c425d3c95f0cffd@sprout-oss.stage.blox.sqprod.co>
Co-authored-by: Tyler Longwell <tlongwell@block.xyz>
2026-07-01 19:25:24 -04:00
15ad7ae87e fix(desktop): stop search shortcut from hijacking the sidebar (#1447)
Signed-off-by: Wes <wesbillman@users.noreply.github.com>
Co-authored-by: Brain <21994759fc7a6fa6b965551d35cfd7897d262f2495467f2d78694ddcfa6a5c7e@sprout-oss.stage.blox.sqprod.co>
2026-07-01 15:53:25 -07:00
Will PflegerandGitHub 89c4f76579 fix(ci): set PGSCHEMA_PLAN_* in start-relay-for-tests.sh to avoid embedded-PG fetch (#1443)
Signed-off-by: Will Pfleger <pfleger.will@gmail.com>
2026-07-01 16:57:56 -04:00
fec7684366 feat(desktop): restore observer-feed regressions from #1381 and classify 4 new session/update types (#1412)
Signed-off-by: Will Pfleger <pfleger.will@gmail.com>
Co-authored-by: npub1mn7jgtj4w2pd0g0zeuhxsa6jy6p0rewxz4kujt98my82ahfmp72sxjexk7 <dcfd242e557282d7a1e2cf2e6877522682f1e5c6156dc92ca7d90eaedd3b0f95@sprout-oss.stage.blox.sqprod.co>
2026-07-01 16:33:26 -04:00
bdeab23b59 fix(desktop): disable spellcheck/autocorrect/autocapitalize on emoji picker search (#1438)
Signed-off-by: Will Pfleger <pfleger.will@gmail.com>
Co-authored-by: npub1mn7jgtj4w2pd0g0zeuhxsa6jy6p0rewxz4kujt98my82ahfmp72sxjexk7 <dcfd242e557282d7a1e2cf2e6877522682f1e5c6156dc92ca7d90eaedd3b0f95@sprout-oss.stage.blox.sqprod.co>
2026-07-01 16:23:55 -04:00
b1d9d955de feat(relay): add OpenTelemetry tracing, keep Prometheus metrics (#1398)
Signed-off-by: Will Pfleger <pfleger.will@gmail.com>
Co-authored-by: npub1mn7jgtj4w2pd0g0zeuhxsa6jy6p0rewxz4kujt98my82ahfmp72sxjexk7 <dcfd242e557282d7a1e2cf2e6877522682f1e5c6156dc92ca7d90eaedd3b0f95@sprout-oss.stage.blox.sqprod.co>
2026-07-01 16:05:59 -04:00
9f2a11b338 feat(buzz-agent): emit agent_thought_chunk for reasoning content (#1436)
Signed-off-by: Will Pfleger <pfleger.will@gmail.com>
Co-authored-by: npub1mn7jgtj4w2pd0g0zeuhxsa6jy6p0rewxz4kujt98my82ahfmp72sxjexk7 <dcfd242e557282d7a1e2cf2e6877522682f1e5c6156dc92ca7d90eaedd3b0f95@sprout-oss.stage.blox.sqprod.co>
2026-07-01 14:57:05 -04:00
e5aa4a2132 feat(git): move repo-name registry to Postgres + relax RWM chart gate (HA relay) (#1432)
Signed-off-by: Tyler Longwell <tlongwell@block.xyz>
Co-authored-by: npub1qyvc0c5kl4gqv2fd97fsk46tu378sqgy35vc83rvgfwne90sel7s0ed67d <011987e296fd5006292d2f930b574be47c7801048d1983c46c425d3c95f0cffd@sprout-oss.stage.blox.sqprod.co>
Co-authored-by: Tyler Longwell <tlongwell@block.xyz>
2026-07-01 14:50:18 -04:00
WesandGitHub b32db5e0fd chore(release): release Buzz Desktop version 0.3.41 (#1435) v0.3.41 2026-07-01 12:46:57 -06:00
323a86ade8 fix(desktop): sort reaction pills by earliest created_at ascending (#1434)
Signed-off-by: Will Pfleger <pfleger.will@gmail.com>
Co-authored-by: npub1mn7jgtj4w2pd0g0zeuhxsa6jy6p0rewxz4kujt98my82ahfmp72sxjexk7 <dcfd242e557282d7a1e2cf2e6877522682f1e5c6156dc92ca7d90eaedd3b0f95@sprout-oss.stage.blox.sqprod.co>
2026-07-01 14:28:58 -04:00
klopez4212andGitHub 3d08c3b02b Group consecutive desktop messages (#1429) 2026-07-01 18:13:22 +00:00
klopez4212andGitHub db2a970115 Update Buzz app icon (#1430) 2026-07-01 10:58:43 -07:00
ce1f13e8f7 feat(desktop): add workspace rail unread observer (#1428)
Signed-off-by: Wes <wesbillman@users.noreply.github.com>
Co-authored-by: Brain <21994759fc7a6fa6b965551d35cfd7897d262f2495467f2d78694ddcfa6a5c7e@sprout-oss.stage.blox.sqprod.co>
Co-authored-by: Pinky <44b8e82baa6e0e254e0208d68f335c283c94e7b78dd1fa10d5a49d3f13dd0435@sprout-oss.stage.blox.sqprod.co>
2026-07-01 10:55:30 -07:00
8fb33bdbca Prioritize channel members in mention autocomplete (#1431)
Signed-off-by: Wes <wesbillman@users.noreply.github.com>
Co-authored-by: Pinky <44b8e82baa6e0e254e0208d68f335c283c94e7b78dd1fa10d5a49d3f13dd0435@sprout-oss.stage.blox.sqprod.co>
2026-07-01 10:54:32 -07:00
klopez4212andGitHub 6a08a3f4c8 Tighten message density (#1426) 2026-07-01 16:50:50 +01:00
klopez4212andGitHub c0e10d67e0 Tighten sidebar section actions (#1424) 2026-07-01 15:22:09 +00:00
6c0e6f0bb7 Add memory copy actions (#1427)
Signed-off-by: Wes <wesbillman@users.noreply.github.com>
Co-authored-by: Pinky <44b8e82baa6e0e254e0208d68f335c283c94e7b78dd1fa10d5a49d3f13dd0435@sprout-oss.stage.blox.sqprod.co>
2026-07-01 08:05:40 -07:00
klopez4212andGitHub 177fe5a3bf Limit agent profile quick actions (#1425) 2026-07-01 07:54:30 -07:00
klopez4212andGitHub 3e4e9dda94 Fade sidebar pinned chrome edges (#1423) 2026-07-01 07:51:05 -07:00
klopez4212andGitHub 2fc8b9cf5f Apply smooth corners to inline media (#1422) 2026-07-01 07:50:26 -07:00
klopez4212andGitHub 4ae5a0d5e3 Align thread summary rows (#1421) 2026-07-01 07:48:58 -07:00
klopez4212andGitHub 8c38847913 Keep channel day dividers sticky (#1420) 2026-07-01 07:46:12 -07:00
86d6388e68 fix(deps): pin aws-creds to fork with EKS Pod Identity support (#1419)
Signed-off-by: Tyler Longwell <tlongwell@block.xyz>
Co-authored-by: npub1qyvc0c5kl4gqv2fd97fsk46tu378sqgy35vc83rvgfwne90sel7s0ed67d <011987e296fd5006292d2f930b574be47c7801048d1983c46c425d3c95f0cffd@sprout-oss.stage.blox.sqprod.co>
Co-authored-by: Tyler Longwell <tlongwell@block.xyz>
2026-06-30 22:26:59 -04:00
3292b502aa fix(relay): enable Redis TLS for rediss:// (ElastiCache) (#1417)
Signed-off-by: Tyler Longwell <tlongwell@block.xyz>
Co-authored-by: npub1qyvc0c5kl4gqv2fd97fsk46tu378sqgy35vc83rvgfwne90sel7s0ed67d <011987e296fd5006292d2f930b574be47c7801048d1983c46c425d3c95f0cffd@sprout-oss.stage.blox.sqprod.co>
Co-authored-by: Tyler Longwell <tlongwell@block.xyz>
2026-06-30 21:14:43 -04:00
WesandGitHub 461c24ab3f chore(release): release Buzz Desktop version 0.3.40 (#1414) v0.3.40 2026-06-30 17:16:32 -07:00
4fdc68f156 fix(desktop): stabilize channel-timeline scrollback with per-row height reserves (#1413)
Signed-off-by: Wes <wesbillman@users.noreply.github.com>
Co-authored-by: Brain <21994759fc7a6fa6b965551d35cfd7897d262f2495467f2d78694ddcfa6a5c7e@sprout-oss.stage.blox.sqprod.co>
Co-authored-by: Pinky <44b8e82baa6e0e254e0208d68f335c283c94e7b78dd1fa10d5a49d3f13dd0435@sprout-oss.stage.blox.sqprod.co>
2026-06-30 16:53:18 -07:00
697f63ddcc fix(sidebar): trim working badge label and name working agents in tooltip (#1408)
Signed-off-by: Taylor Ho <taylorkmho@gmail.com>
Co-authored-by: npub1223z34hd7vtwc6qj4s7flsxkj644nlre2nthu7lrrmkumhu3xddsrx9r6w <52a228d6edf316ec6812ac3c9fc0d696ab59fc7954d77e7be31eedcddf91335b@sprout-oss.stage.blox.sqprod.co>
2026-06-30 16:27:34 -07:00
c444e3445b Mobile tab bar polish (#1368)
Signed-off-by: Wes <wesb@block.xyz>
Signed-off-by: Wes <wesbillman@users.noreply.github.com>
Co-authored-by: Wes <wesb@block.xyz>
Co-authored-by: Pinky <44b8e82baa6e0e254e0208d68f335c283c94e7b78dd1fa10d5a49d3f13dd0435@sprout-oss.stage.blox.sqprod.co>
Co-authored-by: Wes <wesbillman@users.noreply.github.com>
Co-authored-by: Brain <21994759fc7a6fa6b965551d35cfd7897d262f2495467f2d78694ddcfa6a5c7e@sprout-oss.stage.blox.sqprod.co>
2026-06-30 23:20:38 +00:00
f86f97bbde feat(desktop): let thread pane expand on ultrawide monitors (#1407)
Signed-off-by: Tyler Longwell <tlongwell@block.xyz>
Co-authored-by: npub1qyvc0c5kl4gqv2fd97fsk46tu378sqgy35vc83rvgfwne90sel7s0ed67d <011987e296fd5006292d2f930b574be47c7801048d1983c46c425d3c95f0cffd@sprout-oss.stage.blox.sqprod.co>
Co-authored-by: Tyler Longwell <tlongwell@block.xyz>
2026-06-30 18:55:08 -04:00
Will PflegerandGitHub 5784ff0f1a chore(release): release Buzz Desktop version 0.3.39 (#1410) v0.3.39 2026-06-30 18:52:02 -04:00
e8adc3383f fix: close cross-process keychain race and namespace dev-build nest (#1409)
Signed-off-by: Will Pfleger <pfleger.will@gmail.com>
Co-authored-by: npub1mn7jgtj4w2pd0g0zeuhxsa6jy6p0rewxz4kujt98my82ahfmp72sxjexk7 <dcfd242e557282d7a1e2cf2e6877522682f1e5c6156dc92ca7d90eaedd3b0f95@sprout-oss.stage.blox.sqprod.co>
2026-06-30 18:40:02 -04:00
0042c8e106 feat(relay): allow agent owners to edit/manage agent-owned content (#1403)
Signed-off-by: Will Pfleger <pfleger.will@gmail.com>
Co-authored-by: npub1mn7jgtj4w2pd0g0zeuhxsa6jy6p0rewxz4kujt98my82ahfmp72sxjexk7 <dcfd242e557282d7a1e2cf2e6877522682f1e5c6156dc92ca7d90eaedd3b0f95@sprout-oss.stage.blox.sqprod.co>
2026-06-30 18:31:47 -04:00
06ef533ec7 fix(media): support IRSA/credential-chain S3 auth and configurable signing region (#1406)
Signed-off-by: Tyler Longwell <tlongwell@block.xyz>
Co-authored-by: npub1qyvc0c5kl4gqv2fd97fsk46tu378sqgy35vc83rvgfwne90sel7s0ed67d <011987e296fd5006292d2f930b574be47c7801048d1983c46c425d3c95f0cffd@sprout-oss.stage.blox.sqprod.co>
Co-authored-by: Tyler Longwell <tlongwell@block.xyz>
2026-06-30 18:26:43 -04:00
f061ae9c87 fix(desktop): fold baked build env into in-process model discovery (#1376)
Signed-off-by: Will Pfleger <pfleger.will@gmail.com>
Co-authored-by: npub1mn7jgtj4w2pd0g0zeuhxsa6jy6p0rewxz4kujt98my82ahfmp72sxjexk7 <dcfd242e557282d7a1e2cf2e6877522682f1e5c6156dc92ca7d90eaedd3b0f95@sprout-oss.stage.blox.sqprod.co>
2026-06-30 17:43:28 -04:00
aa1042b162 docs: link VISION_ACTIVITY from the VISION index (#1405)
Signed-off-by: Taylor Ho <taylorkmho@gmail.com>
Co-authored-by: npub14vtk7pvazqrq9639qu7e560wnqtl0d53ca4gjuvq6jzf3k2el23qqlwa7f <ab176f059d100602ea25073d9a69ee9817f7b691c76a897180d48498d959faa2@sprout-oss.stage.blox.sqprod.co>
2026-06-30 12:41:40 -07:00