Skip to content

Show one working indicator while a message's live activity shows - #2851

Merged
baxen merged 6 commits into
mainfrom
loganj/one-working-indicator
Nov 6, 2026
Merged

baxen merged 6 commits into
mainfrom
loganj/one-working-indicator

Conversation

@loganj

@loganj loganj commented Nov 6, 2026 •

Copy link
Copy Markdown
Contributor

Summary

  • When you ask an agent something in a Solo chat or DM, two working indicators show for the same turn: the live activity under your message (avatar plus current step, such as "Reading the conversation"), and a second bare ••• row at the end of the conversation. This started with Keep agent coordination history readable after work finishes #2454.
  • Now the live activity under your message is the agent's only working indicator while it shows. The ••• row at the end comes back when that live activity is gone: when collapsed progress history takes over the work, or when no message shows the agent at all.
  • The same applies in an open thread: live activity on the thread's first message replaces the thread's end-of-conversation indicator. Before this change, the thread panel showed two indicators even before Keep agent coordination history readable after work finishes #2454.

Details

  • Keep agent coordination history readable after work finishes #2454 stopped hiding the end-of-conversation indicator for agents whose step details another row shows. The goal was to keep a working cue next to collapsed agent coordination history, which can sit far up the conversation. That change also applied to the live activity under the request message, which already is a full working indicator. This change keeps Keep agent coordination history readable after work finishes #2454's behavior for recorded history.
  • A row that registers as owning an agent's activity can now also say it shows the agent working (presence). Only the live activity under a message (the ActivityAccessory bubble) does this. TypingIndicator and the timeline's live-agent list (useLiveConversationAgents, which also decides whether the previous reply stacks onto the indicator) skip agents with presence. Recorded history still owns only step details, so the dots stay beside it.
  • A thread's first message has no thread root of its own. So its live activity in the thread panel was registered under the channel instead of the thread. It now registers under the conversation it shows in. The row-level registration that MessageRow reads for reply summaries keeps its scope.
  • docs/agents.md and docs/buzz-help.md now describe the one-indicator rule.

