Skip to content

fix(core): Align beforeBreadcrumb and tracesSampler error fallbacks with spec - #6675

Open
antonis wants to merge 3 commits into
mainfrom
fix/callback-error-isolation-fallbacks
Open

fix(core): Align beforeBreadcrumb and tracesSampler error fallbacks with spec#6675
antonis wants to merge 3 commits into
mainfrom
fix/callback-error-isolation-fallbacks

Conversation

@antonis

@antonis antonis commented Sep 4, 2026

Copy link
Copy Markdown
Contributor

📢 Type of change

  • Bugfix
  • New feature
  • Enhancement
  • Refactoring

📜 Description

Aligns two callback error fallbacks with the Callback Error Isolation spec:

  • beforeBreadcrumb throw → drop the breadcrumb. safeFactory used to return the unmodified input on error, so a throwing beforeBreadcrumb kept the original breadcrumb. It now returns null for the breadcrumb case (via a new optional onError handler), so the breadcrumb is dropped.
  • tracesSampler throw → fall back to tracesSampleRate. safeTracesSampler used to return a hardcoded 0 on error, silently forcing 0% sampling. It now falls back to the configured tracesSampleRate. When no rate is configured it returns undefined, which lets the core sampling pipeline discard the transaction — never substituting 0/1 as the spec forbids.

RN already met the error-log / no-rethrow / no-self-capture requirements; only these two recovery values deviated.

Out of scope (correctly untouched): beforeSend*, beforeSendSpan, beforeSendLog, and event processors are handled by the @sentry/core pipeline; profilesSampler/error_sampler don't exist in RN; and the extra RN-side isolation for initialScope/integrations is left as-is.

safeFactory/safeTracesSampler are internal utilities (not part of the public API), so there is no public API or ABI change.

💡 Motivation and Context

Fixes #6668. Silently dropping all transactions on a sampler bug, or keeping an unmodified breadcrumb when the user callback throws, are exactly the fallbacks the spec forbids.

💚 How did you test it?

Unit tests in test/utils/safe.test.ts and test/sdk.test.ts:

  • beforeBreadcrumb throw → result is null (dropped).
  • tracesSampler throw → falls back to the configured tracesSampleRate; returns undefined when no rate is configured.
  • Existing "does not throw" isolation tests retained.

yarn build:sdk, yarn lint:lerna, and the core Jest suite all pass.

📝 Checklist

  • I added tests to verify changes.
  • No new PII added or SDK only sends newly added PII if sendDefaultPII is enabled.
  • I updated the docs if needed.
  • I updated the wizard if needed.
  • All tests passing.
  • Public API changes reviewed by another Mobile SDK team member or implemented according to the develop docs spec.
  • No breaking changes.

🔮 Next steps

antonis and others added 2 commits September 4, 2026 11:09
…ith spec

Per the Callback Error Isolation spec:
- A throwing `beforeBreadcrumb` now drops the breadcrumb (returns null)
  instead of keeping the unmodified one.
- A throwing `tracesSampler` now falls back to the configured
  `tracesSampleRate` instead of substituting a hardcoded 0.

Fixes #6668

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
@github-actions

github-actions Bot commented Sep 4, 2026

Copy link
Copy Markdown
Contributor

Semver Impact of This PR

None (no version bump detected)

📋 Changelog Preview

This is how your changes will appear in the changelog.
Entries from this PR are highlighted with a left border (blockquote style).


  • fix(core): Align beforeBreadcrumb and tracesSampler error fallbacks with spec by antonis in #6675
  • ref(ios): Remove deprecated private SDK API usage by philprime in #6647
  • chore(deps): update Cocoa SDK to v9.27.0 by github-actions in #6670
  • chore(deps): update Sentry Android Gradle Plugin to v6.21.0 by github-actions in #6671
  • chore(deps): Bump fast-uri to ^3.1.6 to resolve security alerts by antonis in #6662
  • chore(deps): Bump qs to ^6.16.0 to resolve security alerts by antonis in #6663
  • chore(deps): Bump @xmldom/xmldom pins to patched versions to resolve security alerts by antonis in #6664
  • docs: Revamp root and nested AGENTS.md by antonis in #6666

🤖 This preview updates automatically when you update the PR.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
@antonis antonis added the ready-to-merge Triggers the full CI test suite label Sep 4, 2026
@antonis

antonis commented Sep 4, 2026

Copy link
Copy Markdown
Contributor Author

