Skip to content

Commit 096a622

Browse files
jeffhandleyCopilot
andcommitted
Incorporate SDK versioning policy into breaking change classification
Replace the brief API Deprecation section with a comprehensive SDK Versioning Policy section covering pre-1.0 preview flexibility, Experimental API handling, the three-step obsoletion lifecycle, and spec-driven changes. Reference versioning policies in the skill's Step 1 guidance. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
1 parent 8948700 commit 096a622

File tree

2 files changed

+28
-7
lines changed

2 files changed

+28
-7
lines changed

.github/skills/breaking-changes/SKILL.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ Look for both categories of breaking changes:
3333
- **API (compile-time)** — changes to public type signatures, parameter types, return types, removed members, sealed types, new obsoletion attributes, etc.
3434
- **Behavioral (runtime)** — new/changed exceptions, altered return values, changed defaults, modified event ordering, serialization changes, etc.
3535

36-
See [references/classification.md](references/classification.md) for the full classification guide.
36+
See [references/classification.md](references/classification.md) for the full classification guide, including SDK-specific versioning policies (pre-1.0 preview flexibility, experimental APIs, obsoletion lifecycle, and spec-driven changes) that influence how breaks are assessed.
3737

3838
### Step 2: Assess Impact
3939

.github/skills/breaking-changes/references/classification.md

Lines changed: 27 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -63,15 +63,36 @@ If a change is primarily a bug fix or spec compliance correction, exclude it fro
6363
### Bucket 4: Clearly Non-Public
6464
Changes to internal surface or behavior (e.g., internal APIs, private reflection). **Generally not flagged** unless they could affect ecosystem tools.
6565

66-
## API Deprecation and Removal
66+
## SDK Versioning Policy
6767

68-
The MCP SDK follows a more flexible deprecation policy than fully stable frameworks. In exceptional circumstances, removal of public APIs is permissible provided:
68+
The classification rules above are derived from the dotnet/runtime breaking change guidelines, but the MCP SDK has its own versioning policy (see `docs/versioning.md`) that provides additional context for classification decisions.
6969

70-
- The removal is called out explicitly in planning and release notes
71-
- A relevant `[Obsolete]` attribute is added in an earlier release, giving consumers a migration window
72-
- The removal is documented in the Breaking Changes section with migration guidance
70+
### Pre-1.0 Preview Status
7371

74-
When auditing for breaking changes, API removal that follows this process should still be flagged as a breaking change, but the migration guidance should note the prior deprecation.
72+
Prior to a stable 1.0.0 release, the SDK is in preview and breaking changes can be introduced without prior notice. This does **not** change how breaks are classified — they should still be flagged, labeled, and documented — but it affects the **severity assessment**. Preview consumers expect breaks, so migration guidance matters more than avoidance.
73+
74+
### Experimental APIs
75+
76+
APIs annotated with `[Experimental]` (using `MCP`-prefixed diagnostic codes) can change at any time, including within PATCH or MINOR updates. Changes to experimental APIs should still be **noted** in the audit, but classified as **Bucket 3 (Unlikely Grey Area)** or lower unless the API has been widely adopted despite its experimental status.
77+
78+
### Obsoletion Lifecycle
79+
80+
The SDK follows a three-step obsoletion process:
81+
82+
1. **MINOR update**: API marked `[Obsolete]` producing _build warnings_ with migration guidance
83+
2. **MAJOR update**: API marked `[Obsolete]` producing _build errors_ (API throws at runtime)
84+
3. **MAJOR update**: API removed entirely (expected to be rare)
85+
86+
When auditing, classify each step appropriately:
87+
- Step 1 (adding `[Obsolete]` warning) → API breaking change (new build warning)
88+
- Step 2 (escalating to error) → API breaking change (previously working code now fails)
89+
- Step 3 (removal) → API breaking change; migration guidance should note prior deprecation
90+
91+
In exceptional circumstances — especially during the pre-1.0 preview period — the obsoletion lifecycle may be compressed (e.g., marking obsolete and removing in the same MINOR release). This should still be flagged as a breaking change but the migration guidance should explain the rationale.
92+
93+
### Spec-Driven Changes
94+
95+
Breaking changes necessitated by MCP specification evolution should be flagged and documented normally, but the migration guidance should reference the spec change. If a spec change forces an incompatible API change, preference is given to supporting the most recent spec version.
7596

7697
## Compatibility Switches
7798

0 commit comments

Comments
 (0)