feat(welcome): per-role app recipes in the first-boot wizard #17
Reference in New Issue
Block a user
Delete Branch "feat/app-recipes"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Summary
Makes the Welcome wizard's role/flavour selection do something: after picking a role, a new Apps step shows grouped, pre-checked app checkboxes (role tools + privacy-trimmed essentials), and the chosen apps are installed via winget during Apply.
windows/apps/catalog.json(28 apps,schemaVersion:1) loaded byAppCatalog(mirrorsFlavourLoader: case-insensitive JSON, graceful degrade to "no apps" on missing/bad file).AppsForRolereturns essentials + the role's apps;DefaultSelectionForRolegives the pre-checked set. Shared apps (KeePassXC, VeraCrypt) are single entries with multipleroles.AppInstallerbootstraps winget (absent in IoT LTSC), thenwinget install --id … --silent …per selected app, runs optionalconfigurescripts, and is continue-on-failure (a bad app never blocks onboarding).sourceis swappable to a curated mirror later without touching the UI/engine.AppsStep.razor(grouped checkboxes) inserted after Flavour;WizardState.SelectedApps; defaults seeded on entry from the catalog. Step-index renumbering inRoutes.razoris off-by-one clean (verified).ApplyServiceinstalls selected apps after account creation, before BitLocker (progress 55→70→75, monotonic). Ordering is locked by anApplyServiceTestsassertion (modules→accounts→apps→bitlocker→bootstrap).build.ps1stageswindows/apps/(catalog +configure/+bootstrap-winget.ps1) next to the Welcome app, mirroring the flavours copy, with a bake-guard that throws ifcatalog.jsondidn't land.configurescript enabling the Chrome Web Store source +ForceGoogleSafeSearch.Spec:
windows/docs/superpowers/specs/2026-06-09-wizard-app-recipes-design.md· Plan:windows/docs/superpowers/plans/2026-06-10-wizard-app-recipes.mdBuilt subagent-driven: each task implemented TDD + spec-compliance review + code-quality review; final whole-feature integration review confirmed the flavour-id ↔ role-string match and end-to-end data flow.
Test Plan
dotnet test windows/welcome/SilverOS.Welcome.sln -c Release→ 36/36 pass (incl. install-ordering + catalog/installer unit tests)dotnet build windows/welcome/src/SilverOS.Welcome.App -c Release→ 0 warnings / 0 errors (full MAUI app)catalog.jsonparses, 28 unique ids;build.ps1+ both.ps1scripts parse clean (ASCII-only)Known follow-ups (not in this PR)
source.mirror) for the air-gap end-state.🤖 Generated with Claude Code