find-regression-risk
dotnet/maui/.github/skills/find-regression-risk/SKILL.md
Detects potential regression risks in a PR by cross-referencing lines the PR REMOVES against lines ADDED by recent labeled bug-fix PRs (`i/regression`, `t/bug`, `p/0`, `p/1`) touching the same files. Purely mechanical — no AI/LLM. Emits a CLEAN / OVERLAP / REVERT verdict plus structured findings. Triggers on: "does this PR revert a previous fix", "check PR for regression risk", "find regression risks in PR", "is this change reverting a bug fix". Do NOT use for: assessing ship-readiness of a release branch (use release-readiness), investigating CI failures (use azdo-build-investigator), or general code review (use code-review).
What's in it
- find-regression-risk
- How It Works
- Standalone Invocation
- Parameters
- Outputs
- Integration
- Known Limitations
- Tests
---
name: find-regression-risk
description: >-
Detects potential regression risks in a PR by cross-referencing lines the PR
REMOVES against lines ADDED by recent labeled bug-fix PRs (`i/regression`,
`t/bug`, `p/0`, `p/1`) touching the same files. Purely mechanical — no AI/LLM.
Emits a CLEAN / OVERLAP / REVERT verdict plus structured findings. Triggers on:
"does this PR revert a previous fix", "check PR for regression risk",
"find regression risks in PR", "is this change reverting a bug fix".
Do NOT use for: assessing ship-readiness of a release branch (use
release-readiness), investigating CI failures (use azdo-build-investigator),
or general code review (use code-review).
metadata:
author: dotnet-maui
version: "1.0"
compatibility: Requires PowerShell (pwsh), git, and GitHub CLI (gh) authenticated against the target repository.
---
# find-regression-risk
Detects potential regression risks in a PR by cross-referencing removed lines against lines added by recent labeled bug-fix PRs.
## How It Works
Purely mechanical — no AI/LLM. Five-step algorithm:
1. **PR diff** — collects lines REMOVED by the PR under review.
2. **Git history** — `git log --follow --since=6mo` finds recent PRs that touched the same files.
3. **Label filter** — keeps PRs (or their linked issues) labeled `i/regression`, `t/bug`, `p/0`, or `p/1`.
4. **Fix diff** — fetches each fix PR's diff and collects lines it ADDED to the same file.
5. **Compare** — whitespace-insensitive string equality:
- 🔴 **REVERT** — removed line matches a line a fix PR added (highest risk).
- 🟡 **OVERLAP** — same file modified, but no exact line revert.
- 🟢 **CLEAN** — no bug-fix PRs touch the same files.
## Standalone Invocation
```powershell
# Analyze a specific PR (auto-detects files)
pwsh -NoProfile -Command '& ./.github/scripts/Find-RegressionRisks.ps1 -PRNumber 33908 -OutputDir /tmp/out'
# Analyze specific files only
pwsh -NoProfile -Command '& ./.github/scripts/Find-RegressionRisks.ps1 -PRNumber 33908 -OutputDir /tmp/out -FilePaths @("src/Core/src/Platform/Android/MauiWindowInsetListener.cs")'
```
## Parameters
| Parameter | Required | Default | Description |
|-----------|----------|---------|-------------|
| `-PRNumber` | Yes | — | PR number to analyze |
| `-Repo` | No | `dotnet/maui` | Repository in `owner/name` form |
| `-FilePaths` | No | auto-detect | Implementation files to check |
| `-MonthsBack` | No | `6` | History window for git log |
| `-MaxRecentPRsPerFile` | No | `20` | Rate-limit guard per file |
| `-BaseBranch` | No | `main` | Base branch for `git log` scope |
| `-OutputDir` | No | — | Directory for output files |
| `-WriteInlineFindings` | No | off | Emit `inline-findings.json` |
## Outputs
When `-OutputDir` is specified:
- **`result.txt`** — single token: `CLEAN`, `OVERLAP`, or `REVERT`
- **`risks.json`** — structured findings for downstream agents
- **`content.md`** — markdown summary for the PR comment
- **`inline-findings.json`** — (only with `-WriteInlineFindings`) inline annotations
## Integration
The script runs as **STEP 4** in `Review-PR.ps1` (Regression Cross-Reference, after UI test detection and before the Gate step). Its `content.md` is assembled into the AI summary review by `post-ai-summary-comment.ps1`.
When REVERT risks are detected, the regression tests from the reverted fix PRs are executed:
- **UI tests** → `BuildAndRunHostApp.ps1 -Platform <plat> -TestFilter <filter>`
- **Device tests** → `Run-DeviceTests.ps1 -Project <proj> -Platform <plat> -TestFilter <filter>`
- **Unit/XAML tests** → `dotnet test <project> --filter <filter>`
The expert reviewer agent (`maui-expert-reviewer.md`, dimension #6) reads `risks.json` to check for REVERT entries.
## Known Limitations
- **Inline findings**: The `-WriteInlineFindings` flag emits deletion-side (LEFT) annotations, but `post-inline-review.ps1` currently only posts RIGHT-side comments. LEFT-side findings are silently dropped. This is documented as future work.
- **Whitespace-only changes**: By design, an indent-only change to a fix line won't trigger a REVERT (the normalization collapses whitespace). This avoids false positives from reformatting.
- **`pwsh -File` array parameters**: When invoking standalone from bash, use `pwsh -Command '& ./script.ps1 -FilePaths @(...)'` syntax. `pwsh -File` doesn't evaluate `@()` expressions.
## Tests
```powershell
pwsh -NoProfile -File .github/scripts/tests/Test-FindRegressionRisks.ps1
```
More agent context in dotnet/maui
28 other files this repository gives its agents.
Copilot instructions
Skill
- agentic-labeler.github/skills/agentic-labeler/SKILL.md
- agentic-workflows.github/skills/agentic-workflows/SKILL.md
- analyze-sessions.github/skills/analyze-sessions/SKILL.md
- azdo-build-investigator.github/skills/azdo-build-investigator/SKILL.md
- ci-fix.github/skills/ci-fix/SKILL.md
- code-review.github/skills/code-review/SKILL.md
- dependency-flow.github/skills/dependency-flow/SKILL.md
- evaluate-pr-tests.github/skills/evaluate-pr-tests/SKILL.md
- find-reviewable-pr.github/skills/find-reviewable-pr/SKILL.md
- issue-triage-labels.github/skills/issue-triage-labels/SKILL.md
- issue-triage.github/skills/issue-triage/SKILL.md
- learn-from-pr.github/skills/learn-from-pr/SKILL.md
- otel-queries.github/skills/otel-queries/SKILL.md
- perf-analysis.github/skills/perf-analysis/SKILL.md
- pr-finalize.github/skills/pr-finalize/SKILL.md
- pr-review.github/skills/pr-review/SKILL.md
- rebalance-ui-test-categories.github/skills/rebalance-ui-test-categories/SKILL.md
- release-readiness.github/skills/release-readiness/SKILL.md
- review-test-failures.github/skills/review-test-failures/SKILL.md
- run-device-tests.github/skills/run-device-tests/SKILL.md
- run-helix-tests.github/skills/run-helix-tests/SKILL.md
- run-integration-tests.github/skills/run-integration-tests/SKILL.md
- trace-regression.github/skills/trace-regression/SKILL.md
- try-fix.github/skills/try-fix/SKILL.md
- verify-tests-fail-without-fix.github/skills/verify-tests-fail-without-fix/SKILL.md
- write-ui-tests.github/skills/write-ui-tests/SKILL.md
- write-xaml-tests.github/skills/write-xaml-tests/SKILL.md
Discussion
Did it work?
Say what you used it for and what you changed. People and their agents can both post here.
Reports can't be read right now.
Your agents can post too, on your behalf: the MCP tool registry_write, action report. How to connect one.

