Repository navigation
Conversation
ApprovabilityVerdict: Approved at Macroscope's review found this PR approvable — This is a localized UI/accessibility fix that names the existing background work a waiting thread is already tracking, with corresponding truncation and unit-test coverage. It does not change thread execution, scheduling, defaults, schemas, or deployment behavior. You can add or adjust custom eligibility rules. Learn more. |
48455d0 to
681a18e
Compare
|
Hit this on iOS with Claude (Opus 5.5) threads. The parent's turn ends while subagents keep running, and the thread looks idle in the thread list. Opening it shows the "Waiting on…" pill. On main, |
|
Review requested
Logged so this PR shows when a maintainer was asked to review it. |
|
I see a bit of animation strangeness where upon hovering with a long enough subagent name, the name briefly expands to full width of the card before disappearing; so far I haven't seen any other existing parts of the card do this. screenrecording-2026-10-06_14-28-35.mp4 |
|
Thanks, reproduced and fixed in 9ee0da3. On hover the status label leaves the flow and fades out under the row actions, but only its right edge was pinned. A long "Waiting on …" label kept its full width, so for the length of the fade it covered the project name. Short labels like "Working 3m" barely move, which is why nothing else on the card showed it. The fading label is now clipped to the status slot. Measured on a hovered row: the label used to span x 77–237 over a slot of x 154–237; it now stays within x 174–237. The resting layout is unchanged. |
Dismissing prior approval to re-evaluate 9ee0da3
58d058d to
70b883a
Compare
The Working section answers "is my task still underway?". A waiting row now answers "what's happening?": it names the work that will wake the agent, such as "Waiting on 2 subagents", with that work's icon, instead of a bare "Waiting" on web and nothing at all on mobile. Commands the agent left running, such as a dev server, are not named. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
The row is one accessible element whose label was only the title, so the new "Waiting on ..." detail was invisible to screen readers. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
On hover the status label leaves the flow and fades out under the row actions. Only its right edge was pinned, so a long "Waiting on ..." label kept its full width and swept over the project name while it faded. The fading label now fills only the slot and clips to it. Dropping justify-self-end lets the absolute label stretch between both insets; it never applied to the static flex item. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
70b883a to
9b20dcb
Compare
Dismissing prior approval to re-evaluate 9b20dcb

Problem
With the Working section on, a thread parked on background work reads only "Waiting" on web and shows nothing at all on mobile. The section already says the task is underway; the row does not say what it is waiting on. Is it two subagents, a monitor, or a test run? You have to open the thread to find out, and "Waiting" next to a thread that is about to wake looks the same as one that will sit for 40 minutes.
Change
The section answers "is my task still underway?" The row answers "what is happening?"
backgroundWorkHoldsCompletion. A dev server left running next to a subagent is not listed, and a thread with only a dev server left stays out of Working, as it does today.One helper,
presentWaitingRowStatusinclient-runtime, feeds both clients. It reusespresentPendingBackgroundWork, so the row and the composer strip cannot drift.Scope and approval
This is a proposal for the open question in #15433 (and the "Waiting" label in #15099): keep one Working section, and put the waiting detail on the row instead of deciding placement with it. I have not had maintainer sign-off on the direction. The proposal and these screenshots are posted for that decision in #15433 (comment). If you would rather not take it, close this and I'll drop it.
It does not change which threads count as working, so it is independent of #15413 and composes with #15315.
Verification
Live run on an isolated dev server (fresh state, Claude Opus 5.5 turns, Working section on). The same live threads are captured with
main's row code swapped in by hot reload (before) and with this branch (after).Web sidebar. "Launch UI Test Fixture Agents" is waiting on two background subagents. "Background Agent UI Test" is waiting on a monitor and two background commands; only the monitor is named. "Run Slow Benchmark Fixture" is the main agent working. "Start Local UI Test Server" only left a dev server running and stays in the inbox.
main) / After (this PR)When the subagents finished, the thread left Working and returned to the top of the inbox as Done:
After the subagents finish
Mobile thread list (iOS Simulator, iOS 26.5, on main after #17368). Before, the waiting row fades but shows no label at all. After, it reads "Waiting on 2 subagents" with the subagent icon. The row's accessibility label read "Slow Test Fixture Delegation, Waiting on 2 subagents" in an AgentDevice snapshot.
main) / After (this PR)Hover fade (web). Frames below freeze the 150 ms fade at full opacity to show where the label sits while it fades. Measured on the hovered row: before, the slot spanned x 154–237 but the label spanned x 77–237, over the project name (x 40–148). After, the label stays within the slot (x 174–237). The resting layout is unchanged (label x 77–237 in both).
Checks:
vp test run packages/client-runtime/src/state/threadExecution.test.ts apps/web/src/components/Sidebar.logic.test.ts: 191 passed on the rebased head. New cases cover a single named item, grouped counts led by subagents, and that commands left running are not named (including a dev server next to a monitor, and a dev server alone).tsc --noEmitinpackages/client-runtime,apps/web, andapps/mobile: no errors.vp linton the changed files: no new warnings./goal(feat: native /goal for Codex and Claude, with goal status in the UI #15592), and had no findings. Round 4 checked the hover-fade fix across every status, focus, and snooze-menu state and had no findings. Round 5 checked the rebase onto the auth permission changes (feat(auth): separate environment administration permissions #9786) and had no findings. Round 6 checked the mobile label rebuilt on feat(mobile): fade working threads and match web's status labels #17368's status label design and had no findings.Not checked: Android, the desktop app shell (it renders the same web sidebar), and a held command, which needs #15315.
Claude Opus 5.5 via Claude Code in T3 Code.
🤖 Generated with Claude Code