26.05.0-beta.5
LuminalShine 26.05 Update Beta 5
[!IMPORTANT]
It is recommended to update to this version of LuminalShine as soon as possible. It corrects a critical bug that may cause loss of LuminalShine Pairings and Administrative Access.
General
- No General changes in this build.
Windows 11 General Availability
Critical fix: admin credentials and Moonlight pairings no longer reset on service restart. Two separate failure modes were corrupting the host state file: a write race between the credentials-save path (saveusercreds) and the pairings-save path (savestate), both targeting sunshinestate.json with inconsistent locking, and non-atomic file writes that could leave a truncated file behind if a concurrent operation interrupted the write. Concurrent pair events landing in the window between the credentials handler's read and write would silently roll back any pairings added in that window, and a partial write would cause the next startup to reject the file outright — wiping credentials, the unique host ID, and every paired device.
Atomic writes. State and credentials file writes now go through a temp-file-plus-rename path (MoveFileExW on NTFS). Concurrent readers and crash recovery see either the full prior contents or the full new contents — never a partial file.
Mutex coverage. saveusercreds, reloadusercreds, and the password-change HTTP handler now all serialize against the same lock that save_state already used. Pair events and credential changes can no longer interleave destructively.
Defensive read-back. After saving a new password the host immediately re-hashes the supplied password against the salt it just wrote, compares it to in-memory state, and returns a 500 "Failed to persist new credentials" if they don't match — so a write that succeeded on the API surface but failed at the filesystem (permissions, antivirus quarantine, etc.) is now reported at save time instead of silently failing at the next login.
Separate credentials file. Admin credentials now live in their own sunshinecredentials.json next to sunshinestate.json instead of sharing the file with pairings. Existing installs are migrated automatically on first launch: any legacy username/salt/password at the top of sunshine_state.json is moved to the new file and stripped from the state file. Idempotent — once the dedicated file exists, the migration is skipped forever.
Regression coverage. New unit suite locks down the atomic-write contract (replaces target, leaves no .tmp, creates parent dirs), the migration round-trip (creds moved, legacy keys removed, paired devices under root.named_devices preserved), and migration idempotency.
Windows 11 Insider Preview
- No Insider-specific changes in this build. The credentials fix applies equally to GA and Insider hosts.
Automated release for 26.05.0-beta.5.
Full Changelog: https://github.com/NortheBridge/luminalshine/compare/26.05.0-beta.4…26.05.0-beta.5