Compare commits
base: yonlu/yellowjacket:fix/72-active-view-broadcast
yonlu/yellowjacket:main
yonlu/yellowjacket:batch/248-249
yonlu/yellowjacket:fix/248-artist-metadata-sweep
yonlu/yellowjacket:fix/247-cover-art-orphans
yonlu/yellowjacket:fix/249-unbounded-growth
yonlu/yellowjacket:fix/246-incremental-scan-phantoms
yonlu/yellowjacket:fix/183-phantom-across-retire
yonlu/yellowjacket:fix/243-model-fallback
yonlu/yellowjacket:feat/31-play-all-shuffle-all
yonlu/yellowjacket:fix/240-loop-operational-fixes
yonlu/yellowjacket:docs/220-skill-check-scope
yonlu/yellowjacket:fix/231-setter-rollback
yonlu/yellowjacket:fix/197-duplicate-column-label
yonlu/yellowjacket:fix/175-wizard-follows-the-library
yonlu/yellowjacket:fix/146-stub-etxtbsy
yonlu/yellowjacket:docs/225-fixtures-wav-tags
yonlu/yellowjacket:feat/238-merge-leg-refresh-watch
yonlu/yellowjacket:feat/236-autonomous-backlog-loop
yonlu/yellowjacket:test/217-fixture-names-in-queue-selection
yonlu/yellowjacket:fix/216-riff-parse-allocation
yonlu/yellowjacket:fix/170-queue-header-action-names
yonlu/yellowjacket:fix/210-nav-sheet-scroll-affordance
yonlu/yellowjacket:docs/50-readme-landing-page
yonlu/yellowjacket:feat/65-art-prefetch-ahead
yonlu/yellowjacket:feat/71-more-as-a-bottom-sheet
yonlu/yellowjacket:feat/54-native-touch-feel
yonlu/yellowjacket:feat/67-entity-links-into-menus
yonlu/yellowjacket:test/196-visual-tier-gates
yonlu/yellowjacket:fix/138-ui-test-storage-leak
yonlu/yellowjacket:fix/104-wav-tags-read
yonlu/yellowjacket:fix/207-sheet-scroll-affordance
yonlu/yellowjacket:fix/204-ui-visual-update-filter
yonlu/yellowjacket:pi-agent-backlog-automation
yonlu/yellowjacket:63-touch-model-phase-2
yonlu/yellowjacket:63-android-touch-model
yonlu/yellowjacket:186-touch-targets-settings
yonlu/yellowjacket:186-touch-targets-page-header
yonlu/yellowjacket:187-seek-bar-hit-area
yonlu/yellowjacket:189-190-explore-correctness
yonlu/yellowjacket:135-android-underrun-instrumentation
yonlu/yellowjacket:51-android-small-screens
yonlu/yellowjacket:fix/171-phone-queue-scrim
yonlu/yellowjacket:fix/137-touch-only-affordances
yonlu/yellowjacket:fix/154-nested-css-check
yonlu/yellowjacket:feat/58-mini-player-progress-line
yonlu/yellowjacket:fix/66-album-page-scrolls-as-one
yonlu/yellowjacket:60-context-menu-action-sheet
yonlu/yellowjacket:64-android-system-volume
yonlu/yellowjacket:59-slim-the-mini-player
yonlu/yellowjacket:55-queue-as-a-screen
yonlu/yellowjacket:feat/57-drop-the-android-top-bar
yonlu/yellowjacket:feat/62-jobs-as-a-notification
yonlu/yellowjacket:fix/53-seek-bar-never-moves
yonlu/yellowjacket:fix/159-android-task-app-id
yonlu/yellowjacket:fix/52-android-activity-recreation-restarts-the-process
yonlu/yellowjacket:fix/150-expand-button-under-the-art
yonlu/yellowjacket:feat/42-inline-volume-and-centred-transport
yonlu/yellowjacket:fix/156-queue-selection-fixture-order
yonlu/yellowjacket:fix/151-fuse-the-scroll-guard-and-the-write
yonlu/yellowjacket:fix/43-queue-panel-selection
yonlu/yellowjacket:fix/143-top-bar-fits-its-window
yonlu/yellowjacket:feat/27-jobs-into-settings
yonlu/yellowjacket:feat/25-configurable-sidebar-tabs
yonlu/yellowjacket:feat/6-global-back-forward
yonlu/yellowjacket:fix/72-active-view-broadcast
yonlu/yellowjacket:fix/69-page-header-action-overflow
yonlu/yellowjacket:fix/quick-wins-batch
yonlu/yellowjacket:fix/118-in-library-clear
yonlu/yellowjacket:fix/61-mini-player-plain-text
yonlu/yellowjacket:fix/68-hover-affordances-pointer
yonlu/yellowjacket:fix/119-dev-headless-port
yonlu/yellowjacket:fix/130-issue-claim-user
yonlu/yellowjacket:fix/131-codegen-check-scope
yonlu/yellowjacket:feat/28-autotag-match-on-album
yonlu/yellowjacket:feat/17-demote-version-selector
yonlu/yellowjacket:feat/38-ownership-visibility
yonlu/yellowjacket:ci/115-manual-release
yonlu/yellowjacket:feat/34-icon-language
yonlu/yellowjacket:feat/7-full-tracklist-toggle
yonlu/yellowjacket:fix/16-tagwriter-totals
yonlu/yellowjacket:fix/unclaim-ca-certs
yonlu/yellowjacket:fix/unclaim-shell
yonlu/yellowjacket:ci/unclaim-on-close
yonlu/yellowjacket:docs/closing-keyword
yonlu/yellowjacket:docs/retire-stale-planning-docs
yonlu/yellowjacket:docs/issue-driven-workflow
yonlu/yellowjacket:integration/small-fixes
yonlu/yellowjacket:fix/small-issue-batch
yonlu/yellowjacket:fix/queue-toggle-state
yonlu/yellowjacket:fix/drag-count-badge
yonlu/yellowjacket:fix/album-card-year
yonlu/yellowjacket:fix/album-tracklist-heading
yonlu/yellowjacket:fix/seek-bar-clock-width
yonlu/yellowjacket:fix/explore-art-scanner-requests
yonlu/yellowjacket:chore/workflow-guardrails
yonlu/yellowjacket:v0.8.0
yonlu/yellowjacket:v0.7.0
yonlu/yellowjacket:v0.6.0
yonlu/yellowjacket:v0.5.0
yonlu/yellowjacket:v0.4.0
yonlu/yellowjacket:v0.3.1
yonlu/yellowjacket:v0.3.0
yonlu/yellowjacket:v0.2.3
yonlu/yellowjacket:v0.2.2
yonlu/yellowjacket:v0.2.1
yonlu/yellowjacket:v0.2.0
yonlu/yellowjacket:v0.1.0
yonlu/yellowjacket:v0.0.1
yonlu/yellowjacket:v0.0.0
..
compare: yonlu/yellowjacket:f34777d3e4843ea5fb0b6e48a371b91482510a5e
yonlu/yellowjacket:main
yonlu/yellowjacket:batch/248-249
yonlu/yellowjacket:fix/248-artist-metadata-sweep
yonlu/yellowjacket:fix/247-cover-art-orphans
yonlu/yellowjacket:fix/249-unbounded-growth
yonlu/yellowjacket:fix/246-incremental-scan-phantoms
yonlu/yellowjacket:fix/183-phantom-across-retire
yonlu/yellowjacket:fix/243-model-fallback
yonlu/yellowjacket:feat/31-play-all-shuffle-all
yonlu/yellowjacket:fix/240-loop-operational-fixes
yonlu/yellowjacket:docs/220-skill-check-scope
yonlu/yellowjacket:fix/231-setter-rollback
yonlu/yellowjacket:fix/197-duplicate-column-label
yonlu/yellowjacket:fix/175-wizard-follows-the-library
yonlu/yellowjacket:fix/146-stub-etxtbsy
yonlu/yellowjacket:docs/225-fixtures-wav-tags
yonlu/yellowjacket:feat/238-merge-leg-refresh-watch
yonlu/yellowjacket:feat/236-autonomous-backlog-loop
yonlu/yellowjacket:test/217-fixture-names-in-queue-selection
yonlu/yellowjacket:fix/216-riff-parse-allocation
yonlu/yellowjacket:fix/170-queue-header-action-names
yonlu/yellowjacket:fix/210-nav-sheet-scroll-affordance
yonlu/yellowjacket:docs/50-readme-landing-page
yonlu/yellowjacket:feat/65-art-prefetch-ahead
yonlu/yellowjacket:feat/71-more-as-a-bottom-sheet
yonlu/yellowjacket:feat/54-native-touch-feel
yonlu/yellowjacket:feat/67-entity-links-into-menus
yonlu/yellowjacket:test/196-visual-tier-gates
yonlu/yellowjacket:fix/138-ui-test-storage-leak
yonlu/yellowjacket:fix/104-wav-tags-read
yonlu/yellowjacket:fix/207-sheet-scroll-affordance
yonlu/yellowjacket:fix/204-ui-visual-update-filter
yonlu/yellowjacket:pi-agent-backlog-automation
yonlu/yellowjacket:63-touch-model-phase-2
yonlu/yellowjacket:63-android-touch-model
yonlu/yellowjacket:186-touch-targets-settings
yonlu/yellowjacket:186-touch-targets-page-header
yonlu/yellowjacket:187-seek-bar-hit-area
yonlu/yellowjacket:189-190-explore-correctness
yonlu/yellowjacket:135-android-underrun-instrumentation
yonlu/yellowjacket:51-android-small-screens
yonlu/yellowjacket:fix/171-phone-queue-scrim
yonlu/yellowjacket:fix/137-touch-only-affordances
yonlu/yellowjacket:fix/154-nested-css-check
yonlu/yellowjacket:feat/58-mini-player-progress-line
yonlu/yellowjacket:fix/66-album-page-scrolls-as-one
yonlu/yellowjacket:60-context-menu-action-sheet
yonlu/yellowjacket:64-android-system-volume
yonlu/yellowjacket:59-slim-the-mini-player
yonlu/yellowjacket:55-queue-as-a-screen
yonlu/yellowjacket:feat/57-drop-the-android-top-bar
yonlu/yellowjacket:feat/62-jobs-as-a-notification
yonlu/yellowjacket:fix/53-seek-bar-never-moves
yonlu/yellowjacket:fix/159-android-task-app-id
yonlu/yellowjacket:fix/52-android-activity-recreation-restarts-the-process
yonlu/yellowjacket:fix/150-expand-button-under-the-art
yonlu/yellowjacket:feat/42-inline-volume-and-centred-transport
yonlu/yellowjacket:fix/156-queue-selection-fixture-order
yonlu/yellowjacket:fix/151-fuse-the-scroll-guard-and-the-write
yonlu/yellowjacket:fix/43-queue-panel-selection
yonlu/yellowjacket:fix/143-top-bar-fits-its-window
yonlu/yellowjacket:feat/27-jobs-into-settings
yonlu/yellowjacket:feat/25-configurable-sidebar-tabs
yonlu/yellowjacket:feat/6-global-back-forward
yonlu/yellowjacket:fix/72-active-view-broadcast
yonlu/yellowjacket:fix/69-page-header-action-overflow
yonlu/yellowjacket:fix/quick-wins-batch
yonlu/yellowjacket:fix/118-in-library-clear
yonlu/yellowjacket:fix/61-mini-player-plain-text
yonlu/yellowjacket:fix/68-hover-affordances-pointer
yonlu/yellowjacket:fix/119-dev-headless-port
yonlu/yellowjacket:fix/130-issue-claim-user
yonlu/yellowjacket:fix/131-codegen-check-scope
yonlu/yellowjacket:feat/28-autotag-match-on-album
yonlu/yellowjacket:feat/17-demote-version-selector
yonlu/yellowjacket:feat/38-ownership-visibility
yonlu/yellowjacket:ci/115-manual-release
yonlu/yellowjacket:feat/34-icon-language
yonlu/yellowjacket:feat/7-full-tracklist-toggle
yonlu/yellowjacket:fix/16-tagwriter-totals
yonlu/yellowjacket:fix/unclaim-ca-certs
yonlu/yellowjacket:fix/unclaim-shell
yonlu/yellowjacket:ci/unclaim-on-close
yonlu/yellowjacket:docs/closing-keyword
yonlu/yellowjacket:docs/retire-stale-planning-docs
yonlu/yellowjacket:docs/issue-driven-workflow
yonlu/yellowjacket:integration/small-fixes
yonlu/yellowjacket:fix/small-issue-batch
yonlu/yellowjacket:fix/queue-toggle-state
yonlu/yellowjacket:fix/drag-count-badge
yonlu/yellowjacket:fix/album-card-year
yonlu/yellowjacket:fix/album-tracklist-heading
yonlu/yellowjacket:fix/seek-bar-clock-width
yonlu/yellowjacket:fix/explore-art-scanner-requests
yonlu/yellowjacket:chore/workflow-guardrails
yonlu/yellowjacket:v0.8.0
yonlu/yellowjacket:v0.7.0
yonlu/yellowjacket:v0.6.0
yonlu/yellowjacket:v0.5.0
yonlu/yellowjacket:v0.4.0
yonlu/yellowjacket:v0.3.1
yonlu/yellowjacket:v0.3.0
yonlu/yellowjacket:v0.2.3
yonlu/yellowjacket:v0.2.2
yonlu/yellowjacket:v0.2.1
yonlu/yellowjacket:v0.2.0
yonlu/yellowjacket:v0.1.0
yonlu/yellowjacket:v0.0.1
yonlu/yellowjacket:v0.0.0
3
Commits
| Author | SHA1 | Message | Date | |
|---|---|---|---|---|
|
|
f34777d3e4 |
docs: record the one statement of which view is active
It belongs beside the two rules that already keep the history stack and the in-app back buttons agreeing, and for the same reason: a second component-local idea of where the user is, is how they came to disagree. |
||
|
|
fef8c8b7f6 |
test(e2e): assert the nav highlight, not the shell's own bookkeeping
`back-navigation.spec.ts` covered exactly the journeys #72 breaks and was green throughout it, because every assertion in it was `data-active-view` — which the shell sets on every path including the back one, and which was the one thing already correct. The same trap `layout-overflow.spec.ts` set for #69: a spec named for the behaviour, measuring the plumbing. The assertions go here rather than in a second file, or the first would carry on passing vacuously. They are `aria-current="page"` through `getByRole`, which is the accessible fact — `.active` is a class and could be restyled without breaking anything real — and the role query resolves to whichever nav is in the accessibility tree at that viewport, so one helper covers the sidebar and the tab bar. Three of the four fail on the build before the fix. The fourth, the parent staying lit while a detail view is open, passed by accident and says so. |
||
|
|
9d65d9acdd |
fix(shell): publish the active view, so both navs follow the back path
The nav components learned where the user was from the `navigate` CustomEvent, which only the outbound path dispatches: `popstate` calls `handleNavigate()` directly. So a back-navigation left both of them highlighting the view just left — desktop included, at any width, on any back across two primary views. Opening a detail view was the same cause wearing a different symptom: `app-sidebar` guarded on its own item list and kept its highlight, `bottom-nav` did not and lit nothing. It cannot be fixed by re-dispatching `navigate` — `index.ts` is that event's document listener, so that is an infinite loop, and "please go to X" is not the statement being made. `activeViewStore` is the shell saying "the active view is now X", once per navigation, `popstate` included; both navs read it through a controller and hold no `activeView` of their own. A store rather than an event because a component that mounts *after* a navigation still has to know: `bottom-nav`'s drawer builds its `app-sidebar` on open, and that copy had heard nothing at all, so the drawer opened on Home from any page in the app. Closes #72 |