Skip to content

Commit bd7bcd9

Browse files
jeffhandleyCopilot
andcommitted
Simplify SemVer assessment: remove prerelease material, streamline criteria
- Remove all prerelease/preview version references from skill docs - Consolidate MINOR criteria to 'Any new public APIs' instead of enumerating specific kinds (types, methods, properties, events, overloads, extensions) - Make PATCH the catch-all ('Everything Else') instead of qualifying what it includes - Remove prerelease suffix handling from version computation examples Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
1 parent 12d2cde commit bd7bcd9

4 files changed

Lines changed: 19 additions & 47 deletions

File tree

.github/skills/bump-version/SKILL.md

Lines changed: 10 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -16,9 +16,8 @@ Assess and bump the SDK version in `src/Directory.Build.props` to prepare for th
1616

1717
Read `src/Directory.Build.props` on the default branch and extract:
1818
- `<VersionPrefix>` — the `MAJOR.MINOR.PATCH` version
19-
- `<VersionSuffix>` — the prerelease suffix (e.g. `preview.1`), if present
2019

21-
Display the current version to the user: `{VersionPrefix}-{VersionSuffix}` or `{VersionPrefix}` if no suffix.
20+
Display the current version to the user.
2221

2322
Determine the previous release tag from `gh release list` (most recent **published** release). Draft releases must be ignored — they represent a pending release that has not yet shipped. Use `--exclude-drafts` or filter to only published releases when querying.
2423

@@ -33,30 +32,28 @@ When context about queued changes is available or can be gathered, assess the ve
3332
1. Get the list of PRs merged between the previous release tag and the target commit (typically HEAD).
3433
2. Classify the release level:
3534
- **MAJOR** — if any confirmed breaking changes (API or behavioral), excluding `[Experimental]` APIs
36-
- **MINOR** — if new public API surface, features, or obsoletion warnings are present
37-
- **PATCH**if only backward-compatible bug fixes, documentation, tests, or infrastructure changes
38-
3. Compute the recommended version from the previous release tag (see the assessment guide for increment rules and pre-release suffix handling).
35+
- **MINOR** — if new public APIs, features, or obsoletion warnings are present
36+
- **PATCH**otherwise
37+
3. Compute the recommended version from the previous release tag (see the assessment guide for increment rules).
3938
4. Compare against the current version in `Directory.Build.props` and flag any discrepancy.
4039
5. Present the assessment with a summary table and rationale, then get user confirmation.
4140

4241
#### Default Suggestion (Fallback)
4342

44-
When a quick bump is needed without full change analysis, suggest the next **minor** version with the same suffix pattern:
43+
When a quick bump is needed without full change analysis, suggest the next **minor** version:
4544

46-
- Current `0.9.0` with suffix `preview.1` → suggest `0.10.0-preview.1`
47-
- Current `1.0.0` with no suffix → suggest `1.1.0`
48-
- Current `1.2.3` with suffix `rc.1` → suggest `1.3.0-rc.1`
45+
- Current `1.0.0` → suggest `1.1.0`
46+
- Current `1.2.3` → suggest `1.3.0`
4947

5048
Present the suggestion and let the user confirm or provide an alternative.
5149

52-
In either case, parse the confirmed version into its `VersionPrefix` and `VersionSuffix` components.
50+
Parse the confirmed version into its `VersionPrefix` component.
5351

5452
### Step 3: Create Pull Request
5553

56-
1. Create a new branch named `bump-version-to-{version}` (e.g. `bump-version-to-0.10.0-preview.1`) from the default branch
54+
1. Create a new branch named `bump-version-to-{version}` (e.g. `bump-version-to-1.1.0`) from the default branch
5755
2. Update `src/Directory.Build.props`:
58-
- Set `<VersionPrefix>` to the new prefix
59-
- Set `<VersionSuffix>` to the new suffix, or remove the element if there is no suffix
56+
- Set `<VersionPrefix>` to the new version
6057
- Update `<PackageValidationBaselineVersion>` if the MAJOR version has changed
6158
3. Commit with message: `Bump version to {version}`
6259
4. Push the branch and create a pull request:

.github/skills/bump-version/references/semver-assessment.md

Lines changed: 4 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -37,38 +37,24 @@ Recommend a MAJOR version increment if **any** of the following are present:
3737

3838
Recommend a MINOR version increment if no MAJOR criteria are met but **any** of the following are present:
3939

40-
- New public types, methods, properties, or events
41-
- New overloads or extension methods
42-
- New configuration options or parameters with default values
40+
- Any new public APIs
4341
- New MCP capabilities or protocol features
4442
- Addition of `[Obsolete]` attributes producing build warnings (step 1 of obsoletion lifecycle)
45-
- Addition of `[Experimental]` attributes on new APIs
46-
- New interfaces implemented by existing types
47-
- Performance improvements that introduce new API surface
4843
- Changes to `[Experimental]` APIs (regardless of whether they would be breaking outside the experimental surface)
4944

50-
### PATCH — Backward-Compatible Bug Fixes Only
45+
### PATCH — Everything Else
5146

52-
Recommend a PATCH version increment if no MAJOR or MINOR criteria are met. PATCH-level changes include:
53-
54-
- Bug fixes that correct incorrect behavior
55-
- Spec compliance corrections
56-
- Security fixes
57-
- Performance improvements with no API surface changes
58-
- Documentation changes (XML doc comments shipped in packages)
59-
- Test-only changes (no impact on shipped packages)
60-
- Infrastructure-only changes (CI, build system, dependencies)
47+
Recommend a PATCH version increment if no MAJOR or MINOR criteria are met.
6148

