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

eschutho pushed a change to branch fix-chart-helpers-dashboard-metadata-decode
in repository https://gitbox.apache.org/repos/asf/superset.git


    from c1b1bc3bb97 fix(mcp): log tracebacks for malformed native filters and 
test filter attach
     add a23199762c5 fix(mypy): make UUIDMixin.uuid's nullable type resolve 
deterministically (#44817)
     add e734cd00d43 chore(deps): bump react-syntax-highlighter from 16.1.1 to 
16.1.2 in /superset-frontend (#45370)
     add f2b71475ce2 chore(deps): bump @googleapis/sheets from 18.1.0 to 18.1.1 
in /superset-frontend (#45369)
     add 3dfb42a2937 chore(deps): bump astral-sh/setup-uv from 10.2.0 to 10.3.0 
(#45368)
     add 576cc9e0952 chore(deps): bump helm/chart-testing-action from 2.8.0 to 
2.9.0 (#45367)
     add 50d34f8aaa2 chore(deps-dev): bump syntaqlite from 0.9.0 to 0.12.1 
(#45320)
     add ad63b3eb7ab fix(impala): stop SQL Lab queries through the live cursor 
only (#45232)
     add 86e186b5f60 fix(tests): stop the unit suite from retaining one 
Superset app per module (#45364)
     add 19bb09461dc fix(examples): rewrite chart datasource references on 
import (#45378)
     add 9c7ca9ba107 fix(docs): improve Kapa AI widget dark mode compatibility 
(#39102)
     add 61d27b4aebe fix(sql): handle trailing comments after empty statements 
(#45274)
     add 58b1de82815 fix(datasets): don't call physical datasets "virtual" in 
sync columns toast (#45376)
     add 853f207c668 fix(dashboard): apply temporal x-axis cross-filters to 
target charts (#45310)
     add c650cbd3c61 fix(import): return 422 instead of 500 for corrupt ZIP 
uploads (#45380)
     add a9a7a35c4b4 fix(dashboard): show an access error for charts the viewer 
cannot read (#45398)
     add 44eac5b37b2 fix(soft-delete): align dashboard card dialogs and archive 
permission hints (#45302)
     add 21fad62645a fix(semantic-layer): resolve grain variants 
deterministically (#44454)
     add a13af92ff34 fix(semantic-layer): return 400 for mapper validation 
refusals (#45292)
     add a5d29a9d27d test(e2e): add a stub semantic-layer provider for 
Playwright (#45103)
     add 84be38cfc90 chore(deps): update pygithub requirement from >=2.1.1 to 
>=2.10.0 (#45413)
     add 31ee5719f77 fix(semantic layers): reject unknown compatibility 
selections (#45359)
     add e336cd04c3c fix(mcp): keep refusal and rejection categories in 
get_chart_data (#45360)
     add 5e1962e9a1d test(mcp): correct Dublin fold timestamp expectations 
(#45358)
     add ae71281c519 fix(dashboard): resolve to a fixed point when un-clipping 
scrollable chart content (#44102)
     add 4569608fc44 fix(pivot-table): keep MIN/MAX of non-numeric columns off 
the additive fast-path (#45408)
     add dfd13baab0e fix(versioning): don't record dataset column and metric 
extra rewrites as edits (#45349)
     add 4f49d24151d test(i18n): run the babel_update.sh msgcat tests on CI 
(#45247)
     add e837c37bc29 fix(semantic-layer): raise typed rejections from the E2E 
stub provider (#45401)
     add 4ccd337b932 chore(deps-dev): bump oracledb from 4.0.2 to 26.0.0 
(#44443)
     add 297449d68e7 fix(semantic layers): return 400 for ambiguous variants in 
compatibility name check (#45426)
     add 663d691c311 fix(embedded): apply the chart-data guest redaction to 
samples and the legacy query endpoint (#45273)
     add acdd2d27667 chore(deps-dev): bump oxlint-tsgolint in /docs (#45450)
     add b8a4a5e20ad chore(deps): bump the swc group across 2 directories with 
1 update (#45449)
     add c812be8019f chore(deps): bump EnricoMi/publish-unit-test-result-action 
from 2.24.0 to 2.25.0 (#45448)
     add 22654af3337 chore(deps): bump express from 5.2.1 to 5.3.0 in 
/superset-websocket/utils/client-ws-app (#45447)
     add 118acbcde35 chore(deps): bump pydantic from 2.13.5 to 2.14.0 (#45417)
     add 56ff8920385 fix(security): don't let dataset editorship substitute for 
data access (#45266)
     add 99ecfe5801c chore(deps): bump sqlalchemy-utils from 0.42.1 to 0.43.0 
(#45416)
     add f0cfaff7881 fix(sql): decode async SQLExecutor results from the 
results backend (#45348)
     add 8e6e91e4dc0 feat(semantic-layers): add the provider execution context 
contract (#45251)
     add 53f14e7b7b1 fix(semantic-layer): refuse a chart's own filter on a 
column the semantic view lacks (#45294)
     add 98d5fa50b4c fix(semantic-layer): validate views before creation 
(#45287)
     add d36febc96ec fix(versioning): don't record save-path defaults as user 
changes (#45352)
     add 5a1831000a9 fix: add dblink and pg_* state-mutating functions to SQL 
denylist (#45089)
     add 88e92663b8f fix(semantic-layers): restore mocking compatibility after 
implementation became a plain property (#45501)
     add 152e1e9de9a fix(dataset): convert timezone-aware values with the 
dataset timezone (#45344)
     add 25e94d00d37 fix(pivot-table): stop the grand-total corner from 
silently picking one metric (#44657)
     add d285a1abae8 fix(dashboards): prevent horizontal filter bar from 
vanishing on cross-filter (#45050) (#45051)
     add 15f55686ea9 fix(dashboard): respect DASHBOARD_AUTO_REFRESH_INTERVALS 
configuration in refresh dropdown (#45039)
     add 1e18d01d76d feat(mcp): add caller-scoped PNG chart previews (#44558)
     add 9c287d989a8 feat(build): migrate to Typescript 6 (#44726)
     add 7b23ddea9f6 chore(build): migrate from external `copy-webpack-plugin` 
to Webpack-native `output.copy` (#44965)
     add 0a17a75f9a8 chore(deps): bump the storybook group across 2 directories 
with 4 updates (#45513)
     add d5bccecf581 chore(deps): bump chromaui/action from 18.11.0 to 18.12.1 
(#45512)
     add 77b0fd62ea7 docs: add Plum to In the Wild (#45518)
     add 3cf94c87aef chore(deps-dev): bump @types/node from 26.6.4 to 26.6.5 in 
/superset-embedded-sdk (#45514)
     add 1df897b3bba fix(pivot-table): blank mixed-metric totals in exports and 
reports (#45311)
     add 38353434467 fix(cache): honor disabled datasource suggestion caches 
(#45288)
     add ad30c898f86 fix(dashboard): copy a layout that omits the source's 
current charts (#45472)
     add 3988a771f37 fix(dataset): warn immediately when normalize_columns is 
toggled on (#44617)
     add 3c42a68d439 test(mcp): refresh native tool inventory for PNG chart 
previews (#45511)
     add 1811fe5167f fix(dashboard): stop Edit Properties hanging on dashboards 
with many charts (#45354)
     add 65cfc1ed18c fix(deck.gl): set maplibre-gl 6's worker URL so vector 
basemaps load (#45396)
     add 973ac9b8efb fix(export): honor CSV_EXPORT encoding in streaming CSV 
exports (#45351)
     add a708a08cdb0 feat(semantic-layers): declare provider obligations and 
add a registration test fixture (#45393)
     add 488a3c53b45 fix(soft-delete): show Recently Archived in the menu to 
everyone who can open it (#45523)
     add 82a7ec91d6e feat(semantic-layers): apply a default chronological order 
for time-series queries (#45389)
     add fe79ab48e93 fix(tags): make owner-tag creation safe under concurrent 
creates (#45498)
     add e315ed365e8 test(reports): cover scheduled reports on semantic-view 
charts (#45526)
     add 036d1dafe2c fix(semantic-layers): report async chart query validation 
errors as failures (#45525)
     add d73c9b93398 fix(alerts): don't flag "Every minute" schedule as invalid 
in cron picker (#45468)
     add 63c6d273616 chore(plugin-chart-ag-grid-table): remove unused 
useTableTheme hook (#45469)
     add aa3df7caf77 fix(explore): hide empty Actual range for comparison 
header (#44996)
     add f0b43df751a fix(dashboard): remap native filter scopes when 
duplicating charts on save as (#45038)
     add b1fe28b5791 fix(ci): narrow nullable filters in metric_filter_test and 
resync oxfmt formatting (#45239)
     add 875dcbb1bb0 feat(action-log): open JSON payloads in a tree modal 
(#45337)
     add c01e784fc64 fix(ci): restore the full-repo mypy check on two 
semantic-layer and sqla test files (#45315)
     add 293f159deaf fix(sqllab): keep the results grid header opaque when rows 
scroll under it (#45480)
     add 25186586572 fix(chart): keep the chart on screen during a dashboard 
auto-refresh (#45234)
     add fcff5931594 fix(sqllab): ignore a Run/Stop click whose gesture started 
on the other action (#45336)
     add 87dc979e986 fix(table-chart): show the record count in the search box 
(#45497)
     add ec40973ae81 fix(semantic-layer): reject SQL extras in direct mapper 
calls (#45534)
     add ddbf152ac92 fix(dashboard): keep archived charts' membership when 
restoring a version (#45482)
     add 208438b18b6 test(tasks): cover the embedded-guest error text on task 
show and list (#45533)
     add 2d0203e3699 fix(plugin-chart-echarts): merge a series object in 
ECharts Options into every series (#45421)
     add 77ded19ba5c fix(sqllab): commit the recomputed row limit before async 
dispatch (#45178)
     add a1fd5b1f81e fix(sqllab): resolve query datasources when opening SQL 
Lab (#45374)
     add c06005afb1e fix(dashboard): load the saved description into dashboard 
info (#45298)
     add 2978799419e fix(models): keep NULL rows in !=, NOT LIKE and NOT ILIKE 
filters (#45317)
     add 33687492472 test(explore): cover chart header actions, chart pills, 
and view container wiring (#44848)
     add 304f5a38b58 test(playwright): add Featured Charts render smoke and 
Explore image download (#44844)
     add 6842e2f76b3 test(explore): cover cartodiagram and primitive explore 
controls (#44850)
     add c807ee7f909 fix(native-filters): keep pending removal timers when 
another filter is removed (#44837)
     add 7ff5709882f fix(candlestick): give OHLC labels their own translatable 
strings (#45458)
     add 0f376ba9f97 fix(semantic-layers): show per-view errors when adding 
semantic views (#45524)
     add 190873e9832 fix(version-history): preview banner, history panel 
layout, scope labels and current-version marking (#45471)
     add 6dc0641c91a fix(reports): keep the first column header in XLSX exports 
of semantic-view tables (#45527)
     add 4e7e2b7390d fix(tests): narrow Optional StatementResult.data in async 
result tests (#45517)
     add 836c0f3f95d fix(table): reset default margins on the pagination list 
(#45365)
     add 8d3ade7e0a8 test(trino): close db_engine_spec test gaps (#45361)
     add 3d902d9eb3a chore(deps): bump the security group across 2 directories 
with 2 updates (#45542)
     add 527021d5819 chore(deps): bump react-virtualized-auto-sizer from 1.0.26 
to 2.0.3 in /superset-frontend (#45197)
     add c11f993af37 fix(auth): close forced-password-change redirect loop and 
sweep stale legacy password perms from all roles (#44857)
     add 7d0e1c939ee fix(frontend): retry a failed lazy import before surfacing 
ChunkLoadError (#43215)
     add abc1b50f65d fix(mcp): clean up nits from PNG chart preview review 
(#45509)
     add b6ef0bf48d8 chore(tags): stop auto-generating 
type:/editor:/favorited_by: tags (#43471)
     add cb04282f501 chore(deps): bump swagger-ui-react from 5.33.1 to 5.33.2 
in /docs (#45567)
     add f1d8161777c chore(deps): bump chromaui/action from 18.12.1 to 18.12.2 
(#45564)
     add f9aec7515b4 chore(deps): bump actions/setup-java from 6.0.1 to 6.1.0 
in the gh-actions group (#45563)
     add 75be8f981a6 feat(improvements): let deployments withhold assets from 
list queries and commands (#45451)
     add f9a0d8af493 chore(deps-dev): bump oxlint from 1.87.0 to 1.88.0 in 
/docs (#45566)
     add fa8a035fcf6 fix(mcp): stop rejecting titles that contain "data:" in 
prose (#45485)
     add e8824351f19 fix(mcp): isolate dashboard copies and clarify chart 
evidence (#45504)
     add cdc9430597c fix(db_engine_specs): patch oceanbase_py's dialect for 
SQLAlchemy 2.0 (#45507)
     add 00688c7871b chore(deps-dev): update pinotdb requirement from 
<10.0.0,>=8.0.0 to >=9.2.2,<10.0.0 (#45414)
     add 73737afbfbb chore(deps): bump pyarrow from 25.0.1 to 26.0.0 (#45412)
     add 067d536e216 chore(deps-dev): bump fastmcp from 3.4.7 to 4.1.0 (#45415)
     add b7bfbd365e6 chore(deps-dev): bump oxfmt in /docs (#45565)
     add 2b1046959d2 chore: bump pillow, certifi and geopy pins, tidy two small 
code nits (#45578)
     add 54aaf3ad7d7 fix(mcp): surface missing query_context warning in 
get_chart_data result (#45250)
     add fdb22260e25 fix(number-format): make the adaptive formatters follow 
D3_FORMAT (#45241)
     add c3279f01921 ci: skip jobs that cannot complete on forks and private 
mirrors (#45035)
     add 385844237e6 fix(explore): preserve zero thresholds in contour controls 
(#44966)
     add 3de22376c5c fix(dashboards): update last modified timestamp when 
adding chart to dashboard (#44305) (#44358)
     add 77ebc0e55f3 fix(chart): keep dataset_uuid in exports when the dataset 
is deleted (#44347)
     add 452dea81f23 chore(deps-dev): bump @playwright/test from 1.62.1 to 
1.64.0 in /superset-frontend (#45371)
     add bc83e3e6fdb fix(mcp): propose a matching value when a dashboard filter 
value is rejected (#45547)
     add b129d6a4c12 fix(semantic-layer): narrow Filter|OrFilter unions in test 
helpers for mypy (#45268)
     add ff214bdfb14 fix(sqllab): clip multi-line result values to their row 
(#45487)
     add 62d22e0697c fix(semantic-layer): type the E2E stub filters for the 
full filter union (#45419)
     add 5eaad449f5c fix(import): return 422 instead of 500 for unsafe ZIP 
import bundles (#45440)
     add 676af61b1c9 fix(jinja): keep filters with 0 or false values in 
get_filters and fi… (#45437)
     add 47358be13c1 fix(import): return 422 instead of 500 for non-UTF-8 
members in import bundles (#45424)
     add b4f8ca407a3 chore(deps-dev): bump vite from 8.3.1 to 8.3.5 in 
/superset-websocket in the security group across 1 directory (#45590)
     add 7ff7f9048bf fix(semantic-layer): handle absent fetch-values predicate 
(#45539)
     add 9ce458594fe fix(connection): encode next in the unauthorized login 
redirect (#45477)
     add 2304d1b80f2 fix(datasets): re-check statement count after query 
mutation (#45453)
     add 4bfd874c4cb fix(postprocessing): handle Decimal comparisons with zero 
baselines (#45467)
     add 4e5d0ef8f13 fix(models): keep NULL rows in NOT IN filters without a 
NULL value (#45305)
     add a0ebed9ff1a docs(auth): add Keycloak PKCE, logout and group-mapping 
example (#38092)
     add b3471a1369c fix(a11y): WCAG 1.4.1 — add non-color visual cues to 
status indicators (#39233)
     add 3297c39d94c docs(installation): describe the default image instead of 
lean in Docker Compose responsibilities (#45582)
     add 47300cf4c2f fix(mcp): pass time_grain as a string and keep annotation 
DB error classification (#45484)
     add 030f36a00c3 docs(extensions): move Semantic Layers into its own 
extension point page (#45630)
     add 578d43fef9b fix(listview): prevent table column layout shift on 
content change (#37299)
     add 97a536f37d9 feat(echarts): allow configuring minInterval on bar and 
line chart axes (#43515)
     add dfd84bf3d9e fix(mcp): only serve the browser hello page on the MCP 
endpoint (#45391)
     add 7fceb05c1ce docs(docker): drop redundant packages from custom image 
example, bump version numbers (#44240)
     add aabddf5b3f5 fix(semantic-layers): cap and time-bound bulk semantic 
view creation (#45532)
     add 2c275ed0a5b fix(echarts): restore series color markers in sanitized 
tooltips (#45505)
     add 98fac9104fb fix(datasets): validate metric d3format (#45633)
     add bf18152476a chore: stop forcing .ipynb as a binary attribute (#45602)
     add 87d1abb21e6 chore(frontend): let JEST_MAX_WORKERS cap the Jest worker 
pool locally (#45594)
     add 5cfcee95b4e fix(import): return 400 instead of 500 on malformed JSON 
in import form fields (#45579)
     add 44be9b819dd fix(bigquery): return empty extra metadata instead of 500 
when table is not found (#45634)
     add 0689df740e2 fix(sql-lab): return 400 instead of 500 when stop_query is 
missing client_id (#45521)
     add 631cfec0c00 Merge remote-tracking branch 'origin/master' into HEAD

No new revisions were added by this update.

Summary of changes:
 .gitattributes                                     |    1 -
 .github/workflows/bashlib.sh                       |   13 +
 .github/workflows/bump-python-package.yml          |    2 +-
 .github/workflows/chromatic.yml                    |    2 +-
 .github/workflows/codeql-analysis.yml              |   19 +-
 .github/workflows/docker.yml                       |   25 +-
 .github/workflows/frontend-bundle-size-nightly.yml |    3 +
 .github/workflows/generate-FOSSA-report.yml        |    2 +-
 .github/workflows/github-action-validator.yml      |   14 +
 .github/workflows/license-check.yml                |    2 +-
 .github/workflows/pre-commit.yml                   |   14 +
 .github/workflows/python-nightly-canary.yml        |    9 +
 .../scripts/check-code-scanning-available.sh       |   64 +
 .../scripts/check-code-scanning-available.test.sh  |  118 ++
 .github/workflows/showtime-cleanup.yml             |    3 +
 .github/workflows/superset-docs-deploy.yml         |    2 +-
 .github/workflows/superset-docs-verify.yml         |    5 +
 .github/workflows/superset-e2e.yml                 |   14 +
 .github/workflows/superset-frontend.yml            |    3 +
 .github/workflows/superset-helm-lint-test.yml      |    2 +-
 .../workflows/superset-python-unittest-report.yml  |    2 +-
 .github/workflows/superset-python-unittest.yml     |   13 +
 .github/workflows/superset-translations.yml        |    9 +-
 .github/workflows/testcontainers.yml               |    7 +-
 .gitignore                                         |    2 +
 .pre-commit-config.yaml                            |   39 +-
 AGENTS.md                                          |    1 +
 RELEASING/requirements.txt                         |    2 +-
 RESOURCES/INTHEWILD.yaml                           |    5 +
 UPDATING.md                                        |  260 +++-
 docs/admin_docs/configuration/cache.mdx            |   18 +-
 .../configuration/configuring-superset.mdx         |    2 +
 docs/admin_docs/configuration/mcp-server.mdx       |   82 +-
 docs/admin_docs/installation/docker-builds.mdx     |   43 +-
 .../installation/installation-methods.mdx          |    4 +-
 docs/admin_docs/security/oauth.mdx                 |  318 +++++
 docs/admin_docs/security/security.mdx              |   63 +
 .../contributing/development-setup.md              |    6 +
 docs/developer_docs/contributing/howtos.md         |    3 +
 .../extensions/contribution-types.md               |  259 +---
 docs/developer_docs/extensions/development.md      |   37 +
 .../semantic-layers.md}                            |  463 +++---
 docs/developer_docs/extensions/semantic-filters.md |   79 --
 docs/developer_docs/semantic-layer-cache-clear.md  |   17 +-
 docs/developer_docs/semantic-query-errors.md       |   21 +
 docs/developer_docs/sidebars.js                    |    1 +
 .../creating-your-first-dashboard.mdx              |   43 +-
 docs/docs/using-superset/exploring-data.mdx        |   21 +
 docs/docs/using-superset/recently-archived.mdx     |    4 +
 .../using-superset/semantic-layer-connections.mdx  |   17 +
 .../using-superset/semantic-member-selections.mdx  |    2 +-
 .../docs/using-superset/using-ai-with-superset.mdx |   20 +
 docs/docs/using-superset/version-history.mdx       |    8 +-
 docs/docusaurus.config.ts                          |   53 +-
 docs/package.json                                  |   14 +-
 docs/sidebarTutorials.js                           |    2 +-
 docs/static/img/logos/plum.svg                     |  Bin 0 -> 4215 bytes
 docs/static/resources/openapi.json                 |    9 +
 docs/yarn.lock                                     |  756 +++++-----
 pyproject.toml                                     |   18 +-
 requirements/base.in                               |    2 +-
 requirements/base.txt                              |   18 +-
 requirements/development.in                        |    2 +-
 requirements/development.txt                       |   60 +-
 scripts/change_detector.py                         |    1 +
 superset-core/pyproject.toml                       |    5 +-
 .../src/superset_core/semantic_layers/context.py   |   62 +
 .../src/superset_core/semantic_layers/layer.py     |   45 +-
 .../src/superset_core/semantic_layers/testing.py   |   61 +
 .../src/superset_core/semantic_layers/types.py     |   42 +-
 .../src/superset_core/semantic_layers/view.py      |   25 +-
 .../tests/semantic_layers/example_provider.py      |  167 +++
 .../semantic_layers/test_execution_context.py      |   71 +
 .../tests/semantic_layers/test_registration.py     |  153 ++
 superset-embedded-sdk/package-lock.json            |   34 +-
 superset-embedded-sdk/package.json                 |    2 +-
 .../templates/frontend/package.json.j2             |    1 -
 superset-frontend/.storybook/main.mjs              |   10 +-
 superset-frontend/jest.config.js                   |    7 +-
 superset-frontend/package-lock.json                | 1238 +++++++---------
 superset-frontend/package.json                     |   29 +-
 .../packages/superset-core/package.json            |    2 +-
 .../packages/superset-core/tsconfig.json           |   18 +-
 .../src/operators/utils/extractExtraMetrics.ts     |    4 +-
 .../components/RadioButtonControl.tsx              |    9 +-
 .../src/utils/getTemporalColumns.ts                |    4 +-
 .../src/utils/metricColumnFilter.ts                |    4 +-
 .../superset-ui-chart-controls/tsconfig.json       |   18 +-
 .../packages/superset-ui-core/package.json         |    4 +-
 .../src/components/CronPicker/CronPicker.test.tsx  |   28 +-
 .../src/components/CronPicker/index.tsx            |    6 +-
 .../DropdownContainer/DropdownContainer.test.tsx   |   28 +
 .../src/components/DropdownContainer/types.ts      |    4 +-
 .../src/components/SafeMarkdown/SafeMarkdown.tsx   |    2 +-
 .../src/components/TableCollection/utils.tsx       |    3 +-
 .../src/components/Typography/index.tsx            |    3 +-
 .../src/connection/SupersetClientClass.ts          |    4 +-
 .../src/number-format/NumberFormatterRegistry.ts   |   28 +-
 .../factories/createSmartNumberFormatter.ts        |   56 +-
 .../packages/superset-ui-core/src/utils/tooltip.ts |   31 +
 .../test/connection/SupersetClientClass.test.ts    |    5 +-
 .../number-format/NumberFormatterRegistry.test.ts  |   18 +
 .../factories/createSmartNumberFormatter.test.ts   |   14 +
 .../superset-ui-core/test/utils/tooltip.test.ts    |   34 +
 .../packages/superset-ui-core/tsconfig.json        |   18 +-
 .../packages/superset-ui-switchboard/tsconfig.json |   18 +-
 .../playwright/helpers/api/assertions.ts           |   16 +-
 .../playwright/helpers/api/dashboard.ts            |   28 +
 .../playwright/helpers/api/semanticLayer.test.ts   |   65 +
 .../playwright/helpers/api/semanticLayer.ts        |  136 ++
 .../playwright/helpers/fixtures/testAssets.ts      |   25 +-
 superset-frontend/playwright/pages/ExplorePage.ts  |   23 +-
 .../playwright/tests/chart/chart-list.spec.ts      |    4 +-
 .../tests/dashboard/dashboard-list.spec.ts         |    4 +-
 .../tests/dashboard/dashboard-test-helpers.ts      |   20 +-
 .../tests/dashboard/featured-charts-render.spec.ts |  234 +++
 .../dashboard/version-history-placement.spec.ts    |   39 +-
 .../playwright/tests/dataset/dataset-list.spec.ts  |    4 +-
 ...ults.spec.ts => explore-download-image.spec.ts} |   44 +-
 .../semantic-view/semantic-view-dashboard.spec.ts  |  204 +++
 .../tests/version-history/activity-log.spec.ts     |   14 +-
 .../src/utils/useTableTheme.ts                     |   42 -
 .../plugin-chart-ag-grid-table/tsconfig.json       |   18 +-
 .../plugins/plugin-chart-calendar/tsconfig.json    |   18 +-
 .../src/components/OlChartMap.tsx                  |   18 +-
 .../test/components/OlChartMap.test.tsx            |  108 ++
 .../plugin-chart-cartodiagram/tsconfig.json        |   18 +-
 .../plugin-chart-cartodiagram/types/external.d.ts  |    2 +
 .../plugins/plugin-chart-chord/tsconfig.json       |   18 +-
 .../plugins/plugin-chart-country-map/tsconfig.json |   18 +-
 .../src/Candlestick/constants.ts                   |   12 +-
 .../src/Candlestick/controlPanel.tsx               |    8 +-
 .../src/Histogram/transformProps.ts                |    8 +-
 .../src/Timeseries/EchartsTimeseries.tsx           |    4 +
 .../src/Timeseries/Regular/Bar/controlPanel.tsx    |   28 +
 .../src/Timeseries/Regular/Line/controlPanel.tsx   |   19 +
 .../src/Timeseries/transformProps.ts               |   77 +-
 .../plugin-chart-echarts/src/Timeseries/types.ts   |    2 +
 .../plugins/plugin-chart-echarts/src/controls.tsx  |   30 +
 .../plugins/plugin-chart-echarts/src/types.ts      |    2 -
 .../plugin-chart-echarts/src/utils/forecast.ts     |   20 +-
 .../src/utils/mergeCustomEChartOptions.test.ts     |   67 +
 .../src/utils/mergeCustomEChartOptions.ts          |   17 +
 .../test/Candlestick/controlPanel.test.ts          |   10 +
 .../test/Candlestick/transformProps.test.ts        |   17 +
 .../test/Histogram/transformProps.test.ts          |   11 +
 .../test/MixedTimeseries/transformProps.test.ts    |    8 +-
 .../test/Rose/buildQuery.test.ts                   |   12 +-
 .../test/Timeseries/Bar/controlPanel.test.ts       |   28 +
 .../test/Timeseries/EchartsTimeseries.test.tsx     |    6 +
 .../test/Timeseries/Line/controlPanel.test.ts      |   42 +
 .../test/Timeseries/helpers.ts                     |    1 +
 .../test/Timeseries/transformProps.test.ts         |  142 +-
 .../test/utils/forecast.test.ts                    |   63 +-
 .../plugins/plugin-chart-echarts/tsconfig.json     |   18 +-
 .../plugins/plugin-chart-handlebars/tsconfig.json  |   18 +-
 .../plugins/plugin-chart-horizon/tsconfig.json     |   18 +-
 .../plugin-chart-paired-t-test/tsconfig.json       |   18 +-
 .../tsconfig.json                                  |   18 +-
 .../plugins/plugin-chart-partition/tsconfig.json   |   18 +-
 .../src/PivotTableChart.tsx                        |    2 +
 .../src/plugin/buildQuery.ts                       |   35 +-
 .../src/plugin/controlPanel.tsx                    |   54 +-
 .../src/plugin/resultAggregation.ts                |  121 ++
 .../src/plugin/transformProps.ts                   |   37 +-
 .../src/plugin/utilities.ts                        |   42 +-
 .../src/react-pivottable/TableRenderers.tsx        |    9 +-
 .../src/react-pivottable/utilities.ts              |  739 +++++++++-
 .../plugins/plugin-chart-pivot-table/src/types.ts  |    1 +
 .../test/PivotTableChart.test.tsx                  |   22 +
 .../test/plugin/buildQuery.test.ts                 |   21 +
 .../test/plugin/transformProps.test.ts             |   82 +-
 .../test/plugin/utilities.test.ts                  |   49 +-
 .../test/react-pivottable/tableRenders.test.tsx    |   68 +-
 .../test/react-pivottable/utilities.test.ts        |  890 +++++++++++-
 .../plugins/plugin-chart-pivot-table/tsconfig.json |   18 +-
 .../src/MapLibre.tsx                               |   35 +-
 .../test/MapLibre.test.tsx                         |   69 +-
 .../plugin-chart-point-cluster-map/tsconfig.json   |   16 +-
 .../types/external.d.ts                            |    2 +
 .../plugins/plugin-chart-table/src/Styles.tsx      |    4 +
 .../plugins/plugin-chart-table/src/TableChart.tsx  |    7 +-
 .../plugin-chart-table/test/TableChart.test.tsx    |  129 +-
 .../plugins/plugin-chart-table/tsconfig.json       |   18 +-
 .../plugins/plugin-chart-word-cloud/tsconfig.json  |   18 +-
 .../plugins/plugin-chart-world-map/tsconfig.json   |   18 +-
 .../src/CategoricalDeckGLContainer.test.tsx        |  213 ++-
 .../src/CategoricalDeckGLContainer.tsx             |   73 +-
 .../src/DeckGLContainer.test.tsx                   |   28 +
 .../preset-chart-deckgl/src/DeckGLContainer.tsx    |   11 +
 .../preset-chart-deckgl/src/Multi/Multi.tsx        |   25 +-
 .../preset-chart-deckgl/src/Multi/MultiV1.test.tsx |   66 +-
 .../plugins/preset-chart-deckgl/src/Multi/index.ts |    2 +-
 .../src/Multi}/transformProps.test.ts              |   36 +-
 .../src/Multi}/transformProps.ts                   |   16 +-
 .../preset-chart-deckgl/src/factory.test.tsx       |  117 ++
 .../plugins/preset-chart-deckgl/src/factory.tsx    |   25 +
 .../preset-chart-deckgl/src/layers/Arc/Arc.test.ts |    6 +
 .../src/layers/Contour/Contour.test.ts             |   56 +
 .../src/layers/Contour/Contour.tsx                 |    2 +-
 .../src/layers/Polygon/Polygon.test.tsx            |  100 ++
 .../src/layers/Polygon/Polygon.tsx                 |   22 +
 .../plugins/preset-chart-deckgl/tsconfig.json      |   16 +-
 .../preset-chart-deckgl/types/external.d.ts        |    2 +
 .../types/global.d.ts                              |    2 +-
 superset-frontend/spec/helpers/runStopButton.ts    |   55 +
 .../src/SqlLab/actions/sqlLab.test.ts              |  251 ++++
 superset-frontend/src/SqlLab/actions/sqlLab.ts     |   36 +-
 .../SqlLab/components/ResultSet/ResultSet.test.tsx |   13 +-
 .../src/SqlLab/components/ResultSet/index.tsx      |   10 +-
 .../RunQueryActionButton.test.tsx                  |  545 ++++++-
 .../components/RunQueryActionButton/index.tsx      |   37 +-
 .../SqlLab/components/SqlEditor/SqlEditor.test.tsx |   17 +-
 .../src/SqlLab/components/SqlEditor/index.tsx      |   10 +-
 .../TableExploreTree/TableExploreTree.test.tsx     |   13 +-
 .../SqlLab/components/TableExploreTree/index.tsx   |   10 +-
 .../components/TablePreview/TablePreview.test.tsx  |   13 +-
 .../src/SqlLab/components/TablePreview/index.tsx   |    8 +-
 .../src/components/Chart/Chart.test.tsx            |   38 +
 superset-frontend/src/components/Chart/Chart.tsx   |    8 +
 .../components/Chart/ChartErrorMessage.test.tsx    |    2 +-
 .../src/components/Chart/ChartErrorMessage.tsx     |    3 +-
 .../Chart/ChartRenderer.refresh.test.tsx           |  302 ++++
 .../src/components/Chart/ChartRenderer.test.tsx    |   19 +
 .../src/components/Chart/ChartRenderer.tsx         |   90 +-
 .../src/components/Chart/chartAction.ts            |   34 +
 .../src/components/Chart/chartActions.test.ts      |   62 +
 .../FoldersEditor/FoldersEditor.test.tsx           |   17 +-
 .../components/Datasource/FoldersEditor/index.tsx  |   12 +-
 .../DatasourceEditor/DatasourceEditor.tsx          |   45 +-
 ...atasourceEditorNormalizeColumnsWarning.test.tsx |  146 ++
 .../src/components/Datasource/utils/index.ts       |   12 +-
 .../src/components/Datasource/utils/utils.test.tsx |   28 +-
 .../components/ErrorMessage/ErrorAlert.test.tsx    |   41 +
 .../src/components/GridTable/GridTable.test.tsx    |   46 +-
 .../src/components/GridTable/index.tsx             |   19 +-
 .../src/components/JsonModal/JsonModal.test.tsx    |   18 +
 .../src/components/JsonModal/utils.ts              |   10 +-
 .../src/dashboard/actions/hydrate.test.ts          |   43 +
 superset-frontend/src/dashboard/actions/hydrate.ts |   32 +-
 .../components/AnchorLink/AnchorLink.test.tsx      |    2 +-
 .../DashboardBuilder/DashboardBuilder.test.tsx     |  137 +-
 .../DashboardBuilder/DashboardBuilder.tsx          |  155 +-
 .../DashboardBuilder/DashboardWrapper.tsx          |    2 +-
 .../src/dashboard/components/Header/index.tsx      |    4 +-
 .../PropertiesModal.manyCharts.test.tsx            |  107 ++
 .../dashboard/components/PropertiesModal/index.tsx |    9 +-
 .../PropertiesModal/sections/AccessSection.tsx     |    2 +-
 .../RefreshFrequencySelect.test.tsx                |   99 +-
 .../RefreshFrequency/RefreshFrequencySelect.tsx    |   43 +-
 .../src/dashboard/components/SliceAdder.test.tsx   |    2 +-
 .../src/dashboard/components/SliceAdder.tsx        |    8 +-
 .../components/gridComponents/Header/Header.tsx    |    2 +-
 .../DownloadMenuItems/DownloadMenuItems.test.tsx   |    4 +-
 .../FilterControls.overflow.test.tsx               |  269 ++++
 .../FilterBar/FilterControls/FilterControls.tsx    |    4 +-
 .../FilterBar/FilterControls/FilterValue.test.tsx  |   20 +
 .../FilterBar/FilterControls/FilterValue.tsx       |   12 +-
 .../hooks/useFilterOperations.test.ts              |  145 +-
 .../hooks/useItemStateManager.ts                   |   28 +-
 .../src/dashboard/containers/DashboardPage.tsx     |    5 +-
 superset-frontend/src/dashboard/types.ts           |    2 +-
 .../util/charts/getFormDataWithExtraFilters.ts     |    7 +-
 .../util/getFormDataWithExtraFilters.test.ts       |   49 +
 superset-frontend/src/embedded/index.tsx           |    5 +-
 .../src/explore/actions/saveModalActions.test.ts   |  212 +++
 .../src/explore/actions/saveModalActions.ts        |   14 +
 .../components/ChartPills.behavior.test.tsx        |  158 +++
 .../DatasourcePanel.real-autosizer.test.tsx        |    7 +-
 .../DatasourcePanel/DatasourcePanel.test.tsx       |   13 +-
 .../explore/components/DatasourcePanel/index.tsx   |   10 +-
 .../ExploreChartHeader/ExploreChartHeader.test.tsx |  289 ++++
 .../ExploreChartPanel/ExploreChartPanel.test.tsx   |   28 +-
 .../explore/components/ExploreChartPanel/index.tsx |    6 +
 .../ExploreViewContainer.test.tsx                  |  276 +++-
 .../components/ExploreViewContainer/index.tsx      |    6 +-
 .../components/LegacyAggregationAlert.test.tsx     |  302 ++++
 .../explore/components/LegacyAggregationAlert.tsx  |  115 ++
 .../RunQueryButton/RunQueryButton.test.tsx         |  361 ++++-
 .../explore/components/RunQueryButton/index.tsx    |    6 +-
 .../ColorSchemeControl/ColorSchemeLabel.test.tsx   |   14 +
 .../ColorSchemeControl/ColorSchemeLabel.tsx        |    3 +
 .../controls/ComparisonRangeLabel.test.tsx         |   38 +-
 .../components/controls/ComparisonRangeLabel.tsx   |   24 +-
 .../ConditionalFormattingControl.test.tsx          |  112 +-
 .../ConditionalFormattingControl.tsx               |   12 +-
 .../ContourControl/ContourControl.test.tsx         |  128 ++
 .../controls/ContourControl/ContourOption.tsx      |    8 +-
 .../ContourControl/ContourPopoverControl.tsx       |   17 +-
 .../index.test.tsx}                                |   39 +-
 .../DatasourceControl/DatasourceControl.test.tsx   |    2 +-
 .../controls/FixedOrMetricControl/index.tsx        |    2 +-
 .../components/controls/JSEditorControl.test.tsx   |    9 +-
 .../components/controls/JSEditorControl.tsx        |   10 +-
 .../LayerConfigsControl.test.tsx                   |  271 ++++
 .../MapViewControl/MapViewControl.test.tsx         |  134 ++
 .../MapViewControl/MapViewPopoverContent.test.tsx  |   78 +
 .../components/controls/SliderControl.test.tsx     |   71 +
 .../components/controls/SwitchControl.test.tsx     |   57 +
 .../controls/TimeRangeControl/index.test.tsx       |   55 +
 .../controls/VerticalRadioControl.test.tsx         |   83 ++
 .../controls/ViewQueryModalFooter.test.tsx         |  142 +-
 .../controls/VizTypeControl/VizTypeGallery.tsx     |   24 +-
 .../ZoomConfigControl/ZoomConfigControl.test.tsx   |  195 +--
 .../ZoomConfigControl/ZoomConfigsChart.test.tsx    |  178 +++
 superset-frontend/src/explore/constants.ts         |   10 +
 .../exploreUtils/legacyAggregationTag.test.ts      |  137 ++
 .../explore/exploreUtils/legacyAggregationTag.ts   |   93 ++
 superset-frontend/src/explore/types.ts             |    2 +
 .../alerts/components/AlertStatusIcon.test.tsx     |   14 +
 .../features/alerts/components/AlertStatusIcon.tsx |    1 +
 .../src/features/charts/ChartCard.test.tsx         |   32 +
 .../src/features/charts/ChartCard.tsx              |   10 +-
 .../src/features/dashboards/DashboardCard.test.tsx |   47 +-
 .../src/features/dashboards/DashboardCard.tsx      |   14 +-
 .../src/features/home/DashboardTable.test.tsx      |   58 +-
 .../src/features/home/DashboardTable.tsx           |   31 +-
 .../src/features/home/RightMenu.test.tsx           |   76 +
 superset-frontend/src/features/home/RightMenu.tsx  |   16 +
 .../semanticViews/AddSemanticViewModal.test.tsx    |  251 +++-
 .../semanticViews/AddSemanticViewModal.tsx         |  121 +-
 .../src/features/semanticViews/creationResult.ts   |   90 ++
 superset-frontend/src/features/tags/tags.ts        |    2 +-
 .../src/features/versionHistory/ActionRow.tsx      |    5 +-
 .../versionHistory/CurrentVersionSection.tsx       |   12 +-
 .../DashboardVersionHistory.test.tsx               |    4 +-
 .../versionHistory/RelatedUpdateRow.test.tsx       |   27 +
 .../features/versionHistory/RelatedUpdateRow.tsx   |    5 +-
 .../features/versionHistory/SaveGroupItem.test.tsx |   88 +-
 .../src/features/versionHistory/SaveGroupItem.tsx  |   66 +-
 .../versionHistory/VersionHistoryPanel.test.tsx    |  139 +-
 .../versionHistory/VersionHistoryPanel.tsx         |   54 +-
 .../src/features/versionHistory/display.test.ts    |   75 +
 .../src/features/versionHistory/display.ts         |   61 +-
 .../versionHistory/useVersionActivity.test.ts      |    4 +-
 .../src/hooks/apiResources/dashboards.test.ts      |   48 +
 .../src/hooks/apiResources/dashboards.ts           |    1 +
 superset-frontend/src/hooks/useRunStopButton.ts    |  181 +++
 .../src/pages/ActionLog/ActionLog.test.tsx         |   76 +
 superset-frontend/src/pages/ActionLog/index.tsx    |   67 +-
 .../pages/ChartList/ChartList.permissions.test.tsx |   27 +-
 superset-frontend/src/pages/ChartList/index.tsx    |   19 +-
 .../DashboardList/DashboardList.cardview.test.tsx  |   77 +-
 .../DashboardList.permissions.test.tsx             |   34 +-
 .../src/pages/DashboardList/index.tsx              |   34 +-
 .../DatasetList/DatasetList.permissions.test.tsx   |   30 +
 superset-frontend/src/pages/DatasetList/index.tsx  |   28 +-
 superset-frontend/src/types/Dashboard.ts           |    1 +
 superset-frontend/src/types/bootstrapTypes.ts      |    1 +
 superset-frontend/src/utils/lazyWithRetry.test.tsx |  140 ++
 superset-frontend/src/utils/lazyWithRetry.ts       |  135 ++
 superset-frontend/src/views/routes.tsx             |   83 +-
 superset-frontend/tsconfig.json                    |   18 +-
 superset-frontend/webpack.config.js                |   36 +-
 superset-websocket/package-lock.json               |  550 +++----
 superset-websocket/package.json                    |    8 +-
 .../utils/client-ws-app/package-lock.json          |  147 +-
 .../utils/client-ws-app/package.json               |    2 +-
 superset/app.py                                    |   36 +-
 superset/charts/api.py                             |   32 +-
 superset/charts/client_processing.py               |  302 +++-
 superset/charts/data/api.py                        |   48 +-
 superset/charts/data/dashboard_filter_context.py   |   22 +
 superset/charts/filters.py                         |    8 +
 superset/cli/update.py                             |   17 -
 superset/commands/chart/create.py                  |    4 +
 superset/commands/chart/data/get_data_command.py   |   37 +-
 superset/commands/chart/exceptions.py              |    4 +
 superset/commands/chart/export.py                  |   34 +-
 superset/commands/chart/update.py                  |   19 +
 superset/commands/chart/utils.py                   |   39 +
 superset/commands/dashboard/export.py              |   51 +-
 superset/commands/dataset/create.py                |   69 +-
 superset/commands/dataset/duplicate.py             |   48 +-
 superset/commands/dataset/exceptions.py            |   46 +
 superset/commands/dataset/importers/v1/utils.py    |  194 ++-
 superset/commands/dataset/update.py                |  127 +-
 superset/commands/export/assets.py                 |   75 +-
 superset/commands/export/models.py                 |   18 +-
 superset/commands/importers/v1/examples.py         |    8 +-
 superset/commands/importers/v1/utils.py            |   73 +-
 superset/commands/report/base.py                   |   73 +
 superset/commands/semantic_layer/create.py         |   55 +-
 superset/commands/semantic_layer/utils.py          |    2 +-
 superset/commands/sql_lab/execute.py               |   12 +
 superset/commands/streaming_export/base.py         |   34 +-
 superset/common/db_query_status.py                 |    6 +
 superset/common/form_data_query_context.py         |   30 +
 superset/common/query_context_factory.py           |   20 +-
 superset/common/query_context_processor.py         |   26 +-
 superset/common/query_object_factory.py            |   31 +-
 superset/common/tags.py                            |  496 -------
 superset/common/utils/time_range_utils.py          |   32 +-
 superset/config.py                                 |   65 +
 superset/connectors/sqla/utils.py                  |   49 +-
 superset/daos/dashboard.py                         |  158 ++-
 superset/dashboards/api.py                         |   37 +-
 superset/dashboards/filters.py                     |    7 +
 superset/dashboards/schemas.py                     |    3 +
 superset/databases/api.py                          |   39 +-
 superset/datasets/api.py                           |   33 +-
 superset/datasets/schemas.py                       |   17 +-
 superset/datasource/api.py                         |  150 +-
 superset/db_engine_specs/bigquery.py               |   15 +-
 superset/db_engine_specs/impala.py                 |   47 +-
 superset/db_engine_specs/oceanbase.py              |   86 ++
 superset/db_engine_specs/trino.py                  |   33 +-
 superset/errors.py                                 |    1 +
 superset/exceptions.py                             |   27 +
 superset/extensions/metadb.py                      |    3 +-
 superset/importexport/api.py                       |   45 +-
 superset/initialization/__init__.py                |   27 +-
 superset/jinja_context.py                          |   21 +-
 superset/key_value/types.py                        |    3 +
 superset/mcp_service/README.md                     |   41 +
 superset/mcp_service/app.py                        |    4 +-
 superset/mcp_service/chart/chart_helpers.py        |   30 +
 superset/mcp_service/chart/chart_utils.py          |   16 +-
 superset/mcp_service/chart/compile.py              |  176 ++-
 .../chart/prompts/create_chart_guided.py           |    4 +-
 .../mcp_service/chart/resources/chart_configs.py   |   14 +-
 superset/mcp_service/chart/schemas.py              |  133 +-
 superset/mcp_service/chart/tool/get_chart_data.py  |  183 ++-
 .../mcp_service/chart/tool/get_chart_preview.py    |  145 +-
 superset/mcp_service/constants.py                  |    1 +
 superset/mcp_service/dashboard/layout_placement.py |   21 +-
 superset/mcp_service/dashboard/schemas.py          |  139 +-
 .../dashboard/tool/apply_dashboard_filters.py      |   34 +-
 .../dashboard/tool/duplicate_dashboard.py          |   14 +-
 .../dashboard/tool/get_dashboard_data.py           |   96 +-
 superset/mcp_service/dashboard_scope_sql.py        |   25 +-
 superset/mcp_service/database/schemas.py           |    8 +-
 superset/mcp_service/dataset/schemas.py            |   30 +-
 .../dataset/tool/update_dataset_metric.py          |    2 +-
 superset/mcp_service/jwt_verifier.py               |   28 +-
 superset/mcp_service/mcp_config.py                 |    3 +
 superset/mcp_service/middleware.py                 |   54 +
 superset/mcp_service/report/schemas.py             |    4 +
 superset/mcp_service/tag/tool/get_tag_info.py      |    6 +-
 superset/mcp_service/tag/tool/list_tags.py         |    6 +-
 superset/mcp_service/utils/response_size_utils.py  |    4 +
 superset/mcp_service/utils/sanitization.py         |  114 +-
 superset/mcp_service/utils/schema_utils.py         |   19 +
 superset/mcp_service/utils/validation.py           |   89 +-
 ...141b8ada7731_tag_pivot_tables_with_restored_.py |  334 +++++
 ...ep_legacy_password_view_perms_from_all_roles.py |  120 ++
 superset/models/core.py                            |    5 +-
 superset/models/dashboard.py                       |   13 +
 superset/models/helpers.py                         |  192 ++-
 superset/queries/api.py                            |    3 +
 superset/queries/saved_queries/api.py              |   33 +-
 superset/queries/schemas.py                        |    2 +-
 superset/reports/api.py                            |   15 +-
 superset/reports/filters.py                        |   37 +
 superset/result_set.py                             |    5 +
 superset/security/manager.py                       |   65 +-
 superset/security/password_change.py               |  101 +-
 superset/semantic_layers/api.py                    |   71 +-
 superset/semantic_layers/cache_host.py             |   19 +-
 superset/semantic_layers/cache_policy.py           |   14 +-
 superset/semantic_layers/cache_repository.py       |   14 +-
 superset/semantic_layers/cache_transform.py        |   17 +-
 superset/semantic_layers/dimension_resolution.py   |  117 ++
 superset/semantic_layers/execution.py              |  286 ++++
 superset/semantic_layers/mapper.py                 |  341 +++--
 superset/semantic_layers/models.py                 |  167 +--
 superset/semantic_layers/ordering.py               |   59 +
 superset/sql/execution/celery_task.py              |   79 +-
 superset/sql/execution/executor.py                 |  233 ++-
 superset/sql/execution/serialization.py            |  130 ++
 superset/sql/parse.py                              |   54 +-
 superset/sql_lab.py                                |   10 +-
 superset/sqllab/api.py                             |    4 +-
 superset/tags/core.py                              |   98 +-
 superset/tags/models.py                            |  311 +---
 superset/tasks/async_queries.py                    |   34 +-
 superset/tasks/schemas.py                          |    9 +
 superset/themes/api.py                             |    7 +-
 superset/translations/ar/LC_MESSAGES/messages.po   |  372 ++++-
 superset/translations/ca/LC_MESSAGES/messages.po   |  346 ++++-
 superset/translations/cs/LC_MESSAGES/messages.po   |  354 ++++-
 superset/translations/de/LC_MESSAGES/messages.po   |  346 ++++-
 superset/translations/en/LC_MESSAGES/messages.po   |  328 ++++-
 superset/translations/es/LC_MESSAGES/messages.po   |  346 ++++-
 superset/translations/fa/LC_MESSAGES/messages.po   |  340 ++++-
 superset/translations/fi/LC_MESSAGES/messages.po   |  362 ++++-
 superset/translations/fr/LC_MESSAGES/messages.po   |  348 ++++-
 superset/translations/it/LC_MESSAGES/messages.po   |  368 ++++-
 superset/translations/ja/LC_MESSAGES/messages.po   |  342 ++++-
 superset/translations/ko/LC_MESSAGES/messages.po   |  355 ++++-
 superset/translations/lv/LC_MESSAGES/messages.po   |  354 ++++-
 superset/translations/messages.pot                 |  350 +++--
 superset/translations/mi/LC_MESSAGES/messages.po   |  346 ++++-
 superset/translations/nl/LC_MESSAGES/messages.po   |  340 ++++-
 superset/translations/pl/LC_MESSAGES/messages.po   |  343 ++++-
 superset/translations/pt/LC_MESSAGES/messages.po   |  368 ++++-
 .../translations/pt_BR/LC_MESSAGES/messages.po     |  340 ++++-
 superset/translations/ro/LC_MESSAGES/messages.po   |  357 ++++-
 superset/translations/ru/LC_MESSAGES/messages.po   |  355 ++++-
 superset/translations/sk/LC_MESSAGES/messages.po   |  354 ++++-
 superset/translations/sl/LC_MESSAGES/messages.po   |  362 ++++-
 superset/translations/sr/LC_MESSAGES/messages.po   |  376 ++++-
 .../translations/sr_Latn/LC_MESSAGES/messages.po   |  376 ++++-
 superset/translations/ta/LC_MESSAGES/messages.po   |  346 ++++-
 superset/translations/th/LC_MESSAGES/messages.po   |  354 ++++-
 superset/translations/tr/LC_MESSAGES/messages.po   |  341 ++++-
 superset/translations/uk/LC_MESSAGES/messages.po   |  362 ++++-
 superset/translations/zh/LC_MESSAGES/messages.po   |  332 ++++-
 .../translations/zh_TW/LC_MESSAGES/messages.po     |  332 ++++-
 superset/utils/core.py                             |   11 +-
 superset/utils/date_parser.py                      |    7 +-
 superset/utils/error_sanitization.py               |   38 +
 superset/utils/excel.py                            |    7 +-
 superset/utils/filters.py                          |  111 +-
 superset/utils/number_format.py                    |   94 ++
 superset/utils/pandas_postprocessing/compare.py    |   14 +-
 superset/utils/screenshot_utils.py                 |   34 +-
 superset/utils/webdriver.py                        |    4 +-
 superset/versioning/changes/shadow_queries.py      |    9 +-
 superset/versioning/diff.py                        |  124 +-
 superset/versioning/restore.py                     |   41 +-
 superset/views/api.py                              |    5 +
 superset/views/archived_assets.py                  |   18 +-
 superset/views/base.py                             |    4 +
 superset/views/base_api.py                         |   24 +
 superset/views/datasource/views.py                 |   80 +-
 .../src/superset_e2e_semantic_stub/__init__.py     |  294 ++++
 .../semantic_stub/dist/manifest.json               |   10 +
 tests/integration_tests/charts/api_tests.py        |    8 +-
 tests/integration_tests/dashboards/api_tests.py    |  119 +-
 .../dashboards/version_restore_tests.py            |  358 +++++
 tests/integration_tests/datasets/api_tests.py      |   45 +
 tests/integration_tests/datasource/api_tests.py    |  237 +++-
 tests/integration_tests/queries/api_tests.py       |   30 +
 tests/integration_tests/security_tests.py          |  113 +-
 ...ist_off.py => superset_test_config_semantic.py} |   24 +-
 tests/integration_tests/tagging_tests.py           |  294 ----
 tests/integration_tests/tags/dao_tests.py          |   94 +-
 tests/integration_tests/tags/race_tests.py         |   94 ++
 tests/integration_tests/tasks/api_tests.py         |   78 +-
 .../common => tests/mypy_fixtures}/__init__.py     |    8 +-
 tests/mypy_fixtures/uuid_mixin_nullable.py         |   44 +
 .../db_engine_specs/test_oceanbase.py              |   94 +-
 .../charts/commands/data/test_get_data_command.py  |   63 +-
 .../charts/commands/importers/v1/import_test.py    |   46 +
 .../charts/data/streaming_filename_test.py         |   18 +-
 tests/unit_tests/charts/test_client_processing.py  |  822 ++++++++++-
 tests/unit_tests/charts/test_filters.py            |  110 ++
 tests/unit_tests/commands/chart/create_test.py     |  252 +++-
 tests/unit_tests/commands/chart/export_test.py     |  576 ++++++++
 tests/unit_tests/commands/chart/update_test.py     |  266 +++-
 tests/unit_tests/commands/dashboard/export_test.py |    8 +-
 tests/unit_tests/commands/dataset/test_create.py   |  268 +++-
 .../unit_tests/commands/dataset/test_duplicate.py  |  136 +-
 tests/unit_tests/commands/dataset/update_test.py   |  475 ++++++-
 .../commands/importers/v1/examples_test.py         |   51 +
 .../unit_tests/commands/importers/v1/utils_test.py |  233 +++
 tests/unit_tests/commands/report/base_test.py      |  239 ++++
 .../unit_tests/commands/report/conftest.py         |    6 +-
 .../commands/report/semantic_view_report_test.py   |  232 +++
 .../commands/semantic_layer/create_test.py         |  193 ++-
 .../commands/semantic_layer/update_test.py         |   12 +-
 tests/unit_tests/commands/sql_lab/test_estimate.py |   27 +
 tests/unit_tests/commands/sql_lab/test_execute.py  |   92 ++
 .../commands/streaming_export}/__init__.py         |    0
 .../commands/streaming_export/base_test.py         |   51 +
 .../common/test_query_context_factory.py           |   35 +
 .../common/test_query_context_processor.py         |   76 +-
 tests/unit_tests/common/test_time_range_utils.py   |   27 +
 tests/unit_tests/conftest.py                       |   53 +-
 tests/unit_tests/connectors/sqla/utils_test.py     |   26 +
 tests/unit_tests/dao/dashboard_test.py             |  581 ++++++++
 tests/unit_tests/dao/query_stop_isolation_test.py  |  126 ++
 .../dao/test_copy_dashboard_legacy_ids.py          |   81 +-
 tests/unit_tests/daos/test_query_dao.py            |   21 +-
 tests/unit_tests/dashboards/datasets_test.py       |   86 ++
 .../dashboards/semantic_view_access_test.py        |  141 +-
 tests/unit_tests/databases/api_test.py             |   91 +-
 .../datasets/commands/importers/v1/import_test.py  |  608 +++++++-
 tests/unit_tests/datasets/schema_tests.py          |   80 ++
 tests/unit_tests/datasource/test_compatible_api.py |   98 ++
 tests/unit_tests/db_engine_specs/test_bigquery.py  |   70 +
 .../db_engine_specs/test_impala_pending.py         |  129 +-
 tests/unit_tests/db_engine_specs/test_oceanbase.py |  228 +++
 tests/unit_tests/db_engine_specs/test_trino.py     | 1104 +++++++++++++-
 tests/unit_tests/exceptions_test.py                |   46 +
 tests/unit_tests/importexport/api_test.py          |  141 +-
 tests/unit_tests/initialization_test.py            |    9 +-
 tests/unit_tests/jinja_context_test.py             |   74 +
 .../mcp_service/chart/test_bullet_chart.py         |   18 +-
 .../mcp_service/chart/test_bullet_tool_paths.py    |   24 +-
 .../mcp_service/chart/test_chart_examples.py       |   48 +
 .../mcp_service/chart/test_chart_helpers.py        |   67 +
 .../mcp_service/chart/test_chart_schemas.py        |   21 +
 tests/unit_tests/mcp_service/chart/test_compile.py |  464 ++++++
 .../chart/test_native_chart_regressions.py         |   24 +
 .../mcp_service/chart/test_new_chart_types.py      |   26 +-
 .../test_review_query_and_preview_regressions.py   |    7 +-
 .../chart/test_time_grain_generic_axes.py          |  171 +++
 .../mcp_service/chart/tool/test_get_chart_data.py  |  693 ++++++++-
 .../chart/tool/test_get_chart_preview.py           |  453 ++++++
 .../common/test_list_scope_validation.py           |  105 ++
 .../dashboard/test_dashboard_schemas.py            |   39 +
 .../dashboard/tool/test_apply_dashboard_filters.py |   67 +-
 .../dashboard/tool/test_duplicate_dashboard.py     |   86 +-
 .../dashboard/tool/test_get_dashboard_data.py      |  507 +++++++
 .../dashboard/tool/test_list_dashboards.py         |   85 ++
 .../mcp_service/dataset/tool/test_query_dataset.py |   44 +-
 .../mcp_service/native_tool_inventory.json         |  112 +-
 .../test_compatibility_selection_validation.py     |    9 +-
 .../semantic_layer/tool/test_get_table.py          |   27 +-
 .../semantic_layer/tool/test_list_metrics.py       |   25 +-
 .../mcp_service/test_browser_hello_middleware.py   |  126 ++
 .../mcp_service/test_dashboard_scope_sql.py        |   75 +
 tests/unit_tests/mcp_service/test_mcp_config.py    |    9 +
 .../mcp_service/test_mcp_tool_registration.py      |   23 +
 tests/unit_tests/mcp_service/test_middleware.py    |    5 +-
 .../mcp_service/test_native_tool_surface.py        |   10 +-
 .../test_sanitization_warning_inputs.py            |  450 +++++-
 .../unit_tests/mcp_service/test_tool_inventory.py  |   21 +-
 .../mcp_service/test_validation_contract.py        |   42 +-
 .../mcp_service/utils/test_sanitization.py         |  163 +++
 .../test_sweep_legacy_password_view_perms.py       |  190 +++
 ...t_tag_pivot_tables_with_restored_aggregation.py |  461 ++++++
 tests/unit_tests/models/helpers_test.py            |  793 ++++++++++-
 tests/unit_tests/models/template_params_test.py    |   68 +
 tests/unit_tests/models/test_multivalue_filter.py  |  138 ++
 .../pandas_postprocessing/test_compare.py          |  109 ++
 tests/unit_tests/reports/filters_test.py           |   53 +
 tests/unit_tests/scripts/change_detector_test.py   |   13 +
 .../scripts/translations/babel_update_test.py      |  105 +-
 tests/unit_tests/security/manager_test.py          |  174 +++
 tests/unit_tests/security/test_password_change.py  |   63 +
 .../unit_tests/security/test_password_recovery.py  |   12 +-
 tests/unit_tests/semantic_layers/api_test.py       |  379 ++++-
 .../unit_tests/semantic_layers/cache_host_test.py  |    6 +
 .../semantic_layers/cache_policy_test.py           |    3 +-
 .../semantic_layers/cache_transform_test.py        |    8 +-
 tests/unit_tests/semantic_layers/conftest.py       |  171 +++
 .../semantic_layers/default_order_test.py          |  376 +++++
 .../semantic_layers/dimension_resolution_test.py   |  161 +++
 .../semantic_layers/e2e_stub_extension_test.py     |  246 ++++
 .../semantic_layers/execution_context_test.py      | 1141 +++++++++++++++
 .../semantic_layers/grain_validation_test.py       |    6 +-
 .../semantic_layers/import_export_test.py          |    6 +-
 .../semantic_layers/integer_precision_test.py      |   14 +-
 tests/unit_tests/semantic_layers/mapper_test.py    |  989 +++++++++++--
 .../semantic_layers/metadata_contract_test.py      |   92 +-
 .../semantic_layers/metric_filter_test.py          |  209 ++-
 tests/unit_tests/semantic_layers/models_test.py    |  252 +++-
 .../semantic_layers/query_errors_test.py           |  301 +++-
 .../semantic_layers/simple_cache_clear_test.py     |  106 +-
 .../semantic_layers/values_endpoint_test.py        |  212 +++
 tests/unit_tests/sql/execution/conftest.py         |    5 +-
 .../unit_tests/sql/execution/test_async_results.py | 1500 ++++++++++++++++++++
 tests/unit_tests/sql/execution/test_celery_task.py |  136 +-
 tests/unit_tests/sql/execution/test_executor.py    |   39 +
 tests/unit_tests/sql/parse_tests.py                |  110 ++
 tests/unit_tests/sqllab/api_test.py                |   24 +-
 tests/unit_tests/tags/models_test.py               |    6 +-
 tests/unit_tests/tags/race_test.py                 |   84 ++
 tests/unit_tests/tasks/test_async_queries.py       |  139 +-
 tests/unit_tests/tasks/test_schemas.py             |   62 +
 tests/unit_tests/test_app_reinitialization.py      |  114 ++
 tests/unit_tests/themes/api_test.py                |   33 +
 tests/unit_tests/utils/excel_tests.py              |   13 +
 tests/unit_tests/utils/filters_test.py             |  260 +++-
 tests/unit_tests/utils/number_format_test.py       |   31 +
 tests/unit_tests/utils/test_core.py                |   20 +
 tests/unit_tests/utils/test_error_sanitization.py  |   94 ++
 tests/unit_tests/utils/test_screenshot_utils.py    |  134 ++
 .../versioning/test_dataset_child_extra.py         |  148 ++
 .../versioning/test_diff_save_defaults.py          |  264 ++++
 tests/unit_tests/versioning/test_shadow_queries.py |   79 ++
 tests/unit_tests/views/datasource/views_test.py    |  440 +++++-
 tests/unit_tests/views/test_archived_assets.py     |   86 ++
 tests/unit_tests/views/test_base.py                |   72 +
 .../unit_tests/views/test_parse_json_form_field.py |   54 +
 678 files changed, 56685 insertions(+), 7760 deletions(-)
 create mode 100755 .github/workflows/scripts/check-code-scanning-available.sh
 create mode 100755 
.github/workflows/scripts/check-code-scanning-available.test.sh
 create mode 100644 docs/admin_docs/security/oauth.mdx
 copy docs/developer_docs/extensions/{contribution-types.md => 
extension-points/semantic-layers.md} (52%)
 delete mode 100644 docs/developer_docs/extensions/semantic-filters.md
 create mode 100644 docs/static/img/logos/plum.svg
 create mode 100644 superset-core/src/superset_core/semantic_layers/context.py
 create mode 100644 superset-core/src/superset_core/semantic_layers/testing.py
 create mode 100644 superset-core/tests/semantic_layers/example_provider.py
 create mode 100644 
superset-core/tests/semantic_layers/test_execution_context.py
 create mode 100644 superset-core/tests/semantic_layers/test_registration.py
 create mode 100644 
superset-frontend/playwright/helpers/api/semanticLayer.test.ts
 create mode 100644 superset-frontend/playwright/helpers/api/semanticLayer.ts
 create mode 100644 
superset-frontend/playwright/tests/dashboard/featured-charts-render.spec.ts
 copy superset-frontend/playwright/tests/explore/{explore-no-results.spec.ts => 
explore-download-image.spec.ts} (53%)
 create mode 100644 
superset-frontend/playwright/tests/semantic-view/semantic-view-dashboard.spec.ts
 delete mode 100644 
superset-frontend/plugins/plugin-chart-ag-grid-table/src/utils/useTableTheme.ts
 create mode 100644 
superset-frontend/plugins/plugin-chart-cartodiagram/test/components/OlChartMap.test.tsx
 create mode 100644 
superset-frontend/plugins/plugin-chart-pivot-table/src/plugin/resultAggregation.ts
 copy superset-frontend/plugins/{plugin-chart-parallel-coordinates/test => 
preset-chart-deckgl/src/Multi}/transformProps.test.ts (52%)
 copy 
superset-frontend/{src/chartCustomizations/components/DeckglLayerVisibility => 
plugins/preset-chart-deckgl/src/Multi}/transformProps.ts (72%)
 create mode 100644 
superset-frontend/plugins/preset-chart-deckgl/src/factory.test.tsx
 create mode 100644 
superset-frontend/plugins/preset-chart-deckgl/src/layers/Contour/Contour.test.ts
 copy superset-frontend/plugins/{plugin-chart-point-cluster-map => 
preset-chart-deckgl}/types/global.d.ts (92%)
 create mode 100644 superset-frontend/spec/helpers/runStopButton.ts
 create mode 100644 
superset-frontend/src/components/Chart/ChartRenderer.refresh.test.tsx
 create mode 100644 
superset-frontend/src/components/Datasource/components/DatasourceEditor/tests/DatasourceEditorNormalizeColumnsWarning.test.tsx
 create mode 100644 
superset-frontend/src/dashboard/components/PropertiesModal/PropertiesModal.manyCharts.test.tsx
 create mode 100644 
superset-frontend/src/explore/components/ChartPills.behavior.test.tsx
 create mode 100644 
superset-frontend/src/explore/components/LegacyAggregationAlert.test.tsx
 create mode 100644 
superset-frontend/src/explore/components/LegacyAggregationAlert.tsx
 create mode 100644 
superset-frontend/src/explore/components/controls/ContourControl/ContourControl.test.tsx
 copy 
superset-frontend/src/explore/components/controls/{DateFilterControl/tests/CurrentCalendarFrame.test.tsx
 => CustomListItem/index.test.tsx} (50%)
 create mode 100644 
superset-frontend/src/explore/components/controls/LayerConfigsControl/LayerConfigsControl.test.tsx
 create mode 100644 
superset-frontend/src/explore/components/controls/MapViewControl/MapViewControl.test.tsx
 create mode 100644 
superset-frontend/src/explore/components/controls/MapViewControl/MapViewPopoverContent.test.tsx
 create mode 100644 
superset-frontend/src/explore/components/controls/SliderControl.test.tsx
 create mode 100644 
superset-frontend/src/explore/components/controls/SwitchControl.test.tsx
 create mode 100644 
superset-frontend/src/explore/components/controls/TimeRangeControl/index.test.tsx
 create mode 100644 
superset-frontend/src/explore/components/controls/VerticalRadioControl.test.tsx
 create mode 100644 
superset-frontend/src/explore/components/controls/ZoomConfigControl/ZoomConfigsChart.test.tsx
 create mode 100644 
superset-frontend/src/explore/exploreUtils/legacyAggregationTag.test.ts
 create mode 100644 
superset-frontend/src/explore/exploreUtils/legacyAggregationTag.ts
 create mode 100644 
superset-frontend/src/features/semanticViews/creationResult.ts
 create mode 100644 superset-frontend/src/hooks/useRunStopButton.ts
 create mode 100644 superset-frontend/src/utils/lazyWithRetry.test.tsx
 create mode 100644 superset-frontend/src/utils/lazyWithRetry.ts
 delete mode 100644 superset/common/tags.py
 create mode 100644 
superset/migrations/versions/2026-09-25_00-00_141b8ada7731_tag_pivot_tables_with_restored_.py
 create mode 100644 
superset/migrations/versions/2026-09-30_00-00_d623a0cb6bb0_sweep_legacy_password_view_perms_from_all_roles.py
 create mode 100644 superset/semantic_layers/dimension_resolution.py
 create mode 100644 superset/semantic_layers/execution.py
 create mode 100644 superset/semantic_layers/ordering.py
 create mode 100644 superset/sql/execution/serialization.py
 create mode 100644 
tests/e2e_extensions/semantic_stub/dist/backend/src/superset_e2e_semantic_stub/__init__.py
 create mode 100644 tests/e2e_extensions/semantic_stub/dist/manifest.json
 copy 
tests/integration_tests/{superset_test_config_sqllab_backend_persist_off.py => 
superset_test_config_semantic.py} (52%)
 delete mode 100644 tests/integration_tests/tagging_tests.py
 create mode 100644 tests/integration_tests/tags/race_tests.py
 copy {superset-core/src/superset_core/common => 
tests/mypy_fixtures}/__init__.py (75%)
 create mode 100644 tests/mypy_fixtures/uuid_mixin_nullable.py
 create mode 100644 tests/unit_tests/commands/chart/export_test.py
 copy superset-extensions-cli/src/superset_extensions_cli/constants.py => 
tests/unit_tests/commands/report/conftest.py (82%)
 create mode 100644 
tests/unit_tests/commands/report/semantic_view_report_test.py
 copy {scripts => tests/unit_tests/commands/streaming_export}/__init__.py (100%)
 create mode 100644 tests/unit_tests/commands/streaming_export/base_test.py
 create mode 100644 tests/unit_tests/dao/query_stop_isolation_test.py
 create mode 100644 tests/unit_tests/datasource/test_compatible_api.py
 create mode 100644 tests/unit_tests/exceptions_test.py
 create mode 100644 
tests/unit_tests/mcp_service/common/test_list_scope_validation.py
 create mode 100644 
tests/unit_tests/mcp_service/dashboard/tool/test_list_dashboards.py
 create mode 100644 
tests/unit_tests/mcp_service/test_browser_hello_middleware.py
 create mode 100644 
tests/unit_tests/migrations/test_sweep_legacy_password_view_perms.py
 create mode 100644 
tests/unit_tests/migrations/test_tag_pivot_tables_with_restored_aggregation.py
 create mode 100644 tests/unit_tests/models/template_params_test.py
 create mode 100644 tests/unit_tests/semantic_layers/default_order_test.py
 create mode 100644 
tests/unit_tests/semantic_layers/dimension_resolution_test.py
 create mode 100644 tests/unit_tests/semantic_layers/e2e_stub_extension_test.py
 create mode 100644 tests/unit_tests/semantic_layers/execution_context_test.py
 create mode 100644 tests/unit_tests/sql/execution/test_async_results.py
 create mode 100644 tests/unit_tests/tags/race_test.py
 create mode 100644 tests/unit_tests/test_app_reinitialization.py
 create mode 100644 tests/unit_tests/versioning/test_dataset_child_extra.py
 create mode 100644 tests/unit_tests/versioning/test_diff_save_defaults.py
 create mode 100644 tests/unit_tests/views/test_archived_assets.py
 create mode 100644 tests/unit_tests/views/test_parse_json_form_field.py

Reply via email to