- 🐞 fix: retry dropped connect-state pushes 14d5a0a @devgianlu
- 🐞 fix: do not let a slow consumer stall the accesspoint receive loop a22a696 @devgianlu
- 🐞 fix: do not block the player loop handing a session back for logout 8b612e3 @devgianlu
- 🐞 fix: do not block the player loop writing to websocket clients 6c0281e @devgianlu
- 🐞 fix: do not block or panic emitting mpris updates 4a625c5 @devgianlu
- 🐞 fix: do not block the player loop on the volume path 8a49b0c @devgianlu
- 🌟 feat: push connect state on a dedicated lane abed584 @devgianlu
- 🐞 fix: clear the surrounding tracks when a transfer changes context a4fbbb6 @devgianlu
- 🌟 feat: describe the track list with a snapshot 9274821 @devgianlu
- 🌟 feat: prefetch the next track off the player loop 1992a6e @devgianlu
- 🌟 feat: load tracks off the player loop 2e80352 @devgianlu
- 🌟 feat: resolve contexts off the player loop 504ae1c @devgianlu
- 🌟 feat: resolve contexts for the API and autoplay off the player loop f68ac15 @devgianlu
- 🌟 feat: walk the track list off the player loop e9dd32b @devgianlu
- 🐝 refactor: drop the handler timeouts from the player loop f4ac933 @devgianlu
- 🐞 fix: keep queue edits from discarding the load in flight 201ff43 @devgianlu
- 🐞 fix: tolerate a nil track while a context resolves 20315b5 @devgianlu
- 🐞 fix: abandon the load in flight when playback stops c238500 @devgianlu
- 🐞 fix: guard the credential writes with the state mutex 9ab46c7 @devgianlu
- 🐞 fix: do not supersede a load when skipping to a track without a context 85c8ec4 @devgianlu
- 🐞 fix: let a remote logout stop the daemon without zeroconf 931ec0f @devgianlu
- 🌟 feat: add context info in
/statusAPI 9574854 @devgianlu - 🐞 fix(audio-toolbox): initialize and dispose native output safely c108898 @saito828koki
- 🐞 fix: select AudioToolbox by default on macOS 1f39569 @saito828koki
- ⛑ test: expand macOS audio output regression coverage 940ba49 @saito828koki
- 🌟 feat: opt-in track metadata cache, next_track and a context track listing bf208de @palchrb
- 🌟 feat: tolerate single tracks transfer without a context 63f9fda @devgianlu
- 🌟 feat: debounce rapid next/prev into a single deferred track load 3ac068b @palchrb
- 🐞 fix: do not forget the incoming stream's end when a load lands 3a3181a @devgianlu
- 🐞 fix: do not make a queue edit wait out a skip debounce c53768e @devgianlu
- 📈 perf: reuse the loader's hold timer 57d7278 @devgianlu