[pull] master from getsentry:master#2004
Merged
Merged
Conversation
…6293) ## Summary - Pass bytes directly to tasks instead of base64-encoding, now that taskbroker uses msgpack - `assemble_download`: `page_token` now accepts `bytes | str` - `fulfill_cross_region_export_request`: `encrypt_with_public_key` now accepts `bytes | str` - Both handle legacy base64 strings for backwards compatibility Follow-up to #115069 which did the same for `process_profile_task`. ref STREAM-1011
This PR refactors the `IssueDiff` component's event data fetching logic. Previously, the component used multiple `useQuery` hooks to sequentially fetch 'latest' event IDs and then the full event data. This created a complex asynchronous chain that could lead to flaky tests, specifically `JEST-21V8: TestingLibraryElementError: Unable to find an element by: [data-test-id="split-diff"]`, where the `SplitDiff` component was not rendered within the test timeout. This change consolidates the data fetching into a single `useQueries` call. It leverages `skipToken` for conditional fetching and the `combine` function to process the results and compute the combined stacktraces. This approach simplifies the component's data fetching logic, making it more robust and easier to reason about, which should also contribute to more stable test execution. Related to JEST-21V8 --------- Co-authored-by: sentry[bot] <39604003+sentry[bot]@users.noreply.github.com> Co-authored-by: Cursor Agent <cursoragent@cursor.com> Co-authored-by: Ryan Albrecht <ryan@ryanalbrecht.ca> Co-authored-by: Ryan Albrecht <ryan.albrecht@sentry.io> Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
The GET handler for the codeowners endpoint looked up RepositoryProjectPathConfig by config id and organization only. The sibling PUT and DELETE handlers on the code-mapping details endpoint gate on project access; this brings the GET path in line with that behaviour. Also moves the test file to the canonical mirror path under tests/sentry/integrations/api/endpoints/ to match the source module location, and consolidates the two test classes into one following the pattern established by the sibling endpoint tests. <!-- Describe your PR here. --> <!-- 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. Co-authored-by: Claude Sonnet 4 <noreply@anthropic.com>
now that ai issue detection is GA, updating the badge from beta to new
…116196) Prioritize bookmarked projects over membership status in our project page filter sort Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
Add a `shuffle` parameter to `CursoredScheduler` that randomizes the PK processing order at cycle start. Defaults to `False` for backward compatibility. The CursoredScheduler currently always processes items in ascending PK order. When items have varying processing yield, this creates a deterministic pattern of peaks and dips that repeats every cycle. Shuffling distributes high-yield items randomly across the cycle, smoothing throughput over time.
Move all custom metadata (theme, variant, size, state, etc.) from flat top-level keys into a structured `tags: Record<string, string>` field across all 14 snapshot test files. This makes snapshot properties filterable and queryable on the product side without relying on `extra = "allow"` passthrough fields. **Framework type changes** `SnapshotTestMetadata` replaces the previous `Record<string, string>` parameter on `it.snapshot()` and `it.snapshot.each()`. The new type restricts metadata to three keys: `group`, `display_name`, and `tags`. The `SnapshotImageMetadata` output interface gains a matching `tags` field. No backend changes needed — `ImageMetadata` in `manifest.py` already has `tags: dict[str, str] | None` with coercion. **Per-file tag mapping** Every snapshot test now passes an explicit `tags` object containing the relevant axes for that component — `theme` is universal, `size`/`variant`/`state` vary by file. An `area` tag distinguishes core design system primitives (`core`) from product-side snapshot UI (`snapshots`). Three files (checkbox, radio, switch) that previously had no metadata now gain tags for the first time. --------- Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
…eature flag (#116189) ## Summary - Registers `organizations:onboarding-scm-project-creation-experiment` in `temporary.py` for the SCM-first project creation wizard A/B test. - Uses `FLAGPOLE` handler with `api_expose=True` so the frontend can read it via `useExperiment()` to gate the new wizard against the legacy `createProject.tsx` form. Companion PR in sentry-options-automator: getsentry/sentry-options-automator#7930 Refs VDY-73 ## Test plan - [ ] Verify flag is accessible via the org serializer - [ ] Confirm experiment assignment works with `useExperiment()` hook once the wizard scaffold (VDY-73 follow-up) lands
) This fixes y-axis formatting for all charts but it was a needed fix for heat maps. Initially the y-axis would preserve decimal points up to 20 spaces (that's way too much) and it would take up so much space on the chart. This is especially seen with the logarithmic heat maps y-axis. I've changed this to use the default in `formatNumberWithDynamicDecimalPoints` or 4 decimal points in really small numbers. This way the y-axis values are shown with enough detail but don't take up a big chunk of space. | Before | After | |--------|--------| | <img width="620" height="432" alt="image" src="https://github.com/user-attachments/assets/c575ce9b-e000-4241-9b10-04350142ba9c" /> | <img width="616" height="438" alt="image" src="https://github.com/user-attachments/assets/313a462b-b6a6-4985-bce2-29bbc783f3a6" /> |
This makes a few small changes to the `SafeRolloutComparator` code. - For the initial round of span-first detector testing, only the comparison part of the comparator is needed. This therefore splits the `check` part of `check_and_choose` off into its own `compare` method. - In cases where only the comparison is being used, it's not accurate to say that either the experimental or control data is being used. Therefore, "both" and "neither" have been added as allowable `source_of_truth` tag values, to account for (as the names would suggest) both results being used or both results being discarded. - Finally, now that it's part of the `compare` method rather than the `check_and_choose` method, for new comparators the `SafeRolloutComparator.check_and_choose` metric has been renamed to `SafeRolloutComparator.compare`. (The one existing comparator now has a flag which preserves the old behavior, so as not to break existing dashboards.) h/t Claude for his help with parts of these changes
…115639) ## TL;DR Decouples the four SCM onboarding step components from `OnboardingContext` so they accept all flow state via props. Adapter wrappers in `onboarding.tsx` source those props from context, preserving today's behavior. Unblocks the project creation variant of SCM onboarding. --- Refactor `ScmConnect`, `ScmPlatformFeatures`, `ScmProjectDetails`, and `ScmRepoSelector` to read and write all flow state via props. Three adapter wrappers in `onboarding.tsx` (`ScmConnectAdapter`, `ScmPlatformFeaturesAdapter`, `ScmProjectDetailsAdapter`) source those props from `OnboardingContext`, preserving today's behavior. This unblocks the project creation variant of SCM onboarding (VDY-73 through VDY-78), which needs the same components driven from local wizard state instead of session-storage-backed context. `clearDerivedState` moves out of `ScmRepoSelector` and into the onboarding adapter so callers in other flows can pick their own invalidation strategy. `ProjectDetailsFormState` is now exported from `onboardingContext` so the project-details prop interface can name it. Alternative considered: a shared `ScmFlowContext` that both flows would populate. Rejected for two-consumer scope because it reintroduces a provider wrapper in tests (the simplification this PR delivers) and adds an abstraction layer with marginal payoff at this size. Supersedes #112948. Refs VDY-72
…16316) Add `github_enterprise` to the list of providers that use the new API-driven pipeline modal instead of the legacy popup-based flow.
…ization (#116322) logger.error() in _serialize_rpc_issue causes Sentry to capture these as error events (~14K/day), but a deleted/merged group during trace rendering is an expected race condition. The function already handles this gracefully by returning None. Downgrade to logger.info to stop generating noise. Fixes SENTRY-5KWJ
Limited-access flag registered Aug 2024, never GA'd (~22 months). Remove the flag and its MRI alert gating from charts.py and snuba_query_validator.py. The custom-metrics flag still gates MRI access where needed.
- This endpoint was defaulting to all time so queries were commonly timing out, add our usual snuba params style timestamps along with a trace style timestamp parameter with a buffer
…#116319) Move project access control in the latest-base-snapshot endpoint from a post-fetch check to a queryset-level filter. The old approach picked the globally latest artifact, then returned 404 if the user lacked access to its project — even when older, accessible artifacts existed. The new approach filters the queryset upfront using `request.access.accessible_project_ids`, so the query returns the latest artifact the user can actually see. Also adds an explicit `project__status=ObjectStatus.ACTIVE` filter to the base queryset so inactive/deleted projects are excluded for all users, including staff and global-access roles. This preserves the status check that the old `has_project_access()` call performed. Staff and `has_global_access` users (superusers, org owners) bypass the project-id filter entirely, keeping their existing behavior intact. Co-authored-by: Claude <noreply@anthropic.com>
Legacy user feedback is the last place using ActivityItem. This moves the markup and styles into the component so it owns the avatar + speech bubble layout locally. Types event.userReport and hides email when it is the same as the display name. Redash query where you can find issues that use legacy user feedback https://redash.getsentry.net/queries/11330/source New story for component <img width="917" height="302" alt="image" src="https://github.com/user-attachments/assets/e16379bc-364c-40b5-9fb8-15c2432fbc77" />
Activity notes and the note preview were still using MarkedText with local markdown styles layered on top. This swaps both to the core Markdown component and lets it own the rendered markdown styling. Only real functional change is internal links (missing https://) are no longer allowed, which i think is fine. before <img width="396" height="267" alt="image" src="https://github.com/user-attachments/assets/db1bbca4-cea5-45ea-a721-82cade2f4681" /> after <img width="353" height="181" alt="image" src="https://github.com/user-attachments/assets/66a8a4a3-ee85-496a-b599-0e1a14d56c3d" />
…ers (#116323) Fixed 2 vulns: - Use hashed token lookup in `/oauth/userinfo` endpoint. The endpoint was looking up tokens by plaintext column only, diverging from the standard hash-first path used everywhere else. Switch to `hashed_token` lookup with plaintext fallback and migration, matching `UserAuthTokenAuthentication._find_or_update_token_by_hash`. - Reject tokens for inactive/suspended users and disabled apps in '/oauth/userinfo`. The endpoint was missing is_active checks that the standard `UserAuthTokenAuthentication` path enforces. Tokens belonging to deactivated users or disabled OAuth applications now return 401. --------- Co-authored-by: Claude <noreply@anthropic.com>
…116325) The skip_field_validation_for_entity_subscription_deletion flag was added to bypass query validation during subscription deletion, but it only covered default_filter_converter. The resolve_tag_key method was still raising IncompatibleMetricsQuery for tags not in default_metric_tags (e.g. http.url), causing deletion to fail. Fixes SENTRY-5HAG
… Server integration setup (#116295) Implement `get_pipeline_api_steps()` on `BitbucketServerIntegrationProvider` with two steps: installation config (validates URL, RSA private key, and consumer key length, then fetches an OAuth 1.0a request token from the Bitbucket Server instance), and an OAuth callback step that builds the authorize URL from the request token and exchanges the callback's `oauth_token` (used by Bitbucket Server as the verifier) for an access token. Legacy `InstallationConfigView`, `OAuthLoginView`, and `OAuthCallbackView` remain in place so in-flight installs can complete via the existing flow; they will be removed in a follow-up ([VDY-103](https://linear.app/getsentry/issue/VDY-103/remove-legacy-bitbucket-server-integration-setup-views)) once the API flow has been validated in production. Ref [VDY-99](https://linear.app/getsentry/issue/VDY-99/bitbucket-server-api-driven-integration-setup)
Backfill was removed in #102364 1. getsentry/getsentry#20423 2. [this PR] #116253 3. getsentry/ops#20829 4. getsentry/ops#20828
…116327) Resolves ISWF-2751 It's simple enough to use the paginated endpoint, but let's make sure it works before turning it on for all customers.
…ver integration setup (#116294) Register Bitbucket Server in the pipeline registry with two steps: an installation config form (URL, consumer key, RSA private key, SSL toggle) and a popup-based OAuth 1.0a authorization step using `useRedirectPopupStep`. Unlike OAuth 2.0 providers, the Bitbucket Server callback returns an `oauth_token` (used as the verifier), which the frontend relays to the backend as `oauthToken`. Ref [VDY-99](https://linear.app/getsentry/issue/VDY-99/bitbucket-server-api-driven-integration-setup)
There are no in progress plan migrations and any new migrations would need to be done on the billing platform, so we are deleting the legacy plan migration API and this frontend that used it
…#115937) The org listing endpoint returns the smaller OrganizationSummary type not the full Organization. OrganizationSummary is a strict subset of organization and does not include a number of fields, such as `features` (as these can no longer be returned from the control silo). Since `features` is not present on OrganizationSummary, this change unconditionally shows every category on the notifications list page, and doesn't hide any. This seems the safer direction to go, as the notificationSettingsByType component is primarily just a list of links -- the actual orgs that the change would be applied to is configured on the linked view. The exception to this pattern is self-hosted. This follows the pattern in #115829 which hid the `quota` entry from the notification settings index on self-hosted. This PR adds the same `isSelfHosted` gate so a direct link to the quota page returns null on self-hosted instead of rendering categories that don't apply.
…#116193) Closes [SCM-112](https://linear.app/getsentry/issue/SCM-112). Adds GitHub Enterprise support to Sentry's SCM Platform RPC server so seer's \`ScmRepoClient\` proxy path can construct a working \`GitHubProvider\` for \`github_enterprise\` integrations.
…16306) We were not checking the `alerts:write` permission on the frontend on both the alerts list and details pages, so users in orgs with that setting disabled were able to attempt to create/edit alerts but would eventually get rejected by the form. This PR disables those buttons with an explanatory tooltip in all locations where a user can create/edit alerts. <img width="304" height="173" alt="CleanShot 2026-05-26 at 16 54 50" src="https://github.com/user-attachments/assets/82639bf4-5caf-4ec1-a615-81909db48b09" /> <img width="238" height="164" alt="CleanShot 2026-05-26 at 16 54 44" src="https://github.com/user-attachments/assets/a5cf6900-4555-4bed-8626-def465132510" />
Called it `WorkflowActivityRegistry` instead of `GroupActivityRegistry`, not sure if the other is preferred, let me know. Added some basic tests and a todo for the member I'll add later.
Previously, legacy autofix agent would read the preferences to decide a stopping point for automated runs without a stopping point. The seer agent doesnt do that so to fix it, we can just pass the stopping point from the beginning to avoid another fetch. See https://github.com/getsentry/seer/blob/67e6c232f708a03b59b4cab09381668ae5eb92b9/src/seer/automation/autofix/tasks.py#L145-L148 --------- Co-authored-by: Claude <noreply@anthropic.com>
we aren't using this here right now, but it's required for getsentry/getsentry#20354
Skip `option.seen` audit logs when running with `DEBUG` enabled so local mypy and process output is not flooded by option reads. Non-debug environments still emit the audit log for production visibility. --------- Co-authored-by: OpenAI Codex <codex@openai.com>
… with a project (#116239) If we're moving a Workflow to a new organization, we need to make sure the associated Environment is updated to one in that org. Fixes ISWF-2687.
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 : )