Known limits (unchanged from before #2454)

  • While an agent keeps working after posting long replies, the live activity under the request can scroll off-screen but stay mounted. The end of the conversation then shows no working cue.
  • Presence applies per agent per conversation, not per request. The old filter had the same scope.
  • When a remote agent's turn ends without a reply, bare dots can show for a few seconds after the live activity leaves, until its typing signal expires.

Tests

  • ActivityAccessory.test.tsx: live activity plus the conversation indicator render exactly one working indicator. A thread's first message, with real MessageRow props, replaces the thread's indicator. The handoff to recorded history brings the dots back.
  • ChannelTimeline.viewport.test.tsx: the previous reply does not stack onto a hidden indicator.
  • typing-presentation.test.tsx: presence and details-only registrations are separate.
  • Each new test fails without its fix.
  • local-agent-activity.spec.mjs ("local agent receipt, work and failure agree…"): this journey asserted the thread tail's working dots next to the message's live bubble, which is the duplicate this PR removes. It now asserts that the tail shows no indicator and checks the reduced-motion dots on the bubble. Before the change the journey failed in CI in both engines at b4f40f4d0. The full file passes locally in Chromium and WebKit (34/34) at b3946f389. No browser journeys added or removed.
  • Logan tested a demo build in the desktop app and confirmed one indicator per turn.

buzz-review-completed

🤖 Generated with Claude Code

loganj and others added 5 commits November 6, 2026 14:59
Since #2454 the conversation's working indicator stayed up for an agent
even when the live activity bubble under the triggering message already
showed that agent working. Solo chats and DMs showed two indicators for
one turn: the bubble with its step, and bare dots at the end.

A replacement registration can now say the mounted row is the agent's
working indicator (presence), not only its step details. The accessory's
live bubble claims presence; recorded update history does not. The
conversation indicator and the timeline's live-agent list drop agents a
live bubble presents, and keep their dots beside recorded history, as
#2454 intended.

Co-authored-by: Larry <627498bd4bd1f281a16431e3c6cce3b5c25b6692798c78672298aefbf2f8f8b5@buzz.block.builderlab.xyz>
Signed-off-by: Logan Johnson <loganj@squareup.com>
Review follow-up: the timeline's live-agent list must drop a presented
agent too, or the previous reply stacks onto a hidden indicator. Docs now
state the bubble rule before the dots rule.

Co-authored-by: Larry <627498bd4bd1f281a16431e3c6cce3b5c25b6692798c78672298aefbf2f8f8b5@buzz.block.builderlab.xyz>
Signed-off-by: Logan Johnson <loganj@squareup.com>
MessageRow gives a thread's root row no thread root, so its live bubble
registered under the channel scope while it shows in the thread panel.
The thread's indicator then kept a second cue, and the channel's could
lose its own. Register the shared presentation under the conversation
the bubble shows in.

Co-authored-by: Larry <627498bd4bd1f281a16431e3c6cce3b5c25b6692798c78672298aefbf2f8f8b5@buzz.block.builderlab.xyz>
Signed-off-by: Logan Johnson <loganj@squareup.com>
Review follow-up: every entry the live bubble renders is in its bubble,
so the per-entry check was always true. The shared registration now
implies presence. The stacking regression registers presence through the
conversation's activity store, as production does.

Co-authored-by: Larry <627498bd4bd1f281a16431e3c6cce3b5c25b6692798c78672298aefbf2f8f8b5@buzz.block.builderlab.xyz>
Signed-off-by: Logan Johnson <loganj@squareup.com>
The journey asserted the thread tail's working dots alongside the
message's live bubble, the duplicate this branch removes. Assert that
the tail shows none and check reduced-motion dots on the bubble.

Co-authored-by: Larry <627498bd4bd1f281a16431e3c6cce3b5c25b6692798c78672298aefbf2f8f8b5@buzz.block.builderlab.xyz>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: Logan Johnson <loganj@squareup.com>
@loganj
loganj force-pushed the loganj/one-working-indicator branch from b3946f3 to bb22592 Compare November 6, 2026 20:17
@loganj
loganj marked this pull request as ready for review November 6, 2026 20:46
@loganj
loganj requested a review from a team as a code owner November 6, 2026 20:46
@morgmart

This comment has been minimized.

@loganj

This comment has been minimized.

kalvinnchau

This comment was marked as resolved.

Co-authored-by: Larry <627498bd4bd1f281a16431e3c6cce3b5c25b6692798c78672298aefbf2f8f8b5@buzz.block.builderlab.xyz>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: Logan Johnson <loganj@squareup.com>
@loganj

This comment has been minimized.

@baxen baxen left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🤖 Reviewed at 433182b for bugs and critical tech debt; found none. Checked the thread-root scope change (shownIn) against the conversation-wide ActivityIndicatorPresentation store and MessageRow's useThreadAgents reader, and that presence registers only while a bubble entry is shown. Merges cleanly with main. Locally: 14 related vitest files (499 tests) and local-agent-activity.spec.mjs on Chromium (10/10) pass.

@baxen
baxen merged commit 6b436df into main Nov 6, 2026
59 of 60 checks passed
@baxen
baxen deleted the loganj/one-working-indicator branch November 6, 2026 22:14
johnmatthewtennant added a commit that referenced this pull request Nov 6, 2026
Co-authored-by: Simone <0828be588d5c9c4d092c5b1cf01761d5aef63d6b104807fd8e8284d517dd1a99@buzz.block.builderlab.xyz>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* origin/main: (22 commits)
  feat(agents): squircle agent avatar previews (#2879)
  fix(todos): show Todos read-only without Canvas write access (#2799)
  fix(unread): leave mentions that arrive during catch-up unread (#2801)
  Show one working indicator while a message's live activity shows (#2851)
  fix(agents): ask before deleting a team (#2820)
  fix(dialog): keep stepped dialog cards top-anchored during crossfade (#2893)
  feat(attention): Interest titles, summaries and named people, and Activity and pause fixes (#2860)
  fix(messages): Enter on the outside-mention prompt invites again (#2897)
  feat(agents): keep open agent transcripts current while the agent works (#2844)
  perf(solo): render a sidebar chat row only when it changes (#2505)
  fix(solo): restore agent selection during slow background reads (#2751)
  feat(search): preview unread thread replies in cmd+k (#2743)
  fix(plugins): suggest SSH when a private HTTPS clone needs credentials (#2455)
  fix(browser-host): use the Buzz login variant for dev Builderlab sign-in (#2222)
  refactor(plugin-manager): move distributor values into build settings (#2649)
  fix(communities): let Cancel, × and Escape leave a Join lookup and name the host that didn't answer (#2821)
  fix(agents): let watches hear public channels the agent is not in (#1854)
  Preview and send Drafts & sent in place, with a shared count bubble (#2833)
  feat(terminal): add an Option as Meta key setting on macOS (#2850)
  fix(agents): restrict workflow requests in bb-block only (#2518)
  ...

Signed-off-by: John Tennant <jtennant@squareup.com>

# Conflicts:
#	src/bundled/agents/AgentAvatarPicker.tsx
#	src/bundled/agents/AgentCreate.module.css
johnmatthewtennant added a commit that referenced this pull request Nov 6, 2026
Co-authored-by: Simone <0828be588d5c9c4d092c5b1cf01761d5aef63d6b104807fd8e8284d517dd1a99@buzz.block.builderlab.xyz>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* origin/main: (22 commits)
  feat(agents): squircle agent avatar previews (#2879)
  fix(todos): show Todos read-only without Canvas write access (#2799)
  fix(unread): leave mentions that arrive during catch-up unread (#2801)
  Show one working indicator while a message's live activity shows (#2851)
  fix(agents): ask before deleting a team (#2820)
  fix(dialog): keep stepped dialog cards top-anchored during crossfade (#2893)
  feat(attention): Interest titles, summaries and named people, and Activity and pause fixes (#2860)
  fix(messages): Enter on the outside-mention prompt invites again (#2897)
  feat(agents): keep open agent transcripts current while the agent works (#2844)
  perf(solo): render a sidebar chat row only when it changes (#2505)
  fix(solo): restore agent selection during slow background reads (#2751)
  feat(search): preview unread thread replies in cmd+k (#2743)
  fix(plugins): suggest SSH when a private HTTPS clone needs credentials (#2455)
  fix(browser-host): use the Buzz login variant for dev Builderlab sign-in (#2222)
  refactor(plugin-manager): move distributor values into build settings (#2649)
  fix(communities): let Cancel, × and Escape leave a Join lookup and name the host that didn't answer (#2821)
  fix(agents): let watches hear public channels the agent is not in (#1854)
  Preview and send Drafts & sent in place, with a shared count bubble (#2833)
  feat(terminal): add an Option as Meta key setting on macOS (#2850)
  fix(agents): restrict workflow requests in bb-block only (#2518)
  ...

Signed-off-by: John Tennant <jtennant@squareup.com>

# Conflicts:
#	src/bundled/agents/AgentCreate.module.css
wpfleger96 added a commit that referenced this pull request Nov 6, 2026
…ion-and-status

* origin/main:
  feat(agents): team instructions history and agent/team config tools (#2848)
  test(plugin-manager): use an immutable git socket fixture (#2665)
  fix(attention): show the attention toggle when an agent has nothing yet (#2907)
  fix(agents): stream the remote agent introduction 1.5× faster (#2902)
  fix(relay): stop holding a watched public channel that a read after a reconnect leaves out (#2889)
  feat(agents): squircle agent avatar previews (#2879)
  fix(todos): show Todos read-only without Canvas write access (#2799)
  fix(unread): leave mentions that arrive during catch-up unread (#2801)
  Show one working indicator while a message's live activity shows (#2851)
  fix(agents): ask before deleting a team (#2820)
  fix(dialog): keep stepped dialog cards top-anchored during crossfade (#2893)
  feat(attention): Interest titles, summaries and named people, and Activity and pause fixes (#2860)
  fix(messages): Enter on the outside-mention prompt invites again (#2897)
  feat(agents): keep open agent transcripts current while the agent works (#2844)
  perf(solo): render a sidebar chat row only when it changes (#2505)
  fix(solo): restore agent selection during slow background reads (#2751)
  feat(search): preview unread thread replies in cmd+k (#2743)
  fix(plugins): suggest SSH when a private HTTPS clone needs credentials (#2455)

# Conflicts:
#	src/features/agents/team-ops.ts
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants