Skip to content

fix(web): shed session toolbar icons by keep rank instead of overlapping - #2040

Merged
heavygee merged 21 commits into
tiann:mainfrom
heavygee:fix/2039-session-toolbar-crowd
Oct 18, 2026
Merged

heavygee merged 21 commits into
tiann:mainfrom
heavygee:fix/2039-session-toolbar-crowd

Conversation

@heavygee

@heavygee heavygee commented Oct 16, 2026 •

Copy link
Copy Markdown
Collaborator

Summary

Fixes #2039. Narrow session-list headers were painting the search clear over neighboring controls, then later fixes either wrapped onto a second row or hid every icon behind More and left an empty gap.

This keeps one nowrap row. Controls that do not fit move into a More menu one priority band at a time, not all at once. Rank is which control survives, not its left-to-right position.

Keep order (1 stays the longest)

Search is not in this list. It never moves into More.

Keep Control Why
4 New Used constantly
5 Unread lens Everyday filter
6 Settings Fine to live in More
7 Mark all read Bulk clear from #1773. Still there, behind the filters, not beside New
8 Browse Workspace browser. Sheds before Settings

The machine filter is a separate row (desktop chips / the mobile machine menu). It is not part of this ladder.

More is the same width as one icon, so the row sheds at least two icons before More saves any space. If everything fits, there is no More and no gap.

Test plan

  • bun run test:web -- src/components/sessionToolbarShed.test.ts src/components/SessionList.directory-action.test.tsx src/components/SessionList.machine-filter.test.tsx
  • ~320–400px sidebar, empty search: New and the unread lens stay on the row
  • Same width with a query chip: clear does not overlap the icons that remain
  • Wide sidebar: Settings and Browse stay inline when they fit

