[pull] master from getsentry:master#1820
Merged
pull[bot] merged 38 commits intoKingDEV95:masterfrom Mar 24, 2026
Merged
Conversation
…111377) - Removes the initial dashboard generation prompt modal - Adds `CreateFromSeerPrompt` component to handle initial prompt which displays as a full screen page
Small cleanup for spans buffer: - Removes `self._distributed_payload_keys_map` from `SpansBuffer` to eliminate coupling between `_load_segment_data` and `done_flush_segments`. - Removes `_apply_per_trace_limit` (unused) Also adds RedisCluster to distributed tests.
…lta tests (#111372) Rather than writing slightly different diff code in each test, we can extract the diffing logic and share it. There are open source things we could involve here, but it isn't hard to do it ourselves, and by keeping it fairly tightly constrained it should be easy to import something more sophisticated if necessary. Note: this does include a serializer change to avoid a flagged diff where there was a type difference, but it seemed small enough to not merit a spin-off pr.
…111408) This file was deleted and no longer exists
Implementation plan is now just plan and fix the issue is now start analysis
Fixes this CSP violation on local dev and self-hosted: <img width="1217" height="783" alt="image" src="https://github.com/user-attachments/assets/cfa82e34-86f3-445f-be44-5bce818e4160" />
Implement the `SCM_PLATFORM_FEATURES` onboarding step -- the second step in the SCM-first onboarding flow where users select a platform and features after connecting their SCM. ## What it does Two variants depending on whether the user connected their SCM in the previous step: **SCM connected:** Calls the platform detection API to identify platforms from the repository. Detected platforms are rendered as selectable cards with the first auto-selected. Falls through to manual selection if detection returns no results. **Skipped SCM:** Shows a searchable dropdown for manually picking from 100+ platforms. Base languages (JavaScript, Python, etc.) trigger a framework suggestion modal. Both variants share a feature selection card grid. Error Monitoring is always on. Available features are filtered by `platformProductAvailability` and gated by the user's plan via `getDisabledProducts` (disabled features show a tooltip with the reason). Profiling requires tracing -- enabling profiling auto-enables tracing, disabling tracing auto-removes profiling. Gaming/console platforms are blocked when not enabled for the org. ## How state flows Platform and feature selections use derived state locally (e.g. `selectedPlatform?.key ?? detectedPlatformKey`) and are persisted to `OnboardingContext` in the Continue handler. Platform detection is pre-warmed in `SCM_CONNECT` via React Query cache sharing. ## New files - `useScmPlatformDetection.ts` -- hook wrapping the platform detection API - `scmFeatureSelectionCards.tsx` -- 2-column feature card grid with heading and count - `scmFeatureCard.tsx` -- individual feature card with icon, checkbox, and tooltip - `scmPlatformCard.tsx` -- detected platform card with platform icon and name - `scmCardButton.tsx` -- shared unstyled button primitive for card click semantics - `detectedPlatform.ts` (fixture) -- test fixture for detected platform data ## Follow-up [VDY-30](https://linear.app/getsentry/issue/VDY-30) -- sync feature selections from context into SetupDocs URL params. Refs VDY-23
Updates page frame mobile navigation to show the primary navigation we use on desktop and moves the primary footer items onto the mobile top navigation. This got a bit hairy with the styling overrides, but is a consequence of us toggling the styling between mobile and desktop styling at runtime. That design hits its limitations once we start to introuduce more than two variants, and I'm not happy. That said, I am ok with this idea because the new nav won't require us to keep that distinction (see screenshots). Since the new primary and secondary navigation styles match in desktop and mobile, it means that once this flag is released, we will be able to simplify this to just the desktop navigation and the top menu bar <table> <tr> <td> <img width="2274" height="1726" alt="CleanShot 2026-03-23 at 21 16 40@2x" src="https://github.com/user-attachments/assets/56ef3b10-f87c-4969-9c06-135211e28f12" /> <td> <img width="1160" height="1728" alt="CleanShot 2026-03-23 at 21 16 53@2x" src="https://github.com/user-attachments/assets/eae254ee-1083-40d5-803e-b7582d940421" /> <td> <tr> <td> <img width="1404" height="640" alt="CleanShot 2026-03-23 at 21 17 25@2x" src="https://github.com/user-attachments/assets/baccd449-b65f-4e64-bea8-82f749deeefe" /> <td> <img width="1402" height="1728" alt="CleanShot 2026-03-23 at 21 17 40@2x" src="https://github.com/user-attachments/assets/a370cf2d-9a46-4d44-ac77-f21e6ef8778a" /> <td> <img width="2286" height="1726" alt="CleanShot 2026-03-23 at 21 17 54@2x" src="https://github.com/user-attachments/assets/d8e06f42-760f-4ad1-84fb-0850e9dac1cd" /> </table> --------- Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
This flag is fully rolled out. Remove the flag registration, endpoint feature gate, and simplify all gated code paths: breakpoint detection in trends widgets and charts is now always enabled, dead filter conditions and unused imports are removed. <!-- Describe your PR here. --> --------- Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
…111401) Use the `scheduleMicroTask` pattern — already in use for `onEditWidget` — to measure the duration between the edit dashboard button click and the next re-render, emitting a `dashboards.dashboard.onEdit` distribution metric. Refs DAIN-1372 Co-authored-by: Claude Sonnet 4.6 <noreply@example.com>
…fix (#110499) Addressing some of the [remaining](https://sentry.sentry.io/explore/logs/?aggregateField=%7B%22groupBy%22%3A%22route%22%7D&aggregateField=%7B%22yAxes%22%3A%5B%22count%28message%29%22%5D%7D&logsFields=timestamp&logsFields=message&logsFields=route&logsQuery=message%3A%2AUnexpected%2Anavigation%2Aredirect%2A&logsSortBys=-timestamp&mode=aggregate&project=11276&statsPeriod=7d) redirect log messages --------- Co-authored-by: Claude <noreply@anthropic.com>
…pan summary (#110739) ## Summary - Creates `usePrebuiltDashboardUrl` hook in `dashboards/utils/` that builds URLs for prebuilt dashboards with page filters (project, environment, date range) and dashboard filters (release, global filters) serialized as query params - Updates `SpanSummaryLink` to link to prebuilt dashboards (instead of module pages) when platformized insights is enabled, passing `span.group` as a temporary global filter - Adds `applyDashboardFilters` helper that auto-sets `isTemporary: true` on all global filters ## Test plan - [ ] With platformized insights enabled, click "View Summary" on a DB span in the trace drawer — verify it navigates to the Backend Queries Summary prebuilt dashboard with `span.group` and page filters in the URL - [ ] Same for a resource span — verify it navigates to the Frontend Assets Summary prebuilt dashboard - [ ] With platformized insights disabled, verify "View Summary" still falls back to the module summary route - [ ] Verify `globalFilter` query param includes `isTemporary: true` BROWSE-435 --------- Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com> Co-authored-by: getsantry[bot] <66042841+getsantry[bot]@users.noreply.github.com>
…111065) This should hopefully be the last of the big default-to-named refactor PRs. It covers all remaining `export default`s of static constructs: i.e. classes, enums, functions, identifiers, interfaces, type aliases, and variables. Dynamic ones such as call expressions (`export default withApi(MyComponent)`) are not covered as they would take much more work to automate with renames. Because this one "only" had a few dozen removed `export default`s, I did the touchups by hand. It was find-and-replaces, with some subsequent cleanups caught by linting and/or type-checking. In `static/app` excluding mocks, this reduces: * `export default \w+`: from ~575 to ~535 * `import \w+ from`: from ~3.8k to ~3.4k The lint rule changes are stacked on this PR in #111070. Starts on ENG-7107
Noticing that app-backend is getting tagged for changes in miscellaneous seer tasks (e.g. https://github.com/getsentry/sentry/pull/111375/changes). Split seer-related tasks into a separate folder, similar to the other tasks in `src/sentry/tasks`. Co-authored-by: Claude <noreply@anthropic.com>
#111228) When a numeric value is very small (less than 0.0001), the field renderer and dashboard widgets were silently rounding it to 0 due to fractional digit capping. This was misleading — e.g. the Jobs widget could show "0 failed jobs" when the actual rate was tiny but nonzero. **e.g.,** <img width="396" height="88" alt="A" src="https://github.com/user-attachments/assets/9a186af2-4a9a-4d89-b96b-a01a5dd321b8" /> Values below the minimum representable threshold now display as `<0.0001` instead of `0`. A tooltip on hover shows the locale-formatted actual value so users can still see the precise number if needed. This is the pattern we also follow for other value types, like rates. **e.g.,** <img width="396" height="78" alt="Screenshot 2026-03-20 at 12 13 58 PM" src="https://github.com/user-attachments/assets/f9d1a9c0-056a-4baf-bacc-4e1ba912a6fe" /> Longer term, when we come back and talk about how we want to format numbers across the product, we'll come back to this decision. There's a decent chance we'll be using scientific notation, for example. Fixes DAIN-1378 --------- Co-authored-by: Claude <noreply@anthropic.com>
…#111431) Add TRACE_METRIC_BYTE to DataCategory enums, DATA_CATEGORY_INFO with bytes formatting, and gate visibility behind canUseMetricsStatsBytesUI
…111417) Adds more descriptions to artifact schema for dashboard generation
- Adds an issue preview to the metric monitor form - Refactors the issue preview component to use SimpleTable and thus look more similar to the actual issue stream - Add support for sending "assignee" to the issue preview - Add a reusable issue preview section wrapper since should look the same in most detector forms
…an (#111397) ## Summary - Widens the `GroupBy.value` type in the timeseries widget types to accept `number` and `boolean` in addition to the existing `string | null | Array<...>` types - Prepares the frontend for a backend change that will return real typed values from the `events-timeseries` endpoint instead of always stringifying groupBy values All existing consumers already handle these types safely — `toPythonString` normalizes bools/numbers, formatters have null/array guards, and no direct `===` string comparisons exist against `groupBy.value`. Fixes BROWSE-468 --------- Co-authored-by: Claude Opus 4.6 <noreply@example.com>
#111349) Extract `EAPSpansQueryBuilder` into a shared component and wire up search/filtering in the Sample Events tab when using EAP mode. The spans table now respects the search query from URL params, and non-applicable controls (percentile filter, Open in Discover) are hidden in EAP mode. Fixes BROWSE-463. --------- Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
…ueries dashboard (#111433) The "Queries by Time Spent" widget on the backend overview prebuilt dashboard was filtering by `db.system:[postgresql,mysql,...]` while the queries prebuilt dashboard used `span.category:db has:span.description`. This mismatch meant users could see data on the queries dashboard but a blank widget on the backend overview (or vice versa). This extracts the shared filter into `queries/settings.ts` (`BASE_FILTERS` / `BASE_FILTER_STRING`) and uses it consistently across the queries dashboard, query summary dashboard, and backend overview. Fixes DAIN-1398
Promotes CMD+K action to primary nav when page-frame is enabled and replaces the help menu search when cmd+k supercharged flag is enabled <img width="708" height="117" alt="CleanShot 2026-03-24 at 11 12 18" src="https://github.com/user-attachments/assets/3c785256-8d94-4227-91ca-076ec6a333ee" /> <img width="147" height="186" alt="CleanShot 2026-03-24 at 11 12 13" src="https://github.com/user-attachments/assets/8cf2f52e-6a4d-4ce1-a938-ce5668df7d54" /> Pending feature flag release, but this fixes DE-722 --------- Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
+ Removing this span inside since it's not needed due to top level span.
…111438) ## Summary - On the AI agents prebuilt dashboard, the trace ID in the traces table now links directly to the trace view with the **AI Spans** tab selected, instead of opening a drawer. - Adds a `linkToTraceView` prop to `TracesTable` to support this behavior while preserving the existing drawer behavior on the agents insights page. Fixes DAIN-1397 ## Test plan - [ ] Navigate to the AI agents prebuilt dashboard - [ ] Click a trace ID in the traces table - [ ] Verify it navigates to the trace view with the AI Spans tab active - [ ] Navigate to the agents insights page and verify the trace ID still opens the drawer
When there was no data, the confidence footer message would read "0 data point" or "0 log", etc instead of "0 data points" This PR changes it so when we look at the sample count, or normal count, or total count, we include `0` in the criteria for displaying a plural message.
…111241) will be used to route org provisioning to the right cell from a locality
Some routes like /tags/ are rendered in the drawer for the new UI so can be deleted completely. Other routes are still rendered in the main content but reference useHasStreamlinedUI.
…ports (#111070) Backing lint rule change for #111065. It covers all remaining `export default`s of static constructs: i.e. classes, enums, functions, identifiers, interfaces, type aliases, and variables. Dynamic ones such as call expressions (`export default withApi(MyComponent)`) are not covered as they would take much more work to automate with renames. Fixes ENG-7107.
Mobile navigation changes should not affect user's desktop preferences. This PR mitigates this by wrapping the secondary navigation using in-memory expanded/collapsed state as opposed to reusing the desktops localStorage persisted state --------- Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com> Co-authored-by: Claude Sonnet 4 <noreply@example.com>
…AlertRuleDetailsEndpoint (#111379) Fixes ISWF-2289.
New stack trace component (non-native): - no longer uses a mix of emotion and global styles - [stories for many of the complex states](https://sentry-9kfjix4ca.sentry.dev/stories/product/components/stacktrace/stacktrace/) - A few contexts instead of prop drilling - Frame content does not render until opened, speeding up issue details render speed on large 100+ frame stack traces. - The regular opportunities that show up when re-writting, like using our <Grid> <Flex> components - Styles are no longer shared with native frames which has made them historically difficult to touch, since you had to look at the variations of regular errors and native errors. Components are now broken into IssueStackTrace and StackTrace. **All fetch requests** happen in IssueStackTrace and StackTrace components are somewhat designed to be compostable. It got tricky in there.
Add launchpad topics to sentry's Topic enum so we can use it. Requires getsentry/getsentry#19642 Requires getsentry/sentry-kafka-schemas#477
…ule (#111451) Add a `ThreadPoolExecutor` subclass that automatically propagates `contextvars.Context` to worker threads via `copy_context()`/`ctx.run()`. This ensures Sentry SDK scopes, OpenTelemetry trace context, and any other context variables are available in worker threads without manual scope passing. Python's `ThreadPoolExecutor` doesn't propagate `contextvars.Context` to worker threads. Since Sentry SDK v2 stores scopes in contextvars, threads silently lose tracing context. Currently only 2-3 files (snuba.py, snuba_rpc.py) manually propagate scopes — ~25 other `ThreadPoolExecutor` usages have no context propagation at all. This is the same pattern already proven in production in [Seer's `ContextAwareThreadPoolExecutor`](https://github.com/getsentry/seer/blob/main/src/seer/automation/codebase/scm_api_metrics.py). Also adds flake8 rule **S016** to ban direct `from concurrent.futures import ThreadPoolExecutor` imports, directing developers to use the new wrapper instead. This prevents future regressions. Follow-up PRs will: 1. Migrate all existing `ThreadPoolExecutor` usages to the wrapper 2. Remove the manual scope-passing boilerplate in snuba.py and snuba_rpc.py Agent transcript: https://claudescope.sentry.dev/share/F2CIltqVwgfmTBY5XDunaFCE5-miOvy8NQSltE-F-ZI
Moves seer under page frame. <img width="1189" height="132" alt="CleanShot 2026-03-24 at 13 37 48" src="https://github.com/user-attachments/assets/ef9cc893-490e-4e81-91f5-3a2d8e91b6af" /> --------- Co-authored-by: Claude Sonnet 4 <noreply@example.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to subscribe to this conversation on GitHub.
Already have an account?
Sign in.
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
See Commits and Changes for more details.
Created by
pull[bot] (v2.0.0-alpha.4)
Can you help keep this open source service alive? 💖 Please sponsor : )