Repository navigation
fix(ci): restore Store upgrades when runner update state is stale - #189
Conversation
|
🦞👀 Pull request received. I will update this pull request when review starts. ClawSweeper review completeClawSweeper finished reviewing this revision. The review result is being finalized. |
|
Codex review: needs maintainer review before merge. What this changesThis PR refreshes Windows Update delivery state before the Store-upgrade test on disposable GitHub-hosted Windows runners. Example: CI installs Store product 9NV70LV3D6XC before testing a candidate bundle.
Review scores
ProductKind: Bug fix · Worth it: Yes · Fix scope: Complete Merge readiness✅ Ready for maintainer review Keep this PR open: it is a focused, maintainer-authored repair absent from main, and source review found no actionable defect. Priority: P2 Before mergeNone. FindingsNone. Tests
Agent review detailsHow this fits togetherThe release workflow builds candidate packages and runs isolated upgrade scenarios whose results gate release authorization; this change prepares only the Store scenario's runner. flowchart TD
A[Candidate bundles] --> B[Upgrade matrix]
B --> C[Store runner preparation]
C --> D[Store baseline installation]
D --> E[Candidate upgrade and state checks]
B --> F[Other upgrade scenarios]
E --> G[Release authorization gate]
F --> G
Technical reviewBest possible solution: Keep runner preparation in the existing Store matrix entry while preserving the single installation attempt and all upgrade gates. Do we have a high-confidence way to reproduce the issue? The PR records a same-runner failure and recovery experiment, and the merged submission PR documents the failure on main; this review did not independently reproduce it on Windows. Is this the best way to solve the issue? The preparation targets the failing runner prerequisite at its workflow boundary, preserves the original error if restart also fails, and avoids adding recovery behavior to the installed product. AGENTS.md: found and applied where relevant. Codex review notes: model internal, reasoning medium; reviewed against b50ec33561a7. Provenance checked
TestingProof path: in-process harness. SecurityNone. EvidenceWhat I checked:
Likely related people:
LabelsLabel changes:
Label justifications:
Rank-up movesOptional improvements that raise the rating; they are not merge blockers.
Rating scale6/6 🦀 challenger crab · 5/6 🦞 diamond lobster · 4/6 🐚 platinum hermit · 3/6 🦐 gold shrimp · 2/6 🦪 silver shellfish · 1/6 🧂 unranked krab. Overall follows the weaker of proof and patch quality; ✨ marks media proof (a screenshot, video, or linked artifact) that directly shows the changed behavior. WorkflowClawSweeper edits this one comment on every review. Comment Reviewed October 22, 2026, 3:29 AM ET / 07:29 UTC. |
What Problem This Solves
Fixes: the Store upgrade CI test fails with
0x80244007when a hosted runner retains stale Windows Update delivery state.User Impact
Contributors can run the existing Store-to-candidate upgrade proof with fresh delivery state. No installed-product behavior, Partner Center configuration, signing policy, or release publication changes. The reset is confined to the disposable GitHub-hosted Windows runner and only the Store upgrade matrix entry.
Why This Change Was Made
A standalone hosted reproduction exposed Windows Update SOAP
ConfigChangedduringGetExtendedUpdateInfo2, before the candidate package was involved. Gateway and an unrelated Store product both failed. Resetting Windows Update state on that same runner restored the Gateway install.Prepare fresh delivery state before the test's single install attempt: stop
wuauserv, renameSoftwareDistribution(retain it until runner disposal), and restart the service. Reject other runner environments and bound preparation to two minutes. Preparation and restart failures remain failures; a secondary restart error cannot replace the original error. No retries, skips, weakened upgrade assertions, or local-machine recovery hook.The existing workflow contract suite executes the actual step against temporary filesystem fixtures and mocked services, covering eight success/guard/failure scenarios.
Evidence
Current PR head:
c6dd70e275856a8b2a49a4b607d31cd5ced7e86f, based onb50ec33561a7a429587649ab07977321025c421f.Fresh local validation (PowerShell 7 on macOS):
pwsh -NoProfile -File scripts/Test-WorkflowSigningConfiguration.ps1: passed, including all eight Store preparation scenarios.TEMP=/tmp pwsh -NoProfile -File scripts/Test-SigningInputs.Tests.ps1: passed. First invocation withoutTEMPfailed because the Windows-oriented suite expects that variable; rerun supplied the host temporary directory without changing source.scripts/Test-MSIXUpgradeMatrix.Tests.ps1,scripts/Test-MSIXUpgradeSafety.Tests.ps1, andscripts/Test-WorkflowPackageVersion.Tests.ps1: passed.actionlint -ignore 'unexpected key "cache-mode"' .github/workflows/gateway-msix.yml: passed. Stock actionlint rejects the repository's 12 existingcache-modeextension entries on main too; only that known extension diagnostic was excluded.git diff --check: passed.Prior native causal proof, not presented as current-head execution:
ConfigChanged, zero download metadata, no repository candidate involved.84f72a78bafeedf3c2a2379476efca5541f68665: Gateway and control product failed before reset; after reset,GetExtendedUpdateInfo2succeeded andAFTER_CACHE_REFRESH_INSTALL_EXIT=0. The diagnostic job deliberately retained the original failure exit, so its overall red conclusion is expected.2026.10.400.0; probe registration and task directory were removed. No Windows Update reset was applied to that VM.Current-head hosted full package/Store-upgrade proof is running in CI. Managed build, NativeAOT, and live signing/submission were not run locally: this changes only the CI preparation step and its contract tests. No claim of passing current-head Store upgrade proof or merge readiness yet.
Maintainer edits: this branch is in the canonical repository and uses normal repository write permissions. GitHub rejects
maintainer_can_modify=truefor same-repository PRs because that flag applies only to forks.