6249
**Note**: Releases that contain _only_ documentation, test, or infrastructure changes may not warrant a release at all. Flag this to the user if no shipped-package changes are present.
6350

6451
## Computing the Recommended Version
6552

66-
1. Parse the previous release tag to extract `MAJOR.MINOR.PATCH` and any pre-release suffix.
53+
1. Parse the previous release tag to extract `MAJOR.MINOR.PATCH`.
6754
2. Apply the assessed level:
6855
- MAJOR: `(MAJOR+1).0.0`
6956
- MINOR: `MAJOR.(MINOR+1).0`
7057
- PATCH: `MAJOR.MINOR.(PATCH+1)`
71-
3. If the previous release had a pre-release suffix, carry the same suffix pattern forward (e.g., `-preview.1`).
7258

7359
**Examples** from previous release `v1.2.0`:
7460

@@ -78,14 +64,6 @@ Recommend a PATCH version increment if no MAJOR or MINOR criteria are met. PATCH
7864
| MINOR | `v1.3.0` |
7965
| MAJOR | `v2.0.0` |
8066

81-
**Examples** from previous release `v1.0.0-preview.1`:
82-
83-
| Level | Recommended |
84-
|-------|-------------|
85-
| PATCH | `v1.0.1-preview.1` |
86-
| MINOR | `v1.1.0-preview.1` |
87-
| MAJOR | `v2.0.0-preview.1` |
88-
8967
## Comparing Against the Candidate Version
9068

9169
After computing the recommended version:

.github/skills/prepare-release/SKILL.md

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ The user may provide:
2525
Once the target is established:
2626
1. Determine the previous release tag from `gh release list` (most recent **published** release — exclude drafts with `--exclude-drafts`).
2727
2. Get the full list of PRs merged between the previous release tag and the target commit.
28-
3. Read `src/Directory.Build.props` **at the target commit**. Extract `<VersionPrefix>` and `<VersionSuffix>` as the **candidate version**.
28+
3. Read `src/Directory.Build.props` **at the target commit**. Extract `<VersionPrefix>` as the **candidate version**.
2929

3030
### Step 2: Categorize and Attribute
3131

@@ -62,11 +62,10 @@ Using the categorized PRs from Step 2 and confirmed breaking changes from Step 3
6262

6363
1. **Classify the release level**:
6464
- **MAJOR** — if any confirmed breaking changes are present (API or behavioral), excluding changes to `[Experimental]` APIs
65-
- **MINOR** — if no breaking changes but new public API surface, features, or obsoletion warnings are introduced
66-
- **PATCH**if only backward-compatible bug fixes, documentation, tests, or infrastructure changes are included
65+
- **MINOR** — if no breaking changes but new public APIs, features, or obsoletion warnings are introduced
66+
- **PATCH**otherwise
6767
2. **Compute the recommended version** from the previous release tag:
6868
- Increment the appropriate component (MAJOR resets MINOR.PATCH to 0; MINOR resets PATCH to 0)
69-
- Carry forward any pre-release suffix pattern from the previous release (e.g., `-preview.1`)
7069
3. **Compare against the candidate version** from `src/Directory.Build.props`. Flag any discrepancy:
7170
- **Under-versioned**: The candidate is lower than the recommended level. This is a concern that should be resolved.
7271
- **Over-versioned**: The candidate is higher than strictly required. This is acceptable under SemVer but worth noting.
@@ -79,8 +78,7 @@ After the version is confirmed:
7978

8079
1. Create a local branch named `release-{version}` from the target commit (e.g., `release-1.1.0`).
8180
2. Update `src/Directory.Build.props`:
82-
- Set `<VersionPrefix>` to the confirmed version prefix
83-
- Set or remove `<VersionSuffix>` as appropriate
81+
- Set `<VersionPrefix>` to the confirmed version
8482
- Update `<PackageValidationBaselineVersion>` if the MAJOR version has changed (set to the previous release version)
8583
3. Build the solution to verify the version change compiles: `dotnet build`
8684

.github/skills/publish-release/SKILL.md

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ Verify the PR is merged. Extract:
2828

2929
### Step 2: Determine Version and Commit Range
3030

31-
1. Read `src/Directory.Build.props` at the merge commit to confirm `<VersionPrefix>` and `<VersionSuffix>`. The tag is `v{VersionPrefix}-{VersionSuffix}`, or `v{VersionPrefix}` if no suffix. Pre-release if `VersionSuffix` is present.
31+
1. Read `src/Directory.Build.props` at the merge commit to confirm `<VersionPrefix>`. The tag is `v{VersionPrefix}`.
3232
2. Determine the previous release tag from `gh release list` (most recent **published** release — exclude drafts with `--exclude-drafts`).
3333
3. Identify the full commit range: previous release tag → merge commit.
3434

@@ -109,7 +109,6 @@ Follow [references/formatting.md](references/formatting.md) when composing and u
109109
Display release metadata for user review:
110110
- **Title / Tag**: the confirmed version (e.g. `v1.1.0`)
111111
- **Target**: merge commit SHA, its message, and the prepare-release PR link
112-
- **Pre-release**: yes/no (based on `VersionSuffix`)
113112

114113
After confirmation:
115114
- Create with `gh release create --draft` (always `--draft`)

0 commit comments

Comments
 (0)