Skip to content

[pull] master from getsentry:master#1606

Merged
pull[bot] merged 72 commits intoKingDEV95:masterfrom
getsentry:master
Jan 7, 2026
Merged

[pull] master from getsentry:master#1606
pull[bot] merged 72 commits intoKingDEV95:masterfrom
getsentry:master

Conversation

@pull
Copy link
Copy Markdown

@pull pull bot commented Jan 7, 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 : )

narsaynorath and others added 30 commits January 7, 2026 16:07
Adds a getter for deriving the intended units for the metrics widgets in
the tracemetrics dataset config. Adds it to the widget viewer chart and
dashboard widgets. The result is that we have visible units in the
tooltip UI and the yAxis.

This involves setting the units object in the widget queries component
which then passes it down and we pass it along to where it needs to be
read. It seems like in other datasets we've used the aggregate name to
derive this, but I'm doing it by series name because e.g. `avg(memory)`
(probably bytes) is different from `avg(latency)` (probably ms) which is
a possibility in the future.
…105792)

## PR Details
+ Auto Open PRs will now be greyed out if Auto Trigger fixes is Off.
+ Made small changes to the name and description text too. 

Fixes ENG-6241
Makes it so the charts use the same fidelity ladder as spans and logs
since these are all EAP based.
…ta (#105810)

This should hopefully catch when the explorer.metadata analytics call
doesn't match the rendered # of logs.
…104552)

We render the bulk of our HTML via ReactPage. Right now that endpoint is
marked as `all_silo` to make integration with tests simpler. Switch
these endpoints to control as we're trying to have a minimal number of
endpoints marked as `all_silo` and I want to better understand the scope
of test failures from this change.

Refs INFRENG-238
…5806)

`GetTagValues` lived in `sentry/views/dashboards/datasetConfig/base` but
was the official type of the
`getTagValues` prop of the `SearchQueryBuilder` from
`static/app/components/searchQueryBuilder/*`.
This moves `GetTagValues` to `static/app/components/searchQueryBuilder`
and updates all callers.
This adds a new "Create Alert" drawer with a similar, slightly stripped
down alert creation form. This allows users to quickly create a new
alert for their monitor without being taken out of the experience.
<!-- 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.
#105801)

This PR fixes a bug in taskworkers that causes a stale redis lock to
prevent all tasks with the same cron schedule from running.
- When a task's schedule is shortened but an old Redis lock with a long
TTL still existed, the scheduler enters a tight loop trying to spawn the
"overdue" task, blocking all other tasks with the same schedule.
Previously, syncing with a stale value made the scheduler think the task
was hours overdue, causing remaining_seconds() to return 0. The task was
pushed back onto the heap with `remaining=0`, keeping it at the top of
the heap. Since is_due() also returned True (it recalculates from
last_run), the while loop never broke, and other tasks never got a
chance to be processed - the scheduler was in an infinite loop until the
cache entry expired, and prevent all other tasks with the same schedule
from running.
- When we can't acquire the lock, set `last_run = now` instead of the
stale Redis value. By setting `last_run = now`, the scheduler correctly
calculates the next scheduled time from the current moment, pushes the
task back with a delay of the cron schedule and breaks the loop to allow
other tasks to run.

Closes TET-1692

---------

Co-authored-by: Mark Story <mark@mark-story.com>
#105780)

Refs SENTRY-4A8H

