Skip to content
- decode current and legacy Spotify playlist fields together (83cb0a2)
- close playback status recovery after installed verification (f039672)
- reconcile playback knowledge and operational guides (70357e1)
- verify macOS app assets before downloading (c4999e9)
- Playback status now keeps the latest song when a delayed Spotify refresh finishes after a playlist transition. The playback cache also selects the newest snapshot when updates share a timestamp.
- Queued playlists continue past the first song after a player reconnect or a change of local audio output.
- Starting a playlist from idle loads the complete track list and shows the remaining songs in the queue.
- Search results use a full-width list for the selected category. Sorting, filtering and moving the selection act on the rows you can see.
- Enter on a playlist track starts that track and continues in the playlist. CLI and MCP clients can pass the same playback context.
- Playlist URIs and Spotify share links work without saving the playlist first. CLI queue commands accept readable playlists and albums.
- Automatic recovery respects Spotify Connect handoff instead of taking playback back from another device.
- Device-switch errors name the chosen target, and playlist permission errors preserve Spotify’s cause. Doctor reports provider checks from the running daemon.
- Reading recent logs uses bounded memory even when the log file is large. Networking, search and documentation-site dependencies include security fixes.
- Building from source requires Rust 1.90, matching the existing image-codec dependencies. CI checks that minimum when dependencies change.
- an artist’s Popular list now says how it’s ranked: Spotify’s own order, from all-time streams in your country, weighted toward recent listening and updated daily. The macOS artist page shows this under the heading, and the TUI pane,
spotuify artist top-tracks --help and the MCP tool say the same
- artist pages open with the artist’s ten most popular tracks in your market, above their albums, like Spotify’s artist page. On macOS the Popular list shows five tracks, then “Show more”; the TUI artist view has a Popular pane; and
spotuify artist top-tracks <artist> prints the same list. The Web API dropped this for developer apps in February 2026, so spotuify reads it through its own Spotify connection
- album, artist, show and listening-session pages on macOS show one back button instead of two
- sped-up podcasts sound like a person talking faster instead of an echoey, robotic voice. Playback speed now uses Sonic, a speed-up built for speech, in place of a music-oriented time stretch. The speed options and the
spotuify speed command are unchanged
- switching a podcast back to normal speed no longer drops a moment of audio
- the macOS app shows a podcast speed button whenever an episode is playing, both in the player bar and on Now Playing. It shows the current rate and opens the 0.5x to 3.5x choices. 0.1.104 had moved speed into the player bar’s “⋯” menu and left Now Playing without it
- the macOS app keeps its close, minimise and full-screen buttons when it opens on Now Playing
- clicking a page in the sidebar works while Now Playing is open. The blurred cover behind the player was catching those clicks
- the macOS app has a new look. The window takes its colour from the record that’s playing, titles are set in a serif, and times and counts use a monospaced type. It no longer uses the stock macOS sidebar, pickers and glass bar
- Now Playing shows the whole cover instead of a cropped one. Beside it sit the track details, or the lyrics, up-next queue or visualizer if you pick one of those tabs. The expand button in the top corner hides everything but the artwork, and the cover shrinks back slightly while paused
- the player bar along the bottom holds play, skip, the seek bar, lyrics, queue, device and volume. The equalizer, podcast speed, bookmarks and the mini player are in its “⋯” menu
- track lists are numbered, and the song that’s playing shows a moving level meter in place of its number. Album, artist, playlist and podcast pages open with a large header and one play button
- after you click in the sidebar, ↑ and ↓ move through its pages. ⌃⌘S hides it
- update notices sit at the bottom of the sidebar, so they no longer cover the top of the window
- the app only offers an update once that release’s Mac download exists. 0.1.103 first went out without one, so “Update Now” failed with a download error
- artwork that isn’t square no longer pushes album and artist captions out of line
- Liked Songs shows how many songs have loaded so far (“50 of 693 loaded”) instead of a count that disagreed with the header
- VoiceOver reads the menu bar icon as “Spotuify” instead of “Song”
- deps: patch rustls and site advisories (bff0972)
- make AGENTS.md the single agent instruction file (4359f6d)
- sync counts, auth override and audio teardown notes (d807e5e)
- stop reconnect recovery from creating another audio sink when the previous native sink is still shutting down
- stop a stuck CoreAudio teardown from accumulating replacement sinks and cleanup threads
- retry another Spotify CDN when the first response is not playable audio
- resume the interrupted track after the audio watchdog reconnects the embedded player
- wait for the old daemon process to exit during stop and restart, then terminate that exact PID if its audio cleanup hangs
- keep player cleanup off the async runtime so a stuck audio driver cannot freeze daemon shutdown
- make the live playback release check wait for restart recovery and verify audio after the watchdog window
- resume the current track after a daemon restart instead of restoring a silent playing state
- start playback once after an audio-output change and report any resume failure to the caller
- make the opt-in live playback check restart the daemon and confirm that audio still advances
- recover playback automatically when Spotify rejects cached device credentials
- keep the current track playing when the macOS audio output changes
- wait for Spotify’s final playback result before CLI commands report success
- stop unchanged playlist refreshes from repeatedly consuming Spotify API quota
- EQ peak limiter replaces static headroom (#102) (e29fbba)
- spotuify events + unknown-event tolerance + event-kind parity (#103) (e35aca3)
- document how the spotuify agent skill configures and tests Last.fm or ListenBrainz hooks (cd47a5b)
- build the downloadable skill reproducibly and add an optional local-sync command (cd47a5b)
- stop tag releases when their changelog entry is missing or the downloadable skill is stale (0a6b55d)
- visualizer motion parity with cliamp + sign-off gallery script (#104) (8059737)
- keep artist follow state unchanged until the daemon confirms the request, and show failures in the TUI (53bafe0)
- pass cached track, artist, album, audible time, and playback start time to qualified-listen hooks (53bafe0)
- replace the Last.fm and ListenBrainz placeholders with working scrobble recipes that check API responses (53bafe0)
- visualizer styles batch 2 (waveform + particle styles) (#98) (bdefb70)
- visualizer styles (cliamp port, batch 1) (#95) (185497a)
- 10-band equalizer across all clients (#94) (494adfb)
- rate-limit cooldowns gate only their own sync domain (3240830)
- podcast playback speed and bookmarks across all clients (819fe3c)
- build the time-stretch shim with cc so Windows compiles (598b09a)
- satisfy Rust 1.98 unused-import lint and allowlist the clock parser (0a9046f)
- trim README and refresh guides, research, and demo asset (7dd3418)
- site: update vulnerable build dependencies (fa77138)
- stop the Mac reclaiming playback from the car on session reconnect (b7e2399)
- cli,spotify: repair artist likes, show playback, and legacy share-link resolution (702ae8c)
- cli: repair provider-abstraction CLI regressions (235b98a)
- cli: validate queue/playlist target selection before daemon contact (261b787)
- core,daemon: drop remaining u128 from search analytics payload (1be6ea1)
- harden config load and sync/auth after provider abstraction (4a66651)
- harden core/protocol wire compatibility (d99d019)
- macos: harden search, mutation retry, IPC decode, and reseed (02deca8)
- mcp,tui: repair provider-abstraction client regressions (2f5db58)
- mcp: only promise safe mutation replay when the daemon dedupes (441b1a8)
- spotify,provider-fake: close provider adapter defects from d52aa98 review (7d65ad7)
- spotify: close the lock-free credential-migration race and temp-path collision (a130475)
- store,search: harden provider-abstraction migrations and derived-data paths (320f5a8)
- system: include provider in feature-gated auth-error notification match (b58e388)
- record Apple Music feasibility findings and settle as D026 (b99b751)
- spotify,daemon: stop burning the first-party rate budget on doctor + isolate cooldowns by bearer (#74) (bd323b2)
- tui: reorganize navigation into 7 focused tabs and from-anywhere surfaces (#73) (b6e90ea)
- daemon,tui: stop the queue flashing empty on next, and fix failed-toast styling (#71) (7e52eae)
- cli: TTY-aware styled human output with aligned columns (#68) (f6edfbe)
- macos: design tokens, shared load/error states, accessibility polish (#66) (b8e53b3)
- player: fall back to system default when the configured audio output is gone (#70) (371095e)
- tui: dedup spinner/volume helpers and harden glyph widths (#69) (922f748)
- tui: unify color constants into one semantic token system (#65) (0c6a94a)
- sync Cargo.lock workspace versions so
--locked release builds pass (#61) (9c0a055)
- prompt first-party-only users to migrate to dev-app auth (#59) (38dcfc9)
- hybrid Spotify auth with dev-app reads and first-party playlist/library writes (#57) (bee8fcb)
- add desktop theme setting (system/light/dark/adaptive) (#51) (94b7706)
- lazy-load liked songs with scroll pagination (#52) (c395943)
- play liked songs track within full collection context (#55) (be5b50d)
- keep the embedded device listed while its player is idle (29f9771)
- derive auth mode from stored credentials when env unset (c67b047)
- derive tui palette from cover art (8a82068)
- import lastfm listening history (04cc39c)
- keep followed playlists usable (f59dd55)
- point llms-full.txt page urls at spotuify.app (96c82eb)
- prevent mobile horizontal overflow on landing page (bf6c30c)
- stop audio-flow watchdog stealing playback from id-less devices (c32d9a6)
- auto-resolve latest release in windows install snippet (a1b2473)
- correct stale command and mcp tool counts (58, 41) (c84e14f)
- drop vanity stats strip from landing page (8ba3a1e)
- lead landing page with value prop and runnable examples (93905cc)
- lead landing with command-line framing, trim install block (eee9243)
- record album reactive tui workstream (389b94e)
- regenerate cli reference from current command snapshot (787553f)
- macos: add album save/unsave button to detail view with track art fallback (97a5a29)
- library: update in-file test and url-encode ids in endpoint paths (4a09dd7)
- library: use type-specific Spotify endpoints for library saves (a4a8021)
- macos: album save button rolls back on failure and grid uses fallback art (bc8c9d4)
- add bugs and security audit report (f4e3824)
- add half-finished features audit report (7b1927d)
- add outstanding work audit report (0c8c6e4)
- add quality architecture audit report (eb7eda5)
- add races and concurrency audit report (b369e72)
- consolidate audit backlog (8a2eea2)
- daemon,macos: stop relaunching the daemon after an intentional stop (4597f9a)
- daemon: stop permanently latching the player reconnect give-up (0d79f87)
- ipc: make GetDoctorReport serializable and stop silent connection drops (d92bfef)
- player: pin forked librespot with session-recovery backport (PR #1692) (1ff33e9)
- add lyrics follow (b6a7759)
- add macos client (98b7d18)
- add media browse commands (b40b543)
- analytics: playlist-level top-k (0cf1248)
- analytics: sink-accurate audible time from the embedded counter (aa87ac6)
- artist discography browser, listening reminders, and macOS client (f7374a0)
- cli: add unlike (library unsave) to close a CLI parity gap (12c2fb6)
- cli: config show –format json (full config dump) (2afe3d8)
- cli: play Spotify URIs and share links directly (99ae7d2)
- daemon: bound every IPC request with a category-aware timeout (bc62cbe)
- daemon: cut Spotify API volume ~90%, surface rate limits + loading states (cd5f9c9)
- daemon: follow the system default audio output (macOS) (0fb2bef)
- daemon: self-heal zombie player sessions (bd903de)
- discord: real Rich Presence from playback events (a63b973)
- doctor: report terminal + cover-art protocol (client-side) (491b238)
- instant queue sync on next and full context queue retention (5583dc5)
- ipc: atomic daemon startup lock + peer-credential check (a888a8f)
- macos: add album label and seek bar to menu bar popover header (20f60ec)
- macos: add column headers to track list table (4ac2324)
- macos: bundle daemon+CLI in app for self-contained install (2b33137)
- macos: full DaemonRequest protocol parity + enforcement test (c12a996)
- macos: full Settings window (visual config editor) + Check for Updates (dcbe79e)
- macos: global keyboard control (transport + view navigation) (c5ee6ea)
- macos: new app icon (glowing equalizer, gradient squircle) (5da8bf8)
- macos: pointing hand cursor on nav link hover (973b102)
- macos: skeleton placeholders for first-load surfaces (73ad16c)
- macos: update banner + Settings toggle + podcast overhaul (9d169cb)
- mcp: live resource push over stdio (87ed5db)
- Mercury-backed related artists + radio stations (67d2780)
- per-client viz focus voting and one-click macOS app updates (4146a08)
- protocol v5, TUI parity, and macOS Apple-Music client (0ef3c09)
- refresh macOS client (9c25f93)
- release album-reactive tui fixes (9f55cf7)
- switch audio output live without a daemon restart (8cdfc86)
- system: enrich notifications, media controls, and hooks from playback (1a224ee)
- system: Windows SMTC via a hidden-window driver (0d24850)
- tui: delete-playlist + bulk-unsave behind a confirm modal (1f48213)
- tui: responsive narrow-width layout and album-adaptive accents everywhere (6c7b1b0)
- tui: width-filling contextual hints; surface queue-whole-playlist (f3fd135)
- update-awareness + cross-show episode feed (protocol 6) (3373e32)
- add player bar device switcher (331e821)
- audit waves 0-1 for cleanup and P1 correctness (1c304c3)
- avoid windows cli stack overflow (df71b03)
- bound windows smoke build time (5bc1f91)
- clean up fake daemon on windows (ea9dfaa)
- cli: selection misses exit 2, not whatever the query text matches (0f82b94)
- cli: structured exit codes, JSON contract, IPC robustness, link parity, –wait (b1fcdd8)
- daemon: actually enable media controls + wire the opt-out (307b850)
- daemon: queue integrity + optimistic reconciliation holes (35fe7c7)
- daemon: satisfy clippy (sort_by_key + episode-feed type alias) (76aaa93)
- daemon: start on Windows by keeping the named pipe off the filesystem (8c5793b)
- extend daemon startup wait (f28ffee)
- extend the side rail behind the titlebar (c7034a0)
- honest queue-add reversibility, queue dedup, and undo dry-run preview (dc58c9d)
- keep optimistic queue appends visible (ad1f1df)
- keep playback live through empty Spotify Web API polls (ddac640)
- keep test daemon watchdog cross-platform (5347d8e)
- keep windows entrypoint safe (5e4c57c)
- keep windows named pipe listener ready (09784ce)
- launcher: don’t restart a newer daemon (post-upgrade livelock) (50b06b4)
- library: paginate liked songs past Spotify’s 50-per-page cap (c3517b2)
- macos: address PR review comments (df6a565)
- macos: align track table column headers with row values (381150f)
- macos: align track table header columns with rows (1e66e51)
- macos: use consistent column slots so every track row has the same structure (43e367d)
- macos: don’t shadow a system spotuify with the bundled CLI (02d521a)
- macos: flexible album column width, title fills remaining space (9eb990f)
- macos: group action buttons into fixed-width container, align header placeholder (8c693d3)
- macos: headphone/media-key play-pause routing (250d017)
- macos: move table header outside scroll view, match padding to rows (7866505)
- macos: now-playing layout, mode-pill hit target, heart feedback (c221ece)
- macos: player bar fits any width + confirmation toasts for actions (d320770)
- macos: remove top padding gap between table header and first row (e49b474)
- macos: right-align collection row meta into a fixed column (6cbe64b)
- macos: stop Liked Songs header breaking at narrow widths (2ac69f6)
- macos: update banner false positive + apply audio-output changes (4c9f893)
- macos: updater off the main actor, pipe drains, connection races, vote hygiene (8773afa)
- macos: use .pointerStyle(.link) instead of NSCursor push/pop for hover cursors (4ad94f4)
- macos: wrap table header divider inside VStack to align with rows (3bd76b5)
- normalize windows cli help snapshots (550a681)
- player: heal silent device transfers for contextless playback (ed1dd73)
- preserve Spotify queue entries (c805a2b)
- reject blank client id (374b9eb)
- repair v1 hardening ci fallout (533332c)
- repair windows fingerprint state (f856ae3)
- seed fake smoke config (a1f04b2)
- site: force esbuild 0.28.1 to clear the npm audit gate (bad2555)
- stabilize fake daemon ci tests (f0de625)
- sync: probe /me/player at idle cadence when nothing is playing (cfad16f)
- tui: keep the last-played track on screen when idle (6679290)
- use windows pipe paths in cli tests (c629f56)
- viz vote expiry, loopback off-runtime init, shared chrome geometry (f12d0be)
- wire macOS playback controls (6988110)
- daemon: split the dispatch god-function into handler modules (78b20dd)
- extract spotuify-launcher crate, decouple CLI from daemon (226655a)
- macos: rename ArtistLinkLabel to NavLinkLabel for reuse (0d6a38b)
- remove analytics export/import scrobble stubs (7deb48b)
- add hero video shooting script (ce511ce)
- add windows install instructions (0c84ccb)
- align README with daemon-first positioning and add daemon proof video (d6cfeab)
- close the audit with roadmap, current-state, discovery guide, and em-dash fixes (483a12f)
- cli: generate reference pages for radio + artist related (be45aff)
- dedupe installs to Homebrew-only in the ship-it flow (9383d1e)
- macOS app is self-contained (bundles daemon + CLI) (26ef10b)
- macOS DMG is now signed + notarized (drop the right-click caveat) (567eb99)
- macos: add doc comments to detail views and shared types (cb1db73)
- notification template tokens + the hook positional-arg contract. (1a224ee)
- prominent Download for macOS button + stable DMG link; refresh CLI reference (4768bf5)
- record launcher-crate extraction deferral (D021) (101cb52)
- replace em dash in config media-controls note (site validate gate) (c1980cb)
- reposition the landing page around the daemon and its four clients (6d733de)
- skill: correct queue semantics, add discovery + live audio, refresh MCP tool list (e26b048)
- update-awareness + episode feed (staying up to date, D018) (32e5cba)
- sharpen homepage positioning (948a205)
- keep lyrics and cover art synced (c3ec454)
- update homepage hero video (06f6231)
- replace keychain auth with file store (5447301)
- keep playlist context queue visible (012c195)
- [] add analytics + ops CLI subcommands (6757bef)
- [] add core types for Phase 10 analytics (1bec408)
- [] add cross-platform CI + release matrix (3b86633)
- [] add cross-platform paths + IpcStream module (498670f)
- [] add flake.nix + cargo-deb + Windows console FFI dep (40fae87)
- [] add HealthClass::Unhealthy + error-based doctor election (cc5ceef)
- [] add hook_executor + listen-qualified recipes (b39dd6e)
- [] add operations CRUD + listen_facts queries (6519f23)
- [] add Phase 13 CLI surface (panic hook, log-format, globals, bug-report, generate) (1c011ef)
- [] add Phase 9 player backends + AudioCounterTap (2dd45ab)
- [] add platform service installers (887a4fe)
- [] add PrivacyGate to spotuify-sync (37138d7)
- [] add reload/reconnect/search-prune daemon requests (1a556e3)
- [] add souvlaki media-controls + notify-rust + Discord RPC modules (65870b7)
- [] add Spotify inverse mutators + enriched User-Agent (80d5699)
- [] add spotuify-keychain crate (8ee01d4)
- [] add TUI ops panel + u-key undo + confirm-modal scaffold (be40fe0)
- [] add TUI ops panel under Diagnostics (61c555c)
- [] add undo module + ops + analytics handlers (9c5365e)
- [] add v4+v5 SQLite migrations (08e5c57)
- [] capture pre-state + implement undo/redo for Phase 12 (9856a52)
- [] extend Config with PlayerConfig + AnalyticsConfig (d000135)
- [] extend protocol with analytics + operations surface (0a7ee0d)
- [] render full op detail + plan/pre_state in ops show –diff (3829b5a)
- [] scaffold spotuify-system crate with cover cache + shell hooks (7d8cc82)
- [] wire analytics + ops MCP tools (9291208)
- [] wire player factory + SessionTracker into daemon state (0dae611)
- [] wire SystemIntegration actor into daemon event fan-out (1fb221f)
- activate-first guard for embedded queue mutations (88a1811)
- add agent playlist workflow (3b2dc21)
- add batch URI mutations (a353750)
- add daemon event refreshes (552b8f3)
- add local cache search and sync (b9306bd)
- add player-first TUI redesign (50ff672)
- audio crate analyzer + cpal/pipewire loopback capture (76c36dc)
- auth: silent OAuth + typed AuthRevoked + diagnostic logging (e083fd5)
- choose the embedded player’s local audio output device (c208642)
- clearer error when transferring to an Alexa/Echo device (1236002)
- cli crate command surface (cache + hooks + mcp + mpris + viz) (e195c3c)
- cli: streaming search, search-page, –pages, auth-revoked retry, daemon login nudge (052d65c)
- daemon crate clock + queue_warm + retention + viz coordinator + session tracker (97276f1)
- daemon: push-state architecture for playback/queue/devices (cfa2582)
- daemon: wire request handlers for push-state + auth-revoked + optimistic transport (15351a8)
- device: stable SHA-1 device_id + replace-on-refresh device cache (d8faf3a)
- don’t auto-restart a stale daemon mid-playback (1cc4595)
- first-party Spotify login (keymaster + login5) (dd86966)
- initialize spotuify (293c1d4)
- keychain crate cross-platform credential storage (b99370e)
- lyrics crate with mercury + lrclib providers + alignment + parser (1c22434)
- make TUI home actionable (1f793c5)
- mcp crate http + stdio + server transports + bridge expansion (4f8fcb0)
- phase-6.1: typed SpotifyError + classifier with adversarial tests (ad1f7cb)
- phase-6.2: Spotify payload compat normalizer (852d4e7)
- phase-6.3: rate-limit middleware (retry decisions, backoff, budget) (304a0e6)
- phase-6.4: schema v2 (snapshot_id, freshness, sync_generation) (ef2fb3f)
- phase-6.5/6.6/6.8/6.9: wire typed cores into the binary (9c5a432)
- phase-6.5: snapshot_id field + sync refetch gate helpers (a3e07cb)
- phase-6.6/6.7: two-stage receipts + new typed daemon events (1afa564)
- phase-6.6: receipts table + lifecycle in spotuify-store (e7c57b4)
- phase-6.8/6.9: refresh planner + recent-event log + doctor findings (9799eb2)
- phase-8.1-8.3: MCP server core (catalogue + confirm + bridge) (0631e81)
- phase-8.4-8.8: MCP resources catalogue + README + decision log (8ccc732)
- phase-8.6/8.7: JSON-RPC 2.0 dispatch + spotuify-mcp stdio binary (b238a28)
- phase-8: spotuify-mcp dispatches executable Requests to the daemon (4bfd9e1)
- player crate librespot sink chain + viz tap + premium gate + token bridge + recovering sink (929c9ad)
- pre-existing core/daemon/tui/player work + queue dedup + librespot queue_add (eedcc38)
- preserve queue across sessions when Spotify drops the device (3730a2b)
- protocol crate event log + receipts + agent playlists request types (fe01959)
- reroute 8 playback controls through embedded librespot Spirc (ea6207f)
- route music controls through daemon IPC (6e629c9)
- search/sync/store crate updates for analytics + listen facts (cc525a7)
- search: concurrent per-type Spotify fanout (2d2708a)
- show playlist and album artwork in tui (10ff578)
- spotify crate auth scopes + rate limit + selection + compat + spotifyd helpers (c9657ac)
- spotuify playlist set-image (custom cover art) (1c50241)
- system crate cover cache + media controls + discord rpc + hooks (51b5064)
- teleprompter lyrics + softer queue selection highlight (07389ca)
- TUI banner to restart the daemon after an in-place upgrade (09b349d)
- tui crate widgets (album art + spectrum + style) + now playing module (143874a)
- TUI picker for the local audio output device (19fcb46)
- tui: deterministic streaming-search pane focus and order (d29c49f)
- tui: push-state client, streaming search panes, snappy transport, auth modal (1b6560a)
- activate embedded device so volume and transport work (2a6dd17)
- auth: cache Spotify token to disk so daemon doesn’t re-prompt keychain (1282b76)
- auto-play first selection when queueing with no active device (e22fa2f)
- avoid playback rate-limit preflights (da05376)
- bound provider rate-limit waits (8c6f6f7)
- call POST /me/playlists instead of POST /users/{user_id}/playlists (3587625)
- consolidate Spotify endpoints; route playlist writes to /items (f79917f)
- daemon: log rotation + tantivy noise filter + zombie preflight (c47d14b)
- daemon: make
cargo build produce a working daemon by default (9c95453)
- declare Homebrew portaudio dependency (404343e)
- escalating global backoff so the daemon self-heals from throttling (b6d93a8)
- harden first-party auth (review findings) (0d6fc7a)
- harden public release security (f2058e5)
- harden Spotify runtime reliability (8c62d80)
- isolate dev and prod runtime state (7ebeb28)
- isolate target builds from prod daemon (6bf348a)
- load docs fonts without blocking render (e8a87a9)
- poll devices and queue on slower lanes than playback (10f4c84)
- preserve playback context and audio defaults (98f25bd)
- record operations log + add playlist unfollow + auth bearer (21c8635)
- recover onboarding from blank config (d45cb56)
- reduce keychain prompt fanout (e404766)
- reduce startup Spotify polling (3e2c9f7)
- revert Spirc::add_to_queue + PlayerEvent::SetQueue (not in librespot 0.8.0) (2f97351)
- search: clamp Spotify /v1/search limit to 10 (empirical cap) (c99e576)
- search: CLI –source default flip + bump default limit to 50 (a1b9fc0)
- search: dedup merged per-type results + raise TUI timeout to 30s (49779a5)
- search: default discovery surfaces to Spotify (was Hybrid) (bc8392b)
- search: drop multi-type limit to 20 (Spotify rejects 50 here) (6dadc84)
- search: fan multi-type queries into sequential per-type requests (acb268f)
- search: make Tantivy QueryParser AND-by-default (d87cdfd)
- search: raise Spotify /v1/search limit cap from 10 to 50 (f6854fb)
- search: reject queries >144 chars with a clear error (1515a89)
- search: render artist + album subtitle under each search result (892ab11)
- search: stop polluting library Tantivy index with catalog hits (ad0acc0)
- silence linux log path warning (f6b2b14)
- SPOTUIFY_FAKE_SPOTIFY routes to MockPlayerBackend, expose mock unconditionally (fc09101)
- stop auth prompt storms (478f634)
- stop chronic Web API rate-limiting under first-party auth (a34aa06)
- stop startup cache-warm bursts that re-feed the rate limit (25988bd)
- tui: keep library cursor inside its visible panel (eab4999)
- unstick lyrics “Fetching” on track-change race (67026cc)
- AnalyticsSink trait + analytics types into spotuify-core (ad558ea)
- drop dead spotifyd_* fields from Config + DoctorReport (7348bc2)
- extract spotuify-core and spotuify-protocol crates (28aa30f)
- extract spotuify-store and spotuify-search crates (6acb26e)
- phase 0 drops Spotifyd and ConnectOnly backends in favour of embedded playback (808fe3f)
- phase-7: break the cli↔daemon cycle; move OutputFormat to protocol (d2a21e1)
- phase-7: extract config/auth/spotifyd/agent_playlists/selection (43f65c9)
- phase-7: extract output, actions, commands, ipc_client, analytics types (3ad4291)
- phase-7: move daemon + TUI + analytics + diagnostics into crates (675350d)
- phase-7: move src/spotify.rs and src/sync.rs into their crates (6ce96de)
- simplify workspace and harden daemon accept loop (4119e70)
- SpotifyClient holds Arc<dyn AnalyticsSink> – cycle broken (9ccbbf4)
- SyncContext trait – the sync↔daemon::state seam (e1f19bd)
- [] add D013 HealthClass + D014 competitor study + Phase 5 note (5cca1db)
- [] rewrite README for cross-platform install + repo move (da07e7b)
- add demo media and agent skill with mcp integration (3c6e22b)
- add idiomatic-rust rubric and backlog (11593b2)
- add phase 6-17 implementation plans and competitor research (b9f8f7d)
- add player screenshot asset (7b00876)
- add security audit v2 (a3ad5f0)
- add spotuify docs site (fb92141)
- add visual revamp research + 23 TUI snapshot baselines (81b795d)
- agents: adopt mxr’s CLI-first operating rules (5e5ecc8)
- agents: daemon-owns-state doctrine + symlink CLAUDE.md → AGENTS.md (f2ba31a)
- correct remaining dev-app onboarding references (e0294b4)
- document audio-output, audio-outputs, and search-page commands (f8eb793)
- document shell workflow shortcuts (a57b1d3)
- first-party login onboarding (bd6a919)
- fix Homebrew install commands (70b8ed4)
- lead README with plain positioning and honest install matrix (c7783bd)
- refresh guides + reference for recent shipped changes (a525922)
- refresh root readme + contributing guide (ef9f271)
- rewrite README + ARCHITECTURE + AGENTS narrative for librespot-only (ea55edc)
- serve demo gif from site/public for a stable URL (af7cc32)
- sharpen landing positioning (name prior art, lead pipeable CLI) (17f2a08)
- update astro docs site content + add new CLI references (ea8c797)
- update implementation phase notes + add observability plan (91103e7)
- widen landing demo (a252a0f)