You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@superset.apache.org by en...@apache.org on 2026/08/28 09:02:54 UTC

(superset) branch enxdev/fix/explore-count-metric updated (90a5e0074b2 -> 7aa94b53cca)

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

EnxDev pushed a change to branch enxdev/fix/explore-count-metric
in repository https://gitbox.apache.org/repos/asf/superset.git


    from 90a5e0074b2 chore: adress comments
     add 9dd8c42f3d4 chore(deps): bump dompurify from 3.4.12 to 3.4.13 in /superset-frontend (#43511)
     add 7bad69f523c chore(deps): bump dayjs from 1.11.22 to 1.11.23 in /superset-frontend (#43510)
     add d2aeb29223f chore(deps-dev): bump baseline-browser-mapping from 2.11.14 to 2.11.15 in /superset-frontend (#43508)
     add cbfa94c4dd6 chore(deps): bump antd from 6.6.0 to 6.6.1 in /docs (#43506)
     add d480152735e chore(deps): bump the storybook group in /docs with 2 updates (#43505)
     add ef0ad01aa56 chore(deps-dev): bump the storybook group across 1 directory with 5 updates (#43507)
     add fd3849cef1b chore(deps): bump antd from 6.6.0 to 6.6.1 in /superset-frontend (#43509)
     add f9530f31abb fix(table): keep each metric's own aggregate in the summary row by default (#43421)
     add 02b3e43b66b fix(number-format): preserve custom smart formatter id (#43439)
     add 34ffa37aaa4 chore(ci): drop inert SQLALCHEMY_WARN_20 flag from unit-test CI (#43495)
     add 3585e8235a7 fix(i18n): review Traditional Chinese count labels (#43063)
     add fc4d7221ecb fix(explore): skip re-fetch when navigating away from /explore (#39506)
     add f903e02d910 chore(deps): restore permissive marshmallow lower bound (>=3.0, <5) (#43521)
     add 88d2c2954e5 feat(deletion-retention): persist purge block reason codes on the audit log (#43485)
     add b89da3e9fca docs(versioning): fix post-flip doc and comment drift (#43493)
     add 68386a53ee2 chore(database): remove dead extra validation exception classes (#42411)
     add 90dab7cf61b fix(mcp): accept common chart input variants (#43130)
     add 649d6f1b41f fix(mcp): defer unknown numeric types to compile (#43131)
     add 0dcb2ca53a4 feat(maps): Add Italy regions and autonomous provinces country map (#42309)
     add e6b9205821b fix(country-map): give Alborz its own ISO code instead of reusing Tehran's (#42429)
     add 61ab0cdb5dd fix(ocient): update GIS test fixtures for pyocient's relocated geo types (#43496)
     add 473c318335b chore(superset-core): add __init__.py to semantic_layers (#43528)
     add 62d74be0afe fix(metadb): apply SUPERSET_META_DB_LIMIT after join instead of per-table (#36304) (#42598)
     add 2dfe8a5bd98 fix(OAuth2): Support creating OAuth2 connections via SQLAlchemy URI (#43489)
     add b4f7114a091 fix(semantic-layer): warn that deleting a layer cascade-deletes its dependent views (#42845)
     add 1fd763bd29b fix(mcp): honor and validate chart filters (#43478)
     add 19eca6523fb chore(deps): bump uuid from 14.0.1 to 14.0.2 in /superset-frontend (#43545)
     add 6194c852f1d chore(deps-dev): bump oxfmt from 0.63.0 to 0.64.0 in /docs (#43544)
     add e97db01482b chore(deps-dev): bump oxfmt from 0.63.0 to 0.64.0 in /superset-frontend (#43542)
     add 622bc45c9ec chore(deps-dev): bump @swc/core from 1.16.0 to 1.16.1 in /superset-frontend (#43541)
     add 2bc96a47a45 chore(deps): bump swagger-ui-react from 5.32.13 to 5.32.14 in /docs (#43540)
     add 450e2edc2b0 chore(deps): bump @swc/core from 1.16.0 to 1.16.1 in /docs (#43539)
     add 5a4900abb1a chore(deps-dev): bump vitest from 4.1.10 to 4.1.11 in /superset-websocket (#43538)
     add 686245a905a chore(deps-dev): bump oxfmt from 0.63.0 to 0.64.0 in /superset-websocket (#43537)
     add e7ca8b8a571 fix(chart): render ECharts charts at full resolution in download-as-image (#43456)
     add 0597f36bb62 chore(deps-dev): bump oxlint from 1.78.0 to 1.79.0 in /superset-frontend (#43543)
     add 455e6603c10 feat(reports): gate retry functionality behind ALERT_REPORTS_RETRY flag (#43553)
     add 70c9203aa9c fix(sqllab): release DB connection before fetching query results from backend (#43371)
     add 434511cb376 fix(mcp): reject unsafe dashboard layout replacements (#43476)
     add 13927f27e2b fix(mcp): raise SDK floor (#43530)
     add b8308a44a30 fix(pivot-table): exclude rollup totals from conditional formatting scale (#43481)
     add a140e74f5f5 fix(excel): handle duplicate column labels in xlsx export (#43561)
     add 371e5e25e83 fix(trino): honor the verify arg for the user impersonation flow (#43534)
     add 6b0aa8714d1 chore(deps): raise Pillow/PyJWT floors to match resolved pins (#43519)
     add 1c66b71e232 feat(plugin-chart-echarts): allow decal patterns in custom ECharts options (#43427)
     add 0e172a6ff3c feat(waterfall): add show/hide toggles for X and Y axes (#42371)
     add b71293acde0 fix(sqllab): stop a database with no extra from breaking SET_DATABASES (#43216)
     add ca63bb532d1 fix(plugin-chart-table): preserve comparison arrow when a column-specific formatter entry is missing (#43494)
     add 7d355a254ea fix(Modal): stop the draggable modal from hijacking text selection (#43498)
     add 0ab64e305c0 chore(deps-dev): bump lerna from 10.0.0 to 10.0.1 in /superset-frontend (#43580)
     add 5ea7d05d985 chore(deps): bump immer from 11.1.17 to 11.1.18 in /superset-frontend (#43581)
     add d1b7a4fdb41 chore(deps): bump dompurify from 3.4.13 to 3.4.14 in /superset-frontend (#43579)
     add 5879994e683 fix(charts): resolve export filenames from the chart, not the form data (#43280)
     add fde0fbd315b fix(ci): unblock lint-frontend after the oxlint 1.79.0 bump (#43587)
     add 905a35d05f7 fix(mcp): resolve dashboard permalinks (#43482)
     add 76151beade2 fix(export): truncate exported filenames to prevent Windows path extraction errors (#42531) (#42541)
     add ff1d9f9e095 chore(deps): bump dawidd6/action-download-artifact from 21 to 24 (#43441)
     add bde1c483b06 chore(deps): group Dependabot security-update PRs per directory (#43604)
     add e8aea6b6dfe fix: remove redundant 'tooltip' tooltip in scoping modal (#43455)
     add c2266f860cb chore(deps-dev): update clickhouse-connect requirement from <2.0,>=1.7.1 to >=1.7.2,<2.0 (#43608)
     add 87c48cc473d feat(echarts): make bar chart label position user-configurable (#38695)
     add d013bc7a21f chore(deps): bump baseline-browser-mapping from 2.11.15 to 2.11.16 in /docs (#43613)
     add 926e0e6a920 fix(chart-data): validate select()'s exclude option instead of raising 500s (#42410)
     add 6d8cbbfe8d9 fix(api): stop export downloads inheriting the one-year Cache-Control (#43185)
     add a3072c0bf68 fix(deckgl): give handlebars tooltips an opaque background (#43195)
     add 22027ec24ce fix(explore): require a value for adhoc filters before save (#43317)
     add 74dd6901021 docs(security): document EXTRA_EDITORS_RESOLVER (#43595)
     add 05830ebc77a docs: document PNG/PDF chart export options (#43593)
     add c1b6ff340b0 docs(mcp): document the update_dataset_metric tool (#43596)
     add 5c3c6362ae1 docs(cache): document NATIVE_FILTER_OPTIONS_CACHE_TIMEOUT (#43592)
     add 323741b0439 docs(alerts-reports): document report/alert content format options (#43594)
     add 29f4a05eb7a docs(security): document the RLS indicator badge on dataset list/Explore (#43591)
     add 88c4e689e3a fix(pivot-table): keep D3_FORMAT-styled numbers intact in pivoted Excel export (#42601)
     add 35fc36a97e5 chore(deps-dev): bump baseline-browser-mapping from 2.11.15 to 2.11.16 in /superset-frontend (#43621)
     add 83934c038ed chore(deps-dev): bump the storybook group in /superset-frontend with 5 updates (#43618)
     add 8f82d851cf9 chore(deps-dev): bump tiktoken from 0.13.0 to 0.14.0 (#43617)
     add e9e652d22da chore(deps-dev): bump trino from 0.338.0 to 0.339.0 (#43616)
     add 8c88c0d3ac7 chore(deps-dev): update teradatasql requirement from >=20.0.0.65 to >=20.0.0.66 (#43615)
     add ba5d5091b97 chore(deps): bump holidays from 0.102 to 0.103 (#43614)
     add b8acf4b207b chore(deps-dev): bump syntaqlite from 0.7.1 to 0.9.0 (#43612)
     add ebbe2e87142 chore(deps): bump the storybook group in /docs with 2 updates (#43610)
     add 6814a892303 chore(deps): bump gunicorn from 26.0.0 to 26.2.0 (#43609)
     add 94b59420b76 docs(embedding): document EMBEDDED_DISABLE_PERMALINK_ORIGIN_REWRITE (#43600)
     add bcc6af6c5fb fix(dao): don't mask transient OperationalError as a "not found" result (#43479)
     add a16bc0d94f8 fix(mcp): apply time grain overrides from extra_form_data (#43599)
     add 478f612f258 fix(mcp): add open-world tool annotations (#43529)
     add ea3206b076f fix(mcp): surface rejected filter columns in get_chart_data (#43598)
     add ecbd6578b0d fix(db_engine_specs): always mask OAuth2 client secret in encrypted extra (#43491)
     add e1c7a516745 fix(mcp): flag failed tool calls with isError (#43374)
     add 20be48c0858 fix(explore): catch TemplateError when validating access for permalinked query datasources (#43605)
     add 9f62aace7ef fix(examples): replace deprecated granularity_sqla with granularity (#43432)
     add 7b145a520c9 fix(tags): catch TemplateError when validating access for tagged SQL Lab queries (#43423)
     add 5ff44c5ed66 docs(cli): document import_directory --username option (#43602)
     add f9e43a37d8d docs(theming): document THEME_DEFAULT_MODE config setting (#43601)
     add 13e97ba9139 fix(sql-lab): fix transparent background in ag-grid native menus (#43368)
     add b733b57e9eb docs(mcp): document chart type plugin filtering config (#43597)
     add 8c5be889d9e fix(cockroachdb): replace abandoned cockroachdb package with sqlalchemy-cockroachdb (#43501)
     add fa59b44cfe8 chore(deps): bump mapbox-gl from 3.28.1 to 3.29.0 in /superset-frontend (#43619)
     add b7301ac88a6 fix: Dashboard export with charts from multiple databases (#37120)
     add e39bfb255bf fix(explore): prevent duplicate Date Range tooltips (#43425)
     add fd64efd72db fix(uploads): set catalog on datasets created by file upload (#43301)
     add 81b3e855223 fix(echarts): guard cross-filter when labelMap entry is missing (#42559)
     add 2ebd415b8ad chore(deps-dev): bump mcp from 1.29.1 to 2.0.0 (#43611)
     add 98ec6018df5 fix(embedded): honor "can view query" permission for guest users (#43151)
     add 3ddc3b1d569 fix(cache): fall back to default timeout when cache_timeout is None (#43149)
     add 12cd259c551 fix(dataset): preserve validation error messages (#43631)
     add a59b96c4f52 fix(explore): keep the row count label visible when the row limit is reached (#43296)
     add 7aa94b53cca Merge branch 'master' into enxdev/fix/explore-count-metric

No new revisions were added by this update.

Summary of changes:
 .github/dependabot.yml                             |   26 +
 .github/workflows/superset-docs-deploy.yml         |    4 +-
 .github/workflows/superset-docs-verify.yml         |    2 +-
 .github/workflows/superset-python-unittest.yml     |    6 -
 UPDATING.md                                        |   31 +-
 docs/admin_docs/configuration/alerts-reports.mdx   |   14 +
 docs/admin_docs/configuration/cache.mdx            |   21 +
 .../importing-exporting-datasources.mdx            |   20 +
 docs/admin_docs/configuration/mcp-server.mdx       |   35 +
 docs/admin_docs/configuration/theming.mdx          |   21 +
 docs/admin_docs/security/security.mdx              |   58 ++
 docs/data/countries.json                           |    1 +
 .../creating-your-first-dashboard.mdx              |   12 +
 docs/docs/using-superset/embedding.mdx             |   15 +
 .../docs/using-superset/using-ai-with-superset.mdx |   11 +-
 docs/docs/using-superset/version-history.mdx       |   24 +-
 docs/package.json                                  |   14 +-
 docs/static/feature-flags.json                     |   30 +-
 docs/yarn.lock                                     |  731 ++++++-------
 pyproject.toml                                     |   41 +-
 requirements/base.txt                              |    5 +-
 requirements/development.in                        |    2 +-
 requirements/development.txt                       |   20 +-
 .../src/superset_core/semantic_layers}/__init__.py |    2 +-
 superset-frontend/oxlint.json                      |    2 +-
 superset-frontend/package-lock.json                | 1097 ++++++++------------
 superset-frontend/package.json                     |   30 +-
 .../src/utils/getTotalsMetrics.test.ts             |   29 +-
 .../src/utils/getTotalsMetrics.ts                  |   42 +-
 .../packages/superset-ui-core/package.json         |    4 +-
 .../src/components/Modal/Modal.test.tsx            |  153 +++
 .../src/components/Modal/Modal.tsx                 |   25 +-
 .../src/components/Select/types.ts                 |    1 +
 .../ThemedAgGridReact/ThemedAgGridReact.test.tsx   |   28 +
 .../src/components/ThemedAgGridReact/index.tsx     |   11 +
 .../factories/createSmartNumberFormatter.ts        |    5 +-
 .../src/query/getClientErrorObject.ts              |   21 +-
 .../superset-ui-core/src/utils/featureFlags.ts     |    1 +
 .../factories/createSmartNumberFormatter.test.ts   |    6 +
 .../test/query/getClientErrorObject.test.ts        |   18 +
 .../plugin-chart-ag-grid-table/src/buildQuery.ts   |   11 +-
 .../src/controlPanel.tsx                           |   14 +-
 .../test/buildQuery.test.ts                        |   28 +-
 .../scripts/Country Map GeoJSON Generator.ipynb    |  Bin 11004185 -> 11010873 bytes
 .../plugin-chart-country-map/src/countries.ts      |    5 +
 .../src/countries/iran.geojson                     |  Bin 134537 -> 134537 bytes
 ...italy_regions_and_autonomous_provinces.geojson} |  Bin 107344 -> 108915 bytes
 .../test/countries.test.ts                         |   58 ++
 .../test/iran.geojson.test.ts                      |   69 ++
 .../src/MixedTimeseries/controlPanel.tsx           |   25 +
 .../src/MixedTimeseries/transformProps.ts          |    4 +
 .../src/MixedTimeseries/types.ts                   |   15 +
 .../src/Timeseries/constants.ts                    |    1 +
 .../src/Timeseries/transformProps.ts               |    2 +
 .../src/Timeseries/transformers.ts                 |   24 +-
 .../plugin-chart-echarts/src/Timeseries/types.ts   |   11 +
 .../src/Waterfall/controlPanel.tsx                 |   38 +
 .../src/Waterfall/transformProps.ts                |   10 +-
 .../plugin-chart-echarts/src/Waterfall/types.ts    |    4 +
 .../plugins/plugin-chart-echarts/src/controls.tsx  |   25 +
 .../src/utils/eChartOptionsSchema.ts               |   19 +
 .../src/utils/eventHandlers.ts                     |    3 +
 .../src/utils/safeEChartOptionsParser.test.ts      |   91 ++
 .../test/MixedTimeseries/controlPanel.test.ts      |  109 ++
 .../test/MixedTimeseries/transformProps.test.ts    |   55 +-
 .../test/Timeseries/Bar/controlPanel.test.ts       |   46 +
 .../test/Timeseries/transformProps.test.ts         |  141 +++
 .../test/Waterfall/transformProps.test.ts          |   53 +
 .../test/utils/eventHandlers.test.ts               |   43 +
 .../src/plugin/transformProps.ts                   |   19 +-
 .../test/plugin/transformProps.test.ts             |  149 +++
 .../plugin-chart-point-cluster-map/package.json    |    2 +-
 .../plugins/plugin-chart-table/src/TableChart.tsx  |   41 +-
 .../plugins/plugin-chart-table/src/buildQuery.ts   |    5 +-
 .../plugin-chart-table/src/controlPanel.tsx        |   14 +-
 .../plugin-chart-table/test/TableChart.test.tsx    |   29 +-
 .../plugin-chart-table/test/buildQuery.test.ts     |   27 +-
 .../src/components/Tooltip.test.tsx                |   64 ++
 .../preset-chart-deckgl/src/components/Tooltip.tsx |   26 +-
 .../SqlLab/components/SqlEditor/SqlEditor.test.tsx |   18 +-
 .../src/SqlLab/reducers/sqlLab.test.ts             |   47 +
 superset-frontend/src/SqlLab/reducers/sqlLab.ts    |   23 +-
 .../RowCountLabel/RowCountLabel.test.tsx           |   16 +
 .../src/components/RowCountLabel/index.tsx         |   16 +-
 .../CrossFilters/ScopingModal/ScopingTreePanel.tsx |   13 +-
 .../src/explore/components/Control.test.tsx        |   77 +-
 .../src/explore/components/Control.tsx             |   21 +-
 .../src/explore/components/ControlHeader.test.tsx  |  112 ++
 .../src/explore/components/ControlHeader.tsx       |   32 +-
 .../components/DataTableControls.tsx               |   15 +-
 .../DataTablesPane/components/SamplesPane.tsx      |    8 +
 .../components/SingleQueryResultPane.tsx           |    4 +
 .../DataTablesPane/components/useResultsPane.tsx   |   13 +
 .../DataTablesPane/test/DataTableControls.test.tsx |   94 ++
 .../DataTablesPane/test/useResultsPane.test.tsx    |   43 +-
 .../src/explore/components/DataTablesPane/types.ts |   10 +
 .../controls/DateFilterControl/DateFilterLabel.tsx |   20 +-
 .../tests/DateFilterLabel.test.tsx                 |   90 +-
 .../components/controls/DateFilterControl/types.ts |    6 +
 .../FilterControl/AdhocFilter/AdhocFilter.test.ts  |   32 +
 .../controls/FilterControl/AdhocFilter/index.ts    |    6 +-
 .../AdhocFilterEditPopover.test.tsx                |   23 +
 .../src/features/alerts/AlertReportModal.tsx       |   14 +-
 .../UploadDataModel/UploadDataModal.test.tsx       |   12 +-
 .../reports/ReportModal/ReportModal.test.tsx       |   21 +-
 .../src/features/reports/ReportModal/index.tsx     |   22 +-
 superset-frontend/src/pages/Chart/Chart.test.tsx   |   48 +-
 superset-frontend/src/pages/Chart/index.tsx        |   10 +
 .../DatabaseList.semanticLayerDelete.test.tsx      |  425 ++++++++
 superset-frontend/src/pages/DatabaseList/index.tsx |  173 ++-
 superset-frontend/src/pages/Home/Home.test.tsx     |    2 +-
 .../src/utils/downloadAsImage.test.ts              |  234 +++++
 superset-frontend/src/utils/downloadAsImage.tsx    |   90 +-
 .../src/utils/downloadAsPivotExcel.test.ts         |  116 +++
 .../src/utils/downloadAsPivotExcel.ts              |   52 +-
 superset-websocket/package-lock.json               |  626 +++++------
 superset-websocket/package.json                    |    4 +-
 superset/charts/api.py                             |   14 +-
 superset/charts/data/api.py                        |   65 +-
 superset/commands/chart/export.py                  |   15 +-
 superset/commands/dashboard/export.py              |   26 +-
 superset/commands/database/exceptions.py           |   36 -
 superset/commands/database/export.py               |    6 +-
 superset/commands/database/uploaders/base.py       |    2 +
 superset/commands/dataset/export.py                |   63 +-
 superset/commands/deletion_retention/audit.py      |  122 ++-
 .../commands/deletion_retention/force_purge.py     |    2 +-
 .../commands/deletion_retention/purge_cascade.py   |   36 +-
 .../commands/deletion_retention/purge_policy.py    |   94 +-
 superset/commands/explore/permalink/create.py      |    7 +-
 superset/commands/explore/permalink/get.py         |    7 +-
 superset/commands/export/models.py                 |   40 +-
 superset/commands/query/export.py                  |   42 +-
 superset/commands/report/execute.py                |   11 +-
 superset/commands/report/update.py                 |   37 +-
 superset/commands/sql_lab/results.py               |   12 +
 superset/commands/tag/create.py                    |   28 +-
 superset/commands/tag/export.py                    |    4 +-
 superset/commands/theme/export.py                  |    6 +-
 superset/commands/version_restore.py               |    4 +-
 superset/config.py                                 |   25 +-
 superset/daos/base.py                              |   17 +-
 superset/dashboards/api.py                         |   24 +-
 superset/databases/api.py                          |   17 +-
 superset/datasets/api.py                           |   14 +-
 superset/db_engine_specs/base.py                   |   22 +-
 superset/db_engine_specs/cockroachdb.py            |    2 +-
 superset/db_engine_specs/trino.py                  |    3 +
 superset/examples/birth_names.py                   |   14 +-
 .../usa_births_names/charts/Boy_Name_Cloud.yaml    |    2 +-
 .../examples/usa_births_names/charts/Boys.yaml     |    2 +-
 .../examples/usa_births_names/charts/Genders.yaml  |    2 +-
 .../usa_births_names/charts/Genders_by_State.yaml  |    2 +-
 .../usa_births_names/charts/Girl_Name_Cloud.yaml   |    2 +-
 .../examples/usa_births_names/charts/Girls.yaml    |    2 +-
 .../usa_births_names/charts/Participants.yaml      |    2 +-
 .../usa_births_names/charts/Pivot_Table_v2.yaml    |    2 +-
 .../charts/Top_10_Boy_Name_Share.yaml              |    2 +-
 .../charts/Top_10_Girl_Name_Share.yaml             |    2 +-
 .../examples/usa_births_names/charts/Trends.yaml   |    2 +-
 superset/examples/world_bank.py                    |    2 +-
 .../examples/world_health/charts/Box_plot.yaml     |    2 +-
 .../examples/world_health/charts/Growth_Rate.yaml  |    2 +-
 .../charts/Life_Expectancy_VS_Rural.yaml           |    2 +-
 .../charts/Most_Populated_Countries.yaml           |    2 +-
 superset/examples/world_health/charts/Rural.yaml   |    2 +-
 .../world_health/charts/Rural_Breakdown.yaml       |    2 +-
 superset/examples/world_health/charts/Treemap.yaml |    2 +-
 .../world_health/charts/World_s_Pop_Growth.yaml    |    2 +-
 .../world_health/charts/World_s_Population.yaml    |    2 +-
 superset/explore/permalink/api.py                  |    5 +
 superset/extensions/metadb.py                      |   86 +-
 superset/importexport/api.py                       |   12 +-
 superset/initialization/__init__.py                |   13 +-
 superset/mcp_service/CLAUDE.md                     |   13 +-
 .../tool/get_annotation_layer_info.py              |    1 +
 .../tool/get_layer_annotation_info.py              |    1 +
 .../tool/list_annotation_layers.py                 |    1 +
 .../tool/list_layer_annotations.py                 |    1 +
 superset/mcp_service/app.py                        |    4 +-
 superset/mcp_service/chart/chart_helpers.py        |   25 +-
 superset/mcp_service/chart/chart_utils.py          |    4 +
 superset/mcp_service/chart/plugins/histogram.py    |   28 +-
 superset/mcp_service/chart/schemas.py              |   38 +-
 superset/mcp_service/chart/tool/delete_chart.py    |    2 +
 superset/mcp_service/chart/tool/generate_chart.py  |    2 +
 superset/mcp_service/chart/tool/get_chart_data.py  |   89 +-
 superset/mcp_service/chart/tool/get_chart_info.py  |    1 +
 .../mcp_service/chart/tool/get_chart_preview.py    |    1 +
 superset/mcp_service/chart/tool/get_chart_sql.py   |  102 +-
 .../chart/tool/get_chart_type_schema.py            |    1 +
 superset/mcp_service/chart/tool/list_charts.py     |    1 +
 superset/mcp_service/chart/tool/restore_chart.py   |    2 +
 superset/mcp_service/chart/tool/update_chart.py    |    2 +
 .../mcp_service/chart/tool/update_chart_preview.py |    2 +
 .../chart/validation/dataset_validator.py          |   20 +-
 .../mcp_service/dashboard/layout_validation.py     |  312 ++++++
 superset/mcp_service/dashboard/permalink.py        |  184 ++++
 superset/mcp_service/dashboard/schemas.py          |   85 +-
 .../tool/add_chart_to_existing_dashboard.py        |    2 +
 .../mcp_service/dashboard/tool/delete_dashboard.py |    2 +
 .../dashboard/tool/duplicate_dashboard.py          |    2 +
 .../dashboard/tool/generate_dashboard.py           |    2 +
 .../dashboard/tool/get_dashboard_datasets.py       |    1 +
 .../dashboard/tool/get_dashboard_info.py           |  141 +--
 .../dashboard/tool/get_dashboard_layout.py         |   44 +-
 .../mcp_service/dashboard/tool/list_dashboards.py  |    1 +
 .../tool/manage_dashboard_certification.py         |    2 +
 .../dashboard/tool/manage_dashboard_owners.py      |    2 +
 .../dashboard/tool/manage_dashboard_roles.py       |    2 +
 .../dashboard/tool/manage_native_filters.py        |    2 +
 .../dashboard/tool/remove_chart_from_dashboard.py  |    7 +-
 .../dashboard/tool/restore_dashboard.py            |    2 +
 .../mcp_service/dashboard/tool/update_dashboard.py |   16 +-
 .../mcp_service/database/tool/get_database_info.py |    1 +
 .../mcp_service/database/tool/list_databases.py    |    1 +
 .../mcp_service/dataset/tool/create_dataset.py     |    2 +
 .../dataset/tool/create_virtual_dataset.py         |    2 +
 .../mcp_service/dataset/tool/get_dataset_info.py   |    1 +
 superset/mcp_service/dataset/tool/list_datasets.py |    1 +
 superset/mcp_service/dataset/tool/query_dataset.py |    1 +
 .../dataset/tool/update_dataset_metric.py          |    2 +
 .../explore/tool/generate_explore_link.py          |    2 +
 superset/mcp_service/middleware.py                 |    8 +
 superset/mcp_service/query/tool/get_query_info.py  |    1 +
 superset/mcp_service/query/tool/list_queries.py    |    1 +
 .../mcp_service/report/tool/get_report_info.py     |    1 +
 superset/mcp_service/report/tool/list_reports.py   |    1 +
 .../mcp_service/rls/tool/get_rls_filter_info.py    |    1 +
 superset/mcp_service/rls/tool/list_rls_filters.py  |    1 +
 superset/mcp_service/role/tool/get_role_info.py    |    1 +
 superset/mcp_service/role/tool/list_roles.py       |    1 +
 .../saved_query/tool/get_saved_query_info.py       |    1 +
 .../saved_query/tool/list_saved_queries.py         |    1 +
 .../tool/get_compatible_dimensions.py              |    1 +
 .../semantic_layer/tool/get_compatible_metrics.py  |    1 +
 .../mcp_service/semantic_layer/tool/get_table.py   |    1 +
 .../semantic_layer/tool/list_metrics.py            |    1 +
 superset/mcp_service/sql_lab/tool/execute_sql.py   |    2 +
 .../sql_lab/tool/open_sql_lab_with_context.py      |    1 +
 .../mcp_service/sql_lab/tool/save_sql_query.py     |    2 +
 superset/mcp_service/system/tool/find_users.py     |    1 +
 .../mcp_service/system/tool/generate_bug_report.py |    1 +
 .../mcp_service/system/tool/get_instance_info.py   |    1 +
 superset/mcp_service/system/tool/get_schema.py     |    1 +
 superset/mcp_service/system/tool/health_check.py   |    1 +
 superset/mcp_service/tag/tool/get_tag_info.py      |    1 +
 superset/mcp_service/tag/tool/list_tags.py         |    1 +
 superset/mcp_service/task/tool/get_task_info.py    |    1 +
 superset/mcp_service/task/tool/list_tasks.py       |    1 +
 superset/mcp_service/theme/tool/create_theme.py    |    2 +
 superset/mcp_service/theme/tool/get_theme_info.py  |    1 +
 superset/mcp_service/theme/tool/list_themes.py     |    1 +
 superset/mcp_service/user/tool/get_user_info.py    |    1 +
 superset/mcp_service/user/tool/list_users.py       |    1 +
 ...0_39097d124752_add_reason_to_purge_audit_log.py |   60 ++
 superset/models/purge_audit_log.py                 |    6 +
 superset/queries/saved_queries/api.py              |   14 +-
 superset/reports/schemas.py                        |   44 +-
 superset/sql/parse.py                              |  178 +++-
 superset/sql_lab.py                                |   10 +-
 superset/tasks/deletion_retention.py               |   29 +-
 superset/themes/api.py                             |   14 +-
 .../translations/zh_TW/LC_MESSAGES/messages.po     |   89 +-
 superset/utils/cache.py                            |   14 +-
 superset/utils/core.py                             |   35 +-
 superset/utils/database.py                         |   36 +
 superset/utils/excel.py                            |   41 +-
 superset/utils/file.py                             |   71 +-
 superset/utils/json.py                             |    8 +-
 superset/utils/pandas_postprocessing/select.py     |   29 +-
 superset/views/error_handling.py                   |   11 +-
 tests/integration_tests/charts/data/api_tests.py   |   47 +-
 .../integration_tests/dashboards/commands_tests.py |  104 ++
 tests/integration_tests/databases/api_tests.py     |   48 +
 .../databases/commands/upload_test.py              |   30 +
 .../deletion_retention/audit_tests.py              |  248 ++++-
 .../deletion_retention/force_purge_tests.py        |    1 +
 .../deletion_retention/purge_tests.py              |  118 ++-
 tests/integration_tests/reports/commands_tests.py  |    8 +
 tests/integration_tests/sql_lab/commands_tests.py  |  141 ++-
 tests/unit_tests/charts/dao/dao_tests.py           |   13 +-
 tests/unit_tests/charts/test_chart_data_api.py     |  324 ++++++
 .../deletion_retention/test_reason_codes.py        |  182 ++++
 .../commands/explore/permalink}/__init__.py        |    0
 .../commands/explore/permalink/test_create.py      |   45 +
 .../commands/explore/permalink/test_get.py         |   57 +
 tests/unit_tests/commands/report/update_test.py    |    6 +
 tests/unit_tests/dao/base_dao_test.py              |  125 ++-
 .../commands/importers/v1/import_command_test.py   |    9 +-
 tests/unit_tests/dashboards/dao_tests.py           |   11 +-
 tests/unit_tests/databases/schema_tests.py         |   38 +
 tests/unit_tests/db_engine_specs/test_base.py      |   64 +-
 tests/unit_tests/db_engine_specs/test_crdb.py      |   16 +
 tests/unit_tests/db_engine_specs/test_ocient.py    |   15 +-
 tests/unit_tests/db_engine_specs/test_trino.py     |  101 ++
 tests/unit_tests/extensions/test_sqlalchemy.py     |  405 ++++++++
 .../mcp_service/chart/test_chart_helpers.py        |   60 +-
 .../mcp_service/chart/test_chart_utils.py          |   36 +
 .../mcp_service/chart/tool/test_generate_chart.py  |   11 +
 .../mcp_service/chart/tool/test_get_chart_data.py  |  300 +++++-
 .../mcp_service/chart/tool/test_get_chart_sql.py   |  375 +++++++
 .../chart/validation/test_dataset_validator.py     |   74 ++
 .../dashboard/test_dashboard_schemas.py            |   50 +
 .../dashboard/test_layout_validation.py            |  401 +++++++
 .../mcp_service/dashboard/test_permalink.py        |  374 +++++++
 .../dashboard/tool/test_dashboard_tools.py         |  255 +++--
 .../dashboard/tool/test_get_dashboard_layout.py    |  137 +++
 .../dashboard/tool/test_update_dashboard.py        |   96 +-
 tests/unit_tests/mcp_service/test_mcp_e2e_smoke.py |   30 +
 .../mcp_service/test_mcp_tool_registration.py      |   42 +
 tests/unit_tests/mcp_service/test_middleware.py    |   65 ++
 .../pandas_postprocessing/test_select.py           |   29 +
 tests/unit_tests/queries/query_object_test.py      |   20 +-
 tests/unit_tests/reports/schemas_test.py           |   10 +
 tests/unit_tests/sql/parse_tests.py                |  166 +++
 tests/unit_tests/tags/commands/create_test.py      |   69 ++
 tests/unit_tests/utils/cache_test.py               |   93 ++
 tests/unit_tests/utils/excel_tests.py              |   63 ++
 tests/unit_tests/utils/json_tests.py               |   21 +
 tests/unit_tests/utils/send_export_zip_tests.py    |   69 ++
 tests/unit_tests/utils/test_file.py                |  188 +++-
 tests/unit_tests/views/test_error_handling.py      |   76 ++
 323 files changed, 12165 insertions(+), 2457 deletions(-)
 copy {superset/mcp_service/screenshot => superset-core/src/superset_core/semantic_layers}/__init__.py (93%)
 create mode 100644 superset-frontend/packages/superset-ui-core/src/components/Modal/Modal.test.tsx
 copy superset-frontend/plugins/plugin-chart-country-map/src/countries/{italy_regions.geojson => italy_regions_and_autonomous_provinces.geojson} (68%)
 create mode 100644 superset-frontend/plugins/plugin-chart-country-map/test/countries.test.ts
 create mode 100644 superset-frontend/plugins/plugin-chart-country-map/test/iran.geojson.test.ts
 create mode 100644 superset-frontend/plugins/plugin-chart-echarts/test/MixedTimeseries/controlPanel.test.ts
 create mode 100644 superset-frontend/plugins/preset-chart-deckgl/src/components/Tooltip.test.tsx
 create mode 100644 superset-frontend/src/explore/components/ControlHeader.test.tsx
 create mode 100644 superset-frontend/src/explore/components/DataTablesPane/test/DataTableControls.test.tsx
 create mode 100644 superset-frontend/src/pages/DatabaseList/DatabaseList.semanticLayerDelete.test.tsx
 create mode 100644 superset-frontend/src/utils/downloadAsPivotExcel.test.ts
 create mode 100644 superset/mcp_service/dashboard/layout_validation.py
 create mode 100644 superset/mcp_service/dashboard/permalink.py
 create mode 100644 superset/migrations/versions/2026-08-24_12-00_39097d124752_add_reason_to_purge_audit_log.py
 create mode 100644 tests/unit_tests/commands/deletion_retention/test_reason_codes.py
 copy {scripts => tests/unit_tests/commands/explore/permalink}/__init__.py (100%)
 create mode 100644 tests/unit_tests/commands/explore/permalink/test_create.py
 create mode 100644 tests/unit_tests/commands/explore/permalink/test_get.py
 create mode 100644 tests/unit_tests/mcp_service/chart/validation/test_dataset_validator.py
 create mode 100644 tests/unit_tests/mcp_service/dashboard/test_layout_validation.py
 create mode 100644 tests/unit_tests/mcp_service/dashboard/test_permalink.py
 create mode 100644 tests/unit_tests/utils/send_export_zip_tests.py