@cursor review

@antonis

antonis commented Sep 4, 2026

Copy link
Copy Markdown
Contributor Author

@sentry review

@cursor cursor Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

✅ Bugbot reviewed your changes and found no new issues!

Comment @cursor review or bugbot run to trigger another review on this PR

Reviewed by Cursor Bugbot for commit f52b6c8. Configure here.

@sentry

sentry Bot commented Sep 4, 2026

Copy link
Copy Markdown

📲 Install Builds

Android

🔗 App Name App ID Version Configuration
Sentry RN io.sentry.reactnative.sample 8.25.0 (105) Release

⚙️ sentry-react-native Build Distribution Settings

@github-actions

github-actions Bot commented Sep 4, 2026

Copy link
Copy Markdown
Contributor

Android (legacy) Performance metrics 🚀

  Plain With Sentry Diff
Startup time 415.45 ms 435.48 ms 20.03 ms
Size 50.56 MiB 56.46 MiB 5.90 MiB

Baseline results on branch: main

Startup times

Revision Plain With Sentry Diff
68672fc+dirty 425.02 ms 487.56 ms 62.54 ms
71abba0+dirty 496.54 ms 525.16 ms 28.63 ms
7ff4d0f+dirty 413.81 ms 450.64 ms 36.83 ms
9ad4522+dirty 420.73 ms 444.18 ms 23.45 ms
0a147b2+dirty 464.71 ms 538.81 ms 74.09 ms
d2eadf8+dirty 414.64 ms 454.56 ms 39.92 ms
57e0069+dirty 413.82 ms 453.47 ms 39.65 ms
26843eb+dirty 532.15 ms 624.13 ms 91.98 ms
9210ae6+dirty 475.41 ms 525.24 ms 49.84 ms
1e5d96d+dirty 519.43 ms 543.62 ms 24.19 ms

App size

Revision Plain With Sentry Diff
68672fc+dirty 48.30 MiB 53.61 MiB 5.31 MiB
71abba0+dirty 48.30 MiB 53.49 MiB 5.19 MiB
7ff4d0f+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
d2eadf8+dirty 48.30 MiB 53.48 MiB 5.18 MiB
57e0069+dirty 49.74 MiB 54.85 MiB 5.11 MiB
26843eb+dirty 49.74 MiB 55.26 MiB 5.52 MiB
9210ae6+dirty 48.30 MiB 53.54 MiB 5.23 MiB
1e5d96d+dirty 49.74 MiB 54.81 MiB 5.07 MiB

Previous results on branch: fix/callback-error-isolation-fallbacks

Startup times

Revision Plain With Sentry Diff
ae855c2+dirty 420.33 ms 448.70 ms 28.37 ms

App size

Revision Plain With Sentry Diff
ae855c2+dirty 50.56 MiB 56.46 MiB 5.90 MiB

@github-actions

github-actions Bot commented Sep 4, 2026

Copy link
Copy Markdown
Contributor

iOS (legacy) Performance metrics 🚀

  Plain With Sentry Diff
Startup time 3861.24 ms 1234.80 ms -2626.45 ms
Size 5.15 MiB 6.88 MiB 1.73 MiB

Baseline results on branch: main

Startup times

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

Previous results on branch: fix/callback-error-isolation-fallbacks

Startup times

Revision Plain With Sentry Diff
ae855c2+dirty 3864.24 ms 1226.41 ms -2637.83 ms

App size

Revision Plain With Sentry Diff
ae855c2+dirty 5.15 MiB 6.88 MiB 1.73 MiB

@github-actions

github-actions Bot commented Sep 4, 2026

Copy link
Copy Markdown
Contributor

Android (new) Performance metrics 🚀

  Plain With Sentry Diff
Startup time 480.34 ms 517.98 ms 37.64 ms
Size 50.56 MiB 56.46 MiB 5.90 MiB

Baseline results on branch: main

Startup times

Revision Plain With Sentry Diff
5a010b7+dirty 475.15 ms 519.02 ms 43.88 ms
f9c1ed4+dirty 520.57 ms 594.84 ms 74.27 ms
c2e182c+dirty 468.50 ms 545.44 ms 76.94 ms
2c735cc+dirty 435.20 ms 459.48 ms 24.28 ms
af33f3b+dirty 417.68 ms 448.04 ms 30.37 ms
7d8c8bd+dirty 406.06 ms 460.88 ms 54.81 ms
890d145+dirty 486.42 ms 514.85 ms 28.43 ms
ef27341+dirty 519.02 ms 553.42 ms 34.40 ms
bf168a4+dirty 430.60 ms 459.31 ms 28.71 ms
41d6254+dirty 406.20 ms 445.52 ms 39.32 ms

