Block a user
IR load with invalid path returns 500 instead of 422
State change (block toggle, bypass) not reflected by GET /api/state until debounced disk write completes
Block IDs regenerated on every preset load — toggle fails with Block not found
Block IDs regenerated on every preset load — toggle fails with Block not found
Clean up IR file naming and display names
Fixed in commit 47bb535. Added display_name property to IRFile dataclass in src/dsp/ir_loader.py. Strips common IR prefixes (IR_, cab_, impulse_response_) and suffixes (_IR, _48k, _Stereo) from…
Block bypass/toggle not synced via WebSocket to SPA
Fixed in commit 47bb535. Added WebSocket connection in the SPA with a handler for block_toggled messages that calls loadState() to refresh the block display immediately.
Preset state lost on service restart
Fixed in commit 47bb535. Added self.restore_state() call at the end of PresetManager.init() so last active preset is tracked after boot.
Clean up IR file naming and display names
Block bypass/toggle not synced via WebSocket to SPA
Preset state lost on service restart
Deprecate legacy HTML dashboard in favor of single SPA