[automated] Merge branch 'main' => 'net11.0'#36798
Open
github-actions[bot] wants to merge 7 commits into
Open
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! ## Summary - Permanently remove the `/review rerun` comment job and its authorization, labeling, summary, and comment-minimization steps. - Explicitly reject the removed subcommand so it cannot fall through to the generic `/review` matcher. - Remove user-facing and agent-generated guidance that advertises the command. - Keep the rerun queue, scanner, and trusted workflow-dispatch infrastructure used by the automatic replacement in #36358. ## Testing - `Invoke-Pester -Path @('.github/scripts/ReviewTrigger.Tests.ps1', '.github/scripts/Post-AISummaryComment.Tests.ps1') -Output Detailed` - `gh aw compile leak-fixer` with gh-aw v0.82.14 --------- Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
<!-- !!!!!!! MAIN IS THE ONLY ACTIVE BRANCH. MAKE SURE THIS PR IS TARGETING MAIN. !!!!!!! --> ### Description of Change - Adds the recently released `10.0.90` and `11.0.0-preview.6` versions to the bug report issue template dropdowns.
…eed guidance (#36497) <!-- 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! ## Summary Release-readiness reports identified the right blockers, but did not always provide enough precise, safe instructions for a release captain or future agent to complete them. This PR makes the SR transition workflows explicit and test-backed. - Require a fix PR to be merged and verified on `main` before recommending `/backport to release/...`. - Document the Arcade backport path and the manual `git cherry-pick -x` conflict fallback. - Document and detect the SR servicing flip: preserve `PatchVersion`, set `PreReleaseVersionLabel=servicing`, and enable stable package versions only on the release branch. - Teach the next-cycle `main` bump as a separate one-file, one-line PR, including the exact title and XML edit. For SR9 → SR10 this is `Update PatchVersion from 90 to 100` and `<PatchVersion>90</PatchVersion>` → `<PatchVersion>100</PatchVersion>`. - Preserve `SdkBandVersion`, `PreReleaseVersionLabel=ci.main`, and `StabilizePackageVersion=false` on `main`, matching the SR7/SR8/SR9 precedent. - **Surface the per-build validation feed for the ship Assessment.** When a promoted BAR build exists for SR HEAD, `Get-MaestroOperationalChecks` now derives and emits the `darc-pub-dotnet-maui-<sha8>` NuGet feed URL (the `Ship Assessment validation feed` check) to paste into the DevDiv ship **Assessment**, plus the `darc get-asset` confirm command. It reports `WATCH` when the build isn't promoted — no default channel → no promotion → no feed → the Assessment has nothing to link (the SR9 miss). - Add focused coverage for backport recommendations, servicing transitions, the triple-digit SR9 → SR10 bump, promoted/unpromoted feed cases, and the valid post-ship/no-in-flight transition before the next SR branch is cut. - Keep preview readiness available when GitHub's GraphQL PR-list endpoint is unhealthy by falling back to bounded REST queries with conservative field mapping and complete merged-PR pagination. ## Release workflow captured | Operation | Target | Required behavior | |---|---|---| | Source fix backport | Merged source PR on `main` | Post `/backport to release/<branch>` only after main ancestry is verified | | SR stabilization | `release/<major>.0.1xx-sr<N>` | Keep its `PatchVersion`; switch to `servicing` and stable packages after the final backport | | Next-cycle preparation | `main` | Change only `PatchVersion` to `(N+1)*10`; keep SDK-band and CI prerelease settings unchanged | | Ship Assessment feed | `release/<major>.0.1xx-sr<N>` build | Add default channel → promote the build → link the per-build `darc-pub-dotnet-maui-<sha8>` feed in the DevDiv Assessment so CSI/customers can validate the exact candidate packages | ## What not to do - Do not recommend a backport command for a fix that exists only on `inflight/current`. - Do not combine the `main` next-cycle bump with the release branch servicing flip. - Do not change `SdkBandVersion` or copy servicing settings onto `main`. - Do not create the ship Assessment without the per-build validation feed — if the SR branch has no BAR default channel the build is never promoted and no `darc-pub-dotnet-maui-<sha8>` feed exists to link. - Do not let the report mutate release or `main` refs, or create channels / promote builds / edit the Assessment; the skill remains report-only (it only derives and surfaces the feed URL). ## Validation - The added and affected release-readiness assertions pass, including the exact SR9 → SR10 title/XML guidance, promoted (`READY`) / unpromoted (`WATCH`) feed cases, common-ancestry main-revert detection, the shipped-SR + next-candidate state with no in-flight SR, and GraphQL→REST PR-discovery fallback pagination. - The complete release-readiness harness reports **1069 passing assertions and 0 failures**. - A live preview-readiness smoke-run completed successfully through REST fallback while GitHub's GraphQL endpoint was returning HTTP 502. --------- Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com> Co-authored-by: kubaflo <kubaflo@users.noreply.github.com> Copilot-Session: cf5a6299-1e58-4157-b7fd-b85efaa14755 Copilot-Session: 04bf990b-a216-41df-aa75-08f62a1ecaf0 Copilot-Session: 136770fc-91e0-451c-8a4d-ea6a176f30e8 Copilot-Session: d00747b7-96f3-4e7a-8dfb-e3a48db04b2d Copilot-Session: 4c228cec-8795-4bd5-a86c-c3fede46d534
<!-- 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! ### Description of Change Automates visual snapshot evidence in `/review tests`. When public AzDO results contain failed screenshot comparisons, the command now emits exactly one test-failure analysis comment containing bounded, expandable baseline/actual/diff panels. Visual evidence remains supplementary: it does not change `gate.verdictCeiling`, deterministic attribution, or the merge-readiness verdict. #### One-comment flow 1. Trusted pre-activation code discovers failed visual results through the public AzDO `resultsbybuild` API, including retry-suffixed attachments such as `Snapshot[1].png` and `Snapshot-diff[1].png`. 2. It resolves baselines from the exact source version tested by AzDO and maps runtime evidence to the correct snapshot directory (`ios-26`, `android-notch-36`, `mac`, or `windows`). 3. It streams and validates bounded PNG assets, then stores them on `review-tests-assets` using immutable commit-pinned `raw.githubusercontent.com` URLs. 4. The Copilot agent emits the normal single `add_comment` analysis payload with a trusted insertion marker. 5. A sealed post-step validates the published asset manifest and injects as many expandable comparison panels as fit into that same comment. Each collapsed panel shows a conservative relationship label: - `Likely PR-caused` for an exact test/platform base regression or directly changed snapshot/test; - `Likely unrelated` for an exact base/known-issue match without direct visual scope; - `Needs human investigation` for unmatched or mixed evidence. 6. Excess comparisons are summarized as omitted instead of creating a companion comment. The local `.github/scripts/Review-Tests.ps1 -PostComment` path uses the same merger. It also recognizes complete reports returned in Copilot's final response, preserving nested evidence code fences without wrapping a second title or badge section. ### Security and Failure Safety - PR text, logs, test names, attachment metadata, changed files, and visual labels remain untrusted input. - The merger script and visual context are copied to a root-owned location before the workflow checks out the untrusted PR branch. - The post-step runs without `COPILOT_GITHUB_TOKEN`, `GH_TOKEN`, or `GITHUB_TOKEN`. - AzDO attachment URLs must match the expected public project and attachment route. - Published assets are size-bounded, signature-checked PNGs with validated dimensions and repository paths. - Raw image URLs must match the exact repository, asset commit, PR directory, and safe filename. - Labels are HTML-escaped and `@` is neutralized before insertion. - Relationship labels use fixed trusted text. Untrusted attribution values are never rendered, and same-named snapshots changed on another platform do not count as PR scope. - The final body is checked panel-by-panel against conservative limits of 45 URLs, 10 mentions, and 60,000 UTF-16 characters, below gh-aw's throwing limits. - The analysis JSON update is atomic (written to a temp file, then renamed over the original). Invalid context, malformed output, missing analysis payloads, limit failures, and dry-run/noop output leave the original analysis unchanged. - The publisher never creates or patches PR comments; only the existing gh-aw `add_comment` payload is mutated. ### What NOT to Do - Do not use the ordinary anonymous AzDO test-runs listing for discovery; it redirects to sign-in. Use the public failed-results endpoint. - Do not resolve baselines from the current PR head; use the source version actually tested by the selected AzDO build. - Do not let the agent construct or trust visual asset URLs. - Do not publish a second companion comment; merge bounded panels into the single analysis payload. ### Validation - 98 focused Pester tests pass. - Changed PowerShell scripts parse successfully. - `gh aw compile copilot-review-tests --approve` completes without errors or warnings. - A real `agent_output.json` from gh-aw run [29674953402](https://github.com/dotnet/maui/actions/runs/29674953402) was replayed through the post-step: - one `add_comment` item remained one item; - five visual panels were inserted; - the final body contained 26 URLs, one mention, and 9,585 characters. ### Live Single-Comment Examples The exact local `/review tests` path from this branch posted or repaired these merged comments after the PRs' `/azp run` pipelines completed: | PR | Single merged result | Included evidence | Relationship labels | Final limits | | --- | --- | --- | --- | --- | | #36413 | [Test-failure analysis with visual panels](#36413 (comment)) | 5 panels / 15 images | 1 PR-caused, 4 investigate | 23 URLs, 13,156 chars | | #36631 | [Test-failure analysis with visual panels](#36631 (comment)) | 6 panels / 18 images | 2 PR-caused, 4 investigate | 31 URLs, 21,367 chars | | #36395 | [Test-failure analysis with visual panels](#36395 (comment)) | 11 panels / 33 images; 19 omitted | 11 investigate | 43 URLs, 19,858 chars | | #36404 | [Test-failure analysis with visual panels](#36404 (comment)) | 14 panels / 40 images; 81 omitted | 14 investigate | 45 URLs, 23,779 chars | | #35846 | [Test-failure analysis with visual panels](#35846 (comment)) | 10 panels / 30 images; 9 omitted | 10 investigate | 43 URLs, 22,496 chars | | #36277 | [Test-failure analysis with visual panels](#36277 (comment)) | 7 panels / 19 images | 3 PR-caused, 4 investigate | 31 URLs, 18,355 chars | | #36170 | [Test-failure analysis with visual panels](#36170 (comment)) | 11 panels / 33 images; 8 omitted | 11 investigate | 44 URLs, 23,180 chars | | #35578 | [Test-failure analysis with visual panels](#35578 (comment)) | 12 panels / 36 images; 50 omitted | 12 investigate | 44 URLs, 25,443 chars | | #36672 | [Test-failure analysis with visual panels](#36672 (comment)) | 14 panels / 40 images; 9 omitted | 14 investigate | 45 URLs, 25,915 chars | | #31755 | [Test-failure analysis with visual panels](#31755 (comment)) | 12 panels / 36 images; 3 omitted | 12 investigate | 44 URLs, 22,728 chars | | #34637 | [Test-failure analysis with visual panels](#34637 (comment)) | 9 panels / 27 images; 81 omitted | 9 investigate | 43 URLs, 22,325 chars | | #35156 | [Test-failure analysis with visual panels](#35156 (comment)) | 2 panels / 6 images | 1 PR-caused, 1 investigate | 19 URLs, 11,911 chars | | #35885 | [Test-failure analysis with no visual failures](#35885 (comment)) | 0 panels / 0 images | No visual failures detected | 8 URLs, 4,239 chars | | #36577 | [Test-failure analysis with visual panels](#36577 (comment)) | 1 panel / 3 images | 1 investigate | 44 URLs, 21,768 chars | | #36212 | [Test-failure analysis with no visual failures](#36212 (comment)) | 0 panels / 0 images | No visual failures detected | 5 URLs, 5,982 chars | Each result contains one `Tests Failure Analysis` title and one merged review marker. Across 114 rendered panels, all 336 embedded image URLs returned HTTP 200. Seven panels were safely classified as likely PR-caused; no panel in this sample had enough exact evidence to be safely classified as likely unrelated, so the remaining 107 stayed at `Needs human investigation`. Another 260 comparisons were omitted safely by the comment limits. The latest eight-example batch was regenerated concurrently, and #36672, #31755, #34637, #35156, #35885, #36577, and #36212 were added afterward. The current [`review-tests-assets` head](f937993) retains the full asset history. The protected `copilot-pat-pool` environment rejects feature-branch `workflow_dispatch` runs before job execution. The live local-runner examples validate comment generation and asset publication, while the real gh-aw output replay validates the workflow post-step mutation without weakening that branch protection. ### Issues Fixed N/A - reviewer workflow enhancement. --------- Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Co-authored-by: kubaflo <kubaflo@users.noreply.github.com> Copilot-Session: a280b482-e102-4ca0-9ff9-1cfe1946e21f Copilot-Session: d00747b7-96f3-4e7a-8dfb-e3a48db04b2d Copilot-Session: 478d195b-20f3-4bc6-aeed-f6aa88b55fda
<!-- 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! ### Description of Change Set `tools.github.integrity-proxy: false` for the regression-corpus scanner's deterministic pre-agent `gh` calls while retaining `min-integrity: approved` for every agent MCP read. The scanner continues to emit only validated structural IDs, labels, and merge SHAs; fetched prose never enters the agent prompt. The generated lock file is updated in the same commit. ### Root Cause The deterministic pre-activation pass inherited gh-aw's integrity proxy because the agent uses `min-integrity: approved`. The proxy redacted maintainer-authored attribution fields before `Find-RegressionFixPRs.ps1` could apply its own OWNER/MEMBER/COLLABORATOR checks, so [production run 29947778128](https://github.com/dotnet/maui/actions/runs/29947778128) completed successfully but emitted `usableCount: 0` and opened no draft PR. The two trust boundaries remain separate: the pre-pass applies its deterministic maintainer-association validation to live REST data, while the agent's GitHub MCP gateway still enforces approved integrity. ### Validation - 77 Pester tests passed - Production-shaped scan resolved fix PR #35768 to introducing PR #31931 at `af540589fc5a3b053cd8c08334d0ca5a0125451b`, source `pr-body`, with `usableCount: 1` - `gh aw compile regression-corpus-scanner --strict`: 0 errors, 0 warnings; recompilation parity confirmed - Generated `pre_activation` contains no integrity/CLI proxy injection; agent MCP remains `min-integrity: approved` - Vally 0.10 strict lint passed for the code-review eval corpus - Three independent adversarial reviewers found no significant issues (3/3 consensus) ### Issues Fixed N/A - fixes the regression-corpus scanner behavior observed in the linked production run. Co-authored-by: PureWeen <223556219+Copilot@users.noreply.github.com> Copilot-Session: e0da256b-eef3-41b1-b532-0d8557106c0c
<!-- 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! Context: #24744 Context: #24952 ### Description of Change `Java.Interop.ExportAttribute` is annotated with `[RequiresUnreferencedCode]`, so every use of `[Export]` produces an IL2026 trim warning and depends on `Java.Interop.Export.dll` reflection at runtime. #24744 established the alternative: declare an abstract class in `src/Core/AndroidNative` and `override` it, which lets the Java Callable Wrapper generator emit the method — and its `@android.webkit.JavascriptInterface` annotation — statically. This adds `T:Java.Interop.ExportAttribute` to `eng/BannedSymbols.txt` so the pattern is enforced by RS0030 going forward, instead of relying on reviewers to catch it. The message points at `HybridJavaScriptInterface.java` as the working example: ``` T:Java.Interop.ExportAttribute;[Export] pulls in Java.Interop.Export dynamic features that are not trimming or AOT friendly. Declare an abstract class in src/Core/AndroidNative and override it instead, see src/Core/AndroidNative/maui/src/main/java/com/microsoft/maui/HybridJavaScriptInterface.java ``` Adding the ban flagged the one remaining offender, `RefreshViewWebViewScrollCapture.ScrollCaptureState.SetCanScrollUp()`: ``` src/Core/src/Platform/Android/RefreshViewWebViewScrollCapture.cs(209,4): error RS0030: The symbol 'Java.Interop.ExportAttribute' is banned in this project: [Export] pulls in Java.Interop.Export dynamic features that are not trimming or AOT friendly. ... ``` So it is fixed the same way #24744 did: a new `RefreshViewJavaScriptInterface` abstract class in the `maui.aar` Java sources, with `ScrollCaptureState` deriving from it. The `[RequiresUnreferencedCode("Java.Interop.Export uses dynamic features.")]` suppression on `SetCanScrollUp()` is no longer needed and is removed. Note the base type is deliberately an **abstract class** and not an interface. #24952 reverted `HybridJavaScriptInterface` from an interface back to a class because Java does not inherit method annotations from interfaces — the generated JCW silently lost `@android.webkit.JavascriptInterface` and the JavaScript bridge stopped working. The same applies here. The remaining `[Export]` usages in the repo are all `Foundation.ExportAttribute` (Apple), which is a different type and is unaffected by this ban. ### Issues Fixed None; this is a proactive lint rule plus the one cleanup it surfaced. ### Testing Verified locally by building `src/Core/src/Core.csproj` for `net10.0-android36.0`: - **Before the fix** — build fails with `error RS0030` at `RefreshViewWebViewScrollCapture.cs(209,4)`, confirming the new banned-symbol entry is actually enforced. - **After the fix** — `Microsoft.Maui.dll` builds clean, including the Gradle step that compiles the new Java file into `maui.aar`. No behavior change is expected at runtime: the exported Java method name is still `setCanScrollUp`, and `[JavascriptInterface]` remains on the C# override, matching the shipping `HybridWebViewHandler` pattern. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> Copilot-Session: 7fb11a38-1848-4bb2-8b5c-7853dcad56bb
Reset patterns: - global.json - NuGet.config - eng/Version.Details.xml - eng/Versions.props - eng/common/*
|
Azure Pipelines: Successfully started running 1 pipeline(s). There may be pipelines that require an authorized user to comment /azp run to run. |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
I detected changes in the main branch which have not been merged yet to net11.0. I'm a robot and am configured to help you automatically keep net11.0 up to date, so I've opened this PR.
This PR merges commits made on main by the following committers:
Instructions for merging from UI
This PR will not be auto-merged. When pull request checks pass, complete this PR by creating a merge commit, not a squash or rebase commit.
If this repo does not allow creating merge commits from the GitHub UI, use command line instructions.
Instructions for merging via command line
Run these commands to merge this pull request from the command line.
or if you are using SSH
After PR checks are complete push the branch
Instructions for resolving conflicts
Instructions for updating this pull request
Contributors to this repo have permission update this pull request by pushing to the branch 'merge/main-to-net11.0'. This can be done to resolve conflicts or make other changes to this pull request before it is merged.
The provided examples assume that the remote is named 'origin'. If you have a different remote name, please replace 'origin' with the name of your remote.
or if you are using SSH
Contact .NET Core Engineering (dotnet/dnceng) if you have questions or issues.
Also, if this PR was generated incorrectly, help us fix it. See https://github.com/dotnet/arcade/blob/main/.github/workflows/scripts/inter-branch-merge.ps1.