The first-run wizard does not dismiss when a library appears by another route #175
Open
opened 2026-08-21 05:34:29 +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#175
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
The first-run wizard stays up, full-screen and intercepting every
pointer event, when a library appears by a route other than its own
"Choose Folder" flow. Tripped over on a device while verifying #64.
Reproduction (a fresh
YJ_HOME, so the wizard is showing):The call succeeds and returns the new library row, the scan runs and
finds the tracks, and
GetTracksanswers with nine of them — anddocument.querySelector("first-run-wizard")is still rendering at thefull viewport. Relaunching the app clears it (the element is then
present at 0 height, which is its "there is a library" state).
Findings
in response to the state it exists to wait for, so any other route to
a first library leaves it up.
the wizard is up it intercepts pointer events, which is exactly what
stops Settings being reachable to add a library from there.
Platform/Android's storage-access flow is the place to check,since that one does not necessarily end inside the wizard's own
handler.
waiting for, and a library-changed subscription is the same shape
every other view uses.
Direction
Decide first whether a user-reachable path exists; if it does this is a
lockout, and if it does not it is still one subscription away from
being correct by construction rather than by sequence. Either way the
dismissal should follow the library existing, not the button being
pressed.
Picking this up on
fix/175-wizard-follows-the-library.Taking it on the Direction's second half, which is settled regardless
of how its first question is answered: the dismissal should follow the
library existing, not the button being pressed. The wizard already
subscribes to nothing;
LibraryAddedis emitted byAddLibrarywhoever calls it, so one subscription makes the dismissal correct by
construction rather than by sequence.
On the first question — whether a user can reach this — what the code
says will go in the PR rather than being decided here: there are
exactly two frontend callers of
AddLibrary(this wizard andSettings' Add Library), and while the wizard is up its
wa-dialogismodal, which is what makes Settings unreachable. Android's
storage-access flow is the case that needs a device, and it is not
what the change depends on.
PR: #234 (
fix/175-wizard-follows-the-library)One subscription: the wizard dismisses on
LibraryAddedrather than atthe end of its own flow, registered before its initial read so a library
arriving mid-call is not answered with a stale empty list.
Taken without settling this issue's first question, deliberately.
The Direction says the dismissal should follow the library existing
either way, so the answer moves the priority and not the diff. What
the code says about the question, for whoever answers it: there are
exactly two frontend callers of
AddLibrary(this wizard and Settings'Add Library), and while the wizard is up its
wa-dialogis a nativemodal — measured on the real app,
document.elementFromPoint(550, 400)is
FIRST-RUN-WIZARD— which is what makes Settings unreachable. So ondesktop it reads as robustness rather than a lockout; Android's
storage-access flow is still the open half and still needs a device.
Verified with five new component-tier cases (planted against the
reverted component: the two new-behaviour cases fail, the three pinning
existing behaviour pass), and with this issue's own reproduction against
a real fresh
YJ_HOME— before the fix the dialog is still open andstill intercepting after
AddLibrary, after it the dialog is gone andthat point is
HOME-VIEW. CI green on both jobs, chromium and webkit.Left
Status/In Progresson and not merged.