[pull] master from getsentry:master#1851
Merged
Merged
Conversation
Add a new experimental sort option that combines normalized [0,1] signals additively to rank issues. This new sort is only available by manually changing the query parameter, it is not shown in the UI and cannot be saved to a view. Supported signals: - Recency: exponential decay based on time since last event with a 24hr half life - Spike: ratio of recent 6hr events to total 3d events - Severity: max log level - User impact: log-scaled unique user count maxing out at 1k - Event volume: log-scaled event count maxing out at 10k - Type boost: additive per-issue type boost (ex: uptime +0.15) Unlike the existing trends sort which uses multiplicative combination (where any near-zero factor kills the score), this uses additive combination so signals contribute independently. Weights are tunable via options since the initial values here are almost certainly not ideal. These signals were chosen primarily because they all exist within snuba and not because they are perfectly optimal, for example severity should ideally be the severity we derive via ML for an issue. A natural follow on would be to do reranking based on issue/user/team metadata. These options also give us the ability to fully remove some of these signals by setting their weight to reduce the number of signals used for ranking. The default weights here were manually tuned using the issue ranking experiment in the ai-workbench. --------- Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
…#112216) Allow filtering groups by status (unresolved, resolved, etc.) via a query parameter so the frontend can request supergroup assignments for only the relevant subset of issues. fixes https://linear.app/getsentry/issue/ID-1440/hide-resolved-issues-from-counts-and-lists
We're ready to roll out the metric alert and incident GET methods so this PR puts a flag around the metric alert rule details GET method to use the backwards compatible serializer.
…112215) When search filters are active, individual issue rows show matching events vs total events as separate series in the chart. Supergroup rows were only showing total stats. This aggregates filtered stats separately so the supergroup row renders the same dual-bar chart with matching/total event and user counts. Move stuff out of app/utils <img width="259" height="167" alt="image" src="https://github.com/user-attachments/assets/8a9939e6-e91d-4c5c-a1ec-3ddcee3c2747" />
We're ready to roll out the metric alert and incident GET methods so this PR puts a flag around the incident details GET method to use the backwards compatible serializer.
…y rows (#112266) When repo is hidden, add `SeerProjectRepository` to list of repo child relations to make sure it gets deleted. Corresponds to Seer's [`remove_repository_from_project_preference`](https://github.com/getsentry/seer/blob/fe644b6d5cff9e58ecfc1c846ba59545f468a5e5/src/seer/automation/preferences.py#L172).
Re-do of #111864 This failed due to [SENTRY-5MSP](https://sentry.sentry.io/issues/?project=1&query=SENTRY-5MSP). This was caused by us not deploying routings to control first, and so we tried to fire a control task from a cell. That's fixed in #112226. Other than that, this is the same as the previous pr and doesn't need re-review Currently, we only sync the available repositories from Github on installing the integration. So over time, if new repositories are added to the github organization, or access to specific repositories is added or removed, we end up out of sync with which repositories we store in Sentry. To fix this, we are going to start handling the `installation_repositories` webhook. This is fired whenever the repositories that a github app can access change. This allows us to keep all the repos in sync. Note that when access to a repo is removed, we only ever disable the repo and never delete it. This allows us to keep the history of commits and so on so far.
) ## End Goal Replace Zendesk with Intercom. [Plan](<https://www.notion.so/sentry/Migration-Plan-Zendesk-to-Intercom-30a8b10e4b5d807c9bcdef3105761dda>) ## Summary * Add feature flag to support button to open intercom * Call intercom JWT to authenticate the user * Load the intercom widget ## Related * Backend PR: [https://github.com/getsentry/sentry/pull/108408](<https://github.com/getsentry/sentry/pull/108408>) ## Test plan - [X] Verify messenger opens and closes - [X] Verify IntercomLink falls back to mailto when blocked - [X] Verify analytics events fire correctly - [X] E2E: Login -> Intercom boots with JWT - [X] E2E: Click "Contact Support" -> Messenger opens ## Next PR - [ ] Verify switching organization clears session - [ ] E2E: Logout -> Intercom shuts down https://github.com/user-attachments/assets/f041001e-a9ef-479d-95ea-f3b78a5dc2c5 --------- Co-authored-by: getsantry[bot] <66042841+getsantry[bot]@users.noreply.github.com>
…waterfall (#112239) Allow callers to specify which additional span attributes to fetch, defaulting to `["span.status_code"]` for backward compatibility. pairs with getsentry/seer#5633
… combined assign/describe section (#112205) - Removes the individual assign/describe sections - Adds a new common IssueOwnershipSection - Uses the new component in all applicable monitor forms - Adjusts some section titles to match the new designs
`/rules/` was originally owned by alerts-notifications but seems to have mistakenly been added to issue-detection. Move it back to the appropriate team.
Skip all framer-motion animations in tests via `MotionGlobalConfig.skipAnimations = true` [docs](motiondivision/motion@3dffb40) so components render immediately without waiting for animation frames or transitions. Also bumps framer-motion from 12.23.12 to 12.38.0. ## Drawer test benchmarks (before → after) | Test suite | Before | After | Speedup | |---|---|---|---| | `globalDrawer/index.spec.tsx` | 3.01s | 1.20s | 2.5x | | `eventFeatureFlagSection.spec.tsx` | 2.66s | 2.30s | 1.2x | | `breadcrumbsDataSection.spec.tsx` | 1.95s | 1.58s | 1.2x | This also benefits every other test that renders framer-motion components (modals, tooltips, any `AnimatePresence` usage).
…2279) https://linear.app/getsentry/issue/BIL-2221/convert-units-for-usage-total-cards-isbytecategory This PR adds byte usage formatting for trace metrics.
…regex class (#112274) In a number of our parameterization regex patterns, we use lookaheads and lookbehinds to control when the pattern applies. There's theoretically a mechanism built into the `ParameterizationRegex` class for that: `lookahead` and `lookbehind` values can be set when defining the regex, and they'll automatically be included in the final pattern string. Most of our regexes which use lookaheads and lookbehinds don't use it, though, opting instead to include the lookahead or lookbehind directly in the pattern. Not only is this more explicit, it also accommodates patterns which need negative rather than positive lookaheads/lookbehinds, and patterns which need multiple lookaheads/lookbehinds. This PR therefore switches the only two regexes using the attributes to also use explicit lookbehinds instead, and then deletes the now-unused attributes. No behavior changes here - just an attempt to make the code a touch simpler and more consistent.
Add Selenium acceptance tests for the SCM onboarding flow. The SCM flow had zero acceptance test coverage -- existing tests only cover the legacy onboarding path. Five tests covering the three main user paths plus error states: - **Happy path**: welcome -> connect repo -> detected platform -> create project. Pre-installs a GitHub integration and mocks `get_repositories`, `_validate_repo`, and `detect_platforms` to avoid real GitHub API calls. - **Skip path**: welcome -> skip integration -> manual SDK picker -> create project. Validates the flow works end-to-end without an integration. - **Install path**: welcome -> install GitHub (simulated OAuth via postMessage injection) -> repo search -> detected platform -> create project. Overrides `window.open` to return `window` itself so the `message.source === this.dialog` check in `AddIntegration` passes. Uses the real `OrganizationIntegrationSerializer` to generate the postMessage payload, avoiding mock-drift. - **Detection error fallback**: platform detection fails -> manual picker appears -> user can still complete the flow. - **Empty repo search**: search returns no results -> "No repositories found" permissions hint is displayed. All project-creating tests assert on the setup-docs SDK heading content, project name/slug/platform, and `assert_existing_projects_status` -- matching the bar set by the legacy `test_onboarding.py`. Refs VDY-54
…y counts (#111954) `_get_replay_id_mappings` compared `data_source` (a string) against `Dataset.Discover` (the enum), so `FILTER_HAS_A_REPLAY` was never applied to Discover queries. Fix by normalizing `data_source` to the `Dataset` enum at the boundary so all comparisons are enum-to-enum. the bug was on the line that does ```py query = query + FILTER_HAS_A_REPLAY if data_source == Dataset.Discover else query ``` Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
Animations are now disabled globally in tests via framer-motion's MotionGlobalConfig, making the per-transition testableTransition wrapper unnecessary.
We're never advancing by adding data, we don't need this.
Related to getsentry/frontend-tsc#78, we shouldn't be using browserHistory anymore: `useNavigate()` covers cases where we want to change it, and location/nuqs covers reading and query-params too. So this aims to remove `useUrlParams` from the codebase, it's a query-param helper that is basically a bad version of nuqs. We can use nuqs instead. Related to getsentry/frontend-tsc#78
…112289) getsentry/frontend-tsc#78 Replaces `useRouter` usage in `InstanceLevelOAuthDetails` with `useParams`.
In the metrics we use to track message parameterization, we tag the overall timing metric with a `false_positive` tag when we hit the fallback case (to see both how often it happens and how much time it adds to the process), but we don't track the individual times we hit a false positive value (which could be more than once per message). This adds a metric to do that, so that we can compare false positive hits to true positive hits (tracked by the existing `grouping.value_parameterized` metric). If the rate is higher than we'd like, we can consider tightening the "IP-like" regex we use for our initial match.
…tatsFilters` (#112291) getsentry/frontend-tsc#78 Replaces `useRouter` usages in `CustomerStats` & `CustomerStatsFilters`.
…ding (#112294) Stats are fetched separately from groups, so when groups are in the store but stats haven't populated yet, `count`/`userCount` are undefined. `parseInt(undefined)` returns `NaN` which propagates through the sum and renders as "NaN" in the supergroup row. Guards with `|| 0` and `?? 0` so partially-loaded groups contribute zero instead of poisoning the total. Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
This will let us control whether the wizard is available or not. If it's not available and you get there somehow then the user will get sent back to the main settings landing page The only link/redirect to get into the wizard is via the banner, so we also control whether that renders or not. The legacy settings page has a hard-coded button to it's own onboarding flow, which really should've been removed already... but since that's technically separate i'll leave it for now. we'll be able to cleanup all the onboarding specific flows at the same time, general config and onboarding are not distinct, its the same screens whether it's the first time to get going, or if you're making tweaks.
getsentry/frontend-tsc#78 Replaces `useRouter` usage in spans `SampleList` with `useNavigate`.
…L-2213) (#112286) https://linear.app/getsentry/issue/BIL-2213/set-billed-data-category-canproduct-for-trace-metrics https://linear.app/getsentry/issue/BIL-2226/set-isbilledcategory-to-true-for-installable-builds This PR adds a billed category entry for trace metric bytes. It also sets the isBilledCategory value to true for trace metric bytes.
We want to make it more obvious that the description will use markdown syntax, so this adds a `MarkdownTextArea` component which adds the "markdown supported" icon in the top right. Hopefully we can improve this component in the future to use previews and such, but this is an improvement for now.
…ilo (#112245) Remove the should_route_to_control_silo override in GithubEnterpriseRequestParser so it inherits the parent's routing, which sends installation_repositories events to control silo. We do this to make sure the webhooks for GHE will also route to the right place <!-- Describe your PR here. -->
…ag (#112285) The backend notification setting is added in #112282 — this PR handles the frontend ff gating. closes https://linear.app/getsentry/issue/BIL-2216/update-notifications-backend-for-trace-metrics-settings
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 : )