[pull] master from getsentry:master#2000
Merged
Merged
Conversation
…6112) ## Summary - Inlined the abstract `PluginComponentBase` class directly into its only two consumers: `PluginSettings` and `IssueActions` - Both classes now extend `Component` directly with all base class logic (state management, save/load lifecycle, `renderField`, API client) copied in - Deleted `static/app/plugins/pluginComponentBase.tsx` ## Test plan - [x] TypeScript typecheck passes (`pnpm run typecheck`) - [x] Existing plugin tests pass (`pluginConfig.spec.tsx`, `pluginDetailedView.spec.tsx`) - [x] ESLint passes Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
Register `organizations:issue-stream-recommended-sort` as a temporary feature flag with `api_expose=True` so the frontend can check it. This enables per-org enablement via FlagPole for the experimental recommended sort added in #111043. The flag will be used to gate showing "Recommended" in the issue stream sort dropdown for orgs that opt in. No behavioral changes — just the flag registration. fixes https://linear.app/getsentry/issue/ID-1566/add-feature-flag-for-sort-option
…bject types (#116183) `GroupSearchViewPermission.has_object_permission` returned `True` for unrecognized object types (the fallback at the end of the method), granting access by default. Changed the fallback to return `False` so unknown object types are denied Fixes ID-1562
…116184) `GroupEventJsonView` checked org-level `event:read` scope via `OrganizationView` but did not verify the user has access to the resolved group's project. In orgs with closed membership (team-based access), a user on team A could read raw event JSON (PII, stacktraces, request bodies) from any project by guessing group IDs. Added `request.access.has_project_access(group.project)` check after resolving the group, returning 404 on denial (consistent with the existing cross-org pattern) Fixes ID-1563 Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
Refactors the `flush_segments` to be an orchestration function with unit testable helpers: - `_load_flush_candidates`: loading ready flush candidates from queue shards - `_acquire_locks_for_flush_candidates`: acquiring per-segment flush locks - `_load_segment_data`: loading payload keys and payload bytes - `_build_flushed_segments`: building producer-ready `FlushedSegment` objects - `_record_segment_loss_metrics`: recording segment loss / expiration metrics Also adds/moves datamodels (`FlushCandidate`, `FlushedSegment`, `OutputSpan`) into `buffer_types.py` alongside the existing span buffer value types.
Add in org id to projects filter, and add a regression test. Closes BROWSE-519 --------- Co-authored-by: Claude Opus 4 <noreply@anthropic.com>
…116187) This PR adds in a missing check in the `DiscoverSavedQueryVisitEndpoint` endpoint. Closes BROWSE-518 Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
## Summary - Fixes a bug where pasting text into the search bar and clicking "Ask AI" would double the query text (e.g. "show me errors" → "show me errors show me errors") - Root cause: when the entire query is free text, the `initialSeerQuery` builder filters it out, falls back to the unfiltered query, then appends `inputValue` again - Adds `!inputValue` guard to the fallback branch in 4 strategy wrappers (Logs, Spans, Metrics, Discover Issues), matching the fix already present in `issueList/issueListSeerComboBox.tsx` Fixes AIML-2875 ## Test plan - [x] Existing `askSeerComboBox.spec.tsx` tests pass - [x] Lint passes on all changed files - [x] Manual: paste a natural language query into Logs/Spans/Metrics search bar → click Ask AI → query text should appear once, not doubled - [x] Manual: existing filter + pasted free text (e.g. `browser.name:Firefox` + paste "show me errors") → Ask AI shows `browser.name:Firefox show me errors` Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
If a user searches an issue short-id directly, we move them to the issue details page. However, if the user inputted the short id + any filters, we wouldn't match on that. Match short ids in those cases by scanning every query parameter. Co-authored-by: Claude <noreply@anthropic.com>
…ram (#116186) Adds `RECOMMENDED` to the `IssueSortOptions` enum with a "Recommended" label and tooltip. The option **only appears** in the sort dropdown when `?sort=recommended` is already in the URL query param. before: <img width="249" height="57" alt="Screenshot 2026-05-26 at 10 51 20 AM" src="https://github.com/user-attachments/assets/4f5a9f7f-c252-4090-8078-362ec6d2e0f6" /> after: <img width="310" height="64" alt="Screenshot 2026-05-26 at 10 51 01 AM" src="https://github.com/user-attachments/assets/63bb5152-7727-4c84-b478-a0e38e50c658" /> fixes https://linear.app/getsentry/issue/ID-1567/fix-none-dropdown-for-sort
…116194) fix STREAM-1041 Remove the profiles consumer from sentry devserver (that cannot be supported, up to devinfra to make that happen with their own devservices stuff), and introduce a new taskbroker + worker instance to replace it. Taskbroker eventually will get a way to read from many topics, which would eliminate these extra containers entirely. Next steps are to roll this out to s4s2, then to prod, and finally remove the ingest-profiles consumer from code.
…re list (#116070) Resolves [ENG-6461](https://linear.app/getsentry/issue/ENG-6461/remove-testssentryissuestest-utils-from-ignore-list). Fixes the `mypy` errors in `tests/sentry/issues/test_utils.py`.
Adds a cleanup task to evict `NotificationMessage` rows older than 90 days.
We were previously using the ingest-errors queue by mistake — switch to post process
…115946) This makes some clarifying changes to the `SafeRolloutComparator` utility, based on my experience getting oriented to using it. No behavioral changes. - Rename the internal option-name-generation methods to make it clearer a) that "eval" means "run the experimental code" and b) what is being block- or allowlisted per callsite (either running the experiment or using the results of the experiment). - Expand the example code in the docstring. - Tweak docstrings and comments for various methods. - Rename a few other variables. - Remove TODOs about creating a dashboard, since that's been done. - Consolidate imports. - Create constants for option names in tests, just to cut down on verbosity.
) While working on #116059, I noticed that some of our API parameters are marked as UUID, when they actually accept hex id values, so are technically non-comforming. Adjust the OpenAPI spec to indicate this, and add a hint that these parameters are hex ids. I considered using a more holistic solution by making a new `OpenAPIParameter`, but decided against it for now, since these cases are rather limited. If we find that we keep needing to use this form of hex parameter, we can reconsider Co-authored-by: Claude <noreply@anthropic.com>
Remove the `AlertRuleSerializer` and `IncidentSerializer` (the actual serializer serializers, as opposed to the validator serializers) as they are no longer in use - only places they were "used" is for API responses (they're unpublished) and a debug email view. A follow up will clean up the responses e.g. `AlertRuleSerializerResponse` as there are many imports and this PR is already large.
This endpoint change will address the feedback we've gotten that alert
triggers are more useful when sorted by recent triggers rather than
largest count.
Adds a `sort` query parameter to the group-history endpoint so that the
frontend can modify the sorts. This also changes the default sort to
`('-last_triggered', '-count')` rather than the current `('-count',
'-last_triggered')`.
This supports multiple sorts and ascending/descending, so the frontend
can implement sortable table headers.
…m mypy ignore list (#116199) Resolves [ENG-6460](https://linear.app/getsentry/issue/ENG-6460/remove-testssentryapihelperstest-group-index-from-ignore-list). Fixes the `mypy` errors in `tests.sentry.api.helpers.test_group_index`.
Dev-only flag registered Oct 2025, never rolled out to customers. Remove the flag registration and the unreleased gated code paths.
Legacy seer orgs are not required to setup the github integration
Promotes GET /api/0/projects/{org}/{proj}/events/{event_id}/ from
EXPERIMENTAL to PUBLIC.
Removes the legacy api-docs/paths/events/project-event-details.json
since the spec is now generated from the endpoint code. There are some
differences in the serializer response vs the legacy code, most notably
some fields that appear on only error events are now marked as optional
(since they don't appear on transactions).
Co-authored-by: Claude <noreply@anthropic.com>
…5627) Switches: * Route path: `explore/profiling/` to `explore/profiles/` with a `<Redirect>` * Page title: `Profiling` to `Profiles` <table> <thead> <tr> <th>Before</th> <th>After</th> </tr> </thead> <tbody> <tr> <td> <img width="606" height="356" alt="image" src="https://github.com/user-attachments/assets/60e16e5e-c8a0-432a-8ab4-dfefe75a7e3a" /> </td> <td> <img width="606" height="356" alt="image" src="https://github.com/user-attachments/assets/6ac60ac1-2f0a-4d8c-abb1-78eaded8d221" /> </td> </tr> </tbody> </table> Note that user-facing docs like https://docs.sentry.io/product/explore/profiling still say "Profiling". Starts on EXP-955. Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
…116140) removes the `seer-slack-workflows` and `seer-slack-explorer` feature flags, releasing both to everyone. all gating logic, flag registrations, and related tests have been cleaned up.
…es (#116045) + Register /explore/replays/ and /explore/replays/:replaySlug/ in STRUCTURED_CONTEXT_ROUTES so Seer receives structured JSON context instead of an ASCII screenshot fallback on these pages. + The replay list page provides search query, sort order, date range, and dead/rage click widget visibility. The replay detail page provides replay metadata including user, browser, OS, duration, error and click counts, environment, and platform. --------- Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
Rename `tools.mypy_helpers.sort_stronger_modules` to `tools.mypy_helpers.sort_weaklist` so the module name matches the pre-commit hook id (`sort-mypy-weaklist`) and the rest of the weaklist tooling (`check_stronglist`, `prevent_weaklist_additions`). **Backwards-compatible shim** The old module path stays as a 4-line re-export so getsentry's [`.pre-commit-config.yaml`](https://github.com/getsentry/getsentry/blob/master/.pre-commit-config.yaml), which still calls `python3 -m tools.mypy_helpers.sort_stronger_modules`, keeps working. A follow-up PR will delete the shim once getsentry has been updated to call `sort_weaklist`. Made with [Cursor](https://cursor.com) Co-authored-by: Cursor <cursoragent@cursor.com>
…am (#116079) Add per-batch and lifecycle logging to the streaming ZIP download endpoint to diagnose why 40K-image snapshot downloads fail with HTTP/2 stream errors after ~20-25 seconds. The streaming generator currently has zero observability — the Django span closes in ~1s (before the generator runs), and when the stream dies externally, nothing is logged. We need to see: - How many batches/images are processed before the stream dies - Whether there are long gaps between yielded chunks (idle timeout?) - Fetch latency distribution from objectstore (slow reads?) - Memory usage over time (OOM kill?) - How the generator exits: completion, GeneratorExit (client/server disconnect), or unhandled exception Log points added: - `stream_start` — confirms generator is running, PID, memory baseline - `batch_complete` — per batch: duration, cumulative progress, max yield gap, fetch latency p50/p99/max, RSS - `stream_complete` — successful finish with totals - `stream_error` — unhandled exception with traceback - `stream_finally` — always fires with exit reason and final stats This is temporary instrumentation to be removed once the root cause is found. --------- Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com> Co-authored-by: getsantry[bot] <66042841+getsantry[bot]@users.noreply.github.com>
This PR moves to using unique ids in `ToolbarVisualize`, when rending in the DnD context. This PR also migrates handling of deletions to the built in `deleteColumnAtIndex` function. Closes EXP-960
Remove the feature flag and checks. With this change all orgs will be created via the control scoped endpoint. Refs INFRENG-187
Pasting long text into the compact comment input in the sidebar overflows the page horizontally, pushing the submit button off screen. Also cleans up `mentionStyle` - removes the dead `streamlined` toggle and `&singleLine` block, consolidates to one set of base styles with an `inputStyle` override, and stops round-tripping through mentionStyle for the preview pane CSS. Fixes a zindex issue where the mention dropdown was behind buttons or activity
… for clarity (#116203) Using `elif` in place of `if` for clarity - no change in behavior.
…116219) Same fix as #116216. When a caller passes e.g. ?full=false, we get the string `false`, which is truthy, so we always use the full event serializer rather than the simple one. Apply the same fix as #52452, by checking for the strings "0" and "false" instead. Co-authored-by: Claude <noreply@anthropic.com>
…#116216) When a caller passes e.g. `?full=false`, we get the full string `false`, which is truthy, so we always use the full event serializer rather than the simple one. Apply the same fix as #52452, by checking for the strings "1" and "true" instead. Set up for #116113 Co-authored-by: Claude <noreply@anthropic.com>
moves the general seer agent access check from `SlackAgentEntrypoint.has_access` to `SeerAgentOperator.has_access`, mirroring the existing autofix operator pattern. callers now pass `entrypoint_key=SeerEntrypointKey.SLACK` so the operator gates on both general and entrypoint-level access.
…gration setup (#114366) Implement `get_pipeline_api_steps()` on `GitHubEnterpriseIntegrationProvider` with three steps: installation config (URL, app credentials, keys), app install redirect (popup-based GitHub app installation with polling), and a late-bound OAuth step constructed from the config step's data. Includes serializers for each step and updates `build_integration()` to handle both legacy and API state paths. Ref [VDY-40](https://linear.app/getsentry/issue/VDY-40/github-enterprise-api-driven-integration-setup)
Just a typo fix, i'll be using this flag for the new activity registry Fixes SENTRY-5P40
Added a simple check for workflows from other orgs; they _shouldn't_ be triggered, but the path to workflow lookup is a bit complex and we've gotten this wrong in the wild. Also fix existing test helpers so we don't depend on cross-org workflow triggering in our existing tests. Fixes ISWF-2691.
Part of codecov/core-engineering#100 This PR removes Codecov line coverage insights from Sentry issue stack trace frames.
Unnecessary const, spinning off from my activity registry prototype since it's unrelated to everything else
…nts (#116231) Add public OpenAPI documentation (`drf-spectacular`) to 5 snapshot API endpoints, promoting them from `EXPERIMENTAL` to `PUBLIC`. These endpoints power the Sentry Snapshots feature (visual regression testing for mobile apps) but were previously undocumented in the public API spec. This change adds full `@extend_schema` decorators with operation IDs, parameter descriptions, TypedDict response models, and example responses so they appear in the generated OpenAPI spec. **Endpoints documented (7 methods across 5 classes):** - `GET /organizations/{org}/preprodartifacts/snapshots/{id}/` — Retrieve snapshot details - `DELETE /organizations/{org}/preprodartifacts/snapshots/{id}/` — Delete a snapshot - `POST /projects/{org}/{project}/preprodartifacts/snapshots/` — Upload a snapshot - `GET /organizations/{org}/preprodartifacts/snapshots/{id}/download/` — Download images as ZIP - `GET /organizations/{org}/preprodartifacts/snapshots/{id}/images/{identifier}/` — Image detail - `GET /organizations/{org}/preprodartifacts/snapshots/latest-base/` — Latest base snapshot **Files changed:** - **New**: `src/sentry/preprod/api/models/public/snapshots.py` — 11 TypedDict response models - **Modified**: `src/sentry/apidocs/examples/preprod_examples.py` — Example responses for all endpoints - **Modified**: 4 endpoint files in `src/sentry/preprod/api/endpoints/snapshots/` — `@extend_schema` decorators, `publish_status` → `PUBLIC`, docstrings No behavior changes — this is purely additive documentation metadata. Co-authored-by: Claude <noreply@anthropic.com>
This model frequently blocks relocations for import/export differences, and I'd like that to not happen anymore. The `Email` model is populated by signals on create/delete operations to `UserEmail` it _does not_ synchronize state on updates, and there are several older user accounts that are missing records in `sentry_email` that are present in `sentry_useremail` which cause relocations to fail. By excluding this model from exports, these records won't participate in the validation checks and can't cause diffs. When the relocation is processed records will still be stored in `sentry_email` because of the aformentioned signals.
…16113) Preparation for publishing the group details endpoint. Specifies optional fields that are collapsable / expandable on the endpoint and creates `GroupDetailsResponse` to specify the full typed response, and adds an example + additional OpenAPI parameters that will be used by #116119 Co-authored-by: Claude <noreply@anthropic.com>
… from timeline (#116233) Reverts #115749 to restore `SEER_PR_CREATED` activity creation in the Seer operator pipeline (fed by webhook events received into Sentry from Seer). Hides `SEER_PR_CREATED` activities from the frontend activity timeline on the issue details page - we continue to rely on `SET_RESOLVED_IN_PULL_REQUEST` activities for the UI display instead (to avoid duplicate "PR created" entries).
…ion setup (#114367) Register GitHub Enterprise in the pipeline registry with three steps: an installation config form (URL, app ID, OAuth credentials, private key, webhook secret), a popup-based app install redirect step using `useRedirectPopupStep`, and the shared `OAuthLoginStep` for final authorization. Ref [VDY-40](https://linear.app/getsentry/issue/VDY-40/github-enterprise-api-driven-integration-setup)
Adds logs when adding a project to Vercel fails so we can see what's going on.
…116242) Add two global command palette actions for quickly switching between environments while preserving the current path and search string. - **Open in Production**: available on the local dev server (`NODE_ENV === 'development'`) and Vercel preview deploys (`DEPLOY_PREVIEW_CONFIG`). Opens the current page on `https://{org}.sentry.io`. - **Open in Development**: available in production (`NODE_ENV === 'production'`) for staff users (`user.isStaff`). Opens the current page on `https://{org}.dev.getsentry.net:7999`. Both actions preserve the current pathname and search params — only the origin changes. --------- Co-authored-by: Claude <noreply@anthropic.com> Co-authored-by: Cursor Agent <cursoragent@cursor.com> Co-authored-by: Jonas <JonasBa@users.noreply.github.com>
…)" This reverts commit 91adf04. Co-authored-by: markstory <24086+markstory@users.noreply.github.com>
- on tables the param wasn't being passed to the table_rpc - on timeseries the debug wasn't being included in the response meta
…classes (#116243) Fixing this `InvalidSearchQuery` error message for invalid device class values.
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 : )