Skip to content

Per-component release notes PRs in the release-notes skill (#10382)#10383

Open
danroth27 wants to merge 20 commits intomainfrom
per-component-release-notes-prs
Open

Per-component release notes PRs in the release-notes skill (#10382)#10383
danroth27 wants to merge 20 commits intomainfrom
per-component-release-notes-prs

Conversation

@danroth27
Copy link
Copy Markdown
Member

@danroth27 danroth27 commented Apr 28, 2026

Closes #10382.

Summary

Updates the release-notes skill so each release milestone is described as a set of pull requests — one base PR holding shared metadata plus one PR per component file (aspnetcore.md, runtime.md, libraries.md, etc.) — instead of a single monolithic PR. Component teams can review and edit their own file in isolation; the base PR's diff grows into the consolidation as component PRs merge.

This PR is scoped to the skill only. The agentic workflow on main does not currently delegate to the release-notes skill (it has its own ~370-line inline playbook), so workflow changes are not required for the skill update to take effect for callers that do use the skill — most importantly, running the release-notes custom agent locally. Reconciling the workflow with the skill is tracked separately.

What changes

  • New .github/skills/release-notes/references/pr-layout.md — the canonical description of the base + per-component branch scheme: branch naming, PR titles, default assignees, draft-state rules, merge flow (component → base → main), per-run-cap seed order, completeness check, and the rerun invariants.
  • component-mapping.md — added Branch Suffix and Default Assignee(s) columns to the main table; split Roslyn into separate C#/VB rows; added an Out-of-VMR components section for containers and dotnetmaui with an explicit content-sourcing protocol so the agent does not refuse them just because they don't appear in changes.json; split expected output files between the base branch (metadata) and per-component branches.
  • release-notes/SKILL.md — output description and reference list updated for the new layout.
  • update-existing-branch/SKILL.md — rewritten for branch-set semantics. Added the invariant table (metadata files only on base branch; each component .md only on its own branch). Step 4 is now explicit that component branches are only refreshed when their markdown is being edited in the current run, to respect the per-run push cap that callers may impose.
  • Deleted .github/prompts/createprs-for-preview.prompt.md — the manual-fallback prompt is replaced by the skill. No other files in the repo reference it.

Why now

It is almost time to generate Preview 4 release notes. Splitting the PR set first lets each team review only their component's diff. The skill changes take effect immediately for the custom release-notes agent run locally — that path doesn't depend on the agentic workflow (which has not actually run since 2026-04-07 anyway, blocked on the auth failure tracked in #10342, owned separately).

Validation

  • markdownlint against the repo's .markdown-lint.yml on every changed markdown file → clean.
  • Got a rubber-duck design review and adopted the high-impact findings: partial-branch-set continuation, explicit seed order, out-of-VMR sourcing protocol, regenerate-only-on-head-move alignment, cap-aware metadata propagation, and treating closed/merged PRs at the component level (not just the milestone level).

Out of scope

  • The agentic workflow (release-notes.md / lock file) is intentionally untouched. The workflow currently restates the editorial playbook inline rather than invoking the release-notes skill; reconciling that overlap is a separate cleanup that should land after this skill update.
  • The agentic workflow auth failure ([aw] Write Release Notes failed #10342) — owned separately.

cc @richlander @jeffhandley

danroth27 and others added 2 commits April 28, 2026 15:13
Restructures the release-notes agentic workflow and skills so each milestone produces a set of PRs (one base PR plus one PR per component file) instead of a single monolithic PR. Component teams can review and edit their own file in isolation.

Skills:

- Add references/pr-layout.md describing the base + per-component branch scheme, seed order under the per-run cap, and the merge flow.

- component-mapping.md: add Branch Suffix and Default Assignee columns; add an out-of-VMR section for containers and dotnetmaui with a content-sourcing protocol; split expected output files between base branch (metadata) and per-component branches (one .md each).

- release-notes/SKILL.md: update output description and reference list.

- update-existing-branch/SKILL.md: rewrite for branch-set semantics; add the invariant table; update component branches only when their markdown is being edited this run, to respect the push cap.

Workflow:

- Bump safe-outputs.create-pull-request.max and push-to-pull-request-branch.max from 5 to 10 (gh-aw schema cap). Initial seed of a new milestone now spans up to two daily runs in seed order; steady-state reruns only push branches that changed.

- Rewrite the 'Create or update the PR set' step into three explicit cases: no branch set, partial branch set (continues seeding from where the cap stopped), and complete branch set.

- Make 'Regenerate changes.json' a delta-aware step (only when the head ref moved) to align with update-existing-branch.

- Distinguish closed/merged base PR vs closed/merged component PR vs missing component PR in the transitions section.

- Recompile release-notes.lock.yml; gh-aw setup pin moves from 0.67.0 to 0.71.1 as a side effect of the recompile.

Manual fallback:

- createprs-for-preview.prompt.md is now a thin pointer to the skill; aligns branch naming and assignee table with component-mapping.md; explicitly requires seeding base metadata before opening the base PR so the base branch has a non-empty diff.

Out of scope: the auth failure tracked in #10342 (workflow has not run since 2026-04-07) is owned separately. The skills changes also benefit running the custom release-notes agent locally, which does not depend on the agentic workflow.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Matches the convention used by sibling files in the release-notes skill (SKILL.md, quality-bar.md, feature-scoring.md, editorial-rules.md). No content changes.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
@danroth27 danroth27 closed this Apr 29, 2026
@danroth27 danroth27 reopened this Apr 29, 2026
Reverts the agentic-workflow changes (release-notes.md, release-notes.lock.yml, actions-lock.json) and removes the createprs-for-preview manual-fallback prompt entirely. The release-notes skill is now the single source of truth for branch/PR layout; the agentic workflow on main does not currently delegate to the skill, so workflow behavior is left untouched in this PR and can be addressed separately.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
@danroth27 danroth27 changed the title Per-component release notes PRs (#10382) Per-component release notes PRs in the release-notes skill (#10382) Apr 29, 2026
danroth27 and others added 11 commits April 29, 2026 12:47
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Re-derive the branch-set rewrite from the file on main, keeping its ~80-col paragraph wrapping. Only substantive content changes remain in the diff.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
- pr-layout.md: pare down to branch layout, invariants, merge flow, title convention. Drop the 14-row branch table, mermaid diagram, full PR body/label/assignee specs, draft-state ceremony, per-run cap with seed order, completeness check, and README-on-base section. Workflow-orchestration concerns belong in the workflow when it adopts the skill, not in the skill itself.
- component-mapping.md: add only the Branch Suffix column. Drop the Default Assignee column (CODEOWNERS handles routing), the Out-of-VMR section, the C#/VB row split, and the Output File rename.
- release-notes SKILL.md: trim Local testing section to a single paragraph.
- update-existing-branch SKILL.md: drop workflow-specific safe-outputs reference from step 4 and tighten its prose.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
…name

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
- Add .NET MAUI and Containers as out-of-band components: they ship
  with .NET but aren't in the VMR, so the agent stands up empty
  stub PRs for the teams to fill in or close.
- Rename "Expected output files per preview" to "Default component
  set per preview" and clarify owners may close empty PRs when there
  is nothing noteworthy that milestone.
- Add dotnetmaui.md and containers.md to the default file list.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Local dry-run drafted 11.0.0-preview.4.md on the base branch because
nothing in the skill said otherwise. The .NET release team generates
that file through separate artifacts-publishing automation, so call
it out as not-this-skill''s-job to avoid duplicate edits.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
The default-assignee list from createprs-for-preview.prompt.md (and
the original component-mapping.md before simplification) routes each
component PR to its component team owner via gh pr create --assignee.
Bring it back so the right team sees the PR in their review queue
instead of relying solely on repo-level CODEOWNERS.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Restore the original "Expected output files per preview" heading and
intro sentence; drop the "(base branch)" annotations. The added rows
for dotnetmaui.md and containers.md remain.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Comment thread .github/skills/release-notes/SKILL.md Outdated
Comment thread .github/skills/update-existing-branch/SKILL.md Outdated
Comment thread .github/skills/update-existing-branch/SKILL.md Outdated
Comment thread .github/skills/update-existing-branch/SKILL.md Outdated
Comment thread .github/skills/update-existing-branch/SKILL.md Outdated
- release-notes/SKILL.md: rephrase local-testing sentence per
  reviewer suggestion.
- update-existing-branch/SKILL.md:
  - drop the redundant "do not modify" paragraph (the table above
    already states the invariant).
  - drop the "Components that have no delta this run get no commit"
    sentence; the surrounding text already implies it.
  - drop the "(on the relevant component branch)" parenthetical.
  - restore the original 4-item Default-outcome list (revert the
    base-branch / per-PR annotations and the new step 5).

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Comment thread .github/skills/update-existing-branch/SKILL.md Outdated
Per reviewer suggestion: restore the original heading "Update markdown
in place" and lead with the "Use the current draft / prefer integration
over duplication" sentence, then add the per-component branch guidance
as a follow-up paragraph.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Comment thread .github/skills/update-existing-branch/SKILL.md Outdated
danroth27 and others added 3 commits April 29, 2026 16:29
dotnet/aspnetcore tags every PR with a release milestone (e.g.
`11.0-preview4`), so the contributor links in aspnetcore.md should
append `+milestone%3A<slug>` to scope each link to this milestone.
Other source repos don't apply milestones consistently, so the rule
is aspnetcore-specific.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
The deleted createprs-for-preview prompt called this out explicitly;
restoring the rule now that pr-layout.md is the canonical source.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
@danroth27 danroth27 marked this pull request as ready for review April 30, 2026 05:11
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Split release-notes agent output into one PR per component file

2 participants