Skip to content

Add net11 release readiness workflow#35754

Open
PureWeen wants to merge 1 commit into
dotnet:mainfrom
PureWeen:pureween/issue-35711-release-health-planning
Open

Add net11 release readiness workflow#35754
PureWeen wants to merge 1 commit into
dotnet:mainfrom
PureWeen:pureween/issue-35711-release-health-planning

Conversation

@PureWeen

@PureWeen PureWeen commented Jun 3, 2026

Copy link
Copy Markdown
Member

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:

  • a local Copilot skill: .github/skills/net11-release-readiness/SKILL.md
  • a deterministic readiness script: .github/skills/net11-release-readiness/scripts/Get-Net11ReleaseReadiness.ps1
  • a scheduled/manual/PR-validation workflow: .github/workflows/net11-release-readiness.yml

The 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-DD issue snapshot.

What the readiness check validates

  • Target resolution: maps auto, net11.0, net11-previewN, and release/11.0.1xx-previewN to a canonical release target.
  • Branch existence: verifies the expected release branch exists.
  • Version iteration: checks release branch PreReleaseVersionIteration and reports the net11.0 preview-next value so we catch the branch bump/preview-next mismatch called out by Increment PreReleaseVersionIteration from 4 to 5 #35721.
  • Maestro/dependency PRs: lists open dotnet-maestro PRs targeting the release branch or net11.0, including conflict/review/draft state and next action.
  • Release branch PRs: separates non-Maestro PRs targeting the release branch from general net11.0 inflight work.
  • Inflight branch health: summarizes open net11.0 PRs, including blocked/conflicting/review-requested work, without treating every inflight PR as a direct release-branch blocker.
  • Priority blockers: surfaces release-relevant open P/0 and P/1 issues.
  • Known Build Errors: surfaces release-relevant KBE issues for release owner triage.
  • CI truth boundary: reports CI as INSUFFICIENT_DATA until [Epic] Improve CI Analysis Accuracy — Flaky Detection, KBE Integration, Auto-Triage #35052 provides structured CI evidence; this intentionally avoids duplicating CI parsing/classification.
  • Xcode / ICM readiness: reports required Xcode values and reminds maintainers to verify hosted image support / file ICM quickly when public Xcode versions require it.
  • Internal pipeline status: includes only a sanitized public status (READY, WATCH, BLOCKED, or UNKNOWN) for dnceng/internal pipeline health.

Public/internal safety boundary

The script emits a public-safe markdown block bounded by:

<!-- NET11_RELEASE_READY_BEGIN -->
...
<!-- NET11_RELEASE_READY_END -->

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:

-IncludeInternal -InternalBuildId <build-id>

That path is intended for Copilot/local validation with maintainer credentials; public output remains sanitized.

Current limitations / expected follow-ups

  • CI truth is deliberately a placeholder until [Epic] Improve CI Analysis Accuracy — Flaky Detection, KBE Integration, Auto-Triage #35052 exposes structured CI evidence for this release-readiness layer to consume.
  • Internal dnceng validation is local/sanitized first; secure hosted internal aggregation should be designed separately.
  • This is the first deterministic pass. We can iterate on weighting, issue relevance filters, Maestro/darc checks, and the exact Release READY issue format after seeing real daily snapshots.

Validation

  • Ran the script for auto markdown output and verified marker extraction produced a non-empty public body.
  • Ran the script for net11-preview6 markdown output and verified missing-branch readiness behavior.
  • Ran JSON output through jq.
  • Parsed the PowerShell script with the PowerShell parser.
  • Ran git diff --check on the staged changes.

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>
@github-actions

github-actions Bot commented Jun 3, 2026

Copy link
Copy Markdown
Contributor

🚀 Dogfood this PR with:

⚠️ WARNING: Do not do this without first carefully reviewing the code of this PR to satisfy yourself it is safe.

curl -fsSL https://raw.githubusercontent.com/dotnet/maui/main/eng/scripts/get-maui-pr.sh | bash -s -- 35754

Or

  • Run remotely in PowerShell:
iex "& { $(irm https://raw.githubusercontent.com/dotnet/maui/main/eng/scripts/get-maui-pr.ps1) } 35754"

@github-actions

github-actions Bot commented Jun 3, 2026

