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/10/13 16:21:21 UTC

(superset) branch sc-120994-athena-new-form updated (4f731d12e8d -> d60365e428e)

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

eschutho pushed a change to branch sc-120994-athena-new-form
in repository https://gitbox.apache.org/repos/asf/superset.git


    from 4f731d12e8d Merge remote-tracking branch 'origin/master' into sc-120994-athena-new-form
     add cb8ff2885a6 fix(permalink): use a shared lock when re-reading a concurrently created permalink (#45102)
     add ab2c69f29cd fix(column-config): allow commas in D3 number formats (#45145)
     add e538ebfa2c9 feat(mcp): opt-in compact native tools/list and trimmed tool guidance (#45084)
     add 64b02eebed4 fix(mcp): add sort_by option to XYChartConfig (#42627) (#44464)
     add 1267bd1acee test(semantic-layer): pin layer list scoping to accessible layers (#45101)
     add 8aeb2850914 fix(mcp): keep isError through call_tool and test native tool surface parity (#45081)
     add d3c47f6212e chore(deps): bump slack-sdk from 3.44.1 to 3.45.0 (#45116)
     add 0edbccc71a8 chore(deps-dev): bump trino from 0.339.0 to 0.340.0 (#45117)
     add 5e6156a820c chore(deps-dev): bump gevent from 26.8.0 to 26.9.0 (#45115)
     add 461cf9e49af chore(deps): bump sqlalchemy-continuum from 1.7.0 to 1.8.0 (#45114)
     add 97ce269b962 chore(deps): bump cryptography from 50.0.1 to 50.0.2 (#45112)
     add 2918a7b94d1 feat(i18n): extract translator context comments from source (#44397)
     add 82223373a3a chore(deps-dev): update teradatasql requirement from >=20.0.0.68 to >=20.0.0.69 (#45162)
     add d48b8486851 chore(deps): bump msgpack from 1.2.2 to 1.2.3 (#45161)
     add 7e6aa124e1a chore(deps): bump pyjwt from 2.14.0 to 2.15.1 (#45159)
     add 8318398da46 chore(deps): bump the security group across 1 directory with 4 updates (#45143)
     add 5faa58e7d2b chore(deps-dev): bump pymssql from 2.4.1 to 2.4.2 (#45156)
     add b9e8188ad60 chore(deps): bump simplejson from 4.1.2 to 4.2.0 (#45158)
     add d7717743b1f test(utils): add unit test for scalar_to_sequence (#45144)
     add f9f2eb283d3 test(sql): pin Druid JSON_VALUE RETURNING parsing (#45131)
     add a55b236a5be fix(semantic-layer): fetch view metadata once per query (#45104)
     add 76b62d34fba fix(semantic-layer): preserve nullable integer precision in chart data (#45126)
     add 38ad1150ecf feat(retention): cap soft-delete purge and version-history prune per run (#45029)
     add 04db66b0f66 feat(semantic-layer): invalidate metadata caches on configuration save (#45100)
     add fd2740bec1e fix(charts): avoid loading semantic provider metadata before denying chart data access (#45060)
     add e229ea4a543 fix(mcp): resolve saved semantic-view chart sources by type (#45067)
     add af7978ae74d docs(mcp): document dashboard owner/role/certification governance tools (#43900)
     add bae6d10cebc chore(deps): bump react-resize-detector from 7.1.2 to 12.3.0 in /superset-frontend (#45124)
     add db7557a7a58 feat(mcp): add typed geographic chart generation (#44148)
     add 0e50b64263f fix(bigquery): filter __NULL__ and __UNPARTITIONED__ from max partition query (#44156)
     add aef1f70cdfd chore(deps): bump pyparsing from 3.3.2 to 3.3.3 (#45157)
     add 0ad650c507e chore(deps): bump mako from 1.4.1 to 1.4.3 (#45188)
     add 4dc7ba70ef3 chore(deps-dev): bump jsdom from 30.1.1 to 30.1.2 in /superset-embedded-sdk (#45194)
     add 1c116342642 chore(deps-dev): bump jsdom from 30.1.1 to 30.1.2 in /superset-frontend (#45201)
     add 713c41e0ba5 chore(deps-dev): bump stylelint from 17.15.0 to 17.16.0 in /superset-frontend (#45200)
     add 0c201b4dd2c chore(deps-dev): bump minimizer-webpack-plugin from 5.12.0 to 5.13.0 in /superset-frontend (#45196)
     add ea235f25b9e chore(deps-dev): bump google-cloud-bigquery from 3.45.2 to 3.46.1 (#45190)
     add 3579cbc6c68 chore(deps-dev): bump @storybook/test-runner from 0.24.5 to 0.26.0 in /superset-frontend in the storybook group (#45073)
     add 5e9e6beb4ac chore(deps): bump flask-compress from 1.24 to 1.25 (#45193)
     add e2dd50ab340 chore(deps-dev): bump grpcio from 1.83.1 to 1.84.0 (#45192)
     add 6d39864102a chore(deps): bump @googleapis/sheets from 18.0.1 to 18.1.0 in /superset-frontend (#45195)
     add bc98688d5ff docs: Improve README clarity and consistency (#38957)
     add 2c8665f9cbc fix(histogram): normalize before accumulating a cumulative histogram (#44652)
     add 726c1ef67c9 fix(impala): cancel pending SQL Lab operations through the live cursor (#44737)
     add 90dc7ac3289 fix(databricks): enable equality operators for boolean filters (#36765) (#44355)
     add c58db3b704d chore(deps): bump maplibre-gl from 6.11.2 to 6.12.0 in /superset-frontend (#45199)
     add 42bbfa49079 chore(deps-dev): update thrift requirement from <1.0.0,>=0.24.0 to >=0.25.0,<1.0.0 (#45191)
     add f4fe4e13c47 fix(mcp): support custom user models during dashboard and chart operations (#45036)
     add 88a14e9be56 docs(i18n): add a translation guide with shared principles (#45181)
     add a4cf0ff09e7 chore(ci): correct download-artifact version comment to v8.0.1 (#45212)
     add 209bdafc124 fix(tests): narrow nullable uuid before passing it to KeyValueDAO.get_entry (#45171)
     add 2747094d4c2 feat(mcp): add typed Bullet chart support (#43770)
     add 02304af9a99 fix(mypy): narrow nullable uuid/perm reads in chart restore version tests (#45080)
     add cd526f9e97d chore(deps-dev): bump fastmcp from 3.4.7 to 4.0.3 (#44200)
     add ea0687222a5 fix(dashboard): honour DASHBOARD_AUTO_REFRESH_INTERVALS in the refresh dropdown (#44982)
     add 11b6997a488 fix(dashboard): drop missing semantic-view controls on restore (#45130)
     add f923be702a1 fix(semantic-layer): report incompatible dashboard filters on semantic views instead of dropping them (#45105)
     add f774479c990 fix(mcp): allow chart filtering by dataset ID (#44950)
     add 60c66fe8d50 fix(explore): honor chart edit permissions for titles (#45146)
     add 59404f47cd3 feat(mcp): target semantic views in chart tools (#44393)
     add 945d8bbd632 fix(mcp): promote tools whose full names appear in a search query (#45149)
     add 63a7a6e4eca chore(deps): bump chrono-node from 2.10.1 to 2.10.2 in /superset-frontend (#45227)
     add dd1312b3c2b chore(deps-dev): bump the typescript-eslint group across 1 directory with 2 updates (#45224)
     add aa321aab31d chore(deps): bump chromaui/action from 18.10.2 to 18.11.0 (#45222)
     add a26c984279c chore(deps-dev): bump oxlint from 1.86.0 to 1.87.0 in /docs (#45226)
     add 962272b6f20 feat(semantic-layer): allow toggling SEMANTIC_LAYERS at runtime (#45061)
     add f154d23a954 fix(dashboard): reconcile position_json against membership on save (#44028)
     add b39e1e0db71 chore(ci): correct upload-artifact version comment to v7.0.1 (#45229)
     add 8f13b2b2e69 chore(ci): correct upload-artifact version comment in translations workflow (#45213)
     add 9c70fa40159 chore(deps-dev): bump oxfmt from 0.71.0 to 0.72.0 in /docs (#45225)
     add 1cedab01e9e chore(deps): bump geostyler-openlayers-parser from 5.7.1 to 5.8.0 in /superset-frontend (#45077)
     add 0f875cadbe0 fix(network): refine address classification (#45230)
     add 1578b8cbc11 fix(semantic-layer): restore value suggestions for semantic view filters (#45109)
     add 6d974e19c51 fix(mcp): keep the saved chart variant when update_chart omits it (#45221)
     add f18c034a689 fix(connection): let SupersetClient.postForm accept an absolute url (#45204)
     add 1caea41f425 docs: give bare relative links an explicit extension (#43170)
     add e7ca70c784e fix(datasource): apply target-table access check on same-database repoint (#44080)
     add 1b10345f3bf docs(semantic-layer): write down member identity, grain, NULL and ordering rules in the SDK (#45108)
     add 61a0fd28ec6 fix(semantic-layer): improve credential entry and connection feedback (#45173)
     add 7aadf35e7d7 feat(mcp): accept a callable for MCP_DATASET_ROLE_ALLOWLIST (#45231)
     add 139a06eee15 chore(ci): correct upload-artifact version comment to v7.0.1 (#45211)
     add 4da3ab9277b refactor(db_engine_specs): dedupe boolean-coercion logic for Databricks/Spark (#45202)
     add 952ff3b22f4 perf(filters): use useDeferredValue in SelectFilterPlugin (#44880)
     add 57bcddc11f8 Merge remote-tracking branch 'origin/master' into sc-120994-athena-new-form
     add d60365e428e fix(athena): preserve URI params on re-save and mask the secret in edit mode

No new revisions were added by this update.

Summary of changes:
 .github/dependabot.yml                             |    1 +
 .github/workflows/chromatic.yml                    |    2 +-
 .github/workflows/superset-e2e.yml                 |    4 +-
 .github/workflows/superset-extensions-cli.yml      |    2 +-
 .github/workflows/superset-frontend.yml            |   16 +-
 .../workflows/superset-python-integrationtest.yml  |    2 +-
 .../workflows/superset-python-unittest-report.yml  |    4 +-
 .github/workflows/superset-python-unittest.yml     |    4 +-
 .../workflows/superset-translations-comment.yml    |    2 +-
 .github/workflows/superset-translations.yml        |    2 +-
 .github/workflows/testcontainers.yml               |    2 +-
 README.md                                          |    9 +-
 UPDATING.md                                        |   99 +-
 docs/admin_docs/configuration/feature-flags.mdx    |   29 +
 docs/admin_docs/configuration/mcp-server.mdx       |  439 +-
 docs/developer_docs/contributing/howtos.md         |   89 +-
 .../contributing/translation-guide.md              |  104 +
 .../extensions/contribution-types.md               |    4 +-
 docs/developer_docs/extensions/mcp.md              |   91 +
 docs/developer_docs/extensions/overview.md         |   22 +-
 docs/developer_docs/semantic-layer-cache-clear.md  |  106 +
 docs/developer_docs/semantic-metadata-contract.md  |  187 -
 .../creating-your-first-dashboard.mdx              |   27 +
 docs/docs/using-superset/exploring-data.mdx        |    4 +
 docs/docs/using-superset/number-formatting.mdx     |    2 +-
 docs/docs/using-superset/recently-archived.mdx     |   49 +
 .../using-superset/semantic-layer-connections.mdx  |   47 +
 .../using-superset/semantic-member-selections.mdx  |   25 +-
 .../docs/using-superset/using-ai-with-superset.mdx |    5 +
 docs/docs/using-superset/version-history.mdx       |   53 +-
 docs/package.json                                  |    6 +-
 docs/sidebarTutorials.js                           |    1 +
 docs/static/resources/openapi.json                 |  835 ++-
 docs/yarn.lock                                     |  489 +-
 pyproject.toml                                     |   52 +-
 requirements/base.in                               |    4 +-
 requirements/base.txt                              |   18 +-
 requirements/development.txt                       |   40 +-
 scripts/translations/babel_update.sh               |    7 +
 scripts/translations/backfill_po.py                |   79 +-
 scripts/translations/check_pot_drift.py            |   81 +-
 .../src/superset_core/semantic_layers/layer.py     |   20 +-
 .../src/superset_core/semantic_layers/metadata.py  |  196 -
 .../src/superset_core/semantic_layers/types.py     |  143 +-
 .../src/superset_core/semantic_layers/view.py      |   49 +-
 .../tests/semantic_layers/test_view.py             |   11 +-
 superset-embedded-sdk/package-lock.json            |  151 +-
 superset-embedded-sdk/package.json                 |    2 +-
 superset-frontend/jest.config.js                   |    5 +-
 superset-frontend/package-lock.json                |  854 ++--
 superset-frontend/package.json                     |   26 +-
 .../packages/generator-superset/package.json       |    2 +-
 .../src/shared-controls/dndControls.tsx            |    1 +
 .../src/shared-controls/matrixifyControls.tsx      |    1 +
 .../src/shared-controls/sharedControls.tsx         |   21 +
 .../src/utils/D3Formatting.ts                      |    1 +
 .../packages/superset-ui-core/package.json         |    4 +-
 .../components/MetadataBar/MetadataBar.test.tsx    |   40 +-
 .../src/components/MetadataBar/MetadataBar.tsx     |    6 +-
 .../src/components/Table/VirtualTable.test.tsx     |   10 +-
 .../src/components/Table/VirtualTable.tsx          |    4 +-
 .../src/connection/SupersetClientClass.ts          |   31 +-
 .../superset-ui-core/src/query/buildQueryObject.ts |   10 +-
 .../superset-ui-core/src/query/processFilters.ts   |    3 +
 .../test/connection/SupersetClientClass.test.ts    |   27 +
 .../test/query/buildQueryObject.test.ts            |   76 +-
 .../plugin-chart-country-map/src/CountryMap.ts     |   30 +-
 .../plugin-chart-country-map/src/controlPanel.ts   |   23 +
 .../src/countries/uk.geojson                       |  Bin 477503 -> 477503 bytes
 .../src/normalizeRegions.ts                        |  129 +
 .../plugin-chart-country-map/src/regions.ts        |  383 ++
 .../plugin-chart-country-map/src/transformProps.ts |   53 +-
 .../test/CountryMap.test.tsx                       |  109 +
 .../test/controlPanel.test.ts                      |   25 +-
 .../test/geographicRendering.test.tsx              |  296 ++
 .../test/normalizeRegions.test.ts                  |  251 +
 .../test/transformProps.test.ts                    |  125 +
 .../test/Bullet/buildQuery.test.ts                 |   15 +
 .../test/Bullet/transformProps.test.ts             |  172 +-
 .../plugins/plugin-chart-handlebars/package.json   |    2 +-
 .../plugin-chart-point-cluster-map/package.json    |    2 +-
 .../plugins/plugin-chart-world-map/src/WorldMap.ts |   13 +-
 .../plugin-chart-world-map/src/controlPanel.ts     |    2 +
 .../plugin-chart-world-map/src/countries.ts        |   36 +-
 .../plugin-chart-world-map/src/transformData.ts    |   49 +-
 .../plugin-chart-world-map/src/transformProps.ts   |   20 +-
 .../plugin-chart-world-map/src/worldGeometry.ts    |  198 +
 .../plugin-chart-world-map/test/WorldMap.test.ts   |   78 +
 .../test/controlPanel.test.ts                      |   25 +-
 .../test/transformData.test.ts                     |  169 +
 .../test/transformProps.test.ts                    |   52 +
 .../plugins/preset-chart-deckgl/package.json       |    4 +-
 .../src/layers/Geojson/Geojson.test.tsx            |   22 +
 .../src/layers/Scatter/buildQuery.test.ts          |   24 +
 .../src/layers/Scatter/buildQuery.ts               |    7 +-
 .../src/layers/Scatter/controlPanel.test.ts}       |   41 +-
 .../src/layers/Scatter/controlPanel.ts             |    2 +
 .../src/layers/Scatter/transformProps.test.ts      |  324 +-
 .../src/layers/Scatter/transformProps.ts           |  102 +-
 .../preset-chart-deckgl/src/layers/spatialUtils.ts |    7 +-
 .../src/layers/utils/metricUtils.ts                |   17 +
 .../spec/helpers/geographicControlPanel.ts         |   75 +
 .../ExploreCtasResultsButton.test.tsx              |   11 +-
 .../src/components/Chart/Chart.test.tsx            |   26 +
 .../DetailsPanel/DetailsPanel.test.tsx             |   19 +
 .../components/FiltersBadge/DetailsPanel/index.tsx |   22 +
 .../components/FiltersBadge/FiltersBadge.test.tsx  |   40 +
 .../dashboard/components/FiltersBadge/index.tsx    |   20 +-
 .../RefreshFrequencySelect.test.tsx                |  261 +
 .../RefreshFrequency/RefreshFrequencySelect.tsx    |  147 +-
 .../dashboard/components/RefreshFrequency/index.ts |    3 +
 .../components/RefreshIntervalModal.test.tsx       |   43 +
 .../components/nativeFilters/selectors.test.ts     |   71 +
 .../components/nativeFilters/selectors.ts          |    8 +-
 .../ExploreChartHeader/ExploreChartHeader.test.tsx |  160 +
 .../components/ExploreChartHeader/index.tsx        |   37 +-
 .../src/explore/components/SaveModal.test.tsx      |   55 +
 .../src/explore/components/SaveModal.tsx           |   15 +-
 .../ColumnConfigConstants.test.tsx                 |   25 +-
 .../controls/ColumnConfigControl/constants.tsx     |    2 +
 .../DndAdhocFilterOption.tsx                       |    3 +
 .../DndFilterSelect.test.tsx                       |   76 +-
 .../DndColumnSelectControl/DndFilterSelect.tsx     |    6 +
 .../FilterControl/AdhocFilterControl/index.tsx     |   15 +-
 .../FilterControl/AdhocFilterEditPopover/index.tsx |    3 +
 ...AdhocFilterEditPopoverSimpleTabContent.test.tsx |  106 +
 .../index.tsx                                      |   24 +-
 .../FilterControl/AdhocFilterOption/index.tsx      |    3 +
 .../AdhocFilterPopoverTrigger/index.tsx            |    3 +
 .../controls/MatrixifyDimensionControl.test.tsx    |   72 +-
 .../controls/MatrixifyDimensionControl.tsx         |   25 +-
 superset-frontend/src/explore/controls.tsx         |    8 +-
 .../src/explore/exploreUtils/index.ts              |    7 +-
 .../src/explore/reducers/exploreReducer.test.ts    |   26 +
 .../src/explore/reducers/exploreReducer.ts         |   15 +-
 ...d.test.tsx => AwsSecretAccessKeyField.test.tsx} |   40 +-
 .../DatabaseConnectionForm/CommonParameters.tsx    |   29 +
 .../DatabaseConnectionForm/ValidatedInputField.tsx |   14 -
 .../DatabaseConnectionForm/constants.ts            |    3 +-
 .../semanticLayers/SemanticLayerModal.test.tsx     |  540 +-
 .../features/semanticLayers/SemanticLayerModal.tsx |  172 +-
 .../semanticLayers/jsonFormsAntdRenderers.test.tsx |  260 +
 .../features/semanticLayers/jsonFormsHelpers.tsx   |  125 +-
 .../components/Select/SelectFilterPlugin.test.tsx  |  346 +-
 .../components/Select/SelectFilterPlugin.tsx       |  178 +-
 superset-frontend/src/pages/DatabaseList/index.tsx |    2 +
 superset-frontend/src/types/Chart.ts               |    1 +
 .../utils/getChartRequiredFieldsMissingMessage.ts  |    1 +
 superset-websocket/package-lock.json               |  320 +-
 superset-websocket/package.json                    |    4 +-
 superset/charts/api.py                             |   12 +-
 superset/charts/data/api.py                        |   14 +-
 superset/commands/chart/update.py                  |   10 +
 superset/commands/chart/utils.py                   |    9 +
 superset/commands/chart/warm_up_cache.py           |   26 +-
 superset/commands/dashboard/exceptions.py          |    4 +
 superset/commands/dashboard/permalink/create.py    |   13 +-
 superset/commands/dashboard/restore.py             |  132 +
 superset/commands/dashboard/update.py              |   55 +-
 superset/commands/distributed_lock/release.py      |    3 +-
 superset/commands/restore.py                       |    7 +-
 superset/commands/semantic_layer/update.py         |   58 +-
 superset/common/query_context_factory.py           |   42 +-
 superset/common/query_context_processor.py         |   46 +-
 superset/common/query_object.py                    |   13 +
 superset/common/utils/dataframe_utils.py           |    8 +-
 superset/config.py                                 |   19 +
 superset/connectors/sqla/models.py                 |    4 +-
 superset/daos/chart.py                             |    7 +-
 superset/daos/dashboard.py                         |  310 +-
 superset/daos/datasource.py                        |   10 +
 superset/daos/key_value.py                         |   14 +-
 superset/daos/report.py                            |    3 +-
 superset/dashboards/api.py                         |   14 +
 superset/dataframe.py                              |    4 +
 superset/datasource/api.py                         |   56 +-
 superset/db_engine_specs/athena.py                 |   68 +-
 superset/db_engine_specs/base.py                   |   19 +
 superset/db_engine_specs/bigquery.py               |   20 +-
 superset/db_engine_specs/databricks.py             |    8 +-
 superset/db_engine_specs/hive.py                   |   18 +-
 superset/db_engine_specs/impala.py                 |  118 +-
 superset/db_engine_specs/spark.py                  |    6 +-
 superset/explore/api.py                            |    5 +
 superset/explore/form_data/api.py                  |    9 +-
 superset/explore/permalink/api.py                  |    5 +-
 superset/explore/utils.py                          |    6 +
 superset/initialization/__init__.py                |   19 +-
 superset/key_value/types.py                        |   30 +-
 superset/mcp_service/CLAUDE.md                     |    5 +-
 superset/mcp_service/app.py                        |    6 +-
 superset/mcp_service/auth.py                       |   13 +-
 superset/mcp_service/caching.py                    |    2 +-
 superset/mcp_service/chart/chart_helpers.py        |  158 +-
 superset/mcp_service/chart/chart_utils.py          | 1142 ++++-
 superset/mcp_service/chart/compile.py              |  322 +-
 superset/mcp_service/chart/datasource_resolver.py  |  412 ++
 superset/mcp_service/chart/plugin.py               |   70 +-
 superset/mcp_service/chart/plugins/__init__.py     |   15 +
 superset/mcp_service/chart/plugins/big_number.py   |   67 +-
 superset/mcp_service/chart/plugins/bullet.py       |  596 +++
 superset/mcp_service/chart/plugins/gantt.py        |    1 +
 superset/mcp_service/chart/plugins/geographic.py   |  836 +++
 superset/mcp_service/chart/plugins/histogram.py    |    1 +
 .../mcp_service/chart/plugins/mixed_timeseries.py  |   15 +
 superset/mcp_service/chart/plugins/table.py        |   20 +
 superset/mcp_service/chart/plugins/waterfall.py    |   15 +
 superset/mcp_service/chart/plugins/xy.py           |  210 +-
 superset/mcp_service/chart/preview_utils.py        | 1150 ++++-
 superset/mcp_service/chart/query_result.py         |  218 +-
 .../mcp_service/chart/resources/chart_configs.py   |   65 +
 superset/mcp_service/chart/schemas.py              | 1051 +++-
 superset/mcp_service/chart/tool/generate_chart.py  |  312 +-
 superset/mcp_service/chart/tool/get_chart_data.py  |  136 +-
 superset/mcp_service/chart/tool/get_chart_info.py  |   12 +-
 .../mcp_service/chart/tool/get_chart_preview.py    |   64 +-
 .../chart/tool/get_chart_type_schema.py            |   61 +-
 superset/mcp_service/chart/tool/list_charts.py     |    4 +-
 superset/mcp_service/chart/tool/update_chart.py    |  608 ++-
 .../mcp_service/chart/tool/update_chart_preview.py |   26 +-
 .../chart/validation/dataset_validator.py          |   36 +
 superset/mcp_service/chart/validation/pipeline.py  |   73 +-
 superset/mcp_service/common/pagination_schemas.py  |    3 +-
 superset/mcp_service/dashboard/schemas.py          |   60 +-
 .../dashboard/tool/duplicate_dashboard.py          |   16 +-
 .../dashboard/tool/manage_dashboard_owners.py      |    4 +-
 .../dashboard/tool/manage_dashboard_roles.py       |   22 +-
 .../dashboard/tool/restore_dashboard.py            |   14 +-
 superset/mcp_service/dataset/schemas.py            |   18 +-
 superset/mcp_service/dataset_scope.py              |  146 +-
 .../explore/tool/generate_explore_link.py          |  158 +-
 superset/mcp_service/mcp_config.py                 |   65 +-
 superset/mcp_service/middleware.py                 |   60 +-
 .../tool/get_compatible_dimensions.py              |   18 +
 .../semantic_layer/tool/get_compatible_metrics.py  |   18 +
 .../mcp_service/semantic_layer/tool/get_table.py   |   10 +
 .../semantic_layer/tool/list_metrics.py            |   13 +-
 superset/mcp_service/server.py                     |  177 +-
 superset/mcp_service/simple_proxy.py               |    2 +-
 ...79af013f48_add_semantic_layer_cache_version.py} |   25 +-
 superset/models/dashboard.py                       |   88 +-
 superset/models/helpers.py                         |    5 +-
 superset/security/manager.py                       |    4 +
 superset/semantic_layers/access.py                 |   50 +
 superset/semantic_layers/api.py                    |   87 +-
 superset/semantic_layers/labels.py                 |    7 +-
 superset/semantic_layers/mapper.py                 |  213 +-
 superset/semantic_layers/members.py                |   52 +
 superset/semantic_layers/models.py                 |  157 +-
 superset/tasks/deletion_retention.py               |  397 +-
 .../rank.py => tasks/retention_cap.py}             |   29 +-
 superset/tasks/version_history_retention.py        |  282 +-
 superset/translations/ar/LC_MESSAGES/messages.po   |   71 +
 superset/translations/ca/LC_MESSAGES/messages.po   |   71 +
 superset/translations/cs/LC_MESSAGES/messages.po   |   71 +
 superset/translations/de/LC_MESSAGES/messages.po   |   71 +
 superset/translations/en/LC_MESSAGES/messages.po   |   71 +
 superset/translations/es/LC_MESSAGES/messages.po   |   71 +
 superset/translations/fa/LC_MESSAGES/messages.po   |   71 +
 superset/translations/fi/LC_MESSAGES/messages.po   |   71 +
 superset/translations/fr/LC_MESSAGES/messages.po   |   71 +
 superset/translations/it/LC_MESSAGES/messages.po   |   71 +
 superset/translations/ja/LC_MESSAGES/messages.po   |   71 +
 superset/translations/ko/LC_MESSAGES/messages.po   |   71 +
 superset/translations/lv/LC_MESSAGES/messages.po   |   71 +
 superset/translations/messages.pot                 |  126 +-
 superset/translations/mi/LC_MESSAGES/messages.po   |   71 +
 superset/translations/nl/LC_MESSAGES/messages.po   |   71 +
 superset/translations/pl/LC_MESSAGES/messages.po   |   71 +
 superset/translations/pt/LC_MESSAGES/messages.po   |   71 +
 .../translations/pt_BR/LC_MESSAGES/messages.po     |   71 +
 superset/translations/ro/LC_MESSAGES/messages.po   |   71 +
 superset/translations/ru/LC_MESSAGES/messages.po   |   71 +
 superset/translations/sk/LC_MESSAGES/messages.po   |   71 +
 superset/translations/sl/LC_MESSAGES/messages.po   |   71 +
 superset/translations/sr/LC_MESSAGES/messages.po   |   71 +
 .../translations/sr_Latn/LC_MESSAGES/messages.po   |   71 +
 superset/translations/ta/LC_MESSAGES/messages.po   |   71 +
 superset/translations/th/LC_MESSAGES/messages.po   |   71 +
 superset/translations/tr/LC_MESSAGES/messages.po   |   71 +
 superset/translations/uk/LC_MESSAGES/messages.po   |   71 +
 superset/translations/zh/LC_MESSAGES/messages.po   |   71 +
 .../translations/zh_TW/LC_MESSAGES/messages.po     |   71 +
 superset/utils/core.py                             |    4 +
 superset/utils/geographic.py                       |  105 +
 superset/utils/geographic_regions.py               |  385 ++
 superset/utils/geographic_world.py                 |  205 +
 superset/utils/network.py                          |   23 +-
 .../utils/pandas_postprocessing/contribution.py    |   24 +-
 superset/utils/pandas_postprocessing/histogram.py  |    8 +-
 superset/views/api.py                              |    4 +-
 superset/views/core.py                             |    2 +-
 superset/views/dashboard/mixin.py                  |    1 +
 superset/views/datasource/views.py                 |  176 +-
 superset/views/filters.py                          |    5 +-
 tests/integration_tests/charts/api_tests.py        |    2 +
 .../charts/semantic_metadata_authz_tests.py        |  647 +++
 .../charts/semantic_save_tests.py                  |   46 +
 tests/integration_tests/dashboards/api_tests.py    |  440 +-
 tests/integration_tests/dashboards/dao_tests.py    |  120 +-
 tests/integration_tests/datasource/api_tests.py    |   36 +-
 .../semantic_layers/api_flag_test.py               |  423 ++
 .../versioning/retention_prune_tests.py            |   65 +
 tests/unit_tests/commands/chart/create_test.py     |    2 +
 .../commands/chart/test_warm_up_cache.py           |  135 +
 tests/unit_tests/commands/chart/update_test.py     |    2 +
 .../commands/dashboard/permalink_create_test.py    |    6 +-
 .../dashboard/restore_semantic_filters_test.py     |  363 ++
 .../unit_tests/commands/dashboard/restore_test.py  |    3 +
 .../deletion_retention/test_purge_chart_detach.py  |   18 +-
 .../common/test_query_context_processor.py         |   12 +-
 tests/unit_tests/conftest.py                       |   17 +
 tests/unit_tests/dao/dashboard_test.py             |  551 +-
 tests/unit_tests/dao/key_value_test.py             |   43 +
 .../dao/test_copy_dashboard_legacy_ids.py          |  213 +
 tests/unit_tests/daos/test_chart_dao.py            |   59 +
 tests/unit_tests/dashboards/datasets_test.py       |    2 +
 tests/unit_tests/dataframe_test.py                 |   86 +
 tests/unit_tests/db_engine_specs/test_athena.py    |  112 +
 tests/unit_tests/db_engine_specs/test_bigquery.py  |   86 +-
 .../unit_tests/db_engine_specs/test_databricks.py  |  133 +-
 .../db_engine_specs/test_impala_pending.py         |  303 ++
 .../distributed_lock/distributed_lock_tests.py     |    6 +-
 tests/unit_tests/explore/utils_test.py             |    2 +
 .../mcp_service/chart/test_bullet_chart.py         | 5308 ++++++++++++++++++++
 .../mcp_service/chart/test_bullet_tool_paths.py    | 2337 +++++++++
 .../mcp_service/chart/test_chart_helpers.py        |  342 +-
 .../chart/test_chart_plugin_contract.py            |  178 +-
 .../mcp_service/chart/test_chart_schemas.py        |  244 +
 .../mcp_service/chart/test_chart_target_schemas.py |  213 +
 .../mcp_service/chart/test_chart_utils.py          |  814 +++
 tests/unit_tests/mcp_service/chart/test_compile.py |   69 +
 .../chart/test_dashboard_time_binding.py           |   90 +
 .../mcp_service/chart/test_datasource_resolver.py  |  622 +++
 .../mcp_service/chart/test_gantt_chart.py          |   35 +
 .../mcp_service/chart/test_gauge_chart.py          |   98 +-
 .../mcp_service/chart/test_geographic_chart.py     | 2199 ++++++++
 .../chart/test_histogram_boxplot_charts.py         |    8 +-
 .../chart/test_live_chart_datasource.py            |    2 +
 .../chart/test_native_chart_regressions.py         |  351 ++
 ...ative_form_data_and_dataset_rebind_contracts.py |    4 +-
 .../mcp_service/chart/test_preview_utils.py        |   47 +-
 .../mcp_service/chart/test_response_preflight.py   |    4 +-
 .../test_review_query_and_preview_regressions.py   |   92 +
 .../mcp_service/chart/test_sunburst_chart.py       |   37 +
 .../mcp_service/chart/test_treemap_completeness.py |   32 +-
 .../tool/test_generate_chart_semantic_view.py      |  412 ++
 .../mcp_service/chart/tool/test_get_chart_data.py  |   88 +-
 .../chart/tool/test_get_chart_preview.py           |   62 +-
 .../mcp_service/chart/tool/test_get_chart_sql.py   |    6 +-
 .../mcp_service/chart/tool/test_list_charts.py     |  148 +
 .../chart/tool/test_saved_chart_datasource.py      |  432 ++
 .../mcp_service/chart/tool/test_update_chart.py    |  358 +-
 .../chart/tool/test_update_chart_preview.py        |   91 +-
 .../chart/tool/test_update_chart_rebind.py         | 1006 ++++
 .../validation/test_column_name_normalization.py   |   21 +
 .../chart/validation/test_dataset_validator.py     |  195 +-
 .../dashboard/tool/test_duplicate_dashboard.py     |   59 +-
 .../dashboard/tool/test_get_dashboard_datasets.py  |    2 +
 .../dashboard/tool/test_get_dashboard_layout.py    |    4 +-
 .../dashboard/tool/test_restore_dashboard.py       |    3 +
 .../test_generate_explore_link_semantic_view.py    |  245 +
 .../mcp_service/native_tool_inventory.json         | 1289 +++++
 .../mcp_service/semantic_layer/test_flag_off.py    |  203 +
 .../tool/test_get_compatible_dimensions.py         |    5 +
 .../tool/test_get_compatible_metrics.py            |    4 +
 .../semantic_layer/tool/test_get_table.py          |   69 +
 .../semantic_layer/tool/test_list_metrics.py       |    7 +
 .../system/resources/test_schema_discovery.py      |    2 +-
 .../mcp_service/system/tool/test_get_schema.py     |   11 +
 .../mcp_service/test_chart_tool_inventory.py       |   44 +-
 tests/unit_tests/mcp_service/test_dataset_scope.py |  247 +-
 tests/unit_tests/mcp_service/test_mcp_server.py    |   69 +
 tests/unit_tests/mcp_service/test_middleware.py    |   34 +-
 .../mcp_service/test_middleware_logging.py         |  140 +-
 .../mcp_service/test_native_tool_surface.py        | 1144 +++++
 .../test_simple_proxy.py}                          |   34 +-
 .../test_tool_description_constraints.py           |   44 +-
 .../unit_tests/mcp_service/test_tool_inventory.py  |   20 +-
 .../mcp_service/test_tool_search_transform.py      |  237 +-
 .../mcp_service/test_validation_contract.py        |   52 +-
 .../mcp_service/test_worker_metadata_pool.py       |    6 +-
 tests/unit_tests/models/dashboard_test.py          |  191 +
 tests/unit_tests/models/helpers_test.py            |   42 +
 .../pandas_postprocessing/test_histogram.py        |   32 +-
 .../unit_tests/pandas_postprocessing/test_utils.py |   18 +-
 tests/unit_tests/reports/config_dao_test.py        |    8 +-
 .../scripts/translations/backfill_po_test.py       |  226 +-
 .../scripts/translations/check_pot_drift_test.py   |  215 +-
 tests/unit_tests/security/manager_test.py          |  281 ++
 .../semantic_layers/import_export_test.py          |   22 +
 .../semantic_layers/integer_precision_test.py      |  366 ++
 tests/unit_tests/semantic_layers/labels_test.py    |   13 +
 .../semantic_layers/layer_list_scope_test.py       |  215 +
 tests/unit_tests/semantic_layers/mapper_test.py    |  182 +-
 tests/unit_tests/semantic_layers/members_test.py   |   83 +
 .../semantic_layers/metadata_contract_test.py      |  566 +--
 .../semantic_layers/metric_filter_test.py          |  288 ++
 tests/unit_tests/semantic_layers/models_test.py    |   10 +-
 .../semantic_layers/simple_cache_clear_test.py     |  650 +++
 tests/unit_tests/semantic_layers/test_access.py    |   42 +
 .../semantic_layers/test_runtime_flag.py           |  216 +
 .../semantic_layers/values_endpoint_test.py        |  110 +-
 .../soft_delete/test_restore_purge_hoist.py        |   13 +
 tests/unit_tests/sql/parse_tests.py                |   17 +
 .../subjects/test_creator_group_call_sites.py      |   22 +-
 tests/unit_tests/tasks/test_async_queries.py       |   31 +
 tests/unit_tests/tasks/test_deletion_retention.py  |  796 ++-
 .../tasks/test_version_history_retention.py        |  659 ++-
 .../unit_tests/utils/geographic_world_test.py      |   31 +-
 tests/unit_tests/utils/test_network.py             |   29 +
 .../versioning/test_restore_datasource_race.py     |    4 +
 .../versioning/test_restore_missing_datasource.py  |    6 +
 tests/unit_tests/views/datasource/views_test.py    |  559 ++-
 414 files changed, 51195 insertions(+), 3956 deletions(-)
 create mode 100644 docs/developer_docs/contributing/translation-guide.md
 create mode 100644 docs/developer_docs/semantic-layer-cache-clear.md
 delete mode 100644 docs/developer_docs/semantic-metadata-contract.md
 create mode 100644 docs/docs/using-superset/semantic-layer-connections.mdx
 delete mode 100644 superset-core/src/superset_core/semantic_layers/metadata.py
 copy superset/mcp_service/common/__init__.py => superset-core/tests/semantic_layers/test_view.py (79%)
 create mode 100644 superset-frontend/plugins/plugin-chart-country-map/src/normalizeRegions.ts
 create mode 100644 superset-frontend/plugins/plugin-chart-country-map/src/regions.ts
 copy superset-frontend/plugins/{plugin-chart-partition => plugin-chart-country-map}/test/controlPanel.test.ts (55%)
 create mode 100644 superset-frontend/plugins/plugin-chart-country-map/test/geographicRendering.test.tsx
 create mode 100644 superset-frontend/plugins/plugin-chart-country-map/test/normalizeRegions.test.ts
 create mode 100644 superset-frontend/plugins/plugin-chart-world-map/src/worldGeometry.ts
 copy superset-frontend/plugins/{plugin-chart-partition => plugin-chart-world-map}/test/controlPanel.test.ts (55%)
 copy superset-frontend/plugins/{plugin-chart-echarts/src/defaults.ts => preset-chart-deckgl/src/layers/Scatter/controlPanel.test.ts} (53%)
 create mode 100644 superset-frontend/spec/helpers/geographicControlPanel.ts
 copy superset-frontend/src/features/databases/DatabaseModal/DatabaseConnectionForm/{ValidatedInputField.test.tsx => AwsSecretAccessKeyField.test.tsx} (60%)
 create mode 100644 superset/mcp_service/chart/datasource_resolver.py
 create mode 100644 superset/mcp_service/chart/plugins/bullet.py
 create mode 100644 superset/mcp_service/chart/plugins/geographic.py
 copy superset/migrations/versions/{2026-06-01_00-00_b7c9d1e2f3a4_add_password_must_change.py => 2026-10-08_00-00_c179af013f48_add_semantic_layer_cache_version.py} (65%)
 create mode 100644 superset/semantic_layers/access.py
 create mode 100644 superset/semantic_layers/members.py
 copy superset/{utils/pandas_postprocessing/rank.py => tasks/retention_cap.py} (59%)
 create mode 100644 superset/utils/geographic.py
 create mode 100644 superset/utils/geographic_regions.py
 create mode 100644 superset/utils/geographic_world.py
 create mode 100644 tests/integration_tests/charts/semantic_metadata_authz_tests.py
 create mode 100644 tests/integration_tests/semantic_layers/api_flag_test.py
 create mode 100644 tests/unit_tests/commands/chart/test_warm_up_cache.py
 create mode 100644 tests/unit_tests/commands/dashboard/restore_semantic_filters_test.py
 create mode 100644 tests/unit_tests/dao/test_copy_dashboard_legacy_ids.py
 create mode 100644 tests/unit_tests/daos/test_chart_dao.py
 create mode 100644 tests/unit_tests/db_engine_specs/test_impala_pending.py
 create mode 100644 tests/unit_tests/mcp_service/chart/test_bullet_chart.py
 create mode 100644 tests/unit_tests/mcp_service/chart/test_bullet_tool_paths.py
 create mode 100644 tests/unit_tests/mcp_service/chart/test_chart_target_schemas.py
 create mode 100644 tests/unit_tests/mcp_service/chart/test_datasource_resolver.py
 create mode 100644 tests/unit_tests/mcp_service/chart/test_geographic_chart.py
 create mode 100644 tests/unit_tests/mcp_service/chart/test_native_chart_regressions.py
 create mode 100644 tests/unit_tests/mcp_service/chart/tool/test_generate_chart_semantic_view.py
 create mode 100644 tests/unit_tests/mcp_service/chart/tool/test_saved_chart_datasource.py
 create mode 100644 tests/unit_tests/mcp_service/chart/tool/test_update_chart_rebind.py
 create mode 100644 tests/unit_tests/mcp_service/explore/tool/test_generate_explore_link_semantic_view.py
 create mode 100644 tests/unit_tests/mcp_service/native_tool_inventory.json
 create mode 100644 tests/unit_tests/mcp_service/semantic_layer/test_flag_off.py
 create mode 100644 tests/unit_tests/mcp_service/test_native_tool_surface.py
 copy tests/unit_tests/{test_mcp_simple_proxy.py => mcp_service/test_simple_proxy.py} (58%)
 create mode 100644 tests/unit_tests/semantic_layers/integer_precision_test.py
 create mode 100644 tests/unit_tests/semantic_layers/layer_list_scope_test.py
 create mode 100644 tests/unit_tests/semantic_layers/members_test.py
 create mode 100644 tests/unit_tests/semantic_layers/metric_filter_test.py
 create mode 100644 tests/unit_tests/semantic_layers/simple_cache_clear_test.py
 create mode 100644 tests/unit_tests/semantic_layers/test_access.py
 create mode 100644 tests/unit_tests/semantic_layers/test_runtime_flag.py
 copy superset/mcp_service/sql_lab/tool/__init__.py => tests/unit_tests/utils/geographic_world_test.py (55%)