This is an automated email from the ASF dual-hosted git repository.
rusackas pushed a change to branch fix/pivot-grand-total-mixed-metrics
in repository https://gitbox.apache.org/repos/asf/superset.git
omit be19942e67e fix(pivot-table): reconcile grand-total slot with
formatter-aware totals; re-parent migration
omit 3a35a261bd3 fix(pivot-table): stop the grand-total corner from
silently picking one metric
add ac3fc943dd3 chore(deps): bump the security group across 1 directory
with 9 updates (#45026)
add f88b2ef2595 chore(deps): bump the security group across 1 directory
with 6 updates (#45025)
add fc1eeb066af chore(deps-dev): bump wait-on from 9.1.0 to 9.4.0 in
/superset-frontend (#45015)
add fc754d0e814 chore(deps-dev): bump oxlint from 1.85.0 to 1.86.0 in
/superset-frontend (#45014)
add ee7b7fdc908 chore(deps-dev): bump oxlint from 1.85.0 to 1.86.0 in
/docs (#45009)
add 27d5c3655de chore(deps-dev): bump the typescript-eslint group in
/superset-frontend with 2 updates (#45007)
add f3da949f61c chore(deps-dev): bump oxfmt from 0.70.0 to 0.71.0 in
/superset-websocket (#45006)
add a0f0cb8ae3d feat(mcp): support filter-bar dividers in
manage_native_filters (#45021)
add ec1688facd7 fix(mcp): state that dataset tools are SQL-only and point
to semantic tools (#44994)
add 388a10efdb1 fix(dashboards): return 404 when dashboard export hits an
inaccessible chart or dataset (#44929)
add d526ee4bd1f feat(semantic): add optional metadata refresh SDK contract
(#44834)
add 90b0a1a9160 fix(semantic): map layer views as a collection (#44902)
add 6f6be95995e feat(retention): let a host install purge policies for its
own soft-delete roots (#44892)
add fca6bdad57b fix(semantic): reject SQL clauses on semantic views
(#44899)
add 888795b90f9 fix(security): bind contextual access checks to the
datasource type and id (#45002)
add ae297e910e7 fix(permalink): handle concurrent creation of identical
dashboard permalinks (#45059)
add 86a6d1dcf34 chore(deps-dev): bump @types/ws from 8.18.1 to 8.18.2 in
/superset-websocket (#45045)
add 9b7797f7b21 chore(deps): bump the storybook group in /docs with 2
updates (#45046)
add 735365e2d18 chore(deps-dev): bump the storybook group in
/superset-frontend with 5 updates (#45047)
add 11a22e5ceba fix(post-processing): stop duplicating columns in
_append_columns (#45018)
add 001cb574e39 feat(plugin-chart-echarts): add a value axis label control
(#43660)
add c4bc0b1e0cc fix(layout): restore growable app shell so injected
content above #app doesn't clip it (#45056)
add 1cf9569807c feat(pivot-table): collapse row groups by default (#45030)
add 0cb498d08f2 fix(versioning): refuse a chart restore whose datasource
no longer exists (#44925)
add c1908747b16 fix(semantic): hide and ignore series limits that have no
series columns (#44909)
add 908d688171d fix(async): show the real error for a failed async chart
query (#45054)
add dbd546908a8 feat(semantic-layer): show provider queries from chart
results (#44206)
add 100f51240bd perf(security): batch dashboard fallback datasource
resolution (#44993)
add d27b7344087 fix(mcp): refuse changes to externally managed dashboards
in all dashboard tools (#45062)
add a8a828202f7 fix(versioning): preserve history across savepoint
rollback (#45033)
add 9c4ad2497df fix(cache): evict rejected cached GET requests (#45055)
add bdbddb76dc7 fix(semantic): return a client error for unsupported time
grains (#45053)
add 0754a86b3e4 chore(deps-dev): bump vitest from 5.0.2 to 5.0.3 in
/superset-websocket (#45072)
add f4c16eb3a4f docs: add DouroECI logo and contributor to In the Wild
(#45096)
add 34b3d65cc20 fix(charts): clear perms of charts whose datasource no
longer exists (#44926)
add 72ee1fd60df fix(date_parser): use pyparsing snake_case API to silence
PyparsingDeprecationWarning (#45094)
add b3d8fdb6061 fix(mcp): don't page MCP_ERROR_HOOK for user-class errors
in the last-resort catch (SC-125493) (#45093)
add 1ebfea28efc feat: SIP-209 Improved Alerts & Reports (#44992)
add b2bafd64fa2 chore(ci): configure more grouped dep upgrades across npm
subprojects (#44696)
add b327d57165c fix(explore): skip Ctrl/Cmd+Enter query while controls
have errors or chart is loading (#44963)
add c45391c1689 fix(explore): show 0 zoom, latitude and longitude in the
map view extent tag (#44962)
add 6d090bec82e fix(explore): honor a controlled ControlPopover open prop
(#44959)
add b22144a76d4 fix(native-filters): show a clear error instead of
"Network error" when filter values fail to load (#44585)
add e10e268e992 fix(explore): dispatch datasource metadata fetch (#44958)
add 489a02e3ea3 fix(semantic-layer): fail incomplete or unverified
semantic query results (#44832)
add e9862fb4ab2 fix(dashboard): refresh semantic metadata across edits
(#45052)
add 2ec20003ed5 chore: Update CODEOWNERS to include @sadpandajoe (#45120)
add e5c5e918359 feat(mcp): add typed Sunburst chart support (#43771)
add 4ca736d81c5 fix(semantic-layer): require write access for
configuration schema enrichment (#45107)
add 6efc896e5b9 test(dashboard): wait for async submenu and debounced
validation in flaky tests (#45106)
add 3bc9e9e479f fix(datasets): accept certification fields on dataset
column and metric PUT (#45091)
add cd34cc1019f chore(deps): bump chromaui/action from 18.10.1 to 18.10.2
(#45134)
add 1b35374fecb fix(semantic-layer): honor provider preferred time
dimension (#44997)
add ffc81d92a2c feat(dashboard): add column allowlist to Group By native
filter (#43736)
add 3fc078abe6b fix(soft-delete): preserve a shared datasource permission
on purge (#45034)
add a4a0899e92c perf(versioning): defer capture policy until versioned
work (#44928)
add 99899bd392f fix(date-parser): reject malformed time ranges instead of
scanning everything (#45098)
add 13c5ff8c87f chore(deps-dev): bump wait-on from 9.4.0 to 9.5.1 in
/superset-frontend (#45048)
add 61df1692584 chore(deps): bump mapbox-gl from 3.31.0 to 3.32.0 in
/superset-frontend (#45049)
add 035ae052525 chore(deps-dev): bump vitest from 5.0.2 to 5.0.3 in
/superset-embedded-sdk (#45074)
add 9635e7f1f91 chore(deps): bump the swc group across 2 directories with
1 update (#45118)
add 9e7a05e6ed1 chore(deps-dev): bump @types/node in
/superset-embedded-sdk (#45121)
add cda7a1e8189 chore(deps): bump swagger-ui-react from 5.33.0 to 5.33.1
in /docs (#45122)
add cfb0ed61eb8 chore(deps): bump yargs from 18.1.0 to 18.2.0 in
/superset-frontend (#45129)
add a8fc576cfe3 chore(deps-dev): bump oxfmt in /docs (#45119)
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 4f43c140025 fix(pivot-table): stop the grand-total corner from
silently picking one metric
add 655187c71f2 fix(pivot-table): reconcile grand-total slot with
formatter-aware totals; re-parent migration
add 60424e94254 chore: re-parent pivot aggregation migration onto current
head and sync messages.pot
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 (be19942e67e)
\
N -- N -- N refs/heads/fix/pivot-grand-total-mixed-metrics
(60424e94254)
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/CODEOWNERS | 8 +-
.github/dependabot.yml | 93 +-
.github/workflows/chromatic.yml | 2 +-
README.md | 9 +-
RESOURCES/INTHEWILD.yaml | 3 +-
UPDATING.md | 164 +
docs/admin_docs/configuration/alerts-reports.mdx | 123 +-
.../configuration/async-queries-celery.mdx | 7 +
docs/admin_docs/configuration/mcp-server.mdx | 400 +-
docs/developer_docs/contributing/howtos.md | 83 +-
.../extensions/contribution-types.md | 19 +
docs/developer_docs/extensions/mcp.md | 81 +
docs/developer_docs/semantic-layer-cache-clear.md | 106 +
.../developer_docs/semantic-result-completeness.md | 70 +
.../creating-your-first-dashboard.mdx | 42 +
docs/docs/using-superset/embedding.mdx | 1 +
docs/docs/using-superset/exploring-data.mdx | 7 +
.../using-superset/exporting-dashboard-data.mdx | 4 +-
docs/docs/using-superset/recently-archived.mdx | 172 +-
.../using-superset/semantic-member-selections.mdx | 4 +
.../docs/using-superset/using-ai-with-superset.mdx | 32 +
docs/docs/using-superset/version-history.mdx | 33 +-
docs/package.json | 14 +-
docs/static/feature-flags.json | 8 +-
docs/static/img/logos/douroeci.png | Bin 0 -> 22657 bytes
docs/static/resources/openapi.json | 355 +-
docs/yarn.lock | 722 +--
pyproject.toml | 30 +-
requirements/base.in | 4 +-
requirements/base.txt | 18 +-
requirements/development.txt | 28 +-
scripts/translations/babel_update.sh | 7 +
scripts/translations/backfill_po.py | 79 +-
scripts/translations/check_pot_drift.py | 81 +-
.../src/superset_core/semantic_layers/errors.py | 42 +
.../src/superset_core/semantic_layers/layer.py | 18 +-
.../src/superset_core/semantic_layers/view.py | 34 +-
superset-core/tests/semantic_layers/test_errors.py | 66 +
.../tests/semantic_layers/test_view.py | 11 +-
superset-embedded-sdk/package-lock.json | 335 +-
superset-embedded-sdk/package.json | 6 +-
superset-frontend/jest.config.js | 2 +-
superset-frontend/package-lock.json | 1361 ++---
superset-frontend/package.json | 42 +-
.../packages/generator-superset/package.json | 2 +-
.../superset-core/src/theme/GlobalStyles.test.tsx | 67 +
.../superset-core/src/theme/GlobalStyles.tsx | 9 +-
.../src/shared-controls/sharedControls.tsx | 21 +
.../src/utils/D3Formatting.ts | 1 +
.../packages/superset-ui-core/package.json | 6 +-
.../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/query/buildQueryContext.ts | 15 +-
.../superset-ui-core/src/utils/featureFlags.ts | 1 +
.../test/query/buildQueryContext.test.ts | 41 +
.../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 +
.../src/MixedTimeseries/controlPanel.tsx | 2 +
.../src/MixedTimeseries/transformProps.ts | 3 +
.../src/MixedTimeseries/types.ts | 2 +
.../src/Timeseries/Area/controlPanel.tsx | 2 +
.../src/Timeseries/EchartsTimeseries.test.tsx | 1 +
.../src/Timeseries/Regular/Bar/controlPanel.tsx | 2 +
.../src/Timeseries/Regular/Line/controlPanel.tsx | 2 +
.../Timeseries/Regular/Scatter/controlPanel.tsx | 2 +
.../Timeseries/Regular/SmoothLine/controlPanel.tsx | 2 +
.../src/Timeseries/Step/controlPanel.tsx | 2 +
.../src/Timeseries/constants.ts | 1 +
.../src/Timeseries/transformProps.ts | 7 +-
.../plugin-chart-echarts/src/Timeseries/types.ts | 1 +
.../plugins/plugin-chart-echarts/src/controls.tsx | 11 +
.../test/BoxPlot/buildQuery.test.ts | 20 +
.../test/MixedTimeseries/transformProps.test.ts | 15 +
.../test/Rose/buildQuery.test.ts | 12 +
.../test/Timeseries/transformProps.test.ts | 60 +
.../plugins/plugin-chart-handlebars/package.json | 2 +-
.../plugin-chart-horizon/test/buildQuery.test.ts | 11 +
.../plugin-chart-partition/test/buildQuery.test.ts | 13 +
.../src/PivotTableChart.tsx | 3 +
.../src/plugin/controlPanel.tsx | 28 +-
.../src/plugin/transformProps.ts | 2 +
.../src/react-pivottable/TableRenderers.tsx | 109 +-
.../plugins/plugin-chart-pivot-table/src/types.ts | 5 +
.../test/plugin/buildQuery.test.ts | 49 +
.../test/react-pivottable/tableRenders.test.tsx | 346 ++
.../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 | 2 +-
.../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 +
.../DynamicGroupBy/DynamicGroupByPlugin.test.tsx | 56 +
.../DynamicGroupBy/DynamicGroupByPlugin.tsx | 52 +-
.../DynamicGroupBy/columnAllowlist.test.ts | 67 +
.../components/DynamicGroupBy/columnAllowlist.ts | 105 +
.../components/DynamicGroupBy/types.ts | 5 +
.../src/dashboard/actions/dashboardInfo.ts | 98 +-
.../src/dashboard/actions/dashboardState.test.ts | 146 +
.../src/dashboard/actions/dashboardState.ts | 63 +-
.../src/dashboard/actions/datasources.test.ts | 114 +
.../src/dashboard/actions/datasources.ts | 41 +-
.../SliceHeaderControls.test.tsx | 37 +
.../components/SliceHeaderControls/index.tsx | 1 +
.../components/gridComponents/Chart/Chart.test.tsx | 24 +-
.../FilterBar/FilterControls/FilterValue.test.tsx | 92 +-
.../FilterBar/FilterControls/FilterValue.tsx | 23 +-
.../FilterControls/GroupByFilterCard.test.tsx | 159 +
.../FilterBar/FilterControls/GroupByFilterCard.tsx | 41 +-
.../FiltersConfigForm/ColumnSelect.test.tsx | 39 +
.../FiltersConfigForm/ColumnSelect.tsx | 99 +-
.../FiltersConfigForm/FiltersConfigForm.tsx | 197 +-
.../GroupByColumnAllowlist.test.tsx | 429 ++
.../FiltersConfigModal/FiltersConfigModal.test.tsx | 6 +-
.../transformers/customizationTransformer.test.ts | 109 +
.../transformers/customizationTransformer.ts | 59 +-
.../nativeFilters/FiltersConfigModal/types.ts | 4 +
.../useDisplayControlDatasource.test.ts | 22 +-
.../nativeFilters/useDisplayControlDatasource.ts | 25 +-
.../dashboard/containers/DashboardPage.test.tsx | 153 +-
.../src/dashboard/containers/DashboardPage.tsx | 59 +-
.../src/dashboard/reducers/dashboardInfo.test.ts | 327 ++
.../src/dashboard/reducers/dashboardInfo.ts | 160 +
superset-frontend/src/dashboard/types.ts | 13 +
.../ExploreViewContainer.test.tsx | 153 +
.../components/ExploreViewContainer/index.tsx | 32 +-
.../ColumnConfigConstants.test.tsx | 25 +-
.../controls/ColumnConfigControl/constants.tsx | 2 +
.../ControlPopover/ControlPopover.test.tsx | 66 +
.../controls/ControlPopover/ControlPopover.tsx | 39 +-
.../controls/MapViewControl/ExtentTag.test.tsx | 68 +
.../controls/MapViewControl/ExtentTag.tsx | 13 +-
.../components/controls/MapViewControl/types.ts | 6 +-
.../controls/SemanticRequestView.test.tsx | 111 +
.../components/controls/SemanticRequestView.tsx | 71 +
.../components/controls/ViewQueryModal.test.tsx | 300 +-
.../explore/components/controls/ViewQueryModal.tsx | 98 +-
.../useExploreAdditionalActionsMenu/index.tsx | 1 +
.../useExploreAdditionalActionsMenu.test.tsx | 33 +
.../src/features/alerts/AlertReportModal.test.tsx | 428 ++
.../src/features/alerts/AlertReportModal.tsx | 1012 +++-
.../alerts/ReportConfigurationModal.test.tsx | 409 ++
.../features/alerts/ReportConfigurationModal.tsx | 488 ++
.../alerts/hooks/useReportConfiguration.ts | 64 +
superset-frontend/src/features/alerts/types.ts | 34 +-
.../DatabaseConnectionForm/CommonParameters.tsx | 2 +
.../reports/ReportModal/ReportModal.test.tsx | 279 +-
.../src/features/reports/ReportModal/index.tsx | 83 +-
superset-frontend/src/features/reports/types.ts | 2 +
.../semanticLayers/SemanticLayerModal.test.tsx | 130 +-
.../features/semanticLayers/SemanticLayerModal.tsx | 75 +-
.../src/hooks/apiResources/datasets.cache.test.ts | 48 +
.../src/hooks/apiResources/datasets.test.ts | 36 +-
.../src/hooks/apiResources/datasets.ts | 6 +-
.../src/middleware/asyncEvent.test.ts | 370 +-
superset-frontend/src/middleware/asyncEvent.ts | 90 +-
.../src/middleware/asyncQueryError.ts | 118 +
.../pages/AlertReportList/AlertReportList.test.tsx | 43 +
.../src/pages/AlertReportList/index.tsx | 22 +
superset-frontend/src/pages/DatabaseList/index.tsx | 2 +
superset-frontend/src/utils/cacheWrapper.test.ts | 54 +
superset-frontend/src/utils/cacheWrapper.ts | 6 +
.../src/utils/cachedSupersetGet.test.ts | 20 +
.../utils/getChartRequiredFieldsMissingMessage.ts | 1 +
.../src/utils/semanticViewStructure.test.ts | 6 +-
.../src/utils/semanticViewStructure.ts | 40 +-
superset-frontend/src/views/App.test.tsx | 12 +-
superset-frontend/src/views/App.tsx | 11 +-
.../TimeTable/config/buildQuery.test.ts | 14 +
superset-websocket/package-lock.json | 360 +-
superset-websocket/package.json | 8 +-
superset/charts/data/api.py | 7 +-
superset/charts/data/form_data.py | 2 +-
superset/charts/filters.py | 10 +-
superset/commands/chart/restore_version.py | 17 +
superset/commands/dashboard/permalink/create.py | 43 +-
.../commands/deletion_retention/force_purge.py | 7 +-
.../commands/deletion_retention/purge_cascade.py | 5 +-
.../commands/deletion_retention/purge_policy.py | 1191 ++++-
superset/commands/distributed_lock/release.py | 3 +-
superset/commands/report/alert.py | 52 +-
superset/commands/report/base.py | 165 +-
superset/commands/report/create.py | 46 +
superset/commands/report/exceptions.py | 155 +-
superset/commands/report/execute.py | 189 +-
superset/commands/report/update.py | 324 +-
superset/commands/report/update_config.py | 145 +
superset/commands/security/reset.py | 22 +-
superset/commands/semantic_layer/update.py | 58 +-
superset/commands/version_restore.py | 5 +
superset/common/form_data_query_context.py | 1599 +++++-
superset/common/query_context_factory.py | 42 +-
superset/common/query_context_processor.py | 57 +-
superset/common/query_object.py | 15 +
superset/common/tabular_query.py | 7 +-
superset/common/utils/dataframe_utils.py | 8 +-
superset/config.py | 48 +
superset/daos/datasource.py | 21 +-
superset/daos/key_value.py | 14 +-
superset/daos/report.py | 212 +-
superset/dashboards/api.py | 6 +-
superset/dashboards/excel_export/workbook.py | 11 +-
superset/datasets/schemas.py | 39 +-
superset/datasource/api.py | 97 +-
superset/db_engine_specs/bigquery.py | 20 +-
superset/db_engine_specs/impala.py | 118 +-
superset/exceptions.py | 26 +
superset/initialization/__init__.py | 4 +
superset/key_value/types.py | 37 +-
superset/mcp_service/app.py | 12 +-
superset/mcp_service/auth.py | 13 +-
superset/mcp_service/chart/chart_helpers.py | 587 +-
superset/mcp_service/chart/chart_utils.py | 1372 ++++-
superset/mcp_service/chart/compile.py | 153 +-
superset/mcp_service/chart/plugin.py | 221 +-
superset/mcp_service/chart/plugins/__init__.py | 15 +
superset/mcp_service/chart/plugins/big_number.py | 23 +-
superset/mcp_service/chart/plugins/bubble.py | 4 +-
superset/mcp_service/chart/plugins/gantt.py | 32 +
superset/mcp_service/chart/plugins/gauge.py | 40 +-
superset/mcp_service/chart/plugins/geographic.py | 834 +++
superset/mcp_service/chart/plugins/histogram.py | 11 +-
.../mcp_service/chart/plugins/mixed_timeseries.py | 84 +-
superset/mcp_service/chart/plugins/pivot_table.py | 4 +
superset/mcp_service/chart/plugins/sunburst.py | 288 +
superset/mcp_service/chart/plugins/table.py | 25 +
superset/mcp_service/chart/plugins/treemap.py | 3 +-
superset/mcp_service/chart/plugins/waterfall.py | 6 +-
superset/mcp_service/chart/plugins/xy.py | 185 +-
superset/mcp_service/chart/preview_utils.py | 395 +-
superset/mcp_service/chart/query_result.py | 1756 +++++-
superset/mcp_service/chart/registry.py | 18 +
.../mcp_service/chart/resources/chart_configs.py | 75 +-
superset/mcp_service/chart/response_preflight.py | 204 +
superset/mcp_service/chart/schemas.py | 1678 +++++-
superset/mcp_service/chart/sunburst.py | 436 ++
superset/mcp_service/chart/tool/generate_chart.py | 225 +-
superset/mcp_service/chart/tool/get_chart_data.py | 690 ++-
superset/mcp_service/chart/tool/get_chart_info.py | 12 +-
.../mcp_service/chart/tool/get_chart_preview.py | 160 +-
superset/mcp_service/chart/tool/get_chart_sql.py | 195 +-
.../chart/tool/get_chart_type_schema.py | 59 +-
superset/mcp_service/chart/tool/update_chart.py | 573 +-
.../mcp_service/chart/tool/update_chart_preview.py | 391 +-
.../chart/validation/dataset_validator.py | 431 +-
.../validation/runtime/chart_type_suggester.py | 13 +-
superset/mcp_service/common/pagination_schemas.py | 3 +-
.../mcp_service/common/time_range_validation.py | 81 +-
superset/mcp_service/dashboard/schemas.py | 168 +-
.../tool/add_chart_to_existing_dashboard.py | 11 +
.../dashboard/tool/apply_dashboard_filters.py | 3 +-
.../mcp_service/dashboard/tool/delete_dashboard.py | 66 +-
.../mcp_service/dashboard/tool/governance_utils.py | 15 +-
.../tool/manage_dashboard_certification.py | 10 +-
.../dashboard/tool/manage_dashboard_markdown.py | 15 +-
.../dashboard/tool/manage_dashboard_owners.py | 12 +-
.../dashboard/tool/manage_dashboard_roles.py | 32 +-
.../dashboard/tool/manage_native_filters.py | 183 +-
.../dashboard/tool/remove_chart_from_dashboard.py | 12 +
.../dashboard/tool/restore_dashboard.py | 47 +-
.../mcp_service/dashboard/tool/update_dashboard.py | 10 +
superset/mcp_service/dataset/dataset_utils.py | 5 +
superset/mcp_service/dataset/schemas.py | 28 +-
.../mcp_service/dataset/tool/create_dataset.py | 11 +-
.../mcp_service/dataset/tool/get_dataset_info.py | 7 +-
superset/mcp_service/dataset/tool/list_datasets.py | 11 +-
superset/mcp_service/dataset/tool/query_dataset.py | 165 +-
.../mcp_service/dataset/tool/update_dataset.py | 16 +-
.../explore/tool/generate_explore_link.py | 7 +-
superset/mcp_service/mcp_config.py | 28 +-
superset/mcp_service/middleware.py | 99 +-
superset/mcp_service/semantic_layer/schemas.py | 8 +-
.../mcp_service/semantic_layer/tool/get_table.py | 128 +-
superset/mcp_service/server.py | 84 +-
superset/mcp_service/utils/cache_utils.py | 32 +-
superset/mcp_service/utils/response_utils.py | 294 +-
superset/mcp_service/utils/serialization.py | 51 +-
...141b8ada7731_tag_pivot_tables_with_restored_.py | 4 +-
...00_e4a7c2b9d1f3_add_run_as_and_report_config.py | 178 +
...79af013f48_add_semantic_layer_cache_version.py} | 25 +-
superset/models/helpers.py | 42 +
superset/models/slice.py | 73 +-
superset/reports/api.py | 181 +-
superset/reports/models.py | 45 +
superset/reports/notifications/email.py | 14 +-
superset/reports/schemas.py | 225 +-
superset/reports/types.py | 20 +-
superset/reports/utils.py | 183 +
superset/security/manager.py | 200 +-
superset/semantic_layers/api.py | 61 +-
superset/semantic_layers/completeness.py | 44 +
superset/semantic_layers/mapper.py | 171 +-
superset/semantic_layers/models.py | 238 +-
superset/tasks/api.py | 23 +-
superset/tasks/async_queries.py | 17 +-
superset/tasks/deletion_retention.py | 466 +-
.../rank.py => tasks/retention_cap.py} | 29 +-
superset/tasks/schemas.py | 3 +
superset/tasks/version_history_retention.py | 282 +-
superset/translations/ar/LC_MESSAGES/messages.po | 360 +-
superset/translations/ca/LC_MESSAGES/messages.po | 356 +-
superset/translations/cs/LC_MESSAGES/messages.po | 357 +-
superset/translations/de/LC_MESSAGES/messages.po | 356 +-
superset/translations/en/LC_MESSAGES/messages.po | 356 +-
superset/translations/es/LC_MESSAGES/messages.po | 356 +-
superset/translations/fa/LC_MESSAGES/messages.po | 356 +-
superset/translations/fi/LC_MESSAGES/messages.po | 356 +-
superset/translations/fr/LC_MESSAGES/messages.po | 356 +-
superset/translations/it/LC_MESSAGES/messages.po | 356 +-
superset/translations/ja/LC_MESSAGES/messages.po | 355 +-
superset/translations/ko/LC_MESSAGES/messages.po | 355 +-
superset/translations/lv/LC_MESSAGES/messages.po | 357 +-
superset/translations/messages.pot | 327 +-
superset/translations/mi/LC_MESSAGES/messages.po | 356 +-
superset/translations/nl/LC_MESSAGES/messages.po | 356 +-
superset/translations/pl/LC_MESSAGES/messages.po | 356 +-
superset/translations/pt/LC_MESSAGES/messages.po | 356 +-
.../translations/pt_BR/LC_MESSAGES/messages.po | 356 +-
superset/translations/ro/LC_MESSAGES/messages.po | 357 +-
superset/translations/ru/LC_MESSAGES/messages.po | 357 +-
superset/translations/sk/LC_MESSAGES/messages.po | 357 +-
superset/translations/sl/LC_MESSAGES/messages.po | 358 +-
superset/translations/sr/LC_MESSAGES/messages.po | 357 +-
.../translations/sr_Latn/LC_MESSAGES/messages.po | 357 +-
superset/translations/ta/LC_MESSAGES/messages.po | 356 +-
superset/translations/th/LC_MESSAGES/messages.po | 355 +-
superset/translations/tr/LC_MESSAGES/messages.po | 355 +-
superset/translations/uk/LC_MESSAGES/messages.po | 358 +-
superset/translations/zh/LC_MESSAGES/messages.po | 355 +-
.../translations/zh_TW/LC_MESSAGES/messages.po | 355 +-
superset/utils/core.py | 12 +-
superset/utils/date_parser.py | 36 +-
superset/utils/geographic.py | 105 +
superset/utils/geographic_regions.py | 385 ++
superset/utils/geographic_world.py | 205 +
.../utils/pandas_postprocessing/contribution.py | 24 +-
superset/utils/pandas_postprocessing/histogram.py | 8 +-
superset/utils/pandas_postprocessing/utils.py | 25 +-
superset/versioning/api_helpers.py | 14 +-
superset/versioning/baseline/listener.py | 6 +-
superset/versioning/changes/listener.py | 21 +-
superset/versioning/metrics.py | 6 +-
superset/versioning/restore.py | 146 +-
superset/versioning/savepoints.py | 149 +
superset/versioning/unit_of_work.py | 113 +-
superset/views/api.py | 4 +-
superset/views/base.py | 1 +
superset/views/dashboard/mixin.py | 1 +
.../charts/semantic_metadata_authz_tests.py | 640 +++
.../deletion_retention/force_purge_tests.py | 11 +-
.../deletion_retention/purge_tests.py | 210 +-
tests/integration_tests/reports/alert_tests.py | 40 +-
tests/integration_tests/reports/api_tests.py | 342 +-
tests/integration_tests/reports/config_tests.py | 104 +
tests/integration_tests/tasks/api_tests.py | 128 +-
.../versioning/retention_prune_tests.py | 65 +
.../charts/data/test_time_range_validation.py | 48 +
.../charts/semantic_view_chart_filter_test.py | 14 +-
.../commands/dashboard/permalink_create_test.py | 131 +
.../deletion_retention/test_purge_chart_detach.py | 301 ++
.../deletion_retention/test_purge_policy.py | 1632 +++++-
tests/unit_tests/commands/report/alert_test.py | 21 +-
tests/unit_tests/commands/report/create_test.py | 1 +
tests/unit_tests/commands/report/execute_test.py | 80 +-
tests/unit_tests/commands/report/executor_test.py | 621 +++
tests/unit_tests/commands/report/run_as_test.py | 1340 +++++
.../commands/report/update_config_test.py | 223 +
tests/unit_tests/commands/report/update_test.py | 45 +
tests/unit_tests/commands/security/reset_test.py | 62 +
.../common/test_form_data_query_context.py | 296 +-
.../common/test_query_context_processor.py | 152 +-
tests/unit_tests/dao/key_value_test.py | 42 +
.../dashboards/semantic_view_access_test.py | 186 +
.../dashboards/test_excel_export_sync_budget.py | 47 +
.../{charts => dashboards}/test_export_api.py | 33 +-
tests/unit_tests/datasets/dao/dao_tests.py | 65 +
tests/unit_tests/datasets/schema_tests.py | 52 +
tests/unit_tests/db_engine_specs/test_bigquery.py | 86 +-
.../db_engine_specs/test_impala_pending.py | 303 ++
.../distributed_lock/distributed_lock_tests.py | 6 +-
.../mcp_service/chart/query_result_fixtures.py | 165 +
...test_axis_offset_and_spatial_query_contracts.py | 474 ++
.../mcp_service/chart/test_bubble_chart.py | 10 +-
.../mcp_service/chart/test_chart_helpers.py | 776 ++-
.../chart/test_chart_plugin_contract.py | 318 +-
.../mcp_service/chart/test_chart_schemas.py | 244 +
.../mcp_service/chart/test_chart_utils.py | 895 ++++
tests/unit_tests/mcp_service/chart/test_compile.py | 496 +-
.../mcp_service/chart/test_gantt_chart.py | 35 +-
.../mcp_service/chart/test_geographic_chart.py | 2199 ++++++++
.../chart/test_histogram_boxplot_charts.py | 8 +-
..._metric_aggregation_and_comparison_contracts.py | 379 ++
...ative_form_data_and_dataset_rebind_contracts.py | 1326 +++++
.../mcp_service/chart/test_new_chart_types.py | 4 +-
.../mcp_service/chart/test_preview_utils.py | 337 +-
.../mcp_service/chart/test_query_result.py | 2027 ++++++-
.../unit_tests/mcp_service/chart/test_registry.py | 33 +-
.../mcp_service/chart/test_response_preflight.py | 486 ++
.../test_review_query_and_preview_regressions.py | 438 ++
.../mcp_service/chart/test_sunburst_chart.py | 5579 ++++++++++++++++++++
.../mcp_service/chart/test_treemap_completeness.py | 88 +-
.../mcp_service/chart/tool/test_generate_chart.py | 95 +
.../mcp_service/chart/tool/test_get_chart_data.py | 2285 +++++++-
.../chart/tool/test_get_chart_preview.py | 417 +-
.../mcp_service/chart/tool/test_get_chart_sql.py | 332 +-
.../chart/tool/test_saved_chart_datasource.py | 422 ++
.../mcp_service/chart/tool/test_update_chart.py | 834 ++-
.../chart/tool/test_update_chart_preview.py | 318 +-
.../validation/test_column_name_normalization.py | 21 +
.../chart/validation/test_dataset_validator.py | 421 +-
.../common/test_time_range_validation.py | 82 +-
.../dashboard/test_dashboard_schemas.py | 55 +
.../dashboard/tool/test_apply_dashboard_filters.py | 69 +
.../dashboard/tool/test_dashboard_generation.py | 1 +
.../dashboard/tool/test_delete_dashboard.py | 1 +
.../dashboard/tool/test_manage_dashboard_owners.py | 1 +
.../dashboard/tool/test_manage_dashboard_roles.py | 2 +
.../dashboard/tool/test_manage_native_filters.py | 335 ++
.../tool/test_managed_dashboard_refusal.py | 353 ++
.../dashboard/tool/test_restore_dashboard.py | 1 +
.../mcp_service/dataset/tool/test_query_dataset.py | 954 +++-
.../dataset/tool/test_sql_dataset_guidance.py | 181 +
.../explore/tool/test_generate_explore_link.py | 476 +-
.../mcp_service/native_tool_inventory.json | 1289 +++++
.../semantic_layer/tool/test_get_table.py | 1009 +++-
.../mcp_service/test_chart_tool_inventory.py | 2 +-
.../unit_tests/mcp_service/test_dashboard_scope.py | 11 +-
tests/unit_tests/mcp_service/test_mcp_server.py | 69 +
tests/unit_tests/mcp_service/test_middleware.py | 194 +-
.../mcp_service/test_middleware_logging.py | 138 +-
.../mcp_service/test_native_tool_surface.py | 1144 ++++
.../test_tool_description_constraints.py | 44 +-
.../unit_tests/mcp_service/test_tool_inventory.py | 38 +-
.../mcp_service/test_tool_search_transform.py | 10 +-
.../mcp_service/utils/test_cache_utils.py | 32 +-
.../mcp_service/utils/test_response_utils.py | 246 +
.../mcp_service/utils/test_serialization.py | 68 +
.../test_add_run_as_and_report_config.py | 274 +
tests/unit_tests/models/slice_test.py | 66 +
.../unit_tests/models/test_certification_mixin.py | 76 +
tests/unit_tests/pandas_postprocessing/test_cum.py | 39 +
.../pandas_postprocessing/test_geography.py | 41 +
.../pandas_postprocessing/test_histogram.py | 32 +-
.../unit_tests/pandas_postprocessing/test_utils.py | 88 +
tests/unit_tests/queries/query_object_test.py | 22 +-
tests/unit_tests/reports/api_test.py | 33 +
tests/unit_tests/reports/config_api_test.py | 135 +
tests/unit_tests/reports/config_dao_test.py | 359 ++
.../reports/notifications/email_tests.py | 9 +-
tests/unit_tests/reports/schemas_test.py | 86 +
tests/unit_tests/reports/utils_test.py | 222 +
.../scripts/translations/backfill_po_test.py | 226 +-
.../scripts/translations/check_pot_drift_test.py | 215 +-
tests/unit_tests/security/manager_test.py | 493 +-
.../unit_tests/security/semantic_guest_rls_test.py | 18 +-
.../security/test_guest_token_dataset_allowlist.py | 6 +-
.../security/typed_datasource_access_test.py | 381 ++
tests/unit_tests/semantic_layers/api_test.py | 77 +
.../semantic_layers/grain_validation_test.py | 127 +
.../semantic_layers/integer_precision_test.py | 366 ++
.../semantic_layers/layer_list_scope_test.py | 215 +
tests/unit_tests/semantic_layers/mapper_test.py | 308 +-
.../semantic_layers/metadata_contract_test.py | 174 +
tests/unit_tests/semantic_layers/models_test.py | 360 +-
.../semantic_layers/result_completeness_test.py | 86 +
.../semantic_layers/simple_cache_clear_test.py | 650 +++
.../semantic_layers/values_endpoint_test.py | 257 +-
tests/unit_tests/sql/parse_tests.py | 17 +
tests/unit_tests/subjects/test_raise_for_access.py | 12 +-
tests/unit_tests/tasks/test_async_queries.py | 37 +-
tests/unit_tests/tasks/test_deletion_retention.py | 905 +++-
.../tasks/test_version_history_retention.py | 659 ++-
tests/unit_tests/utils/core_override_user_test.py | 71 +
tests/unit_tests/utils/date_parser_tests.py | 47 +
.../unit_tests/utils/geographic_world_test.py | 31 +-
tests/unit_tests/versioning/test_listener.py | 34 +-
tests/unit_tests/versioning/test_restore.py | 54 +
.../versioning/test_restore_datasource_race.py | 185 +
.../versioning/test_restore_missing_datasource.py | 299 ++
.../unit_tests/versioning/test_runtime_capture.py | 380 ++
505 files changed, 86259 insertions(+), 6449 deletions(-)
create mode 100644 docs/developer_docs/semantic-layer-cache-clear.md
create mode 100644 docs/developer_docs/semantic-result-completeness.md
create mode 100644 docs/static/img/logos/douroeci.png
create mode 100644 superset-core/src/superset_core/semantic_layers/errors.py
create mode 100644 superset-core/tests/semantic_layers/test_errors.py
copy superset/mcp_service/common/__init__.py =>
superset-core/tests/semantic_layers/test_view.py (79%)
create mode 100644
superset-frontend/packages/superset-core/src/theme/GlobalStyles.test.tsx
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
create mode 100644
superset-frontend/src/chartCustomizations/components/DynamicGroupBy/columnAllowlist.test.ts
create mode 100644
superset-frontend/src/chartCustomizations/components/DynamicGroupBy/columnAllowlist.ts
create mode 100644 superset-frontend/src/dashboard/actions/datasources.test.ts
create mode 100644
superset-frontend/src/dashboard/components/nativeFilters/FiltersConfigModal/FiltersConfigForm/GroupByColumnAllowlist.test.tsx
create mode 100644
superset-frontend/src/explore/components/controls/MapViewControl/ExtentTag.test.tsx
create mode 100644
superset-frontend/src/explore/components/controls/SemanticRequestView.test.tsx
create mode 100644
superset-frontend/src/explore/components/controls/SemanticRequestView.tsx
create mode 100644
superset-frontend/src/features/alerts/ReportConfigurationModal.test.tsx
create mode 100644
superset-frontend/src/features/alerts/ReportConfigurationModal.tsx
create mode 100644
superset-frontend/src/features/alerts/hooks/useReportConfiguration.ts
create mode 100644
superset-frontend/src/hooks/apiResources/datasets.cache.test.ts
create mode 100644 superset-frontend/src/middleware/asyncQueryError.ts
create mode 100644 superset/commands/report/update_config.py
create mode 100644 superset/mcp_service/chart/plugins/geographic.py
create mode 100644 superset/mcp_service/chart/plugins/sunburst.py
create mode 100644 superset/mcp_service/chart/response_preflight.py
create mode 100644 superset/mcp_service/chart/sunburst.py
create mode 100644
superset/migrations/versions/2026-10-05_12-00_e4a7c2b9d1f3_add_run_as_and_report_config.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/reports/utils.py
create mode 100644 superset/semantic_layers/completeness.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 superset/versioning/savepoints.py
create mode 100644
tests/integration_tests/charts/semantic_metadata_authz_tests.py
create mode 100644 tests/integration_tests/reports/config_tests.py
create mode 100644 tests/unit_tests/charts/data/test_time_range_validation.py
create mode 100644 tests/unit_tests/commands/dashboard/permalink_create_test.py
create mode 100644
tests/unit_tests/commands/deletion_retention/test_purge_chart_detach.py
create mode 100644 tests/unit_tests/commands/report/executor_test.py
create mode 100644 tests/unit_tests/commands/report/run_as_test.py
create mode 100644 tests/unit_tests/commands/report/update_config_test.py
create mode 100644 tests/unit_tests/commands/security/reset_test.py
copy tests/unit_tests/{charts => dashboards}/test_export_api.py (51%)
create mode 100644 tests/unit_tests/db_engine_specs/test_impala_pending.py
create mode 100644 tests/unit_tests/mcp_service/chart/query_result_fixtures.py
create mode 100644
tests/unit_tests/mcp_service/chart/test_axis_offset_and_spatial_query_contracts.py
create mode 100644 tests/unit_tests/mcp_service/chart/test_geographic_chart.py
create mode 100644
tests/unit_tests/mcp_service/chart/test_metric_aggregation_and_comparison_contracts.py
create mode 100644
tests/unit_tests/mcp_service/chart/test_native_form_data_and_dataset_rebind_contracts.py
create mode 100644
tests/unit_tests/mcp_service/chart/test_response_preflight.py
create mode 100644
tests/unit_tests/mcp_service/chart/test_review_query_and_preview_regressions.py
create mode 100644 tests/unit_tests/mcp_service/chart/test_sunburst_chart.py
create mode 100644
tests/unit_tests/mcp_service/chart/tool/test_saved_chart_datasource.py
create mode 100644
tests/unit_tests/mcp_service/dashboard/tool/test_managed_dashboard_refusal.py
create mode 100644
tests/unit_tests/mcp_service/dataset/tool/test_sql_dataset_guidance.py
create mode 100644 tests/unit_tests/mcp_service/native_tool_inventory.json
create mode 100644 tests/unit_tests/mcp_service/test_native_tool_surface.py
create mode 100644
tests/unit_tests/migrations/test_add_run_as_and_report_config.py
create mode 100644 tests/unit_tests/models/test_certification_mixin.py
create mode 100644 tests/unit_tests/reports/config_api_test.py
create mode 100644 tests/unit_tests/reports/config_dao_test.py
create mode 100644 tests/unit_tests/reports/utils_test.py
create mode 100644 tests/unit_tests/security/typed_datasource_access_test.py
create mode 100644 tests/unit_tests/semantic_layers/grain_validation_test.py
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/metadata_contract_test.py
create mode 100644 tests/unit_tests/semantic_layers/result_completeness_test.py
create mode 100644 tests/unit_tests/semantic_layers/simple_cache_clear_test.py
create mode 100644 tests/unit_tests/utils/core_override_user_test.py
copy superset/mcp_service/sql_lab/tool/__init__.py =>
tests/unit_tests/utils/geographic_world_test.py (55%)
create mode 100644 tests/unit_tests/versioning/test_restore_datasource_race.py
create mode 100644
tests/unit_tests/versioning/test_restore_missing_datasource.py