Skip to content

[pull] master from getsentry:master#1815

Merged
pull[bot] merged 16 commits intoKingDEV95:masterfrom
getsentry:master
Mar 23, 2026
Merged

[pull] master from getsentry:master#1815
pull[bot] merged 16 commits intoKingDEV95:masterfrom
getsentry:master

Conversation

@pull
Copy link

@pull pull bot commented Mar 23, 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 : )

obostjancic and others added 16 commits March 23, 2026 12:24
Sort spans by `start_timestamp` instead of `end_timestamp` in the
conversation hook so the AI Spans list displays spans in the order they
began. The Messages panel is unaffected because
`extractMessagesFromNodes` applies its own internal sort by
`end_timestamp`.

---------

Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
…ct the SCM type from the provider's capabilities (#111113)

- API is compatible so minimal test coverage changes.
- The static facade really helped in keeping the test coverage simple.
- The static facade seems to have helped in the RPC too.
- Catching AttributeErrors and re-routing to the client to handle. This
is a little broad ATM. I'd like to only catch attribute errors triggered
by provider/action mismatches.
- Remove `project_template_detail.py` and `project_template_option.py`
from the `create_or_update` allowlist in
`test_no_create_or_update_usage.py`
- These files no longer exist in the codebase

Part of the ongoing effort to deprecate and remove the legacy
`create_or_update` in favor of Django's `update_or_create`.
#109238)

## Summary
- Adds `SeerOperatorExplorerCache` class to `cache.py`, keyed by
`run_id` with 1-hour TTL
- Simpler than the Autofix cache (no pre/post migration) since Explorer
receives a `run_id` directly from the trigger call
- Adds `OPERATOR_CACHE_SET_EXPLORER` and `OPERATOR_CACHE_GET_EXPLORER`
metric interaction types
- Adds tests for cache key format, set, get, and cache miss

ISWF-2024

---------

Co-authored-by: Leander Rodrigues <me@leander.xyz>
Co-authored-by: Claude <noreply@anthropic.com>
… events tracing (#111093)

Implements double reads of occurrences from EAP for the errors query in
`query_trace_data` in
`src/sentry/api/endpoints/organization_events_trace.py`.
…111191)

Wrap the KafkaProducer with a SingletonProducer. The SingletonProducer
keeps producer buffers smaller (1000 vs 10000) and ensures that produce
buffers are drained during shutdown.
…erer (#109317)

## Summary
- Adds `SeerExplorerResponse` dataclass and
`SeerExplorerResponseTemplate` to the notification platform for Explorer
completion data
- Adds `SEER_EXPLORER_RESPONSE` to `NotificationSource` enum and source
map
- Adds `_render_explorer_response()` to `SeerSlackRenderer` — renders a
section block (summary or default text) with a "View in Sentry" link
button
- Wires the new data type into the `SeerSlackRenderer.render()` dispatch

ISWF-2025

---------

Co-authored-by: Leander Rodrigues <me@leander.xyz>
Co-authored-by: Claude <noreply@anthropic.com>
Co-authored-by: Claude Opus 4.6 <noreply@example.com>
Defense in depth and save us from loading data in memory we don't need. 

The group_id param is (indirectly) user controlled since seer pulls
those issue IDs from PR descriptions. _group_by_short_id scoped the
organization, but the ID path didn't have an org filter. We have a
post-query check so i's already not a problem in the response, but
there's no reason to query for this at all when we can pre-filter.
Prevents loading that data in memory and makes both paths consistent.
## Summary
- Replace `create_or_update` with Django's `update_or_create` in 7 API
endpoint files
- Remove migrated files from the `create_or_update` allowlist
- Parameter mapping: `values={}` → `defaults={}`, filter kwargs
unchanged

Migrated files:
- `organization_pinned_searches.py` — return value ignored
- `prompts_activity.py` — return value ignored
- `organization_unsubscribe.py` — return value ignored
- `organization_recent_searches.py` — `[1]` index → `_, created` tuple
unpack
- `group_index/update.py` — 2 call sites: manager method + standalone
function call
- `organization_group_search_view_visit.py` — return value ignored

Part of the ongoing effort to deprecate and remove the legacy
`create_or_update` in favor of Django's `update_or_create`.
…onfigs (#111291)

Ensure all prebuilt dashboard widgets with `legendType: 'breakdown'`
have a limit of 3, so broken out legends show a maximum of 3 items. This
is just for consistency
Fixes DAIN-1380

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

Only require `autofix-on-explorer` to start automations as not all orgs
will have `seer-explorer`.
…roupBy (#111245)

Extract the inline logic that matches time series data to table rows in
the breakdown legend into a dedicated `matchTimeSeriesToTableRow`
function with tests.

Tested with following dashboards
<img width="1298" height="728" alt="image"
src="https://github.com/user-attachments/assets/3d58d931-ab3b-4397-bba6-9a87a4703a63"
/>



The new implementation uses `groupBy.every()` to match all groupBy keys,
enabling legend breakdown for widgets with multiple group-by columns. It
also handles type coercion between numeric table values and string
groupBy values (e.g., `http.response_status_code: 200` in the table
matching `"200"` from the backend) using Python's `str()` conversion
rules.

Changes:
- New `matchTimeSeriestoTableRow.tsx` with the extracted matching logic
and `toPythonString` helper
- Tests covering: no groupBy, single groupBy, multiple groupBy,
numeric-to-string coercion, no match
- Removed the widget builder restriction that disabled legend breakdown
for >1 group-by column
- Removed unused `aggregates` variable from `visualizationWidget.tsx`

Refs DAIN-1387

---------

Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
Co-authored-by: Claude Opus 4.6 <noreply@example.com>
The "Read the docs" link in the GitHub Copilot integration CTA points to
`docs.sentry.io/organization/integrations/github-copilot/` which returns
a 404.

Removes the link from both the installed and not-installed states. The
rest of the
CTA copy and functionality is unchanged. The link can be re-added once
the docs page exists.


Agent transcript:
https://claudescope.sentry.dev/share/vG5lStfoMBbmZcJ3VliZion_bLqDYH39Gfq96F-HFBA
)

- tags metric with org slug
- captures error on failed validation
- adds a couple new refs to guard against duplicate metrics on the same
generation cycle, or metrics on refresh
@pull pull bot locked and limited conversation to collaborators Mar 23, 2026
@pull pull bot added the ⤵️ pull label Mar 23, 2026
@pull pull bot merged commit a186745 into KingDEV95:master Mar 23, 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 23, 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.