feat(channels): show typing status on sidebar dm rows - #305
Conversation
Render animated typing dots on 1:1 and group DM rows from the session typing store, labelled with the block/buzz composer typing copy. Typing in any DM scope, including threads, counts once per signer. Rows select a per-channel key so unrelated typing changes do not re-render them. Co-authored-by: Kalvin Chau <kalvin@block.xyz> Signed-off-by: Kalvin Chau <kalvin@block.xyz> Signed-off-by: peon <9ac6794b000690b7e814eb1805ad32405d0bec7d52838de3a86cf967565dacc0@buzz.block.builderlab.xyz>
Known agents are represented by the Agent working signal, so the DM row typing label names humans only. Classification uses already-loaded profiles in the active renderer; unclassified signers keep the pubkey fallback until a loaded profile marks them as agents. Co-authored-by: Kalvin Chau <kalvin@block.xyz> Signed-off-by: Kalvin Chau <kalvin@block.xyz> Signed-off-by: peon <9ac6794b000690b7e814eb1805ad32405d0bec7d52838de3a86cf967565dacc0@buzz.block.builderlab.xyz>
f27fede to
4aaa33f
Compare
Render the sidebar typing indicator over the DM identity slot, replacing the avatar or group count while a remote human types, instead of beside the unread/working stack. Co-authored-by: Kalvin Chau <kalvin@block.xyz> Signed-off-by: Kalvin Chau <kalvin@block.xyz>
Match the participant-count chip in the DM identity slot: subtle affordance background with subtle text-colored dots instead of the accent color. Co-authored-by: Kalvin Chau <kalvin@block.xyz> Signed-off-by: Kalvin Chau <kalvin@block.xyz>
wesbillman
left a comment
There was a problem hiding this comment.
Star Lord automated source review
Posted through Wes’s account (wesbillman). No actionable findings. Source-review assessment: 9/10 for minimalness, elegance, and correctness, within the validation limits below.
- Head:
7b3eea2bb8bd7265a00745e7b4ebaf5b2f0ab138 - Base:
67fe94c750fc739e49caf3ee57e0f0940944cb04
Reviewed the complete five-file delta and traced the persistent sidebar, row/navigation composition, typing lifecycle, loaded-profile classification and shared naming subscriptions. The per-DM primitive snapshot deduplicates signers across thread scopes without adding relay reads or a second expiry owner. Profile changes reactively remove known agents; expiry/completion restores the existing identity slot. Regular channel rows and the separate agent-working/unread indicators retain their existing paths. The dots have an accessible name and native title; animation is opt-in to prefers-reduced-motion: no-preference.
The new component assertions use the real relay session and a controlled clock for expiry, scope clearing, stale pulses, disconnect, classification and unaffected-row render counts. These are appropriate lower-layer tests; no committed browser journeys were added or removed.
Validation limits: source-only analysis of Git-blob-verified inputs, with no dirty checkout inputs. No PR code, tests, builds, browser/native app, or CI jobs were executed. A single read-only CI snapshot at this head showed JavaScript, DCO, Semgrep, zizmor and browser measurements successful; Rust/tool integration and six browser shards were still in progress, and Windows validation was skipped. Author-reported browser checks were not independently reproduced. Rendered layout, assistive-technology behavior, native behavior and human acceptance remain unverified. This COMMENT is not approval, readiness certification, or merge authorization.
* origin/main: Keep custom emoji animated in reactions (#354) Polish community dialogs, agent cards, and conversation controls (#342) fix(channels): paginate membership discovery beyond 500 channels (#326) Remove local project context from docs (#350) feat(github): render PR descriptions with inline media (#335) feat(dev): measure channel opens, warming cost and live setup (#315) fix(agents): start new agents on Create and make their status clear (#332) fix(macos): close the window without quitting Buzz (#349) fix: allow parallel desktop dev worktrees (#336) feat(relay): complete packaged community access and recovery (#338) fix(workflows): clarify controls and align compact workflow UI (#337) feat: add custom emoji from settings (#346) feat(channels): show typing status on sidebar dm rows (#305) fix(workflows): page batched definition reads (#325) Signed-off-by: Sol <49aa1f65411fd096d2e2ec144f1e7aa36fdc76d1b907cfdf7be000c66f9d3b8e@buzz.block.builderlab.xyz> # Conflicts: # src/bundled/agents/AgentsPage.tsx
Show remote human typing on sidebar DM rows (1:1 and group).
aria-labelandtitle) with the block/buzz composer typing copy:X is typing...,X and Y are typing...,X, Y, and Z are typing...,X, Y, and N others are typing....Agent workingindicator as their signal. Classification is reactive to profile loads.prefers-reduced-motion: no-preference. Regular channel rows and the composer are unchanged.Screen.Recording.2026-09-28.at.9.18.15.AM.mov
Testing
DmTypingBadge.test.tsxdrives a real relay session into rendered sidebar rows: exact copy, row isolation, selection switching, group thread/top-level dedupe and independent clearing, the 8 s expiry boundary, stale pulses, disconnect, agent-only and mixed human/agent DMs, an unknown signer reclassified as an agent, and idle rows not re-rendering.vitest run src/bundled/channels src/features/channel-navigation,pnpm check,pnpm lint.