Skip to content

Commit 49f640e

Browse files
authored
Added instructions for identifying changes specific to a subset of TFMs and OSes, where applicable. (dotnet#4243)
1 parent fdbc56e commit 49f640e

1 file changed

Lines changed: 47 additions & 0 deletions

File tree

.github/prompts/release-notes.prompt.md

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,52 @@ This prompt uses the following skill:
5858
- Identify the contributors for the "Contributors" section.
5959
- **Assign each PR to one or more packages** using the identification rules in the Package Registry table. A PR may be relevant to multiple packages. PRs not matching any non-core package belong to `Microsoft.Data.SqlClient`.
6060

61+
### 2.1. Determine Target Framework (TFM) Scope Per Change
62+
63+
For each PR included in release notes, determine whether it applies to all supported TFMs for the package or only a subset.
64+
65+
Use source-level evidence (not assumptions) to classify scope:
66+
67+
- **TFM-specific files** indicate scoped impact (for example, `.netfx.cs`, `.netcore.cs`).
68+
- **Conditional compilation** indicates scoped impact (for example, `#if NETFRAMEWORK`, `#if NET`).
69+
- **Project or build conditions** indicate scoped impact (for example, `Condition` expressions on `TargetFramework` or `TargetFrameworks`).
70+
- **Tests-only TFM changes** should not be called out as customer-facing unless the behavior change is also present in product code.
71+
72+
When writing notes:
73+
74+
- If the change affects **all supported TFMs** for that package, do not add a TFM qualifier.
75+
- If the change affects **only some TFMs**, include an explicit qualifier in the relevant bullet or section title.
76+
- Use concise qualifiers like:
77+
- `(net462 only)`
78+
- `(net8.0/net9.0 only)`
79+
80+
Do not infer TFM scope from labels alone; verify from changed files and code paths.
81+
82+
### 2.2. Determine Operating System (OS) Scope Per Change
83+
84+
For each PR included in release notes, determine whether it applies to all supported OS targets for the package or only a subset.
85+
86+
Use source-level evidence (not assumptions) to classify scope:
87+
88+
- **OS-specific files** indicate scoped impact (for example, `.windows.cs`, `.unix.cs`).
89+
- **OS preprocessor symbols** indicate scoped impact (for example, `#if _WINDOWS`, `#if _UNIX`).
90+
- **Project/build conditions** indicate scoped impact (for example, `TargetOs`, `NormalizedTargetOs`, or OS-conditional `ItemGroup`/`PropertyGroup` entries).
91+
- **SNI implementation or native dependency gates** can imply OS scope when behavior changes only apply to native Windows SNI vs managed cross-platform paths.
92+
- **Tests-only OS changes** should not be called out as customer-facing unless the behavior change is also present in product code.
93+
94+
When writing notes:
95+
96+
- If the change affects **all supported OS targets**, do not add an OS qualifier.
97+
- If the change affects **only some OS targets**, include an explicit qualifier in the relevant bullet or section title.
98+
- Use concise qualifiers like:
99+
- `(Windows only)`
100+
- `(Unix only)`
101+
- `(Linux only)`
102+
- `(macOS only)`
103+
- If both TFM and OS are scoped, combine them in one qualifier, for example: `(net8.0/net9.0 on Windows only)`.
104+
105+
Do not infer OS scope from labels alone; verify from changed files and code paths.
106+
61107
### 3. Enrich Feature Sections with Issue Context
62108

63109
For significant features or bug fixes that reference a GitHub issue:
@@ -84,6 +130,7 @@ For each package that has relevant PRs in the milestone:
84130
- Use the template from [release-notes/template/release-notes-template.md](release-notes/template/release-notes-template.md).
85131
- Fill in the template following the instructions in each section.
86132
- Only include sections (Added, Changed, Fixed, Removed) that have entries.
133+
- For each Added/Changed/Fixed/Removed item, include TFM and OS scope qualifiers when Step 2.1 or Step 2.2 determines the change is not universal across the package's supported targets.
87134
- Look up dependencies using the Dependency Sources from the lookup table above. Resolve concrete versions from [Directory.Packages.props](Directory.Packages.props).
88135
- List dependencies per target framework. Use the project file's `<TargetFrameworks>` to determine which frameworks to list.
89136
- Omit the Contributors section for packages with no public contributors.

0 commit comments

Comments
 (0)