You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
docs(sdk): Rewrite API and Architecture spec for readability (#17014)
Rewrites the API and Architecture standards page to be more
human-friendly:
- Add intro paragraph framing the core philosophy
- Replace rigid Rule/Enforcement/Per-SDK override template with natural
prose
- Merge breaking changes and deprecation lifecycle into one cohesive
section
- Remove enforcement boilerplate and StatusBadge components
- Add contextual "why" before rules instead of dropping straight into
requirements
- Thin out RFC keyword density — keep MUST/REQUIRES for hard rules,
plain language elsewhere
- Promote spec status to stable
---------
Co-authored-by: Claude <noreply@anthropic.com>
Copy file name to clipboardExpand all lines: develop-docs/sdk/getting-started/playbooks/sdk-lifecycle/breaking-changes.mdx
+6-6Lines changed: 6 additions & 6 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -23,8 +23,8 @@ spec_changelog:
23
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
24
25
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
26
+
-[Breaking change process](/sdk/getting-started/standards/api-architecture#breaking-and-deprecation) — when a major release is required and what every breaking change must include
27
+
-[Deprecation lifecycle](/sdk/getting-started/standards/api-architecture#breaking-and-deprecation) — the deprecation stages and timelines
28
28
-[Deprecating an API](/sdk/getting-started/playbooks/sdk-lifecycle/deprecating-an-api) — step-by-step deprecation workflow
29
29
-[Release and Versioning](/sdk/getting-started/standards/release-versioning) — SemVer requirements and release tooling
30
30
@@ -68,7 +68,7 @@ For product-side changes, estimate how many users are affected before deciding o
68
68
69
69
#### 3. Decide on release scope
70
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.
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-and-deprecation). Use the classification and impact data from the previous steps to plan the release.
72
72
73
73
Consider the following when planning:
74
74
@@ -78,7 +78,7 @@ Consider the following when planning:
78
78
79
79
#### 4. Add deprecation warnings and a compatibility layer
80
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):
81
+
In a prior minor release, prepare users for the upcoming change per the [Deprecation lifecycle](/sdk/getting-started/standards/api-architecture#breaking-and-deprecation):
82
82
83
83
- Add runtime deprecation warnings that include: what is changing, what to use instead, and a link to migration docs
84
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
@@ -120,8 +120,8 @@ If you do not have access, reach out to @sdk-seniors, the Data team or request a
120
120
121
121
## Referenced Standards
122
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
123
+
-[Breaking change process](/sdk/getting-started/standards/api-architecture#breaking-and-deprecation) — when a major release is required, required artifacts, and enforcement
124
+
-[Deprecation lifecycle](/sdk/getting-started/standards/api-architecture#breaking-and-deprecation) — deprecation timeline and stages
125
125
-[Version format](/sdk/getting-started/standards/release-versioning#version-format) — SemVer requirements for major version bumps
Copy file name to clipboardExpand all lines: develop-docs/sdk/getting-started/playbooks/sdk-lifecycle/deprecating-an-api.mdx
+5-5Lines changed: 5 additions & 5 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -25,8 +25,8 @@ spec_changelog:
25
25
This playbook guides SDK maintainers through deprecating an API in a way that minimizes user disruption. It covers deprecation announcements, migration guide creation, maintenance periods, and eventual removal. By following these steps, users will have clear migration paths and sufficient time to adapt.
26
26
27
27
Related resources:
28
-
-[Deprecation lifecycle](/sdk/getting-started/standards/api-architecture#deprecation-lifecycle) — deprecation timeline and requirements
29
-
-[Breaking change process](/sdk/getting-started/standards/api-architecture#breaking-change-process) — process for eventual API removal
28
+
-[Deprecation lifecycle](/sdk/getting-started/standards/api-architecture#breaking-and-deprecation) — deprecation timeline and requirements
29
+
-[Breaking change process](/sdk/getting-started/standards/api-architecture#breaking-and-deprecation) — process for eventual API removal
30
30
-[Aligning Cross-SDK Changes](/sdk/getting-started/playbooks/coordination/aligning-cross-sdk-changes) — coordinating deprecations across multiple SDKs
31
31
32
32
---
@@ -60,7 +60,7 @@ This gives users time to migrate without breaking their applications immediately
60
60
When removing the deprecated API in a major version, you **MUST**:
61
61
62
62
- Remove the API and its tests
63
-
- Include `BREAKING CHANGE:` in the commit footer ([Breaking change process](/sdk/getting-started/standards/api-architecture#breaking-change-process))
63
+
- Include `BREAKING CHANGE:` in the commit footer ([Breaking change process](/sdk/getting-started/standards/api-architecture#breaking-and-deprecation))
64
64
- Update the migration guide to reference the major version that removes it
65
65
66
66
#### 5. Communicate
@@ -73,8 +73,8 @@ For high-impact deprecations, you **SHOULD** consider a blog post or announcemen
Copy file name to clipboardExpand all lines: develop-docs/sdk/getting-started/playbooks/sdk-lifecycle/dropping-platform-support.mdx
+5-5Lines changed: 5 additions & 5 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -24,8 +24,8 @@ This playbook guides SDK maintainers through dropping support for a platform or
24
24
25
25
Related resources:
26
26
-[Platform/language version support policy](/sdk/getting-started/standards/coordination-maintenance#platformlanguage-version-support-policy) — support policy and requirements
27
-
-[Breaking change process](/sdk/getting-started/standards/api-architecture#breaking-change-process) — process for removal in major versions
@@ -61,7 +61,7 @@ When removing support in a major version, you **MUST**:
61
61
62
62
- Drop the version from the CI test matrix
63
63
- Update documentation (README, docs site) to reflect the removed support
64
-
- Include `BREAKING CHANGE:` in the commit footer ([Breaking change process](/sdk/getting-started/standards/api-architecture#breaking-change-process))
64
+
- Include `BREAKING CHANGE:` in the commit footer ([Breaking change process](/sdk/getting-started/standards/api-architecture#breaking-and-deprecation))
65
65
66
66
#### 5. Provide migration guidance
67
67
@@ -73,8 +73,8 @@ This helps users understand the upgrade path and avoid breaking their applicatio
73
73
74
74
## Referenced Standards
75
75
76
-
-[Breaking change process](/sdk/getting-started/standards/api-architecture#breaking-change-process) — process for removal in major versions
-[Platform/language version support policy](/sdk/getting-started/standards/coordination-maintenance#platformlanguage-version-support-policy) — support policy baseline
These standards guide how SDKs are designed and evolved. The core philosophy: prefer server-side logic, protect public API stability, and give users smooth upgrade paths. SDKs often stay installed for years after release, so decisions made today have long-lasting consequences.
New processing or transformation logic **MUST**default to server-side (Relay).
25
+
When deciding where new logic should live, default to server-side (Relay). Processing data in Relay keeps behavior consistent across SDK versions and avoids duplicating logic in clients that may remain deployed indefinitely.
26
26
27
-
Logic **SHOULD** only be implemented in the SDK when it meets one of these criteria:
27
+
Put logic in the SDK only when it genuinely needs to run client-side:
28
28
29
-
-**MUST** run before data leaves the customer's application (e.g., user-controlled filtering like `before_send_*`)
30
-
-**REQUIRES** access to platform-specific APIs
31
-
-Is strictly latency-sensitive
32
-
-**MUST** function in offline scenarios
29
+
-It **MUST** run before data leaves the customer's application (e.g., user-controlled filtering like `before_send_*`)
30
+
-It requires access to platform-specific APIs
31
+
-It's strictly latency-sensitive
32
+
-It **MUST** function in offline scenarios
33
33
34
-
Transformations of data that has already been collected should be handled in Relay. This ensures consistency across SDK versions and avoids duplicating logic in clients that may remain in use indefinitely.
35
-
36
-
#### Enforcement
37
-
38
-
- AGENTS.md instruction
39
-
- Human review
40
-
41
-
#### Per-SDK override
42
-
43
-
<StatusBadgetype="no" /> The default is universal. Justifications are
44
-
SDK-specific.
34
+
If data has already been collected, transform it in Relay.
- Integration tests for degraded server scenarios (additional fields, missing optional fields, new enum values, rate limiting)
70
-
- Human review
44
+
SDKs typically outlive individual API versions. A user might stay on an SDK release for months or years, while server responses continue to evolve. SDKs **MUST** handle this gracefully:
71
45
72
-
#### Per-SDK override
46
+
- Ignore unknown fields, categories, or dimensions rather than erroring
47
+
- Tolerate missing optional fields
48
+
- Accept new enum values without crashing
49
+
- Handle rate limiting responses
73
50
74
-
<StatusBadgetype="yes" /> Specific tests vary. Principle is universal.
51
+
The general principle: additive server-side changes **MUST NOT** break existing SDK versions.
Any change to public API — adding, modifying, deprecating, or removing — **REQUIRES** approval from an [SDK Senior Engineer](https://github.com/orgs/getsentry/teams/sdk-seniors).
85
62
86
-
Any change to public API (add, change, deprecate, remove) **REQUIRES**@sdk-seniors approval. Public API includes anything a user can call, import, configure, subclass, or otherwise reference. If there is any doubt whether something is public, check for usage in public repositories using the SDK. When still unsure, treat it as public.
63
+
Public API includes anything a user can call, import, configure, subclass, or otherwise reference. When in doubt, check for usage in public repositories. If you're still unsure, treat it as public.
87
64
88
-
#### Enforcement
89
-
90
-
- CI API snapshot diffs (where feasible)
91
-
- Human review gate (@sdk-seniors approval)
92
-
93
-
#### Suggested skill(s)
94
-
95
-
-[`sentry-skills:code-review`](https://github.com/getsentry/skills#available-skills) — flags API changes for escalation.
96
-
97
-
#### Per-SDK override
98
-
99
-
<StatusBadgetype="yes" /> Detection mechanisms are language-specific. Approval
100
-
requirement is universal.
65
+
How each SDK detects API changes (CI snapshot diffs, etc.) varies by language, but the approval requirement applies everywhere.
Semantic conventions are shared across SDKs, ingest, and the product — treat them like public API. New attributes **MUST** be defined in [sentry-conventions](https://github.com/getsentry/sentry-conventions) before SDK implementation. The process:
111
76
112
-
New attributes **MUST** first be defined in [sentry-conventions](https://github.com/getsentry/sentry-conventions).
113
-
Process:
77
+
1. Open a PR to sentry-conventions
78
+
2. Get code owner approval
79
+
3. Wait at least 3 business days
80
+
4. Implement in the SDK
114
81
115
-
1. PR to sentry-conventions
116
-
2. code owner approval
117
-
3. 3 business day minimum wait
118
-
4. SDK implementation
82
+
This ensures attributes are reviewed and consistent across the ecosystem before any SDK ships them.
119
83
120
-
#### Enforcement
121
-
122
-
- CI validation where feasible
123
-
- Human review
124
-
125
-
#### Per-SDK override
126
-
127
-
<StatusBadgetype="no" />
84
+
Changes to existing attributes (renaming, removing, or changing semantics) are breaking changes and **MUST** follow the [breaking change process](#breaking-and-deprecation). The sentry-conventions repo has its own deprecation lifecycle — deprecated attributes go through a `backfill` period (at least 90 days) before moving to `normalize`, and replacements and aliases **MUST** be maintained for both old and new names during the transition.
Breaking changes **MUST** follow the [breaking changes playbook](/sdk/getting-started/playbooks/sdk-lifecycle/breaking-changes).
94
+
Breaking changes and deprecations are closely linked — every breaking change goes through a deprecation period first. Both follow a lifecycle designed to give users time and guidance to migrate.
140
95
141
-
Breaking changes **MAY** only ship in a major version. They **MUST NOT** ship in minor versions. Opt-in previews are allowed in minor versions.
96
+
### Deprecation lifecycle
142
97
143
-
A deprecation period is **REQUIRED** in a prior minor version, during which dual behavior is allowed to support migration.
98
+
Deprecations of public APIs, integrations, and supported platforms follow three stages:
144
99
145
-
Every breaking change **MUST** include:
146
-
147
-
- A migration guide with copy-pastable examples
148
-
- A changelog entry using the BREAKING CHANGE: notation
149
-
- Validation of the migration guide using an LLM to ensure it is clear and complete
150
-
151
-
#### Enforcement
152
-
153
-
-[Commit footer BREAKING CHANGE:](/engineering-practices/commit-messages/#footer) triggers CI checks
154
-
- Breaking changes in non-major branches are CI-blocked
155
-
- Human review
100
+
1.**Announce** in a minor release: add a runtime warning (where possible), update the changelog and docs, and publish a migration guide. Warnings **MUST** include the replacement, a code example, and a link to migration docs.
101
+
2.**Keep it working** for at least one subsequent minor release (e.g., deprecated in X.Y, still functional in X.(Y+1)).
102
+
3.**Remove** only in the next major release (X+1.0).
156
103
157
-
#### Suggested skill(s)
104
+
Deprecating an entire SDK is a bigger deal — it requires customer impact analysis, a public announcement, updated documentation, a defined support timeline, and advance EOL notice.
<StatusBadgetype="yes" /> Deprecation period timelines can vary. Process is
164
-
universal.
165
-
166
-
</SpecSection>
167
-
168
-
---
108
+
Breaking changes **MUST** follow the [breaking changes playbook](/sdk/getting-started/playbooks/sdk-lifecycle/breaking-changes). They can only ship in major versions; opt-in previews are allowed in minor versions.
All deprecations of public APIs, user-facing integrations, and supported platforms or frameworks follow three stages:
177
-
178
-
1. Announce in a minor release with a runtime warning (where possible), updated changelog and documentation, and a migration guide. Warnings **MUST** include the replacement, a code example, and a link to the migration docs.
179
-
2. Keep the deprecated surface fully functional for at least one subsequent minor release (e.g., deprecated in X.Y, still supported in X.(Y+1)).
180
-
3. Remove only in the next major release (X+1.0).
181
-
182
-
Deprecating an entire SDK **MUST NOT** be silent. It **REQUIRES** clear customer impact analysis, a public announcement, updated documentation, a defined support timeline, and advance EOL notice.
183
-
184
-
#### Enforcement
185
-
186
-
- CI checks deprecated APIs still have passing tests
187
-
- Human review
110
+
Every breaking change **MUST** include:
188
111
189
-
#### Per-SDK override
112
+
- A migration guide with copy-pastable examples
113
+
- A changelog entry using the `BREAKING CHANGE:` notation
114
+
- Validation of the migration guide using an LLM to ensure clarity and completeness
190
115
191
-
<StatusBadgetype="yes" /> Minimum period can be extended. Stages are universal.
116
+
Deprecation timelines can vary by SDK, but the stages and process apply everywhere.
0 commit comments