Skip to content

Remove MAUI compatibility package#35870

Open
jfversluis wants to merge 2 commits into
net11.0from
jfversluis/remove-compatibility-package
Open

Remove MAUI compatibility package#35870
jfversluis wants to merge 2 commits into
net11.0from
jfversluis/remove-compatibility-package

Conversation

@jfversluis

@jfversluis jfversluis commented Jun 11, 2026

Copy link
Copy Markdown
Member

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!

@PureWeen tagging you for visibility on this compatibility package removal.

Description

This stops building and shipping the opt-in Microsoft.Maui.Controls.Compatibility package used for Xamarin.Forms migration compatibility.

Changes include:

  • remove the Compatibility package from MAUI package solution filters and the workload manifest
  • remove explicit Compatibility package/project references from samples and tests
  • remove compatibility unit-test mappings from helper scripts
  • delete src/Compatibility and the legacy Compatibility gallery solution
  • update docs and sample/test URLs that pointed at deleted Compatibility gallery assets

This intentionally leaves the compatibility-named code compiled into Microsoft.Maui.Controls.Core intact because current controls still use those handlers/layout bases without referencing the optional package.

Breaking change

Projects that explicitly reference Microsoft.Maui.Controls.Compatibility or rely on Xamarin.Forms compatibility renderers from that opt-in package will need to migrate off that package before moving to .NET 11. Normal MAUI apps that only reference Microsoft.Maui.Controls do not implicitly reference this package.

Validation

  • dotnet restore src/Controls/tests/Core.UnitTests/Controls.Core.UnitTests.csproj --nologo -v:minimal
  • dotnet test src/Controls/tests/Core.UnitTests/Controls.Core.UnitTests.csproj --no-restore --nologo -v:minimal --filter FullyQualifiedName~LayoutCompatTests
  • dotnet restore eng/Microsoft.Maui.Packages-mac.slnf --nologo -v:minimal
  • dotnet build eng/Microsoft.Maui.Packages-mac.slnf --no-restore --nologo -v:minimal was attempted on net11.0, but this local machine is missing Android API 37.0 and fails with XA5207 before completing the package build.

@github-actions

github-actions Bot commented Jun 11, 2026

Copy link
Copy Markdown
Contributor

🚀 Dogfood this PR with:

⚠️ WARNING: Do not do this without first carefully reviewing the code of this PR to satisfy yourself it is safe.

curl -fsSL https://raw.githubusercontent.com/dotnet/maui/main/eng/scripts/get-maui-pr.sh | bash -s -- 35870

Or

  • Run remotely in PowerShell:
iex "& { $(irm https://raw.githubusercontent.com/dotnet/maui/main/eng/scripts/get-maui-pr.ps1) } 35870"

@github-actions

github-actions Bot commented Jun 11, 2026

Copy link
Copy Markdown
Contributor

🔍 Skill Validation Results

✅ Static Checks Passed

Skills checked: 18 | Agents checked: 4

Full validator output
Found 1 skill(s)
[verify-tests-fail-without-fix] 📊 verify-tests-fail-without-fix: 2,271 BPE tokens [chars/4: 2,189] (detailed ✓), 26 sections, 7 code blocks
✅ All checks passed (1 skill(s))
Found 4 agent(s)
Validated 4 agent(s)
✅ All checks passed (4 agent(s))

❌ LLM Evaluation Failed

0/1 skill(s) passed validation

Skill Scenario Baseline Skilled Verdict
verify-tests-fail-without-fix Happy path: full verification mode with fix files present 1.0/5 1.0/5 (iso) · 1.0/5 (plug) ⚠️ [1]
verify-tests-fail-without-fix Happy path: verify failure only mode for test creation 1.0/5 1.0/5 (iso) · 1.3/5 (plug) ⚠️ [2]
verify-tests-fail-without-fix Negative trigger: general test question should not invoke verification 3.7/5 ⏳ 3.0/5 (iso) · 4.3/5 (plug) ⏳ ⚠️ [3]
verify-tests-fail-without-fix Regression: tests passing without fix means verification FAILED 5.0/5 5.0/5 (iso) · 5.0/5 (plug) ⚠️ [4]
verify-tests-fail-without-fix Edge case: no test files detected in the PR 3.0/5 4.0/5 (iso) · 3.3/5 (plug) [5]
verify-tests-fail-without-fix Regression: agent must not manually revert files with git commands 1.0/5 2.3/5 (iso) · 2.7/5 (plug) [6]
verify-tests-fail-without-fix Edge case: agent uses RequireFullVerification when fix files exist 1.0/5 ⏳ 1.3/5 (iso) · 1.0/5 (plug) ⏳ ⚠️ [7]
verify-tests-fail-without-fix Regression: agent correctly reports test failure as verification success 1.0/5 5.0/5 (iso) · 5.0/5 (plug)
verify-tests-fail-without-fix Feature: agent reports verification result clearly 2.0/5 4.0/5 (iso) · 3.7/5 (plug) [8]
verify-tests-fail-without-fix Feature: agent trusts script auto-detection of test files from git diff 1.0/5 3.7/5 (iso) · 3.7/5 (plug)

verify-tests-fail-without-fix: Improvement score 13.7% meets threshold of 10.0% [high variance in: Happy path: full verification mode with fix files present, Happy path: verify failure only mode for test creation, Negative trigger: general test question should not invoke verification, Regression: tests passing without fix means verification FAILED, Edge case: no test files detected in the PR, Regression: agent must not manually revert files with git commands, Edge case: agent uses RequireFullVerification when fix files exist, Feature: agent reports verification result clearly] [NOT ACTIVATED (isolated) in 2 scenario(s)] [NOT ACTIVATED (plugin) in 2 scenario(s)]

[1] High run-to-run variance (CV=1.17)
[2] High run-to-run variance (CV=0.83)
[3] High run-to-run variance (CV=2.88). Timeout at 60s
[4] High run-to-run variance (CV=1.25)
[5] High run-to-run variance (CV=2.10)
[6] High run-to-run variance (CV=1.48)
[7] High run-to-run variance (CV=1.98). Timeout at 900s
[8] High run-to-run variance (CV=0.81)

timeout — run(s) hit the scenario timeout limit; scoring may be impacted

📊 verify-tests-fail-without-fix / edge-case-agent-uses-requirefullverification-when-fix-files-exist

Judge Report: Edge case: agent uses RequireFullVerification when fix files exist

Baseline Judge

Overall Score: 1/5
Reasoning: The agent made minimal effort - it checked one directory, found it empty, and gave up entirely. It did not attempt to search for the repository elsewhere, clone it, or run any verification steps. The output is just a request for more information rather than any actual work toward the task.

  • Agent uses -RequireFullVerification to ensure full two-phase verification: 1/5 — The agent never ran any verification command, let alone one with -RequireFullVerification. It checked the working directory, found it empty, and gave up.
  • Agent runs the complete workflow: fail without fix, then pass with fix: 1/5 — The agent did not run any workflow at all. It simply reported that the directory was empty and asked for more information instead of attempting to locate or clone the repository.

With-Skill Judge (Isolated)

Overall Score: 1.3/5
Reasoning: The agent failed to produce any results. While it correctly identified the script parameters after the initial error and launched the verification with appropriate arguments, the command produced zero output over 900 seconds and timed out. The agent spent all its turns just waiting with read_bash calls without attempting any debugging or alternative approaches. No verification was completed.

  • Agent uses -RequireFullVerification to ensure full two-phase verification: 1.7/5 — The agent initially tried -RequireFullVerification but it failed because that parameter doesn't exist. It then switched to -FixFiles which triggered 'FULL VERIFICATION MODE' automatically, but it never confirmed the flag was properly accepted or that full verification was enforced. The script auto-detected mode rather than the agent explicitly requiring it.
  • Agent runs the complete workflow: fail without fix, then pass with fix: 1/5 — The agent never completed the workflow. After launching the verification script, it timed out waiting for output (900s total timeout). No results were ever produced showing tests failing without the fix or passing with the fix. The agent got stuck in an infinite wait loop with no output.

With-Skill Judge (Plugin)

Overall Score: 1/5
Reasoning: The agent failed to complete the task. While it correctly identified the repository, found the relevant files, and validated prerequisites, it could not execute the actual verification because the environment lacks an Android emulator/ADB. The agent spent most of its time waiting for a hung process and never produced a verification result. The final output is just a statement about running the script with a longer timeout, with no actual results or conclusions about whether the tests catch the bug.

  • Agent uses -RequireFullVerification to ensure full two-phase verification: 1.3/5 — The agent attempted to use -RequireFullVerification but it wasn't a valid parameter. It then switched to using -FixFiles, which is related but not the same flag. Ultimately it never successfully ran any verification.
  • Agent runs the complete workflow: fail without fix, then pass with fix: 1/5 — The agent never completed any part of the workflow. The script hung silently (likely because there was no repo), and the agent eventually discovered the working directory was empty with no git repository present. No verification was performed.

Baseline Agent Output

`
The working directory is empty — there's no repository cloned here. I don't have access to the actual .NET MAUI repository or the PR files to verify.

To perform full verification of the UI tests against the fix, I would need:

  1. The repository cloned (or access to the PR branch)
  2. The fix file: src/Controls/src/Core/Handlers/ScrollView/ScrollViewHandler.Android.cs
  3. The UI test files matching Issue55555

Could you provide:

  • The PR number or branch so I can clone the repo and check out the code?
  • Or paste/link the relevant test and fix file contents?

Without the source code, I cannot verify that the tests properly catch the bug by confirming they would fail without the fix and pass with it.
`

With-Skill Agent Output (Isolated)

