From d141c47f70537eba6322db6ffe91bd377cc33f67 Mon Sep 17 00:00:00 2001 From: skylartaylor Date: Fri, 16 Oct 2026 03:46:50 +0200 Subject: [PATCH] feat(installer): unify Windows setup and completion screens (INSTALLER-UI) --- ROADMAP.md | 24 +++ packaging/windows/README.md | 34 +++++ packaging/windows/deckcraft.wxs | 7 +- packaging/windows/installer-ui.wxs | 229 +++++++++++++++++++++++++++++ packaging/windows/package.ps1 | 2 +- 5 files changed, 294 insertions(+), 2 deletions(-) create mode 100644 packaging/windows/README.md create mode 100644 packaging/windows/installer-ui.wxs diff --git a/ROADMAP.md b/ROADMAP.md index b52abe28..e119e016 100644 --- a/ROADMAP.md +++ b/ROADMAP.md @@ -384,3 +384,27 @@ app's JSON control channel (`deckcraft --control PORT`). | 2026-10-10 | minor | Stage checked against the new core-workflow gate: passes, stays alpha | | 2026-10-10 | major | Restructured to craftrules `standards/progress-docs.md`: stage, two numbers, dimensions, features, languages; parity estimate moved to docs/target-app-parity.md, "Working today" to its evidence section, the alpha checklist to docs/roadmap.md | | 2026-10-07 | major | Alpha checklist (~80% to a self-defined alpha), breadth ~80%, overall ~62%, ~190 h to full parity | + +## Packaging update — 2026-10-10 + +Windows setup now uses the shared `craft-installer` native UI source, with install/repair/remove +completion, cancellation and failure screens. Existing MSI ownership and upgrade identities are +preserved; unattended modes remain unattended. Source/generator checks pass; native Windows +installer acceptance with real release payloads is still pending. See [setup validation](packaging/windows/README.md). + +## Packaging update (2026-10-11) + +Windows setup now uses the suite's shared `craft-installer` UI, preserving existing folder, +shortcut and launch options and app-owned installation policy. Install, uninstall and repair +have explicit completion screens; cancellation and failure have separate endings. Source/profile +checks, WiX UI library compilation for x64/x86/ARM64, PowerShell parsing and package identity +comparisons pass. Native fixture MSI linking/UI tables pass on all three architectures, and +Windows full UI install/repair/uninstall, x86 install/remove, folder upgrades, desktop choices +and launch checks pass with fixtures. Native evidence and real-release acceptance limits +are linked from +[Windows packaging](packaging/windows/README.md). + +Windows Settings removal now opens the shared completion screen. Quiet install/removal +remains unattended; Settings labels preserve compatibility with existing Launchers, and +previous Modify policy is retained. Windows 11 fixture verification covers both installation +scopes and x64/x86 removal, with full MSI validation on x64/x86/ARM64. diff --git a/packaging/windows/README.md b/packaging/windows/README.md new file mode 100644 index 00000000..4fd17204 --- /dev/null +++ b/packaging/windows/README.md @@ -0,0 +1,34 @@ +# Windows installer UI + +`installer-ui.wxs` is generated from the shared `craft-installer` crate in +[craft-libs](https://github.com/storytold/craft-libs/tree/main/crates/installer). +`package.ps1` compiles it with this app's package source. The common UI provides progress, +repair/remove, and explicit install/uninstall/repair success, cancellation and failure screens. + +Regenerate or check from a sibling craft-libs checkout: + +```sh +cargo run --locked -p craft-installer -- --write --app deckcraft ../deckcraft/packaging/windows/installer-ui.wxs +cargo run --locked -p craft-installer -- --check --app deckcraft ../deckcraft/packaging/windows/installer-ui.wxs +``` + +Edit the shared templates/profile and regenerate; avoid editing this snapshot by hand. The +profile retains this app's existing folder, shortcut and launch options; defaults, persistence, +components, associations and signing stay in the app-owned source. Release builds require no +sibling checkout, published crate or additional runtime dependency. `/qn`, `/qb` and `/passive` +remain unattended and do not launch the app. + +Source/profile checks and native fixture MSI linking/UI table checks passed for x64, x86 and +ARM64. All 14 profiles passed full UI install, missing-file repair and cached uninstall, and +x86 silent install/removal. Folder upgrades, desktop choices and all six launch profiles also +passed their Windows fixture checks. See the +[Windows verification record](../../../craft-libs/docs/windows-installer-verification.md) for +interactive results, scope validation and remaining acceptance checks with real release payloads. +The shared crate includes reusable linking, full UI, option/upgrade/launch and x86 test runners. +Windows Settings now uses a separate MSI-owned entry whose uninstall command selects full UI, +including the completion screen. Its quiet command and direct `/qn`, `/qb`, `/passive` commands +remain unattended. The main feature references `CraftInstallerSettings`; the shared snapshot +owns this registration and hides the native MSI entry while retaining MSI repair/upgrade APIs. + +The Settings display name appends `(Craft Apps)` for compatibility with older Launchers; the +hidden native MSI name stays unchanged. Existing ARP Modify policy is retained explicitly. diff --git a/packaging/windows/deckcraft.wxs b/packaging/windows/deckcraft.wxs index cf07e388..124093c0 100644 --- a/packaging/windows/deckcraft.wxs +++ b/packaging/windows/deckcraft.wxs @@ -2,7 +2,7 @@ + @@ -45,7 +47,10 @@ + + + diff --git a/packaging/windows/installer-ui.wxs b/packaging/windows/installer-ui.wxs new file mode 100644 index 00000000..5d7a5425 --- /dev/null +++ b/packaging/windows/installer-ui.wxs @@ -0,0 +1,229 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/packaging/windows/package.ps1 b/packaging/windows/package.ps1 index 7ebbcbbe..a69fea0d 100644 --- a/packaging/windows/package.ps1 +++ b/packaging/windows/package.ps1 @@ -108,7 +108,7 @@ if ($env:CRAFT_FONTS_DIR) { # ---- MSI --------------------------------------------------------------------------------------- $Msi = Join-Path $Dist "deckcraft-$Version-windows-$Arch.msi" Invoke-Native 'wix build' { - wix build (Join-Path $PSScriptRoot 'deckcraft.wxs') -arch $Arch ` + wix build (Join-Path $PSScriptRoot 'deckcraft.wxs') (Join-Path $PSScriptRoot 'installer-ui.wxs') -arch $Arch ` -d "Version=$MsiVersion" -d "BinDir=$Stage" -d "IconPath=$(Join-Path $Root 'assets\app-icon\deckcraft.ico')" ` -d "DocsDir=$Docs" -d "HasCraftFontLicences=$HasCraftFontLicences" ` -o $Msi