After pushing the dev closure to Attic, write a small JSON manifest
(version + storePath) to the fileserver for kiosks to poll. storePath is
the readlink of the result-pkg out-link, so it matches exactly the
closure pushed to the dev Attic cache and can be fetched with
'nix copy --from' without building from source. Upload goes to
/mnt/infrastructure_data/files/radiantwave-dev/manifest.json via the
build-server's radiantwave-infra SSH alias.
recreateMixerOnDevice destroyed the active mixer before opening the
replacement. MIX_DestroyMixer quits SDL audio at refcount 0, tearing down
the device registry and renumbering device ids, so the cached id being
reopened went stale ('Invalid audio device instance ID') and the app went
permanently mute. Open the new mixer first while the old device is alive,
then tear the old one down; a failed switch now keeps the current output
playing instead of killing audio. Also log SDL_GetError() on open failure.
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
recreateMixerOnDevice destroyed the active mixer before opening the replacement. MIX_DestroyMixer quits SDL audio at refcount 0, tearing down the device registry and renumbering device ids, so the cached id being reopened went stale ('Invalid audio device instance ID') and the app went permanently mute. Open the new mixer first while the old device is alive, then tear the old one down; a failed switch now keeps the current output playing instead of killing audio. Also log SDL_GetError() on open failure.