Update WinAppSDK to 1.8.260508005#35678
Conversation
<!-- Please let the below note in for people that find this PR --> > [!NOTE] > Are you waiting for the changes in this PR to be merged? > It would be very helpful if you could [test the resulting artifacts](https://github.com/dotnet/maui/wiki/Testing-PR-Builds) from this PR and let us know in a comment if this change resolves your issue. Thank you! ## What Restrict the agentic-labeler to apply **exactly one `area-*` label** per item, while still allowing multiple `platform/*` labels. ## Why Backfilling the 26 items affected by the `max:1` bug (fixed in #35540) revealed that the labeler occasionally applies multiple `area-*` labels for ambiguous cases: - **#35501** got both `area-layout` and `area-safearea` - **#35490** got both `area-navigation` and `area-controls-tabbedpage` The intended behavior is exactly one best-fit `area-*` per item (a label-quota distinction not expressible via `safe-outputs.add-labels.max:` — that field counts total labels, not labels per prefix). The fix has to live in the agent's instructions. ## Changes ### `.github/skills/agentic-labeler/SKILL.md` - Scope section: "Exactly one `area-*`" / "One or more `platform/*`". - Area rules section: renamed heading, changed "pick one or more" → "apply exactly one". - New **tie-breaking heuristics** for the area-* selection: - Specific control beats generic area (`area-controls-tabbedpage` over `area-navigation`) - Sub-area beats parent area (`area-safearea` over `area-layout`) - Subject-matter focus beats incidental touch - When genuinely tied, prefer the user-visible feature - Mixed-PR rule clarified: infra-primary PRs get only `area-infrastructure` (no second product area). ### `.github/workflows/agentic-labeler.md` - Added explicit reinforcement in the workflow prompt: "Apply exactly one `area-*` label … and one or more `platform/*` labels". - Fixed two stale `max: 1` comments left over from #35540 (the cap is now `max: 10`). ### `.github/workflows/agentic-labeler.lock.yml` - Regenerated via `gh aw compile`. Diff is frontmatter-hash + heredoc rotations only — no semantic change to the compiled config. ## Validation - Reviewed all 21 existing eval scenarios in `tests/eval.yaml` — none assert multiple `area-*` labels, so no test updates needed. - The `max: 10` cap in `safe-outputs` is preserved as a blast-radius safeguard (one area + several platforms still fit comfortably). ## Follow-ups (not in this PR) If accuracy of the "one area" rule drops below ~95% in eval runs, consider adding a deterministic post-step that strips extra `area-*` labels per a known precedence list (Option B from the design discussion). Co-authored-by: bot <bot@test> Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
## Description
Extends the `maui-copilot` DevDiv pipeline (pipeline 27723) with a
3-stage architecture that runs real UI tests on platform-pool agents and
reports results directly in the AI summary PR comment.
### Pipeline Workflow
```
┌─────────────────────────────────────────────────────────┐
│ Stage 1: ReviewPR │
│ │
│ STEP 1: Branch Setup (checkout + cherry-pick PR) │
│ STEP 2: Detect UI Test Categories │
│ STEP 3: Run Detected UI Tests (in-process, fast) │
│ STEP 4: Regression Cross-Reference │
│ STEP 5: Gate — verify tests fail/pass before/after fix │
│ STEP 6: Code Review — deep analysis via Copilot agent │
│ │
│ Outputs → CopilotLogs artifact + detectedCategories │
└──────────────────────┬──────────────────────────────────┘
│
┌──────────────────────▼──────────────────────────────────┐
│ Stage 2: RunDeepUITests (platform-pool agent) │
│ │
│ iOS: AcesShared Tahoe + iOS 26.4 │
│ Android: ubuntu-22.04 + KVM + AVD │
│ │
│ Runs BuildAndRunHostApp.ps1 per detected category │
│ Outputs → drop-deep-uitests artifact (TRX + diffs) │
└──────────────────────┬──────────────────────────────────┘
│
┌──────────────────────▼──────────────────────────────────┐
│ Stage 3: PostResults │
│ │
│ 1. Download CopilotLogs (review content files) │
│ 2. Download drop-deep-uitests (TRX results) │
│ 3. Merge deep results into uitests/content.md │
│ 4. Post full AI Summary comment on PR │
│ 5. Apply labels (s/agent-reviewed, etc.) │
│ │
│ One comment with everything — no patching needed │
└─────────────────────────────────────────────────────────┘
```
### What's New
**Deep UI Test Execution (Stage 2)**
- Runs detected UI test categories on proper platform-pool agents (not
in-process on Linux)
- **iOS**: AcesShared Tahoe agents with iOS 26.4 simulator, iPhone 11
Pro (matching `ios-26` baselines from PR #35061)
- **Android**: ubuntu-22.04 with KVM, AVD boot with `-partition-size
2048`, `ignoreHiddenApiPolicyError` capability
- TRX results + snapshot-diff PNGs published as `drop-deep-uitests`
artifact
**Unified Comment Posting (Stage 3)**
- Comment posting and label application deferred to Stage 3 (after deep
tests complete)
- Single AI summary comment includes ALL results: code review + deep
test results
- Nested collapsible `<details>` for failed tests with full error +
stack trace
- Dynamic section title: `🧪 UI Tests — CollectionView, TabbedPage`
- Artifact download link for snapshot-diff PNGs
**Android Emulator Improvements**
- AVD boot step with proper partition size, ADB key pre-authorization,
boot wait
- `DEVICE_UDID` pass-through prevents double emulator boot
- Disk cleanup on hosted ubuntu agents (frees ~22GB)
- KVM enablement + `appium:ignoreHiddenApiPolicyError` for API 30
**iOS Simulator Improvements**
- Tahoe pool demand ensures macOS 26.x agents
- Explicit iOS 26.4 download via latest Xcode
- Auto-creates iPhone 11 Pro for baseline resolution match
### Validation
Tested across 30+ pipeline iterations on 6 PRs:
| PR | iOS | Android |
|---|---|---|
| 35358 (ViewBaseTests) | **112/112 ALL PASS** ✅ | **118/119 PASS** ✅ |
| 35359 (TabbedPage) | 44/50 (1 real failure) | 74/75 (1 real failure) |
| 35356 (CollectionView) | **415/417 PASS** ✅ | 593/619 (26 real
failures) |
---------
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
> [!NOTE] > Are you waiting for the changes in this PR to be merged? > It would be very helpful if you could [test the resulting artifacts](https://github.com/dotnet/maui/wiki/Testing-PR-Builds) from this PR and let us know in a comment if this change resolves your issue. Thank you! Backport of #35460 to `main`. /cc @PureWeen Co-authored-by: HarishKumarSF4517 <harish.kumar@syncfusion.com>
### Description of Change https://github.com/GitOps-microsoft/GitOps.PullRequestIssueManagement/pull/262 (internal Microsoft link) changed the `${issueAuthor}` placeholder to include the `@` character. Remove the one we added so we don't duplicate it. --------- Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
|
🚀 Dogfood this PR with:
curl -fsSL https://raw.githubusercontent.com/dotnet/maui/main/eng/scripts/get-maui-pr.sh | bash -s -- 35678Or
iex "& { $(irm https://raw.githubusercontent.com/dotnet/maui/main/eng/scripts/get-maui-pr.ps1) } 35678" |
|
/review -b feature/enhanced-reviewer |
|
/azp run |
|
Azure Pipelines successfully started running 3 pipeline(s). |
MauiBot
left a comment
There was a problem hiding this comment.
AI Review Summary
@kubaflo — new AI review results are available based on this last commit:
939653b.
Update WinAppSDK to 1.8.260508005
Review Sessions — click to expand
Gate — Test Before & After Fix
Gate Result: ⚠️ SKIPPED
No tests were detected in this PR.
Recommendation: Add tests to verify the fix using the write-tests-agent.
Pre-Flight — Context & Validation
Issue: N/A - No linked issue
PR: #35678 - Update WinAppSDK to 1.8.260508005
Platforms Affected: Windows (dependency update); requested test platform: android
Files Changed: 1 implementation, 0 test
Key Findings
- PR updates
MicrosoftWindowsAppSDKPackageVersionineng/Versions.propsfrom1.8.251106002to1.8.260508005. - No tests were detected by the prior gate step; the gate result was skipped and was not re-run.
- The change has no direct Android code path impact; Android testing can only validate that cross-platform restore/build inputs are not regressed.
Code Review Summary
Verdict: LGTM
Confidence: medium
Errors: 0 | Warnings: 0 | Suggestions: 0
Key code review findings:
- No correctness findings from the dependency-version diff.
Fix Candidates
| # | Source | Approach | Test Result | Files Changed | Notes |
|---|---|---|---|---|---|
| PR | PR #35678 | Update MicrosoftWindowsAppSDKPackageVersion to 1.8.260508005 |
eng/Versions.props |
Original PR |
Code Review — Deep Analysis
Code Review — PR #35678
Independent Assessment
What this changes: Updates the Windows App SDK package version in eng/Versions.props from 1.8.251106002 to 1.8.260508005.
Inferred motivation: Consume the latest Windows App SDK 1.8 servicing build used by MAUI Windows packaging/builds.
Reconciliation with PR Narrative
Author claims: The PR updates WinAppSDK to 1.8.260508005 and replaces an earlier servicing update PR.
Agreement/disagreement: The diff matches the stated dependency update exactly.
Findings
No correctness findings.
Devil's Advocate
The change is Windows-only dependency flow, so Android-specific testing is not relevant. The main risk is dependency availability/restore compatibility, which requires package restore/build validation rather than source-level code changes.
Verdict: LGTM
Confidence: medium
Summary: The source change is a single version bump and is consistent with the PR narrative. No MAUI handler/platform code paths are modified.
Fix — Analysis & Comparison
Fix Candidates
| # | Source | Approach | Test Result | Files Changed | Notes |
|---|---|---|---|---|---|
| 1 | try-fix-1 | Update eng/Version.Details.xml dependency metadata only |
❌ FAIL | 1 file | MSBuild property stayed at baseline 1.8.251106002; metadata does not drive package version replacement. |
| 2 | try-fix-2 | Hard-code Microsoft.WindowsAppSDK PackageVersion item in eng/NuGetVersions.targets |
❌ FAIL | 1 file | Bypasses one package consumer but leaves central property/workload replacements stale. |
| 3 | try-fix-3 | Update central property and also align eng/Version.Details.xml metadata |
✅ TARGETED VALIDATION PASSED | 2 files | Mechanically works, but not demonstrably better; Version.Details.xml placeholder may be intentional dependency-flow behavior. |
| PR | PR #35678 | Update MicrosoftWindowsAppSDKPackageVersion in eng/Versions.props |
1 file | Original PR; simplest source-of-truth update. |
Iterative Learnings
| Candidate | Lesson fed into next attempt |
|---|---|
| 1 | Version.Details.xml does not define MicrosoftWindowsAppSDKPackageVersion; a viable fix must touch the MSBuild property or every consumer. |
| 2 | Consumer-level overrides split the version source of truth and miss workload metadata replacement; keep eng/Versions.props authoritative. |
| 3 | Adding metadata alignment is mechanically valid but introduces dependency-flow uncertainty, so it is not clearly superior to the PR's direct property bump. |
Cross-Pollination
| Model/Reviewer Loop | Round | New Ideas? | Details |
|---|---|---|---|
| Expert review loop | 1 | Yes | Try dependency-flow metadata only to avoid touching package property. |
| Expert review loop | 2 | Yes | Try consumer-level package override after metadata-only failed. |
| Expert review loop | 3 | Yes | Try central property plus metadata alignment after source-of-truth split failed. |
| Expert review loop | 4 | No | Remaining variants are trivial variations of the same central property update or riskier dependency-flow changes. |
Exhausted: Yes
Selected Fix: PR's fix — it is the simplest and safest source-of-truth update. Candidate #3 passed targeted validation but is not demonstrably better because changing the Version.Details.xml placeholder could alter dependency-flow semantics.
Candidate Details
Try-Fix Candidate 1: Dependency-flow metadata only
Approach Description
Update eng/Version.Details.xml from placeholder 0.0.1 to 1.8.260508005, leaving eng/Versions.props at the broken baseline value.
Diff
diff --git a/eng/Version.Details.xml b/eng/Version.Details.xml
index acff08c44c..31736d7d74 100644
--- a/eng/Version.Details.xml
+++ b/eng/Version.Details.xml
@@ -51,7 +51,7 @@
<Uri>https://github.com/dotnet/macios</Uri>
<Sha>e5afbf5332820488c4a2d26dad02df88c0110136</Sha>
</Dependency>
- <Dependency Name="Microsoft.WindowsAppSDK" Version="0.0.1">
+ <Dependency Name="Microsoft.WindowsAppSDK" Version="1.8.260508005">
<Uri>https://dev.azure.com/microsoft/ProjectReunion/_git/ProjectReunionInternal</Uri>
</Dependency>
<Dependency Name="Microsoft.AspNetCore.Authorization" Version="10.0.0">Test Results
Test command: dotnet msbuild src/Core/src/Core.csproj -getProperty:MicrosoftWindowsAppSDKPackageVersion -p:TargetFramework=net10.0-android -v:quiet
1.8.251106002
Expected: 1.8.260508005
FAIL: property did not resolve to 1.8.260508005
Failure Analysis
Failed. Version.Details.xml is not the source of the MicrosoftWindowsAppSDKPackageVersion MSBuild property, so Android-targeted MSBuild evaluation still resolved the old baseline version.
Try-Fix Candidate 2: Override package item literal
Approach Description
Change the Microsoft.WindowsAppSDK PackageVersion item in eng/NuGetVersions.targets to the target literal version while leaving eng/Versions.props at the broken baseline value.
Diff
diff --git a/eng/NuGetVersions.targets b/eng/NuGetVersions.targets
index 1c4fd496bc..9f2dddcf7c 100644
--- a/eng/NuGetVersions.targets
+++ b/eng/NuGetVersions.targets
@@ -154,7 +154,7 @@
/>
<PackageReference
Update="Microsoft.WindowsAppSDK"
- Version="$(MicrosoftWindowsAppSDKPackageVersion)"
+ Version="1.8.260508005"
NoWarn="NU1605"
/>
<PackageReferenceTest Results
Test command 1: dotnet msbuild src/Core/src/Core.csproj -getProperty:MicrosoftWindowsAppSDKPackageVersion -p:TargetFramework=net10.0-android -v:quiet
1.8.251106002
Test command 2: grep WorkloadDependencies.in.json template still uses @MicrosoftWindowsAppSDKPackageVersion@ resolved from property
Expected property/template source: 1.8.260508005
FAIL: central property remains at baseline, so workload dependency replacement would still use old version.
Failure Analysis
Failed. This bypasses one consumer but leaves the central property stale, so workload metadata and any property replacement still produce the old version.
Try-Fix Candidate 3: Central property plus dependency metadata
Approach Description
Update the central MSBuild property in eng/Versions.props and also align eng/Version.Details.xml for Microsoft.WindowsAppSDK to 1.8.260508005.
Diff
diff --git a/eng/Version.Details.xml b/eng/Version.Details.xml
index acff08c44c..31736d7d74 100644
--- a/eng/Version.Details.xml
+++ b/eng/Version.Details.xml
@@ -51,7 +51,7 @@
<Uri>https://github.com/dotnet/macios</Uri>
<Sha>e5afbf5332820488c4a2d26dad02df88c0110136</Sha>
</Dependency>
- <Dependency Name="Microsoft.WindowsAppSDK" Version="0.0.1">
+ <Dependency Name="Microsoft.WindowsAppSDK" Version="1.8.260508005">
<Uri>https://dev.azure.com/microsoft/ProjectReunion/_git/ProjectReunionInternal</Uri>
</Dependency>
<Dependency Name="Microsoft.AspNetCore.Authorization" Version="10.0.0">
diff --git a/eng/Versions.props b/eng/Versions.props
index e127635424..8948c7423b 100644
--- a/eng/Versions.props
+++ b/eng/Versions.props
@@ -79,7 +79,7 @@
<!-- Samsung/Tizen.NET -->
<SamsungTizenSdkPackageVersion>8.0.148</SamsungTizenSdkPackageVersion>
<!-- wasdk -->
- <MicrosoftWindowsAppSDKPackageVersion>1.8.251106002</MicrosoftWindowsAppSDKPackageVersion>
+ <MicrosoftWindowsAppSDKPackageVersion>1.8.260508005</MicrosoftWindowsAppSDKPackageVersion>
<MicrosoftWindowsSDKBuildToolsPackageVersion>10.0.26100.4654</MicrosoftWindowsSDKBuildToolsPackageVersion>
<MicrosoftGraphicsWin2DPackageVersion>1.3.2</MicrosoftGraphicsWin2DPackageVersion>
<MicrosoftWindowsWebView2PackageVersion>1.0.3179.45</MicrosoftWindowsWebView2PackageVersion>Test Results
Test command 1: dotnet msbuild src/Core/src/Core.csproj -getProperty:MicrosoftWindowsAppSDKPackageVersion -p:TargetFramework=net10.0-android -v:quiet
1.8.260508005
Expected: 1.8.260508005
Test command 2: check Version.Details.xml metadata matches target version
54: <Dependency Name="Microsoft.WindowsAppSDK" Version="1.8.260508005">
Failure Analysis
No targeted-validation failure. However, this candidate is not demonstrably better than the PR because Version.Details.xml currently pins Microsoft.WindowsAppSDK to placeholder 0.0.1; changing it may unintentionally alter dependency-flow behavior for an external dependency.
Report — Final Recommendation
Comparative Report — PR #35678
Candidates compared
| Rank | Candidate | Result | Assessment |
|---|---|---|---|
| 1 | pr |
Best candidate. It updates the authoritative MicrosoftWindowsAppSDKPackageVersion property in eng/Versions.props, which is the source used by package references and workload replacement paths. |
|
| 1 | pr-plus-reviewer |
Equivalent to pr because the expert reviewer found no actionable issues and produced no patch. |
|
| 3 | try-fix-3 |
✅ Targeted validation passed | Also works mechanically by updating the central property, but adds a Version.Details.xml change from the existing 0.0.1 placeholder to the real Windows App SDK version. That extra dependency-flow metadata change is not shown to be necessary and may alter intentional dependency-flow behavior. |
| 4 | try-fix-1 |
❌ Failed regression validation | Updates only eng/Version.Details.xml; targeted MSBuild evaluation still resolved MicrosoftWindowsAppSDKPackageVersion to the old baseline 1.8.251106002. |
| 5 | try-fix-2 |
❌ Failed regression validation | Hard-codes the package reference item but leaves the central property stale, so workload/template replacements and any property consumers continue to use the old version. |
Analysis
try-fix-1 and try-fix-2 must rank below the passing candidates because both failed targeted regression checks. try-fix-3 passed targeted validation, but its additional Version.Details.xml update is not required for the observed fix and changes a placeholder that may intentionally avoid normal Maestro dependency-flow semantics for this external dependency.
The expert reviewer found the raw PR fix consistent with MAUI dependency-version conventions and produced no inline findings. Because pr-plus-reviewer has no actual delta from pr, the simplest winning candidate is the raw PR fix.
Winner
Winner: pr
The PR fix is the narrowest correct source-of-truth update. It avoids the failed approaches that leave the central property stale and avoids the unnecessary dependency-flow metadata change from try-fix-3.
Future Action — review latest findings
No alternative fix was selected for this run. Review the session findings and CI results before merging.
<!-- Please let the below note in for people that find this PR --> > [!NOTE] > Are you waiting for the changes in this PR to be merged? > It would be very helpful if you could [test the resulting artifacts](https://github.com/dotnet/maui/wiki/Testing-PR-Builds) from this PR and let us know in a comment if this change resolves your issue. Thank you! Updates the Windows App SDK (WinAppSDK) package version from `1.8.251106002` to `1.8.260508005`. This replaces #33850 with the latest listed stable 1.8 servicing build available on NuGet. ## Changes Made - Updated `MicrosoftWindowsAppSDKPackageVersion` in `eng/Versions.props`. ---------
Note
Are you waiting for the changes in this PR to be merged?
It would be very helpful if you could test the resulting artifacts from this PR and let us know in a comment if this change resolves your issue. Thank you!
Updates the Windows App SDK (WinAppSDK) package version from
1.8.251106002to1.8.260508005.This replaces #33850 with the latest listed stable 1.8 servicing build available on NuGet.
Changes Made
MicrosoftWindowsAppSDKPackageVersionineng/Versions.props.