Commit Graph

988 Commits

Author SHA1 Message Date
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
thomaspblock
3e9d7ff4d6 fix(desktop): restore sticky date divider handoff (#1135) 2026-06-19 10:03:54 -04:00
Tyler
b2bf471ea5 desktop: drop redundant post-subscribe history refetch (#1130)
Signed-off-by: Tyler Longwell <tlongwell@squareup.com>
Co-authored-by: quinn-buzz-agent <96f056ad5f2305c8ddf637dc65d048aa4c12d7daeb8867690e34fca46b0ef64c@sprout-oss.stage.blox.sqprod.co>
2026-06-19 07:56:51 -04:00
Will Pfleger
320e95d43a chore(release): release version 0.3.26 (#1127) v0.3.26 2026-06-19 02:37:33 +00:00
Will Pfleger
ceb5eff537 ci: cache Flutter pub packages in the Mobile job (#1128) 2026-06-18 22:25:08 -04:00
Tyler
a1d5570d31 Delete RESEARCH directory 2026-06-18 22:08:36 -04:00