[pull] master from getsentry:master#1819
Merged
pull[bot] merged 18 commits intoKingDEV95:masterfrom Mar 24, 2026
Merged
Conversation
…1187) see the code comment for motivation
…on page (#111204) for forms where we stay on the same page (no modals that close, no redirects), we should reset the form after the source of `defaultValues` (usually a query or a store) has been updated. while the defaultValues are reactive by themselves, they only get applied if the form is `pristine`. That means the `value` won’t change. Now that might not be a problem if the server returns the same values, but if it doesn’t, we’d want to see the server values here. I’ve simulated this in the story where the mutation returns the input as `toUpperCase()`, so that we can see what’s happening. This also means if you only make a mutation and forget to update the query, or if you don’t return the invalidation from the mutation, the values will “flicker” back to the old initial state. This is intended because it serves as a reminder that the corresponding query / store needs to be updated. For AutoSaveForms, we’re doing this internally. Note: The reset is timing sensitive. If it happens too early, there will be a flash of old initialData briefly. That’s why this PR is dependent upon: - #111187
…1141) Add `maybe_emit_issues_from_size_results` so that "absolute" threshold detectors fire as soon as a single build's size metrics are committed, without waiting for a comparison against a base artifact. Previously, all issue emission went through the comparison path (`maybe_emit_issues`), which requires both head and base artifacts. This meant absolute detectors — which only need one build's size — couldn't fire until a comparison happened. Now: - The **single-build path** (called after metrics commit in `_assemble_preprod_artifact_size_analysis`) processes only `threshold_type == "absolute"` detectors - The **comparison path** (`_maybe_emit_issues`) processes only `threshold_type in ("absolute_diff", "relative_diff")` detectors - `SizeAnalysisMetadata` base fields (`base_metric_id`, `base_artifact_id`, `base_artifact`) are now `NotRequired`, and `create_occurrence` conditionally populates base-related evidence and tags Agent transcript: https://claudescope.sentry.dev/share/UgFhB6vtmF1RiOVM-Ble2aoN68w7YgfkO_BzAXfdxnE
…stem (#109325) Migrates `samplingModeSwitchModal.tsx` from the custom `createForm`/`FormProvider`/`useFormState`/`useFormField` system to the new `useScrapsForm`-based form system. The custom form context (`organizationSamplingForm`) is replaced with a Zod schema and `useScrapsForm`. Field layout and error display is now handled automatically by `field.Layout.Stack` instead of a manually wired `FieldGroup` and styled `ErrorMessage` component. The `TargetRateInput` subcomponent is inlined into the modal body as a `form.AppField`. The submit button becomes `form.SubmitButton` which handles disabled-during-submission state natively. Part of the broader effort to migrate dynamic sampling forms off the legacy form system. ref DE-949 --------- Co-authored-by: Claude <noreply@anthropic.com> Co-authored-by: Priscila Oliveira <priscila.oliveira@sentry.io>
) Replaces the `CompactSelect` in `AggregateDropdown` with `CompositeSelect`, where each option group gets its own `Region`. This removes the manual `findGroupKey` helper and the hand-rolled cross-group filtering logic that lived in the `onChange` handler. **Group modes:** - `percentiles` and `stats` → multi-select regions (users commonly compare e.g. p50 + p75 + p90) - `rate` and `math` → single-select regions Cross-group enforcement is now automatic: `handleChange` always replaces the full `visualizes` array, so selecting from a new group clears the previous group's selections on re-render without any explicit filtering. The trigger label is manually constructed to match `CompactSelect`'s built-in behaviour — first selected name in a `TriggerLabel` span, with a muted `+N` badge when more than one aggregate is active (`CompositeSelect` does not inject a trigger label the way `CompactSelect` does). Ticket: LOGS-628 --------- Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com> Co-authored-by: Claude Sonnet 4 <noreply@example.com>
…ew (#111302) Set a performance.mark on click, then measure the duration in dataWidgetViewerModal on mount — emitting a `dashboards.widget.onFullScreenView` distribution metric. Prebuilt insights dashboards (no dashboard ID) are not included for measurement. Refs DAIN-1371 <!-- Describe your PR here. --> <!-- Sentry employees and contractors can delete or ignore the following. --> ### 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: Claude Sonnet 4 <noreply@example.com>
Colton, I was double-checking why you said that initializing the SCM Facade in its `__init__` method did not work, which I felt could be hiding something more serious. My conclusion is that you observed that behavior on an intermediate version of #111113, when `_facade_type_for_provider_class` was returning a subclass of `Facade`. You then fixed the main issue by making it return a subclass of `cls`, but did not realize this allowed moving the initialization back to `__init__`. I did that, and added a test. Reference: [`object.__new__`](https://docs.python.org/3/reference/datamodel.html#object.__new__) and [`object.__init__`](https://docs.python.org/3/reference/datamodel.html#object.__init__).
This exposes the capabilities of a given provider through the SCM RPC. It's used in getsentry/seer#5393.
@jaydgoss hit an [interesting type issue](#111160 (comment)) in #111160 The gist is `SVGIconProps` extends `React.SVGAttributes<SVGSVGElement>` which [includes `type: string`](https://developer.mozilla.org/en-US/docs/Web/SVG/Reference/Attribute/type), but that's not actually valid for the root `<svg>` of our icon component. By omitting `type` from `SVGIconProps`, `IconGraphProps` no longer narrows the `type: string` prop, so `type` becomes a new optional prop. The eliminates the variance conflict, so `ComponentType<IconGraph>` should be directly assignable to `SVGIconProps`.
…111356) This updates the total count shown in confidence footers to query for _all_ metrics using `metric.name`, `metric.type`, and `metric.unit` filters so we can show a count in widgets with multiple metrics. Since metrics aren't sampled server side, I'm using a normal mode query which may hit a downsampled tier, and then using `serverOnly` extrapolation to ONLY factor in server side sampling. Since we don't do server-side sampling, this effectively returns to us an approximation of the total count of stored data for the metrics. I also refactor the way that the explore page queries to fit this new way of querying metrics total counts. Ultimately, I should update the confidence footer so if the `totalCount` results are approximated (i.e. they didn't hit tier 1), the footer should say "Estimating results from X samples from approximately Y data points" but I'm going to punt that for a future PR. This number is not fully accurate, but the confidence footer just gives estimates anyways.
Explorer autofix is a complete rewrite of the legacy autofix meaning that we cannot continue using the same columns to track when autofix was last run. This is because the run states are not backwards compatible and will need to be re-run again. By adding this new column, we can have automations use check this instead for the new autofix runs.
…d) (#111127) Remove the \`organizations:chart-legend-component\` flag declaration from \`src/sentry/features/temporary.py\`. The flag is fully rolled out to GA. Frontend (code cleanup): #111126 sentry-options-automator (flagpole definition removal): getsentry/sentry-options-automator#6894 Co-authored-by: Claude <noreply@anthropic.com>
… member projects (#111329) <!-- CURSOR_AGENT_PR_BODY_BEGIN --> ## Problem When a user has no member projects (their team doesn't own/belong to any projects) and the URL contains `project=-1` (All Projects sentinel), the project filter trigger was incorrectly displaying a project count or enumerated list instead of the "All Projects" label. ## Root Cause 1. The URL parameter `-1` (ALL_ACCESS_PROJECTS) gets expanded internally to all individual project IDs 2. The trigger's `isAllProjectsSelected` logic was checking if both `isMyProjectsSelected` AND `isNonMemberProjectsSelected` were true 3. `isMyProjectsSelected` requires `memberProjects.length > 0` to be true 4. When a user has no member projects, this check fails even though all projects are selected ## Solution Updated the logic in `projectPageFilterTrigger.tsx` to directly check if the `value` array contains all project IDs, regardless of the member/non-member split. This correctly handles the edge case. ## Changes - Modified `ProjectPageFilterTrigger` to use a `containsAllProjects` check that verifies all project IDs are present in the value array - Added test cases to cover users with no member projects - Removed unused `isNonMemberProjectsSelected` variable ## Testing - Added two new test cases in `projectPageFilter.spec.tsx`: - Verifies "All Projects" label is shown when URL has -1 and user has no member projects - Verifies "All Projects" label is shown when URL is empty (defaults to all) and user has no member projects - All pre-commit hooks pass Fixes the issue described in the Slack thread where the UI was showing a count instead of "All Projects" for users without member projects. <!-- CURSOR_AGENT_PR_BODY_END --> [Slack Thread](https://sentry.slack.com/archives/C087YQX2WH2/p1774289802943719?thread_ts=1774289802.943719&cid=C087YQX2WH2) <div><a href="https://cursor.com/agents/bc-43fbb420-88f9-59f3-b0cd-91f5299804e0"><picture><source media="(prefers-color-scheme: dark)" srcset="https://cursor.com/assets/images/open-in-web-dark.png"><source media="(prefers-color-scheme: light)" srcset="https://cursor.com/assets/images/open-in-web-light.png"><img alt="Open in Web" width="114" height="28" src="https://cursor.com/assets/images/open-in-web-dark.png"></picture></a> <a href="https://cursor.com/background-agent?bcId=bc-43fbb420-88f9-59f3-b0cd-91f5299804e0"><picture><source media="(prefers-color-scheme: dark)" srcset="https://cursor.com/assets/images/open-in-cursor-dark.png"><source media="(prefers-color-scheme: light)" srcset="https://cursor.com/assets/images/open-in-cursor-light.png"><img alt="Open in Cursor" width="131" height="28" src="https://cursor.com/assets/images/open-in-cursor-dark.png"></picture></a> </div> Co-authored-by: Cursor Agent <cursoragent@cursor.com> Co-authored-by: Jonas <JonasBa@users.noreply.github.com>
Make `head.artifact_id` and `base.artifact_id` tags clickable on the
issue detail page, linking to the preprod size build detail page
(`/preprod/size/{id}/`).
These tags were added in #110854 but rendered as plain text. This adds
them to the existing tag-key switch in `EventTagsTreeValue`, following
the same `Link` + `TagLinkText` pattern used by `transaction` and
`replayId` tags. Uses the existing `getSizeBuildPath` utility.
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
Disables widgets from lazy loading when viewing an ai generated dashboard preview. This is to reduce issues with new widgets being inserted during generation but not loading due to lazy load. Also makes it easier to detect failed queries by loading all widgets.
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 : )