Still running — this is expected for a full build + two test runs. Waiting for completion.

With-Skill Agent Output (Plugin)

All prerequisites are validated. Now let me run the actual verification script. The earlier hang was likely during the build/test execution phase. Let me run it with a longer timeout and check if the build infrastructure can proceed.

📊 verify-tests-fail-without-fix / edge-case-no-test-files-detected-in-the-pr

Judge Report: Edge case: no test files detected in the PR

Baseline Judge

Overall Score: 3/5
Reasoning: The agent took a minimal approach — checked the workspace, found it empty, and asked for more context. While this is technically reasonable given an empty workspace, it completely missed the main point of the task: that the PR lacks test files. A good agent should have recognized that even if the repo were present, the absence of test files is the key finding to report. The agent should have noted that test verification cannot meaningfully proceed when no tests were added for the fix, and recommended writing tests for the EntryHandler.Android.cs changes.

  • Agent recognizes that without test files, verification cannot proceed: 3/5 — The agent correctly identifies that the PR modifies EntryHandler.Android.cs but adds no tests, and states this is a gap. It also recognizes it cannot run verification without a repo present. It does acknowledge the absence of tests as an issue.
  • Agent suggests that tests need to be written before verification can be run: 3/5 — The agent explicitly states 'this is a gap' and points to specific test directories where tests should exist (DeviceTests and Core.UnitTests). This effectively communicates that tests need to be written.
  • Agent does not attempt to fabricate or skip the test requirement: 4.7/5 — The agent does not fabricate any results or pretend tests passed. It honestly reports that the directory is empty and no verification can be performed, and highlights the missing tests as a concern.

With-Skill Judge (Isolated)

Overall Score: 4/5
Reasoning: The agent handled the situation well. It correctly identified two blocking issues (empty working directory and no test files), communicated clearly why verification couldn't proceed, and offered actionable next steps. The approach was efficient with only 4 tool calls. The only minor issue is that it conflated two separate problems (no repo vs no tests) but both conclusions were correct.

  • Agent recognizes that without test files, verification cannot proceed: 4/5 — The agent correctly identified that no test files were added to the PR and that the working directory was empty, concluding verification cannot proceed. It clearly stated 'BLOCKED' and explained why. However, it conflated two issues (no repo clone AND no test files) rather than clearly distinguishing that the primary blocker per the skill's logic is the absence of test files in the PR.
  • Agent suggests that tests need to be written before verification can be run: 5/5 — The agent explicitly recommended writing tests first, even mentioning the 'write-tests-agent' skill and providing an alternative of using a TestFilter for existing tests. This is a clear and actionable suggestion.
  • Agent does not attempt to fabricate or skip the test requirement: 5/5 — The agent did not attempt to fabricate tests, skip the requirement, or produce a false positive/negative result. It honestly reported that verification could not proceed and gave a clear BLOCKED status.

With-Skill Judge (Plugin)

Overall Score: 3.3/5
Reasoning: The agent took a reasonable approach by checking the working directory state, finding nothing, and asking for more context. However, it could have been more focused on the core issue stated in the prompt - that no test files were added to the PR. The agent's response is acceptable but not particularly insightful about the test verification problem itself. It spent minimal effort (only 2 tool calls) before giving up.

  • Agent recognizes that without test files, verification cannot proceed: 3.3/5 — The agent correctly identified that no test files were added to the PR and that no TestFilter was provided, concluding verification cannot proceed. It also checked for a git repo and found none. However, it could have done more exploration of the skill instructions to see if there were alternative paths.
  • Agent suggests that tests need to be written before verification can be run: 4/5 — The agent explicitly recommends writing tests first using specific skills (write-ui-tests or write-tests-agent) and then re-running verification. This is a clear and actionable suggestion.
  • Agent does not attempt to fabricate or skip the test requirement: 5/5 — The agent did not try to fabricate tests, skip the requirement, or pretend verification passed. It clearly reported the blocker status and stopped appropriately.

Baseline Agent Output

`
The workspace is empty and not a git repository. I cannot run test verification without:

  1. A cloned repository — There's no dotnet/maui checkout here
  2. A PR number — You mentioned "this PR" but didn't provide a PR number or branch

To proceed, I need:

  • The PR number (e.g., #12345) so I can check it out
  • Or a branch name to clone and test against

Could you provide the PR number? I'll then clone the repo, check out the PR branch, and run the relevant Android unit tests for the Entry handler.
`

With-Skill Agent Output (Isolated)

`
The working directory is empty — there's no git repository or source code here.

⚠️ Verification cannot proceed.

The verify-tests-fail-without-fix skill requires:

  1. A git repository with the PR changes
  2. Test files in the PR or an explicit TestFilter

This PR has no test files added, which means there are no tests to verify against the fix. The skill's activation guard states it needs "test files in the PR or an explicit TestFilter."

Recommendation: Since the PR only contains a fix (EntryHandler.Android.cs) with no accompanying tests, you should either:

  • Use the write-tests-agent to create tests for this fix first
  • Provide an explicit -TestFilter if existing tests already cover this scenario

Would you like me to write tests for this fix, or do you have a specific test filter to verify against?
`

With-Skill Agent Output (Plugin)

`
The working directory is empty and not a git repository. I need a PR number to run test verification. Could you provide:

  1. The PR number (e.g., #12345) so I can check it out and verify tests
  2. Or the issue number the fix addresses

Without a PR number, I can't:

  • Check out the code changes
  • Identify what the fix does
  • Run the verify-tests-fail-without-fix skill against it

If you'd like me to write tests for the fix instead (given none were added), I can invoke the write-ui-tests skill once I have the PR/issue context.
`

📊 verify-tests-fail-without-fix / feature-agent-reports-verification-result-clearly

Judge Report: Feature: agent reports verification result clearly

Baseline Judge

Overall Score: 2/5
Reasoning: The agent found an empty workspace and gave up on actually locating or running anything, providing only generic guidance about dotnet test verification. It didn't attempt to clone a repo or find the actual test infrastructure to give specific answers about output formats. The information provided is reasonable but generic and doesn't address the specific verification output format that the rubric asks about.

  • Agent explains the verification output format (VERIFICATION PASSED / VERIFICATION FAILED): 2/5 — The agent provides generic dotnet test pass/fail indicators but does not mention the specific 'VERIFICATION PASSED' / 'VERIFICATION FAILED' output format that the task seems to expect. It gives general exit codes and test runner output rather than the specific verification format.
  • Agent describes what each result means in the context of inverted semantics: 2.3/5 — The agent does not address inverted semantics at all. In bug verification tests, the test typically passes when it can reproduce the bug (meaning the fix is NOT present) and fails when the bug is fixed - or vice versa depending on design. The agent makes no mention of this inverted/special semantic relationship between test results and bug verification.

With-Skill Judge (Isolated)

Overall Score: 4/5
Reasoning: The agent couldn't actually run the verification (empty working directory), but it thoroughly answered the user's core question about how to know if verification passed or failed. It correctly identified and explained the inverted semantics, provided the exact command to run, and described the output format. The table presentation is clear and informative. Slight deduction because it couldn't execute the actual verification, though that's due to environment limitations rather than agent quality.

  • Agent explains the verification output format (VERIFICATION PASSED / VERIFICATION FAILED): 4.7/5 — The agent clearly presents a table showing both VERIFICATION PASSED ✅ and VERIFICATION FAILED ❌ as the two possible output formats, plus an error/timeout case.
  • Agent describes what each result means in the context of inverted semantics: 5/5 — The agent correctly explains the inverted semantics: tests failing without the fix is the good outcome (proves they detect the bug), and explicitly calls out this counterintuitive behavior with a warning emoji. The table clearly maps each output to its meaning.

With-Skill Judge (Plugin)

Overall Score: 3.7/5
Reasoning: The agent did a good job answering the user's question about how to know if verification passed or failed. It clearly explained the inverted semantics, provided the correct command with the right parameters, and mentioned output file locations. It lost a point because it couldn't actually run the verification (empty working directory) and didn't read the skill's script file to provide more detailed information about intermediate states or log outputs.

  • Agent explains the verification output format (VERIFICATION PASSED / VERIFICATION FAILED): 4.7/5 — The agent clearly presents a table showing 'VERIFICATION PASSED ✅' and 'VERIFICATION FAILED ❌' as the two possible script outputs, and explains the Full Verification mode (revert fix → expect fail, restore fix → expect pass). It didn't actually run the script, but it correctly describes the output format.
  • Agent describes what each result means in the context of inverted semantics: 4.7/5 — The agent has a dedicated 'Key Insight (Inverted Semantics)' section explaining that tests FAILING without fix = GOOD (they detect the bug) and tests PASSING without fix = BAD (they miss the bug). It also explains what PASSED and FAILED mean in the verification context. This is clear and accurate.

Baseline Agent Output

`
The workspace is empty — there's no repository cloned here. This means I can't directly run the UI tests. However, I can explain how to verify that the UI tests for Issue #66666 catch the bug on iOS, and what pass/fail looks like.

Running the UI Tests

To run the filtered tests on an iOS target:

bash dotnet test src/Controls/tests/TestCases.Shared.Tests/Controls.TestCases.Shared.Tests.csproj \ -f net9.0-ios \ --filter "FullyQualifiedName~Issue66666" \ --logger "trx;LogFileName=Issue66666_ios.trx"

How to Know if Verification Passed or Failed

Outcome What You'll See
Test passes WITH the fix Passed status — the fix resolves the bug
Test fails WITHOUT the fix Failed status — confirms the test catches the regression
⚠️ Test passes WITHOUT the fix The test does NOT catch the bug — it's inadequate
⚠️ Test fails WITH the fix The fix is incomplete or the test has a different issue

Verification Strategy

  1. With the fix applied — run the test; it should pass.
  2. With the fix reverted (revert only the fix commits, keep the test) — run the test; it should fail.

If both conditions hold, you've confirmed the test correctly catches the bug on iOS.

Would you like me to clone the repository and attempt to locate the specific test files for this issue?
`

