Skip to content

fix(activity): group Solo follow-ups under one agent row - #2876

Open
johnmatthewtennant wants to merge 9 commits into
mainfrom
jtennant/leona/activity-duplicates
Open

johnmatthewtennant wants to merge 9 commits into
mainfrom
jtennant/leona/activity-duplicates

Conversation

@johnmatthewtennant

@johnmatthewtennant johnmatthewtennant commented Nov 6, 2026 •

Copy link
Copy Markdown
Contributor

Problem

When no message bubble owns the working indicator, the Activity popover can show separate rows and Stop buttons for follow-ups sent to the same agent in a Solo chat. It also treats their triggering messages as threads, although they belong to one continuous conversation.

Solution

Group top-level Solo requests into one live row per agent, retaining its current step and Stop control. Their destination and scope are the channel conversation. Actual thread work retains separate rows and controls. A message’s live bubble continues to suppress the trailing indicator.

Validation

Before the fix, two concurrent Solo requests produced two Stop rows and a message ID reported as a thread. The browser journey sends a follow-up while the first request remains active, verifies that live bubbles suppress the trailing cue, then disables Agent Activity through Settings to exercise the host fallback. It shows one row without a Thread label and sends keyboard Stop to the displayed request. Chromium and WebKit pass in both themes at narrow and desktop widths. Component coverage also checks mixed Solo and actual-thread scope and navigation.

The browser exercises the production app, broker and activity stores with disposable relay identities and a controlled agent runtime. Native human verification of the corrected mixed-work label remains pending.

Screenshots

One fallback Activity row for two Solo requests

johnmatthewtennant and others added 3 commits November 6, 2026 15:14
Co-authored-by: Leona <223be3431f004b70add8b6504a977b2da75f6fa73fb3ef2fa0ddae86f8643409@buzz.block.builderlab.xyz>
Signed-off-by: John Tennant <jtennant@block.xyz>
Co-authored-by: Leona <223be3431f004b70add8b6504a977b2da75f6fa73fb3ef2fa0ddae86f8643409@buzz.block.builderlab.xyz>
Signed-off-by: John Tennant <jtennant@block.xyz>
Co-authored-by: Leona <223be3431f004b70add8b6504a977b2da75f6fa73fb3ef2fa0ddae86f8643409@buzz.block.builderlab.xyz>
Signed-off-by: John Tennant <jtennant@block.xyz>
@johnmatthewtennant
johnmatthewtennant marked this pull request as ready for review November 6, 2026 21:25
@johnmatthewtennant
johnmatthewtennant requested a review from a team as a code owner November 6, 2026 21:25
@morgmart

morgmart commented Nov 6, 2026

Copy link
Copy Markdown
Contributor

🤖 Design review (Design Reviewer agent, head b5a10ce)

Looks good from a design standpoint. A follow-up in a Solo chat no longer adds a second Activity row or a misleading "Thread" label, and real thread work still gets its own row. No must-fix issues.

Optional: with two requests in flight, one row and one Stop button now cover both. The PR says Stop goes to the request shown. If the other request keeps running after you press Stop, the row comes back and Stop feels like it didn't work. Worth confirming that Stop ends everything that row stands for.

Not checked: I didn't run the app. I judged from the diff and screenshot, and didn't check several agents in one Solo chat or keyboard use in the popover.

@johnmatthewtennant

Copy link
Copy Markdown
Contributor Author

🤖 I traced the Stop dispatch at this head. The request ID selects its runtime stopper; it is not limited to cancelling one presentation row. Claude’s stopper interrupts the shared conversation session, and messages folded into the running turn end together (runtime, turn interruption).

There is a distinction for work queued for a later turn, such as a Codex request using another model: the existing contract leaves that queued request intact (regression coverage). I am retaining that existing current-turn Stop behavior rather than expanding this presentation fix into queue cancellation. This is a source-and-existing-test assessment; John’s acceptance did not separately confirm the optional Stop exercise.

@kalvinnchau kalvinnchau left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

🤖 One minor scope-label defect remains in mixed Solo/thread activity.

Comment thread src/features/agents/work-stop.ts Resolved
@johnmatthewtennant
johnmatthewtennant marked this pull request as draft November 6, 2026 21:47
Co-authored-by: Leona <223be3431f004b70add8b6504a977b2da75f6fa73fb3ef2fa0ddae86f8643409@buzz.block.builderlab.xyz>
Signed-off-by: John Tennant <jtennant@block.xyz>
@johnmatthewtennant johnmatthewtennant added the pre-nov-10 Urgent for November 10 launch label Nov 6, 2026
johnmatthewtennant and others added 3 commits November 6, 2026 17:19
Preserve the live-indicator and Solo grouping help descriptions.

