Skip to content

Prioritize active runtime spinner in thread rows#828

Merged
SawyerHood merged 1 commit into
mainfrom
bb/prioritize-active-spinner-thr_a752c6bpuy
Jul 21, 2026
Merged

Prioritize active runtime spinner in thread rows#828
SawyerHood merged 1 commit into
mainfrom
bb/prioritize-active-spinner-thr_a752c6bpuy

Conversation

@SawyerHood

Copy link
Copy Markdown
Collaborator

Summary

  • make foreground runtime activity the highest-priority thread-list indicator
  • prevent plugin row statuses from replacing the active runtime spinner
  • preserve workflow, plan, goal, background-agent, and background-command indicators once the runtime is idle
  • update sidebar, collapsed rollup, search, mobile, and story coverage

Tests

  • pnpm exec turbo run test --filter=@bb/app --force (251 files, 1,824 tests)
  • pnpm exec turbo run typecheck --filter=@bb/app
  • pnpm exec turbo run lint --filter=@bb/app
  • git diff --check

Closes BB-74

@SawyerHood
SawyerHood merged commit 5ca55ba into main Jul 21, 2026
10 checks passed
@SawyerHood
SawyerHood deleted the bb/prioritize-active-spinner-thr_a752c6bpuy branch July 21, 2026 02:07
SawyerHood added a commit that referenced this pull request Jul 23, 2026
)

## Summary

A thread blocked on `AskUserQuestion` keeps its runtime `active` for as
long as the question is open. #828 made `isRuntimeActive` the top of
`resolveThreadListIndicator`, so the spinner won that race every time
and the `CircleQuestion` glyph became unreachable — the sidebar never
showed that a thread was waiting on you.

Verified against real data rather than inferred: for thr_zqfgksiw39,
pending interaction `pint_h2mmtg9wpb` (`kind: user_question`) was open
from `1784843793813` to `1784843949375`, and a screenshot taken at
`1784843844010` — inside that window, with the thread at `status:
active` / `displayStatus: active` — shows a spinner on the row.

This restores the pre-#828 ordering and demotes only the three ambient
work signals below the spinner, which is the narrower fix #828 was
reaching for:

| # | indicator |
|---|---|
| 1 | `unread-error` |
| 2 | `waiting-for-input` |
| 3 | `working-draft` |
| 4 | `plan-mode` |
| 5 | `goal` |
| 6 | **`runtime`** |
| 7 | `workflow` |
| 8 | `background-agent` |
| 9 | `background-command` |
| 10 | `draft` |
| 11 | `unread-success` |

Net effect versus pre-#828 is only that `workflow`, `background-agent`,
and `background-command` moved from above the spinner to below it.

## Behavior reverted from #828

Both were asserted by tests #828 added, so those tests are rewritten
here:

- A thread working **with an unsubmitted draft** shows the shimmering
pencil again, not the spinner.
- A thread working **in plan mode or with an active goal** shows
`ListTodo`/`Target` again, not the spinner. Both use
`animate-shine-icon`, so the row still reads as working.

## Test changes

9 tests across 5 files encoded #828's spinner-first order. The three
"uses shared runtime precedence" tests (collapsed-section rollup, thread
search, mobile recents) keep their fixtures and just flip which glyph
wins — they still prove those surfaces defer to the shared helper. Added
a `ThreadRow` test for the actual reported case: pending interaction +
active runtime renders `CircleQuestion`.

## Known gap (not addressed)

`SplitPaneMiniMap` (#862) replaces the entire trailing glyph slot for a
thread open in a split, so a pending question there still shows no
question mark.

## Tests

- `pnpm exec turbo run test --filter=@bb/app --force` — 283 files, 2079
tests passing
- `pnpm exec turbo run typecheck lint --filter=@bb/app` — typecheck
clean, lint 0 errors (151 pre-existing warnings)

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-authored-by: Claude <noreply@anthropic.com>
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.

1 participant