Skip to content

Release v28.0.0 - #435

Merged
Andreas-Garcia merged 30 commits into
mainfrom
release/28.0.0
Nov 1, 2026
Merged

Andreas-Garcia merged 30 commits into
mainfrom
release/28.0.0

Conversation

@Andreas-Garcia

Copy link
Copy Markdown
Member

Release v28.0.0 (27.1.0 -> 28.0.0). After this merges, run pnpm tag-release on main to tag and trigger the publish workflow, then merge the companion PR into develop.

Andreas-Garcia and others added 30 commits October 1, 2026 22:41
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Release v27.1.0 (merge back into develop)
TrackListProvider kept an unfiltered page-1 library list query active once any
tracklist existed, refetched on every curation invalidation and window focus.
On grow that ran a COUNT(*) over the whole song table and timed out with 503s.

BREAKING CHANGE: TrackListProvider no longer accepts listEndpoint/listQueryKey.
Call useTrackList().updateTrack(track) from a track mutation's onSuccess instead.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…mutation-refresh

# Conflicts:
#	CHANGELOG.md
…ation-refresh

feat(genre-tree)!: drop TrackListProvider list polling, add updateTrack
…trol

feat(genre-tree): add floating control slot
…ee-view-6-4-0

build(deps): bump genre-tree-view to 6.4.0
…ption-heading

# Conflicts:
#	packages/app-kit-ui/src/genre-tree/GenreTreeView.tsx
#	packages/app-kit/src/genre-tree/TrackListContext.tsx
…tion-heading

feat(genre-tree): improve playback and sharing
…-sidebar-top-right

# Conflicts:
#	CHANGELOG.md
#	packages/app-kit/src/genre-tree/track-list-sidebar/TrackListSidebar.test.tsx
#	packages/app-kit/src/genre-tree/track-list-sidebar/TrackListSidebar.tsx
…debar-top-right

feat(genre-tree): anchor TrackListSidebar top-right
Copilot AI balanced review requested due to automatic review settings November 1, 2026 09:12
@Andreas-Garcia
Andreas-Garcia merged commit 1cc277f into main Nov 1, 2026
6 checks passed

Copilot AI 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.

🟡 Changes recommended

A moderate unresolved finding flags that the .npmrc scope registry move conflicts with the still-GitHub-targeted auth token and publish workflow, risking publishing to the wrong registry or auth failure, alongside outstanding changelog and coverage-gate concerns.

3 open issues
1 file not reviewed
  • pnpm-lock.yaml: Generated file
What changed in this PR

This is the release/28.0.0 PR (27.1.0 → 28.0.0), cut from develop, so it bundles all merged feature work since the last release in addition to the mechanical version/changelog bump. The headline functional changes center on the player and track list: in-panel playback/seek/volume controls with prev/next navigation and auto-advance (including auto-skipping embed-blocked YouTube tracks), a new genre/artist Share flow (SharePopup/Toast/BasePopup focus-trap & backdrop support), a redesigned track-list sidebar scroll-follow behavior, and a breaking removal of TrackListProvider's listEndpoint/listQueryKey props in favor of useTrackList().updateTrack(...).

Changes:

  • Player rework in app-kit: playbackConfirmedTrackId, seekTo, clamped volume, richer onTrackEnd event; YouTube uses controls=0 and a single playback command per load.
  • TrackListContext gains runtime-unplayable tracking, prev/next navigation, auto-advance, and updateTrack; drops the always-on library list query (breaking prop removal).
  • New app-kit-ui features: Share popup/button/preview, PlayerControls, sidebar collapse/scroll-follow, Wikipedia/Wikidata links, floatingControlsLeading host slot.
  • Release plumbing: version bumps to 28.0.0, genre-tree-view 6.4.0, lowered coverage thresholds, and an .npmrc registry switch to npmjs.org.
File Description
pnpm-workspace.yaml, pnpm-lock.yaml Bump genre-tree-view to 6.4.0 (now resolved from npmjs.org)
packages/​app-kit/​package.json, packages/​app-kit-ui/​package.json Version bump to 28.0.0 and peer ^28.0.0
packages/​app-kit/​src/​player/​PlayerContext.tsx (+test) seekTo, volume clamp/apply, playbackConfirmedTrackId, onTrackEnd event, YouTube controls=0
packages/​app-kit/​src/​player/​MediaController.ts (context) volume/seek interface used by new controls
packages/​app-kit/​src/​genre-tree/​TrackListContext.tsx (+test) Nav/auto-advance/runtime-unplayable/updateTrack; removes list-query props
packages/​app-kit/​src/​genre-tree/​useGenreTreeViewState.ts Resolve legacy criteria UUID selection to playlist UUID
packages/​app-kit/​src/​genre-tree/​api/​library/​index.ts Doc comment update after prop removal
packages/​app-kit/​vitest.config.ts, packages/​app-kit-ui/​vitest.config.ts Lower coverage thresholds
packages/​app-kit-ui/​src/​popup/​BasePopup.tsx, PopupTitle.tsx, Toast.tsx, index.ts Focus trap/escape/backdrop, class hooks, new Toast export
packages/​app-kit-ui/​src/​genre-tree/​Share*.tsx, share.ts, index.ts New share popup/button/preview + types
packages/​app-kit-ui/​src/​genre-tree/​PlayerControls.tsx (+test), PlayerPanel.tsx (+test) In-panel transport controls; panel minimizes instead of closing
packages/​app-kit-ui/​src/​genre-tree/​track-list-sidebar/​* (+tests), track-position-play-pause.css Collapse/scroll-follow, status spinner/bars, layout anchor
packages/​app-kit-ui/​src/​genre-tree/​TrackItem.tsx, GenrePlaylistTracks.tsx, MusicBrainzRecordingLink.tsx, UnplayableReason.tsx (deleted) Title→MB link, drop separate unplayable-reason UI
packages/​app-kit-ui/​src/​genre-tree/​GenreTreeView.tsx (+test), GenreDetailExtras.tsx (+test), GenreActionBand.tsx, artist/​useArtistPanel.tsx Share wiring, artist-filter relayout, floating host control, Wiki links
packages/​app-kit-ui/​scripts/​copy-genre-tree-css.mjs Inline local play/pause CSS into published styles
CHANGELOG.md, architecture.md 28.0.0 notes; YouTube iframe behavior doc
apps/​playground/​src/​App.tsx, main.tsx Exercise share/controlled selection/registry-aware URL state
.npmrc Switch @behindthemusictree scope registry to npmjs.org

I flagged a duplicated ### Changed heading in the changelog, an .npmrc/publish-pipeline registry inconsistency to verify, and the broad coverage-threshold reduction. No blocking decoupling/export-wiring violations were found, and new imports/references all resolve.

Review effort: Balanced

Comment thread .npmrc
Comment on lines +1 to 2
@behindthemusictree:registry=https://registry.npmjs.org
//npm.pkg.github.com/:_authToken=${NPM_TOKEN}
Comment thread CHANGELOG.md
Comment on lines +16 to +26
### Changed

- **app-kit-ui**: Anchor fixed track list sidebars below the header and let them grow toward the player.

### Fixed

- Keep tree nodes sized by song count while an artist filter is active, including while artist details load.

### Changed

- Upgrade genre-tree-view to 6.4.0 for density-aware node sizing.
Comment on lines +14 to +17
lines: 90,
functions: 90,
branches: 85,
statements: 90,
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants