Skip to content

feat(tracing): Copy app start vitals onto standalone children - #6631

Merged
antonis merged 2 commits into
mainfrom
feat/standalone-app-start-child-vitals
Aug 28, 2026
Merged

feat(tracing): Copy app start vitals onto standalone children#6631
antonis merged 2 commits into
mainfrom
feat/standalone-app-start-child-vitals

Conversation

@buenaflor

@buenaflor buenaflor commented Aug 28, 2026

Copy link
Copy Markdown
Contributor

📢 Type of change

  • Bugfix
  • New feature
  • Enhancement
  • Refactoring

📜 Description

Copy app.vitals.start.type and app.vitals.start.screen from the standalone app.start root onto every child span, including SDK breakdown spans and user spans under app.start.extended.

app.vitals.start.value stays on the root only. Screen is omitted when no route has been registered. The non-standalone ui.load path is unchanged. Deadline / suppressed-measurement captures still omit these vitals on both the root and children.

💡 Motivation and Context

Mobile vitals grouping/drill-down queries app.vitals.start.type and app.vitals.start.screen on child spans. Those attributes were only on the standalone app.start root, so breakdown and user-added children did not group with the root.

Matches Android (getsentry/sentry-java#6005) and Flutter (getsentry/sentry-dart#3988).

Related to getsentry/sentry#122577

💚 How did you test it?

  • Unit tests in packages/core/test/tracing/integrations/appStart.test.ts covering SDK children, native spans, no-screen, extended/user descendants, deadline suppression, and non-standalone non-propagation
  • Updated the locked standalone app start snapshot
  • yarn workspace @sentry/react-native test:sdk (1904 passing)

📝 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

Mobile vitals grouping queries app.vitals.start.type and
app.vitals.start.screen on child spans. Those attributes were only
on the standalone app.start root, so breakdown and user spans under
app.start.extended did not group with the root.

Co-Authored-By: Cursor <cursoragent@cursor.com>
@github-actions

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).


  • feat(tracing): Copy app start vitals onto standalone children by buenaflor in #6631
  • chore(deps): update Cocoa SDK to v9.26.1 by github-actions in #6623
  • fix(ios): Force-load the Sentry static archive to keep ObjC category methods by antonis in #6615
  • feat(core): Forward feature flag evaluations to the native SDKs by antonis in #6613
  • chore(deps): update Android SDK to v8.54.0 by github-actions in #6624
  • chore(deps): update Sentry Android Gradle Plugin to v6.20.0 by github-actions in #6627

🤖 This preview updates automatically when you update the PR.

@github-actions

github-actions Bot commented Aug 28, 2026

Copy link
Copy Markdown
Contributor
Messages
📖 Do not forget to update Sentry-docs with your feature once the pull request gets approved.

Generated by 🚫 dangerJS against cd7ee01

@buenaflor
buenaflor marked this pull request as ready for review August 28, 2026 11:16
Copilot AI lite review requested due to automatic review settings August 28, 2026 11:16

Copilot AI 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.

Pull request overview

Adds propagation of standalone app-start vitals dimensions (app.vitals.start.type, app.vitals.start.screen) from the root app.start transaction onto all child spans so downstream mobile vitals grouping/drill-down works consistently (including breakdown spans, native spans, and user spans under app.start.extended). The root-only behavior for app.vitals.start.value, the non-standalone ui.load path, and the deadline/suppressed-measurement behavior are preserved.

Changes:

  • Copy app.vitals.start.type / app.vitals.start.screen from standalone app.start root trace data onto every event.spans[] entry.
  • Expand unit test coverage for standalone children propagation (incl. native spans, no-screen behavior, extended/user descendants, and suppression paths).
  • Update locked snapshot and document the feature in CHANGELOG.md.

Reviewed changes

Copilot reviewed 4 out of 4 changed files in this pull request and generated 1 comment.

File Description
packages/core/src/js/tracing/integrations/appStart.ts Adds copyStandaloneAppStartVitalsToChildren and wires it into the standalone attach flow.
packages/core/test/tracing/integrations/appStart.test.ts Adds assertions/helpers to validate vitals propagation to standalone child spans (incl. extended/user descendants).
packages/core/test/tracing/integrations/snapshots/appStart.test.ts.snap Updates the locked standalone snapshot to reflect vitals on child span data.
CHANGELOG.md Notes the new standalone child-span vitals propagation behavior.

💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.

