You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@superset.apache.org by jl...@apache.org on 2026/08/27 20:02:37 UTC
(superset) branch fix-bar-chart-label-placement updated (8ca0bbf54b7 -> 7f0f2c1faab)
This is an automated email from the ASF dual-hosted git repository.
sadpandajoe pushed a change to branch fix-bar-chart-label-placement
in repository https://gitbox.apache.org/repos/asf/superset.git
from 8ca0bbf54b7 fix(echarts): suppress Auto bar value labels for illegibly small segments
add b5fe00b407d test(frontend): shrink flaky/misplaced recently-archived e2e coverage to Jest unit tests (#43264)
add bcfb4346f6b fix(mcp): honor use_cache and cache_timeout in get_chart_data (#43349)
add 271564cb0da feat(config): add EXTRA_PANDAS_POSTPROCESSING_OPS extension point (#43337)
add 42ba2a4433f fix(reports): humanize day-of-month + day-of-week crontabs as OR (#43307)
add 7441ce90aea fix(charts): align grain-less time comparisons safely (#43315)
add 01b1d58ac97 fix(plugin-chart-echarts): restore tooltips for metrics labelled like⦠(#43369)
add 18a36d04c72 fix(mcp): preserve user-authored result values (#43202)
add 18fc2c62286 fix(sqllab): stop copying a permalink when opening a saved query (#43147)
add 27ea5de44a0 fix(i18n-es): correct case/number collapse in the semantic-layer labels (#43311)
add 22396d504a5 fix(ux): use title case for button labels (#40048)
add f7d505e1fd0 fix(listview): stop card clicks creating a duplicate history entry (#43310)
add fb53761ec8a chore(deps-dev): bump baseline-browser-mapping from 2.11.13 to 2.11.14 in /superset-frontend (#43381)
add 87743ef3f83 chore(deps): bump dompurify from 3.4.12 to 3.4.13 in /superset-frontend (#43380)
add 14408eb3db9 chore(deps-dev): bump the storybook group in /superset-frontend with 5 updates (#43379)
add 132340b6529 chore(deps): bump astral-sh/setup-uv from 10.0.0 to 10.0.1 (#43378)
add 6e22050b509 chore(deps): bump the storybook group in /docs with 2 updates (#43377)
add 65910abf21f fix(sqllab): disable Save dataset until the query runs successfully (#43330)
add e45dd2d3f16 ci: pull CI service images from GHCR mirror (fork-safe) [depends on #40880] (#40882)
add 05842a6350f feat(metrics): add MEDIAN/STDDEV_SAMP/VAR_SAMP as system-wide aggregates (#42895)
add a05a0999877 fix(embedded): block custom SQL injection in guest user chart payloads (#43111)
add d422f5b4b68 fix: last date label hidden on time series x-axis (#39899) (#42299)
add fd7095df9a5 fix(explore): align viz type gallery thumbnails and Featured tag (#43373)
add 03eac279e5f fix(explore): exclude permalink_key from chart URL params (#43354)
add edda9d1bbbc fix(frontend): tighten SQL Lab autorun scoping and HTML-rendering defaults (#43398)
add aee98b527d1 fix(charts): escape untrusted strings before rendering into chart tooltips and popups (#43397)
add 2b6044b624a fix: tighten SSRF validation, executor resolution, and cache scoping across reports/thumbnails (#43395)
add 04017f39568 fix(sqllab): re-validate access against rendered SQL and tighten cache/permalink scoping (#43394)
add 65893113fed fix(import): tighten ownership and validation checks across asset importers (#43393)
add 9781254363f fix(export): escape formula-triggering values consistently and bound post-processing inputs (#43396)
add 5f3e34908cc fix(charts): surface blocking alerts/reports when archiving a chart (#43402)
add 5812c0eab56 fix(mcp): fail closed when MCP_AUTH_FACTORY raises (#43329)
add 09bd8c98de2 feat(chart): enable cross-filter on temporal x-axis (bar/label click) (#42792)
add f2610e9dca0 fix(sqllab): default PostgreSQL port to 5432 in the dynamic connection form (#43351)
add 9f505eb0cbb fix(examples): replace deprecated timeseries_limit_metric with series_limit_metric (#43422)
add c3ed8b312d5 fix(security): surface extra_editors in dashboard/chart lists (#43392)
add 5ffb72151e8 chore(deps): bump react-error-boundary from 6.1.2 to 6.1.3 in /superset-frontend (#43451)
add 90a3d930022 chore(deps): bump dayjs from 1.11.21 to 1.11.22 in /superset-frontend (#43450)
add 8fa48d73f69 chore(deps-dev): bump concurrently from 10.0.4 to 10.0.5 in /superset-frontend (#43449)
add af859717a73 chore: remove two stale codecov ignore paths (#43438)
add e7756aeef94 chore(deps): bump immer from 11.1.16 to 11.1.17 in /superset-frontend (#43448)
add 7196ce8a0c8 chore(deps): bump docker/setup-buildx-action from 4.2.0 to 4.3.0 (#43445)
add dcac129b514 chore(deps): bump js-yaml from 5.2.3 to 5.3.0 in /docs (#43442)
add 4623d9219af fix: update in the wild link on community page (#43403)
add 8a323241846 fix: add missing ownership checks to tag, report-log, and dataset-schema endpoints (#43390)
add 7f1b41444c8 fix: add missing access checks to semantic-layer and theme endpoints (#43389)
add 15b98aa6da0 fix(plugin-chart-echarts): apply contribution before rename with time comparison (#43384)
add 3f10d8b1ccb fix(versioning): suppress automatic chart normalization changes (#43350)
add 649c062825a chore(deps): bump baseline-browser-mapping from 2.11.13 to 2.11.15 in /docs (#43444)
add f3142e7b15b fix(tags): fix broken import in daos/tag.py (#43466)
add 2c02965f2bf chore(deps): bump @swc/core from 1.15.47 to 1.16.0 in /docs (#43443)
add e450acf1c70 chore(deps): bump sqlglot from 30.16.0 to 30.17.0 (#43418)
add a392e8b1024 chore(deps): bump marshmallow from 4.3.0 to 4.3.1 (#43417)
add db539288acb chore(deps-dev): update teradatasql requirement from >=20.0.0.64 to >=20.0.0.65 (#43416)
add ceb75b93503 chore(deps): bump sqlalchemy from 2.0.51 to 2.0.52 (#43415)
add 8591f52cedf chore(deps): bump pyarrow from 25.0.0 to 25.0.1 (#43414)
add f1f63478852 chore(deps-dev): bump prophet from 1.3.0 to 1.4.0 (#43412)
add 1bde62f9973 chore(deps-dev): bump gevent from 26.7.0 to 26.8.0 (#43411)
add 6eced8e9191 fix(roles): let the permissions dropdown size to its content (#43196)
add dc436c76f7a fix(datasets): keep a metric's warning text when editing from Explore (#43177)
add c980b3a3615 fix(mcp): tighten auth and request validation edge cases (#43388)
add bf5f3a9e6be test(dashboard): migrate drill-to-detail E2E from Cypress to Playwright (#41437)
add b0962ba5edb fix(plugin/chart/parallel-coordinate): prevent frontend crash with empty/undefined metrics when moving between pages quickly (#42392)
add 6ab21b381a6 fix(mysql): resolve wire-protocol column types and mutate rows from immutable results (#42821)
add a8a8b51afb8 fix(plugin-chart-table): guard row-indexed comparison-color lookups against undefined entries (#43139)
add 27ec80c07b0 fix(explore): clear stale custom time-shift date error (#43146)
add 31f06c0ee6d fix(dataset): correct Hours Offset filter bounds and grain-truncation order (#43173)
add c635d0754fc fix(explore): honor column Label in filter search and pill (#43404)
add 24b95f9ca7e fix(gsheets): correctly format Date-column filter literals (#43355)
add 7dbf71a3791 fix(query-object): reject malformed ad-hoc metrics (#43353)
add 94855e96262 fix(frontend): ignore stale list responses (#43306)
add ca3d7670b77 fix(ci): restore scheduled CI checks (#43266)
add 52571a5b8b1 chore(deps): bump the rjsf group in /superset-frontend with 3 updates (#43440)
add dfd057b9201 chore(deps-dev): update clickhouse-connect requirement from <2.0,>=1.6.0 to >=1.7.1,<2.0 (#43419)
add 7e3d092ac40 fix(soft-delete): name the recovery location in the archive confirmation (#43401)
add 107204a1fc6 fix(sqllab): allow SQL Lab query owners to create charts without all_datasource_access (#42479)
add 8b792ab6603 chore(deps-dev): bump @swc/core from 1.15.47 to 1.16.0 in /superset-frontend (#43446)
add a9d54a00379 fix(soft-delete): card-view chart delete shows the archive dialog (#43469)
add f83fb7c0e07 fix(archived-list): use the semantic-layers-aware label for the dataset type (#43465)
add bd7b7392122 chore: remove obsolete pandas/SQLAlchemy version compat shim (#43497)
add 6c2fef29cb7 feat(snowflake): Add support for OAuth 2.0 authentication (#36856)
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 7f0f2c1faab Merge remote-tracking branch 'origin/master' into fix-bar-chart-label-placement
No new revisions were added by this update.
Summary of changes:
.codecov.yml | 2 -
.github/dependabot.yml | 26 +
.github/workflows/bump-python-package.yml | 2 +-
.github/workflows/frontend-bundle-size-nightly.yml | 1 +
.github/workflows/mirror-service-images.yml | 2 +-
.github/workflows/superset-docs-deploy.yml | 4 +-
.github/workflows/superset-docs-verify.yml | 2 +-
.github/workflows/superset-e2e.yml | 8 +-
.../workflows/superset-python-integrationtest.yml | 12 +-
.github/workflows/superset-python-presto-hive.yml | 10 +-
.github/workflows/superset-python-unittest.yml | 15 +-
UPDATING.md | 71 +-
docs/admin_docs/configuration/mcp-server.mdx | 43 +-
docs/data/countries.json | 1 +
docs/docs/using-superset/recently-archived.mdx | 8 +-
docs/docs/using-superset/version-history.mdx | 24 +-
docs/package.json | 16 +-
docs/sip/median-stddev-variance-aggregates.md | 236 ++++++
docs/src/pages/community.tsx | 2 +-
docs/static/feature-flags.json | 30 +-
docs/yarn.lock | 500 +++++------
pyproject.toml | 29 +-
requirements/base.in | 2 +-
requirements/base.txt | 8 +-
requirements/development.txt | 20 +-
scripts/change_detector.py | 1 +
.../src/superset_core/semantic_layers}/__init__.py | 2 +-
superset-frontend/oxlint.json | 2 +-
superset-frontend/package-lock.json | 942 ++++++++-------------
superset-frontend/package.json | 38 +-
.../src/components/MetricOption.tsx | 16 +-
.../src/sections/timeComparison.tsx | 6 +
.../src/utils/getTotalsMetrics.test.ts | 29 +-
.../src/utils/getTotalsMetrics.ts | 42 +-
.../test/components/MetricOption.test.tsx | 23 +
.../packages/superset-ui-core/package.json | 6 +-
.../src/components/Modal/Modal.test.tsx | 153 ++++
.../src/components/Modal/Modal.tsx | 25 +-
.../src/components/Select/types.ts | 3 +
.../factories/createSmartNumberFormatter.ts | 5 +-
.../superset-ui-core/src/query/types/Metric.ts | 5 +-
.../superset-ui-core/src/time-format/index.ts | 1 +
.../superset-ui-core/src/utils/featureFlags.ts | 1 +
.../superset-ui-core/src/utils/html.test.tsx | 37 +
.../packages/superset-ui-core/src/utils/html.tsx | 27 +-
.../factories/createSmartNumberFormatter.test.ts | 6 +
.../playwright/components/core/Menu.ts | 71 +-
.../playwright/components/modals/ConfirmDialog.ts | 6 +-
.../components/modals/DrillDetailModal.ts | 133 +++
.../playwright/components/modals/index.ts | 1 +
.../playwright/pages/DashboardPage.ts | 121 +++
.../dashboard/dashboard-drill-to-detail.spec.ts | 747 ++++++++++++++++
.../tests/recently-archived/delete-modal.spec.ts | 58 --
.../recently-archived/recently-archived.spec.ts | 57 +-
.../tests/version-history/activity-log.spec.ts | 127 ++-
.../plugin-chart-ag-grid-table/src/buildQuery.ts | 11 +-
.../src/controlPanel.tsx | 14 +-
.../src/renderers/NumericCellRenderer.tsx | 12 +-
.../test/NumericCellRenderer.test.tsx | 59 ++
.../test/buildQuery.test.ts | 28 +-
.../plugins/plugin-chart-calendar/src/utils.ts | 8 +
.../src/vendor/cal-heatmap.ts | 9 +-
.../plugin-chart-calendar/test/cal-heatmap.test.ts | 30 +
.../plugin-chart-calendar/test/utils.test.ts | 25 +-
.../src/util/layerUtil.tsx | 27 +-
.../test/util/layerUtil.test.ts | 47 +-
.../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 | 23 +-
.../src/MixedTimeseries/types.ts | 15 +
.../plugin-chart-echarts/src/Radar/utils.ts | 16 +-
.../src/Timeseries/EchartsTimeseries.test.tsx | 736 ++++++++++++++--
.../src/Timeseries/EchartsTimeseries.tsx | 205 ++++-
.../src/Timeseries/buildQuery.ts | 7 +-
.../src/Timeseries/constants.ts | 1 +
.../src/Timeseries/transformProps.ts | 28 +-
.../src/Timeseries/transformers.ts | 31 +-
.../plugin-chart-echarts/src/Timeseries/types.ts | 12 +
.../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 | 30 +
.../src/utils/eChartOptionsSchema.ts | 62 +-
.../plugin-chart-echarts/src/utils/forecast.ts | 15 +
.../src/utils/safeEChartOptionsParser.test.ts | 161 ++++
.../test/MixedTimeseries/controlPanel.test.ts | 109 +++
.../test/MixedTimeseries/transformProps.test.ts | 160 +++-
.../plugin-chart-echarts/test/Radar/utils.test.ts | 38 +
.../test/Timeseries/EchartsTimeseries.test.tsx | 426 +++++++++-
.../test/Timeseries/buildQuery.test.ts | 22 +
.../test/Timeseries/transformProps.test.ts | 237 ++++++
.../test/Timeseries/transformers.test.ts | 8 +-
.../test/Waterfall/transformProps.test.ts | 53 ++
.../test/utils/forecast.test.ts | 33 +
.../src/transformProps.ts | 2 +-
.../test/transformProps.test.ts} | 31 +-
.../src/plugin/transformProps.ts | 19 +-
.../test/plugin/transformProps.test.ts | 149 ++++
.../test/plugin/utilities.test.ts | 19 +
.../plugins/plugin-chart-table/src/TableChart.tsx | 49 +-
.../plugins/plugin-chart-table/src/buildQuery.ts | 5 +-
.../plugin-chart-table/src/controlPanel.tsx | 14 +-
.../plugin-chart-table/test/TableChart.test.tsx | 77 ++
.../plugin-chart-table/test/buildQuery.test.ts | 27 +-
.../plugins/plugin-chart-world-map/src/WorldMap.ts | 25 +-
.../plugin-chart-world-map/test/WorldMap.test.ts | 27 +
.../src/components/Tooltip.test.tsx | 64 ++
.../preset-chart-deckgl/src/components/Tooltip.tsx | 26 +-
superset-frontend/src/SqlLab/actions/sqlLab.ts | 12 +-
.../src/SqlLab/components/ResultSet/index.tsx | 4 +-
.../SaveDatasetActionButton.test.tsx | 26 +-
.../components/SaveDatasetActionButton/index.tsx | 9 +-
.../SqlLab/components/SaveQuery/SaveQuery.test.tsx | 1 +
.../src/SqlLab/components/SaveQuery/index.tsx | 3 +
.../SqlLab/components/SqlEditor/SqlEditor.test.tsx | 42 +
.../src/SqlLab/components/SqlEditor/index.tsx | 10 +-
.../src/SqlLab/reducers/sqlLab.test.ts | 47 +
superset-frontend/src/SqlLab/reducers/sqlLab.ts | 23 +-
.../DatasourceModal/DatasourceModal.test.tsx | 8 +-
.../Datasource/DatasourceModal/index.tsx | 2 +-
.../DatasourceEditor/DatasourceEditor.tsx | 69 +-
.../tests/hydrateMetricExtra.test.ts | 96 +++
.../src/components/FilterableTable/index.tsx | 2 +-
.../src/components/FilterableTable/utils.test.tsx | 29 +
.../src/components/FilterableTable/utils.tsx | 6 +-
.../test/testHelpers.tsx => src/constants.test.ts} | 26 +-
superset-frontend/src/constants.ts | 1 +
.../CrossFilters/ScopingModal/ScopingTreePanel.tsx | 13 +-
.../src/dashboard/util/permissionUtils.test.ts | 15 +
.../src/dashboard/util/permissionUtils.ts | 7 +-
.../src/explore/actions/hydrateExplore.test.ts | 76 +-
.../src/explore/actions/hydrateExplore.ts | 34 +-
.../src/explore/actions/saveModalActions.test.ts | 248 +++++-
.../src/explore/actions/saveModalActions.ts | 97 ++-
.../components/useGridResultTable.tsx | 6 +-
.../AnnotationLayer.test.tsx | 8 +-
.../AnnotationLayerControl/AnnotationLayer.tsx | 2 +-
.../ColorBreakpointOption.test.tsx | 25 +
.../ColorBreakpointOption.tsx | 17 +-
.../DatasourceControl/DatasourceControl.test.tsx | 6 +-
.../DndAdhocFilterOption.tsx | 2 +-
.../DndFilterSelect.test.tsx | 31 +-
.../FilterControl/AdhocFilter/AdhocFilter.test.ts | 60 ++
.../controls/FilterControl/AdhocFilter/index.ts | 16 +-
.../AdhocFilterEditPopover.test.tsx | 23 +
...AdhocFilterEditPopoverSimpleTabContent.test.tsx | 37 +
.../index.tsx | 4 +
.../AdhocFilterOption/AdhocFilterOption.test.tsx | 18 +
.../FilterControl/AdhocFilterOption/index.tsx | 2 +-
.../controls/FilterControl/utils/translateToSQL.ts | 34 +-
.../FixedOrMetricControl.test.tsx | 9 +-
.../controls/MetricControl/AdhocMetric.test.ts | 39 +
.../controls/MetricControl/AdhocMetric.ts | 13 +
.../MetricControl/AdhocMetricEditPopover/index.tsx | 3 +-
.../VizTypeControl/VizTypeControl.test.tsx | 18 +
.../controls/VizTypeControl/VizTypeGallery.tsx | 60 +-
.../useExploreAdditionalActionsMenu/index.tsx | 43 +-
.../useExploreAdditionalActionsMenu.test.tsx | 40 +
superset-frontend/src/explore/constants.ts | 13 +-
.../src/explore/reducers/exploreReducer.test.ts | 75 +-
.../src/features/alerts/AlertReportModal.tsx | 14 +-
.../src/features/charts/ChartCard.test.tsx | 167 ++++
.../src/features/charts/ChartCard.tsx | 48 +-
.../src/features/dashboards/DashboardCard.test.tsx | 51 +-
.../src/features/dashboards/DashboardCard.tsx | 12 +-
.../databases/DatabaseModal/ExtraOptions.tsx | 7 +-
.../databases/DatabaseModal/index.test.tsx | 3 +-
.../UploadDataModel/UploadDataModal.test.tsx | 12 +-
.../AddDataset/DatasetPanel/DatasetPanel.test.tsx | 9 +-
.../DatasetPanel/DatasetPanelWrapper.test.tsx | 9 +-
.../reports/ReportModal/ReportModal.test.tsx | 21 +-
.../src/features/reports/ReportModal/index.tsx | 22 +-
.../src/features/roles/RoleFormItems.tsx | 6 +
.../features/versionHistory/normalization.test.ts | 158 ++++
.../src/features/versionHistory/normalization.ts | 197 +++++
.../src/features/versionHistory/reducer.test.ts | 56 ++
.../src/features/versionHistory/reducer.ts | 133 ++-
.../versionHistory/sessionLogMiddleware.test.ts | 46 +-
.../versionHistory/sessionLogMiddleware.ts | 85 +-
.../src/features/versionHistory/types.ts | 41 +
.../src/pages/ArchivedList/ArchivedList.test.tsx | 137 +++
superset-frontend/src/pages/ArchivedList/index.tsx | 19 +-
superset-frontend/src/pages/Chart/Chart.test.tsx | 48 +-
superset-frontend/src/pages/Chart/index.tsx | 10 +
.../src/pages/ChartList/ChartList.test.tsx | 254 ++++++
superset-frontend/src/pages/ChartList/index.tsx | 224 +++--
.../src/pages/DashboardList/index.tsx | 8 +-
.../DatabaseList.semanticLayerDelete.test.tsx | 425 ++++++++++
superset-frontend/src/pages/DatabaseList/index.tsx | 173 +++-
superset-frontend/src/pages/Home/Home.test.tsx | 2 +-
.../pages/SavedQueryList/SavedQueryList.test.tsx | 141 ++-
.../src/pages/SavedQueryList/index.tsx | 22 +-
.../src/pages/SqlLab/LocationContext.test.tsx | 66 ++
.../src/pages/SqlLab/LocationContext.tsx | 6 +-
superset-frontend/src/types/Chart.ts | 2 +
.../src/utils/downloadAsImage.test.ts | 234 +++++
superset-frontend/src/utils/downloadAsImage.tsx | 90 +-
superset-frontend/src/utils/softDeleteCopy.test.ts | 18 +-
superset-frontend/src/utils/softDeleteCopy.ts | 21 +-
superset-frontend/src/views/CRUD/hooks.test.tsx | 156 ++++
superset-frontend/src/views/CRUD/hooks.ts | 31 +-
superset-frontend/src/views/CRUD/types.ts | 2 +
superset-frontend/src/views/CRUD/utils.test.tsx | 60 ++
superset-frontend/src/views/CRUD/utils.tsx | 18 +-
.../components/LeftCell/LeftCell.test.tsx | 55 ++
.../TimeTable/components/LeftCell/LeftCell.tsx | 19 +-
superset-websocket/package-lock.json | 626 ++++++--------
superset-websocket/package.json | 4 +-
superset-websocket/spec/index.test.ts | 36 +
superset-websocket/src/index.ts | 14 +-
superset/__init__.py | 10 -
superset/charts/api.py | 44 +-
superset/charts/data/api.py | 60 +-
superset/charts/schemas.py | 78 +-
superset/commands/chart/delete.py | 60 +-
superset/commands/chart/update.py | 25 +-
.../commands/dashboard/importers/dispatcher.py | 12 +-
superset/commands/database/exceptions.py | 36 -
superset/commands/database/importers/v1/utils.py | 82 +-
superset/commands/dataset/importers/dispatcher.py | 12 +-
superset/commands/dataset/importers/v1/utils.py | 34 +-
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/importers/v1/utils.py | 85 +-
superset/commands/query/importers/v1/utils.py | 42 +-
superset/commands/report/create.py | 2 +-
superset/commands/report/execute.py | 11 +-
superset/commands/report/update.py | 37 +-
superset/commands/semantic_layer/create.py | 8 +-
superset/commands/semantic_layer/delete.py | 19 +-
superset/commands/semantic_layer/update.py | 13 +-
superset/commands/sql_lab/execute.py | 26 +
superset/commands/sql_lab/permalink/get.py | 23 +-
superset/commands/sql_lab/results.py | 12 +
superset/commands/streaming_export/base.py | 34 +-
superset/commands/tag/create.py | 7 +-
superset/commands/tag/delete.py | 49 +-
superset/commands/tag/exceptions.py | 13 +
superset/commands/tag/update.py | 7 +-
superset/commands/tag/utils.py | 21 -
superset/commands/theme/import_themes.py | 12 +
superset/commands/theme/update.py | 10 +
superset/commands/utils.py | 25 +
superset/commands/version_restore.py | 4 +-
superset/common/form_data_query_context.py | 4 +-
superset/common/query_object.py | 64 +-
superset/config.py | 36 +-
superset/connectors/sqla/models.py | 92 +-
superset/daos/report.py | 16 +-
superset/daos/tag.py | 18 +-
superset/dashboards/api.py | 99 ++-
superset/databases/api.py | 17 +-
superset/datasets/api.py | 14 +-
superset/datasets/schemas.py | 21 +-
superset/db_engine_specs/base.py | 66 +-
superset/db_engine_specs/cockroachdb.py | 9 +-
superset/db_engine_specs/doris.py | 8 +-
superset/db_engine_specs/duckdb.py | 16 +-
superset/db_engine_specs/greenplum.py | 10 +
superset/db_engine_specs/gsheets.py | 24 +-
superset/db_engine_specs/hana.py | 8 +-
superset/db_engine_specs/hologres.py | 10 +
superset/db_engine_specs/mysql.py | 88 +-
superset/db_engine_specs/netezza.py | 9 +
superset/db_engine_specs/oceanbase.py | 9 +-
superset/db_engine_specs/postgres.py | 87 ++
superset/db_engine_specs/redshift.py | 22 +-
superset/db_engine_specs/risingwave.py | 10 +
superset/db_engine_specs/snowflake.py | 195 ++++-
superset/db_engine_specs/sqlite.py | 22 +-
superset/db_engine_specs/starrocks.py | 9 +-
superset/db_engine_specs/trino.py | 3 +
superset/db_engine_specs/vertica.py | 9 +
superset/db_engine_specs/yugabytedb.py | 10 +
superset/examples/birth_names.py | 8 +-
.../examples/usa_births_names/charts/Boys.yaml | 2 +-
.../examples/usa_births_names/charts/Girls.yaml | 2 +-
superset/examples/utils.py | 2 +-
superset/extensions/metadb.py | 86 +-
superset/importexport/api.py | 12 +-
superset/initialization/__init__.py | 30 +-
superset/jinja_context.py | 68 +-
superset/mcp_service/README.md | 21 +-
superset/mcp_service/__main__.py | 27 +-
superset/mcp_service/annotation_layer/schemas.py | 78 +-
superset/mcp_service/app.py | 11 +-
superset/mcp_service/auth.py | 12 +-
superset/mcp_service/caching.py | 48 +-
superset/mcp_service/chart/chart_helpers.py | 7 +
superset/mcp_service/chart/chart_utils.py | 17 +-
superset/mcp_service/chart/plugins/histogram.py | 28 +-
.../chart/prompts/create_chart_guided.py | 4 +-
superset/mcp_service/chart/schemas.py | 215 ++---
superset/mcp_service/chart/tool/delete_chart.py | 12 +-
superset/mcp_service/chart/tool/generate_chart.py | 36 +-
superset/mcp_service/chart/tool/get_chart_data.py | 330 ++++----
superset/mcp_service/chart/tool/get_chart_info.py | 44 +-
.../mcp_service/chart/tool/get_chart_preview.py | 82 +-
superset/mcp_service/chart/tool/get_chart_sql.py | 131 ++-
superset/mcp_service/chart/tool/restore_chart.py | 60 +-
superset/mcp_service/chart/tool/update_chart.py | 9 +-
.../chart/validation/dataset_validator.py | 30 +-
.../chart/validation/runtime/format_validator.py | 9 +-
.../mcp_service/dashboard/layout_validation.py | 312 +++++++
superset/mcp_service/dashboard/permalink.py | 184 ++++
superset/mcp_service/dashboard/schemas.py | 609 +++++--------
.../mcp_service/dashboard/tool/delete_dashboard.py | 14 +-
.../dashboard/tool/duplicate_dashboard.py | 13 +-
.../dashboard/tool/get_dashboard_info.py | 157 ++--
.../dashboard/tool/get_dashboard_layout.py | 43 +-
.../dashboard/tool/manage_native_filters.py | 26 +-
.../dashboard/tool/remove_chart_from_dashboard.py | 5 +-
.../dashboard/tool/restore_dashboard.py | 65 +-
.../mcp_service/dashboard/tool/update_dashboard.py | 14 +-
superset/mcp_service/dataset/schemas.py | 198 ++---
.../dataset/tool/update_dataset_metric.py | 49 +-
superset/mcp_service/mcp_config.py | 149 +++-
superset/mcp_service/middleware.py | 27 +-
superset/mcp_service/report/schemas.py | 18 +-
superset/mcp_service/role/schemas.py | 19 +-
superset/mcp_service/server.py | 56 +-
superset/mcp_service/sql_lab/tool/execute_sql.py | 7 +-
.../sql_lab/tool/open_sql_lab_with_context.py | 85 +-
superset/mcp_service/system/schemas.py | 28 +-
superset/mcp_service/system/tool/find_users.py | 12 +-
superset/mcp_service/tag/schemas.py | 32 +-
superset/mcp_service/task/schemas.py | 11 +-
superset/mcp_service/theme/schemas.py | 50 +-
superset/mcp_service/theme/tool/create_theme.py | 10 +-
superset/mcp_service/user/schemas.py | 30 +-
superset/mcp_service/utils/__init__.py | 2 -
superset/mcp_service/utils/sanitization.py | 146 ----
...0_39097d124752_add_reason_to_purge_audit_log.py | 60 ++
superset/models/helpers.py | 427 ++++++++--
superset/models/purge_audit_log.py | 6 +
superset/models/sql_lab.py | 2 +
superset/queries/saved_queries/api.py | 14 +-
superset/reports/filters.py | 30 +-
superset/reports/logs/api.py | 8 +
superset/reports/models.py | 4 +-
superset/reports/notifications/webhook.py | 140 ++-
superset/reports/schemas.py | 44 +-
superset/security/api.py | 15 +
superset/security/manager.py | 337 ++++++++
superset/semantic_layers/api.py | 37 +
superset/semantic_layers/models.py | 20 +
superset/sql/execution/executor.py | 42 +-
superset/sql/parse.py | 178 +++-
superset/sql_lab.py | 10 +-
superset/tags/api.py | 58 ++
superset/tasks/cron_util.py | 45 +
superset/tasks/deletion_retention.py | 29 +-
superset/tasks/thumbnails.py | 3 +
superset/tasks/types.py | 7 +-
superset/tasks/utils.py | 95 +--
superset/themes/api.py | 16 +-
superset/thumbnails/digest.py | 13 +-
superset/translations/es/LC_MESSAGES/messages.po | 39 +-
superset/translations/messages.pot | 28 +-
.../translations/zh_TW/LC_MESSAGES/messages.po | 89 +-
superset/utils/core.py | 67 +-
superset/utils/database.py | 36 +
superset/utils/date_parser.py | 24 +-
superset/utils/excel.py | 71 +-
superset/utils/file.py | 71 +-
superset/utils/pandas_postprocessing/__init__.py | 17 +
superset/utils/pandas_postprocessing/histogram.py | 21 +
superset/utils/pandas_postprocessing/prophet.py | 15 +
superset/utils/pandas_postprocessing/resample.py | 32 +
superset/utils/pandas_postprocessing/rolling.py | 15 +
superset/utils/pandas_postprocessing/select.py | 29 +-
superset/utils/pandas_sqlalchemy_compat.py | 80 --
superset/utils/screenshots.py | 51 +-
superset/versioning/changes/listener.py | 2 +
superset/versioning/changes/normalization.py | 300 +++++++
superset/versioning/changes/state.py | 14 +
tests/integration_tests/charts/api_tests.py | 10 +-
.../integration_tests/charts/soft_delete_tests.py | 5 +-
tests/integration_tests/dashboards/api_tests.py | 207 ++++-
tests/integration_tests/databases/api_tests.py | 54 +-
.../integration_tests/databases/commands_tests.py | 8 +-
tests/integration_tests/datasets/api_tests.py | 102 ++-
.../db_engine_specs/postgres_tests.py | 5 +-
.../deletion_retention/audit_tests.py | 248 +++++-
.../deletion_retention/force_purge_tests.py | 1 +
.../deletion_retention/purge_tests.py | 118 ++-
.../queries/saved_queries/api_tests.py | 3 -
tests/integration_tests/query_context_tests.py | 52 ++
tests/integration_tests/reports/alert_tests.py | 6 +-
tests/integration_tests/reports/commands_tests.py | 8 +
tests/integration_tests/reports/utils.py | 11 +-
tests/integration_tests/sql_lab/commands_tests.py | 141 ++-
tests/integration_tests/tags/api_tests.py | 43 +
tests/integration_tests/tags/commands_tests.py | 50 +-
.../themes/test_theme_api_permissions.py | 34 +-
.../versioning/change_records_tests.py | 137 +++
.../charts/data/malformed_adhoc_metric_test.py | 217 +++++
tests/unit_tests/charts/test_chart_data_api.py | 251 ++++++
tests/unit_tests/charts/test_schemas.py | 81 ++
.../commands/chart/delete_message_test.py | 63 ++
.../chart/streaming_export_command_test.py | 36 +
.../deletion_retention/test_reason_codes.py | 182 ++++
.../importers/v1/import_saved_query_test.py | 126 +++
.../unit_tests/commands/importers/v1/utils_test.py | 151 ++++
tests/unit_tests/commands/report/update_test.py | 6 +
.../commands/semantic_layer/create_test.py | 184 ++++
.../commands/semantic_layer/delete_test.py | 199 ++++-
.../commands/semantic_layer/update_test.py | 155 +++-
.../commands/sql_lab/permalink_get_test.py | 87 ++
tests/unit_tests/commands/sql_lab/test_execute.py | 161 ++++
tests/unit_tests/commands/test_utils.py | 59 ++
.../commands/theme/test_import_themes.py | 193 +++++
.../common/test_form_data_query_context.py | 25 +
.../common/test_query_context_processor.py | 6 +-
tests/unit_tests/common/test_time_shifts.py | 354 +++++++-
tests/unit_tests/daos/test_report_dao.py | 57 +-
.../commands/importers/dispatcher_test.py | 25 +-
.../commands/importers/v1/import_command_test.py | 9 +-
.../databases/commands/importers/v1/import_test.py | 240 ++++++
tests/unit_tests/databases/schema_tests.py | 38 +
.../datasets/commands/importers/dispatcher_test.py | 18 +-
.../datasets/commands/importers/v1/import_test.py | 64 ++
tests/unit_tests/datasets/schema_tests.py | 45 +
tests/unit_tests/db_engine_specs/test_aurora.py | 37 +
tests/unit_tests/db_engine_specs/test_base.py | 19 +
tests/unit_tests/db_engine_specs/test_bigquery.py | 25 +-
tests/unit_tests/db_engine_specs/test_duckdb.py | 59 ++
.../test_extended_aggregations_unverified.py | 68 ++
tests/unit_tests/db_engine_specs/test_gsheets.py | 35 +
.../unit_tests/db_engine_specs/test_mariadb.py | 32 +-
tests/unit_tests/db_engine_specs/test_mysql.py | 131 ++-
tests/unit_tests/db_engine_specs/test_ocient.py | 15 +-
tests/unit_tests/db_engine_specs/test_postgres.py | 323 +++++++
tests/unit_tests/db_engine_specs/test_redshift.py | 30 +
tests/unit_tests/db_engine_specs/test_snowflake.py | 303 ++++++-
.../unit_tests/db_engine_specs/test_timescaledb.py | 37 +
tests/unit_tests/db_engine_specs/test_trino.py | 101 +++
tests/unit_tests/examples/utils_test.py | 20 +
tests/unit_tests/extensions/test_sqlalchemy.py | 405 +++++++++
...st.py => frontend_bundle_size_workflow_test.py} | 36 +-
tests/unit_tests/jinja_context_test.py | 84 ++
.../tool/test_annotation_layer_tools.py | 55 +-
.../mcp_service/chart/test_chart_helpers.py | 13 +
.../mcp_service/chart/test_chart_schemas.py | 42 +-
.../mcp_service/chart/test_chart_utils.py | 54 ++
.../mcp_service/chart/tool/test_generate_chart.py | 120 ++-
.../mcp_service/chart/tool/test_get_chart_data.py | 414 ++++++++-
.../mcp_service/chart/tool/test_get_chart_info.py | 70 +-
.../chart/tool/test_get_chart_preview.py | 64 +-
.../mcp_service/chart/tool/test_get_chart_sql.py | 396 ++++++++-
.../mcp_service/chart/tool/test_restore_chart.py | 120 ++-
.../mcp_service/chart/tool/test_update_chart.py | 14 +-
.../chart/validation/test_dataset_validator.py | 74 ++
.../dashboard/test_dashboard_schemas.py | 89 +-
.../dashboard/test_layout_validation.py | 401 +++++++++
.../mcp_service/dashboard/test_permalink.py | 374 ++++++++
.../tool/test_add_chart_to_existing_dashboard.py | 21 +-
.../dashboard/tool/test_dashboard_tools.py | 261 +++---
.../dashboard/tool/test_duplicate_dashboard.py | 15 +-
.../dashboard/tool/test_get_dashboard_datasets.py | 6 +-
.../dashboard/tool/test_get_dashboard_layout.py | 143 +++-
.../tool/test_manage_dashboard_certification.py | 5 +-
.../dashboard/tool/test_manage_dashboard_owners.py | 18 +-
.../dashboard/tool/test_manage_native_filters.py | 33 +-
.../dashboard/tool/test_restore_dashboard.py | 121 ++-
.../dashboard/tool/test_update_dashboard.py | 135 ++-
.../mcp_service/dataset/tool/test_dataset_tools.py | 36 +-
.../dataset/tool/test_update_dataset_metric.py | 167 +++-
.../mcp_service/report/tool/test_report_tools.py | 38 +-
.../mcp_service/role/tool/test_role_tools.py | 30 +-
.../mcp_service/sql_lab/tool/test_execute_sql.py | 46 +
.../sql_lab/tool/test_open_sql_lab_with_context.py | 77 +-
.../sql_lab/tool/test_save_sql_query.py | 19 +-
.../mcp_service/system/tool/test_find_users.py | 65 +-
.../mcp_service/tag/tool/test_tag_tools.py | 13 +-
.../mcp_service/task/tool/test_task_tools.py | 15 +-
.../mcp_service/test_auth_user_resolution.py | 30 +
.../mcp_service/test_guest_token_auth.py | 21 +-
.../unit_tests/mcp_service/test_main_entrypoint.py | 123 +++
tests/unit_tests/mcp_service/test_mcp_caching.py | 98 ++-
tests/unit_tests/mcp_service/test_mcp_config.py | 78 +-
.../mcp_service/test_mcp_config_hs256_guard.py | 150 ++++
tests/unit_tests/mcp_service/test_mcp_server.py | 112 +++
tests/unit_tests/mcp_service/test_middleware.py | 101 +++
.../mcp_service/test_result_value_contract.py | 211 +++++
.../mcp_service/theme/tool/test_create_theme.py | 16 +-
.../mcp_service/theme/tool/test_get_theme_info.py | 10 +-
tests/unit_tests/mcp_service/user/test_schemas.py | 12 +-
.../mcp_service/user/tool/test_user_tools.py | 42 +-
.../mcp_service/utils/test_sanitization.py | 335 +-------
tests/unit_tests/models/helpers_test.py | 70 ++
.../models/test_hours_offset_bound_truncation.py | 702 +++++++++++++++
.../pandas_postprocessing/test_histogram.py | 25 +
.../pandas_postprocessing/test_prophet.py | 18 +
.../pandas_postprocessing/test_resample.py | 39 +
.../pandas_postprocessing/test_rolling.py | 17 +
.../pandas_postprocessing/test_select.py | 29 +
tests/unit_tests/queries/query_object_test.py | 147 +++-
tests/unit_tests/reports/filters_test.py | 66 ++
tests/unit_tests/reports/logs_api_test.py | 37 +
.../reports/notifications/webhook_tests.py | 199 +++++
tests/unit_tests/reports/schemas_test.py | 10 +
tests/unit_tests/security/api_test.py | 33 +-
tests/unit_tests/security/manager_test.py | 120 +++
tests/unit_tests/semantic_layers/api_test.py | 161 ++++
tests/unit_tests/semantic_layers/models_test.py | 84 ++
tests/unit_tests/sql/execution/test_executor.py | 177 ++++
tests/unit_tests/sql/parse_tests.py | 166 ++++
tests/unit_tests/sql_lab_test.py | 157 ++--
tests/unit_tests/tags/api_test.py | 164 ++++
tests/unit_tests/tags/commands/delete_test.py | 198 +++++
tests/unit_tests/tags/commands/update_test.py | 152 ++++
tests/unit_tests/tasks/test_cron_util.py | 56 +-
tests/unit_tests/tasks/test_utils.py | 97 ++-
tests/unit_tests/themes/commands_test.py | 51 ++
tests/unit_tests/thumbnails/test_digest.py | 88 +-
tests/unit_tests/utils/date_parser_tests.py | 5 +
tests/unit_tests/utils/excel_tests.py | 107 +++
tests/unit_tests/utils/map_type_tests.py | 15 +
.../utils/pandas_sqlalchemy_compat_test.py | 67 --
tests/unit_tests/utils/screenshot_test.py | 107 +++
tests/unit_tests/utils/send_export_zip_tests.py | 69 ++
tests/unit_tests/utils/test_core.py | 18 +-
tests/unit_tests/utils/test_file.py | 188 +++-
tests/unit_tests/versioning/test_listener.py | 1 +
.../versioning/test_normalization_changes.py | 186 ++++
533 files changed, 29979 insertions(+), 6124 deletions(-)
create mode 100644 docs/sip/median-stddev-variance-aggregates.md
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
create mode 100644 superset-frontend/playwright/components/modals/DrillDetailModal.ts
create mode 100644 superset-frontend/playwright/tests/dashboard/dashboard-drill-to-detail.spec.ts
delete mode 100644 superset-frontend/playwright/tests/recently-archived/delete-modal.spec.ts
create mode 100644 superset-frontend/plugins/plugin-chart-ag-grid-table/test/NumericCellRenderer.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
copy superset-frontend/{src/chartCustomizations/components/DeckglLayerVisibility/transformProps.ts => plugins/plugin-chart-parallel-coordinates/test/transformProps.test.ts} (60%)
create mode 100644 superset-frontend/plugins/preset-chart-deckgl/src/components/Tooltip.test.tsx
create mode 100644 superset-frontend/src/components/Datasource/components/DatasourceEditor/tests/hydrateMetricExtra.test.ts
copy superset-frontend/{plugins/plugin-chart-pivot-table/test/testHelpers.tsx => src/constants.test.ts} (60%)
create mode 100644 superset-frontend/src/features/charts/ChartCard.test.tsx
create mode 100644 superset-frontend/src/features/versionHistory/normalization.test.ts
create mode 100644 superset-frontend/src/features/versionHistory/normalization.ts
create mode 100644 superset-frontend/src/pages/DatabaseList/DatabaseList.semanticLayerDelete.test.tsx
create mode 100644 superset-frontend/src/pages/SqlLab/LocationContext.test.tsx
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
delete mode 100644 superset/utils/pandas_sqlalchemy_compat.py
create mode 100644 superset/versioning/changes/normalization.py
create mode 100644 tests/unit_tests/charts/data/malformed_adhoc_metric_test.py
create mode 100644 tests/unit_tests/commands/chart/delete_message_test.py
create mode 100644 tests/unit_tests/commands/deletion_retention/test_reason_codes.py
create mode 100644 tests/unit_tests/commands/importers/v1/import_saved_query_test.py
create mode 100644 tests/unit_tests/commands/sql_lab/permalink_get_test.py
create mode 100644 tests/unit_tests/commands/sql_lab/test_execute.py
create mode 100644 tests/unit_tests/commands/theme/test_import_themes.py
copy superset-core/src/superset_core/extensions/constants.py => tests/unit_tests/dashboards/commands/importers/dispatcher_test.py (52%)
copy superset/mcp_service/common/__init__.py => tests/unit_tests/datasets/commands/importers/dispatcher_test.py (54%)
create mode 100644 tests/unit_tests/db_engine_specs/test_extended_aggregations_unverified.py
copy superset/db_engine_specs/mariadb.py => tests/unit_tests/db_engine_specs/test_mariadb.py (52%)
create mode 100644 tests/unit_tests/db_engine_specs/test_timescaledb.py
copy tests/unit_tests/{scheduled_docker_image_refresh_test.py => frontend_bundle_size_workflow_test.py} (50%)
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/mcp_service/test_main_entrypoint.py
create mode 100644 tests/unit_tests/mcp_service/test_mcp_config_hs256_guard.py
create mode 100644 tests/unit_tests/mcp_service/test_result_value_contract.py
create mode 100644 tests/unit_tests/models/test_hours_offset_bound_truncation.py
create mode 100644 tests/unit_tests/reports/logs_api_test.py
create mode 100644 tests/unit_tests/tags/api_test.py
create mode 100644 tests/unit_tests/tags/commands/delete_test.py
delete mode 100644 tests/unit_tests/utils/pandas_sqlalchemy_compat_test.py
create mode 100644 tests/unit_tests/utils/send_export_zip_tests.py
create mode 100644 tests/unit_tests/versioning/test_normalization_changes.py