Add official build freshness check to vmr-codeflow-status skill#124146
Merged
Add official build freshness check to vmr-codeflow-status skill#124146
Conversation
Contributor
There was a problem hiding this comment.
Pull request overview
Adds an “official build freshness” signal to the vmr-codeflow-status skill to help distinguish missing backflow PRs caused by Maestro delays vs. broken VMR official builds, and documents the relevant VMR build topology/codeflow concepts.
Changes:
- Introduces
Get-VMRBuildFreshnessand integrates it into-CheckMissingflow to queryaka.msredirects and blobLast-Modifiedtimestamps. - Improves backflow PR selection logic (uses
closedAt) and makesgh searchfailures explicitly warn. - Adds/updates reference documentation (
vmr-codeflow-reference.md,vmr-build-topology.md) and expandsSKILL.md.
Reviewed changes
Copilot reviewed 4 out of 4 changed files in this pull request and generated 3 comments.
| File | Description |
|---|---|
.github/skills/vmr-codeflow-status/scripts/Get-CodeflowStatus.ps1 |
New/updated script implementing missing-backflow detection, forward-flow scanning, and official build freshness checks. |
.github/skills/vmr-codeflow-status/references/vmr-codeflow-reference.md |
New reference explaining codeflow concepts, metadata, and common remediation commands. |
.github/skills/vmr-codeflow-status/references/vmr-build-topology.md |
New reference describing public vs official VMR builds and the aka.ms freshness technique. |
.github/skills/vmr-codeflow-status/SKILL.md |
Skill documentation updates (frontmatter/license, prerequisites, parameters, and behavior description). |
.github/skills/vmr-codeflow-status/scripts/Get-CodeflowStatus.ps1
Outdated
Show resolved
Hide resolved
- Add Get-VMRBuildFreshness function that checks aka.ms shortlinks to determine when the last successful official VMR build was published - Integrate into CheckMissing mode: automatically reports build freshness when missing backflow PRs are detected - Add vmr-build-topology.md reference doc covering build pipeline structure, channel-to-branch mapping, bootstrap chicken-and-egg problem, and diagnostic patterns - Fix merged PR selection to use closedAt instead of search sort order - Add explicit error handling when gh search fails (auth/rate-limit) - Set HTTP timeouts (15s) and proper HttpClient disposal - Update SKILL.md: add license, prerequisites, expanded parameter docs
6c41176 to
b7009c4
Compare
.github/skills/vmr-codeflow-status/scripts/Get-CodeflowStatus.ps1
Outdated
Show resolved
Hide resolved
Member
Author
|
it appears @copilot doesn't understand the license frontmatter yet |
…check Replaces Invoke-WebRequest with HttpClient HEAD for consistency. Fixes Nullable<DateTimeOffset> handling in PowerShell (unwrapped automatically, so .Value doesn't work — must cast instead).
…rting Previously the script flagged PRs as conflicted/stale based on Maestro comments alone. When someone resolves the conflict (e.g. via darc vmr resolve-conflict), no new comment is posted, but the Codeflow verification check turns green. Now checks that status before reporting, and shows 'Conflict resolved' when applicable.
…elper Previously open backflow PRs got a blanket '✅ exists' without checking if they had unresolved conflicts or staleness. Now uses the same Get-CodeflowPRHealth helper for both backflow and forward flow PRs, which checks Maestro comments and Codeflow verification status.
.github/skills/vmr-codeflow-status/scripts/Get-CodeflowStatus.ps1
Outdated
Show resolved
Hide resolved
.github/skills/vmr-codeflow-status/scripts/Get-CodeflowStatus.ps1
Outdated
Show resolved
Hide resolved
.github/skills/vmr-codeflow-status/scripts/Get-CodeflowStatus.ps1
Outdated
Show resolved
Hide resolved
.github/skills/vmr-codeflow-status/scripts/Get-CodeflowStatus.ps1
Outdated
Show resolved
Hide resolved
- Show build freshness BEFORE per-branch analysis for upstream context - Say 'backflow blocked upstream' instead of 'Maestro may be stuck' when official builds are stale (the real root cause) - Fix staleness resolution: only clear conflict on Codeflow verification SUCCESS, staleness needs commits after the warning to be 'resolved' - Skip self-backflow check for dotnet/dotnet (nonsensical), just show build freshness - Extract Get-CodeflowPRHealth into reusable helper
steveisok
approved these changes
Feb 8, 2026
…lure, summary wording - Move HEAD request disposal into finally blocks (handles timeout/error) - Fix codeflowCheck array bug: Select-Object -First 1 for safe boolean test - Return 'Unknown' instead of 'Healthy' when API calls fail - Tighten repo validation regex to [A-Za-z0-9_.-]+/[A-Za-z0-9_.-]+ - Split summary: 'blocked open PRs' vs 'MISSING backflow PRs' - Remove stale 'CI status' comment from Get-CodeflowPRHealth
.github/skills/vmr-codeflow-status/scripts/Get-CodeflowStatus.ps1
Outdated
Show resolved
Hide resolved
.github/skills/vmr-codeflow-status/scripts/Get-CodeflowStatus.ps1
Outdated
Show resolved
Hide resolved
.github/skills/vmr-codeflow-status/scripts/Get-CodeflowStatus.ps1
Outdated
Show resolved
Hide resolved
- Don't count 'Unknown' health status as healthy/covered in backflow or forward flow counters (3 spots) - Verified gh pr checks uses 'state' field (not 'conclusion') — SUCCESS is the correct value to check - Review feedback: copilot-pull-request-reviewer round 4
- Staleness resolution now parses timestamps as DateTimeOffset for robust comparison instead of lexicographic string comparison - Cache PR body in first pass to avoid double-fetching in per-branch loop - Review feedback: copilot-pull-request-reviewer round 5
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 join this conversation on GitHub.
Already have an account?
Sign in to comment
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.
Summary
Adds official build freshness checking, improved conflict/staleness detection, and better diagnostic output to the vmr-codeflow-status Copilot skill.
Motivation
When investigating widespread backflow staleness across dotnet repos, the root cause is often broken VMR official builds — not Maestro subscription issues. The skill previously had no way to surface this, leading to misleading "Maestro may be stuck" warnings. Open backflow PRs were also reported as healthy even when they had unresolved conflicts.
Changes
Build freshness check (
Get-VMRBuildFreshness)aka.ms/dotnet/{channel}/daily/dotnet-sdk-win-x64.zip(301 redirect → ci.dot.net blob)Last-Modifiedtimestamp = last successful official build publishHttpClientthroughout (noInvoke-WebRequestmixing), 15-second timeouts, proper disposalSmarter conflict/staleness detection (
Get-CodeflowPRHealth)Better diagnostic messaging
dotnet/dotnetself-check skips nonsensical self-backflow, shows only build freshnessNew: references/vmr-build-topology.md
Reference doc covering build pipeline structure, aka.ms technique, channel mapping, Version.Details.xml cross-referencing, darc validation, diagnosis patterns, bootstrap problem, and common failures.
Bug fixes
closedAtcomparison (notgh search --sort updatedorder)gh searchfailures warn explicitly instead of silently treating as empty resultsHttpResponseMessageobjects properly disposed in all code pathsSKILL.md