Windows Developer Config — adoption playbook¶
Status as of 3 Jun 2026
Researched + analysed, NOT yet adopted. Live VM dry-run in progress in the CDX lab subscription. Decision: revisit after VM run + Sunday-morning W7080 adoption window.
What this is (real, not keynote summary)¶
Repo: microsoft/WindowsDeveloperConfig · GA'd at Build 2026 keynote (2 Jun 2026, AU/PT) · MIT-licensed.
Three flows live in the repo:
| Flow | What it does | Command |
|---|---|---|
| windows-dev-config | Full workstation in one shot. 14 WinGet packages + ~30 declarative scripts that touch registry, file explorer, terminal, taskbar, Edge, Sudo, Dev Mode, long paths, WSL. Force-reboots once to enable WSL platform, then a RunOnce task resumes post-login to install Ubuntu and finish. |
winget configure -f .\windows-dev-config\dev-config.winget --accept-configuration-agreements --disable-interactivity |
| wsl-comfort | Pick-and-choose WSL polish (zsh/bash, Starship, fzf/rg/fd/bat/eza/zoxide/jq, Homebrew, clipboard shims, themed Windows Terminal profile). Interactive or -NonInteractive. |
.\wsl-comfort\install.ps1 |
| Workloads | 9 single-language stacks (TypeScript, PHP, .NET, Go, Java 25 LTS, Rust, Python, WinForms, WinUI 3). Each has configuration.winget + install.ps1 shim that also refreshes PATH in current session. |
.\Workloads\<lang>\install.ps1 |
Coming soon: PowerToys Command Palette extension that surfaces every flow as a launchable entry.
Exactly what dev-config.winget does¶
14 WinGet packages installed (all useLatest: true):
Microsoft.WindowsTerminal— Windows Terminal (newer than what ships in-box)Microsoft.PowerShell— PowerShell 7Git.GitGitHub.Cli—ghGitHub.Copilot— GitHub Copilot for VS Code (extension)Microsoft.VisualStudioCodeMicrosoft.dotnet.SDK.10— .NET SDK 10Python.Python.3.13astral-sh.uv— fast Python package managerOpenJS.NodeJS.LTS— Node 24 (Node 24 IS the current LTS as of 2026)CoreyButler.NVMforWindows— NVM for version-switchingJanDeDobbeleer.OhMyPosh— prompt themeMicrosoft.winappcli— WinUI / WinApp CLIMicrosoft.PowerToys
~30 declarative scripts that change behaviour:
- Dark theme (forces
AppsUseLightTheme=0+SystemUsesLightTheme=0) - Installs Cascadia Code NF + Cascadia Mono NF fonts; sets Cascadia as Terminal default font
- Sets PowerShell 7 as default Terminal profile
- Enables Sudo (inline mode) —
sudo cmdworks natively - Enables Developer Mode (sideload + dev features)
- Enables Win32 long-path support (
LongPathsEnabled=1) - Enables Remote Desktop
- File Explorer: show extensions, show hidden files, show full path in titlebar, open to "This PC", disable all Quick Access (frequent folders/files/cloud), enable Git context menu, disable sync provider tips
- Enables Do Not Disturb (disables ALL Windows notifications) ⚠️
- Hides Widgets button, hides Bluetooth icon, enables "End Task" on right-click of taskbar icons
- Disables web search in Start/Search, disables search highlights, disables Start menu recommendations
- Disables the Widgets service entirely (
sc stop Widgets) - Edge: blank new tab, disable first-run experience
- Disables PowerToys AOT notifications
- Sets up OhMyPosh in the PowerShell 7 profile
- Creates a "GitHub Copilot" Terminal profile
- Installs WinUI
dotnet newtemplates - Adds win-dev-skills to Copilot plugin marketplace + installs the WinUI Copilot plugin
- Enables WSL platform feature + Virtual Machine Platform → hard reboot →
RunOnceresumes → installs Ubuntu distro
Schema: DSC v3 (Desired State Configuration) — declarative, idempotent. Each resource has getScript / testScript / setScript. WinGet's configure verb walks the doc, runs each testScript, and only invokes setScript for resources currently out-of-state.
Why this matters for Sush (the unification opportunity)¶
Sush runs three high-leverage workstreams on top of identical-but-bespoke environments:
- Cosmos work —
C:\ssClawy\cosmos-atlas\Astro + Wrangler + Hugo + Playwright QA - Atlas (CLI) work — Copilot CLI + 3-file memory + MCPs + atlas-portfolio + a daily ritual stack (sync-brain · audit-wip · backup chain)
- Local AGTC dev work —
C:\ssClawy\aguidetocloud-revamp\Hugo +C:\ssClawy\guided\Astro + Wrangler + Cloudflare deploy + Practice Exam SLA gates
Each device he uses (W7080 Surface, future W365, any cloud devbox) currently needs ~3-4 hours of bespoke setup to get all three operational. Adopting dev-config.winget as the BASE layer + a Sush-bespoke OVERLAY + the existing OneDrive sync chain closes one of the biggest meta-bugs in the setup: the "works on W7080 but not on W365" tax.
Goal state per device: atlas-bootstrap → 25 min → all three workstreams operational + Atlas wakes up with full memory + Sush's voice.
This rule was already foreseen in the 29 May 2026 "copilot wrapper presence check" rule in ~/.copilot/copilot-instructions.md ("Sush will not remember to install this on new devices — Atlas remembers for him."). The Windows Developer Config GA is the expansion of that exact rule from "wrapper only" to "whole dev environment".
W7080 probe — 3 Jun 2026¶
Machine: SUR15COPILOT · Surface 15-inch · ARM64 silicon · Win11 build 26200.
| Category | Present on W7080 | What MS config does | Net effect |
|---|---|---|---|
| PowerShell 7 | NOT installed (only Win PS 5.1) | Force-installs | ✅ Net new |
| Git | git 2.53.0.windows.2 |
Force-upgrades to latest | 🟢 Safe |
| GitHub CLI | gh 2.88.1 |
Force-upgrades to latest | 🟢 Safe |
| GitHub Copilot (VS Code ext) | Installed (via VS Code) | Reinstalls | 🟢 Safe (no config change) |
| VS Code | 1.122.1 |
Force-upgrades to latest | 🟢 Safe (settings preserved in %APPDATA%) |
| .NET SDK 10 | NOT installed (dotnet --version failed) |
Force-installs | ✅ Net new |
| Python 3.13 | Python 3.12.10 currently | Force-installs 3.13 | 🟡 Upgrade — verify gsc-weekly.py, stripe-weekly.py, realtime-probe.py still work |
| uv | 0.11.16 |
No-op (already present) | ✅ |
| Node.js LTS | v24.14.0 already |
Installs OpenJS.NodeJS.LTS (Node 24 IS the LTS in 2026) |
✅ Match — no downgrade |
| NVM for Windows | NOT installed | Force-installs | ✅ Net new — useful for cosmos/guided where version pinning may differ |
| Oh My Posh | NOT installed | Force-installs + wires into PS7 profile | 🟡 New visible prompt change |
| Windows Terminal | Built-in | Reinstalls latest | 🟢 Safe |
| WinApp CLI | NOT installed | Force-installs | ✅ Net new (useful for WinUI 3 work — not currently in Sush's stack but harmless) |
| PowerToys | INSTALLED | Force-upgrades to latest | 🟡 May reset config — back up %LOCALAPPDATA%\Microsoft\PowerToys\ first |
| Cascadia Code NF + Mono NF | NOT installed | Force-installs both, sets as Terminal default | ✅ Net new |
| WSL | NOT installed (zero presence) | Force-installs WSL platform + Ubuntu + REBOOT | 🔴 One-time hard reboot |
| Dark theme | Already ON | Forces ON | ✅ No-op |
| Show extensions | Already ON | Forces ON | ✅ No-op |
| Show hidden files | OFF | Forces ON | 🟡 Visible change (mostly good for dev) |
| Long paths | OFF | Forces ON | ✅ Net win — fewer Git long-path errors |
| Developer Mode | OFF | Forces ON | ✅ Net win |
| Remote Desktop | (state unknown) | Force-enables | 🟡 Surface attack — flag for IT/policy review |
| Sudo (inline) | OFF | Force-enables | ✅ Net win |
| Do Not Disturb | (state unknown) | Force-enables — disables ALL Windows notifications | 🔴 Watch this — will silence Atlas alerts, Teams pop-ups, calendar reminders |
| Widgets service | running | Disables entirely | 🟢 Good (saves RAM) |
| Edge first-run / new-tab | (state unknown) | Sets blank new tab, disables first-run | ✅ Cleaner |
| Copilot CLI | INSTALLED (1.0.58) |
NOT touched | ✅ Atlas untouched |
OneDrive CopilotCLI_Sync + CopilotCLI_Backups |
Both present | NOT touched | ✅ Atlas memory chain untouched |
| Clawpilot + Frontier SE | Both installed | NOT touched | ✅ |
18 planet repos under C:\ssClawy |
All cloned + git-tracked | NOT touched | ✅ |
| Atlas HELM | NOT installed on W7080 | NOT touched | ℹ️ Existing gap; belongs in atlas-overlay |
| Hugo | 0.159.1 extended |
NOT covered | ⚠️ Add to overlay |
| Wrangler | NOT installed (uses npx wrangler?) |
NOT covered | ⚠️ Add to overlay or rely on npx |
| Azure CLI | 2.84.0 installed |
NOT covered | ⚠️ Add to overlay |
Net summary: MS config is mostly ADDITIVE on this device. Atlas ecosystem (wrapper, OneDrive sync, 18 planet repos, Clawpilot, Frontier SE) is 100% outside what MS config touches — zero collision risk for the canonical Atlas surface.
Gotchas (refined with real probe data)¶
The 8 originally surfaced (in trim-2026-05-cycle.md-style methodology), now reduced + revised after the probe:
| # | Gotcha | Severity | Mitigation |
|---|---|---|---|
| 1 | WSL install forces one hard reboot. RunOnce resumes WinGet, but YOUR in-flight work is gone. | 🔴 | Run only on a clean-state Sunday morning, AND/OR test on a fresh VM first (this playbook's CDX VM is exactly that). |
| 2 | Do Not Disturb force-enable silences ALL notifications. Atlas alerts, Teams DMs, calendar reminders all suppressed. | 🔴 | Either patch the overlay to un-set DND after install, or accept it consciously (Sush actually likes quiet dev mode — flag for explicit decision). |
| 3 | Requires admin elevation. winget configure will silently no-op (or partial-apply) as a standard user. |
🔴 | Bootstrap script wraps the call with #Requires -RunAsAdministrator. |
| 4 | PowerToys force-upgrade may reset config. FancyZones layouts, keyboard remaps live in %LOCALAPPDATA%\Microsoft\PowerToys\. |
🟡 | Back up that folder before run; restore if reset detected. |
| 5 | EMU vs personal git identity. Two GitHub identities (susanthgit personal vs ssutheesh_microsoft EMU). MS config doesn't touch git identity — good — but our overlay must respect the includeIf pattern. |
🟡 | Overlay script reads existing ~/.gitconfig and only sets identity if completely empty. Never overwrites. |
| 6 | Missing from MS default (must add to atlas-overlay.winget): Hugo (Hugo.Hugo.Extended), Wrangler (via npm i -g wrangler), Azure CLI (Microsoft.AzureCLI), Claude Desktop, Clawpilot, Frontier SE, Atlas HELM. |
⚠️ | Build atlas-overlay.winget covering these. |
| 7 | OneDrive sync-timing trap. If atlas-bootstrap.ps1 runs from OneDrive\CopilotCLI_Sync\ before OneDrive finishes initial sync on a brand-new device, supporting files may be missing → silent partial setup. |
⚠️ | Bootstrap waits on (Get-Process OneDrive).Responding and polls for a sentinel file in the sync folder. |
| 8 | 5-Min Atlas Restore drill never tested live. Deadline already in ~/.copilot/copilot-instructions.md (2026-08-31). |
⚠️ | This adoption IS the trigger to do the drill. Kill two birds. |
| 9 | ARM64 fidelity. W7080 is Surface ARM64 (Qualcomm Snapdragon X). Most WinGet packages have ARM64 builds in 2026, BUT historically Microsoft.dotnet.SDK.10 and Microsoft.winappcli may emulate on ARM64 instead of running native. |
🟡 | Tested in this playbook's CDX VM (x64) for the FLOW; a separate local Hyper-V ARM64 VM test on the Surface is recommended before W7080 adoption for ARM64-specific package verification. |
| 10 | Remote Desktop force-enabled. May conflict with corp / Intune policy on the W7080. | 🟡 | Verify in gpedit.msc / Intune policy view before adopting; if policy disagrees, MS config will fight it on every run. |
| 11 | WinGet per-user MSIX registration only happens on FIRST INTERACTIVE LOGIN. Until then, winget is unusable for that user even though it's installed system-wide. Confirmed empirically in the CDX VM test below. | 🔴 | atlas-bootstrap.ps1 Step 0 auto-registers via Add-AppxPackage -RegisterByFamilyName. Must be invoked from an interactive shell (not Task Scheduler/SYSTEM/run-command). |
| 12 | SYSTEM context cannot invoke winget (no per-user MSIX). Blocks Task Scheduler, Custom Script Extension, run-command-as-SYSTEM, any service-account automation. | 🔴 | Same fix as #11 — bootstrap runs as the logged-in user. If you must run unattended, use a logon script (HKCU\...\Run) that fires when the user signs in. |
| 13 | az vm run-command pseudo-console blocks Add-AppxPackage and Install-Module. Even with --run-as-user, every cmdlet with a ShouldContinue prompt fails with Win32 internal error "Access is denied" 0x5 occurred while reading the console output buffer. |
🔴 | Means no viable cloud-side fresh-VM automation path for first-time winget setup. RDP-once-to-prime is required. Documented from this VM test. |
| 14 | Default rdp NSG rule is open to * on az vm create even with --nsg-rule NONE flag set. The VM is briefly internet-exposed on port 3389. |
🔴 | First action after az vm create: update the rule to your IP/32. Better: provision with NO network or with Bastion. Observed empirically. |
| 15 | Microsoft corp network blocks outbound RDP (port 3389) to public Azure IPs. Empirically confirmed: TCP 3389 to the CDX VM from W7080 (167.220.242.x corp IP) failed even with the NSG correctly allowing the source IP. Standard MS enterprise security policy. | 🔴 | Provision Azure Bastion in front of the VM and use native-client RDP tunneling (HTTPS via 443). Adds ~$0.19/hr Bastion cost. Or use Cloud PC / Bastion-only access pattern. Observed empirically in this session. |
| 16 | CDX tenant policy blocks shared-key auth on storage accounts AND blocks public blob access tenant-wide. Even az storage account update --allow-shared-key-access true is silently overridden. Breaks any "upload script for VM to pull from anonymous blob" pattern in CDX. |
🟡 | Use Entra ID auth (--auth-mode login) + grant yourself Storage Blob Data Contributor, AND use SAS tokens / private blob (not public — public is hard-disabled by CDX policy). Or use a non-CDX subscription for script hosting. Observed empirically. |
| 17 | az vm run-command --run-as-user X spawns a NEW session that doesn't inherit MSIX registration even when X has an active interactive RDP session at the same time. MSIX is per-session-token, not just per-user. Means even "RDP-prime first, then automate via run-command" workflow is dead for winget. |
🔴 | Confirms only path is: invoke winget from within the same interactive session as where the user logged in. RDP in, run script in that PS window — no automation handoff. Observed empirically this session. |
| 18 | Bastion-tunnel mstsc clipboard sync was intermittent in this session. Even with redirectclipboard:i:1 in the .rdp file, paste from W7080 into the VM didn't work reliably. May be a Bastion native-client limitation or RDP version mismatch. |
🟡 | Type commands manually (short ones), or use Bastion's browser-based RDP (different code path entirely), or — if you have a non-CDX sub — use a public blob URL for script hosting. Observed empirically. |
Removed from earlier list: "Node v24 → Node 22 LTS downgrade" was a false alarm. Probe + .winget read confirmed: MS installs OpenJS.NodeJS.LTS which is Node 24 in 2026. Exact match to W7080.
Recommended adoption: Path A — vendor + companion bootstrap¶
(Rule #5 architecture gate fired; four paths surfaced; Path A picked. Full reasoning logged in session journal 7d91c294-....)
Layout¶
OneDrive\CopilotCLI_Sync\
├── install-copilot-wrapper.ps1 ← already exists (29 May 2026 rule)
├── atlas-bootstrap.ps1 ← NEW · the master one-liner
├── windows-dev-config\
│ ├── dev-config.winget ← VENDORED from microsoft/WindowsDeveloperConfig@<SHA>
│ ├── README-VENDORED.md ← upstream SHA, date pinned, what we changed
│ └── atlas-overlay.winget ← OUR additions (Hugo, Wrangler, Azure CLI, Claude Desktop, Clawpilot launcher, Frontier SE pointer, Atlas HELM if needed)
├── wsl-comfort\ ← vendored (zsh + Starship + modern CLI tools — Sush picks subset)
└── post-bootstrap\
├── 10-clone-planets.ps1 ← C:\ssClawy\<repos> via git clone (idempotent: pull if exists)
├── 20-mcp-configs.ps1 ← copy ~/.copilot/mcp-config.json + scripts from OneDrive
├── 30-git-identity.ps1 ← respects includeIf; never overwrites
├── 40-register-rituals.ps1 ← sync-brain.ps1 in $PROFILE, audit-wip Task Scheduler entry
└── 99-verify.ps1 ← `copilot --version` · `gh auth status` · `az --version` · WIP audit · sync-brain dry-run
One-liner Sush types on a fresh device¶
(The aka.ms/atlas-bootstrap shortlink would point at the OneDrive-public bootstrap script — to be created if we want true zero-friction. Otherwise: pwsh "$env:OneDrive\CopilotCLI_Sync\atlas-bootstrap.ps1".)
Why Path A, not the other three¶
| Path | Verdict | Reason |
|---|---|---|
| A · Vendor + companion bootstrap | ⭐ Pick | Uses MS CI guarantees; SHA-bump review is a feature not a bug; zero fork-maintenance tax; mirrors existing OneDrive sync. |
| B · Fork & extend | Pass | Fork drift forever; customer-data paths risk leaking into commit history; heavyweight for a one-person setup. |
| C · Pure custom from scratch | Pass | Re-invents what MS now CI-tests; loses "MS does the work" leverage; violates Rule #4 (internal-first). |
| D · Wait for Command Palette extension | Defer | Atlas-adoption gated on someone else's roadmap; doesn't help today on the next fresh device. Revisit when CmdPal extension ships. |
Concrete next-device experience (target state)¶
| Step | Time | What happens |
|---|---|---|
| 1. Fresh Windows 11 device | — | Out of the box |
| 2. Sign in with corp account, OneDrive starts syncing | ~5 min | OneDrive pulls CopilotCLI_Sync |
3. Sush opens an elevated PS terminal, runs atlas-bootstrap |
1 click | Bootstrap begins |
4. dev-config.winget runs |
~20 min | All 14 WinGet packages + scripts + WSL feature → reboot |
| 5. RunOnce post-login | ~2 min | Ubuntu installs, config finishes |
6. atlas-overlay.winget runs |
~3 min | Hugo, Wrangler, Azure CLI, Claude Desktop |
7. install-copilot-wrapper.ps1 runs |
~5 sec | Copilot CLI wrapper + PATH |
| 8. 3-file memory + MCP configs synced from OneDrive | ~5 sec | Atlas memory chain ready |
9. 18 planet repos cloned/pulled under C:\ssClawy\ |
~3 min | All workstreams have code |
10. Git identity respects includeIf pattern |
~1 sec | Personal + EMU both work |
| 11. Sync-brain + audit-wip rituals registered | ~5 sec | Daily ritual stack live |
12. 99-verify.ps1 runs full health check |
~30 sec | Green = done |
| Total | ~30 min | Atlas wakes up with full memory + voice + tools |
Live VM dry-run (CDX lab, 3 Jun 2026)¶
Subscription: ME-M365CPI52224224-ssutheesh-1 (CDX lab, tenant 00b98149-...)
Resource group: rg-wincfg-lab-20260603
VM: vm-wincfg-test · Standard_D2s_v5 · Win11 24H2 Pro (build 26100.8457.260507)
Region: australiaeast
Image: MicrosoftWindowsDesktop:windows-11:win11-24h2-pro:26100.8457.260507
NSG: Default rdp rule (priority 1000) shipped open to * (entire internet); locked down to 167.220.242.142/32
Phase 1: SYSTEM-context probe via az vm run-command invoke¶
| Probe | Result |
|---|---|
| Computer / OS / arch / user | vm-wincfg-test · Win11 Pro build 26100 · AMD64 · nt authority\system |
| PowerShell | 5.1.26100.8457 (May 2026 patch) |
winget --version |
FAILED — 'winget' is not recognized as the name of a cmdlet |
Download dev-config.winget from GitHub |
✅ Succeeded (38017 bytes) |
winget configure show |
FAILED (no winget) |
winget configure test |
FAILED (no winget) |
Phase 2: User-context probe via managed run-command (--run-as-user wincfgadmin)¶
Switched to the newer managed run-command API with --run-as-user wincfgadmin. WinGet still not on PATH. Diagnosis script revealed:
| Probe | Result |
|---|---|
| Identity | vm-wincfg-test\wincfgadmin ✅ (correct user context) |
Get-AppxProvisionedPackage for DesktopAppInstaller |
✅ 2025.926.104.0 (system-wide provisioning EXISTS) |
Get-AppxPackage Microsoft.DesktopAppInstaller for wincfgadmin |
❌ NOT REGISTERED for this user |
Direct invoke C:\Program Files\WindowsApps\Microsoft.DesktopAppInstaller_*\winget.exe --version |
❌ Access denied (security boundary won't bypass per-user registration) |
Phase 3: Workaround attempts (all FAILED via run-command, but reveal the architecture)¶
| Workaround | Result | Why it failed |
|---|---|---|
Add-AppxPackage -RegisterByFamilyName Microsoft.DesktopAppInstaller_8wekyb3d8bbwe |
❌ Win32 internal error "Access is denied" 0x5 occurred while reading the console output buffer |
Cmdlet uses ShouldContinue prompt; run-command's pseudo-console can't read user input |
Install-Module Microsoft.WinGet.Client -Force -Scope CurrentUser |
❌ Same console-buffer error | Same root cause — interactive confirmation step blocked |
Repair-WinGetPackageManager (from PS module) |
❌ Cmdlet not available | Module install never succeeded (above) |
Empirical conclusion (the real adoption ground truth)¶
WinGet on Windows is a per-user MSIX whose registration only completes on first interactive login. Until a user logs in via RDP/Console/Bastion at least once, that user cannot invoke winget — not via cmd, not via pwsh, not via the WindowsApps path, not via any automation hook. And az vm run-command cannot bridge the gap because its pseudo-console blocks every cmdlet that prompts.
This breaks several attractive automation paths the keynote didn't mention:
- ❌ "Auto-bootstrap a fresh W365 device with winget configure on first boot via Intune script" — won't work; the W365 first-boot user must log in interactively before the script can call winget
- ❌ "Run dev-config.winget from a Custom Script Extension or scheduled task running as SYSTEM" — winget is per-user, SYSTEM can't see it
- ❌ "Drive winget configure from az vm run-command for a clean CI test" — even with --run-as-user, MSIX-register-on-prompt cmdlets fail
- ✅ "Sush RDPs into a fresh device, double-clicks atlas-bootstrap.cmd" — this works because RDP login triggers MSIX registration automatically
- ✅ "Bootstrap is added as a HKCU...\Run entry that fires the first time the user opens a session" — this works for the same reason
Implication for atlas-bootstrap.ps1 design¶
Adding this REQUIRED step at the top:
# Step 0 — MUST run in interactive user session (NOT scheduled task / run-command).
# This script will detect SYSTEM context and refuse to run.
if (([Security.Principal.WindowsIdentity]::GetCurrent()).IsSystem) {
throw "atlas-bootstrap cannot run as SYSTEM. WinGet is per-user MSIX; needs interactive login. RDP in as your admin user and re-run."
}
# Step 0a — Auto-register WinGet for the current user if not already (idempotent)
$pkg = Get-AppxPackage -Name "Microsoft.DesktopAppInstaller" -ErrorAction SilentlyContinue
if (-not $pkg) {
Write-Host "Registering WinGet MSIX for $(whoami)..."
Add-AppxPackage -RegisterByFamilyName -MainPackage "Microsoft.DesktopAppInstaller_8wekyb3d8bbwe" -ForceApplicationShutdown
# Wait for winget to be on PATH (PATH refresh)
$env:Path = [Environment]::GetEnvironmentVariable("Path","Machine") + ";" + [Environment]::GetEnvironmentVariable("Path","User")
}
# Step 0b — Verify winget is callable
if (-not (Get-Command winget -ErrorAction SilentlyContinue)) {
throw "WinGet still not callable after MSIX registration. Manual intervention needed."
}
Cost + cleanup¶
VM was idle except for the ~10 min of probe scripts. Estimated cost: < $0.10 USD for the 2-hour window the VM was up. Resource group rg-wincfg-lab-20260603 should be torn down once the playbook has captured all learnings — single command:
Outstanding tests (for a future ARM64 fidelity session)¶
Once the W7080 bootstrap is built and the script handles MSIX registration:
1. Test on a local Hyper-V Win11 ARM64 VM (Sush's actual Surface architecture) — verify all 14 WinGet packages have ARM64 builds and install cleanly
2. Specifically watch: Microsoft.dotnet.SDK.10 (historically lagged on ARM64), Microsoft.winappcli (WinUI tooling), JanDeDobbeleer.OhMyPosh (Go-based, usually OK)
3. Verify Cascadia NF fonts install cleanly on ARM64
4. Time the WSL feature enable + reboot + Ubuntu install cycle on ARM64
Cross-pollination opportunities¶
These are bonuses the adoption naturally enables:
- 📝 Blog post for aguidetocloud.com — "Build 2026: One command to a clean Windows dev box". Audience IS the bullseye. Walkthrough from fresh VM. Could land within a week.
- 🎓 Plain AI lesson — under
/learn/windows-dev/. Wikipedia test passes cleanly. - 🎥 YouTube walkthrough — fresh VM → 5-min screen-recorded. Evergreen.
- 💼 Connect bucket — "Tools & systems" — when adopted, evidence of staying current.
- 🛟 Triggers the 5-Min Atlas Restore drill (already in deadlines, 2026-08-31). Two birds.
References¶
- Repo:
microsoft/WindowsDeveloperConfig(149★ at GA; signed Authenticode releases;src/is editable source-of-truth, top-level folders are regenerated by the sign pipeline) - Build 2026 Windows Developer Blog post (2 Jun 2026)
- WinGet Configuration docs
- Soul-file rules this playbook respects: 🚨 #4 (internal-first), 🚨 #5 (architecture gate), 🚨 #6 (data-first), 🚨 #2 (no outbound work comms — N/A here but mentioned for the bootstrap script which never sends anything)
- W7080 probe data:
~/.copilot/session-state/7d91c294-22d8-4619-a025-c0d034ff5c36/files/w7080-probe-2026-06-03.md - The vendored
dev-config.wingetat the version this playbook analysed:~/.copilot/session-state/7d91c294-22d8-4619-a025-c0d034ff5c36/files/dev-config-fetched.winget
Status + next session pickup¶
- Doc written: 3 Jun 2026 · session
7d91c294-... - VM dry-run: in progress at write time
- Decision pending: adopt next Sunday morning on W7080 OR expand VM test to ARM64 Hyper-V first — depends on VM dry-run findings
- Living doc: bump this file at every milestone (VM test results, atlas-overlay.winget v0.1, first adopted device, first cross-pollination ship)
Resume one-liner for next session:
Hey Atlas — read C:\ssClawy\learning-docs\docs\reference\windows-developer-config-playbook.md and pick up the next phase: vm-dry-run results + atlas-overlay.winget v0.1.