Skip to content

Latest commit

Β 

History

History
423 lines (362 loc) Β· 55.8 KB

File metadata and controls

423 lines (362 loc) Β· 55.8 KB

Changelog

1.3.0 (2026-04-04)

Features

  • agent: add batch mode and model selection docs (a203129)
  • agent: add decade/genre filters, tune model params, update backlog (2bee235)
  • agent: add decade/year/genre filters to search_library (fb232af)
  • agent: add heuristic evals with wiremock mock Ollama server (Phase 6) (27f9c2e)
  • agent: add onboarding and Ollama setup commands (Phase 5) (f1cf52c)
  • agent: add performance fixes and artist variety controls (c8c0ccf)
  • agent: add Python Ollama agent script with JSONL logging scaffolding (4f29c97)
  • agent: add Python prompt override harness (d5b5416)
  • agent: add repeat penalty, LLM-as-judge eval, creative naming (4ac5ca6)
  • agent: add rig-core + schemars deps and implementation plan for TASK-277 (fc5846b)
  • agent: add types, prompt, module scaffold and wire into lib.rs (2f121f7)
  • agent: expand genre filter with parent-subgenre mapping (a063a5c)
  • agent: implement Last.fm tools and strategy-based system prompt (e063a28)
  • agent: implement tools and agent loop for playlist generation (d9a37c9)
  • agent: tighten Rust playlist prompt guidance (103776b)
  • agent: wire up JSONL logging, temperature control, and think toggle (8fec18b)
  • backlog: add genius UI refresh task (13bd3f5)
  • genius: add frontend UI for Genius playlist creator (4953fab)
  • genius: Enter to generate, auto-dismiss banner, centered spinner (765c54d)
  • genius: refresh chat-style UI layout (8604bd6)
  • genius: update keyboard shortcut to Shift+Enter, fix glasses angle (c7de133)

Bug Fixes

  • agent: cfg-gate lastfm discovery types, methods, and tests behind agent feature (fd8593a)
  • agent: cfg-gate new_unconfigured behind test+agent to fix dead_code error (b8b2d3e)
  • ci: enforce nightly toolchain in tauri build setup action (4a8ac10)
  • ci: force MSVC host toolchain on Windows to prevent dlltool errors (b92b2d0)
  • ci: guard RUSTUP_TOOLCHAIN against empty PINNED_RUST on Windows (31abafc)
  • ci: harden nightly status guards for ci setup tasks (c4bd4f3)
  • ci: pin Rust toolchain from .tool-versions and add MSVC target on Windows (cdf8ef4)
  • ci: restore default keychain after release build cleanup (f74c32f)
  • ci: use pwsh for toolchain extraction on Windows, restore macOS build (dc8a7d7)
  • clippy: derive Default for OnboardingState, collapse nested if (1855050)
  • genius: crop glasses SVG viewBox to match sidebar icon size (3ec1869)
  • playlists: refresh agent-created playlists (a96e616)
  • remove orphaned new_unconfigured test helper (75df683)

Performance Improvements

  • ci: merge rust-lint and rust-tests into single job, drop macOS build (a3c2e3b)

Reverts

  • remove unused lastfm agent types and methods from main (3520dc7)

1.2.4 (2026-03-31)

Bug Fixes

  • ci: replace broken choco windows-sdk-10.1 with winget fallback (747ca49)

1.2.3 (2026-03-31)

Bug Fixes

  • ci: add [[bin]] section to produce 'mt' binary name (95db4f0)

1.2.2 (2026-03-31)

Performance Improvements

  • deps: remove mcp-bridge from default features to reduce release binary deps (599a44f)

1.2.1 (2026-03-31)

Bug Fixes

  • ci: remove stale Taskfile fingerprint cache that skips builds (eb503d6)

1.2.0 (2026-03-31)

Features

  • add context menu to now playing view (a6b5850)

Bug Fixes

  • ci: resolve cargo fmt failures and bump GHA actions to Node 24 (c06ca35)
  • keyboard: prevent space from toggling play/pause during type-to-jump (5195080)
  • now-playing: prevent long lyrics from pushing queue panel off viewport (67c292b)
  • queue: resolve shuffle, remove, and Play Next queue bugs (49b1515)
  • resolve merge conflict in .serena/project.yml (e97f9e8)
  • theme: add search field contrast for metro-teal and neon-love themes (37a60ad)

1.1.0 (2026-03-27)

