The top bar overflows by 11px at 600x600, the bottom of the Compact band #143
Closed
opened 2026-08-19 22:01:59 +00:00 by logan
·
2 comments
No Branch/Tag Specified
main
fix/146-stub-etxtbsy
fix/175-wizard-follows-the-library
fix/231-setter-rollback
fix/197-duplicate-column-label
docs/225-fixtures-wav-tags
docs/220-skill-check-scope
test/217-fixture-names-in-queue-selection
fix/216-riff-parse-allocation
fix/170-queue-header-action-names
fix/210-nav-sheet-scroll-affordance
docs/50-readme-landing-page
feat/65-art-prefetch-ahead
feat/71-more-as-a-bottom-sheet
feat/54-native-touch-feel
feat/67-entity-links-into-menus
test/196-visual-tier-gates
fix/138-ui-test-storage-leak
fix/104-wav-tags-read
fix/207-sheet-scroll-affordance
fix/204-ui-visual-update-filter
pi-agent-backlog-automation
63-touch-model-phase-2
63-android-touch-model
186-touch-targets-settings
186-touch-targets-page-header
187-seek-bar-hit-area
189-190-explore-correctness
135-android-underrun-instrumentation
51-android-small-screens
fix/171-phone-queue-scrim
fix/137-touch-only-affordances
fix/154-nested-css-check
feat/58-mini-player-progress-line
fix/66-album-page-scrolls-as-one
60-context-menu-action-sheet
64-android-system-volume
59-slim-the-mini-player
55-queue-as-a-screen
feat/57-drop-the-android-top-bar
feat/62-jobs-as-a-notification
fix/53-seek-bar-never-moves
fix/159-android-task-app-id
fix/52-android-activity-recreation-restarts-the-process
fix/150-expand-button-under-the-art
feat/42-inline-volume-and-centred-transport
fix/156-queue-selection-fixture-order
fix/151-fuse-the-scroll-guard-and-the-write
fix/43-queue-panel-selection
fix/143-top-bar-fits-its-window
feat/27-jobs-into-settings
feat/25-configurable-sidebar-tabs
feat/6-global-back-forward
fix/72-active-view-broadcast
fix/69-page-header-action-overflow
fix/quick-wins-batch
fix/118-in-library-clear
fix/61-mini-player-plain-text
fix/68-hover-affordances-pointer
fix/119-dev-headless-port
fix/130-issue-claim-user
fix/131-codegen-check-scope
feat/28-autotag-match-on-album
feat/17-demote-version-selector
feat/38-ownership-visibility
ci/115-manual-release
feat/34-icon-language
feat/7-full-tracklist-toggle
fix/16-tagwriter-totals
fix/unclaim-ca-certs
fix/unclaim-shell
ci/unclaim-on-close
docs/closing-keyword
docs/retire-stale-planning-docs
docs/issue-driven-workflow
integration/small-fixes
fix/small-issue-batch
fix/queue-toggle-state
fix/drag-count-badge
fix/album-card-year
fix/album-tracklist-heading
fix/seek-bar-clock-width
fix/explore-art-scanner-requests
chore/workflow-guardrails
v0.7.0
v0.6.0
v0.5.0
v0.4.0
v0.3.1
v0.3.0
v0.2.3
v0.2.2
v0.2.1
v0.2.0
v0.1.0
v0.0.1
v0.0.0
Labels
Clear labels
Area/Design
Area/Downloads
Area/Explore
Area/Library-UI
Area/Metadata
Area/Packaging
Area/Player
Area/Queue
Area/Settings
Area/Shell-Nav
Compat/Breaking
Kind/Bug
Kind/Documentation
Kind/Enhancement
Kind/Feature
Kind/Security
Kind/Testing
Platform/Android
Platform/Desktop
Breaking change that won't be backward compatible
Something is not working
Documentation changes
Improve existing functionality
New functionality
This is security issue
Issue or pull request related to testing
Priority
Critical
1
The priority is critical
Priority
High
2
The priority is high
Priority
Medium
3
The priority is medium
Priority
Low
4
The priority is low
Reviewed
Confirmed
1
Issue has been confirmed
Reviewed
Duplicate
2
This issue or pull request already exists
Reviewed
Invalid
3
Invalid issue
Reviewed
Won't Fix
3
This issue won't be fixed
Status
Blocked
1
Something is blocking this issue or pull request
Status
Need More Info
2
Feedback is required to reproduce issue or to continue work
Status
Abandoned
3
Somebody has started to work on this but abandoned work
Status
In Progress
Somebody is actively working on this right now
Milestone
No items
No Milestone
Projects
Clear projects
No projects
Notifications
Due Date
No due date set.
Dependencies
No dependencies set.
Reference: yonlu/yellowjacket#143
Reference in New Issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Report
At exactly 600×600 — the bottom of the Compact band #24 committed
to — the shell is 611px wide inside a 600px viewport, so 11px of it
sits behind
overflow-x: autoand the window grows a horizontalscrollbar. The promise that "no action is ever unreachable at any
supported size", and
layout-overflow.spec.ts's own subject, both saythis should not happen.
Measured (
make dev-headless SEED=default, 600×600, no localchanges to the header):
So the overflowing child is the search box.
.top-bar search-barisflex: 0 1 320pxandsearch-bar's own stylesheet floors it at 200px;at 600px the title, the library filter and the job indicator leave it
less than that and it refuses to shrink further, which is the floor
doing exactly what it was written to do — there is simply no width left
to give it.
Why no spec sees it.
layout-overflow.spec.tschecks 1440×900,900×600 and 800×600 plus the phone widths, and it is right to: 900 is
the narrowest content area a desktop width produces, which is the
case that argument was about. But the narrowest header is a
different question with a different answer, and 600 — the first width
at which the phone layout has not yet taken over — is where it lands.
600×600 is not in the list.
Direction
Add 600×600 to
layout-overflow.spec.ts's viewport list first, so thedefect is pinned before it is fixed. Then give the header the same
treatment #69 gave
page-header: below some width one of its fourchildren has to yield. Candidates, cheapest first — the library filter
is already
display: nonebelow 600 and could go at 700; the titlecould truncate (it is the brand, and the window title bar says the same
thing); or the search box could collapse to an icon that expands, which
is what #57 asks for on the phone anyway and would make this one
mechanism rather than two.
Found while measuring #6, which adds two buttons to this bar. Those
are hidden below 900 for exactly this reason — the pre-existing 11px
became 95px with them — so the two are related but this one stands
alone and predates it.
Re-measured on
mainat6e7e349(after #6, #72, #25 and #27), andthe 11px is the best case.
make dev-headless SEED=default,header.top-barclient vs scroll:Two things that were not in the report:
The overflow is 171px, not 11px, whenever anything is happening.
job-indicatorishiddenwhile idle and 144px wide when it is not,so the bar overflows by 11px sitting still and by 171px during a scan,
an index build or a download — which is exactly when a user has reason
to look at it. The idle case is the one that got measured because a
seeded app that has finished scanning is idle by the time you resize
it; it took ~8 seconds of settling for the number to drop to 11.
The band is narrow: 600–610. At 620 the bar fits, and it fits at
every width up to 900 where
nav-historyappears (68px) and it stillfits. So this is not "the header is too crowded from 900 down", it is
one specific corner — which is worth knowing before reaching for a
general responsive rework, and is an argument for fixing it in a way
#48 can build on rather than a way #48 would discard.
The child measurements at 600 are unchanged from the report:
hgroup:152 nav-history:0 library-filter:148 search-bar:248 job-indicator:0.Claiming this. Branch:
fix/143-top-bar-fits-its-window.Approach. The Direction's order, literally: 600×600 goes into
layout-overflow.spec.tsfirst and is watched to fail, plus theindicator-visible case — the 171px measured in the comment above is
the real defect and nothing in the suite has ever measured a layout with
a job running.
/__test/emitforcesJobsChangedwithout staging ascan.
Then the #69 treatment, measured rather than breakpointed, for a
reason specific to this bar:
library-filter's width is its content,so a library called "Music from the external drive" is wider than the
fixture's and any breakpoint is right for exactly one library name. A
ResizeObserver over
.top-barthat hides the lowest-priority childuntil it fits is the mechanism
page-headeralready has a workedexample of.
Search-collapses-to-an-icon is deliberately out of scope. It is what
#57 wants on the phone and would be one mechanism instead of two — but
#57 is
Status/Blockedbehind #62, so building its modal now isbuilding it without the thing that blocks it. The yield order will make
the search box the last thing to go, so #57 inherits a stated position
rather than an accident.