|
| 1 | +--- |
| 2 | +name: release-notes |
| 3 | +description: Generate .NET release notes for a preview, RC, or GA release. Diffs VMR release branches to determine what shipped, traces changes to source repo PRs, and produces formatted markdown for all components. Use when asked to write, update, or draft release notes, a changelog, or a what's new summary for .NET. |
| 4 | +compatibility: Requires GitHub MCP server or gh CLI, SQL tool for structured storage, and access to the dotnet/core repository clone. |
| 5 | +disable-model-invocation: true |
| 6 | +argument-hint: "[version] [preview]" |
| 7 | +--- |
| 8 | + |
| 9 | +# .NET Release Notes Generator |
| 10 | + |
| 11 | +Generate release notes for a .NET preview, RC, or GA release. This skill produces release notes for **all components** in a single invocation, using the VMR (`dotnet/dotnet`) as the source of truth for what shipped. |
| 12 | + |
| 13 | +## Design principles |
| 14 | + |
| 15 | +- **VMR is source of truth** — the VMR release branch determines what shipped. If code is not on the release branch, it does not get documented. |
| 16 | +- **Reverts are inherently handled** — reverted code does not appear in the VMR branch diff, so it never enters the pipeline. |
| 17 | +- **Whole product** — one invocation produces release notes for all components (libraries, runtime, ASP.NET Core, SDK, etc.). |
| 18 | +- **Team contexts are editorial** — they define formatting, categorization, and content rules, not PR discovery. |
| 19 | + |
| 20 | +## Execution guidelines |
| 21 | + |
| 22 | +- **Do not write intermediate files to disk.** Use the **SQL tool** for structured storage and querying (see [sql-storage.md](references/sql-storage.md) for schema). |
| 23 | +- **Do not run linters, formatters, or validators** on the output. |
| 24 | +- **Maximize parallel tool calls.** Fetch multiple PR and issue details in a single response. |
| 25 | +- **Follow [GitHub tool guidance](references/github-tools.md)** for all GitHub API interactions. |
| 26 | + |
| 27 | +## Process |
| 28 | + |
| 29 | +### Step 1: Collect inputs |
| 30 | + |
| 31 | +Collect inputs **one at a time** — ask a single question, wait for the answer, then ask the next: |
| 32 | + |
| 33 | +1. **Release name** (e.g., ".NET 11 Preview 3"). Parse the major version, prerelease label, and preview number. |
| 34 | +2. **Previous release name** (e.g., ".NET 11 Preview 2"). This determines the base VMR branch for comparison. |
| 35 | +3. **Code Complete dates** — start date (previous release's Code Complete) and end date (this release's Code Complete) in ISO 8601. These are used for source repo PR searches as a secondary discovery method. |
| 36 | +4. **Output directory** — path for the release notes files. Default: `release-notes/<version>/preview/<preview>/` (e.g., `release-notes/11.0/preview/preview3/`). |
| 37 | + |
| 38 | +After collecting inputs, determine the VMR release branch names using the patterns in [component-mapping.md](references/component-mapping.md). |
| 39 | + |
| 40 | +### Step 2: VMR diff |
| 41 | + |
| 42 | +**[Diff the VMR release branches](references/vmr-diff.md)** — compare the previous and current VMR release branches to identify all code changes that shipped in this release. Group changes by component using the [component mapping](references/component-mapping.md). |
| 43 | + |
| 44 | +This step produces: |
| 45 | +- A list of components with changes (and an estimate of change magnitude) |
| 46 | +- Components with no meaningful changes (these get minimal stub release notes) |
| 47 | + |
| 48 | +### Step 3: Trace to source repos |
| 49 | + |
| 50 | +**[Trace VMR changes to source repo PRs](references/trace-to-source.md)** — for each component with VMR changes, find the source repo PRs that introduced those changes. Uses both VMR commit analysis and source repo PR searches, but only includes PRs confirmed present in the VMR. |
| 51 | + |
| 52 | +### Step 4: Enrich |
| 53 | + |
| 54 | +**[Fetch PR and issue details](references/enrich-prs.md)** — for each candidate PR, fetch the full body, linked issues, reaction counts, and Copilot summaries. Collect reviewer data for the suggestion step. |
| 55 | + |
| 56 | +### Step 5: Deduplicate |
| 57 | + |
| 58 | +**[Check against prior release notes](references/dedup-previous-releases.md)** — for each component, verify that candidate features are not already covered in an earlier preview's release notes. **Retain prior release notes in context** for theme continuation detection during authoring. |
| 59 | + |
| 60 | +### Step 6: Author |
| 61 | + |
| 62 | +Write release notes for each component that has meaningful changes: |
| 63 | + |
| 64 | +1. **[Categorize entries by impact](references/categorize-entries.md)** — group PRs into impact tiers. Reference prior release notes for theme continuations. |
| 65 | +2. **[Apply formatting rules](references/format-template.md)** — follow the standard .NET release notes document structure. Apply team context format overrides when specified. |
| 66 | +3. **[Apply editorial rules](references/editorial-rules.md)** — follow attribution, benchmark, naming, and ranking guidelines. Apply team context content rules when specified. |
| 67 | + |
| 68 | +For components with team context files (see table below), load the team context and apply its editorial overrides. Components without team context files use default rules. |
| 69 | + |
| 70 | +| Component | Team context | Notes | |
| 71 | +|-----------|-------------|-------| |
| 72 | +| Libraries | [team-libraries.md](references/team-libraries.md) | Area-label categorization, API diff review | |
| 73 | +| ASP.NET Core | [team-aspnetcore.md](references/team-aspnetcore.md) | Product-area grouping, milestone-based community queries | |
| 74 | +| SDK | [team-sdk.md](references/team-sdk.md) | VMR-native changes | |
| 75 | + |
| 76 | +For components with no meaningful changes, produce a minimal stub: |
| 77 | + |
| 78 | +```markdown |
| 79 | +# <Component> in .NET <VERSION> <PREVIEW> - Release Notes |
| 80 | + |
| 81 | +There are no new features or improvements in <Component> in this release. |
| 82 | +``` |
| 83 | + |
| 84 | +### Step 7: Validate code samples |
| 85 | + |
| 86 | +**[Validate code samples](references/validate-samples.md)** — extract every code sample from the authored release notes, scaffold file-based .NET console apps, and verify each compiles and runs. Fix any failing samples with user confirmation. |
| 87 | + |
| 88 | +### Step 8: Suggest reviewers and finalize |
| 89 | + |
| 90 | +**[Suggest reviewers](references/suggest-reviewers.md)** — aggregate PR authors, assignees, mergers, and coauthors into component-grouped reviewer suggestions. |
| 91 | + |
| 92 | +Present the complete draft to the user: |
| 93 | + |
| 94 | +1. List of components with release notes (and components with stubs) |
| 95 | +2. Feature list per component with categorization |
| 96 | +3. Suggested reviewers grouped by component |
| 97 | +4. Any unresolved items (unmatched VMR changes, ambiguous PRs) |
| 98 | + |
| 99 | +Get user confirmation before writing the output files. |
| 100 | + |
| 101 | +## Example usage |
| 102 | + |
| 103 | +**User prompt:** |
| 104 | + |
| 105 | +> Write the release notes for .NET 11 Preview 3. |
| 106 | +
|
| 107 | +**Expected output:** Multiple markdown files under `release-notes/11.0/preview/preview3/`: |
| 108 | + |
| 109 | +- `libraries.md` — .NET Libraries features |
| 110 | +- `runtime.md` — Runtime improvements |
| 111 | +- `aspnetcore.md` — ASP.NET Core features |
| 112 | +- `sdk.md` — SDK tooling updates |
| 113 | +- `msbuild.md` — MSBuild improvements |
| 114 | +- `csharp.md` — C# language features |
| 115 | +- (etc. for each component with changes) |
| 116 | +- Minimal stubs for components with no changes |
| 117 | + |
| 118 | +Each file follows the format: |
| 119 | + |
| 120 | +```markdown |
| 121 | +# <Component> in .NET 11 Preview 3 - Release Notes |
| 122 | + |
| 123 | +.NET 11 Preview 3 includes new <Component> features & enhancements: |
| 124 | + |
| 125 | +- [Feature Name](#anchor) |
| 126 | +... |
| 127 | + |
| 128 | +## Feature Name |
| 129 | + |
| 130 | +<description with why + how + code sample> ([owner/repo#NNNNN](https://github.com/owner/repo/pull/NNNNN)). |
| 131 | +``` |
0 commit comments