Skip to content

Unify thread-list header actions and nested view controls - #3402

Merged
brsbl merged 7 commits into
mainfrom
bb/thread-list-direction-main-thr_ccffp4w2p2
Sep 10, 2026
Merged

Unify thread-list header actions and nested view controls#3402
brsbl merged 7 commits into
mainfrom
bb/thread-list-direction-main-thr_ccffp4w2p2

Conversation

@brsbl

@brsbl brsbl commented Sep 10, 2026

Copy link
Copy Markdown
Collaborator

Human comments

What was wrong

  • Thread-list controls changed placement and menu structure between Pinned, projects, sections, machines, and loose threads. Worktree creation was hidden in its menu, and independently styled buttons made the sidebar harder to scan and maintain.
  • Pinned could remain stuck above unrelated groups after its threads scrolled away. Compact worktree actions were inaccessible to touch, and reversing Updated at also reversed the existing active-first priority.

What changed

  • All organizing headers share New thread followed by on hover/focus, with visible controls on touch. Every header menu offers New project, New section, and compact nested Organize and Sort by menus, followed by existing context-specific actions.
  • Organize is an exclusive choice and closes after selection. Sort remains open while tuning; selecting the current field reverses its arrow and direction while Updated at keeps active threads first. The additive sidebar.sortDirection preference uses the existing persistence, SDK, and CLI paths; default preserves prior ordering.
  • Worktrees expose New thread inline, leaving Rename and Archive in their menu. Project editing actions are grouped together and separated from the existing Remove action. No creation destinations or destructive consequences change.
  • Shared row-control components and semantic color/state tokens keep titles primary, grouping labels quieter, and controls secondary—including on hovered or selected rows. Navigation More uses a quieter resting color. Pinned now scrolls with its contents.
  • Production Sidebar Overview stories replace the discarded prototype. The implementation removes superseded controls and delegates menu open/close state to the shared dropdown; the slimming pass removes 96 net lines (78 production, 18 tests) without changing approved behavior. Thread nesting, archive placement, plugin actions, and command-palette behavior are outside this change.

How you verified

  • Remote CI passed at exact head cde7aeceeeb00958b82badfecd03437b04059f2d: build/typecheck/lint, all app/server/package/integration tests, and Linux/macOS package smoke. All 14 reported checks passed; native iOS and Node compatibility were workflow-skipped. No local CI-equivalent checks were run.
  • Rebased onto main@e02f6e64cc7afdf490e70a662c6445b5b8dee407, retaining the prior merge resolutions. Tree comparison confirms the result is exactly the previous implementation plus upstream changes; the PR remains 27 files. Main's touch-visibility regression exercises the actual shared project controls through closed, open, and reclosed states.
  • Exact-head Chrome for Testing 153.0.8010.36 verification passed at 1440×900 and 390×844: project menu ordering, Organize closing after selection, Sort remaining open during direction changes, and compact Back/close/reopen reset. Project controls remain visible and interactive with 36×36 touch targets before/during/after opening. Restored fixture preferences persist after reload.
  • Earlier bounded QA covered project/machine/custom views, active-first sorting, light/dark control states, plugin styling, Pinned scrolling, worktree creation/rename, and collapsed touch controls. Retained regression tests cover action ordering, callbacks, focus behavior, menu lifecycle, preference validation, and active-first date sorting.
  • Remaining verification limits: phone coverage is Chrome touch emulation, not native iOS/Safari. The existing compact retained-focus aria-hidden warning also occurred during close/reopen; the app root remained non-inert and exposed. The warning is not claimed fixed by this rebase.
  • One cumulative review was completed previously; no second review was run. git diff --check passed.
  • Screenshots use the same synthetic data, route /, project view, Updated at sorting, light theme, and open Atlas project menu. Before: exact merge base e02f6e64cc7afdf490e70a662c6445b5b8dee407. After: exact head cde7aeceeeb00958b82badfecd03437b04059f2d. Desktop images are matching 460×844 crops of a 1440×900 viewport; phone images are full 390×844 captures.
Surface Before After
Desktop project menu Before — desktop project menu After — shared header menu
Phone project menu Before — phone project menu After — phone header menu

BB-Thread-ID: thr_ccffp4w2p2

AGENT GENERATED

@brsbl
brsbl force-pushed the bb/thread-list-direction-main-thr_ccffp4w2p2 branch from 0d8422c to cde7aec Compare September 10, 2026 19:12
@brsbl
brsbl merged commit de93612 into main Sep 10, 2026
16 checks passed
@brsbl
brsbl deleted the bb/thread-list-direction-main-thr_ccffp4w2p2 branch September 10, 2026 19:49
brsbl added a commit that referenced this pull request Sep 10, 2026
## Human comments

## What was wrong

- Custom-organized sidebar threads could be moved by drag and drop, but
their row actions offered no destination picker.

## What changed

- Adds **Move to section** with `MoveTo` to active root-thread actions
in **Custom** view: desktop dropdown/right-click submenus and a compact
long-press step with **Back**.
- Follows saved sidebar order, including **Threads**, and omits
**Pinned**. The current destination is disabled for unpinned threads.
Existing mutations preserve move persistence; moving a pinned thread
unpins it, and choosing its stored section only unpins it.
- Integrates with the shared sidebar header controls from #3402. The
focused diff remains 12 files; main's bundle limits are unchanged.

## How you verified

- Remote [CI](https://github.com/get-bb/bb/actions/runs/34524003966) for
`d334e6953963fd5891a1fdb7eb75f020cd604d0f`: **14 passed, 2 skipped**,
including checks, app/server/package/integration tests, and macOS/Ubuntu
package smoke. Optional Node compatibility and native iOS jobs were
skipped. The app fits unchanged bundle limits: **1681.7 KB raw / 410.9
KB brotli** against **1683.2 KB / 419.0 KB**.
- Menu and mutation tests cover desktop/context parity, eligibility,
compact Back/reset, destination no-op, section moves, and both pinned
transitions. Existing optimistic-update and serialized-unpin coverage
remains.
- Final-head Chrome for Testing **153.0.8010.36**: shared header **By
project → Custom** eligibility; desktop dropdown and right-click moves
to a section and **Threads**; hard-reload persistence and disabled
current destination; compact touch long-press, **Back**, close/reopen
reset, and saved moves. No captured runtime errors or compact app-root
`inert`/`aria-hidden` changes. All six synthetic threads and sidebar
settings were restored. The unchanged pinned transitions were exercised
before this rebase and retain passing remote mutation coverage.
- Native iOS is unverified: the local Xcode/CoreSimulator setup is
incompatible and cannot resolve `simctl`; remote iOS coverage was
skipped. Phone-width Chrome does not establish native iOS or Safari
behavior.

| Surface | Before — merge base `de9361268088` | After — head
`d334e6953963` |
| --- | --- | --- |
| Desktop web · 1440 × 900 | ![Before: shared sidebar headers and row
actions without Move to
section](https://github.com/user-attachments/assets/1bd7059a-e7af-454b-8cbd-a581f773027c)
| ![After: Move to section alongside shared sidebar
headers](https://github.com/user-attachments/assets/53f120a5-c178-4638-8d07-0d4f05aee7dd)
|
| Phone web · 390 × 844 | ![Before: compact long-press row actions
without Move to
section](https://github.com/user-attachments/assets/ce444e5c-34ca-4b0f-b178-6c23b5452269)
| ![After: compact Move to section step with
Back](https://github.com/user-attachments/assets/1b80ab7a-888f-4b9b-8205-ccae4cc6074e)
|

- Both revisions use `scripts/bb-dev-app current` under **Node
22.19.0**, sequentially in the same managed worktree. Captures match the
synthetic **Release notes** thread in **Follow-ups**,
`/threads/thr_move_release`, **Custom** organization, light theme, scale
1, and viewport per row. Images were inspected directly.

BB-Thread-ID: thr_ccffp4w2p2

> AGENT GENERATED
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