[pull] master from getsentry:master#1827
Merged
pull[bot] merged 23 commits intoKingDEV95:masterfrom Mar 26, 2026
Merged
Conversation
…on issues (#111486) Extracts the filter logic from `kick_off_seer_automation()` into two helper functions (`_get_default_seer_automation_skip_reason` and `_get_seat_based_seer_automation_skip_reason`) that return a string reason when an issue is skipped. This enables a single `metrics.incr` and `logger.info` call per filtered issue instead of silent returns. Previously, ~14 return points in this function silently dropped issues with no observability. Only the 3 rate-limit paths emitted any signal. Now every skip reason is tagged and visible: - `already_has_fixability_score`, `not_eligible`, `lock_already_held`, `rate_limited` (default tier) - `summary_already_cached`, `summary_already_dispatched`, `already_triggered`, `issue_too_old`, `fixability_too_low`, `automation_already_dispatched`, `no_connected_repos` (seat-based tier) Metric: `seer.automation.filtered` with `reason` and `tier` tags. Refs AIML-2686 --------- Co-authored-by: Claude <noreply@anthropic.com>
…s_completed_and_overdue (#111609) <!-- CURSOR_AGENT_PR_BODY_BEGIN --> ## Description This PR temporarily skips the test `test_quick_start_not_rendered_because_all_tasks_completed_and_overdue` in the acceptance test suite. ## Changes - Added `@pytest.mark.skip(reason="Temporarily skipped")` decorator to the test method - Imported `pytest` module to support the skip decorator ## Testing - Verified pre-commit hooks pass - Test will be skipped when running the test suite <!-- CURSOR_AGENT_PR_BODY_END --> [Slack Thread](https://sentry.slack.com/archives/D09259VQFAP/p1774526835160849?thread_ts=1774526835.160849&cid=D09259VQFAP) <div><a href="https://cursor.com/agents/bc-7ca5447e-d6c0-5261-a9c3-c307fd73c3c5"><picture><source media="(prefers-color-scheme: dark)" srcset="https://cursor.com/assets/images/open-in-web-dark.png"><source media="(prefers-color-scheme: light)" srcset="https://cursor.com/assets/images/open-in-web-light.png"><img alt="Open in Web" width="114" height="28" src="https://cursor.com/assets/images/open-in-web-dark.png"></picture></a> <a href="https://cursor.com/background-agent?bcId=bc-7ca5447e-d6c0-5261-a9c3-c307fd73c3c5"><picture><source media="(prefers-color-scheme: dark)" srcset="https://cursor.com/assets/images/open-in-cursor-dark.png"><source media="(prefers-color-scheme: light)" srcset="https://cursor.com/assets/images/open-in-cursor-light.png"><img alt="Open in Cursor" width="131" height="28" src="https://cursor.com/assets/images/open-in-cursor-dark.png"></picture></a> </div> Co-authored-by: Cursor Agent <cursoragent@cursor.com> Co-authored-by: Armen Zambrano G. <armenzg@users.noreply.github.com>
…r` flips after resolution (#111584) Fixes #111393. When `has_resolution()` determines that `current_release_version` is older than the event's release (semver), also check whether the event's release is older than the resolved-in release before declaring regression. Fixes false positive regressions when `follows_semver` flips from False to True between resolution time & event arrival time.
Move the project grouping record delete endpoint (`/v0/issues/similar-issues/grouping-record/delete`) to use `make_signed_seer_api_request` instead of a raw unsigned `urlopen` call, consistent with all other Seer API methods. - Add `make_delete_grouping_records_by_project_request` to `signed_seer_api.py` with a `DeleteGroupingRecordsByProjectRequest` typed dict - Add `seer_grouping_default_connection_pool` using `settings.SEER_GROUPING_URL` - Update `call_seer_to_delete_project_grouping_records` to use the new signed method (this also resolves the existing TODO comment about moving to POST) Agent transcript: https://claudescope.sentry.dev/share/yp4ee9srss2V1UbfuaaD-PJyoIAqYGErBGG8WwuRn-I
) Gate explore-view links in insights/dashboard widgets behind the `visibility-explore-view` feature flag. AM1 users were being sent to `/explore/traces/` from three separate code paths in the cache miss rates widget: 1. **Insights widget dropdown** (`chartActionDropdown.tsx`) — `BaseChartActionDropdown` always added the "Open in Explore" menu item for any widget that passed `queryInfo`, regardless of the flag. Fixed by checking `visibility-explore-view` before adding the menu item. 2. **Dashboard widget context menu** (`widgetCardContextMenu.tsx`) — `getMenuOptions` unconditionally added "Open in Explore" for all `SPANS`/`LOGS` widgets. This path is hit via `PlatformizedCachesOverview → PrebuiltDashboardRenderer`. Fixed by gating on `visibility-explore-view`. 3. **Breakdown series label links** (`visualizationWidget.tsx`) — Chart series labels for SPANS widgets with group-by columns were rendered as `<Link>` elements pointing to `/explore/traces/`, with no flag check. Fixed by gating on `visibility-explore-view`; without the flag, labels render as plain text. Each fix is covered by a test: - `chartActionDropdown.spec.tsx` (new file) - `widgetCard/index.spec.tsx` (new describe block) - `visualizationWidget.spec.tsx` (new file) Refs DAIN-1368 --------- Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
…in fullscreen (#111616) The widget viewer modal (fullscreen view) did not check whether the dashboard was pre-built, so the "Edit Widget" button was incorrectly enabled for pre-built dashboard widgets. This allowed users to open the edit flow for widgets that shouldn't be editable. Passes `isPrebuiltDashboard` to both the data and text widget viewer modals and includes it in the edit access check, matching the existing behavior in the dashboard grid view (`sortableWidget.tsx`). <img width="1150" height="424" alt="image" src="https://github.com/user-attachments/assets/0b894e6f-5f2e-4719-ace2-8e6af4faa1e1" /> Fixes DAIN-1411 --------- Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
…#111192) Refactors the GitHub SCM provider layer to make HTTP requests directly via `_request` and work with raw `requests.Response` objects instead of delegating to high-level methods on `GitHubApiClient`. **Why:** The provider needs access to response headers (ETag, Last-Modified) to support conditional requests and pagination. The existing `GitHubApiClient` methods return parsed JSON dicts, discarding all response metadata. Rather than modifying every client method to optionally return headers, this moves the provider to use raw responses directly. **What changed:** - Introduced `GitHubProviderApiClient`, a thin wrapper around `GitHubApiClient._request` that returns raw `requests.Response` objects. It handles pagination params, conditional request headers (`If-None-Match`, `If-Modified-Since`), and error translation (`ApiError` → `SCMProviderException`) in one place. - All `GitHubProvider` methods now construct their own API paths and call through `GitHubProviderApiClient` instead of delegating to named methods on `GitHubApiClient` (e.g. `get_branch`, `create_git_ref`, `list_pull_requests`, etc.). - `map_action` and new `map_paginated_action` helpers extract `ResponseMeta` (etag, last_modified) from response headers and compute `next_cursor` for pagination. - Removed ~30 methods from `GitHubBaseClient` that were only used by the SCM provider (GraphQL queries, git ref/tree/blob CRUD, PR management, comment deletion, etc.). These are now inlined in the provider. - Moved the `MINIMIZE_COMMENT_MUTATION` GraphQL query to the provider since it's the only consumer. - Added `force_raise_for_status` parameter to `BaseApiClient._request` so raw responses still get status checks. - Rewrote unit tests to mock at the `GitHubProviderApiClient` request boundary instead of asserting on `GitHubApiClient` method delegation. Tests now verify the HTTP method, path, and payload sent to the API rather than which client method was called. No behavior changes for callers of the SCM provider interface.
This returns the details of errors caught by the RPC in its response, allowing getsentry/seer#5313 to reconstruct and raise appropriate exceptions.
We can use `taskworker.worker.execution_latency` instead.
Removes regression introduced by #111414 by removing the custom `Range` component | Before | After | |--------|--------| | <img width="803" height="100" alt="Screenshot 2026-03-26 at 10 31 20 AM" src="https://github.com/user-attachments/assets/f3636f07-d85a-4a37-8f22-9c220de69951" /> | <img width="801" height="89" alt="Screenshot 2026-03-26 at 10 31 11 AM" src="https://github.com/user-attachments/assets/8a015578-35c4-4779-ac9d-97150dbb3142" /> |
…11566) When merging two user accounts, if both users are subscribed to the same issue group, the unique_together constraint on GroupSubscription causes an IntegrityError. Add dedupe logic matching the existing GroupSeen pattern: delete the secondary user's conflicting subscriptions before reassigning the remaining ones. Fixes SENTRY-4YFH Fixes SENTRY-5HVP Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
…111484) This uses the new seer_explorer_autofix_last_triggered column to handle the new explorer autofix so we can handle the migration cleanly.
## Summary
- Remove `_clear_commit_context_cache` from
`RepositoryProjectPathConfig` post-save handler
- This function was querying all group IDs for a project and calling
`cache.delete_many` on keys with pattern
`process-commit-context-{group_id}`
- These cache keys were **never being set** — the debounce key was
removed in #65043 when suspect-commits-all-frames was GA'd, making this
function a no-op
- Despite being a no-op, the query + `cache.delete_many` call was taking
**~27 seconds** on projects with many groups (observed on the bulk
code-mappings upload endpoint)
## Evidence
- The cache key `process-commit-context-{group_id}` (with dash) was set
via `DEBOUNCE_CACHE_KEY` in `commit_context.py`, removed in #65043
- The lock key in `commit_context.py` uses
`process-commit-context:{group_id}` (with colon) — a different key
entirely
- No code in the codebase currently sets the dash-variant cache key
- Trace showing 26.5s "No Instrumentation" block corresponding to this
function: the group IDs query takes ~183ms, the rest is
`cache.delete_many` on nonexistent keys
## Test plan
- [x] Verified no tests reference `_clear_commit_context_cache` or the
`process-commit-context-` cache key pattern
- [x] Verified `_spawn_update_schema_task` (the other post-save
callback) is unaffected
- [ ] Deploy and verify code-mappings upload endpoint responds in <5s
instead of ~90s
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
…#111586) Replace deprecated `space()` function references with current `theme.space.<token>` pattern in the design-system agent skill --------- Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
migrate `useLocationQuery` tests from mocked `useLocation` to `renderHookWithProviders`
…111547) remove direct useLocation mocks
…111577) Extract reusable frontend components for the OAuth popup flow so integration pipelines can share the same authorization UX. The OAuthLoginStep handles opening the popup, listening for postMessage callbacks from the trampoline, and forwarding the code/state params. Refs VDY-35
Defaults to `sum` for distribution and counter metrics and `avg` for gauges on initial load. If a selection is made that isn't a valid aggregate for that type, we fix it and get the default aggregate for that type instead of just the first one.
If an org has seat-based billing enabled _and_ have the `seer-gitlab-support` feature flag enabled, then allow GitLab to be configurable for Seer. Note that only internal Sentry orgs have the gitlab feature flag enabled.
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 : )