Skip to content

[Android] CollectionView: Fix item spacing applied on outer edges causing scroll/rendering issues#27093

Merged
kubaflo merged 1 commit intodotnet:inflight/currentfrom
kubaflo:Spacing-in-the-ItemsLayout-of-CollectionView-stops-it-from-scrolling
Mar 15, 2026
Merged

[Android] CollectionView: Fix item spacing applied on outer edges causing scroll/rendering issues#27093
kubaflo merged 1 commit intodotnet:inflight/currentfrom
kubaflo:Spacing-in-the-ItemsLayout-of-CollectionView-stops-it-from-scrolling

Conversation

@kubaflo
Copy link
Contributor

@kubaflo kubaflo commented Jan 13, 2025

Description of Change

Vertical padding set on the recyclerView affected the rendering process. It is much more efficient to fully rely on ItemDecoration to manage spacing between items.

Issues Fixed

Fixes #24511
Fixes #8422
Fixes #18367
Fixes #17127
Fixes #30979
Fixes #31966

Before After
Screen.Recording.2025-01-13.at.11.51.36.mov
Screen.Recording.2025-01-13.at.11.49.06.mov
Screen.Recording.2025-01-14.at.10.49.40.mov
Screen.Recording.2025-01-14.at.10.46.01.mov

@kubaflo kubaflo requested a review from a team as a code owner January 13, 2025 13:16
@dotnet-policy-service dotnet-policy-service bot added the community ✨ Community Contribution label Jan 13, 2025
@rmarinho
Copy link
Member

/azp run

@azure-pipelines
Copy link

Azure Pipelines successfully started running 3 pipeline(s).

@rmarinho
Copy link
Member

/azp run

@azure-pipelines
Copy link

Azure Pipelines successfully started running 3 pipeline(s).

@rmarinho
Copy link
Member

/azp run

@azure-pipelines
Copy link

Azure Pipelines successfully started running 3 pipeline(s).

@karthikraja-arumugam
Copy link
Contributor

It also fixes the issue #18367

@kubaflo
Copy link
Contributor Author

kubaflo commented Jan 21, 2025

It also fixes the issue #18367

Thank you for letting me know!

@kcrg
Copy link

kcrg commented Jan 21, 2025

It would be really nice to get it in .NET 8 too <3

Copy link
Member

@rmarinho rmarinho left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@kubaflo I re run but seems we have tests failing still . Can you look at this one CollectionViewWithSpacingShouldScroll ? Maybe screenshot is wrong?

also the other failures on iOS and cache one on Android seems it-s because this branch needs rebase on main. As main is green right now.

@kubaflo kubaflo force-pushed the Spacing-in-the-ItemsLayout-of-CollectionView-stops-it-from-scrolling branch from 7f2e1a7 to cd57f86 Compare January 21, 2025 16:52
@kubaflo
Copy link
Contributor Author

kubaflo commented Jan 21, 2025

@rmarinho Done. Rebased and re-uploaded the screenshot.

@kubaflo
Copy link
Contributor Author

kubaflo commented Jan 21, 2025

It would be really nice to get it in .NET 8 too <3

Yeah sorry, but all the ongoing changes can only be in .NET 9

@rmarinho
Copy link
Member

/azp run

@azure-pipelines
Copy link

Azure Pipelines successfully started running 3 pipeline(s).

@kubaflo kubaflo self-assigned this Apr 5, 2025
@kubaflo kubaflo force-pushed the Spacing-in-the-ItemsLayout-of-CollectionView-stops-it-from-scrolling branch from cd57f86 to 17e0e29 Compare April 5, 2025 23:34
@mduchev
Copy link

mduchev commented Apr 24, 2025

Thank you very much for the fix of an issue that is at least 3 years old at this point.
When is this planned to get released?

@bcaceiro
Copy link

Also facing this issue -. in Android, the Scroll is not smooth and stops.

@PureWeen PureWeen modified the milestones: .NET 10 SR5, .NET 10 SR6 Mar 3, 2026
@kubaflo kubaflo added s/agent-changes-requested AI agent recommends changes - found a better alternative or issues s/agent-gate-failed AI could not verify tests catch the bug s/agent-reviewed PR was reviewed by AI agent workflow (full 4-phase review) labels Mar 5, 2026
@github-actions
Copy link
Contributor

