Commit Graph

993 Commits

Author SHA1 Message Date
npub1mn7jgtj4w2pd0g0zeuhxsa6jy6p0rewxz4kujt98my82ahfmp72sxjexk7
4769564d8a fix(channels): anchor thread unread divider for expand-revealed replies
The in-thread "New" divider never appeared for replies first revealed by
expanding a branch after a close->reopen cycle (E2E 04-thread-deep-nested-unread).

Two compounding defects: markRevealedRepliesRead advanced a reveal-child's
msg:<id> marker synchronously in the expand event handler, before React
re-rendered with that child visible, so the render-time snapshot captured it as
already read; and the divider resolver used `snapshot?.get(id) ?? live`, whose
nullish-coalescing discarded a legitimately-captured null (never-read) and
re-read the now-advanced live marker.

Centralize capture in captureDividerReadState, call it before the marker advance
in the reveal path, and switch the resolver to has-vs-?? so a captured null is
honored. The badge predicates still read effective(msg:<id>) live and never
consult the divider snapshot.

Co-authored-by: Will Pfleger <pfleger.will@gmail.com>
Signed-off-by: Will Pfleger <pfleger.will@gmail.com>
2026-06-22 21:57:10 -04:00
npub1mn7jgtj4w2pd0g0zeuhxsa6jy6p0rewxz4kujt98my82ahfmp72sxjexk7
7c7c18d904 fix(channels): align thread-unread tests and trim size to v3 contract
The thread-open divider missed replies revealed after first open: the
open-time read snapshot captured only the initially visible set, so a
reply expanded later was both marked read and absent from the snapshot,
collapsing the divider. Grow the snapshot per reveal — each reply's read
state is captured the first render it becomes visible, before the
mark-read effect — so the divider anchors to what was unread when each
reply first appeared.

The 05/07/14 E2E cases asserted the deleted whole-subtree-on-open
contract (single expand clearing a 2-levels-deep badge); rewritten to
the v3 direct-children-only contract, with comments updated to drop the
removed machinery. AppShell trimmed under the 1000-line gate with no
logic change; MessageThreadPanel carries an approved size override for
the onMarkRead prop-pair completion.

Co-authored-by: Will Pfleger <pfleger.will@gmail.com>
Signed-off-by: Will Pfleger <pfleger.will@gmail.com>
2026-06-22 21:22:39 -04:00
npub1mn7jgtj4w2pd0g0zeuhxsa6jy6p0rewxz4kujt98my82ahfmp72sxjexk7
d9ce1cd160 feat(channels): replace thread-badge frontier with per-message read markers (LP4 P1)
The single-per-root frontier snapshot made thread-unread badges flaky:
reading an ancestor or re-entering a channel could clear a descendant's
badge, and the open-time snapshot was a second source of truth for the
same read-line (the original Face-2 bug). Replace it with per-message
msg:<id> markers read live through getReadAt: a reply lights iff
createdAt > effective(msg:<id>), so reading one reply never clears
another.

Open and expand now mark ONLY the revealed set read (direct children),
deliberately reversing #1118's whole-subtree-on-open — a collapsed branch
keeps its badge until revealed. Mark-read/mark-unread are symmetric over
a message + its subtree; mark-unread is a session-local OR-overlay since
markers are monotonic. Deletes the frontier/seed layer
(threadBadgeFrontier.ts) and the orphaned subtree-max open-ceiling path
(subtreeMaxCreatedAt) rather than re-keying them.

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
npub1mn7jgtj4w2pd0g0zeuhxsa6jy6p0rewxz4kujt98my82ahfmp72sxjexk7
edb56e74a9 feat(channels): add msg: per-message read-state key family (LP4 P1.1)
First step of the v3 per-message read-state redesign. Adds the msg:<id>
context-key constructor and validator alongside the existing thread:/channel
keys, plus exports MAX_CONTEXTS for the upcoming msg:* eviction path. The
validator rejects a thread key re-prefixed as a message key so the parent
resolver and eviction can keep the two families distinct.

No behavior change yet: nothing constructs msg: keys until the predicate swap
(P1.3) and useChannelUnreadState wiring (P1.4) land.

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
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
npub1mn7jgtj4w2pd0g0zeuhxsa6jy6p0rewxz4kujt98my82ahfmp72sxjexk7
87b79aff9b fix(channels): re-key thread-unread badge roll-up, seed, and ceiling on rootId
Thread-unread badges relied on the direct-parent adjacency map to roll up
replies under their root. When the loaded timeline window dropped a middle
ancestor, a deep reply keyed under its absent parent and was unreachable
from the root, so the channel-root badge under-counted (Case 1) and, when a
root's only reply was such an orphan, the root was never seed-eligible and
got no frontier at all (Case 3, seed face).

Group replies by their resolved rootId instead. The root e-tag travels with
every event (getThreadReference), so a reply reaches its true root even with
the intermediate ancestor unloaded. For an intact chain every descendant
carries the root's rootId, so counts are identical to the old walk. The
thread-open mark-read ceiling gets a root-scoped variant that folds in
rootId-matched orphans; the expand caller keeps its branch-scoped walk, since
a branch node owns no rootId bucket and must advance only its own branch.

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
npub1mn7jgtj4w2pd0g0zeuhxsa6jy6p0rewxz4kujt98my82ahfmp72sxjexk7
59e584e076 test(channels): lock thread-unread badge invariants and Case-1/3 defects
P1 characterization net for the badge redesign. Pins the contracts the
roll-up and frontier hold today so a rootId re-key can't silently regress
them, and adds falsifiable expected-red tests for the two open defects.

threadBadgeInvariants: (a)-(g) green-on-current invariants; (g) locks that
two distinct roots keep independent frontiers and never collapse into one.
threadOpenCeiling: branch-vs-root ceiling scope (locks the call-site split)
plus the Case-1 orphan-misses-ceiling defect. The orphan-only-root seed
gate is the Case-3 second face. The two defect tests assert DESIRED behavior
and are marked todo so they are expected-red without breaking CI; they flip
to passing once P2 re-keys on rootId. Fixtures carry rootId so they stay
falsifiable after the re-key.

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
npub1mn7jgtj4w2pd0g0zeuhxsa6jy6p0rewxz4kujt98my82ahfmp72sxjexk7
30702135c7 test(channels): demonstrate thread-unread badge Case 1 + Case 3 defects
Investigation guards for the LP4 thread-unread badge flakiness. Each new
test passes against current behavior to pin the exact trigger, labeled
DEFECT (documents the bug) or DESIRED/control.

Case 1 (badge at level N, not root): a deep reply whose intermediate
ancestor is absent from the loaded timeline is keyed under that absent
parent, so collectSubtreeReplies never reaches it from the root bucket.
The root undercounts or shows no badge while the reply is genuinely unread.

Case 3 (no badge anywhere): seedThreadBadgeFrontiers seeds via the
effective thread marker max(thread_own, channel_marker); once channel-open
mark-read folds the channel marker past the unread reply, the seed lands
past it and computeThreadBadgeCounts yields zero. The pre-mark-read marker
control keeps the badge.

