diff --git a/.release-please-manifest.json b/.release-please-manifest.json index 0d1bebe1..64e0684f 100644 --- a/.release-please-manifest.json +++ b/.release-please-manifest.json @@ -1,3 +1,3 @@ { - ".": "1.6.0" + ".": "1.7.0" } diff --git a/CHANGELOG.md b/CHANGELOG.md index 965c0f78..0ffc2c6d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,73 @@ # Changelog +## [1.7.0](https://github.com/pythoninthegrasses/mt/compare/v1.6.0...v1.7.0) (2026-09-14) + + +### Features + +* **db:** persist artist_sort_key and add indexed prefix lookup ([ba9850b](https://github.com/pythoninthegrasses/mt/commit/ba9850b4de14124a921d3b973729832a24b610c6)) +* **frontend:** add LibraryPageCache for per-query LRU page caching ([6348851](https://github.com/pythoninthegrasses/mt/commit/6348851b814c7ed484426a5c00c9abfb5b91e09e)) +* **frontend:** inject sidecar endpoint, flip library.getTracks (TASK-355.6 AC[#1](https://github.com/pythoninthegrasses/mt/issues/1)-4) ([#50](https://github.com/pythoninthegrasses/mt/issues/50)) ([9dd360b](https://github.com/pythoninthegrasses/mt/commit/9dd360b411738e59bcec40ef3aa82c24d43bfd20)) +* **frontend:** wire LibraryPageCache into library store and loadOp ([0138429](https://github.com/pythoninthegrasses/mt/commit/0138429ff7bf763533c0f244fb1d70db75fc2182)) +* **library:** add type-to-jump reliability guardrails behind jump_reliability_guard ([21c65b7](https://github.com/pythoninthegrasses/mt/commit/21c65b7d76b7854abec7146ee29fd0edd9d284cc)) +* **library:** exclude remote Plex tracks from stats footer ([05f62f9](https://github.com/pythoninthegrasses/mt/commit/05f62f900a18a83cfff85b0f216372460204a7c2)) +* **plex:** add cloud badges, download UI, and prefetch worker (TASK-342.6) ([3fe2f8b](https://github.com/pythoninthegrasses/mt/commit/3fe2f8ba18d226c3a2d43a0a76730df36181eef1)) +* **plex:** add download-on-play for remote tracks (TASK-342.5) ([d37e59b](https://github.com/pythoninthegrasses/mt/commit/d37e59b0f7e9ac89cba1cfaa69bf7d98f4612e45)) +* **plex:** add library selection commands and auto-sync refactor ([72dce6e](https://github.com/pythoninthegrasses/mt/commit/72dce6e4ed32a01d3459ac00dca933bfc50fff52)) +* **plex:** add Plex API client library (TASK-342.1) ([e26efcd](https://github.com/pythoninthegrasses/mt/commit/e26efcddf691a1e87ebfea30f5fa5b9bcbd79d0e)) +* **plex:** add Plex config storage and Settings UI (TASK-342.3) ([aab6dbe](https://github.com/pythoninthegrasses/mt/commit/aab6dbe3ced2968ad403ff7f5894c6a0658a333c)) +* **plex:** add Plex library fetch, cache, and merge (TASK-342.4) ([1cfacef](https://github.com/pythoninthegrasses/mt/commit/1cfacef4e104973a08de0522fc053e77f28a9f49)) +* **plex:** add source/remote_id columns for Plex source tracking (TASK-342.2) ([19c4ff6](https://github.com/pythoninthegrasses/mt/commit/19c4ff63eee5efe280f6bb0be28aa844e7346854)) +* **plex:** auto-sync on connect/startup, purge remote tracks on disconnect ([2f89eb0](https://github.com/pythoninthegrasses/mt/commit/2f89eb0374db8a5194750ec6112435f9a6fdfb15)) +* **shadow-diff:** shadow-diff harness proving Rust/Zig parity ([#49](https://github.com/pythoninthegrasses/mt/issues/49)) ([92feb45](https://github.com/pythoninthegrasses/mt/commit/92feb45fd21d5915e58a49e02154bb35e7f9c905)) +* **sidecar:** package, spawn, and sign the zig sidecar in the tauri bundle ([c25352a](https://github.com/pythoninthegrasses/mt/commit/c25352a66b88ef7b8185d405d8d6ea58a324e435)) +* **theming:** add midnight, night out, and spotify theme presets ([256aef9](https://github.com/pythoninthegrasses/mt/commit/256aef9f15fe99a177c377cff2abecf599d93243)) +* **zig-core:** vendor SQLite amalgamation with strip_sort_prefix parity ([aee6c59](https://github.com/pythoninthegrasses/mt/commit/aee6c596de777ec56375fd4494f89575349ec07a)) +* **zig:** local HTTP server serving one read endpoint from mt.db ([47504b2](https://github.com/pythoninthegrasses/mt/commit/47504b2b49b81c552ef4c97b14c477cb49146674)) +* **zig:** pin zig 0.15.2 via mise and wire taskfile + CI job ([#47](https://github.com/pythoninthegrasses/mt/issues/47)) ([07abd9d](https://github.com/pythoninthegrasses/mt/commit/07abd9df5156eb51b8f548e5fcbbf99d3a5f2c35)) + + +### Bug Fixes + +* **ci:** add diagnostics to verify-signing for hardened-runtime mismatch ([e565715](https://github.com/pythoninthegrasses/mt/commit/e5657158f0bde486f4759561a27728ba32d666bb)) +* **ci:** move RUSTUP_TOOLCHAIN to task-level env in taskfiles/ci.yml ([7f96d4a](https://github.com/pythoninthegrasses/mt/commit/7f96d4aa5e1f7efcfac48a277306b852f4c95eea)) +* **ci:** resolve zig via PATH when mise is unavailable ([#48](https://github.com/pythoninthegrasses/mt/issues/48)) ([219c8ef](https://github.com/pythoninthegrasses/mt/commit/219c8ef54d4ab5236ba3be3da3d0da72d6598468)) +* **ci:** restore documented CI job graph in test.yml ([#51](https://github.com/pythoninthegrasses/mt/issues/51)) ([a9c794e](https://github.com/pythoninthegrasses/mt/commit/a9c794e3fa2fcbcefc360c239bb61c2a83e8d231)) +* **frontend:** json-stringify non-Error unhandled rejection reasons ([faa52b5](https://github.com/pythoninthegrasses/mt/commit/faa52b53857cbf11c2e72074f478c2b5bb1add71)) +* **frontend:** use instant scroll in _scrollToRowIndex to prevent blank viewport ([1b477bd](https://github.com/pythoninthegrasses/mt/commit/1b477bd6da70223c979b45044b676b56b4c29439)) +* **gitignore:** scope db ignore pattern to actual sqlite artifacts ([9e549fe](https://github.com/pythoninthegrasses/mt/commit/9e549fe9de5c8279c6a4723b35cf71ab82c2d6e5)) +* **library:** align find_sort_offset LIKE match with ORDER BY column for artist sort ([31a3a9d](https://github.com/pythoninthegrasses/mt/commit/31a3a9dda0e0035fd70d021559d0feabeeef4fb0)) +* **library:** eliminate blank-row flash in paginated type-to-jump (TASK-344) ([2841835](https://github.com/pythoninthegrasses/mt/commit/28418354e22d23183d4d6afc1b5ccfc48372f237)) +* **library:** eliminate stale page fetches in type-to-jump by removing _ensurePage from _jumpToPrefix ([3b694f6](https://github.com/pythoninthegrasses/mt/commit/3b694f61d089597524214f6be5429f4aeb632dcd)) +* **library:** eliminate type-to-jump blank viewport at root ([4bf54fa](https://github.com/pythoninthegrasses/mt/commit/4bf54faf31c0dfb0b087ae2fea908656d5ff090e)) +* **library:** extend type-to-jump debounce to 1500ms and cancel stale backend jumps ([8b084b7](https://github.com/pythoninthegrasses/mt/commit/8b084b71150c89c40ad4eda53f9647d93c24d537)) +* **library:** keep viewport rendered during transient totalTracks=0 reload (TASK-349) ([1a9aee4](https://github.com/pythoninthegrasses/mt/commit/1a9aee4987c125e706735c4c606a974743a22c93)) +* **library:** load missing pages before shift+click range selection ([61ce48b](https://github.com/pythoninthegrasses/mt/commit/61ce48b10b7a00236c30cfb410082a28a76448cb)) +* **library:** pass sort/order/ignoreWords to library_get_section on initial load ([31bdc97](https://github.com/pythoninthegrasses/mt/commit/31bdc97e9965891c4ca3e9102997a7da91bb7a0e)) +* **library:** preserve loaded pages on Plex/Last.fm background refresh ([5a21e42](https://github.com/pythoninthegrasses/mt/commit/5a21e42ef0654e9d12f8c7bada78dbaff074478b)) +* **library:** prevent blank viewport when type-to-jump races concurrent library reload ([7ea9c95](https://github.com/pythoninthegrasses/mt/commit/7ea9c95d3b90cb7b616feeee6bec91d15cc2c9fb)) +* **library:** revert page size to 500 and restore pipeline overlap in _jumpViaBackend ([6b54379](https://github.com/pythoninthegrasses/mt/commit/6b5437996113cabec21f14b5249930b324bc2666)) +* **library:** scroll to target immediately when offset resolves, not after page load ([4f06f58](https://github.com/pythoninthegrasses/mt/commit/4f06f5821bf341050e252540f950aa2ba8a4da6e)) +* **library:** show shimmer rows during cross-region type-to-jump ([8a98d0d](https://github.com/pythoninthegrasses/mt/commit/8a98d0df152243f2c0579200bd4b857b84006679)) +* **plex:** add plex to settings section allowlist ([599ef1d](https://github.com/pythoninthegrasses/mt/commit/599ef1d4989e1ceda8d728d1fc63ecd0d0da127a)) +* **plex:** move remote track cloud icon to index gutter alongside missing indicator ([cc0dc0b](https://github.com/pythoninthegrasses/mt/commit/cc0dc0b4910ec27d4679e6a049a4271961a3ee7d)) +* **plex:** move show-remote toggle from library toolbar to Settings > Plex ([b458f62](https://github.com/pythoninthegrasses/mt/commit/b458f6240c5cf34454e670b0088693905f107dd3)) +* **plex:** preserve scroll position when plex-sync-complete fires ([040d247](https://github.com/pythoninthegrasses/mt/commit/040d247a2f24f92a0c62419601342f20d0a9cd62)) +* **plex:** resolve stuck batch toast and preserve primary color on completion ([4c98c36](https://github.com/pythoninthegrasses/mt/commit/4c98c36a9b82172cbf9bf67bf63b26efc2ed145a)) +* **plex:** skip already-downloaded tracks in bulk context menu download ([bd74d6a](https://github.com/pythoninthegrasses/mt/commit/bd74d6a2a83fbbb07f3fd89d117cd8e2a7d1fccd)) +* **plex:** tombstone remote_id to prevent deleted Plex tracks from reappearing ([d181dab](https://github.com/pythoninthegrasses/mt/commit/d181dabbb756c90eaa57250080823181b0df066d)) +* **queue:** chunk IN-clauses to stay under SQLite variable limit ([b9b8647](https://github.com/pythoninthegrasses/mt/commit/b9b8647f9270b7a4d746c24cbe0e2381edc87ff2)) +* **tauri:** spawn sidecar after database init, not before ([73e0441](https://github.com/pythoninthegrasses/mt/commit/73e04410f3231d9547ffcc838a3d02d71daef6dc)) +* **ui:** compute context menu height dynamically to prevent bottom-clipping ([6114157](https://github.com/pythoninthegrasses/mt/commit/6114157373708b2d87a84c552d1320e74785232b)) +* **zig:** link libc on the sidecar executable module ([2961bea](https://github.com/pythoninthegrasses/mt/commit/2961bea53dfa5cf42c3ba3478ffd86d69195a2ec)) +* **zig:** migrate to zig 0.16.0 for macOS 26.5 SDK compatibility ([431df88](https://github.com/pythoninthegrasses/mt/commit/431df88d1d40d267cd1ed7c543d692f70c8cce36)) + + +### Performance Improvements + +* **frontend:** increase library page size from 500 to 1500 ([dcb4443](https://github.com/pythoninthegrasses/mt/commit/dcb4443a13f53a5771c3c95a2aa2407d805081e5)) +* **library:** stats-only IPC on page-cache hit avoids redundant 1500-track fetch ([c15d30f](https://github.com/pythoninthegrasses/mt/commit/c15d30f9514c270dc47c0bc29f0dcf51338a5942)) + ## [1.6.0](https://github.com/pythoninthegrasses/mt/compare/v1.5.1...v1.6.0) (2026-05-04) diff --git a/app/frontend/package.json b/app/frontend/package.json index a2ccba0b..3f3566a6 100644 --- a/app/frontend/package.json +++ b/app/frontend/package.json @@ -1,6 +1,6 @@ { "name": "mt-frontend", - "version": "1.6.0", + "version": "1.7.0", "private": true, "type": "module", "scripts": { diff --git a/crates/mt-tauri/Cargo.toml b/crates/mt-tauri/Cargo.toml index 846f1911..0d7f55ee 100644 --- a/crates/mt-tauri/Cargo.toml +++ b/crates/mt-tauri/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "mt-tauri" -version = "1.6.0" +version = "1.7.0" description = "Desktop music player for large collections" authors = ["pythoninthegrass"] edition = "2024" diff --git a/crates/mt-tauri/tauri.conf.json b/crates/mt-tauri/tauri.conf.json index 7ace1562..5cee4a7e 100644 --- a/crates/mt-tauri/tauri.conf.json +++ b/crates/mt-tauri/tauri.conf.json @@ -1,7 +1,7 @@ { "$schema": "https://schema.tauri.app/config/2", "productName": "mt", - "version": "1.6.0", + "version": "1.7.0", "identifier": "com.mt.desktop", "build": { "beforeDevCommand": "npm --prefix ../../app/frontend run dev",