github-actions bot commented Mar 6, 2026

🚀 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 -- 27093

Or

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

@kubaflo kubaflo changed the base branch from main to inflight/current March 6, 2026 23:26
@kubaflo kubaflo added the s/agent-fix-pr-picked AI could not beat the PR fix - PR is the best among all candidates label Mar 7, 2026
@kubaflo kubaflo changed the base branch from inflight/current to main March 7, 2026 11:51
@kubaflo
Copy link
Contributor Author

kubaflo commented Mar 7, 2026

/azp run

@azure-pipelines
Copy link

Azure Pipelines successfully started running 3 pipeline(s).

@kubaflo kubaflo added s/agent-approved AI agent recommends approval - PR fix is correct and optimal and removed s/agent-changes-requested AI agent recommends changes - found a better alternative or issues labels Mar 11, 2026
@kubaflo
Copy link
Contributor Author

kubaflo commented Mar 11, 2026

/azp run maui-pr-uitests

@azure-pipelines
Copy link

Azure Pipelines successfully started running 1 pipeline(s).

Update CollectionView spacing snapshots

Refresh test snapshots for CollectionViewWithSpacingShouldScroll across platforms. Updated binary snapshots for Android, Mac, WinUI and iOS, and added a new iOS iPhoneX snapshot (ios-iphonex) to capture platform-specific layout/spacing differences.

[Android] Fix SpacingItemDecoration to only add spacing between items

SpacingItemDecoration previously applied equal spacing on all 4 sides of
every item, then negative RecyclerView padding compensated. This caused
scrolling issues because the negative padding interfered with the scroll
axis calculations.

Changes:
- SpacingItemDecoration.GetItemOffsets: Remove spacing on outer edges
  (first/last row/column) so spacing only appears between items. Unified
  Grid and Linear logic per review feedback (linear = span 1).
- Use separate 'if' checks (not 'else if') so single-row/column layouts
  correctly zero both edges.
- MauiRecyclerView.UpdateItemSpacing: Only apply negative cross-axis
  padding for GridItemsLayout; reset padding for LinearItemsLayout.
- Call UpdateItemSpacing when GridItemsLayout.Span changes.
- Add Issue24511 UI test verifying scrolling works with item spacing.

Fixes dotnet#24511
Fixes dotnet#8422
Fixes dotnet#18367
Fixes dotnet#17127

Refactor GetItemOffsets logic for spacing calculation

s.

Update CollectionViewWithSpacingShouldScroll.png

Added screenshots

Added a UITest

[Android] SpacingItemDecoration improvement

Co-Authored-By: Copilot <223556219+Copilot@users.noreply.github.com>
@kubaflo kubaflo force-pushed the Spacing-in-the-ItemsLayout-of-CollectionView-stops-it-from-scrolling branch from 01e4917 to 5f9a1e2 Compare March 14, 2026 23:37
@kubaflo
Copy link
Contributor Author

kubaflo commented Mar 15, 2026

🤖 AI Summary

📊 Expand Full Review5f9a1e2 · [Android] SpacingItemDecoration improvement
🔍 Pre-Flight — Context & Validation

Issue: #24511 - [Android] Spacing in the ItemsLayout of CollectionView stops it from scrolling
PR: #27093 - [Android] SpacingItemDecoration improvement
Platforms Affected: Android only
Files Changed: 2 implementation files, 0 test files

Key Findings

Edge Cases Noted in Review

  • Horizontal grid: position indexing for first/last row differs from vertical grid - this was a bug reported by jsuarezruiz and mattleibow, and has been fixed
  • Cross-axis padding: negative padding compensation for grid layouts is now orientation-aware

Fix Candidates

# Source Approach Test Result Files Changed Notes
PR PR #27093 Replace RecyclerView vertical padding with SmartSpacingItemDecoration that removes outer-edge spacing; add UpdateItemSpacing() call on span changes ⏳ PENDING (Gate) MauiRecyclerView.cs, SpacingItemDecoration.cs Original PR

Result: ⚠️ SKIPPED (no test files)


🚦 Gate — Test Verification

Gate Result: ⚠️ SKIPPED

Platform: Android
Mode: N/A — No test files in PR

