Skip to content

[pull] master from getsentry:master#1851

Merged
pull[bot] merged 37 commits into
KingDEV95:masterfrom
getsentry:master
Apr 6, 2026
Merged

[pull] master from getsentry:master#1851
pull[bot] merged 37 commits into
KingDEV95:masterfrom
getsentry:master

Conversation

@pull
Copy link
Copy Markdown

@pull pull Bot commented Apr 6, 2026

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 : )

mrduncan and others added 30 commits April 6, 2026 16:16
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).
…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`.
scttcper and others added 7 commits April 6, 2026 14:20
…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`.
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. -->
@pull pull Bot locked and limited conversation to collaborators Apr 6, 2026
@pull pull Bot added the ⤵️ pull label Apr 6, 2026
@pull pull Bot merged commit d6d1381 into KingDEV95:master Apr 6, 2026
@github-actions github-actions Bot added Scope: Frontend Automatically applied to PRs that change frontend components Scope: Backend Automatically applied to PRs that change backend components labels Apr 6, 2026
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

⤵️ pull Scope: Backend Automatically applied to PRs that change backend components Scope: Frontend Automatically applied to PRs that change frontend components

Projects

None yet

Development

Successfully merging this pull request may close these issues.