Features

  • add active section highlight to settings nav for dark themes (#29) (1d9eeff)
  • add listening statistics dashboard under Settings (a74c222)
  • add Neon Love theme preset from Love color palette (af912cc)
  • add network file caching for SMB/NFS mounts (#27) (e6c55ae)
  • artists-browser: sort artist albums by year ascending (9d3c59c)
  • audio: add output device selection in Settings > Audio (#26) (d5c9f35)
  • context-menu: add "Go to Album" menu item to track context menus (e93eaba)
  • context-menu: add "Go to Artist" menu item to track context menus (83e6cdc)
  • cross-directory track deduplication with reinstatement (a7ef45a)
  • dynamic lyrics layout reflow with content-based width measurement (f2181cc)
  • library: persist removed track identifiers to prevent re-addition on scan (f7721ef)
  • show LRCLIB lyrics in Now Playing view with caching (b7e5533)
  • show LRCLIB lyrics in Now Playing view with caching (532bf87)
  • stats: add placeholder art with artist name for chart grid, fix PNG export (da5b2b3)
  • stats: rework statistics dashboard to Last.fm-inspired layout (900620d)

Bug Fixes

  • apply roborev fix for 7da95a2 (job #6) (4c0908b)
  • apply roborev fix for 83e6cdc (job #17) (4885972)
  • apply roborev fix for 968f392 (job #2) (5d161ee)
  • apply roborev fix for 9cf7984 (job #25) (c3cea62)
  • apply roborev fix for 9d3c59c (job #20) (77b3700)
  • apply roborev fix for e93eaba (job #13) (81793fc)
  • cargo: create CARGO_HOME/bin symlinks for mise shim compatibility (38cb8f9)
  • cargo: symlink project CARGO_HOME/bin to ~/.cargo/bin, add PATH (aaefd99)
  • cargo: symlink tools to rustup binary instead of mise install dir (37fd360)
  • ci: add libasound2-dev for Linux and fix macOS keychain search list (5151e62)
  • ci: force cargo-binstall to install tarpaulin binary (6e3383a)
  • ci: gate build matrix behind all lint and test jobs (ede587e)
  • ci: gate rust-tests behind rust-lint (300b6da)
  • ci: resolve release build failures on macOS, Linux amd64, and Linux ARM64 (5d919af)
  • ci: skip Tauri DMG bundling on macOS, create DMG with hdiutil (f702934)
  • clippy: collapse nested if statements into let-chains (930c092)
  • drag-drop: use relative offset for queue drag ghost position (cf244ee)
  • guard playNextTracks against background queue build race condition (2c17f80)
  • library: force repaint when returning from albums view (c70b4c5)
  • media-keys: register MediaRewind/FastForward for macOS F7/F9 keys (2b84602)
  • metadata-modal: prevent repeated re-opens during library updates (3d61cd5)
  • playback: loop-one not re-queuing current track and icon not untoggling (7481401)
  • propagate DB errors instead of silently swallowing in removed tracks (1451d61)
  • resolve clippy warnings in mount_detect and stats (58b4293)
  • roam: resolve 3 false-positive dependency cycles (f7131bf)
  • startup: prevent FOUC flash between window.show() and CSS load (#30) (930bc32)
  • test: anchor Playwright route patterns to avoid intercepting JS modules (f3b854b)
  • testing: update 3 stale visual regression snapshots (662b96e)
  • themes: add dark-theme toggle overrides for network cache settings (1b621a2)
  • ui: prevent text selection on all UI chrome (be560ce)
  • watcher: return original tracks on filter_removed_tracks error (4e3f633)

Performance Improvements

  • conductor: replace signed build with deno install in setup (0841f5c)
  • dev: add cranelift codegen, panic=abort, and shared target dir (b4ed57b)
  • dev: add panic=abort and shared target dir for dev builds (fea390e)

1.0.0 (2026-02-21)

⚠ BREAKING CHANGES

  • Python backend has been removed

Features

  • a11y: integrate Alpine.js Focus plugin for improved focus management (a98dbcd)
  • add agent skills (6a1a320)
  • add artwork LRU cache and consolidate time formatting utilities (0957392)
  • add database persistence, logging, and CSV results to benchmark suite (aa10dcd)
  • add Docker cross-build for Linux ARM64 (Raspberry Pi) (363006a)
  • Add double-click to jump to current track in library view (1c75a4a)
  • add infinite scroll to library view using Alpine.js Intersect plugin (2ba1293)
  • add Last.fm frontend integration for settings and scrobbling (b473c3e)
  • add Linux amd64 build support, remove global-shortcut plugin (c57f8c1)
  • add MCP bridge for E2E test debugging (a4c6bfa)
  • add play history tracking for shuffle navigation (task-200) (7dcad78)
  • add queue state Tauri commands and events (543ed26)
  • add queue_state table and database operations (b2fdf7e)
  • auto-install Linux system deps before Tauri build (cd1955a)
  • backend: add bulk delete and purge-missing Tauri commands (task-272) (663638e)
  • backend: batch reconciliation, transaction wrapping, frontend memoization (task-272) (b93685a)
  • backend: implement Rust database layer and scanner modules (79a92fd)
  • backend: make export_diagnostics async to prevent UI blocking (08f2236)
  • backend: structured logging with tracing, frontend error capture (task-277) (905547c)
  • build: add Linux amd64 Docker build mirroring arm64 (b795816)
  • build: enable MCP bridge by default in release builds (c012d43)
  • build: statically link TagLib, eliminate Homebrew runtime dependency (task-259) (d5fcf43)
  • ci: add act configuration for local GitHub Actions testing (d169a00)
  • ci: add macOS code signing, notarization, and release pipeline (task-021) (f6f128d)
  • ci: add platform selector to release workflow (5dda144)
  • ci: add Playwright E2E tests to test-local.yml and document flakiness (c026bab)
  • ci: add Windows NSIS packaging to release pipeline (024c3c0)
  • ci: auto-cancel superseded workflow runs (d22a8cc)
  • complete Tauri migration - remove Python sidecar (9feabb0)
  • context-menu: add "Add to Liked Songs" toggle to track context menus (task-276) (2a6a751)
  • coverage: add Phase 4 coverage measurement and CI integration (463102a)
  • create frontend settings service for backend sync (c2843d3)
  • events: replace WebSocket with Tauri event system (452cc28)
  • Favorites API migrated from FastAPI to Rust (cc3b996)
  • frontend: add .log extension and loading state to log export (4c7c553)
  • frontend: migrate Last.fm API to Tauri commands (Phase 7) (8e28e21)
  • frontend: perf instrumentation, early window show, scan loading state (task-277) (2f35425)
  • implement 3-phase performance optimizations for library scanning (7435364)
  • implement Last.fm scrobbling integration (712580a)
  • initialize settings service before Alpine starts (7a387d9)
  • integrate Deno for faster frontend builds (8x install, 2.2x build) (aa4bc7b), closes #215
  • integrate queue state persistence in frontend (df60cc7)
  • last.fm integration (45c6fda)
  • lastfm: add loved tracks cache for automatic favoriting (8fc045d)
  • lastfm: add UI and background sync for loved tracks cache (3f0403e)
  • lastfm: bidirectional love sync, tighter matching, cache reset (1e87fc0)
  • lastfm: implement loved tracks import (Phase 6) (2d98554)
  • lastfm: implement Phase 1 core infrastructure (e33a6bf)
  • lastfm: implement Phase 2 settings commands (f787eec)
  • lastfm: implement Phase 3 authentication commands (c0c6e9a)
  • lastfm: implement queue commands and background retry (Phase 5) (3d2d6e8)
  • lastfm: implement scrobbling commands (Phase 4) (8fa5681)
  • library: add dragged pill button files to watched folders with confirmation (task-259) (650d852)
  • library: add ellipsis to default ignore words list (da17fc6)
  • library: add persistent view caching to eliminate loading spinners (5d72cd6)
  • library: add Rust library commands and migration analysis (3a0bcd6)
  • library: add same-letter cycling for type-to-jump navigation (088fd97)
  • library: add type-to-jump artist navigation (WIP) (08069be)
  • library: add Year, Genre, Disc, and Total columns to library table (1425d11)
  • library: wire Cmd+D queue-next shortcut to library browser (task-107) (c20f491)
  • linux: add GTK HeaderBar with dynamic theme colors (bae124c)
  • migrate library column settings to backend (8d1ac21)
  • migrate sidebar component settings to backend (45396c2)
  • migrate ui store settings to backend persistence (2030e26)
  • move Last.fm scrobbling to Rust audio thread (b2cbf5a)
  • playlists: fix library-to-playlist drag-drop and add reorder visual feedback (dfa15bb)
  • playlists: migrate playlists API to Rust Tauri commands (f210a20)
  • queue: add stop-after-current, play-next offset, and insert guard (task-107) (6f049aa)
  • queue: migrate queue API to Rust Tauri commands (0b38622)
  • re-enable queue events with debouncing (97cbc66)
  • Replace Python/Tkinter with Tauri/Rust implementation (cf7cbf6)
  • Repurpose track number column for playlist ordering (b7a73b8)
  • scripts: add Windows build and signing script for local testing (72d0457)
  • scripts: elevate choco installs via Start-Process -Verb RunAs (3a01dd2)
  • settings: add Columns section with reset options and confirmation dialog (1dab664)
  • settings: display keyboard shortcuts in settings panel (task-107) (f609cba)
  • settings: migrate Settings API to Rust using Tauri Store (957b029)
  • shortcuts: add global keyboard shortcuts module (task-107) (82f06d7)
  • shortcuts: require modifier keys for mute, loop, shuffle shortcuts (56ffeb6)
  • sidebar: delete active playlist via Delete/Backspace key (9cea11b)
  • skills: add ideation skill adapted from Auto-Claude patterns (65b3bc5)
  • sort: install @alpinejs/sort plugin (914a0a5)
  • sort: migrate column header reordering to Alpine.js Sort plugin (3439ac6)
  • sort: migrate playlist track reordering to Alpine.js Sort plugin (Phase 2) (171d63e)
  • sort: migrate queue reordering to Alpine.js Sort plugin (58dd5d9)
  • sort: migrate sidebar playlist reordering to Alpine.js Sort plugin (Phase 3) (b6a2041)
  • tasks: add cargo-nextest support and build timing analysis (8fb6ede)
  • tests: add API mocking infrastructure for Playwright tests (a52f6f8)
  • tests: add comprehensive frontend E2E test coverage (db85304)
  • tests: add event emission and thread safety tests (93c8fcd)
  • tests: add fail-fast with maxFailures=5 for CI (b8db04d)
  • tests: add library store Vitest unit tests (ecf49b6)
  • tests: add Phase 2 E2E and unit tests for error states, settings, and selection (33123ec)
  • tests: add Phase 3 backend Rust command tests (82e25a6)
  • ui: add "Add to Playlist" context menu to Albums and Artists views (task-275) (c9a9726), closes #3
  • ui: add Artists and Albums sidebar navigation with view routing (task-273.01) (2c328dd)
  • ui: implement Albums browsing view with grid and detail (task-273.03) (8008d91)
  • ui: implement Artists browsing view with split-pane layout (task-273.02) (6a776c3)
  • ui: move now playing indicator to status column with dynamic icons (611363e)
  • ui: optimistic bulk delete, debounced scan events, allTracks store (task-272) (45eba56)
  • watched folders (0a74265)

Bug Fixes

  • add requests dependency to PEX build for Last.fm API integration (c07689d)
  • audio: use Decoder::try_from(File) for M4A/AAC playback (4315d8f)
  • build: add sccache as macOS dep, filter IDE extension paths from PATH (d81e6ec)
  • build: target baseline x86-64 CPU for Zig and TagLib static libs (b2d0723)
  • ci: add x86_64-pc-windows-msvc target to nightly toolchain (9b3d78f)
  • ci: consolidate signing env vars, add library-validation entitlement, docs (50e0b5c)
  • ci: enable Rust toolchain caching (91b469c)
  • ci: ensure complete TagLib source extraction and add verification (66cd50f)
  • ci: fix Deno formatting in vite.config.js (a9d4b8a)
  • ci: fix Windows build path and add Taskfile to CI (0dea066)
  • ci: install cmake via brew on macOS runner (5495a90)
  • ci: install Playwright browsers from project directory (c2d9873)
  • ci: install Rust via chocolatey on Windows runner (06305c3)
  • ci: install rustup via choco, pin nightly-2026-02-09 to match .tool-versions (1555a02)
  • ci: install system dependencies and fix Playwright port conflict (90dd494)
  • ci: install webkit browser for Playwright E2E tests (b85862b)
  • ci: kill stale dev server on port 5173 before Playwright tests (1344f2a)
  • ci: prevent duplicate workflow runs on PRs (4612180)
  • ci: prevent test-local.yml from running in GitHub Actions (a077863)
  • ci: replace dtolnay/rust-toolchain with actions-rust-lang/setup-rust-toolchain (096db60)
  • ci: resolve macOS cargo check and Windows release build failures (e7778ca)
  • ci: revert setup-node to v6, add act to .tool-versions (3b44472)
  • ci: show cmake errors in build-taglib script (8b00c12)
  • ci: skip cmake reinstall and pin setup-node to v4 for act compat (bec4eeb)
  • ci: skip visual regression tests in CI (f8ccdfb)
  • ci: update webkit2gtk package to 4.1 for Ubuntu 24.04 (c2b6fcd)
  • ci: use .cmd wrapper for Windows signtool signing (62e9428)
  • ci: use pwsh for Rust setup and npm ci on Windows (64ef8b4)
  • clear queue on startup and enqueue only subsequent tracks in sequential mode (0b78072)
  • clippy: resolve all linter warnings in Rust code (2bea4fe)
  • config: update deno.jsonc to use flat options format (ab370c4)
  • correct npm path prefix in tauri.conf.json for monorepo structure (dcbf1de)
  • db: make compat tests skip gracefully in CI (8daa834)
  • deno: use --frozen lockfile for reproducible installs (bec4ccf)
  • deps: update @tauri-apps/api to 2.10.1 to match tauri crate 2.10.2 (9965ef9)
  • dialog: allow selecting both files and folders in add music picker (#19) (9f7045f)
  • e2e: fix 6 failing tests and metadata editor navigation (01738fd)
  • e2e: fix all 34 Last.fm E2E tests (5877cfa)
  • e2e: update Last.fm UI text and add missing HTTP mocks (3b3b1c2)
  • frontend: use static import for api.js in UI store (69d1cc8)
  • handle NaN/Infinity and clamp seek position to duration (36f179f)
  • js: resolve deno linting warnings (d84dc45)
  • lastfm: improve error message display for connection failures (c299f4b)
  • lastfm: improve loved tracks import matching and add logging (065dcf2)
  • lastfm: use fraction-based threshold comparison for robustness (85f3a64)
  • library capping visible tracks at 100 (8cb2e26)
  • library: filter missing tracks and set missing=0 on insert (port from task-216) (011b5a6)
  • library: fix default sort order to respect disc number (c116b02)
  • library: improve missing track reconciliation and locate UX (c95edfd)
  • library: prioritize stripped-prefix matches in type-to-jump (ff120d7)
  • library: remove word-boundary matching from type-to-jump (60003fc)
  • library: restore missing async on _fetchLibraryData (e19da1f)
  • library: suppress keyboard shortcuts when input is focused (6f7577b)
  • lint: resolve async/await lint errors in library store (d5ba0d1)
  • linux: enable decorations=false for GTK HeaderBar dragging (646d6c0)
  • make queue state session-only (reset on app start) (207c267)
  • metadata: enable prev/next navigation for single-track editor (c2b917e)
  • move ignore-words sorting to SQL, fix album/artist grouping (16cef12)
  • npm: regenerate package-lock.json to fix native bindings (9ef0e64)
  • playback: resolve shuffle and rapid-next regressions (ebeaeff)
  • player-controls: commit volume immediately on drag release (470f267)
  • player: update volume optimistically for immediate UI feedback (23a8104)
  • playlists: dispatch event on rename to sync context menu (fff3188)
  • playlists: use global workaround for drag-drop in Tauri (354ec90)
  • preserve play history across queue rebuilds (33e6752)
  • prevent double-queuing of clicked track in sequential mode (37f0af4)
  • prevent queue event listener from overriding shuffle state during init (e41611e)
  • prevent race condition causing tracks to play twice on double-click (25fa679)
  • queue: prevent shuffle state desync during skip next/previous (task-263) (1217130)
  • queue: resolve shuffle bugs causing track restart and repeats (f76b0b5)
  • reduce track transition gaps, fix shuffle race conditions, add queue virtual scroll (0867a84)
  • replace $watch with Alpine.effect in ui store (57e23d2)
  • resolve 4 Playwright test failures from data-track-id collision (24e8a0a)
  • resolve deno fmt and lint errors (9fbec03)
  • resolve Rust 2024 never type fallback warning (9655011)
  • restore play/pause on macOS (task-279) (651cf1e)
  • rust: resolve clippy linting warnings (cb24938)
  • scanner: replace Zig FFI inventory with pure Rust to fix SIGBUS crash (2f68c74)
  • scripts: guard against UNC paths, switch to npx @tauri-apps/cli (35eed8b)
  • scripts: set RUSTUP_TOOLCHAIN early as process env var (9b5d9ba)
  • scripts: skip beforeBuildCommand, merge config into single override (0b6a38a)
  • scrobble: use Math.ceil for played_time/duration to prevent off-by-one threshold failures (fcfb3fb)
  • sidebar: add delay before playlist reorder activation (16573ef)
  • sort: handle empty album_artist in artist sort order (e5c3cc0)
  • sort: resolve race conditions and clone errors in queue reordering (c276daf)
  • startup: prevent flash of unstyled content on app launch (1b78d94)
  • taskfile: replace npm lint/format with deno commands (fa24f06)
  • tasks: stop deleting tracked deno.lock in clean tasks (eedc795)
  • tauri: remove mcp-bridge permission from default capabilities (0acca6f)
  • test: accept confirm dialog in column reset test (1011b41)
  • test: align Playwright tests with SQL-side sorting from 16cef12 (f540fd1)
  • test: prefix unused variable in lastfm_loved upsert test (0dbdd2c)
  • tests: adjust Playwright timeouts to avoid flaky failures (27f55ef)
  • tests: align test mock _stripIgnoredPrefix with library.js (f339396)
  • tests: correct import paths in error-states Playwright tests (fd2e474)
  • tests: correct seek invariant tests and add dot reporter (12c00f5)
  • tests: make column and sorting tests flexible for browser mode (6a327ce)
  • tests: update scrobble and sidebar tests for current architecture (ee39250)
  • trim value in _stripIgnoredPrefix early return (0ec9da3)
  • ui: add scrolling to playlist submenu when it exceeds viewport (task-151) (1a54200)
  • ui: center empty library state without breaking virtual scroll (e9ae286)
  • ui: default artist sort, normalize sort keys, fix O(n^2) artist SQL (task-272) (8b326c3)
  • ui: disable column width animation for instant sizing (728d504)
  • ui: disable default browser context menu in webview (346e60e)
  • ui: prevent context menu and text selection on sidebar items (f66a802)
  • ui: prevent intermittent sidebar theme flash on reload (task-256) (e564b54)
  • ui: remove background hover effect from transport buttons (e0b838c)
  • ui: remove jittery animations from volume slider (3ce4b8b)
  • ui: style success toasts to match theme accent colors (task-258) (718b843)
  • ui: use # column header consistently in library and playlist views (2064276)
  • use relaxed parsing for tracks with malformed ID3 tags (task-281) (b8d7bc8)
  • watcher: prevent UI freeze during manual scan (360218e)
  • windows: resolve crash-on-launch and signing pipeline issues (842b53d)

Performance Improvements

  • backend: defer content hashing in scan, transaction-wrap queue adds (task-272) (6329ca1)
  • batch metadata loading and parallel saves (task-279) (3d6eeb1)
  • build: switch zig-core to ReleaseSmall optimization (64b55ae)
  • build: use dynamic BUILD_JOBS calculation for lower-spec machines (b01a81f)
  • ci: add build parallelism env vars to Windows CI setup (ed41c21)
  • ci: add path filters to skip CI for non-business logic changes (ad8578a)
  • ci: cache cargo-tarpaulin binary to speed up Rust tests (6c5cad9)
  • ci: disable incremental compilation for faster clean builds (6ccd698)
  • ci: enable incremental compilation for self-hosted Rust jobs (365ac3b)
  • ci: remove npm cache from self-hosted jobs (6d5b08b)
  • ci: remove Rust dependency cache from self-hosted jobs (5e0fb95)
  • css: strip transitions, fix hidden spinners, add containment (task-262) (1e16ec2)
  • feature-gate devtools to reduce release binary size (2e2b23c)
  • frontend: implement virtual scrolling for library track list (task-261) (a1a0480)
  • frontend: stop caching full track arrays in sectionCache (c79a3f9)
  • library: make reconcile scan async with rayon parallelism and progress UI (task-280) (40b1f99)
  • linux: tune glibc malloc arenas for WebKitGTK memory reduction (aad2d84)
  • runtime: limit rayon thread pool to 4 threads with 2 MB stacks (b720148)
  • runtime: reduce SQLite pool to 4 connections, artwork cache to 50 (907a378)
  • rust: optimize dev build performance and trim tokio features (71f0cb7)
  • tests: optimize Playwright E2E performance for CI (3c98d33)
  • ui: immediate playback on double-click with background queue build (task-272) (7cc8e60)

Reverts

  • linux: remove GTK HeaderBar, keep platform-specific titlebar CSS (d6964ee)
  • remove Alpine.js Sort plugin migration (a73c7de)