npub1qyvc0c5kl4gqv2fd97fsk46tu378sqgy35vc83rvgfwne90sel7s0ed67d and Tyler Longwell
4719362107
fix(buzz-acp): bind steered- 👀 cleanup to exact turn; cover shutdown
...
Review (Wren) found two correctness gaps in the steered-reaction fix:
1. Generation-reuse race: SteerAckEvent carried only (channel_id,
event_id), and record_steered_event matched TaskMeta by channel. If
turn A completed and turn B started on the same channel before A's
delayed SteerAck::Success arrived, A's steered 👀 attached to B and
survived until the wrong turn ended. send_steer now returns the
turn's tokio::task::Id; the ack watcher carries it, and
record_steered_event matches on the exact task id — a stale id
refuses to bind (returns false) and the ack arm removes the 👀
immediately.
2. Graceful shutdown bypassed cleanup: the post-loop drain consumes
PromptResults directly (never via handle_prompt_result) and aborts
stragglers, so steered ids held in TaskMeta died with the pool and
their 👀 went stale. tokio_main now drains all steered ids
(pool.drain_all_steered_event_ids) as the main loop exits and
bound-awaits a best-effort removal task before process exit.
The three duplicated cleanup blocks are unified in
spawn_steered_eyes_cleanup. New lifecycle tests observe actual wire
behavior against a relay stub — the kind:5 (NIP-09) deletion e-tagging
the 👀 reaction — for normal completion, panic recovery, the shutdown
drain composition, and late-ack immediate cleanup; the generation race
is pinned at the binding level in pool::tests.
Co-authored-by: Tyler Longwell <tlongwell@block.xyz >
Signed-off-by: Tyler Longwell <tlongwell@block.xyz >
2026-07-03 11:10:33 -04:00
npub1qyvc0c5kl4gqv2fd97fsk46tu378sqgy35vc83rvgfwne90sel7s0ed67d and Tyler Longwell
6d4700b673
fix(buzz-acp): clear stale 👀 on events delivered via native steer
...
Events absorbed into an in-flight turn via the goose-native steer path
(SteerAck::Success) are consumed with queue.remove_event() and never
enter a FlushBatch — so run_prompt_task's ReactionGuard never owns
their event ids, and the 👀 added at queue-push time was never removed.
Every successfully steered message kept its eyes forever.
Fix: record steered event ids on the in-flight turn's TaskMeta
(pool.record_steered_event). When the turn ends — normal completion
(handle_prompt_result) or panic (recover_panicked_agent) — the drained
ids get a best-effort 👀 removal, matching the user-visible contract
that the eyes go away when the agent turn stops. If the ack races past
turn completion (no task in flight), the SteerAck arm cleans up
immediately instead.
Fixes the stuck-👀 report in #buzz-bugs (eyes persist after a steered
turn finishes).
Co-authored-by: Tyler Longwell <tlongwell@block.xyz >
Signed-off-by: Tyler Longwell <tlongwell@block.xyz >
2026-07-03 10:27:11 -04:00
thomaspblock and GitHub
204a0fd2ec
feat(desktop): contribution heatmap and graphical cards on projects overview ( #1497 )
2026-07-03 09:15:47 -04:00
thomaspblock and GitHub
8e3c0ee958
feat(desktop): repository-first projects with git workflows ( #1471 )
...
Signed-off-by: Thomas Petersen <thomasp@squareup.com >
2026-07-03 08:11:33 -04:00
thomaspblock and GitHub
5d4edf1535
fix(desktop): lock horizontal webview pan (Magic Mouse side-scroll) ( #1480 )
...
Signed-off-by: Thomas Petersen <thomasp@squareup.com >
2026-07-02 22:31:40 -04:00
228122fddc
Add agent catalog modal ( #1302 )
...
Signed-off-by: Taylor Ho <taylorkmho@gmail.com >
Co-authored-by: npub1223z34hd7vtwc6qj4s7flsxkj644nlre2nthu7lrrmkumhu3xddsrx9r6w <52a228d6edf316ec6812ac3c9fc0d696ab59fc7954d77e7be31eedcddf91335b@sprout-oss.stage.blox.sqprod.co >
Co-authored-by: Taylor Ho <taylorkmho@gmail.com >
2026-07-02 16:26:31 -07:00
e70dd1a1e7
fix(desktop): actually close relay sockets — plugin:websocket|disconnect does not exist ( #1481 )
...
Signed-off-by: Wes <wesbillman@users.noreply.github.com >
Co-authored-by: Brain <21994759fc7a6fa6b965551d35cfd7897d262f2495467f2d78694ddcfa6a5c7e@sprout-oss.stage.blox.sqprod.co >
2026-07-02 22:55:53 +00:00
3e282a2418
feat(buzz-agent): config parity — thinking effort, model switching, normalized token limits ( #1470 )
...
Signed-off-by: Will Pfleger <pfleger.will@gmail.com >
Co-authored-by: npub1mn7jgtj4w2pd0g0zeuhxsa6jy6p0rewxz4kujt98my82ahfmp72sxjexk7 <dcfd242e557282d7a1e2cf2e6877522682f1e5c6156dc92ca7d90eaedd3b0f95@sprout-oss.stage.blox.sqprod.co >
2026-07-02 22:52:38 +00:00
f9d06ae21a
fix(sidebar): scope channel sections storage to relay URL ( #1477 )
...
Signed-off-by: Will Pfleger <pfleger.will@gmail.com >
Co-authored-by: npub1mn7jgtj4w2pd0g0zeuhxsa6jy6p0rewxz4kujt98my82ahfmp72sxjexk7 <dcfd242e557282d7a1e2cf2e6877522682f1e5c6156dc92ca7d90eaedd3b0f95@sprout-oss.stage.blox.sqprod.co >
2026-07-02 17:38:55 -04:00
453b8b1e47
chore(mobile): declare non-exempt encryption usage in Info.plist ( #1474 )
...
Co-authored-by: Claude Fable 5 <noreply@anthropic.com >
2026-07-02 13:24:08 -07:00
d369ca9df1
fix(desktop): bind channel and thread context at compose time to prevent wrong-channel send ( #1472 )
...
Signed-off-by: Will Pfleger <pfleger.will@gmail.com >
Co-authored-by: npub1mn7jgtj4w2pd0g0zeuhxsa6jy6p0rewxz4kujt98my82ahfmp72sxjexk7 <dcfd242e557282d7a1e2cf2e6877522682f1e5c6156dc92ca7d90eaedd3b0f95@sprout-oss.stage.blox.sqprod.co >
2026-07-02 20:15:44 +00:00
02ff06cac2
fix(relay-reconnect): resilient reconnect with fast-path, escalation, and polling ( #1456 )
...
Signed-off-by: Will Pfleger <pfleger.will@gmail.com >
Co-authored-by: npub1mn7jgtj4w2pd0g0zeuhxsa6jy6p0rewxz4kujt98my82ahfmp72sxjexk7 <dcfd242e557282d7a1e2cf2e6877522682f1e5c6156dc92ca7d90eaedd3b0f95@sprout-oss.stage.blox.sqprod.co >
2026-07-02 19:30:24 +00:00
5bfd5ca270
feat: per-community workspace icon set by admins, served via NIP-11 ( #1463 )
...
Signed-off-by: Wes <wesbillman@users.noreply.github.com >
Co-authored-by: Brain <21994759fc7a6fa6b965551d35cfd7897d262f2495467f2d78694ddcfa6a5c7e@sprout-oss.stage.blox.sqprod.co >
2026-07-02 11:58:42 -07:00
01b92faa15
perf(relay): batch outbound websocket data frames ( #1464 )
...
Signed-off-by: Tyler Longwell <tlongwell@block.xyz >
Co-authored-by: npub1mprnacetjua2xx3p5eddmhxyk6wv929ymm5py8kd2xfxurxahspqqlgyta <d8473ee32b973aa31a21a65adddcc4b69cc2a8a4dee8121ecd51926e0cddbc02@sprout-oss.stage.blox.sqprod.co >
Co-authored-by: Tyler Longwell <tlongwell@block.xyz >
2026-07-02 14:32:20 -04:00
835302cc82
Make reaction ingest atomic ( #1458 )
...
Signed-off-by: npub1t2tgm7d8f995uqvmnm8h88sg3wnpp9a5xysjf6dg3tjmgt3ltulqdp8ehr <5a968df9a7494b4e019b9ecf739e088ba61097b4312124e9a88ae5b42e3f5f3e@sprout-oss.stage.blox.sqprod.co >
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-07-02 14:32:08 -04:00
3c661fb48f
Serialize fan-out EVENT frames once ( #1459 )
...
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: Tyler Longwell <tlongwell@block.xyz >
2026-07-02 14:31:47 -04:00
d9c4e4aa7f
fix: agent reliability — no restart on channel-add, visible dead-letter notice ( #1468 )
...
Signed-off-by: Wes <wesbillman@users.noreply.github.com >
Co-authored-by: Brain <21994759fc7a6fa6b965551d35cfd7897d262f2495467f2d78694ddcfa6a5c7e@sprout-oss.stage.blox.sqprod.co >
2026-07-02 11:16:50 -07:00
c48006fc3e
fix(profile): consolidate agent profile runtime metadata ( #1451 )
...
Signed-off-by: Taylor Ho <taylorkmho@gmail.com >
Co-authored-by: npub1223z34hd7vtwc6qj4s7flsxkj644nlre2nthu7lrrmkumhu3xddsrx9r6w <52a228d6edf316ec6812ac3c9fc0d696ab59fc7954d77e7be31eedcddf91335b@sprout-oss.stage.blox.sqprod.co >
Co-authored-by: npub14vtk7pvazqrq9639qu7e560wnqtl0d53ca4gjuvq6jzf3k2el23qqlwa7f <ab176f059d100602ea25073d9a69ee9817f7b691c76a897180d48498d959faa2@sprout-oss.stage.blox.sqprod.co >
2026-07-02 10:13:15 -07:00
e42dae3f9c
fix(desktop): simplify workspace rail badges ( #1462 )
...
Signed-off-by: Wes <wesbillman@users.noreply.github.com >
Co-authored-by: Pinky <44b8e82baa6e0e254e0208d68f335c283c94e7b78dd1fa10d5a49d3f13dd0435@sprout-oss.stage.blox.sqprod.co >
2026-07-02 08:45:57 -07:00
deb3e6adca
perf(desktop): instant channel switching — non-blocking first paint, persisted snapshots ( #1452 )
...
Signed-off-by: Wes <wesbillman@users.noreply.github.com >
Co-authored-by: Brain <21994759fc7a6fa6b965551d35cfd7897d262f2495467f2d78694ddcfa6a5c7e@sprout-oss.stage.blox.sqprod.co >
2026-07-02 08:45:38 -07:00
a9e752e254
perf(relay): bounded-concurrency multi-filter query execution (S2) ( #1457 )
...
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 11:18:49 -04:00
9967b97f59
fix(desktop): classify timeline prepends so history loads don't bump unread ( #1416 )
...
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-07-02 07:49:06 -07:00
b779a3ee2f
fix(desktop): quiet gate for workspace switches instead of boot splash ( #1449 )
...
Signed-off-by: Wes <wesbillman@users.noreply.github.com >
Co-authored-by: Brain <21994759fc7a6fa6b965551d35cfd7897d262f2495467f2d78694ddcfa6a5c7e@sprout-oss.stage.blox.sqprod.co >
2026-07-02 07:46:20 -07: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
thomaspblock and GitHub
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 Pfleger and GitHub
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
Wes and GitHub
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
klopez4212 and GitHub
3d08c3b02b
Group consecutive desktop messages ( #1429 )
2026-07-01 18:13:22 +00:00
klopez4212 and GitHub
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
klopez4212 and GitHub
6a08a3f4c8
Tighten message density ( #1426 )
2026-07-01 16:50:50 +01:00
klopez4212 and GitHub
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
klopez4212 and GitHub
177fe5a3bf
Limit agent profile quick actions ( #1425 )
2026-07-01 07:54:30 -07:00
klopez4212 and GitHub
3e4e9dda94
Fade sidebar pinned chrome edges ( #1423 )
2026-07-01 07:51:05 -07:00
klopez4212 and GitHub
2fc8b9cf5f
Apply smooth corners to inline media ( #1422 )
2026-07-01 07:50:26 -07:00
klopez4212 and GitHub
4ae5a0d5e3
Align thread summary rows ( #1421 )
2026-07-01 07:48:58 -07:00
klopez4212 and GitHub
8c38847913
Keep channel day dividers sticky ( #1420 )
2026-07-01 07:46:12 -07:00