[DO NOT MERGE] test(deps): Validate @sentry/* 11.0.0-beta.1 compatibility - #6682
[DO NOT MERGE] test(deps): Validate @sentry/* 11.0.0-beta.1 compatibility#6682antonis wants to merge 12 commits into
Conversation
Spike to surface JS v11 compatibility issues via CI. Bumps first-party @sentry/* dependencies (browser, core, react, bundler-plugins, eslint-plugin-sdk, typescript) to 11.0.0-alpha.2 across core and the sample/e2e apps, and adapts the SDK source to the v11 breaking changes: - spanToJSON() now returns the streamed shape; switched the internals that need the classic SpanJSON to spanToStaticSpanJSON(). - inboundFiltersIntegration -> eventFiltersIntegration (re-exported under the RN public name). - AI instrumentation (OpenAI/Anthropic/GenAI/LangChain/LangGraph) moved to server-only @sentry/server-utils; dropped those re-exports. - SEMANTIC_ATTRIBUTE_SENTRY_SOURCE -> SENTRY_SEGMENT_NAME_SOURCE alias. - ExtendedError / User index signatures tightened to unknown; narrowed the affected call sites. - enableLogs and sendDefaultPii are now RN-owned options (core removed them / RN Omits dataCollection); cast getOptions() accordingly. - Test harness migrated off the removed Scope.clear() via a clearAllScopes() helper in test/testutils.ts. Local: yarn build compiles clean. Known remaining test failures are tracked as follow-ups (old span shape in assertions, obsolete AI export test, measurements investigation). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
- Remove orphaned getCurrentScope/getGlobalScope/getIsolationScope imports left by the Scope.clear() -> clearAllScopes() test migration (10 files). - Regenerate the API report to reflect the removed AI instrumentation re-exports and the inboundFilters -> eventFilters rename. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Format the 16 source/test files touched by the v11 migration. The earlier Lint run never reached the oxfmt step because oxlint failed first on the orphaned scope imports; with those fixed, oxfmt --check surfaced the drift. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Bumps the JS SDK spike from 11.0.0-alpha.2 to 11.0.0-beta.0 across core, samples and e2e-tests. beta.0 splits the `@sentry/core` main entry into shared/browser/server subpaths, removing `startIdleSpan` and `XhrBreadcrumbHint` from the root export. Import both from the `@sentry/core/browser` subpath (the root-level shim stubs keep classic `moduleResolution: node` resolution working): - tracing/span.ts: `startIdleSpan` -> `@sentry/core/browser` - replay/xhrUtils.ts: `XhrBreadcrumbHint` type -> `@sentry/core/browser` Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Production fixes: - clearActiveSpanFromScope: v11 stores the active span in a WeakRef under scope.refs.span, not the removed scope._sentrySpan property. Deleting the old field was a no-op, leaving the previous navigation/interaction span active so it became the parent of the next root span. Clear via the official _INTERNAL_setSpanForScope helper instead. - sdk.tsx: pin traceLifecycle: 'static' so mobile keeps the classic transaction-envelope behavior instead of v11's new streaming default. Test updates for v11 behavior changes: - spanToJSON -> spanToStaticSpanJSON where the classic span shape is asserted. - startIdleSpan now imported from @sentry/core/browser (entry-point split). - Scope.clear() removed -> resetScope helper mirrors the old reset. - Non-canonical status messages normalize to 'internal_error'. - Child spans no longer carry a default sentry.source: 'custom'. - app.start snapshot: sentry.segment.name.source key and status 'ok'. - Drop obsolete enableMetrics suppression test and aiExports test. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
@sentry/core v11.0.0-beta.0 drops its down-levelled TS 3.8 types (no `build/types-ts3.8`, `typesVersions` removed), raising the floor to TypeScript 5.0.4. The old "Type Check Typescript 3.8" guard failed with parse errors it can't skip (skipLibCheck only skips type-checking, not parsing) when TS 3.8 hits v11's modern `.d.ts` syntax. Retarget the guard to TypeScript 5.0.4 (the new minimum): rename the ts3.8-test project to ts5.0-test and bump its TypeScript devDependency. Verified locally that @sentry/react-native -> @sentry/core@11.0.0-beta.0 type-checks cleanly under 5.0.4. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
…me.source JS v11 removed the `sentry.source` semantic attribute; the transaction name source now lives under `sentry.segment.name.source` on the segment span. The navigation transaction's serialized `contexts.trace.data` therefore carries the new key (matching the app-start unit snapshot already updated in this branch). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
…mpat # Conflicts: # dev-packages/e2e-tests/package.json # samples/expo/package.json # samples/react-native-macos/package.json # samples/react-native/package.json # yarn.lock
… v11 JS v11's `spanToJSON` returns the streamed span shape, which no longer carries the classic `.data` attribute bag. The TurboModule Playground screen read `spanToJSON(span).data`, so under v11 it collected no `turbo_module.*` attributes and rendered nothing — failing the `turboModuleSpanAttributes` e2e flow on both iOS and Android at the on-screen `scrollUntilVisible` step. Switch to `spanToStaticSpanJSON`, the classic-shape helper the SDK already uses internally. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Compatibility validation of the @sentry/* JavaScript SDK v11.0.0-beta.1 against the React Native SDK. Bumps @sentry/* from 11.0.0-beta.0 to 11.0.0-beta.1 across packages/core, the samples and dev-packages/e2e-tests. No new source adaptations were required on top of the beta.0 work: build, the full test suite (1927 SDK + 340 tools), circular-dep check, API report, lint and the TS 5.0 type-compat guard all pass unchanged. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Semver Impact of This PR⚪ None (no version bump detected) 📋 Changelog PreviewThis is how your changes will appear in the changelog.
🤖 This preview updates automatically when you update the PR. |
📲 Install BuildsAndroid
|
| @@ -24,10 +20,8 @@ import { captureFeedback } from '@sentry/core'; | |||
| import { captureMessage } from '@sentry/core'; | |||
| import { Client } from '@sentry/core'; | |||
| import type { ClientOptions } from '@sentry/core'; | |||
| import { CompiledGraph } from '@sentry/core'; | |||
| import { consoleLoggingIntegration } from '@sentry/browser'; | |||
| import { consoleSandbox } from '@sentry/core'; | |||
| import { createLangChainCallbackHandler } from '@sentry/core'; | |||
| import { createReduxEnhancer } from '@sentry/react'; | |||
| import { dedupeIntegration } from '@sentry/react'; | |||
| import type { Envelope } from '@sentry/core'; | |||
| @@ -47,33 +41,17 @@ import { getCurrentScope } from '@sentry/core'; | |||
| import { getGlobalScope } from '@sentry/core'; | |||
| import { getIsolationScope } from '@sentry/core'; | |||
| import { getRootSpan } from '@sentry/core'; | |||
| import { GoogleGenAIChat } from '@sentry/core'; | |||
| import { GoogleGenAIClient } from '@sentry/core'; | |||
| import { GoogleGenAIOptions } from '@sentry/core'; | |||
| import type { HostComponent } from 'react-native'; | |||
| import { httpClientIntegration } from '@sentry/react'; | |||
| import { httpContextIntegration } from '@sentry/react'; | |||
| import type { ImageStyle } from 'react-native'; | |||
| import { inboundFiltersIntegration } from '@sentry/react'; | |||
| import { instrumentAnthropicAiClient } from '@sentry/core'; | |||
| import { InstrumentedMethod } from '@sentry/core'; | |||
| import { instrumentGoogleGenAIClient } from '@sentry/core'; | |||
| import { instrumentLangGraph } from '@sentry/core'; | |||
| import { instrumentOpenAiClient } from '@sentry/core'; | |||
| import { instrumentStateGraph } from '@sentry/core'; | |||
| import { instrumentStateGraphCompile } from '@sentry/core'; | |||
| import { eventFiltersIntegration as inboundFiltersIntegration } from '@sentry/react'; | |||
| import { Integration } from '@sentry/core'; | |||
| import { LangChainIntegration } from '@sentry/core'; | |||
| import { LangChainOptions } from '@sentry/core'; | |||
| import { LangGraphIntegration } from '@sentry/core'; | |||
| import { LangGraphOptions } from '@sentry/core'; | |||
| import { lastEventId } from '@sentry/core'; | |||
| import { logger } from '@sentry/browser'; | |||
| import type { makeFetchTransport } from '@sentry/browser'; | |||
| import { Metric } from '@sentry/core'; | |||
| import { metrics } from '@sentry/browser'; | |||
| import { OpenAiClient } from '@sentry/core'; | |||
| import { OpenAiOptions } from '@sentry/core'; | |||
| import type { Options } from '@sentry/core'; | |||
There was a problem hiding this comment.
Removing previously exported AI helpers breaks React Native consumers
The v11 compatibility changes remove the OpenAI, Anthropic, Google GenAI, LangChain, and LangGraph helpers from the @sentry/react-native public entry point. Apps that imported these helpers from React Native will fail to compile after upgrading. Before a releasable v11 release, document whether React Native users should install and import an alternative package or confirm that these helpers are unsupported on React Native.
Evidence
packages/core/src/js/index.tsno longer re-exports the AI instrumentation helpers or their types.- The entry point explicitly states that the helpers moved to server-only
@sentry/server-utils, which is not a dependency of@sentry/react-native. CHANGELOG.mdpreviously documented these helpers as React Native exports in the 8.9.1 release under PR feat(ai): Re-export AI SDK manual instrumentation helpers #6028.- No replacement React Native export or migration guidance is included for existing importers, so their imports will fail at compile time.
Also found at 4 additional locations
packages/core/etc/sentry-react-native.api.md:149-161packages/core/etc/sentry-react-native.api.md:396-423packages/core/etc/sentry-react-native.api.md:490-495packages/core/src/js/index.ts:50-62
Identified by Warden · code-review · 84H-EYE
iOS (legacy) Performance metrics 🚀
|
| Revision | Plain | With Sentry | Diff |
|---|---|---|---|
| ecf47a2+dirty | 3835.20 ms | 1222.43 ms | -2612.77 ms |
| 3817909+dirty | 1183.90 ms | 1187.50 ms | 3.60 ms |
| 5ee78d6+dirty | 3847.52 ms | 1224.27 ms | -2623.25 ms |
| 890d145+dirty | 1223.59 ms | 1231.37 ms | 7.78 ms |
| e763471+dirty | 3841.16 ms | 1218.06 ms | -2623.09 ms |
| 3d31fcf+dirty | 3838.09 ms | 1223.46 ms | -2614.63 ms |
| 9210ae6+dirty | 3815.93 ms | 1214.14 ms | -2601.79 ms |
| 26843eb+dirty | 3861.60 ms | 1238.77 ms | -2622.82 ms |
| 7a89652+dirty | 3861.46 ms | 1229.61 ms | -2631.85 ms |
| 9ad4522+dirty | 3850.40 ms | 1222.40 ms | -2628.00 ms |
App size
| Revision | Plain | With Sentry | Diff |
|---|---|---|---|
| ecf47a2+dirty | 4.98 MiB | 6.46 MiB | 1.49 MiB |
| 3817909+dirty | 3.38 MiB | 4.73 MiB | 1.35 MiB |
| 5ee78d6+dirty | 5.15 MiB | 6.69 MiB | 1.53 MiB |
| 890d145+dirty | 3.38 MiB | 4.77 MiB | 1.38 MiB |
| e763471+dirty | 4.98 MiB | 6.51 MiB | 1.53 MiB |
| 3d31fcf+dirty | 4.98 MiB | 6.56 MiB | 1.58 MiB |
| 9210ae6+dirty | 5.15 MiB | 6.68 MiB | 1.53 MiB |
| 26843eb+dirty | 4.98 MiB | 6.53 MiB | 1.55 MiB |
| 7a89652+dirty | 5.15 MiB | 6.70 MiB | 1.55 MiB |
| 9ad4522+dirty | 4.98 MiB | 6.56 MiB | 1.58 MiB |
iOS (new) Performance metrics 🚀
|
| Revision | Plain | With Sentry | Diff |
|---|---|---|---|
| 3b6e9f9+dirty | 3822.77 ms | 1208.00 ms | -2614.77 ms |
| 4e0b819+dirty | 3828.96 ms | 1205.64 ms | -2623.32 ms |
| 1e5d96d+dirty | 3845.93 ms | 1222.51 ms | -2623.42 ms |
| 0a9e622+dirty | 3825.35 ms | 1219.04 ms | -2606.31 ms |
| 5ca03f9+dirty | 3873.76 ms | 1236.26 ms | -2637.51 ms |
| 40c9884+dirty | 3826.11 ms | 1217.04 ms | -2609.07 ms |
| 57e0069+dirty | 3842.23 ms | 1210.00 ms | -2632.23 ms |
| 7ac3378+dirty | 1202.35 ms | 1198.31 ms | -4.04 ms |
| 20fbd51+dirty | 3832.52 ms | 1206.13 ms | -2626.39 ms |
| 822d35b+dirty | 3841.52 ms | 1221.75 ms | -2619.77 ms |
App size
| Revision | Plain | With Sentry | Diff |
|---|---|---|---|
| 3b6e9f9+dirty | 5.15 MiB | 6.68 MiB | 1.53 MiB |
| 4e0b819+dirty | 4.98 MiB | 6.46 MiB | 1.49 MiB |
| 1e5d96d+dirty | 4.98 MiB | 6.46 MiB | 1.49 MiB |
| 0a9e622+dirty | 4.98 MiB | 6.51 MiB | 1.53 MiB |
| 5ca03f9+dirty | 4.98 MiB | 6.53 MiB | 1.55 MiB |
| 40c9884+dirty | 4.98 MiB | 6.51 MiB | 1.53 MiB |
| 57e0069+dirty | 4.98 MiB | 6.50 MiB | 1.52 MiB |
| 7ac3378+dirty | 3.38 MiB | 4.76 MiB | 1.38 MiB |
| 20fbd51+dirty | 4.98 MiB | 6.46 MiB | 1.49 MiB |
| 822d35b+dirty | 4.98 MiB | 6.50 MiB | 1.53 MiB |
Android (new) Performance metrics 🚀
|
| Revision | Plain | With Sentry | Diff |
|---|---|---|---|
| eb93136+dirty | 500.37 ms | 532.58 ms | 32.21 ms |
| 9210ae6+dirty | 444.14 ms | 459.80 ms | 15.66 ms |
| 94af3bd+dirty | 413.04 ms | 451.76 ms | 38.71 ms |
| 7d6fd3a+dirty | 435.06 ms | 458.78 ms | 23.72 ms |
| 15d4514+dirty | 413.63 ms | 449.62 ms | 35.99 ms |
| 9ad4522+dirty | 432.43 ms | 450.91 ms | 18.49 ms |
| 0a147b2+dirty | 442.80 ms | 522.24 ms | 79.44 ms |
| 7887847+dirty | 420.47 ms | 460.55 ms | 40.08 ms |
| a3265b6+dirty | 410.96 ms | 444.76 ms | 33.80 ms |
| 57e0069+dirty | 442.25 ms | 486.64 ms | 44.39 ms |
App size
| Revision | Plain | With Sentry | Diff |
|---|---|---|---|
| eb93136+dirty | 48.30 MiB | 53.58 MiB | 5.28 MiB |
| 9210ae6+dirty | 48.30 MiB | 53.54 MiB | 5.23 MiB |
| 94af3bd+dirty | 48.30 MiB | 53.57 MiB | 5.26 MiB |
| 7d6fd3a+dirty | 43.94 MiB | 49.00 MiB | 5.06 MiB |
| 15d4514+dirty | 48.30 MiB | 53.60 MiB | 5.30 MiB |
| 9ad4522+dirty | 49.74 MiB | 55.38 MiB | 5.63 MiB |
| 0a147b2+dirty | 49.74 MiB | 55.08 MiB | 5.34 MiB |
| 7887847+dirty | 49.74 MiB | 54.81 MiB | 5.07 MiB |
| a3265b6+dirty | 48.30 MiB | 53.58 MiB | 5.28 MiB |
| 57e0069+dirty | 49.74 MiB | 54.85 MiB | 5.11 MiB |
Android (legacy) Performance metrics 🚀
|
| Revision | Plain | With Sentry | Diff |
|---|---|---|---|
| 9ad4522+dirty | 420.73 ms | 444.18 ms | 23.45 ms |
| 5a21b51+dirty | 471.42 ms | 524.22 ms | 52.80 ms |
| c2e182c+dirty | 471.64 ms | 553.59 ms | 81.95 ms |
| 15d4514+dirty | 406.77 ms | 428.06 ms | 21.29 ms |
| 53a3f8e+dirty | 451.90 ms | 500.02 ms | 48.12 ms |
| f170ec3+dirty | 428.71 ms | 452.18 ms | 23.47 ms |
| 3e3142c+dirty | 441.26 ms | 496.06 ms | 54.80 ms |
| 5fe1c6c+dirty | 401.62 ms | 445.28 ms | 43.66 ms |
| 27d9693+dirty | 419.08 ms | 469.12 ms | 50.04 ms |
| 774257e+dirty | 407.09 ms | 447.46 ms | 40.37 ms |
App size
| Revision | Plain | With Sentry | Diff |
|---|---|---|---|
| 9ad4522+dirty | 49.74 MiB | 55.38 MiB | 5.63 MiB |
| 5a21b51+dirty | 48.30 MiB | 53.49 MiB | 5.19 MiB |
| c2e182c+dirty | 49.74 MiB | 54.85 MiB | 5.11 MiB |
| 15d4514+dirty | 48.30 MiB | 53.60 MiB | 5.30 MiB |
| 53a3f8e+dirty | 50.56 MiB | 56.46 MiB | 5.90 MiB |
| f170ec3+dirty | 48.30 MiB | 53.57 MiB | 5.26 MiB |
| 3e3142c+dirty | 49.74 MiB | 55.44 MiB | 5.70 MiB |
| 5fe1c6c+dirty | 43.75 MiB | 48.14 MiB | 4.39 MiB |
| 27d9693+dirty | 49.74 MiB | 55.09 MiB | 5.34 MiB |
| 774257e+dirty | 48.30 MiB | 53.58 MiB | 5.28 MiB |
📢 Type of change
📜 Description
Bumps
@sentry/*from11.0.0-beta.0to11.0.0-beta.1acrosspackages/core, the samples anddev-packages/e2e-tests, on top of the beta.0 compatibility work (#6665). The full diff againstmaintherefore includes both the beta.0 adaptations and the beta.1 bump.beta.1 required no new source adaptations. Every beta.0 adaptation carried over unchanged, and beta.1 introduced no new RN-facing breakage. Build, the full test suite (
1927SDK +340tools), lint, format, circular-dep and API report all pass, and the TS 5.0 type-compat guard passes against beta.1.✨ What changed since beta.0
@sentry/coreentry-point split (#23990)MIGRATION.md(@sentry/core/browser,@sentry/core/server).@sentry/server-utils(MIGRATION.md)instrument*AiClient/ LangChain / LangGraph helpers are now documented as moved to@sentry/server-utils.feat(core): throwing user callbacks are isolated instead of captured as events (#23770)feat(core): newsafeCallbackhelper (#23760)safeCallbackinsdk.tsx, unrelated).fix(browser)!: stop taggingDOMException.codeon events (#23992)DOMException.code.feat(server-utils)!,feat(node),feat(remix)!(Redis cache spans,ignoreStatusCodes, Remix Vite plugin move)Source changes (runtime) — carried over from beta.0
tracing/span.ts— real bug fix. v11 no longer stores the active span on ascope._sentrySpanproperty; it keeps aWeakRefunderscope.refs.span. RN'sclearActiveSpanFromScopewas deleting the old (now non-existent) field, so the previous navigation/interaction span was never detached and became the parent of the next root span — corrupting the trace hierarchy for every navigation and UI-interaction transaction. Now clears via the official_INTERNAL_setSpanForScopehelper. This is a latent bug that would ship broken under v11 regardless of the pre-release testing, and the internal field move is not documented in the migration guide.sdk.tsx—traceLifecycle: 'static'pin. v11 defaults span handling to'stream'. Mobile opts into'static'so transactions keep being sent as transaction envelopes (the classic v8 shape the native SDKs ingest), rather than streamed spans. This keeps end-user behavior unchanged.tracing/span.ts/replay/xhrUtils.ts— entry-point split. The@sentry/coremain entry was split into shared / browser / server subpaths.startIdleSpanand theXhrBreadcrumbHinttype moved to@sentry/core/browser. Core ships root-level shim stubs (browser.d.ts/browser.js) so RN's classicmoduleResolution: nodestill resolves the subpath; jest resolves it viaRNTestEnvironment.js. Now documented in the beta.1 migration guide.samples/react-nativeTurboModuleScreen.tsx— sample fix. The TurboModule Playground screen read the aggregatedturbo_module.*attributes viaspanToJSON(span).data, which v11 empties (the streamed shape has no.data), so the screen rendered nothing and theturboModuleSpanAttributese2e flow failed on both iOS and Android. Switched tospanToStaticSpanJSON— the classic-shape helper the SDK already uses internally.When the SDK bundles
@sentry/* v11, the following are user-visible breaking changes. Anything RN could absorb has been absorbed (see the last sub-list) so this set is the residue users still need to know about. beta.1 adds nothing new here.Confirmed breaking:
Scope.clear()removedScopeis re-exported from@sentry/react-native;getCurrentScope().clear()(or.clear()on any scope) no longer exists.withScope/withIsolationScope, or re-init the SDK.spanToJSON()shape changed@sentry/react-native. Now returns the streamed shape (name,attributes,status: 'ok' | 'error',end_timestamp,is_segment, …) instead of the classicdescription/op/data/timestamp/origin/measurements. Code reading classic fields (e.g. inbeforeSendTransaction) breaks.event.spansdirectly, or the classic-shape helper (RN re-exportingspanToStaticSpanJSONis a follow-up — see Next steps).span.setStatus({ code: SPAN_STATUS_ERROR, message: 'my text' })— only canonical status strings survive; any non-canonical message now surfaces asinternal_error, so custom status text is lost.InboundFilters→EventFiltersinboundFiltersIntegrationstill works (aliased), but the integration'snameis now"EventFilters". Looking up / removing the integration by the string"InboundFilters"breaks."EventFilters".instrumentOpenAiClient,instrumentAnthropicAiClient,instrumentGoogleGenAIClient,createLangChainCallbackHandler, the LangGraph helpers, etc. are no longer re-exported from@sentry/react-native(moved to the server-only@sentry/server-utils, which RN does not depend on). Now documented in the beta.1 migration guide.@sentry/typesno longer published@sentry/core. Direct imports from@sentry/typesbreak.@sentry/react-native(or@sentry/core).any→unknown)In progress — will be handled before the bump (tracked, not decided in this spike):
sendDefaultPii→dataCollection. Dedicated Linear project; theinfer_ipPII gap is scoped to logs + metrics envelopes only (events / sessions / spans are already safe). Intent is for users to keep working without a forced rename.@sentry/corev11 no longer ships TS 3.8 types — it droppedbuild/types-ts3.8and itstypesVersionsmapping — so TS 3.8 falls back to the modern.d.tsand fails to parse them (skipLibCheckcan't help: it skips type-checking, not parsing). This raises the floor to TS 5.0.4. Done in this branch: the CI type-compat guard was retargeted from TS 3.8 to 5.0.4 (ts3.8-test→ts5.0-test); verified@sentry/react-native→@sentry/core@11.0.0-beta.1type-checks cleanly under 5.0.4. Still open: RN currently still down-levels and ships its own TS 3.8 types; whether to drop that (and formally raise the documented minimum) is the remaining decision. Tracked as RN-754 / Raise minimum TypeScript to 5.0.4 and drop TS 3.8 support (v9) #6657.Explicitly NOT breaking for RN users (RN preserves v8 behavior):
traceLifecycle: 'static'; transactions still send as envelopes.enableLogs— RN re-declares the option.attachStacktracedefault — RN already defaults it totrue.enableMetricsremoval — was never a public RN option, so nothing to migrate.💡 Motivation and Context
Continuous validation of the JS v11 pre-releases ahead of the RN major (RN-586). Confirms whether each pre-release introduces new breakages, catalogues the user-facing breaking surface, and re-verifies the known gaps still need covering. beta.1 is a clean bump — no new RN-facing breakage, and the two documentation gaps RN raised against beta.0 (entry-point split, AI-helper relocation) are now closed in the migration guide. The full set of v11 findings still handled in this branch:
scope.refs.spanWeakRefclearActiveSpanFromScope(runtime bug).@sentry/coreentry-point split (browser subpath)startIdleSpan/XhrBreadcrumbHintimports moved to@sentry/core/browser. Now documented upstream (beta.1).@sentry/server-utilstraceLifecycle: 'static'.spanToJSONshape changedspanToStaticSpanJSONinternally; RN sample's TurboModule screen switched tospanToStaticSpanJSON; user-facing re-export flagged.internal_errorsentry.source: 'custom'Scope.clear()removedresetScopetest helper.InboundFilters→EventFiltersrenameeventFiltersIntegrationaliased asinboundFiltersIntegration.ts3.8-test→ts5.0-test).💚 How did you test it?
yarn build— clean.yarn lint, format,yarn circularDepCheck— pass.yarn api-report:check— passes (RN's public surface is unchanged by beta.1).@sentry/react-native→@sentry/core@11.0.0-beta.1type-checks with exit 0.yarn test— all green (1927SDK +340tools + 1). No test changes were needed on top of beta.0; the beta.0 adaptations (spanToJSON→spanToStaticSpanJSONwhere the classic shape is asserted;startIdleSpanfrom@sentry/core/browser;Scope.clear()→resetScopehelper; non-canonical status →internal_error; child-spansentry.sourcedropped;app.startsnapshot re-locked; obsoleteenableMetricsand AI-exports tests removed) all continue to pass under beta.1.📝 Checklist
sendDefaultPIIis enabled.🔮 Next steps
sendDefaultPii→dataCollectionmigration (logs/metrics PII), re-exportingspanToStaticSpanJSONso users keep a classic-shape helper, and the down-levelled-types shipping decision — whether RN stops shipping its own TS 3.8 types and formally raises the documented minimum to 5.0.4 (RN-754). The CI type-compat guard is already retargeted to 5.0.4 in this branch.@sentry/coreentry-point split and the AI-helper relocation to@sentry/server-utilsare both documented in the beta.1 migration guide. The only remaining undocumented internal is the active-span field move (_sentrySpan→scope.refs.spanWeakRef), which is intentionally not raised as an API-stability ask: RN already relies on core internals like_INTERNAL_flushLogsBuffer, and switching to_INTERNAL_setSpanForScopeis more stable than the raw private-field access it replaced.