[pull] master from getsentry:master#1804
Merged
pull[bot] merged 29 commits intoKingDEV95:masterfrom Mar 18, 2026
Merged
Conversation
Thought this might be a good refactor, after [this comment](#110760 (comment)), to make it clear that we have a file for every checksum. Co-authored-by: Joris Bayer <joris.bayer@sentry.io>
Initially, I included this change in #110856, but realized it's technically an independent change, so I split it off.
This PR adds a mapping layer for when the backend sends a json structure, so that we can render form fields with the new scraps form system based on them. A lot of field types are supported out of the box, and this PR also adds 3 custom fields for the following field types: - choice_mapper - project_mapper - table The `BackendJsonFormAdapter` is then used for `organizationIntegration`.
Filter `SdkUpdateAlert` to only match SDK updates relevant to the current onboarding context. The `/sdk-updates/` endpoint returns all SDKs with available updates for a project. A project can receive events from multiple SDKs (e.g. a Flask project that also receives Rust events). Previously, the component picked the first entry regardless of relevance, which could show a misleading update alert (e.g. suggesting a Rust SDK update on a Python onboarding page). Now the component accepts a `packageName` prop and uses `getPackageNameFromSdkName` to match the response entry whose package matches the onboarding context. If no matching SDK is found, no alert is shown. The callers (Python, Node, JavaScript agent monitoring onboarding) already have `packageName` available and now pass it through. closes https://linear.app/getsentry/issue/TET-2095/update-sdk-instructions-wrong --------- Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
…110845) ## Summary - Remove the `useIsEAPTraceEnabled` hook that checked the `trace-spans-format` feature flag — EAP is now the only trace code path - Remove the `TraceMeta` type and simplify `useTraceMeta` to always use EAP endpoints (`/trace-meta/`) and EAP response shape - Remove the `traceType` parameter from `getTraceQueryParams`, `getTargetIdParams`, `fetchTrace`, and `fetchAdditionalTraces` — always use EAP endpoints (`/trace/`) - Remove the non-EAP `events-trace/` query from `useTrace` - Remove the `SampleButton` conditional in `onboarding.tsx` that was gated behind the flag From original [PR](#110623): > - All relevant AM plans are now ingesting spans > - SH is ingesting spans see [internal slack link](https://sentry.slack.com/archives/C03FS3KJZ0R/p1772742481919559?thread_ts=1772723941.771909&cid=C03FS3KJZ0R) so we should be safe to just always assume EAP is available here --------- Co-authored-by: Claude Opus 4.6 <noreply@example.com> Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
…0842) Add drag-and-drop reordering to the Visualize toolbar in Explore > Traces, matching the pattern already used in the Group By toolbar. When 2+ visualize items (charts or equations) are present, each toolbar row shows a grabbable drag handle. Reordering the rows updates the URL state, which automatically reorders the chart panels below since both derive from the same query params. Uses the existing `DragNDropContext` wrapper and `useSortable` hook with `transition: null` (to avoid the drop animation glitch fixed in #110676). No new dependencies. <img width="967" height="452" alt="Screenshot of Explore > Traces with an equation and a chart in Visualize, with drag-n-drop button indicators" src="https://github.com/user-attachments/assets/03780d77-a182-4581-abac-efa4ddce9f35" /> Fixes EXP-843 Made with [Cursor](https://cursor.com)
…110855) Preserve logs group-by fields when adding a query to a dashboard via "Add to Dashboard". `constructAddQueryToDashboardLink` populates a widget's `columns` (which carry group-by information for time-series charts) only for `WidgetType.SPANS`, `WidgetType.TRACEMETRICS`, `DisplayType.TOP_N`, and `DisplayModes.DAILYTOP5`. `WidgetType.LOGS` was missing from this condition, so non-aggregate fields from the event view were silently dropped — the resulting widget had no group-by. This adds `WidgetType.LOGS` to both the `columns` population condition in `constructAddQueryToDashboardLink` and the `displayType` derivation in `handleAddQueryToDashboard` (so `DisplayType.BAR` is preserved directly rather than being transformed through `displayModeToDisplayType`). Fixes DAIN-1125. Made with [Cursor](https://cursor.com)
This PR addresses the `NoRetriesRemainingError` occurring in `sentry.tasks.autofix.trigger_autofix_from_issue_summary`, which was caused by an `AttributeError: 'str' object has no attribute 'value'`. **Problem:** When `AutofixStoppingPoint` and `AutofixReferrer` enum instances are passed as parameters to the `_trigger_autofix_task` Celery task, the Celery serialization process converts these enums into their string representations (e.g., `'root_cause'`). Upon deserialization, the task receives these parameters as plain strings, not as `StrEnum` objects. Downstream functions, such as `trigger_autofix_explorer`, then attempt to access the `.value` attribute on these string objects, leading to an `AttributeError`. **Solution:** 1. **Updated `_trigger_autofix_task` signature**: Modified the type annotations for `stopping_point` and `referrer` parameters in `src/sentry/seer/autofix/issue_summary.py` to `AutofixStoppingPoint | str | None` and `AutofixReferrer | str` respectively. This clarifies that the task can receive these parameters as either enum instances or their string values after deserialization. 2. **Enum Reconstruction**: Added logic at the beginning of the `_trigger_autofix_task` function to explicitly convert `stopping_point` and `referrer` back into their respective `StrEnum` types if they are received as strings. This ensures that by the time these parameters are used by downstream functions, they are always proper enum instances. This fix ensures that the task correctly handles the deserialization of enum parameters, preventing the `AttributeError` and the subsequent task retry exhaustion. Fixes SENTRY-5AYM ### Legal Boilerplate Look, I get it. The entity doing business as "Sentry" was incorporated in the State of Delaware in 2015 as Functional Software, Inc. and is gonna need some rights from me in order to utilize my contributions in this here PR. So here's the deal: I retain all rights, title and interest in and to my contributions, and by keeping this boilerplate intact I confirm that Sentry can use, modify, copy, and redistribute my contributions, under Sentry's choice of terms. --------- Co-authored-by: sentry[bot] <39604003+sentry[bot]@users.noreply.github.com> Co-authored-by: Tony Xiao <txiao@sentry.io>
Tasks are defined using sentry.taskworker, but we are in the process of converting to taskbroker-client. The taskbroker-client library uses its internal constant values. To maintain compression behavior, we need to shim the enum values. Refs STREAM-610
SDK packages can be published without docs. We shouldn't fail when that happens. Fixes SENTRY-5M6Z
flakey test was causing failing deploys so i'm skipping it for now.
The GitHub Copilot Tasks API changed its response format — it no longer
wraps
responses in a `{"task": {...}}` envelope and instead returns the task
object
directly at the top level. This caused a pydantic `ValidationError` when
parsing the response (`task` field required but missing).
The `launch` method now checks whether the response contains a `"task"`
key
and parses accordingly, supporting both the new direct format and the
legacy
envelope for backward compatibility.
Verified the new format by calling the live API.
Fixes SENTRY-5M80
Agent transcript:
https://claudescope.sentry.dev/share/nnOwNScC5NRWw6cq33Lzb0wQLp42fKJ3uv1a5Lu2Vc0
Add an inherit variant to Text. The default to Text color is a rough case here that we probably want to migrate away from, as it opts out of the CSS cascade and forces us to provide an override. I'm adding this as a temporary backwards compat so we can cleanly opt-out of that mechanism without having it be the default behavior. --------- Co-authored-by: Claude <noreply@anthropic.com>
Extend Text and Heading components with render prop support, matching the APIs of Layout primitives --------- Co-authored-by: Claude <noreply@anthropic.com> Co-authored-by: getsantry[bot] <66042841+getsantry[bot]@users.noreply.github.com>
…rds endpoint (#110903) Right now, the validators on the dashboard artifacts are not actually used (they're run in post, but we don't use the validation result). Adds a completion hook to `OrganizationDashboardGenerateEndpoint`. Whenever a seer run for generating a dashboard is complete, checks the result dashboard artifact for any validation errors detected. If errors are detected, re request dashboard generation. This dashboard generation re request only happens up to 3 times (determined by `MAX_VALIDATION_RETRIES`) on consecutive failures.
…ed (#110853) Continues the expansion of the `no-default-exports` lint rule from #110631. This checks in results from removing the _"ignore any file that already has any named export"_ allowance. The changes to `export`s were done by `pnpm lint:js --fix`. I again had Cursor fix up the issues for `import`s. The actual changes to the lint rule are in #110860. Note that the lint rule still doesn’t report on dynamic expressions like `export default memo(MyComponent)`. Those are trickier because consumers often take that default export under the name of the internal component (`import MyComponent from '...'`). In `static/app` excluding mocks, this reduces: * `export default \w+`: from ~800 to ~575 * `import \w+ from`: from ~5.6k to ~3.8k
Registering new `tracemetrics-ui-refresh` feature flag.
…hboard duplication (#110920) Wraps the navigation target with `normalizeUrl` whoops! Otherwise the sidebar doesn't correctly find the right secondary navigation. Fixes DAIN-1336 Co-authored-by: Claude <noreply@anthropic.com>
…110914) Removes all hard-coded `fieldMeta` percentage type annotations from prebuilt dashboard widget configs. These were added to mark certain equation fields (like error rates, cache miss rates, slow/frozen frame percentages) as percentage-type so they'd render correctly. However, `fieldMeta` is not propagated when a dashboard is duplicated, so duplicated dashboards would lose the formatting. Rather than fix the propagation now, we're removing these hard-coded values entirely and will revisit with a proper user-facing field customization feature. Refs DAIN-1340 Co-authored-by: Claude <noreply@anthropic.com>
…nditions (#110913) Replace span-specific project flags with `firstTransactionEvent` for the overview pre-built dashboard onboarding gate (frontend, backend, Next.js, Laravel overviews). Previously, the onboarding screen was gated on flags like `hasInsightsVitals`, `hasInsightsAssets`, `hasInsightsDb`, and `hasInsightsHttp` — which only become true when specific span types are received. This was too restrictive: users who send custom spans with different span types would never see the dashboard content even if they had sent transactions. Using `firstTransactionEvent` means the onboarding is hidden as soon as any transaction has been received, which is the right signal for these general overview dashboards. Fixes DAIN-1362 --------- Co-authored-by: Claude <noreply@anthropic.com>
…t view (#110828) Fixes long dashboard names overflowing their column in the dashboard list view. **Before:** <img width="602" height="89" alt="Screenshot 2026-03-17 at 4 17 15 PM" src="https://github.com/user-attachments/assets/93ae189e-0c96-4639-a8af-0e299e63a422" /> **After:** <img width="645" height="81" alt="Screenshot 2026-03-17 at 4 17 12 PM" src="https://github.com/user-attachments/assets/99f2c31e-a12e-4b14-86e7-eeff108db610" /> Fixes DAIN-1354 Co-Authored-By: Claude <noreply@anthropic.com> --------- Co-authored-by: Claude <noreply@anthropic.com>
…d exports (#110860) Corresponding lint rule changes for #110853. Note that the lint rule still doesn’t report on dynamic expressions like `export default memo(MyComponent)`. Those are trickier because consumers often take that default export under the name of the internal component (`import MyComponent from '...'`).
…hMutation instead of api.requestPromise directly (#110957) Update dashboards generation sendMessage to use fetchMutation instead of api.requestPromise directly
…ail metrics (#110958) Calls the `POST dashboards/` endpoint with `validationOnly` to test generated dashboard against backend serializer. Tracks a counter metric for each success and fail.
To be used for adding GitLab support to Seer Code Reviews
…10908) Imagine you add two filters for one chart with a group by: <img width="483" height="144" alt="Screenshot 2026-03-17 at 3 21 42 PM" src="https://github.com/user-attachments/assets/1b1371be-55fb-4132-806a-ebebfa479162" /> **Before:** <img width="644" height="287" alt="Screenshot 2026-03-17 at 3 20 49 PM" src="https://github.com/user-attachments/assets/b32f8bd1-ee08-4d00-8047-e71446267128" /> **After:** <img width="562" height="277" alt="Screenshot 2026-03-17 at 3 21 04 PM" src="https://github.com/user-attachments/assets/272069d9-006b-442b-abf7-bb42633cc865" /> We weren't disambiguating the legends at all between the two filters! With this PR, if the queries don't have any aliases we prefix each series by the query that filtered it, so at least the items are all kept separate. **Fix 1**: Widget query hooks now call `getSeriesQueryPrefix` after `transformSeries` to prefix series names with prettified query conditions when there are multiple queries and no alias. This happens in the hooks (not the visualization component) because the hooks iterate per-query and know which query produced each series — by the time series reach the visualization layer, they're a flat array with no query association. **Fix 2**: Changed `columns.length > 1` to `columns.length > 0` in `transformWidgetSeriesToTimeSeries` so the yAxis is appended whenever there's at least one group-by column. This is all destined to be updated very soon when we start using `/events-timeseries/` in the Dashboard fetchers, since `TimeSeries` objects preserve more context and we'll be able to consolidate all this formatting. Fixes DAIN-1305 --------- Co-authored-by: Claude <noreply@anthropic.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 : )