Changes since last dev build
- feat(coordinator): add TransportState and FailureReason types (b02cd5f)
- feat(coordinator): add SessionState data class (f2dfd94)
- feat(coordinator): add ConnectionCoordinator skeleton with sessionState combine (ddb8309)
- feat(playback): add coordinator-shaped input flows to PlaybackService (d1f8c83)
- feat(playback): construct ConnectionCoordinator in PlaybackService onCreate (2a59e09)
- feat(playback): route COMMAND_DISCONNECT through ConnectionCoordinator (5ff994e)
- fix(coordinator): null-safe sendSpin flow and clean up stale comment (50dbded)
- feat(coordinator): add ReconnectStatus sealed class (9a4ba38)
- feat(coordinator): expose reconnect surface (status flow + 3 forwards) (8bb3499)
- feat(playback): construct AutoReconnectManager in service scope (171c4c4)
- fix(playback): cancel half-open transport on connect timeout (684dcad)
- feat(playback): add CONNECT_AUTO/CANCEL_RECONNECT/NETWORK_AVAILABLE commands (df182c8)
- feat(playback): broadcast ReconnectStatus via session extras (62fb847)
- feat(activity): route reconnect entry points through Coordinator (9093699)
- fix(activity): wrap networkCallback.onAvailable body in runOnUiThread (297a0a6)
- feat(coordinator): absorb retry loop, drop AutoReconnectManager delegation (6e85676)
- feat(sendspin): add selfReconnectEnabled flag to gate internal retry (3ed0035)
- feat(playback): delete AutoReconnectManager, Coordinator owns retry (aaf15c5)
- feat(coordinator): add Context param + networkState flow scaffolding (497af5a)
- feat(coordinator): own the NetworkCallback, PlaybackService becomes observer (229ddd6)
- feat(activity): delete networkCallback, observe coordinator.networkState (d326855)
- fix(coordinator): delete orphaned onNetworkAvailable public method (35d1237)
- feat(sendspin): add SendSpinEndpoint sealed class (302910d)
- feat(sendspin): add connect(endpoint) facade dispatching to existing methods (5ad24e8)
- refactor(playback): use SendSpinEndpoint via connect(endpoint) (a6cae47)
- refactor(sendspin): expose StateFlow; add FailureReason (c9936c7)
- refactor(sendspin): remove state callbacks; PlaybackService observes flow (474d294)
- refactor(sendspin): rename SendSpinClient to SendSpin (5fcc7df)
- fix(musicassistant): only clear MA token on confirmed auth rejection (38df032)
- feat(musicassistant): add MaEndpoint sealed class (b988875)
- refactor(musicassistant): expose StateFlow; hoist token clear (1b73fca)
- feat(musicassistant): add connect(endpoint, token) facade (d655187)
- refactor(musicassistant): rename MusicAssistantManager to MusicAssistant (02bd759)
- refactor(wizard): use transient SendSpin for connection tests (6c4d248)
- refactor(wizard): use testMaAuth helper for MA connection tests (38af031)
- refactor(playback): delete _connectionState mirror (5587e48)
- refactor(activity): drop lastReconnectStatus mirror; use service relay (5a0089c)
Commit: 3aaf412