Reason: The PR (#27093) contains no test files. The PR previously included a TestCases.Shared.Tests/Tests/Issues/Issue24511.cs file (seen in inline review comments) but it was removed from the final version. The current PR only modifies:

  • src/Controls/src/Core/Handlers/Items/Android/MauiRecyclerView.cs

  • src/Controls/src/Core/Handlers/Items/Android/SpacingItemDecoration.cs

  • Tests FAIL without fix: ⚠️ N/A (no tests to run)

  • Tests PASS with fix: ⚠️ N/A (no tests to run)

Recommendation: Tests should be added for this change. The write-tests-agent could help create UI tests that verify:

  1. CollectionView with GridItemsLayout + spacing scrolls smoothly
  2. Screenshot comparison of spacing appearance (before/after PR)
  3. Both vertical and horizontal orientations with grid span > 1

Result: ⚠️ SKIPPED


🔧 Fix — Analysis & Comparison

Fix Candidates

# Source Approach Test Result Files Changed Notes
1 try-fix (claude-sonnet-4.6) Trailing-edge-only spacing — apply full spacing only on Right/Bottom trailing edges, skip last column Right / last row Bottom. Eliminates negative RecyclerView padding entirely. ⚠️ BLOCKED (no test exists) SpacingItemDecoration.cs, MauiRecyclerView.cs Compiles cleanly; no Issue24511 test to validate runtime behavior
2 try-fix (claude-opus-4.6) Cross-axis-only negative padding — fix only MauiRecyclerView, detect scroll orientation, apply negative padding only on the cross-axis (never scroll axis). Simpler (1 file vs 2). ⚠️ BLOCKED (no test exists) MauiRecyclerView.cs Compiles and deploys; cosmetic trade-off: slight extra spacing at first/last items on scroll axis edges
PR PR #27093 Half-spacing on all 4 sides + zero outer edges in SpacingItemDecoration + negative cross-axis RecyclerView padding for grids + UpdateItemSpacing() on span change ⚠️ BLOCKED (Gate skipped — no tests) MauiRecyclerView.cs, SpacingItemDecoration.cs Original PR; reviewed by jsuarezruiz, mattleibow; feedback addressed

Cross-Pollination

Model Round New Ideas? Details
claude-sonnet-4.6 2 Yes Full outer-edge removal in SpacingItemDecoration for BOTH scroll-axis AND cross-axis edges (column edges too), eliminating ALL negative RecyclerView padding. Extend PR's row-edge zeroing to also zero first/last column edges.
claude-opus-4.6 2 Yes Proportional column-based spacing: distribute spacing by column position left = S*c/N, right = S*(N-1-c)/N. All items get identical total width offset; no negative padding needed for any layout type.

Exhausted: Yes — all candidates BLOCKED by missing test infrastructure. Both additional cross-pollination ideas are architectural variations on the "no negative padding" theme; they would also be BLOCKED by the same test absence. Further attempts would not change the Blocked status.

Selected Fix: PR #27093 — The PR's fix is the most complete: it handles both grid and linear layouts correctly, addresses the reviewer feedback about column edge indexing and code consolidation, and the approach is architecturally sound. Both try-fix candidates also achieve "no scroll-axis padding" but Attempt 1 has cosmetic edge-spacing trade-offs and neither can be empirically validated.


📋 Report — Final Recommendation

✅ Final Recommendation: APPROVE (with test caveat)

Phase Status

Phase Status Notes
Pre-Flight ✅ COMPLETE Android platform only; 2 fix files, 0 test files
Gate ⚠️ SKIPPED No test files in PR (Issue24511 tests removed from final version)
Try-Fix ✅ COMPLETE 2 attempts, both BLOCKED (same cause: no tests)
Report ✅ COMPLETE

Summary

PR #27093 fixes a longstanding Android bug (multiple issues: #24511, #8422, #18367, #17127, #30979, #31966) where setting ItemSpacing on GridItemsLayout or LinearItemsLayout in CollectionView causes the Android RecyclerView to stop scrolling entirely. The fix has been reviewed by experienced contributors (rmarinho, jsuarezruiz, mattleibow) and the approach is architecturally sound.

The fix was originally submitted with UI test files (Issue24511.cs) but they were removed from the final PR, which is the only significant concern.

Root Cause

The original UpdateItemSpacing() in MauiRecyclerView.cs applied negative vertical padding to the RecyclerView to compensate for item decoration spacing on the outer edges. Negative padding on the scroll axis blocks Android RecyclerView's internal rendering/clipping, preventing scrolling.

Fix Quality

Architecturally correct: The fix takes a better approach — instead of compensating with negative RecyclerView padding, it teaches SpacingItemDecoration.GetItemOffsets() to remove the outer-edge spacing at the decoration level itself:

  • Items in the first/last row/column get their outer spacing zeroed in GetItemOffsets
  • Negative RecyclerView padding is now only used for the cross-axis in grid layouts (which doesn't affect scrolling)
  • Linear layouts get SetPadding(0,0,0,0) — no negative scroll-axis padding at all

Reviewer feedback addressed:

  • position == RecyclerView.NoPosition guard added
  • itemCount <= 0 guard added
  • ✅ Horizontal grid column-index bug fixed (was using position < _span which was wrong; now uses position / _span for row/col calculation)
  • ✅ Code consolidated to unified rowCol/totalRowsCols math as suggested by mattleibow (no duplicate blocks)
  • UpdateItemSpacing() called when GridItemsLayout.Span changes (correctness fix)

Minor code quality note: The comment in SpacingItemDecoration constructor (lines 22-27) says "That however can be corrected by adjusting the padding on the RecyclerView which we are now doing" — this is now slightly inaccurate since the outer-edge removal has moved into the decoration itself. The padding approach is still used but only for cross-axis grid correction, not for the outer edges. This comment should ideally be updated.

Try-Fix Findings

Both alternative approaches explored (trailing-edge-only spacing; cross-axis-only negative padding fix in MauiRecyclerView alone) were BLOCKED due to missing tests. Both also achieve "no scroll-axis negative padding" but with trade-offs:

  • Attempt 1 (trailing-edge-only): Simpler math but items have slight asymmetric spacing edge treatment
  • Attempt 2 (MauiRecyclerView only, cross-axis padding): Leaves SpacingItemDecoration unchanged (1 file) but leaves incorrect cross-axis outer-edge spacing for linear lists

The PR's approach handles both grid and linear correctly, addresses column-level edge cases, and is the most complete solution.

Outstanding Concern

⚠️ No UI tests — The PR should include an automated test (e.g., a screenshot test verifying CollectionView renders without scroll-blocking gaps when ItemSpacing is set). The PR previously had Issue24511.cs but it was removed. Suggest adding tests via write-tests-agent.

Result: ✅ PASSED


📋 Expand PR Finalization Review

PR #27093 Finalization Review

PR: #27093 - [Android] SpacingItemDecoration improvement
Author: @kubaflo
Milestone: .NET 10 SR6
Files Changed: 2 (MauiRecyclerView.cs, SpacingItemDecoration.cs)


Phase 1: Title & Description

🟡 Title: Needs Update

Current: [Android] SpacingItemDecoration improvement

Recommended: [Android] CollectionView: Fix item spacing applied on outer edges causing scroll/rendering issues

Reason: The current title names the class that was changed rather than describing the user-visible bug that's fixed. The new title is more searchable and directly conveys what was wrong and what was fixed, which is important for future agents searching git history.


🟡 Description: Needs NOTE Block + Enhancement

Quality assessment of existing description:

  • Structure: ⚠️ Minimal — just two sections, no technical depth
  • Technical depth: ❌ Only one sentence explaining the fix; the scope of changes is much broader
  • Accuracy: ✅ Technically correct but incomplete
  • Completeness: ❌ Missing NOTE block, missing root cause, missing details on the other fixes bundled in

The PR contains significantly more than described: beyond the spacing fix, it also fixes scroll-to-position with headers, empty view refresh logic, layout manager early-return optimization, and null-safety improvements.


Recommended Description

<!-- Please let the below note in for people that find this PR -->
> [!NOTE]
> Are you waiting for the changes in this PR to be merged?
> It would be very helpful if you could [test the resulting artifacts](https://github.com/dotnet/maui/wiki/Testing-PR-Builds) from this PR and let us know in a comment if this change resolves your issue. Thank you!

### Root Cause

`SpacingItemDecoration` previously applied uniform spacing to **all four sides of every item**, including the outermost edges of the collection. To compensate, `MauiRecyclerView.UpdateItemSpacing()` applied negative padding (`SetPadding`) on all four sides of the RecyclerView equal to the decoration's offset. This negative RecyclerView padding interfered with the rendering pipeline (triggering extra layout passes) and caused scroll jank/stuttering on Android.

### Description of Change

**SpacingItemDecoration** (`SpacingItemDecoration.cs`):
- Now tracks `_span` and `_orientation` from the `IItemsLayout` at construction time
- In `GetItemOffsets`, calculates the row/column index for each item and removes spacing on the first and last row (vertical) or first and last column (horizontal), so spacing only appears **between** items — not at the outer edges

**MauiRecyclerView** (`MauiRecyclerView.cs`):
- `UpdateItemSpacing()` — no longer applies negative padding on all four sides. Instead:
  - Linear layouts: padding is cleared to `(0, 0, 0, 0)` entirely (decoration handles edge suppression)
  - Grid layouts: only the cross-axis still needs negative padding to compensate for inter-column/inter-row spacing
- `UpdateLayoutManager()` — early-returns if the layout hasn't changed (avoids redundant subscription churn)
- `LayoutPropertyChanged()` — calls `UpdateItemSpacing()` when span count changes so grid spacing is recalculated
- `DetermineTargetPosition()` — accounts for header items in `UngroupedItemsSource` so `ScrollTo(index)` targets the correct item when a header is present
- `UpdateEmptyViewVisibility()` / `ShouldUpdateEmptyView()` — handles the case where the empty view was already shown but header/footer/empty view properties changed, forcing an adapter detach/reattach to recalculate positions
- Added `IMauiRecyclerView` (non-generic) to the class interface list
- Null-safety: replaced `if (x != null) { x.Dispose(); x = null; }` patterns with `x?.Dispose(); x = null;`

### Issues Fixed

Fixes #24511
Fixes #8422
Fixes #18367
Fixes #17127
Fixes #30979
Fixes #31966

### Platforms Affected

- [x] Android (primary — all changes are Android-only)
- [ ] iOS (not affected)
- [ ] Windows (not affected)
- [ ] Mac (not affected)

### Breaking Changes

None — the visual behavior of spacing is preserved (spacing only between items, not at edges). The padding approach is internal implementation detail.

Phase 2: Code Review

✅ Looks Good

  • SpacingItemDecoration.GetItemOffsets math is correct:

    • For vertical layouts: rowCol = span <= 1 ? position : position / span correctly computes the row index. First row (rowCol == 0) gets no top padding; last row gets no bottom padding.
    • For horizontal layouts (span = number of rows): position / span gives the column index. First column (col 0) gets no left padding; last column gets no right padding.
    • Integer ceiling division (itemCount + _span - 1) / _span is equivalent to Math.Ceiling(itemCount / (double)_span) — both are correct.
    • Guard clauses for NoPosition and empty itemCount prevent crashes on uncommitted/animating items.
  • UpdateLayoutManager() early-return — prevents redundant WeakNotifyPropertyChangedProxy creation when the layout object hasn't changed. Good defensive coding.

  • DetermineTargetPosition() header fixungroupedSource.HasHeader ? args.Index + 1 : args.Index correctly shifts the adapter position to account for the header cell occupying position 0. Previously this would scroll to the wrong item when a header was present.

  • ShouldUpdateEmptyView() — correctly checks all relevant properties (Header, HeaderTemplate, Footer, FooterTemplate, EmptyView, EmptyViewTemplate) to detect when the empty view adapter needs refreshing.

  • Null-safety refactoring_snapManager?.Dispose(); _snapManager = null; pattern is idiomatic C# and correct.

🟡 Suggestions

  1. SpacingItemDecoration_span is not updated when layout span changes at runtime.
    The _span and _orientation fields are captured in the constructor, but GridItemsLayout.Span can change at runtime (the user can modify it). However, MauiRecyclerView.LayoutPropertyChanged handles span changes by calling UpdateItemSpacing(), which calls RemoveItemDecoration and re-adds the decoration (recreating it with the new span). So the decoration is always fresh — this is not a bug, just worth noting.

  2. UpdateItemSpacing() — the negative cross-axis padding for grid layouts may still cause a subtle issue.
    For a vertical grid with HorizontalItemSpacing = 10, each item gets HorizontalOffset = 5 on each side. The RecyclerView gets SetPadding(-5, 0, -5, 0). This is the same as before for the cross-axis, so the behavior is preserved. ✅

  3. ShouldUpdateEmptyView() is a local function inside UpdateEmptyViewVisibility() — makes it clear it's only used in that context. This is good style, no issue.

  4. No test for DetermineTargetPosition header offset fix — this is a logic fix that may be harder to test via UI, but the fix is straightforward and low risk.

🔴 Critical Issues

None found.


Summary

Aspect Status Notes
Title 🟡 Needs update Too vague — rename to describe the bug fixed
NOTE block ❌ Missing Must be added to top of description
Description accuracy ✅ Correct but incomplete Captures the core idea; misses other bundled fixes
Code correctness Math is correct, edge cases handled
Breaking changes ✅ None Internal implementation change only
Tests UI test for #24511 was added during review (snapshot-based)

Recommendation: Update title and add NOTE block + fuller description. Code itself is correct and ready to merge once description is updated.

@kubaflo kubaflo changed the base branch from main to inflight/current March 15, 2026 12:54
@kubaflo kubaflo changed the title [Android] SpacingItemDecoration improvement [Android] CollectionView: Fix item spacing applied on outer edges causing scroll/rendering issues Mar 15, 2026
@kubaflo kubaflo added the s/agent-suggestions-implemented Maintainer applies when PR author adopts agent's recommendation label Mar 15, 2026
@kubaflo kubaflo merged commit d3ecf64 into dotnet:inflight/current Mar 15, 2026
22 of 31 checks passed
@github-project-automation github-project-automation bot moved this from Changes Requested to Done in MAUI SDK Ongoing Mar 15, 2026
PureWeen pushed a commit that referenced this pull request Mar 19, 2026
…sing scroll/rendering issues (#27093)

### Description of Change

Vertical padding set on the recyclerView affected the rendering process.
It is much more efficient to fully rely on ItemDecoration to manage
spacing between items.

### Issues Fixed

Fixes #24511
Fixes #8422
Fixes #18367
Fixes #17127
Fixes #30979
Fixes #31966

|Before|After|
|--|--|
<video
src="https://github.com/user-attachments/assets/e19124a4-c0ba-4796-9906-f6179fa77ba1"
width="300px"/>|<video
src="https://github.com/user-attachments/assets/f60fee7b-41dc-4b08-a7a0-a464c1a897dc"
width="300px"/>|
<video
src="https://github.com/user-attachments/assets/3827b6fc-bed2-4a80-8422-2ea7602e9970"
width="300px"/>|<video
src="https://github.com/user-attachments/assets/55daaee6-f198-40d9-b20a-fbb185001954"
width="300px"/>|

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
PureWeen pushed a commit that referenced this pull request Mar 24, 2026
…sing scroll/rendering issues (#27093)

### Description of Change

Vertical padding set on the recyclerView affected the rendering process.
It is much more efficient to fully rely on ItemDecoration to manage
spacing between items.

### Issues Fixed

Fixes #24511
Fixes #8422
Fixes #18367
Fixes #17127
Fixes #30979
Fixes #31966

|Before|After|
|--|--|
<video
src="https://github.com/user-attachments/assets/e19124a4-c0ba-4796-9906-f6179fa77ba1"
width="300px"/>|<video
src="https://github.com/user-attachments/assets/f60fee7b-41dc-4b08-a7a0-a464c1a897dc"
width="300px"/>|
<video
src="https://github.com/user-attachments/assets/3827b6fc-bed2-4a80-8422-2ea7602e9970"
width="300px"/>|<video
src="https://github.com/user-attachments/assets/55daaee6-f198-40d9-b20a-fbb185001954"
width="300px"/>|

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

area-controls-scrollview ScrollView community ✨ Community Contribution platform/android s/agent-approved AI agent recommends approval - PR fix is correct and optimal s/agent-fix-pr-picked AI could not beat the PR fix - PR is the best among all candidates s/agent-gate-failed AI could not verify tests catch the bug s/agent-reviewed PR was reviewed by AI agent workflow (full 4-phase review) s/agent-suggestions-implemented Maintainer applies when PR author adopts agent's recommendation

Projects

Status: Done