This is an automated email from the ASF dual-hosted git repository.
rusackas pushed a change to branch adopt/lineage-visualization
in repository https://gitbox.apache.org/repos/asf/superset.git
discard 975ca50ad1e chore(i18n): regenerate messages.pot with the lineage
strings
discard f5a511a174c perf(lineage): lazy-load the lineage view so echarts stays
out of the SPA entrypoint
discard 594811216b2 chore(lineage): regenerate openapi.json for the lineage
endpoints
discard bd126b6fd6c fix(lineage): remove broken dashboard-RBAC drill_info tests
discard a1b747eea2b fix(lineage): resolve CI failures (lint, navigation, test
typo)
discard dee3643770e fix(lineage): redact chart dataset details when caller
lacks access
discard 9e579c954ad fix(lineage): nullable schema fields, lazy modal fetch,
N+1 + type hints
discard 5d8ce647baf fix(lineage): address review feedback on schema, security,
and UI
discard 8a32e7acaf5 fix(lineage): skip dataset lineage fetch when id is missing
discard 9715567127b fix(lineage): tighten types on LineageView, drop any usage
discard ec97e011123 test(lineage): add coverage for the skip parameter in api
resource hooks
discard 0ac7ad26832 test(lineage): add unit tests for lineage API hooks
discard 6b744353fef fix(lineage): address review feedback (i18n, permissions,
node identity)
discard 5b4fdc79772 feat(lineage): add lineage visualization across datasets,
charts and dashboards
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 3b7001836c7 fix(charts): keep large nullable-integer dimensions exact
(#45308)
add 43006c1d054 fix(explore): omit constant Custom SQL dimensions from
GROUP BY (#45271)
add be40309811d fix: filter Sunburst temporal segments by bucket and
invert Hours offset in grained filters (#45598)
add d595becba71 test(explore): cover column config, conditional
formatting, and contour controls (#44843)
add b1c1d41b55f ci(docker): give the CI node image the workspace manifests
so jobs stop reinstalling (#45606)
add 8cd2ab1c2ca chore(deps): bump the security group across 2 directories
with 1 update (#45645)
add 2f6d51e7ae3 chore(deps-dev): bump vitest from 5.0.3 to 5.0.4 in
/superset-websocket (#45629)
add b4e592836a9 chore(deps-dev): bump jsdom from 30.1.2 to 30.1.3 in
/superset-frontend (#45628)
add 30df96241ff chore(deps): bump antd from 6.6.5 to 6.6.6 in
/superset-frontend (#45627)
add f5eaf7c4f7c chore(deps): bump postcss from 8.5.28 to 8.5.30 in
/superset-frontend (#45626)
add c505b8b4916 chore(deps-dev): bump vitest from 5.0.3 to 5.0.4 in
/superset-embedded-sdk (#45625)
add dffb06978cd chore(deps-dev): bump jsdom from 30.1.2 to 30.1.3 in
/superset-embedded-sdk (#45624)
add 6752eef54c3 chore(deps): bump antd from 6.6.5 to 6.6.6 in /docs
(#45623)
add 9b3f66df370 chore(deps): bump zizmorcore/zizmor-action from 0.6.4 to
0.7.1 (#45621)
add 09edc1a2c6e chore(deps): bump the codeql group with 3 updates (#45620)
add 0454c5e940c chore(frontend): upgrade to TypeScript 7 (#45603)
add 3f4f772efef ci(storybook): use every core for story tests and install
deps for Chromium only (#45600)
add 3823c6dc2c5 chore(i18n): sync translation catalogs with messages.pot
(#45583)
add 424c34c695d fix(security): stop dataset editorship from authorizing
new SQL (#45342)
add 3f77b342cb8 fix(explore): persist aliased column config by real key
(#44955)
add 89840862d6f chore(deps-dev): bump vitest from 5.0.4 to 5.0.5 in
/superset-websocket (#45669)
add eeb2fc2ff36 chore(deps-dev): bump vitest from 5.0.4 to 5.0.5 in
/superset-embedded-sdk (#45666)
add 5877cb58db8 chore(deps): bump swagger-ui-react from 5.33.2 to 5.33.3
in /docs (#45665)
add ff50234bf25 chore(deps): bump js-yaml from 5.4.3 to 5.5.0 in /docs
(#45664)
add d0897f77c93 chore(deps): bump chromaui/action from 18.12.2 to 18.13.0
(#45662)
add d0116153376 feat(dashboard): expose authorized chart display labels
(#45552)
add c016883970d fix(dataset): preserve pending metric and column edits
(#45506)
add 23f10960f5a feat(plugin-chart-echarts): let users hide legend
All/Invert buttons (#45172)
add 6114b81c928 feat(ci): label PRs/issues from UTSC 2026 students (#45656)
add 30584517b5b fix(mypy): type-check dataset export in full-tree mypy
(#45616)
add 026ca216cb2 fix(sqllab): implement query cancellation for ClickHouse
(Stop button) (#45070)
add 55801123a82 docs(security): drop deprecated SESSION_USE_SIGNER and
dedupe the server-side session example (#45635)
add 472c3e4afd8 fix(tests): make deep nested sidecar fallback test
interpreter-independent (#45657)
add db8ab20f90c ci(e2e): cache a pg_dump of the loaded examples for the
Playwright jobs (#45601)
add 99b472bef74 fix(dashboard): saving a dashboard that contains an
archived chart no longer fails (#45543)
add eee2c16c8c7 fix(mcp): check chart access before adding dashboard
charts (#45535)
add 8b9767ff263 fix(versioning): retryable error when a dashboard restore
races a chart purge (#45551)
add e165c386fbf fix(mcp): recognise guest tokens on FastMCP 4 (#45639)
add a268040ccbc chore(deps): bump the security group across 2 directories
with 3 updates (#45679)
add 3c9f08d1b39 chore(deps-dev): bump webpack from 5.111.1 to 5.112.0 in
/docs (#45663)
add 50e2d3cc572 feat(lineage): add lineage visualization across datasets,
charts and dashboards
This update added new revisions after undoing existing revisions.
That is to say, some revisions that were in the old version of the
branch are not in the new version. This situation occurs
when a user --force pushes a change and generates a repository
containing something like this:
* -- * -- B -- O -- O -- O (975ca50ad1e)
\
N -- N -- N refs/heads/adopt/lineage-visualization (50e2d3cc572)
You should already have received notification emails for all of the O
revisions, and so the following emails describe only the N revisions
from the common base, B.
Any revisions marked "omit" are not gone; other references still
refer to them. Any revisions marked "discard" are gone forever.
No new revisions were added by this update.
Summary of changes:
.gitattributes | 1 -
.github/utsc2026-students.yml | 63 +
.github/workflows/bashlib.sh | 47 +-
.github/workflows/chromatic.yml | 4 +-
.github/workflows/codeql-analysis.yml | 23 +-
.github/workflows/docker.yml | 27 +-
.github/workflows/frontend-bundle-size-nightly.yml | 5 +-
.github/workflows/generate-FOSSA-report.yml | 2 +-
.github/workflows/github-action-validator.yml | 16 +-
.github/workflows/license-check.yml | 2 +-
.github/workflows/python-nightly-canary.yml | 3 +
.../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 | 44 +
.github/workflows/superset-frontend.yml | 13 +-
.github/workflows/superset-translations.yml | 9 +-
.github/workflows/testcontainers.yml | 7 +-
.github/workflows/utsc2026-labeler.yml | 57 +
AGENTS.md | 1 +
Dockerfile | 28 +-
UPDATING.md | 115 +-
docker-compose-light.yml | 1 -
docker-compose.yml | 1 -
docs/admin_docs/configuration/cache.mdx | 2 +-
.../configuration/configuring-superset.mdx | 2 +
docs/admin_docs/configuration/mcp-server.mdx | 87 +-
docs/admin_docs/installation/docker-builds.mdx | 43 +-
.../installation/installation-methods.mdx | 4 +-
docs/admin_docs/security/oauth.mdx | 318 +++++
docs/admin_docs/security/securing_superset.mdx | 3 -
docs/admin_docs/security/security.mdx | 76 +-
.../version-6.1.0/security/securing_superset.mdx | 3 -
.../version-6.1.0/security/security.mdx | 13 +-
.../contributing/development-setup.md | 9 +-
docs/developer_docs/contributing/howtos.md | 3 +
.../extensions/contribution-types.md | 332 +----
.../semantic-layers.md} | 392 +++---
.../extensions/semantic-execution-context.md | 102 --
docs/developer_docs/extensions/semantic-filters.md | 79 --
docs/developer_docs/semantic-layer-cache-clear.md | 2 +-
docs/developer_docs/sidebars.js | 1 +
docs/docs/using-superset/embedding.mdx | 36 +
docs/docs/using-superset/exploring-data.mdx | 29 +
.../using-superset/semantic-layer-connections.mdx | 11 +
.../using-superset/semantic-member-selections.mdx | 2 +-
.../docs/using-superset/using-ai-with-superset.mdx | 20 +
docs/docs/using-superset/version-history.mdx | 3 +
docs/package.json | 12 +-
docs/sidebarTutorials.js | 2 +-
docs/static/resources/openapi.json | 29 +
.../version-6.0.0/security/security.mdx | 2 -
docs/yarn.lock | 1252 +++++++++---------
pyproject.toml | 9 +-
requirements/base.in | 2 +-
requirements/base.txt | 10 +-
requirements/development.txt | 48 +-
superset-embedded-sdk/package-lock.json | 336 +++--
superset-embedded-sdk/package.json | 6 +-
superset-frontend/.storybook/main.mjs | 5 +-
.../.storybook/playwright.storybook-ci.config.ts | 4 +
superset-frontend/jest.config.js | 4 +
superset-frontend/package-lock.json | 848 ++++++++----
superset-frontend/package.json | 21 +-
.../packages/superset-core/package.json | 2 +-
.../src/utils/headerGroups.test.ts | 182 ++-
.../src/utils/headerGroups.ts | 68 +-
.../packages/superset-ui-core/package.json | 2 +-
.../src/components/Modal/Modal.tsx | 17 +-
.../src/components/TableCollection/utils.tsx | 3 +-
.../src/connection/SupersetClientClass.ts | 4 +-
.../src/number-format/NumberFormatterRegistry.ts | 28 +-
.../factories/createSmartNumberFormatter.ts | 56 +-
.../superset-ui-core/src/query/types/Datasource.ts | 1 +
.../packages/superset-ui-core/src/utils/tooltip.ts | 31 +
.../test/chart/models/ChartProps.test.ts | 15 +
.../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 +
.../playwright/helpers/api/assertions.ts | 16 +-
.../playwright/tests/chart/chart-list.spec.ts | 4 +-
.../tests/dashboard/dashboard-list.spec.ts | 4 +-
.../playwright/tests/dataset/dataset-list.spec.ts | 4 +-
.../src/controlPanel.tsx | 5 +
.../src/transformProps.ts | 9 +-
.../src/utils/isEqualColumns.ts | 8 +
.../test/controlPanel.test.tsx | 34 +
.../test/transformProps.test.ts | 159 +++
.../plugins/plugin-chart-echarts/package.json | 2 +-
.../BigNumberPeriodOverPeriod/transformProps.ts | 6 +-
.../src/BigNumber/BigNumberTotal/transformProps.ts | 6 +-
.../BigNumberWithTrendline/transformProps.ts | 6 +-
.../plugin-chart-echarts/src/BigNumber/utils.ts | 10 +-
.../src/Bubble/transformProps.ts | 3 +
.../src/Butterfly/transformProps.ts | 3 +
.../src/Candlestick/transformProps.ts | 3 +
.../src/Funnel/controlPanel.tsx | 13 +-
.../src/Funnel/transformProps.ts | 3 +
.../src/Gantt/transformProps.ts | 3 +
.../src/Graph/transformProps.ts | 3 +
.../src/Histogram/controlPanel.tsx | 7 +-
.../src/Histogram/transformProps.ts | 10 +-
.../plugin-chart-echarts/src/Histogram/types.ts | 1 +
.../src/MixedTimeseries/transformProps.ts | 3 +
.../plugin-chart-echarts/src/Pie/transformProps.ts | 3 +
.../src/Radar/controlPanel.tsx | 10 +-
.../src/Radar/transformProps.ts | 3 +
.../src/Sunburst/EchartsSunburst.tsx | 99 +-
.../src/Sunburst/transformProps.ts | 36 +-
.../plugin-chart-echarts/src/Sunburst/types.ts | 4 +
.../plugin-chart-echarts/src/Sunburst/utils.ts | 190 +++
.../src/Timeseries/EchartsTimeseries.test.tsx | 1 +
.../src/Timeseries/Regular/Bar/controlPanel.tsx | 28 +
.../src/Timeseries/Regular/Line/controlPanel.tsx | 19 +
.../src/Timeseries/constants.ts | 1 +
.../src/Timeseries/transformProps.ts | 86 +-
.../plugin-chart-echarts/src/Timeseries/types.ts | 2 +
.../plugins/plugin-chart-echarts/src/constants.ts | 1 +
.../plugins/plugin-chart-echarts/src/controls.tsx | 55 +-
.../plugins/plugin-chart-echarts/src/types.ts | 3 +-
.../plugin-chart-echarts/src/utils/forecast.ts | 20 +-
.../plugin-chart-echarts/src/utils/series.ts | 5 +-
.../src/utils/xAxisDrillByFilter.ts | 37 +-
.../test/BigNumber/chartDisplayLabels.test.ts | 196 +++
.../test/Gantt/transformProps.test.ts | 7 +-
.../test/Histogram/buildQuery.test.ts | 1 +
.../test/Histogram/transformProps.test.ts | 12 +
.../test/MixedTimeseries/transformProps.test.ts | 9 +-
.../test/Sunburst/EchartsSunburst.test.tsx | 474 +++++++
.../test/Sunburst/transformProps.test.ts | 149 ++-
.../test/Sunburst/utils.test.ts | 52 +
.../test/Timeseries/Bar/controlPanel.test.ts | 28 +
.../test/Timeseries/EchartsTimeseries.test.tsx | 40 +
.../test/Timeseries/Line/controlPanel.test.ts | 42 +
.../test/Timeseries/helpers.ts | 1 +
.../test/Timeseries/transformProps.test.ts | 205 ++-
.../test/utils/forecast.test.ts | 63 +-
.../plugin-chart-echarts/test/utils/series.test.ts | 32 +-
.../plugin-chart-table/src/controlPanel.tsx | 5 +
.../plugin-chart-table/src/transformProps.ts | 9 +-
.../plugin-chart-table/src/utils/isEqualColumns.ts | 8 +
.../plugin-chart-table/test/TableChart.test.tsx | 112 ++
.../plugin-chart-table/test/controlPanel.test.tsx | 34 +
.../test/transformProps.test.tsx | 58 +
.../src/layers/Contour/Contour.test.ts | 56 +
.../src/layers/Contour/Contour.tsx | 2 +-
.../components/Chart/ChartErrorMessage.test.tsx | 2 +-
.../src/components/Chart/ChartErrorMessage.tsx | 3 +-
.../Chart/DrillBy/DrillByTemporalFilters.test.tsx | 256 ++++
.../DatasourceModal.pendingEdits.test.tsx | 196 +++
.../CollectionTable.debounce.test.tsx | 287 ++++
.../components/CollectionTable/index.tsx | 231 ++--
.../src/components/Datasource/types.ts | 10 -
.../components/ErrorMessage/ErrorAlert.test.tsx | 41 +
.../src/components/GridTable/GridTable.test.tsx | 21 +
.../src/components/GridTable/index.tsx | 10 +-
.../DashboardBuilder/DashboardBuilder.tsx | 6 +-
.../components/gridComponents/Chart/Chart.test.tsx | 55 +
.../components/gridComponents/Chart/Chart.tsx | 7 +-
.../nativeFilters/FilterBar/utils.test.ts | 35 +
.../components/nativeFilters/FilterBar/utils.ts | 5 +-
.../src/dashboard/containers/DashboardPage.tsx | 5 +-
superset-frontend/src/dashboard/types.ts | 1 +
.../dashboard/util/withChartDisplayLabels.test.ts | 153 +++
.../src/dashboard/util/withChartDisplayLabels.ts | 61 +
superset-frontend/src/embedded/index.tsx | 5 +-
.../components/ExploreViewContainer/index.tsx | 6 +-
.../ColorSchemeControl/ColorSchemeLabel.test.tsx | 14 +
.../ColorSchemeControl/ColorSchemeLabel.tsx | 3 +
.../ColumnConfigControl.popover.test.tsx | 293 +++++
.../ColumnConfigControl.test.tsx | 75 ++
.../ColumnConfigControl/ColumnConfigControl.tsx | 20 +-
.../ControlForm/ControlForm.test.tsx | 158 +++
.../controls/ColumnConfigControl/types.ts | 1 +
.../components/controls/ComparisonRangeLabel.tsx | 66 +-
.../ConditionalFormattingControl.test.tsx | 297 ++++-
.../ContourControl/ContourControl.test.tsx | 128 ++
.../controls/ContourControl/ContourOption.test.tsx | 111 ++
.../controls/ContourControl/ContourOption.tsx | 8 +-
.../ContourControl/ContourPopoverControl.test.tsx | 277 ++++
.../ContourControl/ContourPopoverControl.tsx | 17 +-
.../ContourControl/ContourPopoverTrigger.test.tsx | 133 ++
.../controls/ContourControl/index.test.tsx | 212 +++
.../alerts/components/AlertStatusIcon.test.tsx | 14 +
.../features/alerts/components/AlertStatusIcon.tsx | 1 +
superset-frontend/src/pages/ChartList/index.tsx | 9 +-
.../src/pages/DashboardList/index.tsx | 3 +-
superset-frontend/src/pages/DatasetList/index.tsx | 18 +-
superset-frontend/src/utils/lazyWithRetry.test.tsx | 140 ++
superset-frontend/src/utils/lazyWithRetry.ts | 135 ++
superset-frontend/src/views/routes.tsx | 83 +-
superset-frontend/webpack.config.js | 43 +-
superset-websocket/package-lock.json | 570 ++++----
superset-websocket/package.json | 6 +-
superset/app.py | 8 +-
superset/charts/api.py | 25 +-
superset/charts/filters.py | 8 +
superset/cli/update.py | 17 -
superset/commands/chart/create.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/dashboard/restore_version.py | 42 +
superset/commands/dataset/create.py | 4 +-
superset/commands/explore/get.py | 14 +-
superset/commands/export/assets.py | 75 +-
superset/commands/export/models.py | 18 +-
superset/commands/importers/v1/utils.py | 24 +-
superset/commands/report/base.py | 73 ++
superset/commands/semantic_layer/create.py | 11 +
superset/common/tags.py | 496 -------
superset/common/utils/dataframe_utils.py | 64 +
superset/config.py | 49 +
superset/connectors/sqla/models.py | 242 +++-
superset/connectors/sqla/utils.py | 55 +-
superset/daos/dashboard.py | 89 +-
superset/dashboards/api.py | 63 +-
superset/dashboards/filters.py | 7 +
superset/dashboards/schemas.py | 13 +
superset/databases/api.py | 32 +-
superset/datasets/api.py | 26 +-
superset/datasets/schemas.py | 17 +-
superset/db_engine_specs/bigquery.py | 15 +-
superset/db_engine_specs/clickhouse.py | 223 ++++
superset/db_engine_specs/oceanbase.py | 86 ++
superset/explore/utils.py | 6 +-
superset/importexport/api.py | 38 +-
superset/jinja_context.py | 4 +-
superset/mcp_service/app.py | 4 +-
superset/mcp_service/auth.py | 85 +-
superset/mcp_service/chart/chart_helpers.py | 23 +
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 | 91 +-
superset/mcp_service/chart/tool/get_chart_data.py | 130 +-
.../mcp_service/chart/tool/get_chart_preview.py | 10 +-
superset/mcp_service/composite_token_verifier.py | 51 +-
superset/mcp_service/dashboard/layout_placement.py | 21 +-
superset/mcp_service/dashboard/schemas.py | 146 ++-
.../tool/add_chart_to_existing_dashboard.py | 16 +-
.../dashboard/tool/apply_dashboard_filters.py | 34 +-
.../dashboard/tool/duplicate_dashboard.py | 14 +-
.../dashboard/tool/generate_dashboard.py | 27 +-
.../dashboard/tool/get_dashboard_data.py | 96 +-
superset/mcp_service/dashboard_scope_sql.py | 18 +-
superset/mcp_service/database/schemas.py | 8 +-
superset/mcp_service/dataset/schemas.py | 30 +-
.../dataset/tool/update_dataset_metric.py | 2 +-
superset/mcp_service/guest_token_verifier.py | 6 +-
superset/mcp_service/jwt_verifier.py | 28 +-
superset/mcp_service/mcp_config.py | 10 +-
superset/mcp_service/middleware.py | 29 +-
superset/mcp_service/report/schemas.py | 4 +
superset/mcp_service/server.py | 11 +-
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 +-
superset/models/core.py | 5 +-
superset/models/dashboard.py | 225 +++-
superset/models/helpers.py | 195 ++-
superset/queries/api.py | 3 +
superset/queries/saved_queries/api.py | 26 +-
superset/queries/schemas.py | 2 +-
superset/reports/api.py | 15 +-
superset/reports/filters.py | 37 +
superset/security/manager.py | 75 +-
superset/semantic_layers/api.py | 63 +-
superset/semantic_layers/models.py | 3 +
superset/sql/parse.py | 27 +
superset/tags/core.py | 98 +-
superset/tags/models.py | 271 +---
superset/translations/ar/LC_MESSAGES/messages.po | 170 ++-
superset/translations/ca/LC_MESSAGES/messages.po | 170 ++-
superset/translations/cs/LC_MESSAGES/messages.po | 170 ++-
superset/translations/de/LC_MESSAGES/messages.po | 170 ++-
superset/translations/en/LC_MESSAGES/messages.po | 166 ++-
superset/translations/es/LC_MESSAGES/messages.po | 170 ++-
superset/translations/fa/LC_MESSAGES/messages.po | 170 ++-
superset/translations/fi/LC_MESSAGES/messages.po | 176 ++-
superset/translations/fr/LC_MESSAGES/messages.po | 170 ++-
superset/translations/it/LC_MESSAGES/messages.po | 173 ++-
superset/translations/ja/LC_MESSAGES/messages.po | 170 ++-
superset/translations/ko/LC_MESSAGES/messages.po | 175 ++-
superset/translations/lv/LC_MESSAGES/messages.po | 170 ++-
superset/translations/messages.pot | 46 +-
superset/translations/mi/LC_MESSAGES/messages.po | 170 ++-
superset/translations/nl/LC_MESSAGES/messages.po | 170 ++-
superset/translations/pl/LC_MESSAGES/messages.po | 175 ++-
superset/translations/pt/LC_MESSAGES/messages.po | 173 ++-
.../translations/pt_BR/LC_MESSAGES/messages.po | 170 ++-
superset/translations/ro/LC_MESSAGES/messages.po | 170 ++-
superset/translations/ru/LC_MESSAGES/messages.po | 170 ++-
superset/translations/sk/LC_MESSAGES/messages.po | 170 ++-
superset/translations/sl/LC_MESSAGES/messages.po | 170 ++-
superset/translations/sr/LC_MESSAGES/messages.po | 172 ++-
.../translations/sr_Latn/LC_MESSAGES/messages.po | 172 ++-
superset/translations/ta/LC_MESSAGES/messages.po | 170 ++-
superset/translations/th/LC_MESSAGES/messages.po | 176 ++-
superset/translations/tr/LC_MESSAGES/messages.po | 170 ++-
superset/translations/uk/LC_MESSAGES/messages.po | 170 ++-
superset/translations/zh/LC_MESSAGES/messages.po | 170 ++-
.../translations/zh_TW/LC_MESSAGES/messages.po | 170 ++-
superset/utils/excel.py | 41 +-
superset/utils/filters.py | 111 +-
superset/utils/number_format.py | 94 ++
superset/utils/pandas_postprocessing/compare.py | 14 +-
superset/versioning/api_helpers.py | 8 +
superset/versioning/db_errors.py | 68 +-
superset/versioning/restore.py | 84 +-
superset/views/base_api.py | 24 +
.../src/superset_e2e_semantic_stub/__init__.py | 12 +-
tests/integration_tests/charts/api_tests.py | 8 +-
tests/integration_tests/dashboards/api_tests.py | 745 ++++++++++-
.../dashboards/version_restore_tests.py | 168 +++
tests/integration_tests/datasets/api_tests.py | 45 +
tests/integration_tests/fixtures/public_role.py | 47 +-
tests/integration_tests/queries/api_tests.py | 30 +
.../security/public_role_tests.py | 93 ++
tests/integration_tests/tagging_tests.py | 294 -----
tests/integration_tests/tags/dao_tests.py | 94 +-
.../db_engine_specs/test_clickhouse.py | 118 ++
.../db_engine_specs/test_oceanbase.py | 94 +-
tests/unit_tests/charts/test_client_processing.py | 41 +
.../charts/test_exact_integer_chart_data.py | 824 ++++++++++++
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 | 11 +
.../explore/test_get_query_authorship_bypass.py | 100 +-
.../unit_tests/commands/importers/v1/utils_test.py | 92 +-
tests/unit_tests/commands/report/base_test.py | 239 ++++
.../commands/semantic_layer/create_test.py | 53 +-
tests/unit_tests/common/test_dataframe_utils.py | 53 +
.../unit_tests/common/test_query_cache_manager.py | 38 +
.../common/test_query_context_processor.py | 50 +
tests/unit_tests/connectors/sqla/utils_test.py | 50 +
tests/unit_tests/dao/dashboard_test.py | 108 +-
.../dao/test_copy_dashboard_legacy_ids.py | 30 +-
tests/unit_tests/dao/test_query_stop_race.py | 95 ++
tests/unit_tests/dashboards/datasets_test.py | 1381 +++++++++++++++++++-
.../dashboards/semantic_view_access_test.py | 141 +-
tests/unit_tests/databases/api_test.py | 44 +
tests/unit_tests/datasets/schema_tests.py | 80 ++
tests/unit_tests/datasource/test_query_api.py | 24 +
tests/unit_tests/db_engine_specs/test_bigquery.py | 70 +
.../unit_tests/db_engine_specs/test_clickhouse.py | 344 ++++-
tests/unit_tests/db_engine_specs/test_oceanbase.py | 228 ++++
tests/unit_tests/explore/utils_test.py | 39 +
tests/unit_tests/importexport/api_test.py | 99 +-
tests/unit_tests/jinja_context_test.py | 74 ++
.../mcp_service/chart/test_bullet_tool_paths.py | 3 +
.../mcp_service/chart/test_chart_examples.py | 48 +
.../mcp_service/chart/test_chart_helpers.py | 42 +
.../mcp_service/chart/test_chart_schemas.py | 21 +
tests/unit_tests/mcp_service/chart/test_compile.py | 464 +++++++
.../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 | 368 ++++++
.../chart/tool/test_get_chart_preview.py | 40 +
.../common/test_list_scope_validation.py | 105 ++
.../dashboard/test_dashboard_schemas.py | 39 +
.../tool/test_add_chart_to_existing_dashboard.py | 85 +-
.../dashboard/tool/test_apply_dashboard_filters.py | 67 +-
.../tool/test_chart_access_query_count.py | 174 +++
.../dashboard/tool/test_dashboard_generation.py | 138 +-
.../dashboard/tool/test_duplicate_dashboard.py | 86 +-
.../dashboard/tool/test_get_dashboard_data.py | 507 +++++++
.../dashboard/tool/test_list_dashboards.py | 85 ++
.../tool/test_managed_dashboard_refusal.py | 3 +
.../mcp_service/native_tool_inventory.json | 90 +-
tests/unit_tests/mcp_service/test_auth_api_key.py | 10 +-
.../mcp_service/test_browser_hello_middleware.py | 126 ++
.../mcp_service/test_dashboard_scope_sql.py | 51 +
.../mcp_service/test_guest_token_auth.py | 7 +
tests/unit_tests/mcp_service/test_mcp_config.py | 9 +
.../mcp_service/test_mcp_tool_registration.py | 23 +
.../mcp_service/test_multi_auth_client_id.py | 678 ++++++++++
.../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 | 40 +-
.../mcp_service/utils/test_sanitization.py | 163 +++
.../models/groupby_literal_column_test.py | 288 ++++
tests/unit_tests/models/helpers_test.py | 171 +++
.../models/normalize_df_large_integer_test.py | 307 +++++
.../models/test_hours_offset_bound_truncation.py | 480 ++++++-
.../pandas_postprocessing/test_compare.py | 109 ++
tests/unit_tests/reports/filters_test.py | 53 +
.../security/test_dashboard_chart_labels.py | 207 +++
tests/unit_tests/semantic_layers/api_test.py | 262 +++-
.../semantic_layers/cache_policy_test.py | 3 +-
.../semantic_layers/e2e_stub_extension_test.py | 42 +-
.../semantic_layers/import_export_test.py | 6 +-
.../semantic_layers/metric_filter_test.py | 72 +-
.../unit_tests/sql/execution/test_async_results.py | 7 +
tests/unit_tests/sql/execution/test_celery_task.py | 47 +
tests/unit_tests/sql/parse_tests.py | 44 +
tests/unit_tests/sql_lab_test.py | 38 +
tests/unit_tests/subjects/test_raise_for_access.py | 4 +
tests/unit_tests/tags/race_test.py | 155 +--
tests/unit_tests/utils/csv_tests.py | 14 +
tests/unit_tests/utils/excel_tests.py | 38 +
tests/unit_tests/utils/filters_test.py | 260 +++-
tests/unit_tests/utils/number_format_test.py | 31 +
tests/unit_tests/versioning/test_db_errors.py | 65 +-
tests/unit_tests/versioning/test_restore.py | 167 ++-
.../unit_tests/views/test_parse_json_form_field.py | 54 +
418 files changed, 31205 insertions(+), 5171 deletions(-)
create mode 100644 .github/utsc2026-students.yml
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 .github/workflows/utsc2026-labeler.yml
create mode 100644 docs/admin_docs/security/oauth.mdx
copy docs/developer_docs/extensions/{contribution-types.md =>
extension-points/semantic-layers.md} (65%)
delete mode 100644 docs/developer_docs/extensions/semantic-execution-context.md
delete mode 100644 docs/developer_docs/extensions/semantic-filters.md
create mode 100644
superset-frontend/plugins/plugin-chart-echarts/src/Sunburst/utils.ts
create mode 100644
superset-frontend/plugins/plugin-chart-echarts/test/BigNumber/chartDisplayLabels.test.ts
create mode 100644
superset-frontend/plugins/plugin-chart-echarts/test/Sunburst/EchartsSunburst.test.tsx
create mode 100644
superset-frontend/plugins/plugin-chart-echarts/test/Sunburst/utils.test.ts
create mode 100644
superset-frontend/plugins/plugin-chart-table/test/transformProps.test.tsx
create mode 100644
superset-frontend/plugins/preset-chart-deckgl/src/layers/Contour/Contour.test.ts
create mode 100644
superset-frontend/src/components/Chart/DrillBy/DrillByTemporalFilters.test.tsx
create mode 100644
superset-frontend/src/components/Datasource/DatasourceModal/DatasourceModal.pendingEdits.test.tsx
create mode 100644
superset-frontend/src/components/Datasource/components/CollectionTable/CollectionTable.debounce.test.tsx
create mode 100644
superset-frontend/src/dashboard/util/withChartDisplayLabels.test.ts
create mode 100644
superset-frontend/src/dashboard/util/withChartDisplayLabels.ts
create mode 100644
superset-frontend/src/explore/components/controls/ColumnConfigControl/ColumnConfigControl.popover.test.tsx
create mode 100644
superset-frontend/src/explore/components/controls/ColumnConfigControl/ControlForm/ControlForm.test.tsx
create mode 100644
superset-frontend/src/explore/components/controls/ContourControl/ContourControl.test.tsx
create mode 100644
superset-frontend/src/explore/components/controls/ContourControl/ContourOption.test.tsx
create mode 100644
superset-frontend/src/explore/components/controls/ContourControl/ContourPopoverControl.test.tsx
create mode 100644
superset-frontend/src/explore/components/controls/ContourControl/ContourPopoverTrigger.test.tsx
create mode 100644
superset-frontend/src/explore/components/controls/ContourControl/index.test.tsx
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 tests/integration_tests/security/public_role_tests.py
delete mode 100644 tests/integration_tests/tagging_tests.py
create mode 100644 tests/unit_tests/charts/test_exact_integer_chart_data.py
create mode 100644 tests/unit_tests/commands/chart/export_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_chart_access_query_count.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/mcp_service/test_multi_auth_client_id.py
create mode 100644 tests/unit_tests/models/groupby_literal_column_test.py
create mode 100644 tests/unit_tests/models/normalize_df_large_integer_test.py
create mode 100644 tests/unit_tests/security/test_dashboard_chart_labels.py
create mode 100644 tests/unit_tests/views/test_parse_json_form_field.py