Skip to content

[pull] master from getsentry:master#1832

Merged
pull[bot] merged 30 commits into
KingDEV95:masterfrom
getsentry:master
Mar 27, 2026
Merged

[pull] master from getsentry:master#1832
pull[bot] merged 30 commits into
KingDEV95:masterfrom
getsentry:master

Conversation

@pull
Copy link
Copy Markdown

@pull pull Bot commented Mar 27, 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 : )

manessaraj and others added 30 commits March 27, 2026 12:15
Move IssueSearchQueryException to common exceptions module.
On the monitor list views we are only showing the directly-connected
alerts. The detail pages already show the full list including
project-connected alerts. This simply adds the functionality to the list
view.
Currently the PR creation step is handled in the explorer update
endpoint. This meant we had to feature flag it such that it can be used
with just autofix-on-explorer. This change brings the PR creation step
into the group ai autofix endpoint so that it is centralized in 1 place.
It also serves as a place where we'll be able to inject the trailing
text to say `FIXES SENTRY-123` in the PR description.
…sponds (#111685)

## PR Summary

+ Bug reproduction steps:
   + Open the Explorer chat panel with context engine
   + Type a message and send it
+ Watch the chat area — the "Thinking" block appears for a split second,
then disappears
+ For the next 2-3 seconds, only the grey user message bubble is visible
with no activity indicator
   + Eventually the real assistant response appears

+ **Bug root cause:** When a user sends a message, the frontend shows an
optimistic "Thinking..." assistant block immediately. The backend
acknowledges the user message synchronously and returns, then enqueues a
Celery task to run the actual agent. The frontend polls for session
updates and detects the server signature has changed (the user block now
exists server-side), which triggers the optimistic clearing logic. But
at this point the Celery worker hasn't produced an assistant block yet —
so the "Thinking" block disappears and the UI shows just the grey user
message with no activity indicator for 2-3 seconds until the worker
responds.

+ **It's there on regular explorer too but it's worse with context
engine:** The Celery worker runs context retrieval synchronously before
starting the main explorer agent. With context engine enabled, this
includes an additional LLM call (via domain_context stage) on top of
Sentry docs retrieval and org-project embedding lookups. This adds 2-3
extra seconds of processing before any assistant block is produced,
making the "dead" UI gap much more noticeable.

+ **Fix**: Instead of clearing optimistic state on any signature change,
the effect now checks whether the server actually has an assistant
response block at or after the insert index. The "Thinking" block
persists until either:A real assistant block appears in the polled data,
or A 30-second safety timeout expires (in case the Celery worker fails
entirely)

---------

Co-authored-by: Claude Opus <noreply@anthropic.com>
…11715)

This is a forward compatibility step. By wrapping the raw response with
the data key we can add more keys later to communicate more information
(if needed) without breaking existing callers. I decided to add the
headers to the raw response for completeness.
Contain the traces table scroll area inside the panel and switch the
table layout to Scraps layout primitives.

The overflow regression came from the traces table content escaping its
panel boundary when the table needed horizontal scrolling. This keeps
the scrollable area inside the panel while preserving the existing table
structure.

Also replaced the custom grid wrapper and header styling with
`Container`, `Grid`, and a scoped header wrapper so the layout is
expressed directly in the component tree. That makes the overflow
behavior easier to reason about and avoids depending on a bespoke styled
grid container.

Refs EXP-845

