This is an automated email from the ASF dual-hosted git repository.
sadpandajoe pushed a change to branch fix-pivot-table-totals-requery
in repository https://gitbox.apache.org/repos/asf/superset.git
from 21013ae298d fix(charts): mirror pivot subtotal level gating in form
data rebuild
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 b4fcba79875 Merge branch 'master' into fix-pivot-table-totals-requery
No new revisions were added by this update.
Summary of changes:
.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/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-frontend.yml | 3 +
.github/workflows/superset-translations.yml | 9 +-
.github/workflows/testcontainers.yml | 7 +-
UPDATING.md | 122 ++-
docs/admin_docs/configuration/cache.mdx | 2 +-
.../configuration/configuring-superset.mdx | 2 +
docs/admin_docs/configuration/mcp-server.mdx | 77 +-
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 ++
.../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/exploring-data.mdx | 8 +
.../using-superset/semantic-layer-connections.mdx | 11 +
.../using-superset/semantic-member-selections.mdx | 2 +-
.../docs/using-superset/using-ai-with-superset.mdx | 20 +
docs/package.json | 6 +-
docs/sidebarTutorials.js | 2 +-
docs/static/resources/openapi.json | 1 +
docs/yarn.lock | 492 ++++-----
pyproject.toml | 8 +-
requirements/base.in | 2 +-
requirements/base.txt | 10 +-
requirements/development.txt | 48 +-
superset-embedded-sdk/package-lock.json | 26 +-
superset-frontend/package-lock.json | 697 +++++--------
superset-frontend/package.json | 8 +-
.../src/components/TableCollection/utils.tsx | 3 +-
.../src/connection/SupersetClientClass.ts | 4 +-
.../src/number-format/NumberFormatterRegistry.ts | 28 +-
.../factories/createSmartNumberFormatter.ts | 56 +-
.../test/connection/SupersetClientClass.test.ts | 5 +-
.../number-format/NumberFormatterRegistry.test.ts | 18 +
.../factories/createSmartNumberFormatter.test.ts | 14 +
.../playwright/helpers/api/assertions.ts | 16 +-
.../playwright/tests/chart/chart-list.spec.ts | 4 +-
.../tests/dashboard/dashboard-list.spec.ts | 4 +-
.../dashboard/version-history-placement.spec.ts | 39 +-
.../playwright/tests/dataset/dataset-list.spec.ts | 4 +-
.../tests/version-history/activity-log.spec.ts | 14 +-
.../src/Candlestick/constants.ts | 12 +-
.../src/Candlestick/controlPanel.tsx | 8 +-
.../src/Timeseries/Regular/Bar/controlPanel.tsx | 28 +
.../src/Timeseries/Regular/Line/controlPanel.tsx | 19 +
.../src/Timeseries/transformProps.ts | 26 +-
.../plugin-chart-echarts/src/Timeseries/types.ts | 2 +
.../plugins/plugin-chart-echarts/src/controls.tsx | 30 +
.../test/Candlestick/controlPanel.test.ts | 10 +
.../test/Candlestick/transformProps.test.ts | 17 +
.../test/Timeseries/Bar/controlPanel.test.ts | 28 +
.../test/Timeseries/Line/controlPanel.test.ts | 42 +
.../test/Timeseries/helpers.ts | 1 +
.../test/Timeseries/transformProps.test.ts | 128 +++
.../plugins/plugin-chart-table/src/Styles.tsx | 4 +
.../plugin-chart-table/test/TableChart.test.tsx | 73 ++
.../src/layers/Contour/Contour.test.ts | 56 ++
.../src/layers/Contour/Contour.tsx | 2 +-
.../SqlLab/components/ResultSet/ResultSet.test.tsx | 13 +-
.../src/SqlLab/components/ResultSet/index.tsx | 10 +-
.../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 +-
.../components/Chart/ChartErrorMessage.test.tsx | 2 +-
.../src/components/Chart/ChartErrorMessage.tsx | 3 +-
.../FoldersEditor/FoldersEditor.test.tsx | 17 +-
.../components/Datasource/FoldersEditor/index.tsx | 12 +-
.../components/ErrorMessage/ErrorAlert.test.tsx | 41 +
.../src/components/GridTable/GridTable.test.tsx | 21 +
.../src/components/GridTable/index.tsx | 10 +-
.../DashboardBuilder/DashboardBuilder.test.tsx | 137 ++-
.../DashboardBuilder/DashboardBuilder.tsx | 155 +--
.../DashboardBuilder/DashboardWrapper.tsx | 2 +-
.../src/dashboard/components/SliceAdder.test.tsx | 2 +-
.../src/dashboard/components/SliceAdder.tsx | 8 +-
.../src/dashboard/containers/DashboardPage.tsx | 5 +-
superset-frontend/src/embedded/index.tsx | 5 +-
.../DatasourcePanel.real-autosizer.test.tsx | 7 +-
.../DatasourcePanel/DatasourcePanel.test.tsx | 13 +-
.../explore/components/DatasourcePanel/index.tsx | 10 +-
.../components/ExploreViewContainer/index.tsx | 6 +-
.../ColorSchemeControl/ColorSchemeLabel.test.tsx | 14 +
.../ColorSchemeControl/ColorSchemeLabel.tsx | 3 +
.../ContourControl/ContourControl.test.tsx | 128 +++
.../controls/ContourControl/ContourOption.tsx | 8 +-
.../ContourControl/ContourPopoverControl.tsx | 17 +-
.../components/controls/JSEditorControl.test.tsx | 9 +-
.../components/controls/JSEditorControl.tsx | 10 +-
.../alerts/components/AlertStatusIcon.test.tsx | 14 +
.../features/alerts/components/AlertStatusIcon.tsx | 1 +
.../semanticViews/AddSemanticViewModal.test.tsx | 251 ++++-
.../semanticViews/AddSemanticViewModal.tsx | 121 ++-
.../src/features/semanticViews/creationResult.ts | 90 ++
.../src/features/versionHistory/ActionRow.tsx | 5 +-
.../versionHistory/CurrentVersionSection.tsx | 12 +-
.../DashboardVersionHistory.test.tsx | 4 +-
.../features/versionHistory/SaveGroupItem.test.tsx | 88 +-
.../src/features/versionHistory/SaveGroupItem.tsx | 66 +-
.../versionHistory/VersionHistoryPanel.test.tsx | 107 +-
.../versionHistory/VersionHistoryPanel.tsx | 53 +-
.../src/features/versionHistory/display.test.ts | 28 +
.../src/features/versionHistory/display.ts | 28 +
.../versionHistory/useVersionActivity.test.ts | 4 +-
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-websocket/package-lock.json | 486 ++++-----
superset-websocket/package.json | 4 +-
superset/app.py | 8 +-
superset/charts/client_processing.py | 41 +-
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/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/config.py | 49 +
superset/connectors/sqla/utils.py | 49 +-
superset/daos/dashboard.py | 7 +
superset/dashboards/filters.py | 7 +
superset/db_engine_specs/oceanbase.py | 86 ++
superset/jinja_context.py | 4 +-
superset/mcp_service/app.py | 4 +-
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/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 | 18 +-
superset/mcp_service/database/schemas.py | 8 +-
superset/mcp_service/dataset/schemas.py | 9 +-
.../dataset/tool/update_dataset_metric.py | 2 +-
superset/mcp_service/jwt_verifier.py | 28 +-
superset/mcp_service/middleware.py | 29 +-
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 +-
...ep_legacy_password_view_perms_from_all_roles.py | 120 +++
superset/models/core.py | 5 +-
superset/models/helpers.py | 17 +-
superset/reports/api.py | 15 +-
superset/reports/filters.py | 37 +
superset/security/password_change.py | 101 +-
superset/semantic_layers/api.py | 63 +-
superset/semantic_layers/models.py | 3 +
superset/tags/core.py | 98 +-
superset/tags/models.py | 271 +----
superset/translations/ar/LC_MESSAGES/messages.po | 36 +-
superset/translations/ca/LC_MESSAGES/messages.po | 36 +-
superset/translations/cs/LC_MESSAGES/messages.po | 36 +-
superset/translations/de/LC_MESSAGES/messages.po | 36 +-
superset/translations/en/LC_MESSAGES/messages.po | 36 +-
superset/translations/es/LC_MESSAGES/messages.po | 36 +-
superset/translations/fa/LC_MESSAGES/messages.po | 36 +-
superset/translations/fi/LC_MESSAGES/messages.po | 36 +-
superset/translations/fr/LC_MESSAGES/messages.po | 36 +-
superset/translations/it/LC_MESSAGES/messages.po | 36 +-
superset/translations/ja/LC_MESSAGES/messages.po | 40 +-
superset/translations/ko/LC_MESSAGES/messages.po | 36 +-
superset/translations/lv/LC_MESSAGES/messages.po | 36 +-
superset/translations/messages.pot | 67 +-
superset/translations/mi/LC_MESSAGES/messages.po | 36 +-
superset/translations/nl/LC_MESSAGES/messages.po | 36 +-
superset/translations/pl/LC_MESSAGES/messages.po | 36 +-
superset/translations/pt/LC_MESSAGES/messages.po | 36 +-
.../translations/pt_BR/LC_MESSAGES/messages.po | 36 +-
superset/translations/ro/LC_MESSAGES/messages.po | 36 +-
superset/translations/ru/LC_MESSAGES/messages.po | 36 +-
superset/translations/sk/LC_MESSAGES/messages.po | 36 +-
superset/translations/sl/LC_MESSAGES/messages.po | 36 +-
superset/translations/sr/LC_MESSAGES/messages.po | 36 +-
.../translations/sr_Latn/LC_MESSAGES/messages.po | 36 +-
superset/translations/ta/LC_MESSAGES/messages.po | 36 +-
superset/translations/th/LC_MESSAGES/messages.po | 36 +-
superset/translations/tr/LC_MESSAGES/messages.po | 36 +-
superset/translations/uk/LC_MESSAGES/messages.po | 36 +-
superset/translations/zh/LC_MESSAGES/messages.po | 36 +-
.../translations/zh_TW/LC_MESSAGES/messages.po | 36 +-
superset/utils/filters.py | 111 ++-
superset/utils/pandas_postprocessing/compare.py | 14 +-
.../src/superset_e2e_semantic_stub/__init__.py | 12 +-
tests/integration_tests/charts/api_tests.py | 8 +-
tests/integration_tests/dashboards/api_tests.py | 28 +-
tests/integration_tests/tagging_tests.py | 294 ------
tests/integration_tests/tags/dao_tests.py | 94 +-
.../db_engine_specs/test_oceanbase.py | 94 +-
tests/unit_tests/charts/test_client_processing.py | 188 ++++
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 +-
.../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/connectors/sqla/utils_test.py | 26 +
.../dao/test_copy_dashboard_legacy_ids.py | 30 +-
.../dashboards/semantic_view_access_test.py | 141 ++-
tests/unit_tests/db_engine_specs/test_oceanbase.py | 228 +++++
tests/unit_tests/db_engine_specs/test_trino.py | 1052 +++++++++++++++++++-
tests/unit_tests/importexport/api_test.py | 69 +-
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 +
.../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/native_tool_inventory.json | 90 +-
.../mcp_service/test_browser_hello_middleware.py | 126 +++
.../mcp_service/test_dashboard_scope_sql.py | 51 +
tests/unit_tests/mcp_service/test_mcp_config.py | 9 +
.../mcp_service/test_mcp_tool_registration.py | 23 +
.../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 +++
.../test_sweep_legacy_password_view_perms.py | 190 ++++
tests/unit_tests/models/helpers_test.py | 171 ++++
.../pandas_postprocessing/test_compare.py | 109 ++
tests/unit_tests/reports/filters_test.py | 53 +
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 | 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 | 2 +
tests/unit_tests/tags/race_test.py | 155 +--
tests/unit_tests/utils/filters_test.py | 260 ++++-
283 files changed, 14687 insertions(+), 4262 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} (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/preset-chart-deckgl/src/layers/Contour/Contour.test.ts
create mode 100644
superset-frontend/src/explore/components/controls/ContourControl/ContourControl.test.tsx
create mode 100644
superset-frontend/src/features/semanticViews/creationResult.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-30_00-00_d623a0cb6bb0_sweep_legacy_password_view_perms_from_all_roles.py
delete mode 100644 tests/integration_tests/tagging_tests.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_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