This is an automated email from the ASF dual-hosted git repository.
rusackas pushed a change to branch feat/sqllab-contribution-points-clean
in repository https://gitbox.apache.org/repos/asf/superset.git
discard 431b4889b54 fix(sqllab): stop the new-tab dropdown's portaled clicks
from also firing antd's own add-tab handler
omit 29344e71ca0 chore(i18n): regenerate messages.pot for new
extension-error/tab-label strings
omit 06cbaf0651e Merge branch 'master' into
feat/sqllab-contribution-points-clean
omit f3de2a289cc fix(sqllab): address bito review feedback on northPane
rendering and test fixture
omit 8a8a9e868eb fix(sqllab): satisfy strict TS types for
findQueryEditorByAnyId
omit bf9879db078 fix(sqllab,extensions): carry northPane view on tab state
and resolve backendId for query events
omit 0608af00c58 fix(sqllab,extensions): address review feedback on new-tab
dropdown, extension load failures, and Tab.backendId
omit 7f258703383 fix(sqllab): only consume PENDING_NORTH_PANE_VIEW_KEY on
the active tab
omit 0094d2c1fd6 fix(sqllab): address review bot feedback on extension
surfaces
omit 4452c5c339e test(sqllab): cover PENDING_NORTH_PANE_VIEW_KEY
consume-and-persist flow
omit ec68118a3c7 fix(sqllab): centralize add-tab timing marker and use antd
Flex for northPane wrapper
omit 04141c67dbf test(sqllab): cover NewTabButton dropdown, direct-add, and
skip paths
omit 7bbf18a26b4 fix(sqllab): intercept new-tab activation on antd's add
button for keyboard parity
omit 8f4410e90c9 fix(sqllab): skip new-tab menu items whose command isn't
registered
omit 43df0dde082 test(sqllab,extensions): bridge store state cast through
unknown for tsc
omit 2f600416c65 test(sqllab,extensions): replace any casts with concrete
types
omit 08762ffd119 test(sqllab): cover Tab backendId mapping from editor
tabViewId
omit a5521a09a57 fix(sqllab,extensions): populate Tab.backendId and guard
northPane storage
omit c407d05608d test(sqllab,extensions): assert toast via store state; fix
northPane key type
omit da4994eb683 test(sqllab): cover northPane view rendering in SqlEditor
omit 078aa5af011 fix(sqllab,extensions): address review feedback on
northPane keys, tab a11y, extension load errors
omit cad7a2013f2 feat(sqllab,extensions): contribution surfaces for
tab/pane extensions
add 8a3b86dccd3 fix: guard the isdigit()-then-int() pattern against
non-decimal digits (#44620)
add 1436035b091 fix(bar-chart): show correct value labels per stack group
with stackDimension (#43238)
add ad24cb86342 fix(embedded): initialize feature flags in embedded
dashboard entry point (#37367)
add 8c4b5ae2085 chore(deps): bump codecov/codecov-action from 7.1.0 to
7.1.1 (#44571)
add b6be1dd5548 build(dev-deps): use `@hainenber/po2json` as modernized
`po2json` fork (#44457)
add ffe9a00fc42 fix(reports): export full paginated table results (#44218)
add f3e3c3fefdd fix(security): apply global guest RLS rules to sub-queries
in virtual datasets (#44650)
add 049c9777f03 fix(dashboard): load chart editors and viewers up front
(#43990)
add 5ba3b8d4fc7 fix(security): keep guest RLS on sub-queries beside an
unaliased source (#44768)
add d1307422f17 fix(reports): require a Slack channel id in report
recipients (#42850)
add 4977a2a5347 chore(deps-dev): bump the babel group in
/superset-embedded-sdk with 3 updates (#44747)
add ba6268bddf6 chore(deps-dev): bump jest-environment-jsdom from 30.5.1
to 30.5.2 in /superset-frontend (#44764)
add a5ae32d3911 chore(deps-dev): bump tsx from 4.23.13 to 4.23.15 in
/superset-frontend (#44757)
add d9df1b3b83d chore(deps): bump astral-sh/setup-uv from 10.1.0 to 10.2.0
(#44750)
add 1ad6c118003 chore(deps-dev): bump minimizer-webpack-plugin from 5.10.1
to 5.11.0 in /superset-frontend (#44755)
add ca6fc26fa4a fix(deps): resolve npm security alerts for fflate,
image-size, js-yaml and smol-toml (#44740)
add f6d9b7b94cd fix(mcp): use chart metrics for the preview y axis (#44684)
add b2d54504537 chore(deps): bump antd from 6.6.4 to 6.6.5 in
/superset-frontend (#44766)
add c217fe4d1e7 chore(deps-dev): bump jest from 30.5.1 to 30.5.2 in
/superset-frontend (#44763)
add 0085640384d chore(deps-dev): bump babel-jest from 30.5.1 to 30.5.2 in
/superset-frontend (#44762)
add e8539f9aff8 chore(deps-dev): bump @types/node from 26.6.1 to 26.6.2 in
/superset-frontend (#44761)
add 7c1979ec542 chore(deps): bump react-error-boundary from 6.1.5 to 6.1.6
in /superset-frontend (#44760)
add 21ed6880d5e chore(deps-dev): bump webpack from 5.111.0 to 5.111.1 in
/superset-frontend (#44756)
add 6ae6e7b2874 chore(deps-dev): bump webpack from 5.111.0 to 5.111.1 in
/docs (#44753)
add 6de85946c40 chore(deps-dev): bump @babel/eslint-parser from 7.29.7 to
7.29.9 in /superset-frontend in the babel group (#44752)
add 565f49d9343 chore(deps): bump antd from 6.6.4 to 6.6.5 in /docs
(#44751)
add 1c2e7c2988f chore(deps-dev): bump webpack from 5.111.0 to 5.111.1 in
/superset-embedded-sdk (#44749)
add feb4c4f6227 chore(deps-dev): bump @types/node from 26.6.1 to 26.6.2 in
/superset-embedded-sdk (#44748)
add 60fc9966025 chore(deps-dev): bump @types/node from 26.6.1 to 26.6.2 in
/superset-websocket (#44745)
add 68ccc99e950 fix(dataset): hide Normalize column names for virtual
datasets (#44579)
add 766f46b6e99 fix(deps): pin qs 6.16.0 in docs to resolve Dependabot
alerts (#44741)
add 5af034ff6f8 fix(translations): capture stderr and harden
check_pot_drift.py follow-ups from #44578 (#44582)
add c9455b2c4cc fix(i18n): correct Slovak SQL Lab progress message
placeholders (#44587)
add a629c91929d test(explore): migrate remaining explore e2e coverage to
Playwright (#44621)
add 891dbc424b1 fix(deps): bump anyio to 4.15.1 (CVE-2026-63374) (#44735)
add 74d9d94aed1 test(dashboard): cover native filter dependency cycles and
config modal save gating (#44669)
add 169514aebd7 test(dashboard): cover dashboard load modes and URL param
hydration (#44672)
add 3667f5bcaa6 test(dashboard): cover color scheme precedence and label
color map helpers (#44677)
add 89bf40ee04e fix(calendar): position Month/Week cells within their own
month block (#44601)
add 0e688a534b6 fix(ci): retry databend testcontainers bring-up past the
image's metasrv race (#44729)
add ff55a99ab73 test(dashboard): cover filter plugin data masks and
horizontal overflow (#44676)
add 78fdd0dafa9 test(dashboard): cover native filter bar key persistence
and state hooks (#44675)
add e5100cd9986 test(dashboard): cover tab switching visibility and hidden
chart updates (#44674)
add 3ae8e2f9bc4 test(dashboard): cover save and refresh interval modals
(#44671)
add 98c74d8d8bf test(dashboard): cover drill to detail payloads and page
reset (#44673)
add 6cad838c823 chore(dev-deps): drop po2json entirely, build .po->Jed
JSON on gettext-parser (#44742)
add 77295721ff9 feat(versioning): gate history APIs and runtime capture
(#44514)
add 6f6e52ba8b1 fix(chart/data): guard against non-dict chart.params in
get_data (#44770)
add 593080e1a2c feat(mcp): add update_dataset, delete_dataset and
restore_dataset tools (#44337)
add 8bd92b7073e fix(databases): surface dataset dependents in the delete
confirmation (#44392)
add 211339b9a78 chore: add @geido and @msyavuz as code owners (#44771)
add 1e167aedbc0 fix(dashboard): refresh version history after cross-filter
scoping save (#44623)
add 9593bc42c64 fix(ui): normalize BigInt values in memory formatter
(#44507)
add b65d5482b2c feat(dataset): support epoch_us python_date_format (#44500)
add 697b056909c fix(chart): prevent stacking bars on a logarithmic axis
(#44556)
add a374f847d61 fix(echarts): reserve grid room for Gantt category names
(#43189)
add 95db7730256 fix(timeseries): preserve explicit UTC offsets in
normalizeTimestamp (#43960)
add 506716f2f88 fix(query-context): resolve legacy granularity_sqla for
stored queries (#44460)
add c7821516e39 fix(security): vary SQL Lab ad-hoc query cache key by
effective RLS predicates (#43985)
add 4679a471015 test(dashboard): cover header refresh controls while
charts load (#44670)
add ae11708faab test(dashboard): cover edit-mode drag-and-drop drop rules
(#44678)
add 0fbad0de99d feat(db_engine_specs): add metadata blocks to all
remaining incomplete engine specs (#43566)
add 7cb19e2b50d fix(embedded-sdk): re-authenticate the iframe after a
navigation internal to the dashboard (#44470)
add c67c88fbf1e fix(reports): drop the sign of negative numbers that round
to zero in text reports (#44644)
add 1fdb9171b7b fix(explore): include dataset editors in the Explore
datasource payload (#44633)
add d3f57264890 fix(echarts): stop the zoom controls overlapping the
legend selector (#44367)
add 0e5a3b21215 feat(motherduck): set session_name on user impersonation
(#42705)
add 33d24f496c9 fix(ci): fall back to the lean Dockerfile target when
publishing a pre-#44100 release (#44248)
add b4f79f94f82 fix(d1): support SQLAlchemy 2 with sqlalchemy-d1 0.2.0
(#44505)
add cfeceedb605 fix(types): preserve shared control registry option types
(#44559)
add 1e91b933774 refactor(dashboard): simplify cross-filter scope
resolution (#38762)
add db87cd2a2b2 fix(dataframe): normalize trusted nonfinite scalars
(#44219)
add e86af4ee954 fix: DashboardAccessFilter to preserve dashboards with
empty layouts (#44256)
add 49e71752e48 fix(excel): keep wall-clock datetimes when exporting
timezones (#44360)
add 19ea6b231c7 fix(mcp): hide internal sanitization warnings from input
schemas (#44602)
add c40eba410b7 fix(kylin): time grains and labels that work on Calcite
and Spark pushdown (#44712)
add ca3d3560895 feat(oracle): support cancelling running queries in SQL
Lab (#44704)
add e7275f15ae0 feat(echarts): double-click chart legend to isolate a
series (#44562)
add 4a51382f819 chore(deps-dev): bump oxfmt from 0.68.0 to 0.70.0 in
/superset-frontend (#44785)
add 983d00165a7 chore(deps-dev): bump jsdom from 30.1.0 to 30.1.1 in
/superset-frontend (#44784)
add f837f839708 chore(deps): bump react-window from 2.3.1 to 2.3.2 in
/superset-frontend (#44782)
add 5150266456a chore(deps-dev): bump oxlint from 1.83.0 to 1.85.0 in
/docs (#44781)
add b8e40175053 chore(deps-dev): bump the typescript-eslint group in
/superset-frontend with 2 updates (#44779)
add 4422cf38776 chore(deps-dev): bump oxfmt from 0.68.0 to 0.70.0 in
/superset-websocket (#44778)
add ce86ac9aefc chore(deps-dev): bump jsdom from 30.1.0 to 30.1.1 in
/superset-embedded-sdk (#44777)
add ef99eeac8ee chore(deps-dev): bump oxlint from 1.83.0 to 1.85.0 in
/superset-frontend (#44783)
add 72c8969ce38 chore(deps-dev): bump oxfmt from 0.68.0 to 0.70.0 in /docs
(#44780)
add 3d436f579c9 chore(deps-dev): bump oxlint from 1.83.0 to 1.85.0 in
/superset-websocket (#44776)
add e65de1fc0f0 fix(chart-data): roll back db.session after swallowed
metadata-DB errors (#44653)
add 45f4dd80092 fix: use database rollups for pivot table subtotals in
Actual Values mode (#44631)
add c51f192be6b fix(sqllab): stringify integer columns that overflow int64
(#44743)
add 2eb620e7372 fix(databases): validate schema before listing tables
(#44683)
add 27c6f5a8d90 fix(db_engine_specs): restore shared compiler state after
loading third-party dialects (#44686)
add 732e6551e0a fix(cratedb): recognize reflected timestamp types for
epoch milliseconds (#44720)
add 03227878ba3 fix(db_engine_specs): don't fail DDL/DML when the
statement has no result set (#44714)
add 3e9bd8b45b4 fix(dynamodb): map NUMBER columns and order charts by
metric expressions (#44711)
add 2b050596c0b fix(databricks): derive omitted OAuth2 endpoints from the
workspace host (#44710)
add 041f84c6f31 fix(clickhouse): rename SELECT aliases that shadow a
source column (#44715)
add f6a7802c81d fix(database): mask secrets in create and update responses
(#44733)
add f639b22c6c8 fix(api): return 4xx from oauth2 callback errors, not 500
(#44769)
add cba2574241e fix(i18n): clear 1,188 fuzzy translations with broken
placeholders (#44611)
add afe8b14d794 fix(database): coerce LazyString validation messages to
str in validate_parameters (#44802)
add c6e7bd47a4a fix(dashboard): catch JSONDecodeError on malformed
default_filters in set_dash_metadata (#44716)
add 9a5faa8af5b refactor(db_engine_specs): derive epoch method dispatch
from EPOCH_FORMATS (#44772)
add 63c004fe66c feat(mcp): add a permission-filtered asset catalog tool
(#44694)
add 6b2d3b15116 fix(auth): gate registration UI by auth type, not just the
flag (#44368)
add e1daa2f7e10 chore(deps-dev): bump ip-address from 10.4.0 to 10.7.2 in
/superset-frontend in the security group across 1 directory (#44774)
add 8bd268f9cef docs(versioning): screenshots, retention, and permission
guidance for version history and archives (#44190)
add 14b87366bc7 chore(deps-dev): bump brace-expansion from 5.0.9 to 5.0.12
in /superset-embedded-sdk in the security group across 1 directory (#44812)
add 1dbb7aaace6 chore(deps): bump fast-uri from 3.1.7 to 3.1.8 in /docs in
the security group across 1 directory (#44814)
add 6d1bfaa4cd4 fix(dashboard): forward clearAllTriggers from vertical
filter bar to FilterControls (#44531)
add df450dc2a24 fix(mypy): narrow nullable uuid before
RestoreVersionCommand calls (#44789)
add 92b0cf82ca9 fix(echarts-timeseries): convert xAxisLabelInterval string
'0' to number 0 (#43729)
add 517e94d1062 fix(echarts): fix sparse sub-daily bar sizing and x-axis
mislabeling (#44628)
add 48a3b02d129 fix(mysql): require TLS when SSL is requested (#44723)
add 773f976b6de fix(dynamodb): render time bounds as ISO 8601 so sub-day
ranges match stored timestamps (#44702)
add 005eadcacd8 fix(opensearch): page drill-to-detail samples with the
OpenSearch SQL response format (#44703)
add 542e4661837 fix(gsheets): pass the OAuth2 token and delegation subject
through connect_args (#44709)
add 16271bbfbb7 fix(databricks): stop the string-type patch writing
SQLAlchemy's shared colspecs (#44707)
add 7154f2790a9 fix(oracle): map Oracle NUMBER, BINARY_FLOAT/DOUBLE and
CLOB column types (#44685)
add 3367838ac4e feat(sqllab,extensions): contribution surfaces for
tab/pane extensions
add 0edfed93e79 fix(sqllab,extensions): address review feedback on
northPane keys, tab a11y, extension load errors
add ec6aa1e3a26 test(sqllab): cover northPane view rendering in SqlEditor
add dcd2be99319 test(sqllab,extensions): assert toast via store state; fix
northPane key type
add 9f93ef6fc01 fix(sqllab,extensions): populate Tab.backendId and guard
northPane storage
add 9da712af3a2 test(sqllab): cover Tab backendId mapping from editor
tabViewId
add ee98656ebdf test(sqllab,extensions): replace any casts with concrete
types
add 982a9d2d3f2 test(sqllab,extensions): bridge store state cast through
unknown for tsc
add e7c3f53c414 fix(sqllab): skip new-tab menu items whose command isn't
registered
add 55e66ee1ec6 fix(sqllab): intercept new-tab activation on antd's add
button for keyboard parity
add aaca45b9261 test(sqllab): cover NewTabButton dropdown, direct-add, and
skip paths
add bfee3fb9338 fix(sqllab): centralize add-tab timing marker and use antd
Flex for northPane wrapper
add b56d480d45f test(sqllab): cover PENDING_NORTH_PANE_VIEW_KEY
consume-and-persist flow
add a9ca893098e fix(sqllab): address review bot feedback on extension
surfaces
add 28705ce6e18 fix(sqllab): only consume PENDING_NORTH_PANE_VIEW_KEY on
the active tab
add 3676a0e644a fix(sqllab,extensions): address review feedback on new-tab
dropdown, extension load failures, and Tab.backendId
add 19f48fda52d fix(sqllab,extensions): carry northPane view on tab state
and resolve backendId for query events
add ab77ad5d61d fix(sqllab): satisfy strict TS types for
findQueryEditorByAnyId
add 8397485b3b7 fix(sqllab): address bito review feedback on northPane
rendering and test fixture
add 80a75afbed4 chore(i18n): regenerate messages.pot for new
extension-error/tab-label strings
add e4392b8efd1 fix(sqllab): stop the new-tab dropdown's portaled clicks
from also firing antd's own add-tab handler
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 (431b4889b54)
\
N -- N -- N refs/heads/feat/sqllab-contribution-points-clean
(e4392b8efd1)
You should already have received notification emails for all of the O
revisions, and so the following emails describe only the N revisions
from the common base, B.
Any revisions marked "omit" are not gone; other references still
refer to them. Any revisions marked "discard" are gone forever.
No new revisions were added by this update.
Summary of changes:
.github/CODEOWNERS | 16 +-
.github/workflows/bump-python-package.yml | 2 +-
.github/workflows/superset-extensions-cli.yml | 2 +-
.github/workflows/superset-frontend.yml | 2 +-
.../workflows/superset-python-integrationtest.yml | 6 +-
.github/workflows/superset-python-presto-hive.yml | 4 +-
.github/workflows/superset-python-unittest.yml | 2 +-
.github/workflows/tag-release.yml | 31 +-
UPDATING.md | 177 ++-
.../configuration/configuring-superset.mdx | 10 +
docs/admin_docs/configuration/mcp-server.mdx | 27 +
docs/developer_docs/api.mdx | 13 +
docs/developer_docs/contributing/howtos.md | 5 +-
docs/developer_docs/extensions/mcp.md | 4 +
docs/docs/using-superset/exploring-data.mdx | 8 +
.../using-superset/exporting-dashboard-data.mdx | 2 +
docs/docs/using-superset/recently-archived.mdx | 101 +-
.../docs/using-superset/using-ai-with-superset.mdx | 6 +
docs/docs/using-superset/version-history.mdx | 179 ++-
docs/package.json | 9 +-
docs/src/data/databases.json | 13 +-
docs/static/feature-flags.json | 2 +-
.../img/version-history/recently-archived.jpg | Bin 0 -> 23897 bytes
.../img/version-history/version-history-panel.jpg | Bin 0 -> 19792 bytes
.../version-history/version-history-preview.jpg | Bin 0 -> 64287 bytes
docs/static/resources/openapi.json | 33 +
docs/yarn.lock | 498 ++++----
pyproject.toml | 13 +-
requirements/development.txt | 4 +-
scripts/docker_release_target.py | 129 +++
scripts/translations/check_pot_drift.py | 52 +-
superset-embedded-sdk/package-lock.json | 220 ++--
superset-embedded-sdk/package.json | 12 +-
superset-embedded-sdk/src/index.test.ts | 349 +++++-
superset-embedded-sdk/src/index.ts | 374 ++++--
.../cypress-base/cypress/e2e/explore/chart.test.js | 157 ---
.../cypress-base/cypress/e2e/explore/utils.ts | 78 --
.../e2e/explore/visualizations/shared.helper.js | 139 ---
superset-frontend/cypress-base/package-lock.json | 16 +-
superset-frontend/cypress-base/package.json | 2 +-
superset-frontend/jest.config.js | 6 +-
superset-frontend/package-lock.json | 1220 ++++++++++----------
superset-frontend/package.json | 45 +-
.../packages/generator-superset/package.json | 2 +-
.../src/shared-controls/sharedControls.tsx | 13 +-
.../packages/superset-ui-core/package.json | 4 +-
.../components/DeleteModal/DeleteModal.test.tsx | 37 +-
.../src/components/DeleteModal/index.tsx | 14 +-
.../src/components/DeleteModal/types.ts | 4 +-
.../factories/createMemoryFormatter.ts | 11 +-
.../src/time-format/utils/normalizeTimestamp.ts | 18 +
.../factories/createMemoryFormatter.test.ts | 7 +
.../time-format/utils/normalizeTimestamp.test.ts | 70 ++
.../playwright/components/core/Menu.ts | 7 +
.../playwright/components/core/Radio.ts | 69 ++
.../playwright/components/core/index.ts | 1 +
.../components/dashboard/DashboardFilterBar.ts | 6 +-
.../playwright/components/modals/SaveChartModal.ts | 105 ++
.../playwright/components/modals/index.ts | 1 +
superset-frontend/playwright/helpers/api/chart.ts | 44 +
.../playwright/helpers/api/dashboard.ts | 37 +
superset-frontend/playwright/pages/ExplorePage.ts | 95 ++
.../playwright/tests/chart/chart-test-helpers.ts | 24 +-
.../tests/dashboard/clear-all-filters.spec.ts | 112 ++
.../explore/cross-referenced-dashboards.spec.ts | 173 +++
.../tests/explore/explore-no-results.spec.ts | 59 +
.../playwright/tests/explore/explore-save.spec.ts | 131 +++
.../tests/explore/explore-test-helpers.ts | 50 +
.../src/vendor/cal-heatmap.ts | 60 +-
.../plugin-chart-calendar/test/cal-heatmap.test.ts | 40 +
.../src/BigNumber/BigNumberViz.test.tsx | 131 ++-
.../src/Bubble/EchartsBubble.tsx | 16 +-
.../src/Bubble/transformProps.ts | 31 +-
.../src/Butterfly/Butterfly.tsx | 16 +-
.../src/Butterfly/transformProps.ts | 11 +-
.../src/Funnel/EchartsFunnel.tsx | 19 +-
.../src/Funnel/transformProps.ts | 15 +-
.../src/Gantt/EchartsGantt.tsx | 23 +-
.../plugin-chart-echarts/src/Gantt/constants.ts | 6 +
.../src/Gantt/transformProps.ts | 60 +-
.../src/Graph/EchartsGraph.tsx | 8 +
.../src/Graph/transformProps.ts | 11 +-
.../src/Histogram/Histogram.tsx | 17 +-
.../src/Histogram/transformProps.ts | 10 +-
.../src/MixedTimeseries/EchartsMixedTimeseries.tsx | 9 +
.../src/MixedTimeseries/transformProps.ts | 107 +-
.../plugin-chart-echarts/src/Pie/EchartsPie.tsx | 19 +-
.../plugin-chart-echarts/src/Pie/transformProps.ts | 15 +-
.../src/Radar/EchartsRadar.tsx | 19 +-
.../src/Radar/transformProps.ts | 15 +-
.../src/Timeseries/EchartsTimeseries.tsx | 19 +-
.../src/Timeseries/Regular/Bar/controlPanel.tsx | 14 +-
.../src/Timeseries/transformProps.ts | 177 ++-
.../src/Timeseries/transformers.ts | 51 +-
.../src/Waterfall/EchartsWaterfall.tsx | 16 +-
.../plugins/plugin-chart-echarts/src/constants.ts | 20 +-
.../plugin-chart-echarts/src/utils/formatters.ts | 7 +
.../src/utils/legendEventHandlers.test.ts | 275 +++++
.../src/utils/legendEventHandlers.ts | 131 +++
.../plugin-chart-echarts/src/utils/series.ts | 238 +++-
.../test/Butterfly/Butterfly.test.tsx | 32 +-
.../test/Gantt/transformProps.test.ts | 58 +
.../test/MixedTimeseries/transformProps.test.ts | 26 +
.../test/Timeseries/Bar/controlPanel.test.ts | 62 +-
.../Bar/sparseSubDailyBarGeometry.test.ts | 505 ++++++++
.../test/Timeseries/Bar/transformProps.test.ts | 101 +-
.../test/Timeseries/transformProps.test.ts | 391 +++++++
.../test/Treemap/EchartsTreemap.test.tsx | 123 ++
.../test/utils/eventHandlers.test.ts | 74 ++
.../test/utils/formatters.test.ts | 37 +
.../plugin-chart-echarts/test/utils/series.test.ts | 185 ++-
.../plugins/plugin-chart-handlebars/package.json | 2 +-
.../plugins/plugin-chart-pivot-table/package.json | 2 +-
.../scripts/{commitlint.js => po2json-cli.js} | 37 +-
superset-frontend/scripts/po2json.js | 96 ++
superset-frontend/scripts/po2json.sh | 6 +-
superset-frontend/spec/scripts/po2json.test.ts | 130 +++
.../Chart/DrillDetail/DrillDetailPane.test.tsx | 74 +-
.../DatasourceEditor/DatasourceEditor.tsx | 24 +-
.../tests/DatasourceEditor.test.tsx | 31 +
.../src/dashboard/actions/dashboardInfo.test.ts | 71 ++
.../src/dashboard/actions/dashboardInfo.ts | 1 +
.../src/dashboard/actions/hydrate.test.ts | 137 ++-
.../src/dashboard/components/Dashboard.test.tsx | 13 +
.../dashboard/components/Header/Header.test.tsx | 143 +++
.../components/RefreshIntervalModal.test.tsx | 114 ++
.../src/dashboard/components/SaveModal.test.tsx | 178 +++
.../SliceHeaderControls.test.tsx | 43 +
.../components/dnd/dragDroppableConfig.test.ts | 270 +++++
.../dashboard/components/dnd/handleDrop.test.ts | 346 ++++++
.../components/gridComponents/Chart/Chart.test.tsx | 16 +
.../components/gridComponents/Tabs/Tabs.test.tsx | 52 +
.../nativeFilters/FilterBar/FilterBar.test.tsx | 293 ++++-
.../FilterControls.overflow.test.tsx | 93 +-
.../nativeFilters/FilterBar/Vertical.tsx | 6 +
.../nativeFilters/FilterBar/keyValue.test.ts | 147 +++
.../nativeFilters/FilterBar/state.test.ts | 220 ++++
.../hooks/useFilterOperations.test.ts | 171 ++-
.../hooks/useModalSaveLogic.test.ts | 118 ++
.../nativeFilters/FiltersConfigModal/utils.test.ts | 42 +
.../src/dashboard/util/crossFilters.test.ts | 75 ++
.../src/dashboard/util/crossFilters.ts | 23 +-
.../src/dashboard/util/getRelatedCharts.ts | 32 +-
superset-frontend/src/features/home/Menu.test.tsx | 19 +
.../components/Select/SelectFilterPlugin.test.tsx | 41 +
.../components/Time/TimeFilterPlugin.test.tsx | 40 +-
.../TimeColumnFilterPlugin.test.tsx} | 67 +-
.../DatabaseList.datasetDependents.test.tsx | 289 +++++
superset-frontend/src/pages/DatabaseList/index.tsx | 108 +-
superset-frontend/src/pages/Login/Login.test.tsx | 17 +
superset-frontend/src/pages/Login/index.tsx | 4 +-
superset-frontend/src/preamble.test.ts | 29 +-
superset-frontend/src/preamble.ts | 10 +-
superset-frontend/src/utils/colorScheme.test.ts | 230 ++++
superset-frontend/src/utils/softDeleteCopy.test.ts | 11 +
superset-frontend/src/utils/softDeleteCopy.ts | 14 +
superset-websocket/package-lock.json | 328 +++---
superset-websocket/package.json | 6 +-
superset/charts/api.py | 5 +
superset/charts/client_processing.py | 9 +-
superset/charts/data/api.py | 2 +
superset/cli/deletion_retention.py | 20 +-
superset/commands/database/exceptions.py | 5 +
superset/commands/database/oauth2.py | 27 +-
superset/commands/database/tables.py | 41 +-
superset/commands/database/update.py | 34 +-
superset/commands/dataset/refresh.py | 5 +
superset/commands/deletion_retention/window.py | 77 +-
superset/commands/version_restore.py | 9 +-
superset/common/query_context_factory.py | 36 +
superset/common/query_context_processor.py | 6 +-
superset/common/utils/query_cache_manager.py | 2 +
superset/config.py | 205 +++-
superset/connectors/sqla/models.py | 11 +-
superset/constants.py | 9 +
superset/daos/base.py | 9 +-
superset/daos/dashboard.py | 58 +-
superset/daos/database.py | 43 +-
superset/daos/dataset.py | 3 +-
superset/daos/datasource.py | 2 +-
superset/dashboards/api.py | 8 +-
superset/dashboards/filters.py | 22 +-
superset/databases/api.py | 37 +-
superset/databases/schemas.py | 15 +
superset/dataframe.py | 109 +-
superset/datasets/api.py | 5 +
superset/datasets/schemas.py | 3 +-
superset/db_engine_specs/__init__.py | 31 +-
superset/db_engine_specs/aurora.py | 79 ++
superset/db_engine_specs/base.py | 74 +-
superset/db_engine_specs/bigquery.py | 4 +
superset/db_engine_specs/clickhouse.py | 22 +-
superset/db_engine_specs/crate.py | 35 +-
superset/db_engine_specs/d1.py | 142 ++-
superset/db_engine_specs/databend.py | 2 +-
superset/db_engine_specs/databricks.py | 143 ++-
superset/db_engine_specs/duckdb.py | 39 +
superset/db_engine_specs/dynamodb.py | 24 +-
superset/db_engine_specs/elasticsearch.py | 59 +-
superset/db_engine_specs/gsheets.py | 60 +-
superset/db_engine_specs/ibmi.py | 24 +
superset/db_engine_specs/impala.py | 21 +
superset/db_engine_specs/kusto.py | 35 +
superset/db_engine_specs/kylin.py | 50 +-
superset/db_engine_specs/mssql.py | 2 -
superset/db_engine_specs/mysql.py | 150 +++
superset/db_engine_specs/oracle.py | 118 +-
superset/db_engine_specs/pinot.py | 7 +
superset/db_engine_specs/postgres.py | 14 +-
superset/db_engine_specs/snowflake.py | 12 +-
superset/db_engine_specs/starrocks.py | 12 +-
superset/exceptions.py | 23 +
superset/extensions/__init__.py | 6 +-
superset/extensions/metastore_cache.py | 35 +-
superset/jinja_context.py | 12 +-
superset/mcp_service/app.py | 18 +-
superset/mcp_service/auth.py | 35 +-
superset/mcp_service/caching.py | 28 +-
.../mcp_service/catalog}/__init__.py | 0
superset/mcp_service/catalog/schemas.py | 131 +++
.../catalog/tool}/__init__.py | 6 +-
superset/mcp_service/catalog/tool/get_catalog.py | 443 +++++++
superset/mcp_service/chart/chart_helpers.py | 4 +-
superset/mcp_service/chart/chart_utils.py | 2 +-
superset/mcp_service/chart/preview_utils.py | 44 +-
superset/mcp_service/chart/schemas.py | 3 +-
superset/mcp_service/chart/tool/generate_chart.py | 7 +-
superset/mcp_service/chart/tool/get_chart_sql.py | 4 +-
.../mcp_service/chart/tool/update_chart_preview.py | 4 +-
.../chart/validation/dataset_validator.py | 2 +-
superset/mcp_service/dashboard/schemas.py | 7 +-
.../mcp_service/dashboard/tool/delete_dashboard.py | 2 +-
superset/mcp_service/dataset/schemas.py | 263 +++++
superset/mcp_service/dataset/tool/__init__.py | 8 +-
.../mcp_service/dataset/tool/delete_dataset.py | 217 ++++
superset/mcp_service/dataset/tool/list_datasets.py | 7 +-
.../mcp_service/dataset/tool/restore_dataset.py | 258 +++++
.../mcp_service/dataset/tool/update_dataset.py | 340 ++++++
.../explore/tool/generate_explore_link.py | 2 +-
superset/mcp_service/mcp_config.py | 3 +
superset/mcp_service/utils/response_size_utils.py | 3 +
superset/models/core.py | 55 +-
superset/models/helpers.py | 105 +-
superset/models/slice.py | 2 +-
superset/models/sql_lab.py | 29 +-
superset/reports/schemas.py | 41 +
superset/result_set.py | 2 +
superset/security/manager.py | 14 +-
superset/sql/parse.py | 132 ++-
superset/tasks/deletion_retention.py | 10 +-
superset/tasks/version_history_retention.py | 33 +-
superset/translations/ar/LC_MESSAGES/messages.po | 332 +++---
superset/translations/ca/LC_MESSAGES/messages.po | 270 ++---
superset/translations/cs/LC_MESSAGES/messages.po | 197 ++--
superset/translations/fa/LC_MESSAGES/messages.po | 334 +++---
superset/translations/fi/LC_MESSAGES/messages.po | 299 ++---
superset/translations/ko/LC_MESSAGES/messages.po | 450 ++++----
superset/translations/lv/LC_MESSAGES/messages.po | 212 ++--
superset/translations/messages.pot | 57 +-
superset/translations/mi/LC_MESSAGES/messages.po | 274 +++--
superset/translations/nl/LC_MESSAGES/messages.po | 343 +++---
superset/translations/pl/LC_MESSAGES/messages.po | 384 +++---
.../translations/pt_BR/LC_MESSAGES/messages.po | 328 +++---
superset/translations/sk/LC_MESSAGES/messages.po | 201 ++--
superset/translations/ta/LC_MESSAGES/messages.po | 284 +++--
superset/translations/th/LC_MESSAGES/messages.po | 286 ++---
superset/translations/tr/LC_MESSAGES/messages.po | 27 +-
superset/translations/uk/LC_MESSAGES/messages.po | 212 ++--
superset/translations/zh/LC_MESSAGES/messages.po | 52 +-
.../translations/zh_TW/LC_MESSAGES/messages.po | 289 +++--
superset/utils/core.py | 3 +-
superset/utils/database.py | 76 +-
superset/utils/date_parser.py | 2 +-
superset/utils/excel.py | 83 +-
superset/utils/number_format.py | 10 +-
superset/utils/rls.py | 99 +-
superset/versioning/api_helpers.py | 38 +-
superset/versioning/baseline/listener.py | 3 +-
superset/versioning/changes/listener.py | 7 +
superset/versioning/queries.py | 4 +-
superset/versioning/restore.py | 225 +++-
superset/versioning/snapshot.py | 275 +++++
superset/versioning/unit_of_work.py | 54 +
superset/versioning/utils.py | 40 +-
superset/views/base.py | 3 +-
tests/integration_tests/databases/api_tests.py | 108 +-
.../integration_tests/databases/commands_tests.py | 19 +-
tests/integration_tests/reports/api_tests.py | 75 ++
.../security/row_level_security_tests.py | 110 ++
.../versioning/retention_prune_tests.py | 2 +-
.../versioning/versions_api_tests.py | 108 +-
.../db_engine_specs/test_databend.py | 43 +-
.../unit_tests/charts/data/test_non_dict_params.py | 116 ++
tests/unit_tests/charts/test_client_processing.py | 55 +
tests/unit_tests/cli/deletion_retention_test.py | 30 +-
tests/unit_tests/commands/databases/oauth2_test.py | 73 +-
tests/unit_tests/commands/databases/tables_test.py | 165 +++
tests/unit_tests/commands/databases/update_test.py | 114 ++
tests/unit_tests/commands/dataset/refresh_test.py | 27 +-
.../common/test_query_context_factory.py | 201 ++++
.../common/test_query_context_processor.py | 42 +-
tests/unit_tests/config_test.py | 286 ++++-
tests/unit_tests/connectors/sqla/models_test.py | 55 +-
tests/unit_tests/dao/base_dao_test.py | 29 +-
tests/unit_tests/dao/dashboard_test.py | 247 +++-
.../daos/test_dataset_dao.py} | 20 +-
tests/unit_tests/dashboards/datasets_test.py | 1 +
.../dashboards/semantic_view_access_test.py | 68 +-
tests/unit_tests/databases/api_test.py | 218 +++-
.../databases/dao/related_objects_test.py | 122 ++
tests/unit_tests/databases/oauth2_api_test.py | 32 +-
tests/unit_tests/dataframe_test.py | 181 ++-
tests/unit_tests/datasets/schema_tests.py | 1 +
tests/unit_tests/datasource/dao_tests.py | 16 +
tests/unit_tests/db_engine_specs/test_base.py | 137 ++-
tests/unit_tests/db_engine_specs/test_crate.py | 83 +-
tests/unit_tests/db_engine_specs/test_d1.py | 337 ++++++
.../unit_tests/db_engine_specs/test_databricks.py | 70 ++
tests/unit_tests/db_engine_specs/test_duckdb.py | 145 +++
tests/unit_tests/db_engine_specs/test_dynamodb.py | 88 +-
.../db_engine_specs/test_elasticsearch.py | 144 ++-
tests/unit_tests/db_engine_specs/test_gsheets.py | 210 +++-
tests/unit_tests/db_engine_specs/test_impala.py | 109 ++
tests/unit_tests/db_engine_specs/test_init.py | 143 +++
tests/unit_tests/db_engine_specs/test_kylin.py | 50 +
tests/unit_tests/db_engine_specs/test_mysql.py | 307 +++++
tests/unit_tests/db_engine_specs/test_oracle.py | 111 +-
tests/unit_tests/db_engine_specs/test_postgres.py | 16 +-
tests/unit_tests/db_engine_specs/test_snowflake.py | 47 +
tests/unit_tests/db_engine_specs/test_starrocks.py | 73 +-
.../unit_tests/extensions/metastore_cache_test.py | 93 ++
tests/unit_tests/jinja_context_test.py | 31 +
.../unit_tests/mcp_service/catalog}/__init__.py | 0
.../mcp_service/catalog/tool}/__init__.py | 0
.../mcp_service/catalog/tool/test_get_catalog.py | 921 +++++++++++++++
.../mcp_service/chart/test_preview_utils.py | 125 ++
.../mcp_service/chart/tool/test_generate_chart.py | 57 +
.../chart/tool/test_update_chart_preview.py | 31 +
.../dashboard/tool/test_duplicate_dashboard.py | 21 +-
.../dataset/tool/test_create_dataset.py | 1 +
.../mcp_service/dataset/tool/test_dataset_tools.py | 14 +
.../dataset/tool/test_delete_dataset.py | 340 ++++++
.../tool/test_list_datasets_deleted_state.py} | 89 +-
.../tool/test_restore_dataset.py} | 266 +++--
.../dataset/tool/test_update_dataset.py | 574 +++++++++
.../explore/tool/test_generate_explore_link.py | 25 +
.../test_isdigit_isdecimal_regression.py | 149 +++
tests/unit_tests/mcp_service/test_mcp_caching.py | 67 +-
.../mcp_service/test_mcp_tool_registration.py | 9 +
.../mcp_service/test_rbac_tool_enforcement.py | 18 +
.../test_sanitization_warning_inputs.py | 80 ++
.../unit_tests/mcp_service/test_tool_inventory.py | 7 +-
tests/unit_tests/models/core_test.py | 165 +++
.../unit_tests/models/helpers_rls_rollback_test.py | 80 ++
tests/unit_tests/models/helpers_test.py | 59 +-
.../models/select_alias_shadowing_test.py | 184 +++
tests/unit_tests/models/slice_test.py | 4 +
.../models/test_virtual_dataset_format.py | 62 +-
tests/unit_tests/reports/schemas_test.py | 83 ++
tests/unit_tests/result_set_test.py | 22 +
.../scripts/docker_release_target_test.py | 177 +++
.../scripts/translations/check_pot_drift_test.py | 82 ++
tests/unit_tests/security/guest_rls_test.py | 228 +++-
tests/unit_tests/security/manager_test.py | 80 +-
tests/unit_tests/sql/execution/test_celery_task.py | 40 +
tests/unit_tests/sql/parse_tests.py | 268 +++++
tests/unit_tests/sql_lab_test.py | 49 +
tests/unit_tests/tasks/test_deletion_retention.py | 206 +++-
.../tasks/test_export_dashboard_excel.py | 42 +
.../tasks/test_version_history_retention.py | 223 +++-
.../sk_sql_lab_progress_message_test.py | 64 +
tests/unit_tests/utils/excel_tests.py | 38 +-
tests/unit_tests/utils/number_format_test.py | 26 +
tests/unit_tests/utils/rls_test.py | 36 +
tests/unit_tests/utils/test_core.py | 46 +-
tests/unit_tests/utils/test_database.py | 110 +-
.../unit_tests/versioning/test_api_feature_flag.py | 167 +++
.../versioning/test_capture_gap_restore.py | 809 +++++++++++++
tests/unit_tests/versioning/test_listener.py | 88 +-
tests/unit_tests/versioning/test_restore.py | 78 +-
.../unit_tests/versioning/test_runtime_capture.py | 396 +++++++
381 files changed, 28444 insertions(+), 5570 deletions(-)
create mode 100644 docs/static/img/version-history/recently-archived.jpg
create mode 100644 docs/static/img/version-history/version-history-panel.jpg
create mode 100644 docs/static/img/version-history/version-history-preview.jpg
create mode 100644 scripts/docker_release_target.py
delete mode 100644
superset-frontend/cypress-base/cypress/e2e/explore/chart.test.js
delete mode 100644 superset-frontend/cypress-base/cypress/e2e/explore/utils.ts
delete mode 100644
superset-frontend/cypress-base/cypress/e2e/explore/visualizations/shared.helper.js
create mode 100644 superset-frontend/playwright/components/core/Radio.ts
create mode 100644
superset-frontend/playwright/components/modals/SaveChartModal.ts
create mode 100644
superset-frontend/playwright/tests/explore/cross-referenced-dashboards.spec.ts
create mode 100644
superset-frontend/playwright/tests/explore/explore-no-results.spec.ts
create mode 100644
superset-frontend/playwright/tests/explore/explore-save.spec.ts
create mode 100644
superset-frontend/playwright/tests/explore/explore-test-helpers.ts
create mode 100644
superset-frontend/plugins/plugin-chart-echarts/src/utils/legendEventHandlers.test.ts
create mode 100644
superset-frontend/plugins/plugin-chart-echarts/src/utils/legendEventHandlers.ts
create mode 100644
superset-frontend/plugins/plugin-chart-echarts/test/Timeseries/Bar/sparseSubDailyBarGeometry.test.ts
create mode 100644
superset-frontend/plugins/plugin-chart-echarts/test/Treemap/EchartsTreemap.test.tsx
copy superset-frontend/scripts/{commitlint.js => po2json-cli.js} (56%)
mode change 100755 => 100644
create mode 100644 superset-frontend/scripts/po2json.js
create mode 100644 superset-frontend/spec/scripts/po2json.test.ts
create mode 100644
superset-frontend/src/dashboard/actions/dashboardInfo.test.ts
create mode 100644
superset-frontend/src/dashboard/components/RefreshIntervalModal.test.tsx
create mode 100644
superset-frontend/src/dashboard/components/SaveModal.test.tsx
create mode 100644
superset-frontend/src/dashboard/components/dnd/dragDroppableConfig.test.ts
create mode 100644
superset-frontend/src/dashboard/components/dnd/handleDrop.test.ts
create mode 100644
superset-frontend/src/dashboard/components/nativeFilters/FilterBar/keyValue.test.ts
create mode 100644
superset-frontend/src/dashboard/components/nativeFilters/FilterBar/state.test.ts
create mode 100644
superset-frontend/src/dashboard/components/nativeFilters/FiltersConfigModal/hooks/useModalSaveLogic.test.ts
copy superset-frontend/src/filters/components/{Time/TimeFilterPlugin.test.tsx
=> TimeColumn/TimeColumnFilterPlugin.test.tsx} (56%)
create mode 100644
superset-frontend/src/pages/DatabaseList/DatabaseList.datasetDependents.test.tsx
create mode 100644 superset-frontend/src/utils/colorScheme.test.ts
copy {scripts => superset/mcp_service/catalog}/__init__.py (100%)
create mode 100644 superset/mcp_service/catalog/schemas.py
copy superset/{sql/execution => mcp_service/catalog/tool}/__init__.py (91%)
create mode 100644 superset/mcp_service/catalog/tool/get_catalog.py
create mode 100644 superset/mcp_service/dataset/tool/delete_dataset.py
create mode 100644 superset/mcp_service/dataset/tool/restore_dataset.py
create mode 100644 superset/mcp_service/dataset/tool/update_dataset.py
create mode 100644 superset/versioning/snapshot.py
create mode 100644 superset/versioning/unit_of_work.py
create mode 100644 tests/unit_tests/charts/data/test_non_dict_params.py
copy tests/{integration_tests/fixtures/client.py =>
unit_tests/daos/test_dataset_dao.py} (64%)
create mode 100644 tests/unit_tests/databases/dao/related_objects_test.py
create mode 100644 tests/unit_tests/db_engine_specs/test_d1.py
create mode 100644 tests/unit_tests/extensions/metastore_cache_test.py
copy {scripts => tests/unit_tests/mcp_service/catalog}/__init__.py (100%)
copy {scripts => tests/unit_tests/mcp_service/catalog/tool}/__init__.py (100%)
create mode 100644
tests/unit_tests/mcp_service/catalog/tool/test_get_catalog.py
create mode 100644
tests/unit_tests/mcp_service/dataset/tool/test_delete_dataset.py
copy
tests/unit_tests/mcp_service/{chart/tool/test_list_charts_deleted_state.py =>
dataset/tool/test_list_datasets_deleted_state.py} (59%)
copy tests/unit_tests/mcp_service/{chart/tool/test_restore_chart.py =>
dataset/tool/test_restore_dataset.py} (54%)
create mode 100644
tests/unit_tests/mcp_service/dataset/tool/test_update_dataset.py
create mode 100644
tests/unit_tests/mcp_service/test_isdigit_isdecimal_regression.py
create mode 100644
tests/unit_tests/mcp_service/test_sanitization_warning_inputs.py
create mode 100644 tests/unit_tests/models/helpers_rls_rollback_test.py
create mode 100644 tests/unit_tests/models/select_alias_shadowing_test.py
create mode 100644 tests/unit_tests/scripts/docker_release_target_test.py
create mode 100644
tests/unit_tests/translations/sk_sql_lab_progress_message_test.py
create mode 100644 tests/unit_tests/versioning/test_api_feature_flag.py
create mode 100644 tests/unit_tests/versioning/test_capture_gap_restore.py
create mode 100644 tests/unit_tests/versioning/test_runtime_capture.py