You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@superset.apache.org by ru...@apache.org on 2026/06/03 20:34:14 UTC
(superset) branch fix/hide-registration-hash updated (6ad96ad5ff2 -> 901868e1f28)
This is an automated email from the ASF dual-hosted git repository.
rusackas pushed a change to branch fix/hide-registration-hash
in repository https://gitbox.apache.org/repos/asf/superset.git
omit 6ad96ad5ff2 chore(i18n): remove orphaned Registration hash msgid from fi and th
omit cbf86caad48 chore(i18n): remove Registration hash msgid from translations
omit 40d4cb6e46b fix(security): stop exposing registration_hash in the registrations API
add a6d2c954803 chore(deps): migrate MCP service JWT errors from authlib.jose to joserfc (#40582)
add 817a35f445d fix(mcp): deny deactivated user accounts in MCP authentication (#40631)
add c6faa50338b fix(cli): encrypt sqlalchemy_uri password on import_datasources (#31983) (#40584)
add 2abbb64e6bc feat(gsheets): restore public/private sheet selector (#40466)
add e2ed9896399 fix(reports): skip permalink when dashboard state has no anchor or filters (#40530)
add 052e567f775 fix: guard dynamic dispatch and bound a regex quantifier (#40547)
add ca8855dc037 fix(mcp): generic auth errors, required token expiry, and safer auth logging (#40646)
add aba6ea536cc fix(dashboard): prevent "undefined undefined" owner names in properties modal (#40528)
add ddb647cd3ae fix(dashboard): clear undo history (#40569)
add 88abd41c8b8 fix(sql-lab): prevent crash when host shell lacks useAppDispatch export (#40591)
add 7275116f4cd fix(world-map): preserve bubbles and exclude only null metrics from color scale (#39926)
add fc0245bdb06 fix(charts): show non-filterable columns in metric section for table … (#39524)
add 699e741c69d fix(time-comparison): shift offset filter when X-axis is adhoc Custom SQL (#40586)
add d26a7aac3dd fix(dashboard): hide Edit button in embedded dashboards (#40687)
add 4996d7c277f fix: avoid warning spam when default spinner SVG is missing (#40481)
add 093b43c7a58 fix(exports,email,logs): csv formula escaping, subject CRLF stripping, UTC log pruning (#40645)
add 1632b235ae8 fix(sqllab): surface stacktrace in SQL Lab error responses (#28248) (#40585)
add 24422c83114 test(histogram): metric filters require aggregation in buildQuery (#30330) (#40617)
add 242c27a9743 test(presto): 401 Unauthorized must surface as CONNECTION_ACCESS_DENIED_ERROR (#33554) (#40618)
add 1b8099811b8 fix(chart-list): sort by changed_on instead of last_saved_at (#39984)
add d2d46169bf6 fix(explore): tighten popover title-to-tabs spacing to 12px (#40410)
add 19c2b67d09a fix(websocket): validate last_id query param format (#40626)
add 86fa5bb46f0 feat(table v2): agGridTableChart add row numer column (#39284)
add 4d2b10d916e chore(excel): strip document metadata from Excel exports (#40661)
add b97d3ef520b fix(api,sql): use json_response in Api.query and log dialect fallback (#40644)
add 00dd31494d1 fix: sanitize URL sinks and trim sensitive log fields (#40546)
add 616c2432780 fix(deps): revert joserfc JWT error migration — fastmcp still uses authlib (#40688)
add 49f3dbba733 fix(dashboard): address post-approval review feedback on #40528 (#40685)
add 8508af3201c chore(key_value): prune expired entries from the key-value store (#40663)
add a9df2c7e5ea fix(mcp): address post-approval review feedback on auth logging PR #40646 (#40684)
add 3e589436fa6 fix(reports): sanitize error text in email notification template (#40641)
add 6eaee211aad fix(sqllab): require dataset match for raw query access (#40409)
add 17d1a45bc94 feat(ydb): switch to native YDB sqlglot dialect (#40170)
add 8c62f533d7c fix(core): restrict allowed CSS properties in sanitized HTML (#40627)
add 6abee0289b8 fix(reports): guard SUCCESS-state report execution against duplicate sends and stuck WORKING state (#40657)
add 9af6746dbe1 fix(models): HTML-escape data-controlled values in dashboard_link and Slice.icons (#40639)
add a2a369cb5c8 fix(charts): sanitize tooltip HTML across nvd3, rose and partition plugins (#40502)
add 3bbb35e8a33 ci(bashlib): drop the dead bc-based NONCE (perf + reliability) (#40691)
add c54990c861b fix(plugin-chart-ag-grid-table): validate filter values/operators in state converter (#40623)
add ac522ded1c4 fix(ssh-tunnel): validate server_address format (SSRF defense-in-depth) (#40665)
add 0b9764aed56 fix(mcp): honor AUTH_ROLE_ADMIN and warn on permission-less protected tools (#40659)
add 12bef03f4af fix(jinja): apply consistent escaping to url_param values from request args (#40633)
add df21fe65718 chore(mcp): return a generic error from the webdriver pool-stats endpoint (#40559)
add fa41769a08a fix(embedded): enforce configured allowed domains for postMessage origin (#40629)
add b9dc9d722e6 fix(export): sanitize user-supplied CSV export filename (charts + SQL Lab) (#40632)
add 8e4a460cc71 fix(charts): apply DISALLOWED_SQL_FUNCTIONS gate to adhoc expressions (#40568)
add faa76f67412 fix(embedding): add optional dataset allowlist to guest tokens (#39302)
add 725f5ed2a90 fix(api): enforce per-object ownership validation in chart, dataset, and report commands (#39303)
add f7f50a79770 fix(sqllab): quote CTAS target identifiers and validate tmp_table_name format (#40245)
add cf08a5ebf75 feat(docker): add environment-based debugger control (#40327)
add 3191b0fdcd5 fix: apply dashboard access check in related_objects endpoints (#40333)
add 61b32d1b7d0 fix(chart): standardize dashboard validation across chart create/update (#40336)
add 56fd991efde fix(dataset): unify validation for stored and adhoc SQL expressions (#40392)
add 77c2bed5f72 fix(dashboards): narrow datasets payload to callers with read access (#40396)
add b8a2f925ee4 fix(views): enforce per-chart access check in legacy form_data endpoint (#40497)
add e3ba85b1a5e fix(redirect): normalize browser-stripped whitespace before protocol-relative check (#40566)
add c914df5a67c ci: harden CI against Docker Hub registry flakes (retries + auth) (#40700)
add accc94da516 fix(users): show 0 for null login_count and fail_login_count (#40281)
add e5ff6de790b chore: correct typos in config.py and models_test.py comments (#40706)
add cb2a56d16e0 chore: guard recursive merge keys and invoke subprocess without a shell (#40558)
add e5c7200551a ci: gate expensive test workflows at the job level (#40718)
add 001834470b8 fix(mcp): escape LIKE wildcards in MCP list tool search filters (#40682)
add f4dfb7f0266 fix(mcp): fall back to form_data spatial query for Deck.gl charts (#40339)
add fcb1e299ace fix(nvd3): sanitize generateMultiLineTooltipContent output (#40612)
add 6ea4e227856 refactor(nvd3): extract testable generateAnnotationTooltipContent helper (#40620)
add 80ea36c852f fix(db_engine_specs): escape schema name in regex; document safe filter pattern (#40642)
add c373da1bb91 ci: add cancel-in-progress concurrency to PR helper workflows (#40725)
add 80a5f6b787e fix(calendar): Fix day offset in Calendar Heatmap visualization (#34564)
add 2be2246a003 chore(deps-dev): bump gevent from 24.2.1 to 26.4.0 (#40378)
add 8f26c996791 fix(security): stop exposing registration_hash in the registrations API
add 15d23681aff chore(i18n): remove Registration hash msgid from translations
add 901868e1f28 chore(i18n): remove orphaned Registration hash msgid from fi and th
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 (6ad96ad5ff2)
\
N -- N -- N refs/heads/fix/hide-registration-hash (901868e1f28)
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/workflows/bashlib.sh | 4 -
.github/workflows/check-python-deps.yml | 13 +
.github/workflows/github-action-validator.yml | 5 +
.github/workflows/labeler.yml | 5 +
.github/workflows/pr-lint.yml | 5 +
.github/workflows/superset-e2e.yml | 50 +-
.github/workflows/superset-playwright.yml | 36 +-
.../workflows/superset-python-integrationtest.yml | 70 ++-
.github/workflows/superset-python-presto-hive.yml | 47 +-
.github/workflows/superset-python-unittest.yml | 28 +-
SECURITY.md | 2 +-
UPDATING.md | 10 +
docker/docker-bootstrap.sh | 18 +-
docs/admin_docs/installation/pypi.mdx | 9 +-
.../version-6.1.0/installation/pypi.mdx | 9 +-
.../contributing/development-setup.md | 2 +
pyproject.toml | 5 +-
requirements/base.txt | 2 +-
requirements/development.txt | 4 +-
scripts/uv-pip-compile.sh | 23 +-
superset-frontend/.eslintrc.js | 2 +-
superset-frontend/package-lock.json | 7 +
superset-frontend/package.json | 1 +
.../superset-core/src/theme/GlobalStyles.tsx | 15 +
.../src/operators/boxplotOperator.ts | 2 +-
.../packages/superset-ui-core/package.json | 1 +
.../src/components/ListViewCard/index.tsx | 3 +-
.../src/connection/SupersetClientClass.ts | 3 +-
.../superset-ui-core/src/utils/html.test.tsx | 29 +
.../packages/superset-ui-core/src/utils/html.tsx | 46 +-
.../superset-ui-core/test/utils/tooltip.test.ts | 21 +-
.../legacy-plugin-chart-calendar/src/utils.ts | 4 +-
.../src/vendor/cal-heatmap.ts | 27 +-
.../test/utils.test.ts | 125 ++--
.../legacy-plugin-chart-partition/src/Partition.ts | 3 +-
.../plugins/legacy-plugin-chart-rose/src/Rose.ts | 13 +-
.../legacy-plugin-chart-world-map/src/WorldMap.ts | 5 +-
.../test/WorldMap.test.ts | 57 +-
.../plugins/legacy-preset-chart-nvd3/src/utils.ts | 55 +-
.../legacy-preset-chart-nvd3/test/utils.test.ts | 174 ++++++
.../src/AgGridTableChart.tsx | 4 +
.../plugin-chart-ag-grid-table/src/consts.ts | 2 +
.../src/controlPanel.tsx | 18 +-
.../src/stateConversion.ts | 30 +-
.../src/styles/index.tsx | 6 +
.../src/transformProps.ts | 2 +
.../plugin-chart-ag-grid-table/src/types.ts | 2 +
.../src/utils/useColDefs.ts | 69 ++-
.../test/controlPanel.test.tsx | 71 +++
.../test/stateConversion.test.ts | 73 +++
.../test/utils/useColDefs.test.ts | 240 ++++++++
.../BigNumberWithTrendline/transformProps.test.ts | 4 +-
.../src/Histogram/buildQuery.ts | 15 +-
.../plugin-chart-echarts/src/components/Echart.tsx | 7 +-
.../test/Histogram/buildQuery.test.ts | 81 +++
.../src/plugin/controls/columns.tsx | 8 +-
.../src/plugin/controls/metrics.tsx | 8 +-
.../plugin-chart-table/src/controlPanel.tsx | 6 +-
.../plugin-chart-table/test/controlPanel.test.tsx | 71 +++
.../src/SqlLab/components/EditorAutoSync/index.tsx | 2 +-
.../src/SqlLab/components/EditorWrapper/index.tsx | 2 +-
.../SqlLab/components/EditorWrapper/useKeywords.ts | 2 +-
.../components/ExploreCtasResultsButton/index.tsx | 2 +-
.../src/SqlLab/components/PopEditorTab/index.tsx | 2 +-
.../SqlLab/components/QueryAutoRefresh/index.tsx | 2 +-
.../SqlLab/components/QueryLimitSelect/index.tsx | 2 +-
.../src/SqlLab/components/QueryTable/index.tsx | 2 +-
.../src/SqlLab/components/ResultSet/index.tsx | 5 +-
.../SqlLab/components/SaveDatasetModal/index.tsx | 9 +-
.../src/SqlLab/components/SouthPane/index.tsx | 2 +-
.../src/SqlLab/components/SqlEditor/index.tsx | 2 +-
.../SqlLab/components/SqlEditorLeftBar/index.tsx | 2 +-
.../SqlLab/components/SqlEditorTabHeader/index.tsx | 2 +-
.../SqlEditorTopBar/useDatabaseSelector.ts | 2 +-
.../src/SqlLab/components/TableElement/index.tsx | 2 +-
.../SqlLab/components/TableExploreTree/index.tsx | 2 +-
.../components/TableExploreTree/useTreeData.ts | 2 +-
.../src/SqlLab/components/TablePreview/index.tsx | 2 +-
.../index.tsx => SqlLab/hooks/useAppDispatch.ts} | 23 +-
.../types.ts => SqlLab/hooks/useAppSelector.ts} | 10 +-
.../DatasourceEditor/DatasourceEditor.tsx | 3 +-
.../src/components/GenericLink/index.tsx | 4 +-
.../dashboard/components/Header/Header.test.tsx | 15 +
.../src/dashboard/components/Header/index.tsx | 3 +-
.../dashboard/components/PropertiesModal/index.tsx | 20 +-
.../PropertiesModal/sections/AccessSection.tsx | 6 +-
.../components/PropertiesModal/utils.test.ts | 90 +++
.../dashboard/components/PropertiesModal/utils.ts | 81 +++
.../dashboard/containers/DashboardPage.test.tsx | 35 ++
.../src/dashboard/containers/DashboardPage.tsx | 2 +
superset-frontend/src/embedded/index.tsx | 30 +-
.../src/embedded/originValidation.test.ts | 112 ++++
superset-frontend/src/embedded/originValidation.ts | 91 +++
.../ExploreChartHeader/ExploreChartHeader.test.tsx | 53 +-
.../controls/CollectionControl/index.tsx | 4 +-
.../controls/ControlPopover/ControlPopover.tsx | 1 +
.../DatabaseConnectionForm.test.tsx | 85 +++
.../DatabaseConnectionForm/EncryptedField.test.tsx | 148 ++++-
.../DatabaseConnectionForm/EncryptedField.tsx | 68 ++-
.../OAuth2ClientField.test.tsx | 82 +++
.../DatabaseConnectionForm/OAuth2ClientField.tsx | 78 ++-
.../DatabaseConnectionForm/TableCatalog.test.tsx | 87 +++
.../DatabaseConnectionForm/TableCatalog.tsx | 18 +-
.../DatabaseModal/DatabaseConnectionForm/index.tsx | 112 +++-
.../databases/DatabaseModal/SqlAlchemyForm.tsx | 5 +-
.../databases/DatabaseModal/index.test.tsx | 116 ++++
.../src/features/databases/DatabaseModal/index.tsx | 54 +-
.../src/features/databases/DatabaseModal/styles.ts | 11 +-
superset-frontend/src/features/databases/types.ts | 4 +
superset-frontend/src/middleware/asyncEvent.ts | 7 +-
.../pages/ChartList/ChartList.listview.test.tsx | 5 +-
superset-frontend/src/pages/ChartList/index.tsx | 4 +-
superset-frontend/src/pages/UsersList/index.tsx | 4 +-
superset-frontend/src/types/bootstrapTypes.ts | 3 +
superset-frontend/src/utils/getOwnerName.test.ts | 12 +
superset-frontend/src/utils/getOwnerName.ts | 5 +-
superset-frontend/src/utils/navigationUtils.ts | 11 +-
superset-websocket/spec/index.test.ts | 54 ++
superset-websocket/src/index.ts | 19 +-
superset/charts/api.py | 11 +-
superset/charts/data/api.py | 7 +
superset/commands/chart/create.py | 5 +
superset/commands/chart/fave.py | 8 +-
superset/commands/chart/unfave.py | 8 +-
superset/commands/chart/update.py | 21 +-
superset/commands/chart/warm_up_cache.py | 19 +-
superset/commands/dashboard/delete.py | 5 +-
superset/commands/dataset/create.py | 8 +
superset/commands/dataset/duplicate.py | 8 +-
superset/commands/dataset/importers/v0.py | 18 +-
superset/commands/dataset/update.py | 51 +-
superset/commands/dataset/warm_up_cache.py | 12 +-
superset/commands/logs/prune.py | 5 +-
superset/commands/report/base.py | 46 +-
superset/commands/report/execute.py | 83 ++-
superset/commands/tag/create.py | 35 ++
superset/commands/tag/delete.py | 40 +-
superset/commands/tag/utils.py | 17 +-
superset/config.py | 9 +-
superset/connectors/sqla/models.py | 75 ++-
superset/daos/base.py | 37 +-
superset/daos/dashboard.py | 2 +-
superset/daos/key_value.py | 32 +
superset/dashboards/api.py | 26 +-
superset/databases/api.py | 2 +
superset/databases/schemas.py | 18 +-
superset/datasets/api.py | 2 +
superset/db_engine_specs/base.py | 6 +-
superset/db_engine_specs/presto.py | 6 +
superset/db_engine_specs/ydb.py | 2 +-
superset/embedded/view.py | 4 +
superset/extensions/metadb.py | 11 +-
superset/jinja_context.py | 28 +-
.../key_value/commands}/__init__.py | 0
superset/key_value/commands/prune.py | 143 +++++
superset/mcp_service/auth.py | 87 ++-
superset/mcp_service/bin/superset-mcp.js | 4 +-
superset/mcp_service/chart/chart_helpers.py | 153 +++++
superset/mcp_service/chart/tool/get_chart_data.py | 25 +-
superset/mcp_service/chart/validation/pipeline.py | 6 +-
superset/mcp_service/jwt_verifier.py | 61 +-
superset/mcp_service/middleware.py | 3 +-
.../mcp_service/screenshot/webdriver_config.py | 16 +-
superset/mcp_service/storage.py | 4 +-
superset/mcp_service/utils/error_sanitization.py | 44 +-
superset/mcp_service/utils/permissions_utils.py | 19 +-
superset/models/dashboard.py | 13 +-
superset/models/helpers.py | 56 +-
superset/models/slice.py | 8 +-
superset/models/sql_lab.py | 10 +-
superset/reports/notifications/email.py | 8 +-
superset/security/api.py | 17 +-
superset/security/guest_token.py | 15 +-
superset/security/manager.py | 155 ++++-
superset/sql/execution/celery_task.py | 6 +-
superset/sql/parse.py | 45 +-
superset/sql_lab.py | 6 +-
superset/sqllab/api.py | 8 +
superset/sqllab/schemas.py | 14 +-
superset/sqllab/validators.py | 6 +-
superset/tasks/scheduler.py | 16 +
.../templates/superset}/loading.svg | Bin
superset/utils/core.py | 3 +
superset/utils/csv.py | 7 +-
superset/utils/excel.py | 24 +
superset/utils/link_redirect.py | 14 +-
superset/views/api.py | 21 +-
superset/views/base.py | 45 +-
superset/views/base_api.py | 14 +-
superset/views/datasource/utils.py | 17 +-
superset/views/datasource/views.py | 24 +
superset/views/sql_lab/schemas.py | 7 +-
superset/views/sql_lab/views.py | 53 +-
superset/views/users/api.py | 4 +
superset/views/utils.py | 4 +-
tests/integration_tests/celery_tests.py | 138 +----
tests/integration_tests/charts/api_tests.py | 46 ++
tests/integration_tests/charts/commands_tests.py | 23 +-
tests/integration_tests/dao/base_dao_test.py | 69 +++
tests/integration_tests/dashboards/api_tests.py | 26 +
tests/integration_tests/datasets/commands_tests.py | 20 +-
tests/integration_tests/embedded/test_view.py | 33 ++
.../commands/execute_dashboard_report_tests.py | 4 +-
tests/integration_tests/security_tests.py | 250 ++++++++
tests/integration_tests/sqllab_tests.py | 34 +-
tests/integration_tests/tags/commands_tests.py | 4 +
tests/unit_tests/charts/test_chart_data_api.py | 31 +
.../commands/chart/test_access_checks.py | 147 +++++
.../commands/chart/warm_up_cache_test.py | 6 +
tests/unit_tests/commands/dataset/test_create.py | 9 +-
.../unit_tests/commands/dataset/test_duplicate.py | 103 ++++
.../commands/dataset/test_warm_up_cache.py | 115 ++++
tests/unit_tests/commands/dataset/update_test.py | 160 +++++
.../unit_tests/commands/logs}/__init__.py | 0
tests/unit_tests/commands/logs/prune_test.py | 54 ++
tests/unit_tests/commands/report/execute_test.py | 128 +++-
.../commands/report/test_create_recipients.py | 14 +-
.../common/test_query_context_processor.py | 95 +++
tests/unit_tests/connectors/sqla/models_test.py | 125 +++-
.../databases/commands/importers/v1/import_test.py | 150 +++++
tests/unit_tests/databases/schema_tests.py | 15 +
tests/unit_tests/db_engine_specs/test_base.py | 56 ++
tests/unit_tests/db_engine_specs/test_presto.py | 24 +
tests/unit_tests/jinja_context_test.py | 19 +
tests/unit_tests/key_value/prune_test.py | 168 ++++++
.../mcp_service/chart/test_chart_helpers.py | 651 +++++++++++++++++++++
tests/unit_tests/mcp_service/test_auth_api_key.py | 6 +-
.../mcp_service/test_auth_user_resolution.py | 70 ++-
tests/unit_tests/mcp_service/test_jwt_verifier.py | 66 ++-
tests/unit_tests/mcp_service/test_middleware.py | 6 +-
.../mcp_service/utils/test_error_sanitization.py | 70 +++
.../mcp_service/utils/test_permissions_utils.py | 37 +-
tests/unit_tests/models/dashboard_test.py | 52 ++
tests/unit_tests/models/helpers_test.py | 144 +++++
tests/unit_tests/models/slice_test.py | 25 +-
.../reports/notifications/email_tests.py | 35 ++
.../security/test_guest_token_dataset_allowlist.py | 273 +++++++++
.../common => tests/unit_tests/server}/__init__.py | 0
.../server/test_gunicorn_gevent_smoke.py | 162 +++++
tests/unit_tests/sql/execution/test_celery_task.py | 60 ++
tests/unit_tests/sql/parse_tests.py | 68 ++-
tests/unit_tests/sql_lab_execution_context.py | 3 +-
.../common => tests/unit_tests/sqllab}/__init__.py | 0
tests/unit_tests/sqllab/api_test.py | 64 ++
tests/unit_tests/test_sqllab_error_stacktrace.py | 282 +++++++++
tests/unit_tests/utils/csv_tests.py | 40 ++
tests/unit_tests/utils/excel_tests.py | 37 +-
tests/unit_tests/utils/test_core.py | 41 ++
tests/unit_tests/utils/test_link_redirect.py | 29 +
tests/unit_tests/views/test_base.py | 34 ++
tests/unit_tests/views/test_base_theme_helpers.py | 56 +-
251 files changed, 8556 insertions(+), 953 deletions(-)
create mode 100644 superset-frontend/plugins/plugin-chart-ag-grid-table/test/stateConversion.test.ts
create mode 100644 superset-frontend/plugins/plugin-chart-echarts/test/Histogram/buildQuery.test.ts
copy superset-frontend/src/{components/TimePicker/index.tsx => SqlLab/hooks/useAppDispatch.ts} (61%)
copy superset-frontend/src/{components/FacePile/types.ts => SqlLab/hooks/useAppSelector.ts} (73%)
create mode 100644 superset-frontend/src/dashboard/components/PropertiesModal/utils.test.ts
create mode 100644 superset-frontend/src/dashboard/components/PropertiesModal/utils.ts
create mode 100644 superset-frontend/src/embedded/originValidation.test.ts
create mode 100644 superset-frontend/src/embedded/originValidation.ts
create mode 100644 superset-frontend/src/features/databases/DatabaseModal/DatabaseConnectionForm/DatabaseConnectionForm.test.tsx
create mode 100644 superset-frontend/src/features/databases/DatabaseModal/DatabaseConnectionForm/TableCatalog.test.tsx
copy {superset-core/src/superset_core/common => superset/key_value/commands}/__init__.py (100%)
create mode 100644 superset/key_value/commands/prune.py
copy {superset-frontend/packages/superset-ui-core/src/components/assets/images => superset/templates/superset}/loading.svg (100%)
create mode 100644 tests/unit_tests/commands/chart/test_access_checks.py
create mode 100644 tests/unit_tests/commands/dataset/test_duplicate.py
create mode 100644 tests/unit_tests/commands/dataset/test_warm_up_cache.py
copy {superset-core/src/superset_core/common => tests/unit_tests/commands/logs}/__init__.py (100%)
create mode 100644 tests/unit_tests/commands/logs/prune_test.py
create mode 100644 tests/unit_tests/key_value/prune_test.py
create mode 100644 tests/unit_tests/mcp_service/utils/test_error_sanitization.py
create mode 100644 tests/unit_tests/models/dashboard_test.py
create mode 100644 tests/unit_tests/security/test_guest_token_dataset_allowlist.py
copy {superset-core/src/superset_core/common => tests/unit_tests/server}/__init__.py (100%)
create mode 100644 tests/unit_tests/server/test_gunicorn_gevent_smoke.py
copy {superset-core/src/superset_core/common => tests/unit_tests/sqllab}/__init__.py (100%)
create mode 100644 tests/unit_tests/sqllab/api_test.py
create mode 100644 tests/unit_tests/test_sqllab_error_stacktrace.py