All checks were successful
Build SilverMetal Enhanced - Windows ISO / build (pull_request) Successful in 4m45s
VM e2e caught a reboot loop: Configure-Kiosk used `Invoke-CimMethod -InputObject $wesl` for SetDefaultShell/SetCustomShell, but WESL_UserSetting exposes STATIC methods and Get-CimInstance returns null — so those calls threw "InputObject is null" while the class-level SetEnabled($true) had already succeeded. Result: Shell Launcher enabled with NO shell configured -> every logon (incl. OOBE defaultuser0) gets a broken shell -> the "Why did my PC restart?" OOBE loop. Fix: call SetEnabled/SetDefaultShell/SetCustomShell all class-level (-Namespace/-ClassName). Setting the DEFAULT shell to explorer.exe is what keeps OOBE/normal logons alive; only sm-bootstrap gets the kiosk launcher. Added GetCustomShell verification + a fail-open rollback (SetEnabled false + RunOnce launch of the Welcome app) so a WMI hiccup can never brick the box again. Same class-level fix applied to BootstrapService.RevertKioskAsync. Found via VM 102 disk logs (silvermetal-firstboot.log + silvermetal-kiosk.log). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
windows/installer
The custom packed-ISO build pipeline. See ../iso-builder.md for the design.
| File | Role |
|---|---|
build.ps1 |
Pipeline orchestrator (7 stages). Run on Windows + Windows ADK. |
inputs.manifest.json |
Pinned inputs — base ISO SHA-256, driver-pack/Stack/tool versions. The Microsoft ISO is an input, never committed. |
autounattend/autounattend.xml |
OOBE automation — local account (no MSA), regional, BitLocker-ready disk layout, hands off to first-boot. |
oem/SetupComplete.cmd |
First-boot entry point — runs the shared ../hardening/ modules, then schedules Verify. |
Usage (M2+):
.\build.ps1 -SourceIso 'D:\Win11_IoT_Enterprise_LTSC_x64.iso'
Current status: M0 scaffold — stages 2–7 throw NotImplemented until M2/M3.