What's New Include File — Content Rules
These rules encode corrections from past PR reviews. Follow them strictly when
creating or editing include files under aspnetcore/release-notes/aspnetcore-{MAJOR_VERSION}/includes/.
File creation rules
File location
All include files go in:
aspnetcore/release-notes/aspnetcore-{MAJOR_VERSION}/includes/
File naming convention
- Lowercase, hyphenated, descriptive names using whole words only.
- Each word and number must be separated by a hyphen. Do not combine words or abbreviate them, and do not combine numbers with words.
- Wrong:
infer-pk-display-name-preview2.md (pk is an abbreviation, and preview2 combines a word with a number)
- Correct:
infer-passkey-display-name-preview-2.md (whole words, number separated by hyphen)
- Append the preview number suffix to each filename:
-preview-{N} (where {N} is the preview number, e.g., -preview-2).
CRITICAL: Every new file MUST include the preview suffix. This was a mistake
in the initial automation — a file was created without the suffix and had to be
corrected.
- Examples:
native-otel-tracing-preview-2.md
openapi-3-2-support-preview-2.md
infer-passkey-display-name-preview-2.md
performance-improvements-preview-2.md
One file per feature
- Create one include file per feature or section.
- Exception — Performance: Combine all performance improvements into a
single
performance-improvements-preview-{N}.md file.
Exclusions — do NOT create include files for
Do not create include files for Blazor features:
- Blazor-related content is handled separately by the Blazor documentation team with separate PRs that merge into the What's New.
- Do NOT create any new include files for Blazor content.
- Do indicate in the PR description report which Blazor features are present in the release notes but not represented in the What's New article or includes.
Do not create include files for bug fixes: The What's New article only covers new features and improvements, not bug fixes.
Community contributors list:
- Do not create a standalone include file for the contributors list.
- DO preserve inline contributor thank-yous within feature sections (see below).
Content rules
Heading level
- Use
### (H3) headings — never # or ##. Include files are embedded inside
a parent article that already uses ## for section headings.
Remove preview-specific references
- Do NOT mention the specific preview number in content (e.g., "In Preview 2…").
The What's New article is cumulative for the entire .NET release.
Use <xref:> for API references — not inline code
- Wrong:
`AddOpenApi()`
- Correct:
<xref:Microsoft.Extensions.DependencyInjection.OpenApiServiceCollectionExtensions.AddOpenApi%2A>
- Wrong:
`BadHttpRequestException`
- Correct:
<xref:Microsoft.AspNetCore.Http.BadHttpRequestException>
- When referencing an API type or method, use
<xref:fully.qualified.name>
format. The xref ID must be verified from official dotnet-api-docs, not guessed.
- If the API is brand new in this preview and no xref exists yet, link to the
source code on GitHub instead and add an HTML comment
<!-- TODO: Update to <xref:> once API docs are published --> so it can be
updated later.
format. The xref ID must be verified from official dotnet-api-docs, not guessed.
- When referring to a dictionary/API concept (not a file), do NOT include file
extensions. For example, write
PasskeyAuthenticators dictionary, not
PasskeyAuthenticators.cs dictionary.
Links — use relative paths for Microsoft Learn
- Wrong:
[Breaking changes in .NET]([/dotnet/core/compatibility/breaking-changes](https://learn.microsoft.com/dotnet/core/compatibility/breaking-changes))
- Correct:
[Breaking changes in .NET](/dotnet/core/compatibility/breaking-changes)
- Never nest a relative path inside an absolute URL as the href target.
- For Microsoft Learn cross-references, use relative URLs starting with
/.
Do not include https://learn.microsoft.com or the /en-us/ locale.
Links — external sites
- For GitHub repository links, use full absolute URLs.
- For external non-Microsoft sites, use absolute URLs and strip locale segments.
Phrasing and style (lessons from reviewer feedback)
- Use "For more information, see link text.", not "see link text for details."
- Wrong: "ASP.NET Core now supports OpenAPI 3.2.0 — see the upgrade guide for details."
- Correct: "For more information, see the upgrade guide."
- Use present tense, not future tense.
- Wrong: "Subsequent updates will take advantage of…"
- Correct: "Subsequent updates take advantage of…"
- Use imperative voice for instructions to readers.
- Wrong: "Developers can extend the mappings by…"
- Correct: "Extend the mappings by…"
- Move long lists of attributes/parameters to the end of the sentence for readability.
- Wrong: "…populates semantic convention attributes like
a, b, c, and d on the request activity."
- Correct: "…populates semantic convention attributes on the request activity, such as
a, b, c, and d."
Preserve special designations
- If a section is marked as a Breaking Change, preserve that designation
in the include file heading:
### Feature name (Breaking Change)
- If a section thanks a community contributor inline, preserve the
acknowledgment:
Thank you [@username](https://github.com/username) for this contribution!
HTML comments
- Properly close HTML comments with
-->. Never leave an unclosed HTML comment.
Include files have NO front matter
- Include files (in the
includes/ directory) do NOT get YAML front matter
(no --- block with title, ms.date, etc.). They are raw Markdown fragments.
Validation checklist
Before completing, verify:
PR description requirements
- The very first line of the PR description must be
Fixes dotnet/AspNetCore.Docs#{ISSUE NUMBER} (where {ISSUE NUMBER} is the number of the issue this PR addresses), followed by a blank line before any other content.
- When a PR fixes multiple issues, list each issue on its own line at the top of the PR description, each using the
Fixes dotnet/AspNetCore.Docs#{ISSUE NUMBER} format, followed by a blank line before any other content.
- When a PR is related to other issues but doesn't fix them, use
Related: dotnet/AspNetCore.Docs#{ISSUE NUMBER} on a separate line after the Fixes line(s).
- Examples:
- Single issue:
Fixes dotnet/AspNetCore.Docs#10000
Summary of changes...
- Multiple issues fixed:
Fixes dotnet/AspNetCore.Docs#10000
Fixes dotnet/AspNetCore.Docs#10001
Summary of changes...
- Fixing one issue and related to another:
Fixes dotnet/AspNetCore.Docs#10000
Related: dotnet/AspNetCore.Docs#10001
Summary of changes...
Example: Correctly formatted include file
### OpenAPI 3.2.0 support (Breaking Change)
`Microsoft.AspNetCore.OpenApi` now supports OpenAPI 3.2.0 through an updated dependency on `Microsoft.OpenApi` 3.3.1. This update includes breaking changes from the underlying library. For more information, see the [Microsoft.OpenApi upgrade guide](https://github.com/microsoft/OpenAPI.NET/blob/main/docs/upgrade-guide-3.md).
To generate an OpenAPI 3.2.0 document, specify the version when calling <xref:Microsoft.Extensions.DependencyInjection.OpenApiServiceCollectionExtensions.AddOpenApi%2A>:
```csharp
builder.Services.AddOpenApi(options =>
{
options.OpenApiVersion = Microsoft.OpenApi.OpenApiSpecVersion.OpenApi3_2;
});
```
Subsequent updates take advantage of new capabilities in the 3.2.0 specification, such as item schema support for streaming events.
Thank you [@baywet](https://github.com/baywet) for this contribution!
What this example demonstrates
### heading (H3), not ##.
- Breaking Change designation preserved in heading.
- "For more information, see" phrasing (not em-dash style).
<xref:> used for API method reference.
- Present tense ("take advantage" not "will take advantage").
- Community contributor thank-you preserved.
- No preview number mentioned in the body text.
- No YAML front matter.
- Relative link would be used for any Microsoft Learn references.
Source: dotnet/AspNetCore.Docs — distributed by TomeVault.
1---2name: dotnet-aspnetcore-docs-aspnetcore-docs3description: What's New Include File — Content Rules4---56# What's New Include File — Content Rules78These rules encode corrections from past PR reviews. Follow them strictly when9creating or editing include files under `aspnetcore/release-notes/aspnetcore-{MAJOR_VERSION}/includes/`.1011## File creation rules1213### File location1415All include files go in:16`aspnetcore/release-notes/aspnetcore-{MAJOR_VERSION}/includes/`1718### File naming convention1920* Lowercase, hyphenated, descriptive names using whole words only.21* Each word and number must be separated by a hyphen. Do not combine words or abbreviate them, and do not combine numbers with words.22 - **Wrong**: `infer-pk-display-name-preview2.md` (`pk` is an abbreviation, and `preview2` combines a word with a number)23 - **Correct**: `infer-passkey-display-name-preview-2.md` (whole words, number separated by hyphen)24* Append the preview number suffix to each filename: `-preview-{N}` (where `{N}` is the preview number, e.g., `-preview-2`).25 **CRITICAL**: Every new file MUST include the preview suffix. This was a mistake26 in the initial automation — a file was created without the suffix and had to be27 corrected.28* Examples:29 - `native-otel-tracing-preview-2.md`30 - `openapi-3-2-support-preview-2.md`31 - `infer-passkey-display-name-preview-2.md`32 - `performance-improvements-preview-2.md`3334### One file per feature3536* Create one include file per feature or section.37* **Exception — Performance**: Combine all performance improvements into a38 single `performance-improvements-preview-{N}.md` file.3940### Exclusions — do NOT create include files for4142* **Do not create include files for Blazor features**:43 * Blazor-related content is handled separately by the Blazor documentation team with separate PRs that merge into the What's New.44 * Do **NOT** create any new include files for Blazor content.45 * Do indicate in the PR description report which Blazor features are present in the release notes but not represented in the What's New article or includes.4647* **Do not create include files for bug fixes**: The What's New article only covers new features and improvements, not bug fixes.48* **Community contributors list**:49 * Do not create a standalone include file for the contributors list.50 * DO preserve inline contributor thank-yous within feature sections (see below).5152---5354## Content rules5556### Heading level5758* Use `###` (H3) headings — never `#` or `##`. Include files are embedded inside59 a parent article that already uses `##` for section headings.6061### Remove preview-specific references6263* Do NOT mention the specific preview number in content (e.g., "In Preview 2…").64 The What's New article is cumulative for the entire .NET release.6566### Use `<xref:>` for API references — not inline code6768* **Wrong**: `` `AddOpenApi()` ``69* **Correct**: `<xref:Microsoft.Extensions.DependencyInjection.OpenApiServiceCollectionExtensions.AddOpenApi%2A>`70* **Wrong**: `` `BadHttpRequestException` ``71* **Correct**: `<xref:Microsoft.AspNetCore.Http.BadHttpRequestException>`72* When referencing an API type or method, use `<xref:fully.qualified.name>`73 format. The xref ID must be verified from official dotnet-api-docs, not guessed.74* If the API is brand new in this preview and no xref exists yet, link to the75 source code on GitHub instead and add an HTML comment76 `<!-- TODO: Update to <xref:> once API docs are published -->` so it can be77 updated later.78 format. The xref ID must be verified from official dotnet-api-docs, not guessed.79* When referring to a dictionary/API concept (not a file), do NOT include file80 extensions. For example, write `PasskeyAuthenticators` dictionary, not81 `PasskeyAuthenticators.cs` dictionary.8283### Links — use relative paths for Microsoft Learn8485* **Wrong**: `[Breaking changes in .NET]([/dotnet/core/compatibility/breaking-changes](https://learn.microsoft.com/dotnet/core/compatibility/breaking-changes))`86* **Correct**: `[Breaking changes in .NET](/dotnet/core/compatibility/breaking-changes)`87* Never nest a relative path inside an absolute URL as the href target.88* For Microsoft Learn cross-references, use relative URLs starting with `/`.89 Do not include `https://learn.microsoft.com` or the `/en-us/` locale.9091### Links — external sites9293* For GitHub repository links, use full absolute URLs.94* For external non-Microsoft sites, use absolute URLs and strip locale segments.9596### Phrasing and style (lessons from reviewer feedback)9798* Use **"For more information, see [link text](url)."**, not "see [link text](url) for details."99 - **Wrong**: "ASP.NET Core now supports OpenAPI 3.2.0 — see [the upgrade guide](url) for details."100 - **Correct**: "For more information, see [the upgrade guide](url)."101* Use **present tense**, not future tense.102 - **Wrong**: "Subsequent updates **will take** advantage of…"103 - **Correct**: "Subsequent updates **take** advantage of…"104* Use **imperative voice** for instructions to readers.105 - **Wrong**: "Developers can extend the mappings by…"106 - **Correct**: "Extend the mappings by…"107* Move long lists of attributes/parameters to the **end** of the sentence for readability.108 - **Wrong**: "…populates semantic convention attributes like `a`, `b`, `c`, and `d` on the request activity."109 - **Correct**: "…populates semantic convention attributes on the request activity, such as `a`, `b`, `c`, and `d`."110111### Preserve special designations112113* If a section is marked as a **Breaking Change**, preserve that designation114 in the include file heading: `### Feature name (Breaking Change)`115* If a section thanks a **community contributor** inline, preserve the116 acknowledgment: `Thank you [@username](https://github.com/username) for this contribution!`117118### HTML comments119120* Properly close HTML comments with `-->`. Never leave an unclosed HTML comment.121122### Include files have NO front matter123124* Include files (in the `includes/` directory) do NOT get YAML front matter125 (no `---` block with title, ms.date, etc.). They are raw Markdown fragments.126127---128129## Validation checklist130131Before completing, verify:132133- [ ] Every new include filename ends with `-preview-{N}`.134- [ ] Every word and number in filenames is separated by a hyphen (no abbreviations, no combined word-numbers).135- [ ] No Blazor content was included.136- [ ] No bug-fix-only content was included.137- [ ] All `<xref:>` IDs are verified (or explicitly flagged as needing verification).138- [ ] All links to Microsoft Learn use relative paths (no absolute URLs).139- [ ] All HTML comments are properly closed with `-->`.140- [ ] Include files have NO YAML front matter.141- [ ] Present tense is used throughout (not future tense).142- [ ] "For more information, see" pattern is used (not em-dash style).143- [ ] Community contributor acknowledgments are preserved.144- [ ] Breaking Change designations are preserved in headings.145- [ ] No preview-specific language, such as a preview number, appears in include file content.146147---148149## PR description requirements150151* The very first line of the PR description must be `Fixes dotnet/AspNetCore.Docs#{ISSUE NUMBER}` (where `{ISSUE NUMBER}` is the number of the issue this PR addresses), followed by a blank line before any other content.152* When a PR fixes multiple issues, list each issue on its own line at the top of the PR description, each using the `Fixes dotnet/AspNetCore.Docs#{ISSUE NUMBER}` format, followed by a blank line before any other content.153* When a PR is related to other issues but doesn't fix them, use `Related: dotnet/AspNetCore.Docs#{ISSUE NUMBER}` on a separate line after the `Fixes` line(s).154* Examples:155 * Single issue:156 ```157 Fixes dotnet/AspNetCore.Docs#10000158159 Summary of changes...160 ```161 * Multiple issues fixed:162 ```163 Fixes dotnet/AspNetCore.Docs#10000164 Fixes dotnet/AspNetCore.Docs#10001165166 Summary of changes...167 ```168 * Fixing one issue and related to another:169 ```170 Fixes dotnet/AspNetCore.Docs#10000171 Related: dotnet/AspNetCore.Docs#10001172173 Summary of changes...174 ```175176---177178## Example: Correctly formatted include file179180```markdown181### OpenAPI 3.2.0 support (Breaking Change)182183`Microsoft.AspNetCore.OpenApi` now supports OpenAPI 3.2.0 through an updated dependency on `Microsoft.OpenApi` 3.3.1. This update includes breaking changes from the underlying library. For more information, see the [Microsoft.OpenApi upgrade guide](https://github.com/microsoft/OpenAPI.NET/blob/main/docs/upgrade-guide-3.md).184185To generate an OpenAPI 3.2.0 document, specify the version when calling <xref:Microsoft.Extensions.DependencyInjection.OpenApiServiceCollectionExtensions.AddOpenApi%2A>:186187```csharp188builder.Services.AddOpenApi(options =>189{190 options.OpenApiVersion = Microsoft.OpenApi.OpenApiSpecVersion.OpenApi3_2;191});192```193194Subsequent updates take advantage of new capabilities in the 3.2.0 specification, such as item schema support for streaming events.195196Thank you [@baywet](https://github.com/baywet) for this contribution!197```198199### What this example demonstrates200201* `###` heading (H3), not `##`.202* Breaking Change designation preserved in heading.203* "For more information, see" phrasing (not em-dash style).204* `<xref:>` used for API method reference.205* Present tense ("take advantage" not "will take advantage").206* Community contributor thank-you preserved.207* No preview number mentioned in the body text.208* No YAML front matter.209* Relative link would be used for any Microsoft Learn references.210211---212> Source: [dotnet/AspNetCore.Docs](https://github.com/dotnet/AspNetCore.Docs) — distributed by [TomeVault](https://tomevault.io).213<!-- tomevault:4.0:skill_md:2026-06-22 -->