THREAD UX: wheel scrollback and pasted agent mentions are unreliable
- Dominant language
- Rust
- Stars
- 32.7k
- Forks
- 4.3k
- Avg merge
- 1d 13h
- Merged PRs (30d)
- 253
Description
**THREAD context**
This occurs while using Buzz's channel chat and THREAD workflow. Two related composer/timeline interactions make it difficult to review prior agent work and reuse an existing agent mention.
**Describe the usability problem**
1. Mouse-wheel input over the chat does not reliably let the user move upward through prior messages in the THREAD/channel conversation.
2. Copying an existing message that contains an `@Agent Name` mention and pasting it into the composer can leave plain text rather than resolving the matching agent identity and mention metadata.
The second behavior is especially confusing because the pasted text visually still contains `@Agent Name`, but sending it may not notify or wake that agent.
**Steps to reproduce: scrollback**
1. Open a channel or THREAD with enough messages to exceed the visible viewport and initial history window.
2. Place the pointer over the message timeline.
3. Scroll upward with the mouse wheel.
4. Observe that older messages may not become reachable or older-history pagination does not reliably advance.
**Steps to reproduce: pasted mention**
1. Copy a rendered Buzz message containing an existing agent mention such as `@Inference Ops`.
2. Paste it into the channel composer.
3. Send the message without manually deleting and reselecting the name from autocomplete.
4. Observe that the pasted `@Agent Name` can remain presentation text without the agent's pubkey mention metadata.
**Expected behavior**
- Wheel-up over the timeline should move through loaded history and fetch older messages at the boundary while preserving the reader's visible position.
- A uniquely matching pasted agent mention should resolve to the eligible channel agent and produce the same mention metadata as selecting it from autocomplete.
- Ambiguous or ineligible names should remain unresolved and prompt the user to select a target; Buzz must not guess the wrong identity.
**Version and platform**
- Buzz version: unknown
- OS: unknown
**File references / additional context**
- [`TimelineMessageList.tsx`](https://github.com/block/buzz/blob/2ea9385015fb922de2adf0a53e86fc5a21d07b90/desktop/src/features/messages/ui/TimelineMessageList.tsx#L706-L749) initiates older-history loading near the virtualized timeline boundary.
- [`useUpwardPaginationWheel.ts`](https://github.com/block/buzz/blob/2ea9385015fb922de2adf0a53e86fc5a21d07b90/desktop/src/features/messages/ui/useUpwardPaginationWheel.ts#L13-L57) intercepts and suppresses upward wheel momentum around pagination.
- [`useFetchOlderMessages.ts`](https://github.com/block/buzz/blob/2ea9385015fb922de2adf0a53e86fc5a21d07b90/desktop/src/features/messages/useFetchOlderMessages.ts#L52-L80) owns older-history fetches.
- [`MessageComposer.tsx`](https://github.com/block/buzz/blob/2ea9385015fb922de2adf0a53e86fc5a21d07b90/desktop/src/features/messages/ui/MessageComposer.tsx#L784-L798) detects Buzz mention HTML during paste.
- [`normalizeMentionClipboard.ts`](https://github.com/block/buzz/blob/2ea9385015fb922de2adf0a53e86fc5a21d07b90/desktop/src/features/messages/lib/normalizeMentionClipboard.ts#L9-L31) intentionally replaces mention wrappers with plain spans, which preserves visible text but removes identity-bearing attributes.
Contributor guide
Research direction
Start with TimelineMessageList.tsx, useUpwardPaginationWheel.ts, and useFetchOlderMessages.ts to trace wheel handling and older-history loading, then inspect MessageComposer.tsx and normalizeMentionClipboard.ts for pasted mentions. Done means upward wheel scrolling reaches older history while preserving position, and uniquely matching eligible pasted mentions retain identity metadata without resolving ambiguous names.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- typescript
- Domain
- desktop, frontend
- Issue type
- Bug
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Activity status
- Quiet
- Clarity
- Mostly clear
- Newbie friendliness
- 58/100