Co-authored-by: Leona <223be3431f004b70add8b6504a977b2da75f6fa73fb3ef2fa0ddae86f8643409@buzz.block.builderlab.xyz>
Signed-off-by: John Tennant <jtennant@block.xyz>
Verify the live bubble owns the working cue, then exercise grouped Solo Stop controls through the host fallback with Agent Activity disabled.

Co-authored-by: Leona <223be3431f004b70add8b6504a977b2da75f6fa73fb3ef2fa0ddae86f8643409@buzz.block.builderlab.xyz>
Signed-off-by: John Tennant <jtennant@block.xyz>
Keep observed reply-thread destinations and transcript origins. Treat mixed channel and thread roots as aggregate channel work when no Stop control is available.

Co-authored-by: Leona <223be3431f004b70add8b6504a977b2da75f6fa73fb3ef2fa0ddae86f8643409@buzz.block.builderlab.xyz>
Signed-off-by: John Tennant <jtennant@block.xyz>
@johnmatthewtennant
johnmatthewtennant marked this pull request as ready for review November 7, 2026 11:57

@wesbillman wesbillman 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.

🤖 Star Lord’s automated source review via Wes’s account, with independent Rocket, Mantis and Groot coverage.

Reviewed head 9f8b74f4a54f5ea5beb47c814a5c34d9fd05801d against target/merge-base 1f6e1087003bb70f71e1248c0264182fdfd35c28.

One navigation regression is detailed inline: selecting the explicitly channel-scoped Solo row loses the direct transcript opening when that agent also has thread work.

Source-only review of the diff, relevant callers/lifecycle, tests, PR description and screenshot. No tests, builds, app or browser/native workflows were run; the reported browser passes and pending native verification remain unverified by this review. Stop continues to target the current turn under the existing contract; queued future-turn cancellation is outside this change.

@johnmatthewtennant
johnmatthewtennant marked this pull request as draft November 7, 2026 12:31
Keep explicit channel scope through the Activity chooser while leaving aggregate mixed-work navigation inferred.

Co-authored-by: Leona <223be3431f004b70add8b6504a977b2da75f6fa73fb3ef2fa0ddae86f8643409@buzz.block.builderlab.xyz>
Signed-off-by: John Tennant <jtennant@block.xyz>
@johnmatthewtennant
johnmatthewtennant marked this pull request as ready for review November 7, 2026 12:40

@wesbillman wesbillman 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.

🤖 Star Lord’s automated source follow-up via Wes’s account, with independent Rocket, Mantis and Groot coverage.

The prior P2 in #2876 (comment) is addressed at 8ecece6e48e248b7ebe39351b902fbabf3746a94. The selected Solo row now retains its explicit channel scope through the transcript-opening decision, then normalizes it at the navigation boundary. The added component cases cover profile-capable mixed Solo/thread work and preserve aggregate navigation when no individual work row is selected.

No new actionable findings in the correction or its affected callers. Compared the follow-up against previously reviewed 9f8b74f4a54f5ea5beb47c814a5c34d9fd05801d; target and merge-base remain 1f6e1087003bb70f71e1248c0264182fdfd35c28. Prior grouping/Stop coverage is retained.

Source-only: no tests, builds, apps or browser/native workflows were run. Reported test passes and native acceptance remain unverified by this review. The unchanged PR description and byte-identical screenshot retain the prior public-material inspection.

@kalvinnchau kalvinnchau left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

🤖 One minor scope/status inconsistency remains; the earlier scope-label and transcript-dispatch findings are resolved.

Comment thread src/features/agents/work-stop.ts Resolved
Co-authored-by: Leona <223be3431f004b70add8b6504a977b2da75f6fa73fb3ef2fa0ddae86f8643409@buzz.block.builderlab.xyz>
Signed-off-by: John Tennant <jtennant@block.xyz>

@wesbillman wesbillman 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.

🤖 Star Lord automated source review via Wes’s account, with independent Rocket, Mantis and Groot coverage.

Follow-up reviewed at 158a51b23866a1f49877a0273f1df8f97af31ce6 against target/merge-base 1f6e1087003bb70f71e1248c0264182fdfd35c28, focusing on the changes since 8ecece6e48e248b7ebe39351b902fbabf3746a94 and retaining the prior grouping/navigation review.

No new actionable findings. The observed-thread scope fix aligns in-flow local Stop selection with status: the waiting Solo request owns the channel row, while the observed thread retains its own control. The added mounted regression distinguishes those targets. The existing subscription and Stop lifecycle retain the captured request when visible roots change; explicit thread and aggregate views preserve their previous behavior. The prior transcript-navigation P2 remains resolved in source.

Source-only: we did not run tests, builds, the app, or browser/native interactions. Reported test passes and runtime focus behavior remain unverified. The public description and previously inspected screenshot are unchanged.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

pre-nov-10 Urgent for November 10 launch

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants