Skip to content

Open compact tool tabs as full-page surfaces - #2762

Open
brsbl wants to merge 18 commits into
bb/compact-mobile-shelves-thr_wftu7bh9ezfrom
bb/compact-tool-tabs-full-page-thr_wftu7bh9ez
Open

Open compact tool tabs as full-page surfaces#2762
brsbl wants to merge 18 commits into
bb/compact-mobile-shelves-thr_wftu7bh9ezfrom
bb/compact-tool-tabs-full-page-thr_wftu7bh9ez

Conversation

@brsbl

@brsbl brsbl commented Aug 31, 2026

Copy link
Copy Markdown
Collaborator

Human comments

What was wrong

After the right panel became a shelf, every tab remained constrained to 298.67px. Selecting New Tab could update the tab strip while leaving Info content visible, so tool surfaces did not receive a usable phone-width canvas. A newly created terminal could also lose its persisted active selection while the terminal list caught up, causing the settled tab to fall back to the shelf.

What changed

  • Let the active tab determine the compact presentation; the control that opened the panel does not independently choose shelf versus full-page.
  • Keep Info in the compact right shelf.
  • Expand every non-Info tab, including New Tab and tabs opened from it, from the right to a full-width surface above fixed app chrome.
  • Render the available production tab and preserve its full-page presentation while persisted active selection catches up.
  • Select and render New Tab's production content after its loading state settles.
  • Close the right panel when the left navigation opens so compact surfaces cannot compete for the page.
  • Replace substitute story markup and wrappers with the production shelf, panel, file preview, compact home, sidebar provider, and sidebar inset.

Compact presentation rules

The opener only selects or restores a tab. The active tab kind determines the panel geometry, and switching tabs changes that geometry immediately.

Trigger or active destination Compact result
Open or select Info (thread-info) Right shelf at 76vw. An unresolved or empty initial tab state also uses this safe fallback.
Open or select New Tab Full-page at 100vw.
Open or select Terminal, Diff, Browser, file preview, plugin page, or any other non-Info tab Full-page at 100vw.
Tap the right-panel toggle on an existing thread Reopen the current tab: Info returns as a shelf; a non-Info tab returns full-page. If no tab has resolved, Info is the default shelf destination.
Tap the right-panel toggle on Home / new-thread compose Create and select New Tab, so the panel opens full-page immediately.
Open the left navigation or close the right panel Hide the right surface; this does not create a competing shelf.

No mobile-home, navigation-feedback, provider-cache, or base shelf behavior changes in this layer.

How you verified

  • Chrome for Testing 151.0.7922.71 at 393×852 CSS px against exact final base ddaf081641b863e5c060f5bb5b5690439aaa3b7c and exact final head f06a2a7be2676edc878bc5808ae896a22784cca4.
  • From the same production New Tab surface, chose Start terminal and waited for the real zsh tab and xterm subtree to settle with zero panel skeletons.
  • Base: terminal remained in the 298.67px shelf at x=94.33 and the app stopped at x=-298.68. Head: the same terminal became a 393px full-page surface at x=0 and shifted the app completely to x=-393.
  • Reproduced the active-selection race after terminal creation, then verified the final head keeps the settled production terminal full-page with no browser errors.
  • Rechecked the exact final head in the branch web app on /projects/proj_m65y3vujaj/threads/thr_done, using one realistic environment-backed fixture, the same persisted AppPageHeader.tsx tab, the same populated Recent item, and the same viewport for both current-head captures. Only the active tab changed.
  • Waited for production content before capture: Info rendered environment, branch, merge base, PR, commits, and changed files; New Tab rendered file search, production actions, and a Recent file opened through the production panel flow.
  • Measured each production right-panel dialog subtree: Info settled at x=94.33, 298.67×852; New Tab settled at x=0, 393×852.
  • In the Info shelf, both translated center-pane action regions computed hidden while the fixed sidebar toggle remained visible outside the inset.
  • Full-page mode measured z=45 over fixed app chrome at z=40, while the production body-portaled tooltip remained z=50 and painted above the opaque tool page.
  • Focus entered the panel, Tab and Shift+Tab stayed contained, the first Escape dismissed the nested tooltip without closing the tool page, and the second restored the exact right-panel trigger.
  • Remote CI passed tests, typecheck, lint, both package smokes, and version gates on the exact final head. No local CI-equivalent command was run.

Current-head behavior: Info versus New Tab

The original evidence followed New TabStart terminal and captured the terminal endpoint. It proved that a non-Info tab became full-page, but Info was never selected, so the unchanged shelf exception was missing from the evidence.

Info tab — compact right shelf New Tab — full-page surface
Exact final PR head: production Info tab renders populated thread metadata in the 76vw compact right shelf Exact final PR head: production New Tab renders file search, actions, and a realistic Recent item in a full-page compact surface

Original base/head width regression

This historical pair remains the original feature regression; the current-head pair above is the final-branch evidence.

Before — tool tab constrained to shelf After — same tool tab full page
Before: production zsh tab remains constrained to the rounded right shelf After: production zsh tab remains selected and expands to a full-page compact surface

BB-Thread-ID: thr_wftu7bh9ez

AGENT GENERATED

brsbl added 17 commits August 30, 2026 23:09
# Conflicts:
#	apps/app/src/components/ui/sidebar.test.tsx
#	apps/app/src/components/ui/sidebar.tsx
…ct-tool-tabs-full-page-thr_wftu7bh9ez

# Conflicts:
#	apps/app/src/components/secondary-panel/CompactSecondaryPanelShelf.tsx
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