Collapsed search used min-w-0 and crushed under shrink-0 icons, so clear
painted over filter/BlockedJumpPill on narrow widths. Keep search chrome
shrink-0 and wrap the header actions group instead (tiann#2039).

Co-authored-by: Cursor <cursoragent@cursor.com>
heavygee added a commit to heavygee/hapi that referenced this pull request Oct 16, 2026
Wrap session header actions so search clear cannot paint over filter /
BlockedJumpPill on narrow widths. Upstream PR tiann#2040.

Co-authored-by: Cursor <cursoragent@cursor.com>

@github-actions github-actions Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Review mode: initial

Requirement — Pass

Preventing overlapping session-toolbar hit targets on narrow panels is a justified usability fix. Existing fixed-size controls can overflow the base layout when search shrinks.

Evidence

  • Issue #2039 describes width-dependent overlap and requires usable controls while retaining large clear targets.
  • Base web/src/components/SessionList.tsx:862 and :1955 combine a shrinkable search group with a non-wrapping toolbar.

Approach — Pass

Preserving search-control widths and allowing trailing actions to wrap is a viable, localized solution. The action group's flex sizing needs correction within this approach.

Evidence

  • Head web/src/components/SessionList.tsx:870 prevents search shrinking; :1964 enables wrapping and :1982 groups trailing actions.

Code — Reviewed

Reviewed the entire fixed-head merge-base diff and relevant callers. One flex-sizing defect can retain overlapping controls at supported narrow sidebar widths. Browser rendering was not executed.

  • [Minor] Give the action group a content-based width so it can wrap — web/src/components/SessionList.tsx:1984

Testing

Not run (automation; PR code execution is prohibited).

  • The PR reports 34 passing focused web tests; this was not independently verified because executing PR code is prohibited.
  • The added regression test checks classes and DOM structure without headerActions or a machine filter; it cannot detect the nested action-group overflow.
  • The PR's narrow- and wide-layout visual checks remain unchecked. BlockedJumpPill has no implementation in the fixed-head web source.
  • Observed CI test, integration, and windows-codex-mcp checks were still in progress.

HAPI Bot

Comment thread web/src/components/SessionList.tsx Outdated
@heavygee

Copy link
Copy Markdown
Collaborator Author

Proof (320×800)

Collapsed search with query "me" at 360px viewport. Measured bounding boxes: clear does not overlap filter or BlockedJumpPill. Header flex-wrap + search shrink-0 (kill criterion from #2039).

Soup dogfood: live on :3006 via driver/2039-toolbar-crowd cherry-pick + hapi-driver-build-web (tip 7e907c715). Hard-reload to see it.

#2039 320px wrap — no clear/filter/pill overlap

asset: heavygee/hapi@pr-attach-proof-2040/proof-2026-10-16T10-54-18-proof-2039-toolbar-320.png · delete release after merge if desired

flex-1 min-w-0 kept the action group beside a long search chip in a 280px
sidebar, so Browse/Settings overflowed onto the calendar. Use w-max shrink-0
and keep the router header-action cluster from shrinking (tiann#2040).

Co-authored-by: Cursor <cursoragent@cursor.com>

@github-actions github-actions Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Review mode: follow-up after new commits

Requirement — Pass

Preventing overlapping session-toolbar controls at narrow widths is a justified usability fix that preserves the required large clear targets.

Evidence

  • Issue #2039 reports width-dependent overlap and requires usable search, clear, and filter controls.
  • Base web/src/components/SessionList.tsx:867 permits search shrinking while :1955 places controls in a non-wrapping row.

Approach — Pass

Preserving search width and wrapping a content-sized action group addresses the crowding locally. The follow-up corrects the previously reported zero-basis action-group sizing.

Evidence

  • Head web/src/components/SessionList.tsx:870 prevents search shrinking; :1965 enables wrapping; :1985 gives actions content-based width and right alignment.
  • Head web/src/router.tsx:251 prevents the Browse/Settings/New cluster from shrinking.

Code — Reviewed

Reviewed the entire fixed-head merge-base diff and surrounding layout. No actionable defects found; the previous finding is addressed. Browser rendering remains unverified.

No reportable code issues found.

Testing

Not run (automation; PR code execution is prohibited).

  • No PR code, tests, builds, or scripts were executed, as required.
  • The PR reports 34 passing focused web tests; this was not independently verified.
  • The regression test asserts classes and structure, but omits router-provided actions and machine filtering and does not measure overlap.
  • The reported visual proof uses a separate cherry-picked deployment; it does not establish rendering at the fixed head. BlockedJumpPill has no implementation in the reviewed source.
  • At inspection, fixed-head test, integration, and windows-codex-mcp CI checks were still in progress.

HAPI Bot

max-w-full plus inner flex-wrap let the action group split, so some icons
stayed beside search and the rest dropped underneath. The group is nowrap
and content-sized, so a tight row moves every icon together.

Co-authored-by: Cursor <cursoragent@cursor.com>
heavygee added a commit to heavygee/hapi that referenced this pull request Oct 16, 2026
Inner flex-wrap split the icon row under search. Match upstream
tiann#2040 fc1a2dc: nowrap content-sized action group.

@github-actions github-actions Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Review mode: follow-up after new commits

Requirement — Pass

Preventing overlapping session-toolbar controls at narrow widths is a justified usability fix that preserves large clear targets.

Evidence

  • Issue #2039 reports width-dependent overlap and requires usable search, clear, and filter controls at 320px.
  • Base web/src/components/SessionList.tsx:867 permits collapsed-search shrinking; :1955 places controls in a non-wrapping row.

Approach — Pass

Preserving search width and wrapping trailing actions as one content-sized group addresses toolbar crowding through localized layout changes.

Evidence

  • Head web/src/components/SessionList.tsx:870 prevents search shrinking; :1964 enables outer wrapping; :1984 keeps actions together and right-aligned.
  • Head web/src/router.tsx:251 prevents the production Browse/Settings/New group from shrinking.

Code — Reviewed

Reviewed the entire fixed-head merge-base diff and surrounding layout. No actionable defects found. Browser rendering remains unverified.

No reportable code issues found.

Testing

Not run (automation; PR code execution is prohibited).

  • No PR code, tests, builds, or scripts were executed, as required.
  • The PR description reports 34 passing focused web tests; this was not independently verified.
  • The added regression test checks classes and structure but omits production header actions and machine filtering and does not measure overlap. Browser coverage should verify narrow and wide layouts with those controls present.
  • The reported visual proof uses a separate cherry-picked deployment, so it does not verify this fixed head. BlockedJumpPill has no implementation in the reviewed source.
  • At inspection, fixed-head test, integration, and windows-codex-mcp CI checks were still in progress.

HAPI Bot

Quest was burning a full toolbar line when the icon slab did not fit
beside collapsed search. Keep one nowrap row; hide browse/settings (and
similar headerActions) below a container-query width, with a higher bar
when the query chip is present (tiann#2039).

Co-authored-by: Cursor <cursoragent@cursor.com>
heavygee added a commit to heavygee/hapi that referenced this pull request Oct 17, 2026
Match upstream tiann#2040 a827924 for soup tip-forward.

Co-authored-by: Cursor <cursoragent@cursor.com>
@heavygee

heavygee commented Oct 17, 2026 •

Copy link
Copy Markdown
Collaborator Author

Follow-up: shed, don't wrap

Dogfood on a narrow panel: wrapping the whole icon slab under collapsed search burned a full toolbar line (worse than hiding controls).

a827924da keeps a single flex-nowrap @container row. Primary stays (filter / mark-all / unread / new). headerActions (browse/settings/…) live in session-list-header-secondary and only return via container query (@[26rem] / @[32rem] when a query chip is present).

Hard-reload to verify.

@github-actions github-actions Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Review mode: follow-up after new commits

Requirement — Pass

Preventing toolbar overlap at narrow widths while preserving large search-clear targets is a justified usability fix.

Evidence

  • Issue #2039 requires usable, non-overlapping search, clear, and filter controls at 320px.
  • Base web/src/components/SessionList.tsx:867 allows collapsed-search shrinking; :1955 places neighboring controls in a non-wrapping row.

Approach — Needs changes

The current approach removes navigation to make space. At 320–390px widths, Settings disappears even without a search query, leaving no application navigation to settings. Responsive prioritization should preserve access to displaced actions.

Evidence

  • Head web/src/components/SessionList.tsx:2046–2047 hides all headerActions below 26rem, increasing the threshold to 32rem when a query exists.
  • Head web/src/router.tsx:232–252 places Browse and the only application navigation button to /settings inside headerActions; no overflow menu or alternate settings entry is provided.
  • Issue #2039 proposes priority overflow for secondary icons so toolbar actions remain usable.

Suggestions

  • Move displaced actions into an accessible overflow menu at narrow widths, or retain wrapping. Preserve Settings access without requiring users to resize the viewport or enter a URL.

Code — Not reviewed

Code review stopped because the navigation-hiding approach needs adjustment.

Testing

Not run (automation; PR code execution is prohibited).

  • No PR code, tests, builds, or scripts were executed.
  • Fixed-head CI: windows-codex-mcp passed; test failed at bun typecheck, with subsequent test steps skipped; integration remained in progress. Failure logs were unavailable while the workflow was running.
  • The PR description reports 34 passing focused tests. The supplied visual proof describes a separate cherry-picked deployment using the earlier wrapping approach and does not validate this fixed head.

HAPI Bot

CI failed because optional chaining left headerRow possibly null when
reading className. Use getByTestId instead.

@github-actions github-actions Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Review mode: follow-up after new commits

Requirement — Pass

Preventing overlapping toolbar controls on narrow panels while retaining large search-clear targets is a justified usability fix.

Evidence

  • Issue #2039 describes overlap at 320–390px and requires usable, non-overlapping search-clear and filter controls.
  • Base web/src/components/SessionList.tsx:867 permits collapsed-search shrinking; :1955 places neighboring controls in a single row without an overflow strategy.

Approach — Needs changes

The approach permanently removes Settings navigation at the widths this fix targets. Keeping one toolbar row is reasonable, but displaced actions need an accessible alternative.

Evidence

  • Head web/src/components/SessionList.tsx:2046–2047 hides headerActions below 26rem, or 32rem with a query, without providing an overflow menu.
  • Head web/src/router.tsx:232–252 places the application's only Settings entry inside headerActions. At 320–390px it disappears even with no search query.
  • Issue #2039 proposes priority overflow for secondary controls. The follow-up changes only a test selector; the navigation-hiding mechanism remains unchanged.

Suggestions

  • Move displaced actions into an accessible overflow menu, or retain wrapping. Preserve Settings access without requiring users to resize the panel or enter a URL.

Code — Not reviewed

Code review stopped because the approach still removes Settings access on narrow panels.

Testing

Not run (automation; PR code execution is prohibited).

  • No PR code, tests, builds, or scripts were executed.
  • Fixed-head checks test, integration, and windows-codex-mcp were all in progress when inspected.
  • The PR description reports 34 passing focused tests; narrow-width and wide-layout visual checks remain unchecked.
  • The supplied visual proof describes an earlier wrapping implementation on a separate cherry-picked deployment, so it does not validate the current hiding approach.

HAPI Bot

Hiding headerActions on narrow headers removed Settings with no
alternative. Keep one toolbar row, but surface secondary actions in an
accessible ⋯ popover below the container-query threshold (tiann#2039).

Co-authored-by: Cursor <cursoragent@cursor.com>
@heavygee

Copy link
Copy Markdown
Collaborator Author

Follow-up: overflow ⋯ for shed secondary

Agreed that hiding Settings with no alternative was wrong.

051cbe539 keeps the single nowrap toolbar row, but secondary headerActions now also mount in an accessible More (⋯) popover that is visible only below the container-query threshold (@[26rem] / @[32rem] with a query chip). Wide headers still show browse/settings inline.

heavygee added a commit to heavygee/hapi that referenced this pull request Oct 17, 2026
Match upstream tiann#2040 051cbe5 for soup tip-forward.

Co-authored-by: Cursor <cursoragent@cursor.com>

@github-actions github-actions Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Review mode: follow-up after new commits

Requirement — Pass

Preventing overlapping toolbar controls on narrow panels while preserving large search-clear targets is a justified usability fix.

Evidence

  • Issue #2039 requires usable, non-overlapping controls at 320–390px widths.
  • Base web/src/components/SessionList.tsx:867 allows collapsed-search shrinking; :1955 provides no wrapping or overflow strategy.

Approach — Pass

Protecting search controls and moving secondary actions into a responsive overflow popover is a viable direction. The current head addresses the previous review's concern about removing Settings access.

Evidence

  • Head web/src/components/SessionList.tsx:54–78 implements the More popover; :2089–2112 switches secondary actions between inline and overflow presentation.
  • Head web/src/router.tsx:231–252 keeps New primary and supplies Browse/Settings as secondary actions.

Code — Reviewed

Reviewed the entire fixed-head merge-base diff. One remaining sizing defect pushes controls outside narrow viewports. Assessment is based on source inspection without executing PR code.

  • [Major] Non-shrinking groups still push toolbar actions offscreen — web/src/components/SessionList.tsx:920

Testing

Not run (automation; PR code execution is prohibited).

  • No PR code, tests, builds, or scripts were executed.
  • Fixed-head CI: integration passed; test and windows-codex-mcp were still running when inspected.
  • The description reports 34 passing focused tests. Added coverage checks classes and popover mounting, but does not measure narrow-width layout and omits the populated primary-action combination.
  • The supplied visual proof covers an earlier wrapping implementation, not the current fixed head; the description's visual checks remain unchecked.

HAPI Bot

Comment thread web/src/components/SessionList.tsx Outdated
At ~320px the collapsed chip plus unread/filter/New still overflowed past
More/Settings. When searchQuery is non-empty, put primary controls in the
same overflow menu so the row is [chip][⋯] (tiann#2039).

Co-authored-by: Cursor <cursoragent@cursor.com>
heavygee added a commit to heavygee/hapi that referenced this pull request Oct 17, 2026
Soup carries BlockedJumpPill / filter / kitchen chrome on the same row.
Mirror upstream tiann#2040: with a collapsed query, put primaries in More so
[chip][⋯] fits ~320px (tiann#2039).

Co-authored-by: Cursor <cursoragent@cursor.com>
heavygee added a commit to heavygee/hapi that referenced this pull request Oct 17, 2026
Crowded-query More fold for tiann#2039/tiann#2040; re-thin after dogfood bump.

Co-authored-by: Cursor <cursoragent@cursor.com>
ml-auto shoved the action slab to the right edge and left a Quest-width
gap between the search icon and BlockedJumpPill (tiann#2039).

Co-authored-by: Cursor <cursoragent@cursor.com>
heavygee added a commit to heavygee/hapi that referenced this pull request Oct 17, 2026
Drop ml-auto so BlockedJumpPill sits next to the search icon on Quest
(tiann#2039 / tiann#2040).

Co-authored-by: Cursor <cursoragent@cursor.com>

@github-actions github-actions Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Review mode: follow-up after new commits

Requirement — Pass

Preventing overlapping session-toolbar controls on narrow screens while preserving large clear targets is a justified usability fix.

Evidence

  • Issue #2039 specifies usable, non-overlapping controls at 320–390px widths.
  • Base web/src/components/SessionList.tsx:862 allows collapsed-search shrinking, while :1955 provides no toolbar overflow strategy.

Approach — Pass

Protecting search chrome and moving controls into an overflow popover is viable. The remaining problems can be fixed within this approach.

Evidence

  • Head web/src/components/SessionList.tsx:54–78 adds the More popover; :920 prevents collapsed-search shrinking; :2100–2123 selects overflow content.
  • Head web/src/router.tsx:221–253 preserves navigation handlers for New, Browse, and Settings.

Code — Reviewed

Reviewed the entire fixed-head merge-base diff. Two UI regressions remain; conclusions are based on source inspection without executing PR code.

  • [Major] Adapt the machine dropdown positioning inside More — web/src/components/SessionList.tsx:2103
  • [Minor] Condition primary-action overflow on available width — web/src/components/SessionList.tsx:2043

Testing

Not run (automation; PR code execution is prohibited).

  • No PR code, tests, builds, or scripts were executed.
  • Fixed-head CI: integration and windows-codex-mcp passed; test was still running when inspected.
  • The description reports 34 passing focused tests. Added coverage checks classes and popover contents, but does not measure responsive layout or exercise the machine dropdown inside More.
  • The supplied visual evidence covers an earlier wrapping implementation; current-head narrow and wide visual checks remain unverified.

HAPI Bot

Comment thread web/src/components/SessionList.tsx Outdated
Comment thread web/src/components/SessionList.tsx Outdated
MachineFilterMenu near the left edge (inside More) got a tiny right-only
maxWidth. Clamp to the wider horizontal pocket and left-align when that
side wins. Fold primaries into More only when a query chip is present and
the header is under 32rem (tiann#2039 / tiann#2040).

Co-authored-by: Cursor <cursoragent@cursor.com>
heavygee added a commit to heavygee/hapi that referenced this pull request Oct 17, 2026
Match upstream tiann#2040: only fold primaries into More when the header is
under 32rem, so wide dogfood keeps inline actions while searching.

Co-authored-by: Cursor <cursoragent@cursor.com>

@github-actions github-actions Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Review mode: follow-up after new commits

Requirement — Pass

Preventing overlapping toolbar controls on narrow screens while preserving large clear targets is a justified usability fix.

Evidence

  • Issue #2039 requests non-overlapping, usable controls at 320–390px widths.
  • Base web/src/components/SessionList.tsx:862 permits collapsed-search shrinking; :1955 provides no toolbar overflow strategy.

Approach — Pass

Protecting search chrome and moving actions into an accessible overflow popover is viable. The latest changes address both previous findings.

Evidence

  • Head web/src/components/SessionList.tsx:2067–2069 conditions primary-action overflow on header width.
  • Head web/src/components/MachineFilterBar.tsx:177–195 adapts dropdown width and opening direction to available horizontal space.

Code — Reviewed

Reviewed the entire fixed-head merge-base diff. One responsive-layout defect remains; conclusions are based on source inspection.

  • [Minor] Allow primary-action overflow when the query is empty — web/src/components/SessionList.tsx:2068

Testing

Not run (automation; PR code execution is prohibited).

  • No PR code, tests, builds, or scripts were executed.
  • Fixed-head CI: integration and windows-codex-mcp passed; test remained in progress when inspected.
  • The description reports 34 passing focused tests. Added coverage checks overflow contents, a mocked wide header, and dropdown positioning helpers; it does not measure browser layout at larger font scales.
  • The supplied visual proof covers an earlier wrapping implementation; current-head narrow and wide visual behavior remains unverified.

HAPI Bot

Comment thread web/src/components/SessionList.tsx Outdated

@github-actions github-actions Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Review mode: follow-up after new commits

Requirement — Pass

Preventing crowded session-toolbar controls while retaining large search-clear targets and access to all actions is a justified usability fix.

Evidence

  • Issue #2039 reports overlapping controls at 320–390px widths and requests priority overflow.
  • Base web/src/components/SessionList.tsx:1955 renders a single toolbar row without an overflow strategy.

Approach — Pass

Keeping search inline and moving actions into More by survival rank is viable. The width-accounting defect below can be fixed within this approach.

Evidence

  • Head web/src/components/sessionToolbarShed.ts:52 selects survivors by keep rank while preserving display order.
  • Head web/src/components/SessionList.tsx:1935 observes header width, and :2184 renders overflow actions in a popover.

Code — Reviewed

Reviewed the entire fixed-head merge-base diff. One width-accounting defect leaves supported narrow layouts overflowing; browser rendering was not executed.

  • [Major] Account for all rendered controls before deciding what fits — web/src/components/sessionToolbarShed.ts:36

Testing

Not run (automation; PR code execution is prohibited).

  • No PR code, tests, builds, or scripts were executed, as required.
  • Fixed-head CI: integration and windows-codex-mcp passed; test was still in progress when inspected.
  • Added tests cover ranking and mocked header widths, but do not measure browser geometry. The 130% case only writes localStorage; it does not apply font scaling. The supplied visual proof depicts an earlier wrapping implementation.

HAPI Bot

Comment thread web/src/components/sessionToolbarShed.ts Outdated
Active query reserved 200px for a max-w-[9rem] chip and collapsed the
row to search+More. Measure the actions flex box and each control;
keep daily icons until width is known (tiann#2039).

Co-authored-by: Cursor <cursoragent@cursor.com>

@github-actions github-actions Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Review mode: follow-up after new commits

Requirement — Pass

Preventing crowded toolbar controls on narrow screens while keeping search inline and all actions accessible is a justified usability fix.

Evidence

  • Issue #2039 reports overlapping search-clear and neighboring controls at phone widths and requests priority overflow.
  • Base web/src/components/SessionList.tsx:1955 renders the toolbar without an overflow strategy; the snapshot description specifies one row with ranked shedding.

Approach — Pass

Measuring available space and moving lower-priority actions into More is viable. The remaining defects can be fixed within this approach.

Evidence

  • Head web/src/components/sessionToolbarShed.ts:59 selects survivors by keep rank while preserving display order.
  • Head web/src/components/SessionList.tsx:1938 observes available width, and :2223 renders shed actions in a popover.

Code — Reviewed

Reviewed the entire fixed-head merge-base diff. Three layout defects remain; browser rendering was not executed.

  • [Major] Reattach the width observer when search collapses — web/src/components/SessionList.tsx:1954
  • [Major] Subtract the machine menu from the slot budget — web/src/components/SessionList.tsx:2103
  • [Minor] Measure More and gaps at the active font scale — web/src/components/sessionToolbarShed.ts:51

Testing

Not run (automation; PR code execution is prohibited).

  • No PR code, tests, builds, or scripts were executed, as required.
  • Fixed-head CI: integration and windows-codex-mcp passed; test remained in progress when last inspected.
  • Added tests cover ranking and mocked widths, but not browser geometry or observer reattachment. The 130% test only writes localStorage and does not apply font scaling.

HAPI Bot

Comment thread web/src/components/SessionList.tsx Outdated
Comment thread web/src/components/SessionList.tsx Outdated
Comment thread web/src/components/sessionToolbarShed.ts Outdated
The actions box unmounts while search is expanded, so a one-shot observer
left the next layout on a stale width. Fit math now reattaches on the
new node, subtracts a visible machine menu, and uses the measured More
width and column gap.

Co-authored-by: Cursor <cursoragent@cursor.com>

@github-actions github-actions Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Review mode: follow-up after new commits

Requirement — Pass

Preventing narrow-toolbar overlap while keeping search inline and all actions accessible is a justified usability fix.

Evidence

  • Issue #2039 reports overlapping search-clear and neighboring controls at phone widths.
  • The snapshot description specifies one nowrap row with ranked overflow; base web/src/components/SessionList.tsx:1955 has no overflow mechanism.

Approach — Pass

Measuring available space and shedding lower-priority actions into More is viable. The remaining layout defect can be fixed within this approach.

Evidence

  • web/src/components/SessionList.tsx:1366 reattaches the width observer, and :1965 measures control widths and gaps.
  • web/src/components/sessionToolbarShed.ts:73 selects survivors by keep rank while preserving display order.

Code — Reviewed

Reviewed the entire fixed-head merge-base diff and reassessed the previous findings. Their targeted fixes are present, but one narrow-layout failure remains. Browser rendering was not executed.

  • [Major] Reserve room for More before preventing search from shrinking — web/src/components/SessionList.tsx:936

Testing

Not run (automation; PR code execution is prohibited).

  • No PR code, tests, builds, or scripts were executed, as required.
  • Fixed-head CI: integration passed; test and windows-codex-mcp were still in progress when last inspected.
  • Added tests cover ranking, measured-metric inputs, and observer reattachment. They do not verify actual narrow-layout geometry; the 130% component test only writes localStorage without applying font scaling.

HAPI Bot

Comment thread web/src/components/SessionList.tsx Outdated
At 320px and 130% type a long chip plus calendar left too little room
for the machine menu and More. An active query now uses min-w-0 on
search and shrink-0 on actions so only the chip text truncates.

Co-authored-by: Cursor <cursoragent@cursor.com>

@github-actions github-actions Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Review mode: follow-up after new commits

Requirement — Pass

Preventing narrow-toolbar overlap while retaining search, large clear targets, and access to every action is a justified usability fix.

Evidence

  • Issue #2039 describes overlapping controls at 320–390px and requests priority overflow.
  • Base web/src/components/SessionList.tsx:1955 renders the toolbar without an overflow mechanism.

Approach — Pass

Measuring available space and moving lower-priority controls into More is viable. The remaining measurement defect can be fixed within this approach.

Evidence

  • web/src/components/sessionToolbarShed.ts:73 selects survivors by keep rank while preserving display order.
  • web/src/components/SessionList.tsx:2223 applies measured widths and renders overflowed controls in More.

Code — Reviewed

Reviewed the entire fixed-head merge-base diff and reassessed the previous finding. The latest adjustment introduces a measurement feedback problem that can recreate overlapping controls. Browser rendering was not executed.

  • [Major] Constrain the action budget independently of its current contents — web/src/components/SessionList.tsx:2124

Testing

Not run (automation; PR code execution is prohibited).

  • No PR code, tests, builds, or scripts were executed.
  • Fixed-head CI: integration and windows-codex-mcp passed; test remained in progress when last inspected.
  • The new narrow-query regression supplies an artificial 80px observer result and asserts classes and presence. It does not apply 130% font scaling or verify actual geometry.
  • git diff --check passed.

HAPI Bot

Comment thread web/src/components/SessionList.tsx Outdated
Empty-query first paint treated the actions gutter as infinite, so every
shrink-0 icon stayed inline and painted past the split. Use a finite
fallback, cap the budget by the real row gutter, and give the sidebar
min-w-0 so --sidebar-w actually constrains the flex item.

Co-authored-by: Cursor <cursoragent@cursor.com>

@github-actions github-actions Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Review mode: follow-up after new commits

Requirement — Pass

Preventing narrow-toolbar overlap while keeping search usable and all actions accessible is a justified usability fix.

Evidence

  • Issue #2039 describes overlapping hit targets at 320–390px and requests priority overflow while preserving large clear targets.
  • Base web/src/components/SessionList.tsx:1955 renders the toolbar without an overflow mechanism.

Approach — Pass

Measuring controls and moving lower-priority actions into More is viable. The measurement defect below can be fixed within this approach.

Evidence

  • web/src/components/sessionToolbarShed.ts:73 selects survivors by keep rank while preserving display order.
  • web/src/components/SessionList.tsx:2245 applies measured widths and renders overflowed actions in a popover.

Code — Reviewed

Reviewed the entire fixed-head merge-base diff and previous review. One major measurement regression remains.

  • [Major] Calculate the budget independently of the previous search layout — web/src/components/SessionList.tsx:2152

Testing

Not run (automation; PR code execution is prohibited).

  • No PR code, tests, builds, or scripts were executed.
  • Fixed-head test, integration, and windows-codex-mcp checks were still in progress when inspected.
  • The added tests mock observer widths but leave DOM geometry unmeasured, so they do not cover the stale expanded-search measurement or subsequent resize recovery.
  • git diff --check passed.

HAPI Bot

Comment thread web/src/components/SessionList.tsx Outdated
The shed refused the next icon when the gutter was only a column-gap
short, so the row kept an empty slot the size of that icon.

Co-authored-by: Cursor <cursoragent@cursor.com>

@github-actions github-actions Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Review mode: follow-up after new commits

Requirement — Pass

Preventing narrow-toolbar overlap while preserving search targets and access to all actions is a justified usability fix.

Evidence

  • Issue #2039 reports overlapping controls at 320–390px and requests priority overflow while retaining large clear targets.
  • Base web/src/components/SessionList.tsx:1955 renders a single toolbar row without an overflow mechanism.

Approach — Pass

Measuring controls and moving lower-priority actions into More is viable. The remaining measurement defect can be fixed within this approach.

Evidence

  • web/src/components/sessionToolbarShed.ts:75 selects survivors by keep rank while preserving display order.
  • web/src/components/SessionList.tsx:2321 keeps overflowed controls accessible through a popover.

Code — Reviewed

Reviewed the entire fixed-head merge-base diff and previous review. The previously reported major measurement regression remains unresolved.

  • [Major] Derive the action budget independently of the previous search layout — web/src/components/SessionList.tsx:2152

Testing

Not run (automation; PR code execution is prohibited).

  • No PR code, tests, builds, or scripts were executed.
  • Fixed-head test, integration, and windows-codex-mcp checks were in progress when inspected.
  • The added component tests mock observer widths without browser geometry, so they do not cover the stale expanded-search measurement or resize recovery.
  • git diff --check passed.

HAPI Bot

Comment thread web/src/components/SessionList.tsx Outdated
The shed was budgeting a guessed remainder, so More stayed open while
a wide empty stretch sat before the split. The budget is now the pixels
from the actions' left edge to the row's right edge. If every icon fits,
overflow is empty.

Co-authored-by: Cursor <cursoragent@cursor.com>

@github-actions github-actions Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Review mode: follow-up after new commits

Requirement — Pass

Preventing narrow-toolbar overlap while preserving large search targets and access to every action is a justified usability fix.

Evidence

  • Issue #2039 reports overlapping controls at narrow widths and requests priority overflow without reducing clear targets.
  • Base web/src/components/SessionList.tsx:1955 renders a single toolbar row without an overflow mechanism.

Approach — Pass

Measuring controls and moving lower-priority actions into More is viable. The remaining sizing defect can be corrected within this approach.

Evidence

  • web/src/components/sessionToolbarShed.ts:85 selects survivors by keep rank while preserving display order.
  • web/src/components/SessionList.tsx:2285 exposes overflowed actions through a popover.

Code — Reviewed

Reviewed the entire fixed-head merge-base diff and previous review. The revision addresses the previous wide-sidebar recovery issue, but the action budget can still preserve overlapping controls when narrowing a populated search.

  • [Major] Reserve search's fixed chrome before measuring the action budget — web/src/components/SessionList.tsx:2153

Testing

Not run (automation; PR code execution is prohibited).

  • No PR code, tests, builds, or scripts were executed.
  • Fixed-head integration and windows-codex-mcp checks passed; the test check was still running when inspected.
  • Added component tests mock observer widths without browser layout, so they do not verify target overlap during resizing.
  • git diff --check passed.

HAPI Bot

Comment thread web/src/components/SessionList.tsx Outdated
shrink-0 made the actions box as wide as whatever was already showing, so
search lost its clear and calendar and a collapsed query could hide every
action. The actions box is flex-1 again, and a query chip cannot shrink
below its icon, clear, and calendar.

Co-authored-by: Cursor <cursoragent@cursor.com>

@github-actions github-actions Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Review mode: follow-up after new commits

Requirement — Pass

Preventing narrow-toolbar overlap while preserving large search targets and access to every action is a justified usability fix.

Evidence

  • Issue #2039 describes overlapping search-clear and filter targets and requests priority overflow.
  • Base web/src/components/SessionList.tsx:1955 renders a single toolbar row without overflow handling.
  • The snapshot PR description specifies one row with actions shedding by keep rank.

Approach — Pass

Measuring controls and moving lower-priority actions into More is viable. The remaining allocation defect can be corrected within this approach.

Evidence

  • web/src/components/sessionToolbarShed.ts:85 selects survivors by keep rank while preserving display order.
  • web/src/components/SessionList.tsx:2306 exposes overflowed actions through a popover.

Code — Reviewed

Reviewed the entire fixed-head merge-base diff and previous review. One sizing defect still pushes More outside narrow viewports.

  • [Major] Reserve room for the machine menu and More before allocating search width — web/src/components/SessionList.tsx:2163

Testing

Not run (automation; PR code execution is prohibited).

  • No PR code, tests, builds, or scripts were executed, as required.
  • Fixed-head integration passed; test and windows-codex-mcp were still running when last inspected.
  • The new narrow-query component test mocks observer widths and checks classes and presence; it does not verify browser geometry.
  • git diff --check passed.

HAPI Bot

Comment thread web/src/components/SessionList.tsx
A long 9rem query chip at 320px / 130% left the actions box under 50px
while machine menu + More need ~94px, so More slid off-screen. Cap the
collapsed search group to the row minus those trailing controls.

Co-authored-by: Cursor <cursoragent@cursor.com>
heavygee added a commit to heavygee/hapi that referenced this pull request Oct 18, 2026
Reserve-More / flex-leftover soup port matching tiann#2040 tip 16f3e8d.

Co-authored-by: Cursor <cursoragent@cursor.com>
heavygee added a commit to heavygee/hapi that referenced this pull request Oct 18, 2026
Soup port of upstream tiann#2040 tip 16f3e8d / 244584e: cap the query
chip so More stays on-screen, and size the shed from the actions flex
allocation instead of a gutter that follows a crushed search.

Co-authored-by: Cursor <cursoragent@cursor.com>

@github-actions github-actions Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Review mode: follow-up after new commits

Requirement — Pass

Preventing narrow-toolbar overlap while preserving large search targets and access to every action is a justified usability fix.

Evidence

  • Issue #2039 reports overlapping search-clear and filter targets and requests priority overflow.
  • Base web/src/components/SessionList.tsx:1955 renders the toolbar without overflow handling; the snapshot description specifies ranked overflow within one row.

Approach — Pass

Measuring controls and moving lower-priority actions into More is viable. The new search-width cap addresses the previous allocation finding at the source level.

Evidence

  • web/src/components/sessionToolbarShed.ts:85 selects survivors by keep rank while preserving display order.
  • web/src/components/SessionList.tsx:2062 reserves machine-menu and More space before capping search width.
  • web/src/components/SessionList.tsx:2352 exposes overflowed actions through a popover.

Code — Reviewed

Reviewed the entire fixed-head merge-base diff and previous finding. No concrete defects identified; browser geometry remains unverified.

No reportable code issues found.

Testing

Not run (automation; PR code execution is prohibited).

  • No PR code, tests, builds, or scripts were executed, as required.
  • Fixed-head integration and windows-codex-mcp checks passed; test was still running when last inspected.
  • Added tests cover shedding and mocked sizing. Browser coverage is still missing for non-overlapping hit targets and an on-screen More button at 320px, 130% scaling, multiple machines, and a long collapsed query.
  • git diff --check passed.

HAPI Bot

heavygee added a commit to heavygee/hapi that referenced this pull request Oct 18, 2026
With a text query, SessionList search uses min-w-0 + shrink so More and
trailing actions keep room (tiann#2040 / 3b85c2c). Idle still uses shrink-0.

Co-authored-by: Cursor <cursoragent@cursor.com>
@heavygee heavygee added bug Something isn't working area:web Web PWA / React client low-impact Focused / low-blast-radius change; estate lane B promote candidate (PR merge policy) labels Oct 18, 2026
@heavygee
heavygee merged commit f13a1aa into tiann:main Oct 18, 2026
5 checks passed
heavygee added a commit to heavygee/hapi that referenced this pull request Oct 18, 2026
tiann#2040 merged. Drop driver/2039-toolbar-crowd and
driver/2039-blocked-search-test; Gate A' exit reflection for Meta.

Co-authored-by: Cursor <cursoragent@cursor.com>
@heavygee
heavygee deleted the fix/2039-session-toolbar-crowd branch October 18, 2026 14:05
heavygee added a commit to heavygee/hapi that referenced this pull request Oct 18, 2026
Same-line DROPPED tiann#2040 so Gate A matcher stops treating the layer as
live; also mirrored to ~/.config/hapi for hapi-meta-daily.

Co-authored-by: Cursor <cursoragent@cursor.com>
heavygee added a commit to heavygee/hapi that referenced this pull request Oct 18, 2026
With a text query, SessionList search uses min-w-0 + shrink so More and
trailing actions keep room (tiann#2040 / 3b85c2c). Idle still uses shrink-0.

Co-authored-by: Cursor <cursoragent@cursor.com>
heavygee added a commit to heavygee/hapi that referenced this pull request Oct 18, 2026
Keep soup versions of conflicted toolbar/router/locale files — live tip
already dogfoods tiann#2040 plus interleaved soup-only Boards/overseer/content-search.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

area:web Web PWA / React client bug Something isn't working low-impact Focused / low-blast-radius change; estate lane B promote candidate (PR merge policy)

Projects

None yet

Development

Successfully merging this pull request may close these issues.

bug(web): session list header crowds — search/clear overlaps filter and BlockedJumpPill on narrow widths

1 participant