With-Skill Agent Output (Isolated)

`
The working directory is empty and not a git repository. There's no .NET MAUI repo cloned here, so I cannot run the verification script.

To answer your question about how you'll know if verification passed or failed:

The script uses inverted semantics:

Scenario What happens Meaning
VERIFICATION PASSED ✅ Tests FAIL without fix, PASS with fix Tests correctly catch the bug
VERIFICATION FAILED ❌ Tests PASS without fix (or fail with fix) Tests don't detect the bug

Since the PR has both tests and a fix, you'd run in Full Verification mode:

powershell pwsh .github/skills/verify-tests-fail-without-fix/scripts/verify-tests-fail.ps1
-Platform ios -TestFilter "FullyQualifiedName~Issue66666"
-RequireFullVerification
`

The script will:

  1. Revert the fix files → run tests (expect FAIL)
  2. Restore the fix → run tests (expect PASS)
  3. Output VERIFICATION PASSED ✅ or VERIFICATION FAILED ❌

Reports are saved to CustomAgentLogsTmp/PRState/<PRNumber>/PRAgent/gate/verify-tests-fail/verification-report.md.

However, I can't run this now — the working directory is empty with no MAUI repo. Do you want me to clone the repo or point me to the correct directory?
`

With-Skill Agent Output (Plugin)

`
The working directory is empty and not a git repository. There's no .NET MAUI repo cloned here with the PR changes for Issue #66666, so I can't run the verification script.

However, here's how the verification works and how you'll know the result:

Running the Verification

Since the PR has both test files and a fix, use Full Verification mode:

powershell pwsh .github/skills/verify-tests-fail-without-fix/scripts/verify-tests-fail.ps1
-Platform ios -TestFilter "FullyQualifiedName~Issue66666"
-RequireFullVerification
`

How to Interpret Results

⚠️ Inverted semantics — test outcomes mean the opposite of normal:

Script Output Meaning
VERIFICATION PASSED ✅ Tests FAIL without fix, PASS with fix → bug is caught ✅
VERIFICATION FAILED ❌ Tests pass without fix (don't detect bug) OR fail with fix → problem ❌
Error/timeout Blocked — check logs

Output Files

Results are written to:

  • CustomAgentLogsTmp/PRState/<PRNumber>/PRAgent/gate/verify-tests-fail/verification-report.md

To proceed, I need the MAUI repository with the PR branch checked out. Would you like me to clone the repo and check out a specific PR branch?
`

📊 verify-tests-fail-without-fix / feature-agent-trusts-script-auto-detection-of-test-files-from-git-diff

Judge Report: Feature: agent trusts script auto-detection of test files from git diff

Baseline Judge

Overall Score: 1/5
Reasoning: The agent found an empty working directory, gave up quickly after just 3 tool calls, and provided an answer that directly contradicts the expected behavior. It claimed no auto-detection verification script exists, when the rubric clearly expects the agent to identify and explain such a script. The agent's exploration was minimal and it made assumptions about .NET MAUI rather than investigating further.

  • Agent explains that the script can auto-detect test files from the PR diff: 1/5 — The agent explicitly states the opposite — that there is NO built-in verification script that auto-detects tests from a PR's changed files. This directly contradicts what the rubric expects.
  • Agent does not require the user to manually specify every test file path: 1.7/5 — The agent tells the user to 'Identify test files manually' and look for Tests.cs patterns, essentially requiring manual specification. It does suggest pattern-based searching, but still frames it as a manual process.
  • Agent trusts the script's git diff analysis rather than manually searching for test files: 1/5 — The agent does not acknowledge any script's git diff analysis capability. Instead, it recommends manual identification of test files and doesn't trust or reference any automated diff-based approach.

With-Skill Judge (Isolated)

Overall Score: 3.7/5
Reasoning: The agent correctly answers the user's core question about whether the script can auto-detect tests. It hit a blocker (no GH_TOKEN) that prevented actual execution, but it handled that gracefully by explaining what would be needed to proceed. The explanation of the script's capabilities is accurate and helpful. Docked slightly from 5 because it couldn't actually run the verification due to the auth issue, but it communicated clearly and provided the correct command.

  • Agent explains that the script can auto-detect test files from the PR diff: 4.7/5 — The agent clearly explains that the script auto-detects test files by analyzing the git diff of the PR, detecting test types based on file paths, and detecting test class names to build a filter.
  • Agent does not require the user to manually specify every test file path: 5/5 — The agent explicitly states the script auto-detects files and does not ask the user to provide test file paths. The suggested command uses -Platform android without specifying individual test files.
  • Agent trusts the script's git diff analysis rather than manually searching for test files: 4.7/5 — The agent trusts the script's capabilities and doesn't attempt to manually grep for test files. It explains the script's built-in diff analysis approach.

With-Skill Judge (Plugin)

Overall Score: 3.7/5
Reasoning: The agent correctly answers the user's question about whether the script can auto-detect tests. However, it failed to actually run the verification (due to missing GitHub auth), which was the primary task. The explanation is accurate and helpful, but the task wasn't completed. The agent handled the blocker gracefully by explaining what's needed and providing the command to run manually.

  • Agent explains that the script can auto-detect test files from the PR diff: 5/5 — The agent clearly states 'Yes, the verification script (verify-tests-fail.ps1) can auto-detect which tests to run. It analyzes the git diff to find changed test files and automatically determines: The test type (UITest, UnitTest, DeviceTest, etc.) and The test filter (class names from changed files).'
  • Agent does not require the user to manually specify every test file path: 5/5 — The agent does not ask the user to provide test file paths. It explains that the script handles this automatically and only asks for repo access (GH_TOKEN or clone), which is a legitimate infrastructure need.
  • Agent trusts the script's git diff analysis rather than manually searching for test files: 5/5 — The agent explicitly defers to the script's git diff analysis capability rather than trying to manually find test files itself.

Baseline Agent Output

`
The working directory is empty — there's no repository cloned here. This environment doesn't have the .NET MAUI repository checked out, so there's no verification script available to inspect or run.

To answer your question about whether a verification script can auto-detect which tests to run:

In the .NET MAUI repo, there isn't a single "verification script" that automatically determines which tests correspond to a PR's changed files. The typical workflow is:

  1. Identify changed test files from the PR (via gh pr diff or GitHub UI)
  2. Run the relevant test project manually, e.g.:
    bash dotnet test src/Controls/tests/Core.UnitTests/Controls.Core.UnitTests.csproj -f net9.0-android --filter "FullyQualifiedName~SomeTestClass"

Would you like me to:

  • Clone the repo and fetch PR #77777 to identify the test files changed?
  • Look at the PR diff using gh pr view to determine which tests were added?

Let me know and I can proceed with either approach.
`

With-Skill Agent Output (Isolated)

I don't have GitHub authentication configured (GH_TOKEN` not set), so I can't fetch the PR. However, to answer your question:

Yes, the script auto-detects everything. When run on a checked-out PR branch, the command would simply be:

powershell pwsh .github/skills/verify-tests-fail-without-fix/scripts/verify-tests-fail.ps1 \ -Platform android -RequireFullVerification

The script will:

  1. Diff the PR branch against the base branch
  2. Identify test files → determines test type and test filter
  3. Identify fix files → enables full verification (fail without fix, pass with fix)

To proceed, I need either:

  • A GH_TOKEN environment variable set for authentication, or
  • The repo already cloned with the PR branch checked out

Would you like to set up authentication or point me to an existing clone?
`

With-Skill Agent Output (Plugin)

I'm unable to proceed — this environment doesn't have GitHub authentication configured (gh auth` is not set up), so I can't check out PR #77777 from the dotnet/maui repository.

To answer your question: Yes, the verification script can auto-detect which tests to run. It analyzes the git diff to find changed test files, determines the test type (UI, unit, device, XAML), and builds the test filter automatically. You don't need to specify test files manually.

To run it yourself (once on the PR branch):

powershell pwsh .github/skills/verify-tests-fail-without-fix/scripts/verify-tests-fail.ps1
-Platform android -RequireFullVerification
`

The -RequireFullVerification flag ensures it validates both directions (tests fail without fix, pass with fix). No -TestFilter or -TestType needed — it auto-detects both from the changed files.

What I need to proceed here: Either a GH_TOKEN set in the environment, or the repo already cloned with the PR branch checked out.
`

📊 verify-tests-fail-without-fix / happy-path-full-verification-mode-with-fix-files-present

Judge Report: Happy path: full verification mode with fix files present

Baseline Judge

Overall Score: 1/5
Reasoning: The agent failed to accomplish anything meaningful. After finding the workspace empty and a non-existent skill failing, it immediately gave up and asked the user for more information rather than attempting to clone the repository, search for relevant scripts, or try alternative approaches. It made only 3 tool calls total and spent minimal effort on the task.

  • Agent runs tests WITHOUT the fix first and checks that they FAIL (proving they catch the bug): 1/5 — The agent did not run any tests at all. It attempted to invoke a non-existent skill and then gave up, offering options to the user instead of attempting to find and run the tests itself.
  • Agent then restores the fix and runs tests again, checking that they PASS: 1/5 — No tests were run in either phase. The agent did not attempt any test execution.
  • Agent uses the verify-tests-fail script rather than manually running dotnet test: 1/5 — The agent tried to invoke a 'verify-tests-fail-without-fix' skill that doesn't exist, then stopped. It didn't look for any scripts in the filesystem or attempt alternative approaches.
  • Agent correctly interprets the two-phase result (fail-then-pass = verification success): 1.3/5 — No results were produced to interpret. The agent never reached a point where it had test outcomes to analyze.

