| 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:
- PR diff โ collects lines REMOVED by the PR under review.
- Git history โ
git log --follow --since=6mo finds recent PRs that touched the same files.
- Label filter โ keeps PRs (or their linked issues) labeled
i/regression, t/bug, p/0, or p/1.
- Fix diff โ fetches each fix PR's diff and collects lines it ADDED to the same file.
- 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
# 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
pwsh -NoProfile -File .github/scripts/tests/Test-FindRegressionRisks.ps1