Skip to content

[pull] master from getsentry:master#1824

Merged
pull[bot] merged 45 commits intoKingDEV95:masterfrom
getsentry:master
Mar 25, 2026
Merged

[pull] master from getsentry:master#1824
pull[bot] merged 45 commits intoKingDEV95:masterfrom
getsentry:master

Conversation

@pull
Copy link

@pull pull bot commented Mar 25, 2026

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 : )

JonasBa and others added 30 commits March 25, 2026 09:14
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>
…016 (#111464)"

This reverts commit 8bbe2ba.

Co-authored-by: wedamija <6288560+wedamija@users.noreply.github.com>
`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>
#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


![arrow_nav](https://github.com/user-attachments/assets/c9a13059-27d4-4099-8745-e246dcc82b84)
…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.
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.
JonasBa and others added 15 commits March 25, 2026 13:04
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>
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
…workflow (#111378)

If multiple if/then blocks are used in a workflow we're only able to
render one of them in the legacy issue alerts UI. This PR adds an item
to the `errors` response so that we can render a warning on the front
end. See #111344 which will be
updated to read this error.
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
@pull pull bot locked and limited conversation to collaborators Mar 25, 2026
@pull pull bot added the ⤵️ pull label Mar 25, 2026
@pull pull bot merged commit 8e90e82 into KingDEV95:master Mar 25, 2026
@github-actions github-actions bot added Scope: Frontend Automatically applied to PRs that change frontend components Scope: Backend Automatically applied to PRs that change backend components labels Mar 25, 2026
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

⤵️ pull Scope: Backend Automatically applied to PRs that change backend components Scope: Frontend Automatically applied to PRs that change frontend components

Projects

None yet

Development

Successfully merging this pull request may close these issues.