App size

Revision Plain With Sentry Diff
5a010b7+dirty 48.30 MiB 53.58 MiB 5.28 MiB
f9c1ed4+dirty 49.74 MiB 54.86 MiB 5.12 MiB
c2e182c+dirty 49.74 MiB 54.85 MiB 5.11 MiB
2c735cc+dirty 43.94 MiB 48.94 MiB 5.00 MiB
af33f3b+dirty 49.74 MiB 55.09 MiB 5.35 MiB
7d8c8bd+dirty 48.30 MiB 53.54 MiB 5.23 MiB
890d145+dirty 43.94 MiB 49.00 MiB 5.06 MiB
ef27341+dirty 48.30 MiB 53.54 MiB 5.24 MiB
bf168a4+dirty 49.74 MiB 55.09 MiB 5.35 MiB
41d6254+dirty 48.30 MiB 53.60 MiB 5.30 MiB

Previous results on branch: fix/callback-error-isolation-fallbacks

Startup times

Revision Plain With Sentry Diff
ae855c2+dirty 499.09 ms 532.80 ms 33.71 ms

App size

Revision Plain With Sentry Diff
ae855c2+dirty 50.56 MiB 56.46 MiB 5.90 MiB

@github-actions

github-actions Bot commented Sep 4, 2026

Copy link
Copy Markdown
Contributor

iOS (new) Performance metrics 🚀

  Plain With Sentry Diff
Startup time 3859.77 ms 1246.67 ms -2613.10 ms
Size 5.15 MiB 6.88 MiB 1.73 MiB

Baseline results on branch: main

Startup times

Revision Plain With Sentry Diff
71abba0+dirty 3852.70 ms 1224.53 ms -2628.16 ms
bc0d8cf+dirty 3834.64 ms 1223.91 ms -2610.73 ms
68ae91b+dirty 3836.36 ms 1222.04 ms -2614.32 ms
267d3ed+dirty 3860.14 ms 1223.39 ms -2636.76 ms
f170ec3+dirty 3844.74 ms 1222.67 ms -2622.07 ms
b9bebee+dirty 3858.02 ms 1231.92 ms -2626.11 ms
d038a14+dirty 3831.11 ms 1216.30 ms -2614.81 ms
853723c+dirty 3849.33 ms 1221.07 ms -2628.26 ms
e763471+dirty 3826.10 ms 1221.52 ms -2604.58 ms
3d31fcf+dirty 3857.46 ms 1237.17 ms -2620.29 ms

App size

Revision Plain With Sentry Diff
71abba0+dirty 5.15 MiB 6.67 MiB 1.52 MiB
bc0d8cf+dirty 5.15 MiB 6.67 MiB 1.51 MiB
68ae91b+dirty 4.98 MiB 6.46 MiB 1.48 MiB
267d3ed+dirty 5.15 MiB 6.69 MiB 1.54 MiB
f170ec3+dirty 5.15 MiB 6.69 MiB 1.53 MiB
b9bebee+dirty 5.15 MiB 6.68 MiB 1.53 MiB
d038a14+dirty 5.15 MiB 6.67 MiB 1.51 MiB
853723c+dirty 5.15 MiB 6.69 MiB 1.53 MiB
e763471+dirty 4.98 MiB 6.51 MiB 1.53 MiB
3d31fcf+dirty 4.98 MiB 6.56 MiB 1.58 MiB

Previous results on branch: fix/callback-error-isolation-fallbacks

Startup times

Revision Plain With Sentry Diff
ae855c2+dirty 3856.82 ms 1223.13 ms -2633.69 ms

App size

Revision Plain With Sentry Diff
ae855c2+dirty 5.15 MiB 6.88 MiB 1.73 MiB

@antonis
antonis marked this pull request as ready for review September 4, 2026 10:27
@antonis
antonis force-pushed the fix/callback-error-isolation-fallbacks branch from 137631b to f52b6c8 Compare September 4, 2026 10:49
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

ready-to-merge Triggers the full CI test suite

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Callback error isolation: align beforeBreadcrumb / tracesSampler fallbacks with the SDK spec

1 participant