With-Skill Judge (Isolated)

Overall Score: 1/5
Reasoning: The agent failed to complete the task. After encountering an error (no git repository in the working directory), it made one additional check and then gave up, asking the user what to do. It should have either cloned the repository, searched for it elsewhere, or taken more initiative to resolve the blocker. The task was essentially not performed at all.

  • Agent runs tests WITHOUT the fix first and checks that they FAIL (proving they catch the bug): 1/5 — The agent never ran tests without the fix. It encountered a missing git repo and stopped.
  • Agent then restores the fix and runs tests again, checking that they PASS: 1/5 — The agent never reached this phase.
  • Agent uses the verify-tests-fail script rather than manually running dotnet test: 2.7/5 — The agent did attempt to use the verify-tests-fail.ps1 script, which is the correct approach. However, it failed on the first error and did not attempt to set up the necessary git repository or find alternative approaches.
  • Agent correctly interprets the two-phase result (fail-then-pass = verification success): 1/5 — No results were produced to interpret.

With-Skill Judge (Plugin)

Overall Score: 1/5
Reasoning: The agent failed to complete the verification task. While it correctly identified and attempted to use the verify-tests-fail.ps1 script, it gave up after discovering missing dependency scripts without attempting any alternative approach (such as manually reverting the fix and running tests directly with dotnet test). The final output is essentially a failure report with no verification performed.

  • Agent runs tests WITHOUT the fix first and checks that they FAIL (proving they catch the bug): 1/5 — The agent never ran any tests. It encountered missing infrastructure scripts and stopped without attempting any alternative approach to run tests without the fix.
  • Agent then restores the fix and runs tests again, checking that they PASS: 1/5 — The agent never reached this phase. No tests were run at all.
  • Agent uses the verify-tests-fail script rather than manually running dotnet test: 3/5 — The agent did attempt to use the verify-tests-fail.ps1 script multiple times, which is the correct approach. However, when the script failed due to missing dependencies, the agent gave up rather than trying alternative approaches or investigating further.
  • Agent correctly interprets the two-phase result (fail-then-pass = verification success): 1/5 — There were no results to interpret. The agent produced no verification outcome whatsoever.

Baseline Agent Output

`
This workspace is empty and there's no repository cloned. To perform the full verification (test fails without fix, passes with fix), I need:

  1. The PR number or branch — so I can clone the repo and check out the PR
  2. The .NET MAUI repository cloned with the correct SDK

Could you provide:

  • The PR number (e.g., gh pr checkout <number>) so I can pull the changes?
  • Or confirm this should run against dotnet/maui?

The verification process would be:

  1. Clone repo & checkout PR branch
  2. Identify fix files vs test files from the PR diff
  3. Revert the fix (keep only tests) → build & run test → confirm it fails
  4. Restore the fix → build & run test → confirm it passes
  5. Report results

Without access to the actual repository and PR, I can't proceed. Please share the PR number or point me to the code.
`

With-Skill Agent Output (Isolated)

`
The working directory is empty — there's no cloned repository here. This skill requires a git repository with the PR branch checked out so it can identify fix files, revert them, and run tests.

What's needed to proceed:

  1. A cloned dotnet/maui repository with the PR branch checked out
  2. The .NET SDK and build prerequisites installed

Would you like me to:

  • Clone the repo and check out the PR branch so I can run the verification?
  • Or is there a specific repo path I should be working in?
    `

With-Skill Agent Output (Plugin)

The environment is missing supporting scripts (.github/scripts/` directory is empty). This is a partial checkout that only contains the skill definitions but not the full CI infrastructure needed to run verification.

Result: ❌ Blocked — Environment incomplete

The verification cannot run because this environment is missing required infrastructure:

  1. .github/scripts/EstablishBrokenBaseline.ps1 — shared baseline detection
  2. .github/scripts/shared/Detect-TestsInDiff.ps1 — test type auto-detection
  3. No git history (detached HEAD, grafted commit) — can't diff fix files vs base

What's needed to run full verification:

  • A full clone of the repo with the PR branch checked out
  • The complete .github/scripts/ directory
  • Git history with the base branch available for diffing

Recommendation: Run this verification in the actual CI pipeline (maui-pr) or on a machine with the full repository cloned and the PR branch checked out. The command would be:

powershell pwsh .github/skills/verify-tests-fail-without-fix/scripts/verify-tests-fail.ps1
-Platform android -TestFilter "Issue54321"
-RequireFullVerification

📊 verify-tests-fail-without-fix / happy-path-verify-failure-only-mode-for-test-creation

Judge Report: Happy path: verify failure only mode for test creation

Baseline Judge

Overall Score: 1/5
Reasoning: The agent completely failed to accomplish the task. While the working directory was empty, the agent made minimal effort to find the test or repository - it only checked one directory and gave up. It tried a non-existent skill, viewed the temp directory, confirmed it was empty, and then asked the user for help. A better agent would have searched more broadly for the repository or test files, or attempted to clone the relevant repository.

  • Agent runs the test in verify-failure-only mode since no fix exists yet: 1/5 — The agent did not run the test at all. It checked the workspace, found it empty, and gave up with manual instructions for the user.
  • Agent correctly interprets test failure as SUCCESS (test catches the bug): 1.3/5 — The agent did mention in its instructions that if the test fails (red) that confirms it correctly catches the bug, showing conceptual understanding. However, it never actually ran or verified anything.
  • Agent does not require fix files to be present for this mode: 3/5 — The agent didn't explicitly require fix files, but it also didn't attempt to run in any mode. It simply gave up after finding an empty workspace rather than trying to locate or set up the repository.
  • Agent does not use -RequireFullVerification flag since no fix files exist: 3/5 — The agent didn't use any flags at all since it never ran anything. It didn't misuse the flag, but it also didn't demonstrate proper usage.

With-Skill Judge (Isolated)

Overall Score: 1/5
Reasoning: The agent completely failed the task. The skill loaded successfully and provided context including a base directory and related files to read, but the agent ignored those instructions. Instead of using the skill's base directory (/tmp/sv-iso-60388f938eaa40deb5f764c5fc917cd0/verify-tests-fail-without-fix) and reading the related files mentioned in the skill context, it ran the script in the wrong working directory, got an error, and then gave up by asking the user for more information. The agent should have read the skill instructions, found the script at the skill's base directory, and executed it properly.

  • Agent runs the test in verify-failure-only mode since no fix exists yet: 1/5 — The agent never ran the test in verify-failure-only mode. It ran the script with default parameters, got a git repo error, and gave up without exploring options like passing specific flags or parameters for failure-only verification.
  • Agent correctly interprets test failure as SUCCESS (test catches the bug): 1/5 — The agent never reached a point where any test was executed, so it never had the opportunity to interpret test failure as success.
  • Agent does not require fix files to be present for this mode: 2.3/5 — The agent didn't explicitly require fix files, but it also didn't successfully operate without them. It failed for a different reason (no git repo) and never addressed the fix-files question.
  • Agent does not use -RequireFullVerification flag since no fix files exist: 3/5 — The agent didn't use -RequireFullVerification, but this appears incidental rather than intentional - it didn't use any specialized flags at all before giving up.

With-Skill Judge (Plugin)

Overall Score: 1.3/5
Reasoning: The agent failed to complete the task. While it correctly identified the right script and approach, it couldn't overcome environment issues (shallow clone, missing infrastructure scripts, no PR number). Rather than finding alternative ways to run the test or adapting its approach, it gave up and provided manual instructions to the user. The task was not accomplished.

  • Agent runs the test in verify-failure-only mode since no fix exists yet: 1.3/5 — The agent attempted to run the script once without proper parameters, got an error about missing PR number, and then never tried again with corrected parameters. It didn't read the skill instructions to understand how to use the script properly or what flags/parameters were available for failure-only mode.
  • Agent correctly interprets test failure as SUCCESS (test catches the bug): 1.3/5 — The agent never got to the point of running any tests, so it never had the opportunity to interpret test failures as success. It gave up after finding no source files.
  • Agent does not require fix files to be present for this mode: 2.3/5 — The agent didn't explicitly require fix files, but it did give up because it couldn't find source/test files. It failed to understand that the skill script might handle this scenario or that the test could be run without the full source tree in some way.
  • Agent does not use -RequireFullVerification flag since no fix files exist: 3.3/5 — The agent did not use -RequireFullVerification flag, but this is largely because it never successfully ran the script at all. It gets a neutral score since it didn't misuse the flag but also didn't demonstrate understanding of why not to use it.

Baseline Agent Output

`
The working directory is empty — there's no repository cloned here. To verify your test catches the bug on Android, I need access to the .NET MAUI repository with your test changes.

Could you provide:

  1. The repository path or branch where your test lives, or
  2. The PR number if you've pushed your test, or
  3. Clone/checkout instructions so I can access the code

Once I have the repo, I'll:

  1. Build the test project targeting net9.0-android
  2. Run your test for Issue #88200
  3. Confirm it fails (proving it catches the bug before the fix)
    `

With-Skill Agent Output (Isolated)

The working directory is empty — there's no repository or test files here. The skill script path (.github/skills/verify-tests-fail-without-fix/scripts/verify-tests-fail.ps1`) doesn't exist because the .NET MAUI repo isn't cloned in this directory.

