Skip to content

Commit 5f7c49b

Browse files
dingsdaxclaude
andauthored
docs(sdk): migrate breaking changes to playbook format (#16581)
Migrate processes/breaking_changes.mdx into a proper playbook at sdk-lifecycle/breaking-changes.mdx, following the spec format used by other sdk-lifecycle playbooks. - Add breaking-changes playbook with 7 steps: classify the change, gauge product impact, decide on release scope, add deprecation and compatibility layer, write a migration guide, update docs and changelog, consider upgrade tooling - Add abstract Resources section with links to internal data tools (Looker, Redash, Hex) instead of a Redash-specific walkthrough - Link to python-sdk/new-major for Python-specific major release guidance - Add playbook URL to api-architecture#breaking-change-process rule (which already referenced "the breaking changes playbook" with no link) - Add redirects for /sdk/processes/breaking_changes/ and /sdk/processes/breaking-changes/ and /sdk/processes/ - Delete empty processes/ section (breaking_changes.mdx was its only page) - Add Looker and Hex to .lycheeignore as private/auth-gated tools <!-- Use this checklist to make sure your PR is ready for merge. You may delete any sections you don't need. --> ## DESCRIBE YOUR PR *Tell us what you're changing and why. If your PR **resolves an issue**, please link it so it closes automatically.* ## IS YOUR CHANGE URGENT? Help us prioritize incoming PRs by letting us know when the change needs to go live. - [ ] Urgent deadline (GA date, etc.): <!-- ENTER DATE HERE --> - [ ] Other deadline: <!-- ENTER DATE HERE --> - [ ] None: Not urgent, can wait up to 1 week+ ## SLA - Teamwork makes the dream work, so please add a reviewer to your PRs. - Please give the docs team up to 1 week to review your PR unless you've added an urgent due date to it. Thanks in advance for your help! ## PRE-MERGE CHECKLIST *Make sure you've checked the following before merging your changes:* - [ ] Checked Vercel preview for correctness, including links - [ ] PR was reviewed and approved by any necessary SMEs (subject matter experts) - [ ] PR was reviewed and approved by a member of the [Sentry docs team](https://github.com/orgs/getsentry/teams/docs) ## LEGAL BOILERPLATE <!-- Sentry employees and contractors can delete or ignore this section. --> Look, I get it. The entity doing business as "Sentry" was incorporated in the State of Delaware in 2015 as Functional Software, Inc. and is gonna need some rights from me in order to utilize my contributions in this here PR. So here's the deal: I retain all rights, title and interest in and to my contributions, and by keeping this boilerplate intact I confirm that Sentry can use, modify, copy, and redistribute my contributions, under Sentry's choice of terms. ## EXTRA RESOURCES - [Sentry Docs contributor guide](https://docs.sentry.io/contributing/) Co-Authored-By: Claude <noreply@anthropic.com> Co-authored-by: Claude <noreply@anthropic.com>
1 parent 4a68c9f commit 5f7c49b

6 files changed

Lines changed: 144 additions & 122 deletions

File tree

.lycheeignore

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,8 @@ https?://pkg\.go\.dev.*
4545
https?://demo\.arcade\.software.*
4646

4747
# Private/internal resources
48+
https?://sentry\.looker\.com.*
49+
https?://app\.hex\.tech.*
4850
https?://.*\.notion\.so.*
4951
https?://www\.notion\.so.*
5052
https?://github\.com/getsentry/getsentry.*
Lines changed: 129 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,129 @@
1+
---
2+
title: Introducing Breaking Changes
3+
spec_id: sdk/playbooks/breaking-changes
4+
spec_version: 1.0.0
5+
spec_status: candidate
6+
spec_depends_on:
7+
- id: sdk/getting-started/standards/api-architecture
8+
version: ">=1.0.0"
9+
- id: sdk/getting-started/standards/release-versioning
10+
version: ">=1.0.0"
11+
spec_changelog:
12+
- version: 1.0.0
13+
date: 2026-02-25
14+
summary: Initial playbook — deciding when a change is breaking and shipping it with minimum user friction
15+
---
16+
17+
<SpecRfcAlert />
18+
19+
<SpecMeta />
20+
21+
## Overview
22+
23+
This playbook guides SDK maintainers through deciding whether a change is breaking and, if so, how to ship it with minimum friction for users. It covers classifying changes, estimating product impact, planning the release, and writing migration guidance. By following these steps, users will have clear migration paths and the SDK update experience will be as smooth as possible.
24+
25+
Related resources:
26+
- [Breaking change process](/sdk/getting-started/standards/api-architecture#breaking-change-process) — when a major release is required and what every breaking change must include
27+
- [Deprecation lifecycle](/sdk/getting-started/standards/api-architecture#deprecation-lifecycle) — the deprecation stages and timelines
28+
- [Deprecating an API](/sdk/getting-started/playbooks/sdk-lifecycle/deprecating-an-api) — step-by-step deprecation workflow
29+
- [Release and Versioning](/sdk/getting-started/standards/release-versioning) — SemVer requirements and release tooling
30+
31+
---
32+
33+
## Steps
34+
35+
#### 1. Classify the change
36+
37+
Determine whether the change is breaking. If the answer is unclear after reviewing the categories below, discuss with your team before proceeding.
38+
39+
There are four categories of changes that warrant scrutiny:
40+
41+
**API surface changes** — changes users need to adapt their code to:
42+
- Dropping or renaming part of the public API
43+
- Dropping or renaming a function argument
44+
- Changing an argument's type without accepting the previous type
45+
46+
When the public/private boundary is unclear, look for evidence of external usage. Check if the API appears in user-facing docs, search public repositories for usage (e.g., via GitHub code search), or recall if you have seen it used in issue reproduction examples.
47+
48+
**Product impact changes** — changes that alter how data appears in Sentry without requiring code changes from the user:
49+
- **Grouping** — changes to event data used by the server's grouping algorithm
50+
- **Dashboards** — renaming or removing span attributes users may be filtering on
51+
- **Alerts** — attribute changes that could cause alerts to start or stop firing
52+
- **Insights** — changes to metrics surfaced in the Insights module (e.g., Web or Mobile Vitals)
53+
- **Issue detection** — changes to span emission that influence server-side issue detection
54+
55+
**Behavior changes** — changes that don't require code changes but significantly affect user experience:
56+
- Changes that affect the user's event or span quota (e.g., auto-enabling an integration)
57+
- Changes that might result in events being dropped (e.g., modifying payload trimming limits)
58+
59+
**Version support drops** — dropping support for a language version, OS version, or major framework version.
60+
61+
If a change fixes a severe bug (e.g., an SDK-induced app crash or hang) and breaking behavior is a side effect of the fix, discuss with your team whether it warrants a major release.
62+
63+
#### 2. Gauge product impact
64+
65+
For product-side changes, estimate how many users are affected before deciding on the release strategy. If only a small number of users rely on the attribute or span being changed, a minor release with direct outreach **MAY** be appropriate. Use internal data tools — see [Resources](#resources).
66+
67+
**Note:** Self-hosted Sentry instances are not included in SaaS usage data, but SaaS stats provide a reliable baseline.
68+
69+
#### 3. Decide on release scope
70+
71+
Breaking changes **MUST** ship in a major version and **MUST NOT** ship in minor versions, per the [Breaking change process](/sdk/getting-started/standards/api-architecture#breaking-change-process). Use the classification and impact data from the previous steps to plan the release.
72+
73+
Consider the following when planning:
74+
75+
- **Bundle or separate**: Avoid accumulating large numbers of breaking changes for a single release. Consider whether each change is necessary and whether a compatibility layer is feasible for some. Smaller, more focused major releases are easier to upgrade to.
76+
- **Release frequency**: In language communities where major releases are routine, more frequent smaller majors reduce the per-upgrade burden. In communities where major releases cause hesitation, weigh the benefit of the change against the risk of a larger segment of users staying on older versions.
77+
- **Language community norms**: Some languages provide explicit guidelines on what constitutes a breaking change (e.g., [.NET library change rules](https://learn.microsoft.com/en-gb/dotnet/core/compatibility/library-change-rules)).
78+
79+
#### 4. Add deprecation warnings and a compatibility layer
80+
81+
In a prior minor release, prepare users for the upcoming change per the [Deprecation lifecycle](/sdk/getting-started/standards/api-architecture#deprecation-lifecycle):
82+
83+
- Add runtime deprecation warnings that include: what is changing, what to use instead, and a link to migration docs
84+
- Where feasible, support a transitional phase where both the old and new behavior work — an SDK option acting as a feature flag is a good pattern
85+
- Maintain deprecated APIs until the major release that removes them
86+
87+
For full step-by-step deprecation guidance, follow the [Deprecating an API](/sdk/getting-started/playbooks/sdk-lifecycle/deprecating-an-api) playbook.
88+
89+
#### 5. Write a migration guide
90+
91+
Every breaking change **MUST** include a migration guide with copy-pastable before/after examples.
92+
93+
- Cover all changed APIs, removed options, and renamed attributes
94+
- Show what code looked like before and what it should look like after the upgrade
95+
- Include platform-specific caveats where applicable
96+
97+
You **MUST** validate the guide by running an LLM through the migration on a real or test project using only your migration guide. If the LLM cannot complete the migration, rewrite the guide until it can.
98+
99+
#### 6. Update docs and changelog
100+
101+
You **MUST** add a `BREAKING CHANGE:` footer in the commit that introduces the removal — this triggers CI checks and changelog generation. You **MUST** also add callouts in relevant docs pages (integration guides, configuration reference) and publish the migration guide before or alongside the major release.
102+
103+
#### 7. Consider upgrade tooling
104+
105+
For high-impact or mechanical migrations, you **MAY** provide a codemod or upgrade script to reduce manual effort. If you do, validate it against real-world usage patterns before advertising it — incomplete tooling that silently misses cases is worse than no tooling.
106+
107+
---
108+
109+
## Resources
110+
111+
Use internal data tools to estimate how many users rely on an attribute or feature before deciding whether a change warrants a major release:
112+
113+
- [Looker](https://sentry.looker.com)
114+
- [Redash](https://redash.getsentry.net)
115+
- [Hex](https://app.hex.tech)
116+
117+
If you do not have access, reach out to @sdk-leads, the Data team or request access through the IT helpdesk.
118+
119+
---
120+
121+
## Referenced Standards
122+
123+
- [Breaking change process](/sdk/getting-started/standards/api-architecture#breaking-change-process) — when a major release is required, required artifacts, and enforcement
124+
- [Deprecation lifecycle](/sdk/getting-started/standards/api-architecture#deprecation-lifecycle) — deprecation timeline and stages
125+
- [Version format](/sdk/getting-started/standards/release-versioning#version-format) — SemVer requirements for major version bumps
126+
127+
---
128+
129+
<SpecChangelog />

develop-docs/sdk/getting-started/standards/api-architecture.mdx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -136,7 +136,7 @@ Process:
136136

137137
#### Rule
138138

139-
Breaking changes **MUST** follow the breaking changes playbook.
139+
Breaking changes **MUST** follow the [breaking changes playbook](/sdk/getting-started/playbooks/sdk-lifecycle/breaking-changes).
140140

141141
Breaking changes **MAY** only ship in a major version. They **MUST NOT** ship in minor versions. Opt-in previews are allowed in minor versions.
142142

develop-docs/sdk/processes/breaking_changes.mdx

Lines changed: 0 additions & 114 deletions
This file was deleted.

develop-docs/sdk/processes/index.mdx

Lines changed: 0 additions & 7 deletions
This file was deleted.

redirects.js

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -329,6 +329,18 @@ const developerDocsRedirects = [
329329
source: '/sdk/processes/triaging/',
330330
destination: '/sdk/getting-started/playbooks/',
331331
},
332+
{
333+
source: '/sdk/processes/',
334+
destination: '/sdk/getting-started/',
335+
},
336+
{
337+
source: '/sdk/processes/breaking_changes/',
338+
destination: '/sdk/getting-started/playbooks/sdk-lifecycle/breaking-changes/',
339+
},
340+
{
341+
source: '/sdk/processes/breaking-changes/',
342+
destination: '/sdk/getting-started/playbooks/sdk-lifecycle/breaking-changes/',
343+
},
332344
{
333345
source: '/sdk/miscellaneous/feature-branches/',
334346
destination: '/sdk/getting-started/playbooks/development/syncing-feature-branches/',

0 commit comments

Comments
 (0)