Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
238 commits
Select commit Hold shift + click to select a range
a97fd0d
[ci] Add copilot CI
rmarinho Dec 12, 2025
539bdcf
Install GH
rmarinho Dec 12, 2025
62109e9
Try again
rmarinho Dec 12, 2025
e0e367a
skip codeql
rmarinho Dec 12, 2025
55c0331
Pipe the output
rmarinho Dec 12, 2025
3a81e85
Cleanup file
rmarinho Dec 12, 2025
69326b2
fix prompt
rmarinho Jan 23, 2026
ca59d6d
Fixx
rmarinho Jan 23, 2026
e8fc0a3
Fix it again
rmarinho Jan 23, 2026
f7b5a58
add provisioning
rmarinho Jan 23, 2026
6339ba8
again
rmarinho Jan 23, 2026
25f4df2
try update
rmarinho Jan 23, 2026
747523e
skip certs
rmarinho Jan 23, 2026
4370f80
skip certs
rmarinho Jan 23, 2026
23486ca
comment
rmarinho Jan 23, 2026
d4f77f0
try again
rmarinho Jan 23, 2026
7acc340
Update script
rmarinho Jan 23, 2026
26447f2
Try again
rmarinho Jan 23, 2026
bc5e3f1
Try list first
rmarinho Jan 23, 2026
cc81674
even before
rmarinho Jan 23, 2026
98223da
again
rmarinho Jan 23, 2026
4b50a0b
Again
rmarinho Jan 23, 2026
6ff306b
Enhance Copilot PR review and comment steps
kubaflo Jan 30, 2026
de8f70d
Updated the prompt
kubaflo Jan 30, 2026
0e720a2
Cache PR review prompt before checkout
kubaflo Jan 31, 2026
12a788e
Improve iOS simulator auto-selection logic
kubaflo Jan 31, 2026
44b2755
Cherry-pick PR commits onto current branch
kubaflo Jan 31, 2026
7ab081c
Build MSBuild tasks in CI for MAUI
kubaflo Jan 31, 2026
4a4f213
Remove agent sessions
kubaflo Jan 31, 2026
06a01d8
Create iPhone Xs simulator for iOS 18.5
kubaflo Jan 31, 2026
96334e7
Enable provisionator in CI pipeline
kubaflo Feb 1, 2026
b7f0ad4
Add maui-provisionator variable group
kubaflo Feb 1, 2026
598a48c
Detect host/simulator arch and use iOS RID
kubaflo Feb 1, 2026
7d0a336
Make the build faster for testing
kubaflo Feb 1, 2026
a74865e
Update provision.yml
kubaflo Feb 1, 2026
eb7df64
Update provision.yml
kubaflo Feb 1, 2026
65c2cf8
Update provision.yml
kubaflo Feb 1, 2026
4c56f32
Update pr-review-prompt.md
kubaflo Feb 1, 2026
18f36da
Update ci-copilot.yml to use Review-PR.ps1 script
PureWeen Feb 1, 2026
5fd118d
Add Android/JDK provisioning steps to provision.yml
PureWeen Feb 1, 2026
03a33c3
Add Android emulator provisioning and boot step
PureWeen Feb 1, 2026
3ed6c2f
It should work
kubaflo Feb 2, 2026
d75e77f
Enable Android emulators and set API level to 34
kubaflo Feb 3, 2026
ffe9ebf
Improve ADB reliability and Appium setup
kubaflo Feb 3, 2026
8a34f17
Add verify-tests-fail step to CI pipeline
kubaflo Feb 3, 2026
789eda3
Update ci-copilot.yml
kubaflo Feb 3, 2026
50aee9f
Add verbose Android emulator and test steps
kubaflo Feb 3, 2026
d464c4c
Increase emulator timeout and adjust CI steps
kubaflo Feb 3, 2026
a503a97
Make AVD list safe and add PR cherry-pick step
kubaflo Feb 3, 2026
b4e4ead
Fix Android emulator start: add -no-window flag, use adb wait-for-device
kubaflo Feb 3, 2026
7c81b1e
Simplify Android build and emulator scripts
kubaflo Feb 3, 2026
8e39317
Update ci-copilot.yml
kubaflo Feb 3, 2026
917649f
Update ci-copilot.yml
kubaflo Feb 3, 2026
7bc8410
Fix Android emulator boot by using ARM64 macOS image
PureWeen Feb 3, 2026
ac0039d
Fix Android emulator startup with better timeout handling and diagnos…
kubaflo Feb 3, 2026
e189817
Fix 'Boot Android Emulator' step with same improvements
PureWeen Feb 3, 2026
f3c9398
Disable hardware acceleration for Android emulator on Azure hosted ag…
PureWeen Feb 3, 2026
f9f7db1
Force TCG software emulation for Android emulator (-qemu -accel tcg)
PureWeen Feb 3, 2026
b9b799a
Add QEMU_ACCEL=tcg environment variable to force TCG emulation
PureWeen Feb 3, 2026
9492729
Switch to Intel macOS agent (macOS-15) for Android emulator support
PureWeen Feb 3, 2026
e980847
Switch to macOS-14 and increase emulator boot timeout to 180s
PureWeen Feb 3, 2026
31f5485
Skip Platform APIs and Common SDKs provisioning (pre-installed on mac…
PureWeen Feb 3, 2026
299b678
Increase emulator boot timeout to 300s/15min
PureWeen Feb 3, 2026
465e22f
Increase emulator timeout to 30 minutes
PureWeen Feb 3, 2026
7ce6e14
Remove redundant steps, reduce emulator timeout to 15min
PureWeen Feb 3, 2026
88cff89
Remove Build and Run HostApp step (PR Reviewer handles this)
PureWeen Feb 4, 2026
3a61aec
Wait for package manager service before declaring emulator ready
PureWeen Feb 4, 2026
28173a3
Increase emulator timeout to 30 minutes
PureWeen Feb 4, 2026
4078332
Restart emulator just before PR Reviewer to ensure freshness
PureWeen Feb 4, 2026
ae2f366
Fix Android device ID parsing in Start-Emulator.ps1
PureWeen Feb 4, 2026
f536f49
Increase Android emulator boot timeout to 600s (10 min)
PureWeen Feb 4, 2026
e4cbf17
Restore AVD auto-detection, pass Emulator_34 explicitly in CI
PureWeen Feb 4, 2026
92dd3a1
Use Review-PR.ps1 switches for posting comments
PureWeen Feb 4, 2026
88a7084
Switch to AcesShared pool (ARM64 macOS)
PureWeen Feb 4, 2026
8fca884
Enable Android SDK provisioning for AcesShared pool
PureWeen Feb 4, 2026
a9fdae1
Add PATH setup for Android SDK tools on AcesShared pool
PureWeen Feb 4, 2026
ada17da
Use ##vso[task.prependpath] to persist PATH for Android SDK tools
PureWeen Feb 5, 2026
8f8b910
Add ai-summary-comment fallback step and improve skill discovery
PureWeen Feb 5, 2026
73d24e1
Configure git identity for merge operations on self-hosted agents
PureWeen Feb 5, 2026
5f642f4
Add mandatory cleanup between try-fix attempts and common errors section
PureWeen Feb 5, 2026
d3c4162
Fix ai-summary-comment invocation and fallback
PureWeen Feb 6, 2026
26f7a14
Remove generic fallback comment - only use post-ai-summary-comment.ps1
PureWeen Feb 6, 2026
1c0ba83
Pass -StateFile to fallback when using alternative path (codex review…
PureWeen Feb 6, 2026
ccb7521
Fallback: restore clean tree before running script, use -PRNumber
PureWeen Feb 6, 2026
b4cf64d
Fix AI summary comment: prevent state file overwrite, run script dire…
invalid-email-address Feb 6, 2026
2708fb5
Fix Copilot CLI auth: use COPILOT_GITHUB_TOKEN to avoid GH_TOKEN conf…
invalid-email-address Feb 6, 2026
262e932
Increase job timeout to 180 min (Phase 1 takes ~90 min)
invalid-email-address Feb 6, 2026
cc3657b
Fix: stop try-fix from committing state file (causes git checkout rev…
PureWeen Feb 6, 2026
021b8a2
Fix: use 'git checkout HEAD -- .' to restore deleted files between ph…
PureWeen Feb 6, 2026
d0fe9e7
Add diagnostics and harden phase transitions
PureWeen Feb 6, 2026
ffe42e5
Fix step hanging: replace tee pipe with Start-Transcript
PureWeen Feb 6, 2026
d9df388
Fix step hanging: stop orphaned copilot/node processes at exit
PureWeen Feb 6, 2026
20a70fb
Fix step hang: cleanup orphans at both PS and bash levels
PureWeen Feb 6, 2026
bf3f617
Fix: only cleanup copilot processes, not ADO agent node process
PureWeen Feb 6, 2026
0f8ba01
Remove unused pr-review-prompt.md
PureWeen Feb 7, 2026
efdfe5c
Add iOS platform support to ci-copilot pipeline
PureWeen Feb 8, 2026
6ca0fbe
Skip Xcode version check on AcesShared agents
PureWeen Feb 8, 2026
ae31c11
Enhance PR review: finalize output & comments
kubaflo Feb 9, 2026
2305bb3
Increase multi-model try-fix to 6 models
PureWeen Feb 9, 2026
854a10a
Address PR review: Windows compat, cleanup consistency, and code qual…
PureWeen Feb 9, 2026
920f256
Switch Android emulator to API 30 to match maui-pr pipeline
PureWeen Feb 9, 2026
03d6199
Fix: Extract Report content from '## Final Recommendation' heading fa…
kubaflo Feb 10, 2026
ec221c2
Add agent workflow metrics labels (s/agent-* prefix)
kubaflo Feb 10, 2026
d508f11
Use hardware GPU for Android emulator on macOS (match maui-pr pipeline)
PureWeen Feb 10, 2026
807d9fb
Install both Appium drivers (agent may switch platforms for platform-…
PureWeen Feb 10, 2026
9b9b1a3
Collect UI test screenshots and page source in CopilotLogs artifact
PureWeen Feb 11, 2026
7ce5e3f
Fix: Always update AI Summary comment instead of skipping when one ex…
PureWeen Feb 11, 2026
544b35d
Fix: Prevent fallback comment step from hanging on stdin
PureWeen Feb 11, 2026
655bdd6
Add PRAgent outputs and CI autonomous behavior
kubaflo Feb 12, 2026
3194e28
Require PRNumber, adjust PR script log path
kubaflo Feb 12, 2026
4c2c32f
Use PRAgent subdir for PRState try-fix paths
kubaflo Feb 12, 2026
2d7afec
Clarify autonomous execution wording
kubaflo Feb 12, 2026
66788a1
Revert labels logic
kubaflo Feb 12, 2026
ef0f542
Always auto-load PRAgent phase files
kubaflo Feb 13, 2026
4519bc6
Pin restore point and restore git state between phases
kubaflo Feb 13, 2026
28bc3cc
Add agent label automation and docs
kubaflo Feb 14, 2026
4d804b2
Add unified mode for PR finalization comments
kubaflo Feb 14, 2026
6299ffd
Use version-specific iOS preferred devices
kubaflo Feb 16, 2026
b3539ff
Shutdown other booted iOS simulators
kubaflo Feb 17, 2026
4896e12
Fix iOS simulator fallback: try iPhone 11 Pro when iPhone Xs device t…
kubaflo Feb 17, 2026
005dd38
ci-copilot: set pipeline run title early using build.updatebuildnumbe…
Copilot Feb 20, 2026
cc37d34
[ci] Fix variables
rmarinho Feb 20, 2026
31a95a7
Merge branch 'copilot-ci-rui' into copilot-ci
rmarinho Feb 20, 2026
1dfaf81
[ci] Publish-Build-Assets just for pack/release build
rmarinho Feb 20, 2026
11c40ba
Merge branch 'copilot-ci-rui' into copilot-ci
rmarinho Feb 20, 2026
66a705a
Update ci-copilot.yml
kubaflo Feb 20, 2026
a447b11
Revert "Add agent label automation and docs"
kubaflo Feb 25, 2026
9c8824a
Merge branch 'main' into copilot-ci
kubaflo Feb 26, 2026
eba391e
Fix XAML C# expression setter generation for read-only properties (#3…
StephaneDelcroix Feb 26, 2026
f103c32
Adjust simulator and Android emulator defaults
kubaflo Feb 26, 2026
d404e27
Add correct CI pipeline names to Copilot instructions (#34255)
jfversluis Feb 26, 2026
01cc951
Add a GitHub action to update global.json whenever maestro changes it…
rolfbjarne Feb 26, 2026
c7a9ed5
Fix dogfood scripts: workflow trigger, build detection, and in-progre…
jfversluis Feb 26, 2026
75ceb1b
Add resilience to UI tests for frozen/unresponsive apps (#34023)
PureWeen Feb 26, 2026
e6bb31a
[docs] Add concise maui CLI command reference (#34217)
rmarinho Feb 26, 2026
006a4de
Merge branch 'main' into copilot-ci
kubaflo Feb 26, 2026
76b01e4
Fix Glide IllegalArgumentException in PlatformInterop for destroyed a…
Copilot Feb 2, 2026
fbdaec5
[iOS] Fix MauiCALayer and StaticCAShapeLayer crash on finalizer threa…
pshoey Feb 2, 2026
322f69e
[Android] Fixed duplicate title icon when setting TitleIconImageSourc…
SubhikshaSf4851 Feb 3, 2026
6b07ab0
[Android] Fix Numeric Entry not accepting the appropriate Decimal Sep…
devanathan-vaithiyanathan Feb 3, 2026
fd276c6
[Android & iOS] Entry/Editor: Dismiss keyboard when control becomes i…
prakashKannanSf3972 Feb 3, 2026
c57f77c
[Android] Shell: Fix OnBackButtonPressed not firing for navigation ba…
kubaflo Feb 4, 2026
061a200
[Android] Fixed PointerGestureRecognizer not triggering PointerMoved …
KarthikRajaKalaimani Feb 5, 2026
5ad59f0
Fixed Editor vertical text alignment not working after toggling IsVis…
NanthiniMahalingam Feb 13, 2026
eee0535
[iOS] Fixed Shell Navigating event showing same current and target va…
Vignesh-SF3580 Feb 13, 2026
757447a
Fix ImageButton not rendering correctly based on its bounds (#28309)
Shalini-Ashokan Feb 17, 2026
2133acd
[Android] Fixed issue where group Header/Footer template was applied …
Tamilarasan-Paranthaman Feb 17, 2026
116bf55
[Android] Fixed CollectionView items do not reorder correctly when us…
NanthiniMahalingam Feb 17, 2026
7b77352
[Android] Fix for incorrect scroll position when using ScrollTo with …
SyedAbdulAzeemSF4852 Feb 18, 2026
d8d5cb7
Fixed the crash on iOS when setting HeightRequest on WebView inside a…
Ahamed-Ali Feb 19, 2026
6ed4d42
[iOS, macOS] Fixed Shell Flyout Icon is always black in iOS 26 (#32997)
Dhivya-SF4094 Feb 20, 2026
b50b700
Fix Incorrect Scrolling Behavior in CollectionView ScrollTo Method Us…
Shalini-Ashokan Feb 20, 2026
15e8a3c
[Android] Fixed TransformProperties issue when a wrapper view is pres…
Ahamed-Ali Feb 20, 2026
fb104dc
[Android] Fix System.IndexOutOfRangeException when scrolling Collecti…
devanathan-vaithiyanathan Feb 20, 2026
746d160
[Android] Fix VerticalOffset Update When Modifying CollectionView.Ite…
devanathan-vaithiyanathan Feb 20, 2026
9291950
[Testing] Fix for enable uitests ios26 (#33686)
TamilarasanSF4853 Feb 21, 2026
4058e34
[Testing] Fixed Test case failure in PR 34173 - [02/21/2026] Candidat…
TamilarasanSF4853 Feb 23, 2026
66a814e
[Android] Fix PointerMoved and PointerReleased not firing in PointerG…
KarthikRajaKalaimani Feb 24, 2026
4b17d62
[Testing] Fixed Test case failure in PR 34173 - [02/21/2026] Candidat…
TamilarasanSF4853 Feb 25, 2026
b3da178
Remove build status badges from README (#34282)
jfversluis Feb 27, 2026
ad30170
Fix NullReferenceException when binding to Dictionary<Enum, object> w…
StephaneDelcroix Mar 2, 2026
6f3847e
February 21st, 2026 Candidate Branch (#34173)
PureWeen Mar 2, 2026
e26c222
Revert "February 21st, 2026 Candidate Branch" (#34292)
jfversluis Mar 2, 2026
9505978
February 21st, 2026 Candidate Branch (#34293)
jfversluis Mar 2, 2026
e4e3573
[AI] Fix multi-turn tool calling, add chat overlay, upgrade Agent Fra…
mattleibow Mar 3, 2026
4384c00
Copilot CI: Structured phase outputs, autonomous execution, iOS suppo…
jfversluis Mar 3, 2026
8fa1875
Add agent label automation and docs
kubaflo Feb 26, 2026
c5fadf8
Agent Workflow Metrics via GitHub Labels (#33986)
jfversluis Mar 3, 2026
2f22928
[ci] Auto-trigger uitests and device-tests on darc-* branches (#34317)
PureWeen Mar 4, 2026
2c6474f
Add PublicAPI.Unshipped.txt BOM sort warning to Copilot instructions …
jfversluis Mar 5, 2026
3e2acb4
[Android] Fix crash in GraphicsView when using TapGestureRecognizer (…
jpd21122012 Mar 5, 2026
538463e
[Android] Fix Label with MaxLines truncating text in horizontal Scrol…
Vignesh-SF3580 Mar 5, 2026
e8265c0
Add Android NativeAOT integration tests (#33756)
sbomer Mar 6, 2026
021053a
[Testing] Feature Matrix UITest Cases for Shell Flyout Page (#32525)
NafeelaNazhir Feb 23, 2026
d93eb70
[Android, Windows] Fix for FlyoutPage toolbar button not updating on …
praveenkumarkarunanithi Feb 23, 2026
47b9d94
Fix for First Item in CollectionView Overlaps in FlyoutPage.Flyout on…
praveenkumarkarunanithi Feb 23, 2026
dc75f76
[Android] Fix RemainingItemsThresholdReachedCommand not firing when C…
SuthiYuvaraj Feb 23, 2026
5d71c59
[Windows] Fixed IsEnabled Property not works on Tabs (#26728)
NirmalKumarYuvaraj Feb 23, 2026
7f3e760
Bumps Syncfusion.Maui.Toolkit dependency to version 1.0.9 (#34178)
PaulAndersonS Feb 23, 2026
bbd7f28
[iOS] Fix toolbar items ignoring BarTextColor on iOS/MacCatalyst 26+ …
Shalini-Ashokan Feb 23, 2026
566fff2
[Testing] Feature Matrix UITest Cases for Brushes (#31833)
LogishaSelvarajSF4525 Feb 23, 2026
9dedb99
[Android] Fix Circle Stroke color is incorrectly updated as Fill colo…
NirmalKumarYuvaraj Feb 23, 2026
6886d6f
[Android] Fix TabBar FlowDirection not updating dynamically (#33091)
SubhikshaSf4851 Feb 23, 2026
445fcd6
[Android] Fix page not disposed on Shell replace navigation (#33426)
Vignesh-SF3580 Feb 23, 2026
92dc834
[Android] Fix excessive memory usage for stream and resource-based im…
Shalini-Ashokan Feb 23, 2026
c0e0d9b
[iOS/MacCatalyst] Fix CollectionView ScrollTo for horizontal layouts …
Shalini-Ashokan Feb 23, 2026
b86cba5
ContentPresenter: Propagate binding context to children with explicit…
HarishwaranVijayakumar Feb 23, 2026
a66efa2
[Android] Fix for Resize method returns an image that has already bee…
SyedAbdulAzeemSF4852 Feb 23, 2026
f282ff5
[iOS, Mac] Fix for CursorPosition not updating when typing into Entry…
SyedAbdulAzeemSF4852 Feb 23, 2026
985551b
[iOS & Mac] Fixed IndicatorView Size doesnt update dynamically (#31129)
SubhikshaSf4851 Feb 23, 2026
7f9f536
[iOS] Fix SwipeView stays open on iOS after updating content (#31248)
devanathan-vaithiyanathan Feb 23, 2026
377a4a1
[Android] Fixed Shell flyout does not disable scrolling when FlyoutVe…
NanthiniMahalingam Feb 24, 2026
6b681a7
[Testing] Feature Matrix UITest Cases for BindableLayout (#33108)
LogishaSelvarajSF4525 Feb 24, 2026
8634e1d
[Android] Add UI tests for Material 3 CheckBox (#34126)
HarishwaranVijayakumar Feb 24, 2026
ad9b09a
Fix ContentPage memory leak on Android when using NavigationPage moda…
brunck Feb 24, 2026
cd0bc47
Clarify MA003 error message (#34067)
jeremy-visionaid Feb 24, 2026
6d8bfc8
Fix: Throw a clear error when an SVG lacks dimensions instead of a Nu…
Shalini-Ashokan Feb 24, 2026
3014914
[Android] Fix for CollectionView Scrolled event is triggered on the i…
BagavathiPerumal Feb 24, 2026
7f6db9c
[Android] Fix NavigationBar overlapping StatusBar when NavigationBar …
Vignesh-SF3580 Feb 24, 2026
3d0469e
Fix for NavigationPage.TitleView does not expand with host window in …
SuthiYuvaraj Feb 24, 2026
aa174b5
[Testing] Feature Matrix UITest Cases for Shell Tabbed Page (#33159)
NafeelaNazhir Feb 24, 2026
9bc78e2
[Android] Fix for ToolbarItem retaining the icon from the previous pa…
BagavathiPerumal Feb 24, 2026
2e79d00
Fixed Label Span font property inheritance when applied via Style (#…
SubhikshaSf4851 Feb 24, 2026
ab215d0
[iOS, Android] Fix for CollectionView IsEnabled=false allows touch in…
praveenkumarkarunanithi Feb 24, 2026
81dbe0e
Fix for unable to open task using keyboard navigation on windows plat…
SuthiYuvaraj Feb 25, 2026
25dd365
[Android] Implement material3 support for TimePicker (#33646)
HarishwaranVijayakumar Feb 26, 2026
adfa470
[Android] Fix WebView in a grid expands beyond it's cell (#32145)
devanathan-vaithiyanathan Feb 26, 2026
1cf83b9
[iOS] Fix: invoke MediaPicker completion handler after DismissViewCon…
yuriikyry4enko Feb 26, 2026
ad51bb6
[Android] Fix DatePicker MinimumDate/MaximumDate not updating dynamic…
HarishwaranVijayakumar Feb 27, 2026
f118ecc
Fix crash when closing Windows based app when using TitleBar (#34032)
MFinkBK Feb 27, 2026
1f0bc7d
[Android] Implemented material3 support for Button (#33173)
Dhivya-SF4094 Feb 27, 2026
4320975
[Android] Implemented material3 support for RadioButton (#33468)
SyedAbdulAzeemSF4852 Feb 27, 2026
3a8ff02
[Android] Implemented Material3 support for Picker (#33668)
SyedAbdulAzeemSF4852 Feb 28, 2026
6832883
[Android] Implemented material3 support for Editor (#33478)
SyedAbdulAzeemSF4852 Feb 28, 2026
c60fccb
[Android] Implemented material3 support for Label (#33599)
SyedAbdulAzeemSF4852 Mar 1, 2026
6e1f847
Android drawable perf (#31567)
albyrock87 Mar 2, 2026
ee3b9ad
[iOS] Fix VerticalOffset Update When Modifying CollectionView.ItemsSo…
devanathan-vaithiyanathan Mar 2, 2026
3f9a1dd
[Revert] ContentPresenter: Propagate binding context to children with…
Ahamed-Ali Mar 4, 2026
2c73f63
[Testing] Fixed Test case failure in PR 34294 - [03/2/2026] Candidate…
TamilarasanSF4853 Mar 6, 2026
6c123d7
[iOS] Fix SafeArea infinite layout cycle with parent hierarchy walk a…
PureWeen Mar 6, 2026
76e044d
Add MauiXamlHotReload to the list of CompilerVisibleProperties (#34405)
noiseonwires Mar 10, 2026
f0853e1
Add version 11.0.0-preview2/10.0.50 to bug report template (#34412)
PureWeen Mar 10, 2026
a5d128d
[Android]Fix TestDoesntCrashWithCachingDisable UI Test failure (#34398)
devanathan-vaithiyanathan Mar 11, 2026
5c2c57f
[ci] Fix internal pipeline OfficialBuildId format (#34409)
PureWeen Mar 11, 2026
3a6081d
March 2, 2026 Candidate Branch (#34294)
PureWeen Mar 11, 2026
723e709
Update PatchVersion from 50 to 60 (#34439)
PureWeen Mar 11, 2026
f6314b5
[ci] Copilot CI: Android device tests, emulator robustness, and snaps…
PureWeen Mar 11, 2026
e10b0be
[Regression] Fix TypedBinding nested property re-subscription (#34428…
StephaneDelcroix Mar 13, 2026
e2f570f
CI Investigation: adopt dotnet/arcade-skills plugin + thin MAUI conte…
PureWeen Mar 16, 2026
541a7a3
Replace PR agent with pr-review skill and decouple comment posting (#…
kubaflo Mar 17, 2026
bd4b125
Fix MAUIG2045 false positive with x:Reference source in DataTemplate …
StephaneDelcroix Mar 18, 2026
c1b4a01
Add evaluate-pr-tests skill for test quality evaluation (#34329)
jfversluis Mar 18, 2026
fc1dadc
Update Magick.NET-Q8-AnyCPU from 13.5.0 to 14.10.4 (#34455)
Copilot Mar 18, 2026
acdb7b2
Remove dead OnlyAndroid method from integration tests (#34517)
PureWeen Mar 18, 2026
613f2b2
Reset files to net11.0
github-actions[bot] Mar 18, 2026
06edf90
Merge remote-tracking branch 'origin/net11.0' into merge/main-to-net11.0
github-actions[bot] Mar 18, 2026
c2b4be8
Bump Microsoft.Extensions.AI to 10.3.0 (from main)
github-actions[bot] Mar 18, 2026
8dc06f3
Add missing Microsoft.Agents.AI version properties from main
github-actions[bot] Mar 18, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
6 changes: 5 additions & 1 deletion .github/ISSUE_TEMPLATE/bug-report.yml
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,9 @@ body:
label: Version with bug
description: In what version do you see this issue? Run `dotnet workload list` to find your version.
options:
- 11.0.0-preview2
- 11.0.0-preview.1
- 10.0.50
- 10.0.40
- 10.0.30
- 10.0.20
Expand Down Expand Up @@ -162,7 +164,9 @@ body:
- 10.0.20
- 10.0.30
- 10.0.40
- 11.0.0-preview.1
- 10.0.50
- 11.0.0-preview.1
- 11.0.0-preview.2
validations:
required: true
- type: dropdown
Expand Down
38 changes: 19 additions & 19 deletions .github/README-AI.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,8 @@ This folder contains instructions and configurations for AI coding assistants wo

## Available Agents

### PR Agent
The PR agent is a unified 4-phase workflow for investigating issues and reviewing/working on PRs. It handles everything from context gathering through test verification, fix exploration, and creating PRs or review reports.
### PR Review Agent
The pr-review skill is a 4-phase orchestrator for investigating issues and reviewing/working on PRs. It invokes dedicated phase skills (pr-preflight, pr-gate, try-fix, pr-report) for context gathering, test verification, fix exploration, and review reports.

### Sandbox Agent
The sandbox agent is your general-purpose tool for working with the .NET MAUI Sandbox app. Use it for manual testing, PR validation, issue reproduction, and experimentation with MAUI features.
Expand Down Expand Up @@ -84,13 +84,13 @@ copilot
please write UI tests for issue #12345
```

**PR Agent:**
**Try-Fix-Validate Agent:**
```bash
# Start GitHub Copilot CLI with agent support
copilot

# Invoke the pr agent
/agent pr
# Invoke the pr-review skill
/skill pr-review

# Fix an issue or review a PR
please fix issue #12345
Expand All @@ -112,7 +112,7 @@ please review https://github.com/dotnet/maui/pull/XXXXX
3. **Choose your agent** from the dropdown:
- `sandbox-agent` for manual testing and experimentation
- `write-tests-agent` for writing tests (invokes appropriate skill)
- `pr` for reviewing and working on existing PRs
- `pr-review skill` for reviewing and working on existing PRs

4. **Enter a task** in the text box:
- For sandbox testing: `Please test PR #32479`
Expand Down Expand Up @@ -146,9 +146,9 @@ Automated testing specialist for the .NET MAUI test suite:
4. **Cross-Platform** - Tests on iOS, Android, Windows, and MacCatalyst
5. **Automated Workflow** - Uses `BuildAndRunHostApp.ps1` to handle building, deployment, and logging to `CustomAgentLogsTmp/UITests/`

### PR Agent
### PR Review Agent

Unified 4-phase workflow for issue investigation and PR work:
Unified 4-phase orchestrator for issue investigation and PR work:

1. **Pre-Flight** - Context gathering from issues/PRs
2. **Gate** - Verify tests exist and catch the issue (mandatory checkpoint)
Expand Down Expand Up @@ -199,18 +199,18 @@ Agents work with **time budgets as estimates for planning**, not hard deadlines:

## File Structure

### Agent Definitions
- **`agents/pr.md`** - PR workflow phases 1-2 (Pre-Flight, Gate)
- **`agents/pr/post-gate.md`** - PR workflow phases 3-4 (Fix, Report)
### Agent & Skill Definitions
- **`skills/pr-review/SKILL.md`** - PR Review orchestrator (invokes phase docs and try-fix skill)
- **`pr-review/pr-preflight.md`** - Phase 1: Context gathering (phase doc, not a standalone skill)
- **`pr-review/pr-gate.md`** - Phase 2: Test verification (phase doc, not a standalone skill)
- **`pr-review/pr-report.md`** - Phase 4: Final recommendation (phase doc, not a standalone skill)
- **`agents/sandbox-agent.md`** - Sandbox agent for testing and experimentation
- **`agents/write-tests-agent.md`** - Test writing agent (dispatches to skills like write-ui-tests)

### Agent Files

Agent files in the `.github/agents/` directory:

- **`agents/pr.md`** - PR workflow phases 1-2 (Pre-Flight, Gate)
- **`agents/pr/post-gate.md`** - PR workflow phases 3-4 (Fix, Report)
- **`agents/sandbox-agent.md`** - Sandbox app testing and experimentation
- **`agents/write-tests-agent.md`** - Test writing (invokes skills like write-ui-tests)

Expand Down Expand Up @@ -250,12 +250,12 @@ Reusable skills in `.github/skills/` that agents can invoke:
- **`verify-tests-fail-without-fix/`** - Verifies UI tests catch bugs (auto-detects mode based on git diff)
- **`write-ui-tests/`** - Creates UI tests for issues following MAUI conventions
- **`write-xaml-tests/`** - Creates XAML unit tests for parsing, XamlC, and source generation issues
- **`pr-build-status/`** - Retrieves Azure DevOps build status for PRs
- **`azdo-build-investigator/`** - Investigates CI failures for PRs (build errors, Helix test logs, binlog analysis) via dotnet/arcade-skills plugin

### Recent Improvements (January 2026)

**PR Agent Consolidation:**
1. **Unified PR Agent** - Replaced separate `issue-resolver` and `pr-reviewer` agents with single 4-phase `pr` agent
**Agent Consolidation:**
1. **Unified PR Review Orchestrator** - Replaced separate `issue-resolver` and `pr-reviewer` agents with 4-phase `pr-review` skill that orchestrates `pr-preflight`, `pr-gate`, `try-fix`, and `pr-report` phase skills
2. **try-fix Skill** - New skill for exploring independent fix alternatives with empirical testing
3. **Skills Integration** - Added `verify-tests-fail-without-fix` and `write-ui-tests` skills for reusable test workflows
4. **Agent/Skills Guidelines** - New instruction files for authoring agents and skills
Expand Down Expand Up @@ -364,8 +364,8 @@ For issues or questions about the AI agent instructions:
## Metrics

**Agent Files**:
- 4 agent files (pr.md, pr/post-gate.md, sandbox-agent.md, write-tests-agent.md)
- 5 skills (try-fix, verify-tests-fail-without-fix, write-ui-tests, write-xaml-tests, pr-build-status)
- 4 agent files (pr-review skill.md, sandbox-agent.md, write-tests-agent.md)
- 5 skills (pr-review, try-fix, verify-tests-fail-without-fix, write-ui-tests, write-xaml-tests, azdo-build-investigator) + 3 phase docs (pr-preflight, pr-gate, pr-report)
- All validated and consistent with consolidated structure

**Automation**:
Expand All @@ -383,4 +383,4 @@ For issues or questions about the AI agent instructions:

**Last Updated**: 2026-01-07

**Note**: These instructions are actively being refined based on real-world usage. PR agent consolidation completed January 2026 (unified 4-phase workflow with try-fix skill). Feedback and improvements are welcome!
**Note**: These instructions are actively being refined based on real-world usage. Agent consolidation completed January 2026 (unified 4-phase workflow with try-fix skill). Feedback and improvements are welcome!
261 changes: 261 additions & 0 deletions .github/agent-pr-session/pr-31487.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,261 @@
# PR Review: #31487 - [Android] Fixed duplicate title icon when setting TitleIconImageSource Multiple times

**Date:** 2026-01-08 | **Issue:** [#31445](https://github.com/dotnet/maui/issues/31445) | **PR:** [#31487](https://github.com/dotnet/maui/pull/31487)

## ✅ Final Recommendation: APPROVE

| Phase | Status |
|-------|--------|
| Pre-Flight | ✅ COMPLETE |
| 🧪 Tests | ✅ COMPLETE |
| 🚦 Gate | ✅ PASSED |
| 🔧 Fix | ✅ COMPLETE |
| 📋 Report | ✅ COMPLETE |

---

<details>
<summary><strong>📋 Issue Summary</strong></summary>

On Android, calling `NavigationPage.SetTitleIconImageSource(page, "image.png")` more than once for the same page results in the icon being rendered multiple times in the navigation bar.

**Steps to Reproduce:**
1. Launch app on Android
2. Tap "Set TitleIconImageSource" once: icon appears
3. Tap it again: a second identical icon appears

**Expected:** Single toolbar icon regardless of how many times SetTitleIconImageSource is called.

**Actual:** Each repeated call adds an additional duplicate icon.

**Platforms Affected:**
- [ ] iOS
- [x] Android
- [ ] Windows
- [ ] MacCatalyst

**Version:** 9.0.100 SR10

</details>

<details>
<summary><strong>📁 Files Changed</strong></summary>

| File | Type | Changes |
|------|------|---------|
| `src/Controls/src/Core/Platform/Android/Extensions/ToolbarExtensions.cs` | Fix | +17/-6 |
| `src/Controls/tests/TestCases.HostApp/Issues/Issue31445.cs` | Test | +38 |
| `src/Controls/tests/TestCases.Shared.Tests/Tests/Issues/Issue31445.cs` | Test | +23 |
| `snapshots/android/Issue31445DuplicateTitleIconDoesNotAppear.png` | Snapshot | binary |
| `snapshots/mac/Issue31445DuplicateTitleIconDoesNotAppear.png` | Snapshot | binary |
| `snapshots/windows/Issue31445DuplicateTitleIconDoesNotAppear.png` | Snapshot | binary |
| `snapshots/ios/Issue31445DuplicateTitleIconDoesNotAppear.png` | Snapshot | binary |

</details>

<details>
<summary><strong>💬 PR Discussion Summary</strong></summary>

**Key Comments:**
- Issue verified by LogishaSelvarajSF4525 on MAUI 9.0.0 & 9.0.100
- PR triggered UI tests by jsuarezruiz
- PureWeen requested rebase

**Reviewer Feedback:**
- Copilot review: Suggested testing with different image sources or rapid succession to validate fix better

**Disagreements to Investigate:**
| File:Line | Reviewer Says | Author Says | Status |
|-----------|---------------|-------------|--------|
| Issue31445.cs:31 | Test with different images or rapid calls | N/A | ⚠️ INVESTIGATE |

**Author Uncertainty:**
- None noted

</details>

<details>
<summary><strong>🧪 Tests</strong></summary>

**Status**: ✅ COMPLETE

- [x] PR includes UI tests
- [x] Tests reproduce the issue
- [x] Tests follow naming convention (`Issue31445`)

**Test Files:**
- HostApp: `src/Controls/tests/TestCases.HostApp/Issues/Issue31445.cs`
- NUnit: `src/Controls/tests/TestCases.Shared.Tests/Tests/Issues/Issue31445.cs`

**Test Behavior:**
- Uses snapshot verification (`VerifyScreenshot()`)
- Navigates to test page, taps button to trigger duplicate icon scenario
- Verified to compile successfully

</details>

<details>
<summary><strong>🚦 Gate - Test Verification</strong></summary>

**Status**: ✅ PASSED

- [x] Tests FAIL without fix (bug reproduced - duplicate icons appeared)
- [x] Tests PASS with fix (single icon as expected)

**Result:** PASSED ✅

**Verification Details:**
- Platform: Android (emulator-5554)
- Without fix: Test FAILED (screenshot mismatch - duplicate icons)
- With fix: Test PASSED (single icon verified)

</details>

<details>
<summary><strong>🔧 Fix Candidates</strong></summary>

**Status**: ✅ COMPLETE

| # | Source | Approach | Test Result | Files Changed | Model | Notes |
|---|--------|----------|-------------|---------------|-------|-------|
| 1 | try-fix | Check for existing icon view at position 0, reuse if exists, only create new if needed | ✅ PASS | `ToolbarExtensions.cs` (+7) | Opus 4.5 | Works! Independently arrived at same solution logic as PR |
| 2 | try-fix | Dedupe defensively by scanning all toolbar children, keep first `ToolbarTitleIconImageView`, remove extras; then reuse/create | ✅ PASS | `ToolbarExtensions.cs` (+22/-5) | GPT 5.2 | More robust if child ordering changes or duplicates already exist |
| 3 | try-fix | Use `FindViewWithTag` to uniquely identify/retrieve the MAUI title icon | ✅ PASS | `ToolbarExtensions.cs` (+20/-6) | Gemini 2.0 Flash | Explicit identification; avoids index assumptions and iteration; most robust against external view insertions |
| PR | PR #31487 | Check for existing ToolbarTitleIconImageView before adding new one | ✅ PASS (Gate) | `ToolbarExtensions.cs` (+17/-6) | Author | Original PR - validated by Gate |

**Exhausted:** Yes (3 passing alternatives found)

**Selected Fix:** PR's fix - It’s simplest and sufficient.
- #3 (Tag) is the most "correct" for robustness but adds Tag management overhead.
- #2 (Dedupe) is good for cleanup.
- PR/#1 (Index 0) are standard for this codebase's patterns.

**Comparison Notes:**
- PR/try-fix #1 rely on `GetChildAt(0)` being the title icon view when present
- try-fix #2 is more defensive: it collapses existing duplicates regardless of child index and then reuses/creates as needed
- try-fix #3 uses explicit tagging: precise but introduces new state (Tag) to manage

</details>

---

**Next Step:** Propose Alternative Fix #2 (Dedupe & Scan) to Author for Discussion

---

## 💬 Draft Comment for Author

Hi @PureWeen,

Reviewing the fix in this PR, it works correctly for the reported issue and tests pass.

I explored a couple of alternative approaches and found one that might offer slightly better robustness against edge cases, which I wanted to run by you:

**Alternative: Dedupe & Scan**
Instead of just checking index 0, we could scan all children of the toolbar to find any `ToolbarTitleIconImageView` instances.

```csharp
// Scan all children to find existing title icons
ToolbarTitleIconImageView? titleIcon = null;
for (int i = 0; i < nativeToolbar.ChildCount; i++)
{
var child = nativeToolbar.GetChildAt(i);
if (child is ToolbarTitleIconImageView icon)
{
if (titleIcon == null)
titleIcon = icon; // Keep the first one found
else
nativeToolbar.RemoveView(icon); // Remove any extras (self-healing)
}
}
```

**Why consider this?**
1. **Robustness against Injection:** If another library inserts a view at index 0 (e.g., search bar), the current PR fix (checking only index 0) would fail to see the existing icon and create a duplicate.
2. **Self-Healing:** If the toolbar is already in a bad state (multiple icons from previous bugs), this approach cleans them up.

**Trade-off:**
It involves a loop, so O(N) instead of O(1), but for a toolbar with very few items, this is negligible.

Do you think the added robustness is worth the change, or should we stick to the simpler Index 0 check (current PR) which matches the existing removal logic?

---

## 📋 Final Report

### Summary

PR #31487 correctly fixes the duplicate title icon issue on Android. The fix checks for an existing `ToolbarTitleIconImageView` at position 0 before creating a new one, preventing duplicate icons when `SetTitleIconImageSource` is called multiple times.

### Root Cause

The original `UpdateTitleIcon` method always created a new `ToolbarTitleIconImageView` and added it to position 0, without checking if one already existed. This caused duplicate icons when the method was called repeatedly.

### Validation

| Check | Result |
|-------|--------|
| Tests reproduce bug | ✅ Test fails without fix (duplicate icons) |
| Tests pass with fix | ✅ Test passes with fix (single icon) |
| Independent fix analysis | ✅ try-fix arrived at same solution |
| Code quality | ✅ Clean, minimal change |

### Regression Analysis

<details>
<summary><strong>📜 Git History Analysis</strong></summary>

**Original Implementation:** `e2f3aaa222` (Oct 2021) by Shane Neuville
- Part of "[Android] ToolbarHandler and fixes for various page nesting scenarios (#2781)"
- The bug has existed since the original implementation - it was never designed to handle repeated calls

**Key Finding:** The original code had a check for removing an existing icon when source is null/empty:
```csharp
if (nativeToolbar.GetChildAt(0) is ToolbarTitleIconImageView existingImageView)
nativeToolbar.RemoveView(existingImageView);
```
But this check was **only in the removal path**, not in the creation path. The fix extends this pattern to also check before adding.

**Related Toolbar Issues in This File:**
| Commit | Issue | Description |
|--------|-------|-------------|
| `a93e88c3de` | #7823 | Fix toolbar item icon not removed when navigating |
| `c04b7d79cc` | #19673 | Fixed android toolbar icon change |
| `158ed8b4f1` | #28767 | Removing outdated menu items after activity switch |

**Pattern:** Multiple fixes in this file address issues where Android toolbar state isn't properly cleaned up or reused. This PR follows the same pattern.

</details>

<details>
<summary><strong>🔄 Platform Comparison</strong></summary>

| Platform | TitleIcon Implementation | Duplicate Prevention |
|----------|-------------------------|---------------------|
| **Android** | Creates `ToolbarTitleIconImageView`, adds to position 0 | ❌ Was missing (now fixed by PR) |
| **Windows** | Sets `TitleIconImageSource` property directly | ✅ Property-based, no duplicates possible |
| **iOS** | Uses `NavigationRenderer` with property binding | ✅ Property-based approach |

**Why Android was vulnerable:** Android uses a view-based approach (adding/removing child views) while other platforms use property-based approaches. View management requires explicit duplicate checks.

</details>

<details>
<summary><strong>⚠️ Risk Assessment</strong></summary>

**Regression Risk: LOW**

1. **Minimal change** - Only modifies the creation logic, doesn't change removal
2. **Consistent pattern** - Uses same `GetChildAt(0)` check that already existed for removal
3. **Well-tested** - UI test verifies the specific scenario
4. **No side effects** - Reusing existing view is safe; `SetImageDrawable` handles updates

**Potential Edge Cases (from Copilot review suggestion):**
- Setting different image sources rapidly → Should work fine, image is updated on existing view
- Setting same source multiple times → Explicitly tested, works correctly

</details>

### Recommendation

**✅ APPROVE** - The PR's approach is correct and validated by independent analysis. The fix is minimal, focused, and addresses the root cause.
1 change: 0 additions & 1 deletion .github/agents/learn-from-pr.md
Original file line number Diff line number Diff line change
Expand Up @@ -89,7 +89,6 @@ Present a summary:
| Situation | Action |
|-----------|--------|
| PR not found | Ask user to verify PR number |
| No session markdown | Proceed with PR diff analysis only |
| Target file doesn't exist | Create if instruction/architecture doc, skip if code |
| Duplicate content exists | Skip, note in report |
| Unclear where to add | Ask user for guidance |
Expand Down
Loading
Loading