[Testing] SafeArea Feature Matrix Test Cases for ContentPage#34877
Merged
kubaflo merged 30 commits intoApr 17, 2026
Conversation
Contributor
|
Hey there @@TamilarasanSF4853! Thank you so much for your PR! Someone from the team will get assigned to your PR shortly and we'll get it reviewed. |
Contributor
|
🚀 Dogfood this PR with:
curl -fsSL https://raw.githubusercontent.com/dotnet/maui/main/eng/scripts/get-maui-pr.sh | bash -s -- 34877Or
iex "& { $(irm https://raw.githubusercontent.com/dotnet/maui/main/eng/scripts/get-maui-pr.ps1) } 34877" |
Contributor
|
/azp run maui-pr-uitests |
|
Azure Pipelines successfully started running 1 pipeline(s). |
Contributor
There was a problem hiding this comment.
Pull request overview
Adds a new SafeArea “feature matrix” experience to the Controls TestCases HostApp and a corresponding Appium/NUnit test suite to validate ContentPage SafeAreaEdges behavior (including keyboard + orientation scenarios) on Android/iOS.
Changes:
- Introduces a new SafeArea feature entry page and a SafeArea ContentPage test UI (plus options modal + view model) in TestCases.HostApp.
- Adds platform-specific utilities to read/format safe area + keyboard inset info for display in the UI.
- Adds a new FeatureMatrix UI test fixture (
SafeArea_ContentPageFeatureTests) that drives the new UI and asserts element positions.
Reviewed changes
Copilot reviewed 10 out of 10 changed files in this pull request and generated 12 comments.
Show a summary per file
| File | Description |
|---|---|
| src/Controls/tests/TestCases.Shared.Tests/Tests/FeatureMatrix/SafeArea_ContentPageFeatureTests.cs | Adds Appium-based tests validating ContentPage SafeAreaEdges/keyboard/orientation behavior. |
| src/Controls/tests/TestCases.HostApp/FeatureMatrix/SafeArea/SafeAreaViewModel.cs | Adds view model for uniform/per-edge safe area configuration plus padding/background options. |
| src/Controls/tests/TestCases.HostApp/FeatureMatrix/SafeArea/SafeAreaOptionsPage.xaml | Adds UI for configuring SafeAreaEdges per-edge/uniform and toggling padding/background. |
| src/Controls/tests/TestCases.HostApp/FeatureMatrix/SafeArea/SafeAreaOptionsPage.xaml.cs | Wires up options UI events to update the SafeAreaViewModel and close the modal. |
| src/Controls/tests/TestCases.HostApp/FeatureMatrix/SafeArea/SafeAreaFeaturePage.xaml | Adds the SafeArea feature matrix landing page UI (button to open ContentPage scenario). |
| src/Controls/tests/TestCases.HostApp/FeatureMatrix/SafeArea/SafeAreaFeaturePage.xaml.cs | Adds SafeArea feature entry navigation and button click handler to open the scenario page. |
| src/Controls/tests/TestCases.HostApp/FeatureMatrix/SafeArea/SafeAreaExtensions.cs | Adds platform-specific logic to fetch/format safe area + IME/cutout inset info. |
| src/Controls/tests/TestCases.HostApp/FeatureMatrix/SafeArea/ContentPage/SafeAreaContentPage.xaml | Adds the visual test layout with edge indicators, controls, and inset readout label. |
| src/Controls/tests/TestCases.HostApp/FeatureMatrix/SafeArea/ContentPage/SafeAreaContentPage.xaml.cs | Adds code-behind for updating inset label and Android inset listener/SoftInput mode. |
| src/Controls/tests/TestCases.HostApp/CoreViews/CorePageView.cs | Registers the new “SafeArea Feature Matrix” in the gallery list. |
…t#34705) ## Summary Extends the CI PR review pipeline to support **all test types** (UI tests, device tests, unit tests, XAML tests) and restructures the review flow by decoupling the gate from the copilot agent. ### Before - Gate only supported UI tests (`TestCases.HostApp` / `TestCases.Shared.Tests`) - PRs with device tests, unit tests, or XAML tests were **skipped** by the gate - Gate ran as Phase 2 inside the copilot agent (4-phase: Pre-Flight → Gate → Try-Fix → Report) - Gate results were duplicated across all phase outputs - AI summary comment included session history merging (841 lines of code) ### After - Gate supports **all test types** with auto-detection - Gate runs as a **standalone script step** before the copilot agent - Gate posts its own **separate PR comment** (`<!-- AI Gate -->`) - AI summary is **simplified** (170 lines, always overwrites, no session history) - PR review is now 3 phases: Pre-Flight → Try-Fix → Report ## New Scripts | Script | Purpose | |--------|---------| | `Detect-TestsInDiff.ps1` | Analyzes PR files, classifies tests by type (UITest, DeviceTest, UnitTest, XamlUnitTest), extracts method names from diffs | | `post-gate-comment.ps1` | Posts/updates gate result as separate PR comment | | `RunTests.ps1` | Unified test runner entry point for all test types | ## Test Detection ```bash pwsh .github/scripts/shared/Detect-TestsInDiff.ps1 -PRNumber 25129 ``` ``` 📱 [DeviceTest] EditorTests (PlaceholderHorizontalTextAlignment) Filter: Category=Editor 🖥️ [UITest] Issue10987 Filter: Issue10987 ``` ## New Review Flow ``` Step 0: Branch setup Step 1: Gate (verify-tests-fail.ps1 — direct script, no copilot agent) → Posts <!-- AI Gate --> comment immediately Step 2: PR Review (copilot agent — 3 phases: Pre-Flight, Try-Fix, Report) → Gate result passed in prompt Step 3: Post AI Summary (<!-- AI Summary --> comment) Step 4: Apply labels ``` ## PR Comments (Two Separate Comments) **Gate comment** (`<!-- AI Gate -->`): ```markdown ## 🚦 Gate — Test Verification ► Expand Full Gate — abc1234 · Fix editor alignment ### Gate Result: ✅ PASSED | Step | Expected | Actual | Result | | Without fix | FAIL | FAIL | ✅ | | With fix | PASS | PASS | ✅ | ``` **AI Summary comment** (`<!-- AI Summary -->`): Pre-Flight, Fix, Report sections only — no gate duplication. ## Key Changes - **`verify-tests-fail.ps1`**: Auto-detects test type, routes to correct runner (BuildAndRunHostApp, Run-DeviceTests, dotnet test), iterates over all detected tests, `-Platform` mandatory - **`Detect-TestsInDiff.ps1`**: Shared detection engine — reads `[Category]` attributes for device test filtering, extracts method names from PR diffs - **`Review-PR.ps1`**: Gate as Step 1 (script), PR review as Step 2 (copilot), removed PR finalize step - **`post-ai-summary-comment.ps1`**: Rewritten from 841 → 170 lines, always overwrites - **`pr-gate.md`**: Strict output template, no cross-phase duplication rule - **`pr-review/SKILL.md`**: 3 phases (removed Gate), no-duplication rule - **`EstablishBrokenBaseline.ps1`**: Excludes TestUtils/DeviceTests.Runners from fix file detection ## Verified - Gate passed locally on Share device tests: without fix=FAIL ✅, with fix=PASS ✅ - Detection tested on PRs: dotnet#25129, dotnet#34615, dotnet#34598, dotnet#31056 - Comments posted to 8 PRs from CI build artifacts --------- Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
…, security hardening (dotnet#34678) ## Description Overhauls the `copilot-evaluate-tests` gh-aw workflow — switches to on-demand triggers only (`/evaluate-tests` slash command + manual `workflow_dispatch`), adds security hardening, and improves error handling. No auto-runs on PR create/update. ### What Changed **Triggers (on-demand only — no auto-runs)** - Add `slash_command: evaluate-tests` — comment `/evaluate-tests` on a PR to trigger - Keep `workflow_dispatch` — manual trigger from Actions tab with PR number input - Disable `pull_request_target` — no auto-evaluation on PR create/update - Add `bots: ["copilot-swe-agent[bot]"]` — Copilot-authored PRs can be evaluated - Add `labels: ["pr-review", "testing"]` — workflow runs are labeled **Gate step (fast-fail for invalid requests)** - Check PR is OPEN before evaluating (rejects closed/merged PRs with clear message) - Check for test source files in diff before spinning up agent - Fall back to REST API for PRs with 300+ files (where `gh pr diff` returns HTTP 406) - All API errors surfaced with clear messages — no silent masking - `exit 1` stops the workflow immediately — no wasted agent compute **Access gating (`Checkout-GhAwPr.ps1`)** - Reject fork PRs (`isCrossRepository` check) - Verify PR author has write access (admin/write/maintain roles) - Fix `ConvertFrom-Json` ordering — check exit code before JSON parsing - Make infrastructure restore fatal on failure (was soft warning) - Remove pre-delete pattern — `git checkout` overwrites in-place **Workflow improvements** - `hide-older-comments: true` — previous evaluations auto-collapse - `report-as-issue: false` for noop — no issue created when nothing to evaluate - Timeout bumped 15 → 20 minutes - Dry-run mode via `suppress_output` input (workflow_dispatch only) - `Gather-TestContext.ps1` now receives `-PrNumber` parameter **Security documentation (`gh-aw-workflows.instructions.md`)** - Add "Before You Build" anti-patterns table — prefer built-in gh-aw features - Add Security Boundaries section with defense layers table - Add Rules for gh-aw Workflow Authors (DO/DON'T list) - Document `COPILOT_TOKEN` exposure and mitigations - Add `slash_command` to fork behavior table - Update `Checkout-GhAwPr.ps1` description to match current behavior ### Trigger Behavior | Trigger | When it fires | Who can trigger | |---------|---------------|-----------------| | `/evaluate-tests` comment | Comment on a PR | Write-access collaborators + copilot-swe-agent[bot] | | `workflow_dispatch` | Actions tab → "Run workflow" → enter PR number | Write-access collaborators | | ~~`pull_request_target`~~ | ~~Auto on PR create/update~~ | ~~Disabled~~ | ### Security Model Based on [GitHub Security Lab guidance](https://securitylab.github.com/resources/github-actions-preventing-pwn-requests/): - PR contents treated as **passive data** (read/analyze, never built or executed) - Agent runs in **sandboxed container** with `GITHUB_TOKEN` and `gh` CLI scrubbed - Write operations in **separate `safe_outputs` job** (not the agent) - Agent output limited to `max: 1` comment via safe-outputs - `Checkout-GhAwPr.ps1` rejects fork PRs and verifies write access before checkout - Infrastructure restore is fatal on failure — prevents running with untrusted infra ### Validation | Test | PR | Result | |------|-----|--------| | Open PR with tests | dotnet#34983 | ✅ Full success (gate → checkout → agent → comment) | | No-test PR | dotnet#34876 | ✅ Gate fast-fail ("no test source files") | | Merged PR | dotnet#34932 | ✅ Gate fast-fail ("MERGED — skipping") | ### Known Limitations - Fork PRs via `/evaluate-tests` can supply modified `.github/skills/` — accepted residual risk (agent sandboxed, output bounded). Tracked as [gh-aw#18481](github/gh-aw#18481) - `exit 1` in gate step shows ❌ in GitHub checks for no-test/closed PRs — intentional (no built-in "skip" mechanism in gh-aw steps) - `pull_request_target` commented out — can be re-enabled later for auto-evaluation --------- Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
…net#34686) <!-- Please let the below note in for people that find this PR --> > [!NOTE] > Are you waiting for the changes in this PR to be merged? > It would be very helpful if you could [test the resulting artifacts](https://github.com/dotnet/maui/wiki/Testing-PR-Builds) from this PR and let us know in a comment if this change resolves your issue. Thank you! ## Summary Adds automated milestone management for PRs and issues. A single workflow handles both automatic milestoning on PR merge and manual tag-based reconciliation after releases ship. ## Problem When PRs merge, they often get milestoned for the wrong service release or not milestoned at all. The actual release a PR ships in depends on which Candidate PR carries the commits and when the SR branch is cut. This creates milestone drift that makes release queries and notes inaccurate. ## Solution ### Files | File | Purpose | |------|---------| | `.github/scripts/Fix-MilestoneDrift.ps1` | Core engine — version detection, milestone mapping, correction logic | | `.github/scripts/Fix-MilestoneDrift.Tests.ps1` | 77 Pester unit tests for all pure functions | | `.github/workflows/fix-milestone-drift.yml` | Single workflow with dual triggers (auto on merge + manual dispatch) | --- ## How It Works ### Version Detection The source of truth is `eng/Versions.props`. For single-PR mode, the script reads `MajorVersion` and `PatchVersion` **at the PR's merge commit SHA** to determine what version the branch was building when the PR merged. ### Milestone Mapping | Patch | Example | Milestone | Rule | |-------|---------|-----------|------| | `0` | `10.0.0` | `.NET 10.0 GA` | Exact zero | | `1-9` | `10.0.5` | `.NET 10.0 SR1` | Early patches | | `N0` | `10.0.60` | `.NET 10 SR6` | patch / 10 | | `N0+x` | `10.0.41` | `.NET 10 SR4.1` | Sub-patch = distinct milestone | Sub-patches are distinct — `.NET 10 SR4.1` != `.NET 10 SR4`. Script warns and skips gracefully if the milestone doesn't exist on GitHub yet. ### Milestone Normalization GitHub milestones have inconsistent naming (`.NET 10.0 SR4` vs `.NET 10 SR4`, `.NET 10.0 GA` vs `.NET 10 GA`). The script normalizes both SR and GA forms as equivalent. ### Branch Ownership Detection Reads `<MajorVersion>` from `eng/Versions.props` on `origin/main`. No hardcoded version numbers — automatically handles version transitions when `main` moves from .NET 10 to .NET 11. ### Merge-Up Protection Checks each PR's `base.ref` to skip PRs from different .NET versions (prevents merge-up commits from causing incorrect milestoning): | `base.ref` | MainBranch=`main` | MainBranch=`net11.0` | |------------|-------------------|---------------------| | `main` | ✅ | ❌ | | `inflight/*`, `darc/*` | ✅ | ❌ | | `net11.0` | ❌ | ✅ | | `release/10.*` | ✅ | ❌ | | `release/11.*` | ❌ | ✅ | ### Linked Issue Detection Scans PR title and body for: - `fix/fixes/fixed/close/closes/closed/resolve/resolves/resolved #N` - Same keywords + `https://github.com/dotnet/maui/issues/N` Bare informational URLs are ignored. Results are deduplicated. --- ## Single Workflow, Two Triggers ### Auto: On PR Merge (`pull_request_target`) Triggers on every PR merge to `main`, `net*.0`, `inflight/*`, or `release/*`. Reads `Versions.props` at the merge commit, sets the milestone on the PR and its linked issues. If the milestone doesn't exist yet on GitHub, warns and skips gracefully (no red CI). ### Manual: Tag Reconciliation (`workflow_dispatch`) | Input | Type | Default | Description | |-------|------|---------|-------------| | `pr_number` | string | _(empty)_ | Single PR to check | | `tag` | string | _(empty)_ | Release tag to audit (e.g. `10.0.60`) | | `apply` | boolean | `false` | Apply changes (default: dry-run) | | `create_issue` | boolean | `false` | Create GitHub issue with report | --- ## Safety | Rule | Purpose | |------|---------| | Dry-run by default (manual) | `workflow_dispatch` requires explicit `apply` checkbox | | Date cutoff (2026-01-01) | Never touches PRs merged before 2026 | | Branch check | Skips merge-up PRs from different .NET versions | | Deduplication | Same issue corrected once even if linked from multiple PRs | | Fixing-keyword URLs | Bare informational issue references ignored | | Milestone must exist | Warns and skips gracefully if milestone not found | | Merge commit fetch | Fetches commit on demand for PRs merged to inflight | | Warning diagnostics | Silent failures in version detection log warnings | | GA tag support | Tag mode handles first release tag (no previous tag) | | Input sanitization | Workflow inputs flow through `env:` vars, not inline interpolation | | Error propagation | `Invoke-ApplyCorrections` throws on failure; CI goes red | | Zero-check guard | Tag mode throws when all PRs fail to fetch (prevents false "all correct") | --- ## Known Limitations - **Preview/RC milestones**: The script currently maps `PatchVersion=0` to `.NET X.0 GA`. It does not read `PreReleaseVersionLabel` or `PreReleaseVersionIteration` from `Versions.props`, so PRs merged to `net11.0` during the preview phase will not be automatically milestoned (the workflow gracefully skips with a warning). Preview milestone support is planned as a follow-up. - **GA tag rate limit**: Running `-Tag X.0.0` (the very first release tag) in manual mode walks the full git history, which could exhaust GitHub API rate limits on large repos. --- ## Test Suite 77 Pester unit tests covering all pure functions: | Block | Tests | Coverage | |-------|-------|----------| | `ConvertTo-Milestone` | 17 | GA, SR1-SR10, sub-patches (SR4.1, SR10.1), early patches, preview/invalid | | `Test-MilestoneMatch` | 12 | Exact, normalization (SR + GA), sub-patch distinction, null/empty | | `Find-MatchingMilestone` | 5 | Direct, normalized, alternate format, non-existent | | `Find-PreviousTag` | 9 | Ordered traversal, boundaries, major-version isolation | | `Get-LinkedIssues` | 11 | Keywords (incl. close/resolve bare), URLs, dedup, case | | `Get-PatchVersion` | 4 | Valid, GA, large, invalid | | `Test-IsReleaseTag` | 5 | Valid release, wrong major, preview, invalid | | `Test-PrBelongsToVersion` | 14 | main/net11.0 contexts, inflight, darc, release, feature | --- ## Local Usage ```powershell # Dry-run: check a single PR ./Fix-MilestoneDrift.ps1 -PrNumber 34620 -RepoPath . -Verbose # Dry-run: audit all PRs in a tagged release ./Fix-MilestoneDrift.ps1 -Tag 10.0.50 -RepoPath . -Verbose # Apply fixes ./Fix-MilestoneDrift.ps1 -PrNumber 34620 -Apply # Full tag audit + apply + report issue ./Fix-MilestoneDrift.ps1 -Tag 10.0.50 -Apply -CreateIssue # Run tests Invoke-Pester ./Fix-MilestoneDrift.Tests.ps1 -Output Detailed ``` ## Validated Results - 77 Pester tests pass - Single-PR: dotnet#34047 → `PatchVersion=50` at merge → `.NET 10 SR5` ✅ - Single-PR: dotnet#34620 (untagged) → `PatchVersion=60` at merge → `.NET 10 SR6` ✅ - Single-PR: dotnet#34553 (merged to inflight) → fetches commit, reads `PatchVersion=60` ✅ - Tag mode: `10.0.50` → 78 PRs checked, 90 corrections, 0 duplicates, 0 false positives ✅ - 50-PR sample against 10.0.60 range → correctly identifies SR7→SR6 drift ✅ - .NET 11 preview PR dotnet#34252 → gracefully warns "milestone not found", exits 0 ✅ --------- Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Co-authored-by: Jakub Florkowski <kubaflo123@gmail.com> Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
…t#34999) <!-- Please let the below note in for people that find this PR --> > [!NOTE] > Are you waiting for the changes in this PR to be merged? > It would be very helpful if you could [test the resulting artifacts](https://github.com/dotnet/maui/wiki/Testing-PR-Builds) from this PR and let us know in a comment if this change resolves your issue. Thank you! ## Summary Follow-up to dotnet#34686. Adds preview/RC milestone support and release branch detection to the milestone drift fixer. ## Problem PRs merged to \`net11.0\` were not being milestoned because \`Versions.props\` on that branch always has \`PreReleaseVersionIteration=1\` regardless of which preview the PR actually ships in. The iteration is only bumped on release branches. ## Solution ### Release Branch Detection (Primary) New detection step checks release branches first using \`merge-base --is-ancestor\`. For each PR, it finds the **earliest** release branch containing the merge commit: | Release Branch | Milestone | |---|---| | \`release/10.0.1xx\` | \`.NET 10.0 GA\` | | \`release/10.0.1xx-sr5\` | \`.NET 10 SR5\` | | \`release/11.0.1xx-preview1\` | \`.NET 11.0-preview1\` | | \`release/11.0.1xx-preview3\` | \`.NET 11.0-preview3\` | | \`release/12.0.1xx-rc1\` | \`.NET 12.0-rc1\` | ### Detection Order 1. **Explicit \`-Tag\`** — if provided 2. **Release branches** — \`merge-base --is-ancestor\` against \`release/{Major}.0.1xx-*\` branches, earliest match wins 3. **Versions.props** at merge commit — fallback for PRs not yet on any release branch 4. **Tag range search** — last resort ### Preview/RC Milestone Mapping \`ConvertTo-Milestone\` now accepts optional pre-release label and iteration: | Input | Milestone | |---|---| | \`11.0.0 + preview + 3\` | \`.NET 11.0-preview3\` | | \`12.0.0 + rc + 1\` | \`.NET 12.0-rc1\` | | \`10.0.60\` (stable) | \`.NET 10 SR6\` (unchanged) | ## Validated Results | PR | Base | Current Milestone | Script Result | Method | |---|---|---|---|---| | dotnet#33524 | net11.0 | .NET 11.0-preview1 | .NET 11.0-preview1 ✅ | Release branch | | dotnet#33233 | net11.0 | .NET 11.0-preview1 | .NET 11.0-preview1 ✅ | Release branch | | dotnet#30132 | net11.0 | .NET 11.0-preview3 | .NET 11.0-preview3 ✅ | Release branch | | dotnet#33834 | net11.0 | .NET 11.0-preview3 | .NET 11.0-preview3 ✅ | Release branch | | dotnet#34214 | net11.0 | .NET 11.0-preview2 | .NET 11.0-preview3 ✅ | Release branch (drift caught!) | | dotnet#34945 | net11.0 | .NET 11.0-preview4 | preview1 (fallback) | Versions.props (no p4 branch yet) | | dotnet#34620 | main | .NET 10 SR6 | .NET 10 SR6 ✅ | Release branch | | dotnet#34047 | main | .NET 10 SR4.1 | .NET 10 SR5 ✅ | Release branch (drift caught!) | PR dotnet#34214 is a real drift example: milestoned preview2 by a human, but actually on the preview3 release branch. ## Test Suite 88 Pester tests (11 new): - 6 for \`ConvertTo-Milestone\` preview/RC mapping - 5 for \`ConvertBranchToMilestone\` (GA, SR, preview, RC, non-release) --------- Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
…et#34818) <!-- Please let the below note in for people that find this PR --> > [!NOTE] > Are you waiting for the changes in this PR to be merged? > It would be very helpful if you could [test the resulting artifacts](https://github.com/dotnet/maui/wiki/Testing-PR-Builds) from this PR and let us know in a comment if this change resolves your issue. Thank you! ## Description Adds a daily GitHub Actions workflow that generates a prioritized, actionable PR review queue as a GitHub issue -- with intelligent turn-state detection that tells you **whose turn it is** on each PR. ### What it does - Runs weekdays at 8:00 UTC (or on-demand via `workflow_dispatch`) - Queries open PRs across `dotnet/maui` and `dotnet/docs-maui` - Determines actionability for each PR using a layered heuristic: 1. **Bot detection** -- filters out maestro, dependabot, copilot-reviewer, etc. 2. **Blocked states** -- do-not-merge, stale labels 3. **Project board status** -- reads the MAUI SDK Ongoing board (Ready To Review, In Progress, Changes Requested, Todo, Approved) 4. **Review decision** -- APPROVED, CHANGES_REQUESTED with author-response detection 5. **"Who spoke last"** -- compares author activity (issue comments + inline review-thread replies) against reviewer activity timestamps - Creates a GitHub issue organized by actionability: FTE-actionable PRs first, waiting-on-author collapsed, bot PRs collapsed - Auto-closes previous queue issues to avoid clutter - Filters out `stale` and `do-not-merge` PRs ### Implementation Uses a **plain GitHub Action** (not gh-aw) since the task is deterministic formatting -- no AI reasoning needed: - ~30s runtime (vs ~2min with LLM) - Zero LLM cost - No `COPILOT_GITHUB_TOKEN` dependency -- just built-in `GITHUB_TOKEN` - Deterministic output every run - No prompt injection surface ### Changes - **New**: `.github/workflows/pr-review-queue.yml` -- scheduled workflow with `schedule`, `workflow_dispatch`, and `pull_request` (validation only) triggers - **Modified**: `query-reviewable-prs.ps1` -- adds: - `-OutputFormat markdown` option with actionability-grouped output - `Get-ProjectBoardStatuses` -- paginates full project board for all status columns - `Get-TurnState` -- 5-layer decision tree for "whose turn is it" - `Test-IsBot` -- bot account detection - Comment + review-thread analysis for author activity detection - `#Requires -Version 7.0` for null-coalescing operator ### Example output The daily issue shows: - **Actionability Summary** table (FTE-actionable count, waiting on author, backlog, bot, blocked) - **P/0 Priority** PRs with turn state - **Ready to Merge** (approved PRs) - **Needs FTE Review** (milestoned first, then by age, with turn-state detail) - **Waiting on Author** (collapsed `<details>` section) - **Bot / Automated** (collapsed) - **Queue Health** stats --------- Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
30ad5f2 to
47424bb
Compare
kubaflo
approved these changes
Apr 17, 2026
devanathan-vaithiyanathan
pushed a commit
to Tamilarasan-Paranthaman/maui
that referenced
this pull request
Apr 21, 2026
…34877) This pull request adds a new SafeArea feature matrix test page to the test application, providing a comprehensive UI for testing and demonstrating SafeArea handling across platforms. It introduces new XAML pages, view models, and platform-specific logic to visualize, interact with, and inspect SafeArea insets and behaviors, especially for Android and iOS. **New SafeArea Feature Matrix:** * Added a new `SafeAreaFeaturePage` and entry point to the test gallery, allowing users to navigate to SafeArea test scenarios from the main test app (`CorePageView.cs`, `SafeAreaFeaturePage.xaml`, `SafeAreaFeaturePage.xaml.cs`). [[1]](diffhunk://#diff-adf403d0453beb6436df5f6e4d418d2f62d9c7a1b549a22b048879127df36a38R131) [[2]](diffhunk://#diff-380d690716fa32487df4ae7b8595ec4572a1a1721a4559ea35a899e74e58343cR1-R16) [[3]](diffhunk://#diff-dad4ece76c112ffd01b1dce0067a0ab413eb456d4e3f134544803e4c97a97ee8R1-R28) **SafeArea Content Page and UI:** * Implemented `SafeAreaContentPage.xaml` and code-behind, providing a visual grid with labeled edge indicators, controls for toggling SafeArea regions, and real-time display of SafeArea insets. The page supports interaction and keyboard testing, and updates dynamically on size or inset changes. [[1]](diffhunk://#diff-b98a7bc9dcecb68ca42535e422b7ed2e85562c227ead74765049aa274a9fc815R1-R132) [[2]](diffhunk://#diff-d67f9bac2f2635bd4a8c7c97aefacbe5e14325d6e01813e2a6d920d58d6b7310R1-R89) **Platform-specific and Utility Logic:** * Added `SafeAreaExtensions` with platform-specific logic to fetch and format SafeArea insets for display, supporting both Android and iOS/MacCatalyst. * On Android, implemented a listener for window inset changes (e.g., keyboard show/hide) to update the UI in real time. These changes provide a robust foundation for testing SafeArea behavior in the app, making it easier to validate layout correctness across devices and platforms. **Issues Found:** dotnet#34846 dotnet#34847 dotnet#34872 ---------
PureWeen
pushed a commit
that referenced
this pull request
Apr 22, 2026
This pull request adds a new SafeArea feature matrix test page to the test application, providing a comprehensive UI for testing and demonstrating SafeArea handling across platforms. It introduces new XAML pages, view models, and platform-specific logic to visualize, interact with, and inspect SafeArea insets and behaviors, especially for Android and iOS. **New SafeArea Feature Matrix:** * Added a new `SafeAreaFeaturePage` and entry point to the test gallery, allowing users to navigate to SafeArea test scenarios from the main test app (`CorePageView.cs`, `SafeAreaFeaturePage.xaml`, `SafeAreaFeaturePage.xaml.cs`). [[1]](diffhunk://#diff-adf403d0453beb6436df5f6e4d418d2f62d9c7a1b549a22b048879127df36a38R131) [[2]](diffhunk://#diff-380d690716fa32487df4ae7b8595ec4572a1a1721a4559ea35a899e74e58343cR1-R16) [[3]](diffhunk://#diff-dad4ece76c112ffd01b1dce0067a0ab413eb456d4e3f134544803e4c97a97ee8R1-R28) **SafeArea Content Page and UI:** * Implemented `SafeAreaContentPage.xaml` and code-behind, providing a visual grid with labeled edge indicators, controls for toggling SafeArea regions, and real-time display of SafeArea insets. The page supports interaction and keyboard testing, and updates dynamically on size or inset changes. [[1]](diffhunk://#diff-b98a7bc9dcecb68ca42535e422b7ed2e85562c227ead74765049aa274a9fc815R1-R132) [[2]](diffhunk://#diff-d67f9bac2f2635bd4a8c7c97aefacbe5e14325d6e01813e2a6d920d58d6b7310R1-R89) **Platform-specific and Utility Logic:** * Added `SafeAreaExtensions` with platform-specific logic to fetch and format SafeArea insets for display, supporting both Android and iOS/MacCatalyst. * On Android, implemented a listener for window inset changes (e.g., keyboard show/hide) to update the UI in real time. These changes provide a robust foundation for testing SafeArea behavior in the app, making it easier to validate layout correctness across devices and platforms. **Issues Found:** #34846 #34847 #34872 ---------
PureWeen
pushed a commit
that referenced
this pull request
Apr 28, 2026
This pull request adds a new SafeArea feature matrix test page to the test application, providing a comprehensive UI for testing and demonstrating SafeArea handling across platforms. It introduces new XAML pages, view models, and platform-specific logic to visualize, interact with, and inspect SafeArea insets and behaviors, especially for Android and iOS. **New SafeArea Feature Matrix:** * Added a new `SafeAreaFeaturePage` and entry point to the test gallery, allowing users to navigate to SafeArea test scenarios from the main test app (`CorePageView.cs`, `SafeAreaFeaturePage.xaml`, `SafeAreaFeaturePage.xaml.cs`). [[1]](diffhunk://#diff-adf403d0453beb6436df5f6e4d418d2f62d9c7a1b549a22b048879127df36a38R131) [[2]](diffhunk://#diff-380d690716fa32487df4ae7b8595ec4572a1a1721a4559ea35a899e74e58343cR1-R16) [[3]](diffhunk://#diff-dad4ece76c112ffd01b1dce0067a0ab413eb456d4e3f134544803e4c97a97ee8R1-R28) **SafeArea Content Page and UI:** * Implemented `SafeAreaContentPage.xaml` and code-behind, providing a visual grid with labeled edge indicators, controls for toggling SafeArea regions, and real-time display of SafeArea insets. The page supports interaction and keyboard testing, and updates dynamically on size or inset changes. [[1]](diffhunk://#diff-b98a7bc9dcecb68ca42535e422b7ed2e85562c227ead74765049aa274a9fc815R1-R132) [[2]](diffhunk://#diff-d67f9bac2f2635bd4a8c7c97aefacbe5e14325d6e01813e2a6d920d58d6b7310R1-R89) **Platform-specific and Utility Logic:** * Added `SafeAreaExtensions` with platform-specific logic to fetch and format SafeArea insets for display, supporting both Android and iOS/MacCatalyst. * On Android, implemented a listener for window inset changes (e.g., keyboard show/hide) to update the UI in real time. These changes provide a robust foundation for testing SafeArea behavior in the app, making it easier to validate layout correctness across devices and platforms. **Issues Found:** #34846 #34847 #34872 ---------
PureWeen
pushed a commit
that referenced
this pull request
Apr 29, 2026
This pull request adds a new SafeArea feature matrix test page to the test application, providing a comprehensive UI for testing and demonstrating SafeArea handling across platforms. It introduces new XAML pages, view models, and platform-specific logic to visualize, interact with, and inspect SafeArea insets and behaviors, especially for Android and iOS. **New SafeArea Feature Matrix:** * Added a new `SafeAreaFeaturePage` and entry point to the test gallery, allowing users to navigate to SafeArea test scenarios from the main test app (`CorePageView.cs`, `SafeAreaFeaturePage.xaml`, `SafeAreaFeaturePage.xaml.cs`). [[1]](diffhunk://#diff-adf403d0453beb6436df5f6e4d418d2f62d9c7a1b549a22b048879127df36a38R131) [[2]](diffhunk://#diff-380d690716fa32487df4ae7b8595ec4572a1a1721a4559ea35a899e74e58343cR1-R16) [[3]](diffhunk://#diff-dad4ece76c112ffd01b1dce0067a0ab413eb456d4e3f134544803e4c97a97ee8R1-R28) **SafeArea Content Page and UI:** * Implemented `SafeAreaContentPage.xaml` and code-behind, providing a visual grid with labeled edge indicators, controls for toggling SafeArea regions, and real-time display of SafeArea insets. The page supports interaction and keyboard testing, and updates dynamically on size or inset changes. [[1]](diffhunk://#diff-b98a7bc9dcecb68ca42535e422b7ed2e85562c227ead74765049aa274a9fc815R1-R132) [[2]](diffhunk://#diff-d67f9bac2f2635bd4a8c7c97aefacbe5e14325d6e01813e2a6d920d58d6b7310R1-R89) **Platform-specific and Utility Logic:** * Added `SafeAreaExtensions` with platform-specific logic to fetch and format SafeArea insets for display, supporting both Android and iOS/MacCatalyst. * On Android, implemented a listener for window inset changes (e.g., keyboard show/hide) to update the UI in real time. These changes provide a robust foundation for testing SafeArea behavior in the app, making it easier to validate layout correctness across devices and platforms. **Issues Found:** #34846 #34847 #34872 ---------
github-actions Bot
pushed a commit
that referenced
this pull request
May 6, 2026
This pull request adds a new SafeArea feature matrix test page to the test application, providing a comprehensive UI for testing and demonstrating SafeArea handling across platforms. It introduces new XAML pages, view models, and platform-specific logic to visualize, interact with, and inspect SafeArea insets and behaviors, especially for Android and iOS. **New SafeArea Feature Matrix:** * Added a new `SafeAreaFeaturePage` and entry point to the test gallery, allowing users to navigate to SafeArea test scenarios from the main test app (`CorePageView.cs`, `SafeAreaFeaturePage.xaml`, `SafeAreaFeaturePage.xaml.cs`). [[1]](diffhunk://#diff-adf403d0453beb6436df5f6e4d418d2f62d9c7a1b549a22b048879127df36a38R131) [[2]](diffhunk://#diff-380d690716fa32487df4ae7b8595ec4572a1a1721a4559ea35a899e74e58343cR1-R16) [[3]](diffhunk://#diff-dad4ece76c112ffd01b1dce0067a0ab413eb456d4e3f134544803e4c97a97ee8R1-R28) **SafeArea Content Page and UI:** * Implemented `SafeAreaContentPage.xaml` and code-behind, providing a visual grid with labeled edge indicators, controls for toggling SafeArea regions, and real-time display of SafeArea insets. The page supports interaction and keyboard testing, and updates dynamically on size or inset changes. [[1]](diffhunk://#diff-b98a7bc9dcecb68ca42535e422b7ed2e85562c227ead74765049aa274a9fc815R1-R132) [[2]](diffhunk://#diff-d67f9bac2f2635bd4a8c7c97aefacbe5e14325d6e01813e2a6d920d58d6b7310R1-R89) **Platform-specific and Utility Logic:** * Added `SafeAreaExtensions` with platform-specific logic to fetch and format SafeArea insets for display, supporting both Android and iOS/MacCatalyst. * On Android, implemented a listener for window inset changes (e.g., keyboard show/hide) to update the UI in real time. These changes provide a robust foundation for testing SafeArea behavior in the app, making it easier to validate layout correctness across devices and platforms. **Issues Found:** #34846 #34847 #34872 ---------
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to subscribe to this conversation on GitHub.
Already have an account?
Sign in.
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
This pull request adds a new SafeArea feature matrix test page to the test application, providing a comprehensive UI for testing and demonstrating SafeArea handling across platforms. It introduces new XAML pages, view models, and platform-specific logic to visualize, interact with, and inspect SafeArea insets and behaviors, especially for Android and iOS.
New SafeArea Feature Matrix:
SafeAreaFeaturePageand entry point to the test gallery, allowing users to navigate to SafeArea test scenarios from the main test app (CorePageView.cs,SafeAreaFeaturePage.xaml,SafeAreaFeaturePage.xaml.cs). [1] [2] [3]SafeArea Content Page and UI:
SafeAreaContentPage.xamland code-behind, providing a visual grid with labeled edge indicators, controls for toggling SafeArea regions, and real-time display of SafeArea insets. The page supports interaction and keyboard testing, and updates dynamically on size or inset changes. [1] [2]Platform-specific and Utility Logic:
SafeAreaExtensionswith platform-specific logic to fetch and format SafeArea insets for display, supporting both Android and iOS/MacCatalyst.These changes provide a robust foundation for testing SafeArea behavior in the app, making it easier to validate layout correctness across devices and platforms.
Issues Found:
#34846
#34847
#34872