[pull] master from getsentry:master#1824
Merged
pull[bot] merged 45 commits intoKingDEV95:masterfrom Mar 25, 2026
Merged
Conversation
We can avoid layout effects and state persistence issues (as well as enable async actions down the line) by centralizing the state of our cmdk UI. Opening as a draft as it still needs a bit of work and cleanup to get to where I want it to be. Fixes DE-1034
) Even though `user.display` doesn't exist in EAP to be queried directly, we already query for its components and manually coalesce them when making queries for the segment spans (transactions) table on the Transaction Summary page: https://github.com/getsentry/sentry/blob/1378ba1c33d51327e8d6dbc870549b4b06f9fcfc/static/app/views/performance/eap/segmentSpansTable.tsx#L92-L99 This PR makes this manually coalesced attribute actually show in the table, like `user.display` used to pre-EAP.
Missed this spot when adding first-class group field, so snapshots aren't being grouped in our FE. This should fix. Resolves EME-979
…111502) The early return was preventing the panel from ever rendering - we should have only disabled the trigger (floating point when that is the case) Co-authored-by: Claude Sonnet 4 <noreply@example.com>
moves the coverage to the right place and fixes gap between things before <img width="869" height="448" alt="image" src="https://github.com/user-attachments/assets/d015b9c2-1ab8-48a8-820d-dc25f01f2c38" /> after <img width="763" height="469" alt="image" src="https://github.com/user-attachments/assets/4fbce1e4-7493-457a-97bb-1a638c897399" /> --------- Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
…rators are disallowed (#111480)
`compute_breakdowns` was including the segment span itself when computing operation-based time breakdowns. When the segment root span had an op matching the breakdown config (e.g. http.server matching "http"), its full duration was counted, inflating the breakdown to the entire segment length instead of reflecting only child span durations. Filter out the segment span at the call site before passing spans to `compute_breakdowns`, and rename the parameter to `child_spans` to signal the expected input. Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
…oviders (#111528) ## PR details + [get_allowed_org_ids_context_engine_indexing](https://github.com/getsentry/sentry/blob/e702861459fa0cfd50afb59b67ee32ba754b010a/src/sentry/tasks/seer/context_engine_index.py#L213) iterates **ALL** active orgs to decide which ones to index for the Seer context engine. We want to skip orgs that don't have a GitHub integration since that's a pre-requisite for Seer. + The only existing way to check this across silos is get_organization_integrations, which returns full RpcOrganizationIntegration objects — ~100MB of serialized data for ~150K orgs with GitHub, when we only need the org IDs. + This PR adds get_organization_ids_with_providers to IntegrationService which returns just list[int] of distinct org IDs, reducing the payload to < 1MB. + No existing callers of get_organization_integrations need this pattern — all current usage is scoped to a single org or integration. Co-authored-by: Claude Sonnet 4 <noreply@anthropic.com>
…mponent (#111280) It's possible to get into a state where repo's exist in sentry but the integration that added them is removed. I believe we keep the repo's around because removing them could destroy release related data, or some other data that we might want to keep. (we should take a closer look at this though) Recently we added a tree-view component at `/settings/repos/` which groups repo's by provider, but it was hiding repos where the provider is unknown. Before this was a list and everything was visible. This PR aims to restore that visibility. If there are extra repo's on the org we'll see them at `/settings/repos/` in the `Other` section **Other Section** <img width="1121" height="606" alt="SCR-20260322-ozmy" src="https://github.com/user-attachments/assets/7a680282-87aa-4d57-8d92-9c10465b43b1" /> **Not shown in Seer settings (other is not supported by seer)** <img width="1124" height="433" alt="SCR-20260322-oznq" src="https://github.com/user-attachments/assets/214ffdd6-be8c-4490-8589-867e285be97f" /> **When the section is empty, it is not shown** <img width="1119" height="546" alt="SCR-20260322-ozoq" src="https://github.com/user-attachments/assets/37d385e4-ff94-4b87-a589-2df99ffedbce" /> --------- Co-authored-by: Evan Purkhiser <evanpurkhiser@gmail.com> Co-authored-by: getsantry[bot] <66042841+getsantry[bot]@users.noreply.github.com>
…111456) Add `@getsentry/machine-learning-ai` as co-owner for all `*SeerComboBox*` files. Each rule is placed after the longest matching parent directory rule and includes the existing parent owner: - `searchQueryBuilder/askSeerCombobox/` — `@getsentry/data-browsing` + `@getsentry/machine-learning-ai` - `explore/logs/logsTabSeerComboBox.tsx` — `@getsentry/explore` + `@getsentry/machine-learning-ai` - `explore/spans/spansTabSeerComboBox.tsx` — `@getsentry/explore` + `@getsentry/machine-learning-ai` - `discover/results/issueListSeerComboBox.tsx` — `@getsentry/explore` + `@getsentry/machine-learning-ai` - `issueList/issueListSeerComboBox.tsx` — `@getsentry/issue-workflow` + `@getsentry/machine-learning-ai` Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
…on (#111467) Switch the snapshot manifest to use the dict key as the image file name, removing the redundant `image_file_name` field from `ImageMetadata`. All consumers now derive the image name from the manifest key instead of reading it from the value. Changes: - Remove `image_file_name` from `ImageMetadata` model - `categorize_image_diff` uses dict key as the image name - `_build_base_images` and API endpoint derive file name from key - `content_hash` field used for objectstore lookups (falls back to key for old hash-keyed manifests) - Tests rewritten to use filename-keyed manifests Companion CLI PR: getsentry/sentry-cli#3241 Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
…111145) This flag is fully rolled out. Remove the flag registration and simplify all gated code paths: always use the accordion-style widget layout and interactive title dropdown, remove the old SelectableList component and ellipsis menu (WidgetContainerActions).
This renames the tab and it's heading. Source Code Management is what the providers do... what we're interested in is having repositories available. Also wrapped some text with a span to prevent the Stack from turning the parts into block-level elems.
*Need to re-run `uv lock` after getsentry/pypi#2009 merges and update this PR before merging* ## Summary - Add `codeowners-coverage>=0.3.0` to dev dependency group in `pyproject.toml` - Bump CI workflow from `0.2.1` to `0.3.0` v0.3.0 makes ollama an optional dependency (getsentry/codeowners-coverage#2), removing the pydantic conflict that previously blocked adding this as a dev dependency. This enables running `codeowners-coverage check` locally via `devenv sync`. ## Blockers - getsentry/pypi#2009 must merge before `uv lock` can resolve — lockfile update will follow ## Test plan - [ ] getsentry/pypi#2009 merges - [ ] `uv lock` resolves successfully - [ ] `devenv sync` installs the package - [ ] `codeowners-coverage check` runs locally - [ ] CI workflow passes with v0.3.0 --------- Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
…11193) The progress ring was already animated via CSS transitions on stroke-dashoffset. Remove the redundant framer-motion MotionRingBar wrapper and instead gate the existing CSS transition behind the `animate` prop.
…onfig issue types (#111326) Extract shared logic from sourcemap-specific code into a generic framework.
…ic location (#111524) We will need to re-use this logic for other SCM providers (e.g. GitLab soon), so moving this out of GitHub utils + webhooks.
Modify modals so that they return focus to the element that was focused before modal was open. https://github.com/user-attachments/assets/114ffdcb-81bc-47bb-b0d5-b9bd7577d6b8 --------- Co-authored-by: Claude <noreply@anthropic.com>
…Key when caching action filters (#111492) Should be functionally equivalent, but less wordy.
…RouterConfig (#111498) Migrate tests from mocking useLocation and usePageFilters hooks to using initialRouterConfig on render() and PageFiltersStore.onInitializeUrlState(). This uses the real hook implementations for more realistic test coverage. Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
… defaults (#111543) When writing Seer project preferences, delete the ProjectOption row when the value matches the registered default. This lets us distinguish "never configured" from "configured with defaults" by checking for SeerProjectRepository and ProjectOption existence, which simplifies the upcoming dual-read from Sentry DB and allows us to return null preference for never-configured projects. Also, we don't needlessly store default project options. --------- Co-authored-by: Claude Sonnet 4 <noreply@anthropic.com>
Missed this in the previous PR.
#111536) If navigating with arrow keys into a section that's not expanded, you couldn't see which item was focused. This now updates teh sidebar to expand the section the focus is in if an item is selected within it. Resolves EME-978 
…sk (#111458) Our trials of the deletion job have shown that conservative database impact likely will mean _many_ task runs. So, here we pivot back to a task: the idea is to run this every 2min, doing a reasonable amount of cleanup in each run, for a sustainable and automatic clean-up. Once this is finished (should be 3-4 days based on current estimates), the standard incinerator should be able to take over. Updates ISWF-2266.
…ncidentIndexEndpoint.get (#110956) This one is a notable perf risk. This is part of the project described in src/sentry/workflow_engine/docs/legacy_backport.md.
…EOWNERS coverage (#111491)
This is the 1st of three overview parts to land. The focus here is to get all the states coded up, and the buttons working. The design will change. Specifically, the design will look different once the other sections are merged in, as they all share the same grid layout, and the content in the other sections will push content around a little bit. **This adds the first section to the top of the page** <img width="1056" height="368" alt="SCR-20260325-kvjo" src="https://github.com/user-attachments/assets/daf00e9f-95f7-4daa-946a-0226c31af2ef" /> **The section has a bunch of states, shown in the stories** <img width="1664" height="6292" alt="sentry dev getsentry net_7999_stories_product_views_settings_seer_overview_scmoverviewsection_" src="https://github.com/user-attachments/assets/fe2669c7-89d0-4f94-81a5-3562abb85c99" /> --- scmOverviewSection.tsx Three layers, innermost to outermost: 1. useSCMOverviewSection() — private data hook Sits between useScmIntegrationTreeData() (which fetches raw API data) and the view. Its job is to compute the display-relevant derived state: filter all SCM integrations down to only supportedScmIntegrations (those that support autofix), then cross-reference against connectedIdentifiers to produce seerRepos, connectedRepos, and unconnectedRepos. It also collects the loading/error booleans and refetchIntegrations. Not exported — it's an implementation detail of the connected component. 2. SCMOverviewSectionView — exported renderer A pure function of its props. Takes SCMOverviewSectionData (the hook's return shape) plus canWrite and organizationSlug. Renders the section inside SeerOverview.Section and switches between five visual states: loading, error, no integrations, integration-but-no-repos, and the normal stat+action layout. The three action subcomponents (InstallIntegrationButton, CreateReposButton, ConnectAllReposButton) are private to the file. ConnectAllReposButton takes organizationSlug as a prop rather than calling useOrganization(), keeping the entire view tree prop-driven — no context reads below SCMOverviewSectionView except the mutation hook. 3. SCMOverviewSection — exported connected component Five lines. Calls useOrganization() for the slug, calls useSCMOverviewSection() for the data, and spreads both into SCMOverviewSectionView. The public API for callers that don't want to manage data themselves. scmOverviewSection.stories.tsx Imports SCMOverviewSectionView directly (skipping the connected layer entirely). Defines a GITHUB_INTEGRATION fixture and a REPOS array of three repos at the top of the file, then a BASE_PROPS object representing the "happy path" steady state (integration present, all repos visible, none connected yet). Each story overrides only the props relevant to the state being illustrated. The outer SeerOverview grid wrapper is present in every story because SeerOverview.Section uses CSS subgrid and needs a parent grid to inherit columns from. Notable design decision: SCMOverviewSectionData is defined as a named interface (not inlined in the props) and SCMOverviewSectionViewProps extends it. This means the hook's return type and the view's prop type are formally linked — if the hook's shape changes, TypeScript will surface it at the view's call sites automatically.
Updates primary navigation to perform hover UA feature detection and bypass the current primary navigation mouseEnter logic to instead use onClick. As a consequence, this means that if users are on mobile and the UA does not support hover, clicking an item in the primary nav will no longer trigger a navigation. This unblocks users from being able to see other subsections of the navigation without having to actually navigate to them. In a similar manner, secondary navigation interactions are now treated terminal destinations and will trigger the navigation close event, naturally landing the users on the page that they navigated to. Co-authored-by: Claude <noreply@anthropic.com>
…#111537) + Context engine indexing previously iterated all ~1.8M active orgs, applied hour bucketing (~75K), then checked the feature flag on each. Now it first fetches ~107K org IDs with an active GitHub/GitHub Enterprise integration via the new get_organization_ids_with_providers RPC method, applies hour bucketing in memory (~6K), and only loads those Organization objects for the feature flag check. + Orgs without a supported SCM integration can't have Seer, so filtering them out early avoids ~1.7M unnecessary org fetches and feature flag lookups per run. + Uses IntegrationProviderSlug enum values for the provider list so adding GitLab support later is a one-line change. + **This PR needs to wait till this one is deployed to Control silo - #111528 --------- Co-authored-by: Claude Sonnet 4 <noreply@anthropic.com>
Replaces custom `pulsatingIndicatorStyles` with new `StatusIndicator` component **Before** https://github.com/user-attachments/assets/b781e751-1eb3-4cb3-8c87-675760581499 **After** https://github.com/user-attachments/assets/b5cc5d21-4ced-4e95-9ce3-48981ddc37d6
Updates the `@sentry/scraps/slider` component for improved visuals, accessibility, and flexibility. closes DE-975, DE-959 [View Preview Deployment](https://sentry-git-scraps-slider.sentry.dev/stories/core/slider/) --------- Co-authored-by: Cursor Agent <cursoragent@cursor.com> Co-authored-by: Scott Cooper <scttcper@gmail.com> Co-authored-by: getsantry[bot] <66042841+getsantry[bot]@users.noreply.github.com>
…che (#111545) Django's `CacheHandler` stores connections in a contextvar (`asgiref.local._CVar`). When `contextvars.copy_context()` copies these across threads — as `ContextPropagatingThreadPoolExecutor` does — multiple threads share a single `pymemcache.HashClient` instance. `HashClient` is not thread-safe: `_retry_dead()` races on a shared `_dead_clients` dict, causing `KeyError` crashes when a twemproxy node flaps. This was surfaced by the `ThreadPoolExecutor` → `ContextPropagatingThreadPoolExecutor` migration in #111464 (reverted in 7e509b5), which caused consumer worker threads to inherit the parent's cache connection instead of creating their own. The same race also affects web workers (SENTRY-5MFX, SENTRY-5E8T) via granian's thread pool. The fix stores the backend in a contextvar with a thread ID check. When a copied context is accessed from a different thread, a new client is created. This preserves contextvar semantics (async-safe) while restoring per-thread isolation for `HashClient`. Fixes SENTRY-5H8T Agent transcript: https://claudescope.sentry.dev/share/DUqlzydq70wt3Np4p2CKKgDFZAM251ooNsKQg4RIXiY
…ource code (#111556) The coverage indicator border on the line number column was flush against the source code. Add column-gap to the grid row to create spacing between the two columns. Also simplify the coverage and long line number stories to use makeFrame directly with explicit context lines. before <img width="384" height="104" alt="image" src="https://github.com/user-attachments/assets/110c5ae1-ab94-4759-8a76-d64041ea3c45" /> after <img width="373" height="106" alt="image" src="https://github.com/user-attachments/assets/096ed6f8-f10c-4353-9360-f3a4cf72200a" /> Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
Update the sentry-cli version used in the frontend snapshots workflow from 3.3.3 to 3.3.4-snapshot.20260325.06cbbda. Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
Update modal animation to use scraps easings. Also updates scraps framer definitions to return 0 duration animations in testing env
this skill seeks to address some recurring problems in claude-generated code related to the region -> cell/locality migration that is under way it contains 3 main parts: 1. an architecture reference describing the desired end state, and the key concepts being introduced 2. a migration guide which describes how to perform the migration steps. this includes pointers to address some recurring issues with have seen with claude generated code during the migration so far - e.g. lack of proper handling of atomic deployments, co-ordination with other codebases and applying conventions for naming and tracking TODOs 3. known major issues - there are a some specific areas of the codebase that are incompatible with cell architecture. e.g. org operations without slugs, jira integration issues, integration team linking issues, problems with relocations. these are described in more detail along with the proper approach to dealing with them. the section can be removed once they are tackled.
…111561) Sometimes github throws a tantrum and `setup-sentry` hangs, causing the calling action to timeout. Our median run time for this action is ~1.5minutes, so we really shouldn't be letting this action run loose. This PR adds a configurable timeout (default 10 min) to the `devservices up` call so we can exit earlier. Uses the native linux `timeout` command. ### Other options explored - `timeout-minutes` still [isn't supported](https://github.com/actions/runner/blob/main/docs/adrs/0549-composite-run-steps.md#timeout-minutes) in composite actions, a feature request has been open for years: actions/runner#1979 - Putting a `timeout-minutes` on every single step that uses this action is possible but annoying, we already use this action in ~17 different places. - Wrapping this in a reusable workflow will allow us to set a timeout, but reusable workflows run in their own runner and are aren't useful for setting up an environment for another workflow
Increase secondary navigation list gap
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 : )