These are demonstration tests only; no fix code changes.

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
Wes
d389bf0b85 chore(release): release version 0.3.29 (#1184) v0.3.29 2026-06-22 22:44:29 +00:00
Wes
ce5261067d build: make mesh-llm opt-in for dev/staging to speed up iteration (#1183)
Signed-off-by: Wes <wesbillman@users.noreply.github.com>
Co-authored-by: npub1yxv5wk0u0fh6dwt925wntn7h397jvteyj4r87ttcd9xae7n2t3lqqj9jmm <21994759fc7a6fa6b965551d35cfd7897d262f2495467f2d78694ddcfa6a5c7e@sprout-oss.stage.blox.sqprod.co>
2026-06-22 22:11:50 +00:00
Will Pfleger
4b518fc4b3 feat(desktop): default temporary channels to 7-day expiry (#1182)
Signed-off-by: Will Pfleger <pfleger.will@gmail.com>
Co-authored-by: npub1mn7jgtj4w2pd0g0zeuhxsa6jy6p0rewxz4kujt98my82ahfmp72sxjexk7 <dcfd242e557282d7a1e2cf2e6877522682f1e5c6156dc92ca7d90eaedd3b0f95@sprout-oss.stage.blox.sqprod.co>
2026-06-22 18:10:01 -04:00
Will Pfleger
ff727af926 fix(desktop): render lightbox image sharply at full resolution (#1181)
Signed-off-by: Will Pfleger <pfleger.will@gmail.com>
Co-authored-by: npub1mn7jgtj4w2pd0g0zeuhxsa6jy6p0rewxz4kujt98my82ahfmp72sxjexk7 <dcfd242e557282d7a1e2cf2e6877522682f1e5c6156dc92ca7d90eaedd3b0f95@sprout-oss.stage.blox.sqprod.co>
2026-06-22 18:03:04 -04:00
Wes
781d1acf8a fix(desktop): keep thread guides behind the reply composer (#1179)
Signed-off-by: Wes <wesbillman@users.noreply.github.com>
Co-authored-by: Pinky <44b8e82baa6e0e254e0208d68f335c283c94e7b78dd1fa10d5a49d3f13dd0435@sprout-oss.stage.blox.sqprod.co>
2026-06-22 14:15:10 -07:00
Wes
04df2c8dc6 Sort direct messages alphabetically (#1180)
Signed-off-by: Wes <wesbillman@users.noreply.github.com>
Co-authored-by: Pinky <44b8e82baa6e0e254e0208d68f335c283c94e7b78dd1fa10d5a49d3f13dd0435@sprout-oss.stage.blox.sqprod.co>
2026-06-22 13:53:16 -07:00
klopez4212
7dcf22d50e Add composer selection formatting tray (#1133) 2026-06-22 13:27:35 -07:00
Will Pfleger
ea97e21989 fix(desktop): honor per-agent relay override, default to workspace relay (#1131)
Signed-off-by: Will Pfleger <pfleger.will@gmail.com>
Co-authored-by: npub1mn7jgtj4w2pd0g0zeuhxsa6jy6p0rewxz4kujt98my82ahfmp72sxjexk7 <dcfd242e557282d7a1e2cf2e6877522682f1e5c6156dc92ca7d90eaedd3b0f95@sprout-oss.stage.blox.sqprod.co>
2026-06-22 15:49:30 -04:00
Wes
141f7118ae [codex] Stabilize desktop E2E flakes (#1174)
Signed-off-by: Wes <wesbillman@users.noreply.github.com>
Co-authored-by: npub1yxv5wk0u0fh6dwt925wntn7h397jvteyj4r87ttcd9xae7n2t3lqqj9jmm <21994759fc7a6fa6b965551d35cfd7897d262f2495467f2d78694ddcfa6a5c7e@sprout-oss.stage.blox.sqprod.co>
2026-06-22 12:32:34 -07:00
Will Pfleger
1186ea48b9 feat(desktop): show reminder author + source and click-to-navigate in inbox (#1176)
Signed-off-by: Will Pfleger <pfleger.will@gmail.com>
Co-authored-by: npub1mn7jgtj4w2pd0g0zeuhxsa6jy6p0rewxz4kujt98my82ahfmp72sxjexk7 <dcfd242e557282d7a1e2cf2e6877522682f1e5c6156dc92ca7d90eaedd3b0f95@sprout-oss.stage.blox.sqprod.co>
2026-06-22 15:06:56 -04:00
klopez4212
de3f21abcd Improve inbox thread updates (#1114)
Co-authored-by: Wes <wesbillman@users.noreply.github.com>
2026-06-22 11:48:32 -07:00
Tyler
26fdfb674c docs(readme): mark git hosting as shipped in status table (#1175)
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-22 14:47:45 -04:00
Will Pfleger
592508addd feat(windows): bundle full Git-for-Windows toolchain for the shell tool (#1145)
Signed-off-by: Will Pfleger <pfleger.will@gmail.com>
Co-authored-by: npub1mn7jgtj4w2pd0g0zeuhxsa6jy6p0rewxz4kujt98my82ahfmp72sxjexk7 <dcfd242e557282d7a1e2cf2e6877522682f1e5c6156dc92ca7d90eaedd3b0f95@sprout-oss.stage.blox.sqprod.co>
2026-06-22 14:31:31 -04:00
Will Pfleger
ec5cfa3796 fix(buzz-dev-mcp): resolve MSYS-absolute paths in the Windows file tools (#1169)
Signed-off-by: Will Pfleger <pfleger.will@gmail.com>
Co-authored-by: npub1mn7jgtj4w2pd0g0zeuhxsa6jy6p0rewxz4kujt98my82ahfmp72sxjexk7 <dcfd242e557282d7a1e2cf2e6877522682f1e5c6156dc92ca7d90eaedd3b0f95@sprout-oss.stage.blox.sqprod.co>
2026-06-22 14:27:51 -04:00
Wes
603c9381ec chore(release): release version 0.3.28 (#1170) v0.3.28 2026-06-22 10:51:31 -07:00
klopez4212
342a251a91 Improve thread branch display (#1166) 2026-06-22 10:05:37 -07:00
Tyler
a96d173e99 Copy channel name from header (#1157)
Signed-off-by: npub1mprnacetjua2xx3p5eddmhxyk6wv929ymm5py8kd2xfxurxahspqqlgyta <d8473ee32b973aa31a21a65adddcc4b69cc2a8a4dee8121ecd51926e0cddbc02@sprout-oss.stage.blox.sqprod.co>
Signed-off-by: Wes <wesbillman@users.noreply.github.com>
Co-authored-by: npub1mprnacetjua2xx3p5eddmhxyk6wv929ymm5py8kd2xfxurxahspqqlgyta <d8473ee32b973aa31a21a65adddcc4b69cc2a8a4dee8121ecd51926e0cddbc02@sprout-oss.stage.blox.sqprod.co>
Co-authored-by: Wes <wesbillman@users.noreply.github.com>
Co-authored-by: Pinky <44b8e82baa6e0e254e0208d68f335c283c94e7b78dd1fa10d5a49d3f13dd0435@sprout-oss.stage.blox.sqprod.co>
2026-06-22 16:55:33 +00:00
Wes
ff976e690e docs: add product screenshots to README (#1168)
Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-22 09:41:37 -07:00
klopez4212
c243a01362 Use accent color for video timecodes (#1167) 2026-06-22 09:27:36 -07:00
klopez4212
f218b8158e Add video playback speed control (#1164) 2026-06-22 16:59:25 +01:00
Tyler
fee4b1f556 Update README.md 2026-06-22 08:45:22 -04:00
Wes
ae8165f8bb chore(release): release version 0.3.27 (#1161)
Signed-off-by: Wes <wesbillman@users.noreply.github.com>
Co-authored-by: Pinky <44b8e82baa6e0e254e0208d68f335c283c94e7b78dd1fa10d5a49d3f13dd0435@sprout-oss.stage.blox.sqprod.co>
v0.3.27
2026-06-21 17:38:40 -07:00
Luis Padron
67fcf41b53 chore: remove block team id from Xcode (#1156) 2026-06-21 15:54:40 -04:00
Tyler
fa10871df6 fix(desktop): keep channel chrome clear of window controls (#1159)
Signed-off-by: npub1jh9wn95s0472h86ahapupaf7m6kx4v9sx2n0atj2hltcfer8k06s5n3pyf <95cae996907d7cab9f5dbf43c0f53edeac6ab0b032a6feae4abfd784e467b3f5@sprout-oss.stage.blox.sqprod.co>
Co-authored-by: npub1jh9wn95s0472h86ahapupaf7m6kx4v9sx2n0atj2hltcfer8k06s5n3pyf <95cae996907d7cab9f5dbf43c0f53edeac6ab0b032a6feae4abfd784e467b3f5@sprout-oss.stage.blox.sqprod.co>
2026-06-21 10:03:23 -04:00
Wes
5f79830e19 desktop: polish sidebar search dialog (#1155)
Signed-off-by: Wes <wesbillman@users.noreply.github.com>
Co-authored-by: Pinky <44b8e82baa6e0e254e0208d68f335c283c94e7b78dd1fa10d5a49d3f13dd0435@sprout-oss.stage.blox.sqprod.co>
2026-06-20 19:30:12 -07:00
Wes
6cca75993b desktop: fix scrollback paging and visible history depth (#1153)
Signed-off-by: Wes <wesbillman@users.noreply.github.com>
Co-authored-by: Pinky <44b8e82baa6e0e254e0208d68f335c283c94e7b78dd1fa10d5a49d3f13dd0435@sprout-oss.stage.blox.sqprod.co>
Co-authored-by: Brain <21994759fc7a6fa6b965551d35cfd7897d262f2495467f2d78694ddcfa6a5c7e@sprout-oss.stage.blox.sqprod.co>
2026-06-20 14:07:18 -07:00
Wes
4c7df9b0b3 Fix ACP activity tool title detection (#1149)
Signed-off-by: npub1v9a0cp05uazvvx3ph34jcfqr4ts3j7wwcve0tvgh4nuhphdkfe2sg7jw4q <617afc05f4e744c61a21bc6b2c2403aae11979cec332f5b117acf970ddb64e55@sprout-oss.stage.blox.sqprod.co>
Co-authored-by: npub1v9a0cp05uazvvx3ph34jcfqr4ts3j7wwcve0tvgh4nuhphdkfe2sg7jw4q <617afc05f4e744c61a21bc6b2c2403aae11979cec332f5b117acf970ddb64e55@sprout-oss.stage.blox.sqprod.co>
2026-06-19 17:03:19 -07:00
Wes
7c3e411fa8 fix(desktop): clear channel unread badges from thread reads (#1148)
Signed-off-by: npub1v9a0cp05uazvvx3ph34jcfqr4ts3j7wwcve0tvgh4nuhphdkfe2sg7jw4q <617afc05f4e744c61a21bc6b2c2403aae11979cec332f5b117acf970ddb64e55@sprout-oss.stage.blox.sqprod.co>
Signed-off-by: Wes <wesbillman@users.noreply.github.com>
Co-authored-by: npub1v9a0cp05uazvvx3ph34jcfqr4ts3j7wwcve0tvgh4nuhphdkfe2sg7jw4q <617afc05f4e744c61a21bc6b2c2403aae11979cec332f5b117acf970ddb64e55@sprout-oss.stage.blox.sqprod.co>
Co-authored-by: Pinky <44b8e82baa6e0e254e0208d68f335c283c94e7b78dd1fa10d5a49d3f13dd0435@sprout-oss.stage.blox.sqprod.co>
2026-06-19 16:58:21 -07:00
Tyler
c488d8452c desktop: move global search into sidebar header and remove vestigial top band (#1150)
Signed-off-by: Tyler Longwell <tlongwell@block.xyz>
Co-authored-by: Tyler Longwell <tlongwell@block.xyz>
2026-06-19 17:08:41 -04:00
Tyler
7c67dfa66d Update README.md 2026-06-19 16:17:13 -04:00
Tyler
7aa6daa496 Hide channel intro actions until history start (#1151)
Signed-off-by: npub1t2tgm7d8f995uqvmnm8h88sg3wnpp9a5xysjf6dg3tjmgt3ltulqdp8ehr <5a968df9a7494b4e019b9ecf739e088ba61097b4312124e9a88ae5b42e3f5f3e@sprout-oss.stage.blox.sqprod.co>
Co-authored-by: npub1t2tgm7d8f995uqvmnm8h88sg3wnpp9a5xysjf6dg3tjmgt3ltulqdp8ehr <5a968df9a7494b4e019b9ecf739e088ba61097b4312124e9a88ae5b42e3f5f3e@sprout-oss.stage.blox.sqprod.co>
2026-06-19 16:09:39 -04:00
Tyler
0c5dbf3452 fix(desktop): remount timeline scroll node per channel (#1147)
Signed-off-by: npub1t2tgm7d8f995uqvmnm8h88sg3wnpp9a5xysjf6dg3tjmgt3ltulqdp8ehr <5a968df9a7494b4e019b9ecf739e088ba61097b4312124e9a88ae5b42e3f5f3e@sprout-oss.stage.blox.sqprod.co>
Co-authored-by: npub1t2tgm7d8f995uqvmnm8h88sg3wnpp9a5xysjf6dg3tjmgt3ltulqdp8ehr <5a968df9a7494b4e019b9ecf739e088ba61097b4312124e9a88ae5b42e3f5f3e@sprout-oss.stage.blox.sqprod.co>
2026-06-19 15:31:25 -04:00
Tyler
39626197c0 Render custom emoji in the inbox; DRY up emoji derivation (#1146)
Signed-off-by: Tyler Longwell <tlongwell@squareup.com>
Co-authored-by: npub1cc3ha7z055mu0rwwu7806t2wt8mj3pvu0uv5mfp2c50dahaqhczshdalg6 <c6237ef84fa537c78dcee78efd2d4e59f728859c7f194da42ac51ededfa0be05@sprout-oss.stage.blox.sqprod.co>
2026-06-19 13:53:29 -04:00
Tyler
663b554c7c desktop: open thread pane optimistically (#1143)
Signed-off-by: npub1jh9wn95s0472h86ahapupaf7m6kx4v9sx2n0atj2hltcfer8k06s5n3pyf <95cae996907d7cab9f5dbf43c0f53edeac6ab0b032a6feae4abfd784e467b3f5@sprout-oss.stage.blox.sqprod.co>
Co-authored-by: npub1jh9wn95s0472h86ahapupaf7m6kx4v9sx2n0atj2hltcfer8k06s5n3pyf <95cae996907d7cab9f5dbf43c0f53edeac6ab0b032a6feae4abfd784e467b3f5@sprout-oss.stage.blox.sqprod.co>
2026-06-19 13:32:34 -04:00
Tyler
9c6852824e fix(desktop): keep channel header search/add icons always visible (#1144)
Signed-off-by: npub1qyvc0c5kl4gqv2fd97fsk46tu378sqgy35vc83rvgfwne90sel7s0ed67d <011987e296fd5006292d2f930b574be47c7801048d1983c46c425d3c95f0cffd@sprout-oss.stage.blox.sqprod.co>
Co-authored-by: npub1qyvc0c5kl4gqv2fd97fsk46tu378sqgy35vc83rvgfwne90sel7s0ed67d <011987e296fd5006292d2f930b574be47c7801048d1983c46c425d3c95f0cffd@sprout-oss.stage.blox.sqprod.co>
2026-06-19 13:26:08 -04:00
Tyler
d1c3574ba7 fix(desktop): show skeleton during channel switch (#1141)
Signed-off-by: Tyler Longwell <tlongwell@block.xyz>
Co-authored-by: npub1t2tgm7d8f995uqvmnm8h88sg3wnpp9a5xysjf6dg3tjmgt3ltulqdp8ehr <5a968df9a7494b4e019b9ecf739e088ba61097b4312124e9a88ae5b42e3f5f3e@sprout-oss.stage.blox.sqprod.co>
Co-authored-by: Tyler Longwell <tlongwell@block.xyz>
2026-06-19 13:04:55 -04:00
Tyler
959f25982b Avoid duplicate thread event fetches (#1129)
Signed-off-by: npub1jh9wn95s0472h86ahapupaf7m6kx4v9sx2n0atj2hltcfer8k06s5n3pyf <95cae996907d7cab9f5dbf43c0f53edeac6ab0b032a6feae4abfd784e467b3f5@sprout-oss.stage.blox.sqprod.co>
Signed-off-by: npub1qyvc0c5kl4gqv2fd97fsk46tu378sqgy35vc83rvgfwne90sel7s0ed67d <011987e296fd5006292d2f930b574be47c7801048d1983c46c425d3c95f0cffd@sprout-oss.stage.blox.sqprod.co>
Co-authored-by: npub1jh9wn95s0472h86ahapupaf7m6kx4v9sx2n0atj2hltcfer8k06s5n3pyf <95cae996907d7cab9f5dbf43c0f53edeac6ab0b032a6feae4abfd784e467b3f5@sprout-oss.stage.blox.sqprod.co>
Co-authored-by: npub1qyvc0c5kl4gqv2fd97fsk46tu378sqgy35vc83rvgfwne90sel7s0ed67d <011987e296fd5006292d2f930b574be47c7801048d1983c46c425d3c95f0cffd@sprout-oss.stage.blox.sqprod.co>
2026-06-19 12:46:08 -04:00
thomaspblock
cc8958f5cc desktop: restore channel browse button (#1140) 2026-06-19 09:41:23 -07:00
thomaspblock
bee4159715 desktop: make date dividers pill shaped (#1139) 2026-06-19 11:58:37 -04:00
thomaspblock
5975421889 fix(desktop): align sidebar unread pills (#1138) 2026-06-19 11:37:10 -04:00
Tyler
c448f1c729 Fix display names flashing to pubkeys when loading older messages (#1137)
Signed-off-by: Tyler Longwell <tlongwell@squareup.com>
Co-authored-by: npub1cc3ha7z055mu0rwwu7806t2wt8mj3pvu0uv5mfp2c50dahaqhczshdalg6 <c6237ef84fa537c78dcee78efd2d4e59f728859c7f194da42ac51ededfa0be05@sprout-oss.stage.blox.sqprod.co>
2026-06-19 07:43:01 -07:00
Tyler
aeafb0b0b2 desktop: keep sidebar unread pill below top chrome strip (#1136)
Signed-off-by: Tyler Longwell <tlongwell@squareup.com>
Co-authored-by: npub17jjz49l9jjmhhk7cac63j8yt9z555n9cw8vk7v5jz4vzw4ppld5qgj57cc <f4a42a97e594b77bdbd8ee35191c8b28a94a4cb871d96f32921558275421fb68@sprout-oss.stage.blox.sqprod.co>
2026-06-19 10:12:42 -04:00