Copy link
Copy Markdown
Contributor

🔍 Skill Validation Results

✅ Static Checks Passed

Skills checked: 19 | Agents checked: 4

Full validator output
Found 1 skill(s)
[net11-release-readiness] 📊 net11-release-readiness: 849 BPE tokens [chars/4: 881] (detailed ✓), 5 sections, 4 code blocks
✅ All checks passed (1 skill(s))
Found 4 agent(s)
Validated 4 agent(s)

✅ All checks passed (4 agent(s))

⏭️ LLM Evaluation: Skipped

No changed skills with eval tests found.

🔍 Full results and investigation steps

@github-actions github-actions Bot added the area-infrastructure CI, Maestro / Coherency, upstream dependencies/versions label Jun 3, 2026
@PureWeen PureWeen marked this pull request as draft June 3, 2026 20:15
@kubaflo

kubaflo commented Jun 7, 2026

Copy link
Copy Markdown
Contributor

/review -b feature/enhanced-reviewer -p android

@MauiBot MauiBot left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Expert Review — 3 findings

See inline comments for details.

continue
}

throw "Failed to $Description"

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[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

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[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' }}

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[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.

@MauiBot MauiBot added s/agent-fix-win AI found a better alternative fix than the PR s/agent-reviewed PR was reviewed by AI agent workflow (full 4-phase review) labels Jun 7, 2026
MauiBot

This comment was marked as outdated.

@kubaflo kubaflo left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Could you please check the ai's suggestions?

@PureWeen PureWeen marked this pull request as ready for review June 9, 2026 13:56
@kubaflo

kubaflo commented Jun 10, 2026

Copy link
Copy Markdown
Contributor

/review rerun

@github-actions github-actions Bot added the s/agent-ready-for-rerun AI review has a new PR-author comment or commit and is ready for rerun label Jun 10, 2026
PureWeen pushed a commit that referenced this pull request Jun 11, 2026
…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>
@kubaflo

kubaflo commented Jun 11, 2026

Copy link
Copy Markdown
Contributor

/review -b feature/enhanced-reviewer -p android

@github-actions github-actions Bot added s/agent-review-in-progress AI review is currently running for this PR and removed s/agent-ready-for-rerun AI review has a new PR-author comment or commit and is ready for rerun labels Jun 11, 2026

@MauiBot MauiBot left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Expert Review — 1 findings

See inline comments for details.

run: |
gh issue list \
--repo ${{ github.repository }} \
--search '"[Release READY]" "net11" in:title' \

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[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.

MauiBot

This comment was marked as outdated.

@MauiBot MauiBot removed the s/agent-review-in-progress AI review is currently running for this PR label Jun 11, 2026
@kubaflo

kubaflo commented Jun 13, 2026

Copy link
Copy Markdown
Contributor

/review -b feature/enhanced-reviewer -p android

@github-actions github-actions Bot added the s/agent-review-in-progress AI review is currently running for this PR label Jun 13, 2026

@MauiBot MauiBot left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Expert Review — 1 findings

See inline comments for details.

run: |
gh issue list \
--repo ${{ github.repository }} \
--search '"[Release READY]" "net11" in:title' \

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

❌ 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 MauiBot left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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.

Gate Skipped Code Review In Review Confidence Medium Platform Infrastructure

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-readiness skill, 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.md was 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 checks and 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:79 searches only for "[Release READY]" "net11" in:title before 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. ⚠️ SKIPPED (Gate: no tests detected) .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: write and 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; gh CLI 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 gh execution 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 planning issue: 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. ⚠️ SKIPPED (Gate: no tests detected) 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 ⚠️ SKIPPED (gate skipped; no tests detected) 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.

@MauiBot MauiBot removed the s/agent-review-in-progress AI review is currently running for this PR label Jun 13, 2026

@kubaflo kubaflo left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Could you please check the ai's suggestions?

PureWeen pushed a commit that referenced this pull request Jun 15, 2026
…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>
PureWeen added a commit that referenced this pull request Jun 17, 2026
<!-- 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>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

area-infrastructure CI, Maestro / Coherency, upstream dependencies/versions s/agent-fix-win AI found a better alternative fix than the PR s/agent-reviewed PR was reviewed by AI agent workflow (full 4-phase review)

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants