You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@superset.apache.org by el...@apache.org on 2026/09/26 00:04:16 UTC

(superset) branch eschutho/sc-119327/group-by-dashboard-filter-allowlist updated (9170d5f5104 -> 7ed14656967)

This is an automated email from the ASF dual-hosted git repository.

eschutho pushed a change to branch eschutho/sc-119327/group-by-dashboard-filter-allowlist
in repository https://gitbox.apache.org/repos/asf/superset.git


 discard 9170d5f5104 chore(i18n): add Group By allowlist strings to translation catalogs [sc-119327]
 discard 83aa9266802 fix(dashboard): address Group By allowlist review feedback [sc-119327]
 discard a195dad33a6 feat(dashboard): move Group By allowlist into display config section [sc-119327]
 discard 6cb43cb5326 feat(dashboard): default Group By allowlist to all groupable columns [sc-119327]
 discard 1498fe11ac2 fix(dashboard): align Groupable columns control in Group By filter config [sc-119327]
 discard 426c805a3d9 feat(dashboard): add column allowlist to Group By native filter [sc-119327]
     add 9413294b2bd docs(pivot-table): document the "Show values as" percentage display option (#44127)
     add 48795f9a2d4 docs(explore): document show_download param for standalone chart embeds (#43906)
     add 7dd70eaf2d6 fix: tighten object-level and destination checks across four unrelated endpoints (#44036)
     add add97e5d190 fix(embedded): tighten guest-token scoping for annotations, result types, and channels (#43391)
     add ca7cdfcd0ff fix(pinot): require the SQLAlchemy 2 driver extra (#44287)
     add 0f229fda75f fix(security): exempt health blueprint from forced password changes (#44504)
     add 269b9f99fef fix(views): return 401 for NoAuthorizationError in handle_api_exception (SC-121647) (#44533)
     add 50bbcedf13b docs(mcp): document restore_chart and restore_dashboard tools (#44207)
     add ea1ffcf0adb fix: fixed inverseSelection (#40970)
     add 350dd0d60ec fix(security): delete deprecated permissions left over after upgrades (#44142)
     add 7a9fe06762b fix(mcp): stop data tool responses crashing on binary and NaT values (#44495)
     add 9612437a9c8 fix(extensions): preserve chat state across display modes (#44490)
     add 61fffbe0c08 chore(deps-dev): bump oxlint from 1.82.0 to 1.83.0 in /superset-frontend (#44525)
     add c14ac29f477 fix(mcp): complete Treemap round-trip and previews (#44152)
     add 3b4e5f5d0c6 chore(deps): bump markdown-to-jsx from 9.10.2 to 9.10.3 in /superset-frontend (#44570)
     add 7fe03a536b6 chore(deps-dev): bump @types/node from 26.5.1 to 26.6.1 in /superset-frontend (#44569)
     add 6403e16fe56 chore(deps-dev): bump vitest from 5.0.0 to 5.0.1 in /superset-embedded-sdk (#44568)
     add d1f395914f1 chore(deps-dev): bump @types/node from 26.5.1 to 26.6.1 in /superset-embedded-sdk (#44567)
     add 6c9138a6b7c chore(deps-dev): bump baseline-browser-mapping from 2.11.23 to 2.11.24 in /superset-frontend (#44566)
     add 4b180bddad7 chore(deps): bump baseline-browser-mapping from 2.11.23 to 2.11.24 in /docs (#44565)
     add 4290d94d6c9 chore(deps-dev): bump vitest from 5.0.0 to 5.0.1 in /superset-websocket (#44564)
     add 3e80a53e14f chore(deps-dev): bump @types/node from 26.5.1 to 26.6.1 in /superset-websocket (#44563)
     add f8f293d2666 chore(deps): bump benchmark-action/github-action-benchmark from 1.22.1 to 1.22.2 (#44520)
     add 689ab4a77af fix(translations): regenerate messages.pot after the connection-move reword (#44574)
     add 02dbfd2ab5b fix(dashboard): don't register an active tab for childless TABS components (#44345)
     add 838376dbc28 fix(mongodb): treat the Mongo database as the SQL Lab schema so Data Preview returns rows (#44141)
     add 6323b37f50a fix(dashboard): prevent and repair self-nested layout components (#44303)
     add 7c7b3adf745 fix(export): keep the acting user in streaming CSV exports (#44425)
     add c0c688d3e4b fix(mcp): return a specific error per failure class on tool calls (#44387)
     add a071d23b41f fix(dashboard): guest sessions, pluggable storage, and streamed downloads for the Excel export (#43805)
     add d7a918b814c fix(ci): make check_pot_drift extract from an isolated git snapshot (#44578)
     add 775f7c5a1fd fix(db2): Use DATE_TRUNC to improve timegrain expressions (#43236)
     add 298aa2f0ba4 fix(dataset): bump changed_on on column refresh so chart cache invalidates (#43921)
     add 082961ba168 fix(chart): require edit rights for query-context-only updates (#44494)
     add 3b355b6a854 fix(chart): allow semantic view datasource when saving charts (#44169)
     add 390bf299ff9 fix(i18n): stop f-strings in gettext leaking a bogus msgid on Python 3.12 (#44584)
     add 8141d666d6d fix(dashboard): show loading spinner for charts outside an in-flight auto-refresh batch (#44272)
     add d4370cd46eb chore(deps): bump the rjsf group in /superset-frontend with 3 updates (#44593)
     add 0ad50dc77e7 chore(deps-dev): bump jsdom from 30.0.1 to 30.1.0 in /superset-frontend (#44596)
     add b4cc82b7662 chore(deps-dev): bump jsdom from 30.0.1 to 30.1.0 in /superset-embedded-sdk (#44592)
     add 687dcbc63eb chore(deps): bump swagger-ui-react from 5.32.15 to 5.33.0 in /docs (#44594)
     add ad7fcac11f9 fix(export): stamp ZIP entries with the export time (#44391)
     add 92a3b7d7e33 chore(deps): bump google-auth-library from 11.0.2 to 11.1.0 in /superset-frontend (#44599)
     add 45d76f6abaf chore(deps): bump react-draggable from 4.7.1 to 4.7.2 in /superset-frontend (#44597)
     add 2ac6e2468d5 chore(deps-dev): bump webpack-bundle-analyzer from 5.3.3 to 5.4.0 in /superset-frontend (#44598)
     add 613033b294b chore(build): replace external file-related deps with native Node modules (#42939)
     add 25cb6fc02d2 chore(deps): bump the ag-grid group in /superset-frontend with 2 updates (#44595)
     add 732248e4755 fix(logging): record dashboard_id and slice_id for REST mutation endpoints (#44553)
     add 9ad6917600d chore(cypress): remove dead dashboard drill-to-detail Cypress suite (#44537)
     add f5d663c480d fix(versioning): narrow nullable uuid/description reads flagged by mypy in versioning tests (#44424)
     add e357014559b fix(dashboard): initialize label colors before mounting charts (#44557)
     add e04d38a85f2 fix(mypy): resolve the dataset-scope and datasource-perm errors from the full-repo lint (#44610)
     add 1c7d1f049bc fix(utils): return None from cast_to_num for non-decimal digit strings (#44615)
     add defcd639107 fix(mongodb): route dataset FROM clauses through quote_table so chart queries return rows (#44583)
     add f5487f04a36 fix(db_engine_specs): raise SupersetGenericDBErrorException instead of bare-reraising JSONDecodeError (#44616)
     add 855ca2228cb fix(query_context): raise 422 not 500 on malformed Jinja in Query datasource access check (#44011)
     add 7b716b1838c fix(versioning): clean up history actions and refresh after saves (#44613)
     add 96d31ee3e35 docs(mcp): document deleted_state trash listing for list_charts/list_dashboards (#44128)
     add 599026a0e5a feat(standalone): granular Explore standalone modes and iframe-safe dashboard fullscreen (#44165)
     add 3bd6e103c14 fix(security): apply global guest RLS rules inside adhoc sub-queries (#44645)
     add 1e08d61204f fix(mcp): preserve deduplicated chart tool input schemas (#44575)
     add 02cb1f1a28a fix(table): resolve auto-detected currency on time comparison columns (#44649)
     add 83731ce7b3a test(reports): freeze the clock in the stale retry boundary test (#44651)
     add a9342fa02ab chore(deps-dev): bump oxlint-tsgolint from 7.0.2001 to 7.0.2002 in /superset-websocket (#44634)
     add d65e9fba9c4 chore(deps-dev): bump oxlint-tsgolint from 7.0.2001 to 7.0.2002 in /docs (#44635)
     add d1f903c66ff chore(deps): bump github/codeql-action/analyze from 4.38.0 to 4.38.1 (#44636)
     add a44ab4d9281 chore(deps-dev): bump baseline-browser-mapping from 2.11.24 to 2.11.25 in /superset-frontend (#44641)
     add 5085570fb48 chore(deps): bump apache/infrastructure-actions/allowlist-check from 1.0.3 to 1.0.4 (#44637)
     add 5be35992c56 chore(deps): bump github/codeql-action/upload-sarif from 4.38.0 to 4.38.1 (#44640)
     add 0034601c062 chore(deps): bump github/codeql-action/init from 4.38.0 to 4.38.1 (#44639)
     add 5e8bbc0eb4a chore(deps): bump baseline-browser-mapping from 2.11.24 to 2.11.25 in /docs (#44638)
     add 241d1210152 chore(deps): bump image-size from 2.0.2 to 2.0.4 in /docs in the security group across 1 directory (#44619)
     add be0631858c9 chore(deps): bump mapbox-gl from 3.30.0 to 3.31.0 in /superset-frontend (#44643)
     add 4bce27f12f4 fix(dashboard): shrink row height on chart resize and unblock resize handles above columns (#44359)
     add 5aec4342bb5 fix(database): catch JSONDecodeError in get_oauth2_config (#44658)
     add 10ca640e97e fix(import): downgrade expected validation-failure logs from error to warning (#44655)
     add 181422fc604 fix(mcp): return safe argument validation details (#44591)
     add 2796aea2bdd feat(dashboard): add column allowlist to Group By native filter [sc-119327]
     add be4fdcc1a9e fix(dashboard): align Groupable columns control in Group By filter config [sc-119327]
     add 4ce88774422 feat(dashboard): default Group By allowlist to all groupable columns [sc-119327]
     add 92975db1061 feat(dashboard): move Group By allowlist into display config section [sc-119327]
     add a7566112f58 fix(dashboard): address Group By allowlist review feedback [sc-119327]
     add 7ed14656967 chore(i18n): add Group By allowlist strings to translation catalogs [sc-119327]

This update added new revisions after undoing existing revisions.
That is to say, some revisions that were in the old version of the
branch are not in the new version.  This situation occurs
when a user --force pushes a change and generates a repository
containing something like this:

 * -- * -- B -- O -- O -- O   (9170d5f5104)
            \
             N -- N -- N   refs/heads/eschutho/sc-119327/group-by-dashboard-filter-allowlist (7ed14656967)

You should already have received notification emails for all of the O
revisions, and so the following emails describe only the N revisions
from the common base, B.

Any revisions marked "omit" are not gone; other references still
refer to them.  Any revisions marked "discard" are gone forever.

No new revisions were added by this update.

Summary of changes:
 .github/workflows/asf-allowlist-check.yml          |    2 +-
 .github/workflows/codeql-analysis.yml              |    4 +-
 .github/workflows/docker.yml                       |    2 +-
 .github/workflows/frontend-bundle-size-nightly.yml |    2 +-
 .github/workflows/superset-frontend.yml            |    2 +-
 UPDATING.md                                        |  101 +-
 .../configuration/configuring-superset.mdx         |    7 +
 docs/admin_docs/configuration/mcp-server.mdx       |  117 +-
 docs/developer_docs/contributing/howtos.md         |    2 +-
 .../extensions/extension-points/chat.md            |    4 +
 docs/developer_docs/extensions/mcp.md              |   17 +
 docs/docs/using-superset/embedding.mdx             |   21 +
 docs/docs/using-superset/exploring-data.mdx        |   14 +
 .../using-superset/exporting-dashboard-data.mdx    |  116 +-
 .../docs/using-superset/using-ai-with-superset.mdx |    2 +
 docs/docs/using-superset/version-history.mdx       |    7 +
 docs/package.json                                  |    6 +-
 docs/src/data/databases.json                       |    1 +
 docs/static/resources/openapi.json                 |   78 +-
 docs/yarn.lock                                     |  772 ++++++-----
 pyproject.toml                                     |   30 +-
 scripts/translations/check_pot_drift.py            |   77 +-
 superset-embedded-sdk/package-lock.json            |  288 ++--
 superset-embedded-sdk/package.json                 |    6 +-
 .../cypress/e2e/dashboard/drilltodetail.test.ts    |  614 ---------
 .../e2e/dashboard/shared_dashboard_functions.ts    |  201 ---
 .../cypress-base/cypress/e2e/dashboard/utils.ts    |  559 --------
 .../cypress-base/cypress/e2e/explore/chart.test.js |    2 +-
 .../cypress-base/cypress/e2e/explore/utils.ts      |    4 +-
 .../cypress-base/cypress/support/directories.ts    |  678 ----------
 .../cypress-base/cypress/utils/urls.ts             |    2 -
 superset-frontend/package-lock.json                |  418 +++---
 superset-frontend/package.json                     |   31 +-
 .../packages/generator-superset/package.json       |    1 -
 .../generator-superset/test/plugin-chart.test.ts   |    6 +-
 .../packages/superset-ui-core/package.json         |    8 +-
 .../superset-ui-core/src/currency-format/utils.ts  |   22 +
 .../test/currency-format/utils.test.ts             |   33 +
 .../dashboard/dashboard-drill-to-detail.spec.ts    |    3 -
 .../src/transformProps.ts                          |   44 +-
 .../test/transformProps.test.ts                    |   45 +
 .../src/components/Echart.test.tsx                 |    3 +-
 .../plugin-chart-echarts/src/components/Echart.tsx |    5 +-
 .../plugin-chart-point-cluster-map/package.json    |    2 +-
 .../plugin-chart-table/src/transformProps.ts       |   44 +-
 .../plugin-chart-table/test/TableChart.test.tsx    |   32 +
 superset-frontend/scripts/build.js                 |   21 +-
 superset-frontend/scripts/copyAssets.js            |   56 -
 superset-frontend/src/core/chat/ChatHost.tsx       |   20 +-
 .../actions/chartCustomizationActions.test.ts      |   20 +-
 .../dashboard/actions/chartCustomizationActions.ts |    4 +-
 .../src/dashboard/actions/dashboardInfo.ts         |    6 +
 .../src/dashboard/actions/hydrate.test.ts          |   85 +-
 superset-frontend/src/dashboard/actions/hydrate.ts |   28 +-
 .../DashboardBuilder/DashboardContainer.test.tsx   |  145 ++-
 .../DashboardBuilder/DashboardContainer.tsx        |   12 +-
 .../dashboard/components/Header/Header.test.tsx    |   41 +-
 .../Header/useHeaderActionsDropdownMenu.tsx        |   10 +-
 .../Header/useHeaderAutoRefresh.test.tsx           |   58 +-
 .../components/Header/useHeaderAutoRefresh.ts      |    2 +-
 .../PropertiesModal/PropertiesModal.test.tsx       |    6 +
 .../dashboard/components/PropertiesModal/index.tsx |    6 +-
 .../components/gridComponents/Chart/Chart.test.tsx |   59 +
 .../components/gridComponents/Chart/Chart.tsx      |    4 +-
 .../components/gridComponents/Row/Row.test.tsx     |   43 +-
 .../components/gridComponents/Row/Row.tsx          |  124 +-
 .../components/gridComponents/Tabs/Tabs.test.tsx   |   95 ++
 .../components/gridComponents/Tabs/Tabs.tsx        |   22 +-
 .../gridComponents/TabsRenderer/TabsRenderer.tsx   |    2 +-
 .../DownloadMenuItems/DownloadMenuItems.test.tsx   |  616 ++++++++-
 .../components/menu/DownloadMenuItems/index.tsx    |  210 ++-
 .../src/dashboard/components/menu/HoverMenu.tsx    |    4 +-
 .../components/resizable/ResizableContainer.tsx    |    3 +-
 superset-frontend/src/dashboard/constants.ts       |    6 +
 .../dashboard/contexts/AutoRefreshContext.test.tsx |   69 +
 .../src/dashboard/contexts/AutoRefreshContext.tsx  |   31 +-
 .../src/dashboard/reducers/dashboardInfo.ts        |   10 +
 .../src/dashboard/reducers/dashboardLayout.test.ts |   62 +
 .../src/dashboard/reducers/dashboardLayout.ts      |   26 +
 .../src/dashboard/reducers/dashboardState.test.ts  |   23 +
 .../src/dashboard/reducers/dashboardState.ts       |    2 +
 .../src/dashboard/util/getDropPosition.test.ts     |   83 ++
 .../src/dashboard/util/getDropPosition.ts          |   13 +
 .../util/removeUnreachableComponents.test.ts       |  283 ++++
 .../dashboard/util/removeUnreachableComponents.ts  |  225 ++++
 .../util/updateComponentParentsList.test.ts        |   17 +
 .../dashboard/util/updateComponentParentsList.ts   |    7 +-
 .../ExploreChartPanel/ExploreChartPanel.test.tsx   |   11 +-
 .../explore/components/ExploreChartPanel/index.tsx |   17 +-
 .../ExploreViewContainer.test.tsx                  |   77 +-
 .../components/ExploreViewContainer/index.tsx      |   28 +-
 .../explore/components/PropertiesModal/index.tsx   |    4 +
 superset-frontend/src/explore/constants.ts         |    6 +
 .../src/explore/exploreUtils/exploreUtils.test.tsx |   25 +
 .../src/explore/exploreUtils/index.ts              |    8 +-
 .../src/explore/reducers/exploreReducer.ts         |    2 +-
 .../src/explore/reducers/saveModalReducer.ts       |   15 +-
 superset-frontend/src/explore/types.ts             |    5 +-
 .../src/features/versionHistory/ActionRow.tsx      |  110 +-
 .../DashboardVersionHistory.test.tsx               |   89 +-
 .../versionHistory/DashboardVersionHistory.tsx     |   46 +-
 .../versionHistory/ExploreVersionHistory.test.tsx  |  344 ++++-
 .../versionHistory/ExploreVersionHistory.tsx       |   53 +-
 .../features/versionHistory/SaveGroupItem.test.tsx |   92 +-
 .../src/features/versionHistory/SaveGroupItem.tsx  |    5 -
 .../versionHistory/VersionHistoryPanel.test.tsx    |    3 +-
 .../components/Select/SelectFilterPlugin.tsx       |   22 +-
 superset-frontend/src/utils/urlUtils.test.ts       |   23 +
 superset-frontend/src/views/App.test.tsx           |  125 ++
 superset-frontend/src/views/App.tsx                |   28 +-
 superset-websocket/package-lock.json               |  260 ++--
 superset-websocket/package.json                    |    6 +-
 superset/charts/api.py                             |   18 +-
 superset/cli/importexport.py                       |    8 +-
 superset/commands/chart/update.py                  |   11 +-
 superset/commands/dashboard/update.py              |    7 +-
 superset/commands/database/exceptions.py           |    9 +-
 superset/commands/database/update.py               |   20 +-
 superset/commands/database/utils.py                |   47 +
 superset/commands/distributed_lock/acquire.py      |    9 +-
 superset/commands/importers/v1/__init__.py         |    6 +-
 superset/commands/importers/v1/utils.py            |    6 +-
 superset/commands/semantic_layer/update.py         |   55 +-
 superset/commands/streaming_export/base.py         |   41 +-
 superset/common/query_context_processor.py         |   25 +-
 superset/config.py                                 |   68 +-
 superset/connectors/sqla/models.py                 |   67 +-
 superset/daos/dashboard.py                         |    5 +
 superset/dashboards/api.py                         |  279 +++-
 superset/dashboards/excel_export/download_link.py  |  160 +++
 superset/dashboards/excel_export/email.py          |   29 +-
 superset/dashboards/layout.py                      |  269 ++++
 superset/databases/api.py                          |    6 +-
 superset/datasets/api.py                           |   11 +-
 superset/db_engine_specs/base.py                   |   97 +-
 superset/db_engine_specs/db2.py                    |   27 +-
 superset/db_engine_specs/gsheets.py                |    1 +
 superset/db_engine_specs/ibmi.py                   |   21 +
 superset/db_engine_specs/mongodb.py                |   72 +-
 superset/db_engine_specs/pinot.py                  |    4 +
 superset/db_engine_specs/snowflake.py              |    1 +
 superset/embedded/view.py                          |    8 +-
 superset/importexport/api.py                       |    9 +-
 superset/key_value/types.py                        |    1 +
 superset/mcp_service/SECURITY.md                   |    2 +-
 superset/mcp_service/chart/chart_helpers.py        |   35 +
 superset/mcp_service/chart/chart_utils.py          |  124 ++
 superset/mcp_service/chart/compile.py              |   50 +-
 superset/mcp_service/chart/plugins/treemap.py      |   10 +-
 superset/mcp_service/chart/preview_utils.py        |   14 +-
 superset/mcp_service/chart/query_result.py         |  113 +-
 superset/mcp_service/chart/schemas.py              |  398 +++---
 superset/mcp_service/chart/tool/get_chart_data.py  |   40 +-
 .../mcp_service/chart/tool/get_chart_preview.py    |   30 +-
 .../chart/tool/get_chart_type_schema.py            |   21 +-
 superset/mcp_service/chart/tool/update_chart.py    |   30 +-
 .../mcp_service/chart/tool/update_chart_preview.py |   51 +-
 superset/mcp_service/chart/treemap_preview.py      |  297 +++++
 superset/mcp_service/constants.py                  |   28 +
 superset/mcp_service/dashboard/schemas.py          |   21 +-
 .../dashboard/tool/generate_dashboard.py           |    3 +-
 superset/mcp_service/dataset/schemas.py            |   13 +-
 superset/mcp_service/dataset_scope.py              |    6 +-
 .../explore/tool/generate_explore_link.py          |    3 +-
 superset/mcp_service/mcp_config.py                 |   21 +-
 superset/mcp_service/middleware.py                 |  311 ++++-
 superset/mcp_service/semantic_layer/schemas.py     |   11 +-
 superset/mcp_service/server.py                     |  131 +-
 superset/mcp_service/sql_lab/schemas.py            |   18 +-
 superset/mcp_service/sql_lab/tool/execute_sql.py   |   19 -
 superset/mcp_service/utils/response_utils.py       |    8 +-
 superset/mcp_service/utils/serialization.py        |  225 ++++
 superset/mcp_service/utils/validation.py           |  218 ++++
 superset/migrations/shared/security_converge.py    |   34 +
 ...4fb8bfc1_delete_deprecated_permissions_33272.py |  153 +++
 ...a4572f8a_rename_deprecated_permissions_33272.py |  193 +++
 ...e6_merge_deprecated_permissions_with_master.py} |   12 +-
 ...merge_deprecated_permissions_with_master_v2.py} |   12 +-
 ...merge_deprecated_permissions_with_master_v3.py} |   12 +-
 superset/models/core.py                            |    7 +-
 superset/models/dashboard.py                       |    3 +
 superset/models/helpers.py                         |    2 +
 superset/queries/saved_queries/api.py              |    7 +-
 superset/security/api.py                           |   13 +-
 superset/security/manager.py                       |  435 ++++++-
 superset/security/password_change.py               |   11 +-
 superset/tasks/export_dashboard_excel.py           |  272 +++-
 superset/themes/api.py                             |    7 +-
 superset/translations/ar/LC_MESSAGES/messages.po   |    9 +-
 superset/translations/ca/LC_MESSAGES/messages.po   |    9 +-
 superset/translations/cs/LC_MESSAGES/messages.po   |    9 +-
 superset/translations/de/LC_MESSAGES/messages.po   |    9 +-
 superset/translations/en/LC_MESSAGES/messages.po   |    9 +-
 superset/translations/es/LC_MESSAGES/messages.po   |    9 +-
 superset/translations/fa/LC_MESSAGES/messages.po   |    9 +-
 superset/translations/fi/LC_MESSAGES/messages.po   |    9 +-
 superset/translations/fr/LC_MESSAGES/messages.po   |    9 +-
 superset/translations/it/LC_MESSAGES/messages.po   |    9 +-
 superset/translations/ja/LC_MESSAGES/messages.po   |    9 +-
 superset/translations/ko/LC_MESSAGES/messages.po   |    9 +-
 superset/translations/lv/LC_MESSAGES/messages.po   |    9 +-
 superset/translations/messages.pot                 |   36 +-
 superset/translations/mi/LC_MESSAGES/messages.po   |    9 +-
 superset/translations/nl/LC_MESSAGES/messages.po   |    9 +-
 superset/translations/pl/LC_MESSAGES/messages.po   |    9 +-
 superset/translations/pt/LC_MESSAGES/messages.po   |    9 +-
 .../translations/pt_BR/LC_MESSAGES/messages.po     |    9 +-
 superset/translations/ro/LC_MESSAGES/messages.po   |    9 +-
 superset/translations/ru/LC_MESSAGES/messages.po   |    9 +-
 superset/translations/sk/LC_MESSAGES/messages.po   |    9 +-
 superset/translations/sl/LC_MESSAGES/messages.po   |    9 +-
 superset/translations/sr/LC_MESSAGES/messages.po   |    9 +-
 .../translations/sr_Latn/LC_MESSAGES/messages.po   |    9 +-
 superset/translations/ta/LC_MESSAGES/messages.po   |    9 +-
 superset/translations/th/LC_MESSAGES/messages.po   |    9 +-
 superset/translations/tr/LC_MESSAGES/messages.po   |    9 +-
 superset/translations/uk/LC_MESSAGES/messages.po   |    9 +-
 superset/translations/zh/LC_MESSAGES/messages.po   |    9 +-
 .../translations/zh_TW/LC_MESSAGES/messages.po     |    9 +-
 superset/utils/core.py                             |   29 +-
 superset/utils/export_storage.py                   |   76 ++
 superset/utils/gcs.py                              |  101 ++
 superset/utils/log.py                              |  101 +-
 superset/utils/network.py                          |  115 ++
 superset/utils/rls.py                              |   28 +-
 superset/utils/s3.py                               |  124 +-
 superset/utils/screenshots.py                      |    9 +-
 superset/utils/webdriver.py                        |    8 +-
 superset/views/error_handling.py                   |    6 +-
 superset/views/utils.py                            |   12 +
 tests/integration_tests/base_tests.py              |   14 +-
 tests/integration_tests/charts/api_tests.py        |  120 ++
 tests/integration_tests/charts/commands_tests.py   |  133 +-
 tests/integration_tests/dashboards/api_tests.py    |  462 ++++++-
 .../dashboards/soft_delete_tests.py                |    7 +
 tests/integration_tests/datasets/api_tests.py      |   15 +-
 tests/integration_tests/embedded/test_view.py      |   23 +
 tests/integration_tests/reports/commands_tests.py  |   65 +-
 tests/integration_tests/security/api_tests.py      |   28 +
 tests/integration_tests/security_tests.py          |    8 +
 .../versioning/activity_write_after_read_tests.py  |    5 +-
 .../versioning/conditional_token_lock_tests.py     |   16 +-
 .../versioning/creation_row_tests.py               |   35 +-
 .../versioning/restore_fails_closed_tests.py       |   23 +-
 .../charts/semantic_view_chart_filter_test.py      |    9 +-
 tests/unit_tests/charts/test_filters.py            |   96 ++
 tests/unit_tests/commands/chart/create_test.py     |   33 +-
 .../chart/streaming_export_command_test.py         |   61 +
 tests/unit_tests/commands/chart/update_test.py     |   66 +-
 tests/unit_tests/commands/dashboard/update_test.py |   46 +
 tests/unit_tests/commands/databases/utils_test.py  |   58 +
 .../commands/importers/v1/import_models_test.py    |   93 ++
 .../unit_tests/commands/importers/v1/utils_test.py |  100 +-
 .../commands/report/execution_claim_test.py        |    5 +-
 .../commands/semantic_layer/update_test.py         |   96 ++
 .../common/test_query_context_processor.py         |   63 +
 tests/unit_tests/connectors/sqla/models_test.py    |  302 +++++
 tests/unit_tests/dao/dashboard_test.py             |  139 ++
 tests/unit_tests/dao/test_query_stop_race.py       |   68 +-
 tests/unit_tests/dashboards/api_test.py            |  116 ++
 tests/unit_tests/dashboards/layout_test.py         |  325 +++++
 .../dashboards/test_excel_export_download_link.py  |   65 +
 tests/unit_tests/db_engine_specs/test_base.py      |  274 +++-
 .../unit_tests/db_engine_specs/test_databricks.py  |   28 +-
 .../db_engine_specs/test_databricks_multi_cloud.py |    4 +
 tests/unit_tests/db_engine_specs/test_db2.py       |   35 +-
 tests/unit_tests/db_engine_specs/test_gsheets.py   |   27 +-
 tests/unit_tests/db_engine_specs/test_ibmi.py      |   76 ++
 tests/unit_tests/db_engine_specs/test_mongodb.py   |  241 +++-
 tests/unit_tests/db_engine_specs/test_pinot.py     |   41 +-
 tests/unit_tests/db_engine_specs/test_snowflake.py |    7 +-
 tests/unit_tests/db_engine_specs/test_trino.py     |    7 +-
 .../distributed_lock/distributed_lock_tests.py     |   22 +
 .../mcp_service/chart/test_treemap_completeness.py | 1373 ++++++++++++++++++++
 .../mcp_service/chart/tool/test_get_chart_data.py  |  180 ++-
 .../chart/tool/test_get_chart_type_schema.py       |   26 +
 .../dashboard/tool/test_dashboard_generation.py    |   63 +
 .../mcp_service/dataset/tool/test_dataset_tools.py |    4 +-
 .../explore/tool/test_generate_explore_link.py     |   49 +
 .../mcp_service/sql_lab/tool/test_execute_sql.py   |  104 +-
 .../mcp_service/test_chart_tool_inventory.py       |  189 +++
 .../mcp_service/test_error_classification.py       |  678 ++++++++++
 tests/unit_tests/mcp_service/test_middleware.py    |    4 +-
 .../mcp_service/test_response_serialization.py     |  321 +++++
 .../unit_tests/mcp_service/test_tool_inventory.py  |  157 +++
 .../mcp_service/test_tool_search_transform.py      |  347 +----
 .../mcp_service/test_validation_contract.py        |  511 ++++++++
 .../mcp_service/utils/test_serialization.py        |  294 +++++
 .../migrations/shared/security_converge_test.py    |  218 ++++
 .../test_deprecated_permissions_33272.py           |  420 ++++++
 tests/unit_tests/models/core_test.py               |   21 +-
 tests/unit_tests/models/dashboard_test.py          |   41 +-
 .../models/test_virtual_dataset_format.py          |   28 +
 tests/unit_tests/security/guest_rls_test.py        |  153 ++-
 tests/unit_tests/security/manager_test.py          |  431 +++++-
 tests/unit_tests/security/test_password_change.py  |   68 +-
 tests/unit_tests/semantic_layers/models_test.py    |  225 ++++
 tests/unit_tests/sql_lab_test.py                   |    4 +-
 tests/unit_tests/subjects/test_raise_for_access.py |  122 ++
 .../tasks/test_export_dashboard_excel.py           |  681 +++++++++-
 tests/unit_tests/utils/create_zip_tests.py         |   84 ++
 tests/unit_tests/utils/gcs_tests.py                |  120 ++
 tests/unit_tests/utils/log_tests.py                |  150 ++-
 tests/unit_tests/utils/s3_tests.py                 |  102 +-
 tests/unit_tests/utils/screenshot_test.py          |   57 +
 tests/unit_tests/utils/test_core.py                |   19 +
 tests/unit_tests/utils/test_network.py             |   81 +-
 tests/unit_tests/views/test_error_handling.py      |   22 +
 tests/unit_tests/views/test_utils.py               |   69 +-
 309 files changed, 19975 insertions(+), 5032 deletions(-)
 delete mode 100644 superset-frontend/cypress-base/cypress/e2e/dashboard/drilltodetail.test.ts
 delete mode 100644 superset-frontend/cypress-base/cypress/e2e/dashboard/shared_dashboard_functions.ts
 delete mode 100644 superset-frontend/cypress-base/cypress/e2e/dashboard/utils.ts
 delete mode 100644 superset-frontend/cypress-base/cypress/support/directories.ts
 delete mode 100644 superset-frontend/scripts/copyAssets.js
 create mode 100644 superset-frontend/src/dashboard/util/removeUnreachableComponents.test.ts
 create mode 100644 superset-frontend/src/dashboard/util/removeUnreachableComponents.ts
 create mode 100644 superset-frontend/src/views/App.test.tsx
 create mode 100644 superset/dashboards/excel_export/download_link.py
 create mode 100644 superset/dashboards/layout.py
 create mode 100644 superset/mcp_service/chart/treemap_preview.py
 create mode 100644 superset/mcp_service/utils/serialization.py
 create mode 100644 superset/mcp_service/utils/validation.py
 create mode 100644 superset/migrations/versions/2026-09-10_00-00_1f5f4fb8bfc1_delete_deprecated_permissions_33272.py
 create mode 100644 superset/migrations/versions/2026-09-10_00-01_3ce9a4572f8a_rename_deprecated_permissions_33272.py
 copy superset/migrations/versions/{2016-09-19_17-22_b347b202819b_.py => 2026-09-16_00-01_2ce579e91ae6_merge_deprecated_permissions_with_master.py} (79%)
 copy superset/migrations/versions/{2016-09-19_17-22_b347b202819b_.py => 2026-09-17_00-00_53a7abc31422_merge_deprecated_permissions_with_master_v2.py} (76%)
 copy superset/migrations/versions/{2016-09-19_17-22_b347b202819b_.py => 2026-09-23_00-00_95d8a99c822e_merge_deprecated_permissions_with_master_v3.py} (76%)
 create mode 100644 superset/utils/export_storage.py
 create mode 100644 superset/utils/gcs.py
 create mode 100644 tests/unit_tests/commands/importers/v1/import_models_test.py
 create mode 100644 tests/unit_tests/dashboards/layout_test.py
 create mode 100644 tests/unit_tests/dashboards/test_excel_export_download_link.py
 create mode 100644 tests/unit_tests/db_engine_specs/test_ibmi.py
 create mode 100644 tests/unit_tests/mcp_service/chart/test_treemap_completeness.py
 create mode 100644 tests/unit_tests/mcp_service/test_chart_tool_inventory.py
 create mode 100644 tests/unit_tests/mcp_service/test_error_classification.py
 create mode 100644 tests/unit_tests/mcp_service/test_response_serialization.py
 create mode 100644 tests/unit_tests/mcp_service/test_tool_inventory.py
 create mode 100644 tests/unit_tests/mcp_service/test_validation_contract.py
 create mode 100644 tests/unit_tests/mcp_service/utils/test_serialization.py
 create mode 100644 tests/unit_tests/migrations/shared/security_converge_test.py
 create mode 100644 tests/unit_tests/migrations/test_deprecated_permissions_33272.py
 create mode 100644 tests/unit_tests/utils/create_zip_tests.py
 create mode 100644 tests/unit_tests/utils/gcs_tests.py