[pull] master from getsentry:master#1809
Merged
pull[bot] merged 61 commits intoKingDEV95:masterfrom Mar 19, 2026
Merged
Conversation
Updates frontend web snapshots to support grouping snapshots by describe
blocks. As an example from our `button.snapshots.tsx`
```
describe("Button", () => {
describe.each(['light', 'dark'] as const)('%s', themeName => {
it.snapshot.each<ButtonProps['priority']>([
'default',
'primary',
'danger',
'warning',
'link',
'transparent',
])(
'%s',
priority => (
<ThemeProvider theme={themes[themeName]}>
{/* Buttons need a bit of padding as rootElement.screenshot() clips to the
element's CSS border-box. For buttons, box-shadows/outlines/focus rings
extending outside #root get cut off. */}
<div style={{padding: 8}}>
<Button priority={priority}>{priority}</Button>
</div>
</ThemeProvider>
),
priority => ({theme: themeName, priority: String(priority)})
);
});
})
```
Would group each button by “Button/${theme}” (so in practice, two
groups, Button/light and Button/dark), each
containing 6 variants - one for each button priority
Fix the `usePlatformizedView` query parameter to correctly return `false` when set to `0`. Previously, `?usePlatformizedView=0` would skip the early return and fall through to the organization-level `hasPlatformizedInsights` check, effectively ignoring the explicit opt-out. Now the hook checks for the presence of the query param first, then evaluates its value. This makes it easier to disable platformized insights to test
Looks like we're still using the URLs from the old navigation (`/alerts/`) and never updated to the new pathname `/issues/alerts`.
…ycle (#111024) Adds `metrics.distribution` and `metrics.incr` instrumentation to the snapshot upload endpoint and `compare_snapshots` task so the Preprod Health dashboard can track snapshot usage and build quality signals. ## Metrics added **On upload** (`ProjectPreprodSnapshotEndpoint.post`): - `preprod.snapshots.upload.image_count` — number of images per upload, tagged `has_vcs` to distinguish CI builds from standalone uploads - `preprod.snapshots.upload.duplicate_image_file_names` — count of `image_file_name` collisions within a single manifest (proxy for same screen uploaded under multiple hashes) - `preprod.snapshots.upload.bundles_per_commit` — how many snapshot bundles have been uploaded for the same commit (only emitted when `has_vcs=True`) **On diff completion** (`compare_snapshots` task): - `preprod.snapshots.diff.duration_s` — time from comparison record creation to diff task completion - `preprod.snapshots.e2e_duration_s` — time from artifact upload to diff completion, mirrors the existing `preprod.size_analysis.results_e2e` pattern - `preprod.snapshots.image.avg_size_bytes` — average byte size of images actually fetched for pixel diff (excludes added/removed) - `preprod.snapshots.diff.zero_changes` — incremented when a diff completes with no changed, added, or removed images All metrics use `sample_rate=1.0`. No Amplitude analytics events are included — this is Datadog/tracemetrics only, targeting the existing Preprod Health dashboard. --------- Co-authored-by: Claude <noreply@anthropic.com>
We've gotten the signal we need — 800k events every 5 minutes are missing their trace_id.
…ompletion hook (#111059) Updates dashboard generation on completion hook to also check artifact result against dashboard serializer. If result fails validation, resumes seer run with error information to regenerate dashboard.
This adds a new API to get a download repository URL. Note that GitHub returns 302 with a presigned URL in the Location header whereas GitLab streams the content directly. I believe we also need to supply an auth header for GitLab as well (but havent confirmed yet). This is needed to replicate behavior for [downloading a repo](https://github.com/getsentry/seer/blob/main/src/seer/automation/codebase/repo_manager.py#L151-L162) in Seer
…idgets (#111029) `replay.id` and `profile.id` columns in dashboard table widgets rendered as plain text instead of clickable links. This was because `SPECIAL_FIELDS` in `fieldRenderers.tsx` only had a `replayId` (camelCase) entry but no `replay.id` (dot notation), and the `profile.id` entry rendered a shortened ID without a link. Since `getFieldRenderer` checks `SPECIAL_FIELDS` first, fixing the renderers there makes them work everywhere (dashboards, discover, etc.) without needing to touch individual dataset configs. - Added `replay.id` entry to `SPECIAL_FIELDS` that shares a `renderReplayIdAsLink` helper with the existing `replayId` entry - Updated `profile.id` entry to link to the profile flamechart page, with a plaintext fallback when the project slug can't be resolved - Added `project` column to prebuilt Web Vitals sample tables (LCP, INP, CLS) so the profile renderer can resolve the project slug needed for the link Refs DAIN-1292 --------- Co-authored-by: Claude <noreply@anthropic.com>
… and repo selection (#110883) ## Summary Implements the `SCM_CONNECT` onboarding step behind the `organizations:onboarding-scm` feature flag. Functional-first -- UI polish is out of scope. ## What it does **Provider connection** - Renders OAuth buttons for each SCM provider (GitHub, GitLab, Bitbucket, Azure DevOps) - Auto-selects an existing integration on mount so returning users skip to the connected view - Stores the `Integration` in `OnboardingContext.selectedIntegration` **Repository selection** - Debounced search dropdown querying `GET /integrations/{id}/repos/?search=` - Selecting a repo registers it in Sentry via `POST /repos/` (or looks up the existing Sentry ID if already added) - Switching repos cleans up the previously added one - Removing a repo deletes it from Sentry if we added it during this session - Stores `Repository` (with real Sentry ID) in `OnboardingContext.selectedRepository` - Continue is disabled until a repo is selected **PRD scenario alignment** - Scenario A (new org): provider pills with OAuth - Scenario B (existing SCM): auto-selects, shows connected view with repo search - Scenario D/E/F (add new org, switch provider, remove SCM): not supported in onboarding per PRD, "Manage in Settings" link provided **Skip and navigation** - "Skip for now" advances to next step without SCM data - Selections restore from context when navigating back ## Out of scope - UI polish, animations, "Why connect" benefits card - Repo relevance ordering - Multiple simultaneous integrations - Explicit error states for popup closed / OAuth failure ## New files - `useScmProviders.ts` -- data-fetching hook for SCM providers and active installations - `components/scmProviderPills.tsx` -- OAuth provider pill buttons - `components/scmConnectedView.tsx` -- connected status + "Manage in Settings" link + repo selector - `components/scmRepoSelector.tsx` -- repo search dropdown UI - `components/useRepoSearch.ts` -- debounced provider repo search query - `components/useRepoSelection.ts` -- repo add/remove lifecycle with optimistic updates ## Test plan - [x] 22 onboarding tests passing - [x] Auto-selects existing integration and shows connected view - [x] "Skip for now" advances to next step - [x] Manual: OAuth flow connects provider and shows connected view - [x] Manual: Repo search, selection, and removal work end-to-end - [x] Manual: Switching repos cleans up the previously added one Refs VDY-19 --------- Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com> Co-authored-by: getsantry[bot] <66042841+getsantry[bot]@users.noreply.github.com>
The rate limiter policy was wrong
A customer is hitting the limit here, so increasing this.
Implements double reads of occurrences from EAP for the errors query in `src/sentry/snuba/trace.py`.
…110949) Stacked on #110937. The only place that renders tombstones is `groupTombstones.tsx`, so move the tombstone title/message rendering there instead of routing it through `GroupHeaderRow`. This removes `GroupTombstoneHelper` from the prop types of `GroupHeaderRow`, `GroupTitle`, `EventMessage`, and `createIssueLink`. Also removes the unused `data` prop from `EventMessage`. --------- Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
…109106) ## Summary - Moves the "Suggest Assertions" button from the form footer to the verification section for better discoverability - In the alerts form, the button sits next to the "Verification" heading with the subtext, bottom-aligned - In the detector form, the button is placed in the Section heading via `trailingItems` - Removes the button from `extraFooterButton` in both detector form variants ## Screenshots ### Alerts form (`/alerts/new/uptime/`) | Before | After | |--------|-------| |<img width="1400" height="900" alt="suggest-assertions-before-alerts" src="https://github.com/user-attachments/assets/eff93df3-4452-44d4-a26f-db8693809cde" />|<img width="1400" height="900" alt="suggest-assertions-after-alerts" src="https://github.com/user-attachments/assets/c11a1e55-d125-4040-864e-226567a668ac" />| ### Detector form (`/monitors/new/settings/`) | Before | After | |--------|-------| |<img width="1400" height="900" alt="suggest-assertions-before-detector" src="https://github.com/user-attachments/assets/8b70e61c-3d5b-46e6-842f-e49d9e9bec1d" />|<img width="1400" height="900" alt="suggest-assertions-after-detector" src="https://github.com/user-attachments/assets/c7725452-a270-4577-83d6-07e6188092e7" />| ## Test plan - Verify the "Suggest Assertions" button appears in the verification section (not footer) on both `/alerts/new/uptime/` and `/monitors/create/` - Verify the numbered list item "3. Verification" retains its number - Verify the button opens the AI suggestion drawer when clicked - `CI=true pnpm test static/app/views/alerts/rules/uptime/uptimeAlertForm.spec.tsx` Fixes NEW-763
Currently the add to dashboard flow from text widgets is throwing errors. This PR fixes that. We can now add text widgets to other dashboards (if people want to ig) Closes [DAIN-1322](https://linear.app/getsentry/issue/DAIN-1322/implement-add-to-dashboard-flow-for-text-widgets)
…ics (#111089) Track how long React re-renders take in response to window resize events on both the individual dashboard view and the manage dashboards page. The existing `dashboards.widget.onEdit` metric (in `detail.tsx`) uses the same `performance.now()` + `scheduleMicroTask` pattern to approximate JS render cost. This PR applies the same approach to resize events, which can be expensive as they trigger layout recalculations across the widget grid. Each sample is tagged with `page: 'dashboard'` or `page: 'manage'` so the two pages can be compared independently in Sentry metrics. Refs LINEAR-DAIN-1369 Co-authored-by: Shaun Kaasten <shaunk.kaasten@sentry.io> Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
… used (#110954) When testing, debugging, and analyzing perf impact, it's useful for us to be able to tell which requests used legacy models both as a client and via spans.
also updates the resolver skill
As we discussed with Salesforce, we need to have a staging Slack app in order to get them to review our scope changes for Seer Explorer feature in Slack. This PR will add a feature flag to enable/disable staging app installation flow We also add options for the staging app's credentials. a part of ISWF-2225
…ferent aggs (#111114) Currently the logic for rendering the legends for tracemetrics is broken because it can't match up the right y-axis to generate the label, so it falls back to always showing the first aggregate (i.e. `aggregates[0]`). So when you select multiple metrics, the legend and tooltips should show the pretty labels and they should be distinct I couldn't find a way to do this cleanly without special casing tracemetrics since anything else would require generalizing formatters and it's not usually necessary. We can consider it if there's time for cleanup/it makes things easier to reason about. Essentially, this PR changes the `yAxis` lookup to work with the formatted series name, and formats the series name to push into the label. I also changed the units and types to use `yAxis` because it's a bit clearer with the aggregate lookup
…ndaryNavigation (#110824) Consolidates draggable nav elements from explore, issues and dashboards under common secondary nav primitives. I will migrate away from reorder in a followup PR Fix DE-583, DE-582, DE-590, DE-771 Ref DE-578 --------- Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com> Co-authored-by: getsantry[bot] <66042841+getsantry[bot]@users.noreply.github.com>
This adds in the steps to 1. ensure the org has configured billing for seer 2. ensure the org has configured a scm 3. ensure the project has linked a scm | Seer Not Available Admin | Seer Not Available Member | | ------------------------- | --------------------------- | | <img width="640" height="604" alt="image" src="https://github.com/user-attachments/assets/b2d05bde-c076-4d5e-88d2-a5fd4938642c" /> | <img width="316" height="298" alt="Screenshot 2026-03-19 at 10 43 30 AM" src="https://github.com/user-attachments/assets/a68d9927-801f-4948-81e9-109a6e7e5c5a" /> | | SCM Not Available for Organization | SCM Not Available for Project | | ----------------------------------- | ----------------------------- | | <img width="620" height="740" alt="image" src="https://github.com/user-attachments/assets/41fca2f4-a4d2-48ea-b65b-3ab57c00e9ba" /> | <img width="618" height="744" alt="image" src="https://github.com/user-attachments/assets/49c2fb4d-85d8-47f3-877b-78178f26e267" /> |
…11078) Adds support for setting linkedDashboards on groupBy columns in timeseries widgets when using breakdown legend type. Previously, linked dashboards were only configurable for table widgets. The timeseries visualization already rendered linked dashboard URLs in the breakdown legend footer, but there was no way to configure them through the widget builder for non-table widgets. Changes: - Add "Link field" button to groupBy selector rows (only visible when legend type is breakdown and drilldown flows feature is enabled) - Allow `SET_LINKED_DASHBOARDS` action for breakdown legend type in addition to table display type - Clear linkedDashboards when legend type changes away from breakdown - Deduplicate linked dashboard entries when re-linking a field that already has a linked dashboard - Add `renderExtraActions` prop to `QueryField` and `GroupBySelector` for extensibility <img width="855" height="150" alt="image" src="https://github.com/user-attachments/assets/5d526d5d-b7cb-4237-a37d-36e2512712e7" /> <img width="671" height="303" alt="image" src="https://github.com/user-attachments/assets/7266a4e6-f0fe-434f-a926-85f02c09a26e" /> <img width="644" height="425" alt="image" src="https://github.com/user-attachments/assets/f4b3f60f-7106-4f4f-a94b-85a7aef4c47b" /> --------- Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com> Co-authored-by: Claude Opus 4.6 <noreply@example.com>
To have better loading states, this works with autofix sections instead of autofix artifacts.
revives #110668 can do this safely now that there's a stub in getsentry/getsentry#19619
The yAxis and the series name might differ, so just check the y-axis again to be safe for metrics. This regression was introduced when making the labels unique by changing it to rely on the y-axis
…ent (#111131) Replace the `renderExtraActions` render function prop on `GroupBySelector` with a `showDashboardLinkButton` boolean and a colocated `LinkToDashboardAction` component. Passing render functions as props causes unnecessary re-renders of children because a new function reference is created on every parent render. Using a boolean prop with a colocated component avoids this and simplifies the API — the caller no longer needs to know about the rendering details of the link button. The `LinkToDashboardAction` component now lives in `groupBySelector.tsx` alongside `GroupBySelector` and accesses widget builder context via its own hooks. --------- Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com> Co-authored-by: Claude Opus 4.6 <noreply@example.com>
…107785) adds `get_thread_history()`, `set_thread_status()`, `clear_thread_status()` methods to slackintegration with scope checking. new installations can request extended scopes when `slack.extended-scopes-enabled` option is enabled. `get_thread_history()` will be used to gather the context to feed into the Seer Explorer this is done this way because of a few things: - the current list is static, and when we roll new perms, it won't be accurate - we cant just update the static list after that date since existing installs _wont_ have the perms till they upgrade - this way we can set an option once our app gets re-approved to start assuming the new perms on fresh installs if something is wrong about the payload, but the best case we just use the scopes from the oauth response ive tested it locally and scoured, we don't currently use these scopes for anything else. Closes ISWF-2017
comes with a security fix and also upgrades to node24: getsentry/action-github-app-token#105
) Add explicit handling for `ApiForbiddenError` in the integration proxy endpoint's `handle_exception_with_details` method, following the same pattern established in #111030 for `ApiUnauthorized` and `ApiRateLimitedError`. Previously, `ApiForbiddenError` exceptions fell through to the unknown error handler, which logs at warning level and delegates to the base class (returning 500). Now it returns the correct 403 status with a dedicated `forbidden_error` failure metric type and info-level logging. Agent transcript: https://claudescope.sentry.dev/share/IV3nYCdnIAW35SRn4N0wnSGyQrw4sP8303Ea3PzRkjE
Autofix has a relevant_repos field which allows coding agent integrations to run agents only in the required repositories instead of all of the ones attached to the project. Explorer did not have that set up. Now the RootCauseArtifact returned by explorer has the field and it is included in the prompt as a return. The repos provided to a coding agent are now filtered by this return value. Tests have been added for this filtering functionality. I ran this locally and seemed to work with not all repos being returned, but real test will be on prod with complex repos that have issues across them etc. **Would also be open to thoughts about whether we even want more than one agent spawned at all... there is theoretically a use case, but is it common enough to support?** Also, claude currently has the ability to attach multiple repos through mcp to one agent so we could pivot to do that, but neither of the other integrations do at the moment so it would be a larger refactor.
This should be a clearer label <img width="1091" height="187" alt="SCR-20260319-keus" src="https://github.com/user-attachments/assets/685a69b6-a00f-489f-852e-d23cedac15ee" /> <img width="311" height="111" alt="SCR-20260319-ketw" src="https://github.com/user-attachments/assets/6c8fd72d-98b1-429f-b73b-5c49927f3e8d" />
…pHashMetadata (#111047) Use Seer's `model_used` response field to record what model Seer actually used, separately from what we requested. When Sentry calls Seer for similarity grouping, `GroupHashMetadata.seer_model` was previously set from what Sentry *requested*. If Seer internally falls back from v2 to v1, we had no visibility into that. Seer now returns a `model_used` field in the response — this PR consumes it. - `seer_model` ← what Seer actually used (`model_used` from response, falling back to the requested version) - `seer_latest_training_model` ← what we sent (always the requested version) **Changes:** - Add `model_used: NotRequired[str]` to `SimilarIssuesEmbeddingsResponse` - `get_similarity_data_from_seer` now returns `tuple[list[SeerSimilarIssueData], str | None]` - `get_seer_similar_issues` now returns a 3-tuple threading `model_used` through - `maybe_check_seer_for_matching_grouphash` sets `seer_model` from the response value Backward compatible: `model_used` is parsed with `.get()` defaulting to `None`, and `seer_model_used or model_version.value` means behavior is identical to today if the field is absent. No migration needed. --------- Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
…reaches settled state + small fixes (#111138) - Moves `validateDashboardAndRecordMetrics` to after polling has settled to avoid reporting success/fail on dashboards that are still re generating - Adds an experimental badge to the Create dashboard with Seer button - Fixes issue where seer session updated_at timestamp changes but status remains complete not being handled correctly, causing loading state to enter unexpected state
…tamp (#110504) ## Summary - `datetime.replace()` returns a new object (datetime is immutable), but the return value was discarded at line 220 of `src/sentry/search/utils.py` - Timezone-naive ISO 8601 strings (e.g., `"2024-01-01T00:00:00"`) were parsed using the server's local timezone instead of UTC - The correct pattern already exists at line 264 in the same file ## Fix ```diff - date.replace(tzinfo=timezone.utc) + date = date.replace(tzinfo=timezone.utc) ``` Fixes #110503 ## Impact - **UTC servers**: no visible change (coincidentally correct before) - **Non-UTC servers** (local dev, on-premise): search queries with timezone-naive timestamps will now correctly use UTC instead of the server's local timezone Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com> Co-authored-by: Charlie Luo <cvxluo@gmail.com>
Fix typecheck errors introduced by the reland of monitor filters (95e3ff4). `FormContext` and `Section` are named exports but were imported as default exports in the mobile build detector form, causing three TypeScript errors. Agent transcript: https://claudescope.sentry.dev/share/0f6OHlCAOh7GRffxn4UrfZPAgEjU-mIK3FCG-ksuJY0
## Summary Refactors the `SeerEntrypoint` protocol into a layered hierarchy to support both autofix and explorer workflows: - **Split `SeerEntrypoint` into three protocols**: `SeerEntrypointCore` (shared base), `SeerAutofixEntrypoint` (autofix lifecycle methods), and `SeerExplorerEntrypoint` (explorer lifecycle methods — stub for now) - **Renamed `entrypoint_registry` → `autofix_entrypoint_registry`** to clarify it only holds autofix entrypoints - **Extracted `has_seer_entrypoint_access`** from `SeerOperator.has_access` into a standalone function so it can be reused outside the operator - **Updated `SlackEntrypoint`** and all references/tests to use the new `SeerAutofixEntrypoint` protocol and renamed registry Builds on #107785. ISWF-2020
I think using `span.duration` instead of `span.self_time` for DB queries is better for two reasons: 1. It's more semantically correct: since a DB query span represents a DB query, the span's length represents the query's runtime, regardless of any child spans. 2. `span.duration` is available on all spans, whereas `span.self_time` is only available for spans that have gone through the span buffer/segment enrichment during ingestion. Changes all uses in the Queries and Query Summary dashboards, and the Backend landing page's Queries widget. See BROWSE-454.
…#111144) This adds loading and error states so it doesn't just render nothing when the artifact isn't ready yet. | | Root Cause | Implementation Plan | Coding Changes | Pull Requests | | --- | ------------ | -------------------- | ---------------- | -------------- | | loading | <img width="608" height="390" alt="image" src="https://github.com/user-attachments/assets/7b50c9a7-8f8f-4f2b-8124-e2fa1af3c366" /> | <img width="632" height="652" alt="image" src="https://github.com/user-attachments/assets/1b2c457f-b91e-4dcf-a629-70d9966a56e5" /> | <img width="630" height="820" alt="image" src="https://github.com/user-attachments/assets/c6329cbd-eccd-428d-a198-7164baf57b4e" /> | <img width="626" height="976" alt="image" src="https://github.com/user-attachments/assets/4a938a4c-1dda-416e-89b1-39642b306989" /> | | no artifact | <img width="614" height="398" alt="image" src="https://github.com/user-attachments/assets/b3d052b6-584d-4e45-8f48-92116614f607" /> | <img width="624" height="678" alt="image" src="https://github.com/user-attachments/assets/80cf0105-a8ad-4d1c-92c6-e417ee22a50d" /> | <img width="624" height="838" alt="image" src="https://github.com/user-attachments/assets/75335df2-02f0-4a36-ba9f-aa8646a14366" /> | <img width="614" height="1010" alt="image" src="https://github.com/user-attachments/assets/f00de129-62e7-4fd7-9268-0a4973ba4963" /> |
Part of https://linear.app/getsentry/issue/CW-1060/remove-sentryenable-pr-review-test-generation-option-values-from-db Closes https://linear.app/getsentry/issue/CW-1063/remove-enable-ai-code-review-toggle-fe Blocks #111049 In the PR linked above we're swapping over to using the repository settings as the source of truth for all users: seat based, beta, or legacy. We no longer need this setting, and will remove that "legacyseer" conditional to just route to the new settings page very soon too. Before <img width="1643" height="540" alt="Screenshot 2026-03-18 at 4 28 05 PM" src="https://github.com/user-attachments/assets/7bde033d-1770-4563-9aa3-2679518a615d" /> After <img width="1459" height="601" alt="Screenshot 2026-03-18 at 4 26 25 PM" src="https://github.com/user-attachments/assets/599c34fc-1ec1-49df-a8d7-928828ed2d4d" /> <!-- 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.
…111082) ## Summary - Remove the `organizations:autofix-send-code-mappings` feature flag which has been GA'd at 100% rollout - Make code mapping pre-resolution in autofix unconditional - Companion PR in sentry-options-automator to remove the flagpole config ## Test plan - [ ] CI passes - [ ] Autofix continues to pre-resolve stacktrace frames without the flag gate Agent transcript: https://claudescope.sentry.dev/share/SJ7h6lGgiDOdYm2_Zo758cttXdqQSx615lOoaFhA4aA
…1037) Use fzf scoring to rank value combobox suggestions so that better matches (e.g. prefix matches) appear before weaker ones when the user is typing a filter value. before <img width="513" height="443" alt="Screenshot 2026-03-18 at 1 52 17 PM" src="https://github.com/user-attachments/assets/4199a0d2-a1b7-4cb5-a49f-95a382102c4c" /> after <img width="512" height="452" alt="Screenshot 2026-03-18 at 1 52 45 PM" src="https://github.com/user-attachments/assets/54399d79-3268-41ee-855a-2d9a81bc1404" /> Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
…111049) This PR does a couple things: - Simplifies code review preflight to use RepositorySettings as the source of truth across all eligible cohorts - Removes backend exposure and handling of the deprecated org option `sentry:enable_pr_review_test_generation` - Updates related tests. Higher level task: https://linear.app/getsentry/issue/CW-1005/consolidate-seer-settings-product-experience-across-legacy-and-new Depends on #111055 (removing FE toggle) Depends on getsentry/getsentry#19606 (backfill repo settings rows) Closes https://linear.app/getsentry/issue/CW-1059/change-pointer-for-beta-orgs-to-look-at-repository-settings-rows Relates to https://linear.app/getsentry/issue/CW-1060/remove-sentryenable-pr-review-test-generation-option-values-from-db <!-- 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.
Implements skip to content link https://github.com/user-attachments/assets/015e0283-4dd7-428d-b915-813cb4a96c2e Fixes DE-580
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 : )