[pull] master from getsentry:master#1999
Merged
Merged
Conversation
## Summary - Replace the emotion `styled` wrappers (`ToolTagsContainer`, `ToggleButtonWrapper`, `ToggleButton`) in `toolTags.tsx` with `Flex` and `Container` from `@sentry/scraps/layout`, moving the layout props onto the JSX.
Apply a hard 10k row cap in DataExportEndpoint._parse_limit so every
request that is not from UI, is bounded regardless of dataset. Requests
with no limit or with limit > 10k are clamped to 10k.
Larger exports were both unreliable in practice ("broken and hammers
infrastructure") and unnecessary as a self-serve path: GDPR
data-portability requests are handled out-of-band via
sentry.io/contact/gdpr/.
### Callout:
1. This change silently clamps the limit to 10k and doesn't raise 400
error.
Adds `curly: 'error'` to the prettier config block in `eslint.config.ts`. Ran `pnpm fix:eslint` — no violations found across the codebase, so this is a config-only change. Co-authored-by: Ryan Albrecht <ryan.albrecht@sentry.io> --- [View Session in Sentry](https://sentry.sentry.io/traces/?project=4510944073809921&query=gen_ai.conversation.id%3A%22slack%3AC0B63QA6RGA%3A1779771176.631419%22) --------- Co-authored-by: sentry-junior[bot] <264270552+sentry-junior[bot]@users.noreply.github.com> Co-authored-by: Cursor Agent <cursoragent@cursor.com> Co-authored-by: Ryan Albrecht <ryan@ryanalbrecht.ca>
## Summary Make `_should_use_agent` in `GroupAutofixEndpoint` unconditionally return `True` so the autofix endpoint always routes through the agent-based (explorer) path, regardless of the `mode` query param or feature flags. Drops the now-unused `features` import. Agent transcript: https://claudescope.sentry.dev/share/o7uBoZiDFmNh4_ZzyLNUB9epA8vaB4MXV2meWHZbUYw
Corresponds to #116048. Closes LOGS-823.
oxfmt has TOML support and picks up `pyproject.toml`, which conflicts with Python tooling (`prek`/`ruff`) that owns that file. `pnpm fix:format` ends up reformatting it, then `prek` fights it back. Adding `pyproject.toml` to `ignorePatterns` in `.oxfmtrc.json` keeps them from stepping on each other. Action taken on behalf of Ryan Albrecht. --- [View Session in Sentry](https://sentry.sentry.io/traces/?project=4510944073809921&query=gen_ai.conversation.id%3A%22slack%3AC8V02RHC7%3A1779803895.919769%22) Co-authored-by: sentry-junior[bot] <264270552+sentry-junior[bot]@users.noreply.github.com> Co-authored-by: Ryan Albrecht <ryan.albrecht@sentry.io>
…116173) On each segment processed we call the `_create_models` function. This writes the environment, release, release environment, and release project environment models. It also calls the `record_latest_release` and `record_release_received` functions which perform their own write operations. These operations are executed once per project, release, environment, distribution quad. Subsequent requests read the cache and discard the result. The consequence is a persistent [span waterfall](https://sentry.sentry.io/explore/traces/trace/f2123ba223d341f29ef13bb556aa636c/?aggregateField=%7B%22groupBy%22%3A%22transaction%22%7D&aggregateField=%7B%22yAxes%22%3A%5B%22count%28span.duration%29%22%5D%7D&field=id&field=span.name&field=span.description&field=span.duration&field=transaction&field=timestamp&mode=samples&node=span-98672b0db30527e5&project=1&query=transaction%3Aspans.consumers.process_segments.process_segment&sort=-span.duration&source=traces&statsPeriod=24h&targetId=98672b0db30527e5×tamp=1779692438) repeated for every segment. Average processing time is [15 milliseconds](https://sentry.sentry.io/explore/traces/?aggregateField=%7B%22groupBy%22%3A%22transaction%22%7D&aggregateField=%7B%22yAxes%22%3A%5B%22avg%28span.duration%29%22%5D%7D&field=id&field=span.name&field=span.description&field=span.duration&field=transaction&field=timestamp&mode=samples&project=1&query=transaction%3Aspans.consumers.process_segments.process_segment%20span.name%3Aspans.consumers.process_segments.process_segment&sort=-span.duration&statsPeriod=24h) and total span volume is measured in the [billions](https://sentry.sentry.io/explore/traces/?aggregateField=%7B%22groupBy%22%3A%22span.op%22%7D&aggregateField=%7B%22yAxes%22%3A%5B%22count%28span.duration%29%22%5D%7D&field=id&field=span.name&field=span.description&field=span.duration&field=transaction&field=timestamp&field=span.op&mode=aggregate&project=1&query=transaction%3Aspans.consumers.process_segments.process_segment&sort=-timestamp&statsPeriod=24h) which is mostly driven by these duplicate iops. We can do better! Given a (project, environment, release, distribution) quad we can record that it has been previously processed and skip future processing. This saves up to 11 I/O operations per duplicate request. However, there is a catch. Releases would like their `last_seen` value updated once every 60 seconds. We record the event timestamp of the quad and only update the release once the latest event's timestamp exceeds the 60 second floor. The update of the release's last_seen value has been optimized as well to skip certain operations which do not care about the 60 second refresh interval. Its understood that this section of the processing pipeline is very hot. The design of the pull request is intentionally low impact. A cache is lazily constructed on the first message processed. The memory usage of the cache is bounded to 100 bytes * `max_size`. The cache is not distributed to other processes or consumers through Redis (though a tiered caching strategy is a desirable follow-up). This means we will query Redis more than the theoretical minimum. Observation of the local cache's cache hit ratio will inform us whether adding distributed caching is worthwhile. Its absence means we are not making any additional requests to Redis and this change can not decrease total throughput.
## Summary Add `process_profile_from_kafka` task for taskbroker's passthrough mode (STREAM-882). This allows taskbroker to read directly from the `ingest-profiles` Kafka topic and dispatch tasks without a separate consumer. - New task `process_profile_from_kafka` in `ingest.profiling.passthrough` namespace - Refactored shared logic into `_process_profile_message` - ~Removed base64 encoding - tasks now accept bytes directly~ separate pr - Use Kafka headers for killswitch/sampled when available ## Dependencies Depends on getsentry/taskbroker#623 for exposing Kafka headers to tasks. ## Test plan - [x] Existing consumer tests pass - [ ] Integration test with taskbroker passthrough mode ref STREAM-882
## Summary - Bumps the widget `description` validator from 255 → 350 chars to fit the longest prebuilt widget description (271 chars, mobile vitals **App Starts**) plus buffer. - The 255 cap was a legacy artifact of the old `CharField(max_length=255)`; the column is now `TextField`, so this is a serializer-only change. DAIN-1693
…16175) Two small tweaks to the People section in issue details: **`ParticipantList` wrapper.** The wrapper `<div>` around the avatar trigger established an inline formatting context, which reserves descender space below the inline-block `Button`. That made the trigger element a few pixels taller than the visible avatars, pushing the "participating" / "viewed" label below the visual center of the avatar row. Swapping the wrapper to a `<Flex>` removes the inline formatting context, so the trigger collapses to the Button's actual height and the labels sit vertically centered with the avatars. **Row spacing.** The participating and viewed rows were rendered as bare siblings with no spacing between them. Wrapped them in a `Flex direction="column"` with a gap so they get a bit of breathing room.
…116164) ## Summary Follow-up to #116162. Now that `_should_use_agent` always returns `True`, the legacy autofix code path is unreachable. This PR removes it. - Drop the `_should_use_agent` routing method, `_post_legacy`, `_get_legacy`, and `AutofixRequestSerializer`. - Inline `_post_agent` / `_get_agent` into the now-single-caller `post` / `get` methods. - Remove imports that were only used by the legacy path (`trigger_legacy_autofix`, `get_autofix_state`, `Organization`, `RepositoryProjectPathConfig`, `Repository`, `get_sorted_code_mapping_configs`, `user_service`, `cache`). - Delete the legacy and explorer-vs-legacy routing test classes; simplify the remaining explorer tests to drop the no-longer-meaningful `mode=explorer` URL param and feature-flag loops. Net: 2 files changed, 173 insertions, 1306 deletions. Agent transcript: https://claudescope.sentry.dev/share/SqDAC8UBY8YUaDzBnlmada7CGxiZ8RuLvMQmcFxfks4
Switches the pipeline integration buttons from the label-swap / disabled pattern (`Submitting...`, `Authorizing...`, `Installing...`) to the `busy` prop on `Button`. The steady-state label stays visible, the spinner overlay communicates progress, and consumers get `aria-busy="true"` for assistive tech. `form.SubmitButton` is updated to OR `busy` from props with its internal `isSubmitting` state, matching how `disabled` is already merged. This lets pipeline steps drive the busy state from `isAdvancing` while still respecting normal form submission. Excludes the GitHub Enterprise and Vercel backend pipelines, which are still pending in unmerged PRs.
…iteTable (#115884) Prior to this area of work, `LogsInfiniteTable` could use either a _contained_ virtualizer (non-expanded mode) or _window_ virtualizer (expanded mode). Now that we're always constrained to the page, I suspect we can stick with just _contained_. Trying this out, it seems to work effectively the same. Which I think makes sense: that the table is now always constrained to a parent element & size. As a part of this, I also removed the `expanded` prop. All but one uses of the table were using it, and it didn't do much else beyond changing the `overscan` amount. Closes LOGS-813.
…spatch (#115511) Adds retry support for data forwarders, needed a bit of legwork to make it safer. - The existing path is not touched ** (except for the serialization of SQS events, see comment) - A rollout option will let us control the task output - A set of new methods `get_task_payload` and `forward_event_from_task` have been implemented on the forwarders. Refs ISWF-2406 --------- Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
…e list (#116182) Adds `kblayouts_iphone.dat` to `FileIOMainThreadDetector.IGNORED_SUFFIXES` to suppress false File IO on Main Thread issues from the plural `KBLayouts_iPhone.dat` keyboard cache file used on newer iOS versions fixes ID-1564 Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
…116115) Replace the custom \`useFetchSequentialPages\` hook with TanStack Query's built-in \`useInfiniteQuery\` + \`useFetchAllPages\` in \`useReplayData\`. This removes a bespoke pagination abstraction whose only consumer was replay data fetching, letting us rely on the standard infinite query pattern the rest of the codebase already uses. **Replay error pagination rewritten** Both the extra-errors and platform-errors sequential fetches now use \`useInfiniteQuery\` with \`useFetchAllPages\` to auto-paginate. The query options are declared inline via \`apiOptions.asInfinite()\` instead of being generated by a callback factory, and the \`replayEnd\` timestamp is memoized and shared between both queries. **\`useFetchSequentialPages\` deleted** The hook, its spec (228 lines), and its storybook file are removed. The cross-reference in \`useFetchParallelPages\` is updated to point at the new pattern. --------- Co-authored-by: Claude Opus 4 <noreply@anthropic.com>
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 : )