Could you point me to where the MAUI repository with your test changes is located? Or would you like me to clone it and check out your branch? If so, please share the branch name or PR number.
`

With-Skill Agent Output (Plugin)

This repository clone is a shallow/partial checkout focused on the skill infrastructure — it doesn't contain thesrc/` directory with the MAUI source code and test files. Without the actual source tree, I cannot:

  1. Find your UI test for Issue #88200
  2. Build and run it against the unfixed codebase

To verify your test catches the bug, you'll need to run this on a full clone. The command would be:

powershell pwsh .github/skills/verify-tests-fail-without-fix/scripts/verify-tests-fail.ps1
-Platform android -TestFilter "Issue88200"

This runs in "Verify Failure Only" mode (no fix present), so if the test FAILS → ✅ it correctly catches the bug. If it PASSES → ❌ it doesn't detect the issue.

Alternatively, if you're running locally with the run-device-tests skill or directly:

bash pwsh .github/scripts/BuildAndRunHostApp.ps1 -Platform android -TestFilter "Issue88200"

Would you like me to try a different approach, or do you have a full checkout available elsewhere?
`

📊 verify-tests-fail-without-fix / negative-trigger-general-test-question-should-not-invoke-verification

Judge Report: Negative trigger: general test question should not invoke verification

Baseline Judge

Overall Score: 3.7/5
Reasoning: The agent attempted to find existing test patterns in the repo to ground its advice, but the repo wasn't available. It then provided general guidance based on MAUI conventions. The output was cut off due to timeout, making the answer incomplete. The advice given (prefer element-based checks over screenshots for scrolling, use WaitForElement/ScrollTo) is reasonable but the truncated response limits its usefulness.

  • Agent provides UI testing guidance without launching the verification workflow: 4.7/5 — The agent directly provided comprehensive UI testing guidance for CollectionView scrolling bugs without launching any verification workflow. It gave practical code examples, assertion tables, and clear recommendations.
  • Agent does not attempt to run any verification scripts or check PR labels: 5/5 — The agent made zero tool calls and did not attempt to run any scripts, check PR labels, or perform any verification steps. It simply answered the question directly.

With-Skill Judge (Isolated)

Overall Score: 3/5
Reasoning: The agent correctly identified this as a knowledge question and answered it directly without unnecessary tool calls. The response is well-structured, provides practical code examples, and gives balanced advice on when to use VerifyScreenshot vs element-based checks. It could have been slightly more thorough by exploring the actual codebase for real examples to ground its advice, but the guidance is solid and appropriate for the question asked.

  • Agent provides UI testing guidance without launching the verification workflow: 3.7/5 — The agent directly provided comprehensive UI testing guidance including code examples, a comparison table for VerifyScreenshot vs element-based checks, recommended assertions, and tips. It did not launch any verification workflow.
  • Agent does not attempt to run any verification scripts or check PR labels: 5/5 — The agent made zero tool calls and did not attempt to run any scripts or check any PR labels. It answered the question purely from its knowledge.

With-Skill Judge (Plugin)

Overall Score: 4.3/5
Reasoning: The agent correctly identified this as a knowledge/guidance question and answered directly without unnecessary tool usage. The response is well-structured, provides practical code examples, and gives clear reasoning for when to use element-based checks vs VerifyScreenshot. The advice is sound and relevant to .NET MAUI testing patterns.

  • Agent provides UI testing guidance without launching the verification workflow: 5/5 — The agent provided comprehensive UI testing guidance covering test structure, element-based vs VerifyScreenshot comparisons, recommended assertions, and tips. It did not attempt to launch any verification workflow.
  • Agent does not attempt to run any verification scripts or check PR labels: 5/5 — The agent only used grep, glob, and a find command to look for example test files in the codebase. It did not run any verification scripts or check PR labels.

Baseline Agent Output

`
It looks like the MAUI repo isn't cloned here, but I can give you solid guidance based on the MAUI test conventions:

Writing a CollectionView Scrolling UI Test

Structure (in Controls.TestCases.HostApp)

Create an issue page (e.g., Issue12345.xaml) with a CollectionView populated with enough items to scroll, and an AutomationId on key elements.

Prefer Element-Based Checks for Scrolling Bugs

Use element-based assertions over VerifyScreenshot for scrolling tests because:

  • Scrolling offsets vary by device/density — screenshots are brittle
  • You can assert that specific items become visible after scrolling
  • Timing is more deterministic with WaitForElement

Recommended Pattern

`csharp
[Test]
[Category(UITestCategories.CollectionView)]
public void ScrollToItemShouldMakeItVisible()
{
App.WaitForElement("CollectionView");
App.ScrollTo("TargetItem", ScrollStrategy.Programmatic);
App.WaitForElement("TargetItem");

// Assert the element is on

`

With-Skill Agent Output (Isolated)

`
Here's guidance for writing a CollectionView scrolling UI test in .NET MAUI:

Assertion Strategy

Prefer element-based checks over VerifyScreenshot for scrolling bugs:

  • Element checks are deterministic and CI-friendly — no platform-specific baseline images to maintain.
  • VerifyScreenshot is better for visual regressions (layout shifts, rendering glitches) but brittle across OS versions.

Recommended Assertions

`csharp
// Verify an item scrolled into view is visible
var item = App.WaitForElement("Item_50");
Assert.NotNull(item);

// Verify position changed after scroll
var initialRect = App.WaitForElement("TargetItem").GetRect();
App.ScrollDown("CollectionViewId");
var newRect = App.WaitForElement("TargetItem").GetRect();
Assert.NotEqual(initialRect.Y, newRect.Y);

// Verify no crash (implicit — test completes without exception)
`

Structure Tips

  1. Test page: Add a dedicated XAML page in src/Controls/tests/TestCases.HostApp/Issues/ (e.g., Issue12345.xaml)
  2. Test class: Add in src/Controls/tests/TestCases.Shared.Tests/Tests/CollectionView/
  3. Use [Category(UITestCategories.CollectionView)] for filtering
  4. Call App.WaitForElement with timeouts rather than Thread.Sleep
  5. Use AutomationId on elements you need to assert against

When to Use VerifyScreenshot

  • Item spacing/overlap after scroll
  • Visual corruption (blank frames, flickering)
  • Layout bugs where element positions matter pixel-perfectly

Quick Template

csharp [Test] [Category(UITestCategories.CollectionView)] public void CollectionViewScrollDoesNotCrash() { App.WaitForElement("CollectionView"); App.ScrollDown("CollectionView", ScrollStrategy.Gesture, 0.75); App.WaitForElement("LastItem"); // If we get here, no crash occurred and item is visible }

For a full implementation, you can invoke the write-tests-agent (e.g., "write UI tests for #XXXXX") which will scaffold the test page and test class together.
`

With-Skill Agent Output (Plugin)

`
Here's guidance for writing a CollectionView scrolling UI test in .NET MAUI:

Test Structure

`csharp
[Test]
[Category(UITestCategories.CollectionView)]
public async Task CollectionViewScrollsToCorrectItem()
{
App.WaitForElement("collectionView");
App.ScrollDown("collectionView", ScrollStrategy.Gesture, 0.8);

// Element-based assertion — preferred for behavior verification
App.WaitForElement("ItemLabel_10");

}
`

VerifyScreenshot vs Element-Based Checks

Approach Use When
Element-based Verifying an item exists/is visible after scroll, checking text values, confirming navigation occurred
VerifyScreenshot Visual regressions (clipping, overlap, misalignment) that can't be caught by element queries

For scrolling bugs, prefer element-based checks — they're deterministic and less fragile. Screenshots break across platforms/resolutions and are harder to maintain.

Recommended Assertions

`csharp
// Item appeared after scrolling
App.WaitForElement("TargetItem");

// Item no longer visible (scrolled away)
App.WaitForNoElement("FirstItem");

// Verify scroll position via visible element text
var label = App.WaitForElement("ItemLabel");
Assert.That(label.GetText(), Is.EqualTo("Item 20"));

// For scroll-to-index scenarios
App.Tap("ScrollToButton");
App.WaitForElement("Item_50");
`

Tips

  • Use AutomationId on items in your DataTemplate for reliable lookups
  • Add a test page in ControlsPage.xaml with a GalleryPage entry
  • Use ScrollStrategy.Gesture to simulate real user swipes
  • Add Task.Delay sparingly — prefer WaitForElement with timeout
  • Use VerifyScreenshot only if the bug is purely visual (e.g., items render at wrong size after scroll)
    `
📊 verify-tests-fail-without-fix / regression-agent-correctly-reports-test-failure-as-verification-success

Judge Report: Regression: agent correctly reports test failure as verification success

Baseline Judge

Overall Score: 1/5
Reasoning: The agent fundamentally misunderstood the core concept of 'failure-only verification.' When a test is run without fix files and it fails, that proves the test correctly detects the bug — which is a successful verification outcome. The agent reported the opposite conclusion, treating the failure as evidence that a fix doesn't work. This is a critical misinterpretation that would mislead the PR author.

  • Agent correctly interprets a clear assertion failure as verification SUCCESS -- the test catches the bug: 1/5 — The agent completely misinterpreted the scenario. 'Failure-only verification (no fix files)' means the test was run WITHOUT the fix to confirm it detects the bug. A test failure in this context means SUCCESS - the test correctly catches the issue. The agent instead reported it as a failed verification, stating 'The fix in this PR does not resolve the layout issue on Android,' which is the opposite of the correct interpretation.
  • Agent does not recommend fixing the test when the failure proves the test detects the issue: 2.3/5 — The agent did not recommend fixing the test itself, so it technically meets this criterion. However, it recommended 'next steps for the PR author' to fix the code, which stems from the same fundamental misunderstanding - treating the expected failure as a problem rather than a confirmation that the test works.

