Android: the album detail page should scroll as one page, and fit the screen width #66
Closed
opened 2026-08-18 06:00:07 +00:00 by logan
·
4 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#66
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
Opening an album on mobile, the album header does not scroll — only the tracklist does. It should all be one normally-scrolling page. The content is also slightly wider than the phone screen and gets cut off.
Findings
explore-album-detailsis built as a fixed header over a scrolling tracklist, which is the desktop arrangement.overflow-x: hiddenthen hides part of the app. Every box between the viewport and the shrinkable content needsmin-width: 0, and anything that genuinely cannot shrink must say so in its own stylesheet.Direction
At phone widths, make the whole page one scroll container with the header scrolling away (optionally collapsing to a compact title bar). Fix the width overflow with
min-width: 0down the chain and check the header's own row — release metadata, badges and the version selector are the likely culprits. Verify on the real device, not a resized Chromium.Measured while doing #17, since that Direction names the version
selector as a likely culprit for the width overflow. Two findings, and
one of them takes an item off this issue's list.
The version selector is no longer in the header's row at all. #17
moved it below the tracklist into a collapsed disclosure, so whatever
this issue has to fix in the header, that is not part of it. The
disclosure itself measures clean at phone width: 390×800, panel open,
document.body.scrollWidth === window.innerWidth === 390.The header row is genuinely broken at 390px, and it is the cover
art. Chromium at 390×800, album page open:
viewport, plus the back button and the shell's gutters);
.album-infois squeezed to roughly 110px, so the title renders asa single ellipsised glyph — an album called Glass Harbour draws as
G…;at the right edge of its container.
Note what this is not:
body.scrollWidthequals the viewport, sonothing overflows the document and the
min-width: 0chain this issuedescribes is doing its job. The clipping is inside the header's own
flex row — a fixed-size sibling next to a shrinkable one — so it is
invisible to
layout-overflow.spec.ts, which asserts the shell needsno sideways scrolling. That is why no tier has caught it: the shell is
correct and the header is not.
Reproduction without a device, which is enough for the width half
(the scroll half still needs the real thing):
So the header's phone layout needs the art to shrink (or to stack above
the text) rather than another
min-width: 0.Measured, while verifying #72 at 390×780 — and the "cut off" half is
worse than "slightly wider". Found by reading a screenshot; no
assertion in any tier reports it.
On
explore-album-detailsfor a library album, with the cover artbeside the info column:
bodymain.main-panelexplore-album-detailsdiv.album-headerdiv.album-infodiv.album-actionswa-button"Shuffle album"wa-button"Add to queue"So the shell is fine —
body.scrollWidth === clientWidth === 390,which is what
layout-overflow.spec.tsasserts and why it passes. Theoverflow is entirely inside the component and is clipped by
explore-album-details's ownoverflow-x: hidden: "Shuffle album"is cut by 53px and "Add to queue" by 50px, and neither can be reached
by any gesture. Two of the album page's three primary actions are
unavailable on a phone, silently.
The interesting number is
album-infoat 78px inside a 390pxviewport. It carries
min-width: 0correctly, so it is shrinking asasked — it is being squeezed by the art beside it, and the buttons
inside it then overflow their own 78px column rather than wrapping.
That says the Direction's
min-width: 0sweep is necessary and notsufficient here: at phone width the header has to stack (art over
info) rather than share a row, or the info column has nothing to be
wide with.
Same 390px, same seed:
make dev-headless SEED=default, open anylibrary album, read
getBoundingClientRect().righton the header'sbuttons against a 390px viewport.
Worth noting for whoever takes this: #69's
page-headeractions APIdoes not apply — this header is the component's own markup, not
<page-header>, so the collapse-into-a-menu behaviour is not inheritedand the fix here is layout.
Picking this up. Branch
fix/66-album-page-scrolls-as-one.Approach, from the two measurements already on this issue rather
than from first principles:
explore-album-detailsis:host { overflow: hidden }with a
flex-shrink: 0header over a.contentthat owns the onlyscroller — the desktop arrangement. Below 600px the host becomes the
scroller and
.contentstops being one, so the header scrolls awayand the page moves as one. The tracklist is plain DOM, not a
virtualizer, so nothing else inside wants its own scroll window.
width, which is what the 2026-08-19 comment concluded —
.album-infomeasured 78px inside a 390px viewport with
min-width: 0alreadydoing its job, so another
min-width: 0is not the fix. Stacked, theinfo column has the row's whole width and "Shuffle album" / "Add to
queue" stop overflowing their 78px column.
Both live in the component's own stylesheet as a
@media (max-width: 599px)block, since a media query inside a shadow root is answered bythe viewport.
Verification is a browser at the reference device's 424x439 plus a
screenshot and an e2e spec measuring each header control against the
component's box — not a device, which I do not have. The engine half of
this (Chrome 113) is a plain flex-direction change and a scroll
container, nowhere near that engine's documented gaps, but I will say
so on the PR rather than claim the device tier.
PR: #179 — CI green on both engines (run 17385).
The fix is one
@media (max-width: 599px)block in the component's own stylesheet: the host becomes the scroller and.contentstops being one, so the header scrolls away and the page moves as one, and the header's flex row stacks so.album-infohas the row's whole width instead of 112px of it.Both halves this issue reports are measured before and after at 424×439, in the PR body. The clipped actions were the worse half: "Shuffle album" ended at x=443 inside a 424px component and could not be reached by any gesture.
Not done, deliberately: the sticky compact title bar this issue offers as an "optionally" (the header scrolling away is what the report asks for), and the device tier — Chrome 113 is unverified, which is why this stays open until somebody can look at it on the phone.
explore-artist-detailsis the same shape one page over and is untouched here; it deserves its own measurement rather than a wider diff.Leaving
Status/In Progresson, per the workflow — not merging.