test(e2e): Port React Router framework E2E apps to span streaming - #23844
Conversation
size-limit report 📦
|
75dab6a to
ae51708
Compare
7d5db09 to
d50ce36
Compare
47e95de to
5ecb95a
Compare
d50ce36 to
b03837a
Compare
adf8c96 to
e2c7572
Compare
b03837a to
d33d48c
Compare
e2c7572 to
05a6dbd
Compare
8870eb6 to
2ed771f
Compare
05a6dbd to
4736942
Compare
2ed771f to
7e3b354
Compare
4736942 to
7700c10
Compare
There was a problem hiding this comment.
Cursor Bugbot has reviewed your changes and found 2 potential issues.
❌ Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, enable autofix in the Cursor dashboard.
Reviewed by Cursor Bugbot for commit 7700c10. Configure here.
7e3b354 to
638598a
Compare
7700c10 to
06f7731
Compare
638598a to
5b28e50
Compare
06f7731 to
bd73839
Compare
JPeer264
left a comment
There was a problem hiding this comment.
LGTM. Biggest PR I've reviewed in a long time.
There was a problem hiding this comment.
note: Odd that these files weren't triggered as "rename" - I think then the PR would have been smaller
There was a problem hiding this comment.
Oof sorry, I think something went wrong when I broke up my stacked PR :(
Removes the `traceLifecycle: 'static'` pin from `react-router-7-framework`, `react-router-8-framework` and `react-router-7-framework-spa`, and rewrites their specs against streamed span v2. Envelope-level metadata has no span equivalent, so the SDK assertions read the `sentry.sdk.*` and `sentry.environment` attributes instead, and the `runtime` tag assertions are dropped. The trace connection spec is keyed off the `sentry-trace` meta tag. Spans are buffered before they flush, so an earlier page load on `/` can still be arriving here, and matching the two halves independently paired spans from different loads. The document advertises its own trace, and the client span is selected by the parent it continues, so a pageload that failed to continue the trace still fails the test rather than passing vacuously.
…streaming (#23845) ## What Ports `react-router-7-framework-instrumentation` to span streaming. ## Why Span streaming is the default now, so the E2E suite has to exercise it. Loader, action, middleware and fetcher assertions walk the streamed trace instead of a transaction's `spans` array, and the orchestrion mysql spec matches on `db.query.text`, since a streamed mysql span is named after its query summary. Part of #23798
0424336 to
be21d07
Compare
#23844 ported this app to span streaming while this branch was open, so its ioredis assertions still expected the serialized command as the span name. The route builds its client without a host or port, so the name reports ioredis' own `localhost:6379` defaults, which the expectations now pin as `server.address`/`server.port` too. The duplicate-span check keys off `db.query.text`, which still tells the two commands apart. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>

What
Ports
react-router-7-framework,react-router-8-frameworkandreact-router-7-framework-spato span streaming.Why
Span streaming is the default now, so the E2E suite has to exercise it. Envelope-level metadata has no span equivalent, so the SDK assertions read the
sentry.sdk.*andsentry.environmentattributes instead and theruntimetag assertions are dropped. The trace-connection spec matches the server segment on its op rather than its name, because an unparameterized streamed server span is named after the method alone.Part of #23798