Made with [Cursor](https://cursor.com)
… ame message (#111721)

+ When a user rethinks and re-sends the same message, the clearing
effect was matching stale pre-truncation server blocks, causing deleted
blocks to briefly reappear and the thinking indicator to vanish. Store
the session updated_at as a baseline when setting optimistic state and
skip the clearing effect until the server has actually processed the
request.
+ Was introduced when fixing another bug in this PR:
#111685

Co-authored-by: Claude Sonnet 4 <noreply@anthropic.com>
As noted in
#110842 (comment),
we have a lot of very similar drag-to-reorder buttons. This extracts a
shared `DragReorderButton` component for all of them.

One notable change: `style={{cursor: 'grab'}}` was only added in one
existing component, under rules/uptime/assertions. Now it's in the
shared one. ~I'm checking with design today and we might end up changing
it - but I don't think the single cursor style should block review.~
Confirmed we prefer the grabby one.

Fixes EXP-856
Add a generic API-mode step that handles the full OAuth2 authorization
code flow in a single step: returns the authorize URL for the frontend
to open in a popup, then accepts code/state from the trampoline callback
and exchanges it for an access token. Includes a configurable bind_key
for controlling where token data is stored in pipeline state.

Refs VDY-37
…ines (#111539)

Add a new REST endpoint that allows driving integration pipelines via
JSON API requests instead of the legacy redirect-based flow. The
endpoint supports initializing a pipeline (POST with action=initialize),
retrieving the current step info (GET), and advancing through steps
(POST with step-specific data).

Uses ControlSiloOrganizationEndpoint as the base class since integration
models live in the control silo, requiring the RPC service layer to
resolve organizations from slugs.

The endpoint rejects pipelines that don't support API mode with a 400,
and returns structured errors for invalid providers, missing sessions,
and unsupported pipeline names.

Refs VDY-36

Requires #111454

---------

Co-authored-by: getsantry[bot] <66042841+getsantry[bot]@users.noreply.github.com>
…ty (#111717)

The dropdown menu renders in a React portal, so its DOM lives outside
the row. This adds a DOM containment check: before toggling, verify
`event.currentTarget.contains(event.target)`. Portal-originating events
fail this check since their DOM subtree is separate from the row's.

Fixes LOGS-638

Made with [Cursor](https://cursor.com)
Add pretty-printing for JSON attribute values in the logs attributes
tree.

String attribute values that contain valid JSON (`{` or `[` that pass
`JSON.parse`) are now rendered using `StructuredEventData` instead of
plain text, providing a collapsible, syntax-highlighted tree view.

Simple JSON where all values are primitives (e.g. `{"boop": "bop"}`)
renders compactly inline via CSS overrides, while nested structures get
the full expandable tree with toggle buttons. The styled wrapper also
resets `<pre>` default margins to keep the tree row grid layout properly
aligned.

<img width="833" height="425" alt="Screenshot of logs with object and
array attribute values syntax-highlighted"
src="https://github.com/user-attachments/assets/8ad56817-da1f-44cb-83e8-829a63c1d4dc"
/>

Fixes LOGS-400

Made with [Cursor](https://cursor.com)
…ma workflow (#111720)

<!-- Describe your PR here. -->

We added the new default rulesets that requires all commit to go through
PRs and that breaks this workflow.
Added the following changes to fix it
- created a new dedicated github app for this
- added the github app to allowlist in the ruleset
- update the workflow to use the new github app instead of `getSantry`
- added the app-id and private key through org secrets and variables
- replaced `getsentry/action-github-app-token` with
`actions/create-github-app-token` so that we have options to control the
repo scope of the short-live token
- update the git commit info to use the github app
…binedRuleIndexEndpoint.get (#111692)

The JIT is expensive and being used when we don't need it. We can try to
work around it or restructure the query to avoid the jit threshold, but
just scoped disabling gets us exactly what we want.

I've confirmed the JIT impact by analyzing sample queries and observing
that the vast majority of the time is spent in JIT, but with JIT
disabled the query is much faster.
Demo at https://redash.getsentry.net/queries/10853

I've also confirmed in traces that this query is consistently slow
(280ms-450ms) and issued twice per request.

NB: The workflow engine variant of this endpoint isn't yet released, so
the risk here should be quite low.
#111660)

Replaces the raw source ID (`preprod-size-analysis:4510398352719872`) in
Slack alert notifications from size analysis monitors with a structured,
human-readable single-line evidence display.

**Before:**
```
preprod-size-analysis:4510398352719872
State: New   First Seen: Just now
```

**After:**
```
Install Size, Absolute Diff > 1.0 MB (+1.0 MB)
```

More examples:
```
Uncompressed Size, Relative Diff > 5% (+5.1%)    # Android
Download Size, Absolute Size > 50.0 MB (52.3 MB)  # absolute threshold
```

Changes:
- Build a single-line evidence string in `create_occurrence()` with
format: `{measurement}, {threshold_type} > {threshold} ({actual_value})`
- Platform-aware labels: "Uncompressed Size" for Android, "Install Size"
for iOS
- Set `notification_config` with `context=[]` and
`text_code_formatted=False` to remove meaningless
Events/Users/State/First Seen context and code formatting
- Extract `format_bytes_base10` to shared `preprod/utils.py` for reuse

refs eme-984

---------

Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
I didn't realize you already could filter by detector type so this PR
just documents it better and adds a test to make sure filtering by
`type:issue_stream` works.
)

Closes FS-228.

### 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.
This check already exists on the frontend, no need to check it twice.
This also lets us use to for non seat based seer plans.
Emit some metrics for when explorer autofix is triggered along with
referrers so we know what triggered it.
once this is deployed everywhere we can update the dispatch code to send
the new name

also updated agent instructions around celery and taskworker deploy
safety
)

Issue:
https://sentry.sentry.io/issues/5865067343/?project=1&query=is%3Aunresolved&referrer=issue-stream&statsPeriod=7d
This PR addresses the `seer.delete_grouping_records.project.failure`
errors, which saw a significant spike recently.

The root cause was a mismatch in how Sentry was calling the Seer API
endpoint for deleting grouping records by project
(`/v0/issues/similar-issues/grouping-record/delete`).

Specifically, two issues were identified:
1. **Incorrect HTTP Method**: Sentry was sending a `POST` request, while
the Seer endpoint was defined as a `GET`.
2. **Incorrect Parameter Location**: Sentry was sending the `project_id`
in the request body, but Seer expected it as a **path parameter** (e.g.,
`/v0/issues/similar-issues/grouping-record/delete/{project_id}`).

This change updates the
`make_delete_grouping_records_by_project_request` function in
`src/sentry/seer/signed_seer_api.py` to:
*   Use the `GET` HTTP method.
* Construct the URL with the `project_id` included as a path parameter.
*   Send an empty body, as `GET` requests typically do not carry a body.

This fix ensures that Sentry correctly communicates with the Seer
service for project grouping record deletions, resolving the 404 errors
and allowing these background tasks to complete successfully.

Co-authored-by: sentry[bot] <39604003+sentry[bot]@users.noreply.github.com>
If legacy autofix has run, we should at least auto trigger explorer
autofix to run root cause.
introduce config that isn't used yet.
once this config is set in prod, we can flip usages in the codebase
@pull pull Bot locked and limited conversation to collaborators Mar 27, 2026
@pull pull Bot added the ⤵️ pull label Mar 27, 2026
@pull pull Bot merged commit f2883c3 into KingDEV95:master Mar 27, 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 27, 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.