Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
20 commits
Select commit Hold shift + click to select a range
74a3e9f
Refactor release notes scaffolding prompts for .NET Preview
jamesmontemagno Feb 17, 2026
4567eb7
Scaffold .NET 11 Preview 2 release notes folder
jamesmontemagno Feb 17, 2026
ec57152
Update .NET 11 Preview 2 index files
jamesmontemagno Feb 17, 2026
5b26c2b
API diff between .NET 11.0 Preview 1 and .NET 11.0 Preview 2 (#10281)
jeffhandley Mar 4, 2026
7cfbd21
Add fsharp.md for .NET 11 Preview 2 (#10275)
jamesmontemagno Mar 4, 2026
cf86776
Add libraries.md for .NET 11 Preview 2 (#10267)
jamesmontemagno Mar 5, 2026
22d66d6
Add wpf.md for .NET 11 Preview 2 (#10278)
jamesmontemagno Mar 6, 2026
6bdb723
Update .github/prompts/createprs-for-preview.prompt.md
jongalloway Mar 6, 2026
9ccc172
Update .github/prompts/createprs-for-preview.prompt.md
jongalloway Mar 6, 2026
cde4ea0
Merge branch 'main' into dotnet11-preview2
jongalloway Mar 6, 2026
c3329ed
Add efcore.md for .NET 11 Preview 2 (#10274)
jamesmontemagno Mar 6, 2026
be3fb6b
Update F# Preview 2 release notes: add #elif, partitionWith, and addi…
T-Gro Mar 6, 2026
50db44b
Add aspnetcore.md for .NET 11 Preview 2 (#10270)
jamesmontemagno Mar 8, 2026
6650c33
Add sdk.md for .NET 11 Preview 2 (#10269)
jamesmontemagno Mar 9, 2026
d2df10c
Add dotnetmaui.md for .NET 11 Preview 2 (#10273)
jamesmontemagno Mar 9, 2026
83dbd0f
Add containers.md for .NET 11 Preview 2 (#10271)
jamesmontemagno Mar 9, 2026
87acc67
fix markdown
jamesmontemagno Mar 10, 2026
7c16a06
Merge branch 'main' into dotnet11-preview2
jamesmontemagno Mar 10, 2026
61a1507
Add runtime.md for .NET 11 Preview 2 (#10268)
jamesmontemagno Mar 10, 2026
5b5ce41
Merge branch 'main' into dotnet11-preview2
danroth27 Mar 10, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
90 changes: 51 additions & 39 deletions .github/prompts/createprs-for-preview.prompt.md
Original file line number Diff line number Diff line change
@@ -1,42 +1,44 @@
# Create PRs for .NET Preview or RC
# Create PRs for .NET Preview Component Files

Use this workflow to create one PR per release-notes file for a specific .NET Preview or RC milestone. You will supply three inputs when you invoke it:
Use this workflow to create one PR per component release-notes file for a specific .NET Preview milestone.

- DOTNET_VERSION (major only, e.g. 10, 11)
- MILESTONE_KIND (`preview` or `rc`)
- MILESTONE_NUMBER (preview: 1–7, rc: 1–2)
This flow assumes the preview folder was scaffolded with only the two core files (`${DOTNET_VERSION}.0.0-preview.${PREVIEW_NUMBER}.md` and `README.md`) and the component files do not exist yet.

PR numbers and historical references remain concrete; only version and milestone values change per cycle.
Supply two inputs when you invoke it:

## Sample Inputs (Example)
- DOTNET_VERSION (major only, e.g. 10, 11)
- PREVIEW_NUMBER (1–7)

Example below uses: DOTNET_VERSION=10, MILESTONE_KIND=rc, MILESTONE_NUMBER=2 (".NET 10 RC 2"). Replace these values when running for a different milestone.
PR numbers and historical references remain concrete; only version and preview values change per cycle.

## Runtime Inputs (provide these when invoking)
## Runtime inputs (provide these when invoking)

Required:

- DOTNET_VERSION (major) – e.g. 10
- MILESTONE_KIND – `preview` or `rc`
- MILESTONE_NUMBER – preview: 1–7, rc: 1–2
- PREVIEW_NUMBER – 1 to 7

Derived (logic performed mentally / by assistant at run time):
Derived:

- Milestone Label = `Preview ${PREVIEW_NUMBER}`
- Version Path = `${DOTNET_VERSION}.0`
- Milestone Label = if preview → `Preview ${MILESTONE_NUMBER}` else `RC ${MILESTONE_NUMBER}`
- Milestone Prefix = preview → `p${MILESTONE_NUMBER}` ; rc → `rc${MILESTONE_NUMBER}`
- Base Branch = `dotnet${DOTNET_VERSION}-${MilestonePrefix}` (example: `dotnet10-rc2`)
- Working Branch Pattern = `dotnet${DOTNET_VERSION}-${MilestonePrefix}-{name}`
- Release Notes Folder = `release-notes/${DOTNET_VERSION}.0/preview/${MilestonePrefix}` (historical path keeps `preview/rcX` for RC)
- Base Branch = `dotnet${DOTNET_VERSION}-p${PREVIEW_NUMBER}`
- Preview Folder = `release-notes/${DOTNET_VERSION}.0/preview/preview${PREVIEW_NUMBER}`
- Working Branch Pattern = `dotnet${DOTNET_VERSION}-p${PREVIEW_NUMBER}-{name-noext}`

Example (NOT to be edited into the file): DOTNET_VERSION=10, MILESTONE_KIND=rc, MILESTONE_NUMBER=2 ⇒ label `RC 2`, prefix `rc2`.
Example (not baked in): DOTNET_VERSION=10, PREVIEW_NUMBER=7 ⇒ label `Preview 7`, base branch `dotnet10-p7`, folder `release-notes/10.0/preview/preview7`.

## Process (assistant substitutes variables at execution time)
## Process (repeat for each file, one at a time)

1. Create a new branch from the base branch: `git switch -c dotnet${DOTNET_VERSION}-${MilestonePrefix}-{name} origin/dotnet${DOTNET_VERSION}-${MilestonePrefix}`
1. Modify the file content. If the file contains a neutral/no-new-features sentence such as `This ${Milestone Label} release does not contain new ...` (or the equivalent for a specific RC) replace that entire sentence block with the scaffold below. If no neutral sentence exists, insert the scaffold directly below the heading (only once; do not duplicate it).
1. Create a new branch from the milestone base branch:
- `git switch -c dotnet${DOTNET_VERSION}-p${PREVIEW_NUMBER}-{name-noext} origin/dotnet${DOTNET_VERSION}-p${PREVIEW_NUMBER}`
1. Create the component file at:
- `release-notes/${DOTNET_VERSION}.0/preview/preview${PREVIEW_NUMBER}/{name}`
1. Add the base content scaffold below, substituting `<Product/Area>` and `${Milestone Label}`:

```markdown
# <Product/Area> in .NET ${DOTNET_VERSION} ${Milestone Label} - Release Notes

Here's a summary of what's new in <Product/Area> in this ${Milestone Label} release:

- [Feature](#feature)
Expand All @@ -46,51 +48,61 @@ Here's a summary of what's new in <Product/Area> in this ${Milestone Label} rele
Feature summary
```

1. Run markdown lint: `npx markdownlint --config .github/linters/.markdown-lint.yml release-notes/${DOTNET_VERSION}.0/preview/${MilestonePrefix}/{name}`
1. Commit: `Update {name} for ${Milestone Label}`
1. Push the branch
1. Create a pull request with title `Update {name} for ${Milestone Label}` and body:
1. Run markdown lint for just that file:
- `npx markdownlint --config .github/linters/.markdown-lint.yml release-notes/${DOTNET_VERSION}.0/preview/preview${PREVIEW_NUMBER}/{name}`
1. Commit:
- `Add {name} for .NET ${DOTNET_VERSION} ${Milestone Label}`
1. Push the working branch.
1. Create a pull request with title:
- `Add {name} for .NET ${DOTNET_VERSION} ${Milestone Label}`

And body:

```text
Please update the release notes here as needed for ${Milestone Label}.

/cc @{assignees}
```

1. Assign the PR (first listed person if multiple): `gh pr edit <PR_NUMBER> --add-assignee <username>`
1. Switch back to `dotnet${DOTNET_VERSION}-${MilestonePrefix}` and continue with the next file.
1. Assign the PR to the first person listed for that file:
- `gh pr edit <PR_NUMBER> --add-assignee <username>`
1. Switch back to `dotnet${DOTNET_VERSION}-p${PREVIEW_NUMBER}` and repeat for the next file.

## Important behavior change from older workflow

- Do not look for or replace existing placeholder text in component files.
- Do not duplicate/copy previous preview component files into this folder.
- In this workflow, each component file is created fresh in its own branch and PR.

## Notes

- All milestone release notes live under `release-notes/${DOTNET_VERSION}.0/preview/${MilestonePrefix}/`.
- All component files for the milestone live under `release-notes/${DOTNET_VERSION}.0/preview/preview${PREVIEW_NUMBER}/`.
- Keep the same file-to-assignee mapping unless explicitly changed.
- Use GitHub CLI for assignee setting; it's more reliable than reviewer assignment for this workflow.
- Always replace placeholders rather than appending text to avoid duplicates.
- Ensure trailing newline, consistent heading style, and no stray whitespace.
- Optional: for JSON meta changes run `npx prettier --check "release-notes/${DOTNET_VERSION}.0/**/*.json"` (do not auto-fix when only reporting).

No need to edit this file between milestones. Provide DOTNET_VERSION, MILESTONE_KIND, MILESTONE_NUMBER each time; assistant derives the rest. Leave PR number references and assignment history intact unless ownership changes.
No need to edit this file between milestones. Provide DOTNET_VERSION and PREVIEW_NUMBER each time; assistant derives the rest.

## Assignment Table (updated using .NET 10 RC 1 assignees)

The table below reflects the assignee(s) actually used on the most recent component PRs for .NET 10 RC 1 (PRs #10049–#10060). Use these as the current default owners for upcoming milestones unless ownership changes again. Notable change: libraries and runtime primary owners effectively swapped compared to Preview 7 (libraries → @ericstj, runtime → @richlander). Additional previously listed secondary owners were trimmed where they were not present as assignees on the RC 1 PR.
Use these as default owners unless ownership changes.

| File | Assignee(s) | .NET 10 RC 1 PR |
|------|-------------|-----------------|
| ------ | ----------- | --------------- |
| aspnetcore.md | @danroth27 | #10049 |
| containers.md | @lbussell | #10050 |
| csharp.md | @BillWagner | #10051 |
| dotnetmaui.md | @davidortinau | #10052 |
| efcore.md | @roji | #10053 |
| efcore.md | @SamMonoRT @roji | #10053 |
| fsharp.md | @T-Gro | #10054 |
| libraries.md | @ericstj @artl93 | #10055 |
| libraries.md | @artl93 @jeffhandley @SamMonoRT @karelz | #10055 |
| runtime.md | @richlander | #10056 |
| sdk.md | @baronfel | #10057 |
| visualbasic.md | @BillWagner | #10058 |
| winforms.md | @KlausLoeffelmann @merriemcgaw | #10059 |
| wpf.md | @harshit7962 @adegeo | #10060 |

Here are the files to process one at a time:
Files to process one at a time:

- aspnetcore.md
- containers.md
Expand All @@ -109,12 +121,12 @@ Here are the files to process one at a time:

After all component PRs are opened for the milestone, create a consolidation PR:

1. Source: `dotnet${DOTNET_VERSION}-${MilestonePrefix}` → Target: `main`
2. Title: `Add release notes for .NET ${DOTNET_VERSION} ${Milestone Label} across various components`
1. Source: `dotnet${DOTNET_VERSION}-p${PREVIEW_NUMBER}` → Target: `main`
2. Title: `Add release notes for .NET ${DOTNET_VERSION} Preview ${PREVIEW_NUMBER} across various components`
3. Body sections:
- Intro sentence
- Bullet list of component PRs (e.g. `- ASP.NET Core: #<PR>`)
- CC release management (e.g. `@leecow @rbhanda @victorisr`)
4. Match the structure used previously (see Preview 7 consolidation PR #10006) for consistency.

When adapting for another milestone, update only the branch name, title milestone label, and intro sentence.
When adapting for another preview, update only the preview number, branch name, and title milestone label.
83 changes: 42 additions & 41 deletions .github/prompts/scaffoldpreview.prompt.md
Original file line number Diff line number Diff line change
@@ -1,63 +1,64 @@
# Scaffold Release Notes Folder (Preview or RC)
# Scaffold Preview Release Notes Folder

This prompt guides creating the next milestone release-notes folder for a .NET Preview or RC. Supply three inputs when invoking it (no file edits required between runs):
This prompt guides creating the next `.NET Preview` release-notes folder with only the core files needed to start milestone work.

Supply two inputs when invoking it (no file edits required between runs):

- DOTNET_VERSION (major, e.g. 10, 11)
- MILESTONE_KIND (`preview` or `rc`)
- MILESTONE_NUMBER (preview: 1–7, rc: 1–2)
- PREVIEW_NUMBER (1–7)

Only these values should change between cycles. Keep concrete links and historical references intact unless they genuinely change.

## Runtime Derivations
## Runtime derivations

Given inputs:

- Milestone Label = if MILESTONE_KIND=preview → `Preview ${MILESTONE_NUMBER}` else `RC ${MILESTONE_NUMBER}`
- Milestone Prefix = preview → `p${MILESTONE_NUMBER}` ; rc → `rc${MILESTONE_NUMBER}`
- Base Branch = `dotnet${DOTNET_VERSION}-${MilestonePrefix}`
- Target Folder = `release-notes/${DOTNET_VERSION}.0/preview/${MilestonePrefix}`
- Milestone Label = `Preview ${PREVIEW_NUMBER}`
- Folder Name = `preview${PREVIEW_NUMBER}`
- Base Branch = `dotnet${DOTNET_VERSION}-p${PREVIEW_NUMBER}`
- Target Folder = `release-notes/${DOTNET_VERSION}.0/preview/preview${PREVIEW_NUMBER}`
- Main Release File = `${DOTNET_VERSION}.0.0-preview.${PREVIEW_NUMBER}.md`

Example (not baked in): DOTNET_VERSION=10, MILESTONE_KIND=rc, MILESTONE_NUMBER=2 ⇒ Label `RC 2`, Prefix `rc2`.
Example (not baked in): DOTNET_VERSION=10, PREVIEW_NUMBER=7 ⇒ folder `preview7`, main file `10.0.0-preview.7.md`.

## Steps

1. Navigate to `release-notes/${DOTNET_VERSION}.0/preview/`.
1. Duplicate the previous milestone folder (prior prefix → new prefix, e.g. `rc1` → `${MilestonePrefix}` or `p6` → `${MilestonePrefix}`).
1. Remove (do NOT copy):
- `api-diff` directory (if present) – will be regenerated later.
- `release.json` – create a fresh one if required by process.
1. For each component markdown file, update the heading and milestone label only; preserve existing anchor structure.
1. If there are no new feature items yet, insert a neutral placeholder sentence (e.g. `This ${Milestone Label} release does not introduce new ${Product} features.`) instead of a generic "Something about the feature" line. Avoid duplicating placeholder lines.
1. Run markdown lint: `npx markdownlint --config .github/linters/.markdown-lint.yml release-notes/${DOTNET_VERSION}.0/preview/${MilestonePrefix}/*.md`.
1. Commit on the base milestone branch (`dotnet${DOTNET_VERSION}-${MilestonePrefix}`) with message: `Scaffold .NET ${DOTNET_VERSION} ${Milestone Label} release notes folder`.

## Sample File Template (aspnetcore.md – dynamic)
1. Create `preview${PREVIEW_NUMBER}` if it does not exist.
1. Scaffold only these files in that folder:
- `${DOTNET_VERSION}.0.0-preview.${PREVIEW_NUMBER}.md`
- `README.md`
1. Do not scaffold or copy `api-diff` or `release.json`.
1. In the new folder `README.md`, update heading text, milestone label, and the link to:
- `./${DOTNET_VERSION}.0.0-preview.${PREVIEW_NUMBER}.md`
1. Update the preview root README at `release-notes/${DOTNET_VERSION}.0/preview/README.md` by adding one row for the new preview release linking to `./preview${PREVIEW_NUMBER}/README.md`.
1. Update the version README at `release-notes/${DOTNET_VERSION}.0/README.md`:
- Add a new row for `Preview ${PREVIEW_NUMBER}` pointing at `preview/preview${PREVIEW_NUMBER}/README.md`.
1. Run markdown lint:
- `npx markdownlint --config .github/linters/.markdown-lint.yml release-notes/${DOTNET_VERSION}.0/preview/preview${PREVIEW_NUMBER}/*.md`
- `npx markdownlint --config .github/linters/.markdown-lint.yml release-notes/${DOTNET_VERSION}.0/preview/README.md`
- `npx markdownlint --config .github/linters/.markdown-lint.yml release-notes/${DOTNET_VERSION}.0/README.md`
1. Commit on branch `dotnet${DOTNET_VERSION}-p${PREVIEW_NUMBER}` with message: `Scaffold .NET ${DOTNET_VERSION} Preview ${PREVIEW_NUMBER} release notes folder`.

## Main file template (${DOTNET_VERSION}.0.0-preview.${PREVIEW_NUMBER}.md)

- Start from the previous preview's main release markdown file and update only version/milestone-specific values.
- Keep existing structure and anchors unless they are invalid for the new preview.

## Folder README template (dynamic)

```markdown
# ASP.NET Core in .NET ${DOTNET_VERSION} ${Milestone Label} - Release Notes

Here's a summary of what's new in ASP.NET Core in this release (add or remove sections as needed).
# .NET ${DOTNET_VERSION} Preview ${PREVIEW_NUMBER} - Release Notes

ASP.NET Core updates in .NET ${DOTNET_VERSION}:
.NET ${DOTNET_VERSION} Preview ${PREVIEW_NUMBER} release notes:

- [What's new in ASP.NET Core in .NET ${DOTNET_VERSION}](https://learn.microsoft.com/aspnet/core/release-notes/aspnetcore-${DOTNET_VERSION}.0) documentation.
- [Breaking changes](https://docs.microsoft.com/dotnet/core/compatibility/${DOTNET_VERSION}.0#aspnet-core)
- [Roadmap](https://github.com/dotnet/aspnetcore/issues/59443)

This ${Milestone Label} release does not contain new ASP.NET Core feature additions.
- [Main release notes](./${DOTNET_VERSION}.0.0-preview.${PREVIEW_NUMBER}.md)
```

## Conventions (stable across milestones)

- Top-level heading: `# <Product> in .NET <Major> <Milestone Label> - Release Notes`
- Use sentence case for section headings after the H1.
- Keep relative links; avoid hardcoding version unless the doc page is versioned (as above for 10.0 links).
- One blank line between blocks; file ends with a newline.

## After Scaffolding
## Conventions

- Proceed with per-file PR creation using the separate PR creation prompt.
- Do not add real feature text until component owners update their individual PRs.
- Run a Prettier check if any JSON metadata was added: `npx prettier --check "release-notes/${DOTNET_VERSION}.0/**/*.json"`.
- Keep links relative where possible.
- Preserve one blank line between markdown blocks.
- Ensure files end with a newline.

No file edits needed between milestones—provide inputs at execution. Leave roadmap issue numbers unless they genuinely change upstream.
No file edits needed between milestones—provide inputs at execution.
32 changes: 0 additions & 32 deletions .github/skills/libraries-release-notes/SKILL.md

This file was deleted.

This file was deleted.

Loading