Stop filing issues for routine find-ui corpus drift - #825
Conversation
Upstream gaining samples is the steady state between releases, not an event: build-cli.ps1 re-bakes the corpus on every -Stable release and users with network access already get live data. Filing an issue for it produced one permanently-open no-action issue collecting a weekly 'still present' comment, on the same label as the genuine alerts -- which taught everyone to ignore the label that also carries the real signal (#807). Routine drift now goes to the run summary only. Issues are reserved for the two actionable cases: * the bake fetched nothing (unchanged) * a source lost more than 25% of its scenarios, or vanished from a successful bake The second is the case nothing else catches. BakeAsync only fails a source at *zero* scenarios, so a fetcher that survives an upstream restructure while matching a fraction of what it used to bakes green and would ship a gutted source at the next release. Also resolve the committed-corpus path to an absolute one. Read-Snapshot reads through System.IO, which resolves relative paths against the process working directory rather than PowerShell's location; the two agree in Actions, but the mismatch let a local run silently compare against a different corpus than Get-ChildItem enumerated. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Copilot-Session: 1a4a78e5-efad-4cfa-99a8-d93d77d12c92
Routine corpus drift now goes to the drift workflow's run summary, which nobody reads at the moment it matters. A release is that moment: the last point where a swing in a source can still change someone's mind about shipping. The bake now prints each source's previously committed count against the refreshed one, and warns when a source loses more than 25% of its scenarios or drops out of the manifest. Same threshold as the drift workflow, and for the same reason: the baker only fails a source that returns zero scenarios, so a fetcher matching a fraction of what it used to completes successfully. Warns rather than fails. A legitimate upstream purge should not block a release, it should make someone look. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Copilot-Session: 1a4a78e5-efad-4cfa-99a8-d93d77d12c92
Build Metrics ReportBinary Sizes
Test Results✅ 5816 passed, 18 skipped out of 5834 tests in 944.2s (+7 tests, +99.9s vs. baseline) Test Coverage✅ 87.5% line coverage, 80.8% branch coverage · ✅ no change vs. baseline CLI Startup Time63ms median (x64, Try This BuildInstalls the MSIX for your architecture, replacing any previously installed build. Needs the GitHub CLI — the command offers to install it and sign you in if it is missing. & ([scriptblock]::Create((irm https://raw.githubusercontent.com/microsoft/winappCli/main/scripts/winapp-pr.ps1))) 825Switching between builds often?Put the tool on your PATH once: & ([scriptblock]::Create((irm https://raw.githubusercontent.com/microsoft/winappCli/main/scripts/winapp-pr.ps1))) -AddToPathThen this build is just: winapp-pr 825Run Updated 2026-09-15 21:12:34 UTC · commit |
There was a problem hiding this comment.
🟡 Changes recommended
Boundary rounding and alert wording can inaccurately describe why a regression was reported.
Get a fresh assessment by requesting another Copilot review.
Pull request overview
Moves routine find-ui corpus drift from recurring issues into workflow summaries while preserving actionable regression alerts.
Changes:
- Detects >25% scenario losses and vanished sources.
- Reports release-bake count deltas and warnings.
- Reserves issues for bake failures and regressions.
File summaries
| File | Description |
|---|---|
scripts/build-cli.ps1 |
Reports corpus changes during release bakes. |
.github/workflows/find-ui-corpus-drift.yml |
Separates routine drift from actionable alerts. |
Review details
Suppressed comments (1)
.github/workflows/find-ui-corpus-drift.yml:241
- The alert title says the source lost “most” of its scenarios, but this path triggers at any loss over 25%; a 100 → 74 drop retains most scenarios while opening this issue. Use the actual threshold (or “significant loss”) so the operator-facing title accurately describes why the alert fired.
: 'find-ui corpus: a source lost most of its scenarios';
- Files reviewed: 2/2 changed files
- Comments generated: 2
- Review effort level: Balanced
💡 Configure MCP servers for context-aware, tailored reviews. Learn more in the docs.
Co-authored-by: Jaylyn-Barbee <51131738+Jaylyn-Barbee@users.noreply.github.com>
There was a problem hiding this comment.
🟡 Changes recommended
Percentage rounding can still report an actionable loss as exactly 25% in both reporting paths.
Get a fresh assessment by requesting another Copilot review.
Review details
- Files reviewed: 2/2 changed files
- Comments generated: 2
- Review effort level: Balanced
Co-authored-by: Jaylyn-Barbee <51131738+Jaylyn-Barbee@users.noreply.github.com>
Description
The find-ui corpus drift job filed an issue for a condition that is the normal steady state. Upstream gains samples between releases, so #807 sat open permanently and collected a weekly "still present" comment nobody could act on. It shared the
find-ui-corpuslabel with the genuine alerts, so the noise devalued the label that also carries the real signal.Routine drift now goes to the workflow run summary. Issues are reserved for the two actionable cases. Because a run summary is not read at the moment it matters, the release bake now prints the same deltas, where an operator can still act on them.
What files an issue
The >25% case is the one nothing else catches.
SnapshotBaker.BakeAsynconly fails a source that returns zero scenarios, so a fetcher that survives an upstream restructure while matching a fraction of what it used to bakes green and would ship a gutted source.Usage Example
build-cli.ps1on-Stable(or-Bake) now reports what moved:And when a fetcher breaks without failing the bake:
It warns rather than fails. A legitimate upstream purge should not block a release, it should make someone look.
What replaces the #807 issue, in the run summary:
Related Issue
Closes #807
Type of Change
Checklist
Additional Notes
Verification
Both changes were tested by extracting the shipped code (the workflow's embedded PowerShell, and the delta block from
build-cli.ps1) and running it against synthetic corpora, so the tests exercise the real text rather than a copy.Drift workflow, 10 cases:
cleanroutineroutineroutineregressionregressionregressionroutinebake-failedbake-failedThe -25% boundary is exclusive: a quarter lost is not a regression, more than a quarter is.
Bake delta reporting, 7 cases: routine growth, gutted source, both -25% boundaries, new source added, source dropped from the manifest, and a first bake with no previous manifest. Output matches the samples above.
Also syntax-checked the workflow's embedded PowerShell and JS (wrapped as
github-scriptwraps it) and re-parsedbuild-cli.ps1.Incidental fix
$committedin the drift workflow was a relative path, butRead-Snapshotreads throughSystem.IO, which resolves relative paths against the process working directory rather than PowerShell's location. The two agree in Actions so this was not a live bug, but it let a local run silently compare against a different corpus thanGet-ChildItemenumerated. It surfaced while testing. Now resolved to absolute via$PWD.Path.Follow-up not included here
The
find-ui-corpuslabel description still reads "drift / bake failure". The workflow creates it as "regression / bake failure", butcreateLabelreturns 422 on an existing label and does not update it, so this needs a manual edit in repo settings.