Repository navigation
test(playwright): select existing dashboards without creating duplicates - #44856
Conversation
There was a problem hiding this comment.
Code Review Agent Run #bf9709
Actionable Suggestions - 1
-
superset-frontend/playwright/tests/mobile/mobile-dashboard.spec.ts - 1
- Missing existence guard · Line 40-40
Additional Suggestions - 2
-
superset-frontend/playwright/tests/explore/cross-referenced-dashboards.spec.ts - 1
-
Duplicated select option logic · Line 66-70Lines 66-70 re-implement `Select.clickOption` inline, but more fragilely: no `.last()` on the dropdown (strict-mode violation if multiple dropdowns are visible) and no partial-match fallback. Since `Select` is already imported and `open()`/`type()` are used, call `dashboardSelect.clickOption(dashboardName)` instead of duplicating the option targeting.
-
-
superset-frontend/playwright/tests/mobile/mobile-dashboard.spec.ts - 1
-
Magic string duplicated · Line 40-40`'dashboard/world_health/'` is a hardcoded magic string duplicating the identical literal in `getMobileFilterButton` (line 54). The file otherwise routes through the `URL` constants (e.g. `URL.DASHBOARD_LIST`). If the sample dashboard slug changes, both sites must be updated independently. Extract a shared named constant.
-
Review Details
-
Files reviewed - 2 · Commit Range:
19e67f2..19e67f2- superset-frontend/playwright/tests/explore/cross-referenced-dashboards.spec.ts
- superset-frontend/playwright/tests/mobile/mobile-dashboard.spec.ts
-
Files skipped - 0
-
Tools
- Eslint (Linter) - ✔︎ Successful
- Whispers (Secret Scanner) - ✔︎ Successful
- Detect-secrets (Secret Scanner) - ✔︎ Successful
Bito Usage Guide
Commands
Type the following command in the pull request comment and save the comment.
-
/review- Manually triggers an incremental AI Review. -
/review full- Manually triggers a full AI Review. -
/pause- Pauses automatic reviews on this pull request. -
/resume- Resumes automatic reviews. -
/resolve- Marks all Bito-posted review comments as resolved. -
/abort- Cancels all in-progress reviews.
Refer to the documentation for additional commands.
Configuration
This repository uses Superset You can customize the agent settings here or contact your Bito workspace admin at evan@preset.io.
Documentation & Help
Codecov Report✅ All modified and coverable lines are covered by tests. Additional details and impacted files@@ Coverage Diff @@
## master #44856 +/- ##
=======================================
Coverage 81.71% 81.71%
=======================================
Files 2978 2978
Lines 181612 181610 -2
Branches 41982 41982
=======================================
+ Hits 148397 148399 +2
+ Misses 30493 30489 -4
Partials 2722 2722
Flags with carried forward coverage won't be shown. Click here to find out more. ☔ View full report in Codecov by Harness. 🚀 New features to boost your workflow:
|
Code Review Agent Run #b8b2a3Actionable Suggestions - 0Additional Suggestions - 1
Review Details
Bito Usage GuideCommands Type the following command in the pull request comment and save the comment.
Refer to the documentation for additional commands. Configuration This repository uses Documentation & Help |
|
Replaced the world_health 404 skip with an OK-response assertion because CI runs full load_examples, so the dashboard is required. |
✅ Deploy Preview for superset-docs-preview ready!
To edit notification comments on pull requests, go to your Netlify project configuration. |
|
AsyncSelect filters locally when its initial page contains all dashboards; the spec now waits for the title-filtered Rison search GET only when pagination requires it, armed before typing, while retaining the exact-title click. |
Code Review Agent Run #127f1aActionable Suggestions - 0Additional Suggestions - 1
Review Details
Bito Usage GuideCommands Type the following command in the pull request comment and save the comment.
Refer to the documentation for additional commands. Configuration This repository uses Documentation & Help |
rebenitez1802
left a comment
There was a problem hiding this comment.
Request changes: this fixes the real flake. The recurring master failures in the Mobile step come from the dashboard leaked by this test, and both Playwright legs pass at 1ec6f38. But the new pagination branch can't work, nothing would catch a recurrence, and it overlaps approved #44829.
🟡 Medium — The count > result.length branch recreates the bug it guards against
In overwriteToDashboard (cross-referenced-dashboards.spec.ts:69-83), suppose the target dashboard isn't on the first page. 250ms after fill(), handleOnSearch adds an allowNewOptions "create new" entry labelled with the typed title. The page-0 search merge keeps that entry because it only removes duplicates by value (AsyncSelect.tsx:477-484), and a string title never equals a numeric id. Both rows show the same text, so lines 84-89 either click "create new" (if the search result hasn't rendered yet) or fail strict mode. CI never takes this branch: there is one value:'' list GET per modal open and no search GET. Fix: drop the count/rison/waitForResponse logic and type a strict prefix, await dashboardSelect.type(dashboardName.slice(0, -1)), then click getByText(dashboardName, { exact: true }) in the visible dropdown. The "create new" entry is then labelled with the prefix and can never be an exact match. Playwright's auto-wait covers both local filtering and server search. Alternatively, keep the GET wait and assert result.length === count as an explicit precondition.
🟡 Medium — Nothing detects a duplicate dashboard, and the mobile change removes the only signal
The post-click check at :90-92 also passes for the "create new" entry, since it has the same label. The "Added to N dashboards" and submenu checks also match by name, and apiPutChart at :172 quietly detaches the duplicate. In the failing master runs, this test reported a pass while POSTing the leaked dashboard; only the mobile "first card" test caught it, and that test now opens world_health. Fix: after the PUT, add expect((await getDashboardsByName(page, dashboardName)).count).toBe(1);, as explore-save.spec.ts:122 and #44829 already do. For a definitive check, pass the dashboard id in and assert (await updated).request().postDataJSON().dashboards contains it.
🟢 Low — Overlaps approved #44829 and #44581
#44829 (approved, mergeable) rewrites this same line to a new SaveChartModal.selectExistingDashboard() and adds the count assertion, so whichever lands second gets a conflict in overwriteToDashboard. #44581, also yours, adds a third wait inside SaveChartModal.selectDashboard. It's worth settling on one shared helper. #44829's getVisibleOptionTexts() wait appears to return early on the second overwrite, because the preselected last-used dashboard is already visible. That makes this PR's wait on the network response (or prefix typing) the stronger basis. Putting it in a SaveChartModal helper would also cover explore-save.spec.ts:114, which still uses the unguarded selectDashboard path. Keep the exact-only click there rather than Select.clickOption, which falls back to a partial match.
🟢 Low — Stale beforeAll in "Mobile Dashboard Interaction"
mobile-dashboard.spec.ts:153-174 still loads the dashboard list and skips the whole suite when there are no cards, but none of its three tests use the list anymore. The result is inconsistent: an empty list skips this suite, while a missing world_health fails the Filter Drawer suite. Fix: delete it, since openExampleDashboard already enforces the real precondition.
🟢 Low — openExampleDashboard uses raw goto, a hardcoded slug, and an assertion with no message
page.goto doesn't retry transient connection resets the way gotoWithRetry does (helpers/navigation.ts:37, which returns the Response, so the check can stay). ok() would also pass on a 200 login-page redirect, and a failure only reports "expected true". The world_health slug is also hardcoded separately in the export and embedded specs. Fix: const response = await gotoWithRetry(page, 'dashboard/world_health/'); expect(response?.status(), 'world_health missing; run superset load_examples').toBe(200);
🟢 Low — Comments and PR body have drifted
The PR body still says the test will "verify it contains the intended existing dashboard", but that assertion was removed in 1ec6f38. The spec comments at :32, :46 and :51 call the fixture "World Bank's Health"; its real title is "World Bank's Data". That wording predates this PR, but the PR touched those blocks.
🟢 Low — Product root cause is worth an issue
AsyncSelect never removes a "create new" (isNewOption) entry when a fetched option has the same label (mergeData and the page-0 search merge at AsyncSelect.tsx:477-484). A real user who types an existing title quickly, or has more than 100 dashboards, can see two identical rows, one of which silently creates an empty dashboard. That's out of scope here, but a follow-up issue would help.
|
@rebenitez1802 addressed:
|
rebenitez1802
left a comment
There was a problem hiding this comment.
Approve: both round-1 blockers are fixed. Prefix typing plus the exact-only click makes the "create new" pick impossible by construction, the PUT-body check in cross-referenced-dashboards catches a wrong pick, and CI is green on both legs. Everything below is an optional nit; the first four have one-click suggestions inline.
🟢 Low — The explore-save PUT check can never fail
explore-save.spec.ts:121-123 asserts dashboards contains dashboardId, but the save-as already put the chart on dashboardId, and SaveModal only appends to the chart's existing dashboards (SaveModal.tsx:508-532). A wrong "create new" pick would send [dashboardId, newId] and still pass. The count check at :126 can't see it either, because that duplicate would be titled with the typed prefix. Fix: toEqual([dashboardId]) (inline suggestion).
🟢 Low — The cross-referenced-dashboards comment now describes the wrong check
cross-referenced-dashboards.spec.ts:59-60 says the count check catches a "create new" pick. With prefix typing, that duplicate would carry the prefix title, so count stays 1; the new toContain(dashboardId) is what catches it. Fix: reword it (inline suggestion).
🟢 Low — status() === 200 still passes on a login redirect
That gap was in my round-1 suggestion, sorry. @has_access redirects a lost session to /login/?next=…/dashboard/world_health/, which returns 200, so this check doesn't catch it. A full-URL regex doesn't catch it either, because the target appears unencoded in next. Fix: also check the final path (inline suggestion). The suggestion uses page.url().split('?')[0] rather than new URL(...) because this file imports a URL constant that shadows the global.
🟢 Low — A stale comment remains in getMobileFilterButton
mobile-dashboard.spec.ts:55-58 says filters "depend on the fixture" and "callers skip themselves". In fact world_health ships with native_filter_configuration: [], and the helper itself skips. Fix: inline suggestion.
🟢 Low — The exact-only click copies Select's private selectors
SaveChartModal.ts:107-112 hardcodes the dropdown/option selectors because Select.clickOption falls back to a partial match. Fix: add an exact mode to Select (clickOption(text, { exact: true }), which auto-waits with no fallback) and call it from the helper.
🟢 Low — The refresh test's skip guards can hide regressions
This test now runs on world_health (it was skipped on master), but mobile-dashboard.spec.ts:198-211 still test.skips when the menu or the "Refresh dashboard" item is missing. The second guard runs count() right after the click with no auto-wait. This predates the PR, but the PR changed which dashboard the test opens. Fix: replace both with await expect(...).toBeVisible() before clicking.
🟢 Low — The PR body still lags the code
The body presents the count === 1 checks as this PR's change, but they came from #44829. explore-save.spec.ts is modified but missing from TESTING INSTRUCTIONS. The validation paragraph says tsc was blocked, while your reply says the isolated typecheck passed.
🟢 Low — #44581 still carries the old Save-modal wait (outside this PR)
#44581 still changes SaveChartModal.selectDashboard and Select.selectOption to wait for the list GET. Its comment says this prevents duplicating an existing title, but that method now only handles brand-new titles. Worth dropping those two Playwright files from the MCP PR.
|
Follow-ups on a0fb1a4:
|
rusackas
left a comment
There was a problem hiding this comment.
LGTM. The rewritten selectExistingDashboard (strict prefix + exact-match click) is a real fix for the race, not just a different way of hiding it, and the new assertions (PUT payload contains the dashboard id, exactly one dashboard with that title afterward) actually would have caught the original leak. Nice catch replacing the mobile suite's list-based skip with a hard status check too.
Heads up for later: #44829 touches this same overwriteToDashboard line, so whichever lands second will need a small conflict resolution.
|
Bito Automatic Review Skipped – PR Already Merged |
…d chart-paint wait" This reverts commit ba932cc. The reverted commit was based on a misreading of the CI log. Its premise was that the chart "took 22.9-23.7s to render", just over the 20s budget. Those numbers are the *total test durations* reported by Playwright (~3s navigation + the full 20s assertion), not chart render times. The actual failure on run 36463952537 was: Error: expect(locator).toBeVisible() failed Timeout: 20000ms Error: element(s) not found "element(s) not found" means neither [data-test="chart-container"] nor .dashboard-chart was ever in the DOM. Raising the budget to 30s cannot make an absent element appear. That failure has a different, already-fixed root cause. Before #44856 the test used openFirstDashboard(), which clicked an arbitrary first dashboard card and could land on a chart-less dashboard. #44856 (0a0a197) replaced it with a deterministic navigation to world_health. The test passes on current master in 7.5s total, so the 20s assertion resolves in ~4s — a 5x margin, not a budget that needs widening. The change would also not have worked on its own terms: the enclosing test has no test.setTimeout(), so its budget is the 30s default from playwright.config.ts. A 30s assertion plus ~3s of navigation exceeds that, so the test would hit "Test timeout of 30000ms exceeded" before the assertion could ever spend 30s — replacing a precise locator error with a vaguer one. dashboard-load.spec.ts:108-112 documents exactly this constraint, and every other CHART_RENDER site pairs it with a raised test timeout. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
* fix(echarts): fix sparse sub-daily bar sizing and x-axis mislabeling (apache#44628) Co-authored-by: Claude Sonnet 5 <noreply@anthropic.com> * fix(mysql): require TLS when SSL is requested (apache#44723) * fix(dynamodb): render time bounds as ISO 8601 so sub-day ranges match stored timestamps (apache#44702) * fix(opensearch): page drill-to-detail samples with the OpenSearch SQL response format (apache#44703) * fix(gsheets): pass the OAuth2 token and delegation subject through connect_args (apache#44709) * fix(databricks): stop the string-type patch writing SQLAlchemy's shared colspecs (apache#44707) * fix(oracle): map Oracle NUMBER, BINARY_FLOAT/DOUBLE and CLOB column types (apache#44685) Co-authored-by: Daniel Vaz Gaspar <danielvazgaspar@gmail.com> * chore(deps): bump undici from 7.29.0 to 7.30.0 in /superset-frontend in the security group across 1 directory (apache#44809) Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Đỗ Trọng Hải <41283691+hainenber@users.noreply.github.com> * chore(deps): bump react-window from 2.3.2 to 2.3.3 in /superset-frontend (apache#44820) Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * fix(datafusion): render temporal SQL that DataFusion accepts (apache#44700) * fix(db2): set current_schema to the catalog name of the selected schema (apache#44706) * chore(deps): bump brace-expansion from 5.0.9 to 5.0.12 in /superset-frontend/cypress-base (apache#44813) Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * perf(security): memoise the user subject lookup within a request (apache#44017) Co-authored-by: Shaurya <19599684+no-hup@users.noreply.github.com> Co-authored-by: Evan Rusackas <evan@rusackas.com> Co-authored-by: Evan Rusackas <evan@preset.io> Co-authored-by: Claude Sonnet 5 <noreply@anthropic.com> * refactor(mcp): one plugin lifecycle contract and compact chart config schemas (apache#44746) * fix(doris): quarter grain, SSL toggle, parameters URI, error mapping and column types (apache#44718) * chore(deps): bump the security group across 1 directory with 2 updates (apache#44824) Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * test(semantic-views): wait for views refetches to settle before selecting a view (apache#44792) * chore(build): remove unused dependencies in `docs` and `superset-frontend` (apache#44697) Signed-off-by: hainenber <dotronghai96@gmail.com> * chore(deps): bump the security group across 1 directory with 2 updates (apache#44831) Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * fix: avoid provider calls when rendering datasource access denials (apache#44432) * fix(csv-import): add primary key when MySQL requires one (apache#44411) Co-authored-by: Claude Opus 5 <noreply@anthropic.com> Co-authored-by: Evan Rusackas <evan@rusackas.com> Co-authored-by: Evan Rusackas <evan@preset.io> * fix(mcp): align histogram and waterfall query contracts (apache#44744) * ci(python): run the Python-next canary nightly, bump to 3.13 (apache#44767) Co-authored-by: Claude Sonnet 5 <noreply@anthropic.com> * chore(deps): bump dompurify from 3.4.15 to 3.4.16 in /superset-frontend in the security group across 1 directory (apache#44830) Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * fix(matrixify): fan metrics-axis selection into multi-query fields (apache#44629) Co-authored-by: Claude Sonnet 5 <noreply@anthropic.com> * fix(sqllab): ignore non-object template_params in format_sql instead of 500 (apache#44826) Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com> * fix(core): stop discarding API errors that quote an HTML tag (apache#42489) Co-authored-by: Evan Rusackas <evan@rusackas.com> Co-authored-by: Evan Rusackas <evan@preset.io> Co-authored-by: Claude Sonnet 5 <noreply@anthropic.com> * fix(i18n): make babel_update.sh .pot normalization actually run (apache#44395) * fix(sql): reject client-side file-transfer statements in query execution (apache#44496) Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com> Co-authored-by: Amin Ghadersohi <amin.ghadersohi@gmail.com> Co-authored-by: Evan Rusackas <evan@rusackas.com> Co-authored-by: Evan Rusackas <evan@preset.io> * fix(sqllab): preserve exact decimals in results and exports (apache#44739) * fix(exasol): classify common server errors (apache#44721) * fix(elasticsearch): classify byte, short, half_float, scaled_float and unsigned_long columns (apache#44713) * fix(db2): accept sqlglot's parse_mod in the DB2 term parser (apache#44708) * fix(databricks): keep the user's OAuth2 token and extra connect_args; re-auth on HTTP 401 (apache#44705) * fix(gsheets): align service-account validation and serialize upload dates (apache#44695) * fix(mcp): prioritize exact tool names in BM25 search (apache#44682) * test(embedded-sdk): cross-document test rig for the navigation fix (apache#44608) Co-authored-by: Claude Sonnet 5 <noreply@anthropic.com> * fix(auth): drain flash messages on the login page (apache#44605) * fix(gantt): prevent y-axis category labels from being clipped (apache#44321) * fix(auth): remove the legacy FAB password reset views and move password resets into the SPA (apache#44626) Co-authored-by: jayvenn21 <jvennamreddy@gmail.com> Co-authored-by: Claude Fable 5.1 <noreply@anthropic.com> * fix: increase dataset edit modal size (apache#38215) (apache#39257) Co-authored-by: codeant-ai-for-open-source[bot] <244253245+codeant-ai-for-open-source[bot]@users.noreply.github.com> Co-authored-by: rusackas <evan@rusackas.com> Co-authored-by: Claude Sonnet 5 <noreply@anthropic.com> Co-authored-by: Evan Rusackas <evan@preset.io> * fix(doris): offer the connection form by matching the installed driver (apache#44736) * chore(deps): bump @googleapis/sheets from 18.0.0 to 18.0.1 in /superset-frontend (apache#44862) Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * chore(deps): bump github/codeql-action/analyze from 4.38.1 to 4.38.2 (apache#44861) Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * chore(deps): bump github/codeql-action/upload-sarif from 4.38.1 to 4.38.2 (apache#44859) Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * chore: add sadpandajoe as a codeowner for .asf.yaml (apache#44855) Co-authored-by: Claude Sonnet 5 <noreply@anthropic.com> * chore: drop cypress-matrix-required from required status checks (apache#44854) Co-authored-by: Claude Sonnet 5 <noreply@anthropic.com> * chore(deps): bump github/codeql-action/init from 4.38.1 to 4.38.2 (apache#44860) Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Joe Li <joe@preset.io> * chore(e2e): remove Cypress infrastructure (apache#44829) Co-authored-by: Claude Sonnet 5.5 <noreply@anthropic.com> * fix(oauth2): refresh a token rejected when a connection opens (apache#44765) * feat(table): add multi-level column header groups (apache#43938) Co-authored-by: Cursor <cursoragent@cursor.com> Co-authored-by: Enzo Martellucci <enzomartellucci@gmail.com> Co-authored-by: Claude Opus 5.5 (1M context) <noreply@anthropic.com> * fix(mcp): enforce tool deadlines without blocking the server (apache#44581) Co-authored-by: Evan Rusackas <evan@rusackas.com> Co-authored-by: Claude Sonnet 5 <noreply@anthropic.com> * test(playwright): select existing dashboards without creating duplicates (apache#44856) * feat(mcp): support tab-scoped dashboard layouts (apache#44797) * fix: size 'Drill to detail' table header correctly (apache#44807) * fix(mcp): use DEFAULT_PAGE_SIZE constant in list_charts test (apache#44786) * fix(mcp): keep a bubble chart's colors and row limit across updates (apache#44618) Co-authored-by: Greg Neighbors <gregneighbors@Gregs-Air-2.lan> Co-authored-by: Claude Opus 5 <noreply@anthropic.com> * fix(frontend): use html2canvas for chart image export on Safari (apache#44529) * chore(deps): bump deck.gl and luma.gl from 9.2.5 to 9.4.0 in /superset-frontend (apache#42608) Co-authored-by: Evan Rusackas <evan@rusackas.com> Co-authored-by: Claude Sonnet 5 <noreply@anthropic.com> * fix(home): redirect users without an ID before rendering (apache#44456) * chore(deps-dev): update google-cloud-storage requirement from >=1.37 to >=3.14.1 (apache#44693) Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * fix(mcp): enforce dashboard filter scope on dataset, SQL and chart tool calls (apache#44800) * fix(postprocessing): preserve NULL index values through pivot() (apache#43547) (apache#43693) Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com> Co-authored-by: Evan Rusackas <evan@rusackas.com> Co-authored-by: Evan Rusackas <evan@preset.io> Co-authored-by: Claude Sonnet 5 <noreply@anthropic.com> * fix(mcp): execute_sql request limit caps, never raises, an explicit SQL LIMIT (apache#44604) Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com> * ci: require babel-extract to pass before merging master (apache#44543) Co-authored-by: Claude Sonnet 5 <noreply@anthropic.com> * fix(mcp): report a chart's live dataset id and name (apache#44681) * fix(retention): skip models without purge policies before scanning (apache#44874) * fix(semantic-layers): export/import semantic-view charts by typed reference (apache#44396) * fix(semantic-layer): require explicit member identity reselection (apache#44370) * fix(logging): register LogRestApi only once (apache#44732) * chore(deps-dev): bump baseline-browser-mapping from 2.11.25 to 2.11.26 in /superset-frontend (apache#44890) Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * chore(deps): bump dompurify from 3.4.15 to 3.4.16 in /superset-frontend (apache#44889) Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * chore(deps): bump dom-to-image-more from 3.10.2 to 3.11.0 in /superset-frontend (apache#44888) Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * chore(deps): bump maplibre-gl from 6.8.0 to 6.11.2 in /superset-frontend (apache#44887) Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * chore(deps-dev): bump minimizer-webpack-plugin from 5.11.0 to 5.12.0 in /superset-frontend (apache#44886) Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * chore(deps-dev): bump webpack-sources from 3.5.1 to 3.5.3 in /superset-frontend (apache#44885) Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * chore(deps-dev): bump oxlint-tsgolint from 7.0.2002 to 7.0.2003 in /docs (apache#44883) Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * chore(deps-dev): bump oxlint-tsgolint from 7.0.2002 to 7.0.2003 in /superset-websocket (apache#44882) Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * chore(superset-ui-chart-controls): forward-compat fixes for TypeScript 6.0 (apache#44877) Co-authored-by: Claude Sonnet 5 <noreply@anthropic.com> * feat(export/import): add annotation layer export/import support for charts and dashboards (apache#43232) Co-authored-by: rusackas <evan@rusackas.com> Co-authored-by: Evan Rusackas <evan@preset.io> Co-authored-by: Claude Sonnet 5 <noreply@anthropic.com> Co-authored-by: Enzo Martellucci <enzomartellucci@gmail.com> Co-authored-by: Enzo Martellucci <52219496+EnxDev@users.noreply.github.com> * fix(users): stop update_me setting self-referential changed_by_fk (apache#44866) Co-authored-by: Claude Sonnet 5.5 <noreply@anthropic.com> * chore(deps): bump dawidd6/action-download-artifact from 24 to 25 (apache#44884) Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * chore(build): de-vendor `helm/chart-testing-action` GHA (apache#44722) Signed-off-by: hainenber <dotronghai96@gmail.com> * fix(ci): floor pyfakefs at 5.7.4 to fix Python 3.13 pytest-cov crash (apache#44853) Co-authored-by: Claude Opus 5 <noreply@anthropic.com> * docs(databases): add ClickHouse Managed Postgres (apache#44870) Co-authored-by: Đỗ Trọng Hải <41283691+hainenber@users.noreply.github.com> * test(explore): cover time range frames, comparison labels, and metric popover state (apache#44847) Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com> * fix(change-detector): classify changed files by language, not directory (apache#44895) * chore(mcp): fix malformed tool and prompt docstrings (apache#44572) Co-authored-by: Claude Opus 5 <noreply@anthropic.com> * feat(chart): cross-filter by x-axis label on charts with dimensions (apache#44869) Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com> * test(explore): cover color scheme selection, BigNumber subheader/trendline, and WorldMap bubbles (apache#44846) Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com> * test(plugin-chart-table): cover server-side sort, query mode controls, and sort ordering (apache#44845) Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com> * test(explore): cover viz switch and control dependency logic (apache#44842) Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com> * test(explore): add fetchTopNValues unit tests (apache#44841) Co-authored-by: Claude Sonnet 5.5 <noreply@anthropic.com> * test(explore): add saveModalReducer unit tests (apache#44839) Co-authored-by: Claude Sonnet 5.5 <noreply@anthropic.com> * fix(dashboard): show the configured refresh warning alongside the limit error (apache#44836) Co-authored-by: Claude Sonnet 5.5 <noreply@anthropic.com> * test(explore): add datasourcesReducer unit tests (apache#44840) Co-authored-by: Claude Sonnet 5.5 <noreply@anthropic.com> * test(explore): port remaining deleted Cypress explore specs to RTL (apache#44838) Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com> * test(frontend): await the userEvent calls that needed restructuring (apache#44799) * fix(chart): wrap raw pandas TypeError/DataError from post-processing as QueryObjectValidationError (apache#44463) * fix(reports): catch TypeError when validating non-string extra.dashboard.anchor (apache#44404) Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com> * fix(import): avoid UnboundLocalError when load_yaml fails during load_configs (SC-121288) (apache#44390) Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com> * fix(api): return 401 not 500 for auth errors in CurrentUserRestApi (SC-120417) (apache#44213) * fix(security): guard is_guest_user against NoAuthorizationError on unauthenticated error paths (apache#43826) Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com> * fix: downgrade deprecated query_object field warnings to info (apache#43520) * docs: remove stale Selenium references after Playwright-only switch (apache#44243) * fix(mcp): include feature_availability in instance://metadata resource (apache#44891) * fix(echarts): recognize Date and ISO-string temporal x-axis values in getXAxisDomain (apache#44818) Co-authored-by: Claude Sonnet 5 <noreply@anthropic.com> * fix(native-filters): keep cascade dependency gate in sync with live filter type (apache#44366) Co-authored-by: Superset Dev <dev@superset.apache.org> Co-authored-by: Claude Sonnet 5 <noreply@anthropic.com> * feat(ci): add Chromatic visual regression testing for Storybook (apache#44103) Co-authored-by: Claude Code <noreply@anthropic.com> * fix(mcp): skip dashboard live updates when websockets are disabled or realtime access is missing (apache#44796) * test(dashboard): cover "View as table" end-to-end for a view-as-table-only role (apache#44881) Co-authored-by: Claude Sonnet 5 <noreply@anthropic.com> * test(clickhouse): cover GROUP BY ALL against a real instance (apache#40482) (apache#44879) Co-authored-by: Claude Sonnet 5 <noreply@anthropic.com> * fix(sec): sanitize HTML text before shown as impact item's label (apache#43825) * fix(chart): accept quarter and day in end-of time ranges (apache#43204) * fix(sql-lab): avoid duplicate generated result column names (apache#44189) * fix(chart): sort Heatmap Y-axis by default when unset (apache#44588) Co-authored-by: Claude Sonnet 5 <noreply@anthropic.com> Co-authored-by: Evan Rusackas <evan@rusackas.com> Co-authored-by: Evan Rusackas <evan@preset.io> * fix(select): remove Space wrapper from optionRender to fix option label truncation (apache#44357) * fix(sql-lab): use function valueGetter for GridTable row numbers (apache#41574) Co-authored-by: chenshaobo <chenshaobo@yjsafe.cn> Co-authored-by: Cursor <cursoragent@cursor.com> Co-authored-by: Evan Rusackas <evan@rusackas.com> * fix(mcp): stop partial-update tools from advertising null defaults (apache#44573) Co-authored-by: Claude Opus 5 <noreply@anthropic.com> * fix(cartodiagram): share Pie colors across locations in Explore (apache#44794) * fix(mcp): use create_proxy in simple_proxy for fastmcp 4 compatibility (apache#44787) * fix(post-processing): stop treating gaps as zero for cumprod, cummin and cummax (apache#44828) * fix(import): remove duplicate config redefinition in load_configs (apache#44932) Co-authored-by: Claude Sonnet 5 <noreply@anthropic.com> * perf(deletion-retention): one window pass for repeat predicate (apache#44349) * chore(deps): bump markdown from 3.10.3 to 3.11 (apache#44941) Signed-off-by: dependabot[bot] <support@github.com> Signed-off-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> * chore(deps-dev): update google-cloud-storage requirement from >=3.14.1 to >=3.15.0 (apache#44940) Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * chore(deps): bump cachetools from 7.1.8 to 7.2.0 (apache#44939) Signed-off-by: dependabot[bot] <support@github.com> Signed-off-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> * chore(deps-dev): update databricks-sql-connector requirement from <4.6.0,>=4.5.0 to >=4.6.0,<4.7.0 (apache#44937) Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * chore(deps): bump holidays from 0.104 to 0.105 (apache#44936) Signed-off-by: dependabot[bot] <support@github.com> Signed-off-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> * chore(deps): bump sqlglot from 30.18.0 to 30.19.0 (apache#44935) Signed-off-by: dependabot[bot] <support@github.com> Signed-off-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> * chore(deps-dev): bump clickhouse-connect from 1.8.0 to 1.9.0 (apache#44934) Signed-off-by: dependabot[bot] <support@github.com> Signed-off-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> * fix(mcp): preserve calling constraints in compact tool discovery (apache#44656) Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com> * feat: Add GUI for label_colors in Dashboard Properties Modal (apache#39434) Co-authored-by: Evan Rusackas <evan@rusackas.com> Co-authored-by: Jay Masiwal <jaymasiwal@users.noreply.github.com> Co-authored-by: Claude Sonnet 5 <noreply@anthropic.com> * test(opensearch): cover pagination and Content-Type regression against a real instance (apache#44924) Co-authored-by: Claude Sonnet 5 <noreply@anthropic.com> * fix(frontend): finish migrating off direct antd imports, enforce it in custom rules (apache#44927) Co-authored-by: Claude Sonnet 5 <noreply@anthropic.com> * test(mysql): cover require_mysql_tls fail-closed and verified-TLS paths (apache#44910) Co-authored-by: Claude Sonnet 5 <noreply@anthropic.com> * test(oracle): cover cancel-query against a real running statement (apache#44908) Co-authored-by: Claude Sonnet 5 <noreply@anthropic.com> * test(cratedb): cover epoch-ms timestamp decoding against a real instance (apache#44904) Co-authored-by: Claude Sonnet 5 <noreply@anthropic.com> * fix(deps): restore dompurify 3.4.16 in frontend lockfile (apache#44960) * fix(mypy): ignore false-positive union-attr on Slice.uuid.in_() (apache#44944) Co-authored-by: Claude Sonnet 5 <noreply@anthropic.com> * docs(mcp): document semantic-layer MCP tools (apache#44130) Co-authored-by: Claude Sonnet 5 <noreply@anthropic.com> * fix(dataset-editor): preserve edits across sort and sync external SQL changes (apache#44858) Co-authored-by: Claude Sonnet 5 <noreply@anthropic.com> * fix(sqlite): write midnight as a bare date for DATE columns in time filters (apache#44805) Co-authored-by: Amin Ghadersohi <5183956+aminghadersohi@users.noreply.github.com> * chore(deps): bump dawidd6/action-download-artifact from 25 to 26 (apache#44977) * chore(deps): bump chromaui/action from 18.7.3 to 18.10.1 (apache#44973) * chore(deps-dev): bump postcss-styled-syntax from 0.7.2 to 0.7.3 in /superset-frontend (apache#44980) Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * chore(deps-dev): bump @types/node from 26.6.2 to 26.6.3 in /superset-frontend (apache#44979) Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * chore(deps-dev): bump webpack-sources from 3.5.3 to 3.6.0 in /superset-frontend (apache#44978) Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * chore(deps): bump chalk from 6.0.0 to 6.0.1 in /superset-frontend (apache#44976) Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * chore(deps-dev): bump vitest from 5.0.1 to 5.0.2 in /superset-embedded-sdk (apache#44974) Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * chore(deps-dev): bump @types/node from 26.6.2 to 26.6.3 in /superset-embedded-sdk (apache#44972) Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * chore(deps-dev): bump @types/node from 26.6.2 to 26.6.3 in /superset-websocket (apache#44971) Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * chore(deps-dev): bump vitest from 5.0.1 to 5.0.2 in /superset-websocket (apache#44970) Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * chore(deps): bump ws from 8.21.3 to 8.22.0 in /superset-websocket (apache#44969) Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * chore: remove unused INCLUDE_FIREFOX build arg and dead screenshot config (apache#44245) * fix(explore): preserve pending column configuration edits (apache#44931) * fix(mcp): return actionable authorized column suggestions (apache#44603) * chore(deps-dev): bump the swc group in /superset-frontend with 2 updates (apache#44975) Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * chore(build): remove unused `polyline` Python dep (apache#44961) * fix: full CSV download in AgGrid (apache#41696) Co-authored-by: rusackas <evan@rusackas.com> Co-authored-by: Evan Rusackas <evan@preset.io> Co-authored-by: Claude Sonnet 5 <noreply@anthropic.com> * feat(mcp): support filter_range and filter_timegrain filters (apache#44893) * fix(models): silence pandas silent-downcasting FutureWarning in normalize_df (apache#44897) Co-authored-by: Claude Sonnet 5.5 <noreply@anthropic.com> * fix(mcp): avoid duplicate SQL execution results (apache#44949) * fix(charts): return 404 when chart export hits an inaccessible dataset (apache#44900) Co-authored-by: Mike Bridge <michael.bridge@ext.preset.io> Co-authored-by: Claude Opus 5.5 (1M context) <noreply@anthropic.com> * fix(mcp): allow bounding dashboard dataset columns (apache#44951) * feat(mcp): return the Big Number headline from chart and dashboard data (apache#44948) * fix(logging): stop logging tracebacks for client-side HTTP errors (apache#44666) * fix(ag-grid-table): refresh totals when summary aggregation changes (apache#44612) * feat(ci): conditionally run CodeQL analysis workflows only when there are detected JS/Python file changes (apache#44699) * fix(embedded): refuse guest row-level security on semantic views (apache#44987) Co-authored-by: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Co-authored-by: Mike Bridge <michael.bridge@ext.preset.io> * chore(deps-dev): bump oxlint from 1.85.0 to 1.86.0 in /superset-websocket (apache#45005) Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * feat(ag-grid-table): expand JSON values in table cells (apache#44907) Co-authored-by: Enzo Martellucci <52219496+EnxDev@users.noreply.github.com> * chore(i18n): update pt/pt_BR translations and rebuild translation index (apache#43022) Co-authored-by: Evan Rusackas <evan@rusackas.com> Co-authored-by: Israel Demetrios Diacov <israelddiacov@users.noreply.github.com> Co-authored-by: Claude Sonnet 5 <noreply@anthropic.com> * fix(dashboards): close CSS validation gaps in dashboard import and edits (apache#43666) Co-authored-by: Claude Sonnet 5 <noreply@anthropic.com> * fix(themes): overwrite-import guard, missing index, dedupe extra_editors (follow-up to apache#42404) (apache#44362) Co-authored-by: Claude Code <noreply@anthropic.com> * feat(bignumber): add an alignment control (apache#44554) Co-authored-by: Claude Sonnet 5 <noreply@anthropic.com> * fix(reports): propagate force flag to dashboard-tab permalink report URLs (apache#44775) Co-authored-by: Ferjani Nasraoui <ferjani.nasraoui@europace.de> Co-authored-by: Claude Fable 5.1 <noreply@anthropic.com> * refactor(list-view): eliminate any usage in ListView.tsx and TableCollection (apache#44208) Co-authored-by: Claude Sonnet 5 <noreply@anthropic.com> * fix(dashboard,explore): wire addWarningToast into download callers (apache#44154) Co-authored-by: Claude Sonnet 5 <noreply@anthropic.com> * chore(deps): bump the rjsf group in /superset-frontend with 3 updates (apache#45004) Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Joe Li <joe@preset.io> * chore(deps-dev): bump @swc/core from 1.16.2 to 1.16.12 in /superset-frontend in the swc group (apache#45012) Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * chore(deps): bump @swc/core from 1.16.2 to 1.16.12 in /docs (apache#45008) Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * chore(deps-dev): bump source-map-js from 1.2.1 to 1.2.2 in /superset-websocket in the security group across 1 directory (apache#45028) Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * feat: add global async query playwright tests (apache#43004) Co-authored-by: Claude Fable 5 <noreply@anthropic.com> * fix(table): omit dormant grains from semantic aggregate requests (apache#44455) * fix(semantic-layers): offer valid table ordering choices (apache#44806) Co-authored-by: Mike Bridge <michael.bridge@ext.preset.io> * fix(semantic-layers): remove child view permissions when a layer is deleted (apache#44905) Co-authored-by: Mike Bridge <michael.bridge@ext.preset.io> Co-authored-by: Claude Opus 5.5 (1M context) <noreply@anthropic.com> * chore(deps): bump proxy-addr from 2.0.7 to 2.0.8 in /superset-websocket/utils/client-ws-app in the security group across 1 directory (apache#45027) Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * chore(deps): bump dawidd6/action-download-artifact from 26 to 27 (apache#45011) Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * chore(deps): bump source-map-js from 1.2.1 to 1.2.2 in /superset-embedded-sdk in the security group across 1 directory (apache#45024) Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * fix(pivot-table): respect per-metric formatters in result aggregation (apache#44815) Co-authored-by: Evan Rusackas <evan@preset.io> * fix(query-context): match an adhoc granularity_sqla by its expression (apache#44773) * feat(mcp): allow default values on filter_select native filters (apache#44985) * feat(mcp): add structured dashboard text component management (apache#44560) * fix(explore): avoid mutating ZoomConfigControl configs (apache#44957) Co-authored-by: Cursor <cursoragent@cursor.com> * test(frontend): await remaining userEvent calls and lint for un-awaited ones (apache#44947) * fix(explore): open SQL Lab in a new tab on Ctrl+click in View query modal (apache#44933) * chore(deps): bump the security group across 1 directory with 9 updates (apache#45026) Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * chore(deps): bump the security group across 1 directory with 6 updates (apache#45025) Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * chore(deps-dev): bump wait-on from 9.1.0 to 9.4.0 in /superset-frontend (apache#45015) Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * chore(deps-dev): bump oxlint from 1.85.0 to 1.86.0 in /superset-frontend (apache#45014) Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * chore(deps-dev): bump oxlint from 1.85.0 to 1.86.0 in /docs (apache#45009) Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * chore(deps-dev): bump the typescript-eslint group in /superset-frontend with 2 updates (apache#45007) Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * chore(deps-dev): bump oxfmt from 0.70.0 to 0.71.0 in /superset-websocket (apache#45006) Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * feat(mcp): support filter-bar dividers in manage_native_filters (apache#45021) * fix(mcp): state that dataset tools are SQL-only and point to semantic tools (apache#44994) Co-authored-by: Mike Bridge <michael.bridge@ext.preset.io> * fix(dashboards): return 404 when dashboard export hits an inaccessible chart or dataset (apache#44929) Co-authored-by: Mike Bridge <michael.bridge@ext.preset.io> Co-authored-by: Claude Opus 5.5 (1M context) <noreply@anthropic.com> * feat(semantic): add optional metadata refresh SDK contract (apache#44834) Signed-off-by: Mike Bridge <michael.bridge@preset.io> * fix(semantic): map layer views as a collection (apache#44902) * feat(retention): let a host install purge policies for its own soft-delete roots (apache#44892) * fix(semantic): reject SQL clauses on semantic views (apache#44899) * fix(security): bind contextual access checks to the datasource type and id (apache#45002) Co-authored-by: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Co-authored-by: Mike Bridge <michael.bridge@ext.preset.io> * fix(permalink): handle concurrent creation of identical dashboard permalinks (apache#45059) Co-authored-by: Claude Sonnet 5.5 <noreply@anthropic.com> * chore(deps-dev): bump @types/ws from 8.18.1 to 8.18.2 in /superset-websocket (apache#45045) Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * chore(deps): bump the storybook group in /docs with 2 updates (apache#45046) Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * chore(deps-dev): bump the storybook group in /superset-frontend with 5 updates (apache#45047) Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * fix(post-processing): stop duplicating columns in _append_columns (apache#45018) * feat(plugin-chart-echarts): add a value axis label control (apache#43660) * fix(layout): restore growable app shell so injected content above #app doesn't clip it (apache#45056) Co-authored-by: Claude Sonnet 5 <noreply@anthropic.com> * feat(pivot-table): collapse row groups by default (apache#45030) * fix(versioning): refuse a chart restore whose datasource no longer exists (apache#44925) * fix(semantic): hide and ignore series limits that have no series columns (apache#44909) Co-authored-by: Mike Bridge <michael.bridge@ext.preset.io> * fix(async): show the real error for a failed async chart query (apache#45054) Co-authored-by: Mike Bridge <michael.bridge@ext.preset.io> Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com> * feat(semantic-layer): show provider queries from chart results (apache#44206) Co-authored-by: Mike Bridge <michael.bridge@ext.preset.io> * perf(security): batch dashboard fallback datasource resolution (apache#44993) Co-authored-by: Mike Bridge <michael.bridge@ext.preset.io> * fix(mcp): refuse changes to externally managed dashboards in all dashboard tools (apache#45062) Co-authored-by: Mike Bridge <michael.bridge@ext.preset.io> Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com> * fix(versioning): preserve history across savepoint rollback (apache#45033) * fix(cache): evict rejected cached GET requests (apache#45055) * fix(semantic): return a client error for unsupported time grains (apache#45053) Co-authored-by: Mike Bridge <michael.bridge@ext.preset.io> Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com> * chore(deps-dev): bump vitest from 5.0.2 to 5.0.3 in /superset-websocket (apache#45072) Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * docs: add DouroECI logo and contributor to In the Wild (apache#45096) Co-authored-by: José Henrique <jose.teixeira@douroeci.com> * fix(charts): clear perms of charts whose datasource no longer exists (apache#44926) Co-authored-by: Mike Bridge <michael.bridge@ext.preset.io> Co-authored-by: Claude Opus 5.5 (1M context) <noreply@anthropic.com> * fix(date_parser): use pyparsing snake_case API to silence PyparsingDeprecationWarning (apache#45094) Co-authored-by: Claude Sonnet 5.5 <noreply@anthropic.com> * fix(mcp): don't page MCP_ERROR_HOOK for user-class errors in the last-resort catch (SC-125493) (apache#45093) Co-authored-by: Claude Sonnet 5.5 <noreply@anthropic.com> * feat: SIP-209 Improved Alerts & Reports (apache#44992) Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> * chore(ci): configure more grouped dep upgrades across npm subprojects (apache#44696) Signed-off-by: hainenber <dotronghai96@gmail.com> * fix(explore): skip Ctrl/Cmd+Enter query while controls have errors or chart is loading (apache#44963) * fix(explore): show 0 zoom, latitude and longitude in the map view extent tag (apache#44962) Co-authored-by: Joe Li <joe@preset.io> * fix(explore): honor a controlled ControlPopover open prop (apache#44959) * fix(native-filters): show a clear error instead of "Network error" when filter values fail to load (apache#44585) Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com> * fix(explore): dispatch datasource metadata fetch (apache#44958) * fix(semantic-layer): fail incomplete or unverified semantic query results (apache#44832) * fix(dashboard): refresh semantic metadata across edits (apache#45052) Co-authored-by: Mike Bridge <michael.bridge@ext.preset.io> * chore: Update CODEOWNERS to include @sadpandajoe (apache#45120) * feat(mcp): add typed Sunburst chart support (apache#43771) * fix(semantic-layer): require write access for configuration schema enrichment (apache#45107) Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com> * test(dashboard): wait for async submenu and debounced validation in flaky tests (apache#45106) Co-authored-by: Mike Bridge <michael.bridge@ext.preset.io> * fix(datasets): accept certification fields on dataset column and metric PUT (apache#45091) * chore(deps): bump chromaui/action from 18.10.1 to 18.10.2 (apache#45134) --------- Signed-off-by: dependabot[bot] <support@github.com> Signed-off-by: hainenber <dotronghai96@gmail.com> Signed-off-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> Signed-off-by: Mike Bridge <michael.bridge@preset.io> Co-authored-by: Joe Li <joe@preset.io> Co-authored-by: Claude Sonnet 5 <noreply@anthropic.com> Co-authored-by: Amin Ghadersohi <amin.ghadersohi@gmail.com> Co-authored-by: Daniel Vaz Gaspar <danielvazgaspar@gmail.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Đỗ Trọng Hải <41283691+hainenber@users.noreply.github.com> Co-authored-by: shaurya <shauryajaiswal.dev@gmail.com> Co-authored-by: Shaurya <19599684+no-hup@users.noreply.github.com> Co-authored-by: Evan Rusackas <evan@rusackas.com> Co-authored-by: Evan Rusackas <evan@preset.io> Co-authored-by: Sepuri Sai Krishna <saik20533@gmail.com> Co-authored-by: Mike Bridge <michael.bridge@preset.io> Co-authored-by: Elizabeth Thompson <eschutho@gmail.com> Co-authored-by: Gaurav Dubey <gauravdubey0107@gmail.com> Co-authored-by: Gaston Laterza <glaterza@gmail.com> Co-authored-by: Shaitan <105581038+sha174n@users.noreply.github.com> Co-authored-by: chadek <32199566+chadek@users.noreply.github.com> Co-authored-by: 47th <161213233+flcrom@users.noreply.github.com> Co-authored-by: jayvenn21 <jvennamreddy@gmail.com> Co-authored-by: Vikash Kumar <163628932+Vikash-Kumar-23@users.noreply.github.com> Co-authored-by: codeant-ai-for-open-source[bot] <244253245+codeant-ai-for-open-source[bot]@users.noreply.github.com> Co-authored-by: SBIN2010 <Sbin2010@mail.ru> Co-authored-by: Cursor <cursoragent@cursor.com> Co-authored-by: Enzo Martellucci <enzomartellucci@gmail.com> Co-authored-by: mattmc3 <mattmc3@gmail.com> Co-authored-by: Viktor Högberg <119532259+vhogberg@users.noreply.github.com> Co-authored-by: Greg Neighbors <gkneighb@mac.com> Co-authored-by: Greg Neighbors <gregneighbors@Gregs-Air-2.lan> Co-authored-by: hadi mobarra <53408891+hadimobarra@users.noreply.github.com> Co-authored-by: Bexultan <bexultan.mustafin@ffins.kz> Co-authored-by: Archita-kale <kalearchita22@gmail.com> Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com> Co-authored-by: Mallikarjuna Reddy Nimmakayala <mallikarjunareddy.nimmakayala@gmail.com> Co-authored-by: Enzo Martellucci <52219496+EnxDev@users.noreply.github.com> Co-authored-by: Younes Beriane <paranoyouz@gmail.com> Co-authored-by: Alasdair Brown <sdairs@users.noreply.github.com> Co-authored-by: Krishna kumar singh <122664891+kksingh000@users.noreply.github.com> Co-authored-by: Luiz Otavio <45200344+luizotavio32@users.noreply.github.com> Co-authored-by: Sam Firke <sfirke@users.noreply.github.com> Co-authored-by: Superset Dev <dev@superset.apache.org> Co-authored-by: Dennis Khylkouski <161797777+dennisimoo@users.noreply.github.com> Co-authored-by: Piyush Raj <piyush.raj2024@nst.rishihood.edu.in> Co-authored-by: hahaok <35909137+csbbo@users.noreply.github.com> Co-authored-by: chenshaobo <chenshaobo@yjsafe.cn> Co-authored-by: Nguyen Dang Trung Tien <trungtien238lnd@gmail.com> Co-authored-by: Endi Monan <65144790+endimonan@users.noreply.github.com> Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> Co-authored-by: Jay Masiwal <masiwaljay.02@gmail.com> Co-authored-by: Jay Masiwal <jaymasiwal@users.noreply.github.com> Co-authored-by: Daniel Alyoshin <daniel.alyoshin@gmail.com> Co-authored-by: Amin Ghadersohi <5183956+aminghadersohi@users.noreply.github.com> Co-authored-by: Minwook Shin <163576506+minwookshin@users.noreply.github.com> Co-authored-by: Beto Dealmeida <roberto@dealmeida.net> Co-authored-by: Mike Bridge <michael.bridge@ext.preset.io> Co-authored-by: Rafael Benitez <rebenitez1802@gmail.com> Co-authored-by: Israel Demetrios Diacov <66575932+israelddiacov@users.noreply.github.com> Co-authored-by: Israel Demetrios Diacov <israelddiacov@users.noreply.github.com> Co-authored-by: Ferjani Nasraoui <ferjani.nasraoui@europace.de> Co-authored-by: drivaspreset <diego.rivas@preset.io> Co-authored-by: Abhinav <alpha9coder@gmail.com> Co-authored-by: Trakshan Mishra <43599000+trakshan-mishra@users.noreply.github.com> Co-authored-by: Amogh Atreya <amoghatreya100@gmail.com> Co-authored-by: Divyansh Yadav <anshmcs@gmail.com> Co-authored-by: Alexandru Soare <37236580+alexandrusoare@users.noreply.github.com> Co-authored-by: Michael S. Molina <70410625+michael-s-molina@users.noreply.github.com> Co-authored-by: rlei <242280117+rlei-odes@users.noreply.github.com> Co-authored-by: J0s3-H3nr1qu3 <hareboom@gmail.com> Co-authored-by: José Henrique <jose.teixeira@douroeci.com> Co-authored-by: Vitor Avila <96086495+Vitor-Avila@users.noreply.github.com> Co-authored-by: Mayuri <163738104+mayuriphad@users.noreply.github.com> Co-authored-by: Mehmet Salih Yavuz <salih.yavuz@proton.me>
* refactor(mcp): one plugin lifecycle contract and compact chart config schemas (apache#44746) * fix(doris): quarter grain, SSL toggle, parameters URI, error mapping and column types (apache#44718) * chore(deps): bump the security group across 1 directory with 2 updates (apache#44824) Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * test(semantic-views): wait for views refetches to settle before selecting a view (apache#44792) * chore(build): remove unused dependencies in `docs` and `superset-frontend` (apache#44697) Signed-off-by: hainenber <dotronghai96@gmail.com> * chore(deps): bump the security group across 1 directory with 2 updates (apache#44831) Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * fix: avoid provider calls when rendering datasource access denials (apache#44432) * fix(csv-import): add primary key when MySQL requires one (apache#44411) Co-authored-by: Claude Opus 5 <noreply@anthropic.com> Co-authored-by: Evan Rusackas <evan@rusackas.com> Co-authored-by: Evan Rusackas <evan@preset.io> * fix(mcp): align histogram and waterfall query contracts (apache#44744) * ci(python): run the Python-next canary nightly, bump to 3.13 (apache#44767) Co-authored-by: Claude Sonnet 5 <noreply@anthropic.com> * chore(deps): bump dompurify from 3.4.15 to 3.4.16 in /superset-frontend in the security group across 1 directory (apache#44830) Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * fix(matrixify): fan metrics-axis selection into multi-query fields (apache#44629) Co-authored-by: Claude Sonnet 5 <noreply@anthropic.com> * fix(sqllab): ignore non-object template_params in format_sql instead of 500 (apache#44826) Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com> * fix(core): stop discarding API errors that quote an HTML tag (apache#42489) Co-authored-by: Evan Rusackas <evan@rusackas.com> Co-authored-by: Evan Rusackas <evan@preset.io> Co-authored-by: Claude Sonnet 5 <noreply@anthropic.com> * fix(i18n): make babel_update.sh .pot normalization actually run (apache#44395) * fix(sql): reject client-side file-transfer statements in query execution (apache#44496) Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com> Co-authored-by: Amin Ghadersohi <amin.ghadersohi@gmail.com> Co-authored-by: Evan Rusackas <evan@rusackas.com> Co-authored-by: Evan Rusackas <evan@preset.io> * fix(sqllab): preserve exact decimals in results and exports (apache#44739) * fix(exasol): classify common server errors (apache#44721) * fix(elasticsearch): classify byte, short, half_float, scaled_float and unsigned_long columns (apache#44713) * fix(db2): accept sqlglot's parse_mod in the DB2 term parser (apache#44708) * fix(databricks): keep the user's OAuth2 token and extra connect_args; re-auth on HTTP 401 (apache#44705) * fix(gsheets): align service-account validation and serialize upload dates (apache#44695) * fix(mcp): prioritize exact tool names in BM25 search (apache#44682) * test(embedded-sdk): cross-document test rig for the navigation fix (apache#44608) Co-authored-by: Claude Sonnet 5 <noreply@anthropic.com> * fix(auth): drain flash messages on the login page (apache#44605) * fix(gantt): prevent y-axis category labels from being clipped (apache#44321) * fix(auth): remove the legacy FAB password reset views and move password resets into the SPA (apache#44626) Co-authored-by: jayvenn21 <jvennamreddy@gmail.com> Co-authored-by: Claude Fable 5.1 <noreply@anthropic.com> * fix: increase dataset edit modal size (apache#38215) (apache#39257) Co-authored-by: codeant-ai-for-open-source[bot] <244253245+codeant-ai-for-open-source[bot]@users.noreply.github.com> Co-authored-by: rusackas <evan@rusackas.com> Co-authored-by: Claude Sonnet 5 <noreply@anthropic.com> Co-authored-by: Evan Rusackas <evan@preset.io> * fix(doris): offer the connection form by matching the installed driver (apache#44736) * chore(deps): bump @googleapis/sheets from 18.0.0 to 18.0.1 in /superset-frontend (apache#44862) Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * chore(deps): bump github/codeql-action/analyze from 4.38.1 to 4.38.2 (apache#44861) Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * chore(deps): bump github/codeql-action/upload-sarif from 4.38.1 to 4.38.2 (apache#44859) Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * chore: add sadpandajoe as a codeowner for .asf.yaml (apache#44855) Co-authored-by: Claude Sonnet 5 <noreply@anthropic.com> * chore: drop cypress-matrix-required from required status checks (apache#44854) Co-authored-by: Claude Sonnet 5 <noreply@anthropic.com> * chore(deps): bump github/codeql-action/init from 4.38.1 to 4.38.2 (apache#44860) Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Joe Li <joe@preset.io> * chore(e2e): remove Cypress infrastructure (apache#44829) Co-authored-by: Claude Sonnet 5.5 <noreply@anthropic.com> * fix(oauth2): refresh a token rejected when a connection opens (apache#44765) * feat(table): add multi-level column header groups (apache#43938) Co-authored-by: Cursor <cursoragent@cursor.com> Co-authored-by: Enzo Martellucci <enzomartellucci@gmail.com> Co-authored-by: Claude Opus 5.5 (1M context) <noreply@anthropic.com> * fix(mcp): enforce tool deadlines without blocking the server (apache#44581) Co-authored-by: Evan Rusackas <evan@rusackas.com> Co-authored-by: Claude Sonnet 5 <noreply@anthropic.com> * test(playwright): select existing dashboards without creating duplicates (apache#44856) * feat(mcp): support tab-scoped dashboard layouts (apache#44797) * fix: size 'Drill to detail' table header correctly (apache#44807) * fix(mcp): use DEFAULT_PAGE_SIZE constant in list_charts test (apache#44786) * fix(mcp): keep a bubble chart's colors and row limit across updates (apache#44618) Co-authored-by: Greg Neighbors <gregneighbors@Gregs-Air-2.lan> Co-authored-by: Claude Opus 5 <noreply@anthropic.com> * fix(frontend): use html2canvas for chart image export on Safari (apache#44529) * chore(deps): bump deck.gl and luma.gl from 9.2.5 to 9.4.0 in /superset-frontend (apache#42608) Co-authored-by: Evan Rusackas <evan@rusackas.com> Co-authored-by: Claude Sonnet 5 <noreply@anthropic.com> * fix(home): redirect users without an ID before rendering (apache#44456) * chore(deps-dev): update google-cloud-storage requirement from >=1.37 to >=3.14.1 (apache#44693) Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * fix(mcp): enforce dashboard filter scope on dataset, SQL and chart tool calls (apache#44800) * fix(postprocessing): preserve NULL index values through pivot() (apache#43547) (apache#43693) Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com> Co-authored-by: Evan Rusackas <evan@rusackas.com> Co-authored-by: Evan Rusackas <evan@preset.io> Co-authored-by: Claude Sonnet 5 <noreply@anthropic.com> * fix(mcp): execute_sql request limit caps, never raises, an explicit SQL LIMIT (apache#44604) Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com> * ci: require babel-extract to pass before merging master (apache#44543) Co-authored-by: Claude Sonnet 5 <noreply@anthropic.com> * fix(mcp): report a chart's live dataset id and name (apache#44681) * fix(retention): skip models without purge policies before scanning (apache#44874) * fix(semantic-layers): export/import semantic-view charts by typed reference (apache#44396) * fix(semantic-layer): require explicit member identity reselection (apache#44370) * fix(logging): register LogRestApi only once (apache#44732) * chore(deps-dev): bump baseline-browser-mapping from 2.11.25 to 2.11.26 in /superset-frontend (apache#44890) Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * chore(deps): bump dompurify from 3.4.15 to 3.4.16 in /superset-frontend (apache#44889) Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * chore(deps): bump dom-to-image-more from 3.10.2 to 3.11.0 in /superset-frontend (apache#44888) Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * chore(deps): bump maplibre-gl from 6.8.0 to 6.11.2 in /superset-frontend (apache#44887) Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * chore(deps-dev): bump minimizer-webpack-plugin from 5.11.0 to 5.12.0 in /superset-frontend (apache#44886) Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * chore(deps-dev): bump webpack-sources from 3.5.1 to 3.5.3 in /superset-frontend (apache#44885) Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * chore(deps-dev): bump oxlint-tsgolint from 7.0.2002 to 7.0.2003 in /docs (apache#44883) Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * chore(deps-dev): bump oxlint-tsgolint from 7.0.2002 to 7.0.2003 in /superset-websocket (apache#44882) Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * chore(superset-ui-chart-controls): forward-compat fixes for TypeScript 6.0 (apache#44877) Co-authored-by: Claude Sonnet 5 <noreply@anthropic.com> * feat(export/import): add annotation layer export/import support for charts and dashboards (apache#43232) Co-authored-by: rusackas <evan@rusackas.com> Co-authored-by: Evan Rusackas <evan@preset.io> Co-authored-by: Claude Sonnet 5 <noreply@anthropic.com> Co-authored-by: Enzo Martellucci <enzomartellucci@gmail.com> Co-authored-by: Enzo Martellucci <52219496+EnxDev@users.noreply.github.com> * fix(users): stop update_me setting self-referential changed_by_fk (apache#44866) Co-authored-by: Claude Sonnet 5.5 <noreply@anthropic.com> * chore(deps): bump dawidd6/action-download-artifact from 24 to 25 (apache#44884) Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * chore(build): de-vendor `helm/chart-testing-action` GHA (apache#44722) Signed-off-by: hainenber <dotronghai96@gmail.com> * fix(ci): floor pyfakefs at 5.7.4 to fix Python 3.13 pytest-cov crash (apache#44853) Co-authored-by: Claude Opus 5 <noreply@anthropic.com> * docs(databases): add ClickHouse Managed Postgres (apache#44870) Co-authored-by: Đỗ Trọng Hải <41283691+hainenber@users.noreply.github.com> * test(explore): cover time range frames, comparison labels, and metric popover state (apache#44847) Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com> * fix(change-detector): classify changed files by language, not directory (apache#44895) * chore(mcp): fix malformed tool and prompt docstrings (apache#44572) Co-authored-by: Claude Opus 5 <noreply@anthropic.com> * feat(chart): cross-filter by x-axis label on charts with dimensions (apache#44869) Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com> * test(explore): cover color scheme selection, BigNumber subheader/trendline, and WorldMap bubbles (apache#44846) Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com> * test(plugin-chart-table): cover server-side sort, query mode controls, and sort ordering (apache#44845) Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com> * test(explore): cover viz switch and control dependency logic (apache#44842) Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com> * test(explore): add fetchTopNValues unit tests (apache#44841) Co-authored-by: Claude Sonnet 5.5 <noreply@anthropic.com> * test(explore): add saveModalReducer unit tests (apache#44839) Co-authored-by: Claude Sonnet 5.5 <noreply@anthropic.com> * fix(dashboard): show the configured refresh warning alongside the limit error (apache#44836) Co-authored-by: Claude Sonnet 5.5 <noreply@anthropic.com> * test(explore): add datasourcesReducer unit tests (apache#44840) Co-authored-by: Claude Sonnet 5.5 <noreply@anthropic.com> * test(explore): port remaining deleted Cypress explore specs to RTL (apache#44838) Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com> * test(frontend): await the userEvent calls that needed restructuring (apache#44799) * fix(chart): wrap raw pandas TypeError/DataError from post-processing as QueryObjectValidationError (apache#44463) * fix(reports): catch TypeError when validating non-string extra.dashboard.anchor (apache#44404) Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com> * fix(import): avoid UnboundLocalError when load_yaml fails during load_configs (SC-121288) (apache#44390) Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com> * fix(api): return 401 not 500 for auth errors in CurrentUserRestApi (SC-120417) (apache#44213) * fix(security): guard is_guest_user against NoAuthorizationError on unauthenticated error paths (apache#43826) Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com> * fix: downgrade deprecated query_object field warnings to info (apache#43520) * docs: remove stale Selenium references after Playwright-only switch (apache#44243) * fix(mcp): include feature_availability in instance://metadata resource (apache#44891) * fix(echarts): recognize Date and ISO-string temporal x-axis values in getXAxisDomain (apache#44818) Co-authored-by: Claude Sonnet 5 <noreply@anthropic.com> * fix(native-filters): keep cascade dependency gate in sync with live filter type (apache#44366) Co-authored-by: Superset Dev <dev@superset.apache.org> Co-authored-by: Claude Sonnet 5 <noreply@anthropic.com> * feat(ci): add Chromatic visual regression testing for Storybook (apache#44103) Co-authored-by: Claude Code <noreply@anthropic.com> * fix(mcp): skip dashboard live updates when websockets are disabled or realtime access is missing (apache#44796) * test(dashboard): cover "View as table" end-to-end for a view-as-table-only role (apache#44881) Co-authored-by: Claude Sonnet 5 <noreply@anthropic.com> * test(clickhouse): cover GROUP BY ALL against a real instance (apache#40482) (apache#44879) Co-authored-by: Claude Sonnet 5 <noreply@anthropic.com> * fix(sec): sanitize HTML text before shown as impact item's label (apache#43825) * fix(chart): accept quarter and day in end-of time ranges (apache#43204) * fix(sql-lab): avoid duplicate generated result column names (apache#44189) * fix(chart): sort Heatmap Y-axis by default when unset (apache#44588) Co-authored-by: Claude Sonnet 5 <noreply@anthropic.com> Co-authored-by: Evan Rusackas <evan@rusackas.com> Co-authored-by: Evan Rusackas <evan@preset.io> * fix(select): remove Space wrapper from optionRender to fix option label truncation (apache#44357) * fix(sql-lab): use function valueGetter for GridTable row numbers (apache#41574) Co-authored-by: chenshaobo <chenshaobo@yjsafe.cn> Co-authored-by: Cursor <cursoragent@cursor.com> Co-authored-by: Evan Rusackas <evan@rusackas.com> * fix(mcp): stop partial-update tools from advertising null defaults (apache#44573) Co-authored-by: Claude Opus 5 <noreply@anthropic.com> * fix(cartodiagram): share Pie colors across locations in Explore (apache#44794) * fix(mcp): use create_proxy in simple_proxy for fastmcp 4 compatibility (apache#44787) * fix(post-processing): stop treating gaps as zero for cumprod, cummin and cummax (apache#44828) * fix(import): remove duplicate config redefinition in load_configs (apache#44932) Co-authored-by: Claude Sonnet 5 <noreply@anthropic.com> * perf(deletion-retention): one window pass for repeat predicate (apache#44349) * chore(deps): bump markdown from 3.10.3 to 3.11 (apache#44941) Signed-off-by: dependabot[bot] <support@github.com> Signed-off-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> * chore(deps-dev): update google-cloud-storage requirement from >=3.14.1 to >=3.15.0 (apache#44940) Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * chore(deps): bump cachetools from 7.1.8 to 7.2.0 (apache#44939) Signed-off-by: dependabot[bot] <support@github.com> Signed-off-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> * chore(deps-dev): update databricks-sql-connector requirement from <4.6.0,>=4.5.0 to >=4.6.0,<4.7.0 (apache#44937) Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * chore(deps): bump holidays from 0.104 to 0.105 (apache#44936) Signed-off-by: dependabot[bot] <support@github.com> Signed-off-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> * chore(deps): bump sqlglot from 30.18.0 to 30.19.0 (apache#44935) Signed-off-by: dependabot[bot] <support@github.com> Signed-off-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> * chore(deps-dev): bump clickhouse-connect from 1.8.0 to 1.9.0 (apache#44934) Signed-off-by: dependabot[bot] <support@github.com> Signed-off-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> * fix(mcp): preserve calling constraints in compact tool discovery (apache#44656) Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com> * feat: Add GUI for label_colors in Dashboard Properties Modal (apache#39434) Co-authored-by: Evan Rusackas <evan@rusackas.com> Co-authored-by: Jay Masiwal <jaymasiwal@users.noreply.github.com> Co-authored-by: Claude Sonnet 5 <noreply@anthropic.com> * test(opensearch): cover pagination and Content-Type regression against a real instance (apache#44924) Co-authored-by: Claude Sonnet 5 <noreply@anthropic.com> * fix(frontend): finish migrating off direct antd imports, enforce it in custom rules (apache#44927) Co-authored-by: Claude Sonnet 5 <noreply@anthropic.com> * test(mysql): cover require_mysql_tls fail-closed and verified-TLS paths (apache#44910) Co-authored-by: Claude Sonnet 5 <noreply@anthropic.com> * test(oracle): cover cancel-query against a real running statement (apache#44908) Co-authored-by: Claude Sonnet 5 <noreply@anthropic.com> * test(cratedb): cover epoch-ms timestamp decoding against a real instance (apache#44904) Co-authored-by: Claude Sonnet 5 <noreply@anthropic.com> * fix(deps): restore dompurify 3.4.16 in frontend lockfile (apache#44960) * fix(mypy): ignore false-positive union-attr on Slice.uuid.in_() (apache#44944) Co-authored-by: Claude Sonnet 5 <noreply@anthropic.com> * docs(mcp): document semantic-layer MCP tools (apache#44130) Co-authored-by: Claude Sonnet 5 <noreply@anthropic.com> * fix(dataset-editor): preserve edits across sort and sync external SQL changes (apache#44858) Co-authored-by: Claude Sonnet 5 <noreply@anthropic.com> * fix(sqlite): write midnight as a bare date for DATE columns in time filters (apache#44805) Co-authored-by: Amin Ghadersohi <5183956+aminghadersohi@users.noreply.github.com> * chore(deps): bump dawidd6/action-download-artifact from 25 to 26 (apache#44977) * chore(deps): bump chromaui/action from 18.7.3 to 18.10.1 (apache#44973) * chore(deps-dev): bump postcss-styled-syntax from 0.7.2 to 0.7.3 in /superset-frontend (apache#44980) Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * chore(deps-dev): bump @types/node from 26.6.2 to 26.6.3 in /superset-frontend (apache#44979) Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * chore(deps-dev): bump webpack-sources from 3.5.3 to 3.6.0 in /superset-frontend (apache#44978) Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * chore(deps): bump chalk from 6.0.0 to 6.0.1 in /superset-frontend (apache#44976) Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * chore(deps-dev): bump vitest from 5.0.1 to 5.0.2 in /superset-embedded-sdk (apache#44974) Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * chore(deps-dev): bump @types/node from 26.6.2 to 26.6.3 in /superset-embedded-sdk (apache#44972) Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * chore(deps-dev): bump @types/node from 26.6.2 to 26.6.3 in /superset-websocket (apache#44971) Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * chore(deps-dev): bump vitest from 5.0.1 to 5.0.2 in /superset-websocket (apache#44970) Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * chore(deps): bump ws from 8.21.3 to 8.22.0 in /superset-websocket (apache#44969) Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * chore: remove unused INCLUDE_FIREFOX build arg and dead screenshot config (apache#44245) * fix(explore): preserve pending column configuration edits (apache#44931) * fix(mcp): return actionable authorized column suggestions (apache#44603) * chore(deps-dev): bump the swc group in /superset-frontend with 2 updates (apache#44975) Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * chore(build): remove unused `polyline` Python dep (apache#44961) * fix: full CSV download in AgGrid (apache#41696) Co-authored-by: rusackas <evan@rusackas.com> Co-authored-by: Evan Rusackas <evan@preset.io> Co-authored-by: Claude Sonnet 5 <noreply@anthropic.com> * feat(mcp): support filter_range and filter_timegrain filters (apache#44893) * fix(models): silence pandas silent-downcasting FutureWarning in normalize_df (apache#44897) Co-authored-by: Claude Sonnet 5.5 <noreply@anthropic.com> * fix(mcp): avoid duplicate SQL execution results (apache#44949) * fix(charts): return 404 when chart export hits an inaccessible dataset (apache#44900) Co-authored-by: Mike Bridge <michael.bridge@ext.preset.io> Co-authored-by: Claude Opus 5.5 (1M context) <noreply@anthropic.com> * fix(mcp): allow bounding dashboard dataset columns (apache#44951) * feat(mcp): return the Big Number headline from chart and dashboard data (apache#44948) * fix(logging): stop logging tracebacks for client-side HTTP errors (apache#44666) * fix(ag-grid-table): refresh totals when summary aggregation changes (apache#44612) * feat(ci): conditionally run CodeQL analysis workflows only when there are detected JS/Python file changes (apache#44699) * fix(embedded): refuse guest row-level security on semantic views (apache#44987) Co-authored-by: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Co-authored-by: Mike Bridge <michael.bridge@ext.preset.io> * chore(deps-dev): bump oxlint from 1.85.0 to 1.86.0 in /superset-websocket (apache#45005) Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * feat(ag-grid-table): expand JSON values in table cells (apache#44907) Co-authored-by: Enzo Martellucci <52219496+EnxDev@users.noreply.github.com> * chore(i18n): update pt/pt_BR translations and rebuild translation index (apache#43022) Co-authored-by: Evan Rusackas <evan@rusackas.com> Co-authored-by: Israel Demetrios Diacov <israelddiacov@users.noreply.github.com> Co-authored-by: Claude Sonnet 5 <noreply@anthropic.com> * fix(dashboards): close CSS validation gaps in dashboard import and edits (apache#43666) Co-authored-by: Claude Sonnet 5 <noreply@anthropic.com> * fix(themes): overwrite-import guard, missing index, dedupe extra_editors (follow-up to apache#42404) (apache#44362) Co-authored-by: Claude Code <noreply@anthropic.com> * feat(bignumber): add an alignment control (apache#44554) Co-authored-by: Claude Sonnet 5 <noreply@anthropic.com> * fix(reports): propagate force flag to dashboard-tab permalink report URLs (apache#44775) Co-authored-by: Ferjani Nasraoui <ferjani.nasraoui@europace.de> Co-authored-by: Claude Fable 5.1 <noreply@anthropic.com> * refactor(list-view): eliminate any usage in ListView.tsx and TableCollection (apache#44208) Co-authored-by: Claude Sonnet 5 <noreply@anthropic.com> * fix(dashboard,explore): wire addWarningToast into download callers (apache#44154) Co-authored-by: Claude Sonnet 5 <noreply@anthropic.com> * chore(deps): bump the rjsf group in /superset-frontend with 3 updates (apache#45004) Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Joe Li <joe@preset.io> * chore(deps-dev): bump @swc/core from 1.16.2 to 1.16.12 in /superset-frontend in the swc group (apache#45012) Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * chore(deps): bump @swc/core from 1.16.2 to 1.16.12 in /docs (apache#45008) Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * chore(deps-dev): bump source-map-js from 1.2.1 to 1.2.2 in /superset-websocket in the security group across 1 directory (apache#45028) Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * feat: add global async query playwright tests (apache#43004) Co-authored-by: Claude Fable 5 <noreply@anthropic.com> * fix(table): omit dormant grains from semantic aggregate requests (apache#44455) * fix(semantic-layers): offer valid table ordering choices (apache#44806) Co-authored-by: Mike Bridge <michael.bridge@ext.preset.io> * fix(semantic-layers): remove child view permissions when a layer is deleted (apache#44905) Co-authored-by: Mike Bridge <michael.bridge@ext.preset.io> Co-authored-by: Claude Opus 5.5 (1M context) <noreply@anthropic.com> * chore(deps): bump proxy-addr from 2.0.7 to 2.0.8 in /superset-websocket/utils/client-ws-app in the security group across 1 directory (apache#45027) Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * chore(deps): bump dawidd6/action-download-artifact from 26 to 27 (apache#45011) Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * chore(deps): bump source-map-js from 1.2.1 to 1.2.2 in /superset-embedded-sdk in the security group across 1 directory (apache#45024) Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * fix(pivot-table): respect per-metric formatters in result aggregation (apache#44815) Co-authored-by: Evan Rusackas <evan@preset.io> * fix(query-context): match an adhoc granularity_sqla by its expression (apache#44773) * feat(mcp): allow default values on filter_select native filters (apache#44985) * feat(mcp): add structured dashboard text component management (apache#44560) * fix(explore): avoid mutating ZoomConfigControl configs (apache#44957) Co-authored-by: Cursor <cursoragent@cursor.com> * test(frontend): await remaining userEvent calls and lint for un-awaited ones (apache#44947) * fix(explore): open SQL Lab in a new tab on Ctrl+click in View query modal (apache#44933) * chore(deps): bump the security group across 1 directory with 9 updates (apache#45026) Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * chore(deps): bump the security group across 1 directory with 6 updates (apache#45025) Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * chore(deps-dev): bump wait-on from 9.1.0 to 9.4.0 in /superset-frontend (apache#45015) Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * chore(deps-dev): bump oxlint from 1.85.0 to 1.86.0 in /superset-frontend (apache#45014) Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * chore(deps-dev): bump oxlint from 1.85.0 to 1.86.0 in /docs (apache#45009) Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * chore(deps-dev): bump the typescript-eslint group in /superset-frontend with 2 updates (apache#45007) Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * chore(deps-dev): bump oxfmt from 0.70.0 to 0.71.0 in /superset-websocket (apache#45006) Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * feat(mcp): support filter-bar dividers in manage_native_filters (apache#45021) * fix(mcp): state that dataset tools are SQL-only and point to semantic tools (apache#44994) Co-authored-by: Mike Bridge <michael.bridge@ext.preset.io> * fix(dashboards): return 404 when dashboard export hits an inaccessible chart or dataset (apache#44929) Co-authored-by: Mike Bridge <michael.bridge@ext.preset.io> Co-authored-by: Claude Opus 5.5 (1M context) <noreply@anthropic.com> * feat(semantic): add optional metadata refresh SDK contract (apache#44834) Signed-off-by: Mike Bridge <michael.bridge@preset.io> * fix(semantic): map layer views as a collection (apache#44902) * feat(retention): let a host install purge policies for its own soft-delete roots (apache#44892) * fix(semantic): reject SQL clauses on semantic views (apache#44899) * fix(security): bind contextual access checks to the datasource type and id (apache#45002) Co-authored-by: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Co-authored-by: Mike Bridge <michael.bridge@ext.preset.io> * fix(permalink): handle concurrent creation of identical dashboard permalinks (apache#45059) Co-authored-by: Claude Sonnet 5.5 <noreply@anthropic.com> * chore(deps-dev): bump @types/ws from 8.18.1 to 8.18.2 in /superset-websocket (apache#45045) Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * chore(deps): bump the storybook group in /docs with 2 updates (apache#45046) Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * chore(deps-dev): bump the storybook group in /superset-frontend with 5 updates (apache#45047) Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * fix(post-processing): stop duplicating columns in _append_columns (apache#45018) * feat(plugin-chart-echarts): add a value axis label control (apache#43660) * fix(layout): restore growable app shell so injected content above #app doesn't clip it (apache#45056) Co-authored-by: Claude Sonnet 5 <noreply@anthropic.com> * feat(pivot-table): collapse row groups by default (apache#45030) * fix(versioning): refuse a chart restore whose datasource no longer exists (apache#44925) * fix(semantic): hide and ignore series limits that have no series columns (apache#44909) Co-authored-by: Mike Bridge <michael.bridge@ext.preset.io> * fix(async): show the real error for a failed async chart query (apache#45054) Co-authored-by: Mike Bridge <michael.bridge@ext.preset.io> Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com> * feat(semantic-layer): show provider queries from chart results (apache#44206) Co-authored-by: Mike Bridge <michael.bridge@ext.preset.io> * perf(security): batch dashboard fallback datasource resolution (apache#44993) Co-authored-by: Mike Bridge <michael.bridge@ext.preset.io> * fix(mcp): refuse changes to externally managed dashboards in all dashboard tools (apache#45062) Co-authored-by: Mike Bridge <michael.bridge@ext.preset.io> Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com> * fix(versioning): preserve history across savepoint rollback (apache#45033) * fix(cache): evict rejected cached GET requests (apache#45055) * fix(semantic): return a client error for unsupported time grains (apache#45053) Co-authored-by: Mike Bridge <michael.bridge@ext.preset.io> Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com> * chore(deps-dev): bump vitest from 5.0.2 to 5.0.3 in /superset-websocket (apache#45072) Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * docs: add DouroECI logo and contributor to In the Wild (apache#45096) Co-authored-by: José Henrique <jose.teixeira@douroeci.com> * fix(charts): clear perms of charts whose datasource no longer exists (apache#44926) Co-authored-by: Mike Bridge <michael.bridge@ext.preset.io> Co-authored-by: Claude Opus 5.5 (1M context) <noreply@anthropic.com> * fix(date_parser): use pyparsing snake_case API to silence PyparsingDeprecationWarning (apache#45094) Co-authored-by: Claude Sonnet 5.5 <noreply@anthropic.com> * fix(mcp): don't page MCP_ERROR_HOOK for user-class errors in the last-resort catch (SC-125493) (apache#45093) Co-authored-by: Claude Sonnet 5.5 <noreply@anthropic.com> * feat: SIP-209 Improved Alerts & Reports (apache#44992) Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> * chore(ci): configure more grouped dep upgrades across npm subprojects (apache#44696) Signed-off-by: hainenber <dotronghai96@gmail.com> * fix(explore): skip Ctrl/Cmd+Enter query while controls have errors or chart is loading (apache#44963) * fix(explore): show 0 zoom, latitude and longitude in the map view extent tag (apache#44962) Co-authored-by: Joe Li <joe@preset.io> * fix(explore): honor a controlled ControlPopover open prop (apache#44959) * fix(native-filters): show a clear error instead of "Network error" when filter values fail to load (apache#44585) Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com> * fix(explore): dispatch datasource metadata fetch (apache#44958) * fix(semantic-layer): fail incomplete or unverified semantic query results (apache#44832) * fix(dashboard): refresh semantic metadata across edits (apache#45052) Co-authored-by: Mike Bridge <michael.bridge@ext.preset.io> * chore: Update CODEOWNERS to include @sadpandajoe (apache#45120) * feat(mcp): add typed Sunburst chart support (apache#43771) * fix(semantic-layer): require write access for configuration schema enrichment (apache#45107) Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com> * test(dashboard): wait for async submenu and debounced validation in flaky tests (apache#45106) Co-authored-by: Mike Bridge <michael.bridge@ext.preset.io> * fix(datasets): accept certification fields on dataset column and metric PUT (apache#45091) * chore(deps): bump chromaui/action from 18.10.1 to 18.10.2 (apache#45134) * fix(semantic-layer): honor provider preferred time dimension (apache#44997) Co-authored-by: Mike Bridge <michael.bridge@ext.preset.io> Co-authored-by: Enzo Martellucci <52219496+EnxDev@users.noreply.github.com> * feat(dashboard): add column allowlist to Group By native filter (apache#43736) Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com> * fix(soft-delete): preserve a shared datasource permission on purge (apache#45034) Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com> * perf(versioning): defer capture policy until versioned work (apache#44928) * fix(date-parser): reject malformed time ranges instead of scanning everything (apache#45098) * chore(deps-dev): bump wait-on from 9.4.0 to 9.5.1 in /superset-frontend (apache#45048) Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Joe Li <joe@preset.io> * chore(deps): bump mapbox-gl from 3.31.0 to 3.32.0 in /superset-frontend (apache#45049) Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Joe Li <joe@preset.io> * chore(deps-dev): bump vitest from 5.0.2 to 5.0.3 in /superset-embedded-sdk (apache#45074) Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * chore(deps): bump the swc group across 2 directories with 1 update (apache#45118) Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * chore(deps-dev): bump @types/node in /superset-embedded-sdk (apache#45121) Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * chore(deps): bump swagger-ui-react from 5.33.0 to 5.33.1 in /docs (apache#45122) Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * chore(deps): bump yargs from 18.1.0 to 18.2.0 in /superset-frontend (apache#45129) Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * chore(deps-dev): bump oxfmt in /docs (apache#45119) Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --------- Signed-off-by: dependabot[bot] <support@github.com> Signed-off-by: hainenber <dotronghai96@gmail.com> Signed-off-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> Signed-off-by: Mike Bridge <michael.bridge@preset.io> Co-authored-by: Amin Ghadersohi <amin.ghadersohi@gmail.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Sepuri Sai Krishna <saik20533@gmail.com> Co-authored-by: Đỗ Trọng Hải <41283691+hainenber@users.noreply.github.com> Co-authored-by: Mike Bridge <michael.bridge@preset.io> Co-authored-by: Joe Li <joe@preset.io> Co-authored-by: Claude Opus 5 <noreply@anthropic.com> Co-authored-by: Evan Rusackas <evan@rusackas.com> Co-authored-by: Evan Rusackas <evan@preset.io> Co-authored-by: Elizabeth Thompson <eschutho@gmail.com> Co-authored-by: Gaurav Dubey <gauravdubey0107@gmail.com> Co-authored-by: Gaston Laterza <glaterza@gmail.com> Co-authored-by: Shaitan <105581038+sha174n@users.noreply.github.com> Co-authored-by: chadek <32199566+chadek@users.noreply.github.com> Co-authored-by: 47th <161213233+flcrom@users.noreply.github.com> Co-authored-by: jayvenn21 <jvennamreddy@gmail.com> Co-authored-by: Vikash Kumar <163628932+Vikash-Kumar-23@users.noreply.github.com> Co-authored-by: codeant-ai-for-open-source[bot] <244253245+codeant-ai-for-open-source[bot]@users.noreply.github.com> Co-authored-by: SBIN2010 <Sbin2010@mail.ru> Co-authored-by: Cursor <cursoragent@cursor.com> Co-authored-by: Enzo Martellucci <enzomartellucci@gmail.com> Co-authored-by: mattmc3 <mattmc3@gmail.com> Co-authored-by: Viktor Högberg <119532259+vhogberg@users.noreply.github.com> Co-authored-by: Greg Neighbors <gkneighb@mac.com> Co-authored-by: Greg Neighbors <gregneighbors@Gregs-Air-2.lan> Co-authored-by: hadi mobarra <53408891+hadimobarra@users.noreply.github.com> Co-authored-by: Bexultan <bexultan.mustafin@ffins.kz> Co-authored-by: Archita-kale <kalearchita22@gmail.com> Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com> Co-authored-by: Mallikarjuna Reddy Nimmakayala <mallikarjunareddy.nimmakayala@gmail.com> Co-authored-by: Enzo Martellucci <52219496+EnxDev@users.noreply.github.com> Co-authored-by: Younes Beriane <paranoyouz@gmail.com> Co-authored-by: Alasdair Brown <sdairs@users.noreply.github.com> Co-authored-by: Krishna kumar singh <122664891+kksingh000@users.noreply.github.com> Co-authored-by: Luiz Otavio <45200344+luizotavio32@users.noreply.github.com> Co-authored-by: Sam Firke <sfirke@users.noreply.github.com> Co-authored-by: Superset Dev <dev@superset.apache.org> Co-authored-by: Dennis Khylkouski <161797777+dennisimoo@users.noreply.github.com> Co-authored-by: Piyush Raj <piyush.raj2024@nst.rishihood.edu.in> Co-authored-by: hahaok <35909137+csbbo@users.noreply.github.com> Co-authored-by: chenshaobo <chenshaobo@yjsafe.cn> Co-authored-by: Nguyen Dang Trung Tien <trungtien238lnd@gmail.com> Co-authored-by: Endi Monan <65144790+endimonan@users.noreply.github.com> Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> Co-authored-by: Jay Masiwal <masiwaljay.02@gmail.com> Co-authored-by: Jay Masiwal <jaymasiwal@users.noreply.github.com> Co-authored-by: Daniel Alyoshin <daniel.alyoshin@gmail.com> Co-authored-by: Amin Ghadersohi <5183956+aminghadersohi@users.noreply.github.com> Co-authored-by: Minwook Shin <163576506+minwookshin@users.noreply.github.com> Co-authored-by: Beto Dealmeida <roberto@dealmeida.net> Co-authored-by: Mike Bridge <michael.bridge@ext.preset.io> Co-authored-by: Rafael Benitez <rebenitez1802@gmail.com> Co-authored-by: Israel Demetrios Diacov <66575932+israelddiacov@users.noreply.github.com> Co-authored-by: Israel Demetrios Diacov <israelddiacov@users.noreply.github.com> Co-authored-by: Ferjani Nasraoui <ferjani.nasraoui@europace.de> Co-authored-by: drivaspreset <diego.rivas@preset.io> Co-authored-by: Abhinav <alpha9coder@gmail.com> Co-authored-by: Trakshan Mishra <43599000+trakshan-mishra@users.noreply.github.com> Co-authored-by: Amogh Atreya <amoghatreya100@gmail.com> Co-authored-by: Divyansh Yadav <anshmcs@gmail.com> Co-authored-by: Alexandru Soare <37236580+alexandrusoare@users.noreply.github.com> Co-authored-by: Michael S. Molina <70410625+michael-s-molina@users.noreply.github.com> Co-authored-by: rlei <242280117+rlei-odes@users.noreply.github.com> Co-authored-by: J0s3-H3nr1qu3 <hareboom@gmail.com> Co-authored-by: José Henrique <jose.teixeira@douroeci.com> Co-authored-by: Vitor Avila <96086495+Vitor-Avila@users.noreply.github.com> Co-authored-by: Mayuri <163738104+mayuriphad@users.noreply.github.com> Co-authored-by: Mehmet Salih Yavuz <salih.yavuz@proton.me>
SUMMARY
The cross-referenced dashboards test types into the Save modal before existing dashboards load. That can select the create-new option and leave behind an empty duplicate that cleanup does not track. The mobile chart-loading test then fails when that duplicate is the first dashboard card.
Type a strict title prefix in the shared SaveChartModal.selectExistingDashboard helper and select only an exact existing-title match before saving. Assert that the PUT includes the intended dashboard id (the exactly-one-dashboard count checks came from #44829). Use the World Bank's Data sample dashboard for mobile interaction tests instead of relying on list order, retry transient navigation failures, and require HTTP 200 with a missing-fixture message.
BEFORE/AFTER SCREENSHOTS OR ANIMATED GIF
Not applicable; test-only changes.
TESTING INSTRUCTIONS
With the example dashboards loaded and
MOBILE_CONSUMPTION_MODEenabled, run:Confirm the chart is added to the existing dashboards without creating duplicates, and mobile charts load even when an empty dashboard sorts first. Repeat with the dashboard-list response delayed.
Local validation, using CI's server setup (gunicorn,
tests.integration_tests.superset_test_config, Postgres,load_examples) and CI's Playwright invocation (CI=true npx playwright test <path> --output=playwright-results):explore/cross-referenced-dashboards.spec.tsandexplore/explore-save.spec.tswith--retries=0 --repeat-each=4: 12 passed.mobile/withMOBILE_CONSUMPTION_MODEandINCLUDE_MOBILE=true: 14 passed, 2 skipped (the fixture has no native filters).ADDITIONAL INFORMATION
AsyncSelectduplicate option: Save chart modal can create a duplicate dashboard when the typed title matches an existing one #44873