PR #1102 rewrote apps/ade-cli/scripts/install-runtime.ps1 to stage the binary/runtime under the ADE home (ade.new.exe, runtime.new / .previous), preflight the staged copy, promote by same-directory rename and roll back on failure. Coverage today: static contract test (apps/desktop/scripts/windows-release-contract.test.mjs) + the CI PowerShell parse gate. No execution-level test exists (no pwsh on the dev Mac). Do a real Windows run: fresh install, upgrade over an existing install, forced staged failure, forced post-promotion failure, interrupted mid-swap — assert the previous install is intact/put back each time. Consider a pwsh-driven node:test mirroring install-runtime-rollback.test.mjs on the windows-latest job.
PR #1102 rewrote apps/ade-cli/scripts/install-runtime.ps1 to stage the binary/runtime under the ADE home (ade.new.exe, runtime.new / .previous), preflight the staged copy, promote by same-directory rename and roll back on failure. Coverage today: static contract test (apps/desktop/scripts/windows-release-contract.test.mjs) + the CI PowerShell parse gate. No execution-level test exists (no pwsh on the dev Mac). Do a real Windows run: fresh install, upgrade over an existing install, forced staged failure, forced post-promotion failure, interrupted mid-swap — assert the previous install is intact/put back each time. Consider a pwsh-driven node:test mirroring install-runtime-rollback.test.mjs on the windows-latest job.