# Changelog All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/). ## [Unreleased] ### Fixed - Device restore path passes invalid device name "system default" to SDL (should pass "" for default) - Active device highlight incorrect when using default device ### Changed (Major Refactors) - Mixer package: extract wpctl calls behind an interface ## [07112026-1710] ### Fixed - Play() deadlocks when called before device is open (recursive SwitchDevice -> Play) - Audio volume silently zeroed after switching output devices (Init used hardcoded 0.20; SwitchDevice did not restore saved volume) - SwitchDevice not persisted to database across restarts (caller now saves to AppConfig) - Stop() no-op when audio toggled off mid-playback (removed AudioEnabled guard from Stop) - App shows "READY" before audio files finish downloading (state machine now gates READY on download completion via DOWNLOADING_ASSETS state) - Download failure no longer silently allows READY (downloadFailed flag prevents premature READY) - App restarts repeatedly after downloads complete (checkState re-navigated to HOME, closing DownloadDone channel twice -> panic) - F2/F3 keybinds now work during DOWNLOADING_ASSETS (blocked only during early prerequisites: no wifi, no email, no license key) - Active device highlight incorrect when using default device (default device now maps to first SDL device) ### Known Issues ### Added - Human-readable audio device names (Built-in Speakers, HDMI/TV/Monitor) - Unit tests for mixer package (parseSinks, parseSinkLine, ConvertVolume) - Regression tests for state machine (download gating, failure handling, prerequisite priority, non-blocking channel read) - Regression tests for mixer (Stop with AudioEnabled=false, SwitchDevice edge cases) - Regression tests for Home page (double-close guard, download failure path) ### Changed (Major Refactors) - Mixer package: inject audio backend dependencies for testability - SwitchDevice now takes *db.AppConfig to access saved volume - Audio files moved from ~/.local/share/rhemawave/audio to ~/.radiantwave/audio - State machine uses DOWNLOADING_ASSETS state before READY - checkState() skips re-navigation when transitioning between HOME-mapped states - network.init() logs warning instead of crashing when D-Bus is unavailable - CI now runs go test before nix build