diff --git a/docs/superpowers/plans/2026-05-31-dragon-iso-installer.md b/docs/superpowers/plans/2026-05-31-dragon-iso-installer.md new file mode 100644 index 0000000..44580d7 --- /dev/null +++ b/docs/superpowers/plans/2026-05-31-dragon-iso-installer.md @@ -0,0 +1,520 @@ +# Dragon-ISO Installer Implementation Plan + +> **For agentic workers:** REQUIRED SUB-SKILL: Use superpowers:subagent-driven-development (recommended) or superpowers:executing-plans to implement this plan task-by-task. Steps use checkbox (`- [ ]`) syntax for tracking. + +**Goal:** Rebrand the WiX v5 MSI installer from TeamsISO to Dragon-ISO, producing `Dragon-ISO-Setup-1.0.0.0.msi` for end-user download. + +**Architecture:** Rename the `.wixproj` file, rewrite `Package.wxs` with Dragon-ISO branding and a simple `WixUI_Minimal` UI (no directory picker), and fix a bug in `release.yml` where the signing step references the wrong executable filename. + +**Tech Stack:** WiX Toolset v5, MSBuild, PowerShell; no unit tests (installer files are build-verified by `dotnet build`) + +--- + +## File Map + +| File | Action | Responsibility | +|---|---|---| +| `installer/TeamsISO.Installer.wixproj` | Rename + rewrite | MSBuild project — output name, publish dir, asset dir | +| `installer/Dragon-ISO.Installer.wixproj` | Created by rename | Same as above, Dragon-ISO branded | +| `installer/Package.wxs` | Rewrite | WiX source — all installer logic, shortcuts, metadata | +| `.forgejo/workflows/release.yml` | Fix line 119 | Fix `Dragon-ISO.exe` → `DragonISO.exe` (exe filename matches AssemblyName) | + +> **Important:** `Dragon-ISO.App.csproj` has `DragonISO` (no hyphen). The published executable is therefore `DragonISO.exe`, not `Dragon-ISO.exe`. All shortcut targets and signing steps must use `DragonISO.exe`. + +--- + +## Task 1: Rename the .wixproj file + +**Files:** +- Rename: `installer/TeamsISO.Installer.wixproj` → `installer/Dragon-ISO.Installer.wixproj` + +- [ ] **Step 1: Rename the file using git mv** + +```powershell +cd C:\Users\zacga\source\repos\Dragon-ISO +git mv installer/TeamsISO.Installer.wixproj installer/Dragon-ISO.Installer.wixproj +``` + +- [ ] **Step 2: Verify the rename** + +```powershell +Get-ChildItem installer/ +``` + +Expected: `Dragon-ISO.Installer.wixproj` and `Package.wxs` (no `TeamsISO.Installer.wixproj`) + +--- + +## Task 2: Rewrite Dragon-ISO.Installer.wixproj + +**Files:** +- Modify: `installer/Dragon-ISO.Installer.wixproj` + +- [ ] **Step 1: Replace the file content entirely** + +Write the following to `installer/Dragon-ISO.Installer.wixproj`: + +```xml + + + + Package + Dragon-ISO-Setup-$(Version) + + + x64 + x64 + + + $(MSBuildThisFileDirectory)..\publish\Dragon-ISO\ + + + PublishDir=$(PublishDir);AssetsDir=$(MSBuildThisFileDirectory)..\src\Dragon-ISO.App\Assets\ + + + false + + + + + + + + +``` + +- [ ] **Step 2: Verify the file reads back correctly** + +```powershell +Get-Content installer/Dragon-ISO.Installer.wixproj | Select-String "OutputName|PublishDir|AssetsDir" +``` + +Expected output (3 lines): +``` + Dragon-ISO-Setup-$(Version) + $(MSBuildThisFileDirectory)..\publish\Dragon-ISO\ + PublishDir=$(PublishDir);AssetsDir=$(MSBuildThisFileDirectory)..\src\Dragon-ISO.App\Assets\ +``` + +--- + +## Task 3: Rewrite Package.wxs with Dragon-ISO branding + +**Files:** +- Modify: `installer/Package.wxs` + +Changes from the original TeamsISO version: +- Package Name: "TeamsISO" → "Dragon-ISO" +- SummaryInformation description and keywords updated +- MajorUpgrade error message updated +- Feature Title: "TeamsISO" → "Dragon-ISO" +- UI switched from `WixUI_InstallDir` (shows dir picker) → `WixUI_Minimal` (Welcome → Install → Finish) +- `WIXUI_INSTALLDIR` property removed (not used by WixUI_Minimal) +- ARPHELPLINK URL: teamsiso → dragon-iso +- ARPCOMMENTS: "TeamsISO" → "Dragon-ISO" +- Icon Id: "TeamsISOIcon" → "DragonISOIcon" +- Icon SourceFile: `teamsiso.ico` → `Dragon-ISO.ico` +- ARPPRODUCTICON value: "TeamsISOIcon" → "DragonISOIcon" +- Added .NET 8 Desktop Runtime detection property +- Install directory Name: "TeamsISO" → "Dragon-ISO" +- Start Menu shortcut Id/Name/Target/Icon updated +- Desktop shortcut Id/Name/Target/Icon updated +- All registry keys: `Software\Wild Dragon\TeamsISO` → `Software\Wild Dragon\Dragon-ISO` +- Shortcut targets: `TeamsISO.exe` → `DragonISO.exe` (matches AssemblyName, no hyphen) + +- [ ] **Step 1: Replace Package.wxs entirely with Dragon-ISO branded content** + +Write the following to `installer/Package.wxs`: + +```xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +``` + +- [ ] **Step 2: Verify no "TeamsISO" strings remain in Package.wxs** + +```powershell +Select-String -Path installer/Package.wxs -Pattern "TeamsISO" +``` + +Expected: no output (zero matches) + +--- + +## Task 4: Fix release.yml — wrong exe filename in signing step + +**Files:** +- Modify: `.forgejo/workflows/release.yml` line 119 + +The signing step references `publish/Dragon-ISO/Dragon-ISO.exe` but the app's `AssemblyName` is `DragonISO`, so the published exe is `DragonISO.exe`. Fix it. + +- [ ] **Step 1: Edit release.yml to fix the exe path** + +In `.forgejo/workflows/release.yml`, find and replace: + +Old (line 119): +``` + 'publish/Dragon-ISO/Dragon-ISO.exe' +``` + +New: +``` + 'publish/Dragon-ISO/DragonISO.exe' +``` + +- [ ] **Step 2: Verify the fix** + +```powershell +Select-String -Path .forgejo/workflows/release.yml -Pattern "Dragon-ISO\.exe|DragonISO\.exe" +``` + +Expected output: +``` +.forgejo/workflows/release.yml:119: 'publish/Dragon-ISO/DragonISO.exe' +``` + +(One match, using `DragonISO.exe` with no hyphen) + +--- + +## Task 5: Check WiX workload and verify build + +**Files:** None (verification only) + +- [ ] **Step 1: Check if WiX workload is installed** + +```powershell +dotnet workload list +``` + +Expected: output includes `wix` in the list. If not installed, run: +```powershell +dotnet workload install wix +``` + +- [ ] **Step 2: Publish the app to the expected location** + +```powershell +cd C:\Users\zacga\source\repos\Dragon-ISO +dotnet publish src/Dragon-ISO.App/Dragon-ISO.App.csproj ` + -c Release -r win-x64 --self-contained false ` + -o publish/Dragon-ISO +``` + +Expected: ends with `Build succeeded.` and creates `publish/Dragon-ISO/DragonISO.exe` + +- [ ] **Step 3: Verify the exe filename in the publish output** + +```powershell +Get-ChildItem publish/Dragon-ISO/ -Filter "*.exe" +``` + +Expected: one file named `DragonISO.exe` (confirms shortcut targets are correct) + +- [ ] **Step 4: Build the MSI** + +```powershell +dotnet build installer/Dragon-ISO.Installer.wixproj -c Release /p:Version=1.0.0.0 +``` + +Expected: ends with `Build succeeded.` — no errors, no warnings. + +- [ ] **Step 5: Verify the MSI was produced with the correct name** + +```powershell +Get-ChildItem installer/bin -Recurse -Filter "*.msi" +``` + +Expected: one file named `Dragon-ISO-Setup-1.0.0.0.msi` + +--- + +## Task 6: Commit all changes + +- [ ] **Step 1: Stage the changed files** + +```powershell +cd C:\Users\zacga\source\repos\Dragon-ISO +git add installer/Dragon-ISO.Installer.wixproj +git add installer/Package.wxs +git add .forgejo/workflows/release.yml +``` + +- [ ] **Step 2: Verify nothing unexpected is staged** + +```powershell +git status +``` + +Expected staged files: +- `installer/Dragon-ISO.Installer.wixproj` (renamed from TeamsISO.Installer.wixproj) +- `installer/Package.wxs` (modified) +- `.forgejo/workflows/release.yml` (modified) + +No other files should be staged. + +- [ ] **Step 3: Commit** + +```powershell +git commit -m "$(cat <<'EOF' +rebrand installer from TeamsISO to Dragon-ISO + +- Rename TeamsISO.Installer.wixproj → Dragon-ISO.Installer.wixproj +- Update Package.wxs: product name, shortcuts, registry keys, ARP + metadata, install directory, and icon all updated to Dragon-ISO +- Switch UI from WixUI_InstallDir to WixUI_Minimal (no dir picker) +- Add .NET 8 Desktop Runtime detection property +- Fix release.yml: signing step referenced Dragon-ISO.exe but + AssemblyName=DragonISO so exe is DragonISO.exe (no hyphen) + +Co-Authored-By: Claude Sonnet 4.5 +EOF +)" +``` + +--- + +## Testing Checklist (manual verification after install) + +Once the MSI is built, install it on a test machine and verify: + +- [ ] `Dragon-ISO-Setup-1.0.0.0.msi` installs without errors +- [ ] App installs to `C:\Program Files\Wild Dragon\Dragon-ISO\` +- [ ] `DragonISO.exe` is present in the install folder +- [ ] Start Menu shows `Wild Dragon → Dragon-ISO` shortcut with correct icon +- [ ] Desktop shows `Dragon-ISO` shortcut with correct icon +- [ ] Both shortcuts launch the app successfully +- [ ] Add/Remove Programs shows: + - Name: Dragon-ISO + - Publisher: Wild Dragon LLC + - Version: 1.0.0.0 + - Help link: `https://forge.wilddragon.net/zgaetano/dragon-iso` +- [ ] Uninstall removes all files, shortcuts, and registry entries +- [ ] `%APPDATA%\Dragon-ISO\` (user config) is NOT removed on uninstall