Skip to content

[pull] master from getsentry:master#1847

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

[pull] master from getsentry:master#1847
pull[bot] merged 80 commits into
KingDEV95:masterfrom
getsentry:master

Conversation

@pull
Copy link
Copy Markdown

@pull pull Bot commented Apr 2, 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 : )

chromy and others added 30 commits April 2, 2026 16:56
Remove the hardcoded `snapshots` field from the preprod retention
endpoint response.

We don't use snapshots from launchpad so there's no need to expose
retention for them from this endpoint.


Agent transcript:
https://claudescope.sentry.dev/share/G4IesPU-uYwagotQ6onn2g5xtr8VOAkKk4do_ZRFGJg
…line (#111996)

Adds the GitHub-specific pipeline step components (OAuth login and
organization selection) and registers the GitHub integration pipeline
definition in the frontend registry.

Refs VDY-38

Typical install flow


https://github.com/user-attachments/assets/e05fe79c-aa7a-4d12-847b-e7b4aab96c8e

Installing for a org with an already integrated github app


https://github.com/user-attachments/assets/250e0982-1ba3-440d-af92-9e59cee76ecc
…12049)

Follow-up to #109783

---------

Co-authored-by: getsantry[bot] <66042841+getsantry[bot]@users.noreply.github.com>
Updates `plugin/boundaries` config for v6 following the official
[migration
guide](https://www.jsboundaries.dev/docs/releases/migration-guides/v5-to-v6/)
Give `PerformanceScoreRingTooltip` the standard tooltip z-index.
Otherwise it floats under other elements.
This PR cleans up an old flow experiment we tried out, but didn't end up
sticking with.

---------

Co-authored-by: Claude Sonnet 4 <noreply@anthropic.com>
This PR fixes up the issue where we don't have raw-search replacement
working properly on the cross-event search bars, so users were getting a
broken experience.

Ticket: EXP-854

Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
… rerun (#112084)

## Summary
Two changes to the snapshot header actions menu:

1. **Admin "Re-run comparison"** now calls the `recompare` endpoint
instead of
`rerun-status-checks`. This actually re-runs the full image diff
pipeline
   (and automatically re-posts the GitHub status check when complete).

2. **New user-facing "Rerun Status Checks"** menu item lets regular
users
re-post the GitHub status check without needing admin access or
re-running
   the full image diff.

## Test plan
- Verify "Rerun Status Checks" is visible to all users and calls
`rerun-status-checks` with `check_types: ['snapshots']`
- Verify "Re-run comparison" is only visible to Sentry employees and
calls the `recompare` endpoint
- Confirm the snapshot comparison is re-run with fresh image diffs when
using the admin action

Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
…ploy previews (#112108)

Skip `CompressionPlugin` for Vercel deploy previews. The `.gz` files are
generated for nginx's `gzip_static` module which Vercel doesn't use — it
compresses responses at the edge instead.

Also adds `Cache-Control: public, max-age=31536000, immutable` headers
for content-hashed assets (`chunks/` and `assets/` directories) served
from deploy previews.

saves maybe 10 seconds on build

Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
Co-Authored-By: bmckerry <110857332+bmckerry@users.noreply.github.com>

Co-authored-by: getsentry-bot <10587625+getsentry-bot@users.noreply.github.com>
Co-authored-by: bmckerry <110857332+bmckerry@users.noreply.github.com>
…ject scoped one (#111933)

In #110285 we created a project
scoped version of the `OrganizationDetectorIndex` `POST` method and this
PR updates the front end usage of it so we can move towards removing it.
depends on getsentry/getsentry#19727

Replaces Download Project Breakdown button with dropdown to select
single project

<img width="498" height="210" alt="Screenshot 2026-04-01 at 2 05 23 PM"
src="https://github.com/user-attachments/assets/c7621522-b086-4560-a55e-0c1188df8306"
/>
Replace usage of multiple issue alert rule backwards compatible endpoint
flags with a single one.

Don't merge until
getsentry/sentry-options-automator#7070 is
merged.
the old and new names are currently both set to the same value

SENTRY_REGION and SENTRY_REGION_CONFIG will be removed as a follow up
## Summary
- Adds `organizations:issue-summary-experimental` feature flag
(Flagpole-controlled) to run an A/B experiment on issue summary input
- When enabled, the regular summary call is tagged as `"control"` and a
second call is made to Seer with **breadcrumbs and trace removed**,
tagged as `"experimental"`
- The experimental call does not affect the persisted summary — only the
control result is cached/returned
- Seer-side changes in companion PR:
getsentry/seer#5611

## Test plan
- [x] Tests added for experiment flag calling Seer twice (control +
experimental)
- [x] Tests added for experiment flag off only making one call
- [x] Tests added for experimental call failure not affecting regular
flow
+ Add page_name field to the explorer chat request payload so Seer can
track which UI page the user was on when sending a message. The value is
the normalized route string from React Router (e.g.,
/organizations/:orgSlug/issues/:groupId/).

+ This completes the Sentry side of the on_page_context token tracking
work — Seer already accepts and processes this field.

+ Backend changes only. different PR for frontend changes

Co-authored-by: Claude Sonnet 4 <noreply@anthropic.com>
…112069)

This flag is still in use, but using an old deprecated rollout handler
that I'd like to remove. Setting this to flagpole allows us to still
fall back to the old handler until we roll out the options in
`sentry-options-automator` and remove the old handler.

Related to #111267, which I'll
likely close
…agpole (#112077)

We want to keep this feature around for the moment even though it has
been in EA for a long time. Migrating it to flagpole so that we can
remove a deprecated handler.

Automator PR here:
getsentry/sentry-options-automator#7071
This reverts commit 2c44e5b.

Co-authored-by: natemoo-re <7118177+natemoo-re@users.noreply.github.com>
…112057)

Publish documentation for the project based detector creation endpoint
and unpublish the organization based one.
Replace `apply_async` calls with direct synchronous invocations for
preprod
status check tasks in the approval endpoint and GitHub check run webhook
handler.

This ensures status checks run inline rather than being dispatched to
the Celery
task queue, giving immediate feedback on approval actions.

[sentry URL for tracking the latency of our status check
tasks](https://sentry.sentry.io/explore/traces/?aggregateField=%7B%22groupBy%22%3A%22transaction%22%7D&aggregateField=%7B%22yAxes%22%3A%5B%22avg%28span.duration%29%22%2C%22p95%28span.duration%29%22%2C%22count%28%29%22%5D%7D&mode=aggregate&project=1&query=is_transaction%3Atrue%20%28transaction%3A%22sentry.preprod.tasks.create_preprod_status_check%22%20OR%20transaction%3A%22sentry.preprod.tasks.create_preprod_snapshot_status_check%22%20%29&sort=-p95%28span.duration%29&statsPeriod=7d&table=span)

---------

Co-authored-by: Claude Opus 4.6 <noreply@example.com>
Finishes implementing the new monitor form design. 

- Adds step numbers to each section
- Combines ownership and description into the same section
- Adds some new descriptions
… for detector creation (#112060)

Update the `data_sources` docs in
https://docs.sentry.io/api/monitors/create-a-monitor-for-a-project/ to
add more detail, mostly related to aggregates and custom metrics, based
on the documentation in
https://docs.sentry.io/api/alerts/create-a-metric-alert-rule-for-an-organization/
…endpoint (#112129)

The snapshot GET endpoint (`preprod_artifact_snapshot.py`) was querying
`User.objects.filter()` directly to resolve approver info. Since `User`
is
a control silo model and this is a cell silo endpoint, this raises
`SiloLimit.AvailabilityError` in production when running in REGION mode.

Replaces the direct ORM query with `user_service.get_many_by_id()` — the
standard RPC service for cross-silo user resolution. `RpcUser` exposes
the
same `get_display_name()`, `.email`, and `.username` API so no other
changes are needed.

Also removes the now-resolved TODO comment in the approve endpoint that
referenced this issue.

Fixes SENTRY-5MQ6

Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
make the "activities" prop required instead of optional, clean up old
feature flag now ga
evanpurkhiser and others added 6 commits April 2, 2026 17:12
This fixes an edge case where the trampoline may be passing through a
`source` key from the query string, but we would have overwritten it.
Flattens the groups and enables searching in each section as opposed to
pushing search results into search results group

---------

Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-authored-by: getsantry[bot] <66042841+getsantry[bot]@users.noreply.github.com>
#112116)

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

S016 only caught `from concurrent.futures import ThreadPoolExecutor`
(the `ImportFrom` AST node). Writing `import concurrent.futures` then
using `concurrent.futures.ThreadPoolExecutor(...)` bypassed the rule
entirely.

This adds a check in `visit_Attribute` that matches when the attribute
chain is exactly `concurrent.futures.ThreadPoolExecutor` — catches both
calls and bare references, without flagging other `concurrent.futures.*`
usage like `as_completed` or `Future`.

Also fixes the one existing violation in
`src/sentry/build/_integration_docs.py`.

Stacks on #112156.

Co-authored-by: Claude Sonnet 4 <noreply@anthropic.com>
- OrganizationSerializer → OrganizationSummarySerializer (summary/list
view)
- DetailedOrganizationSerializer → OrganizationSerializer (standard
view)
- DetailedOrganizationSerializerWithProjectsAndTeams →
OrganizationWithProjectsAndTeamsSerializer
…race (#111965)

The copy-as-text dropdown in the new stack trace was missing the
exception type and value line (e.g. `ValueError: list index out of
range`) from the copied output.

The raw view correctly passed `exception` and `isMinified` to
`rawStacktraceContent`, but the `copyItems` text callback did not, so
the exception header was silently dropped. Users copying a JavaScript
stack trace like:

```
at getAttribute (../node_modules/.pnpm/echarts@6.0.0/.../model.js:639:10)
at getInstanceByDom (...)
```

would get only the frames with no `TypeError: ...` header at the top.

Adds tests that explicitly assert the exception type/value appears in
the copied text for both single and chained exception cases.

---------

Co-authored-by: Claude Sonnet 4.6 <noreply@example.com>
@pull pull Bot locked and limited conversation to collaborators Apr 2, 2026
@pull pull Bot added the ⤵️ pull label Apr 2, 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 2, 2026
Christinarlong and others added 19 commits April 2, 2026 21:57
…csSource prop (#112083)

Removes all `*.ai_query*` analytics event definitions, their
`trackAnalytics` call sites, and the `analyticsSource` prop that existed
solely to fire them. These are migrated to `ai_query.*` with an `area`
prop in https://github.com/getsentry/sentry/pull/112029/changes
…pass full preference to autofix request (#111966)

fixes CW-1130
relates to CW-1007

depends on getsentry/seer#5583

As part of the [Seer settings migration to Sentry
DB](https://www.notion.so/sentry/Tech-Spec-Migrate-Seer-Settings-to-Sentry-Database-3208b10e4b5d80f58ea0d7b77a301e2a),
in this PR we replace Seer's preference existence check and preference
creation from code mappings, and move it to Sentry. This enables us to
dual-write to Sentry DB. Then we pass the created preference to the
autofix request payload.
In safari, the "add integration" button was failing to link to the
integrations page because you can't focus on <a> elements so the
dropdown was closing before the page was routing. Ran this locally and
it fixed the issue without changing anything else (we don't see close
because page redirects)
this now controls the maxlength of the cell in the db, so it should be
named more appropriately
region is no more, update agent skills with new terminology and python
references
… calling into the platform (#112160)"

This reverts commit e047451.

Co-authored-by: Christinarlong <60594860+Christinarlong@users.noreply.github.com>
Add the foundational `ViewerContext` module
(`src/sentry/viewer_context.py`) for unified caller identity tracking
across all Sentry entrypoints.

Today Sentry has no single way to know "who is making this request" deep
in the call stack. API requests use a threadlocal `env.request`, but
tasks, consumers, and RPC paths can't access it. Code that needs viewer
identity bifurcates based on execution context. The `ViewerContext`
flips that — one API, all entrypoints.

This PR introduces:
- **`ViewerContext`** — a frozen dataclass holding `organization_id`,
`user_id`, `actor_type` (StrEnum), and an optional `AuthenticatedToken`.
Frozen to ensure safe shallow copies when `copy_context()` propagates
across threads.
- **`ActorType`** — a `StrEnum` (`user`, `system`, `integration`) that
serializes naturally to/from strings for task headers and RPC payloads.
- **`viewer_context_scope()`** — a context manager that sets the
`ContextVar` on entry and `reset(token)`s on exit, guaranteeing cleanup
even on exceptions. This is the only way to set the var.
- **`get_viewer_context()`** — accessor returning `None` when no scope
is active.

Tests cover: defaults, immutability, scope lifecycle, nested scopes,
exception cleanup, raw `copy_context()` thread propagation,
`ContextPropagatingThreadPoolExecutor` propagation, and cross-submission
leak prevention.

This is Phase 1 of the [Unified ViewerContext
RFC](https://www.notion.so/sentry/RFC-Unified-ViewerContext-via-ContextVar-32f8b10e4b5d81988625cb5787035e02).
Next steps are wiring entrypoints (middleware, tasks, consumers, RPC)
and migrating downstream callers off `SeerViewerContext`.

---------

Co-authored-by: Claude Sonnet 4 <noreply@anthropic.com>
…ELL (#112148)

this updates the enum name in line with the proper cell naming
conventions,

the enum value is unchanged since it's already stored in the db
)

We are [no longer
using](#111933) the org scoped
detector creation endpoint in favor of the project scoped one so we can
remove the code. I copied over one test that was missing in the project
scoped endpoint.

Not to be merged until #112057
is merged.
These are now unused in favor of a single
`workflow-engine-issue-alert-endpoints-get` flag.

To be merged after #112072 and
getsentry/sentry-options-automator#7072 are
deployed
Steps can only be set = tool call names [in the
backend](https://github.com/getsentry/seer/blob/main/src/seer/automation/assisted_query/assisted_query_agent.py#L78-L84).
Most of the steps in this STEP_LABELS dict are not real tools. Keeping
them for now in case there's something I missed, but pretty sure they're
not used

<img width="288" height="205" alt="Screenshot 2026-04-02 at 3 00 12 PM"
src="https://github.com/user-attachments/assets/496058bb-bbdb-49b2-919a-9ca7e604a91c"
/>
Add a `display=snapshot` filter option to the builds endpoint.

The existing `display` parameter supports `size` and `distribution`
values, which filter to builds **without** snapshot metrics. This adds
the inverse — `display=snapshot` filters to builds that **have**
snapshot metrics attached (`preprodsnapshotmetrics__isnull=False`),
enabling the frontend to fetch only snapshot-relevant builds.
re-use `get_repo_and_projects`

need this map for bug pred to pass as part of `user_org_context` in
getsentry/seer#5592
… analyticsSource prop" (#112184)

Reverts #112083
Keeping this for a few weeks for smooth migration from old dashboard
(owned by Dhrumil) to a new one
Add a Django middleware that sets `ViewerContext` on every HTTP request,
positioned immediately after `AuthenticationMiddleware` in the stack.

After auth runs, `request.user` and `request.auth` are populated. The
middleware reads them to construct a `ViewerContext` with `user_id`,
`organization_id` (from org-scoped tokens), `actor_type`, and the
`AuthenticatedToken` — then wraps the rest of the request lifecycle in
`viewer_context_scope()`. Downstream code can call
`get_viewer_context()` at any depth without needing the request object.

The middleware follows the same functional pattern as
`SentryEnvMiddleware` — a closure wrapping `get_response(request)` in a
context manager.

Tests cover:
- Anonymous requests (no user, no token)
- Session-authenticated users (user_id set, no token)
- Token-authenticated users (user_id + organization_id + token)
- Org-scoped tokens without a user
- Tokens without an organization
- Context is available during request processing
- Context is cleaned up after normal completion
- Context is cleaned up on exceptions

This is Phase 2 of the [Unified ViewerContext
RFC](https://www.notion.so/sentry/RFC-Unified-ViewerContext-via-ContextVar-32f8b10e4b5d81988625cb5787035e02)
— the first entrypoint instrumented.

Stacks on #112156.

Co-authored-by: Claude Sonnet 4 <noreply@anthropic.com>
@pull pull Bot merged commit 67bc454 into KingDEV95:master Apr 3, 2026
1 of 4 checks passed
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.