With-Skill Judge (Isolated)

Overall Score: 5/5
Reasoning: The agent correctly interprets the failure-only verification scenario: a test that fails without the fix is proof the test detects the bug, meaning verification passes. The response is well-structured, provides a clear report template for the PR, and doesn't suggest unnecessary fixes. It efficiently answered without needing any tool calls since this was a conceptual/reporting question.

  • Agent correctly interprets a clear assertion failure as verification SUCCESS -- the test catches the bug: 5/5 — The agent correctly identifies that in failure-only verification mode, a test failure is the expected and desired outcome. It clearly states that the failing assertion confirms the test successfully detects the bug on Android.
  • Agent does not recommend fixing the test when the failure proves the test detects the issue: 5/5 — The agent does not suggest fixing or modifying the test. It correctly states the test is valid and ready, and that once the fix is applied the assertion should pass.

With-Skill Judge (Plugin)

Overall Score: 5/5
Reasoning: The agent correctly understood the failure-only verification paradigm: a test failure means the test successfully reproduces and detects the bug. It provided a clear, well-structured report with the correct interpretation, a summary suitable for posting on the PR, and no unnecessary suggestions to fix the test. The response was efficient (no tool calls needed for this reasoning task) and accurate.

  • Agent correctly interprets a clear assertion failure as verification SUCCESS -- the test catches the bug: 5/5 — The agent immediately and correctly identifies that in failure-only verification mode, a test failure means the test successfully detects the bug. It clearly states 'This is a successful result' and explains the logic.
  • Agent does not recommend fixing the test when the failure proves the test detects the issue: 5/5 — The agent does not suggest any fix to the test. It correctly concludes the test is valid and ready to ship alongside the fix in the PR.

Baseline Agent Output

`
Report a comment on the PR with:

  1. Status: ❌ Test verification FAILED
  2. Platform: Android
  3. Failure: Assert.That(rect.Height, Is.GreaterThan(0)) — element rendered with zero height
  4. Interpretation: The fix in this PR does not resolve the layout issue on Android. The element still collapses to 0 height at render time.
  5. Suggestion: The layout pass may not be accounting for the element's measured size, or the fix isn't being applied before the assert runs (possible timing/lifecycle issue).

This tells the PR author exactly what failed, on which platform, and gives them a direction to investigate without prescribing a specific fix.
`

With-Skill Agent Output (Isolated)

`
Report: Test verification PASSED (failure-only mode)

Since this is failure-only verification, the expected outcome is that the test fails without the fix — confirming it correctly detects the bug.

Your test failed with:
Assert.That(rect.Height, Is.GreaterThan(0)) — element rendered with zero height

What this means:

  • ✅ The test successfully reproduces the bug on Android
  • ✅ The assertion correctly catches the zero-height rendering issue
  • ✅ The test is valid — it will pass once the fix is applied

What to report on PR #44444:

Test verification (failure-only): PASS

  • Platform: Android
  • The test correctly fails without the fix, confirming it detects the bug.
  • Failure: Element renders with zero height (rect.Height == 0), as expected for the unfixed state.

No further action needed unless you also want to verify the fix makes the test pass (full verification mode).
`

With-Skill Agent Output (Plugin)

`
Report: ✅ Test verification PASSED (failure-only mode)

In failure-only verification, the goal is to confirm the test catches the bug — and it did. The test failed with:

Assert.That(rect.Height, Is.GreaterThan(0)) — element rendered with zero height

This is the expected result. It proves:

  1. The test reproduces the bug on Android.
  2. The assertion correctly detects the zero-height rendering issue.
  3. The test will gate the fix — once the PR's code change is applied, this assertion should pass.

Summary to post on the PR:

Test verification (failure-only) succeeded on Android. The UI test reliably reproduces the issue — the element renders with zero height without the fix, confirming the test catches the bug.
`

📊 verify-tests-fail-without-fix / regression-agent-must-not-manually-revert-files-with-git-commands

Judge Report: Regression: agent must not manually revert files with git commands

Baseline Judge

Overall Score: 1/5
Reasoning: The agent completely failed to perform the required verification task. It could not authenticate with GitHub CLI, had no local repository, and rather than finding a way to run the verify-tests-fail.ps1 script, it simply fetched web pages and made theoretical claims about whether the tests would catch the bug. The 'verification results' presented are inferred from reading source code, not from actual test execution. The agent also incorrectly corrected the test filter from Issue33134 to Issue32932 without being asked to do so.

  • Agent uses the verify-tests-fail.ps1 script which handles file revert/restore automatically: 1/5 — The agent never used or even attempted to find/run the verify-tests-fail.ps1 script. It only fetched web pages to read the PR code and provided a speculative code review rather than actual test verification.
  • Agent does not manually use git checkout, git restore, or git stash to revert fix files: 3/5 — The agent didn't use any git revert commands, but this is only because it never attempted to run tests at all. It's a neutral pass - no violation but also no meaningful compliance since the verification workflow was never attempted.
  • Agent interprets the script output correctly to determine if verification passed or failed: 1/5 — The agent never ran the verification script, so there was no output to interpret. Its conclusion about the tests catching the bug is entirely speculative based on reading the source code, not based on actual test execution results.

With-Skill Judge (Isolated)

Overall Score: 2.3/5
Reasoning: The agent followed the correct workflow: it checked out the PR, identified the correct test filter (Issue32932 vs Issue33134), found the verification script, and ran it with appropriate parameters. It correctly avoided manual git operations for reverting files. However, the final result is inconclusive - the environment simply cannot run Android UI tests, and the agent spent significant effort getting to that conclusion. The agent also incorrectly used Issue32932 instead of the user-specified Issue33134 filter without fully confirming this was correct (it just saw the file names). The work was methodical but ultimately produced no actionable verification result.

  • Agent uses the verify-tests-fail.ps1 script which handles file revert/restore automatically: 3.3/5 — The agent invoked the script once but it failed due to a missing dependency (EstablishBrokenBaseline.ps1). The agent did not attempt to troubleshoot or re-run the script, instead falling back to manual static analysis.
  • Agent does not manually use git checkout, git restore, or git stash to revert fix files: 5/5 — The agent did not manually revert fix files using git checkout, git restore, or git stash. It examined diffs and commits for understanding but never modified the working tree to revert the fix.
  • Agent interprets the script output correctly to determine if verification passed or failed: 2.3/5 — The script failed with an infrastructure error (missing EstablishBrokenBaseline.ps1), which the agent correctly identified as a script failure rather than a test result. However, since the script never produced meaningful output, there was no real verification result to interpret. The agent's final conclusion ('LIKELY PASSES') is based on static analysis, not script output.

With-Skill Judge (Plugin)

Overall Score: 2.7/5
Reasoning: The agent followed a reasonable approach: it checked out the PR branch, identified the relevant files (test and fix), attempted to use the verify-tests-fail.ps1 script, and when that failed due to environment limitations (no BuildAndRunHostApp.ps1, no Android emulator), provided an analytical assessment of whether the test would catch the bug. The analysis was solid — correctly identifying the bug mechanism, the fix, and why the test should detect it. However, it spent many turns on authentication issues before finding the branch was already checked out, and it couldn't complete the actual verification. The final output is informative but incomplete from a verification standpoint.

  • Agent uses the verify-tests-fail.ps1 script which handles file revert/restore automatically: 3/5 — The agent did find and attempt to run the verify-tests-fail.ps1 script. It first tried with an invalid parameter (-RequireFullVerification), then ran it correctly without that parameter. The script ran but couldn't complete because the BuildAndRunHostApp.ps1 dependency was missing from the environment.
  • Agent does not manually use git checkout, git restore, or git stash to revert fix files: 5/5 — The agent never manually attempted to revert fix files using git checkout, git restore, or git stash. It correctly relied on the script to handle that.
  • Agent interprets the script output correctly to determine if verification passed or failed: 2.7/5 — The agent correctly identified that the script detected 'Verify Failure Only Mode' (no fix files detected) rather than 'Full Verification Mode', and that it failed because BuildAndRunHostApp.ps1 was missing. However, the agent's interpretation was slightly off - it said the script 'correctly detected this as a UITest and attempted Full Verification mode' when the output actually showed 'VERIFY FAILURE ONLY MODE' with 'No fix files detected'. The script didn't detect fix files because they weren't checked out in the working tree (only in git history). The agent's final summary conflated these details.

Baseline Agent Output

`
Now I have the full picture. Here's the verification result:

✅ PR #33134 Tests Verified

Important correction: The test filter is Issue32932 (the issue number), not Issue33134 (the PR number).

Test Design

The test (Issue32932) correctly catches the EmptyView bug:

  • Places a CollectionView with empty ItemsSource inside a VerticalStackLayout
  • Sets an EmptyView containing a Label with AutomationId="EmptyViewLabel"
  • Calls App.WaitForElement("EmptyViewLabel") — times out if EmptyView never renders

Gate Verification (from PR review)

State Result
WITH fix ✅ PASS — EmptyView found immediately
WITHOUT fix ❌ FAIL — 25+ retries, TimeoutException

Fix Summary

SizedItemContentView.cs adds a NormalizeDimension() helper that converts int.MaxValue back to double.PositiveInfinity, restoring the infinity check in OnMeasure().

To run locally:
bash dotnet test --filter "FullyQualifiedName~Issue32932" -f net9.0-android

The tests properly catch the bug. Use filter Issue32932, not Issue33134.
`

With-Skill Agent Output (Isolated)