We're seeing timeouts when generating escalating forecasts on the
postgres query. We previously decreased the iterator size from 10k to 5k
in #104662, but this didn't
improve error rates. I believe this is since the queries seem to start
timing out in the ~thousands of groups queried, so stepping through by
5k didn't affect the timeouts at all. This decreases the iterator step
size to 1k, which should result in smaller queries.
…HR (#105464)

Our legacy redirect scheme to event/issue details (from the event IDs
displayed in the Discover table) currently fails in `devserver` and
`dev-ui`. This redirect (via the `ProjectEventRedirect` component)
relies on a legacy XHR-based method (via Django returning a 302). This
PR migrates this redirect logic to a modern API-based approach using
`useApiQuery`. This logic fetches the event details (e.g. the event's
group ID) from the API using the event ID, project ID, and organization
ID. The group ID is then used to construct the issue event details link
that the user should be redirected to. The redirect should now work in
`devserver`, `dev-ui`, PR deployments, and `production`.

Before changes (`production`):
- Discover homepage:
`https://sentry.sentry.io/explore/discover/homepage/?dataset=errors&field=title&field=project&field=user.display&field=timestamp&name=All%20Errors&project=1&query=&queryDataset=error-events&sort=-timestamp&statsPeriod=7d&yAxis=count%28%29`
- Redirected to:
`https://sentry.sentry.io/issues/7091972599/events/05a2cfe07f5344868dd593739de2c726/?project=1`

After changes (`devserver`):
- Discover homepage:
`https://dev.getsentry.net:8003/organizations/sentry/explore/discover/homepage/?dataset=errors&field=title&field=project&field=user.display&field=timestamp&name=All%20Errors&project=3&query=&queryDataset=error-events&sort=-timestamp&statsPeriod=30d&yAxis=count%28%29`
- Redirected to:
`https://dev.getsentry.net:8003/organizations/sentry/issues/19/events/eeb8190e8f504bd9a069601ae192d814/?project=3&referrer=discover-events-table`

After changes (`dev-ui`):
- Discover homepage:
`https://dev.getsentry.net:7999/explore/discover/homepage/?dataset=errors&field=title&field=project&field=user.display&field=timestamp&name=All%20Errors&project=1&query=&queryDataset=error-events&sort=-timestamp&statsPeriod=7d&yAxis=count%28%29`
- Redirected to:
`https://dev.getsentry.net:7999/organizations/sentry/issues/6803546951/events/d207da09bdc9489597d7786bfbfc8ac3/?project=1&referrer=discover-events-table`
…ps (#105808)

This is the page available at `/settings/legal/`
…#105577)

## Summary

Consolidates `segmentedControl.chonk.tsx` into `segmentedControl.tsx`
and removes chonk naming prefixes.

## Changes

- Moved all content from `segmentedControl.chonk.tsx` to
`segmentedControl.tsx`
- Renamed styled components:
  - `ChonkStyledGroupWrap` → `GroupWrap`
  - `ChonkStyledSegmentWrap` → `SegmentWrap`
  - `ChonkStyledLabelWrap` → `LabelWrap`
  - `ChonkStyledVisibleLabel` → `VisibleLabel`
- Removed `export` keyword from `Priority` type (internal-only)
- Updated import to use `button/styles` instead of `button/styles.chonk`
- Deleted `segmentedControl.chonk.tsx`

## Test plan

- ✅ Linting passes
- ✅ Knip passes (no unused exports)
- ✅ No remaining chonk references (except external dependencies and
intentional DO_NOT_USE naming)
`pull_request_review` and `pull_request_review_comment` have stopped
working a while ago. This change stops the forwarding to Overwatch.
Fixes JAVASCRIPT-364G and JAVASCRIPT-363Z

`subscription.partner` is undefined when `subscription` is undefined,
which occurs sometimes for newly created orgs where the subscription has
not been instantiated yet.
Follow-up to #104611.

The old Color and Typography pages are outdated and can be removed with
the introduction of the new
[Tokens](https://sentry.sentry.io/stories/principles/tokens/) page.

This PR updates the links on the landing page, removes the outdated
stories, and removes the now unused images for those stories.
#105784)

If a workflow is being deleted, we should disregard any scheduled
attempts to evaluate it.
It's still possible for it to be deleted while we're processing since we
don't entirely do an up-front fetch, but this ensures a subsequent retry
will not have the same issue.

Addresses ISWF-819.
…5795)

I noticed that selecting an arbitrary period in the auditLog list works,
but displays `Invalid Period` after selection. The filtering itself
always worked because `statsPeriod` is correctly written to the url in
any case.

before:


https://github.com/user-attachments/assets/d4967fae-34ec-4f5e-bf7d-d40268351835

after:


https://github.com/user-attachments/assets/927f92c8-bf6b-4297-88df-2a7bec2784d3
Fixes back navigation when a user is viewing a metric issue, clicks to
view monitor details, and wants to return to the metric issue. Cursor
actually caught this
[here](https://github.com/getsentry/sentry/pull/100577/files#r2389538614)
We're going to be removing this type from the codebase, these are some
easy instances to cleanup
… functions (#105692)

Extract result processing and backfill creation logic from
handle_result() into two standalone module-level functions, so that
they’re more easily shared with our retry task.

First step to adding in retries for results that are received out of
order.
…5781)

uses the in-memory test router instead of our custom mocks

---------

Co-authored-by: George Gritsouk <989898+gggritso@users.noreply.github.com>
…105785)

Uses the in-memory test router instead of the manual mocks. The
advantages are clear for these tests as you no longer need to manually
rerender the component to emulate when query parameters change since
they now change as they would in the browser.

Deleted one test that doesn't seem to be true and was passing because it
was checking the wrong thing. `does not allow sorting by transaction
name when widget is using metrics` there doesn't seem to be anything
stopping the sorting.
gggritso and others added 25 commits January 7, 2026 14:35
I added placeholder dashboard configurations a few weeks ago, but
they're empty. This PR adds the widget configurations so the dashboards
actually have widgets in them. This is a best-effort match against the
current Mobile Vitals insights so _many_ things are incorrect/missing.
This is meant to be a starting point for a full audit of what's needed
for full support.

**e.g.,**

<img width="1429" height="1018" alt="Screenshot 2026-01-06 at 5 00
10 PM"
src="https://github.com/user-attachments/assets/78e45cde-917f-4d82-9687-531a05028c92"
/>
Closes [AIML-2173: Add UI analytics
(amplitude)](https://linear.app/getsentry/issue/AIML-2173/add-ui-analytics-amplitude)

Todo: call useReferrer in one place and pass to components, to avoid
multiple effects

- centralizes existing seer events in a new file (shouldn't affect them)
- make a stable util to get the current route string, e.g.
`/issues/:groupId/` for these events:

**Segmented by referrer**
panel opened
chat sent
new session started
tool link clicked (includes tool.kind)

**Segmented by "surface" (eg global_panel, to differentiate from other
features like dynamic grouping)**
chat sent
new session started

**Global panel specific**
panel opened
tool link clicked

**No params**
rethink requested
copied to clipboard
copied link to chat
There are several equations that have no units (all percentage based
ones in this case), this PR allows us to define units for prebuilt
dashboards. Eventually we could make this a field in the db, and allow
it to be clone able/user customizable.

There's some wacky stuff I had to do to get the units working for line
charts that have a groupby, the series name isn't the equation name in
that case, it's the group name. So there's no easy way to map between
the two. Please let me know if you have any better suggestions here.

<img width="541" height="236" alt="image"
src="https://github.com/user-attachments/assets/51e96be0-e9af-4fa8-9678-a41148799973"
/>
<img width="434" height="474" alt="image"
src="https://github.com/user-attachments/assets/f986bd7e-8c54-4508-ad3c-689dc37bd036"
/>
<img width="454" height="241" alt="image"
src="https://github.com/user-attachments/assets/b455a7ce-bc23-4038-8510-5870bc773395"
/>
The only usage was passing the default values...
when ff off, panel renders as null but noticed this request is still
being made by useExplorerMenu
There is a mix of Icons that were used on bespoke backgrounds and thus
using the white color variant. Since "white" is not an official variant,
I'm moving these to styled(Icon) and passing the color prop directly. In
the future, we will want to entirely avoid this pattern by using the
right design system primitives for either buttons or icons.
#105829)

In our grouping algorithm, certain stacktraces are considered too low quality to use, among them certain single-frame JavaScript stacks which contain code from unnamed functions[1]. When we find such a stack, we set the frame component to be non-contributing, with a hint explaining why. However, this step is skipped if the frame is already marked as `contributes: False`.

On the one hand, this makes sense: Why bother to mark a frame as ignored if it's already being ignored? On the other hand, skipping this step means we also skip adding the hint. This PR therefore removes the `contributes` check in the relevant `if` statement, so that we're not only ignoring the frame, we're ignoring the frame and also explaining why.


[1] Specifically, we ignore such stacks if their single frame comes from a file whose `abs_path` is something other than a URL. Or at least, that's what we intend to do. In practice, this check is implemented backwards, something which will be fixed in the upcoming new grouping config. But the fact that it's currently backwards explains how one of the snapshots affected by this change can contain a frame component which says it's for a non-URL frame even though its child filename component says it does in fact come from a URL. This has been wrong for a long time, it's just much more obvious now that this PR includes the hint in the grouping info.
Quick fix for broken link when trying to create an alert from an
insights chart or from explore.

If we add a trailing slash
to`${makeMonitorCreatePathname(organization.slug)}settings` results in
the final url being `monitors/new/settings/organization/` instead of
`monitors/new/settings/`

This seems to be do to a regex in `normalizeUrl` which replaces
`/settings/` with `/settings/organization`
https://github.com/getsentry/sentry/blob/309a2c69be51ba9359d15526d905ff3107235d22/static/app/utils/url/normalizeUrl.tsx#L10-L13

This is just a quick fix to put up before we figure out if it's safe to
modify the regex
This allows structured search over 'builds' (PreprodArtifacts). Start
with
handling only `app_id` (and two aliases `package_name` for Android and
`bundle_id` for iOS).
We can add more fields in follow ups. Long term hopefully this can
replace both of the other
'list-build' endpoints however I don't want to break them while this is
under construction.

---------

Co-authored-by: getsantry[bot] <66042841+getsantry[bot]@users.noreply.github.com>
…05782)

Add logic to detect and queue out-of-order uptime results for retry
processing instead of immediately creating backfill misses.

We keep this functionality behind a feature flag so that we can try it
out first.

<!-- Describe your PR here. -->
)

This PR introduces the concept of `SeerOperator` and `SeerEntrypoints`.
The Operator and Entrypoint will work in tandem to allow triggering and
issuing updates to external services during a seer workflow (in this
case, an autofix run).

- The **SeerOperator** handles all of the interfacing with seer and does
not care or know about what service the entrypoint is talking to.
- It connects to a registry of entrypoints, and when autofix updates
come through, will signal to those registrants if they've previously
interacted with a run.
- It also determines what is needed from a third party signal (i.e.
Slack Webhook) to trigger a seer workflow (for example, an organization,
user, and group for autofix).
- This will ensure any more entrypoints that get added later on (for
example, Discord, MS Teams, or even non-chat integrations like GitHub
comments) will also trigger the same workflows with the same
signatures/contract
- The **SeerEntrypoint** is a protocol for that handles all of the
interfacing with a specific provider, for example Slack.
- In practice, specifying callbacks like `on_trigger_autofix_error` and
`on_trigger_autofix_success`, the dev can create provider-specific
workflows depending on what capabilities the platform actually has. For
example, if in slack, maybe we send an ephemeral message to indicate we
started a run, for github comments, maybe we just react.
- You then implement `create_autofix_cache_payload`, which will be
passed back to your `on_autofix_update` method when Seer issues a
webhook. **This is critical to back and forth interactions since we
cannot do polling in Slack** (for example).

In this PR, I've only implemented the entrypoint protocol, the actual
slack entrypoint will come in a follow up. The operator is all there
though, tests and all 👍
)

- removes "Request access" in menu when that is not true
- fixes button placement and switches to compact select
- add basic test

before

<img width="1266" height="704" alt="image"
src="https://github.com/user-attachments/assets/5c4e62d9-4a4f-4c83-a8dc-db7ee44ce362"
/>


after

<img width="781" height="370" alt="image"
src="https://github.com/user-attachments/assets/f230f68b-e8e9-4076-8a48-24619c301100"
/>
…ing (#105674)"

This reverts commit b0c413d.

Co-authored-by: cathteng <70817427+cathteng@users.noreply.github.com>
In our grouping algorithm, one of our checks for whether or not to use a given stacktrace is implemented backwards: We claim to ignore a frame if its `abs_path` isn't a URL, but then only actually do that if its `abs_path` is in fact a URL. 

This will be fixed in the upcoming new grouping config, but in the process of making that change, it became clear that some of our relevant tests are quite hard to reason about. Specifically, we have two grouping snapshot inputs called `frame_ignores_module_if_page_url` and `frame_ignores_module_if_page_url-2`, which have a few problems:

  - `frame_ignores_module_if_page_url` doesn't illustrate what it says it does at all, in that the module isn't in fact ignored. What it does turn out to illustrate is the URL/non-URL frame ignoring bug discussed above.

  - `frame_ignores_module_if_page_url-2` does illustrate the module ignoring, but a) its title isn't as clear as it might be, b) it includes a function component, which muddies the waters in terms of what's ignored or not, and c) though it doesn't currently illustrate the URL/non-URL frame ignoring behavior which was previously discussed, once the bug is fixed it will, which will be another thing adding mud to the aforementioned proverbial water.

To fix these problems, this PR adds three new inputs: one to illustrate the module ignoring (and only the module ignoring), and one each to illustrate the URL and non-URL frame ignoring cases, respectively. This should make it easier to see the effects of the bug fix, as only the latter two inputs should be affected. 

(A follow-up PR will remove the bad inputs. Doing both in a single PR was confusing GitHub, making it think that things had been renamed and slightly modified rather than replaced.)
This is a follow-up to #105843, which aimed to replace some confusing grouping test inputs with clearer ones. When that PR included both adding the new inputs and removing the old ones, GitHub erroneously detected file renames rather than replacements. That PR was therefore restricted to the file addition half of the process, with the file removal half included here.
@pull pull bot locked and limited conversation to collaborators Jan 7, 2026
@pull pull bot added the ⤵️ pull label Jan 7, 2026
@pull pull bot merged commit 0f73e50 into KingDEV95:master Jan 7, 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 Jan 7, 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.