[pull] master from getsentry:master#1847
Merged
Merged
Conversation
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
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>
blocked by #112039 adds an indeterminate loader to our design system and hooks it up to our button ## [`IndeterminateLoader`](https://sentry-git-scraps-loader.sentry.dev/stories/core/loader/) https://github.com/user-attachments/assets/312c1d5a-f4ef-4d80-9844-611529502a1d ## [`<Button busy>`](https://sentry-git-scraps-loader.sentry.dev/stories/core/button/#busy-buttons) https://github.com/user-attachments/assets/29b8c3b6-c1f9-4dc1-95df-bc439df99a96 --------- Co-authored-by: Cursor Agent <cursoragent@cursor.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>
…etectorSerializer (#112071) Avoids yet another N+1.
These lint rules are only used with sentry, add them locally. originally they were in this repo https://github.com/getsentry/eslint-config-sentry/tree/master/packages/eslint-plugin-sentry
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
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>
… into the platform (#112160)
no one owns apis separately
…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
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
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
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>
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 : )