LuminalShine 26.05.0 Update Beta 7
Tip
This is the final Beta version before we enter the Release Candidate Stage.
Important
Update to this version as soon as possible. It resolves a critical bug with pairings not being retained by LuminalShine.
General
- Pairings now persist through a corrupted state file.
nvhttp::save_statepreviously short-circuited and returned the moment it couldn't parse the existingsunshine_state.json— which meant that on a broken install, every new pair was silently dropped before the atomic write and the rotating.bakhad a chance to fire. The save path now flows through the same recovery-aware loader as the read path: if both the primary and.bakare unusable, an empty tree is used and the corrupt file is overwritten with valid new content. New pairings stick. - Stacked brand-mark in the navigation header. The web UI's top-left identity block now stacks "LuminalShine" over "NortheBridge Foundation" in the gitdocs.northebridge.com type style, with the Sunshine logo on the left wearing a soft cyan halo. Product name leads; foundation attribution stays visible without dominating the nav.
- "Reset Stored Pairings" escape hatch in Troubleshooting. New
POST /api/state/resetendpoint (auth-gated) and matching button in the Troubleshooting view. Archives the currentsunshine_state.json,luminalshine_state.json, and their.baksiblings to.corrupt-<UTC-timestamp>(kept on disk for forensics), clears in-memory pairings, generates a new host UUID, and writes a fresh empty state. Admin credentials are NOT touched — login survives the reset. Use this when the auto-recovery paths can't resolve a corruption on their own.
Windows 11 General Availability
- Upgrades no longer race the running service. The installer now stops the LuminalShine service unconditionally on every upgrade and repair, not just on basic/silent (
UILevel < 5) installs. The previous gating meant interactive upgrades had to rely on Windows Restart Manager to detect file-in-use, which is unreliable when Defender holds a scan handle onsunshine.exe. The result was sporadic "Access Denied" rollbacks of the whole MSI transaction, leaving LuminalShine in an unusable state. - Service stop retries with backoff. The PowerShell stop block retries
Stop-Serviceup to 5 times with 1-second backoff so transientStoppingstates from SCM can't leak past file replacement. The companion process kill list now also includessunshine_display_helperanddisplay_helper, both of which were observed holdingsunshine_*.dllopen across upgrades. - Migration failures can no longer roll back an install.
RunInstallerMigrationsis now flaggedReturn="ignore", so a best-effort config migration that hits a sharing violation or transient error never tears down the MSI transaction. The C++ runtime carries the same migration logic as a safety net on first launch. - Runtime migration refuses to import corrupt JSON.
platf::appdata()now validates each*.jsonfile before copying it from the legacy<INSTALL_ROOT>\config\directory into%ProgramData%\LuminalShine\config\. Zero-byte and unparseable files are skipped with aWarning: appdata: skipping unparseable JSON during migration: ...log line, so a corrupt state file from a previous broken install doesn't propagate into the new location. - Self-heal for a stuck install. When
sunshine_state.jsonexists at exactly zero bytes AND no.bakis present, LuminalShine now deletes the empty file on startup so the next save can write cleanly. Targets the exact stuck signature produced by the previous beta's silent-abort bug — no manual elevation or File Explorer surgery needed. - Visible migration diagnostics. Every
std::filesystem::copyfailure (Access Denied, sharing violation, antivirus quarantine, disk full) is now logged throughBOOST_LOGinstead of being silently swallowed. The installer's PowerShell migration script also tees its full output to%TEMP%\luminalshine-installer-migration.logso the next install incident is diagnosable from a single file.
Windows 11 Insider Preview
- Interactive-UI upgrades on Insider Preview no longer hit "Access Denied" during the install routine. The combination of the unconditional service stop, the retry/backoff loop, the broadened process kill list, and the non-fatal migration flag closes the exact MSI rollback path that left LuminalShine in an unusable state on flight upgrades. The fix is concentrated at the points where Insider Preview servicing and Defender are most likely to be holding scan handles or staged-file replacements: just before
InstallFiles, and aroundRunInstallerMigrations. - Corrupt state files from a prior broken upgrade no longer follow you forward. Earlier flight cycles could leave a zero-byte
sunshine_state.jsoninC:\Program Files\Sunshine\config\that the installer would faithfully copy into the new%ProgramData%\LuminalShine\config\location. The runtime migration now validates each JSON file before copying — and if a previous install already deposited an empty file at the new location, the self-heal on next launch removes it so the first new pair can write a clean state plus a fresh.bak. - The previously-stuck installation self-recovers on first launch. No manual cleanup is required: the empty
sunshine_state.jsonis removed, the next pair attempt writes valid state, the.bakchain finally bootstraps, and every subsequent boot is protected by the recovery loader. If anything else ever wedges it again, the new "Reset Stored Pairings" button in Troubleshooting is the manual lever.
Automated release for 26.05.0-beta.7.
Full Changelog: 26.05.0-beta.6...26.05.0-beta.7