From 6aa0b681868fe0343270910e8810e2c832fc409d 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 | 26 +++- docs/roadmap.md | 18 ++- packaging/windows/README.md | 34 +++++ packaging/windows/deckcraft.wxs | 7 +- packaging/windows/installer-ui.wxs | 229 +++++++++++++++++++++++++++++ packaging/windows/package.ps1 | 2 +- 6 files changed, 312 insertions(+), 4 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 46a87add..2a0b63fc 100644 --- a/ROADMAP.md +++ b/ROADMAP.md @@ -2,7 +2,7 @@ **Stage: alpha** · next: beta, ~20 points and ~120–210 h away -> **Last reviewed:** 2026-10-10 · **Last updated:** 2026-10-10 · **Change:** minor (hours to ~95% per audience added; ready 56% → 55%; stage stays alpha; previous: major, full re-measure against PowerPoint for Mac 16.113.4; restructured to the craftrules progress-docs standard) · **Target:** Microsoft PowerPoint for Mac 16.113 (Microsoft 365) +> **Last reviewed:** 2026-10-10 · **Last updated:** 2026-10-12 · **Change:** minor (shared Windows installer UI; existing folder/shortcut/launch options retained; install and uninstall completion) · **Target:** Microsoft PowerPoint for Mac 16.113 (Microsoft 365) DeckCraft aims at full PowerPoint parity, and to be better: faster, open (a documented zip+JSON format plus PPTX), scriptable by agents (CLI, JSON control channel, MCP), and available everywhere @@ -158,3 +158,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/docs/roadmap.md b/docs/roadmap.md index 97953034..3646311e 100644 --- a/docs/roadmap.md +++ b/docs/roadmap.md @@ -1,6 +1,6 @@ # DeckCraft roadmap: milestones and what's next -> **Last reviewed:** 2026-10-10 · **Last updated:** 2026-10-10 · **Change:** minor (core-workflow alpha gate added; stage stays alpha; previous: major, created; milestones carried from the local execution plan, the beta plan built from gaps.md) · **Target:** Microsoft PowerPoint for Mac 16.113 (Microsoft 365) +> **Last reviewed:** 2026-10-10 · **Last updated:** 2026-10-11 · **Change:** minor (shared Windows installer UI; existing folder/shortcut/launch options retained; install and uninstall completion) · **Target:** Microsoft PowerPoint for Mac 16.113 (Microsoft 365) Forward-looking: where DeckCraft is going and in what order. The one-page summary is [ROADMAP.md](../ROADMAP.md); every shortfall is in [gaps.md](gaps.md); numbers are in @@ -111,3 +111,19 @@ plan above. |---|---|---| | 2026-10-10 | minor | Added the alpha gate (six core workflows): all pass, two with partial depth; stage stays alpha | | 2026-10-10 | major | Created: current focus, ranked beta plan with hours, milestones M0–M14 with status, the old alpha checklist as history | + +## 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 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. Full MSI linking and interactive Windows acceptance remain pending; see +[Windows packaging](../packaging/windows/README.md). 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 43d256fe..9d29c8e3 100644 --- a/packaging/windows/deckcraft.wxs +++ b/packaging/windows/deckcraft.wxs @@ -2,7 +2,7 @@ + @@ -39,7 +41,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 f15f00e8..ee1d57a9 100644 --- a/packaging/windows/package.ps1 +++ b/packaging/windows/package.ps1 @@ -93,7 +93,7 @@ Copy-Item (Join-Path $Bin 'deckcraft.exe'), (Join-Path $Bin 'deckcraft-cli.exe') # ---- 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')" ` -o $Msi }