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/09/28 05:37:59 UTC

(superset) branch feat/bignumber-alignment-control updated (4fa5364e614 -> bfb49129344)

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

rusackas pushed a change to branch feat/bignumber-alignment-control
in repository https://gitbox.apache.org/repos/asf/superset.git


    from 4fa5364e614 refactor(bignumber): dedupe alignment test render calls
     add 25cb6fc02d2 chore(deps): bump the ag-grid group in /superset-frontend with 2 updates (#44595)
     add 732248e4755 fix(logging): record dashboard_id and slice_id for REST mutation endpoints (#44553)
     add 9ad6917600d chore(cypress): remove dead dashboard drill-to-detail Cypress suite (#44537)
     add f5d663c480d fix(versioning): narrow nullable uuid/description reads flagged by mypy in versioning tests (#44424)
     add e357014559b fix(dashboard): initialize label colors before mounting charts (#44557)
     add e04d38a85f2 fix(mypy): resolve the dataset-scope and datasource-perm errors from the full-repo lint (#44610)
     add 1c7d1f049bc fix(utils): return None from cast_to_num for non-decimal digit strings (#44615)
     add defcd639107 fix(mongodb): route dataset FROM clauses through quote_table so chart queries return rows (#44583)
     add f5487f04a36 fix(db_engine_specs): raise SupersetGenericDBErrorException instead of bare-reraising JSONDecodeError (#44616)
     add 855ca2228cb fix(query_context): raise 422 not 500 on malformed Jinja in Query datasource access check (#44011)
     add 7b716b1838c fix(versioning): clean up history actions and refresh after saves (#44613)
     add 96d31ee3e35 docs(mcp): document deleted_state trash listing for list_charts/list_dashboards (#44128)
     add 599026a0e5a feat(standalone): granular Explore standalone modes and iframe-safe dashboard fullscreen (#44165)
     add 3bd6e103c14 fix(security): apply global guest RLS rules inside adhoc sub-queries (#44645)
     add 1e08d61204f fix(mcp): preserve deduplicated chart tool input schemas (#44575)
     add 02cb1f1a28a fix(table): resolve auto-detected currency on time comparison columns (#44649)
     add 83731ce7b3a test(reports): freeze the clock in the stale retry boundary test (#44651)
     add a9342fa02ab chore(deps-dev): bump oxlint-tsgolint from 7.0.2001 to 7.0.2002 in /superset-websocket (#44634)
     add d65e9fba9c4 chore(deps-dev): bump oxlint-tsgolint from 7.0.2001 to 7.0.2002 in /docs (#44635)
     add d1f903c66ff chore(deps): bump github/codeql-action/analyze from 4.38.0 to 4.38.1 (#44636)
     add a44ab4d9281 chore(deps-dev): bump baseline-browser-mapping from 2.11.24 to 2.11.25 in /superset-frontend (#44641)
     add 5085570fb48 chore(deps): bump apache/infrastructure-actions/allowlist-check from 1.0.3 to 1.0.4 (#44637)
     add 5be35992c56 chore(deps): bump github/codeql-action/upload-sarif from 4.38.0 to 4.38.1 (#44640)
     add 0034601c062 chore(deps): bump github/codeql-action/init from 4.38.0 to 4.38.1 (#44639)
     add 5e8bbc0eb4a chore(deps): bump baseline-browser-mapping from 2.11.24 to 2.11.25 in /docs (#44638)
     add 241d1210152 chore(deps): bump image-size from 2.0.2 to 2.0.4 in /docs in the security group across 1 directory (#44619)
     add be0631858c9 chore(deps): bump mapbox-gl from 3.30.0 to 3.31.0 in /superset-frontend (#44643)
     add 4bce27f12f4 fix(dashboard): shrink row height on chart resize and unblock resize handles above columns (#44359)
     add 5aec4342bb5 fix(database): catch JSONDecodeError in get_oauth2_config (#44658)
     add 10ca640e97e fix(import): downgrade expected validation-failure logs from error to warning (#44655)
     add 181422fc604 fix(mcp): return safe argument validation details (#44591)
     add 05017968378 chore(ci): collapse Playwright experimental workflow into E2E playwright-tests (#44659)
     add a33154a4c49 chore(deps-dev): bump hdbcli from 2.29.27 to 2.30.27 (#44687)
     add 60a0b45b06f chore(deps-dev): bump mysqlclient from 2.2.8 to 2.3.0 (#44689)
     add 1aaa1e6ad1a chore(deps): bump greenlet from 3.5.5 to 3.5.6 (#44691)
     add 1a65f0ec9be chore(deps-dev): bump google-cloud-bigquery from 3.45.0 to 3.45.2 (#44692)
     add b4db7baaff5 chore(deps-dev): bump python-ldap from 3.4.7 to 3.4.8 (#44690)
     add 6e2e7c6c84f chore(deps-dev): update playwright requirement from <2,>=1.62.0 to >=1.63.0,<2 (#44688)
     add 5b9733fd60f fix(versioning): resolve nightly pre-commit (next) failures — mypy UUID-annotation regression and oxfmt version-drift formatting (#44648)
     add eb2ffa28ccf chore(docker): quiet scanner self-match noise, keep OS packages current (#44124)
     add 2e13cfa3e48 fix(charts): stream large CSV exports without executing the query first (#44624)
     add 25e63b54fd8 feat(mcp): add create_dataset_metric and delete_dataset_metric tools (#44580)
     add c54a3315e86 feat(plugin-chart-echarts): add Candlestick Chart (#43863)
     add 891c2ede0b6 feat(dashboard): download the Excel export directly when no export storage is configured (#44082)
     add 35e58506061 fix(charts): guard Slice.form_data against non-dict params JSON (#44731)
     add 8a3b86dccd3 fix: guard the isdigit()-then-int() pattern against non-decimal digits (#44620)
     add bfb49129344 Merge master into feat/bignumber-alignment-control

No new revisions were added by this update.

Summary of changes:
 .github/workflows/asf-allowlist-check.yml          |    2 +-
 .github/workflows/bashlib.sh                       |    6 +-
 .github/workflows/codeql-analysis.yml              |    4 +-
 .github/workflows/docker.yml                       |    2 +-
 .github/workflows/superset-e2e.yml                 |   22 +-
 .github/workflows/superset-playwright.yml          |  222 ----
 .grype.yaml                                        |   39 +
 UPDATING.md                                        |   81 +-
 docker/apt-install.sh                              |    8 +
 docs/admin_docs/configuration/mcp-server.mdx       |   25 +-
 docs/developer_docs/contributing/howtos.md         |    2 +-
 docs/developer_docs/extensions/mcp.md              |   17 +
 .../using-superset/exporting-dashboard-data.mdx    |  110 +-
 .../docs/using-superset/using-ai-with-superset.mdx |   19 +
 docs/docs/using-superset/version-history.mdx       |    7 +
 docs/package.json                                  |    4 +-
 docs/static/resources/openapi.json                 |   16 +-
 docs/yarn.lock                                     |   92 +-
 pyproject.toml                                     |   23 +-
 requirements/base.txt                              |    2 +-
 requirements/development.txt                       |    8 +-
 scripts/change_detector.py                         |    1 +
 .../cypress/e2e/dashboard/drilltodetail.test.ts    |  614 ----------
 .../e2e/dashboard/shared_dashboard_functions.ts    |  201 ----
 .../cypress-base/cypress/e2e/dashboard/utils.ts    |  559 ---------
 .../cypress-base/cypress/e2e/explore/chart.test.js |    2 +-
 .../cypress-base/cypress/e2e/explore/utils.ts      |    4 +-
 .../cypress-base/cypress/support/directories.ts    |  678 -----------
 .../cypress-base/cypress/utils/urls.ts             |    2 -
 superset-frontend/package-lock.json                |   56 +-
 superset-frontend/package.json                     |    8 +-
 .../packages/superset-ui-core/package.json         |    4 +-
 .../superset-ui-core/src/chart/types/VizType.ts    |    1 +
 .../superset-ui-core/src/currency-format/utils.ts  |   22 +
 .../src/query/extractQueryFields.ts                |    4 +
 .../test/currency-format/utils.test.ts             |   33 +
 .../test/query/extractQueryFields.test.ts          |   12 +
 superset-frontend/playwright.config.ts             |    9 -
 .../tests/chart/handlebars-format-date.spec.ts     |    2 +-
 .../dashboard/dashboard-drill-to-detail.spec.ts    |    3 -
 .../tests/dashboard/gauge-interval-colors.spec.ts  |    2 +-
 .../mixed-chart-dashboard-filters.spec.ts          |    2 +-
 .../tests/embedded/pivot-collapse-state.spec.ts    |    2 +-
 .../playwright/tests/experimental/README.md        |  123 --
 .../explore/results-tab-reuse.spec.ts              |   16 +-
 .../src/transformProps.ts                          |   44 +-
 .../test/transformProps.test.ts                    |   45 +
 .../src/Candlestick/EchartsCandlestick.tsx         |  174 +++
 .../src/{Bubble => Candlestick}/buildQuery.ts      |   19 +-
 .../src/Candlestick/constants.ts                   |   61 +
 .../src/Candlestick/controlPanel.tsx               |  417 +++++++
 .../src/Candlestick/images/example1-dark.png       |  Bin 0 -> 55933 bytes
 .../src/Candlestick/images/example1.png            |  Bin 0 -> 56139 bytes
 .../src/Candlestick/images/thumbnail-dark.png      |  Bin 0 -> 31389 bytes
 .../src/Candlestick/images/thumbnail.png           |  Bin 0 -> 31318 bytes
 .../src/{Tree => Candlestick}/index.ts             |   32 +-
 .../src/Candlestick/transformProps.ts              |  770 ++++++++++++
 .../plugin-chart-echarts/src/Candlestick/types.ts  |   84 ++
 .../plugin-chart-echarts/src/Candlestick/utils.ts  |   91 ++
 .../src/components/Echart.test.tsx                 |    4 +-
 .../plugin-chart-echarts/src/components/Echart.tsx |    7 +-
 .../plugins/plugin-chart-echarts/src/index.ts      |    2 +
 .../test/Candlestick/EchartsCandlestick.test.tsx   |  325 +++++
 .../test/Candlestick}/buildQuery.test.ts           |   48 +-
 .../test/Candlestick/controlPanel.test.ts          |  257 ++++
 .../test/Candlestick/transformProps.test.ts        | 1271 ++++++++++++++++++++
 .../test/Candlestick/utils.test.ts                 |   53 +
 .../plugin-chart-point-cluster-map/package.json    |    2 +-
 .../plugin-chart-table/src/transformProps.ts       |   44 +-
 .../plugin-chart-table/test/TableChart.test.tsx    |   32 +
 .../useDrillDetailMenuItems.test.tsx               |   26 +
 .../actions/chartCustomizationActions.test.ts      |   20 +-
 .../dashboard/actions/chartCustomizationActions.ts |    4 +-
 .../src/dashboard/actions/dashboardInfo.ts         |    6 +
 .../DashboardBuilder/DashboardContainer.test.tsx   |  145 ++-
 .../DashboardBuilder/DashboardContainer.tsx        |   12 +-
 .../dashboard/components/Header/Header.test.tsx    |   76 +-
 .../Header/useHeaderActionsDropdownMenu.tsx        |   10 +-
 .../PropertiesModal/PropertiesModal.test.tsx       |    6 +
 .../dashboard/components/PropertiesModal/index.tsx |    6 +-
 .../components/gridComponents/Row/Row.test.tsx     |   43 +-
 .../components/gridComponents/Row/Row.tsx          |  124 +-
 .../DownloadMenuItems/DownloadMenuItems.test.tsx   |  320 ++++-
 .../components/menu/DownloadMenuItems/index.tsx    |  126 +-
 .../src/dashboard/components/menu/HoverMenu.tsx    |    4 +-
 .../components/resizable/ResizableContainer.tsx    |    3 +-
 superset-frontend/src/dashboard/constants.ts       |    6 +
 .../src/dashboard/reducers/dashboardInfo.ts        |   10 +
 .../src/dashboard/reducers/dashboardState.ts       |    2 +
 .../ExploreChartPanel/ExploreChartPanel.test.tsx   |   11 +-
 .../explore/components/ExploreChartPanel/index.tsx |    5 +-
 .../ExploreViewContainer.test.tsx                  |   77 +-
 .../components/ExploreViewContainer/index.tsx      |   28 +-
 .../explore/components/PropertiesModal/index.tsx   |    4 +
 superset-frontend/src/explore/constants.ts         |    6 +
 .../controlUtils/standardizedFormData.test.ts      |   29 +
 .../explore/controlUtils/standardizedFormData.ts   |    4 +
 .../src/explore/exploreUtils/exploreUtils.test.tsx |   25 +
 .../src/explore/exploreUtils/index.ts              |    8 +-
 .../src/explore/reducers/exploreReducer.ts         |    2 +-
 .../src/explore/reducers/saveModalReducer.ts       |   15 +-
 superset-frontend/src/explore/types.ts             |    5 +-
 .../src/features/versionHistory/ActionRow.tsx      |  110 +-
 .../DashboardVersionHistory.test.tsx               |   89 +-
 .../versionHistory/DashboardVersionHistory.tsx     |   46 +-
 .../versionHistory/ExploreVersionHistory.test.tsx  |  344 +++++-
 .../versionHistory/ExploreVersionHistory.tsx       |   53 +-
 .../features/versionHistory/SaveGroupItem.test.tsx |   92 +-
 .../src/features/versionHistory/SaveGroupItem.tsx  |    5 -
 .../versionHistory/VersionHistoryPanel.test.tsx    |    3 +-
 .../versionHistory/VersionHistoryPanel.tsx         |   16 +-
 superset-frontend/src/setup/setupApp.ts            |   16 +-
 superset-frontend/src/utils/urlUtils.test.ts       |   23 +
 .../src/visualizations/presets/MainPreset.ts       |    4 +
 superset-websocket/package-lock.json               |   56 +-
 superset-websocket/package.json                    |    2 +-
 superset/charts/api.py                             |   11 +-
 superset/charts/data/api.py                        |   63 +-
 superset/commands/dataset/update.py                |   19 +-
 superset/commands/importers/v1/__init__.py         |    6 +-
 superset/commands/importers/v1/utils.py            |    6 +-
 superset/common/query_context_processor.py         |    7 +-
 superset/config.py                                 |   34 +-
 superset/connectors/sqla/models.py                 |   14 +-
 superset/daos/base.py                              |    2 +-
 superset/daos/dataset.py                           |   28 +-
 superset/daos/datasource.py                        |    2 +-
 superset/dashboards/api.py                         |  262 +++-
 superset/dashboards/excel_export/email.py          |   17 +-
 superset/dashboards/excel_export/storage.py        |   81 ++
 superset/dashboards/excel_export/sync_budget.py    |  272 +++++
 superset/dashboards/excel_export/workbook.py       |  324 +++++
 superset/db_engine_specs/base.py                   |   15 +-
 superset/db_engine_specs/mongodb.py                |    9 +
 superset/mcp_service/app.py                        |    7 +-
 superset/mcp_service/chart/chart_helpers.py        |    4 +-
 superset/mcp_service/chart/chart_utils.py          |    2 +-
 superset/mcp_service/chart/schemas.py              |    8 +-
 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          |    8 +-
 .../mcp_service/dashboard/tool/delete_dashboard.py |    2 +-
 superset/mcp_service/dataset/schemas.py            |   81 +-
 superset/mcp_service/dataset/tool/__init__.py      |    4 +
 .../dataset/tool/create_dataset_metric.py          |  172 +++
 .../dataset/tool/delete_dataset_metric.py          |  246 ++++
 superset/mcp_service/dataset_scope.py              |    6 +-
 .../explore/tool/generate_explore_link.py          |    2 +-
 superset/mcp_service/mcp_config.py                 |   23 +-
 superset/mcp_service/middleware.py                 |   24 +-
 superset/mcp_service/server.py                     |  131 +-
 superset/mcp_service/utils/response_size_utils.py  |    2 +
 superset/mcp_service/utils/validation.py           |  218 ++++
 superset/models/core.py                            |    7 +-
 superset/models/helpers.py                         |    2 +
 superset/models/slice.py                           |    7 +-
 superset/sql/parse.py                              |   14 +-
 superset/tasks/export_dashboard_excel.py           |  384 +-----
 superset/translations/ar/LC_MESSAGES/messages.po   |  118 +-
 superset/translations/ca/LC_MESSAGES/messages.po   |  122 +-
 superset/translations/cs/LC_MESSAGES/messages.po   |  119 +-
 superset/translations/de/LC_MESSAGES/messages.po   |  123 +-
 superset/translations/en/LC_MESSAGES/messages.po   |  108 +-
 superset/translations/es/LC_MESSAGES/messages.po   |  120 +-
 superset/translations/fa/LC_MESSAGES/messages.po   |  120 +-
 superset/translations/fi/LC_MESSAGES/messages.po   |  120 +-
 superset/translations/fr/LC_MESSAGES/messages.po   |  127 +-
 superset/translations/it/LC_MESSAGES/messages.po   |  124 +-
 superset/translations/ja/LC_MESSAGES/messages.po   |  108 +-
 superset/translations/ko/LC_MESSAGES/messages.po   |  109 +-
 superset/translations/lv/LC_MESSAGES/messages.po   |  122 +-
 superset/translations/messages.pot                 |  145 ++-
 superset/translations/mi/LC_MESSAGES/messages.po   |  121 +-
 superset/translations/nl/LC_MESSAGES/messages.po   |  123 +-
 superset/translations/pl/LC_MESSAGES/messages.po   |  121 +-
 superset/translations/pt/LC_MESSAGES/messages.po   |  120 +-
 .../translations/pt_BR/LC_MESSAGES/messages.po     |  123 +-
 superset/translations/ro/LC_MESSAGES/messages.po   |  125 +-
 superset/translations/ru/LC_MESSAGES/messages.po   |  122 +-
 superset/translations/sk/LC_MESSAGES/messages.po   |  120 +-
 superset/translations/sl/LC_MESSAGES/messages.po   |  120 +-
 superset/translations/sr/LC_MESSAGES/messages.po   |  120 +-
 .../translations/sr_Latn/LC_MESSAGES/messages.po   |  121 +-
 superset/translations/ta/LC_MESSAGES/messages.po   |  124 +-
 superset/translations/th/LC_MESSAGES/messages.po   |  115 +-
 superset/translations/tr/LC_MESSAGES/messages.po   |  120 +-
 superset/translations/uk/LC_MESSAGES/messages.po   |  119 +-
 superset/translations/zh/LC_MESSAGES/messages.po   |  108 +-
 .../translations/zh_TW/LC_MESSAGES/messages.po     |  108 +-
 superset/utils/core.py                             |    2 +-
 superset/utils/date_parser.py                      |    2 +-
 superset/utils/log.py                              |  101 +-
 superset/utils/rls.py                              |   28 +-
 superset/utils/screenshots.py                      |    9 +-
 superset/utils/webdriver.py                        |    8 +-
 superset/views/base.py                             |    4 +
 tests/integration_tests/base_tests.py              |   14 +-
 tests/integration_tests/charts/api_tests.py        |   11 +
 tests/integration_tests/dashboards/api_tests.py    |  599 ++++++++-
 .../dashboards/soft_delete_tests.py                |    7 +
 .../versioning/activity_write_after_read_tests.py  |    4 +-
 .../versioning/conditional_token_lock_tests.py     |   22 +-
 .../versioning/creation_row_tests.py               |   34 +-
 .../versioning/restore_fails_closed_tests.py       |   27 +-
 .../charts/semantic_view_chart_filter_test.py      |    9 +-
 tests/unit_tests/charts/test_chart_data_api.py     |  197 +++
 .../commands/importers/v1/import_models_test.py    |   93 ++
 .../unit_tests/commands/importers/v1/utils_test.py |  100 +-
 .../commands/report/execution_claim_test.py        |    5 +-
 .../common/test_query_context_processor.py         |   28 +
 tests/unit_tests/connectors/sqla/models_test.py    |   68 ++
 tests/unit_tests/dao/base_dao_test.py              |   29 +-
 .../dashboards/test_excel_export_email.py          |   19 +
 .../dashboards/test_excel_export_storage.py        |  178 +++
 .../dashboards/test_excel_export_sync_budget.py    |  563 +++++++++
 .../dashboards/test_excel_export_workbook.py       |  146 +++
 tests/unit_tests/datasource/dao_tests.py           |   16 +
 tests/unit_tests/db_engine_specs/test_base.py      |   33 +-
 tests/unit_tests/db_engine_specs/test_mongodb.py   |   36 +
 .../mcp_service/chart/tool/test_generate_chart.py  |   57 +
 .../chart/tool/test_update_chart_preview.py        |   31 +
 .../dataset/tool/test_dataset_metric_mutations.py  |  529 ++++++++
 .../mcp_service/dataset/tool/test_dataset_tools.py |    4 +-
 .../explore/tool/test_generate_explore_link.py     |   25 +
 .../mcp_service/test_chart_tool_inventory.py       |  189 +++
 .../mcp_service/test_error_classification.py       |   11 +-
 .../test_isdigit_isdecimal_regression.py           |  149 +++
 .../mcp_service/test_mcp_tool_registration.py      |    5 +
 tests/unit_tests/mcp_service/test_middleware.py    |    4 +-
 .../mcp_service/test_rbac_tool_enforcement.py      |   12 +
 .../unit_tests/mcp_service/test_tool_inventory.py  |  159 +++
 .../mcp_service/test_tool_search_transform.py      |  347 +-----
 .../mcp_service/test_validation_contract.py        |  511 ++++++++
 tests/unit_tests/models/core_test.py               |   21 +-
 tests/unit_tests/models/slice_test.py              |   28 +
 .../models/test_virtual_dataset_format.py          |   28 +
 tests/unit_tests/scripts/change_detector_test.py   |   10 +
 tests/unit_tests/security/guest_rls_test.py        |  153 ++-
 tests/unit_tests/sql/parse_tests.py                |   18 +
 tests/unit_tests/sql_lab_test.py                   |    4 +-
 .../tasks/test_export_dashboard_excel.py           |   86 +-
 tests/unit_tests/utils/log_tests.py                |  150 ++-
 tests/unit_tests/utils/screenshot_test.py          |   57 +
 tests/unit_tests/utils/test_core.py                |   19 +
 tests/unit_tests/views/test_bootstrap_auth.py      |   20 +
 247 files changed, 15641 insertions(+), 4516 deletions(-)
 delete mode 100644 .github/workflows/superset-playwright.yml
 create mode 100644 .grype.yaml
 delete mode 100644 superset-frontend/cypress-base/cypress/e2e/dashboard/drilltodetail.test.ts
 delete mode 100644 superset-frontend/cypress-base/cypress/e2e/dashboard/shared_dashboard_functions.ts
 delete mode 100644 superset-frontend/cypress-base/cypress/e2e/dashboard/utils.ts
 delete mode 100644 superset-frontend/cypress-base/cypress/support/directories.ts
 delete mode 100644 superset-frontend/playwright/tests/experimental/README.md
 rename superset-frontend/playwright/tests/{experimental => }/explore/results-tab-reuse.spec.ts (87%)
 create mode 100644 superset-frontend/plugins/plugin-chart-echarts/src/Candlestick/EchartsCandlestick.tsx
 copy superset-frontend/plugins/plugin-chart-echarts/src/{Bubble => Candlestick}/buildQuery.ts (71%)
 create mode 100644 superset-frontend/plugins/plugin-chart-echarts/src/Candlestick/constants.ts
 create mode 100644 superset-frontend/plugins/plugin-chart-echarts/src/Candlestick/controlPanel.tsx
 create mode 100644 superset-frontend/plugins/plugin-chart-echarts/src/Candlestick/images/example1-dark.png
 create mode 100644 superset-frontend/plugins/plugin-chart-echarts/src/Candlestick/images/example1.png
 create mode 100644 superset-frontend/plugins/plugin-chart-echarts/src/Candlestick/images/thumbnail-dark.png
 create mode 100644 superset-frontend/plugins/plugin-chart-echarts/src/Candlestick/images/thumbnail.png
 copy superset-frontend/plugins/plugin-chart-echarts/src/{Tree => Candlestick}/index.ts (66%)
 create mode 100644 superset-frontend/plugins/plugin-chart-echarts/src/Candlestick/transformProps.ts
 create mode 100644 superset-frontend/plugins/plugin-chart-echarts/src/Candlestick/types.ts
 create mode 100644 superset-frontend/plugins/plugin-chart-echarts/src/Candlestick/utils.ts
 create mode 100644 superset-frontend/plugins/plugin-chart-echarts/test/Candlestick/EchartsCandlestick.test.tsx
 copy superset-frontend/plugins/{plugin-chart-calendar/test => plugin-chart-echarts/test/Candlestick}/buildQuery.test.ts (51%)
 create mode 100644 superset-frontend/plugins/plugin-chart-echarts/test/Candlestick/controlPanel.test.ts
 create mode 100644 superset-frontend/plugins/plugin-chart-echarts/test/Candlestick/transformProps.test.ts
 create mode 100644 superset-frontend/plugins/plugin-chart-echarts/test/Candlestick/utils.test.ts
 create mode 100644 superset/dashboards/excel_export/storage.py
 create mode 100644 superset/dashboards/excel_export/sync_budget.py
 create mode 100644 superset/dashboards/excel_export/workbook.py
 create mode 100644 superset/mcp_service/dataset/tool/create_dataset_metric.py
 create mode 100644 superset/mcp_service/dataset/tool/delete_dataset_metric.py
 create mode 100644 superset/mcp_service/utils/validation.py
 create mode 100644 tests/unit_tests/commands/importers/v1/import_models_test.py
 create mode 100644 tests/unit_tests/dashboards/test_excel_export_storage.py
 create mode 100644 tests/unit_tests/dashboards/test_excel_export_sync_budget.py
 create mode 100644 tests/unit_tests/dashboards/test_excel_export_workbook.py
 create mode 100644 tests/unit_tests/mcp_service/dataset/tool/test_dataset_metric_mutations.py
 create mode 100644 tests/unit_tests/mcp_service/test_chart_tool_inventory.py
 create mode 100644 tests/unit_tests/mcp_service/test_isdigit_isdecimal_regression.py
 create mode 100644 tests/unit_tests/mcp_service/test_tool_inventory.py
 create mode 100644 tests/unit_tests/mcp_service/test_validation_contract.py