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