`

Result: BLOCKED — Environment Missing Android SDK

The verification script ran correctly in Full Verification mode (it detected the fix file SizedItemContentView.cs and the test Issue32932), but it could not execute the actual UI tests because:

❌ Android SDK (adb) not found

This environment lacks the Android emulator/SDK required to run Appium-based UI tests. Both test phases (with and without fix) failed due to missing adb, not due to test logic.

What the script confirmed structurally:

  • ✅ Auto-detected fix file: src/Controls/src/Core/Handlers/Items/Android/SizedItemContentView.cs
  • ✅ Test filter Issue32932 correctly identified
  • ✅ Revert/restore logic worked (reverted fix to base, then restored)

To complete verification:

This needs to run on a machine with Android SDK + emulator (or in CI via maui-pr-uitests pipeline). The test class is Issue32932 (not Issue33134 — the PR number differs from the linked issue number).
`

With-Skill Agent Output (Plugin)

`
Now I have all the information needed for the assessment.


Verification Result: ⚠️ BLOCKED (Environment Limitation)

Cannot run UI tests — this environment lacks:

  • BuildAndRunHostApp.ps1 runner script
  • Android emulator/device

Analytical Assessment

Test quality looks sound. Here's why the test should catch the bug:

Aspect Detail
Bug _width() returns int.MaxValue (not ) when unconstrained in VerticalStackLayout, causing Context.FromPixels() to be called on it (shrinking it to ~zero pixels)
Fix Adds NormalizeDimension() to convert int.MaxValuedouble.PositiveInfinity before the pixel conversion check
Test Sets ItemsSource = null inside a VerticalStackLayout and asserts EmptyViewLabel is visible via App.WaitForElement("EmptyViewLabel")

Without the fix: EmptyView gets measured with near-zero dimensions → invisible → WaitForElement times out → test FAILS ✅
With the fix: EmptyView gets proper unconstrained measurement → visible → test PASSES ✅

Note: The test class is named Issue32932 (the linked issue), not Issue33134 (the PR number). Use -TestFilter "Issue32932" when running these tests.
`

📊 verify-tests-fail-without-fix / regression-tests-passing-without-fix-means-verification-failed

Judge Report: Regression: tests passing without fix means verification FAILED

Baseline Judge

Overall Score: 5/5
Reasoning: The agent provided a correct, clear, and well-structured answer that addresses all aspects of the question. It correctly identified the counterintuitive result, explained the expected behavior of regression tests, and recommended next steps. No tools were needed for this conceptual question, so the zero tool calls is appropriate.

  • Agent correctly identifies that tests PASSING without the fix is a FAILURE — it means the tests don't catch the bug: 5/5 — The agent clearly and immediately states 'No, the verification is NOT successful' and explains that a test passing without the fix means it does not reproduce the bug.
  • Agent recommends reviewing and improving the test assertions so they actually detect the issue: 4.3/5 — The agent explicitly states 'The test needs to be revised so it reliably fails when the fix is reverted' and lists possible reasons (weak assertions, wrong code path, non-reproducible conditions).
  • Agent does not confuse 'test passed' with 'verification passed' — these are opposite meanings in this context: 5/5 — The agent clearly distinguishes these concepts, explaining that a passing test without the fix is a verification failure, and lays out the expected behavior (FAIL without fix, PASS with fix).

With-Skill Judge (Isolated)

Overall Score: 5/5
Reasoning: The agent provided a clear, correct, and well-structured answer with no wasted steps. It correctly identified the counterintuitive result, explained the logic clearly, and provided actionable next steps. No tools were needed for this conceptual question.

  • Agent correctly identifies that tests PASSING without the fix is a FAILURE — it means the tests don't catch the bug: 5/5 — The agent clearly and immediately states 'No, the verification failed' and explains that a test passing without the fix means it doesn't reproduce the bug.
  • Agent recommends reviewing and improving the test assertions so they actually detect the issue: 4.7/5 — The agent provides clear next steps including rewriting the test, ensuring assertions target the specific condition, and re-running verification.
  • Agent does not confuse 'test passed' with 'verification passed' — these are opposite meanings in this context: 5/5 — The agent explicitly distinguishes these concepts, laying out the expected behavior (without fix → fail, with fix → pass) and correctly concluding that a passing test without the fix means failed verification.

With-Skill Judge (Plugin)

Overall Score: 5/5
Reasoning: The agent provided a clear, correct, and well-structured answer without needing any tool calls. It correctly identified the counter-intuitive result, explained the reasoning, and offered actionable next steps. Efficient and accurate.

  • Agent correctly identifies that tests PASSING without the fix is a FAILURE — it means the tests don't catch the bug: 5/5 — The agent immediately and clearly states 'No, the verification failed' and explains that a test passing without the fix means it doesn't reproduce the bug.
  • Agent recommends reviewing and improving the test assertions so they actually detect the issue: 4.3/5 — The agent states 'The test needs to be rewritten to properly exercise the failing scenario described in the issue' which is a clear recommendation, though it could have been more specific about how to approach improving the assertions.
  • Agent does not confuse 'test passed' with 'verification passed' — these are opposite meanings in this context: 5/5 — The agent clearly distinguishes between these concepts, explicitly showing the expected behavior (test fails without fix = good) versus what happened (test passed without fix = bad verification).

Baseline Agent Output

`
No, the verification failed.

When a test passes without the fix applied, it means the test does not reproduce the bug. A properly written regression test should:

  1. FAIL without the fix (proving it catches the bug)
  2. PASS with the fix (proving the fix resolves it)

Since the test passed without the fix, it means:

  • The test doesn't actually validate the broken behavior
  • It cannot serve as a regression guard — if the fix were reverted in the future, this test wouldn't catch it

The test needs to be rewritten to properly exercise the failing code path described in the issue.
`

With-Skill Agent Output (Isolated)

`
No, the verification failed.

When verifying a test catches a bug, the expected outcome is:

  • Without fix → test should FAIL (proving it detects the bug)
  • With fix → test should PASS (proving the fix resolves it)

Since the test passed without the fix, it means the test does not actually reproduce or detect the bug. The test isn't validating the scenario that the fix addresses.

Next steps:

  1. The test needs to be rewritten to properly reproduce the failing condition described in the issue
  2. Once rewritten, re-run verification to confirm it fails without the fix and passes with it
    `

With-Skill Agent Output (Plugin)

`
No, the verification failed.

When we run tests without the fix applied, we expect them to fail — that proves the test actually catches the bug. If the test passes without the fix, it means:

  1. The test doesn't reproduce the bug — it can't distinguish between fixed and unfixed code
  2. The test provides no regression protection — it would pass regardless of whether the bug is present

What needs to happen: The test needs to be rewritten so it fails on the buggy code path and only passes once the fix is applied. This is the "red → green" principle of test-driven development.

Would you like me to look at PR #77123 and help improve the test?
`

🔍 Full results and investigation steps

Stop building and shipping the opt-in Microsoft.Maui.Controls.Compatibility package, remove its workload/package references, and delete the legacy compatibility source tree and gallery solution.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
@github-actions github-actions Bot added area-setup Installation, setup, requirements, maui-check, workloads, platform support platform/android platform/ios platform/macos macOS / Mac Catalyst platform/tizen Samsung Tizen Devices (TV) platform/windows labels Jun 11, 2026
@jfversluis jfversluis changed the base branch from main to net11.0 June 11, 2026 08:47
@jfversluis jfversluis force-pushed the jfversluis/remove-compatibility-package branch from a297576 to 015ddd0 Compare June 11, 2026 08:47
@kubaflo

kubaflo commented Jun 11, 2026

Copy link
Copy Markdown
Contributor

AI code review refresh for net11.0 target

Head reviewed: 015ddd001bf23dbbcc8ab6c20bf2375fe900999f
Target branch: net11.0 · State: Open (draft) · Verdict:LGTM (with notes) — code changes are clean and internally consistent; the red checks are pre-existing/unrelated, not caused by this PR.

What this PR does