Comment thread packages/core/test/tracing/integrations/appStart.test.ts
@buenaflor buenaflor added the ready-to-merge Triggers the full CI test suite label Aug 28, 2026
@sentry

sentry Bot commented Aug 28, 2026

Copy link
Copy Markdown

📲 Install Builds

Android

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

⚙️ sentry-react-native Build Distribution Settings

@github-actions

Copy link
Copy Markdown
Contributor

Android (legacy) Performance metrics 🚀

  Plain With Sentry Diff
Startup time 428.62 ms 456.81 ms 28.19 ms
Size 49.74 MiB 55.66 MiB 5.91 MiB

Baseline results on branch: main

Startup times

Revision Plain With Sentry Diff
8e18f68+dirty 426.20 ms 456.44 ms 30.24 ms
038a6d7+dirty 524.82 ms 531.92 ms 7.10 ms
a858ac3+dirty 426.50 ms 484.82 ms 58.32 ms
822d35b+dirty 429.31 ms 498.04 ms 68.73 ms
5ca03f9+dirty 423.30 ms 467.00 ms 43.70 ms
083e3ef+dirty 446.67 ms 491.68 ms 45.01 ms
4953e94+dirty 442.02 ms 456.52 ms 14.50 ms
244f6e8+dirty 424.36 ms 488.29 ms 63.92 ms
2e64504+dirty 450.52 ms 482.70 ms 32.18 ms
a9df5ce+dirty 418.40 ms 452.38 ms 33.98 ms

App size

Revision Plain With Sentry Diff
8e18f68+dirty 49.74 MiB 55.45 MiB 5.71 MiB
038a6d7+dirty 48.30 MiB 53.60 MiB 5.30 MiB
a858ac3+dirty 49.74 MiB 55.08 MiB 5.34 MiB
822d35b+dirty 49.74 MiB 54.84 MiB 5.10 MiB
5ca03f9+dirty 49.74 MiB 55.26 MiB 5.52 MiB
083e3ef+dirty 49.74 MiB 55.36 MiB 5.61 MiB
4953e94+dirty 43.75 MiB 48.08 MiB 4.33 MiB
244f6e8+dirty 49.74 MiB 55.38 MiB 5.63 MiB
2e64504+dirty 49.74 MiB 55.45 MiB 5.71 MiB
a9df5ce+dirty 49.74 MiB 55.36 MiB 5.62 MiB

@github-actions

Copy link
Copy Markdown
Contributor

iOS (legacy) Performance metrics 🚀

  Plain With Sentry Diff
Startup time 3854.74 ms 1217.45 ms -2637.30 ms
Size 5.08 MiB 6.80 MiB 1.72 MiB

Baseline results on branch: main

Startup times

Revision Plain With Sentry Diff
64630e5+dirty 3842.70 ms 1218.11 ms -2624.60 ms
b0d3373+dirty 3831.75 ms 1227.29 ms -2604.46 ms
b04af96+dirty 3818.92 ms 1219.76 ms -2599.16 ms
3d31fcf+dirty 3838.09 ms 1223.46 ms -2614.63 ms
a0a3177+dirty 3844.73 ms 1225.23 ms -2619.51 ms
af33f3b+dirty 3849.98 ms 1236.45 ms -2613.53 ms
09a902f+dirty 3835.67 ms 1217.11 ms -2618.57 ms
5a316ea+dirty 3820.11 ms 1211.28 ms -2608.83 ms
403b9f3+dirty 3832.18 ms 1213.32 ms -2618.87 ms
acd838e+dirty 3849.78 ms 1230.00 ms -2619.78 ms

App size

Revision Plain With Sentry Diff
64630e5+dirty 4.98 MiB 6.46 MiB 1.49 MiB
b0d3373+dirty 5.15 MiB 6.68 MiB 1.53 MiB
b04af96+dirty 4.98 MiB 6.54 MiB 1.56 MiB
3d31fcf+dirty 4.98 MiB 6.56 MiB 1.58 MiB
a0a3177+dirty 4.98 MiB 6.55 MiB 1.58 MiB
af33f3b+dirty 4.98 MiB 6.51 MiB 1.54 MiB
09a902f+dirty 4.98 MiB 6.46 MiB 1.49 MiB
5a316ea+dirty 4.98 MiB 6.51 MiB 1.53 MiB
403b9f3+dirty 5.08 MiB 6.72 MiB 1.64 MiB
acd838e+dirty 5.15 MiB 6.70 MiB 1.55 MiB

@github-actions

Copy link
Copy Markdown
Contributor

iOS (new) Performance metrics 🚀

  Plain With Sentry Diff
Startup time 3831.78 ms 1214.85 ms -2616.92 ms
Size 5.08 MiB 6.80 MiB 1.72 MiB

Baseline results on branch: main

Startup times

Revision Plain With Sentry Diff
3ce5254+dirty 1217.70 ms 1224.69 ms 6.99 ms
0b1b5e3+dirty 3820.72 ms 1207.94 ms -2612.78 ms
44abcc2+dirty 3841.42 ms 1214.77 ms -2626.65 ms
1d3572b+dirty 3830.71 ms 1222.23 ms -2608.49 ms
6177334+dirty 3851.52 ms 1226.23 ms -2625.29 ms
5ee78d6+dirty 3815.71 ms 1217.04 ms -2598.67 ms
083e3ef+dirty 3871.96 ms 1234.95 ms -2637.01 ms
ce7b368+dirty 3851.41 ms 1222.37 ms -2629.04 ms
7887847+dirty 3844.89 ms 1221.67 ms -2623.22 ms
1122a96+dirty 3839.17 ms 1219.23 ms -2619.93 ms

App size

Revision Plain With Sentry Diff
3ce5254+dirty 3.38 MiB 4.76 MiB 1.38 MiB
0b1b5e3+dirty 5.15 MiB 6.70 MiB 1.54 MiB
44abcc2+dirty 4.98 MiB 6.55 MiB 1.57 MiB
1d3572b+dirty 4.98 MiB 6.56 MiB 1.58 MiB
6177334+dirty 5.15 MiB 6.68 MiB 1.53 MiB
5ee78d6+dirty 5.15 MiB 6.69 MiB 1.53 MiB
083e3ef+dirty 4.98 MiB 6.55 MiB 1.57 MiB
ce7b368+dirty 4.98 MiB 6.51 MiB 1.53 MiB
7887847+dirty 4.98 MiB 6.46 MiB 1.48 MiB
1122a96+dirty 5.15 MiB 6.68 MiB 1.53 MiB

@github-actions

Copy link
Copy Markdown
Contributor

Android (new) Performance metrics 🚀

  Plain With Sentry Diff
Startup time 437.18 ms 462.73 ms 25.55 ms
Size 49.74 MiB 55.66 MiB 5.91 MiB

Baseline results on branch: main

Startup times

Revision Plain With Sentry Diff
8e18f68+dirty 443.14 ms 446.98 ms 3.84 ms
ca9d079+dirty 460.67 ms 512.54 ms 51.87 ms
c151573+dirty 485.39 ms 495.18 ms 9.79 ms
5a21b51+dirty 505.16 ms 539.20 ms 34.04 ms
ecf47a2+dirty 457.21 ms 498.10 ms 40.89 ms
1d3572b+dirty 444.48 ms 478.42 ms 33.94 ms
3ce5254+dirty 373.90 ms 427.84 ms 53.94 ms
9b5615c+dirty 428.67 ms 490.15 ms 61.48 ms
2e64504+dirty 488.33 ms 541.31 ms 52.98 ms
ad66da3+dirty 411.49 ms 449.38 ms 37.89 ms

App size

Revision Plain With Sentry Diff
8e18f68+dirty 49.74 MiB 55.45 MiB 5.71 MiB
ca9d079+dirty 48.30 MiB 53.58 MiB 5.28 MiB
c151573+dirty 48.30 MiB 53.54 MiB 5.24 MiB
5a21b51+dirty 48.30 MiB 53.49 MiB 5.19 MiB
ecf47a2+dirty 49.74 MiB 54.82 MiB 5.07 MiB
1d3572b+dirty 49.74 MiB 55.38 MiB 5.63 MiB
3ce5254+dirty 43.94 MiB 48.98 MiB 5.04 MiB
9b5615c+dirty 49.74 MiB 55.09 MiB 5.34 MiB
2e64504+dirty 49.74 MiB 55.45 MiB 5.71 MiB
ad66da3+dirty 48.30 MiB 53.49 MiB 5.19 MiB

@antonis antonis left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

LGTM 🚢
Thank you for handling this Gino 🙇

@antonis
antonis merged commit 695c88a into main Aug 28, 2026
117 of 122 checks passed
@antonis
antonis deleted the feat/standalone-app-start-child-vitals branch August 28, 2026 12:09
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.

3 participants