Add net11 release readiness workflow#35754
Conversation
Create a deterministic net11 release readiness script, local Copilot skill, and scheduled workflow that publishes public-safe Release READY issue snapshots. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
|
🚀 Dogfood this PR with:
curl -fsSL https://raw.githubusercontent.com/dotnet/maui/main/eng/scripts/get-maui-pr.sh | bash -s -- 35754Or
iex "& { $(irm https://raw.githubusercontent.com/dotnet/maui/main/eng/scripts/get-maui-pr.ps1) } 35754" |
🔍 Skill Validation Results✅ Static Checks PassedSkills checked: 19 | Agents checked: 4 Full validator output⏭️ LLM Evaluation: SkippedNo changed skills with eval tests found. |
|
/review -b feature/enhanced-reviewer -p android |
MauiBot
left a comment
There was a problem hiding this comment.
Expert Review — 3 findings
See inline comments for details.
| continue | ||
| } | ||
|
|
||
| throw "Failed to $Description" |
There was a problem hiding this comment.
[warning] Build/MSBuild - retry diagnostics - Invoke-GitHubWithRetry throws here on the final retry attempt, so the later after $MaxRetries attempts throw is unreachable. A transient 502/timeout that exhausts retries reports only Failed to ..., losing retry-exhaustion context. Move the final throw outside the loop or include the attempt count/last error in this throw.
|
|
||
| $encodedBranch = [System.Uri]::EscapeDataString($Branch) | ||
| $global:LASTEXITCODE = 0 | ||
| $output = & gh api "repos/$Repository/branches/$encodedBranch" --jq ".name" 2>&1 |
There was a problem hiding this comment.
[warning] Build/MSBuild - transient GitHub failures - Test-BranchExists calls gh api directly instead of the retry helper used elsewhere. A single transient GitHub/API failure here aborts the whole readiness report because branch checks run before most report sections. Route this through retry logic while still treating real 404 responses as false.
| contents: read | ||
|
|
||
| concurrency: | ||
| group: net11-release-readiness-${{ github.event_name }}-${{ inputs.target || 'auto' }} |
There was a problem hiding this comment.
[warning] Build/MSBuild - workflow concurrency - for pull_request events this group resolves to net11-release-readiness-pull_request-auto, so validation for one PR can cancel validation for another unrelated PR. Include the PR number/ref in the pull_request concurrency key, while keeping the scheduled/manual report serialized if desired.
kubaflo
left a comment
There was a problem hiding this comment.
Could you please check the ai's suggestions?
|
/review rerun |
…ersedes #35754) Folds #35754's net11-preview-readiness work into the existing release-readiness skill so dotnet/maui has ONE deterministic readiness pipeline that handles both Servicing Releases (SR) and Previews — in both in-flight and candidate (pre-cut) modes. Changes ======= Find-ReleaseReadinessTrackers.ps1 - Four-lane detector now covers SR + Preview branches grounded in the tag-existence rule (a release is in-flight if and only if its expected tag has not been published). - -AllActiveMajors enumerates every active major (current + lower in-flight) in one envelope, ready for matrix expansion. - Trackers always advertise a canonical proposed branchName (even for candidates that have not been cut yet); a new branchExists flag is the explicit signal for whether the branch is on origin. Get-PreviewReadiness.ps1 (new, ~720 lines) - Port of #35754's net11 readiness adapted to the skill structure. - Takes -Branch + -Mode {in-flight,candidate} + -SurveyRef; candidate mode surveys net<major>.0 with the inflight-bump check skipped. - Embeds canonical idempotency markers (release-readiness-tracker / -flavor / -mode) so daily issue updates can join on the canonical key. - Preserves the human-notes block between marker fences across re-runs. release-readiness.yml workflow (new) - Weekday 08:30 UTC cron + workflow_dispatch + PR validation. - detect-trackers job emits a matrix from Find-Trackers -AllActiveMajors; one matrix job per tracker dispatches to Get-ReleaseReadiness (SR) or Get-PreviewReadiness (preview) based on branchType. - Idempotent issue handling: look up an open tracker issue by the canonical marker, edit it in place; otherwise create one with report / s/triaged / area-release-readiness labels. - Activity gate: when recentCommitCount == 0 AND no open tracker issue exists, skip new-issue creation (existing open issues are still refreshed). - PR-trigger validate job runs the test suite and smoke-runs every detected tracker against the report scripts; never touches issues. SKILL.md - Documents the SR + Preview entry points, the tag-existence rule, the daily workflow, the branchExists / branchName contract, and the shared MauiReleaseVersioning.psm1 dependency. Tests - Release-readiness suite: 273/273 passing (added preview-lane unit tests + -AllActiveMajors E2E; updated for SR7-shipped live state and the new branchExists contract). - Fix-MilestoneDrift Pester suite: 118/118 passing (validates that the earliest-release-wins milestone logic merged in from #35858 still works after this branch's edits). Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
|
/review -b feature/enhanced-reviewer -p android |
MauiBot
left a comment
There was a problem hiding this comment.
Expert Review — 1 findings
See inline comments for details.
| run: | | ||
| gh issue list \ | ||
| --repo ${{ github.repository }} \ | ||
| --search '"[Release READY]" "net11" in:title' \ |
There was a problem hiding this comment.
[major] Workflow safety — The cleanup query closes every open issue whose title matches [Release READY] and net11, but it does not constrain results to issues created by this workflow/bot or to the labels applied on lines 94-95. Because this runs on a schedule with issues: write, a maintainer-created tracking issue with a matching title could be closed automatically. Please narrow the search, e.g. by workflow labels and/or author:github-actions[bot], before piping numbers to gh issue close.
|
/review -b feature/enhanced-reviewer -p android |
MauiBot
left a comment
There was a problem hiding this comment.
Expert Review — 1 findings
See inline comments for details.
| run: | | ||
| gh issue list \ | ||
| --repo ${{ github.repository }} \ | ||
| --search '"[Release READY]" "net11" in:title' \ |
There was a problem hiding this comment.
❌ Error — This cleanup query matches broad title text only, then closes every returned open issue as not planned. A maintainer-created issue whose title contains [Release READY] and net11 could be closed even though this workflow did not create it. Constrain destructive cleanup to workflow-owned daily issues, e.g. bot author plus report/s/triaged labels plus exact generated title/body marker, or update a single tracked issue instead.
MauiBot
left a comment
There was a problem hiding this comment.
AI Review Summary
@PureWeen — new AI review results are available based on this last commit:
f0fc6b0. To request a fresh review after new comments or commits, comment/review rerun.
Review Sessions — click to expand
Gate — Test Before & After Fix
Gate Result: ⚠️ SKIPPED
No tests were detected in this PR.
Recommendation: Add tests to verify the fix using the write-tests-agent.
Pre-Flight — Context & Validation
Issue: #35711 - [Epic] Agentic Release Management & Pipeline Health — net11 readiness, Maestro flow, and release gates
PR: #35754 - Add net11 release readiness workflow
Platforms Affected: infrastructure / release automation; requested test platform android has no Android runtime code impact
Files Changed: 3 implementation/infrastructure, 0 test
Key Findings
- PR adds a
net11-release-readinessskill, deterministic readiness script, and scheduled/manual/PR-validation workflow. - Gate was already completed separately and skipped because no tests were detected; gate verification was not rerun and
gate/content.mdwas not modified. - Impacted UI test categories: NONE — no MAUI controls, handlers, layouts, or Android platform runtime files changed.
- Code review found a workflow safety defect: scheduled/manual cleanup closes all open issues matching broad title terms before creating the new daily issue.
- GitHub CLI auth was unavailable locally, so live
gh pr checksand live issue-list/close behavior could not be executed.
Code Review Summary
Verdict: NEEDS_CHANGES
Confidence: medium
Errors: 1 | Warnings: 0 | Suggestions: 0
Key code review findings:
- ❌
.github/workflows/net11-release-readiness.yml:79searches only for"[Release READY]" "net11" in:titlebefore closing every returned open issue; cleanup should constrain to workflow-owned issues, for example by bot author, labels, exact generated title shape, and/or report body marker.
Fix Candidates
| # | Source | Approach | Test Result | Files Changed | Notes |
|---|---|---|---|---|---|
| PR | PR #35754 | Add net11 readiness skill/script/workflow; current workflow cleanup closes broad title-only issue matches. | .github/skills/net11-release-readiness/SKILL.md, .github/skills/net11-release-readiness/scripts/Get-Net11ReleaseReadiness.ps1, .github/workflows/net11-release-readiness.yml |
Original PR; needs safer cleanup query. |
Code Review — Deep Analysis
Code Review — PR #35754
Independent Assessment
What this changes: Adds a net11-release-readiness Copilot skill, a deterministic PowerShell readiness script, and a scheduled/manual/PR-validation GitHub Actions workflow. The workflow generates a marker-delimited public report and, on schedule/manual dispatch, closes previous daily [Release READY] net11 ... issues before creating a new one.
Inferred motivation: Give release owners a repeatable public-safe net11 readiness snapshot that covers release branches, Maestro PRs, blockers, Xcode/ICM readiness, and sanitized internal status.
Reconciliation with PR Narrative
Author claims: The PR adds first net11 release-readiness automation for #35711, emits only the marker-bounded public block, defers CI truth to #35052, and creates a daily public Release READY issue snapshot.
Agreement/disagreement: The implementation matches the release-readiness scope and public/internal marker boundary. The main disagreement is in the workflow mutation path: the cleanup query is broader than the workflow-owned issues it later creates.
Prior Review Reconciliation
| Prior ❌ Error Finding | Source | Status | Evidence |
|---|---|---|---|
Scheduled cleanup can close unrelated maintainer issues because it searches only for "[Release READY]" "net11" in:title before closing every match. |
MauiBot inline review / prior AI summary | ❌ Unresolved in current local PR delta | .github/workflows/net11-release-readiness.yml still uses the title-only search and pipes all numbers to gh issue close. |
Blast Radius Assessment
- Runs for all instances: yes — scheduled/manual workflow runs with
issues: writeand can mutate public issues. - Startup impact: no MAUI app startup impact; this is repository automation.
- Static/shared state: no app static state; persistent GitHub issue state is mutated.
CI Status
- Required-check result: undetermined locally;
ghCLI is unauthenticated in this environment. - Classification: undetermined for CI; gate was provided as skipped because no tests were detected.
- Action taken: used public unauthenticated PR/review data and local static validation only; confidence capped for live
ghexecution behavior.
Findings
❌ Error — Scheduled cleanup can close unrelated maintainer issues
.github/workflows/net11-release-readiness.yml:79 searches only for "[Release READY]" "net11" in:title and closes every returned open issue. Because the job has issues: write, any human-created tracking issue with a matching title can be closed even if it was not created by this workflow. The create step labels workflow-owned issues with report and s/triaged, and the generated body contains NET11_RELEASE_READY markers, so cleanup should constrain closure to workflow-owned issues before mutating state.
Failure-Mode Probing
- Human creates
[Release READY] net11 planningissue: current PR can close it on the next schedule/manual run because title terms match. - Workflow-owned issue labels are removed: current PR would still close it by title only; safer candidates require labels/author/body marker.
- GitHub search returns a stale or broad match: current PR suppresses close errors with
|| true, making accidental/partial cleanup harder to detect.
Verdict: NEEDS_CHANGES
Confidence: medium
Summary: The core readiness script and skill are aligned with the PR goal, but the issue cleanup mutation is too broad for a scheduled workflow with issues: write. The fix should constrain cleanup to workflow-owned issues or avoid destructive closure entirely.
Fix — Analysis & Comparison
Fix Candidates
| # | Source | Approach | Test Result | Files Changed | Notes |
|---|---|---|---|---|---|
| 1 | maui-expert-reviewer + try-fix | Structured ownership filter: add author:github-actions[bot] and first-class --label report / --label s/triaged filters to the cleanup query. |
✅ PASS (offline/static checks) | 1 file | Fixes broad title-only cleanup, but relies on GitHub search + label filtering behavior that could not be live-tested without auth. |
| 2 | maui-expert-reviewer + try-fix | Non-destructive single tracking issue: replace close/create with find/edit-or-create for [Release READY] net11 status. |
✅ PASS (offline/static checks) | 1 file | Safest against accidental closure because it removes gh issue close, but changes the PR's stated daily snapshot model. |
| 3 | maui-expert-reviewer + try-fix | Strict daily snapshot ownership filter: require bot author, workflow labels, generated daily title regex, and NET11_RELEASE_READY_BEGIN body marker before closing. |
✅ PASS (offline/static checks) | 1 file | Best standalone candidate: preserves daily snapshots while constraining destructive cleanup to workflow-owned generated issues. |
| PR | PR #35754 | Title-only cleanup query closes every open issue matching "[Release READY]" "net11" in:title. |
3 files | Original PR behavior can close unrelated maintainer-created issues. |
Cross-Pollination
| Model | Round | New Ideas? | Details |
|---|---|---|---|
| maui-expert-reviewer | 1 | Yes | Identified destructive cleanup safety as the high-confidence issue and proposed ownership filters, non-destructive single-issue update, two-phase plan, helper extraction, and tokenless validation variants. |
| try-fix loop | 1 | Yes | Candidate 1 applied structured author/label filters; passed static checks but left live search behavior unverified. |
| try-fix loop | 2 | Yes | Candidate 2 removed destructive closure entirely; passed static checks but changed the daily snapshot product model. |
| try-fix loop | 3 | Yes | Candidate 3 incorporated lessons from candidates 1 and 2: preserve daily snapshots but require author, labels, exact generated title shape, and body marker before closing. |
| orchestrator | stop | No further run | Stopped because candidate 3 passed all available tests and is demonstrably better than the PR baseline while avoiding candidate 2's product-model change. Further variants would be trivial recombinations or larger helper extraction. |
Exhausted: No
Selected Fix: Candidate #3 — preserves the PR's daily Release READY issue model while preventing broad title-only closure of unrelated issues. Candidate #2 is safer but changes intended behavior; candidate #1 is simpler but less specific than candidate #3.
Test Notes
Gate verification was not rerun, per instruction. Candidate testing used targeted static regression checks (git diff --check, workflow-content invariants) and PowerShell parser validation for Get-Net11ReleaseReadiness.ps1. Live gh issue list / gh issue close execution was blocked because the local GitHub CLI is unauthenticated.
Candidate Narratives
try-fix-1
See CustomAgentLogsTmp/PRState/35754/PRAgent/try-fix-1/content.md.
try-fix-2
See CustomAgentLogsTmp/PRState/35754/PRAgent/try-fix-2/content.md.
try-fix-3
See CustomAgentLogsTmp/PRState/35754/PRAgent/try-fix-3/content.md.
Report — Final Recommendation
Comparative Report
Candidates
| Rank | Candidate | Regression result | Assessment |
|---|---|---|---|
| 1 | pr-plus-reviewer |
✅ PASS via equivalent try-fix-3 offline/static checks | Best overall. Applies the expert reviewer's actionable feedback while preserving the PR's intended daily snapshot model. It constrains issue closure by bot author, workflow labels, exact generated title shape, and the NET11_RELEASE_READY_BEGIN body marker. |
| 2 | try-fix-3 |
✅ PASS (offline/static checks) | Functionally equivalent to pr-plus-reviewer and the best standalone try-fix. Ranked below pr-plus-reviewer only because the requested Phase 1 candidate is the PR fix plus reviewer feedback, and it uses this same patch. |
| 3 | try-fix-2 |
✅ PASS (offline/static checks) | Safest against accidental closure because it removes destructive issue closing entirely, but it changes the PR's daily snapshot behavior into a single rolling issue. |
| 4 | try-fix-1 |
✅ PASS (offline/static checks) | Improves the raw PR by adding bot-author and label filters, but it still lacks exact generated-title and body-marker validation, so it is less robust than try-fix-3 / pr-plus-reviewer. |
| 5 | pr |
Raw PR has a confirmed workflow-safety error: broad title-only cleanup can close unrelated open issues matching [Release READY] and net11. |
Analysis
The raw PR fix adds the requested net11 release-readiness skill/script/workflow, but its cleanup step is too broad for a destructive issue operation. The expert reviewer flagged .github/workflows/net11-release-readiness.yml:79 because the workflow lists issues by title text only and closes every match as not planned.
All STEP 5a try-fix candidates passed their available offline/static regression checks. None failed regression tests, so ranking is based on safety and behavioral fit. try-fix-2 is maximally non-destructive, but it changes the authoring model from daily snapshots to a single rolling issue. try-fix-1 keeps the model but only partially constrains ownership. try-fix-3 provides the best balance by preserving daily snapshots while adding strong ownership checks.
pr-plus-reviewer is the same strict ownership/body-marker approach as try-fix-3, applied as reviewer feedback to the PR fix. It wins because it resolves the expert reviewer's error, keeps the intended daily issue behavior, and has the strongest validated guardrails among candidates that preserve that behavior.
Winner
Winning candidate: pr-plus-reviewer
Rationale: It directly fixes the expert-reviewed safety defect by narrowing destructive cleanup to workflow-owned generated issues, while preserving the PR's daily Release READY snapshot model. The equivalent try-fix-3 candidate passed the available offline/static validation; the raw PR did not have test coverage and retains a confirmed safety error.
Future Action — review latest findings
No alternative fix was selected for this run. Review the session findings and CI results before merging.
kubaflo
left a comment
There was a problem hiding this comment.
Could you please check the ai's suggestions?
…ersedes #35754) Folds #35754's net11-preview-readiness work into the existing release-readiness skill so dotnet/maui has ONE deterministic readiness pipeline that handles both Servicing Releases (SR) and Previews — in both in-flight and candidate (pre-cut) modes. Changes ======= Find-ReleaseReadinessTrackers.ps1 - Four-lane detector now covers SR + Preview branches grounded in the tag-existence rule (a release is in-flight if and only if its expected tag has not been published). - -AllActiveMajors enumerates every active major (current + lower in-flight) in one envelope, ready for matrix expansion. - Trackers always advertise a canonical proposed branchName (even for candidates that have not been cut yet); a new branchExists flag is the explicit signal for whether the branch is on origin. Get-PreviewReadiness.ps1 (new, ~720 lines) - Port of #35754's net11 readiness adapted to the skill structure. - Takes -Branch + -Mode {in-flight,candidate} + -SurveyRef; candidate mode surveys net<major>.0 with the inflight-bump check skipped. - Embeds canonical idempotency markers (release-readiness-tracker / -flavor / -mode) so daily issue updates can join on the canonical key. - Preserves the human-notes block between marker fences across re-runs. release-readiness.yml workflow (new) - Weekday 08:30 UTC cron + workflow_dispatch + PR validation. - detect-trackers job emits a matrix from Find-Trackers -AllActiveMajors; one matrix job per tracker dispatches to Get-ReleaseReadiness (SR) or Get-PreviewReadiness (preview) based on branchType. - Idempotent issue handling: look up an open tracker issue by the canonical marker, edit it in place; otherwise create one with report / s/triaged / area-release-readiness labels. - Activity gate: when recentCommitCount == 0 AND no open tracker issue exists, skip new-issue creation (existing open issues are still refreshed). - PR-trigger validate job runs the test suite and smoke-runs every detected tracker against the report scripts; never touches issues. SKILL.md - Documents the SR + Preview entry points, the tag-existence rule, the daily workflow, the branchExists / branchName contract, and the shared MauiReleaseVersioning.psm1 dependency. Tests - Release-readiness suite: 273/273 passing (added preview-lane unit tests + -AllActiveMajors E2E; updated for SR7-shipped live state and the new branchExists contract). - Fix-MilestoneDrift Pester suite: 118/118 passing (validates that the earliest-release-wins milestone logic merged in from #35858 still works after this branch's edits). Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
<!-- 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 a deterministic, evidence-backed release-readiness skill that produces a single "Is `release/X.Y.Zxx-srN` (or preview) ready to ship?" report for .NET MAUI release branches — both **Servicing Releases (SR)** and **Previews**, in both **in-flight** and **candidate** (pre-cut) modes. Supersedes #35754. ## What it does `Get-ReleaseReadiness.ps1` walks the SR branch, classifies open `regressed-in-*` issues against branch contents, computes the source-PR list (handling cherry-pick number swaps + non-main forward-flow), and rolls up an "is this ready to ship?" verdict with a **Blocking** summary hoisted to the top of the report. Posts/refreshes a single `[Release Readiness]` GitHub tracking issue per release lane (idempotent via a semantic hash marker — only reposts when something meaningfully changed). See **[issue #35876 (SR8)](#35876 for a live example. ## Ship-readiness checks A release captain sees these surface as 🟢 READY / 🟡 WATCH / 🔴 BLOCKED / ⚪ UNKNOWN rows. All BLOCKED rows roll up into the **Blocking** summary at the top. | Check | Catches | |-------|---------| | **Versions.props bump** | SR cycle hasn't been bumped on the SR branch | | **Versions.props servicing flip** | `PreReleaseVersionLabel=servicing` + `StabilizePackageVersion=true` not applied — branch silently builds prerelease packages | | **Bug template lists SR version** | Users can't file bugs against the new version | | **Main bumped to next SR cycle** | Post-SR-cut PRs on main would falsely claim to ship in the SR being shipped | | **BAR default-channel mapping** | SR branch not wired to `.NET <band> SDK` in BAR — caught the real SR8 outage | | **BAR build for SR HEAD** | No published build at the SR HEAD commit | | **Milestone for current cycle** | Fixed issues have nowhere to land | | **Milestone for next cycle** | Open issues can't roll forward when current ships | | **Stale open milestones** | Already-shipped releases accumulating untriaged issues (scoped to same major + same cycle type, 7-day grace) | | **CI Failure Scanner signals** | Fresh ci-scan issues filed in the last 24h | | **Known Build Errors** | Open KBE issues that may explain background CI noise | Each check that needs external tooling (darc, gh, milestone API) degrades to **UNKNOWN** with the exact verification command embedded — the report never silently skips. ## Expected ship date Header line surfaces the deadline. Cadence is patch-aware: - `PatchVersion` ends in 0 (`80`, `90`, `100`…) or `0` (previews) → 2nd Tuesday of the month - Anything else (`81`, `82`, `91`…) → **ASAP** hotfix, no cadence ## Custom agent `.github/agents/release-readiness-agent.agent.md` wraps the skill — handles regression-label confirmation, runs the script, then uses **WorkIQ** + **maestro MCP** to: - Patch UNKNOWN BAR rows live (e.g. when darc isn't on CI's PATH) - Add narrative context for `rejected-from-sr` PRs (chat history, review feedback) - Present the final READY / Conditionally Ready / Not Ready verdict with citations ## Testing ```bash pwsh .github/skills/release-readiness/tests/Test-ReleaseReadiness.ps1 # 447 pass / 0 fail ``` Dogfooded live against SR7 + SR8 + the .NET 11 preview lane. Caught real-world bugs: - **SR8** missing from BAR default-channel mappings (verified via `maestro_default_channels` MCP) - `.NET 10 SR6` + `.NET 10 SR7` milestones open with 76 + 63 open issues, past due - `.github/ISSUE_TEMPLATE/bug-report.yml` missing `10.0.80` entry ## Methodology gotchas (documented in `references/methodology.md`) 1. **Cherry-pick number swap** — SR backports get NEW PR numbers; can't naively grep source PR numbers 2. **Timeline cross-references** — `closedByPullRequestsReferences` returns empty for most MAUI issues; must walk `gh api .../issues/N/timeline` cross-referenced events 3. **Forward-flow / non-main merges** — a fix can merge into `inflight/current` only, not `main` (real example: PR #35609) ## Files - `.github/skills/release-readiness/SKILL.md` — skill entry point + reference docs - `.github/skills/release-readiness/scripts/Get-ReleaseReadiness.ps1` — main orchestrator (deterministic, no MCP) - `.github/skills/release-readiness/tests/Test-ReleaseReadiness.ps1` — 447-assertion test suite - `.github/skills/release-readiness/references/methodology.md` — gotchas and patterns - `.github/agents/release-readiness-agent.agent.md` — MCP-enriched agent wrapping the skill --------- Co-authored-by: bot <bot@test> Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Co-authored-by: VSC Agent <vsc-agent@example.com>
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 from this PR and let us know in a comment if this change resolves your issue. Thank you!
Summary
Adds the first net11 release-readiness automation for #35711:
.github/skills/net11-release-readiness/SKILL.md.github/skills/net11-release-readiness/scripts/Get-Net11ReleaseReadiness.ps1.github/workflows/net11-release-readiness.ymlThe intent is that a maintainer can ask Copilot CLI something like
Is net11-preview6 ready to release?and get a concrete checklist-backed answer. The workflow also creates a daily public[Release READY] net11 YYYY-MM-DDissue snapshot.What the readiness check validates
auto,net11.0,net11-previewN, andrelease/11.0.1xx-previewNto a canonical release target.PreReleaseVersionIterationand reports thenet11.0preview-next value so we catch the branch bump/preview-next mismatch called out by Increment PreReleaseVersionIteration from 4 to 5 #35721.dotnet-maestroPRs targeting the release branch ornet11.0, including conflict/review/draft state and next action.net11.0inflight work.net11.0PRs, including blocked/conflicting/review-requested work, without treating every inflight PR as a direct release-branch blocker.INSUFFICIENT_DATAuntil [Epic] Improve CI Analysis Accuracy — Flaky Detection, KBE Integration, Auto-Triage #35052 provides structured CI evidence; this intentionally avoids duplicating CI parsing/classification.READY,WATCH,BLOCKED, orUNKNOWN) for dnceng/internal pipeline health.Public/internal safety boundary
The script emits a public-safe markdown block bounded by:
The workflow extracts only that block before writing the issue body. Internal details are intentionally not posted publicly: no private URLs, raw internal logs, artifact links, account identifiers, secret names, or raw dnceng/internal failure payloads.
For local maintainer use, the script supports:
That path is intended for Copilot/local validation with maintainer credentials; public output remains sanitized.
Current limitations / expected follow-ups
Validation
automarkdown output and verified marker extraction produced a non-empty public body.net11-preview6markdown output and verified missing-branch readiness behavior.jq.git diff --checkon the staged changes.