[pull] master from getsentry:master#1840
Merged
Merged
Conversation
…111869) When the task tries to delete sentry_environment rows, Django's cascade sees that workflow_engine_workflow rows still reference them. It tries to cascade-delete those workflows in Python — but those rows haven't gone through their own proper deletion task yet, and if Workflow has any child relations or outbox requirements, the inline cascade may fail or leave orphans. This is a deletion ordering bug introduced when Workflow was added to the org deletion task. Workflow should be appended before Environment in the relation list, not after. Since it has an FK pointing at Environment, it needs to be cleaned up first. Fixed by moving the Workflow relation earlier in get_child_relations, before Environment. ## Investigation I ran a query for child rows of an organization that was failing to delete, and `Environment` was the top in the list that still had undeleted rows. This indicated a dependent table that was not getting rows related to this Organization removed. table_name | row_count -- | -- sentry_externalissue | 748 sentry_promptsactivity | 183 sentry_environment | 177 workflow_engine_workflow | 9 sentry_dashboard | 9 sentry_discoversavedquery | 7
…on (#110619) Use `get_from_cache` instead of a direct database `get` when looking up a Group by ID during event ingestion in `handle_existing_grouphash()`. This is the hottest query path in event ingestion — every event that matches an existing group (the vast majority) executes `SELECT * FROM sentry_groupedmessage WHERE id = ? LIMIT ?` directly against the database. Switching to `get_from_cache` serves this from Django's cache layer first, only falling back to the database on a miss. Popular groups receiving many events will see a high cache hit rate. --------- Co-authored-by: Claude Opus 4.6 <noreply@example.com>
The AdminRecordUsageEndpoint that this UI calls is being removed from getsentry as part of the billing platform migration.
…olumn (#111885) Show a yellow star icon as the column header for `is_starred_transaction` in dashboard widget tables instead of the raw field name. The icon matches the star used in the insights overview tables. - Render `<IconStar>` in the table widget header when `is_starred_transaction` is present and no field alias overrides it - Right-align the column via `fieldAlignment` - Disable sorting on the column since it's always a forced primary sort Refs LINEAR-DAIN-1437 <img width="496" height="316" alt="image" src="https://github.com/user-attachments/assets/6c058d91-41a2-489c-97dd-1691515979c9" /> Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
…ions (#111890) ## Summary - Update `GithubCopilotTask`, `GithubCopilotSession`, and related models to match the current live GitHub Copilot Tasks API response shape - `creator_id`/`owner_id` (int) → `creator`/`owner` (object with `id` field) - `last_updated_at` → `updated_at` - `user_collaborators` changed from `list[int]` to `list[Any]` to handle the upcoming migration from int IDs to User objects - Added new fields: `repository`, `html_url`, `url`, `slug` on collaborators - Removed deprecated `status` field from `GithubCopilotTask` — our code only reads `state` - Removed legacy `{"task": {...}}` response envelope handling and `GithubCopilotTaskResponse` model — the API returns task objects directly now **Context:** GitHub is rolling out breaking changes to their Copilot Tasks API. We verified the current API state by testing against a live repo — `last_updated_at`, `creator_id`, `owner_id`, and the `{"task": ...}` envelope are already gone. `status` is still present alongside `state` but deprecated. `user_collaborators` type change (int → object) is coming soon. Our polling flow (`poll_github_copilot_agents`) only reads `task.state` and `task.artifacts`, so it's unaffected. These changes prevent Pydantic validation failures when parsing API responses with the new field shapes. ## Test plan - [x] All existing tests pass (54 tests across `test_client.py` + `test_coding_agent.py`) - [x] Verified against live GitHub Copilot API
…ocated with its caller (#111894) This makes OWNERS file cleaner as everything is within the same folder structure.
…rawer (#111859) Add a feedback banner at the top of the supergroup drawer asking users if the grouping is accurate, with thumbs up/down buttons that fire a new analytics event. Also add an experimental badge to the breadcrumbs. <img width="735" height="208" alt="image" src="https://github.com/user-attachments/assets/9ecf7dde-2dd8-47d0-a661-438ac8f3b6e3" /> --------- Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
This broke with our change to the new indicators, so I'm updating each element's location and the button overflow accordingly
This reverts commit 128112a. Co-authored-by: ryan953 <187460+ryan953@users.noreply.github.com>
Related: #111866, getsentry/seer#5554 Reranking has been on for ~2 years, we don't need to check it in the frontend. Co-authored-by: Claude <noreply@anthropic.com>
Removing from seer here: getsentry/seer#5554 We've always been using the reranking path for ~2 years. We can get rid of the non-reranking path. Co-authored-by: Claude <noreply@anthropic.com>
…111455) Integration providers register callback URLs with external services (e.g. GitHub OAuth redirect). These URLs point to PipelineAdvancerView, which traditionally drives the pipeline server-side by calling pipeline.current_step() on each callback. For the new API-driven pipeline mode, we cannot change the callback URLs already registered with production integrations. Instead, this view now detects when a pipeline was initiated in API mode (api_mode flag in session state) and renders a lightweight trampoline page. The trampoline relays the callback URL query parameters (code, state, installation_id, etc.) back to the opener window via postMessage and closes itself. The frontend pipeline system then continues driving the pipeline via API endpoints. Fixes [VDY-36](https://linear.app/getsentry/issue/VDY-36)
…1893) Adds an RPC interface for fetching a GitHub integration's installation_id. - Adds a new get_repo_installation_id function to the Seer RPC interface that resolves a repository to its GitHub App installation ID - GitHub stores the installation ID as integration.external_id, while GitHub Enterprise stores it in integration.metadata["installation_id"] - Registered in seer_method_registry so Seer can call it via RPC - Only supports GitHub and GitHub Enterprise providers; returns an error for unsupported providers
This breaks clickhouse. Let's raise a SnubaError that spells out the problem more clearly instead of letting things get that far.
Bumps [pyjwt](https://github.com/jpadilla/pyjwt) from 2.10.1 to 2.12.0. <details> <summary>Release notes</summary> <p><em>Sourced from <a href="https://github.com/jpadilla/pyjwt/releases">pyjwt's releases</a>.</em></p> <blockquote> <h2>2.12.0</h2> <h2>Security</h2> <ul> <li>Validate the crit (Critical) Header Parameter defined in RFC 7515 §4.1.11. by <a href="https://github.com/dmbs335"><code>@dmbs335</code></a> in <a href="https://github.com/jpadilla/pyjwt/security/advisories/GHSA-752w-5fwx-jx9f">GHSA-752w-5fwx-jx9f</a></li> </ul> <h2>What's Changed</h2> <ul> <li>[pre-commit.ci] pre-commit autoupdate by <a href="https://github.com/pre-commit-ci"><code>@pre-commit-ci</code></a>[bot] in <a href="https://redirect.github.com/jpadilla/pyjwt/pull/1132">jpadilla/pyjwt#1132</a></li> <li>chore(docs): fix docs build by <a href="https://github.com/tamird"><code>@tamird</code></a> in <a href="https://redirect.github.com/jpadilla/pyjwt/pull/1137">jpadilla/pyjwt#1137</a></li> <li>Annotate PyJWKSet.keys for pyright by <a href="https://github.com/tamird"><code>@tamird</code></a> in <a href="https://redirect.github.com/jpadilla/pyjwt/pull/1134">jpadilla/pyjwt#1134</a></li> <li>fix: close HTTPError to prevent ResourceWarning on Python 3.14 by <a href="https://github.com/veeceey"><code>@veeceey</code></a> in <a href="https://redirect.github.com/jpadilla/pyjwt/pull/1133">jpadilla/pyjwt#1133</a></li> <li>chore: remove superfluous constants by <a href="https://github.com/tamird"><code>@tamird</code></a> in <a href="https://redirect.github.com/jpadilla/pyjwt/pull/1136">jpadilla/pyjwt#1136</a></li> <li>[pre-commit.ci] pre-commit autoupdate by <a href="https://github.com/pre-commit-ci"><code>@pre-commit-ci</code></a>[bot] in <a href="https://redirect.github.com/jpadilla/pyjwt/pull/1135">jpadilla/pyjwt#1135</a></li> <li>chore(tests): enable mypy by <a href="https://github.com/tamird"><code>@tamird</code></a> in <a href="https://redirect.github.com/jpadilla/pyjwt/pull/1138">jpadilla/pyjwt#1138</a></li> <li>Bump actions/download-artifact from 7 to 8 by <a href="https://github.com/dependabot"><code>@dependabot</code></a>[bot] in <a href="https://redirect.github.com/jpadilla/pyjwt/pull/1142">jpadilla/pyjwt#1142</a></li> <li>[pre-commit.ci] pre-commit autoupdate by <a href="https://github.com/pre-commit-ci"><code>@pre-commit-ci</code></a>[bot] in <a href="https://redirect.github.com/jpadilla/pyjwt/pull/1141">jpadilla/pyjwt#1141</a></li> <li>[pre-commit.ci] pre-commit autoupdate by <a href="https://github.com/pre-commit-ci"><code>@pre-commit-ci</code></a>[bot] in <a href="https://redirect.github.com/jpadilla/pyjwt/pull/1145">jpadilla/pyjwt#1145</a></li> <li>fix: do not store reference to algorithms dict on PyJWK by <a href="https://github.com/akx"><code>@akx</code></a> in <a href="https://redirect.github.com/jpadilla/pyjwt/pull/1143">jpadilla/pyjwt#1143</a></li> <li>Use PyJWK algorithm when encoding without explicit algorithm by <a href="https://github.com/jpadilla"><code>@jpadilla</code></a> in <a href="https://redirect.github.com/jpadilla/pyjwt/pull/1148">jpadilla/pyjwt#1148</a></li> </ul> <h2>New Contributors</h2> <ul> <li><a href="https://github.com/tamird"><code>@tamird</code></a> made their first contribution in <a href="https://redirect.github.com/jpadilla/pyjwt/pull/1137">jpadilla/pyjwt#1137</a></li> <li><a href="https://github.com/veeceey"><code>@veeceey</code></a> made their first contribution in <a href="https://redirect.github.com/jpadilla/pyjwt/pull/1133">jpadilla/pyjwt#1133</a></li> </ul> <p><strong>Full Changelog</strong>: <a href="https://github.com/jpadilla/pyjwt/compare/2.11.0...2.12.0">https://github.com/jpadilla/pyjwt/compare/2.11.0...2.12.0</a></p> <h2>2.11.0</h2> <h2>What's Changed</h2> <ul> <li>Fixed type error in comment by <a href="https://github.com/shuhaib-aot"><code>@shuhaib-aot</code></a> in <a href="https://redirect.github.com/jpadilla/pyjwt/pull/1026">jpadilla/pyjwt#1026</a></li> <li>[pre-commit.ci] pre-commit autoupdate by <a href="https://github.com/pre-commit-ci"><code>@pre-commit-ci</code></a>[bot] in <a href="https://redirect.github.com/jpadilla/pyjwt/pull/1018">jpadilla/pyjwt#1018</a></li> <li>[pre-commit.ci] pre-commit autoupdate by <a href="https://github.com/pre-commit-ci"><code>@pre-commit-ci</code></a>[bot] in <a href="https://redirect.github.com/jpadilla/pyjwt/pull/1033">jpadilla/pyjwt#1033</a></li> <li>Make note of use of leeway with nbf by <a href="https://github.com/djw8605"><code>@djw8605</code></a> in <a href="https://redirect.github.com/jpadilla/pyjwt/pull/1034">jpadilla/pyjwt#1034</a></li> <li>[pre-commit.ci] pre-commit autoupdate by <a href="https://github.com/pre-commit-ci"><code>@pre-commit-ci</code></a>[bot] in <a href="https://redirect.github.com/jpadilla/pyjwt/pull/1035">jpadilla/pyjwt#1035</a></li> <li>Fixes <a href="https://redirect.github.com/jpadilla/pyjwt/issues/964">#964</a>: Validate key against allowed types for Algorithm family by <a href="https://github.com/pachewise"><code>@pachewise</code></a> in <a href="https://redirect.github.com/jpadilla/pyjwt/pull/985">jpadilla/pyjwt#985</a></li> <li>Feat <a href="https://redirect.github.com/jpadilla/pyjwt/issues/1024">#1024</a>: Add iterator for PyJWKSet by <a href="https://github.com/pachewise"><code>@pachewise</code></a> in <a href="https://redirect.github.com/jpadilla/pyjwt/pull/1041">jpadilla/pyjwt#1041</a></li> <li>Fixes <a href="https://redirect.github.com/jpadilla/pyjwt/issues/1039">#1039</a>: Add iss, issuer type checks by <a href="https://github.com/pachewise"><code>@pachewise</code></a> in <a href="https://redirect.github.com/jpadilla/pyjwt/pull/1040">jpadilla/pyjwt#1040</a></li> <li>Fixes <a href="https://redirect.github.com/jpadilla/pyjwt/issues/660">#660</a>: Improve typing/logic for <code>options</code> in decode, decode_complete; Improve docs by <a href="https://github.com/pachewise"><code>@pachewise</code></a> in <a href="https://redirect.github.com/jpadilla/pyjwt/pull/1045">jpadilla/pyjwt#1045</a></li> <li>[pre-commit.ci] pre-commit autoupdate by <a href="https://github.com/pre-commit-ci"><code>@pre-commit-ci</code></a>[bot] in <a href="https://redirect.github.com/jpadilla/pyjwt/pull/1042">jpadilla/pyjwt#1042</a></li> <li>[pre-commit.ci] pre-commit autoupdate by <a href="https://github.com/pre-commit-ci"><code>@pre-commit-ci</code></a>[bot] in <a href="https://redirect.github.com/jpadilla/pyjwt/pull/1052">jpadilla/pyjwt#1052</a></li> <li>[pre-commit.ci] pre-commit autoupdate by <a href="https://github.com/pre-commit-ci"><code>@pre-commit-ci</code></a>[bot] in <a href="https://redirect.github.com/jpadilla/pyjwt/pull/1053">jpadilla/pyjwt#1053</a></li> <li>Fix <a href="https://redirect.github.com/jpadilla/pyjwt/issues/1022">#1022</a>: Map <code>algorithm=None</code> to "none" by <a href="https://github.com/qqii"><code>@qqii</code></a> in <a href="https://redirect.github.com/jpadilla/pyjwt/pull/1056">jpadilla/pyjwt#1056</a></li> <li>[pre-commit.ci] pre-commit autoupdate by <a href="https://github.com/pre-commit-ci"><code>@pre-commit-ci</code></a>[bot] in <a href="https://redirect.github.com/jpadilla/pyjwt/pull/1055">jpadilla/pyjwt#1055</a></li> <li>[pre-commit.ci] pre-commit autoupdate by <a href="https://github.com/pre-commit-ci"><code>@pre-commit-ci</code></a>[bot] in <a href="https://redirect.github.com/jpadilla/pyjwt/pull/1058">jpadilla/pyjwt#1058</a></li> <li>[pre-commit.ci] pre-commit autoupdate by <a href="https://github.com/pre-commit-ci"><code>@pre-commit-ci</code></a>[bot] in <a href="https://redirect.github.com/jpadilla/pyjwt/pull/1060">jpadilla/pyjwt#1060</a></li> <li>[pre-commit.ci] pre-commit autoupdate by <a href="https://github.com/pre-commit-ci"><code>@pre-commit-ci</code></a>[bot] in <a href="https://redirect.github.com/jpadilla/pyjwt/pull/1061">jpadilla/pyjwt#1061</a></li> <li>Fixes <a href="https://redirect.github.com/jpadilla/pyjwt/issues/1047">#1047</a>: Correct <code>PyJWKClient.get_signing_key_from_jwt</code> annotation by <a href="https://github.com/khvn26"><code>@khvn26</code></a> in <a href="https://redirect.github.com/jpadilla/pyjwt/pull/1048">jpadilla/pyjwt#1048</a></li> <li>[pre-commit.ci] pre-commit autoupdate by <a href="https://github.com/pre-commit-ci"><code>@pre-commit-ci</code></a>[bot] in <a href="https://redirect.github.com/jpadilla/pyjwt/pull/1062">jpadilla/pyjwt#1062</a></li> <li>Fixed doc string typo in _validate_jti() function <a href="https://redirect.github.com/jpadilla/pyjwt/issues/1063">#1063</a> by <a href="https://github.com/kuldeepkhatke"><code>@kuldeepkhatke</code></a> in <a href="https://redirect.github.com/jpadilla/pyjwt/pull/1064">jpadilla/pyjwt#1064</a></li> <li>[pre-commit.ci] pre-commit autoupdate by <a href="https://github.com/pre-commit-ci"><code>@pre-commit-ci</code></a>[bot] in <a href="https://redirect.github.com/jpadilla/pyjwt/pull/1065">jpadilla/pyjwt#1065</a></li> <li>Update SECURITY.md by <a href="https://github.com/auvipy"><code>@auvipy</code></a> in <a href="https://redirect.github.com/jpadilla/pyjwt/pull/1057">jpadilla/pyjwt#1057</a></li> <li>Typing fix: use <code>float</code> instead of <code>int</code> for <code>lifespan</code> and <code>timeout</code> by <a href="https://github.com/nikitagashkov"><code>@nikitagashkov</code></a> in <a href="https://redirect.github.com/jpadilla/pyjwt/pull/1068">jpadilla/pyjwt#1068</a></li> <li>[pre-commit.ci] pre-commit autoupdate by <a href="https://github.com/pre-commit-ci"><code>@pre-commit-ci</code></a>[bot] in <a href="https://redirect.github.com/jpadilla/pyjwt/pull/1067">jpadilla/pyjwt#1067</a></li> </ul> <!-- raw HTML omitted --> </blockquote> <p>... (truncated)</p> </details> <details> <summary>Changelog</summary> <p><em>Sourced from <a href="https://github.com/jpadilla/pyjwt/blob/master/CHANGELOG.rst">pyjwt's changelog</a>.</em></p> <blockquote> <h2><code>v2.12.0 <https://github.com/jpadilla/pyjwt/compare/2.11.0...2.12.0></code>__</h2> <p>Fixed</p> <pre><code> - Annotate PyJWKSet.keys for pyright by @tamird in `[#1134](jpadilla/pyjwt#1134) <https://github.com/jpadilla/pyjwt/pull/1134>`__ - Close ``HTTPError`` response to prevent ``ResourceWarning`` on Python 3.14 by @veeceey in `[#1133](jpadilla/pyjwt#1133) <https://github.com/jpadilla/pyjwt/pull/1133>`__ - Do not keep ``algorithms`` dict in PyJWK instances by @akx in `[#1143](jpadilla/pyjwt#1143) <https://github.com/jpadilla/pyjwt/pull/1143>`__ - Validate the crit (Critical) Header Parameter defined in RFC 7515 §4.1.11. by @dmbs335 in `GHSA-752w-5fwx-jx9f <https://github.com/jpadilla/pyjwt/security/advisories/GHSA-752w-5fwx-jx9f>`__ - Use PyJWK algorithm when encoding without explicit algorithm in `[#1148](jpadilla/pyjwt#1148) <https://github.com/jpadilla/pyjwt/pull/1148>`__ <p>Added </code></pre></p> <ul> <li>Docs: Add <code>PyJWKClient</code> API reference and document the two-tier caching system (JWK Set cache and signing key LRU cache).</li> </ul> <h2><code>v2.11.0 <https://github.com/jpadilla/pyjwt/compare/2.10.1...2.11.0></code>__</h2> <p>Fixed</p> <pre><code> - Enforce ECDSA curve validation per RFC 7518 Section 3.4. - Fix build system warnings by @kurtmckee in `[#1105](jpadilla/pyjwt#1105) <https://github.com/jpadilla/pyjwt/pull/1105>`__ - Validate key against allowed types for Algorithm family in `[#964](jpadilla/pyjwt#964) <https://github.com/jpadilla/pyjwt/pull/964>`__ - Add iterator for JWKSet in `[#1041](jpadilla/pyjwt#1041) <https://github.com/jpadilla/pyjwt/pull/1041>`__ - Validate `iss` claim is a string during encoding and decoding by @pachewise in `[#1040](jpadilla/pyjwt#1040) <https://github.com/jpadilla/pyjwt/pull/1040>`__ - Improve typing/logic for `options` in decode, decode_complete by @pachewise in `[#1045](jpadilla/pyjwt#1045) <https://github.com/jpadilla/pyjwt/pull/1045>`__ - Declare float supported type for lifespan and timeout by @nikitagashkov in `[#1068](jpadilla/pyjwt#1068) <https://github.com/jpadilla/pyjwt/pull/1068>`__ - Fix ``SyntaxWarning``\s/``DeprecationWarning``\s caused by invalid escape sequences by @kurtmckee in `[#1103](jpadilla/pyjwt#1103) <https://github.com/jpadilla/pyjwt/pull/1103>`__ - Development: Build a shared wheel once to speed up test suite setup times by @kurtmckee in `[#1114](jpadilla/pyjwt#1114) <https://github.com/jpadilla/pyjwt/pull/1114>`__ - Development: Test type annotations across all supported Python versions, increase the strictness of the type checking, and remove the mypy pre-commit hook by @kurtmckee in `[#1112](jpadilla/pyjwt#1112) <https://github.com/jpadilla/pyjwt/pull/1112>`__ <p>Added </code></pre></p> <ul> <li>Support Python 3.14, and test against PyPy 3.10 and 3.11 by <a href="https://github.com/kurtmckee"><code>@kurtmckee</code></a> in <code>[#1104](jpadilla/pyjwt#1104) <https://github.com/jpadilla/pyjwt/pull/1104></code>__</li> <li>Development: Migrate to <code>build</code> to test package building in CI by <a href="https://github.com/kurtmckee"><code>@kurtmckee</code></a> in <code>[#1108](jpadilla/pyjwt#1108) <https://github.com/jpadilla/pyjwt/pull/1108></code>__</li> <li>Development: Improve coverage config and eliminate unused test suite code by <a href="https://github.com/kurtmckee"><code>@kurtmckee</code></a> in <code>[#1115](jpadilla/pyjwt#1115) <https://github.com/jpadilla/pyjwt/pull/1115></code>__</li> <li>Docs: Standardize CHANGELOG links to PRs by <a href="https://github.com/kurtmckee"><code>@kurtmckee</code></a> in <code>[#1110](jpadilla/pyjwt#1110) <https://github.com/jpadilla/pyjwt/pull/1110></code>__</li> <li>Docs: Fix Read the Docs builds by <a href="https://github.com/kurtmckee"><code>@kurtmckee</code></a> in <code>[#1111](jpadilla/pyjwt#1111) <https://github.com/jpadilla/pyjwt/pull/1111></code>__</li> <li>Docs: Add example of using leeway with nbf by <a href="https://github.com/djw8605"><code>@djw8605</code></a> in <code>[#1034](jpadilla/pyjwt#1034) <https://github.com/jpadilla/pyjwt/pull/1034></code>__</li> <li>Docs: Refactored docs with <code>autodoc</code>; added <code>PyJWS</code> and <code>jwt.algorithms</code> docs by <a href="https://github.com/pachewise"><code>@pachewise</code></a> in <code>[#1045](jpadilla/pyjwt#1045) <https://github.com/jpadilla/pyjwt/pull/1045></code>__</li> <li>Docs: Documentation improvements for "sub" and "jti" claims by <a href="https://github.com/cleder"><code>@cleder</code></a> in <code>[#1088](jpadilla/pyjwt#1088) <https://github.com/jpadilla/pyjwt/pull/1088></code>__</li> <li>Development: Add pyupgrade as a pre-commit hook by <a href="https://github.com/kurtmckee"><code>@kurtmckee</code></a> in <code>[#1109](jpadilla/pyjwt#1109) <https://github.com/jpadilla/pyjwt/pull/1109></code>__</li> <li>Add minimum key length validation for HMAC and RSA keys (CWE-326). Warns by default via <code>InsecureKeyLengthWarning</code> when keys are below</li> </ul> <!-- raw HTML omitted --> </blockquote> <p>... (truncated)</p> </details> <details> <summary>Commits</summary> <ul> <li><a href="https://github.com/jpadilla/pyjwt/commit/bd9700cca7f9258fadcc429c1034e508025931f2"><code>bd9700c</code></a> Use PyJWK algorithm when encoding without explicit algorithm (<a href="https://redirect.github.com/jpadilla/pyjwt/issues/1148">#1148</a>)</li> <li><a href="https://github.com/jpadilla/pyjwt/commit/051ea341b5573fe3edcd53042f347929b92c2b92"><code>051ea34</code></a> Merge commit from fork</li> <li><a href="https://github.com/jpadilla/pyjwt/commit/1451d70eca2059bc472703692f0bb0777bc0fe93"><code>1451d70</code></a> fix: do not store reference to algorithms dict on PyJWK (<a href="https://redirect.github.com/jpadilla/pyjwt/issues/1143">#1143</a>)</li> <li><a href="https://github.com/jpadilla/pyjwt/commit/f3ba74c106df9ce10e272dfaad96acb4ab3ef5a5"><code>f3ba74c</code></a> [pre-commit.ci] pre-commit autoupdate (<a href="https://redirect.github.com/jpadilla/pyjwt/issues/1145">#1145</a>)</li> <li><a href="https://github.com/jpadilla/pyjwt/commit/0318ffa7b156b01600376e38952bf961382e0724"><code>0318ffa</code></a> [pre-commit.ci] pre-commit autoupdate (<a href="https://redirect.github.com/jpadilla/pyjwt/issues/1141">#1141</a>)</li> <li><a href="https://github.com/jpadilla/pyjwt/commit/a52753db3c1075ac01337fa8b7cc92b13a19ac09"><code>a52753d</code></a> Bump actions/download-artifact from 7 to 8 (<a href="https://redirect.github.com/jpadilla/pyjwt/issues/1142">#1142</a>)</li> <li><a href="https://github.com/jpadilla/pyjwt/commit/b85050f1d444c6828bb4618ee764443b0a3f5d18"><code>b85050f</code></a> chore(tests): enable mypy (<a href="https://redirect.github.com/jpadilla/pyjwt/issues/1138">#1138</a>)</li> <li><a href="https://github.com/jpadilla/pyjwt/commit/1272b264779717cc481c8341f321a7fc8b3aaba6"><code>1272b26</code></a> [pre-commit.ci] pre-commit autoupdate (<a href="https://redirect.github.com/jpadilla/pyjwt/issues/1135">#1135</a>)</li> <li><a href="https://github.com/jpadilla/pyjwt/commit/99a87287c26cb97c94399084ee4186ee52207a7f"><code>99a8728</code></a> chore: remove superfluous constants (<a href="https://redirect.github.com/jpadilla/pyjwt/issues/1136">#1136</a>)</li> <li><a href="https://github.com/jpadilla/pyjwt/commit/412cb67a93363812ae4029d6a95f5d4d40ab2609"><code>412cb67</code></a> fix: close HTTPError to prevent ResourceWarning on Python 3.14 (<a href="https://redirect.github.com/jpadilla/pyjwt/issues/1133">#1133</a>)</li> <li>Additional commits viewable in <a href="https://github.com/jpadilla/pyjwt/compare/2.10.1...2.12.0">compare view</a></li> </ul> </details> <br /> [](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores) Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`. [//]: # (dependabot-automerge-start) [//]: # (dependabot-automerge-end) --- <details> <summary>Dependabot commands and options</summary> <br /> You can trigger Dependabot actions by commenting on this PR: - `@dependabot rebase` will rebase this PR - `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it - `@dependabot show <dependency name> ignore conditions` will show all of the ignore conditions of the specified dependency - `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself) You can disable automated security fix PRs for this repo from the [Security Alerts page](https://github.com/getsentry/sentry/network/alerts). </details> --------- Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Alexander Tarasov <alex.tarasov@sentry.io> Co-authored-by: Michelle Tran <michelle.tran@sentry.io> Co-authored-by: Claude <noreply@anthropic.com>
The current `CompositeSelect` component doesn't seem to have an easy way to hook up clearing selections, which is understandable since there are multi-selection possibilities so to tackle this I'd like to add in a button that is styled to match that of the `CompactSelect`'s clear button. --------- Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com> Co-authored-by: Claude Sonnet 4 <noreply@example.com>
Remove 9 options that were deleted in getsentry/sentry-options-automator#7037. These controlled seer similarity backfill tuning and are no longer needed. Co-authored-by: Claude <noreply@anthropic.com>
…109733) ## Summary - Implement the full `process_mention_for_slack` task body (replacing the previous TODO stub): fetch org, check explorer access, construct `SlackExplorerEntrypoint`, resolve the Sentry user from Slack identity, extract the user prompt, build thread context, and trigger an Explorer run via `SeerExplorerOperator` - Add `_resolve_user()` helper that maps a Slack user ID to an `RpcUser` through the linked identity provider, `_send_link_identity_prompt()` that sends an ephemeral Slack message prompting the user to link their identity when no link exists, and `_send_not_org_member_message()` that sends an ephemeral error when the user is not a member of the organization - Extract `bot_user_id` from the Slack `authorizations` payload in `on_app_mention` so the task can strip the bot mention from the user's prompt via `extract_prompt()` - Set assistant thread status ("Thinking..." with loading messages) immediately on mention for user feedback before dispatching the async task; clear thread status on early exits (identity not linked, not an org member) - Fix `thread_ts` resolution in `on_app_mention` to correctly distinguish `ts` (message timestamp) from `thread_ts` (parent thread timestamp, None for top-level messages), and pass both to the task - Move `return self.respond()` inside the lifecycle context manager so halts/failures are properly recorded - Simplify `SlackExplorerEntrypoint`: remove `message_ts` parameter (caller now resolves `thread_ts`), make `thread_ts` required, raise `EntrypointSetupError` instead of `ValueError`, and store `self.integration` for use by identity-linking helpers - Add Block Kit text extraction utilities (`_extract_block_text`, `_extract_text_from_blocks`, `_extract_rich_text_element_text`) for building thread context from rich_text, section, context, header, and markdown blocks — with defensive `isinstance` checks for external Slack API data - Update `build_thread_context` to prefer block-based text extraction over plain `text` fallback, preserving URLs and mentions from rich text blocks - Fix `SlackActionRequest.get_action_list` to use `.get("value", "")` instead of `["value"]` to avoid `KeyError` on actions without a value field - Rename `MISSING_CHANNEL_OR_TEXT` to `MISSING_EVENT_DATA` in `AppMentionHaltReason` to reflect broader validation - Add `SlackEntrypointInteractionType.PROCESS_MENTION` and `ProcessMentionHaltReason`/`ProcessMentionFailureReason` enums for structured observability - Change `SeerExplorerOperator.execute` to pass `summary=None` instead of a hardcoded fallback string when no assistant content is found in Explorer results - Add `loading_messages` parameter to `SlackIntegration.set_thread_status` for rotating status messages - Add comprehensive tests for the task (`test_tasks.py`) covering happy path, org-not-found, no-access, integration-not-found, identity-not-linked, user-not-org-member, and thread-context scenarios; add Block Kit extraction tests; update webhook and entrypoint tests accordingly Refs ISWF-2023
…111832) Using `Section` like we use in the detector form for consistency
more region to cell renaming
…111801) "Create Monitor" buttons should always link to the initial type selection page. We made this link to the actual form on the type-specific pages after user feedback, but we now believe that the original experience was more consistent and leads to less confusion overall.
Update the convert_to_async_slack_response and convert_to_async_discord_response tasks to also accept cell_name. Once deployed everywhere, will update callers to pass cell_name
…selection (#111668) Tweaking the logic around selecting default operators. When a user selects a value from the dropdown it's likely they're looking for an exact matching value, rather than it containing that value. This PR modifies the query builder logic so that if a user selects a value from the value combobox it'll change it from `contains` to `is`. However, if a user already has a valid contains filter, we do not change the operator if selecting a value afterwards. --------- Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
tests failed on master here: https://github.com/getsentry/sentry/actions/runs/23808567753/job/69388944325 https://github.com/getsentry/sentry/actions/runs/23767928687/job/69252070904 ``` gh api "repos/getsentry/sentry/actions/workflows/backend.yml/runs?head _sha=b8bd5add647a14a7c80afae86cf5cafe1ec26ba5&per_page=10" --jq '.workflow_runs[] | {id, run_number, created_at, run_attempt, event, status}' ``` and the newer stuff (prints how many test contexts changed files are linked to): https://github.com/getsentry/sentry/actions/runs/23767928704/job/69252070278#step:7:32 src/sentry/constants.py has plenty of coverage apparently but not enough
## Summary
- Registers a new FlagPole feature flag
`organizations:data-browsing-widget-unfurl` to gate URL unfurling in the
data browsing widget.
- The flag is API-exposed so the frontend can check it.
## Test plan
- [ ] Verify the feature flag is registered correctly by checking
`features.has("organizations:data-browsing-widget-unfurl", ...)` in a
shell
- [ ] Confirm the flag appears in the organization features API response
when enabled
DAIN-1439
…r counts (errors) (#111861) Implements double reads of occurrences from EAP for `get_groups_user_counts` in `src/sentry/tagstore/snuba/backend.py`.
Co-Authored-By: bmckerry <110857332+bmckerry@users.noreply.github.com> --------- Co-authored-by: getsentry-bot <10587625+getsentry-bot@users.noreply.github.com> Co-authored-by: bmckerry <110857332+bmckerry@users.noreply.github.com>
…111936) The "Connected to {provider} org {name}" tag was expanding to 100% width of its parent flex container. Wrapping it in a Container constrains it to its natural content width.
#111701) Replace the free-text notes field in the "Add to Startup Program" admin modal with a dropdown of predefined program options: - Y Combinator - Sentry for Startups (default) - a16z - Accelatoms - Accelfam - Renderstack - Finpack - Betaworks - Alchemist - Antler - Other (reveals a free-text input) When "Other" is selected, a custom notes text field appears for free-form input. The submitted `notes` value is the selected program key, or the custom text when "Other" is chosen. --------- Co-authored-by: Claude <noreply@anthropic.com>
…on (#110602) Add external namespace registration for launchpad tasks and shadow dispatch of artifact processing to the taskbroker alongside the existing Kafka pipeline. This is the Sentry-side integration for the launchpad taskbroker migration. When enabled, after the existing Kafka dispatch succeeds, a shadow dispatch sends the same artifact processing request to the launchpad application via the taskbroker. This allows us to validate the taskbroker path in production without affecting the primary Kafka pipeline. **Safety gates:** - Feature flag `launchpad-taskbroker-rollout` — org-level rollout control - Shadow dispatch failures are caught and logged, never affecting the primary path **Changes:** - Register external `launchpad_tasks` namespace via `taskbroker-client` `ExternalNamespace` - Extract `_dispatch_kafka` helper from `assemble_preprod_artifact` for clarity - Add `_dispatch_taskbroker_shadow` with feature-based quota/size checks and `process_artifact.apply_async()` dispatch - Bump `taskbroker-client` to 0.1.5 (adds `ExternalNamespace` support) - Bump `sentry-cli` to 3.1.0 --------- Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com> Co-authored-by: getsantry[bot] <66042841+getsantry[bot]@users.noreply.github.com>
Adds backend support for completing the GitHub integration setup flow via API endpoints instead of server-rendered Django views. Extracts shared logic from the existing template-driven pipeline views into reusable functions (exchange_github_oauth, validate_github_installation, validate_org_installation_choice, _build_installation_info_with_counts) so both the legacy views and new API steps can use them. Adds OAuthLoginApiStep and GithubOrganizationSelectionApiStep which implement the same flow as the existing views but return structured data for the frontend to render. Adds api_finish_pipeline to IntegrationPipeline for completing the pipeline without server-side redirects. Refactors _finish_pipeline to separate model operations (_execute_finish_pipeline) from HTTP response handling, and extracts initialize_integration_pipeline from OrganizationIntegrationSetupView for reuse by the API endpoint. Refs VDY-38
This fixes two bugs with our integer parameterization: - Only count a dash as a minus sign if it doesn't come in between two sets of alphanumeric characters (so `1121-1231` comes out as `<int>-<int>` rather than `<int><int>` and `maisey-908` comes out as `maisey-<int>` rather than `maisey<int>`, but `difference:-4` and `difference: -4` both are correctly parameterized as `difference:<int>` and `difference: <int>`, respectively). - Fix the fact that positive integers count as hex values if they have at least 8 digits, but negative integers still count as integers (no matter how long they are) by restricting the int pattern to 7 characters. Note that the combination of these fixes (making sure that dashes count as minus signs for negative hex values if they're not part of a dashed string) will require changes to the hex pattern, and so isn't included here. (It will be addressed in an upcoming PR making other hex changes.)
…r counts (issue platform) (#111863) Implements double reads of occurrences from EAP for `get_generic_groups_user_counts` in `src/sentry/tagstore/snuba/backend.py`.
…value count (#111868) Implements double reads of occurrences from EAP for `get_group_tag_value_count` in `src/sentry/tagstore/snuba/backend.py`.
…dence_data (#111923) Add `value`, `conditions`, and `config` to the `evidence_data` dict in `PreprodSizeAnalysisDetectorHandler.create_occurrence()`. This snapshots the evaluated value, the condition(s) that fired, and the detector config at trigger time — following the same pattern as `StatefulDetectorHandler._build_workflow_engine_evidence_data`. This is the backend half of EME-981 (triggered condition display for size analysis issues). The frontend PR will read these new fields from `event.occurrence.evidenceData` to render a triggered condition section. Refs EME-981 Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
This is handful of refactors to the parameterization code, to make it a bit simpler and more testable. - Allow `ParameterizationRegex` objects to be passed directly to parameterizer during initialization rather than always using the default set. (This should make it easier to test, so we don't have to do a bunch of mocking.) If none are passed, the default set will still be used. - Create the final regex directly in `__init__` rather than in a separate method. - When deciding if the experimental parameterizer is actually experimental, look at the regexes themselves rather than at the regex maps. - When deciding whether to skip testing the experimental parameterizer, look directly at it rather than comparing the regex maps. - Use `lastgroup` to get matched key/original value directly rather than iterating over `groupdict`. - Remove the now-unused regex maps. - Rename a number of things.
…izer (#111942) The previous logic had us potentially sending 100+ workflow queries, which can add 300ms+ to the request. By only fetching ids, we avoid considerable unnecessary work.
First pass at a Seer Settings Overview page. To help people get oriented while they're getting setup.
Reuse the previous supergroup request while the visible issue ids only shrink. This keeps archive and resolve actions from issuing a new supergroup lookup and flashing the stream back into a loading state. Co-authored-by: OpenAI Codex <codex@openai.com>
…1947) Adds `collapse=stats` to the feedback group details query key so the group details endpoint skips computing 24h/30d time-series stats. The feedback details page doesn't use the `stats` field from the group response. Matches the pattern from #111156 which did the same for the issue details page.
8px felt too tight, bump it up to 12px
…ojectName & eventId (#111931) Test plan: I have a feedback with `groupId: 7377579909` & `eventId: 0e8581c24ade4bb8bb59b3a0f8387b4b` in the `javascript` project. Normally I would need to go to visit `/issues/feedback/?feedbackSlug=javascript:7377579909` to see that feedback properly, using the groupId in the url. Now I've updated the url to not require the the `project` part at all, so the url can be `/issues/feedback/?feedbackSlug=7377579909`, woo! But we can't construct that url from the sdk, we don't know the groupId at that time, only the event it. Turns out we have a redirect in place already, using the url template `/organizations/${orgSlug}/projects/${projectSlug}/events/${eventId}/` we do a redirect to the proper issue. I fixed this redirect to see if the issue is a feedback issue or not, and if it is then we'll use the proper feedback view instead of the generic feedback view! Tested by visiting `/projects/javascript/events/0e8581c24ade4bb8bb59b3a0f8387b4b/` which now takes me to `/issues/feedback/?feedbackSlug=javascript%3A7377579909` I also was able to import nuqs and create a single, simpler, `useFeedbackSlug` hook to fetch the values from the url. Turns out we don't _really_ need projectSlug except to make the alert-creation page have better defaults. Fixes https://linear.app/getsentry/issue/REPLAY-873/direct-url-to-user-feedback-from-capturefeedback Fixes #108213
<!-- Describe your PR here. -->
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 : )