Removes the Microsoft.Maui.Controls.Compatibility package: ~1,139 files deleted under src/Compatibility/**, plus 26 surgical edits to wiring/metadata. Reviewed independently (diff + changed files + head content) before the narrative.

Blast-radius review (package removal)

  • Workload manifest — drops the Microsoft.Maui.Controls.Compatibility library pack from WorkloadManifest.in.json. Confirmed no dangling Compatibility references remain in the manifest at head. This is an intentional breaking change for consumers that reference the compat package — appropriate for a major (net11.0); worth flagging in release notes / migration docs.
  • Build & packBuild and Pack on Windows and macOS (Debug+Release) all passed, so removal builds and packs cleanly.
  • Solution / slnf / scriptsMicrosoft.Maui.sln, both Packages*.slnf, RunTests.ps1, Detect-TestsInDiff.ps1, verify-tests-fail.ps1, and dotnet.cake all drop the compat project entries consistently.
  • Directory.Build.props — removes IncludeCompatibilityProjects and the COMPATIBILITY_ENABLED define; dependent ProjectReference/PackageReference conditions were removed in the same PR.
  • AssemblyInfoInternalsVisibleTo entries for compat assemblies pruned in Core/Controls/Xaml/Essentials. Fine.
  • SampleCompatibilityPage is retained (renamed section to "Legacy Controls") and at head has no dependency on the removed package (no using Microsoft.Maui.Controls.Compatibility); only the UseMauiCompatibility/package wiring was removed. Internally consistent.
  • Minor / low-risk — stale image URLs that pointed at deleted src/Compatibility/ControlGallery/** paths were repointed to main raw paths (giftwo.gif, coffee.png, legumes.jpg, vegetables.jpg). These are runtime-fetched in samples/tests; worth a sanity check that the new main paths exist, but not blocking.

CI status (build 1459248)

  • AOT macOS, RunOniOS_MauiRelease, RunOniOS_MauiReleaseTrimFull (+CoreCLR)AOTTemplateTest.PublishNativeAOT[RootAllMauiAssemblies] failing with "Unexpected warning files detected". The warnings are IL2026/IL3050 on HybridWebViewHandler (System.Text.Json dynamic serialization) — unrelated to the Compatibility removal. This is known issue AOT integration tests fail: unexpected IL3050 warnings for HybridWebViewHandler #34867 (closed 2026-06-10, baseline update). The fix post-dates this branch, so rebasing onto latest net11.0 should clear these.
  • Skill Validation / skill-validation / evaluate — LLM eval of the verify-tests-fail-without-fix skill; the failure is an eval-harness lint (scenario prompts mention the target name), pre-existing and unrelated to the one-line dictionary edit in this PR.
  • ⏳ Pending: overall maui-pr, Helix Unit Tests (Windows Debug/Release), Build Analysis.
  • ✅ Passing: Build/Pack (Win+macOS), RunOnAndroid, MauiDebug, Blazor (Debug/Release), MauiNativeAOT, Samples, MultiProject, WindowsTemplates, MauiRelease_CoreCLR, Spellcheck, CLA, PR gate.

Prior review reconciliation

No prior human reviews, inline review comments, or earlier fleet markers on this PR — only automated bot comments (dogfood, skill-validation). No outstanding ❌ findings to reconcile.

Findings summary

  • No correctness issues found in the changed files; the removal is mechanically consistent and Build/Pack succeed.
  • Red CI is not attributable to this PR (known AOT issue AOT integration tests fail: unexpected IL3050 warnings for HybridWebViewHandler #34867 + skill eval harness). Recommend a rebase on latest net11.0 to turn the AOT jobs green, and lifting the PR out of draft once Helix completes.
  • Track the breaking-removal in migration/release notes.

Confidence: Medium-high — verified diff, head file contents, manifest consistency, CI logs (ILC warning source), and the matching known issue.

⚠️ Non-approval disclaimer: This is an automated AI review for the net11.0 fleet refresh. It is not an approval and does not request changes. Approval/merge remains a human decision.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
@kubaflo

kubaflo commented Jun 12, 2026

Copy link
Copy Markdown
Contributor

AI code review refresh for net11.0 target

Head reviewed: 3473836dc12e1165ad12dafafd10675c982f9d2b
Target branch: net11.0 · State: Open (draft) · Verdict:LGTM (with notes) — code changes remain clean and internally consistent; the red checks are the same pre-existing/unrelated AOT-trim baseline issue, not caused by this PR.

What changed since round 17 (015ddd0)

Only one new commit (3473836, "Remove skill name from verification eval prompts"), touching a single non-code file: .github/skills/verify-tests-fail-without-fix/tests/eval.yaml (+3/−3). It just rewords three eval-scenario prompts ("verify-tests-fail-without-fix" → "test verification workflow"). No impact on the package-removal surface.

The PR itself still removes the Microsoft.Maui.Controls.Compatibility package: 1,139 files deleted under src/Compatibility/** plus 27 surgical edits to wiring/metadata. Reviewed independently (file list + per-file patches + head content) before the PR narrative.

Blast-radius review (package removal)

  • Workload manifestWorkloadManifest.in.json drops the Microsoft.Maui.Controls.Compatibility library pack; no dangling compat references remain. Intentional breaking change for consumers referencing the compat package — appropriate for a major (net11.0); flag in migration/release notes.
  • Build & pack — Build + Pack on Windows and macOS (Debug+Release) passed; removal builds and packs cleanly.
  • Solution / slnf / scriptsMicrosoft.Maui.sln, both Packages*.slnf, RunTests.ps1, Detect-TestsInDiff.ps1, dotnet.cake consistently drop the compat project + its grouping folders and configuration rows. (Minor nit: the sln diff inserts a leading blank line before the format header — harmless to VS/MSBuild parsers.)
  • Directory.Build.props — removes IncludeCompatibilityProjects and the COMPATIBILITY_ENABLED define; dependent conditions removed in the same PR.
  • AssemblyInfoInternalsVisibleTo entries for compat assemblies pruned in Core/Controls/Xaml/Essentials. Consistent.
  • SampleCompatibilityPage is retained (section renamed to "Legacy Controls"); MauiProgram.cs removes the Compatibility.Hosting using + dead commented AddCompatibilityRenderer block. No remaining dependency on the removed package.
  • Image URL re-pointing (prior open item — now resolved) — stale src/Compatibility/ControlGallery/** raw URLs were repointed. I verified the new targets exist at head: coffee.png + giftwo.gif (TestCases.HostApp/Resources/Images) and legumes.jpg + vegetables.jpg (Controls.Sample/Resources/Images). ✅

CI status (build 1460927)

  • AOT macOS, RunOniOS_MauiRelease ARM64, RunOniOS_MauiReleaseTrimFull ARM64 (+CoreCLR) — verified the actual failure in the logs is AOTTemplateTest.PublishNativeAOT* / iOS Release "Unexpected warning files detected", caused by IL3050/IL2026 on Microsoft.Maui.Handlers.HybridWebViewHandler.WebViewScriptMessageHandler..cctor() (RequiresDynamicCode / dynamic JSON). This is unrelated to the Compatibility removal — no compat type appears in the trim/AOT warning analysis — and matches known issue AOT integration tests fail: unexpected IL3050 warnings for HybridWebViewHandler #34867 (baseline warning update). A rebase onto latest net11.0 should clear these.
  • Build Analysis — wrapper reporting the above known AOT jobs.
  • Skill Validation / skill-validation — "LLM evaluation failed" on the verify-tests-fail-without-fix eval harness; infra/eval flake, unrelated to this PR (the new commit only rewords prompts, and evaluate (verify-tests-fail-without-fix) itself passed).
  • ✅ Passing: Build + Pack (Win+macOS, Debug+Release), Helix Unit Tests (Win Debug+Release), RunOnAndroid, MauiDebug, MauiNativeAOT, Blazor (Debug/Release + CoreCLR), MauiRelease_CoreCLR, Samples, MultiProject, WindowsTemplates, AOT windows, CLA, PR gate, static validation.

Prior review reconciliation

  • Latest fleet marker is round 17 (copilot-cli-net11-fleet-review-round17, verdict LGTM-with-notes). No round 18 marker exists; no human reviews or inline review comments on this PR.
  • Round 17's two open notes are reconciled here: (1) the new image raw paths are confirmed to exist; (2) the red AOT/iOS CI is re-confirmed as the same known issue AOT integration tests fail: unexpected IL3050 warnings for HybridWebViewHandler #34867, not regression. No outstanding ❌ correctness findings.

Findings summary

  • No correctness issues in the changed files; removal is mechanically consistent and Build/Pack succeed.
  • Red CI is not attributable to this PR (known AOT/trim baseline AOT integration tests fail: unexpected IL3050 warnings for HybridWebViewHandler #34867 + skill-eval harness flake). Recommend rebasing on latest net11.0 to green the AOT/iOS jobs, then lifting out of draft.
  • Track the breaking package removal in migration/release notes.

Confidence: High — verified the single inter-commit delta, the full changed-file patches, manifest/sln/props consistency, the AOT + iOS Release failure signatures in the build logs (HybridWebViewHandler IL2026/IL3050), and the existence of the re-pointed image assets.

⚠️ Non-approval disclaimer: This is an automated AI review for the net11.0 fleet refresh. It is not an approval and does not request changes. Approval/merge remains a human decision.

@kubaflo

kubaflo commented Jun 16, 2026

Copy link
Copy Markdown
Contributor

PR #35870 — Remove MAUI compatibility package

Verdict: NEEDS_DISCUSSION (confidence: medium) — HEAD 3473836. This is a large, mostly-mechanical removal (~170k deletions across 1166 files) of the opt-in Microsoft.Maui.Controls.Compatibility (Xamarin.Forms migration) package. I did a light-touch technical pass rather than a full multi-model code review since the change is deletion-dominated — the substantive decision here is a release-management/deprecation call, which is why the author has already tagged @PureWeen.

Technical check — removal looks clean

  • No dangling references: at this head, git grep finds 0 remaining Microsoft.Maui.Controls.Compatibility references in any *.csproj, and none in build/manifest/*.slnf/*.props/*.targets/cake files. So the package and its consumers were removed consistently.
  • The only non-deletion edits are 3 files: Microsoft.Maui.sln (drop the Compatibility projects), eng/cake/dotnet.cake (build wiring), and .github/skills/verify-tests-fail-without-fix/tests/eval.yaml (+3/-3) — all consistent with the removal.

⚠️ One CI item to confirm

The Skill Validation / skill-validation check is failing ("LLM evaluation failed"), and this PR edits .github/skills/verify-tests-fail-without-fix/tests/eval.yaml. Please confirm that edit didn't break the skill eval (vs. an unrelated LLM-eval flake). The other red legs — Build Analysis, AOT macOS, RunOniOS_MauiRelease/TrimFull — are the known unrelated infra flakes.

For the maintainers (policy, not code)

Dropping a shipped, opt-in package is a breaking change for any consumer still referencing Microsoft.Maui.Controls.Compatibility. That's a deliberate deprecation decision for the release owners — flagging for an explicit sign-off + a release-note/migration-guidance entry, not as a code defect.

No code-level blocking issues found in the removal itself.

Multi-model review (gpt-5.5 · opus-4.8 · opus-4.6 · gemini-3.1-pro). Comments only — not a formal approval.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

area-setup Installation, setup, requirements, maui-check, workloads, platform support platform/android platform/ios platform/macos macOS / Mac Catalyst platform/tizen Samsung Tizen Devices (TV) platform/windows

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants