From c8d8d2822d301540294972e5e15052940cf3a912 Mon Sep 17 00:00:00 2001 From: s1gr1d <32902192+s1gr1d@users.noreply.github.com> Date: Fri, 13 Nov 2026 14:13:35 +0100 Subject: [PATCH 1/2] feat(trace-view): Show server rendering and cache lifecycle to all users Remove the frontend checks for the flag performance-trace-cache-lifecycle. The Cache Lifecycle and Server Rendering sections in the span details and the server render placeholder rows in the waterfall now show for all organizations. Both section titles get a "new" badge. The backend flag registration is removed in a separate PR. --- .../span/eapSections/cacheLifecycle.tsx | 29 +++++--------- .../span/eapSections/serverRendering.tsx | 3 +- .../traceDrawer/details/span/index.tsx | 40 +++++++++---------- .../traceTree.serverRendering.spec.tsx | 14 ++----- .../traceDetails/traceModels/traceTree.tsx | 4 +- 5 files changed, 35 insertions(+), 55 deletions(-) diff --git a/static/app/views/performance/traceDetails/traceDrawer/details/span/eapSections/cacheLifecycle.tsx b/static/app/views/performance/traceDetails/traceDrawer/details/span/eapSections/cacheLifecycle.tsx index 973704daf93e..2762edaec6f7 100644 --- a/static/app/views/performance/traceDetails/traceDrawer/details/span/eapSections/cacheLifecycle.tsx +++ b/static/app/views/performance/traceDetails/traceDrawer/details/span/eapSections/cacheLifecycle.tsx @@ -2,7 +2,7 @@ import {Fragment, useState} from 'react'; import {useTheme} from '@emotion/react'; import type {Location} from 'history'; -import {Tag} from '@sentry/scraps/badge'; +import {FeatureBadge, Tag} from '@sentry/scraps/badge'; import {LinkButton} from '@sentry/scraps/button'; import {InfoText} from '@sentry/scraps/info'; import {Flex, Grid, Stack} from '@sentry/scraps/layout'; @@ -191,28 +191,21 @@ function LifecycleFoldSection({ children: React.ReactNode; tag?: React.ReactNode; }) { - const title = ( - - ); - return ( - {title} - {tag} - - ) : ( - title - ) + + + + {tag} + } > {children} diff --git a/static/app/views/performance/traceDetails/traceDrawer/details/span/eapSections/serverRendering.tsx b/static/app/views/performance/traceDetails/traceDrawer/details/span/eapSections/serverRendering.tsx index 280455161714..6dc0dc6ee7c9 100644 --- a/static/app/views/performance/traceDetails/traceDrawer/details/span/eapSections/serverRendering.tsx +++ b/static/app/views/performance/traceDetails/traceDrawer/details/span/eapSections/serverRendering.tsx @@ -1,7 +1,7 @@ import {IconOpen} from '@sentry/icons/open'; import type {Location} from 'history'; -import {Tag} from '@sentry/scraps/badge'; +import {FeatureBadge, Tag} from '@sentry/scraps/badge'; import {Button} from '@sentry/scraps/button'; import {Flex, Stack} from '@sentry/scraps/layout'; import {Link} from '@sentry/scraps/link'; @@ -121,6 +121,7 @@ function SectionTitle({type}: {type: ServerRenderingType | undefined}) { 'Where the server spans of this page are. A reused part has its spans in the trace that rendered it.' )} /> + {type ? {TYPE_LABELS[type]} : null} ); diff --git a/static/app/views/performance/traceDetails/traceDrawer/details/span/index.tsx b/static/app/views/performance/traceDetails/traceDrawer/details/span/index.tsx index 5272e9c689aa..1752e2e7573a 100644 --- a/static/app/views/performance/traceDetails/traceDrawer/details/span/index.tsx +++ b/static/app/views/performance/traceDetails/traceDrawer/details/span/index.tsx @@ -410,28 +410,24 @@ function EAPSpanNodeDetailsContent({ avgSpanDuration={avgSpanDuration} hideNodeActions={hideNodeActions} /> - {organization.features.includes('performance-trace-cache-lifecycle') ? ( - - - - - ) : null} + + , org = organization) { - return TraceTree.FromTrace(makeEAPTrace([pageload]), {replay: null, organization: org}); +function buildTree(pageload: ReturnType) { + return TraceTree.FromTrace(makeEAPTrace([pageload]), {replay: null, organization}); } function getPageload(tree: TraceTree) { @@ -161,10 +159,4 @@ eap trace root expect(tree.root.findChild(isServerRenderNode)).toBeNull(); }); - - it('adds no placeholder without the feature', () => { - const tree = buildTree(makePageload('static'), OrganizationFixture()); - - expect(tree.root.findChild(isServerRenderNode)).toBeNull(); - }); }); diff --git a/static/app/views/performance/traceDetails/traceModels/traceTree.tsx b/static/app/views/performance/traceDetails/traceModels/traceTree.tsx index 5ecb4ba03275..8891a764b2df 100644 --- a/static/app/views/performance/traceDetails/traceModels/traceTree.tsx +++ b/static/app/views/performance/traceDetails/traceModels/traceTree.tsx @@ -576,9 +576,7 @@ export class TraceTree extends TraceTreeEventDispatcher { tree.indicators.sort((a, b) => a.start - b.start); - if (options.organization.features.includes('performance-trace-cache-lifecycle')) { - TraceTree.AddServerRenderPlaceholders(tree.root); - } + TraceTree.AddServerRenderPlaceholders(tree.root); TraceTree.ApplyPreferences(tree.root, options); From 1059c1dc6371582df751c24fe2b9418b0e52e2ab Mon Sep 17 00:00:00 2001 From: s1gr1d <32902192+s1gr1d@users.noreply.github.com> Date: Fri, 13 Nov 2026 14:50:50 +0100 Subject: [PATCH 2/2] fix(trace-view): Use sentence case for section titles --- .../traceDrawer/details/span/eapSections/cacheLifecycle.tsx | 2 +- .../details/span/eapSections/serverRendering.spec.tsx | 2 +- .../traceDrawer/details/span/eapSections/serverRendering.tsx | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/static/app/views/performance/traceDetails/traceDrawer/details/span/eapSections/cacheLifecycle.tsx b/static/app/views/performance/traceDetails/traceDrawer/details/span/eapSections/cacheLifecycle.tsx index 2762edaec6f7..66ffdc5e5a83 100644 --- a/static/app/views/performance/traceDetails/traceDrawer/details/span/eapSections/cacheLifecycle.tsx +++ b/static/app/views/performance/traceDetails/traceDrawer/details/span/eapSections/cacheLifecycle.tsx @@ -198,7 +198,7 @@ function LifecycleFoldSection({ title={ { links: [makeLink('cache_origin')], }); - expect(screen.getByText('Server Rendering')).toBeInTheDocument(); + expect(screen.getByText('Server rendering')).toBeInTheDocument(); expect(screen.getByText('Static')).toBeInTheDocument(); expect(screen.getByText('Whole page')).toBeInTheDocument(); expect(screen.getByText('Rendered earlier and reused')).toBeInTheDocument(); diff --git a/static/app/views/performance/traceDetails/traceDrawer/details/span/eapSections/serverRendering.tsx b/static/app/views/performance/traceDetails/traceDrawer/details/span/eapSections/serverRendering.tsx index 6dc0dc6ee7c9..632eeb6e5b6b 100644 --- a/static/app/views/performance/traceDetails/traceDrawer/details/span/eapSections/serverRendering.tsx +++ b/static/app/views/performance/traceDetails/traceDrawer/details/span/eapSections/serverRendering.tsx @@ -116,7 +116,7 @@ function SectionTitle({type}: {type: ServerRenderingType | undefined}) { return (