* chore(eslint): add eslint toolchain and configs
* fix(eslint): resolve gradual-config errors (rules-of-hooks, no-empty, prefer-const, …)
* chore(eslint): clear unused vars in config, contexts, app and test
* chore(eslint): clear unused vars in api and music-network
* chore(eslint): clear unused vars in utils
* chore(eslint): clear unused vars in store
* chore(eslint): clear unused vars in cover and hooks
* chore(eslint): clear unused vars in components
* chore(eslint): clear unused vars in pages
* chore(eslint): remove explicit any in src
* chore(eslint): align react-hooks exhaustive-deps
* chore(eslint): zero gradual config on src
* chore(eslint): strict hook rules in store and utils
* chore(eslint): strict hook rules in hooks and cover
* chore(eslint): strict hook rules in components
* chore(eslint): strict hook rules in pages and contexts
* chore(eslint): document scripts ignore in eslint config
* chore(eslint): add lint script and zero strict findings
* chore(eslint): address review round 1 (gradual 0/0, per-site disable reasons)
* chore(eslint): tighten two set-state disable comments (review round 2 LOW)
* chore(nix): sync npmDepsHash with package-lock.json
* docs(changelog): add Under the Hood entry for ESLint setup (PR #1165)
---------
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
* fix(mix): apply rating filter across mixes and fix Lucky Mix queue fill
Invalidate entity rating cache on setRating and stop negative-caching
unrated artists/albums so filters see fresh stars. Honor UI rating
overrides, wire Instant Mix and CLI paths, fix Random Mix filter order,
and align Lucky Mix progress with the real player queue length.
* docs(changelog): document mix rating filter and Lucky Mix queue fix
111 of 122 top-level src/utils/ files move into 16 topic folders (audio,
cache, cover, share, server, playback, playlist, deviceSync, waveform,
mix, format, export, changelog, ui, perf, componentHelpers). True
singletons with no cluster stay at the utils/ root.
Pure file-move: a path-aware codemod rewrote 539 relative-import
specifiers across 275 files; no logic touched. The hot-path coverage
gate list (.github/frontend-hot-path-files.txt) is updated to the new
paths for the 11 gated utils files — a mechanical consequence of the
move, not a CI change. tsc is green.