You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@airflow.apache.org by ka...@apache.org on 2025/08/18 15:31:05 UTC

(airflow) 14/18: Switch pre-commit to prek (#54258) (#54585)

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

kaxilnaik pushed a commit to branch v3-0-test
in repository https://gitbox.apache.org/repos/asf/airflow.git

commit f7673ac259d635a3a55b0e3283f4e15b241135c4
Author: Jarek Potiuk <ja...@potiuk.com>
AuthorDate: Sun Aug 17 16:00:50 2025 +0200

    Switch pre-commit to prek (#54258) (#54585)
    
    The pre-commit is a fantastic tool, and we heavily used it for years,
    but generally the tool stagnated and is not showing a sign of adapting
    to our needs. For years we tried to convince pre-commit maintainers that
    things like autocomplete are necessary - but it met with pretty much
    resistance (if not hostility) from the maintainer. Also there was no
    chance for them to accept expectations of bigger projects like ours,
    where we have a huge monorepo and not only multiple needs but also
    different parts of the repo needing different language support (golang,
    typescript soon) - and apparenty the maintainer of pre-commit does not
    think monorepo is a good thing at all. Similarly - they did not recognize
    the raise of `uv` and the only way to use `uv` with pre-commit is to patch
    it by installing `pre-comit-uv` that essentialy patches pre-commit with
    uv support. This is not really sustainable and the tool lags behind many
    of our needs.
    
    Luckily - we have new project in town - prek - which rewrites pre-commit
    that is 100% compatible (now), 10x faster (because rust), uses `uv`
    natively, supports auto-complete already and they have very friendly
    maintainer who is not only supporting us but also very happily works
    on improving `prek` to close all the gaps, and plans to implement (with
    our support of course and cooperation) monorepo support - that will
    allow us to modularise our pre-commits.
    
    This PR switches our pre-commit support to use prek exclusively:
    
    * breeze static checks command is completely removed
    * custom auto-complete code in breeze as well
    * instructions are updated to setup prek instead of precommit
    * CI is updated to run prek instead of pre-commmit
    * documentation for static checks is reviewed and new features that
      prek enables are added
---
 .github/.pre-commit-config.yaml                    |    2 +-
 .../action.yml                                     |   57 +-
 .github/boring-cyborg.yml                          |    4 +-
 .github/workflows/additional-ci-image-checks.yml   |    4 +-
 .github/workflows/basic-tests.yml                  |   74 +-
 .github/workflows/ci-amd.yml                       |   28 +-
 .github/workflows/ci-arm.yml                       |    6 +-
 .github/workflows/ci-image-checks.yml              |   46 +-
 .github/workflows/news-fragment.yml                |    2 +-
 .gitpod.yml                                        |    6 +-
 .pre-commit-config.yaml                            |  264 ++-
 .rat-excludes                                      |    8 +
 AGENTS.md                                          |   47 +
 Dockerfile                                         |   17 +-
 Dockerfile.ci                                      |   24 +-
 INSTALL                                            |   18 +-
 PROVIDERS.rst                                      |    4 +-
 README.md                                          |    2 +-
 RELEASE_NOTES.rst                                  |    2 +-
 airflow-core/docs/database-erd-ref.rst             |    2 +-
 airflow-core/docs/howto/custom-operator.rst        |    2 +-
 airflow-core/docs/howto/usage-cli.rst              |    2 +-
 .../docs/installation/supported-versions.rst       |    2 +-
 airflow-core/docs/migrations-ref.rst               |    2 +-
 airflow-core/hatch_build.py                        |    2 +-
 .../src/airflow/api_fastapi/gunicorn_config.py     |   10 +
 contributing-docs/02_how_to_communicate.rst        |    2 +-
 contributing-docs/03_contributors_quick_start.rst  |   49 +-
 contributing-docs/05_pull_requests.rst             |   14 +-
 contributing-docs/06_development_environments.rst  |    4 +-
 contributing-docs/07_local_virtualenv.rst          |    4 +-
 contributing-docs/08_static_code_checks.rst        |  587 ++----
 contributing-docs/12_provider_distributions.rst    |   10 +-
 contributing-docs/14_metadata_database_updates.rst |   10 +-
 contributing-docs/16_adding_api_endpoints.rst      |   18 +-
 contributing-docs/17_architecture_diagrams.rst     |   12 +-
 contributing-docs/18_contribution_workflow.rst     |    6 +-
 contributing-docs/testing/integration_tests.rst    |    3 -
 dev/README_RELEASE_AIRFLOW.md                      |    4 +-
 dev/README_RELEASE_HELM_CHART.md                   |    2 +-
 dev/breeze/README.md                               |    4 +-
 dev/breeze/doc/01_installation.rst                 |    2 +-
 dev/breeze/doc/03_developer_tasks.rst              |   45 +-
 dev/breeze/doc/04_troubleshooting.rst              |   30 +-
 dev/breeze/doc/05_test_commands.rst                |   19 +
 dev/breeze/doc/07_breeze_maintenance_tasks.rst     |    2 +-
 dev/breeze/doc/10_advanced_breeze_topics.rst       |   15 +-
 dev/breeze/doc/ci/02_images.md                     |    3 +-
 dev/breeze/doc/ci/04_selective_checks.md           |   20 +-
 dev/breeze/doc/ci/05_workflows.md                  |    2 +-
 dev/breeze/doc/ci/07_running_ci_locally.md         |    6 +-
 dev/breeze/doc/images/output-commands-hash.txt     |    2 +-
 dev/breeze/doc/images/output-commands.svg          |   66 +-
 dev/breeze/doc/images/output_ci-image_build.svg    |    2 +-
 dev/breeze/doc/images/output_ci-image_build.txt    |    2 +-
 dev/breeze/doc/images/output_ci-image_load.svg     |   72 +-
 dev/breeze/doc/images/output_ci-image_load.txt     |    2 +-
 dev/breeze/doc/images/output_ci-image_pull.svg     |    2 +-
 dev/breeze/doc/images/output_ci-image_pull.txt     |    2 +-
 dev/breeze/doc/images/output_ci-image_verify.svg   |    2 +-
 dev/breeze/doc/images/output_ci-image_verify.txt   |    2 +-
 .../doc/images/output_ci_selective-check.svg       |    6 +-
 .../doc/images/output_ci_selective-check.txt       |    2 +-
 dev/breeze/doc/images/output_prod-image_build.svg  |    2 +-
 dev/breeze/doc/images/output_prod-image_build.txt  |    2 +-
 dev/breeze/doc/images/output_prod-image_load.svg   |   62 +-
 dev/breeze/doc/images/output_prod-image_load.txt   |    2 +-
 dev/breeze/doc/images/output_prod-image_pull.svg   |    2 +-
 dev/breeze/doc/images/output_prod-image_pull.txt   |    2 +-
 dev/breeze/doc/images/output_prod-image_verify.svg |    2 +-
 dev/breeze/doc/images/output_prod-image_verify.txt |    2 +-
 ...management_generate-issue-content-providers.svg |   32 +-
 ...management_generate-issue-content-providers.txt |    2 +-
 ...ease-management_generate-providers-metadata.svg |  100 +-
 ...ease-management_generate-providers-metadata.txt |    2 +-
 ...e-management_prepare-provider-documentation.svg |   28 +-
 ...e-management_prepare-provider-documentation.txt |    2 +-
 dev/breeze/doc/images/output_run.svg               |    4 +-
 dev/breeze/doc/images/output_run.txt               |    2 +-
 .../output_sbom_export-dependency-information.svg  |    2 +-
 .../output_sbom_export-dependency-information.txt  |    2 +-
 .../output_setup_check-all-params-in-groups.svg    |   26 +-
 .../output_setup_check-all-params-in-groups.txt    |    2 +-
 .../output_setup_regenerate-command-images.svg     |    6 +-
 .../output_setup_regenerate-command-images.txt     |    2 +-
 dev/breeze/doc/images/output_shell.svg             |   58 +-
 dev/breeze/doc/images/output_shell.txt             |    2 +-
 dev/breeze/doc/images/output_start-airflow.svg     |    2 +-
 dev/breeze/doc/images/output_start-airflow.txt     |    2 +-
 dev/breeze/doc/images/output_static-checks.svg     |  412 ----
 dev/breeze/doc/images/output_static-checks.txt     |    1 -
 dev/breeze/doc/images/output_testing.svg           |   32 +-
 dev/breeze/doc/images/output_testing.txt           |    2 +-
 .../doc/images/output_testing_core-tests.svg       |  104 +-
 .../doc/images/output_testing_core-tests.txt       |    2 +-
 .../doc/images/output_testing_providers-tests.svg  |  122 +-
 .../doc/images/output_testing_providers-tests.txt  |    2 +-
 .../output_testing_task-sdk-integration-tests.svg  |  144 ++
 .../output_testing_task-sdk-integration-tests.txt  |    1 +
 dev/breeze/pyproject.toml                          |    3 +-
 .../src/airflow_breeze/commands/ci_commands.py     |    4 +-
 .../airflow_breeze/commands/ci_commands_config.py  |    2 +-
 .../airflow_breeze/commands/ci_image_commands.py   |   28 +-
 .../commands/ci_image_commands_config.py           |    6 +-
 .../commands/common_image_options.py               |    1 -
 .../src/airflow_breeze/commands/common_options.py  |    8 +-
 .../airflow_breeze/commands/developer_commands.py  |  200 +-
 .../commands/developer_commands_config.py          |   32 +-
 .../airflow_breeze/commands/kubernetes_commands.py |   26 +-
 .../src/airflow_breeze/commands/main_command.py    |   51 +-
 .../commands/production_image_commands.py          |   13 +-
 .../commands/production_image_commands_config.py   |    6 +-
 .../src/airflow_breeze/commands/release_command.py |    2 +-
 .../commands/release_management_commands.py        |  193 +-
 .../commands/release_management_commands_config.py |    9 +-
 .../src/airflow_breeze/commands/sbom_commands.py   |    6 +-
 .../commands/sbom_commands_config.py               |    2 +-
 .../src/airflow_breeze/commands/setup_commands.py  |    8 +-
 .../airflow_breeze/commands/testing_commands.py    |  185 +-
 .../commands/testing_commands_config.py            |   16 +-
 dev/breeze/src/airflow_breeze/global_constants.py  |   15 +-
 .../src/airflow_breeze/params/shell_params.py      |   11 +-
 dev/breeze/src/airflow_breeze/pre_commit_ids.py    |  155 --
 .../pre_commit_ids_TEMPLATE.py.jinja2              |   25 -
 .../prepare_providers/provider_documentation.py    |   32 +-
 .../templates/CHANGELOG_TEMPLATE.rst.jinja2        |    3 +
 .../templates/pyproject_TEMPLATE.toml.jinja2       |    2 +-
 dev/breeze/src/airflow_breeze/utils/cdxgen.py      |    4 +-
 .../utils/constraints_version_check.py             |   10 +-
 .../airflow_breeze/utils/debug_pyproject_toml.py   |    2 +-
 .../airflow_breeze/utils/docker_command_utils.py   |   19 +-
 dev/breeze/src/airflow_breeze/utils/github.py      |   17 +-
 dev/breeze/src/airflow_breeze/utils/image.py       |    5 +-
 .../src/airflow_breeze/utils/kubernetes_utils.py   |    7 +
 dev/breeze/src/airflow_breeze/utils/packages.py    |   11 +-
 dev/breeze/src/airflow_breeze/utils/parallel.py    |  180 +-
 dev/breeze/src/airflow_breeze/utils/path_utils.py  |   20 +-
 .../airflow_breeze/utils/provider_dependencies.py  |  286 ++-
 .../src/airflow_breeze/utils/publish_docs_to_s3.py |   26 +-
 dev/breeze/src/airflow_breeze/utils/reinstall.py   |    2 +-
 .../src/airflow_breeze/utils/reproducible.py       |    2 +-
 dev/breeze/src/airflow_breeze/utils/run_tests.py   |   65 +-
 dev/breeze/src/airflow_breeze/utils/run_utils.py   |   72 +-
 .../src/airflow_breeze/utils/selective_checks.py   |   49 +-
 .../src/airflow_breeze/utils/workflow_status.py    |   94 +
 dev/breeze/tests/test_docker_command_utils.py      |   16 +-
 dev/breeze/tests/test_provider_documentation.py    |   21 +-
 dev/breeze/tests/test_run_test_args.py             |    3 +-
 dev/breeze/tests/test_selective_checks.py          |  189 +-
 dev/breeze/uv.lock                                 | 2099 ++++++++------------
 devel-common/src/docs/README.rst                   |    4 +-
 devel-common/src/tests_common/pytest_plugin.py     |    2 +-
 docker-tests/tests/docker_tests/docker_utils.py    |    2 +-
 docs/spelling_wordlist.txt                         |    1 +
 generated/PYPI_README.md                           |    2 +-
 providers/MANAGING_PROVIDERS_LIFECYCLE.rst         |   27 +-
 providers/airbyte/pyproject.toml                   |    2 +-
 providers/alibaba/pyproject.toml                   |    2 +-
 providers/amazon/pyproject.toml                    |    2 +-
 providers/apache/beam/pyproject.toml               |    2 +-
 providers/apache/cassandra/pyproject.toml          |    2 +-
 providers/apache/drill/pyproject.toml              |    2 +-
 providers/apache/druid/pyproject.toml              |    2 +-
 providers/apache/flink/pyproject.toml              |    2 +-
 providers/apache/hdfs/pyproject.toml               |    2 +-
 providers/apache/hive/pyproject.toml               |    2 +-
 providers/apache/iceberg/pyproject.toml            |    2 +-
 providers/apache/impala/pyproject.toml             |    2 +-
 providers/apache/kafka/pyproject.toml              |    2 +-
 providers/apache/kylin/pyproject.toml              |    2 +-
 providers/apache/livy/pyproject.toml               |    2 +-
 providers/apache/pig/pyproject.toml                |    2 +-
 providers/apache/pinot/pyproject.toml              |    2 +-
 providers/apache/spark/pyproject.toml              |    2 +-
 .../tests/system/apache/spark/example_pyspark.py   |    2 +-
 providers/apprise/pyproject.toml                   |    2 +-
 providers/arangodb/pyproject.toml                  |    2 +-
 providers/asana/pyproject.toml                     |    2 +-
 providers/atlassian/jira/pyproject.toml            |    2 +-
 providers/celery/pyproject.toml                    |    2 +-
 providers/cloudant/pyproject.toml                  |    2 +-
 providers/cncf/kubernetes/pyproject.toml           |    2 +-
 providers/cohere/pyproject.toml                    |    2 +-
 providers/common/compat/pyproject.toml             |    2 +-
 providers/common/io/pyproject.toml                 |    2 +-
 providers/common/messaging/pyproject.toml          |    2 +-
 providers/common/sql/pyproject.toml                |    2 +-
 .../src/airflow/providers/common/sql/README_API.md |   18 +-
 .../providers/common/sql/dialects/dialect.pyi      |    2 +-
 .../providers/common/sql/get_provider_info.pyi     |    2 +-
 .../providers/common/sql/hooks/handlers.pyi        |    2 +-
 .../src/airflow/providers/common/sql/hooks/sql.pyi |    2 +-
 .../common/sql/operators/generic_transfer.pyi      |    2 +-
 .../airflow/providers/common/sql/sensors/sql.pyi   |    2 +-
 .../airflow/providers/common/sql/triggers/sql.pyi  |    2 +-
 providers/databricks/pyproject.toml                |    2 +-
 providers/datadog/pyproject.toml                   |    2 +-
 providers/dbt/cloud/pyproject.toml                 |    2 +-
 providers/dingding/pyproject.toml                  |    2 +-
 providers/discord/pyproject.toml                   |    2 +-
 providers/docker/pyproject.toml                    |    2 +-
 providers/edge3/pyproject.toml                     |    2 +-
 providers/elasticsearch/pyproject.toml             |    2 +-
 providers/exasol/pyproject.toml                    |    2 +-
 providers/fab/docs/migrations-ref.rst              |    2 +-
 providers/fab/pyproject.toml                       |    2 +-
 providers/facebook/pyproject.toml                  |    2 +-
 providers/ftp/pyproject.toml                       |    2 +-
 providers/git/pyproject.toml                       |    2 +-
 providers/github/pyproject.toml                    |    2 +-
 providers/google/pyproject.toml                    |    2 +-
 providers/grpc/pyproject.toml                      |    2 +-
 providers/hashicorp/pyproject.toml                 |    2 +-
 providers/http/pyproject.toml                      |    2 +-
 providers/imap/pyproject.toml                      |    2 +-
 providers/influxdb/pyproject.toml                  |    2 +-
 providers/jdbc/pyproject.toml                      |    2 +-
 providers/jenkins/pyproject.toml                   |    2 +-
 providers/microsoft/azure/pyproject.toml           |    2 +-
 providers/microsoft/mssql/pyproject.toml           |    2 +-
 providers/microsoft/psrp/pyproject.toml            |    2 +-
 providers/microsoft/winrm/pyproject.toml           |    2 +-
 providers/mongo/pyproject.toml                     |    2 +-
 providers/mysql/pyproject.toml                     |    2 +-
 providers/neo4j/pyproject.toml                     |    2 +-
 providers/odbc/pyproject.toml                      |    2 +-
 providers/openai/pyproject.toml                    |    2 +-
 providers/openfaas/pyproject.toml                  |    2 +-
 providers/openlineage/pyproject.toml               |    2 +-
 providers/opensearch/pyproject.toml                |    2 +-
 providers/opsgenie/pyproject.toml                  |    2 +-
 providers/oracle/pyproject.toml                    |    2 +-
 providers/pagerduty/pyproject.toml                 |    2 +-
 providers/papermill/pyproject.toml                 |    2 +-
 providers/pgvector/pyproject.toml                  |    2 +-
 providers/pinecone/pyproject.toml                  |    2 +-
 providers/postgres/pyproject.toml                  |    2 +-
 providers/presto/pyproject.toml                    |    2 +-
 providers/qdrant/pyproject.toml                    |    2 +-
 providers/redis/pyproject.toml                     |    2 +-
 providers/salesforce/pyproject.toml                |    2 +-
 providers/samba/pyproject.toml                     |    2 +-
 providers/segment/pyproject.toml                   |    2 +-
 providers/sendgrid/pyproject.toml                  |    2 +-
 providers/sftp/pyproject.toml                      |    2 +-
 providers/singularity/pyproject.toml               |    2 +-
 providers/slack/pyproject.toml                     |    2 +-
 providers/smtp/pyproject.toml                      |    2 +-
 providers/snowflake/pyproject.toml                 |    2 +-
 providers/sqlite/pyproject.toml                    |    2 +-
 providers/ssh/pyproject.toml                       |    2 +-
 providers/standard/pyproject.toml                  |    2 +-
 providers/tableau/pyproject.toml                   |    2 +-
 providers/telegram/pyproject.toml                  |    2 +-
 providers/teradata/pyproject.toml                  |    2 +-
 providers/trino/pyproject.toml                     |    2 +-
 providers/vertica/pyproject.toml                   |    2 +-
 providers/weaviate/pyproject.toml                  |    2 +-
 providers/yandex/pyproject.toml                    |    2 +-
 providers/ydb/pyproject.toml                       |    2 +-
 providers/zendesk/pyproject.toml                   |    2 +-
 pyproject.toml                                     |    4 +-
 reproducible_build.yaml                            |    4 +-
 scripts/ci/docker-compose/local.yml                |   47 +-
 scripts/ci/docker-compose/remove-sources.yml       |    6 +-
 scripts/ci/docker-compose/tests-sources.yml        |    4 +-
 scripts/ci/install_breeze.sh                       |    2 +-
 scripts/ci/pre_commit/check_pre_commit_hooks.py    |  163 --
 scripts/ci/{pre_commit => prek}/.gitignore         |    0
 scripts/ci/{pre_commit => prek}/boring_cyborg.py   |    0
 scripts/ci/{pre_commit => prek}/breeze_cmd_line.py |    4 +-
 .../capture_airflowctl_help.py                     |    6 +-
 .../{pre_commit => prek}/changelog_duplicates.py   |    0
 scripts/ci/{pre_commit => prek}/chart_schema.py    |    0
 .../check_aiobotocore_optional.py                  |    0
 .../check_airflow_bug_report_template.py           |    4 +-
 .../{pre_commit => prek}/check_airflow_imports.py  |    4 +-
 .../check_base_operator_partial_arguments.py       |    6 +-
 .../{pre_commit => prek}/check_changelog_format.py |    0
 .../check_common_sql_dependency.py                 |    2 +-
 .../check_default_configuration.py                 |    6 +-
 .../check_deferrable_default.py                    |    0
 .../ci/{pre_commit => prek}/check_deprecations.py  |    0
 .../check_extra_packages_ref.py                    |    8 +-
 scripts/ci/{pre_commit => prek}/check_i18n_json.py |    8 +-
 .../check_imports_in_providers.py                  |    6 +-
 .../check_init_decorator_arguments.py              |    6 +-
 .../ci/{pre_commit => prek}/check_init_in_tests.py |    0
 .../check_integrations_list.py                     |    4 +-
 .../ci/{pre_commit => prek}/check_kubeconform.py   |    4 +-
 .../ci/{pre_commit => prek}/check_lazy_logging.py  |    0
 scripts/ci/{pre_commit => prek}/check_license.py   |    2 +-
 .../check_min_python_version.py                    |   10 +-
 .../check_order_dockerfile_extras.py               |    4 +-
 .../ci/{pre_commit => prek}/check_provider_docs.py |    2 +-
 .../check_provider_yaml_files.py                   |    6 +-
 .../check_providers_subpackages_all_have_init.py   |   20 +-
 .../check_revision_heads_map.py                    |    6 +-
 .../ci/{pre_commit => prek}/check_system_tests.py  |    0
 .../check_system_tests_hidden_in_index.py          |    4 +-
 .../check_template_context_variable_in_sync.py     |    6 +-
 .../{pre_commit => prek}/check_template_fields.py  |    6 +-
 .../check_tests_in_right_folders.py                |    6 +-
 .../check_ti_vs_tis_attributes.py                  |    4 +-
 .../checkout_no_credentials.py                     |    0
 .../common_prek_black_utils.py}                    |    4 +-
 .../common_prek_utils.py}                          |   12 +-
 .../compile_provider_assets.py}                    |    8 +-
 .../ci/{pre_commit => prek}/compile_ui_assets.py   |   10 +-
 .../{pre_commit => prek}/compile_ui_assets_dev.py  |   10 +-
 .../decorator_operator_implements_custom_name.py   |    0
 scripts/ci/{pre_commit => prek}/diagram_hash.txt   |    0
 .../{pre_commit => prek}/docstring_param_type.py   |    0
 scripts/ci/{pre_commit => prek}/draft7_schema.json |    0
 .../generate_airflow_diagrams.py                   |    4 +-
 .../{pre_commit => prek}/generate_openapi_spec.py  |    6 +-
 .../generate_openapi_spec_fab.py                   |    6 +-
 .../{pre_commit => prek}/generate_pypi_readme.py   |    4 +-
 .../generate_volumes_for_sources.py                |    8 +-
 .../inline_scripts_in_docker.py                    |    2 +-
 scripts/ci/{pre_commit => prek}/lint_dockerfile.py |    2 +-
 scripts/ci/{pre_commit => prek}/lint_helm.py       |    4 +-
 .../ci/{pre_commit => prek}/lint_json_schema.py    |    4 +-
 .../ci/{pre_commit => prek}/local_yml_mounts.py    |    4 +-
 .../ci/{pre_commit => prek}/migration_reference.py |    6 +-
 scripts/ci/{pre_commit => prek}/mypy.py            |    6 +-
 scripts/ci/{pre_commit => prek}/mypy_folder.py     |    8 +-
 .../new_session_in_provide_session.py              |    0
 scripts/ci/{pre_commit => prek}/newsfragments.py   |    0
 .../prevent_deprecated_sqlalchemy_usage.py         |    0
 .../{pre_commit => prek}/replace_bad_characters.py |    0
 scripts/ci/{pre_commit => prek}/ruff_format.py     |    0
 .../significant_newsfragments_checker.py           |    0
 .../ci/{pre_commit => prek}/sort_in_the_wild.py    |    2 +-
 .../sort_installed_providers.py                    |    2 +-
 .../{pre_commit => prek}/sort_spelling_wordlist.py |    2 +-
 .../ci/{pre_commit => prek}/supported_versions.py  |    0
 .../ts_compile_lint_simple_auth_manager_ui.py      |    4 +-
 .../ci/{pre_commit => prek}/ts_compile_lint_ui.py  |    4 +-
 .../ci/{pre_commit => prek}/unittest_testcase.py   |    0
 .../update_airflow_pyproject_toml.py               |    4 +-
 .../{pre_commit => prek}/update_black_version.py   |    6 +-
 .../update_breeze_config_hash.py                   |    4 +-
 .../update_chart_dependencies.py                   |    4 +-
 .../ci/{pre_commit => prek}/update_er_diagram.py   |    8 +-
 .../update_example_dags_paths.py                   |    4 +-
 .../update_providers_build_files.py                |    4 +-
 .../update_providers_dependencies.py               |    4 +-
 .../update_source_date_epoch.py                    |    4 +-
 scripts/ci/{pre_commit => prek}/update_versions.py |    4 +-
 .../upgrade_important_versions.py}                 |   70 +-
 .../validate_operators_init.py                     |    0
 .../{pre_commit => prek}/vendor_k8s_json_schema.py |    0
 scripts/docker/common.sh                           |   13 +-
 .../in_container/run_capture_airflowctl_help.py    |    2 +-
 scripts/in_container/run_migration_reference.py    |    2 +-
 scripts/tools/setup_breeze                         |    2 +-
 task-sdk/dev/generate_task_sdk_models.py           |    2 +-
 358 files changed, 3579 insertions(+), 4407 deletions(-)

diff --git a/.github/.pre-commit-config.yaml b/.github/.pre-commit-config.yaml
index 909f0c1cdca..69bb3b8c3c8 100644
--- a/.github/.pre-commit-config.yaml
+++ b/.github/.pre-commit-config.yaml
@@ -18,7 +18,7 @@
 default_stages: [manual]
 default_language_version:
   python: python311
-minimum_pre_commit_version: '3.2.0'
+minimum_prek_version: '0.0.26'
 repos:
   - repo: https://github.com/eclipse-csi/octopin
     rev: 21360742e352e87450f99e180fdfc2cf774a72a3
diff --git a/.github/actions/install-pre-commit/action.yml b/.github/actions/install-prek/action.yml
similarity index 52%
rename from .github/actions/install-pre-commit/action.yml
rename to .github/actions/install-prek/action.yml
index b61154b5098..594dab1149d 100644
--- a/.github/actions/install-pre-commit/action.yml
+++ b/.github/actions/install-prek/action.yml
@@ -16,38 +16,33 @@
 # under the License.
 #
 ---
-name: 'Install pre-commit'
-description: 'Installs pre-commit and related packages'
+name: 'Install prek'
+description: 'Installs prek and related packages'
 inputs:
   python-version:
     description: 'Python version to use'
     default: "3.9"
   uv-version:
     description: 'uv version to use'
-    default: "0.8.8"  # Keep this comment to allow automatic replacement of uv version
-  pre-commit-version:
-    description: 'pre-commit version to use'
-    default: "4.3.0"  # Keep this comment to allow automatic replacement of pre-commit version
-  pre-commit-uv-version:
-    description: 'pre-commit-uv version to use'
-    default: "4.1.4"  # Keep this comment to allow automatic replacement of pre-commit-uv version
-  skip-pre-commits:
-    description: "Skip some pre-commits from installation"
+    default: "0.8.11"  # Keep this comment to allow automatic replacement of uv version
+  prek-version:
+    description: 'prek version to use'
+    default: "0.0.26"  # Keep this comment to allow automatic replacement of prek version
+  skip-prek-hooks:
+    description: "Skip some prek hooks from installation"
     default: ""
 runs:
   using: "composite"
   steps:
-    - name: Install pre-commit, uv, and pre-commit-uv
+    - name: Install prek and uv
       shell: bash
       env:
         UV_VERSION: ${{inputs.uv-version}}
-        PRE_COMMIT_VERSION: ${{inputs.pre-commit-version}}
-        PRE_COMMIT_UV_VERSION: ${{inputs.pre-commit-uv-version}}
-        SKIP: ${{ inputs.skip-pre-commits }}
+        PREK_VERSION: ${{inputs.prek-version}}
+        SKIP: ${{ inputs.skip-prek-hooks }}
       run: |
         pip install uv==${UV_VERSION} || true
-        uv tool install pre-commit==${PRE_COMMIT_VERSION} --with uv==${UV_VERSION} \
-        --with pre-commit-uv==${PRE_COMMIT_UV_VERSION}
+        uv tool install prek==${PREK_VERSION} --with uv==${UV_VERSION}
       working-directory: ${{ github.workspace }}
     # We need to use tar file with archive to restore all the permissions and symlinks
     - name: "Delete ~.cache"
@@ -59,36 +54,36 @@ runs:
         rm -rf ~/.cache
         echo
       shell: bash
-    - name: "Restore pre-commit cache"
+    - name: "Restore prek cache"
       uses: apache/infrastructure-actions/stash/restore@1c35b5ccf8fba5d4c3fdf25a045ca91aa0cbc468
       with:
-        key: cache-pre-commit-v4-${{ inputs.python-version }}-${{ hashFiles('.pre-commit-config.yaml') }}
+        key: cache-prek-v5-${{ inputs.python-version }}-${{ hashFiles('.pre-commit-config.yaml') }}
         path: /tmp/
-      id: restore-pre-commit-cache
-    - name: "Check if pre-commit cache tarball exists"
+      id: restore-prek-cache
+    - name: "Check if prek cache tarball exists"
       shell: bash
       run: |
-        if [ -f /tmp/cache-pre-commit.tar.gz ]; then
-          echo "✅ Cache tarball found: /tmp/cache-pre-commit.tar.gz"
+        if [ -f /tmp/cache-prek.tar.gz ]; then
+          echo "✅ Cache tarball found: /tmp/cache-prek.tar.gz"
         else
-          echo "❌ Cache tarball missing. Expected /tmp/cache-pre-commit.tar.gz"
+          echo "❌ Cache tarball missing. Expected /tmp/cache-prek.tar.gz"
           exit 1
         fi
-      if: steps.restore-pre-commit-cache.outputs.stash-hit == 'true'
+      if: steps.restore-prek-cache.outputs.stash-hit == 'true'
     - name: "Restore .cache from the tar file"
-      run: tar -C ~ -xzf /tmp/cache-pre-commit.tar.gz
+      run: tar -C ~ -xzf /tmp/cache-prek.tar.gz
       shell: bash
-      if: steps.restore-pre-commit-cache.outputs.stash-hit == 'true'
+      if: steps.restore-prek-cache.outputs.stash-hit == 'true'
     - name: "Show restored files"
       run: |
         echo "Restored files"
         du ~/ --max-depth=2
         echo
       shell: bash
-      if: steps.restore-pre-commit-cache.outputs.stash-hit == 'true'
-    - name: Install pre-commit hooks
+      if: steps.restore-prek-cache.outputs.stash-hit == 'true'
+    - name: Install prek hooks
       shell: bash
-      run: pre-commit install-hooks || (cat ~/.cache/pre-commit/pre-commit.log && exit 1)
+      run: prek install-hooks || (cat ~/.cache/prek/prek.log && exit 1)
       working-directory: ${{ github.workspace }}
       env:
-        SKIP: ${{ inputs.skip-pre-commits }}
+        SKIP: ${{ inputs.skip-prek-hooks }}
diff --git a/.github/boring-cyborg.yml b/.github/boring-cyborg.yml
index 7cf001621d3..4b62c2fba86 100644
--- a/.github/boring-cyborg.yml
+++ b/.github/boring-cyborg.yml
@@ -479,8 +479,8 @@ firstPRWelcomeComment: >
 
   Here are some useful points:
 
-  - Pay attention to the quality of your code (ruff, mypy and type annotations). Our [pre-commits](
-  https://github.com/apache/airflow/blob/main/contributing-docs/08_static_code_checks.rst#prerequisites-for-pre-commit-hooks)
+  - Pay attention to the quality of your code (ruff, mypy and type annotations). Our [prek-hooks](
+  https://github.com/apache/airflow/blob/main/contributing-docs/08_static_code_checks.rst#prerequisites-for-prek-hooks)
   will help you with that.
 
   - In case of a new feature add useful documentation (in docstrings or in `docs/` directory).
diff --git a/.github/workflows/additional-ci-image-checks.yml b/.github/workflows/additional-ci-image-checks.yml
index f3982389301..d289f38d1a3 100644
--- a/.github/workflows/additional-ci-image-checks.yml
+++ b/.github/workflows/additional-ci-image-checks.yml
@@ -48,8 +48,8 @@ on:  # yamllint disable-line rule:truthy
         description: "Whether to upgrade to newer dependencies (true/false)"
         required: true
         type: string
-      skip-pre-commits:
-        description: "Whether to skip pre-commits (true/false)"
+      skip-prek-hooks:
+        description: "Whether to skip prek hooks (true/false)"
         required: true
         type: string
       docker-cache:
diff --git a/.github/workflows/basic-tests.yml b/.github/workflows/basic-tests.yml
index b76eb38422d..32b7321cc60 100644
--- a/.github/workflows/basic-tests.yml
+++ b/.github/workflows/basic-tests.yml
@@ -40,8 +40,8 @@ on:  # yamllint disable-line rule:truthy
         description: "Whether to run only basic checks (true/false)"
         required: true
         type: string
-      skip-pre-commits:
-        description: "Whether to skip pre-commits (true/false)"
+      skip-prek-hooks:
+        description: "Whether to skip prek hooks (true/false)"
         required: true
         type: string
       default-python-version:
@@ -150,13 +150,13 @@ jobs:
           retention-days: '2'
         if: steps.restore-eslint-cache-simple-am-ui.outputs.stash-hit != 'true'
 
-  install-pre-commit:
+  install-prek:
     timeout-minutes: 5
-    name: "Install pre-commit for cache"
+    name: "Install prek for cache"
     runs-on: ${{ fromJSON(inputs.runners) }}
     env:
       PYTHON_MAJOR_MINOR_VERSION: "${{ inputs.default-python-version }}"
-      SKIP: ${{ inputs.skip-pre-commits }}
+      SKIP: ${{ inputs.skip-prek-hooks }}
     steps:
       - name: "Cleanup repo"
         shell: bash
@@ -168,21 +168,21 @@ jobs:
       - name: "Install Breeze"
         uses: ./.github/actions/breeze
         id: breeze
-      - name: "Install pre-commit"
-        uses: ./.github/actions/install-pre-commit
-        id: pre-commit
+      - name: "Install prek"
+        uses: ./.github/actions/install-prek
+        id: prek
         with:
           python-version: ${{steps.breeze.outputs.host-python-version}}
-          skip-pre-commits: ${{ inputs.skip-pre-commits }}
+          skip-prek-hooks: ${{ inputs.skip-prek-hooks }}
 
   # Those checks are run if no image needs to be built for checks. This is for simple changes that
   # Do not touch any of the python code or any of the important files that might require building
-  # The CI Docker image and they can be run entirely using the pre-commit virtual environments on host
+  # The CI Docker image and they can be run entirely using the prek virtual environments on host
   static-checks-basic-checks-only:
     timeout-minutes: 30
     name: "Static checks: basic checks only"
     runs-on: ${{ fromJSON(inputs.runners) }}
-    needs: install-pre-commit
+    needs: install-prek
     if: inputs.basic-checks-only == 'true'
     steps:
       - name: "Cleanup repo"
@@ -197,12 +197,12 @@ jobs:
       - name: "Install Breeze"
         uses: ./.github/actions/breeze
         id: breeze
-      - name: "Install pre-commit"
-        uses: ./.github/actions/install-pre-commit
-        id: pre-commit
+      - name: "Install prek"
+        uses: ./.github/actions/install-prek
+        id: prek
         with:
           python-version: ${{ steps.breeze.outputs.host-python-version }}
-          skip-pre-commits: ${{ inputs.skip-pre-commits }}
+          skip-prek-hooks: ${{ inputs.skip-prek-hooks }}
       - name: Fetch incoming commit ${{ github.sha }} with its parent
         uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683  # v4.2.2
         with:
@@ -211,12 +211,12 @@ jobs:
           persist-credentials: false
       - name: "Static checks: basic checks only"
         run: >
-          breeze static-checks --show-diff-on-failure --color always --initialize-environment
-          --skip-image-upgrade-check --commit-ref "${{ github.sha }}"
+          prek --show-diff-on-failure --color always
+          --from-ref "${{ github.sha }}" --to-ref "${{ github.sha }}"
         env:
           VERBOSE: "false"
-          SKIP_BREEZE_PRE_COMMITS: "true"
-          SKIP: ${{ inputs.skip-pre-commits }}
+          SKIP_BREEZE_PREK_HOOKS: "true"
+          SKIP: ${{ inputs.skip-prek-hooks }}
           COLUMNS: "202"
 
   test-git-clone-on-windows:
@@ -234,7 +234,7 @@ jobs:
     timeout-minutes: 45
     name: "Upgrade checks"
     runs-on: ${{ fromJSON(inputs.runners) }}
-    needs: install-pre-commit
+    needs: install-prek
     env:
       PYTHON_MAJOR_MINOR_VERSION: "${{ inputs.default-python-version }}"
     if: inputs.canary-run == 'true'
@@ -251,28 +251,28 @@ jobs:
       - name: "Install Breeze"
         uses: ./.github/actions/breeze
         id: breeze
-      - name: "Install pre-commit"
-        uses: ./.github/actions/install-pre-commit
-        id: pre-commit
+      - name: "Install prek"
+        uses: ./.github/actions/install-prek
+        id: prek
         with:
           python-version: ${{steps.breeze.outputs.host-python-version}}
-          skip-pre-commits: ${{ inputs.skip-pre-commits }}
-      - name: "Autoupdate all pre-commits"
-        run: pre-commit autoupdate --freeze
-      - name: "Autoupdate Lucas-C/pre-commit-hooks to bleeding edge"
-        run: pre-commit autoupdate --bleeding-edge --freeze --repo https://github.com/Lucas-C/pre-commit-hooks
+          skip-prek-hooks: ${{ inputs.skip-prek-hooks }}
+      - name: "Autoupdate all prek hooks"
+        run: prek autoupdate --freeze
+      - name: "Autoupdate Lucas-C hooks to bleeding edge"
+        run: prek autoupdate --bleeding-edge --freeze --repo https://github.com/Lucas-C/pre-commit-hooks
       - name: "Check if there are any changes in pre-commit hooks"
         run: git diff --exit-code
       - name: "Run automated upgrade for black"
         run: >
-          pre-commit run
+          prek
           --all-files --show-diff-on-failure --color always --verbose
           --hook-stage manual
           update-black-version
         if: always()
       - name: "Run automated upgrade for chart dependencies"
         run: >
-          pre-commit run
+          prek
           --all-files --show-diff-on-failure --color always --verbose
           --hook-stage manual
           update-chart-dependencies
@@ -282,30 +282,30 @@ jobs:
       # get notified about it - until it stabilizes in 1.* version
       - name: "Run automated upgrade for uv (not failing - just informational)"
         run: >
-          pre-commit run
+          prek
           --all-files --show-diff-on-failure --color always --verbose
-          --hook-stage manual update-installers-and-pre-commit || true
+          --hook-stage manual upgrade-important-versions || true
         if: always()
         env:
           UPGRADE_UV: "true"
           UPGRADE_PYTHON: "false"
           UPGRADE_GOLANG: "true"
           UPGRADE_PIP: "false"
-          UPGRADE_PRE_COMMIT: "false"
+          UPGRADE_PREK: "false"
           UPGRADE_NODE_LTS: "false"
           GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
-      - name: "Run automated upgrade for pip, pre-commit and node (failing if needed)"
+      - name: "Run automated upgrade for important versions minus uv(failing if needed)"
         run: >
-          pre-commit run
+          prek
           --all-files --show-diff-on-failure --color always --verbose
-          --hook-stage manual update-installers-and-pre-commit
+          --hook-stage manual upgrade-important-versions
         if: always()
         env:
           UPGRADE_UV: "false"
           UPGRADE_PYTHON: "true"
           UPGRADE_GOLANG: "false"
           UPGRADE_PIP: "true"
-          UPGRADE_PRE_COMMIT: "true"
+          UPGRADE_PREK: "true"
           UPGRADE_NODE_LTS: "true"
           GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
 
diff --git a/.github/workflows/ci-amd.yml b/.github/workflows/ci-amd.yml
index 69de65de65a..b1551028fd7 100644
--- a/.github/workflows/ci-amd.yml
+++ b/.github/workflows/ci-amd.yml
@@ -122,7 +122,7 @@ jobs:
       arm-runners: ${{ steps.selective-checks.outputs.arm-runners }}
       selected-providers-list-as-string: >-
         ${{ steps.selective-checks.outputs.selected-providers-list-as-string }}
-      skip-pre-commits: ${{ steps.selective-checks.outputs.skip-pre-commits }}
+      skip-prek-hooks: ${{ steps.selective-checks.outputs.skip-prek-hooks }}
       skip-providers-tests: ${{ steps.selective-checks.outputs.skip-providers-tests }}
       source-head-repo: ${{ steps.source-run-info.outputs.head-repo }}
       source-head-ref: ${{ steps.source-run-info.outputs.head-ref }}
@@ -168,8 +168,8 @@ jobs:
           PR_LABELS: ${{ steps.source-run-info.outputs.pr-labels }}
           GITHUB_CONTEXT: ${{ toJson(github) }}
 
-  run-pin-versions-pre-commit:
-    name: "Run pin-versions pre-commit"
+  run-pin-versions-prek:
+    name: "Run pin-versions prek"
     needs: [build-info]
     runs-on: ${{ fromJSON(needs.build-info.outputs.amd-runners) }}
     steps:
@@ -177,24 +177,22 @@ jobs:
         uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683  # v4.2.2
         with:
           persist-credentials: false
-      - name: "Install Python 3.11 as 3.11+ is needed by pin-versions pre-commit"
+      - name: "Install Python 3.11 as 3.11+ is needed by pin-versions"
         uses: actions/setup-python@7f4fc3e22c37d6ff65e88745f38bd3157c663f7c  # v4.9.1
         with:
           python-version: 3.11
           cache: "pip"
-      - name: Install pre-commit, uv, and pre-commit-uv
+      - name: Install prek, uv
         shell: bash
         env:
-          UV_VERSION: "0.8.8"  # Keep this comment to allow automatic replacement of uv version
-          PRE_COMMIT_VERSION: "4.3.0"  # Keep this comment to allow automatic replacement of pre-commit version
-          PRE_COMMIT_UV_VERSION: "4.1.4"  # Keep this comment to allow automatic replacement of pre-commit-uv version
+          UV_VERSION: "0.8.11"  # Keep this comment to allow automatic replacement of uv version
+          PREK_VERSION: "0.0.26"  # Keep this comment to allow automatic replacement of prek version
         run: |
           pip install uv==${UV_VERSION} || true
-          uv tool install pre-commit==${PRE_COMMIT_VERSION} --with uv==${UV_VERSION} \
-          --with pre-commit-uv==${PRE_COMMIT_UV_VERSION}
-      - name: "Run pin-versions pre-commit"
+          uv tool install prek==${PREK_VERSION} --with uv==${UV_VERSION}
+      - name: "Run pin-versions"
         run: >
-          pre-commit run -c .github/.pre-commit-config.yaml --all-files --verbose --hook-stage manual
+          prek -c .github/.pre-commit-config.yaml --all-files --verbose --hook-stage manual
           pin-versions
         env:
           GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
@@ -210,7 +208,7 @@ jobs:
       needs-api-codegen: ${{needs.build-info.outputs.needs-api-codegen}}
       default-python-version: "${{ needs.build-info.outputs.default-python-version }}"
       basic-checks-only: ${{needs.build-info.outputs.basic-checks-only}}
-      skip-pre-commits: ${{needs.build-info.outputs.skip-pre-commits}}
+      skip-prek-hooks: ${{needs.build-info.outputs.skip-prek-hooks}}
       canary-run: ${{needs.build-info.outputs.canary-run}}
       latest-versions-only: ${{needs.build-info.outputs.latest-versions-only}}
       use-uv: ${{needs.build-info.outputs.use-uv}}
@@ -255,7 +253,7 @@ jobs:
       constraints-branch: ${{ needs.build-info.outputs.default-constraints-branch }}
       default-python-version: "${{ needs.build-info.outputs.default-python-version }}"
       upgrade-to-newer-dependencies: ${{ needs.build-info.outputs.upgrade-to-newer-dependencies }}
-      skip-pre-commits: ${{ needs.build-info.outputs.skip-pre-commits }}
+      skip-prek-hooks: ${{ needs.build-info.outputs.skip-prek-hooks }}
       docker-cache: ${{ needs.build-info.outputs.docker-cache }}
       disable-airflow-repo-cache: ${{ needs.build-info.outputs.disable-airflow-repo-cache }}
       canary-run: ${{ needs.build-info.outputs.canary-run }}
@@ -301,7 +299,7 @@ jobs:
       latest-versions-only: ${{ needs.build-info.outputs.latest-versions-only }}
       basic-checks-only: ${{ needs.build-info.outputs.basic-checks-only }}
       upgrade-to-newer-dependencies: ${{ needs.build-info.outputs.upgrade-to-newer-dependencies }}
-      skip-pre-commits: ${{ needs.build-info.outputs.skip-pre-commits }}
+      skip-prek-hooks: ${{ needs.build-info.outputs.skip-prek-hooks }}
       ci-image-build: ${{ needs.build-info.outputs.ci-image-build }}
       include-success-outputs: ${{ needs.build-info.outputs.include-success-outputs }}
       debug-resources: ${{ needs.build-info.outputs.debug-resources }}
diff --git a/.github/workflows/ci-arm.yml b/.github/workflows/ci-arm.yml
index b17231cddf7..f7fbc9ae312 100644
--- a/.github/workflows/ci-arm.yml
+++ b/.github/workflows/ci-arm.yml
@@ -115,7 +115,7 @@ jobs:
       arm-runners: ${{ steps.selective-checks.outputs.arm-runners }}
       selected-providers-list-as-string: >-
         ${{ steps.selective-checks.outputs.selected-providers-list-as-string }}
-      skip-pre-commits: ${{ steps.selective-checks.outputs.skip-pre-commits }}
+      skip-prek-hooks: ${{ steps.selective-checks.outputs.skip-prek-hooks }}
       skip-providers-tests: ${{ steps.selective-checks.outputs.skip-providers-tests }}
       source-head-repo: ${{ steps.source-run-info.outputs.source-head-repo }}
       sqlite-exclude: ${{ steps.selective-checks.outputs.sqlite-exclude }}
@@ -171,7 +171,7 @@ jobs:
       needs-api-codegen: ${{needs.build-info.outputs.needs-api-codegen}}
       default-python-version: "${{ needs.build-info.outputs.default-python-version }}"
       basic-checks-only: ${{needs.build-info.outputs.basic-checks-only}}
-      skip-pre-commits: ${{needs.build-info.outputs.skip-pre-commits}}
+      skip-prek-hooks: ${{needs.build-info.outputs.skip-prek-hooks}}
       canary-run: ${{needs.build-info.outputs.canary-run}}
       latest-versions-only: ${{needs.build-info.outputs.latest-versions-only}}
       use-uv: ${{needs.build-info.outputs.use-uv}}
@@ -216,7 +216,7 @@ jobs:
       constraints-branch: ${{ needs.build-info.outputs.default-constraints-branch }}
       default-python-version: "${{ needs.build-info.outputs.default-python-version }}"
       upgrade-to-newer-dependencies: ${{ needs.build-info.outputs.upgrade-to-newer-dependencies }}
-      skip-pre-commits: ${{ needs.build-info.outputs.skip-pre-commits }}
+      skip-prek-hooks: ${{ needs.build-info.outputs.skip-prek-hooks }}
       docker-cache: ${{ needs.build-info.outputs.docker-cache }}
       disable-airflow-repo-cache: ${{ needs.build-info.outputs.disable-airflow-repo-cache }}
       canary-run: ${{ needs.build-info.outputs.canary-run }}
diff --git a/.github/workflows/ci-image-checks.yml b/.github/workflows/ci-image-checks.yml
index 7fd13495aa8..2d52aec1ad0 100644
--- a/.github/workflows/ci-image-checks.yml
+++ b/.github/workflows/ci-image-checks.yml
@@ -72,8 +72,8 @@ on:  # yamllint disable-line rule:truthy
         description: "Whether to build CI images (true/false)"
         required: true
         type: string
-      skip-pre-commits:
-        description: "Whether to skip pre-commits (true/false)"
+      skip-prek-hooks:
+        description: "Whether to skip prek hooks (true/false)"
         required: true
         type: string
       include-success-outputs:
@@ -122,9 +122,9 @@ on:  # yamllint disable-line rule:truthy
 permissions:
   contents: read
 jobs:
-  install-pre-commit:
+  install-prek:
     timeout-minutes: 5
-    name: "Install pre-commit for cache (only canary runs)"
+    name: "Install prek for cache (only canary runs)"
     runs-on: ${{ fromJSON(inputs.runners) }}
     env:
       PYTHON_MAJOR_MINOR_VERSION: "${{ inputs.default-python-version }}"
@@ -143,23 +143,23 @@ jobs:
         uses: ./.github/actions/breeze
         id: breeze
         if: inputs.canary-run == 'true'
-      - name: "Install pre-commit"
-        uses: ./.github/actions/install-pre-commit
-        id: pre-commit
+      - name: "Install prek"
+        uses: ./.github/actions/install-prek
+        id: prek
         with:
           python-version: ${{steps.breeze.outputs.host-python-version}}
         if: inputs.canary-run == 'true'
-      - name: "Prepare .tar file from pre-commit cache"
+      - name: "Prepare .tar file from prek cache"
         run: |
-          tar -C ~ -czf /tmp/cache-pre-commit.tar.gz .cache/pre-commit .cache/uv
+          tar -C ~ -czf /tmp/cache-prek.tar.gz .cache/prek .cache/uv
         shell: bash
         if: inputs.canary-run == 'true'
-      - name: "Save pre-commit cache"
+      - name: "Save prek cache"
         uses: apache/infrastructure-actions/stash/save@1c35b5ccf8fba5d4c3fdf25a045ca91aa0cbc468
         with:
           # yamllint disable rule:line-length
-          key: cache-pre-commit-v4-${{ steps.breeze.outputs.host-python-version }}-${{ hashFiles('.pre-commit-config.yaml') }}
-          path: /tmp/cache-pre-commit.tar.gz
+          key: cache-prek-v5-${{ steps.breeze.outputs.host-python-version }}-${{ hashFiles('.pre-commit-config.yaml') }}
+          path: /tmp/cache-prek.tar.gz
           if-no-files-found: 'error'
           retention-days: '2'
         if: inputs.canary-run == 'true'
@@ -168,7 +168,7 @@ jobs:
     timeout-minutes: 45
     name: "Static checks"
     runs-on: ${{ fromJSON(inputs.runners) }}
-    needs: install-pre-commit
+    needs: install-prek
     env:
       PYTHON_MAJOR_MINOR_VERSION: "${{ inputs.default-python-version }}"
       UPGRADE_TO_NEWER_DEPENDENCIES: "${{ inputs.upgrade-to-newer-dependencies }}"
@@ -189,16 +189,16 @@ jobs:
           python: "${{ inputs.default-python-version }}"
           use-uv: ${{ inputs.use-uv }}
         id: breeze
-      - name: "Install pre-commit"
-        uses: ./.github/actions/install-pre-commit
-        id: pre-commit
+      - name: "Install prek"
+        uses: ./.github/actions/install-prek
+        id: prek
         with:
           python-version: ${{steps.breeze.outputs.host-python-version}}
       - name: "Static checks"
-        run: breeze static-checks --all-files --show-diff-on-failure --color always --initialize-environment
+        run: prek --all-files --show-diff-on-failure --color always
         env:
           VERBOSE: "false"
-          SKIP: ${{ inputs.skip-pre-commits }}
+          SKIP: ${{ inputs.skip-prek-hooks }}
           COLUMNS: "202"
           SKIP_GROUP_OUTPUT: "true"
           DEFAULT_BRANCH: ${{ inputs.branch }}
@@ -208,7 +208,7 @@ jobs:
     timeout-minutes: 45
     name: "MyPy checks"
     runs-on: ${{ fromJSON(inputs.runners) }}
-    needs: install-pre-commit
+    needs: install-prek
     if: inputs.needs-mypy == 'true'
     strategy:
       fail-fast: false
@@ -232,13 +232,13 @@ jobs:
           python: "${{ inputs.default-python-version }}"
           use-uv: ${{ inputs.use-uv }}
         id: breeze
-      - name: "Install pre-commit"
-        uses: ./.github/actions/install-pre-commit
-        id: pre-commit
+      - name: "Install prek"
+        uses: ./.github/actions/install-prek
+        id: prek
         with:
           python-version: ${{steps.breeze.outputs.host-python-version}}
       - name: "MyPy checks for ${{ matrix.mypy-check }}"
-        run: pre-commit run --color always --verbose --hook-stage manual "$MYPY_CHECK" --all-files
+        run: prek --color always --verbose --hook-stage manual "$MYPY_CHECK" --all-files
         env:
           VERBOSE: "false"
           COLUMNS: "202"
diff --git a/.github/workflows/news-fragment.yml b/.github/workflows/news-fragment.yml
index 04e308c3061..45efd3364ea 100644
--- a/.github/workflows/news-fragment.yml
+++ b/.github/workflows/news-fragment.yml
@@ -60,4 +60,4 @@ jobs:
         env:
           BASE_REF: ${{ github.base_ref }}
         run: >
-          uv run scripts/ci/pre_commit/significant_newsfragments_checker.py
+          uv run scripts/ci/prek/significant_newsfragments_checker.py
diff --git a/.gitpod.yml b/.gitpod.yml
index fa77c07eda2..2a724753de4 100644
--- a/.gitpod.yml
+++ b/.gitpod.yml
@@ -24,13 +24,13 @@ image: gitpod/workspace-python-3.11
 
 tasks:
   - init: ./scripts/ci/install_breeze.sh
-  - name: Install pre-commit
+  - name: Install prek
     openMode: split-right
     command: |
       printf '%s\n' "export PIP_USER=no" >> "$HOME/.bashrc"
       source "$HOME/.bashrc"
-      pip install pre-commit
-      pre-commit install
+      pip install prek
+      prek install
       echo "for running integration test with breeze"
 
 # Ports to expose on workspace startup
diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml
index bcecd22edc4..798c2ca2ec2 100644
--- a/.pre-commit-config.yaml
+++ b/.pre-commit-config.yaml
@@ -20,7 +20,7 @@ default_language_version:
   python: python3
   node: 22.18.0
   golang: 1.24.0
-minimum_pre_commit_version: '3.2.0'
+minimum_prek_version: '0.0.26'
 exclude: ^.*/.*_vendor/
 repos:
   - repo: meta
@@ -176,7 +176,7 @@ repos:
     hooks:
       - id: check-min-python-version
         name: Check minimum Python version
-        entry: ./scripts/ci/pre_commit/check_min_python_version.py
+        entry: ./scripts/ci/prek/check_min_python_version.py
         language: python
         additional_dependencies: ['rich>=12.4.4']
         require_serial: true
@@ -189,34 +189,38 @@ repos:
         require_serial: true
       - id: update-black-version
         name: Update black versions everywhere (manual)
-        entry: ./scripts/ci/pre_commit/update_black_version.py
+        entry: ./scripts/ci/prek/update_black_version.py
         stages: ['manual']
         language: python
         files: ^\.pre-commit-config\.yaml$
         additional_dependencies: ['pyyaml>=6.0.2']
         pass_filenames: false
         require_serial: true
-      - id: update-installers-and-pre-commit
-        name: Update installers and pre-commit to latest (manual)
-        entry: ./scripts/ci/pre_commit/update_installers_and_pre_commit.py
+      - id: upgrade-important-versions
+        name: Upgrade important versions (manual)
+        entry: ./scripts/ci/prek/upgrade_important_versions.py
         stages: ['manual']
         language: python
-        files: ^\.pre-commit-config\.yaml$|^scripts/ci/pre_commit/update_installers_and_pre_commit\.py$
+        files: >
+          (?x)
+          ^\.pre-commit-config\.yaml$|
+          ^\.github/\.pre-commit-config\.yaml$|
+          ^scripts/ci/prek/update_installers_and_prek\.py$
         pass_filenames: false
         require_serial: true
-        additional_dependencies: ['pyyaml>=6.0.2', 'rich>=12.4.4', 'requests>=2.31.0',"packaging>=25"]
+        additional_dependencies: ['pyyaml>=6.0.2', 'rich>=12.4.4', 'requests>=2.31.0',"packaging>=23.2"]
       - id: update-chart-dependencies
         name: Update chart dependencies to latest (manual)
-        entry: ./scripts/ci/pre_commit/update_chart_dependencies.py
+        entry: ./scripts/ci/prek/update_chart_dependencies.py
         stages: ['manual']
         language: python
         additional_dependencies: ['pyyaml>=6.0.2', 'rich>=12.4.4', 'requests>=2.31.0']
-        files: ^\.pre-commit-config\.yaml$|^scripts/ci/pre_commit/update_build_dependencies\.py$
+        files: ^\.pre-commit-config\.yaml$|^scripts/ci/prek/update_build_dependencies\.py$
         pass_filenames: false
         require_serial: true
       - id: check-taskinstance-tis-attrs
         name: Check that TI and TIS have the same attributes
-        entry: ./scripts/ci/pre_commit/check_ti_vs_tis_attributes.py
+        entry: ./scripts/ci/prek/check_ti_vs_tis_attributes.py
         language: python
         additional_dependencies: ['rich>=12.4.4']
         files: ^airflow-core/src/airflow/models/taskinstance\.py$|^airflow-core/src/airflow/models/taskinstancehistory\.py$
@@ -225,7 +229,7 @@ repos:
       - id: check-deferrable-default
         name: Check and fix default value of default_deferrable
         language: python
-        entry: ./scripts/ci/pre_commit/check_deferrable_default.py
+        entry: ./scripts/ci/prek/check_deferrable_default.py
         pass_filenames: false
         # libcst doesn't have source wheels for all PY except PY3.12, excluding it
         # libcst 1.8.1 doesn't include typing-extensions which is needed for Python 3.9
@@ -363,16 +367,16 @@ repos:
         entry: zizmor
   - repo: local
     # Note that this is the 2nd "local" repo group in the .pre-commit-config.yaml file. This is because
-    # we try to minimise the number of passes that must happen in order to apply some of the changes
-    # done by pre-commits. Some of the pre-commits not only check for errors but also fix them. This means
-    # that output from an earlier pre-commit becomes input to another pre-commit. Splitting the local
-    # scripts of our and adding some other non-local pre-commit in-between allows us to handle such
+    # we try to minimize the number of passes that must happen to apply some of the changes
+    # done by prek-hooks. Some of the prek hooks not only check for errors but also fix them. This means
+    # that output from an earlier prek hook becomes input to another prek hook. Splitting the local
+    # scripts of our and adding some other non-local prek hook in-between allows us to handle such
     # changes quickly - especially when we want the early modifications from the first local group
-    # to be applied before the non-local pre-commits are run
+    # to be applied before the non-local prek hooks are run
     hooks:
       - id: update-providers-dependencies
         name: Update dependencies for providers
-        entry: ./scripts/ci/pre_commit/update_providers_dependencies.py
+        entry: ./scripts/ci/prek/update_providers_dependencies.py
         language: python
         always_run: true
         pass_filenames: false
@@ -381,13 +385,13 @@ repos:
         name: No templated field logic checks in operator __init__
         description: Prevent templated field logic checks in operators' __init__
         language: python
-        entry: ./scripts/ci/pre_commit/validate_operators_init.py
+        entry: ./scripts/ci/prek/validate_operators_init.py
         pass_filenames: true
         files: ^providers/.*/src/airflow/providers/.*/(operators|transfers|sensors)/.*\.py$
         additional_dependencies: ['rich>=12.4.4']
       - id: update-providers-build-files
         name: Update providers build files
-        entry: ./scripts/ci/pre_commit/update_providers_build_files.py
+        entry: ./scripts/ci/prek/update_providers_build_files.py
         language: python
         pass_filenames: true
         files: |
@@ -414,7 +418,7 @@ repos:
       - id: ruff-format
         name: Run 'ruff format'
         description: "Run 'ruff format' for extremely fast Python formatting"
-        entry: ./scripts/ci/pre_commit/ruff_format.py
+        entry: ./scripts/ci/prek/ruff_format.py
         language: python
         types_or: [python, pyi]
         args: []
@@ -423,7 +427,7 @@ repos:
         exclude: ^airflow-core/tests/unit/dags/test_imports\.py$
       - id: replace-bad-characters
         name: Replace bad characters
-        entry: ./scripts/ci/pre_commit/replace_bad_characters.py
+        entry: ./scripts/ci/prek/replace_bad_characters.py
         language: python
         types: [file, text]
         exclude: ^clients/gen/go\.sh$|^\.gitmodules$|.*/dist/.*|\.go$|/go\.(mod|sum)$
@@ -431,7 +435,7 @@ repos:
       - id: lint-dockerfile
         name: Lint Dockerfile
         language: python
-        entry: ./scripts/ci/pre_commit/lint_dockerfile.py
+        entry: ./scripts/ci/prek/lint_dockerfile.py
         files: Dockerfile.*$
         pass_filenames: true
         require_serial: true
@@ -441,7 +445,7 @@ repos:
         files: ^airflow-core/src/airflow/.*\.py$
         require_serial: true
         exclude: ^airflow-core/src/airflow/kubernetes/
-        entry: ./scripts/ci/pre_commit/check_airflow_imports.py
+        entry: ./scripts/ci/prek/check_airflow_imports.py
           --pattern '^airflow\.kubernetes'
           --message "You should only import kubernetes code from `airflow.providers.cncf.kubernetes`."
         additional_dependencies: ['rich>=12.4.4']
@@ -454,7 +458,7 @@ repos:
           (?x)
           ^airflow-core/src/airflow/openlineage/|
           ^airflow/providers/common/compat/openlineage/facet.py$
-        entry: ./scripts/ci/pre_commit/check_airflow_imports.py
+        entry: ./scripts/ci/prek/check_airflow_imports.py
           --pattern '^openlineage\.client\.(facet|run)'
           --message "You should import from `airflow.providers.common.compat.openlineage.facet` instead."
         additional_dependencies: ['rich>=12.4.4']
@@ -463,7 +467,7 @@ repos:
         language: python
         files: ^\.github/ISSUE_TEMPLATE/3-airflow_providers_bug_report\.yml$
         require_serial: true
-        entry: ./scripts/ci/pre_commit/check_airflow_bug_report_template.py
+        entry: ./scripts/ci/prek/check_airflow_bug_report_template.py
         additional_dependencies: ['rich>=12.4.4', 'pyyaml>=6.0.2']
       - id: check-cncf-k8s-only-for-executors
         name: Check cncf.kubernetes imports used for executors only
@@ -478,13 +482,13 @@ repos:
           ^airflow-core/src/airflow/serialization/serialized_objects\.py$|
           ^airflow-core/src/airflow/serialization/serializers/kubernetes\.py$|
           ^airflow-core/src/airflow/utils/sqlalchemy\.py$
-        entry: ./scripts/ci/pre_commit/check_airflow_imports.py
+        entry: ./scripts/ci/prek/check_airflow_imports.py
             --pattern '^airflow\.providers\.cncf\.kubernetes'
             --message "Only few k8s executors exceptions are allowed to use `airflow.providers.cncf.kubernetes`."
         additional_dependencies: ['rich>=12.4.4']
       - id: update-local-yml-file
         name: Update mounts in the local yml file
-        entry: ./scripts/ci/pre_commit/local_yml_mounts.py
+        entry: ./scripts/ci/prek/local_yml_mounts.py
         language: python
         files: ^dev/breeze/src/airflow_breeze/utils/docker_command_utils\.py$|^scripts/ci/docker_compose/local\.yml$
         pass_filenames: false
@@ -492,7 +496,7 @@ repos:
       - id: check-sql-dependency-common-data-structure
         name: Check dependency of SQL providers
         description: Check dependency of SQL Providers with common data structure
-        entry: ./scripts/ci/pre_commit/check_common_sql_dependency.py
+        entry: ./scripts/ci/prek/check_common_sql_dependency.py
         language: python
         files: ^providers/.*/src/airflow/providers/.*/hooks/.*\.py$
         additional_dependencies: ['rich>=12.4.4', 'pyyaml>=6.0.2', 'packaging>=23.2']
@@ -502,18 +506,18 @@ repos:
         language: python
         files: ^airflow-core/docs/extra-packages-ref\.rst$|^hatch_build\.py$
         pass_filenames: false
-        entry: ./scripts/ci/pre_commit/check_extra_packages_ref.py
+        entry: ./scripts/ci/prek/check_extra_packages_ref.py
         additional_dependencies: ['rich>=12.4.4', 'hatchling==1.27.0', 'tabulate>=0.9.0']
       - id: check-extras-order
         name: Check order of extras in Dockerfile
-        entry: ./scripts/ci/pre_commit/check_order_dockerfile_extras.py
+        entry: ./scripts/ci/prek/check_order_dockerfile_extras.py
         language: python
         files: ^Dockerfile$
         pass_filenames: false
         additional_dependencies: ['rich>=12.4.4']
       - id: generate-airflow-diagrams
         name: Generate airflow diagrams
-        entry: ./scripts/ci/pre_commit/generate_airflow_diagrams.py
+        entry: ./scripts/ci/prek/generate_airflow_diagrams.py
         language: python
         files: >
           (?x)
@@ -523,7 +527,7 @@ repos:
         additional_dependencies: ['rich>=12.4.4', 'diagrams>=0.23.4']
       - id: generate-volumes-for-sources
         name: Generate volumes for docker compose
-        entry: ./scripts/ci/pre_commit/generate_volumes_for_sources.py
+        entry: ./scripts/ci/prek/generate_volumes_for_sources.py
         language: python
         files: ^providers/.*/provider\.yaml$
         pass_filenames: false
@@ -531,19 +535,19 @@ repos:
         additional_dependencies: ['rich>=12.4.4']
       - id: update-supported-versions
         name: Updates supported versions in documentation
-        entry: ./scripts/ci/pre_commit/supported_versions.py
+        entry: ./scripts/ci/prek/supported_versions.py
         language: python
-        files: ^airflow-core/docs/installation/supported-versions\.rst$|^scripts/ci/pre_commit/supported_versions\.py$|^README\.md$
+        files: ^airflow-core/docs/installation/supported-versions\.rst$|^scripts/ci/prek/supported_versions\.py$|^README\.md$
         pass_filenames: false
         additional_dependencies: ['tabulate>=0.9.0']
       - id: check-revision-heads-map
         name: Check that the REVISION_HEADS_MAP is up-to-date
         language: python
-        entry: ./scripts/ci/pre_commit/check_revision_heads_map.py
+        entry: ./scripts/ci/prek/check_revision_heads_map.py
         pass_filenames: false
         files: >
           (?x)
-          ^scripts/ci/pre_commit/version_heads_map\.py$|
+          ^scripts/ci/prek/version_heads_map\.py$|
           ^airflow-core/src/airflow/migrations/versions/.*$|^airflow-core/src/airflow/migrations/versions|
           ^providers/fab/src/airflow/providers/fab/migrations/versions/.*$|^providers/fab/src/airflow/providers/fab/migrations/versions|
           ^airflow-core/src/airflow/utils/db\.py$|
@@ -551,7 +555,7 @@ repos:
         additional_dependencies: ['packaging>=23.2', 'rich>=12.4.4']
       - id: update-version
         name: Update versions in docs
-        entry: ./scripts/ci/pre_commit/update_versions.py
+        entry: ./scripts/ci/prek/update_versions.py
         language: python
         files: ^docs|^airflow-core/src/airflow/__init__\.py$|.*/pyproject\.toml$
         pass_filenames: false
@@ -603,7 +607,7 @@ repos:
       - id: check-only-new-session-with-provide-session
         name: Check NEW_SESSION is only used with @provide_session
         language: python
-        entry: ./scripts/ci/pre_commit/new_session_in_provide_session.py
+        entry: ./scripts/ci/prek/new_session_in_provide_session.py
         pass_filenames: true
         files: ^airflow-core/src/airflow/.+\.py$
         exclude: ^airflow-core/src/airflow/serialization/pydantic/.*
@@ -679,7 +683,7 @@ repos:
           ^.*/provider_conf\.py$|
           ^devel-common/src/sphinx_exts/removemarktransform\.py|
           ^airflow-core/newsfragments/41761.significant\.rst$|
-          ^scripts/ci/pre_commit/vendor_k8s_json_schema\.py$|
+          ^scripts/ci/prek/vendor_k8s_json_schema\.py$|
           ^scripts/ci/docker-compose/integration-keycloak\.yml$|
           ^scripts/ci/docker-compose/keycloak/keycloak-entrypoint\.sh$|
           ^airflow-core/tests/|
@@ -699,21 +703,21 @@ repos:
       - id: check-base-operator-partial-arguments
         name: Check BaseOperator and partial() arguments
         language: python
-        entry: ./scripts/ci/pre_commit/check_base_operator_partial_arguments.py
+        entry: ./scripts/ci/prek/check_base_operator_partial_arguments.py
         pass_filenames: false
         files: ^airflow-core/src/airflow/models/(?:base|mapped)operator\.py$
         additional_dependencies: ['rich>=12.4.4']
       - id: check-init-decorator-arguments
         name: Sync model __init__ and decorator arguments
         language: python
-        entry: ./scripts/ci/pre_commit/check_init_decorator_arguments.py
+        entry: ./scripts/ci/prek/check_init_decorator_arguments.py
         pass_filenames: false
         files: ^task-sdk/src/airflow/sdk/definitions/dag\.py$|^task-sdk/src/airflow/sdk/definitions/decorators/task_group\.py$
         additional_dependencies: ['rich>=12.4.4']
       - id: check-template-context-variable-in-sync
         name: Sync template context variable refs
         language: python
-        entry: ./scripts/ci/pre_commit/check_template_context_variable_in_sync.py
+        entry: ./scripts/ci/prek/check_template_context_variable_in_sync.py
         files: ^airflow-core/src/airflow/models/taskinstance\.py$|^task-sdk/src/airflow/sdk/definitions/context\.py$|^airflow-core/docs/templates-ref\.rst$
         additional_dependencies: ['rich>=12.4.4']
       - id: check-base-operator-usage
@@ -758,7 +762,7 @@ repos:
         name: Check providers import hook lineage code from compat
         description: Make sure you import from airflow.provider.common.compat.lineage.hook instead of
           airflow.lineage.hook.
-        entry: ./scripts/ci/pre_commit/check_airflow_imports.py
+        entry: ./scripts/ci/prek/check_airflow_imports.py
           --pattern '^airflow\.lineage\.hook'
           --message "Only TYPE_CHECKING imports from `airflow.lineage.hook` are allowed in providers."
           --only_top_level
@@ -768,7 +772,7 @@ repos:
       - id: check-decorated-operator-implements-custom-name
         name: Check @task decorator implements custom_operator_name
         language: python
-        entry: ./scripts/ci/pre_commit/decorator_operator_implements_custom_name.py
+        entry: ./scripts/ci/prek/decorator_operator_implements_custom_name.py
         pass_filenames: true
         files: ^airflow-core/src/airflow/.*\.py$
       - id: check-core-deprecation-classes
@@ -805,13 +809,13 @@ repos:
         pass_filenames: true
       - id: check-apache-license-rat
         name: Check if licenses are OK for Apache
-        entry: ./scripts/ci/pre_commit/check_license.py
+        entry: ./scripts/ci/prek/check_license.py
         language: python
         files: ^LICENSE$
         pass_filenames: false
       - id: check-aiobotocore-optional
         name: Check if aiobotocore is an optional dependency only
-        entry: ./scripts/ci/pre_commit/check_aiobotocore_optional.py
+        entry: ./scripts/ci/prek/check_aiobotocore_optional.py
         language: python
         files: ^providers/.*/provider\.yaml$
         pass_filenames: true
@@ -820,34 +824,34 @@ repos:
       - id: check-boring-cyborg-configuration
         name: Checks for Boring Cyborg configuration consistency
         language: python
-        entry: ./scripts/ci/pre_commit/boring_cyborg.py
+        entry: ./scripts/ci/prek/boring_cyborg.py
         pass_filenames: false
         require_serial: true
         additional_dependencies: ['pyyaml>=6.0.2', 'termcolor==2.5.0', 'wcmatch==8.2']
       - id: update-in-the-wild-to-be-sorted
         name: Sort INTHEWILD.md alphabetically
-        entry: ./scripts/ci/pre_commit/sort_in_the_wild.py
+        entry: ./scripts/ci/prek/sort_in_the_wild.py
         language: python
         files: ^\.pre-commit-config\.yaml$|^INTHEWILD\.md$
         pass_filenames: false
         require_serial: true
       - id: update-installed-providers-to-be-sorted
         name: Sort and uniquify installed_providers.txt
-        entry: ./scripts/ci/pre_commit/sort_installed_providers.py
+        entry: ./scripts/ci/prek/sort_installed_providers.py
         language: python
         files: ^\.pre-commit-config\.yaml$|^.*_installed_providers\.txt$
         pass_filenames: false
         require_serial: true
       - id: update-spelling-wordlist-to-be-sorted
         name: Sort spelling_wordlist.txt
-        entry: ./scripts/ci/pre_commit/sort_spelling_wordlist.py
+        entry: ./scripts/ci/prek/sort_spelling_wordlist.py
         language: python
         files: ^\.pre-commit-config\.yaml$|^docs/spelling_wordlist\.txt$
         require_serial: true
         pass_filenames: false
       - id: lint-helm-chart
         name: Lint Helm Chart
-        entry: ./scripts/ci/pre_commit/lint_helm.py
+        entry: ./scripts/ci/prek/lint_helm.py
         language: python
         pass_filenames: false
         files: ^chart
@@ -855,7 +859,7 @@ repos:
         additional_dependencies: ['rich>=12.4.4','requests>=2.31.0']
       - id: kubeconform
         name: Kubeconform check on our helm chart
-        entry: ./scripts/ci/pre_commit/check_kubeconform.py
+        entry: ./scripts/ci/prek/check_kubeconform.py
         language: python
         pass_filenames: false
         files: ^chart
@@ -873,14 +877,14 @@ repos:
         stages: ['manual']
         types_or: [javascript, ts, tsx]
         files: ^airflow-core/src/airflow/ui/|^airflow-core/src/airflow/api_fastapi/auth/managers/simple/ui/
-        entry: ./scripts/ci/pre_commit/compile_ui_assets.py
+        entry: ./scripts/ci/prek/compile_ui_assets.py
         pass_filenames: false
         additional_dependencies: ['pnpm@9.7.1']
       - id: compile-fab-assets
         name: Compile FAB provider assets
         language: node
         files: ^providers/fab/.*/www/
-        entry: ./scripts/ci/pre_commit/compile_fab_assets.py
+        entry: ./scripts/ci/prek/compile_fab_assets.py
         pass_filenames: false
         additional_dependencies: ['yarn@1.22.21']
       - id: compile-ui-assets-dev
@@ -889,30 +893,20 @@ repos:
         stages: ['manual']
         types_or: [javascript, ts, tsx]
         files: ^airflow-core/src/airflow/ui/|^airflow-core/src/airflow/api_fastapi/auth/managers/simple/ui/
-        entry: ./scripts/ci/pre_commit/compile_ui_assets_dev.py
+        entry: ./scripts/ci/prek/compile_ui_assets_dev.py
         pass_filenames: false
         additional_dependencies: ['pnpm@9.7.1']
       - id: check-providers-subpackages-init-file-exist
         name: Provider subpackage init files are there
         pass_filenames: false
         always_run: true
-        entry: ./scripts/ci/pre_commit/check_providers_subpackages_all_have_init.py
+        entry: ./scripts/ci/prek/check_providers_subpackages_all_have_init.py
         language: python
         require_serial: true
         additional_dependencies: ['rich>=12.4.4']
-      - id: check-pre-commit-information-consistent
-        name: Validate hook IDs & names and sync with docs
-        entry: ./scripts/ci/pre_commit/check_pre_commit_hooks.py
-        args:
-          - --max-length=53
-        language: python
-        files: ^\.pre-commit-config\.yaml$|^scripts/ci/pre_commit/check_pre_commit_hooks\.py$
-        additional_dependencies: ['pyyaml>=6.0.2', 'jinja2', 'black==24.10.0', 'tabulate>=0.9.0', 'rich>=12.4.4']
-        require_serial: true
-        pass_filenames: false
       - id: check-integrations-list-consistent
         name: Sync integrations list with docs
-        entry: ./scripts/ci/pre_commit/check_integrations_list.py
+        entry: ./scripts/ci/prek/check_integrations_list.py
         language: python
         files: ^scripts/ci/docker-compose/integration-.*\.yml$|^contributing-docs/testing/integration_tests\.rst$
         additional_dependencies: ['black==24.10.0', 'tabulate>=0.9.0', 'rich>=12.4.4', 'pyyaml>=6.0.2']
@@ -921,7 +915,7 @@ repos:
       - id: update-breeze-readme-config-hash
         name: Update Breeze README.md with config files hash
         language: python
-        entry: ./scripts/ci/pre_commit/update_breeze_config_hash.py
+        entry: ./scripts/ci/prek/update_breeze_config_hash.py
         files: ^dev/breeze/pyproject\.toml$|^dev/breeze/README\.md$
         pass_filenames: false
         require_serial: true
@@ -929,15 +923,20 @@ repos:
       - id: update-pyproject-toml
         name: Update Airflow's meta-package pyproject.toml
         language: python
-        entry: ./scripts/ci/pre_commit/update_airflow_pyproject_toml.py
-        files: ^.*/pyproject\.toml$|^scripts/ci/pre_commit/update_airflow_pyproject_toml\.py$
+        entry: ./scripts/ci/prek/update_airflow_pyproject_toml.py
+        files: >
+          (?x)
+          ^.*/pyproject\.toml$|
+          ^scripts/ci/prek/update_airflow_pyproject_toml\.py$|
+          ^providers/.*/pyproject\.toml$|
+          ^providers/.*/provider\.yaml$
         pass_filenames: false
         require_serial: true
         additional_dependencies: ['rich>=12.4.4', 'tomli>=2.0.1', 'packaging>=23.2' ]
       - id: update-reproducible-source-date-epoch
         name: Update Source Date Epoch for reproducible builds
         language: python
-        entry: ./scripts/ci/pre_commit/update_source_date_epoch.py
+        entry: ./scripts/ci/prek/update_source_date_epoch.py
         files: ^RELEASE_NOTES\.rst$|^chart/RELEASE_NOTES\.rst$
         additional_dependencies: ['rich>=12.4.4', 'pyyaml>=6.0.2']
         pass_filenames: false
@@ -953,7 +952,7 @@ repos:
         additional_dependencies: ['click>=8.1.8', 'rich>=12.4.4', 'pyyaml>=6.0.2']
       - id: check-tests-in-the-right-folders
         name: Check if tests are in the right folders
-        entry: ./scripts/ci/pre_commit/check_tests_in_right_folders.py
+        entry: ./scripts/ci/prek/check_tests_in_right_folders.py
         language: python
         files: ^airflow-core/tests/.*\.py$
         pass_filenames: true
@@ -961,14 +960,14 @@ repos:
         additional_dependencies: ['rich>=12.4.4']
       - id: check-system-tests-present
         name: Check if system tests have required segments of code
-        entry: ./scripts/ci/pre_commit/check_system_tests.py
+        entry: ./scripts/ci/prek/check_system_tests.py
         language: python
         files: ^.*/tests/system/.*/example_[^/]*\.py$
         pass_filenames: true
         additional_dependencies: ['rich>=12.4.4']
       - id: generate-pypi-readme
         name: Generate PyPI README
-        entry: ./scripts/ci/pre_commit/generate_pypi_readme.py
+        entry: ./scripts/ci/prek/generate_pypi_readme.py
         language: python
         files: ^README\.md$
         pass_filenames: false
@@ -982,10 +981,10 @@ repos:
         additional_dependencies: ['markdownlint-cli@0.38.0']
       - id: lint-json-schema
         name: Lint JSON Schema files
-        entry: ./scripts/ci/pre_commit/lint_json_schema.py
+        entry: ./scripts/ci/prek/lint_json_schema.py
         args:
           - --spec-file
-          - scripts/ci/pre_commit/draft7_schema.json
+          - scripts/ci/prek/draft7_schema.json
         language: python
         pass_filenames: true
         files: .*\.schema\.json$
@@ -993,7 +992,7 @@ repos:
         additional_dependencies: ['jsonschema>=3.2.0,<5.0', 'pyyaml>=6.0.2', 'requests==2.32.3', 'rich>=12.4.4']
       - id: lint-json-schema
         name: Lint NodePort Service
-        entry: ./scripts/ci/pre_commit/lint_json_schema.py
+        entry: ./scripts/ci/prek/lint_json_schema.py
         args:
           - --spec-url
           - https://raw.githubusercontent.com/yannh/kubernetes-json-schema/master/v1.20.2-standalone/service-v1.json
@@ -1004,7 +1003,7 @@ repos:
         additional_dependencies: ['jsonschema>=3.2.0,<5.0', 'pyyaml>=6.0.2', 'requests==2.32.3', 'rich>=12.4.4']
       - id: lint-json-schema
         name: Lint Docker compose files
-        entry: ./scripts/ci/pre_commit/lint_json_schema.py
+        entry: ./scripts/ci/prek/lint_json_schema.py
         args:
           - --spec-url
           - https://raw.githubusercontent.com/compose-spec/compose-spec/master/schema/compose-spec.json
@@ -1020,7 +1019,7 @@ repos:
         additional_dependencies: ['jsonschema>=3.2.0,<5.0', 'pyyaml>=6.0.2', 'requests==2.32.3', 'rich>=12.4.4']
       - id: lint-json-schema
         name: Lint chart/values.schema.json
-        entry: ./scripts/ci/pre_commit/lint_json_schema.py
+        entry: ./scripts/ci/prek/lint_json_schema.py
         args:
           - --spec-file
           - chart/values_schema.schema.json
@@ -1032,13 +1031,13 @@ repos:
         additional_dependencies: ['jsonschema>=3.2.0,<5.0', 'pyyaml>=6.0.2', 'requests==2.32.3', 'rich>=12.4.4']
       - id: update-vendored-in-k8s-json-schema
         name: Vendor k8s definitions into values.schema.json
-        entry: ./scripts/ci/pre_commit/vendor_k8s_json_schema.py
+        entry: ./scripts/ci/prek/vendor_k8s_json_schema.py
         language: python
         files: ^chart/values\.schema\.json$
         additional_dependencies: ['requests==2.32.3']
       - id: lint-json-schema
         name: Lint chart/values.yaml
-        entry: ./scripts/ci/pre_commit/lint_json_schema.py
+        entry: ./scripts/ci/prek/lint_json_schema.py
         args:
           - --enforce-defaults
           - --spec-file
@@ -1051,7 +1050,7 @@ repos:
         additional_dependencies: ['jsonschema>=3.2.0,<5.0', 'pyyaml>=6.0.2', 'requests==2.32.3', 'rich>=12.4.4']
       - id: lint-json-schema
         name: Lint config_templates/config.yml
-        entry: ./scripts/ci/pre_commit/lint_json_schema.py
+        entry: ./scripts/ci/prek/lint_json_schema.py
         args:
           - --spec-file
           - airflow-core/src/airflow/config_templates/config.yml.schema.json
@@ -1063,14 +1062,14 @@ repos:
       - id: check-persist-credentials-disabled-in-github-workflows
         name: Check persistent creds in workflow files
         description: Check that workflow files have persist-credentials disabled
-        entry: ./scripts/ci/pre_commit/checkout_no_credentials.py
+        entry: ./scripts/ci/prek/checkout_no_credentials.py
         language: python
         pass_filenames: true
         files: ^\.github/workflows/.*\.yml$
         additional_dependencies: ['pyyaml>=6.0.1', 'rich>=12.4.4']
       - id: check-docstring-param-types
         name: Check that docstrings do not specify param types
-        entry: ./scripts/ci/pre_commit/docstring_param_type.py
+        entry: ./scripts/ci/prek/docstring_param_type.py
         language: python
         pass_filenames: true
         files: \.py$
@@ -1085,21 +1084,21 @@ repos:
         files: \.zip$
       - id: check-code-deprecations
         name: Check deprecations categories in decorators
-        entry: ./scripts/ci/pre_commit/check_deprecations.py
+        entry: ./scripts/ci/prek/check_deprecations.py
         language: python
         pass_filenames: true
         files: ^airflow-core/src/airflow/.*\.py$
         additional_dependencies: ['rich>=12.4.4', 'python-dateutil>=2.9.0']
       - id: lint-chart-schema
         name: Lint chart/values.schema.json file
-        entry: ./scripts/ci/pre_commit/chart_schema.py
+        entry: ./scripts/ci/prek/chart_schema.py
         language: python
         pass_filenames: false
         files: ^chart/values\.schema\.json$
         require_serial: true
       - id: update-inlined-dockerfile-scripts
         name: Inline Dockerfile and Dockerfile.ci scripts
-        entry: ./scripts/ci/pre_commit/inline_scripts_in_docker.py
+        entry: ./scripts/ci/prek/inline_scripts_in_docker.py
         language: python
         pass_filenames: false
         files: ^Dockerfile$|^Dockerfile\.ci$|^scripts/docker/.*$
@@ -1108,19 +1107,19 @@ repos:
         name: Check changelogs for duplicate entries
         language: python
         files: changelog\.(rst|txt)$
-        entry: ./scripts/ci/pre_commit/changelog_duplicates.py
+        entry: ./scripts/ci/prek/changelog_duplicates.py
         pass_filenames: true
       - id: check-changelog-format
         name: Check changelog format
         language: python
         files: changelog\.(rst|txt)$
-        entry: ./scripts/ci/pre_commit/check_changelog_format.py
+        entry: ./scripts/ci/prek/check_changelog_format.py
         pass_filenames: true
       - id: check-newsfragments-are-valid
         name: Check newsfragments are valid
         language: python
         files: newsfragments/.*\.rst$
-        entry: ./scripts/ci/pre_commit/newsfragments.py
+        entry: ./scripts/ci/prek/newsfragments.py
         pass_filenames: true
         # We sometimes won't have newsfragments in the repo, so always run it so `check-hooks-apply` passes
         # This is fast, so not too much downside
@@ -1129,8 +1128,8 @@ repos:
         name: Check significant newsfragments are valid
         # Significant newsfragments follows a special format so that we can group information easily.
         language: python
-        files: airflow-core/newsfragments/.*\.rst$
-        entry: ./scripts/ci/pre_commit/significant_newsfragments_checker.py
+        files: ^airflow-core/newsfragments/.*\.rst$
+        entry: ./scripts/ci/prek/significant_newsfragments_checker.py
         pass_filenames: false
         additional_dependencies: ['docutils>=0.21.2', 'pygments>=2.19.1', 'jinja2>=3.1.5']
         # We sometimes won't have newsfragments in the repo, so always run it so `check-hooks-apply` passes
@@ -1139,20 +1138,20 @@ repos:
       - id: update-breeze-cmd-output
         name: Update breeze docs
         description: Update output of breeze commands in Breeze documentation
-        entry: ./scripts/ci/pre_commit/breeze_cmd_line.py
+        entry: ./scripts/ci/prek/breeze_cmd_line.py
         language: python
         files: >
           (?x)
           ^dev/breeze/.*$|
           ^\.pre-commit-config\.yaml$|
-          ^scripts/ci/pre_commit/breeze_cmd_line\.py$|
+          ^scripts/ci/prek/breeze_cmd_line\.py$|
           ^generated/provider_dependencies\.json$
         require_serial: true
         pass_filenames: false
         additional_dependencies: ['rich>=12.4.4']
       - id: check-example-dags-urls
         name: Check that example dags url include provider versions
-        entry: ./scripts/ci/pre_commit/update_example_dags_paths.py
+        entry: ./scripts/ci/prek/update_example_dags_paths.py
         language: python
         pass_filenames: true
         files: ^airflow-core/docs/.*example-dags\.rst$|^docs/.*index\.rst$^airflow-core/docs/.*index\.rst$
@@ -1160,21 +1159,21 @@ repos:
         always_run: true
       - id: check-system-tests-tocs
         name: Check that system tests is properly added
-        entry: ./scripts/ci/pre_commit/check_system_tests_hidden_in_index.py
+        entry: ./scripts/ci/prek/check_system_tests_hidden_in_index.py
         language: python
         pass_filenames: true
         files: ^providers/.*/docs/index\.rst$
         additional_dependencies: ['rich>=12.4.4', 'pyyaml>=6.0.2']
       - id: check-lazy-logging
         name: Check that all logging methods are lazy
-        entry: ./scripts/ci/pre_commit/check_lazy_logging.py
+        entry: ./scripts/ci/prek/check_lazy_logging.py
         language: python
         pass_filenames: true
         files: \.py$
         additional_dependencies: ['rich>=12.4.4', 'astor>=0.8.1']
       - id: create-missing-init-py-files-tests
         name: Create missing init.py files in tests
-        entry: ./scripts/ci/pre_commit/check_init_in_tests.py
+        entry: ./scripts/ci/prek/check_init_in_tests.py
         language: python
         additional_dependencies: ['rich>=12.4.4']
         pass_filenames: false
@@ -1182,13 +1181,13 @@ repos:
       - id: check-tests-unittest-testcase
         name: Unit tests do not inherit from unittest.TestCase
         description: Check that unit tests do not inherit from unittest.TestCase
-        entry: ./scripts/ci/pre_commit/unittest_testcase.py
+        entry: ./scripts/ci/prek/unittest_testcase.py
         language: python
         pass_filenames: true
         files: ^airflow-core/tests/.*\.py$
       - id: check-provider-docs-valid
         name: Validate provider doc files
-        entry: ./scripts/ci/pre_commit/check_provider_docs.py
+        entry: ./scripts/ci/prek/check_provider_docs.py
         language: python
         files: ^providers/.*/provider\.yaml$|^.*/docs/.*
         additional_dependencies: ['rich>=12.4.4', 'pyyaml>=6.0.2', 'jinja2']
@@ -1266,7 +1265,7 @@ repos:
           (?x)
           ^airflow-core/src/airflow/ui/node-modules/.*|
           ^airflow-core/src/airflow/ui/.pnpm-store
-        entry: ./scripts/ci/pre_commit/ts_compile_lint_ui.py
+        entry: ./scripts/ci/prek/ts_compile_lint_ui.py
         additional_dependencies: ['pnpm@9.7.1']
         pass_filenames: true
         require_serial: true
@@ -1283,16 +1282,16 @@ repos:
           (?x)
           ^airflow-core/src/airflow/api_fastapi/node-modules/.*|
           ^airflow-core/src/airflow/api_fastapi/.pnpm-store
-        entry: ./scripts/ci/pre_commit/ts_compile_lint_simple_auth_manager_ui.py
+        entry: ./scripts/ci/prek/ts_compile_lint_simple_auth_manager_ui.py
         additional_dependencies: ['pnpm@9.7.1']
         pass_filenames: true
         require_serial: true
-        ## ADD MOST PRE-COMMITS ABOVE THAT LINE
-        # The below pre-commits are those requiring CI image to be built
+        ## ADD MOST PREK HOOK ABOVE THAT LINE
+        # The below prek hooks are those requiring CI image to be built
       - id: mypy-dev
         name: Run mypy for dev
         language: python
-        entry: ./scripts/ci/pre_commit/mypy.py
+        entry: ./scripts/ci/prek/mypy.py
         files: ^dev/.*\.py$|^scripts/.*\.py$
         require_serial: true
         additional_dependencies: ['rich>=12.4.4']
@@ -1300,7 +1299,7 @@ repos:
         stages: ['manual']
         name: Run mypy for dev (manual)
         language: python
-        entry: ./scripts/ci/pre_commit/mypy_folder.py dev
+        entry: ./scripts/ci/prek/mypy_folder.py dev
         pass_filenames: false
         files: ^.*\.py$
         require_serial: true
@@ -1308,15 +1307,15 @@ repos:
       - id: mypy-airflow-core
         name: Run mypy for airflow-core
         language: python
-        entry: ./scripts/ci/pre_commit/mypy.py
-        files: airflow-core/.*\.py$
+        entry: ./scripts/ci/prek/mypy.py
+        files: ^airflow-core/.*\.py$
         require_serial: true
         additional_dependencies: ['rich>=12.4.4']
       - id: mypy-airflow-core
         stages: ['manual']
         name: Run mypy for airflow-core (manual)
         language: python
-        entry: ./scripts/ci/pre_commit/mypy_folder.py airflow-core
+        entry: ./scripts/ci/prek/mypy_folder.py airflow-core
         pass_filenames: false
         files: airflow-core/.*\.py$
         require_serial: true
@@ -1324,7 +1323,7 @@ repos:
       - id: mypy-providers
         name: Run mypy for providers
         language: python
-        entry: ./scripts/ci/pre_commit/mypy.py
+        entry: ./scripts/ci/prek/mypy.py
         files: ^providers/.*\.py$
         require_serial: true
         additional_dependencies: ['rich>=12.4.4']
@@ -1332,7 +1331,7 @@ repos:
         stages: ['manual']
         name: Run mypy for providers (manual)
         language: python
-        entry: ./scripts/ci/pre_commit/mypy_folder.py providers
+        entry: ./scripts/ci/prek/mypy_folder.py providers
         pass_filenames: false
         files: ^.*\.py$
         require_serial: true
@@ -1340,7 +1339,7 @@ repos:
       - id: mypy-task-sdk
         name: Run mypy for task-sdk
         language: python
-        entry: ./scripts/ci/pre_commit/mypy.py
+        entry: ./scripts/ci/prek/mypy.py
         files: ^task-sdk/.*\.py$
         require_serial: true
         additional_dependencies: ['rich>=12.4.4']
@@ -1348,7 +1347,7 @@ repos:
         stages: ['manual']
         name: Run mypy for task-sdk (manual)
         language: python
-        entry: ./scripts/ci/pre_commit/mypy_folder.py task-sdk
+        entry: ./scripts/ci/prek/mypy_folder.py task-sdk
         pass_filenames: false
         files: ^.*\.py$
         require_serial: true
@@ -1356,7 +1355,7 @@ repos:
       - id: mypy-devel-common
         name: Run mypy for devel-common
         language: python
-        entry: ./scripts/ci/pre_commit/mypy.py
+        entry: ./scripts/ci/prek/mypy.py
         files: ^devel-common/.*\.py$
         require_serial: true
         additional_dependencies: ['rich>=12.4.4']
@@ -1364,24 +1363,7 @@ repos:
         stages: ['manual']
         name: Run mypy for devel-common (manual)
         language: python
-        entry: ./scripts/ci/pre_commit/mypy_folder.py devel-common
-        pass_filenames: false
-        files: ^.*\.py$
-        require_serial: true
-        additional_dependencies: ['rich>=12.4.4']
-      - id: mypy-airflow-ctl
-        name: Run mypy for airflow-ctl
-        language: python
-        entry: ./scripts/ci/pre_commit/mypy.py
-        files: ^airflow-ctl/src/airflowctl/.*\.py$|^airflow-ctl/tests/.*\.py$
-        exclude: .*generated.py
-        require_serial: true
-        additional_dependencies: ['rich>=12.4.4']
-      - id: mypy-airflow-ctl
-        stages: ['manual']
-        name: Run mypy for airflow-ctl (manual)
-        language: python
-        entry: ./scripts/ci/pre_commit/mypy_folder.py airflow-ctl
+        entry: ./scripts/ci/prek/mypy_folder.py devel-common
         pass_filenames: false
         files: ^.*\.py$
         require_serial: true
@@ -1389,7 +1371,7 @@ repos:
       - id: generate-openapi-spec
         name: Generate the FastAPI API spec
         language: python
-        entry: ./scripts/ci/pre_commit/generate_openapi_spec.py
+        entry: ./scripts/ci/prek/generate_openapi_spec.py
         pass_filenames: false
         files: ^airflow-core/src/airflow/api_fastapi/.*\.py$|^airflow-core/src/airflow/api_fastapi/auth/managers/simple/.*\.py$|^providers/fab/src/airflow/providers/fab/auth_manager/api_fastapi/.*\.py$
         exclude: ^airflow-core/src/airflow/api_fastapi/execution_api/.*
@@ -1397,14 +1379,14 @@ repos:
       - id: generate-openapi-spec-fab
         name: Generate the FastAPI API spec for FAB
         language: python
-        entry: ./scripts/ci/pre_commit/generate_openapi_spec_fab.py
+        entry: ./scripts/ci/prek/generate_openapi_spec_fab.py
         pass_filenames: false
         files: ^airflow-core/src/airflow/api_fastapi/.*\.py$|^airflow-core/src/airflow/api_fastapi/auth/managers/simple/.*\.py$|^providers/fab/src/airflow/providers/fab/auth_manager/api_fastapi/.*\.py$
         exclude: ^airflow-core/src/airflow/api_fastapi/execution_api/.*
         additional_dependencies: ['rich>=12.4.4', 'openapi-spec-validator>=0.7.1']
       - id: check-provider-yaml-valid
         name: Validate provider.yaml files
-        entry: ./scripts/ci/pre_commit/check_provider_yaml_files.py
+        entry: ./scripts/ci/prek/check_provider_yaml_files.py
         language: python
         files: ^providers/.*/provider\.yaml$
         exclude: ^providers/.*/.venv/.*$
@@ -1413,14 +1395,14 @@ repos:
       - id: check-template-fields-valid
         name: Check templated fields mapped in operators/sensors
         language: python
-        entry: ./scripts/ci/pre_commit/check_template_fields.py
+        entry: ./scripts/ci/prek/check_template_fields.py
         files: ^(providers/.*/)?airflow-core/.*/(sensors|operators)/.*\.py$
         additional_dependencies: ['rich>=12.4.4']
         require_serial: true
       - id: update-migration-references
         name: Update migration ref doc
         language: python
-        entry: ./scripts/ci/pre_commit/migration_reference.py
+        entry: ./scripts/ci/prek/migration_reference.py
         pass_filenames: false
         files: ^airflow-core/src/airflow/migrations/versions/.*\.py$|^airflow-core/docs/migrations-ref\.rst$
         additional_dependencies: ['rich>=12.4.4']
@@ -1434,16 +1416,16 @@ repos:
       - id: update-er-diagram
         name: Update ER diagram
         language: python
-        entry: ./scripts/ci/pre_commit/update_er_diagram.py
+        entry: ./scripts/ci/prek/update_er_diagram.py
         pass_filenames: false
         files: ^airflow-core/src/airflow/migrations/versions/.*\.py$|^airflow-core/docs/migrations-ref\.rst$
         additional_dependencies: ['rich>=12.4.4']
       - id: check-default-configuration
         name: Check the default configuration
-        entry: ./scripts/ci/pre_commit/check_default_configuration.py
+        entry: ./scripts/ci/prek/check_default_configuration.py
         language: python
         additional_dependencies: ['rich>=12.4.4']
         require_serial: true
         pass_filenames: false
         files: ^airflow-core/src/airflow/config_templates/config\.yml$
-        ## ONLY ADD PRE-COMMITS HERE THAT REQUIRE CI IMAGE
+        ## ONLY ADD PREK HOOKS HERE THAT REQUIRE CI IMAGE
diff --git a/.rat-excludes b/.rat-excludes
index 95e31f35fba..1c2a620f8f6 100644
--- a/.rat-excludes
+++ b/.rat-excludes
@@ -175,3 +175,11 @@ auth_generated.py
 
 # hash files
 www-hash.txt
+
+# go setup files
+go.mod
+go.sum
+mocks/*
+
+# Kubernetes env
+.env
diff --git a/AGENTS.md b/AGENTS.md
new file mode 100644
index 00000000000..43afab4e7db
--- /dev/null
+++ b/AGENTS.md
@@ -0,0 +1,47 @@
+<!--
+ Licensed to the Apache Software Foundation (ASF) under one
+ or more contributor license agreements.  See the NOTICE file
+ distributed with this work for additional information
+ regarding copyright ownership.  The ASF licenses this file
+ to you under the Apache License, Version 2.0 (the
+ "License"); you may not use this file except in compliance
+ with the License.  You may obtain a copy of the License at
+
+   http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing,
+ software distributed under the License is distributed on an
+ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ KIND, either express or implied.  See the License for the
+ specific language governing permissions and limitations
+ under the License.
+ -->
+
+# AGENTS instructions
+
+The main developer documentation lives in the `contributing-docs` directory. The following points summarise
+how to set up the environment, run checks, build docs and follow the PR workflow.
+
+## Local virtualenv and Breeze
+
+- [`07_local_virtualenv.rst`](contributing-docs/07_local_virtualenv.rst) explains how to prepare a local Python environment using `uv`. The tool creates and syncs a `.venv` and installs dependencies with commands such as `uv venv` and `uv sync`.
+- [`06_development_environments.rst`](contributing-docs/06_development_environments.rst) compares the local virtualenv with the Docker based Breeze environment. Breeze replicates CI and includes services like databases for integration tests.
+
+## Prek hooks
+
+- Installation and usage of `prek` are described in [`03_contributors_quick_start.rst`](contributing-docs/03_contributors_quick_start.rst). Install with `uv tool install prek` and run checks via `prek --all-files`.
+- [`08_static_code_checks.rst`](contributing-docs/08_static_code_checks.rst) provides more details on the available hooks and prerequisites. Enable the hooks with `prek install` so they run automatically on each commit.
+
+## Running tests
+
+- [`03_contributors_quick_start.rst`](contributing-docs/03_contributors_quick_start.rst) shows running tests inside Breeze. Use `pytest` inside the container for individual files or invoke `breeze testing` commands to run full suites, e.g. `breeze --backend postgres --python 3.10 testing tests --test-type All`.
+
+## Building documentation
+
+- Documentation can be built locally using `uv run --group docs build-docs` as described in [`11_documentation_building.rst`](contributing-docs/11_documentation_building.rst). Within Breeze the equivalent command is `breeze build-docs`.
+
+## Pull request guidelines
+
+- Follow the PR guidance in [`05_pull_requests.rst`](contributing-docs/05_pull_requests.rst). Always add tests, keep your branch rebased instead of merged, and adhere to the commit message recommendations from [cbea.ms/git-commit](https://cbea.ms/git-commit/).
+
+For advanced topics such as packaging providers and API versioning see [`12_provider_distributions.rst`](contributing-docs/12_provider_distributions.rst) and [`19_execution_api_versioning.rst`](contributing-docs/19_execution_api_versioning.rst).
diff --git a/Dockerfile b/Dockerfile
index a272f594002..f2cb78c15c6 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -57,7 +57,7 @@ ARG PYTHON_BASE_IMAGE="python:3.9-slim-bookworm"
 ARG AIRFLOW_PIP_VERSION=25.2
 # ARG AIRFLOW_PIP_VERSION="git+https://github.com/pypa/pip.git@main"
 ARG AIRFLOW_SETUPTOOLS_VERSION=80.9.0
-ARG AIRFLOW_UV_VERSION=0.8.8
+ARG AIRFLOW_UV_VERSION=0.8.11
 ARG AIRFLOW_USE_UV="false"
 ARG UV_HTTP_TIMEOUT="300"
 ARG AIRFLOW_IMAGE_REPOSITORY="https://github.com/apache/airflow"
@@ -87,7 +87,7 @@ FROM scratch as scripts
 
 ##############################################################################################
 # Please DO NOT modify the inlined scripts manually. The content of those files will be
-# replaced by pre-commit automatically from the "scripts/docker/" folder.
+# replaced by prek automatically from the "scripts/docker/" folder.
 # This is done in order to avoid problems with caching and file permissions and in order to
 # make the PROD Dockerfile standalone
 ##############################################################################################
@@ -615,20 +615,19 @@ function common::install_packaging_tools() {
             pip install --root-user-action ignore --disable-pip-version-check "uv==${AIRFLOW_UV_VERSION}"
         fi
     fi
-    if  [[ ${AIRFLOW_PRE_COMMIT_VERSION=} == "" ]]; then
+    if  [[ ${AIRFLOW_PREK_VERSION=} == "" ]]; then
         echo
-        echo "${COLOR_BLUE}Installing latest pre-commit with pre-commit-uv uv${COLOR_RESET}"
+        echo "${COLOR_BLUE}Installing latest prek, uv${COLOR_RESET}"
         echo
-        uv tool install pre-commit --with pre-commit-uv --with uv
+        uv tool install prek --with uv
         # make sure that the venv/user in .local exists
         mkdir -p "${HOME}/.local/bin"
     else
         echo
-        echo "${COLOR_BLUE}Installing predefined versions of pre-commit with pre-commit-uv and uv:${COLOR_RESET}"
-        echo "${COLOR_BLUE}pre_commit(${AIRFLOW_PRE_COMMIT_VERSION}) uv(${AIRFLOW_UV_VERSION}) pre_commit-uv(${AIRFLOW_PRE_COMMIT_UV_VERSION})${COLOR_RESET}"
+        echo "${COLOR_BLUE}Installing predefined versions of prek, uv:${COLOR_RESET}"
+        echo "${COLOR_BLUE}prek(${AIRFLOW_PREK_VERSION}) uv(${AIRFLOW_UV_VERSION})${COLOR_RESET}"
         echo
-        uv tool install "pre-commit==${AIRFLOW_PRE_COMMIT_VERSION}" \
-            --with "uv==${AIRFLOW_UV_VERSION}" --with "pre-commit-uv==${AIRFLOW_PRE_COMMIT_UV_VERSION}"
+        uv tool install "prek==${AIRFLOW_PREK_VERSION}" --with "uv==${AIRFLOW_UV_VERSION}"
         # make sure that the venv/user in .local exists
         mkdir -p "${HOME}/.local/bin"
     fi
diff --git a/Dockerfile.ci b/Dockerfile.ci
index bda99440e9e..202a3eaf7dc 100644
--- a/Dockerfile.ci
+++ b/Dockerfile.ci
@@ -26,7 +26,7 @@ FROM ${BASE_IMAGE} as scripts
 
 ##############################################################################################
 # Please DO NOT modify the inlined scripts manually. The content of those files will be
-# replaced by pre-commit automatically from the "scripts/docker/" folder.
+# replaced by prek automatically from the "scripts/docker/" folder.
 # This is done in order to avoid problems with caching and file permissions and in order to
 # make the PROD Dockerfile standalone
 ##############################################################################################
@@ -584,20 +584,19 @@ function common::install_packaging_tools() {
             pip install --root-user-action ignore --disable-pip-version-check "uv==${AIRFLOW_UV_VERSION}"
         fi
     fi
-    if  [[ ${AIRFLOW_PRE_COMMIT_VERSION=} == "" ]]; then
+    if  [[ ${AIRFLOW_PREK_VERSION=} == "" ]]; then
         echo
-        echo "${COLOR_BLUE}Installing latest pre-commit with pre-commit-uv uv${COLOR_RESET}"
+        echo "${COLOR_BLUE}Installing latest prek, uv${COLOR_RESET}"
         echo
-        uv tool install pre-commit --with pre-commit-uv --with uv
+        uv tool install prek --with uv
         # make sure that the venv/user in .local exists
         mkdir -p "${HOME}/.local/bin"
     else
         echo
-        echo "${COLOR_BLUE}Installing predefined versions of pre-commit with pre-commit-uv and uv:${COLOR_RESET}"
-        echo "${COLOR_BLUE}pre_commit(${AIRFLOW_PRE_COMMIT_VERSION}) uv(${AIRFLOW_UV_VERSION}) pre_commit-uv(${AIRFLOW_PRE_COMMIT_UV_VERSION})${COLOR_RESET}"
+        echo "${COLOR_BLUE}Installing predefined versions of prek, uv:${COLOR_RESET}"
+        echo "${COLOR_BLUE}prek(${AIRFLOW_PREK_VERSION}) uv(${AIRFLOW_UV_VERSION})${COLOR_RESET}"
         echo
-        uv tool install "pre-commit==${AIRFLOW_PRE_COMMIT_VERSION}" \
-            --with "uv==${AIRFLOW_UV_VERSION}" --with "pre-commit-uv==${AIRFLOW_PRE_COMMIT_UV_VERSION}"
+        uv tool install "prek==${AIRFLOW_PREK_VERSION}" --with "uv==${AIRFLOW_UV_VERSION}"
         # make sure that the venv/user in .local exists
         mkdir -p "${HOME}/.local/bin"
     fi
@@ -1314,7 +1313,7 @@ ENV DEV_APT_COMMAND=${DEV_APT_COMMAND} \
 
 ARG AIRFLOW_PYTHON_VERSION=v3.10.18
 ENV AIRFLOW_PYTHON_VERSION=$AIRFLOW_PYTHON_VERSION
-ENV GOLANG_MAJOR_MINOR_VERSION=1.24.6
+ENV GOLANG_MAJOR_MINOR_VERSION=1.25.0
 
 COPY --from=scripts install_os_dependencies_ci.sh /scripts/docker/
 
@@ -1445,17 +1444,16 @@ COPY --from=scripts common.sh install_packaging_tools.sh install_additional_depe
 ARG AIRFLOW_PIP_VERSION=25.2
 # ARG AIRFLOW_PIP_VERSION="git+https://github.com/pypa/pip.git@main"
 ARG AIRFLOW_SETUPTOOLS_VERSION=80.9.0
-ARG AIRFLOW_UV_VERSION=0.8.8
+ARG AIRFLOW_UV_VERSION=0.8.11
 # TODO(potiuk): automate with upgrade check (possibly)
-ARG AIRFLOW_PRE_COMMIT_VERSION="4.3.0"
-ARG AIRFLOW_PRE_COMMIT_UV_VERSION="4.1.4"
+ARG AIRFLOW_PREK_VERSION="0.0.26"
 
 ENV AIRFLOW_PIP_VERSION=${AIRFLOW_PIP_VERSION} \
     AIRFLOW_SETUPTOOLS_VERSION=${AIRFLOW_SETUPTOOLS_VERSION} \
     AIRFLOW_UV_VERSION=${AIRFLOW_UV_VERSION} \
     # This is needed since we are using cache mounted from the host
     UV_LINK_MODE=copy \
-    AIRFLOW_PRE_COMMIT_VERSION=${AIRFLOW_PRE_COMMIT_VERSION}
+    AIRFLOW_PREK_VERSION=${AIRFLOW_PREK_VERSION}
 
 # The PATH is needed for PIPX to find the tools installed
 ENV PATH="/root/.local/bin:${PATH}"
diff --git a/INSTALL b/INSTALL
index b7a6a516026..07003c6693c 100644
--- a/INSTALL
+++ b/INSTALL
@@ -80,12 +80,12 @@ by running the following command:
     uv sync --all-packages
 
 With `uv` you can also install tools that are needed for other tasks described later - breeze,
-pre-commit, hatch, cherry-picker etc. It is highly recommended to install breeze and pre-commit, hatch
+prek, hatch, cherry-picker etc. It is highly recommended to install breeze and prek, hatch
 and flit are useful to build packages (so might be useful by release managers), and cherry-picker is
 useful for backporting changes to previous versions of Airflow.
 
     uv tool install -e ./dev/breeze
-    uv tool install pre-commit --with pre-commit-uv
+    uv tool install prek
 
     uv tool install hatch
     uv tool install flit
@@ -94,10 +94,10 @@ useful for backporting changes to previous versions of Airflow.
 
 Those are all tools useful for Airflow development.
 
-It is recommended to run `pre-commit install` after installing `pre-commit` to install the git hooks - they
-will take care about running airflow pre-commit checks automatically.
+It is recommended to run `prek install` after installing `prek` to install the git hooks - they
+will take care about running airflow prek checks automatically.
 
-    pre-commit install
+    prek install
 
 You can run any command in the virtual environment created by `uv` by prefixing it with `uv run`:
 
@@ -112,16 +112,16 @@ Compiling front-end assets
 
 In order to see UI in Airflow, you need to compile front-end assets first.
 
-In case you already installed `breeze` and `pre-commit`, you can build the assets with
+In case you already installed `breeze` and `prek`, you can build the assets with
 the following commands:
 
-    pre-commit run --hook-stage manual compile-ui-assets --all-files
+    prek --hook-stage manual compile-ui-assets --all-files
 
 or simply:
 
     breeze compile-ui-assets
 
-Both commands will install node and pmpm under the hood, to a dedicated pre-commit
+Both commands will install node and pmpm under the hood, to a dedicated prek
 node environment and then build the assets.
 
 If you want to manually run the build check for node and pnpm version in `.pre-commit-config.yaml` file,
@@ -140,7 +140,7 @@ This will also clean-up the generated files,update `git_version` file in the Air
 it in the UI) that should contain the git commit hash of the build and it will generate the assets.
 
 The result of this command is airflow sdist package built in the `dist` folder of `airflow-core`
-package as well. It requires ``pre-commit`` to be installed in your system.
+package as well. It requires ``prek`` to be installed in your system.
 
 Using pip and manually managing your virtualenv
 ===============================================
diff --git a/PROVIDERS.rst b/PROVIDERS.rst
index ced8f5fb1b4..1c8e613eb0f 100644
--- a/PROVIDERS.rst
+++ b/PROVIDERS.rst
@@ -344,5 +344,5 @@ The dependencies for Airflow providers are managed in the ``provider.yaml`` file
 All provider dependencies, including versions and constraints, are listed in this file.
 When adding or updating a provider or its dependencies, changes should be made to this file accordingly.
 
-To ensure consistency and manage dependencies, ``pre-commit`` is configured to automatically update all dependencies.
-Once you have ``pre-commit`` installed, it will automatically handle the dependency updates.
+To ensure consistency and manage dependencies, ``prek`` is configured to automatically update all dependencies.
+Once you have ``prek`` installed, it will automatically handle the dependency updates.
diff --git a/README.md b/README.md
index f0ea6a1986b..0ba46bb06b8 100644
--- a/README.md
+++ b/README.md
@@ -294,7 +294,7 @@ packages:
 
 Apache Airflow version life cycle:
 
-<!-- This table is automatically updated by pre-commit scripts/ci/pre_commit/supported_versions.py -->
+<!-- This table is automatically updated by prek scripts/ci/prek/supported_versions.py -->
 <!-- Beginning of auto-generated table -->
 
 | Version   | Current Patch/Minor   | State     | First Release   | Limited Maintenance   | EOL/Terminated   |
diff --git a/RELEASE_NOTES.rst b/RELEASE_NOTES.rst
index 2b9cc966eb1..b69621a364f 100644
--- a/RELEASE_NOTES.rst
+++ b/RELEASE_NOTES.rst
@@ -1549,7 +1549,7 @@ Miscellaneous
 - Bump ``dompurify`` from 2.2.9 to 2.5.6 in /airflow/www (#42263) (#42270)
 - Correct docstring format in _get_template_context (#42244) (#42272)
 - Backport: Bump Flask-AppBuilder to ``4.5.2`` (#43309) (#43318)
-- Check python version that was used to install pre-commit venvs (#43282) (#43310)
+- Check python version that was used to install prek venvs (#43282) (#43310)
 - Resolve warning in Dataset Alias migration (#43425)
 
 Doc Only Changes
diff --git a/airflow-core/docs/database-erd-ref.rst b/airflow-core/docs/database-erd-ref.rst
index 80673a336ab..3f9ea2c77fc 100644
--- a/airflow-core/docs/database-erd-ref.rst
+++ b/airflow-core/docs/database-erd-ref.rst
@@ -33,6 +33,6 @@ Here is the current Database schema diagram.
    `db command <cli-and-env-variables-ref.html#db>`_ for the commands that you can use to manage
    the migrations.
 
-.. This image is automatically generated by pre-commit via ``scripts/ci/pre_commit/update_er_diagram.py``
+.. This image is automatically generated by prek hook via ``scripts/ci/prek/update_er_diagram.py``
 
 .. image:: img/airflow_erd.svg
diff --git a/airflow-core/docs/howto/custom-operator.rst b/airflow-core/docs/howto/custom-operator.rst
index d6206166e12..ad09760c254 100644
--- a/airflow-core/docs/howto/custom-operator.rst
+++ b/airflow-core/docs/howto/custom-operator.rst
@@ -349,7 +349,7 @@ Thus, the following example is valid:
         class MyHelloOperator(HelloOperator):
             template_fields = "foo"
 
-The limitations above are enforced by a pre-commit named 'validate-operators-init'.
+The limitations above are enforced by a prek hook named 'validate-operators-init'.
 
 Add template fields with subclassing
 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
diff --git a/airflow-core/docs/howto/usage-cli.rst b/airflow-core/docs/howto/usage-cli.rst
index a7dcc71abba..ce9869b0d41 100644
--- a/airflow-core/docs/howto/usage-cli.rst
+++ b/airflow-core/docs/howto/usage-cli.rst
@@ -384,7 +384,7 @@ JSON example output:
 Testing for DAG Import Errors
 -----------------------------
 The CLI can be used to check whether any discovered dags have import errors via the ``list-import-errors`` subcommand. It is possible to create an automation step which fails if any dags cannot be imported by checking the command output, particularly when used with ``--output`` to generate a standard file format.
-For example, the default output when there are no errors is ``No data found``, and the json output is ``[]``. The check can then be run in CI or pre-commit to speed up the review process and testing.
+For example, the default output when there are no errors is ``No data found``, and the json output is ``[]``. The check can then be run in CI or as prek hook to speed up the review process and testing.
 
 Example command that fails if there are any errors, using `jq <https://jqlang.github.io/jq/>`__ to parse the output:
 
diff --git a/airflow-core/docs/installation/supported-versions.rst b/airflow-core/docs/installation/supported-versions.rst
index 9b04114e064..e06a0302b0b 100644
--- a/airflow-core/docs/installation/supported-versions.rst
+++ b/airflow-core/docs/installation/supported-versions.rst
@@ -23,7 +23,7 @@ Version Life Cycle
 
 Apache Airflow® version life cycle:
 
- .. This table is automatically updated by pre-commit scripts/ci/pre_commit/supported_versions.py
+ .. This table is automatically updated by prek hook scripts/ci/prek/supported_versions.py
  .. Beginning of auto-generated table
 
 =========  =====================  =========  ===============  =====================  ================
diff --git a/airflow-core/docs/migrations-ref.rst b/airflow-core/docs/migrations-ref.rst
index af3ec9a4a90..7059d344185 100644
--- a/airflow-core/docs/migrations-ref.rst
+++ b/airflow-core/docs/migrations-ref.rst
@@ -32,7 +32,7 @@ Here's the list of all the Database Migrations that are executed via when you ru
 
 
 
- .. This table is automatically updated by pre-commit by ``scripts/ci/pre_commit/migration_reference.py``
+ .. This table is automatically updated by prek hook by ``scripts/ci/prek/migration_reference.py``
  .. All table elements are scraped from migration files
  .. Beginning of auto-generated table
 
diff --git a/airflow-core/hatch_build.py b/airflow-core/hatch_build.py
index 438767bcd9d..87b3df5f0d0 100644
--- a/airflow-core/hatch_build.py
+++ b/airflow-core/hatch_build.py
@@ -65,7 +65,7 @@ class CustomBuild(BuilderInterface[BuilderConfig, PluginManager]):
         self.write_git_version()
         # run this in the parent directory of the airflow-core (i.e. airflow repo root)
         work_dir = Path(self.root).parent.resolve()
-        cmd = ["pre-commit", "run", "--hook-stage", "manual", "compile-ui-assets", "--all-files"]
+        cmd = ["prek", "run", "--hook-stage", "manual", "compile-ui-assets", "--all-files"]
         log.warning("Running command: %s", " ".join(cmd))
         run(cmd, cwd=work_dir.as_posix(), check=True)
         dist_path = Path(self.root) / "src" / "airflow" / "ui" / "dist"
diff --git a/airflow-core/src/airflow/api_fastapi/gunicorn_config.py b/airflow-core/src/airflow/api_fastapi/gunicorn_config.py
index f2c17eef76d..c179595fed1 100644
--- a/airflow-core/src/airflow/api_fastapi/gunicorn_config.py
+++ b/airflow-core/src/airflow/api_fastapi/gunicorn_config.py
@@ -18,10 +18,20 @@
 # under the License.
 from __future__ import annotations
 
+import sys
+from pathlib import Path
+
 import setproctitle
 
 from airflow import settings
 
+sys.path.insert(0, str(Path(__file__).parent.resolve()))
+from common_prek_utils import (
+    initialize_breeze_prek,
+)
+
+initialize_breeze_prek(__name__, __file__)
+
 
 def post_worker_init(_):
     """
diff --git a/contributing-docs/02_how_to_communicate.rst b/contributing-docs/02_how_to_communicate.rst
index e62341e65ec..1d0739c2c40 100644
--- a/contributing-docs/02_how_to_communicate.rst
+++ b/contributing-docs/02_how_to_communicate.rst
@@ -121,7 +121,7 @@ and loosely organized team. We have both - contributors that commit one commit o
 more commits. It happens that some people assume informal "stewardship" over parts of code for some time -
 but at any time we should make sure that the code can be taken over by others, without excessive communication.
 Setting high requirements for the code (fairly strict code review, static code checks, requirements of
-automated tests, pre-commit checks) is the best way to achieve that - by only accepting good quality
+automated tests, prek hooks) is the best way to achieve that - by only accepting good quality
 code. Thanks to full test coverage we can make sure that we will be able to work with the code in the future.
 So do not be surprised if you are asked to add more tests or make the code cleaner -
 this is for the sake of maintainability.
diff --git a/contributing-docs/03_contributors_quick_start.rst b/contributing-docs/03_contributors_quick_start.rst
index 6748d59770c..acc33accc33 100644
--- a/contributing-docs/03_contributors_quick_start.rst
+++ b/contributing-docs/03_contributors_quick_start.rst
@@ -234,8 +234,8 @@ Forking and cloning Project
 
   git config core.autocrlf true
 
-Configuring Pre-commit
-----------------------
+Configuring prek
+----------------
 
 Before committing changes to github or raising a pull request, the code needs to be checked for certain quality standards
 such as spell check, code syntax, code formatting, compatibility with Apache License requirements etc. This set of
@@ -249,7 +249,7 @@ tests are applied when you commit your code.
   </div>
 
 
-To avoid burden on our CI infrastructure and to save time, Pre-commit hooks can be run locally before committing changes.
+To avoid burden on our CI infrastructure and to save time, prek hooks can be run locally before committing changes.
 
 .. note::
     We have recently started to recommend ``uv`` for our local development.
@@ -258,7 +258,7 @@ To avoid burden on our CI infrastructure and to save time, Pre-commit hooks can
     Remember to have global python set to Python >= 3.9 - Python 3.8 is end-of-life already and we've
     started to use Python 3.9+ features in Airflow and accompanying scripts.
 
-Installing pre-commit is best done with ``uv`` (recommended) or ``pipx``.
+Installing prek is best done with ``uv`` (recommended) or ``pipx``.
 
 1.  Installing required packages
 
@@ -274,7 +274,7 @@ on macOS, install via
 
   brew install libxml2
 
-2. Installing pre-commit:
+2. Installing prek:
 
 .. note::
   You might need to pass ``--python <python>`` to force the python version if not it uses the latest system python version.
@@ -282,15 +282,14 @@ on macOS, install via
 
 .. code-block:: bash
 
-  uv tool install pre-commit --with pre-commit-uv
+  uv tool install prek
 
-You can add ``uv`` support for ``pre-commit`` even if you've installed it with ``pipx`` using the commands
-(then pre-commit will use ``uv`` to create virtualenvs for the hooks):
+or with pipx:
 
 .. code-block:: bash
 
-  pipx install pre-commit
-  pipx install inject pre-commit pre-commit-uv # optional, configures pre-commit to use uv to install virtualenvs
+  pipx install prek
+
 
 3. Go to your project directory
 
@@ -299,11 +298,11 @@ You can add ``uv`` support for ``pre-commit`` even if you've installed it with `
   cd ~/Projects/airflow
 
 
-4. Running pre-commit hooks
+4. Running prek hooks
 
 .. code-block:: bash
 
-  pre-commit run --all-files
+  prek --all-files
     No-tabs checker......................................................Passed
     Add license for all SQL files........................................Passed
     Add license for all other files......................................Passed
@@ -327,39 +326,39 @@ You can add ``uv`` support for ``pre-commit`` even if you've installed it with `
     Fix End of Files.....................................................Passed
     ...........................................................................
 
-5. Running pre-commit for selected files
+5. Running prek for selected files
 
 .. code-block:: bash
 
-  pre-commit run  --files airflow/utils/decorators.py tests/utils/test_task_group.py
+  prek  --files airflow-core/src/utils/decorators.py tests/utils/test_task_group.py
 
 
 6. Running specific hook for selected files
 
 .. code-block:: bash
 
-  pre-commit run black --files airflow/decorators.py tests/utils/test_task_group.py
+  prek black --files airflow-core/src/airflow/utils/decorators.py airflow-core/tests/unit/utils/test_task_group.py
     black...............................................................Passed
-  pre-commit run ruff --files airflow/decorators.py tests/utils/test_task_group.py
+  prek ruff --files airflow-core/src/airflow/utils/decorators.py airflow-core/tests/unit/utils/test_task_group.py
     Run ruff............................................................Passed
 
 
-7. Enabling Pre-commit check before push
+7. Enabling prek hook check before push
 
-It will run pre-commit automatically before committing and stops the commit on failure
+It will run prek hooks automatically before committing and stops the commit on failure
 
 .. code-block:: bash
 
   cd ~/Projects/airflow
-  pre-commit install
+  prek install
   git commit -m "Added xyz"
 
-8. To disable Pre-commit
+8. To disable prek hooks
 
 .. code-block:: bash
 
   cd ~/Projects/airflow
-  pre-commit uninstall
+  prek uninstall
 
 - For more information on this visit |08_static_code_checks.rst|
 
@@ -370,12 +369,12 @@ It will run pre-commit automatically before committing and stops the commit on f
 
 - Following are some of the important links of 08_static_code_checks.rst
 
-  - |Pre-commit Hooks|
+  - |Prek Hooks|
 
-  .. |Pre-commit Hooks| raw:: html
+  .. |Prek Hooks| raw:: html
 
-   <a href="https://github.com/apache/airflow/blob/main/contributing-docs/08_static_code_checks.rst#pre-commit-hooks" target="_blank">
-   Pre-commit Hooks</a>
+   <a href="https://github.com/apache/airflow/blob/main/contributing-docs/08_static_code_checks.rst#prek-hooks" target="_blank">
+   Prek Hooks</a>
 
   - |Running Static Code Checks via Breeze|
 
diff --git a/contributing-docs/05_pull_requests.rst b/contributing-docs/05_pull_requests.rst
index a5afb469380..fbd74ffb09a 100644
--- a/contributing-docs/05_pull_requests.rst
+++ b/contributing-docs/05_pull_requests.rst
@@ -36,13 +36,13 @@ these guidelines:
     run the tests and `codecov <https://codecov.io/gh/apache/airflow>`__ to track
     coverage. You can set up both for free on your fork. It will help you make sure you do not
     break the build with your PR and that you help increase coverage.
-    Also we advise to install locally `pre-commit hooks <08_static_code_checks.rst#pre-commit-hooks>`__ to
+    Also we advise to install locally `prek hooks <08_static_code_checks.rst#prek-hooks>`__ to
     apply various checks, code generation and formatting at the time you make a local commit - which
     gives you near-immediate feedback on things you need to fix before you push your code to the PR, or in
     many case it will even fix it for you locally so that you can add and commit it straight away.
 
 -   Follow our project's `Coding style and best practices`_. Usually we attempt to enforce the practices by
-    having appropriate pre-commits. There are checks amongst them that aren't currently enforced
+    having appropriate prek hooks. There are checks amongst them that aren't currently enforced
     programmatically (either because they are too hard or just not yet done).
 
 -   Maintainers will not merge a PR that regresses linting or does not pass CI tests (unless you have good
@@ -62,16 +62,16 @@ these guidelines:
     maintenance burden during rebase.
 
 -   Add an `Apache License <http://www.apache.org/legal/src-headers.html>`__ header to all new files. If you
-    have ``pre-commit`` installed, pre-commit will do it automatically for you. If you hesitate to install
-    pre-commit for your local repository - for example because it takes a few seconds to commit your changes,
-    this one thing might be a good reason to convince anyone to install pre-commit.
+    have ``prek`` installed, prej will do it automatically for you. If you hesitate to install
+    prek for your local repository - for example because it takes a few seconds to commit your changes,
+    this one thing might be a good reason to convince anyone to install prek.
 
 -   If your PR adds functionality, make sure to update the docs as part of the same PR, not only
     code and tests. Docstring is often sufficient. Make sure to follow the Sphinx compatible standards.
 
 -   Make sure your code fulfills all the
     `static code checks <08_static_code_checks.rst#static-code-checks>`__ we have in our code. The easiest way
-    to make sure of that is - again - to install `pre-commit hooks <08_static_code_checks.rst#pre-commit-hooks>`__
+    to make sure of that is - again - to install `prek hooks <08_static_code_checks.rst#prek-hooks>`__
 
 -   Make sure your PR is small and focused on one change only - avoid adding unrelated changes, mixing
     adding features and refactoring. Keeping to that rule will make it easier to review your PR and will make
@@ -271,7 +271,7 @@ In such cases we can usually do something like this
         self.my_field = my_field
 
 The reason for doing it is that we are working on a cleaning up our code to have
-`pre-commit hook <../scripts/ci/pre_commit/validate_operators_init.py>`__
+`prek hook <../scripts/ci/prek/validate_operators_init.py>`__
 that will make sure all the cases where logic (such as validation and complex conversion)
 is not done in the constructor are detected in PRs.
 
diff --git a/contributing-docs/06_development_environments.rst b/contributing-docs/06_development_environments.rst
index 5ce138a3f1c..67c7734a3d8 100644
--- a/contributing-docs/06_development_environments.rst
+++ b/contributing-docs/06_development_environments.rst
@@ -57,9 +57,9 @@ Limitations:
     Breeze container-based solution provides a reproducible environment that is
     consistent with other developers.
 
--   You are **STRONGLY** encouraged to also install and use `pre-commit hooks <08_static_code_checks.rst#pre-commit-hooks>`_
+-   You are **STRONGLY** encouraged to also install and use `prek hooks <08_static_code_checks.rst#prek-hooks>`_
     for your local virtualenv development environment.
-    Pre-commit hooks can speed up your development cycle a lot.
+    Prek hooks can speed up your development cycle a lot.
 
 Typically you can connect your local virtualenv environments easily with your IDE
 and use it for development:
diff --git a/contributing-docs/07_local_virtualenv.rst b/contributing-docs/07_local_virtualenv.rst
index d565309f2cf..491c4cff915 100644
--- a/contributing-docs/07_local_virtualenv.rst
+++ b/contributing-docs/07_local_virtualenv.rst
@@ -70,7 +70,7 @@ The ``uv`` utility is a build frontend tool that is designed to manage python, v
 and testing of Python projects. It is a modern tool that is designed to work with PEP 517/518 compliant projects
 and it is much faster than "reference" ``pip`` tool. It has extensive support to not only create development
 environment but also to manage python versions, development environments, workspaces and Python tools used
-to develop Airflow (via ``uv tool`` command - such as ``pre-commit`` and others, you can also use ``uv tool``
+to develop Airflow (via ``uv tool`` command - such as ``prek`` and others, you can also use ``uv tool``
 to install ``breeze`` - containerized development environment for Airflow that we use to reproduce the
 CI environment locally and to run release-management and certain development tasks.
 
@@ -247,7 +247,7 @@ dependencies, and sometimes ``development dependencies`` (in ``dev`` dependency
 to run tests and are installed automatically when you install environment with ``uv-sync``.
 
 If you want to add another dependency to a provider, you should add it to corresponding ``pyproject.toml``,
-add the files to your commit with ``git add`` and run ``pre-commit run`` to update generated dependencies.
+add the files to your commit with ``git add`` and run ``prek`` to update generated dependencies.
 Note that in the future we will remove that step.
 
 For ``uv`` it's simple, you need to run ``uv sync`` in providers directory after you modified
diff --git a/contributing-docs/08_static_code_checks.rst b/contributing-docs/08_static_code_checks.rst
index 9d7fed230c7..fe254d83805 100644
--- a/contributing-docs/08_static_code_checks.rst
+++ b/contributing-docs/08_static_code_checks.rst
@@ -19,439 +19,195 @@ Static code checks
 ==================
 
 The static code checks in Airflow are used to verify that the code meets certain quality standards.
-All the static code checks can be run through pre-commit hooks.
+All the static code checks can be run through prek hooks.
 
-The pre-commit hooks perform all the necessary installation when you run them
-for the first time. See the table below to identify which pre-commit checks require the Breeze Docker images.
+The prek hooks perform all the necessary installation when you run them
+for the first time. See the table below to identify which prek checks require the Breeze Docker images.
 
 You can also run the checks via `Breeze <../dev/breeze/doc/README.rst>`_ environment.
 
 **The outline for this document in GitHub is available at top-right corner button (with 3-dots and 3 lines).**
 
-Pre-commit hooks
-----------------
+Prek hooks
+----------
 
 Pre-commit hooks help speed up your local development cycle and place less burden on the CI infrastructure.
-Consider installing the pre-commit hooks as a necessary prerequisite.
+Consider installing the prek hooks as a necessary prerequisite.
 
-The pre-commit hooks by default only check the files you are currently working on and make
-them fast. Yet, these checks use exactly the same environment as the CI tests
+The hooks by default only check the files you are currently working on (and are staged) which makes the
+checks rather fast. Yet, these checks use exactly the same environment as the CI tests
 use. So, you can be sure your modifications will also work for CI if they pass
-pre-commit hooks.
+prek hooks.
 
-We have integrated the fantastic `pre-commit <https://pre-commit.com>`__ framework
-in our development workflow. To install and use it, you need at least Python 3.9 locally.
+We have integrated the `prek <https://github.com/j178/prek>`__ framework
+in our development workflow. It can be installed in various ways and does not even need ``pip`` or
 
-Installing pre-commit hooks
----------------------------
+``python`` to be installed. It is a drop-in replacement for the legacy ``pre-commit`` tool, but it is
+much faster and more feature-rich. It is written in Rust and it is designed to install environments in parallel,
+so it is much faster than the ``pre-commit`` tool.
+
+Installing prek hooks
+---------------------
+
+It is the best to use prek hooks when you have your local virtualenv for
+Airflow activated since then prek hooks and other dependencies are
+automatically installed. You can also install the prek hooks manually using ``uv`` or ``pipx``.
 
-It is the best to use pre-commit hooks when you have your local virtualenv for
-Airflow activated since then pre-commit hooks and other dependencies are
-automatically installed. You can also install the pre-commit hooks manually using ``uv`` or ``pip``.
+.. code-block:: bash
+
+    uv tool install prek
 
 .. code-block:: bash
 
-    uv tool install pre-commit
+    pipx install prek
+
+Since we have a lot of hooks and sometimes you want to run them individually, it's advised to install
+auto-completion for the ``prek`` command. You can do it by adding the following line to your
+``.bashrc`` or ``.zshrc`` file:
+
+For bash:
 
 .. code-block:: bash
 
-    pip install pre-commit
+    eval "$(COMPLETE=bash prek)"  # for bash
+
+For zsh:
+
+.. code-block:: zsh
 
-After installation, pre-commit hooks are run automatically when you commit the code and they will
+    eval "$(COMPLETE=zsh prek)"
+
+Similarly for other shells like fish, powershell, etc.
+
+After installation, prek hooks are run automatically when you commit the code and they will
 only run on the files that you change during your commit, so they are usually pretty fast and do
-not slow down your iteration speed on your changes. There are also ways to disable the ``pre-commits``
+not slow down your iteration speed on your changes. There are also ways to disable the prek hooks
 temporarily when you commit your code with ``--no-verify`` switch or skip certain checks that you find
-to much disturbing your local workflow. See `Available pre-commit checks <#available-pre-commit-checks>`_
-and `Using pre-commit <#using-pre-commit>`_
+to much disturbing your local workflow. See `Using prek <#using-prek>`_
 
-The pre-commit hooks use several external linters that need to be installed before pre-commit is run.
+The ``prek`` hooks use several external linters that need to be installed before prek is run.
 Each of the checks installs its own environment, so you do not need to install those, but there are some
 checks that require locally installed binaries. On Linux, you typically install
 them with ``sudo apt install``, on macOS - with ``brew install``.
 
-The current list of prerequisites is limited to ``xmllint``:
+The current list of prerequisites is limited to ``xmllint`` and ``golang`` if you want to modify
+the Golang code.:
 
-- on Linux, install via ``sudo apt install libxml2-utils``
-- on macOS, install via ``brew install libxml2``
+- on Linux, install via ``sudo apt install libxml2-utils golang``
+- on macOS, install via ``brew install libxml2 golang``
 
-Some pre-commit hooks also require the Docker Engine to be configured as the static
-checks are executed in the Docker environment (See table in the
-`Available pre-commit checks <#available-pre-commit-checks>`_ . You should build the images
-locally before installing pre-commit checks as described in `Breeze docs <../dev/breeze/doc/README.rst>`__.
+Some prek hooks also require the Docker Engine to be configured as the static
+checks are executed in the Docker environment. You should build the images
+locally before installing prek checks as described in `Breeze docs <../dev/breeze/doc/README.rst>`__.
 
 Sometimes your image is outdated and needs to be rebuilt because some dependencies have been changed.
-In such cases, the Docker-based pre-commit will inform you that you should rebuild the image.
+In such cases, the Docker-based prek will inform you that you should rebuild the image.
 
-In case you do not have your local images built, the pre-commit hooks fail and provide
-instructions on what needs to be done.
+Enabling prek hooks
+-------------------
 
-Enabling pre-commit hooks
--------------------------
+To turn on prek checks for ``commit`` operations in git, enter:
 
-To turn on pre-commit checks for ``commit`` operations in git, enter:
+.. code-block:: bash
+
+    prek install
+
+To install the checks also for ``pre-push`` operations, enter:
 
 .. code-block:: bash
 
-    pre-commit install
+    prek install -t pre-push
 
+For details on advanced usage of the install method, use:
 
-To install the checks also for ``pre-push`` operations, enter:
+.. code-block:: bash
+
+   prek install --help
+
+.. note::
+
+    The ``prek`` tool is a drop-in replacement for the legacy ``pre-commit`` tool - much faster and more
+    feature-rich, If you have already installed ``pre-commit`` to handle your hooks, you can run
+    ``prek install -f`` to replace the existing ``pre-commit`` hooks with the ``prek`` hooks.
+
+Available prek hooks
+--------------------
+
+You can see the list of available hooks by running:
 
 .. code-block:: bash
 
-    pre-commit install -t pre-push
+    prek list
 
+You can also see more details about the hooks by running:
 
-For details on advanced usage of the install method, use:
+.. code-block:: bash
+
+    prek list --verbose
+
+And if you want to see the details of a particular hook, you can run:
 
 .. code-block:: bash
 
-   pre-commit install --help
+    prek list --verbose <hook-id>
 
-Available pre-commit checks
----------------------------
+When you install auto-completion, you can also use the tab-completion to see the available hooks.
+
+Using prek
+----------
 
-This table lists pre-commit hooks used by Airflow. The ``Image`` column indicates which hooks
-require Breeze Docker image to be built locally.
-
-  .. BEGIN AUTO-GENERATED STATIC CHECK LIST
-
-+-----------------------------------------------------------+--------------------------------------------------------+---------+
-| ID                                                        | Description                                            | Image   |
-+===========================================================+========================================================+=========+
-| bandit                                                    | bandit                                                 |         |
-+-----------------------------------------------------------+--------------------------------------------------------+---------+
-| blacken-docs                                              | Run black on docs                                      |         |
-+-----------------------------------------------------------+--------------------------------------------------------+---------+
-| check-aiobotocore-optional                                | Check if aiobotocore is an optional dependency only    |         |
-+-----------------------------------------------------------+--------------------------------------------------------+---------+
-| check-airflow-k8s-not-used                                | Check airflow.kubernetes imports are not used          |         |
-+-----------------------------------------------------------+--------------------------------------------------------+---------+
-| check-airflow-providers-bug-report-template               | Sort airflow-bug-report provider list                  |         |
-+-----------------------------------------------------------+--------------------------------------------------------+---------+
-| check-apache-license-rat                                  | Check if licenses are OK for Apache                    |         |
-+-----------------------------------------------------------+--------------------------------------------------------+---------+
-| check-base-operator-partial-arguments                     | Check BaseOperator and partial() arguments             |         |
-+-----------------------------------------------------------+--------------------------------------------------------+---------+
-| check-base-operator-usage                                 | * Check BaseOperator core imports                      |         |
-|                                                           | * Check BaseOperatorLink core imports                  |         |
-|                                                           | * Check BaseOperator other imports                     |         |
-+-----------------------------------------------------------+--------------------------------------------------------+---------+
-| check-boring-cyborg-configuration                         | Checks for Boring Cyborg configuration consistency     |         |
-+-----------------------------------------------------------+--------------------------------------------------------+---------+
-| check-breeze-top-dependencies-limited                     | Check top-level breeze deps                            |         |
-+-----------------------------------------------------------+--------------------------------------------------------+---------+
-| check-builtin-literals                                    | Require literal syntax when initializing builtins      |         |
-+-----------------------------------------------------------+--------------------------------------------------------+---------+
-| check-changelog-format                                    | Check changelog format                                 |         |
-+-----------------------------------------------------------+--------------------------------------------------------+---------+
-| check-changelog-has-no-duplicates                         | Check changelogs for duplicate entries                 |         |
-+-----------------------------------------------------------+--------------------------------------------------------+---------+
-| check-cncf-k8s-only-for-executors                         | Check cncf.kubernetes imports used for executors only  |         |
-+-----------------------------------------------------------+--------------------------------------------------------+---------+
-| check-code-deprecations                                   | Check deprecations categories in decorators            |         |
-+-----------------------------------------------------------+--------------------------------------------------------+---------+
-| check-common-compat-used-for-openlineage                  | Check common.compat is used for OL deprecated classes  |         |
-+-----------------------------------------------------------+--------------------------------------------------------+---------+
-| check-core-deprecation-classes                            | Verify usage of Airflow deprecation classes in core    |         |
-+-----------------------------------------------------------+--------------------------------------------------------+---------+
-| check-daysago-import-from-utils                           | days_ago imported from airflow.utils.dates             |         |
-+-----------------------------------------------------------+--------------------------------------------------------+---------+
-| check-decorated-operator-implements-custom-name           | Check @task decorator implements custom_operator_name  |         |
-+-----------------------------------------------------------+--------------------------------------------------------+---------+
-| check-default-configuration                               | Check the default configuration                        | *       |
-+-----------------------------------------------------------+--------------------------------------------------------+---------+
-| check-deferrable-default                                  | Check and fix default value of default_deferrable      |         |
-+-----------------------------------------------------------+--------------------------------------------------------+---------+
-| check-docstring-param-types                               | Check that docstrings do not specify param types       |         |
-+-----------------------------------------------------------+--------------------------------------------------------+---------+
-| check-example-dags-urls                                   | Check that example dags url include provider versions  |         |
-+-----------------------------------------------------------+--------------------------------------------------------+---------+
-| check-executables-have-shebangs                           | Check that executables have shebang                    |         |
-+-----------------------------------------------------------+--------------------------------------------------------+---------+
-| check-extra-packages-references                           | Checks setup extra packages                            |         |
-+-----------------------------------------------------------+--------------------------------------------------------+---------+
-| check-extras-order                                        | Check order of extras in Dockerfile                    |         |
-+-----------------------------------------------------------+--------------------------------------------------------+---------+
-| check-fab-migrations                                      | Check no migration is done on FAB related table        |         |
-+-----------------------------------------------------------+--------------------------------------------------------+---------+
-| check-for-inclusive-language                              | Check for language that we do not accept as community  |         |
-+-----------------------------------------------------------+--------------------------------------------------------+---------+
-| check-get-lineage-collector-providers                     | Check providers import hook lineage code from compat   |         |
-+-----------------------------------------------------------+--------------------------------------------------------+---------+
-| check-hooks-apply                                         | Check if all hooks apply to the repository             |         |
-+-----------------------------------------------------------+--------------------------------------------------------+---------+
-| check-imports-in-providers                                | Check imports in providers                             |         |
-+-----------------------------------------------------------+--------------------------------------------------------+---------+
-| check-incorrect-use-of-LoggingMixin                       | Make sure LoggingMixin is not used alone               |         |
-+-----------------------------------------------------------+--------------------------------------------------------+---------+
-| check-init-decorator-arguments                            | Sync model __init__ and decorator arguments            |         |
-+-----------------------------------------------------------+--------------------------------------------------------+---------+
-| check-integrations-list-consistent                        | Sync integrations list with docs                       |         |
-+-----------------------------------------------------------+--------------------------------------------------------+---------+
-| check-lazy-logging                                        | Check that all logging methods are lazy                |         |
-+-----------------------------------------------------------+--------------------------------------------------------+---------+
-| check-links-to-example-dags-do-not-use-hardcoded-versions | Verify no hard-coded version in example dags           |         |
-+-----------------------------------------------------------+--------------------------------------------------------+---------+
-| check-merge-conflict                                      | Check that merge conflicts are not being committed     |         |
-+-----------------------------------------------------------+--------------------------------------------------------+---------+
-| check-min-python-version                                  | Check minimum Python version                           |         |
-+-----------------------------------------------------------+--------------------------------------------------------+---------+
-| check-newsfragments-are-valid                             | Check newsfragments are valid                          |         |
-+-----------------------------------------------------------+--------------------------------------------------------+---------+
-| check-no-airflow-deprecation-in-providers                 | Do not use DeprecationWarning in providers             |         |
-+-----------------------------------------------------------+--------------------------------------------------------+---------+
-| check-no-providers-in-core-examples                       | No providers imports in core example DAGs              |         |
-+-----------------------------------------------------------+--------------------------------------------------------+---------+
-| check-only-new-session-with-provide-session               | Check NEW_SESSION is only used with @provide_session   |         |
-+-----------------------------------------------------------+--------------------------------------------------------+---------+
-| check-persist-credentials-disabled-in-github-workflows    | Check persistent creds in workflow files               |         |
-+-----------------------------------------------------------+--------------------------------------------------------+---------+
-| check-pre-commit-information-consistent                   | Validate hook IDs & names and sync with docs           |         |
-+-----------------------------------------------------------+--------------------------------------------------------+---------+
-| check-provide-create-sessions-imports                     | Check session util imports                             |         |
-+-----------------------------------------------------------+--------------------------------------------------------+---------+
-| check-provider-docs-valid                                 | Validate provider doc files                            |         |
-+-----------------------------------------------------------+--------------------------------------------------------+---------+
-| check-provider-yaml-valid                                 | Validate provider.yaml files                           | *       |
-+-----------------------------------------------------------+--------------------------------------------------------+---------+
-| check-providers-subpackages-init-file-exist               | Provider subpackage init files are there               |         |
-+-----------------------------------------------------------+--------------------------------------------------------+---------+
-| check-pydevd-left-in-code                                 | Check for pydevd debug statements accidentally left    |         |
-+-----------------------------------------------------------+--------------------------------------------------------+---------+
-| check-revision-heads-map                                  | Check that the REVISION_HEADS_MAP is up-to-date        |         |
-+-----------------------------------------------------------+--------------------------------------------------------+---------+
-| check-safe-filter-usage-in-html                           | Don't use safe in templates                            |         |
-+-----------------------------------------------------------+--------------------------------------------------------+---------+
-| check-significant-newsfragments-are-valid                 | Check significant newsfragments are valid              |         |
-+-----------------------------------------------------------+--------------------------------------------------------+---------+
-| check-sql-dependency-common-data-structure                | Check dependency of SQL providers                      |         |
-+-----------------------------------------------------------+--------------------------------------------------------+---------+
-| check-start-date-not-used-in-defaults                     | start_date not in default_args                         |         |
-+-----------------------------------------------------------+--------------------------------------------------------+---------+
-| check-system-tests-present                                | Check if system tests have required segments of code   |         |
-+-----------------------------------------------------------+--------------------------------------------------------+---------+
-| check-system-tests-tocs                                   | Check that system tests is properly added              |         |
-+-----------------------------------------------------------+--------------------------------------------------------+---------+
-| check-taskinstance-tis-attrs                              | Check that TI and TIS have the same attributes         |         |
-+-----------------------------------------------------------+--------------------------------------------------------+---------+
-| check-template-context-variable-in-sync                   | Sync template context variable refs                    |         |
-+-----------------------------------------------------------+--------------------------------------------------------+---------+
-| check-template-fields-valid                               | Check templated fields mapped in operators/sensors     | *       |
-+-----------------------------------------------------------+--------------------------------------------------------+---------+
-| check-tests-in-the-right-folders                          | Check if tests are in the right folders                |         |
-+-----------------------------------------------------------+--------------------------------------------------------+---------+
-| check-tests-unittest-testcase                             | Unit tests do not inherit from unittest.TestCase       |         |
-+-----------------------------------------------------------+--------------------------------------------------------+---------+
-| check-urlparse-usage-in-code                              | Don't use urlparse in code                             |         |
-+-----------------------------------------------------------+--------------------------------------------------------+---------+
-| check-xml                                                 | Check XML files with xmllint                           |         |
-+-----------------------------------------------------------+--------------------------------------------------------+---------+
-| check-zip-file-is-not-committed                           | Check no zip files are committed                       |         |
-+-----------------------------------------------------------+--------------------------------------------------------+---------+
-| codespell                                                 | Run codespell                                          |         |
-+-----------------------------------------------------------+--------------------------------------------------------+---------+
-| compile-fab-assets                                        | Compile FAB provider assets                            |         |
-+-----------------------------------------------------------+--------------------------------------------------------+---------+
-| compile-ui-assets                                         | Compile ui assets (manual)                             |         |
-+-----------------------------------------------------------+--------------------------------------------------------+---------+
-| compile-ui-assets-dev                                     | Compile ui assets in dev mode (manual)                 |         |
-+-----------------------------------------------------------+--------------------------------------------------------+---------+
-| create-missing-init-py-files-tests                        | Create missing init.py files in tests                  |         |
-+-----------------------------------------------------------+--------------------------------------------------------+---------+
-| debug-statements                                          | Detect accidentally committed debug statements         |         |
-+-----------------------------------------------------------+--------------------------------------------------------+---------+
-| detect-private-key                                        | Detect if private key is added to the repository       |         |
-+-----------------------------------------------------------+--------------------------------------------------------+---------+
-| doctoc                                                    | Add TOC for Markdown and RST files                     |         |
-+-----------------------------------------------------------+--------------------------------------------------------+---------+
-| end-of-file-fixer                                         | Make sure that there is an empty line at the end       |         |
-+-----------------------------------------------------------+--------------------------------------------------------+---------+
-| flynt                                                     | Run flynt string format converter for Python           |         |
-+-----------------------------------------------------------+--------------------------------------------------------+---------+
-| generate-airflow-diagrams                                 | Generate airflow diagrams                              |         |
-+-----------------------------------------------------------+--------------------------------------------------------+---------+
-| generate-openapi-spec                                     | Generate the FastAPI API spec                          | *       |
-+-----------------------------------------------------------+--------------------------------------------------------+---------+
-| generate-openapi-spec-fab                                 | Generate the FastAPI API spec for FAB                  | *       |
-+-----------------------------------------------------------+--------------------------------------------------------+---------+
-| generate-pypi-readme                                      | Generate PyPI README                                   |         |
-+-----------------------------------------------------------+--------------------------------------------------------+---------+
-| generate-tasksdk-datamodels                               | Generate Datamodels for TaskSDK client                 | *       |
-+-----------------------------------------------------------+--------------------------------------------------------+---------+
-| generate-volumes-for-sources                              | Generate volumes for docker compose                    |         |
-+-----------------------------------------------------------+--------------------------------------------------------+---------+
-| identity                                                  | Print checked files                                    |         |
-+-----------------------------------------------------------+--------------------------------------------------------+---------+
-| insert-license                                            | * Add license for all SQL files                        |         |
-|                                                           | * Add license for all RST files                        |         |
-|                                                           | * Add license for CSS/JS/JSX/PUML/TS/TSX               |         |
-|                                                           | * Add license for all Shell files                      |         |
-|                                                           | * Add license for all toml files                       |         |
-|                                                           | * Add license for all Python files                     |         |
-|                                                           | * Add license for all XML files                        |         |
-|                                                           | * Add license for all Helm template files              |         |
-|                                                           | * Add license for all YAML files except Helm templates |         |
-|                                                           | * Add license for all Markdown files                   |         |
-|                                                           | * Add license for all other files                      |         |
-+-----------------------------------------------------------+--------------------------------------------------------+---------+
-| kubeconform                                               | Kubeconform check on our helm chart                    |         |
-+-----------------------------------------------------------+--------------------------------------------------------+---------+
-| lint-chart-schema                                         | Lint chart/values.schema.json file                     |         |
-+-----------------------------------------------------------+--------------------------------------------------------+---------+
-| lint-dockerfile                                           | Lint Dockerfile                                        |         |
-+-----------------------------------------------------------+--------------------------------------------------------+---------+
-| lint-helm-chart                                           | Lint Helm Chart                                        |         |
-+-----------------------------------------------------------+--------------------------------------------------------+---------+
-| lint-json-schema                                          | * Lint JSON Schema files                               |         |
-|                                                           | * Lint NodePort Service                                |         |
-|                                                           | * Lint Docker compose files                            |         |
-|                                                           | * Lint chart/values.schema.json                        |         |
-|                                                           | * Lint chart/values.yaml                               |         |
-|                                                           | * Lint config_templates/config.yml                     |         |
-+-----------------------------------------------------------+--------------------------------------------------------+---------+
-| lint-markdown                                             | Run markdownlint                                       |         |
-+-----------------------------------------------------------+--------------------------------------------------------+---------+
-| mixed-line-ending                                         | Detect if mixed line ending is used (\r vs. \r\n)      |         |
-+-----------------------------------------------------------+--------------------------------------------------------+---------+
-| mypy-airflow-core                                         | * Run mypy for airflow-core                            | *       |
-|                                                           | * Run mypy for airflow-core (manual)                   |         |
-+-----------------------------------------------------------+--------------------------------------------------------+---------+
-| mypy-airflow-ctl                                          | * Run mypy for airflow-ctl                             | *       |
-|                                                           | * Run mypy for airflow-ctl (manual)                    |         |
-+-----------------------------------------------------------+--------------------------------------------------------+---------+
-| mypy-dev                                                  | * Run mypy for dev                                     | *       |
-|                                                           | * Run mypy for dev (manual)                            |         |
-+-----------------------------------------------------------+--------------------------------------------------------+---------+
-| mypy-devel-common                                         | * Run mypy for devel-common                            | *       |
-|                                                           | * Run mypy for devel-common (manual)                   |         |
-+-----------------------------------------------------------+--------------------------------------------------------+---------+
-| mypy-providers                                            | * Run mypy for providers                               | *       |
-|                                                           | * Run mypy for providers (manual)                      |         |
-+-----------------------------------------------------------+--------------------------------------------------------+---------+
-| mypy-task-sdk                                             | * Run mypy for task-sdk                                | *       |
-|                                                           | * Run mypy for task-sdk (manual)                       |         |
-+-----------------------------------------------------------+--------------------------------------------------------+---------+
-| pretty-format-json                                        | Format JSON files                                      |         |
-+-----------------------------------------------------------+--------------------------------------------------------+---------+
-| pylint                                                    | pylint                                                 |         |
-+-----------------------------------------------------------+--------------------------------------------------------+---------+
-| python-no-log-warn                                        | Check if there are no deprecate log warn               |         |
-+-----------------------------------------------------------+--------------------------------------------------------+---------+
-| replace-bad-characters                                    | Replace bad characters                                 |         |
-+-----------------------------------------------------------+--------------------------------------------------------+---------+
-| rst-backticks                                             | Check if RST files use double backticks for code       |         |
-+-----------------------------------------------------------+--------------------------------------------------------+---------+
-| ruff                                                      | Run 'ruff' for extremely fast Python linting           |         |
-+-----------------------------------------------------------+--------------------------------------------------------+---------+
-| ruff-format                                               | Run 'ruff format'                                      |         |
-+-----------------------------------------------------------+--------------------------------------------------------+---------+
-| shellcheck                                                | Check Shell scripts syntax correctness                 |         |
-+-----------------------------------------------------------+--------------------------------------------------------+---------+
-| trailing-whitespace                                       | Remove trailing whitespace at end of line              |         |
-+-----------------------------------------------------------+--------------------------------------------------------+---------+
-| ts-compile-lint-simple-auth-manager-ui                    | Compile / format / lint simple auth manager UI         |         |
-+-----------------------------------------------------------+--------------------------------------------------------+---------+
-| ts-compile-lint-ui                                        | Compile / format / lint UI                             |         |
-+-----------------------------------------------------------+--------------------------------------------------------+---------+
-| update-black-version                                      | Update black versions everywhere (manual)              |         |
-+-----------------------------------------------------------+--------------------------------------------------------+---------+
-| update-breeze-cmd-output                                  | Update breeze docs                                     |         |
-+-----------------------------------------------------------+--------------------------------------------------------+---------+
-| update-breeze-readme-config-hash                          | Update Breeze README.md with config files hash         |         |
-+-----------------------------------------------------------+--------------------------------------------------------+---------+
-| update-chart-dependencies                                 | Update chart dependencies to latest (manual)           |         |
-+-----------------------------------------------------------+--------------------------------------------------------+---------+
-| update-er-diagram                                         | Update ER diagram                                      | *       |
-+-----------------------------------------------------------+--------------------------------------------------------+---------+
-| update-in-the-wild-to-be-sorted                           | Sort INTHEWILD.md alphabetically                       |         |
-+-----------------------------------------------------------+--------------------------------------------------------+---------+
-| update-inlined-dockerfile-scripts                         | Inline Dockerfile and Dockerfile.ci scripts            |         |
-+-----------------------------------------------------------+--------------------------------------------------------+---------+
-| update-installed-providers-to-be-sorted                   | Sort and uniquify installed_providers.txt              |         |
-+-----------------------------------------------------------+--------------------------------------------------------+---------+
-| update-installers-and-pre-commit                          | Update installers and pre-commit to latest (manual)    |         |
-+-----------------------------------------------------------+--------------------------------------------------------+---------+
-| update-local-yml-file                                     | Update mounts in the local yml file                    |         |
-+-----------------------------------------------------------+--------------------------------------------------------+---------+
-| update-migration-references                               | Update migration ref doc                               | *       |
-+-----------------------------------------------------------+--------------------------------------------------------+---------+
-| update-providers-build-files                              | Update providers build files                           |         |
-+-----------------------------------------------------------+--------------------------------------------------------+---------+
-| update-providers-dependencies                             | Update dependencies for providers                      |         |
-+-----------------------------------------------------------+--------------------------------------------------------+---------+
-| update-pyproject-toml                                     | Update Airflow's meta-package pyproject.toml           |         |
-+-----------------------------------------------------------+--------------------------------------------------------+---------+
-| update-reproducible-source-date-epoch                     | Update Source Date Epoch for reproducible builds       |         |
-+-----------------------------------------------------------+--------------------------------------------------------+---------+
-| update-spelling-wordlist-to-be-sorted                     | Sort spelling_wordlist.txt                             |         |
-+-----------------------------------------------------------+--------------------------------------------------------+---------+
-| update-supported-versions                                 | Updates supported versions in documentation            |         |
-+-----------------------------------------------------------+--------------------------------------------------------+---------+
-| update-vendored-in-k8s-json-schema                        | Vendor k8s definitions into values.schema.json         |         |
-+-----------------------------------------------------------+--------------------------------------------------------+---------+
-| update-version                                            | Update versions in docs                                |         |
-+-----------------------------------------------------------+--------------------------------------------------------+---------+
-| validate-operators-init                                   | No templated field logic checks in operator __init__   |         |
-+-----------------------------------------------------------+--------------------------------------------------------+---------+
-| yamllint                                                  | Check YAML files with yamllint                         |         |
-+-----------------------------------------------------------+--------------------------------------------------------+---------+
-| zizmor                                                    | Run zizmor to check for github workflow syntax errors  |         |
-+-----------------------------------------------------------+--------------------------------------------------------+---------+
-
-  .. END AUTO-GENERATED STATIC CHECK LIST
-
-Using pre-commit
-----------------
-
-After installation, pre-commit hooks are run automatically when you commit the
-code. But you can run pre-commit hooks manually as needed.
+After installation, prek hooks are run automatically when you commit the
+code. But you can run prek hooks manually as needed.
 
 -   Run all checks on your staged files by using:
 
 .. code-block:: bash
 
-    pre-commit run
+    prek
 
--   Run only mypy check on your staged files (in ``airflow/`` excluding providers) by using:
+-   Run only mypy check on your staged airflow and dev files by specifying the
+    ``mypy-airflow-core`` and ``mypy-dev`` prek hooks (more hooks can be specified):
 
 .. code-block:: bash
 
-    pre-commit run mypy-airflow
+    prek mypy-airflow-core mypy-dev
 
--   Run only mypy checks on all files by using:
+-   Run only mypy airflow checks on all "airflow-core" files by using:
 
 .. code-block:: bash
 
-    pre-commit run mypy-airflow --all-files
-
+    prek mypy-airflow-core --all-files
 
 -   Run all checks on all files by using:
 
 .. code-block:: bash
 
-    pre-commit run --all-files
-
+    prek --all-files
 
 -   Run all checks only on files modified in the last locally available commit in your checked out branch:
 
 .. code-block:: bash
 
-    pre-commit run --source=HEAD^ --origin=HEAD
+    prek --last-commit
+
+-   Run all checks only on files modified in your last branch that is targeted to be merged into the main branch:
 
+.. code-block:: bash
+
+    prek --from-ref main
 
--   Show files modified automatically by pre-commit when pre-commits automatically fix errors
+-   Show files modified automatically by prek when prek automatically fix errors
 
 .. code-block:: bash
 
-    pre-commit run --show-diff-on-failure
+    prek --show-diff-on-failure
 
 -   Skip one or more of the checks by specifying a comma-separated list of
     checks to skip in the SKIP variable:
 
 .. code-block:: bash
 
-    SKIP=mypy-airflow-core,ruff pre-commit run --all-files
+    SKIP=mypy-airflow-core,ruff prek --all-files
 
 
 You can always skip running the tests by providing ``--no-verify`` flag to the
@@ -462,30 +218,48 @@ To check other usage types of the pre-commit framework, see `Pre-commit website
 Disabling particular checks
 ---------------------------
 
-In case you have a problem with running particular ``pre-commit`` check you can still continue using the
-benefits of having ``pre-commit`` installed, with some of the checks disabled. In order to disable
+In case you have a problem with running particular ``prek`` check you can still continue using the
+benefits of having ``prek`` installed, with some of the checks disabled. In order to disable
 checks you might need to set ``SKIP`` environment variable to coma-separated list of checks to skip. For example,
 when you want to skip some checks (ruff/mypy for example), you should be able to do it by setting
 ``export SKIP=ruff,mypy-airflow-core,``. You can also add this to your ``.bashrc`` or ``.zshrc`` if you
 do not want to set it manually every time you enter the terminal.
 
 In case you do not have breeze image configured locally, you can also disable all checks that require breeze
-the image by setting ``SKIP_BREEZE_PRE_COMMITS`` to "true". This will mark the tests as "green" automatically
+the image by setting ``SKIP_BREEZE_PREK_HOOKS`` to "true". This will mark the tests as "green" automatically
 when run locally (note that those checks will anyway run in CI).
 
-Manual pre-commits
-------------------
+Manual prek hooks
+-----------------
 
 Most of the checks we run are configured to run automatically when you commit the code. However,
 there are some checks that are not run automatically and you need to run them manually. Those
 checks are marked with ``manual`` in the ``Description`` column in the table below. You can run
-them manually by running ``pre-commit run --hook-stage manual <hook-id>``.
+them manually by running ``prek --hook-stage manual <hook-id>``.
+
+Special pin-versions prek
+-------------------------
+
+There is a separate prek ``pin-versions`` prek hook which is used to pin versions of
+GitHub Actions in the CI workflows.
+
+This action requires ``GITHUB_TOKEN`` to be set, otherwise you might hit the rate limits with GitHub API, it
+is also configured in a separate ``.prek-config.yaml`` file in the
+``.github`` directory as it requires Python 3.11 to run. It is not run automatically
+when you commit the code but in runs as a separate job in the CI. However, you can run it
+manually by running:
+
+.. code-block:: bash
+
+    export GITHUB_TOKEN=YOUR_GITHUB_TOKEN
+    prek -c .github/.pre-commit-config.yaml --all-files --hook-stage manual --verbose
+
 
 Mypy checks
 -----------
 
 When we run mypy checks locally when committing a change, one of the ``mypy-*`` checks is run, ``mypy-airflow``,
-``mypy-dev``, ``mypy-providers``, ``mypy-airflow-ctl``, depending on the files you are changing. The mypy checks
+``mypy-dev``, ``mypy-providers`` depending on the files you are changing. The mypy checks
 are run by passing those changed files to mypy. This is way faster than running checks for all files (even
 if mypy cache is used - especially when you change a file in airflow core that is imported and used by many
 files). However, in some cases, it produces different results than when running checks for the whole set
@@ -498,19 +272,19 @@ command (example for ``airflow`` files):
 
 .. code-block:: bash
 
-  pre-commit run --hook-stage manual mypy-<FOLDER> --all-files
+  prek --hook-stage manual mypy-<FOLDER> --all-files
 
 For example:
 
 .. code-block:: bash
 
-  pre-commit run --hook-stage manual mypy-airflow --all-files
+  prek --hook-stage manual mypy-airflow --all-files
 
 To show unused mypy ignores for any providers/airflow etc, eg: run below command:
 
 .. code-block:: bash
   export SHOW_UNUSED_MYPY_WARNINGS=true
-  pre-commit run --hook-stage manual mypy-airflow --all-files
+  prek --hook-stage manual mypy-airflow --all-files
 
 MyPy uses a separate docker-volume (called ``mypy-cache-volume``) that keeps the cache of last MyPy
 execution in order to speed MyPy checks up (sometimes by order of magnitude). While in most cases MyPy
@@ -518,99 +292,6 @@ will handle refreshing the cache when and if needed, there are some cases when i
 is the hard problem in computer science). This might happen for example when we upgrade MyPY. In such
 cases you might need to manually remove the cache volume by running ``breeze down --cleanup-mypy-cache``.
 
-Running static code checks via Breeze
--------------------------------------
-
-The static code checks can be launched using the Breeze environment.
-
-You run the static code checks via ``breeze static-check`` or commands.
-
-You can see the list of available static checks either via ``--help`` flag or by using the autocomplete
-option.
-
-Run the ``mypy`` check for the currently staged changes (in ``airflow/`` excluding providers):
-
-.. code-block:: bash
-
-     breeze static-checks --type mypy-airflow
-
-Run the ``mypy`` check for all files:
-
-.. code-block:: bash
-
-     breeze static-checks --type mypy-airflow --all-files
-
-Run the ``ruff`` check for the ``tests/core.py`` file with verbose output:
-
-.. code-block:: bash
-
-     breeze static-checks --type ruff --file tests/core.py --verbose
-
-Run the ``ruff`` check for the ``tests.core`` package with verbose output:
-
-.. code-block:: bash
-
-     breeze static-checks --type ruff --file tests/core/* --verbose
-
-Run the ``ruff-format`` check for the files ``airflow/example_dags/example_bash_operator.py`` and
-``airflow/example_dags/example_python_operator.py``:
-
-.. code-block:: bash
-
-     breeze static-checks --type ruff-format --file airflow/example_dags/example_bash_operator.py \
-         airflow/example_dags/example_python_operator.py
-
-Run all checks for the currently staged files:
-
-.. code-block:: bash
-
-     breeze static-checks
-
-Run all checks for all files:
-
-.. code-block:: bash
-
-    breeze static-checks --all-files
-
-Run all checks for last commit:
-
-.. code-block:: bash
-
-     breeze static-checks --last-commit
-
-Run all checks for all changes in my branch since branched from main:
-
-.. code-block:: bash
-
-     breeze static-checks --type mypy-airflow --only-my-changes
-
-More examples can be found in
-`Breeze documentation <../dev/breeze/doc/03_developer_tasks.rst#running-static-checks>`_
-
-
-Debugging pre-commit check scripts requiring image
---------------------------------------------------
-
-Those commits that use Breeze docker image might sometimes fail, depending on your operating system and
-docker setup, so sometimes it might be required to run debugging with the commands. This is done via
-two environment variables ``VERBOSE`` and ``DRY_RUN``. Setting them to "true" will respectively show the
-commands to run before running them or skip running the commands.
-
-Note that you need to run pre-commit with --verbose command to get the output regardless of the status
-of the static check (normally it will only show output on failure).
-
-Printing the commands while executing:
-
-.. code-block:: bash
-
-     VERBOSE="true" pre-commit run --verbose ruff
-
-Just performing dry run:
-
-.. code-block:: bash
-
-     DRY_RUN="true" pre-commit run --verbose ruff
-
 -----------
 
 Once your code passes all the static code checks, you should take a look at `Testing documentation <09_testing.rst>`__
diff --git a/contributing-docs/12_provider_distributions.rst b/contributing-docs/12_provider_distributions.rst
index f85f1daa4ba..434ebccbe99 100644
--- a/contributing-docs/12_provider_distributions.rst
+++ b/contributing-docs/12_provider_distributions.rst
@@ -107,9 +107,9 @@ needs to be updated after you change dependencies:
 
 .. code:: bash
 
-    breeze static-checks --type update-providers-dependencies --all-files
+    prek update-providers-dependencies --all-files
 
-If you have ``pre-commit`` installed, this will be done automatically for you when you commit the changes and
+If you have ``prek`` installed, this will be done automatically for you when you commit the changes and
 you should do it before you make a PR with such changed dependency changes
 
 Also, you should rebuild the image ``breeze ci-image build`` or answer ``y`` when you are asked to rebuild the
@@ -121,7 +121,7 @@ Provider's cross-dependencies
 Some of the providers have cross-dependencies with other providers distributions.
 This typically happens for transfer operators where operators use hooks from the other providers
 in case they are transferring data between the providers. The list of dependencies is maintained
-(automatically with the ``update-providers-dependencies`` pre-commit) in the
+(automatically with the ``update-providers-dependencies`` prek hook) in the
 ``generated/provider_dependencies.json``.
 
 Cross-dependencies between providers are converted into optional dependencies (extras) - if
@@ -165,7 +165,7 @@ in the previous chapter. However when they are locally developed, together with
 of discovery of the providers is based on ``provider.yaml`` file that is placed in the top-folder of
 the provider. The ``provider.yaml`` is the single source of truth for the provider metadata and it is
 there where you should add and remove dependencies for providers (following by running
-``update-providers-dependencies`` pre-commit to synchronize the dependencies with ``pyproject.toml``
+``update-providers-dependencies`` prek hook to synchronize the dependencies with ``pyproject.toml``
 of Airflow).
 
 The ``provider.yaml`` file is compliant with the schema that is available in
@@ -278,7 +278,7 @@ and documented. Part of the documentation is ``provider.yaml`` file ``integratio
 ``version`` information. This information is stripped-out from provider info available at runtime,
 however it is used to automatically generate documentation for the provider.
 
-If you have pre-commits installed, pre-commit will warn you and let you know what changes need to be
+If you have prek installed, it will warn you and let you know what changes need to be
 done in the ``provider.yaml`` file when you add a new Operator, Hooks, Sensor or Transfer. You can
 also take a look at the other ``provider.yaml`` files as examples.
 
diff --git a/contributing-docs/14_metadata_database_updates.rst b/contributing-docs/14_metadata_database_updates.rst
index d0d90360499..49de75f8128 100644
--- a/contributing-docs/14_metadata_database_updates.rst
+++ b/contributing-docs/14_metadata_database_updates.rst
@@ -36,12 +36,12 @@ database schema that you have made. To generate a new migration file, run the fo
        Generating
     ~/airflow/airflow/migrations/versions/a1e23c41f123_add_new_field_to_db.py
 
-Note that migration file names are standardized by pre-commit hook ``update-migration-references``, so that they sort alphabetically and indicate
-the Airflow version in which they first appear (the alembic revision ID is removed). As a result you should expect to see a pre-commit failure
+Note that migration file names are standardized by prek hook ``update-migration-references``, so that they sort alphabetically and indicate
+the Airflow version in which they first appear (the alembic revision ID is removed). As a result you should expect to see a prek failure
 on the first attempt.  Just stage the modified file and commit again
 (or run the hook manually before committing).
 
-After your new migration file is run through pre-commit it will look like this:
+After your new migration file is run through prek hook it will look like this:
 
 .. code-block::
 
@@ -70,8 +70,8 @@ To resolve these conflicts:
 
 .. code-block:: bash
 
-    pre-commit run update-migration-references --all
-    pre-commit run update-er-diagram --all
+    prek update-migration-references --all-files
+    prek update-er-diagram --all-files
 
 3. Add the updated files to the staging area and continue with the rebase.
 
diff --git a/contributing-docs/16_adding_api_endpoints.rst b/contributing-docs/16_adding_api_endpoints.rst
index 1881e7a2ba8..54cbe6163e7 100644
--- a/contributing-docs/16_adding_api_endpoints.rst
+++ b/contributing-docs/16_adding_api_endpoints.rst
@@ -18,7 +18,7 @@
 Adding a New API Endpoint in Apache Airflow
 ===========================================
 
-This documentation outlines the steps required to add a new API endpoint in Apache Airflow. It includes implementing the logic, running pre-commit checks, and documenting the changes.
+This documentation outlines the steps required to add a new API endpoint in Apache Airflow. It includes implementing the logic, running prek hooks, and documenting the changes.
 
 **The outline for this document in GitHub is available at top-right corner button (with 3-dots and 3 lines).**
 
@@ -67,19 +67,19 @@ Step 2: Add tests for your Endpoints
 
 Step 3: Documentation
 ---------------------
-Documentation is built automatically by FastAPI and our pre-commit hooks. Verify by going to ``/docs`` that the documentation is clear and appears as expected (body and return types, query params, validation)
+Documentation is built automatically by FastAPI and our prek hooks. Verify by going to ``/docs`` that the documentation is clear and appears as expected (body and return types, query params, validation)
 
 
-Step 4: Run Pre-commit Hooks
------------------------------
-1. Ensure all code meets the project's quality standards by running pre-commit hooks.
-2. Pre-commit hooks include static code checks, formatting, and other validations.
+Step 4: Run prek Hooks
+----------------------
+1. Ensure all code meets the project's quality standards by running prek hooks.
+2. Prek hooks include static code checks, formatting, and other validations.
 3. Persisted openapi spec is located in ``v2-rest-api-generated.yaml` and a hook will take care of updating it based on your new endpoint, you just need to add and commit the change.
-4. Run the following command to execute all pre-commit hooks:
+4. Run the following command to execute all prek hooks:
 
 .. code-block:: bash
 
-   pre-commit run --all-files
+   prek --all-files
 
 
 Optional: Adding Pydantic Model
@@ -99,7 +99,7 @@ In some cases, you may need to define additional models for new data structures.
 
 These models are defined to structure and validate the data handled by the API. Once defined, these models will automatically be added to the OpenAPI spec file as long as they are actually used by one endpoint.
 
-After adding or modifying Pydantic models, make sure to run the pre-commit hooks again to update any generated files.
+After adding or modifying Pydantic models, make sure to run the prek hooks again to update any generated files.
 
 Situational: Legacy Endpoint Migration
 --------------------------------------
diff --git a/contributing-docs/17_architecture_diagrams.rst b/contributing-docs/17_architecture_diagrams.rst
index 73d01440642..f82b2a2e0c9 100644
--- a/contributing-docs/17_architecture_diagrams.rst
+++ b/contributing-docs/17_architecture_diagrams.rst
@@ -20,7 +20,7 @@ Architecture Diagrams
 
 We started to use (and gradually convert old diagrams to use it) `Diagrams <https://diagrams.mingrammer.com/>`_
 as our tool of choice to generate diagrams. The diagrams are generated from Python code and can be
-automatically updated when the code changes. The diagrams are generated using pre-commit hooks (See
+automatically updated when the code changes. The diagrams are generated using prek hooks (See
 static checks below) but they can also be generated manually by running the corresponding Python code.
 
 To run the code you need to install the dependencies in the virtualenv you use to run it:
@@ -28,10 +28,10 @@ To run the code you need to install the dependencies in the virtualenv you use t
 system (``brew install graphviz`` on macOS for example).
 
 The source code of the diagrams are next to the generated diagram, the difference is that the source
-code has ``.py`` extension and the generated diagram has ``.png`` extension. The pre-commit hook ``generate-airflow-diagrams``
+code has ``.py`` extension and the generated diagram has ``.png`` extension. The prek hook ``generate-airflow-diagrams``
 will look for ``diagram_*.py`` files in the ``docs`` subdirectories
 to find them and runs them when the sources changed and the diagrams are not up to date (the
-pre-commit will automatically generate an .md5sum hash of the sources and store it next to the diagram
+prek hook will automatically generate an .md5sum hash of the sources and store it next to the diagram
 file).
 
 In order to generate the diagram manually you can run the following command:
@@ -44,19 +44,19 @@ You can also generate all diagrams by:
 
 .. code-block:: bash
 
-    pre-commit run generate-airflow-diagrams
+    prek generate-airflow-diagrams
 
 or with Breeze:
 
 .. code-block:: bash
 
-    breeze static-checks --type generate-airflow-diagrams --all-files
+    prek generate-airflow-diagrams --all-files
 
 When you iterate over a diagram, you can also setup a "save" action in your IDE to run the python
 file automatically when you save the diagram file.
 
 Once you've done iteration and you are happy with the diagram, you can commit the diagram, the source
-code and the .md5sum file. The pre-commit hook will then not run the diagram generation until the
+code and the .md5sum file. The prek hook will then not run the diagram generation until the
 source code for it changes.
 
 ------
diff --git a/contributing-docs/18_contribution_workflow.rst b/contributing-docs/18_contribution_workflow.rst
index ccc6ec5a428..5e9f1f1a0ed 100644
--- a/contributing-docs/18_contribution_workflow.rst
+++ b/contributing-docs/18_contribution_workflow.rst
@@ -40,7 +40,7 @@ In general, your contribution includes the following stages:
 
 2. Create a `local virtualenv <07_local_virtualenv.rst>`_,
    initialize the `Breeze environment <../dev/breeze/doc/README.rst>`__, and
-   install `pre-commit framework <08_static_code_checks.rst#pre-commit-hooks>`__.
+   install `prek tool <08_static_code_checks.rst#prek-hooks>`__.
    If you want to add more changes in the future, set up your fork and enable GitHub Actions.
 
 3. Join `devlist <ht...@airflow.apache.org>`__
@@ -176,9 +176,9 @@ Step 4: Prepare PR
    * Modify the class and add necessary code and unit tests.
 
    * Run and fix all the `static checks <08_static_code_checks.rst>`__. If you have
-     `pre-commits installed <08_static_code_checks.rst#pre-commit-hooks>`__,
+     `prek installed <08_static_code_checks.rst#prek-hooks>`__,
      this step is automatically run while you are committing your code. If not, you can do it manually
-     via ``git add`` and then ``pre-commit run``.
+     via ``git add`` and then ``prek``.
 
    * Run the appropriate tests as described in `Testing documentation <09_testing.rst>`__.
 
diff --git a/contributing-docs/testing/integration_tests.rst b/contributing-docs/testing/integration_tests.rst
index 401b383ab3b..a5d6c6deb87 100644
--- a/contributing-docs/testing/integration_tests.rst
+++ b/contributing-docs/testing/integration_tests.rst
@@ -298,9 +298,6 @@ Then, create the integration test file under ``tests/integration`` - remember to
 and to use the ``@pytest.mark.integration`` decorator. It is recommended to define setup and teardown methods
 (``setup_method`` and ``teardown_method``, respectively) - you could look at existing integration tests to learn more.
 
-Before pushing to GitHub, make sure to run static checks (``breeze static-checks --only-my-changes``) to apply linters
-on the Python logic, as well as to update the commands images under ``dev/breeze/docs/images``.
-
 When writing integration tests for components that also require Kerberos, you could enforce auto-enabling the latter by
 updating ``compose_file()`` method in ``airflow_breeze.params.shell_params.ShellParams``. For example, to ensure that
 Kerberos is active for ``trino`` integration tests, the following code has been introduced:
diff --git a/dev/README_RELEASE_AIRFLOW.md b/dev/README_RELEASE_AIRFLOW.md
index b1f935847f8..2cf85f6454b 100644
--- a/dev/README_RELEASE_AIRFLOW.md
+++ b/dev/README_RELEASE_AIRFLOW.md
@@ -272,7 +272,7 @@ pipx install -e ./dev/breeze
 
 - Set your version in `airflow/__init__.py` (without the RC tag).
 - Run `git commit` without a message to update versions in `docs`.
-- Add supported Airflow version to `./scripts/ci/pre_commit/supported_versions.py` and let pre-commit do the job again.
+- Add supported Airflow version to `./scripts/ci/prek/supported_versions.py` and let prek do the job again.
 - Replace the versions in `README.md` about installation and verify that installation instructions work fine.
 - Add entry for default python version to `BASE_PROVIDERS_COMPATIBILITY_CHECKS` in `src/airflow_breeze/global_constants.py`
   with the new Airflow version, and empty exclusion for providers. This list should be updated later when providers
@@ -1101,7 +1101,7 @@ EOF
 
 This includes:
 
-- Modify `./scripts/ci/pre_commit/supported_versions.py` and let pre-commit do the job.
+- Modify `./scripts/ci/prek/supported_versions.py` and let prek do the job.
 - For major/minor release, update version in `airflow/__init__.py` and `docs/docker-stack/` to the next likely minor version release.
 - Sync `RELEASE_NOTES.rst` (including deleting relevant `newsfragments`) and `README.md` changes.
 - Updating `Dockerfile` with the new version.
diff --git a/dev/README_RELEASE_HELM_CHART.md b/dev/README_RELEASE_HELM_CHART.md
index 94234db7a2c..3acbc46ed0e 100644
--- a/dev/README_RELEASE_HELM_CHART.md
+++ b/dev/README_RELEASE_HELM_CHART.md
@@ -153,7 +153,7 @@ annotations:
 ```
 
 Make sure that all the release notes changes are submitted as PR and merged. Changes in release notes should
-also automatically (via `pre-commit` trigger updating of the [reproducible_build.yaml](../chart/reproducible_build.yaml))
+also automatically (via `prek` trigger updating of the [reproducible_build.yaml](../chart/reproducible_build.yaml))
 file which is uses to reproducibly build the chart package and source tarball.
 
 You can leave the k8s environment now:
diff --git a/dev/breeze/README.md b/dev/breeze/README.md
index 95c6ed78be7..3e4defc837d 100644
--- a/dev/breeze/README.md
+++ b/dev/breeze/README.md
@@ -131,10 +131,10 @@ Note that when you update dependencies/lock them you should commit the changes i
 See [uv documentation](https://docs.astral.sh/uv/getting-started/) for more details on using `uv`.
 
 
-PLEASE DO NOT MODIFY THE HASH BELOW! IT IS AUTOMATICALLY UPDATED BY PRE-COMMIT.
+PLEASE DO NOT MODIFY THE HASH BELOW! IT IS AUTOMATICALLY UPDATED BY PREK.
 
 ---------------------------------------------------------------------------------------------------------
 
-Package config hash: 45d0d735430fd1c151071f8ce20ac90b65d5bdc4317678ce1a03004a9f0853745a7b8cbf70520fc55afac15f742e961eeb7f5ffbf948f1b230f5cba788fceb65
+Package config hash: 9d908346f49e07bb1c179b2fc1f172f52d8b553cd8dbc380ce8ee1d735130cee203813e588ace9814d3f70ce8e7ba05b4b904bb7bbddda331338e940ed93c94a
 
 ---------------------------------------------------------------------------------------------------------
diff --git a/dev/breeze/doc/01_installation.rst b/dev/breeze/doc/01_installation.rst
index 9b54ed17d75..3f39fd643b9 100644
--- a/dev/breeze/doc/01_installation.rst
+++ b/dev/breeze/doc/01_installation.rst
@@ -125,7 +125,7 @@ Docker in WSL 2
     If you're experiencing errors such as ``ERROR: for docker-compose_airflow_run
     Cannot create container for service airflow: not a directory`` when starting Breeze
     after the first time or an error like ``docker: Error response from daemon: not a directory.
-    See 'docker run --help'.`` when running the pre-commit tests, you may need to consider
+    See 'docker run --help'.`` when running the prek tests, you may need to consider
     `installing Docker directly in WSL 2 <https://dev.to/bowmanjd/install-docker-on-windows-wsl-without-docker-desktop-34m9>`_
     instead of using Docker Desktop for Windows.
 
diff --git a/dev/breeze/doc/03_developer_tasks.rst b/dev/breeze/doc/03_developer_tasks.rst
index 5ea9a48884a..c0a55f22de5 100644
--- a/dev/breeze/doc/03_developer_tasks.rst
+++ b/dev/breeze/doc/03_developer_tasks.rst
@@ -265,32 +265,30 @@ as the short hand operator.
 Running static checks
 ---------------------
 
-You can run static checks via Breeze. You can also run them via pre-commit command but with auto-completion
-Breeze makes it easier to run selective static checks. If you press <TAB> after the static-check and if
-you have auto-complete setup you should see auto-completable list of all checks available.
+You can run static checks via prek.
 
 For example, this following command:
 
 .. code-block:: bash
 
-     breeze static-checks --type mypy-airflow
+     prek mypy-airflow
 
 will run mypy check for currently staged files inside ``airflow/`` excluding providers.
 
 Selecting files to run static checks on
 ---------------------------------------
 
-Pre-commits run by default on staged changes that you have locally changed. It will run it on all the
+Prek hooks run by default on staged changes that you have locally changed. It will run it on all the
 files you run ``git add`` on and it will ignore any changes that you have modified but not staged.
 If you want to run it on all your modified files you should add them with ``git add`` command.
 
 With ``--all-files`` you can run static checks on all files in the repository. This is useful when you
 want to be sure they will not fail in CI, or when you just rebased your changes and want to
-re-run latest pre-commits on your changes, but it can take a long time (few minutes) to wait for the result.
+re-run latest prek hooks on your changes, but it can take a long time (few minutes) to wait for the result.
 
 .. code-block:: bash
 
-     breeze static-checks --type mypy-airflow --all-files
+     prek mypy-airflow --all-files
 
 The above will run mypy check for all files.
 
@@ -299,58 +297,35 @@ specifying (can be multiple times) ``--file`` flag.
 
 .. code-block:: bash
 
-     breeze static-checks --type mypy-airflow --file airflow/utils/code_utils.py --file airflow/utils/timeout.py
+     prek mypy-airflow --file airflow/utils/code_utils.py --file airflow/utils/timeout.py
 
 The above will run mypy check for those to files (note: autocomplete should work for the file selection).
 
 However, often you do not remember files you modified and you want to run checks for files that belong
-to specific commits you already have in your branch. You can use ``breeze static check`` to run the checks
+to specific commits you already have in your branch. You can use ``prek`` to run the checks
 only on changed files you have already committed to your branch - either for specific commit, for last
 commit, for all changes in your branch since you branched off from main or for specific range
 of commits you choose.
 
 .. code-block:: bash
 
-     breeze static-checks --type mypy-airflow --last-commit
+     prek mypy-airflow --last-commit
 
 The above will run mypy check for all files in the last commit in your branch.
 
 .. code-block:: bash
 
-     breeze static-checks --type mypy-airflow --only-my-changes
-
-The above will run mypy check for all commits in your branch which were added since you branched off from main.
-
-.. code-block:: bash
-
-     breeze static-checks --type mypy-airflow --commit-ref 639483d998ecac64d0fef7c5aa4634414065f690
-
-The above will run mypy check for all files in the 639483d998ecac64d0fef7c5aa4634414065f690 commit.
-Any ``commit-ish`` reference from Git will work here (branch, tag, short/long hash etc.)
-
-.. code-block:: bash
-
-     breeze static-checks --type identity --verbose --from-ref HEAD^^^^ --to-ref HEAD
+     prek identity --verbose --from-ref HEAD^^^^ --to-ref HEAD
 
 The above will run the check for the last 4 commits in your branch. You can use any ``commit-ish`` references
 in ``--from-ref`` and ``--to-ref`` flags.
 
-
-These are all available flags of ``static-checks`` command:
-
-.. image:: ./images/output_static-checks.svg
-  :target: https://raw.githubusercontent.com/apache/airflow/main/dev/breeze/images/output_static-checks.svg
-  :width: 100%
-  :alt: Breeze static checks
-
-
 .. note::
 
     When you run static checks, some of the artifacts (mypy_cache) is stored in docker-compose volume
     so that it can speed up static checks execution significantly. However, sometimes, the cache might
     get broken, in which case you should run ``breeze down`` to clean up the cache.
 
-
 .. note::
 
     You cannot change Python version for static checks that are run within Breeze containers.
@@ -440,7 +415,7 @@ command takes care about it. This is needed when you want to run API server insi
 
 Note
 
-This command requires the ``pre-commit`` tool, which should be installed by following `this guide <../../../contributing-docs/03_contributors_quick_start.rst#configuring-pre-commit>`__.
+This command requires the ``prek`` tool, which should be installed by following `this guide <../../../contributing-docs/03_contributors_quick_start.rst#configuring-prek>`__.
 
 Breeze cleanup
 --------------
diff --git a/dev/breeze/doc/04_troubleshooting.rst b/dev/breeze/doc/04_troubleshooting.rst
index f9828ef1b70..64f5dbdd52a 100644
--- a/dev/breeze/doc/04_troubleshooting.rst
+++ b/dev/breeze/doc/04_troubleshooting.rst
@@ -99,30 +99,28 @@ or
     ERROR: Package 'blacken-docs' requires a different Python: 3.8.18 not in '>=3.9'
 
 
-It means that your pre-commit hook is installed with (already End-Of-Life) Python 3.8 and you should reinstall
-it and clean pre-commit cache.
+It means that your prek hook is installed with (already End-Of-Life) Python 3.8 and you should reinstall
+it and clean prek cache.
 
-This can be done with ``uv tool`` to install ``pre-commit``)
+This can be done with ``uv tool`` to install ``prek``)
 
 .. code-block:: bash
 
-    uv tool uninstall pre-commit
-    uv tool install pre-commit --python 3.9 --force --with pre-commit-uv
-    pre-commit clean
-    pre-commit install
+    uv tool uninstall prek
+    uv tool install prek --python 3.9 --force
+    prek clean
+    prek install
 
 You can also use ``pipx``
 
 .. code-block:: bash
 
-    pipx uninstall pre-commit
-    pipx install pre-commit --python $(which python3.9) --force
-    # This one allows pre-commit to use uv for venvs installed by pre-commit
-    pipx inject pre-commit pre-commit-uv  # optionally if you want to use uv to install virtualenvs
-    pre-commit clean
-    pre-commit install
+    pipx uninstall prek
+    pipx install prek --python $(which python3.9) --force
+    prek clean
+    prek install
 
-If you installed ``pre-commit`` differently, you should remove and reinstall
+If you installed ``prek`` differently, you should remove and reinstall
 it (and clean cache) following the way you installed it.
 
 
@@ -132,7 +130,7 @@ Bad Interpreter Error with ``pipx``
 If you are experiencing bad interpreter errors
 ``zsh: /Users/eladkal/.local/bin/breeze: bad interpreter: /Users/eladkal/.local/pipx/venvs/apache-airflow-breeze/bin/python: no such file or directory``
 
-try to run ``pipx list`` to view which packages has bad interpreter (it can be more than just breeze, for example  pre-commit)
+try to run ``pipx list`` to view which packages has bad interpreter (it can be more than just breeze, for example  prek)
 you can fix these errors by running ``pipx reinstall-all``
 
 ETIMEDOUT Error
@@ -170,7 +168,7 @@ When running ``breeze start-airflow``, either normally or in ``dev-mode``, the f
 
     The asset compilation failed. Exiting.
 
-    [INFO] Locking pre-commit directory
+    [INFO] Locking prek directory
 
     Error 1 returned
 
diff --git a/dev/breeze/doc/05_test_commands.rst b/dev/breeze/doc/05_test_commands.rst
index a51013e171a..0ca1c072b4a 100644
--- a/dev/breeze/doc/05_test_commands.rst
+++ b/dev/breeze/doc/05_test_commands.rst
@@ -317,6 +317,25 @@ through ``breeze testing docker-compose-tests`` command.
 
 The docker-compose tests are in ``docker-tests/`` folder in the main repo.
 
+Running task-sdk integration tests
+..................................
+
+You can use Breeze to run the task sdk integration tests. Those tests are run using Production image by default
+and the tests are running with the docker-compose we have for task-sdk tests.
+
+.. image:: ./images/output_testing_docker-compose-tests.svg
+  :target: https://raw.githubusercontent.com/apache/airflow/main/dev/breeze/images/output_testing_task-sdk-integration-tests.svg
+  :width: 100%
+  :alt: Breeze testing task-sdk-integration-tests
+
+You can also iterate over those tests with pytest command but unlike regular unit tests, they need to be run in
+a local venv. You can build the prod image with breeze and that will be used by default if present to run the tests.
+
+You can override the ``DOCKER_IMAGE`` environment variable to point to the image to test using the
+``breeze testing task-sdk-integration-tests`` command.
+
+The task-sdk tests are in ``task-sdk-tests/`` folder in the main repo.
+
 Running Kubernetes tests
 ------------------------
 
diff --git a/dev/breeze/doc/07_breeze_maintenance_tasks.rst b/dev/breeze/doc/07_breeze_maintenance_tasks.rst
index f139040375e..83f502106d6 100644
--- a/dev/breeze/doc/07_breeze_maintenance_tasks.rst
+++ b/dev/breeze/doc/07_breeze_maintenance_tasks.rst
@@ -29,7 +29,7 @@ Regenerating documentation SVG screenshots
 This documentation contains exported SVG screenshots with "help" of their commands and parameters. You can
 regenerate those images that need to be regenerated because their commands changed (usually after
 the breeze code has been changed) via ``regenerate-command-images`` command. Usually this is done
-automatically via pre-commit, but sometimes (for example when ``rich`` or ``rich-click`` library changes)
+automatically via ``prek``, but sometimes (for example when ``rich`` or ``rich-click`` library changes)
 you need to regenerate those images.
 
 You can add ``--force`` flag (or ``FORCE="true"`` environment variable to regenerate all images (not
diff --git a/dev/breeze/doc/10_advanced_breeze_topics.rst b/dev/breeze/doc/10_advanced_breeze_topics.rst
index 3cd22855db2..364d0a1d7a1 100644
--- a/dev/breeze/doc/10_advanced_breeze_topics.rst
+++ b/dev/breeze/doc/10_advanced_breeze_topics.rst
@@ -149,16 +149,13 @@ If you want to add core dependency that should always be installed - you need to
 to ``dependencies`` section. If you want to add it to one of the optional core extras, you should
 add it in the extra definition in ``pyproject.toml`` (you need to find out where it is defined).
 If you want to add it to one of the providers, you need to add it to the ``provider.yaml`` file in the provider
-directory - but remember that this should be followed by running pre-commit that will automatically update
+directory - but remember that this should be followed by running prek that will automatically update
 the ``pyproject.toml`` with the new dependencies as the ``provider.yaml`` files are not used directly, they
 are used to update ``pyproject.toml`` file:
 
 .. code-block:: bash
 
-    pre-commit run update-providers-dependencies  --all-files
-
-You can also run the pre-commit by ``breeze static-checks --type update-providers-dependencies --all-files``
-command - which provides autocomplete.
+    prek update-providers-dependencies  --all-files
 
 After you've updated the dependencies, you need to rebuild the image:
 
@@ -191,15 +188,11 @@ scripts are present in ``scripts/docker`` directory and are aptly (!) named ``in
 of the apt dependencies are installed in the ``install_os_dependencies.sh``, but some are installed in
 other scripts (for example ``install_postgres.sh`` or ``install_mysql.sh``).
 
-After you modify the dependencies in the scripts, you need to inline them by running pre-commit:
+After you modify the dependencies in the scripts, you need to inline them by running prek:
 
 .. code-block:: bash
 
-    pre-commit run update-inlined-dockerfile-scripts --all-files
-
-You can also run the pre-commit by ``breeze static-checks --type update-inlined-dockerfile-scripts --all-files``
-command - which provides autocomplete.
-
+    prek update-inlined-dockerfile-scripts --all-files
 
 After you've updated the dependencies, you need to rebuild the image:
 
diff --git a/dev/breeze/doc/ci/02_images.md b/dev/breeze/doc/ci/02_images.md
index f17ae7e3f8a..f1077942906 100644
--- a/dev/breeze/doc/ci/02_images.md
+++ b/dev/breeze/doc/ci/02_images.md
@@ -444,8 +444,7 @@ can be used for CI images:
 | `ADDITIONAL_DEV_APT_ENV`          |                            | Additional env variables defined when installing dev deps                                                         |
 | `AIRFLOW_PIP_VERSION`             | `25.2`                     | `pip` version used.                                                                                               |
 | `AIRFLOW_UV_VERSION`              | `0.8.8`                    | `uv` version used.                                                                                                |
-| `AIRFLOW_PRE_COMMIT_VERSION`      | `4.3.0`                    | `pre-commit` version used.                                                                                        |
-| `AIRFLOW_PRE_COMMIT_UV_VERSION`   | `4.1.4`                    | `pre-commit-uv` version used.                                                                                     |
+| `AIRFLOW_PREK_VERSION`            | `0.0.26`                    | `prek` version used.                                                                                              |
 | `AIRFLOW_USE_UV`                  | `true`                     | Whether to use UV for installation.                                                                               |
 | `PIP_PROGRESS_BAR`                | `on`                       | Progress bar for PIP installation                                                                                 |
 
diff --git a/dev/breeze/doc/ci/04_selective_checks.md b/dev/breeze/doc/ci/04_selective_checks.md
index 7f0b64dcbc7..056f3a10c5e 100644
--- a/dev/breeze/doc/ci/04_selective_checks.md
+++ b/dev/breeze/doc/ci/04_selective_checks.md
@@ -24,7 +24,7 @@
 - [Selective CI Checks](#selective-ci-checks)
   - [Groups of files that selective check make decisions on](#groups-of-files-that-selective-check-make-decisions-on)
   - [Selective check decision rules](#selective-check-decision-rules)
-  - [Skipping pre-commits (Static checks)](#skipping-pre-commits-static-checks)
+  - [Skipping prek hooks (Static checks)](#skipping-prek-hooks-static-checks)
   - [Suspended providers](#suspended-providers)
   - [Selective check outputs](#selective-check-outputs)
   - [Committer vs. Non-committer PRs](#committer-vs-non-committer-prs)
@@ -111,7 +111,7 @@ together using `pytest-xdist` (pytest-xdist distributes the tests among parallel
 * If there are no files left in sources after matching the test types and Kubernetes files,
   then apparently some Core/Other files have been changed. This automatically adds all test
   types to execute. This is done because changes in core might impact all the other test types.
-* if `CI Image building` is disabled, only basic pre-commits are enabled - no 'image-depending` pre-commits
+* if `CI Image building` is disabled, only basic prek hooks are enabled - no 'image-depending` prek hooks
   are enabled.
 * If there are some build dependencies changed (`hatch_build.py` and updated system dependencies in
   the `pyproject.toml` - then `upgrade to newer dependencies` is enabled.
@@ -121,12 +121,12 @@ together using `pytest-xdist` (pytest-xdist distributes the tests among parallel
   changed, also providers docs are built because all providers depend on airflow docs. If any of the docs
   build python files changed or when build is "canary" type in main - all docs packages are built.
 
-## Skipping pre-commits (Static checks)
+## Skipping prek hooks (Static checks)
 
-Our CI always run pre-commit checks with `--all-files` flag. This is in order to avoid cases where
-different check results are run when only subset of files is used. This has an effect that the pre-commit
+Our CI always run prek checks with `--all-files` flag. This is in order to avoid cases where
+different check results are run when only subset of files is used. This has an effect that the prek
 tests take a long time to run when all of them are run. Selective checks allow to save a lot of time
-for those tests in regular PRs of contributors by smart detection of which pre-commits should be skipped
+for those tests in regular PRs of contributors by smart detection of which prek hooks should be skipped
 when some files are not changed. Those are the rules implemented:
 
 * The `identity` check is always skipped (saves space to display all changed files in CI)
@@ -137,7 +137,7 @@ when some files are not changed. Those are the rules implemented:
   * check-provider-yaml-valid
   * lint-helm-chart
   * mypy-providers
-* If "full tests" mode is detected, no more pre-commits are skipped - we run all of them
+* If "full tests" mode is detected, no more prek hooks are skipped - we run all of them
 * The following checks are skipped if those files are not changed:
   * if no `All Providers Python files` changed - `mypy-providers` check is skipped
   * if no `All Airflow Python files` changed - `mypy-airflow` check is skipped
@@ -170,7 +170,7 @@ GitHub Actions to pass the list of parameters to a command to execute
 | all-python-versions-list-as-string                      | List of all python versions there are available in the form of space separated string                  | 3.9 3.10                                | *    |
 | all-versions                                            | If set to true, then all python, k8s, DB versions are used for tests.                                  | false                                   |      |
 | basic-checks-only                                       | Whether to run all static checks ("false") or only basic set of static checks ("true")                 | false                                   |      |
-|  ci-image-build                                          | Whether CI image build is needed                                                                       | true                                    |      |
+| ci-image-build                                          | Whether CI image build is needed                                                                       | true                                    |      |
 | core-test-types-list-as-strings-in-json                 | Which test types should be run for unit tests for core                                                 | API Always Providers                    | *    |
 | debug-resources                                         | Whether resources usage should be printed during parallel job execution ("true"/ "false")              | false                                   |      |
 | default-branch                                          | Which branch is default for the build ("main" for main branch, "v2-4-test" for 2.4 line etc.)          | main                                    |      |
@@ -230,7 +230,7 @@ GitHub Actions to pass the list of parameters to a command to execute
 | amd-runners                                             | List of labels assigned for runners for that build for public AMD runners                              | \["ubuntu-22.04"\]                      |      |
 | arm-runners                                             | List of labels assigned for runners for that build for public ARM runners                              | \["ubuntu-22.04-arm"\]                  |      |
 | selected-providers-list-as-string                       | List of providers affected when they are selectively affected.                                         | airbyte http                            | *    |
-| skip-pre-commits                                        | Which pre-commits should be skipped during the static-checks run                                       | flynt,identity                          |      |
+| skip-prek-hooks                                         | Which prek hooks should be skipped during the static-checks run                                       | flynt,identity                          |      |
 | skip-providers-tests                                    | When provider tests should be skipped (on non-main branch or when no provider changes detected)        | true                                    |      |
 | sqlite-exclude                                          | Which versions of Sqlite to exclude for tests as JSON array                                            | []                                      |      |
 | testable-core-integrations                              | List of core integrations that are testable in the build as JSON array                                 | \['celery', 'kerberos'\]                |      |
@@ -244,7 +244,7 @@ When we decided whether to run `full tests` we do not check (directly) if provid
 even if they are single source of truth for provider dependencies and when you add a dependency there,
 the environment changes and generally full tests are advised.
 
-This is because provider.yaml change will automatically trigger (via `update-provider-dependencies` pre-commit)
+This is because provider.yaml change will automatically trigger (via `update-provider-dependencies` prek)
 generation of `generated/provider_dependencies.json` and `pyproject.toml` gets updated as well. This is a far
 better indication if we need to run full tests than just checking if provider.yaml files changed, because
 provider.yaml files contain more information than just dependencies - they are the single source of truth
diff --git a/dev/breeze/doc/ci/05_workflows.md b/dev/breeze/doc/ci/05_workflows.md
index 8db97a96a8d..ed7211a3e61 100644
--- a/dev/breeze/doc/ci/05_workflows.md
+++ b/dev/breeze/doc/ci/05_workflows.md
@@ -202,7 +202,7 @@ Windows.
 they are needed (basically, when Python code has been modified).
 
 `(6)` On non-main builds some of the static checks that are related to
-Providers are skipped via selective checks (`skip-pre-commits` check).
+Providers are skipped via selective checks (`skip-prek-hooks` check).
 
 `(7)` On non-main builds the unit tests, docs and integration tests
 for providers are skipped via selective checks.
diff --git a/dev/breeze/doc/ci/07_running_ci_locally.md b/dev/breeze/doc/ci/07_running_ci_locally.md
index 6724008b8cc..a0422f928b4 100644
--- a/dev/breeze/doc/ci/07_running_ci_locally.md
+++ b/dev/breeze/doc/ci/07_running_ci_locally.md
@@ -36,7 +36,7 @@
 The main goal of the CI philosophy we have that no matter how complex
 the test and integration infrastructure, as a developer you should be
 able to reproduce and re-run any of the failed checks locally. One part
-of it are pre-commit checks, that allow you to run the same static
+of it are prek checks, that allow you to run the same static
 checks in CI and locally, but another part is the CI environment which
 is replicated locally with Breeze.
 
@@ -163,8 +163,8 @@ Those variables are used to control the initialization of the environment in the
 | Variable                        | Option                             | Local dev | CI        | Comment                                                                     |
 |---------------------------------|------------------------------------|-----------|-----------|-----------------------------------------------------------------------------|
 | MOUNT_SOURCES                   | --mount-sources                    |           | skip      | Whether to mount the local sources into the container.                      |
-| SKIP_ENVIRONMENT_INITIALIZATION | --skip-environment-initialization  | false (*) | false (*) | Skip initialization of test environment (*) set to true in pre-commits.     |
-| SKIP_IMAGE_UPGRADE_CHECK        | --skip-image-upgrade-check         | false (*) | false (*) | Skip checking if image should be upgraded (*) set to true in pre-commits.   |
+| SKIP_ENVIRONMENT_INITIALIZATION | --skip-environment-initialization  | false (*) | false (*) | Skip initialization of test environment (*) set to true in prek hooks.      |
+| SKIP_IMAGE_UPGRADE_CHECK        | --skip-image-upgrade-check         | false (*) | false (*) | Skip checking if image should be upgraded (*) set to true in prek hooks.    |
 | SKIP_PROVIDERS_TESTS            |                                    | false     | false     | Skip running provider integration tests (in non-main branch).               |
 | SKIP_SSH_SETUP                  |                                    | false     | false (*) | Skip setting up SSH server for tests. (*) set to true in GitHub CodeSpaces. |
 | VERBOSE_COMMANDS                |                                    | false     | false     | Whether every command executed in docker should be printed.                 |
diff --git a/dev/breeze/doc/images/output-commands-hash.txt b/dev/breeze/doc/images/output-commands-hash.txt
index 407f5d55ae7..c27896f7b52 100644
--- a/dev/breeze/doc/images/output-commands-hash.txt
+++ b/dev/breeze/doc/images/output-commands-hash.txt
@@ -1,4 +1,4 @@
-# This file is automatically generated by pre-commit. If you have a conflict with this file
+# This file is automatically generated by prek. If you have a conflict with this file
 # Please do not solve it but run `breeze setup regenerate-command-images`.
 # This command should fix the conflict and regenerate help images that you have conflict with.
 main:ffb1a766b791beaf5f8a983587db870f
diff --git a/dev/breeze/doc/images/output-commands.svg b/dev/breeze/doc/images/output-commands.svg
index 5171dd9625c..8aa291bc175 100644
--- a/dev/breeze/doc/images/output-commands.svg
+++ b/dev/breeze/doc/images/output-commands.svg
@@ -1,4 +1,4 @@
-<svg class="rich-terminal" viewBox="0 0 1482 2294.7999999999997" xmlns="http://www.w3.org/2000/svg">
+<svg class="rich-terminal" viewBox="0 0 1482 2270.4" xmlns="http://www.w3.org/2000/svg">
     <!-- Generated with Rich https://www.textualize.io -->
     <style>
 
@@ -43,7 +43,7 @@
 
     <defs>
     <clipPath id="breeze-help-clip-terminal">
-      <rect x="0" y="0" width="1463.0" height="2243.7999999999997" />
+      <rect x="0" y="0" width="1463.0" height="2219.4" />
     </clipPath>
     <clipPath id="breeze-help-line-0">
     <rect x="0" y="1.5" width="1464" height="24.65"/>
@@ -315,12 +315,9 @@
 <clipPath id="breeze-help-line-89">
     <rect x="0" y="2173.1" width="1464" height="24.65"/>
             </clipPath>
-<clipPath id="breeze-help-line-90">
-    <rect x="0" y="2197.5" width="1464" height="24.65"/>
-            </clipPath>
     </defs>
 
-    <rect fill="#292929" stroke="rgba(255,255,255,0.35)" stroke-width="1" x="1" y="1" width="1480" height="2292.8" rx="8"/><text class="breeze-help-title" fill="#c5c8c6" text-anchor="middle" x="740" y="27">Breeze&#160;commands</text>
+    <rect fill="#292929" stroke="rgba(255,255,255,0.35)" stroke-width="1" x="1" y="1" width="1480" height="2268.4" rx="8"/><text class="breeze-help-title" fill="#c5c8c6" text-anchor="middle" x="740" y="27">Breeze&#160;commands</text>
             <g transform="translate(26,22)">
             <circle cx="0" cy="0" r="7" fill="#ff5f57"/>
             <circle cx="22" cy="0" r="7" fill="#febc2e"/>
@@ -355,7 +352,7 @@
 </text><text class="breeze-help-r5" x="0" y="556.8" textLength="12.2" clip-path="url(#breeze-help-line-22)">│</text><text class="breeze-help-r4" x="24.4" y="556.8" textLength="170.8" clip-path="url(#breeze-help-line-22)">--project-name</text><text class="breeze-help-r1" x="244" y="556.8" textLength="1195.6" clip-path="url(#breeze-help-line-22)">Name&#160;of&#160;the&#160;docker-compose&#160;project&#160;to&#160;bring&#160;down.&#160;The&#160;`docker-compose`&#160;is&#160;for&#160;legacy& [...]
 </text><text class="breeze-help-r5" x="0" y="581.2" textLength="12.2" clip-path="url(#breeze-help-line-23)">│</text><text class="breeze-help-r1" x="244" y="581.2" textLength="512.4" clip-path="url(#breeze-help-line-23)">project&#160;name&#160;and&#160;you&#160;can&#160;use&#160;`breeze&#160;down&#160;</text><text class="breeze-help-r4" x="756.4" y="581.2" textLength="170.8" clip-path="url(#breeze-help-line-23)">--project-name</text><text class="breeze-help-r1" x="927.2" y="581.2" textLen [...]
 </text><text class="breeze-help-r5" x="0" y="605.6" textLength="12.2" clip-path="url(#breeze-help-line-24)">│</text><text class="breeze-help-r1" x="244" y="605.6" textLength="1195.6" clip-path="url(#breeze-help-line-24)">belonging&#160;to&#160;it.&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160 [...]
-</text><text class="breeze-help-r5" x="0" y="630" textLength="12.2" clip-path="url(#breeze-help-line-25)">│</text><text class="breeze-help-r7" x="244" y="630" textLength="1195.6" clip-path="url(#breeze-help-line-25)">(breeze&#160;|&#160;pre-commit&#160;|&#160;docker-compose)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;& [...]
+</text><text class="breeze-help-r5" x="0" y="630" textLength="12.2" clip-path="url(#breeze-help-line-25)">│</text><text class="breeze-help-r7" x="244" y="630" textLength="1195.6" clip-path="url(#breeze-help-line-25)">(breeze&#160;|&#160;prek&#160;|&#160;docker-compose)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;& [...]
 </text><text class="breeze-help-r5" x="0" y="654.4" textLength="12.2" clip-path="url(#breeze-help-line-26)">│</text><text class="breeze-help-r5" x="244" y="654.4" textLength="1195.6" clip-path="url(#breeze-help-line-26)">[default:&#160;breeze]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#1 [...]
 </text><text class="breeze-help-r5" x="0" y="678.8" textLength="12.2" clip-path="url(#breeze-help-line-27)">│</text><text class="breeze-help-r4" x="24.4" y="678.8" textLength="158.6" clip-path="url(#breeze-help-line-27)">--docker-host</text><text class="breeze-help-r1" x="244" y="678.8" textLength="915" clip-path="url(#breeze-help-line-27)">Optional&#160;-&#160;docker&#160;host&#160;to&#160;use&#160;when&#160;running&#160;docker&#160;commands.&#160;When&#160;set,&#160;the&#160;`</text><t [...]
 </text><text class="breeze-help-r5" x="0" y="703.2" textLength="12.2" clip-path="url(#breeze-help-line-28)">│</text><text class="breeze-help-r1" x="244" y="703.2" textLength="1195.6" clip-path="url(#breeze-help-line-28)">ignored&#160;when&#160;building&#160;images.&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160 [...]
@@ -394,34 +391,33 @@
 </text><text class="breeze-help-r5" x="0" y="1508.4" textLength="24.4" clip-path="url(#breeze-help-line-61)">╭─</text><text class="breeze-help-r5" x="24.4" y="1508.4" textLength="244" clip-path="url(#breeze-help-line-61)">&#160;Developer&#160;commands&#160;</text><text class="breeze-help-r5" x="268.4" y="1508.4" textLength="1171.2" clip-path="url(#breeze-help-line-61)">────────────────────────────────────────────────────────────────────────────────────────────────</text><text class="bree [...]
 </text><text class="breeze-help-r5" x="0" y="1532.8" textLength="12.2" clip-path="url(#breeze-help-line-62)">│</text><text class="breeze-help-r4" x="24.4" y="1532.8" textLength="280.6" clip-path="url(#breeze-help-line-62)">start-airflow&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-help-r1" x="329.4" y="1532.8" textLength="1110.2" clip-path="url(#breeze-help-line-62)">Enter&#160;breeze&#160;environment&#160;and&#160;starts&#160;all&#160;Airflow&#16 [...]
 </text><text class="breeze-help-r5" x="0" y="1557.2" textLength="12.2" clip-path="url(#breeze-help-line-63)">│</text><text class="breeze-help-r1" x="329.4" y="1557.2" textLength="1110.2" clip-path="url(#breeze-help-line-63)">assets&#160;if&#160;contents&#160;of&#160;www&#160;directory&#160;changed.&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;& [...]
-</text><text class="breeze-help-r5" x="0" y="1581.6" textLength="12.2" clip-path="url(#breeze-help-line-64)">│</text><text class="breeze-help-r4" x="24.4" y="1581.6" textLength="280.6" clip-path="url(#breeze-help-line-64)">static-checks&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-help-r1" x="329.4" y="1581.6" textLength="1110.2" clip-path="url(#breeze-help-line-64)">Run&#160;static&#160;checks.&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160 [...]
-</text><text class="breeze-help-r5" x="0" y="1606" textLength="12.2" clip-path="url(#breeze-help-line-65)">│</text><text class="breeze-help-r4" x="24.4" y="1606" textLength="280.6" clip-path="url(#breeze-help-line-65)">build-docs&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-help-r1" x="329.4" y="1606" textLength="1110.2" clip-path="url(#breeze-help-line-65)">Build&#160;documents.&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#1 [...]
-</text><text class="breeze-help-r5" x="0" y="1630.4" textLength="12.2" clip-path="url(#breeze-help-line-66)">│</text><text class="breeze-help-r4" x="24.4" y="1630.4" textLength="280.6" clip-path="url(#breeze-help-line-66)">down&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-help-r1" x="329.4" y="1630.4" textLength="1110.2" clip-path="url(#breeze-help-line-66)">Stop&#160;running&#160;breeze&#160;e [...]
-</text><text class="breeze-help-r5" x="0" y="1654.8" textLength="12.2" clip-path="url(#breeze-help-line-67)">│</text><text class="breeze-help-r4" x="24.4" y="1654.8" textLength="280.6" clip-path="url(#breeze-help-line-67)">shell&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-help-r1" x="329.4" y="1654.8" textLength="1110.2" clip-path="url(#breeze-help-line-67)">Enter&#160;breeze&#160;environment.&#160; [...]
-</text><text class="breeze-help-r5" x="0" y="1679.2" textLength="12.2" clip-path="url(#breeze-help-line-68)">│</text><text class="breeze-help-r4" x="24.4" y="1679.2" textLength="280.6" clip-path="url(#breeze-help-line-68)">exec&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-help-r1" x="329.4" y="1679.2" textLength="1110.2" clip-path="url(#breeze-help-line-68)">Joins&#160;the&#160;interactive&#160 [...]
-</text><text class="breeze-help-r5" x="0" y="1703.6" textLength="12.2" clip-path="url(#breeze-help-line-69)">│</text><text class="breeze-help-r4" x="24.4" y="1703.6" textLength="280.6" clip-path="url(#breeze-help-line-69)">run&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-help-r1" x="329.4" y="1703.6" textLength="1110.2" clip-path="url(#breeze-help-line-69)">Run&#160;a&#160;command&#160;in [...]
-</text><text class="breeze-help-r5" x="0" y="1728" textLength="12.2" clip-path="url(#breeze-help-line-70)">│</text><text class="breeze-help-r4" x="24.4" y="1728" textLength="280.6" clip-path="url(#breeze-help-line-70)">compile-ui-assets&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-help-r1" x="329.4" y="1728" textLength="1110.2" clip-path="url(#breeze-help-line-70)">Compiles&#160;ui&#160;assets.&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; [...]
-</text><text class="breeze-help-r5" x="0" y="1752.4" textLength="12.2" clip-path="url(#breeze-help-line-71)">│</text><text class="breeze-help-r4" x="24.4" y="1752.4" textLength="280.6" clip-path="url(#breeze-help-line-71)">cleanup&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-help-r1" x="329.4" y="1752.4" textLength="1110.2" clip-path="url(#breeze-help-line-71)">Cleans&#160;the&#160;cache&#160;of&#160;parameters, [...]
-</text><text class="breeze-help-r5" x="0" y="1776.8" textLength="12.2" clip-path="url(#breeze-help-line-72)">│</text><text class="breeze-help-r4" x="24.4" y="1776.8" textLength="280.6" clip-path="url(#breeze-help-line-72)">generate-migration-file</text><text class="breeze-help-r1" x="329.4" y="1776.8" textLength="1110.2" clip-path="url(#breeze-help-line-72)">Autogenerate&#160;the&#160;alembic&#160;migration&#160;file&#160;for&#160;the&#160;ORM&#160;changes.&#160;&#160;&#160;&#160;&#160;& [...]
-</text><text class="breeze-help-r5" x="0" y="1801.2" textLength="12.2" clip-path="url(#breeze-help-line-73)">│</text><text class="breeze-help-r4" x="24.4" y="1801.2" textLength="280.6" clip-path="url(#breeze-help-line-73)">doctor&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-help-r1" x="329.4" y="1801.2" textLength="1110.2" clip-path="url(#breeze-help-line-73)">Auto-healing&#160;of&#160;breeze&#160;&#160;&# [...]
-</text><text class="breeze-help-r5" x="0" y="1825.6" textLength="1464" clip-path="url(#breeze-help-line-74)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-help-r1" x="1464" y="1825.6" textLength="12.2" clip-path="url(#breeze-help-line-74)">
-</text><text class="breeze-help-r5" x="0" y="1850" textLength="24.4" clip-path="url(#breeze-help-line-75)">╭─</text><text class="breeze-help-r5" x="24.4" y="1850" textLength="219.6" clip-path="url(#breeze-help-line-75)">&#160;Testing&#160;commands&#160;</text><text class="breeze-help-r5" x="244" y="1850" textLength="1195.6" clip-path="url(#breeze-help-line-75)">──────────────────────────────────────────────────────────────────────────────────────────────────</text><text class="breeze-hel [...]
-</text><text class="breeze-help-r5" x="0" y="1874.4" textLength="12.2" clip-path="url(#breeze-help-line-76)">│</text><text class="breeze-help-r4" x="24.4" y="1874.4" textLength="183" clip-path="url(#breeze-help-line-76)">testing&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-help-r1" x="231.8" y="1874.4" textLength="1207.8" clip-path="url(#breeze-help-line-76)">Tools&#160;that&#160;developers&#160;can&#160;use&#160;to&#160;run&#160;tests&#160;&#160;&#160;&#160; [...]
-</text><text class="breeze-help-r5" x="0" y="1898.8" textLength="12.2" clip-path="url(#breeze-help-line-77)">│</text><text class="breeze-help-r4" x="24.4" y="1898.8" textLength="183" clip-path="url(#breeze-help-line-77)">k8s&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-help-r1" x="231.8" y="1898.8" textLength="1207.8" clip-path="url(#breeze-help-line-77)">Tools&#160;that&#160;developers&#160;use&#160;to&#160;run&#160;Kubernetes&#160;te [...]
-</text><text class="breeze-help-r5" x="0" y="1923.2" textLength="1464" clip-path="url(#breeze-help-line-78)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-help-r1" x="1464" y="1923.2" textLength="12.2" clip-path="url(#breeze-help-line-78)">
-</text><text class="breeze-help-r5" x="0" y="1947.6" textLength="24.4" clip-path="url(#breeze-help-line-79)">╭─</text><text class="breeze-help-r5" x="24.4" y="1947.6" textLength="195.2" clip-path="url(#breeze-help-line-79)">&#160;Image&#160;commands&#160;</text><text class="breeze-help-r5" x="219.6" y="1947.6" textLength="1220" clip-path="url(#breeze-help-line-79)">────────────────────────────────────────────────────────────────────────────────────────────────────</text><text class="bree [...]
-</text><text class="breeze-help-r5" x="0" y="1972" textLength="12.2" clip-path="url(#breeze-help-line-80)">│</text><text class="breeze-help-r4" x="24.4" y="1972" textLength="207.4" clip-path="url(#breeze-help-line-80)">ci-image&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-help-r1" x="256.2" y="1972" textLength="1183.4" clip-path="url(#breeze-help-line-80)">Tools&#160;that&#160;developers&#160;can&#160;use&#160;to&#160;manually&#160;manage&#160;CI&#160;i [...]
-</text><text class="breeze-help-r5" x="0" y="1996.4" textLength="12.2" clip-path="url(#breeze-help-line-81)">│</text><text class="breeze-help-r4" x="24.4" y="1996.4" textLength="207.4" clip-path="url(#breeze-help-line-81)">prod-image&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-help-r1" x="256.2" y="1996.4" textLength="1183.4" clip-path="url(#breeze-help-line-81)">Tools&#160;that&#160;developers&#160;can&#160;use&#160;to&#160;manually&#160;manage&#160;PROD&#160;ima [...]
-</text><text class="breeze-help-r5" x="0" y="2020.8" textLength="1464" clip-path="url(#breeze-help-line-82)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-help-r1" x="1464" y="2020.8" textLength="12.2" clip-path="url(#breeze-help-line-82)">
-</text><text class="breeze-help-r5" x="0" y="2045.2" textLength="24.4" clip-path="url(#breeze-help-line-83)">╭─</text><text class="breeze-help-r5" x="24.4" y="2045.2" textLength="353.8" clip-path="url(#breeze-help-line-83)">&#160;Release&#160;management&#160;commands&#160;</text><text class="breeze-help-r5" x="378.2" y="2045.2" textLength="1061.4" clip-path="url(#breeze-help-line-83)">───────────────────────────────────────────────────────────────────────────────────────</text><text clas [...]
-</text><text class="breeze-help-r5" x="0" y="2069.6" textLength="12.2" clip-path="url(#breeze-help-line-84)">│</text><text class="breeze-help-r4" x="24.4" y="2069.6" textLength="280.6" clip-path="url(#breeze-help-line-84)">release-management&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-help-r1" x="329.4" y="2069.6" textLength="1110.2" clip-path="url(#breeze-help-line-84)">Tools&#160;that&#160;release&#160;managers&#160;can&#160;use&#160;to&#160;prepare&#160;and&#160;manage&#16 [...]
-</text><text class="breeze-help-r5" x="0" y="2094" textLength="12.2" clip-path="url(#breeze-help-line-85)">│</text><text class="breeze-help-r4" x="24.4" y="2094" textLength="280.6" clip-path="url(#breeze-help-line-85)">sbom&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-help-r1" x="329.4" y="2094" textLength="1110.2" clip-path="url(#breeze-help-line-85)">Tools&#160;that&#160;release&#160;managers [...]
-</text><text class="breeze-help-r5" x="0" y="2118.4" textLength="12.2" clip-path="url(#breeze-help-line-86)">│</text><text class="breeze-help-r4" x="24.4" y="2118.4" textLength="280.6" clip-path="url(#breeze-help-line-86)">workflow-run&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-help-r1" x="329.4" y="2118.4" textLength="1110.2" clip-path="url(#breeze-help-line-86)">Tools&#160;to&#160;manage&#160;Airflow&#160;repository&#160;workflows&#160;& [...]
-</text><text class="breeze-help-r5" x="0" y="2142.8" textLength="1464" clip-path="url(#breeze-help-line-87)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-help-r1" x="1464" y="2142.8" textLength="12.2" clip-path="url(#breeze-help-line-87)">
-</text><text class="breeze-help-r5" x="0" y="2167.2" textLength="24.4" clip-path="url(#breeze-help-line-88)">╭─</text><text class="breeze-help-r5" x="24.4" y="2167.2" textLength="195.2" clip-path="url(#breeze-help-line-88)">&#160;Other&#160;commands&#160;</text><text class="breeze-help-r5" x="219.6" y="2167.2" textLength="1220" clip-path="url(#breeze-help-line-88)">────────────────────────────────────────────────────────────────────────────────────────────────────</text><text class="bree [...]
-</text><text class="breeze-help-r5" x="0" y="2191.6" textLength="12.2" clip-path="url(#breeze-help-line-89)">│</text><text class="breeze-help-r4" x="24.4" y="2191.6" textLength="122" clip-path="url(#breeze-help-line-89)">setup&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-help-r1" x="170.8" y="2191.6" textLength="1268.8" clip-path="url(#breeze-help-line-89)">Tools&#160;that&#160;developers&#160;can&#160;use&#160;to&#160;configure&#160;Breeze&#160;&#160;&#160;&#160;&#160;&#160;& [...]
-</text><text class="breeze-help-r5" x="0" y="2216" textLength="12.2" clip-path="url(#breeze-help-line-90)">│</text><text class="breeze-help-r4" x="24.4" y="2216" textLength="122" clip-path="url(#breeze-help-line-90)">ci&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-help-r1" x="170.8" y="2216" textLength="1268.8" clip-path="url(#breeze-help-line-90)">Tools&#160;that&#160;CI&#160;workflows&#160;use&#160;to&#160;cleanup/manage&#160;CI&#160;environment&#160;&#160; [...]
-</text><text class="breeze-help-r5" x="0" y="2240.4" textLength="1464" clip-path="url(#breeze-help-line-91)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-help-r1" x="1464" y="2240.4" textLength="12.2" clip-path="url(#breeze-help-line-91)">
+</text><text class="breeze-help-r5" x="0" y="1581.6" textLength="12.2" clip-path="url(#breeze-help-line-64)">│</text><text class="breeze-help-r4" x="24.4" y="1581.6" textLength="280.6" clip-path="url(#breeze-help-line-64)">build-docs&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-help-r1" x="329.4" y="1581.6" textLength="1110.2" clip-path="url(#breeze-help-line-64)">Build&#160;documents.&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#1 [...]
+</text><text class="breeze-help-r5" x="0" y="1606" textLength="12.2" clip-path="url(#breeze-help-line-65)">│</text><text class="breeze-help-r4" x="24.4" y="1606" textLength="280.6" clip-path="url(#breeze-help-line-65)">down&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-help-r1" x="329.4" y="1606" textLength="1110.2" clip-path="url(#breeze-help-line-65)">Stop&#160;running&#160;breeze&#160;environ [...]
+</text><text class="breeze-help-r5" x="0" y="1630.4" textLength="12.2" clip-path="url(#breeze-help-line-66)">│</text><text class="breeze-help-r4" x="24.4" y="1630.4" textLength="280.6" clip-path="url(#breeze-help-line-66)">shell&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-help-r1" x="329.4" y="1630.4" textLength="1110.2" clip-path="url(#breeze-help-line-66)">Enter&#160;breeze&#160;environment.&#160; [...]
+</text><text class="breeze-help-r5" x="0" y="1654.8" textLength="12.2" clip-path="url(#breeze-help-line-67)">│</text><text class="breeze-help-r4" x="24.4" y="1654.8" textLength="280.6" clip-path="url(#breeze-help-line-67)">exec&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-help-r1" x="329.4" y="1654.8" textLength="1110.2" clip-path="url(#breeze-help-line-67)">Joins&#160;the&#160;interactive&#160 [...]
+</text><text class="breeze-help-r5" x="0" y="1679.2" textLength="12.2" clip-path="url(#breeze-help-line-68)">│</text><text class="breeze-help-r4" x="24.4" y="1679.2" textLength="280.6" clip-path="url(#breeze-help-line-68)">run&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-help-r1" x="329.4" y="1679.2" textLength="1110.2" clip-path="url(#breeze-help-line-68)">Run&#160;a&#160;command&#160;in [...]
+</text><text class="breeze-help-r5" x="0" y="1703.6" textLength="12.2" clip-path="url(#breeze-help-line-69)">│</text><text class="breeze-help-r4" x="24.4" y="1703.6" textLength="280.6" clip-path="url(#breeze-help-line-69)">compile-ui-assets&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-help-r1" x="329.4" y="1703.6" textLength="1110.2" clip-path="url(#breeze-help-line-69)">Compiles&#160;ui&#160;assets.&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; [...]
+</text><text class="breeze-help-r5" x="0" y="1728" textLength="12.2" clip-path="url(#breeze-help-line-70)">│</text><text class="breeze-help-r4" x="24.4" y="1728" textLength="280.6" clip-path="url(#breeze-help-line-70)">cleanup&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-help-r1" x="329.4" y="1728" textLength="1110.2" clip-path="url(#breeze-help-line-70)">Cleans&#160;the&#160;cache&#160;of&#160;parameters,&#160; [...]
+</text><text class="breeze-help-r5" x="0" y="1752.4" textLength="12.2" clip-path="url(#breeze-help-line-71)">│</text><text class="breeze-help-r4" x="24.4" y="1752.4" textLength="280.6" clip-path="url(#breeze-help-line-71)">generate-migration-file</text><text class="breeze-help-r1" x="329.4" y="1752.4" textLength="1110.2" clip-path="url(#breeze-help-line-71)">Autogenerate&#160;the&#160;alembic&#160;migration&#160;file&#160;for&#160;the&#160;ORM&#160;changes.&#160;&#160;&#160;&#160;&#160;& [...]
+</text><text class="breeze-help-r5" x="0" y="1776.8" textLength="12.2" clip-path="url(#breeze-help-line-72)">│</text><text class="breeze-help-r4" x="24.4" y="1776.8" textLength="280.6" clip-path="url(#breeze-help-line-72)">doctor&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-help-r1" x="329.4" y="1776.8" textLength="1110.2" clip-path="url(#breeze-help-line-72)">Auto-healing&#160;of&#160;breeze&#160;&#160;&# [...]
+</text><text class="breeze-help-r5" x="0" y="1801.2" textLength="1464" clip-path="url(#breeze-help-line-73)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-help-r1" x="1464" y="1801.2" textLength="12.2" clip-path="url(#breeze-help-line-73)">
+</text><text class="breeze-help-r5" x="0" y="1825.6" textLength="24.4" clip-path="url(#breeze-help-line-74)">╭─</text><text class="breeze-help-r5" x="24.4" y="1825.6" textLength="219.6" clip-path="url(#breeze-help-line-74)">&#160;Testing&#160;commands&#160;</text><text class="breeze-help-r5" x="244" y="1825.6" textLength="1195.6" clip-path="url(#breeze-help-line-74)">──────────────────────────────────────────────────────────────────────────────────────────────────</text><text class="bree [...]
+</text><text class="breeze-help-r5" x="0" y="1850" textLength="12.2" clip-path="url(#breeze-help-line-75)">│</text><text class="breeze-help-r4" x="24.4" y="1850" textLength="183" clip-path="url(#breeze-help-line-75)">testing&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-help-r1" x="231.8" y="1850" textLength="1207.8" clip-path="url(#breeze-help-line-75)">Tools&#160;that&#160;developers&#160;can&#160;use&#160;to&#160;run&#160;tests&#160;&#160;&#160;&#160;&#160; [...]
+</text><text class="breeze-help-r5" x="0" y="1874.4" textLength="12.2" clip-path="url(#breeze-help-line-76)">│</text><text class="breeze-help-r4" x="24.4" y="1874.4" textLength="183" clip-path="url(#breeze-help-line-76)">k8s&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-help-r1" x="231.8" y="1874.4" textLength="1207.8" clip-path="url(#breeze-help-line-76)">Tools&#160;that&#160;developers&#160;use&#160;to&#160;run&#160;Kubernetes&#160;te [...]
+</text><text class="breeze-help-r5" x="0" y="1898.8" textLength="1464" clip-path="url(#breeze-help-line-77)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-help-r1" x="1464" y="1898.8" textLength="12.2" clip-path="url(#breeze-help-line-77)">
+</text><text class="breeze-help-r5" x="0" y="1923.2" textLength="24.4" clip-path="url(#breeze-help-line-78)">╭─</text><text class="breeze-help-r5" x="24.4" y="1923.2" textLength="195.2" clip-path="url(#breeze-help-line-78)">&#160;Image&#160;commands&#160;</text><text class="breeze-help-r5" x="219.6" y="1923.2" textLength="1220" clip-path="url(#breeze-help-line-78)">────────────────────────────────────────────────────────────────────────────────────────────────────</text><text class="bree [...]
+</text><text class="breeze-help-r5" x="0" y="1947.6" textLength="12.2" clip-path="url(#breeze-help-line-79)">│</text><text class="breeze-help-r4" x="24.4" y="1947.6" textLength="207.4" clip-path="url(#breeze-help-line-79)">ci-image&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-help-r1" x="256.2" y="1947.6" textLength="1183.4" clip-path="url(#breeze-help-line-79)">Tools&#160;that&#160;developers&#160;can&#160;use&#160;to&#160;manually&#160;manage&#160;CI& [...]
+</text><text class="breeze-help-r5" x="0" y="1972" textLength="12.2" clip-path="url(#breeze-help-line-80)">│</text><text class="breeze-help-r4" x="24.4" y="1972" textLength="207.4" clip-path="url(#breeze-help-line-80)">prod-image&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-help-r1" x="256.2" y="1972" textLength="1183.4" clip-path="url(#breeze-help-line-80)">Tools&#160;that&#160;developers&#160;can&#160;use&#160;to&#160;manually&#160;manage&#160;PROD&#160;images&#1 [...]
+</text><text class="breeze-help-r5" x="0" y="1996.4" textLength="1464" clip-path="url(#breeze-help-line-81)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-help-r1" x="1464" y="1996.4" textLength="12.2" clip-path="url(#breeze-help-line-81)">
+</text><text class="breeze-help-r5" x="0" y="2020.8" textLength="24.4" clip-path="url(#breeze-help-line-82)">╭─</text><text class="breeze-help-r5" x="24.4" y="2020.8" textLength="353.8" clip-path="url(#breeze-help-line-82)">&#160;Release&#160;management&#160;commands&#160;</text><text class="breeze-help-r5" x="378.2" y="2020.8" textLength="1061.4" clip-path="url(#breeze-help-line-82)">───────────────────────────────────────────────────────────────────────────────────────</text><text clas [...]
+</text><text class="breeze-help-r5" x="0" y="2045.2" textLength="12.2" clip-path="url(#breeze-help-line-83)">│</text><text class="breeze-help-r4" x="24.4" y="2045.2" textLength="280.6" clip-path="url(#breeze-help-line-83)">release-management&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-help-r1" x="329.4" y="2045.2" textLength="1110.2" clip-path="url(#breeze-help-line-83)">Tools&#160;that&#160;release&#160;managers&#160;can&#160;use&#160;to&#160;prepare&#160;and&#160;manage&#16 [...]
+</text><text class="breeze-help-r5" x="0" y="2069.6" textLength="12.2" clip-path="url(#breeze-help-line-84)">│</text><text class="breeze-help-r4" x="24.4" y="2069.6" textLength="280.6" clip-path="url(#breeze-help-line-84)">sbom&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-help-r1" x="329.4" y="2069.6" textLength="1110.2" clip-path="url(#breeze-help-line-84)">Tools&#160;that&#160;release&#160;ma [...]
+</text><text class="breeze-help-r5" x="0" y="2094" textLength="12.2" clip-path="url(#breeze-help-line-85)">│</text><text class="breeze-help-r4" x="24.4" y="2094" textLength="280.6" clip-path="url(#breeze-help-line-85)">workflow-run&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-help-r1" x="329.4" y="2094" textLength="1110.2" clip-path="url(#breeze-help-line-85)">Tools&#160;to&#160;manage&#160;Airflow&#160;repository&#160;workflows&#160;&#160;& [...]
+</text><text class="breeze-help-r5" x="0" y="2118.4" textLength="1464" clip-path="url(#breeze-help-line-86)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-help-r1" x="1464" y="2118.4" textLength="12.2" clip-path="url(#breeze-help-line-86)">
+</text><text class="breeze-help-r5" x="0" y="2142.8" textLength="24.4" clip-path="url(#breeze-help-line-87)">╭─</text><text class="breeze-help-r5" x="24.4" y="2142.8" textLength="195.2" clip-path="url(#breeze-help-line-87)">&#160;Other&#160;commands&#160;</text><text class="breeze-help-r5" x="219.6" y="2142.8" textLength="1220" clip-path="url(#breeze-help-line-87)">────────────────────────────────────────────────────────────────────────────────────────────────────</text><text class="bree [...]
+</text><text class="breeze-help-r5" x="0" y="2167.2" textLength="12.2" clip-path="url(#breeze-help-line-88)">│</text><text class="breeze-help-r4" x="24.4" y="2167.2" textLength="122" clip-path="url(#breeze-help-line-88)">setup&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-help-r1" x="170.8" y="2167.2" textLength="1268.8" clip-path="url(#breeze-help-line-88)">Tools&#160;that&#160;developers&#160;can&#160;use&#160;to&#160;configure&#160;Breeze&#160;&#160;&#160;&#160;&#160;&#160;& [...]
+</text><text class="breeze-help-r5" x="0" y="2191.6" textLength="12.2" clip-path="url(#breeze-help-line-89)">│</text><text class="breeze-help-r4" x="24.4" y="2191.6" textLength="122" clip-path="url(#breeze-help-line-89)">ci&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-help-r1" x="170.8" y="2191.6" textLength="1268.8" clip-path="url(#breeze-help-line-89)">Tools&#160;that&#160;CI&#160;workflows&#160;use&#160;to&#160;cleanup/manage&#160;CI&#160;environment&#160; [...]
+</text><text class="breeze-help-r5" x="0" y="2216" textLength="1464" clip-path="url(#breeze-help-line-90)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-help-r1" x="1464" y="2216" textLength="12.2" clip-path="url(#breeze-help-line-90)">
 </text>
     </g>
     </g>
diff --git a/dev/breeze/doc/images/output_ci-image_build.svg b/dev/breeze/doc/images/output_ci-image_build.svg
index 5dfe7236178..8ba0c458df0 100644
--- a/dev/breeze/doc/images/output_ci-image_build.svg
+++ b/dev/breeze/doc/images/output_ci-image_build.svg
@@ -400,7 +400,7 @@
 </text><text class="breeze-ci-image-build-r5" x="0" y="1874.4" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-76)">│</text><text class="breeze-ci-image-build-r4" x="24.4" y="1874.4" textLength="268.4" clip-path="url(#breeze-ci-image-build-line-76)">--prepare-buildx-cache</text><text class="breeze-ci-image-build-r1" x="341.6" y="1874.4" textLength="1098" clip-path="url(#breeze-ci-image-build-line-76)">Prepares&#160;build&#160;cache&#160;(this&#160;is&#160;done&#160;as&#160;s [...]
 </text><text class="breeze-ci-image-build-r5" x="0" y="1898.8" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-77)">│</text><text class="breeze-ci-image-build-r1" x="341.6" y="1898.8" textLength="1098" clip-path="url(#breeze-ci-image-build-line-77)">image).&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; [...]
 </text><text class="breeze-ci-image-build-r5" x="0" y="1923.2" textLength="1464" clip-path="url(#breeze-ci-image-build-line-78)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-ci-image-build-r1" x="1464" y="1923.2" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-78)">
-</text><text class="breeze-ci-image-build-r5" x="0" y="1947.6" textLength="24.4" clip-path="url(#breeze-ci-image-build-line-79)">╭─</text><text class="breeze-ci-image-build-r5" x="24.4" y="1947.6" textLength="280.6" clip-path="url(#breeze-ci-image-build-line-79)">&#160;Github&#160;authentication&#160;</text><text class="breeze-ci-image-build-r5" x="305" y="1947.6" textLength="1134.6" clip-path="url(#breeze-ci-image-build-line-79)">───────────────────────────────────────────────────────── [...]
+</text><text class="breeze-ci-image-build-r5" x="0" y="1947.6" textLength="24.4" clip-path="url(#breeze-ci-image-build-line-79)">╭─</text><text class="breeze-ci-image-build-r5" x="24.4" y="1947.6" textLength="280.6" clip-path="url(#breeze-ci-image-build-line-79)">&#160;GitHub&#160;authentication&#160;</text><text class="breeze-ci-image-build-r5" x="305" y="1947.6" textLength="1134.6" clip-path="url(#breeze-ci-image-build-line-79)">───────────────────────────────────────────────────────── [...]
 </text><text class="breeze-ci-image-build-r5" x="0" y="1972" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-80)">│</text><text class="breeze-ci-image-build-r4" x="24.4" y="1972" textLength="231.8" clip-path="url(#breeze-ci-image-build-line-80)">--github-repository</text><text class="breeze-ci-image-build-r6" x="280.6" y="1972" textLength="24.4" clip-path="url(#breeze-ci-image-build-line-80)">-g</text><text class="breeze-ci-image-build-r1" x="329.4" y="1972" textLength="585. [...]
 </text><text class="breeze-ci-image-build-r5" x="0" y="1996.4" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-81)">│</text><text class="breeze-ci-image-build-r4" x="24.4" y="1996.4" textLength="170.8" clip-path="url(#breeze-ci-image-build-line-81)">--github-token</text><text class="breeze-ci-image-build-r1" x="329.4" y="1996.4" textLength="500.2" clip-path="url(#breeze-ci-image-build-line-81)">The&#160;token&#160;used&#160;to&#160;authenticate&#160;to&#160;GitHub.</text><te [...]
 </text><text class="breeze-ci-image-build-r5" x="0" y="2020.8" textLength="1464" clip-path="url(#breeze-ci-image-build-line-82)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-ci-image-build-r1" x="1464" y="2020.8" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-82)">
diff --git a/dev/breeze/doc/images/output_ci-image_build.txt b/dev/breeze/doc/images/output_ci-image_build.txt
index c8b8c255c02..54447eabd8b 100644
--- a/dev/breeze/doc/images/output_ci-image_build.txt
+++ b/dev/breeze/doc/images/output_ci-image_build.txt
@@ -1 +1 @@
-f95060510e2c15399114d25b0fa77b74
+0a4e51a200010e9cc0588a81015afb1f
diff --git a/dev/breeze/doc/images/output_ci-image_load.svg b/dev/breeze/doc/images/output_ci-image_load.svg
index 027199b7975..1b33589f35e 100644
--- a/dev/breeze/doc/images/output_ci-image_load.svg
+++ b/dev/breeze/doc/images/output_ci-image_load.svg
@@ -1,4 +1,4 @@
-<svg class="rich-terminal" viewBox="0 0 1482 928.4" xmlns="http://www.w3.org/2000/svg">
+<svg class="rich-terminal" viewBox="0 0 1482 879.5999999999999" xmlns="http://www.w3.org/2000/svg">
     <!-- Generated with Rich https://www.textualize.io -->
     <style>
 
@@ -39,13 +39,11 @@
 .breeze-ci-image-load-r5 { fill: #868887 }
 .breeze-ci-image-load-r6 { fill: #98a84b;font-weight: bold }
 .breeze-ci-image-load-r7 { fill: #8d7b39 }
-.breeze-ci-image-load-r8 { fill: #cc555a }
-.breeze-ci-image-load-r9 { fill: #8a4346 }
     </style>
 
     <defs>
     <clipPath id="breeze-ci-image-load-clip-terminal">
-      <rect x="0" y="0" width="1463.0" height="877.4" />
+      <rect x="0" y="0" width="1463.0" height="828.5999999999999" />
     </clipPath>
     <clipPath id="breeze-ci-image-load-line-0">
     <rect x="0" y="1.5" width="1464" height="24.65"/>
@@ -146,15 +144,9 @@
 <clipPath id="breeze-ci-image-load-line-32">
     <rect x="0" y="782.3" width="1464" height="24.65"/>
             </clipPath>
-<clipPath id="breeze-ci-image-load-line-33">
-    <rect x="0" y="806.7" width="1464" height="24.65"/>
-            </clipPath>
-<clipPath id="breeze-ci-image-load-line-34">
-    <rect x="0" y="831.1" width="1464" height="24.65"/>
-            </clipPath>
     </defs>
 
-    <rect fill="#292929" stroke="rgba(255,255,255,0.35)" stroke-width="1" x="1" y="1" width="1480" height="926.4" rx="8"/><text class="breeze-ci-image-load-title" fill="#c5c8c6" text-anchor="middle" x="740" y="27">Command:&#160;ci-image&#160;load</text>
+    <rect fill="#292929" stroke="rgba(255,255,255,0.35)" stroke-width="1" x="1" y="1" width="1480" height="877.6" rx="8"/><text class="breeze-ci-image-load-title" fill="#c5c8c6" text-anchor="middle" x="740" y="27">Command:&#160;ci-image&#160;load</text>
             <g transform="translate(26,22)">
             <circle cx="0" cy="0" r="7" fill="#ff5f57"/>
             <circle cx="22" cy="0" r="7" fill="#febc2e"/>
@@ -170,36 +162,34 @@
 </text><text class="breeze-ci-image-load-r1" x="12.2" y="93.2" textLength="317.2" clip-path="url(#breeze-ci-image-load-line-3)">Load&#160;CI&#160;image&#160;from&#160;a&#160;file.</text><text class="breeze-ci-image-load-r1" x="1464" y="93.2" textLength="12.2" clip-path="url(#breeze-ci-image-load-line-3)">
 </text><text class="breeze-ci-image-load-r1" x="1464" y="117.6" textLength="12.2" clip-path="url(#breeze-ci-image-load-line-4)">
 </text><text class="breeze-ci-image-load-r5" x="0" y="142" textLength="24.4" clip-path="url(#breeze-ci-image-load-line-5)">╭─</text><text class="breeze-ci-image-load-r5" x="24.4" y="142" textLength="219.6" clip-path="url(#breeze-ci-image-load-line-5)">&#160;Load&#160;image&#160;flags&#160;</text><text class="breeze-ci-image-load-r5" x="244" y="142" textLength="1195.6" clip-path="url(#breeze-ci-image-load-line-5)">─────────────────────────────────────────────────────────────────────────── [...]
-</text><text class="breeze-ci-image-load-r5" x="0" y="166.4" textLength="12.2" clip-path="url(#breeze-ci-image-load-line-6)">│</text><text class="breeze-ci-image-load-r4" x="61" y="166.4" textLength="97.6" clip-path="url(#breeze-ci-image-load-line-6)">--python</text><text class="breeze-ci-image-load-r6" x="402.6" y="166.4" textLength="24.4" clip-path="url(#breeze-ci-image-load-line-6)">-p</text><text class="breeze-ci-image-load-r1" x="451.4" y="166.4" textLength="732" clip-path="url(#bre [...]
-</text><text class="breeze-ci-image-load-r5" x="0" y="190.8" textLength="12.2" clip-path="url(#breeze-ci-image-load-line-7)">│</text><text class="breeze-ci-image-load-r7" x="451.4" y="190.8" textLength="732" clip-path="url(#breeze-ci-image-load-line-7)">(&gt;3.9&lt;&#160;|&#160;3.10&#160;|&#160;3.11&#160;|&#160;3.12)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; [...]
-</text><text class="breeze-ci-image-load-r5" x="0" y="215.2" textLength="12.2" clip-path="url(#breeze-ci-image-load-line-8)">│</text><text class="breeze-ci-image-load-r5" x="451.4" y="215.2" textLength="732" clip-path="url(#breeze-ci-image-load-line-8)">[default:&#160;3.9]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#1 [...]
-</text><text class="breeze-ci-image-load-r5" x="0" y="239.6" textLength="12.2" clip-path="url(#breeze-ci-image-load-line-9)">│</text><text class="breeze-ci-image-load-r4" x="61" y="239.6" textLength="122" clip-path="url(#breeze-ci-image-load-line-9)">--platform</text><text class="breeze-ci-image-load-r1" x="451.4" y="239.6" textLength="707.6" clip-path="url(#breeze-ci-image-load-line-9)">Platform&#160;for&#160;Airflow&#160;image.&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160 [...]
-</text><text class="breeze-ci-image-load-r5" x="0" y="264" textLength="12.2" clip-path="url(#breeze-ci-image-load-line-10)">│</text><text class="breeze-ci-image-load-r7" x="451.4" y="264" textLength="707.6" clip-path="url(#breeze-ci-image-load-line-10)">(linux/amd64&#160;|&#160;linux/arm64&#160;|&#160;linux/x86_64&#160;|&#160;linux/aarch64)</text><text class="breeze-ci-image-load-r5" x="1451.8" y="264" textLength="12.2" clip-path="url(#breeze-ci-image-load-line-10)">│</text><text class=" [...]
-</text><text class="breeze-ci-image-load-r5" x="0" y="288.4" textLength="12.2" clip-path="url(#breeze-ci-image-load-line-11)">│</text><text class="breeze-ci-image-load-r4" x="61" y="288.4" textLength="146.4" clip-path="url(#breeze-ci-image-load-line-11)">--image-file</text><text class="breeze-ci-image-load-r1" x="451.4" y="288.4" textLength="988.2" clip-path="url(#breeze-ci-image-load-line-11)">Optional&#160;file&#160;name&#160;to&#160;load&#160;the&#160;image&#160;from&#160;-&#160;name& [...]
-</text><text class="breeze-ci-image-load-r5" x="0" y="312.8" textLength="12.2" clip-path="url(#breeze-ci-image-load-line-12)">│</text><text class="breeze-ci-image-load-r1" x="451.4" y="312.8" textLength="988.2" clip-path="url(#breeze-ci-image-load-line-12)">convention:`ci-image-save-v3-{escaped_platform}-*-{python_version}.tar`.&#160;where&#160;&#160;&#160;</text><text class="breeze-ci-image-load-r5" x="1451.8" y="312.8" textLength="12.2" clip-path="url(#breeze-ci-image-load-line-12)">│< [...]
-</text><text class="breeze-ci-image-load-r5" x="0" y="337.2" textLength="12.2" clip-path="url(#breeze-ci-image-load-line-13)">│</text><text class="breeze-ci-image-load-r1" x="451.4" y="337.2" textLength="988.2" clip-path="url(#breeze-ci-image-load-line-13)">escaped_platform&#160;is&#160;one&#160;of&#160;linux_amd64&#160;or&#160;linux_arm64.&#160;If&#160;it&#160;does&#160;not&#160;exist&#160;in&#160;&#160;&#160;</text><text class="breeze-ci-image-load-r5" x="1451.8" y="337.2" textLength=" [...]
-</text><text class="breeze-ci-image-load-r5" x="0" y="361.6" textLength="12.2" clip-path="url(#breeze-ci-image-load-line-14)">│</text><text class="breeze-ci-image-load-r1" x="451.4" y="361.6" textLength="988.2" clip-path="url(#breeze-ci-image-load-line-14)">current&#160;working&#160;dir&#160;and&#160;if&#160;you&#160;do&#160;not&#160;specify&#160;absolute&#160;file,&#160;it&#160;will&#160;be&#160;searched&#160;</text><text class="breeze-ci-image-load-r5" x="1451.8" y="361.6" textLength=" [...]
-</text><text class="breeze-ci-image-load-r5" x="0" y="386" textLength="12.2" clip-path="url(#breeze-ci-image-load-line-15)">│</text><text class="breeze-ci-image-load-r1" x="451.4" y="386" textLength="134.2" clip-path="url(#breeze-ci-image-load-line-15)">for&#160;in&#160;the&#160;</text><text class="breeze-ci-image-load-r4" x="585.6" y="386" textLength="195.2" clip-path="url(#breeze-ci-image-load-line-15)">--image-file-dir</text><text class="breeze-ci-image-load-r1" x="780.8" y="386" text [...]
-</text><text class="breeze-ci-image-load-r5" x="0" y="410.4" textLength="12.2" clip-path="url(#breeze-ci-image-load-line-16)">│</text><text class="breeze-ci-image-load-r7" x="451.4" y="410.4" textLength="988.2" clip-path="url(#breeze-ci-image-load-line-16)">(FILE)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; [...]
-</text><text class="breeze-ci-image-load-r5" x="0" y="434.8" textLength="12.2" clip-path="url(#breeze-ci-image-load-line-17)">│</text><text class="breeze-ci-image-load-r4" x="61" y="434.8" textLength="195.2" clip-path="url(#breeze-ci-image-load-line-17)">--image-file-dir</text><text class="breeze-ci-image-load-r1" x="451.4" y="434.8" textLength="854" clip-path="url(#breeze-ci-image-load-line-17)">The&#160;path&#160;to&#160;the&#160;directory&#160;where&#160;the&#160;image&#160;files&#160 [...]
-</text><text class="breeze-ci-image-load-r5" x="0" y="459.2" textLength="12.2" clip-path="url(#breeze-ci-image-load-line-18)">│</text><text class="breeze-ci-image-load-r7" x="451.4" y="459.2" textLength="854" clip-path="url(#breeze-ci-image-load-line-18)">(DIRECTORY)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#1 [...]
-</text><text class="breeze-ci-image-load-r5" x="0" y="483.6" textLength="12.2" clip-path="url(#breeze-ci-image-load-line-19)">│</text><text class="breeze-ci-image-load-r5" x="451.4" y="483.6" textLength="854" clip-path="url(#breeze-ci-image-load-line-19)">[default:&#160;/tmp]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; [...]
-</text><text class="breeze-ci-image-load-r5" x="0" y="508" textLength="12.2" clip-path="url(#breeze-ci-image-load-line-20)">│</text><text class="breeze-ci-image-load-r4" x="61" y="508" textLength="231.8" clip-path="url(#breeze-ci-image-load-line-20)">--github-repository</text><text class="breeze-ci-image-load-r6" x="402.6" y="508" textLength="24.4" clip-path="url(#breeze-ci-image-load-line-20)">-g</text><text class="breeze-ci-image-load-r1" x="451.4" y="508" textLength="585.6" clip-path= [...]
-</text><text class="breeze-ci-image-load-r5" x="0" y="532.4" textLength="12.2" clip-path="url(#breeze-ci-image-load-line-21)">│</text><text class="breeze-ci-image-load-r8" x="24.4" y="532.4" textLength="12.2" clip-path="url(#breeze-ci-image-load-line-21)">*</text><text class="breeze-ci-image-load-r4" x="61" y="532.4" textLength="170.8" clip-path="url(#breeze-ci-image-load-line-21)">--github-token</text><text class="breeze-ci-image-load-r1" x="451.4" y="532.4" textLength="988.2" clip-path [...]
-</text><text class="breeze-ci-image-load-r5" x="0" y="556.8" textLength="12.2" clip-path="url(#breeze-ci-image-load-line-22)">│</text><text class="breeze-ci-image-load-r1" x="451.4" y="556.8" textLength="988.2" clip-path="url(#breeze-ci-image-load-line-22)">https://github.com/settings/tokens/new?description=Read%20repo&amp;scopes=public_repo</text><text class="breeze-ci-image-load-r5" x="1451.8" y="556.8" textLength="12.2" clip-path="url(#breeze-ci-image-load-line-22)">│</text><text clas [...]
-</text><text class="breeze-ci-image-load-r5" x="0" y="581.2" textLength="12.2" clip-path="url(#breeze-ci-image-load-line-23)">│</text><text class="breeze-ci-image-load-r7" x="451.4" y="581.2" textLength="988.2" clip-path="url(#breeze-ci-image-load-line-23)">(TEXT)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; [...]
-</text><text class="breeze-ci-image-load-r5" x="0" y="605.6" textLength="12.2" clip-path="url(#breeze-ci-image-load-line-24)">│</text><text class="breeze-ci-image-load-r9" x="451.4" y="605.6" textLength="988.2" clip-path="url(#breeze-ci-image-load-line-24)">[required]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&# [...]
-</text><text class="breeze-ci-image-load-r5" x="0" y="630" textLength="12.2" clip-path="url(#breeze-ci-image-load-line-25)">│</text><text class="breeze-ci-image-load-r4" x="61" y="630" textLength="109.8" clip-path="url(#breeze-ci-image-load-line-25)">--from-pr</text><text class="breeze-ci-image-load-r1" x="451.4" y="630" textLength="988.2" clip-path="url(#breeze-ci-image-load-line-25)">Optional&#160;pr&#160;number&#160;of&#160;the&#160;github&#160;action&#160;job&#160;to&#160;load&#160;t [...]
-</text><text class="breeze-ci-image-load-r5" x="0" y="654.4" textLength="12.2" clip-path="url(#breeze-ci-image-load-line-26)">│</text><text class="breeze-ci-image-load-r1" x="451.4" y="654.4" textLength="988.2" clip-path="url(#breeze-ci-image-load-line-26)">image&#160;from&#160;the&#160;latest&#160;job.&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&# [...]
-</text><text class="breeze-ci-image-load-r5" x="0" y="678.8" textLength="12.2" clip-path="url(#breeze-ci-image-load-line-27)">│</text><text class="breeze-ci-image-load-r7" x="451.4" y="678.8" textLength="988.2" clip-path="url(#breeze-ci-image-load-line-27)">(TEXT)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; [...]
-</text><text class="breeze-ci-image-load-r5" x="0" y="703.2" textLength="12.2" clip-path="url(#breeze-ci-image-load-line-28)">│</text><text class="breeze-ci-image-load-r4" x="61" y="703.2" textLength="122" clip-path="url(#breeze-ci-image-load-line-28)">--from-run</text><text class="breeze-ci-image-load-r1" x="451.4" y="703.2" textLength="780.8" clip-path="url(#breeze-ci-image-load-line-28)">Optional&#160;run&#160;id&#160;of&#160;the&#160;github&#160;action&#160;run&#160;to&#160;load&#160 [...]
-</text><text class="breeze-ci-image-load-r5" x="0" y="727.6" textLength="12.2" clip-path="url(#breeze-ci-image-load-line-29)">│</text><text class="breeze-ci-image-load-r4" x="61" y="727.6" textLength="317.2" clip-path="url(#breeze-ci-image-load-line-29)">--skip-image-file-deletion</text><text class="breeze-ci-image-load-r1" x="451.4" y="727.6" textLength="414.8" clip-path="url(#breeze-ci-image-load-line-29)">Skip&#160;image&#160;deletion&#160;after&#160;loading.</text><text class="breeze [...]
-</text><text class="breeze-ci-image-load-r5" x="0" y="752" textLength="1464" clip-path="url(#breeze-ci-image-load-line-30)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-ci-image-load-r1" x="1464" y="752" textLength="12.2" clip-path="url(#breeze-ci-image-load-line-30)">
-</text><text class="breeze-ci-image-load-r5" x="0" y="776.4" textLength="24.4" clip-path="url(#breeze-ci-image-load-line-31)">╭─</text><text class="breeze-ci-image-load-r5" x="24.4" y="776.4" textLength="195.2" clip-path="url(#breeze-ci-image-load-line-31)">&#160;Common&#160;options&#160;</text><text class="breeze-ci-image-load-r5" x="219.6" y="776.4" textLength="1220" clip-path="url(#breeze-ci-image-load-line-31)">───────────────────────────────────────────────────────────────────────── [...]
-</text><text class="breeze-ci-image-load-r5" x="0" y="800.8" textLength="12.2" clip-path="url(#breeze-ci-image-load-line-32)">│</text><text class="breeze-ci-image-load-r4" x="24.4" y="800.8" textLength="109.8" clip-path="url(#breeze-ci-image-load-line-32)">--dry-run</text><text class="breeze-ci-image-load-r6" x="158.6" y="800.8" textLength="24.4" clip-path="url(#breeze-ci-image-load-line-32)">-D</text><text class="breeze-ci-image-load-r1" x="207.4" y="800.8" textLength="719.8" clip-path= [...]
-</text><text class="breeze-ci-image-load-r5" x="0" y="825.2" textLength="12.2" clip-path="url(#breeze-ci-image-load-line-33)">│</text><text class="breeze-ci-image-load-r4" x="24.4" y="825.2" textLength="109.8" clip-path="url(#breeze-ci-image-load-line-33)">--verbose</text><text class="breeze-ci-image-load-r6" x="158.6" y="825.2" textLength="24.4" clip-path="url(#breeze-ci-image-load-line-33)">-v</text><text class="breeze-ci-image-load-r1" x="207.4" y="825.2" textLength="585.6" clip-path= [...]
-</text><text class="breeze-ci-image-load-r5" x="0" y="849.6" textLength="12.2" clip-path="url(#breeze-ci-image-load-line-34)">│</text><text class="breeze-ci-image-load-r4" x="24.4" y="849.6" textLength="73.2" clip-path="url(#breeze-ci-image-load-line-34)">--help</text><text class="breeze-ci-image-load-r6" x="158.6" y="849.6" textLength="24.4" clip-path="url(#breeze-ci-image-load-line-34)">-h</text><text class="breeze-ci-image-load-r1" x="207.4" y="849.6" textLength="329.4" clip-path="url [...]
-</text><text class="breeze-ci-image-load-r5" x="0" y="874" textLength="1464" clip-path="url(#breeze-ci-image-load-line-35)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-ci-image-load-r1" x="1464" y="874" textLength="12.2" clip-path="url(#breeze-ci-image-load-line-35)">
+</text><text class="breeze-ci-image-load-r5" x="0" y="166.4" textLength="12.2" clip-path="url(#breeze-ci-image-load-line-6)">│</text><text class="breeze-ci-image-load-r4" x="24.4" y="166.4" textLength="97.6" clip-path="url(#breeze-ci-image-load-line-6)">--python</text><text class="breeze-ci-image-load-r6" x="366" y="166.4" textLength="24.4" clip-path="url(#breeze-ci-image-load-line-6)">-p</text><text class="breeze-ci-image-load-r1" x="414.8" y="166.4" textLength="732" clip-path="url(#bre [...]
+</text><text class="breeze-ci-image-load-r5" x="0" y="190.8" textLength="12.2" clip-path="url(#breeze-ci-image-load-line-7)">│</text><text class="breeze-ci-image-load-r7" x="414.8" y="190.8" textLength="732" clip-path="url(#breeze-ci-image-load-line-7)">(&gt;3.9&lt;&#160;|&#160;3.10&#160;|&#160;3.11&#160;|&#160;3.12)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; [...]
+</text><text class="breeze-ci-image-load-r5" x="0" y="215.2" textLength="12.2" clip-path="url(#breeze-ci-image-load-line-8)">│</text><text class="breeze-ci-image-load-r5" x="414.8" y="215.2" textLength="732" clip-path="url(#breeze-ci-image-load-line-8)">[default:&#160;3.9]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#1 [...]
+</text><text class="breeze-ci-image-load-r5" x="0" y="239.6" textLength="12.2" clip-path="url(#breeze-ci-image-load-line-9)">│</text><text class="breeze-ci-image-load-r4" x="24.4" y="239.6" textLength="122" clip-path="url(#breeze-ci-image-load-line-9)">--platform</text><text class="breeze-ci-image-load-r1" x="414.8" y="239.6" textLength="707.6" clip-path="url(#breeze-ci-image-load-line-9)">Platform&#160;for&#160;Airflow&#160;image.&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#1 [...]
+</text><text class="breeze-ci-image-load-r5" x="0" y="264" textLength="12.2" clip-path="url(#breeze-ci-image-load-line-10)">│</text><text class="breeze-ci-image-load-r7" x="414.8" y="264" textLength="707.6" clip-path="url(#breeze-ci-image-load-line-10)">(linux/amd64&#160;|&#160;linux/arm64&#160;|&#160;linux/x86_64&#160;|&#160;linux/aarch64)</text><text class="breeze-ci-image-load-r5" x="1451.8" y="264" textLength="12.2" clip-path="url(#breeze-ci-image-load-line-10)">│</text><text class=" [...]
+</text><text class="breeze-ci-image-load-r5" x="0" y="288.4" textLength="12.2" clip-path="url(#breeze-ci-image-load-line-11)">│</text><text class="breeze-ci-image-load-r4" x="24.4" y="288.4" textLength="146.4" clip-path="url(#breeze-ci-image-load-line-11)">--image-file</text><text class="breeze-ci-image-load-r1" x="414.8" y="288.4" textLength="1024.8" clip-path="url(#breeze-ci-image-load-line-11)">Optional&#160;file&#160;name&#160;to&#160;load&#160;the&#160;image&#160;from&#160;-&#160;na [...]
+</text><text class="breeze-ci-image-load-r5" x="0" y="312.8" textLength="12.2" clip-path="url(#breeze-ci-image-load-line-12)">│</text><text class="breeze-ci-image-load-r1" x="414.8" y="312.8" textLength="1024.8" clip-path="url(#breeze-ci-image-load-line-12)">convention:`ci-image-save-v3-{escaped_platform}-*-{python_version}.tar`.&#160;where&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-ci-image-load-r5" x="1451.8" y="312.8" textLength="12.2" clip-path="url(#breeze-ci-imag [...]
+</text><text class="breeze-ci-image-load-r5" x="0" y="337.2" textLength="12.2" clip-path="url(#breeze-ci-image-load-line-13)">│</text><text class="breeze-ci-image-load-r1" x="414.8" y="337.2" textLength="1024.8" clip-path="url(#breeze-ci-image-load-line-13)">escaped_platform&#160;is&#160;one&#160;of&#160;linux_amd64&#160;or&#160;linux_arm64.&#160;If&#160;it&#160;does&#160;not&#160;exist&#160;in&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-ci-image-load-r5" x="1451.8" y=" [...]
+</text><text class="breeze-ci-image-load-r5" x="0" y="361.6" textLength="12.2" clip-path="url(#breeze-ci-image-load-line-14)">│</text><text class="breeze-ci-image-load-r1" x="414.8" y="361.6" textLength="1024.8" clip-path="url(#breeze-ci-image-load-line-14)">current&#160;working&#160;dir&#160;and&#160;if&#160;you&#160;do&#160;not&#160;specify&#160;absolute&#160;file,&#160;it&#160;will&#160;be&#160;searched&#160;for</text><text class="breeze-ci-image-load-r5" x="1451.8" y="361.6" textLeng [...]
+</text><text class="breeze-ci-image-load-r5" x="0" y="386" textLength="12.2" clip-path="url(#breeze-ci-image-load-line-15)">│</text><text class="breeze-ci-image-load-r1" x="414.8" y="386" textLength="85.4" clip-path="url(#breeze-ci-image-load-line-15)">in&#160;the&#160;</text><text class="breeze-ci-image-load-r4" x="500.2" y="386" textLength="195.2" clip-path="url(#breeze-ci-image-load-line-15)">--image-file-dir</text><text class="breeze-ci-image-load-r1" x="695.4" y="386" textLength="74 [...]
+</text><text class="breeze-ci-image-load-r5" x="0" y="410.4" textLength="12.2" clip-path="url(#breeze-ci-image-load-line-16)">│</text><text class="breeze-ci-image-load-r7" x="414.8" y="410.4" textLength="1024.8" clip-path="url(#breeze-ci-image-load-line-16)">(FILE)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160 [...]
+</text><text class="breeze-ci-image-load-r5" x="0" y="434.8" textLength="12.2" clip-path="url(#breeze-ci-image-load-line-17)">│</text><text class="breeze-ci-image-load-r4" x="24.4" y="434.8" textLength="195.2" clip-path="url(#breeze-ci-image-load-line-17)">--image-file-dir</text><text class="breeze-ci-image-load-r1" x="414.8" y="434.8" textLength="854" clip-path="url(#breeze-ci-image-load-line-17)">The&#160;path&#160;to&#160;the&#160;directory&#160;where&#160;the&#160;image&#160;files&#1 [...]
+</text><text class="breeze-ci-image-load-r5" x="0" y="459.2" textLength="12.2" clip-path="url(#breeze-ci-image-load-line-18)">│</text><text class="breeze-ci-image-load-r5" x="414.8" y="459.2" textLength="854" clip-path="url(#breeze-ci-image-load-line-18)">[default:&#160;/tmp]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; [...]
+</text><text class="breeze-ci-image-load-r5" x="0" y="483.6" textLength="12.2" clip-path="url(#breeze-ci-image-load-line-19)">│</text><text class="breeze-ci-image-load-r4" x="24.4" y="483.6" textLength="231.8" clip-path="url(#breeze-ci-image-load-line-19)">--github-repository</text><text class="breeze-ci-image-load-r6" x="366" y="483.6" textLength="24.4" clip-path="url(#breeze-ci-image-load-line-19)">-g</text><text class="breeze-ci-image-load-r1" x="414.8" y="483.6" textLength="585.6" cl [...]
+</text><text class="breeze-ci-image-load-r5" x="0" y="508" textLength="12.2" clip-path="url(#breeze-ci-image-load-line-20)">│</text><text class="breeze-ci-image-load-r4" x="24.4" y="508" textLength="170.8" clip-path="url(#breeze-ci-image-load-line-20)">--github-token</text><text class="breeze-ci-image-load-r1" x="414.8" y="508" textLength="1024.8" clip-path="url(#breeze-ci-image-load-line-20)">The&#160;token&#160;used&#160;to&#160;authenticate&#160;to&#160;GitHub.&#160;You&#160;can&#160; [...]
+</text><text class="breeze-ci-image-load-r5" x="0" y="532.4" textLength="12.2" clip-path="url(#breeze-ci-image-load-line-21)">│</text><text class="breeze-ci-image-load-r1" x="414.8" y="532.4" textLength="1024.8" clip-path="url(#breeze-ci-image-load-line-21)">https://github.com/settings/tokens/new?description=Read%20repo&amp;scopes=public_repo&#160;&#160;&#160;</text><text class="breeze-ci-image-load-r5" x="1451.8" y="532.4" textLength="12.2" clip-path="url(#breeze-ci-image-load-line-21)" [...]
+</text><text class="breeze-ci-image-load-r5" x="0" y="556.8" textLength="12.2" clip-path="url(#breeze-ci-image-load-line-22)">│</text><text class="breeze-ci-image-load-r7" x="414.8" y="556.8" textLength="1024.8" clip-path="url(#breeze-ci-image-load-line-22)">(TEXT)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160 [...]
+</text><text class="breeze-ci-image-load-r5" x="0" y="581.2" textLength="12.2" clip-path="url(#breeze-ci-image-load-line-23)">│</text><text class="breeze-ci-image-load-r4" x="24.4" y="581.2" textLength="109.8" clip-path="url(#breeze-ci-image-load-line-23)">--from-pr</text><text class="breeze-ci-image-load-r1" x="414.8" y="581.2" textLength="1024.8" clip-path="url(#breeze-ci-image-load-line-23)">Optional&#160;pr&#160;number&#160;of&#160;the&#160;github&#160;action&#160;job&#160;to&#160;lo [...]
+</text><text class="breeze-ci-image-load-r5" x="0" y="605.6" textLength="12.2" clip-path="url(#breeze-ci-image-load-line-24)">│</text><text class="breeze-ci-image-load-r1" x="414.8" y="605.6" textLength="1024.8" clip-path="url(#breeze-ci-image-load-line-24)">from&#160;the&#160;latest&#160;job.&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; [...]
+</text><text class="breeze-ci-image-load-r5" x="0" y="630" textLength="12.2" clip-path="url(#breeze-ci-image-load-line-25)">│</text><text class="breeze-ci-image-load-r7" x="414.8" y="630" textLength="1024.8" clip-path="url(#breeze-ci-image-load-line-25)">(TEXT)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#1 [...]
+</text><text class="breeze-ci-image-load-r5" x="0" y="654.4" textLength="12.2" clip-path="url(#breeze-ci-image-load-line-26)">│</text><text class="breeze-ci-image-load-r4" x="24.4" y="654.4" textLength="122" clip-path="url(#breeze-ci-image-load-line-26)">--from-run</text><text class="breeze-ci-image-load-r1" x="414.8" y="654.4" textLength="780.8" clip-path="url(#breeze-ci-image-load-line-26)">Optional&#160;run&#160;id&#160;of&#160;the&#160;github&#160;action&#160;run&#160;to&#160;load&#1 [...]
+</text><text class="breeze-ci-image-load-r5" x="0" y="678.8" textLength="12.2" clip-path="url(#breeze-ci-image-load-line-27)">│</text><text class="breeze-ci-image-load-r4" x="24.4" y="678.8" textLength="317.2" clip-path="url(#breeze-ci-image-load-line-27)">--skip-image-file-deletion</text><text class="breeze-ci-image-load-r1" x="414.8" y="678.8" textLength="414.8" clip-path="url(#breeze-ci-image-load-line-27)">Skip&#160;image&#160;deletion&#160;after&#160;loading.</text><text class="bree [...]
+</text><text class="breeze-ci-image-load-r5" x="0" y="703.2" textLength="1464" clip-path="url(#breeze-ci-image-load-line-28)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-ci-image-load-r1" x="1464" y="703.2" textLength="12.2" clip-path="url(#breeze-ci-image-load-line-28)">
+</text><text class="breeze-ci-image-load-r5" x="0" y="727.6" textLength="24.4" clip-path="url(#breeze-ci-image-load-line-29)">╭─</text><text class="breeze-ci-image-load-r5" x="24.4" y="727.6" textLength="195.2" clip-path="url(#breeze-ci-image-load-line-29)">&#160;Common&#160;options&#160;</text><text class="breeze-ci-image-load-r5" x="219.6" y="727.6" textLength="1220" clip-path="url(#breeze-ci-image-load-line-29)">───────────────────────────────────────────────────────────────────────── [...]
+</text><text class="breeze-ci-image-load-r5" x="0" y="752" textLength="12.2" clip-path="url(#breeze-ci-image-load-line-30)">│</text><text class="breeze-ci-image-load-r4" x="24.4" y="752" textLength="109.8" clip-path="url(#breeze-ci-image-load-line-30)">--dry-run</text><text class="breeze-ci-image-load-r6" x="158.6" y="752" textLength="24.4" clip-path="url(#breeze-ci-image-load-line-30)">-D</text><text class="breeze-ci-image-load-r1" x="207.4" y="752" textLength="719.8" clip-path="url(#br [...]
+</text><text class="breeze-ci-image-load-r5" x="0" y="776.4" textLength="12.2" clip-path="url(#breeze-ci-image-load-line-31)">│</text><text class="breeze-ci-image-load-r4" x="24.4" y="776.4" textLength="109.8" clip-path="url(#breeze-ci-image-load-line-31)">--verbose</text><text class="breeze-ci-image-load-r6" x="158.6" y="776.4" textLength="24.4" clip-path="url(#breeze-ci-image-load-line-31)">-v</text><text class="breeze-ci-image-load-r1" x="207.4" y="776.4" textLength="585.6" clip-path= [...]
+</text><text class="breeze-ci-image-load-r5" x="0" y="800.8" textLength="12.2" clip-path="url(#breeze-ci-image-load-line-32)">│</text><text class="breeze-ci-image-load-r4" x="24.4" y="800.8" textLength="73.2" clip-path="url(#breeze-ci-image-load-line-32)">--help</text><text class="breeze-ci-image-load-r6" x="158.6" y="800.8" textLength="24.4" clip-path="url(#breeze-ci-image-load-line-32)">-h</text><text class="breeze-ci-image-load-r1" x="207.4" y="800.8" textLength="329.4" clip-path="url [...]
+</text><text class="breeze-ci-image-load-r5" x="0" y="825.2" textLength="1464" clip-path="url(#breeze-ci-image-load-line-33)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-ci-image-load-r1" x="1464" y="825.2" textLength="12.2" clip-path="url(#breeze-ci-image-load-line-33)">
 </text>
     </g>
     </g>
diff --git a/dev/breeze/doc/images/output_ci-image_load.txt b/dev/breeze/doc/images/output_ci-image_load.txt
index bbab37d71bf..0af8b744e0a 100644
--- a/dev/breeze/doc/images/output_ci-image_load.txt
+++ b/dev/breeze/doc/images/output_ci-image_load.txt
@@ -1 +1 @@
-4cd3045ad6a0a6514cac07e3a9228a8f
+2c8f1327085d9d43f99a171a969656aa
diff --git a/dev/breeze/doc/images/output_ci-image_pull.svg b/dev/breeze/doc/images/output_ci-image_pull.svg
index 2ca6acbb8ce..1b263bda6ba 100644
--- a/dev/breeze/doc/images/output_ci-image_pull.svg
+++ b/dev/breeze/doc/images/output_ci-image_pull.svg
@@ -169,7 +169,7 @@
 </text><text class="breeze-ci-image-pull-r5" x="0" y="483.6" textLength="12.2" clip-path="url(#breeze-ci-image-pull-line-19)">│</text><text class="breeze-ci-image-pull-r4" x="24.4" y="483.6" textLength="207.4" clip-path="url(#breeze-ci-image-pull-line-19)">--debug-resources</text><text class="breeze-ci-image-pull-r1" x="378.2" y="483.6" textLength="768.6" clip-path="url(#breeze-ci-image-pull-line-19)">Whether&#160;to&#160;show&#160;resource&#160;information&#160;while&#160;running&#160;i [...]
 </text><text class="breeze-ci-image-pull-r5" x="0" y="508" textLength="12.2" clip-path="url(#breeze-ci-image-pull-line-20)">│</text><text class="breeze-ci-image-pull-r4" x="24.4" y="508" textLength="305" clip-path="url(#breeze-ci-image-pull-line-20)">--include-success-outputs</text><text class="breeze-ci-image-pull-r1" x="378.2" y="508" textLength="841.8" clip-path="url(#breeze-ci-image-pull-line-20)">Whether&#160;to&#160;include&#160;outputs&#160;of&#160;successful&#160;runs&#160;(not&# [...]
 </text><text class="breeze-ci-image-pull-r5" x="0" y="532.4" textLength="1464" clip-path="url(#breeze-ci-image-pull-line-21)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-ci-image-pull-r1" x="1464" y="532.4" textLength="12.2" clip-path="url(#breeze-ci-image-pull-line-21)">
-</text><text class="breeze-ci-image-pull-r5" x="0" y="556.8" textLength="24.4" clip-path="url(#breeze-ci-image-pull-line-22)">╭─</text><text class="breeze-ci-image-pull-r5" x="24.4" y="556.8" textLength="280.6" clip-path="url(#breeze-ci-image-pull-line-22)">&#160;Github&#160;authentication&#160;</text><text class="breeze-ci-image-pull-r5" x="305" y="556.8" textLength="1134.6" clip-path="url(#breeze-ci-image-pull-line-22)">────────────────────────────────────────────────────────────────── [...]
+</text><text class="breeze-ci-image-pull-r5" x="0" y="556.8" textLength="24.4" clip-path="url(#breeze-ci-image-pull-line-22)">╭─</text><text class="breeze-ci-image-pull-r5" x="24.4" y="556.8" textLength="280.6" clip-path="url(#breeze-ci-image-pull-line-22)">&#160;GitHub&#160;authentication&#160;</text><text class="breeze-ci-image-pull-r5" x="305" y="556.8" textLength="1134.6" clip-path="url(#breeze-ci-image-pull-line-22)">────────────────────────────────────────────────────────────────── [...]
 </text><text class="breeze-ci-image-pull-r5" x="0" y="581.2" textLength="12.2" clip-path="url(#breeze-ci-image-pull-line-23)">│</text><text class="breeze-ci-image-pull-r4" x="24.4" y="581.2" textLength="231.8" clip-path="url(#breeze-ci-image-pull-line-23)">--github-repository</text><text class="breeze-ci-image-pull-r6" x="280.6" y="581.2" textLength="24.4" clip-path="url(#breeze-ci-image-pull-line-23)">-g</text><text class="breeze-ci-image-pull-r1" x="329.4" y="581.2" textLength="585.6"  [...]
 </text><text class="breeze-ci-image-pull-r5" x="0" y="605.6" textLength="12.2" clip-path="url(#breeze-ci-image-pull-line-24)">│</text><text class="breeze-ci-image-pull-r4" x="24.4" y="605.6" textLength="170.8" clip-path="url(#breeze-ci-image-pull-line-24)">--github-token</text><text class="breeze-ci-image-pull-r1" x="329.4" y="605.6" textLength="500.2" clip-path="url(#breeze-ci-image-pull-line-24)">The&#160;token&#160;used&#160;to&#160;authenticate&#160;to&#160;GitHub.</text><text class= [...]
 </text><text class="breeze-ci-image-pull-r5" x="0" y="630" textLength="1464" clip-path="url(#breeze-ci-image-pull-line-25)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-ci-image-pull-r1" x="1464" y="630" textLength="12.2" clip-path="url(#breeze-ci-image-pull-line-25)">
diff --git a/dev/breeze/doc/images/output_ci-image_pull.txt b/dev/breeze/doc/images/output_ci-image_pull.txt
index 7d10e3471f4..c1ea9fc40ad 100644
--- a/dev/breeze/doc/images/output_ci-image_pull.txt
+++ b/dev/breeze/doc/images/output_ci-image_pull.txt
@@ -1 +1 @@
-b8ed28c0a2a42d536bdb1716954a9a4e
+0c6132c4d43847f0d8e8e5a1d70b08ff
diff --git a/dev/breeze/doc/images/output_ci-image_verify.svg b/dev/breeze/doc/images/output_ci-image_verify.svg
index d946e6d967a..dfd3ed91db8 100644
--- a/dev/breeze/doc/images/output_ci-image_verify.svg
+++ b/dev/breeze/doc/images/output_ci-image_verify.svg
@@ -169,7 +169,7 @@
 </text><text class="breeze-ci-image-verify-r5" x="0" y="483.6" textLength="12.2" clip-path="url(#breeze-ci-image-verify-line-19)">│</text><text class="breeze-ci-image-verify-r4" x="24.4" y="483.6" textLength="207.4" clip-path="url(#breeze-ci-image-verify-line-19)">--debug-resources</text><text class="breeze-ci-image-verify-r1" x="378.2" y="483.6" textLength="768.6" clip-path="url(#breeze-ci-image-verify-line-19)">Whether&#160;to&#160;show&#160;resource&#160;information&#160;while&#160;ru [...]
 </text><text class="breeze-ci-image-verify-r5" x="0" y="508" textLength="12.2" clip-path="url(#breeze-ci-image-verify-line-20)">│</text><text class="breeze-ci-image-verify-r4" x="24.4" y="508" textLength="305" clip-path="url(#breeze-ci-image-verify-line-20)">--include-success-outputs</text><text class="breeze-ci-image-verify-r1" x="378.2" y="508" textLength="841.8" clip-path="url(#breeze-ci-image-verify-line-20)">Whether&#160;to&#160;include&#160;outputs&#160;of&#160;successful&#160;runs [...]
 </text><text class="breeze-ci-image-verify-r5" x="0" y="532.4" textLength="1464" clip-path="url(#breeze-ci-image-verify-line-21)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-ci-image-verify-r1" x="1464" y="532.4" textLength="12.2" clip-path="url(#breeze-ci-image-verify-line-21)">
-</text><text class="breeze-ci-image-verify-r5" x="0" y="556.8" textLength="24.4" clip-path="url(#breeze-ci-image-verify-line-22)">╭─</text><text class="breeze-ci-image-verify-r5" x="24.4" y="556.8" textLength="280.6" clip-path="url(#breeze-ci-image-verify-line-22)">&#160;Github&#160;authentication&#160;</text><text class="breeze-ci-image-verify-r5" x="305" y="556.8" textLength="1134.6" clip-path="url(#breeze-ci-image-verify-line-22)">────────────────────────────────────────────────────── [...]
+</text><text class="breeze-ci-image-verify-r5" x="0" y="556.8" textLength="24.4" clip-path="url(#breeze-ci-image-verify-line-22)">╭─</text><text class="breeze-ci-image-verify-r5" x="24.4" y="556.8" textLength="280.6" clip-path="url(#breeze-ci-image-verify-line-22)">&#160;GitHub&#160;authentication&#160;</text><text class="breeze-ci-image-verify-r5" x="305" y="556.8" textLength="1134.6" clip-path="url(#breeze-ci-image-verify-line-22)">────────────────────────────────────────────────────── [...]
 </text><text class="breeze-ci-image-verify-r5" x="0" y="581.2" textLength="12.2" clip-path="url(#breeze-ci-image-verify-line-23)">│</text><text class="breeze-ci-image-verify-r4" x="24.4" y="581.2" textLength="231.8" clip-path="url(#breeze-ci-image-verify-line-23)">--github-repository</text><text class="breeze-ci-image-verify-r6" x="280.6" y="581.2" textLength="24.4" clip-path="url(#breeze-ci-image-verify-line-23)">-g</text><text class="breeze-ci-image-verify-r1" x="329.4" y="581.2" textL [...]
 </text><text class="breeze-ci-image-verify-r5" x="0" y="605.6" textLength="12.2" clip-path="url(#breeze-ci-image-verify-line-24)">│</text><text class="breeze-ci-image-verify-r4" x="24.4" y="605.6" textLength="170.8" clip-path="url(#breeze-ci-image-verify-line-24)">--github-token</text><text class="breeze-ci-image-verify-r1" x="329.4" y="605.6" textLength="500.2" clip-path="url(#breeze-ci-image-verify-line-24)">The&#160;token&#160;used&#160;to&#160;authenticate&#160;to&#160;GitHub.</text> [...]
 </text><text class="breeze-ci-image-verify-r5" x="0" y="630" textLength="1464" clip-path="url(#breeze-ci-image-verify-line-25)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-ci-image-verify-r1" x="1464" y="630" textLength="12.2" clip-path="url(#breeze-ci-image-verify-line-25)">
diff --git a/dev/breeze/doc/images/output_ci-image_verify.txt b/dev/breeze/doc/images/output_ci-image_verify.txt
index 3fec0520f20..18f31b85c3f 100644
--- a/dev/breeze/doc/images/output_ci-image_verify.txt
+++ b/dev/breeze/doc/images/output_ci-image_verify.txt
@@ -1 +1 @@
-71829e8a86a486823dcb10ca7e24ef83
+f41d19be1d69f51907e92406987556f0
diff --git a/dev/breeze/doc/images/output_ci_selective-check.svg b/dev/breeze/doc/images/output_ci_selective-check.svg
index 79d1c460be5..08c4d116223 100644
--- a/dev/breeze/doc/images/output_ci_selective-check.svg
+++ b/dev/breeze/doc/images/output_ci_selective-check.svg
@@ -144,14 +144,14 @@
 </text><text class="breeze-ci-selective-check-r5" x="0" y="239.6" textLength="12.2" clip-path="url(#breeze-ci-selective-check-line-9)">│</text><text class="breeze-ci-selective-check-r4" x="24.4" y="239.6" textLength="341.6" clip-path="url(#breeze-ci-selective-check-line-9)">--default-constraints-branch</text><text class="breeze-ci-selective-check-r1" x="414.8" y="239.6" textLength="646.6" clip-path="url(#breeze-ci-selective-check-line-9)">Constraints&#160;Branch&#160;against&#160;which&# [...]
 </text><text class="breeze-ci-selective-check-r5" x="0" y="264" textLength="12.2" clip-path="url(#breeze-ci-selective-check-line-10)">│</text><text class="breeze-ci-selective-check-r5" x="414.8" y="264" textLength="646.6" clip-path="url(#breeze-ci-selective-check-line-10)">[default:&#160;constraints-3-0]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breez [...]
 </text><text class="breeze-ci-selective-check-r5" x="0" y="288.4" textLength="1464" clip-path="url(#breeze-ci-selective-check-line-11)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-ci-selective-check-r1" x="1464" y="288.4" textLength="12.2" clip-path="url(#breeze-ci-selective-check-line-11)">
-</text><text class="breeze-ci-selective-check-r5" x="0" y="312.8" textLength="24.4" clip-path="url(#breeze-ci-selective-check-line-12)">╭─</text><text class="breeze-ci-selective-check-r5" x="24.4" y="312.8" textLength="231.8" clip-path="url(#breeze-ci-selective-check-line-12)">&#160;Github&#160;parameters&#160;</text><text class="breeze-ci-selective-check-r5" x="256.2" y="312.8" textLength="1183.4" clip-path="url(#breeze-ci-selective-check-line-12)">────────────────────────────────────── [...]
+</text><text class="breeze-ci-selective-check-r5" x="0" y="312.8" textLength="24.4" clip-path="url(#breeze-ci-selective-check-line-12)">╭─</text><text class="breeze-ci-selective-check-r5" x="24.4" y="312.8" textLength="231.8" clip-path="url(#breeze-ci-selective-check-line-12)">&#160;GitHub&#160;parameters&#160;</text><text class="breeze-ci-selective-check-r5" x="256.2" y="312.8" textLength="1183.4" clip-path="url(#breeze-ci-selective-check-line-12)">────────────────────────────────────── [...]
 </text><text class="breeze-ci-selective-check-r5" x="0" y="337.2" textLength="12.2" clip-path="url(#breeze-ci-selective-check-line-13)">│</text><text class="breeze-ci-selective-check-r4" x="24.4" y="337.2" textLength="231.8" clip-path="url(#breeze-ci-selective-check-line-13)">--github-event-name</text><text class="breeze-ci-selective-check-r1" x="329.4" y="337.2" textLength="1110.2" clip-path="url(#breeze-ci-selective-check-line-13)">Name&#160;of&#160;the&#160;GitHub&#160;event&#160;that [...]
 </text><text class="breeze-ci-selective-check-r5" x="0" y="361.6" textLength="12.2" clip-path="url(#breeze-ci-selective-check-line-14)">│</text><text class="breeze-ci-selective-check-r6" x="329.4" y="361.6" textLength="1110.2" clip-path="url(#breeze-ci-selective-check-line-14)">(pull_request&#160;|&#160;pull_request_review&#160;|&#160;pull_request_target&#160;|&#160;pull_request_workflow&#160;|&#160;push&#160;|&#160;</text><text class="breeze-ci-selective-check-r5" x="1451.8" y="361.6" t [...]
 </text><text class="breeze-ci-selective-check-r5" x="0" y="386" textLength="12.2" clip-path="url(#breeze-ci-selective-check-line-15)">│</text><text class="breeze-ci-selective-check-r6" x="329.4" y="386" textLength="1110.2" clip-path="url(#breeze-ci-selective-check-line-15)">schedule&#160;|&#160;workflow_dispatch&#160;|&#160;workflow_run)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#1 [...]
 </text><text class="breeze-ci-selective-check-r5" x="0" y="410.4" textLength="12.2" clip-path="url(#breeze-ci-selective-check-line-16)">│</text><text class="breeze-ci-selective-check-r5" x="329.4" y="410.4" textLength="1110.2" clip-path="url(#breeze-ci-selective-check-line-16)">[default:&#160;pull_request]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160 [...]
 </text><text class="breeze-ci-selective-check-r5" x="0" y="434.8" textLength="12.2" clip-path="url(#breeze-ci-selective-check-line-17)">│</text><text class="breeze-ci-selective-check-r4" x="24.4" y="434.8" textLength="231.8" clip-path="url(#breeze-ci-selective-check-line-17)">--github-repository</text><text class="breeze-ci-selective-check-r7" x="280.6" y="434.8" textLength="24.4" clip-path="url(#breeze-ci-selective-check-line-17)">-g</text><text class="breeze-ci-selective-check-r1" x="3 [...]
-</text><text class="breeze-ci-selective-check-r5" x="0" y="459.2" textLength="12.2" clip-path="url(#breeze-ci-selective-check-line-18)">│</text><text class="breeze-ci-selective-check-r4" x="24.4" y="459.2" textLength="170.8" clip-path="url(#breeze-ci-selective-check-line-18)">--github-actor</text><text class="breeze-ci-selective-check-r1" x="329.4" y="459.2" textLength="536.8" clip-path="url(#breeze-ci-selective-check-line-18)">Actor&#160;that&#160;triggered&#160;the&#160;event&#160;(Git [...]
-</text><text class="breeze-ci-selective-check-r5" x="0" y="483.6" textLength="12.2" clip-path="url(#breeze-ci-selective-check-line-19)">│</text><text class="breeze-ci-selective-check-r4" x="24.4" y="483.6" textLength="195.2" clip-path="url(#breeze-ci-selective-check-line-19)">--github-context</text><text class="breeze-ci-selective-check-r1" x="329.4" y="483.6" textLength="683.2" clip-path="url(#breeze-ci-selective-check-line-19)">Github&#160;context&#160;(JSON&#160;formatted)&#160;passed [...]
+</text><text class="breeze-ci-selective-check-r5" x="0" y="459.2" textLength="12.2" clip-path="url(#breeze-ci-selective-check-line-18)">│</text><text class="breeze-ci-selective-check-r4" x="24.4" y="459.2" textLength="170.8" clip-path="url(#breeze-ci-selective-check-line-18)">--github-actor</text><text class="breeze-ci-selective-check-r1" x="329.4" y="459.2" textLength="536.8" clip-path="url(#breeze-ci-selective-check-line-18)">Actor&#160;that&#160;triggered&#160;the&#160;event&#160;(Git [...]
+</text><text class="breeze-ci-selective-check-r5" x="0" y="483.6" textLength="12.2" clip-path="url(#breeze-ci-selective-check-line-19)">│</text><text class="breeze-ci-selective-check-r4" x="24.4" y="483.6" textLength="195.2" clip-path="url(#breeze-ci-selective-check-line-19)">--github-context</text><text class="breeze-ci-selective-check-r1" x="329.4" y="483.6" textLength="683.2" clip-path="url(#breeze-ci-selective-check-line-19)">GitHub&#160;context&#160;(JSON&#160;formatted)&#160;passed [...]
 </text><text class="breeze-ci-selective-check-r5" x="0" y="508" textLength="1464" clip-path="url(#breeze-ci-selective-check-line-20)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-ci-selective-check-r1" x="1464" y="508" textLength="12.2" clip-path="url(#breeze-ci-selective-check-line-20)">
 </text><text class="breeze-ci-selective-check-r5" x="0" y="532.4" textLength="24.4" clip-path="url(#breeze-ci-selective-check-line-21)">╭─</text><text class="breeze-ci-selective-check-r5" x="24.4" y="532.4" textLength="195.2" clip-path="url(#breeze-ci-selective-check-line-21)">&#160;Common&#160;options&#160;</text><text class="breeze-ci-selective-check-r5" x="219.6" y="532.4" textLength="1220" clip-path="url(#breeze-ci-selective-check-line-21)">─────────────────────────────────────────── [...]
 </text><text class="breeze-ci-selective-check-r5" x="0" y="556.8" textLength="12.2" clip-path="url(#breeze-ci-selective-check-line-22)">│</text><text class="breeze-ci-selective-check-r4" x="24.4" y="556.8" textLength="109.8" clip-path="url(#breeze-ci-selective-check-line-22)">--verbose</text><text class="breeze-ci-selective-check-r7" x="158.6" y="556.8" textLength="24.4" clip-path="url(#breeze-ci-selective-check-line-22)">-v</text><text class="breeze-ci-selective-check-r1" x="207.4" y="5 [...]
diff --git a/dev/breeze/doc/images/output_ci_selective-check.txt b/dev/breeze/doc/images/output_ci_selective-check.txt
index 1cf949a2ed2..6e8f6584dd7 100644
--- a/dev/breeze/doc/images/output_ci_selective-check.txt
+++ b/dev/breeze/doc/images/output_ci_selective-check.txt
@@ -1 +1 @@
-9d6c6f0fb7a0bd076aca654d5d536012
+c6add298bf8f5e45dd13e58c2d187369
diff --git a/dev/breeze/doc/images/output_prod-image_build.svg b/dev/breeze/doc/images/output_prod-image_build.svg
index 4827d89a1fc..b8e0ea7bdbe 100644
--- a/dev/breeze/doc/images/output_prod-image_build.svg
+++ b/dev/breeze/doc/images/output_prod-image_build.svg
@@ -472,7 +472,7 @@
 </text><text class="breeze-prod-image-build-r5" x="0" y="2313.6" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-94)">│</text><text class="breeze-prod-image-build-r4" x="24.4" y="2313.6" textLength="268.4" clip-path="url(#breeze-prod-image-build-line-94)">--prepare-buildx-cache</text><text class="breeze-prod-image-build-r1" x="341.6" y="2313.6" textLength="1098" clip-path="url(#breeze-prod-image-build-line-94)">Prepares&#160;build&#160;cache&#160;(this&#160;is&#160;done&#1 [...]
 </text><text class="breeze-prod-image-build-r5" x="0" y="2338" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-95)">│</text><text class="breeze-prod-image-build-r1" x="341.6" y="2338" textLength="1098" clip-path="url(#breeze-prod-image-build-line-95)">image).&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&# [...]
 </text><text class="breeze-prod-image-build-r5" x="0" y="2362.4" textLength="1464" clip-path="url(#breeze-prod-image-build-line-96)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-prod-image-build-r1" x="1464" y="2362.4" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-96)">
-</text><text class="breeze-prod-image-build-r5" x="0" y="2386.8" textLength="24.4" clip-path="url(#breeze-prod-image-build-line-97)">╭─</text><text class="breeze-prod-image-build-r5" x="24.4" y="2386.8" textLength="280.6" clip-path="url(#breeze-prod-image-build-line-97)">&#160;Github&#160;authentication&#160;</text><text class="breeze-prod-image-build-r5" x="305" y="2386.8" textLength="1134.6" clip-path="url(#breeze-prod-image-build-line-97)">───────────────────────────────────────────── [...]
+</text><text class="breeze-prod-image-build-r5" x="0" y="2386.8" textLength="24.4" clip-path="url(#breeze-prod-image-build-line-97)">╭─</text><text class="breeze-prod-image-build-r5" x="24.4" y="2386.8" textLength="280.6" clip-path="url(#breeze-prod-image-build-line-97)">&#160;GitHub&#160;authentication&#160;</text><text class="breeze-prod-image-build-r5" x="305" y="2386.8" textLength="1134.6" clip-path="url(#breeze-prod-image-build-line-97)">───────────────────────────────────────────── [...]
 </text><text class="breeze-prod-image-build-r5" x="0" y="2411.2" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-98)">│</text><text class="breeze-prod-image-build-r4" x="24.4" y="2411.2" textLength="231.8" clip-path="url(#breeze-prod-image-build-line-98)">--github-repository</text><text class="breeze-prod-image-build-r7" x="280.6" y="2411.2" textLength="24.4" clip-path="url(#breeze-prod-image-build-line-98)">-g</text><text class="breeze-prod-image-build-r1" x="329.4" y="24 [...]
 </text><text class="breeze-prod-image-build-r5" x="0" y="2435.6" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-99)">│</text><text class="breeze-prod-image-build-r4" x="24.4" y="2435.6" textLength="170.8" clip-path="url(#breeze-prod-image-build-line-99)">--github-token</text><text class="breeze-prod-image-build-r1" x="329.4" y="2435.6" textLength="500.2" clip-path="url(#breeze-prod-image-build-line-99)">The&#160;token&#160;used&#160;to&#160;authenticate&#160;to&#160;GitHu [...]
 </text><text class="breeze-prod-image-build-r5" x="0" y="2460" textLength="1464" clip-path="url(#breeze-prod-image-build-line-100)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-prod-image-build-r1" x="1464" y="2460" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-100)">
diff --git a/dev/breeze/doc/images/output_prod-image_build.txt b/dev/breeze/doc/images/output_prod-image_build.txt
index c60af4eb3e2..3b60645d724 100644
--- a/dev/breeze/doc/images/output_prod-image_build.txt
+++ b/dev/breeze/doc/images/output_prod-image_build.txt
@@ -1 +1 @@
-c064e2d6e4df2373a61eb8f995b4a227
+f880e9a684c0eb74de895f90639ea480
diff --git a/dev/breeze/doc/images/output_prod-image_load.svg b/dev/breeze/doc/images/output_prod-image_load.svg
index 746b741f9cd..9fccb11a7aa 100644
--- a/dev/breeze/doc/images/output_prod-image_load.svg
+++ b/dev/breeze/doc/images/output_prod-image_load.svg
@@ -1,4 +1,4 @@
-<svg class="rich-terminal" viewBox="0 0 1482 806.4" xmlns="http://www.w3.org/2000/svg">
+<svg class="rich-terminal" viewBox="0 0 1482 757.5999999999999" xmlns="http://www.w3.org/2000/svg">
     <!-- Generated with Rich https://www.textualize.io -->
     <style>
 
@@ -39,13 +39,11 @@
 .breeze-prod-image-load-r5 { fill: #868887 }
 .breeze-prod-image-load-r6 { fill: #98a84b;font-weight: bold }
 .breeze-prod-image-load-r7 { fill: #8d7b39 }
-.breeze-prod-image-load-r8 { fill: #cc555a }
-.breeze-prod-image-load-r9 { fill: #8a4346 }
     </style>
 
     <defs>
     <clipPath id="breeze-prod-image-load-clip-terminal">
-      <rect x="0" y="0" width="1463.0" height="755.4" />
+      <rect x="0" y="0" width="1463.0" height="706.5999999999999" />
     </clipPath>
     <clipPath id="breeze-prod-image-load-line-0">
     <rect x="0" y="1.5" width="1464" height="24.65"/>
@@ -131,15 +129,9 @@
 <clipPath id="breeze-prod-image-load-line-27">
     <rect x="0" y="660.3" width="1464" height="24.65"/>
             </clipPath>
-<clipPath id="breeze-prod-image-load-line-28">
-    <rect x="0" y="684.7" width="1464" height="24.65"/>
-            </clipPath>
-<clipPath id="breeze-prod-image-load-line-29">
-    <rect x="0" y="709.1" width="1464" height="24.65"/>
-            </clipPath>
     </defs>
 
-    <rect fill="#292929" stroke="rgba(255,255,255,0.35)" stroke-width="1" x="1" y="1" width="1480" height="804.4" rx="8"/><text class="breeze-prod-image-load-title" fill="#c5c8c6" text-anchor="middle" x="740" y="27">Command:&#160;prod-image&#160;load</text>
+    <rect fill="#292929" stroke="rgba(255,255,255,0.35)" stroke-width="1" x="1" y="1" width="1480" height="755.6" rx="8"/><text class="breeze-prod-image-load-title" fill="#c5c8c6" text-anchor="middle" x="740" y="27">Command:&#160;prod-image&#160;load</text>
             <g transform="translate(26,22)">
             <circle cx="0" cy="0" r="7" fill="#ff5f57"/>
             <circle cx="22" cy="0" r="7" fill="#febc2e"/>
@@ -155,31 +147,29 @@
 </text><text class="breeze-prod-image-load-r1" x="12.2" y="93.2" textLength="341.6" clip-path="url(#breeze-prod-image-load-line-3)">Load&#160;PROD&#160;image&#160;from&#160;a&#160;file.</text><text class="breeze-prod-image-load-r1" x="1464" y="93.2" textLength="12.2" clip-path="url(#breeze-prod-image-load-line-3)">
 </text><text class="breeze-prod-image-load-r1" x="1464" y="117.6" textLength="12.2" clip-path="url(#breeze-prod-image-load-line-4)">
 </text><text class="breeze-prod-image-load-r5" x="0" y="142" textLength="24.4" clip-path="url(#breeze-prod-image-load-line-5)">╭─</text><text class="breeze-prod-image-load-r5" x="24.4" y="142" textLength="219.6" clip-path="url(#breeze-prod-image-load-line-5)">&#160;Load&#160;image&#160;flags&#160;</text><text class="breeze-prod-image-load-r5" x="244" y="142" textLength="1195.6" clip-path="url(#breeze-prod-image-load-line-5)">─────────────────────────────────────────────────────────────── [...]
-</text><text class="breeze-prod-image-load-r5" x="0" y="166.4" textLength="12.2" clip-path="url(#breeze-prod-image-load-line-6)">│</text><text class="breeze-prod-image-load-r4" x="61" y="166.4" textLength="97.6" clip-path="url(#breeze-prod-image-load-line-6)">--python</text><text class="breeze-prod-image-load-r6" x="402.6" y="166.4" textLength="24.4" clip-path="url(#breeze-prod-image-load-line-6)">-p</text><text class="breeze-prod-image-load-r1" x="451.4" y="166.4" textLength="732" clip- [...]
-</text><text class="breeze-prod-image-load-r5" x="0" y="190.8" textLength="12.2" clip-path="url(#breeze-prod-image-load-line-7)">│</text><text class="breeze-prod-image-load-r7" x="451.4" y="190.8" textLength="732" clip-path="url(#breeze-prod-image-load-line-7)">(&gt;3.9&lt;&#160;|&#160;3.10&#160;|&#160;3.11&#160;|&#160;3.12)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#16 [...]
-</text><text class="breeze-prod-image-load-r5" x="0" y="215.2" textLength="12.2" clip-path="url(#breeze-prod-image-load-line-8)">│</text><text class="breeze-prod-image-load-r5" x="451.4" y="215.2" textLength="732" clip-path="url(#breeze-prod-image-load-line-8)">[default:&#160;3.9]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;& [...]
-</text><text class="breeze-prod-image-load-r5" x="0" y="239.6" textLength="12.2" clip-path="url(#breeze-prod-image-load-line-9)">│</text><text class="breeze-prod-image-load-r4" x="61" y="239.6" textLength="122" clip-path="url(#breeze-prod-image-load-line-9)">--platform</text><text class="breeze-prod-image-load-r1" x="451.4" y="239.6" textLength="707.6" clip-path="url(#breeze-prod-image-load-line-9)">Platform&#160;for&#160;Airflow&#160;image.&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160 [...]
-</text><text class="breeze-prod-image-load-r5" x="0" y="264" textLength="12.2" clip-path="url(#breeze-prod-image-load-line-10)">│</text><text class="breeze-prod-image-load-r7" x="451.4" y="264" textLength="707.6" clip-path="url(#breeze-prod-image-load-line-10)">(linux/amd64&#160;|&#160;linux/arm64&#160;|&#160;linux/x86_64&#160;|&#160;linux/aarch64)</text><text class="breeze-prod-image-load-r5" x="1451.8" y="264" textLength="12.2" clip-path="url(#breeze-prod-image-load-line-10)">│</text>< [...]
-</text><text class="breeze-prod-image-load-r5" x="0" y="288.4" textLength="12.2" clip-path="url(#breeze-prod-image-load-line-11)">│</text><text class="breeze-prod-image-load-r4" x="61" y="288.4" textLength="146.4" clip-path="url(#breeze-prod-image-load-line-11)">--image-file</text><text class="breeze-prod-image-load-r1" x="451.4" y="288.4" textLength="427" clip-path="url(#breeze-prod-image-load-line-11)">Optional&#160;file&#160;to&#160;save&#160;the&#160;image&#160;to.</text><text class= [...]
-</text><text class="breeze-prod-image-load-r5" x="0" y="312.8" textLength="12.2" clip-path="url(#breeze-prod-image-load-line-12)">│</text><text class="breeze-prod-image-load-r4" x="61" y="312.8" textLength="195.2" clip-path="url(#breeze-prod-image-load-line-12)">--image-file-dir</text><text class="breeze-prod-image-load-r1" x="451.4" y="312.8" textLength="854" clip-path="url(#breeze-prod-image-load-line-12)">The&#160;path&#160;to&#160;the&#160;directory&#160;where&#160;the&#160;image&#16 [...]
-</text><text class="breeze-prod-image-load-r5" x="0" y="337.2" textLength="12.2" clip-path="url(#breeze-prod-image-load-line-13)">│</text><text class="breeze-prod-image-load-r7" x="451.4" y="337.2" textLength="854" clip-path="url(#breeze-prod-image-load-line-13)">(DIRECTORY)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;& [...]
-</text><text class="breeze-prod-image-load-r5" x="0" y="361.6" textLength="12.2" clip-path="url(#breeze-prod-image-load-line-14)">│</text><text class="breeze-prod-image-load-r5" x="451.4" y="361.6" textLength="854" clip-path="url(#breeze-prod-image-load-line-14)">[default:&#160;/tmp]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#16 [...]
-</text><text class="breeze-prod-image-load-r5" x="0" y="386" textLength="12.2" clip-path="url(#breeze-prod-image-load-line-15)">│</text><text class="breeze-prod-image-load-r4" x="61" y="386" textLength="231.8" clip-path="url(#breeze-prod-image-load-line-15)">--github-repository</text><text class="breeze-prod-image-load-r6" x="402.6" y="386" textLength="24.4" clip-path="url(#breeze-prod-image-load-line-15)">-g</text><text class="breeze-prod-image-load-r1" x="451.4" y="386" textLength="585 [...]
-</text><text class="breeze-prod-image-load-r5" x="0" y="410.4" textLength="12.2" clip-path="url(#breeze-prod-image-load-line-16)">│</text><text class="breeze-prod-image-load-r8" x="24.4" y="410.4" textLength="12.2" clip-path="url(#breeze-prod-image-load-line-16)">*</text><text class="breeze-prod-image-load-r4" x="61" y="410.4" textLength="170.8" clip-path="url(#breeze-prod-image-load-line-16)">--github-token</text><text class="breeze-prod-image-load-r1" x="451.4" y="410.4" textLength="98 [...]
-</text><text class="breeze-prod-image-load-r5" x="0" y="434.8" textLength="12.2" clip-path="url(#breeze-prod-image-load-line-17)">│</text><text class="breeze-prod-image-load-r1" x="451.4" y="434.8" textLength="988.2" clip-path="url(#breeze-prod-image-load-line-17)">https://github.com/settings/tokens/new?description=Read%20repo&amp;scopes=public_repo</text><text class="breeze-prod-image-load-r5" x="1451.8" y="434.8" textLength="12.2" clip-path="url(#breeze-prod-image-load-line-17)">│</tex [...]
-</text><text class="breeze-prod-image-load-r5" x="0" y="459.2" textLength="12.2" clip-path="url(#breeze-prod-image-load-line-18)">│</text><text class="breeze-prod-image-load-r7" x="451.4" y="459.2" textLength="988.2" clip-path="url(#breeze-prod-image-load-line-18)">(TEXT)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#16 [...]
-</text><text class="breeze-prod-image-load-r5" x="0" y="483.6" textLength="12.2" clip-path="url(#breeze-prod-image-load-line-19)">│</text><text class="breeze-prod-image-load-r9" x="451.4" y="483.6" textLength="988.2" clip-path="url(#breeze-prod-image-load-line-19)">[required]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; [...]
-</text><text class="breeze-prod-image-load-r5" x="0" y="508" textLength="12.2" clip-path="url(#breeze-prod-image-load-line-20)">│</text><text class="breeze-prod-image-load-r4" x="61" y="508" textLength="122" clip-path="url(#breeze-prod-image-load-line-20)">--from-run</text><text class="breeze-prod-image-load-r1" x="451.4" y="508" textLength="780.8" clip-path="url(#breeze-prod-image-load-line-20)">Optional&#160;run&#160;id&#160;of&#160;the&#160;github&#160;action&#160;run&#160;to&#160;loa [...]
-</text><text class="breeze-prod-image-load-r5" x="0" y="532.4" textLength="12.2" clip-path="url(#breeze-prod-image-load-line-21)">│</text><text class="breeze-prod-image-load-r4" x="61" y="532.4" textLength="109.8" clip-path="url(#breeze-prod-image-load-line-21)">--from-pr</text><text class="breeze-prod-image-load-r1" x="451.4" y="532.4" textLength="988.2" clip-path="url(#breeze-prod-image-load-line-21)">Optional&#160;pr&#160;number&#160;of&#160;the&#160;github&#160;action&#160;job&#160;t [...]
-</text><text class="breeze-prod-image-load-r5" x="0" y="556.8" textLength="12.2" clip-path="url(#breeze-prod-image-load-line-22)">│</text><text class="breeze-prod-image-load-r1" x="451.4" y="556.8" textLength="988.2" clip-path="url(#breeze-prod-image-load-line-22)">image&#160;from&#160;the&#160;latest&#160;job.&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; [...]
-</text><text class="breeze-prod-image-load-r5" x="0" y="581.2" textLength="12.2" clip-path="url(#breeze-prod-image-load-line-23)">│</text><text class="breeze-prod-image-load-r7" x="451.4" y="581.2" textLength="988.2" clip-path="url(#breeze-prod-image-load-line-23)">(TEXT)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#16 [...]
-</text><text class="breeze-prod-image-load-r5" x="0" y="605.6" textLength="12.2" clip-path="url(#breeze-prod-image-load-line-24)">│</text><text class="breeze-prod-image-load-r4" x="61" y="605.6" textLength="317.2" clip-path="url(#breeze-prod-image-load-line-24)">--skip-image-file-deletion</text><text class="breeze-prod-image-load-r1" x="451.4" y="605.6" textLength="414.8" clip-path="url(#breeze-prod-image-load-line-24)">Skip&#160;image&#160;deletion&#160;after&#160;loading.</text><text c [...]
-</text><text class="breeze-prod-image-load-r5" x="0" y="630" textLength="1464" clip-path="url(#breeze-prod-image-load-line-25)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-prod-image-load-r1" x="1464" y="630" textLength="12.2" clip-path="url(#breeze-prod-image-load-line-25)">
-</text><text class="breeze-prod-image-load-r5" x="0" y="654.4" textLength="24.4" clip-path="url(#breeze-prod-image-load-line-26)">╭─</text><text class="breeze-prod-image-load-r5" x="24.4" y="654.4" textLength="195.2" clip-path="url(#breeze-prod-image-load-line-26)">&#160;Common&#160;options&#160;</text><text class="breeze-prod-image-load-r5" x="219.6" y="654.4" textLength="1220" clip-path="url(#breeze-prod-image-load-line-26)">───────────────────────────────────────────────────────────── [...]
-</text><text class="breeze-prod-image-load-r5" x="0" y="678.8" textLength="12.2" clip-path="url(#breeze-prod-image-load-line-27)">│</text><text class="breeze-prod-image-load-r4" x="24.4" y="678.8" textLength="109.8" clip-path="url(#breeze-prod-image-load-line-27)">--dry-run</text><text class="breeze-prod-image-load-r6" x="158.6" y="678.8" textLength="24.4" clip-path="url(#breeze-prod-image-load-line-27)">-D</text><text class="breeze-prod-image-load-r1" x="207.4" y="678.8" textLength="719 [...]
-</text><text class="breeze-prod-image-load-r5" x="0" y="703.2" textLength="12.2" clip-path="url(#breeze-prod-image-load-line-28)">│</text><text class="breeze-prod-image-load-r4" x="24.4" y="703.2" textLength="109.8" clip-path="url(#breeze-prod-image-load-line-28)">--verbose</text><text class="breeze-prod-image-load-r6" x="158.6" y="703.2" textLength="24.4" clip-path="url(#breeze-prod-image-load-line-28)">-v</text><text class="breeze-prod-image-load-r1" x="207.4" y="703.2" textLength="585 [...]
-</text><text class="breeze-prod-image-load-r5" x="0" y="727.6" textLength="12.2" clip-path="url(#breeze-prod-image-load-line-29)">│</text><text class="breeze-prod-image-load-r4" x="24.4" y="727.6" textLength="73.2" clip-path="url(#breeze-prod-image-load-line-29)">--help</text><text class="breeze-prod-image-load-r6" x="158.6" y="727.6" textLength="24.4" clip-path="url(#breeze-prod-image-load-line-29)">-h</text><text class="breeze-prod-image-load-r1" x="207.4" y="727.6" textLength="329.4"  [...]
-</text><text class="breeze-prod-image-load-r5" x="0" y="752" textLength="1464" clip-path="url(#breeze-prod-image-load-line-30)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-prod-image-load-r1" x="1464" y="752" textLength="12.2" clip-path="url(#breeze-prod-image-load-line-30)">
+</text><text class="breeze-prod-image-load-r5" x="0" y="166.4" textLength="12.2" clip-path="url(#breeze-prod-image-load-line-6)">│</text><text class="breeze-prod-image-load-r4" x="24.4" y="166.4" textLength="97.6" clip-path="url(#breeze-prod-image-load-line-6)">--python</text><text class="breeze-prod-image-load-r6" x="366" y="166.4" textLength="24.4" clip-path="url(#breeze-prod-image-load-line-6)">-p</text><text class="breeze-prod-image-load-r1" x="414.8" y="166.4" textLength="732" clip- [...]
+</text><text class="breeze-prod-image-load-r5" x="0" y="190.8" textLength="12.2" clip-path="url(#breeze-prod-image-load-line-7)">│</text><text class="breeze-prod-image-load-r7" x="414.8" y="190.8" textLength="732" clip-path="url(#breeze-prod-image-load-line-7)">(&gt;3.9&lt;&#160;|&#160;3.10&#160;|&#160;3.11&#160;|&#160;3.12)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#16 [...]
+</text><text class="breeze-prod-image-load-r5" x="0" y="215.2" textLength="12.2" clip-path="url(#breeze-prod-image-load-line-8)">│</text><text class="breeze-prod-image-load-r5" x="414.8" y="215.2" textLength="732" clip-path="url(#breeze-prod-image-load-line-8)">[default:&#160;3.9]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;& [...]
+</text><text class="breeze-prod-image-load-r5" x="0" y="239.6" textLength="12.2" clip-path="url(#breeze-prod-image-load-line-9)">│</text><text class="breeze-prod-image-load-r4" x="24.4" y="239.6" textLength="122" clip-path="url(#breeze-prod-image-load-line-9)">--platform</text><text class="breeze-prod-image-load-r1" x="414.8" y="239.6" textLength="707.6" clip-path="url(#breeze-prod-image-load-line-9)">Platform&#160;for&#160;Airflow&#160;image.&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#1 [...]
+</text><text class="breeze-prod-image-load-r5" x="0" y="264" textLength="12.2" clip-path="url(#breeze-prod-image-load-line-10)">│</text><text class="breeze-prod-image-load-r7" x="414.8" y="264" textLength="707.6" clip-path="url(#breeze-prod-image-load-line-10)">(linux/amd64&#160;|&#160;linux/arm64&#160;|&#160;linux/x86_64&#160;|&#160;linux/aarch64)</text><text class="breeze-prod-image-load-r5" x="1451.8" y="264" textLength="12.2" clip-path="url(#breeze-prod-image-load-line-10)">│</text>< [...]
+</text><text class="breeze-prod-image-load-r5" x="0" y="288.4" textLength="12.2" clip-path="url(#breeze-prod-image-load-line-11)">│</text><text class="breeze-prod-image-load-r4" x="24.4" y="288.4" textLength="146.4" clip-path="url(#breeze-prod-image-load-line-11)">--image-file</text><text class="breeze-prod-image-load-r1" x="414.8" y="288.4" textLength="427" clip-path="url(#breeze-prod-image-load-line-11)">Optional&#160;file&#160;to&#160;save&#160;the&#160;image&#160;to.</text><text clas [...]
+</text><text class="breeze-prod-image-load-r5" x="0" y="312.8" textLength="12.2" clip-path="url(#breeze-prod-image-load-line-12)">│</text><text class="breeze-prod-image-load-r4" x="24.4" y="312.8" textLength="195.2" clip-path="url(#breeze-prod-image-load-line-12)">--image-file-dir</text><text class="breeze-prod-image-load-r1" x="414.8" y="312.8" textLength="854" clip-path="url(#breeze-prod-image-load-line-12)">The&#160;path&#160;to&#160;the&#160;directory&#160;where&#160;the&#160;image&# [...]
+</text><text class="breeze-prod-image-load-r5" x="0" y="337.2" textLength="12.2" clip-path="url(#breeze-prod-image-load-line-13)">│</text><text class="breeze-prod-image-load-r5" x="414.8" y="337.2" textLength="854" clip-path="url(#breeze-prod-image-load-line-13)">[default:&#160;/tmp]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#16 [...]
+</text><text class="breeze-prod-image-load-r5" x="0" y="361.6" textLength="12.2" clip-path="url(#breeze-prod-image-load-line-14)">│</text><text class="breeze-prod-image-load-r4" x="24.4" y="361.6" textLength="231.8" clip-path="url(#breeze-prod-image-load-line-14)">--github-repository</text><text class="breeze-prod-image-load-r6" x="366" y="361.6" textLength="24.4" clip-path="url(#breeze-prod-image-load-line-14)">-g</text><text class="breeze-prod-image-load-r1" x="414.8" y="361.6" textLen [...]
+</text><text class="breeze-prod-image-load-r5" x="0" y="386" textLength="12.2" clip-path="url(#breeze-prod-image-load-line-15)">│</text><text class="breeze-prod-image-load-r4" x="24.4" y="386" textLength="170.8" clip-path="url(#breeze-prod-image-load-line-15)">--github-token</text><text class="breeze-prod-image-load-r1" x="414.8" y="386" textLength="1024.8" clip-path="url(#breeze-prod-image-load-line-15)">The&#160;token&#160;used&#160;to&#160;authenticate&#160;to&#160;GitHub.&#160;You&#1 [...]
+</text><text class="breeze-prod-image-load-r5" x="0" y="410.4" textLength="12.2" clip-path="url(#breeze-prod-image-load-line-16)">│</text><text class="breeze-prod-image-load-r1" x="414.8" y="410.4" textLength="1024.8" clip-path="url(#breeze-prod-image-load-line-16)">https://github.com/settings/tokens/new?description=Read%20repo&amp;scopes=public_repo&#160;&#160;&#160;</text><text class="breeze-prod-image-load-r5" x="1451.8" y="410.4" textLength="12.2" clip-path="url(#breeze-prod-image-lo [...]
+</text><text class="breeze-prod-image-load-r5" x="0" y="434.8" textLength="12.2" clip-path="url(#breeze-prod-image-load-line-17)">│</text><text class="breeze-prod-image-load-r7" x="414.8" y="434.8" textLength="1024.8" clip-path="url(#breeze-prod-image-load-line-17)">(TEXT)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#1 [...]
+</text><text class="breeze-prod-image-load-r5" x="0" y="459.2" textLength="12.2" clip-path="url(#breeze-prod-image-load-line-18)">│</text><text class="breeze-prod-image-load-r4" x="24.4" y="459.2" textLength="122" clip-path="url(#breeze-prod-image-load-line-18)">--from-run</text><text class="breeze-prod-image-load-r1" x="414.8" y="459.2" textLength="780.8" clip-path="url(#breeze-prod-image-load-line-18)">Optional&#160;run&#160;id&#160;of&#160;the&#160;github&#160;action&#160;run&#160;to& [...]
+</text><text class="breeze-prod-image-load-r5" x="0" y="483.6" textLength="12.2" clip-path="url(#breeze-prod-image-load-line-19)">│</text><text class="breeze-prod-image-load-r4" x="24.4" y="483.6" textLength="109.8" clip-path="url(#breeze-prod-image-load-line-19)">--from-pr</text><text class="breeze-prod-image-load-r1" x="414.8" y="483.6" textLength="1024.8" clip-path="url(#breeze-prod-image-load-line-19)">Optional&#160;pr&#160;number&#160;of&#160;the&#160;github&#160;action&#160;job&#16 [...]
+</text><text class="breeze-prod-image-load-r5" x="0" y="508" textLength="12.2" clip-path="url(#breeze-prod-image-load-line-20)">│</text><text class="breeze-prod-image-load-r1" x="414.8" y="508" textLength="1024.8" clip-path="url(#breeze-prod-image-load-line-20)">from&#160;the&#160;latest&#160;job.&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&# [...]
+</text><text class="breeze-prod-image-load-r5" x="0" y="532.4" textLength="12.2" clip-path="url(#breeze-prod-image-load-line-21)">│</text><text class="breeze-prod-image-load-r7" x="414.8" y="532.4" textLength="1024.8" clip-path="url(#breeze-prod-image-load-line-21)">(TEXT)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#1 [...]
+</text><text class="breeze-prod-image-load-r5" x="0" y="556.8" textLength="12.2" clip-path="url(#breeze-prod-image-load-line-22)">│</text><text class="breeze-prod-image-load-r4" x="24.4" y="556.8" textLength="317.2" clip-path="url(#breeze-prod-image-load-line-22)">--skip-image-file-deletion</text><text class="breeze-prod-image-load-r1" x="414.8" y="556.8" textLength="414.8" clip-path="url(#breeze-prod-image-load-line-22)">Skip&#160;image&#160;deletion&#160;after&#160;loading.</text><text [...]
+</text><text class="breeze-prod-image-load-r5" x="0" y="581.2" textLength="1464" clip-path="url(#breeze-prod-image-load-line-23)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-prod-image-load-r1" x="1464" y="581.2" textLength="12.2" clip-path="url(#breeze-prod-image-load-line-23)">
+</text><text class="breeze-prod-image-load-r5" x="0" y="605.6" textLength="24.4" clip-path="url(#breeze-prod-image-load-line-24)">╭─</text><text class="breeze-prod-image-load-r5" x="24.4" y="605.6" textLength="195.2" clip-path="url(#breeze-prod-image-load-line-24)">&#160;Common&#160;options&#160;</text><text class="breeze-prod-image-load-r5" x="219.6" y="605.6" textLength="1220" clip-path="url(#breeze-prod-image-load-line-24)">───────────────────────────────────────────────────────────── [...]
+</text><text class="breeze-prod-image-load-r5" x="0" y="630" textLength="12.2" clip-path="url(#breeze-prod-image-load-line-25)">│</text><text class="breeze-prod-image-load-r4" x="24.4" y="630" textLength="109.8" clip-path="url(#breeze-prod-image-load-line-25)">--dry-run</text><text class="breeze-prod-image-load-r6" x="158.6" y="630" textLength="24.4" clip-path="url(#breeze-prod-image-load-line-25)">-D</text><text class="breeze-prod-image-load-r1" x="207.4" y="630" textLength="719.8" clip [...]
+</text><text class="breeze-prod-image-load-r5" x="0" y="654.4" textLength="12.2" clip-path="url(#breeze-prod-image-load-line-26)">│</text><text class="breeze-prod-image-load-r4" x="24.4" y="654.4" textLength="109.8" clip-path="url(#breeze-prod-image-load-line-26)">--verbose</text><text class="breeze-prod-image-load-r6" x="158.6" y="654.4" textLength="24.4" clip-path="url(#breeze-prod-image-load-line-26)">-v</text><text class="breeze-prod-image-load-r1" x="207.4" y="654.4" textLength="585 [...]
+</text><text class="breeze-prod-image-load-r5" x="0" y="678.8" textLength="12.2" clip-path="url(#breeze-prod-image-load-line-27)">│</text><text class="breeze-prod-image-load-r4" x="24.4" y="678.8" textLength="73.2" clip-path="url(#breeze-prod-image-load-line-27)">--help</text><text class="breeze-prod-image-load-r6" x="158.6" y="678.8" textLength="24.4" clip-path="url(#breeze-prod-image-load-line-27)">-h</text><text class="breeze-prod-image-load-r1" x="207.4" y="678.8" textLength="329.4"  [...]
+</text><text class="breeze-prod-image-load-r5" x="0" y="703.2" textLength="1464" clip-path="url(#breeze-prod-image-load-line-28)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-prod-image-load-r1" x="1464" y="703.2" textLength="12.2" clip-path="url(#breeze-prod-image-load-line-28)">
 </text>
     </g>
     </g>
diff --git a/dev/breeze/doc/images/output_prod-image_load.txt b/dev/breeze/doc/images/output_prod-image_load.txt
index 44d94e2b0b1..dc314955904 100644
--- a/dev/breeze/doc/images/output_prod-image_load.txt
+++ b/dev/breeze/doc/images/output_prod-image_load.txt
@@ -1 +1 @@
-db73218af61a7c7092636e29846b9b5b
+721f625e9cd7d70cf642715d94d3c21a
diff --git a/dev/breeze/doc/images/output_prod-image_pull.svg b/dev/breeze/doc/images/output_prod-image_pull.svg
index 23ff7aa9e41..620b09844a2 100644
--- a/dev/breeze/doc/images/output_prod-image_pull.svg
+++ b/dev/breeze/doc/images/output_prod-image_pull.svg
@@ -169,7 +169,7 @@
 </text><text class="breeze-prod-image-pull-r5" x="0" y="483.6" textLength="12.2" clip-path="url(#breeze-prod-image-pull-line-19)">│</text><text class="breeze-prod-image-pull-r4" x="24.4" y="483.6" textLength="207.4" clip-path="url(#breeze-prod-image-pull-line-19)">--debug-resources</text><text class="breeze-prod-image-pull-r1" x="378.2" y="483.6" textLength="768.6" clip-path="url(#breeze-prod-image-pull-line-19)">Whether&#160;to&#160;show&#160;resource&#160;information&#160;while&#160;ru [...]
 </text><text class="breeze-prod-image-pull-r5" x="0" y="508" textLength="12.2" clip-path="url(#breeze-prod-image-pull-line-20)">│</text><text class="breeze-prod-image-pull-r4" x="24.4" y="508" textLength="305" clip-path="url(#breeze-prod-image-pull-line-20)">--include-success-outputs</text><text class="breeze-prod-image-pull-r1" x="378.2" y="508" textLength="841.8" clip-path="url(#breeze-prod-image-pull-line-20)">Whether&#160;to&#160;include&#160;outputs&#160;of&#160;successful&#160;runs [...]
 </text><text class="breeze-prod-image-pull-r5" x="0" y="532.4" textLength="1464" clip-path="url(#breeze-prod-image-pull-line-21)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-prod-image-pull-r1" x="1464" y="532.4" textLength="12.2" clip-path="url(#breeze-prod-image-pull-line-21)">
-</text><text class="breeze-prod-image-pull-r5" x="0" y="556.8" textLength="24.4" clip-path="url(#breeze-prod-image-pull-line-22)">╭─</text><text class="breeze-prod-image-pull-r5" x="24.4" y="556.8" textLength="280.6" clip-path="url(#breeze-prod-image-pull-line-22)">&#160;Github&#160;authentication&#160;</text><text class="breeze-prod-image-pull-r5" x="305" y="556.8" textLength="1134.6" clip-path="url(#breeze-prod-image-pull-line-22)">────────────────────────────────────────────────────── [...]
+</text><text class="breeze-prod-image-pull-r5" x="0" y="556.8" textLength="24.4" clip-path="url(#breeze-prod-image-pull-line-22)">╭─</text><text class="breeze-prod-image-pull-r5" x="24.4" y="556.8" textLength="280.6" clip-path="url(#breeze-prod-image-pull-line-22)">&#160;GitHub&#160;authentication&#160;</text><text class="breeze-prod-image-pull-r5" x="305" y="556.8" textLength="1134.6" clip-path="url(#breeze-prod-image-pull-line-22)">────────────────────────────────────────────────────── [...]
 </text><text class="breeze-prod-image-pull-r5" x="0" y="581.2" textLength="12.2" clip-path="url(#breeze-prod-image-pull-line-23)">│</text><text class="breeze-prod-image-pull-r4" x="24.4" y="581.2" textLength="231.8" clip-path="url(#breeze-prod-image-pull-line-23)">--github-repository</text><text class="breeze-prod-image-pull-r6" x="280.6" y="581.2" textLength="24.4" clip-path="url(#breeze-prod-image-pull-line-23)">-g</text><text class="breeze-prod-image-pull-r1" x="329.4" y="581.2" textL [...]
 </text><text class="breeze-prod-image-pull-r5" x="0" y="605.6" textLength="12.2" clip-path="url(#breeze-prod-image-pull-line-24)">│</text><text class="breeze-prod-image-pull-r4" x="24.4" y="605.6" textLength="170.8" clip-path="url(#breeze-prod-image-pull-line-24)">--github-token</text><text class="breeze-prod-image-pull-r1" x="329.4" y="605.6" textLength="500.2" clip-path="url(#breeze-prod-image-pull-line-24)">The&#160;token&#160;used&#160;to&#160;authenticate&#160;to&#160;GitHub.</text> [...]
 </text><text class="breeze-prod-image-pull-r5" x="0" y="630" textLength="1464" clip-path="url(#breeze-prod-image-pull-line-25)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-prod-image-pull-r1" x="1464" y="630" textLength="12.2" clip-path="url(#breeze-prod-image-pull-line-25)">
diff --git a/dev/breeze/doc/images/output_prod-image_pull.txt b/dev/breeze/doc/images/output_prod-image_pull.txt
index d6ac534091a..15df54f6fe3 100644
--- a/dev/breeze/doc/images/output_prod-image_pull.txt
+++ b/dev/breeze/doc/images/output_prod-image_pull.txt
@@ -1 +1 @@
-beceddc6149385f810b4bb8ee798416c
+e4de88ddd99a085a3ce9578698261af7
diff --git a/dev/breeze/doc/images/output_prod-image_verify.svg b/dev/breeze/doc/images/output_prod-image_verify.svg
index d5341f2bbab..5e38a3715bd 100644
--- a/dev/breeze/doc/images/output_prod-image_verify.svg
+++ b/dev/breeze/doc/images/output_prod-image_verify.svg
@@ -177,7 +177,7 @@
 </text><text class="breeze-prod-image-verify-r5" x="0" y="532.4" textLength="12.2" clip-path="url(#breeze-prod-image-verify-line-21)">│</text><text class="breeze-prod-image-verify-r4" x="24.4" y="532.4" textLength="207.4" clip-path="url(#breeze-prod-image-verify-line-21)">--debug-resources</text><text class="breeze-prod-image-verify-r1" x="378.2" y="532.4" textLength="768.6" clip-path="url(#breeze-prod-image-verify-line-21)">Whether&#160;to&#160;show&#160;resource&#160;information&#160;w [...]
 </text><text class="breeze-prod-image-verify-r5" x="0" y="556.8" textLength="12.2" clip-path="url(#breeze-prod-image-verify-line-22)">│</text><text class="breeze-prod-image-verify-r4" x="24.4" y="556.8" textLength="305" clip-path="url(#breeze-prod-image-verify-line-22)">--include-success-outputs</text><text class="breeze-prod-image-verify-r1" x="378.2" y="556.8" textLength="841.8" clip-path="url(#breeze-prod-image-verify-line-22)">Whether&#160;to&#160;include&#160;outputs&#160;of&#160;su [...]
 </text><text class="breeze-prod-image-verify-r5" x="0" y="581.2" textLength="1464" clip-path="url(#breeze-prod-image-verify-line-23)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-prod-image-verify-r1" x="1464" y="581.2" textLength="12.2" clip-path="url(#breeze-prod-image-verify-line-23)">
-</text><text class="breeze-prod-image-verify-r5" x="0" y="605.6" textLength="24.4" clip-path="url(#breeze-prod-image-verify-line-24)">╭─</text><text class="breeze-prod-image-verify-r5" x="24.4" y="605.6" textLength="280.6" clip-path="url(#breeze-prod-image-verify-line-24)">&#160;Github&#160;authentication&#160;</text><text class="breeze-prod-image-verify-r5" x="305" y="605.6" textLength="1134.6" clip-path="url(#breeze-prod-image-verify-line-24)">────────────────────────────────────────── [...]
+</text><text class="breeze-prod-image-verify-r5" x="0" y="605.6" textLength="24.4" clip-path="url(#breeze-prod-image-verify-line-24)">╭─</text><text class="breeze-prod-image-verify-r5" x="24.4" y="605.6" textLength="280.6" clip-path="url(#breeze-prod-image-verify-line-24)">&#160;GitHub&#160;authentication&#160;</text><text class="breeze-prod-image-verify-r5" x="305" y="605.6" textLength="1134.6" clip-path="url(#breeze-prod-image-verify-line-24)">────────────────────────────────────────── [...]
 </text><text class="breeze-prod-image-verify-r5" x="0" y="630" textLength="12.2" clip-path="url(#breeze-prod-image-verify-line-25)">│</text><text class="breeze-prod-image-verify-r4" x="24.4" y="630" textLength="231.8" clip-path="url(#breeze-prod-image-verify-line-25)">--github-repository</text><text class="breeze-prod-image-verify-r6" x="280.6" y="630" textLength="24.4" clip-path="url(#breeze-prod-image-verify-line-25)">-g</text><text class="breeze-prod-image-verify-r1" x="329.4" y="630" [...]
 </text><text class="breeze-prod-image-verify-r5" x="0" y="654.4" textLength="12.2" clip-path="url(#breeze-prod-image-verify-line-26)">│</text><text class="breeze-prod-image-verify-r4" x="24.4" y="654.4" textLength="170.8" clip-path="url(#breeze-prod-image-verify-line-26)">--github-token</text><text class="breeze-prod-image-verify-r1" x="329.4" y="654.4" textLength="500.2" clip-path="url(#breeze-prod-image-verify-line-26)">The&#160;token&#160;used&#160;to&#160;authenticate&#160;to&#160;Gi [...]
 </text><text class="breeze-prod-image-verify-r5" x="0" y="678.8" textLength="1464" clip-path="url(#breeze-prod-image-verify-line-27)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-prod-image-verify-r1" x="1464" y="678.8" textLength="12.2" clip-path="url(#breeze-prod-image-verify-line-27)">
diff --git a/dev/breeze/doc/images/output_prod-image_verify.txt b/dev/breeze/doc/images/output_prod-image_verify.txt
index 909ac7db8e4..8b95c81f1b7 100644
--- a/dev/breeze/doc/images/output_prod-image_verify.txt
+++ b/dev/breeze/doc/images/output_prod-image_verify.txt
@@ -1 +1 @@
-76afb62329b439b9b2a6000c0be68a04
+ab83bf54aebe511f1de12b85ca261f1d
diff --git a/dev/breeze/doc/images/output_release-management_generate-issue-content-providers.svg b/dev/breeze/doc/images/output_release-management_generate-issue-content-providers.svg
index e8f786ea940..e38997d3904 100644
--- a/dev/breeze/doc/images/output_release-management_generate-issue-content-providers.svg
+++ b/dev/breeze/doc/images/output_release-management_generate-issue-content-providers.svg
@@ -1,4 +1,4 @@
-<svg class="rich-terminal" viewBox="0 0 1482 733.1999999999999" xmlns="http://www.w3.org/2000/svg">
+<svg class="rich-terminal" viewBox="0 0 1482 757.5999999999999" xmlns="http://www.w3.org/2000/svg">
     <!-- Generated with Rich https://www.textualize.io -->
     <style>
 
@@ -43,7 +43,7 @@
 
     <defs>
     <clipPath id="breeze-release-management-generate-issue-content-providers-clip-terminal">
-      <rect x="0" y="0" width="1463.0" height="682.1999999999999" />
+      <rect x="0" y="0" width="1463.0" height="706.5999999999999" />
     </clipPath>
     <clipPath id="breeze-release-management-generate-issue-content-providers-line-0">
     <rect x="0" y="1.5" width="1464" height="24.65"/>
@@ -126,9 +126,12 @@
 <clipPath id="breeze-release-management-generate-issue-content-providers-line-26">
     <rect x="0" y="635.9" width="1464" height="24.65"/>
             </clipPath>
+<clipPath id="breeze-release-management-generate-issue-content-providers-line-27">
+    <rect x="0" y="660.3" width="1464" height="24.65"/>
+            </clipPath>
     </defs>
 
-    <rect fill="#292929" stroke="rgba(255,255,255,0.35)" stroke-width="1" x="1" y="1" width="1480" height="731.2" rx="8"/><text class="breeze-release-management-generate-issue-content-providers-title" fill="#c5c8c6" text-anchor="middle" x="740" y="27">Command:&#160;release-management&#160;generate-issue-content-providers</text>
+    <rect fill="#292929" stroke="rgba(255,255,255,0.35)" stroke-width="1" x="1" y="1" width="1480" height="755.6" rx="8"/><text class="breeze-release-management-generate-issue-content-providers-title" fill="#c5c8c6" text-anchor="middle" x="740" y="27">Command:&#160;release-management&#160;generate-issue-content-providers</text>
             <g transform="translate(26,22)">
             <circle cx="0" cy="0" r="7" fill="#ff5f57"/>
             <circle cx="22" cy="0" r="7" fill="#febc2e"/>
@@ -155,17 +158,18 @@
 </text><text class="breeze-release-management-generate-issue-content-providers-r1" x="12.2" y="361.6" textLength="585.6" clip-path="url(#breeze-release-management-generate-issue-content-providers-line-14)">Generates&#160;content&#160;for&#160;issue&#160;to&#160;test&#160;the&#160;release.</text><text class="breeze-release-management-generate-issue-content-providers-r1" x="1464" y="361.6" textLength="12.2" clip-path="url(#breeze-release-management-generate-issue-content-providers-line-14)">
 </text><text class="breeze-release-management-generate-issue-content-providers-r1" x="1464" y="386" textLength="12.2" clip-path="url(#breeze-release-management-generate-issue-content-providers-line-15)">
 </text><text class="breeze-release-management-generate-issue-content-providers-r5" x="0" y="410.4" textLength="24.4" clip-path="url(#breeze-release-management-generate-issue-content-providers-line-16)">╭─</text><text class="breeze-release-management-generate-issue-content-providers-r5" x="24.4" y="410.4" textLength="366" clip-path="url(#breeze-release-management-generate-issue-content-providers-line-16)">&#160;Generate&#160;issue&#160;content&#160;flags&#160;</text><text class="breeze-re [...]
-</text><text class="breeze-release-management-generate-issue-content-providers-r5" x="0" y="434.8" textLength="12.2" clip-path="url(#breeze-release-management-generate-issue-content-providers-line-17)">│</text><text class="breeze-release-management-generate-issue-content-providers-r4" x="24.4" y="434.8" textLength="219.6" clip-path="url(#breeze-release-management-generate-issue-content-providers-line-17)">--disable-progress</text><text class="breeze-release-management-generate-issue-cont [...]
-</text><text class="breeze-release-management-generate-issue-content-providers-r5" x="0" y="459.2" textLength="12.2" clip-path="url(#breeze-release-management-generate-issue-content-providers-line-18)">│</text><text class="breeze-release-management-generate-issue-content-providers-r4" x="24.4" y="459.2" textLength="219.6" clip-path="url(#breeze-release-management-generate-issue-content-providers-line-18)">--excluded-pr-list</text><text class="breeze-release-management-generate-issue-cont [...]
-</text><text class="breeze-release-management-generate-issue-content-providers-r5" x="0" y="483.6" textLength="12.2" clip-path="url(#breeze-release-management-generate-issue-content-providers-line-19)">│</text><text class="breeze-release-management-generate-issue-content-providers-r4" x="24.4" y="483.6" textLength="170.8" clip-path="url(#breeze-release-management-generate-issue-content-providers-line-19)">--github-token</text><text class="breeze-release-management-generate-issue-content- [...]
-</text><text class="breeze-release-management-generate-issue-content-providers-r5" x="0" y="508" textLength="12.2" clip-path="url(#breeze-release-management-generate-issue-content-providers-line-20)">│</text><text class="breeze-release-management-generate-issue-content-providers-r1" x="366" y="508" textLength="1073.6" clip-path="url(#breeze-release-management-generate-issue-content-providers-line-20)">variable&#160;set.&#160;Can&#160;be&#160;generated&#160;with:&#160;&#160;&#160;&#160;&# [...]
-</text><text class="breeze-release-management-generate-issue-content-providers-r5" x="0" y="532.4" textLength="12.2" clip-path="url(#breeze-release-management-generate-issue-content-providers-line-21)">│</text><text class="breeze-release-management-generate-issue-content-providers-r1" x="366" y="532.4" textLength="1073.6" clip-path="url(#breeze-release-management-generate-issue-content-providers-line-21)">https://github.com/settings/tokens/new?description=Read%20sssues&amp;scopes=repo:st [...]
-</text><text class="breeze-release-management-generate-issue-content-providers-r5" x="0" y="556.8" textLength="12.2" clip-path="url(#breeze-release-management-generate-issue-content-providers-line-22)">│</text><text class="breeze-release-management-generate-issue-content-providers-r6" x="366" y="556.8" textLength="1073.6" clip-path="url(#breeze-release-management-generate-issue-content-providers-line-22)">(TEXT)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160 [...]
-</text><text class="breeze-release-management-generate-issue-content-providers-r5" x="0" y="581.2" textLength="12.2" clip-path="url(#breeze-release-management-generate-issue-content-providers-line-23)">│</text><text class="breeze-release-management-generate-issue-content-providers-r4" x="24.4" y="581.2" textLength="292.8" clip-path="url(#breeze-release-management-generate-issue-content-providers-line-23)">--only-available-in-dist</text><text class="breeze-release-management-generate-issu [...]
-</text><text class="breeze-release-management-generate-issue-content-providers-r5" x="0" y="605.6" textLength="1464" clip-path="url(#breeze-release-management-generate-issue-content-providers-line-24)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-release-management-generate-issue-content-providers-r1" x="1464" y="605.6" textLength="12.2" clip-path="url(#breeze-release-management-generate [...]
-</text><text class="breeze-release-management-generate-issue-content-providers-r5" x="0" y="630" textLength="24.4" clip-path="url(#breeze-release-management-generate-issue-content-providers-line-25)">╭─</text><text class="breeze-release-management-generate-issue-content-providers-r5" x="24.4" y="630" textLength="195.2" clip-path="url(#breeze-release-management-generate-issue-content-providers-line-25)">&#160;Common&#160;options&#160;</text><text class="breeze-release-management-generate- [...]
-</text><text class="breeze-release-management-generate-issue-content-providers-r5" x="0" y="654.4" textLength="12.2" clip-path="url(#breeze-release-management-generate-issue-content-providers-line-26)">│</text><text class="breeze-release-management-generate-issue-content-providers-r4" x="24.4" y="654.4" textLength="73.2" clip-path="url(#breeze-release-management-generate-issue-content-providers-line-26)">--help</text><text class="breeze-release-management-generate-issue-content-providers [...]
-</text><text class="breeze-release-management-generate-issue-content-providers-r5" x="0" y="678.8" textLength="1464" clip-path="url(#breeze-release-management-generate-issue-content-providers-line-27)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-release-management-generate-issue-content-providers-r1" x="1464" y="678.8" textLength="12.2" clip-path="url(#breeze-release-management-generate [...]
+</text><text class="breeze-release-management-generate-issue-content-providers-r5" x="0" y="434.8" textLength="12.2" clip-path="url(#breeze-release-management-generate-issue-content-providers-line-17)">│</text><text class="breeze-release-management-generate-issue-content-providers-r4" x="24.4" y="434.8" textLength="219.6" clip-path="url(#breeze-release-management-generate-issue-content-providers-line-17)">--disable-progress</text><text class="breeze-release-management-generate-issue-cont [...]
+</text><text class="breeze-release-management-generate-issue-content-providers-r5" x="0" y="459.2" textLength="12.2" clip-path="url(#breeze-release-management-generate-issue-content-providers-line-18)">│</text><text class="breeze-release-management-generate-issue-content-providers-r4" x="24.4" y="459.2" textLength="219.6" clip-path="url(#breeze-release-management-generate-issue-content-providers-line-18)">--excluded-pr-list</text><text class="breeze-release-management-generate-issue-cont [...]
+</text><text class="breeze-release-management-generate-issue-content-providers-r5" x="0" y="483.6" textLength="12.2" clip-path="url(#breeze-release-management-generate-issue-content-providers-line-19)">│</text><text class="breeze-release-management-generate-issue-content-providers-r4" x="24.4" y="483.6" textLength="170.8" clip-path="url(#breeze-release-management-generate-issue-content-providers-line-19)">--github-token</text><text class="breeze-release-management-generate-issue-content- [...]
+</text><text class="breeze-release-management-generate-issue-content-providers-r5" x="0" y="508" textLength="12.2" clip-path="url(#breeze-release-management-generate-issue-content-providers-line-20)">│</text><text class="breeze-release-management-generate-issue-content-providers-r1" x="378.2" y="508" textLength="1061.4" clip-path="url(#breeze-release-management-generate-issue-content-providers-line-20)">variable&#160;set.&#160;Can&#160;be&#160;generated&#160;with:&#160;&#160;&#160;&#160; [...]
+</text><text class="breeze-release-management-generate-issue-content-providers-r5" x="0" y="532.4" textLength="12.2" clip-path="url(#breeze-release-management-generate-issue-content-providers-line-21)">│</text><text class="breeze-release-management-generate-issue-content-providers-r1" x="378.2" y="532.4" textLength="1061.4" clip-path="url(#breeze-release-management-generate-issue-content-providers-line-21)">https://github.com/settings/tokens/new?description=Read%20sssues&amp;scopes=repo: [...]
+</text><text class="breeze-release-management-generate-issue-content-providers-r5" x="0" y="556.8" textLength="12.2" clip-path="url(#breeze-release-management-generate-issue-content-providers-line-22)">│</text><text class="breeze-release-management-generate-issue-content-providers-r6" x="378.2" y="556.8" textLength="1061.4" clip-path="url(#breeze-release-management-generate-issue-content-providers-line-22)">(TEXT)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#1 [...]
+</text><text class="breeze-release-management-generate-issue-content-providers-r5" x="0" y="581.2" textLength="12.2" clip-path="url(#breeze-release-management-generate-issue-content-providers-line-23)">│</text><text class="breeze-release-management-generate-issue-content-providers-r4" x="24.4" y="581.2" textLength="292.8" clip-path="url(#breeze-release-management-generate-issue-content-providers-line-23)">--only-available-in-dist</text><text class="breeze-release-management-generate-issu [...]
+</text><text class="breeze-release-management-generate-issue-content-providers-r5" x="0" y="605.6" textLength="12.2" clip-path="url(#breeze-release-management-generate-issue-content-providers-line-24)">│</text><text class="breeze-release-management-generate-issue-content-providers-r4" x="24.4" y="605.6" textLength="305" clip-path="url(#breeze-release-management-generate-issue-content-providers-line-24)">--no-include-browser-link</text><text class="breeze-release-management-generate-issue [...]
+</text><text class="breeze-release-management-generate-issue-content-providers-r5" x="0" y="630" textLength="1464" clip-path="url(#breeze-release-management-generate-issue-content-providers-line-25)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-release-management-generate-issue-content-providers-r1" x="1464" y="630" textLength="12.2" clip-path="url(#breeze-release-management-generate-iss [...]
+</text><text class="breeze-release-management-generate-issue-content-providers-r5" x="0" y="654.4" textLength="24.4" clip-path="url(#breeze-release-management-generate-issue-content-providers-line-26)">╭─</text><text class="breeze-release-management-generate-issue-content-providers-r5" x="24.4" y="654.4" textLength="195.2" clip-path="url(#breeze-release-management-generate-issue-content-providers-line-26)">&#160;Common&#160;options&#160;</text><text class="breeze-release-management-gener [...]
+</text><text class="breeze-release-management-generate-issue-content-providers-r5" x="0" y="678.8" textLength="12.2" clip-path="url(#breeze-release-management-generate-issue-content-providers-line-27)">│</text><text class="breeze-release-management-generate-issue-content-providers-r4" x="24.4" y="678.8" textLength="73.2" clip-path="url(#breeze-release-management-generate-issue-content-providers-line-27)">--help</text><text class="breeze-release-management-generate-issue-content-providers [...]
+</text><text class="breeze-release-management-generate-issue-content-providers-r5" x="0" y="703.2" textLength="1464" clip-path="url(#breeze-release-management-generate-issue-content-providers-line-28)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-release-management-generate-issue-content-providers-r1" x="1464" y="703.2" textLength="12.2" clip-path="url(#breeze-release-management-generate [...]
 </text>
     </g>
     </g>
diff --git a/dev/breeze/doc/images/output_release-management_generate-issue-content-providers.txt b/dev/breeze/doc/images/output_release-management_generate-issue-content-providers.txt
index deb7377e876..fb2a208f018 100644
--- a/dev/breeze/doc/images/output_release-management_generate-issue-content-providers.txt
+++ b/dev/breeze/doc/images/output_release-management_generate-issue-content-providers.txt
@@ -1 +1 @@
-8539b9fa5e6f545a226180fb2b0479bb
+78872e943d19d4e94ddd2ca8c6e7f816
diff --git a/dev/breeze/doc/images/output_release-management_generate-providers-metadata.svg b/dev/breeze/doc/images/output_release-management_generate-providers-metadata.svg
index 16ab3272803..57264d9bfe9 100644
--- a/dev/breeze/doc/images/output_release-management_generate-providers-metadata.svg
+++ b/dev/breeze/doc/images/output_release-management_generate-providers-metadata.svg
@@ -1,4 +1,4 @@
-<svg class="rich-terminal" viewBox="0 0 1482 391.59999999999997" xmlns="http://www.w3.org/2000/svg">
+<svg class="rich-terminal" viewBox="0 0 1482 879.5999999999999" xmlns="http://www.w3.org/2000/svg">
     <!-- Generated with Rich https://www.textualize.io -->
     <style>
 
@@ -43,7 +43,7 @@
 
     <defs>
     <clipPath id="breeze-release-management-generate-providers-metadata-clip-terminal">
-      <rect x="0" y="0" width="1463.0" height="340.59999999999997" />
+      <rect x="0" y="0" width="1463.0" height="828.5999999999999" />
     </clipPath>
     <clipPath id="breeze-release-management-generate-providers-metadata-line-0">
     <rect x="0" y="1.5" width="1464" height="24.65"/>
@@ -84,9 +84,69 @@
 <clipPath id="breeze-release-management-generate-providers-metadata-line-12">
     <rect x="0" y="294.3" width="1464" height="24.65"/>
             </clipPath>
+<clipPath id="breeze-release-management-generate-providers-metadata-line-13">
+    <rect x="0" y="318.7" width="1464" height="24.65"/>
+            </clipPath>
+<clipPath id="breeze-release-management-generate-providers-metadata-line-14">
+    <rect x="0" y="343.1" width="1464" height="24.65"/>
+            </clipPath>
+<clipPath id="breeze-release-management-generate-providers-metadata-line-15">
+    <rect x="0" y="367.5" width="1464" height="24.65"/>
+            </clipPath>
+<clipPath id="breeze-release-management-generate-providers-metadata-line-16">
+    <rect x="0" y="391.9" width="1464" height="24.65"/>
+            </clipPath>
+<clipPath id="breeze-release-management-generate-providers-metadata-line-17">
+    <rect x="0" y="416.3" width="1464" height="24.65"/>
+            </clipPath>
+<clipPath id="breeze-release-management-generate-providers-metadata-line-18">
+    <rect x="0" y="440.7" width="1464" height="24.65"/>
+            </clipPath>
+<clipPath id="breeze-release-management-generate-providers-metadata-line-19">
+    <rect x="0" y="465.1" width="1464" height="24.65"/>
+            </clipPath>
+<clipPath id="breeze-release-management-generate-providers-metadata-line-20">
+    <rect x="0" y="489.5" width="1464" height="24.65"/>
+            </clipPath>
+<clipPath id="breeze-release-management-generate-providers-metadata-line-21">
+    <rect x="0" y="513.9" width="1464" height="24.65"/>
+            </clipPath>
+<clipPath id="breeze-release-management-generate-providers-metadata-line-22">
+    <rect x="0" y="538.3" width="1464" height="24.65"/>
+            </clipPath>
+<clipPath id="breeze-release-management-generate-providers-metadata-line-23">
+    <rect x="0" y="562.7" width="1464" height="24.65"/>
+            </clipPath>
+<clipPath id="breeze-release-management-generate-providers-metadata-line-24">
+    <rect x="0" y="587.1" width="1464" height="24.65"/>
+            </clipPath>
+<clipPath id="breeze-release-management-generate-providers-metadata-line-25">
+    <rect x="0" y="611.5" width="1464" height="24.65"/>
+            </clipPath>
+<clipPath id="breeze-release-management-generate-providers-metadata-line-26">
+    <rect x="0" y="635.9" width="1464" height="24.65"/>
+            </clipPath>
+<clipPath id="breeze-release-management-generate-providers-metadata-line-27">
+    <rect x="0" y="660.3" width="1464" height="24.65"/>
+            </clipPath>
+<clipPath id="breeze-release-management-generate-providers-metadata-line-28">
+    <rect x="0" y="684.7" width="1464" height="24.65"/>
+            </clipPath>
+<clipPath id="breeze-release-management-generate-providers-metadata-line-29">
+    <rect x="0" y="709.1" width="1464" height="24.65"/>
+            </clipPath>
+<clipPath id="breeze-release-management-generate-providers-metadata-line-30">
+    <rect x="0" y="733.5" width="1464" height="24.65"/>
+            </clipPath>
+<clipPath id="breeze-release-management-generate-providers-metadata-line-31">
+    <rect x="0" y="757.9" width="1464" height="24.65"/>
+            </clipPath>
+<clipPath id="breeze-release-management-generate-providers-metadata-line-32">
+    <rect x="0" y="782.3" width="1464" height="24.65"/>
+            </clipPath>
     </defs>
 
-    <rect fill="#292929" stroke="rgba(255,255,255,0.35)" stroke-width="1" x="1" y="1" width="1480" height="389.6" rx="8"/><text class="breeze-release-management-generate-providers-metadata-title" fill="#c5c8c6" text-anchor="middle" x="740" y="27">Command:&#160;release-management&#160;generate-providers-metadata</text>
+    <rect fill="#292929" stroke="rgba(255,255,255,0.35)" stroke-width="1" x="1" y="1" width="1480" height="877.6" rx="8"/><text class="breeze-release-management-generate-providers-metadata-title" fill="#c5c8c6" text-anchor="middle" x="740" y="27">Command:&#160;release-management&#160;generate-providers-metadata</text>
             <g transform="translate(26,22)">
             <circle cx="0" cy="0" r="7" fill="#ff5f57"/>
             <circle cx="22" cy="0" r="7" fill="#febc2e"/>
@@ -102,14 +162,34 @@
 </text><text class="breeze-release-management-generate-providers-metadata-r1" x="12.2" y="93.2" textLength="402.6" clip-path="url(#breeze-release-management-generate-providers-metadata-line-3)">Generates&#160;metadata&#160;for&#160;providers.</text><text class="breeze-release-management-generate-providers-metadata-r1" x="1464" y="93.2" textLength="12.2" clip-path="url(#breeze-release-management-generate-providers-metadata-line-3)">
 </text><text class="breeze-release-management-generate-providers-metadata-r1" x="1464" y="117.6" textLength="12.2" clip-path="url(#breeze-release-management-generate-providers-metadata-line-4)">
 </text><text class="breeze-release-management-generate-providers-metadata-r5" x="0" y="142" textLength="24.4" clip-path="url(#breeze-release-management-generate-providers-metadata-line-5)">╭─</text><text class="breeze-release-management-generate-providers-metadata-r5" x="24.4" y="142" textLength="427" clip-path="url(#breeze-release-management-generate-providers-metadata-line-5)">&#160;Generate&#160;providers&#160;metadata&#160;flags&#160;</text><text class="breeze-release-management-gene [...]
-</text><text class="breeze-release-management-generate-providers-metadata-r5" x="0" y="166.4" textLength="12.2" clip-path="url(#breeze-release-management-generate-providers-metadata-line-6)">│</text><text class="breeze-release-management-generate-providers-metadata-r4" x="24.4" y="166.4" textLength="256.2" clip-path="url(#breeze-release-management-generate-providers-metadata-line-6)">--refresh-constraints</text><text class="breeze-release-management-generate-providers-metadata-r1" x="329 [...]
-</text><text class="breeze-release-management-generate-providers-metadata-r5" x="0" y="190.8" textLength="12.2" clip-path="url(#breeze-release-management-generate-providers-metadata-line-7)">│</text><text class="breeze-release-management-generate-providers-metadata-r4" x="24.4" y="190.8" textLength="170.8" clip-path="url(#breeze-release-management-generate-providers-metadata-line-7)">--github-token</text><text class="breeze-release-management-generate-providers-metadata-r1" x="329.4" y=" [...]
+</text><text class="breeze-release-management-generate-providers-metadata-r5" x="0" y="166.4" textLength="12.2" clip-path="url(#breeze-release-management-generate-providers-metadata-line-6)">│</text><text class="breeze-release-management-generate-providers-metadata-r4" x="24.4" y="166.4" textLength="512.4" clip-path="url(#breeze-release-management-generate-providers-metadata-line-6)">--refresh-constraints-and-airflow-releases</text><text class="breeze-release-management-generate-provider [...]
+</text><text class="breeze-release-management-generate-providers-metadata-r5" x="0" y="190.8" textLength="12.2" clip-path="url(#breeze-release-management-generate-providers-metadata-line-7)">│</text><text class="breeze-release-management-generate-providers-metadata-r4" x="24.4" y="190.8" textLength="170.8" clip-path="url(#breeze-release-management-generate-providers-metadata-line-7)">--github-token</text><text class="breeze-release-management-generate-providers-metadata-r1" x="585.6" y=" [...]
 </text><text class="breeze-release-management-generate-providers-metadata-r5" x="0" y="215.2" textLength="1464" clip-path="url(#breeze-release-management-generate-providers-metadata-line-8)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-release-management-generate-providers-metadata-r1" x="1464" y="215.2" textLength="12.2" clip-path="url(#breeze-release-management-generate-providers-metad [...]
-</text><text class="breeze-release-management-generate-providers-metadata-r5" x="0" y="239.6" textLength="24.4" clip-path="url(#breeze-release-management-generate-providers-metadata-line-9)">╭─</text><text class="breeze-release-management-generate-providers-metadata-r5" x="24.4" y="239.6" textLength="195.2" clip-path="url(#breeze-release-management-generate-providers-metadata-line-9)">&#160;Common&#160;options&#160;</text><text class="breeze-release-management-generate-providers-metadata [...]
-</text><text class="breeze-release-management-generate-providers-metadata-r5" x="0" y="264" textLength="12.2" clip-path="url(#breeze-release-management-generate-providers-metadata-line-10)">│</text><text class="breeze-release-management-generate-providers-metadata-r4" x="24.4" y="264" textLength="109.8" clip-path="url(#breeze-release-management-generate-providers-metadata-line-10)">--dry-run</text><text class="breeze-release-management-generate-providers-metadata-r7" x="158.6" y="264" te [...]
-</text><text class="breeze-release-management-generate-providers-metadata-r5" x="0" y="288.4" textLength="12.2" clip-path="url(#breeze-release-management-generate-providers-metadata-line-11)">│</text><text class="breeze-release-management-generate-providers-metadata-r4" x="24.4" y="288.4" textLength="109.8" clip-path="url(#breeze-release-management-generate-providers-metadata-line-11)">--verbose</text><text class="breeze-release-management-generate-providers-metadata-r7" x="158.6" y="288 [...]
-</text><text class="breeze-release-management-generate-providers-metadata-r5" x="0" y="312.8" textLength="12.2" clip-path="url(#breeze-release-management-generate-providers-metadata-line-12)">│</text><text class="breeze-release-management-generate-providers-metadata-r4" x="24.4" y="312.8" textLength="73.2" clip-path="url(#breeze-release-management-generate-providers-metadata-line-12)">--help</text><text class="breeze-release-management-generate-providers-metadata-r7" x="158.6" y="312.8"  [...]
-</text><text class="breeze-release-management-generate-providers-metadata-r5" x="0" y="337.2" textLength="1464" clip-path="url(#breeze-release-management-generate-providers-metadata-line-13)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-release-management-generate-providers-metadata-r1" x="1464" y="337.2" textLength="12.2" clip-path="url(#breeze-release-management-generate-providers-meta [...]
+</text><text class="breeze-release-management-generate-providers-metadata-r5" x="0" y="239.6" textLength="24.4" clip-path="url(#breeze-release-management-generate-providers-metadata-line-9)">╭─</text><text class="breeze-release-management-generate-providers-metadata-r5" x="24.4" y="239.6" textLength="183" clip-path="url(#breeze-release-management-generate-providers-metadata-line-9)">&#160;Debug&#160;options&#160;</text><text class="breeze-release-management-generate-providers-metadata-r5 [...]
+</text><text class="breeze-release-management-generate-providers-metadata-r5" x="0" y="264" textLength="12.2" clip-path="url(#breeze-release-management-generate-providers-metadata-line-10)">│</text><text class="breeze-release-management-generate-providers-metadata-r4" x="24.4" y="264" textLength="158.6" clip-path="url(#breeze-release-management-generate-providers-metadata-line-10)">--provider-id</text><text class="breeze-release-management-generate-providers-metadata-r1" x="292.8" y="264 [...]
+</text><text class="breeze-release-management-generate-providers-metadata-r5" x="0" y="288.4" textLength="12.2" clip-path="url(#breeze-release-management-generate-providers-metadata-line-11)">│</text><text class="breeze-release-management-generate-providers-metadata-r1" x="292.8" y="288.4" textLength="1146.8" clip-path="url(#breeze-release-management-generate-providers-metadata-line-11)">generated.&#160;This&#160;is&#160;debug-only&#160;option.&#160;When&#160;this&#160;option&#160;is&#16 [...]
+</text><text class="breeze-release-management-generate-providers-metadata-r5" x="0" y="312.8" textLength="12.2" clip-path="url(#breeze-release-management-generate-providers-metadata-line-12)">│</text><text class="breeze-release-management-generate-providers-metadata-r1" x="292.8" y="312.8" textLength="1146.8" clip-path="url(#breeze-release-management-generate-providers-metadata-line-12)">the&#160;distribution&#160;will&#160;not&#160;be&#160;written&#160;to&#160;the&#160;file,&#160;but&#1 [...]
+</text><text class="breeze-release-management-generate-providers-metadata-r5" x="0" y="337.2" textLength="12.2" clip-path="url(#breeze-release-management-generate-providers-metadata-line-13)">│</text><text class="breeze-release-management-generate-providers-metadata-r6" x="292.8" y="337.2" textLength="1146.8" clip-path="url(#breeze-release-management-generate-providers-metadata-line-13)">(airbyte&#160;|&#160;alibaba&#160;|&#160;amazon&#160;|&#160;apache.beam&#160;|&#160;apache.cassandra& [...]
+</text><text class="breeze-release-management-generate-providers-metadata-r5" x="0" y="361.6" textLength="12.2" clip-path="url(#breeze-release-management-generate-providers-metadata-line-14)">│</text><text class="breeze-release-management-generate-providers-metadata-r6" x="292.8" y="361.6" textLength="1146.8" clip-path="url(#breeze-release-management-generate-providers-metadata-line-14)">apache.flink&#160;|&#160;apache.hdfs&#160;|&#160;apache.hive&#160;|&#160;apache.iceberg&#160;|&#160;a [...]
+</text><text class="breeze-release-management-generate-providers-metadata-r5" x="0" y="386" textLength="12.2" clip-path="url(#breeze-release-management-generate-providers-metadata-line-15)">│</text><text class="breeze-release-management-generate-providers-metadata-r6" x="292.8" y="386" textLength="1146.8" clip-path="url(#breeze-release-management-generate-providers-metadata-line-15)">apache.kylin&#160;|&#160;apache.livy&#160;|&#160;apache.pig&#160;|&#160;apache.pinot&#160;|&#160;apache.s [...]
+</text><text class="breeze-release-management-generate-providers-metadata-r5" x="0" y="410.4" textLength="12.2" clip-path="url(#breeze-release-management-generate-providers-metadata-line-16)">│</text><text class="breeze-release-management-generate-providers-metadata-r6" x="292.8" y="410.4" textLength="1146.8" clip-path="url(#breeze-release-management-generate-providers-metadata-line-16)">asana&#160;|&#160;atlassian.jira&#160;|&#160;celery&#160;|&#160;cloudant&#160;|&#160;cncf.kubernetes& [...]
+</text><text class="breeze-release-management-generate-providers-metadata-r5" x="0" y="434.8" textLength="12.2" clip-path="url(#breeze-release-management-generate-providers-metadata-line-17)">│</text><text class="breeze-release-management-generate-providers-metadata-r6" x="292.8" y="434.8" textLength="1146.8" clip-path="url(#breeze-release-management-generate-providers-metadata-line-17)">common.io&#160;|&#160;common.messaging&#160;|&#160;common.sql&#160;|&#160;databricks&#160;|&#160;data [...]
+</text><text class="breeze-release-management-generate-providers-metadata-r5" x="0" y="459.2" textLength="12.2" clip-path="url(#breeze-release-management-generate-providers-metadata-line-18)">│</text><text class="breeze-release-management-generate-providers-metadata-r6" x="292.8" y="459.2" textLength="1146.8" clip-path="url(#breeze-release-management-generate-providers-metadata-line-18)">discord&#160;|&#160;docker&#160;|&#160;edge3&#160;|&#160;elasticsearch&#160;|&#160;exasol&#160;|&#160 [...]
+</text><text class="breeze-release-management-generate-providers-metadata-r5" x="0" y="483.6" textLength="12.2" clip-path="url(#breeze-release-management-generate-providers-metadata-line-19)">│</text><text class="breeze-release-management-generate-providers-metadata-r6" x="292.8" y="483.6" textLength="1146.8" clip-path="url(#breeze-release-management-generate-providers-metadata-line-19)">google&#160;|&#160;grpc&#160;|&#160;hashicorp&#160;|&#160;http&#160;|&#160;imap&#160;|&#160;influxdb& [...]
+</text><text class="breeze-release-management-generate-providers-metadata-r5" x="0" y="508" textLength="12.2" clip-path="url(#breeze-release-management-generate-providers-metadata-line-20)">│</text><text class="breeze-release-management-generate-providers-metadata-r6" x="292.8" y="508" textLength="1146.8" clip-path="url(#breeze-release-management-generate-providers-metadata-line-20)">microsoft.mssql&#160;|&#160;microsoft.psrp&#160;|&#160;microsoft.winrm&#160;|&#160;mongo&#160;|&#160;mysq [...]
+</text><text class="breeze-release-management-generate-providers-metadata-r5" x="0" y="532.4" textLength="12.2" clip-path="url(#breeze-release-management-generate-providers-metadata-line-21)">│</text><text class="breeze-release-management-generate-providers-metadata-r6" x="292.8" y="532.4" textLength="1146.8" clip-path="url(#breeze-release-management-generate-providers-metadata-line-21)">openfaas&#160;|&#160;openlineage&#160;|&#160;opensearch&#160;|&#160;opsgenie&#160;|&#160;oracle&#160; [...]
+</text><text class="breeze-release-management-generate-providers-metadata-r5" x="0" y="556.8" textLength="12.2" clip-path="url(#breeze-release-management-generate-providers-metadata-line-22)">│</text><text class="breeze-release-management-generate-providers-metadata-r6" x="292.8" y="556.8" textLength="1146.8" clip-path="url(#breeze-release-management-generate-providers-metadata-line-22)">pinecone&#160;|&#160;postgres&#160;|&#160;presto&#160;|&#160;qdrant&#160;|&#160;redis&#160;|&#160;sal [...]
+</text><text class="breeze-release-management-generate-providers-metadata-r5" x="0" y="581.2" textLength="12.2" clip-path="url(#breeze-release-management-generate-providers-metadata-line-23)">│</text><text class="breeze-release-management-generate-providers-metadata-r6" x="292.8" y="581.2" textLength="1146.8" clip-path="url(#breeze-release-management-generate-providers-metadata-line-23)">singularity&#160;|&#160;slack&#160;|&#160;smtp&#160;|&#160;snowflake&#160;|&#160;sqlite&#160;|&#160;s [...]
+</text><text class="breeze-release-management-generate-providers-metadata-r5" x="0" y="605.6" textLength="12.2" clip-path="url(#breeze-release-management-generate-providers-metadata-line-24)">│</text><text class="breeze-release-management-generate-providers-metadata-r6" x="292.8" y="605.6" textLength="1146.8" clip-path="url(#breeze-release-management-generate-providers-metadata-line-24)">teradata&#160;|&#160;trino&#160;|&#160;vertica&#160;|&#160;weaviate&#160;|&#160;yandex&#160;|&#160;yd [...]
+</text><text class="breeze-release-management-generate-providers-metadata-r5" x="0" y="630" textLength="12.2" clip-path="url(#breeze-release-management-generate-providers-metadata-line-25)">│</text><text class="breeze-release-management-generate-providers-metadata-r4" x="24.4" y="630" textLength="219.6" clip-path="url(#breeze-release-management-generate-providers-metadata-line-25)">--provider-version</text><text class="breeze-release-management-generate-providers-metadata-r1" x="292.8" y [...]
+</text><text class="breeze-release-management-generate-providers-metadata-r5" x="0" y="654.4" textLength="12.2" clip-path="url(#breeze-release-management-generate-providers-metadata-line-26)">│</text><text class="breeze-release-management-generate-providers-metadata-r1" x="292.8" y="654.4" textLength="1146.8" clip-path="url(#breeze-release-management-generate-providers-metadata-line-26)">running&#160;metadata&#160;generation&#160;to&#160;only&#160;this&#160;version&#160;of&#160;the&#160; [...]
+</text><text class="breeze-release-management-generate-providers-metadata-r5" x="0" y="678.8" textLength="12.2" clip-path="url(#breeze-release-management-generate-providers-metadata-line-27)">│</text><text class="breeze-release-management-generate-providers-metadata-r6" x="292.8" y="678.8" textLength="1146.8" clip-path="url(#breeze-release-management-generate-providers-metadata-line-27)">(TEXT)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160 [...]
+</text><text class="breeze-release-management-generate-providers-metadata-r5" x="0" y="703.2" textLength="1464" clip-path="url(#breeze-release-management-generate-providers-metadata-line-28)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-release-management-generate-providers-metadata-r1" x="1464" y="703.2" textLength="12.2" clip-path="url(#breeze-release-management-generate-providers-meta [...]
+</text><text class="breeze-release-management-generate-providers-metadata-r5" x="0" y="727.6" textLength="24.4" clip-path="url(#breeze-release-management-generate-providers-metadata-line-29)">╭─</text><text class="breeze-release-management-generate-providers-metadata-r5" x="24.4" y="727.6" textLength="195.2" clip-path="url(#breeze-release-management-generate-providers-metadata-line-29)">&#160;Common&#160;options&#160;</text><text class="breeze-release-management-generate-providers-metada [...]
+</text><text class="breeze-release-management-generate-providers-metadata-r5" x="0" y="752" textLength="12.2" clip-path="url(#breeze-release-management-generate-providers-metadata-line-30)">│</text><text class="breeze-release-management-generate-providers-metadata-r4" x="24.4" y="752" textLength="109.8" clip-path="url(#breeze-release-management-generate-providers-metadata-line-30)">--dry-run</text><text class="breeze-release-management-generate-providers-metadata-r7" x="158.6" y="752" te [...]
+</text><text class="breeze-release-management-generate-providers-metadata-r5" x="0" y="776.4" textLength="12.2" clip-path="url(#breeze-release-management-generate-providers-metadata-line-31)">│</text><text class="breeze-release-management-generate-providers-metadata-r4" x="24.4" y="776.4" textLength="109.8" clip-path="url(#breeze-release-management-generate-providers-metadata-line-31)">--verbose</text><text class="breeze-release-management-generate-providers-metadata-r7" x="158.6" y="776 [...]
+</text><text class="breeze-release-management-generate-providers-metadata-r5" x="0" y="800.8" textLength="12.2" clip-path="url(#breeze-release-management-generate-providers-metadata-line-32)">│</text><text class="breeze-release-management-generate-providers-metadata-r4" x="24.4" y="800.8" textLength="73.2" clip-path="url(#breeze-release-management-generate-providers-metadata-line-32)">--help</text><text class="breeze-release-management-generate-providers-metadata-r7" x="158.6" y="800.8"  [...]
+</text><text class="breeze-release-management-generate-providers-metadata-r5" x="0" y="825.2" textLength="1464" clip-path="url(#breeze-release-management-generate-providers-metadata-line-33)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-release-management-generate-providers-metadata-r1" x="1464" y="825.2" textLength="12.2" clip-path="url(#breeze-release-management-generate-providers-meta [...]
 </text>
     </g>
     </g>
diff --git a/dev/breeze/doc/images/output_release-management_generate-providers-metadata.txt b/dev/breeze/doc/images/output_release-management_generate-providers-metadata.txt
index 2df8e2091c4..fc79a46aa89 100644
--- a/dev/breeze/doc/images/output_release-management_generate-providers-metadata.txt
+++ b/dev/breeze/doc/images/output_release-management_generate-providers-metadata.txt
@@ -1 +1 @@
-7ebf7f83b9b33d558d286ff7cf63b65f
+973f6cef60629b90788dabe4300a1c21
diff --git a/dev/breeze/doc/images/output_release-management_prepare-provider-documentation.svg b/dev/breeze/doc/images/output_release-management_prepare-provider-documentation.svg
index 3f64f75e93c..dd912933482 100644
--- a/dev/breeze/doc/images/output_release-management_prepare-provider-documentation.svg
+++ b/dev/breeze/doc/images/output_release-management_prepare-provider-documentation.svg
@@ -1,4 +1,4 @@
-<svg class="rich-terminal" viewBox="0 0 1482 1099.2" xmlns="http://www.w3.org/2000/svg">
+<svg class="rich-terminal" viewBox="0 0 1482 1074.8" xmlns="http://www.w3.org/2000/svg">
     <!-- Generated with Rich https://www.textualize.io -->
     <style>
 
@@ -43,7 +43,7 @@
 
     <defs>
     <clipPath id="breeze-release-management-prepare-provider-documentation-clip-terminal">
-      <rect x="0" y="0" width="1463.0" height="1048.2" />
+      <rect x="0" y="0" width="1463.0" height="1023.8" />
     </clipPath>
     <clipPath id="breeze-release-management-prepare-provider-documentation-line-0">
     <rect x="0" y="1.5" width="1464" height="24.65"/>
@@ -168,12 +168,9 @@
 <clipPath id="breeze-release-management-prepare-provider-documentation-line-40">
     <rect x="0" y="977.5" width="1464" height="24.65"/>
             </clipPath>
-<clipPath id="breeze-release-management-prepare-provider-documentation-line-41">
-    <rect x="0" y="1001.9" width="1464" height="24.65"/>
-            </clipPath>
     </defs>
 
-    <rect fill="#292929" stroke="rgba(255,255,255,0.35)" stroke-width="1" x="1" y="1" width="1480" height="1097.2" rx="8"/><text class="breeze-release-management-prepare-provider-documentation-title" fill="#c5c8c6" text-anchor="middle" x="740" y="27">Command:&#160;release-management&#160;prepare-provider-documentation</text>
+    <rect fill="#292929" stroke="rgba(255,255,255,0.35)" stroke-width="1" x="1" y="1" width="1480" height="1072.8" rx="8"/><text class="breeze-release-management-prepare-provider-documentation-title" fill="#c5c8c6" text-anchor="middle" x="740" y="27">Command:&#160;release-management&#160;prepare-provider-documentation</text>
             <g transform="translate(26,22)">
             <circle cx="0" cy="0" r="7" fill="#ff5f57"/>
             <circle cx="22" cy="0" r="7" fill="#febc2e"/>
@@ -216,16 +213,15 @@
 </text><text class="breeze-release-management-prepare-provider-documentation-r5" x="0" y="752" textLength="12.2" clip-path="url(#breeze-release-management-prepare-provider-documentation-line-30)">│</text><text class="breeze-release-management-prepare-provider-documentation-r4" x="24.4" y="752" textLength="195.2" clip-path="url(#breeze-release-management-prepare-provider-documentation-line-30)">--skip-git-fetch</text><text class="breeze-release-management-prepare-provider-documentation-r1 [...]
 </text><text class="breeze-release-management-prepare-provider-documentation-r5" x="0" y="776.4" textLength="12.2" clip-path="url(#breeze-release-management-prepare-provider-documentation-line-31)">│</text><text class="breeze-release-management-prepare-provider-documentation-r1" x="451.4" y="776.4" textLength="988.2" clip-path="url(#breeze-release-management-prepare-provider-documentation-line-31)">default,&#160;the&#160;remote&#160;is&#160;recreated&#160;and&#160;fetched&#160;to&#160;ma [...]
 </text><text class="breeze-release-management-prepare-provider-documentation-r5" x="0" y="800.8" textLength="12.2" clip-path="url(#breeze-release-management-prepare-provider-documentation-line-32)">│</text><text class="breeze-release-management-prepare-provider-documentation-r1" x="451.4" y="800.8" textLength="988.2" clip-path="url(#breeze-release-management-prepare-provider-documentation-line-32)">and&#160;that&#160;recent&#160;commits&#160;are&#160;not&#160;missing&#160;&#160;&#160;&#1 [...]
-</text><text class="breeze-release-management-prepare-provider-documentation-r5" x="0" y="825.2" textLength="12.2" clip-path="url(#breeze-release-management-prepare-provider-documentation-line-33)">│</text><text class="breeze-release-management-prepare-provider-documentation-r4" x="24.4" y="825.2" textLength="195.2" clip-path="url(#breeze-release-management-prepare-provider-documentation-line-33)">--skip-changelog</text><text class="breeze-release-management-prepare-provider-documentatio [...]
-</text><text class="breeze-release-management-prepare-provider-documentation-r5" x="0" y="849.6" textLength="12.2" clip-path="url(#breeze-release-management-prepare-provider-documentation-line-34)">│</text><text class="breeze-release-management-prepare-provider-documentation-r1" x="451.4" y="849.6" textLength="988.2" clip-path="url(#breeze-release-management-prepare-provider-documentation-line-34)">only.&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;& [...]
-</text><text class="breeze-release-management-prepare-provider-documentation-r5" x="0" y="874" textLength="12.2" clip-path="url(#breeze-release-management-prepare-provider-documentation-line-35)">│</text><text class="breeze-release-management-prepare-provider-documentation-r4" x="24.4" y="874" textLength="158.6" clip-path="url(#breeze-release-management-prepare-provider-documentation-line-35)">--skip-readme</text><text class="breeze-release-management-prepare-provider-documentation-r1" x [...]
-</text><text class="breeze-release-management-prepare-provider-documentation-r5" x="0" y="898.4" textLength="1464" clip-path="url(#breeze-release-management-prepare-provider-documentation-line-36)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-release-management-prepare-provider-documentation-r1" x="1464" y="898.4" textLength="12.2" clip-path="url(#breeze-release-management-prepare-provid [...]
-</text><text class="breeze-release-management-prepare-provider-documentation-r5" x="0" y="922.8" textLength="24.4" clip-path="url(#breeze-release-management-prepare-provider-documentation-line-37)">╭─</text><text class="breeze-release-management-prepare-provider-documentation-r5" x="24.4" y="922.8" textLength="195.2" clip-path="url(#breeze-release-management-prepare-provider-documentation-line-37)">&#160;Common&#160;options&#160;</text><text class="breeze-release-management-prepare-provi [...]
-</text><text class="breeze-release-management-prepare-provider-documentation-r5" x="0" y="947.2" textLength="12.2" clip-path="url(#breeze-release-management-prepare-provider-documentation-line-38)">│</text><text class="breeze-release-management-prepare-provider-documentation-r4" x="24.4" y="947.2" textLength="97.6" clip-path="url(#breeze-release-management-prepare-provider-documentation-line-38)">--answer</text><text class="breeze-release-management-prepare-provider-documentation-r7" x=" [...]
-</text><text class="breeze-release-management-prepare-provider-documentation-r5" x="0" y="971.6" textLength="12.2" clip-path="url(#breeze-release-management-prepare-provider-documentation-line-39)">│</text><text class="breeze-release-management-prepare-provider-documentation-r4" x="24.4" y="971.6" textLength="109.8" clip-path="url(#breeze-release-management-prepare-provider-documentation-line-39)">--dry-run</text><text class="breeze-release-management-prepare-provider-documentation-r7" x [...]
-</text><text class="breeze-release-management-prepare-provider-documentation-r5" x="0" y="996" textLength="12.2" clip-path="url(#breeze-release-management-prepare-provider-documentation-line-40)">│</text><text class="breeze-release-management-prepare-provider-documentation-r4" x="24.4" y="996" textLength="109.8" clip-path="url(#breeze-release-management-prepare-provider-documentation-line-40)">--verbose</text><text class="breeze-release-management-prepare-provider-documentation-r7" x="15 [...]
-</text><text class="breeze-release-management-prepare-provider-documentation-r5" x="0" y="1020.4" textLength="12.2" clip-path="url(#breeze-release-management-prepare-provider-documentation-line-41)">│</text><text class="breeze-release-management-prepare-provider-documentation-r4" x="24.4" y="1020.4" textLength="73.2" clip-path="url(#breeze-release-management-prepare-provider-documentation-line-41)">--help</text><text class="breeze-release-management-prepare-provider-documentation-r7" x=" [...]
-</text><text class="breeze-release-management-prepare-provider-documentation-r5" x="0" y="1044.8" textLength="1464" clip-path="url(#breeze-release-management-prepare-provider-documentation-line-42)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-release-management-prepare-provider-documentation-r1" x="1464" y="1044.8" textLength="12.2" clip-path="url(#breeze-release-management-prepare-prov [...]
+</text><text class="breeze-release-management-prepare-provider-documentation-r5" x="0" y="825.2" textLength="12.2" clip-path="url(#breeze-release-management-prepare-provider-documentation-line-33)">│</text><text class="breeze-release-management-prepare-provider-documentation-r4" x="24.4" y="825.2" textLength="195.2" clip-path="url(#breeze-release-management-prepare-provider-documentation-line-33)">--skip-changelog</text><text class="breeze-release-management-prepare-provider-documentatio [...]
+</text><text class="breeze-release-management-prepare-provider-documentation-r5" x="0" y="849.6" textLength="12.2" clip-path="url(#breeze-release-management-prepare-provider-documentation-line-34)">│</text><text class="breeze-release-management-prepare-provider-documentation-r4" x="24.4" y="849.6" textLength="158.6" clip-path="url(#breeze-release-management-prepare-provider-documentation-line-34)">--skip-readme</text><text class="breeze-release-management-prepare-provider-documentation-r [...]
+</text><text class="breeze-release-management-prepare-provider-documentation-r5" x="0" y="874" textLength="1464" clip-path="url(#breeze-release-management-prepare-provider-documentation-line-35)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-release-management-prepare-provider-documentation-r1" x="1464" y="874" textLength="12.2" clip-path="url(#breeze-release-management-prepare-provider-d [...]
+</text><text class="breeze-release-management-prepare-provider-documentation-r5" x="0" y="898.4" textLength="24.4" clip-path="url(#breeze-release-management-prepare-provider-documentation-line-36)">╭─</text><text class="breeze-release-management-prepare-provider-documentation-r5" x="24.4" y="898.4" textLength="195.2" clip-path="url(#breeze-release-management-prepare-provider-documentation-line-36)">&#160;Common&#160;options&#160;</text><text class="breeze-release-management-prepare-provi [...]
+</text><text class="breeze-release-management-prepare-provider-documentation-r5" x="0" y="922.8" textLength="12.2" clip-path="url(#breeze-release-management-prepare-provider-documentation-line-37)">│</text><text class="breeze-release-management-prepare-provider-documentation-r4" x="24.4" y="922.8" textLength="97.6" clip-path="url(#breeze-release-management-prepare-provider-documentation-line-37)">--answer</text><text class="breeze-release-management-prepare-provider-documentation-r7" x=" [...]
+</text><text class="breeze-release-management-prepare-provider-documentation-r5" x="0" y="947.2" textLength="12.2" clip-path="url(#breeze-release-management-prepare-provider-documentation-line-38)">│</text><text class="breeze-release-management-prepare-provider-documentation-r4" x="24.4" y="947.2" textLength="109.8" clip-path="url(#breeze-release-management-prepare-provider-documentation-line-38)">--dry-run</text><text class="breeze-release-management-prepare-provider-documentation-r7" x [...]
+</text><text class="breeze-release-management-prepare-provider-documentation-r5" x="0" y="971.6" textLength="12.2" clip-path="url(#breeze-release-management-prepare-provider-documentation-line-39)">│</text><text class="breeze-release-management-prepare-provider-documentation-r4" x="24.4" y="971.6" textLength="109.8" clip-path="url(#breeze-release-management-prepare-provider-documentation-line-39)">--verbose</text><text class="breeze-release-management-prepare-provider-documentation-r7" x [...]
+</text><text class="breeze-release-management-prepare-provider-documentation-r5" x="0" y="996" textLength="12.2" clip-path="url(#breeze-release-management-prepare-provider-documentation-line-40)">│</text><text class="breeze-release-management-prepare-provider-documentation-r4" x="24.4" y="996" textLength="73.2" clip-path="url(#breeze-release-management-prepare-provider-documentation-line-40)">--help</text><text class="breeze-release-management-prepare-provider-documentation-r7" x="158.6" [...]
+</text><text class="breeze-release-management-prepare-provider-documentation-r5" x="0" y="1020.4" textLength="1464" clip-path="url(#breeze-release-management-prepare-provider-documentation-line-41)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-release-management-prepare-provider-documentation-r1" x="1464" y="1020.4" textLength="12.2" clip-path="url(#breeze-release-management-prepare-prov [...]
 </text>
     </g>
     </g>
diff --git a/dev/breeze/doc/images/output_release-management_prepare-provider-documentation.txt b/dev/breeze/doc/images/output_release-management_prepare-provider-documentation.txt
index f28c1c909ed..ab0e2b7d2bb 100644
--- a/dev/breeze/doc/images/output_release-management_prepare-provider-documentation.txt
+++ b/dev/breeze/doc/images/output_release-management_prepare-provider-documentation.txt
@@ -1 +1 @@
-7da34b87ae2b46a281d523e28f4bbfb5
+e0b5c63e125c7fb3c8d81a139ec1748c
diff --git a/dev/breeze/doc/images/output_run.svg b/dev/breeze/doc/images/output_run.svg
index d543e72e5bc..279b6c90dda 100644
--- a/dev/breeze/doc/images/output_run.svg
+++ b/dev/breeze/doc/images/output_run.svg
@@ -216,7 +216,7 @@
 </text><text class="breeze-run-r5" x="0" y="312.8" textLength="12.2" clip-path="url(#breeze-run-line-12)">│</text><text class="breeze-run-r5" x="317.2" y="312.8" textLength="1122.4" clip-path="url(#breeze-run-line-12)">[default:&#160;sqlite]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160 [...]
 </text><text class="breeze-run-r5" x="0" y="337.2" textLength="12.2" clip-path="url(#breeze-run-line-13)">│</text><text class="breeze-run-r4" x="24.4" y="337.2" textLength="219.6" clip-path="url(#breeze-run-line-13)">--postgres-version</text><text class="breeze-run-r6" x="268.4" y="337.2" textLength="24.4" clip-path="url(#breeze-run-line-13)">-P</text><text class="breeze-run-r1" x="317.2" y="337.2" textLength="305" clip-path="url(#breeze-run-line-13)">Version&#160;of&#160;Postgres&#160;u [...]
 </text><text class="breeze-run-r5" x="0" y="361.6" textLength="12.2" clip-path="url(#breeze-run-line-14)">│</text><text class="breeze-run-r4" x="24.4" y="361.6" textLength="183" clip-path="url(#breeze-run-line-14)">--mysql-version</text><text class="breeze-run-r6" x="268.4" y="361.6" textLength="24.4" clip-path="url(#breeze-run-line-14)">-M</text><text class="breeze-run-r1" x="317.2" y="361.6" textLength="268.4" clip-path="url(#breeze-run-line-14)">Version&#160;of&#160;MySQL&#160;used.</ [...]
-</text><text class="breeze-run-r5" x="0" y="386" textLength="12.2" clip-path="url(#breeze-run-line-15)">│</text><text class="breeze-run-r4" x="24.4" y="386" textLength="61" clip-path="url(#breeze-run-line-15)">--tty</text><text class="breeze-run-r1" x="317.2" y="386" textLength="1122.4" clip-path="url(#breeze-run-line-15)">Whether&#160;to&#160;allocate&#160;pseudo-tty&#160;when&#160;running&#160;docker&#160;command&#160;(useful&#160;for&#160;pre-commit&#160;and&#160;CI&#160;to&#160;</tex [...]
+</text><text class="breeze-run-r5" x="0" y="386" textLength="12.2" clip-path="url(#breeze-run-line-15)">│</text><text class="breeze-run-r4" x="24.4" y="386" textLength="61" clip-path="url(#breeze-run-line-15)">--tty</text><text class="breeze-run-r1" x="317.2" y="386" textLength="1122.4" clip-path="url(#breeze-run-line-15)">Whether&#160;to&#160;allocate&#160;pseudo-tty&#160;when&#160;running&#160;docker&#160;command&#160;(useful&#160;for&#160;prek&#160;and&#160;CI&#160;to&#160;&#160;&#160 [...]
 </text><text class="breeze-run-r5" x="0" y="410.4" textLength="12.2" clip-path="url(#breeze-run-line-16)">│</text><text class="breeze-run-r1" x="317.2" y="410.4" textLength="1122.4" clip-path="url(#breeze-run-line-16)">force-enable&#160;it).&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160 [...]
 </text><text class="breeze-run-r5" x="0" y="434.8" textLength="12.2" clip-path="url(#breeze-run-line-17)">│</text><text class="breeze-run-r7" x="317.2" y="434.8" textLength="1122.4" clip-path="url(#breeze-run-line-17)">(auto&#160;|&#160;enabled&#160;|&#160;disabled)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#16 [...]
 </text><text class="breeze-run-r5" x="0" y="459.2" textLength="12.2" clip-path="url(#breeze-run-line-18)">│</text><text class="breeze-run-r5" x="317.2" y="459.2" textLength="1122.4" clip-path="url(#breeze-run-line-18)">[default:&#160;auto]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;& [...]
@@ -235,7 +235,7 @@
 </text><text class="breeze-run-r5" x="0" y="776.4" textLength="12.2" clip-path="url(#breeze-run-line-31)">│</text><text class="breeze-run-r4" x="24.4" y="776.4" textLength="170.8" clip-path="url(#breeze-run-line-31)">--project-name</text><text class="breeze-run-r1" x="244" y="776.4" textLength="1195.6" clip-path="url(#breeze-run-line-31)">Name&#160;of&#160;the&#160;docker-compose&#160;project&#160;to&#160;bring&#160;down.&#160;The&#160;`docker-compose`&#160;is&#160;for&#160;legacy&#160;b [...]
 </text><text class="breeze-run-r5" x="0" y="800.8" textLength="12.2" clip-path="url(#breeze-run-line-32)">│</text><text class="breeze-run-r1" x="244" y="800.8" textLength="512.4" clip-path="url(#breeze-run-line-32)">project&#160;name&#160;and&#160;you&#160;can&#160;use&#160;`breeze&#160;down&#160;</text><text class="breeze-run-r4" x="756.4" y="800.8" textLength="170.8" clip-path="url(#breeze-run-line-32)">--project-name</text><text class="breeze-run-r1" x="927.2" y="800.8" textLength="51 [...]
 </text><text class="breeze-run-r5" x="0" y="825.2" textLength="12.2" clip-path="url(#breeze-run-line-33)">│</text><text class="breeze-run-r1" x="244" y="825.2" textLength="1195.6" clip-path="url(#breeze-run-line-33)">belonging&#160;to&#160;it.&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#1 [...]
-</text><text class="breeze-run-r5" x="0" y="849.6" textLength="12.2" clip-path="url(#breeze-run-line-34)">│</text><text class="breeze-run-r7" x="244" y="849.6" textLength="1195.6" clip-path="url(#breeze-run-line-34)">(breeze&#160;|&#160;pre-commit&#160;|&#160;docker-compose)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;& [...]
+</text><text class="breeze-run-r5" x="0" y="849.6" textLength="12.2" clip-path="url(#breeze-run-line-34)">│</text><text class="breeze-run-r7" x="244" y="849.6" textLength="1195.6" clip-path="url(#breeze-run-line-34)">(breeze&#160;|&#160;prek&#160;|&#160;docker-compose)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;& [...]
 </text><text class="breeze-run-r5" x="0" y="874" textLength="12.2" clip-path="url(#breeze-run-line-35)">│</text><text class="breeze-run-r5" x="244" y="874" textLength="1195.6" clip-path="url(#breeze-run-line-35)">[default:&#160;breeze]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160 [...]
 </text><text class="breeze-run-r5" x="0" y="898.4" textLength="12.2" clip-path="url(#breeze-run-line-36)">│</text><text class="breeze-run-r4" x="24.4" y="898.4" textLength="158.6" clip-path="url(#breeze-run-line-36)">--docker-host</text><text class="breeze-run-r1" x="244" y="898.4" textLength="915" clip-path="url(#breeze-run-line-36)">Optional&#160;-&#160;docker&#160;host&#160;to&#160;use&#160;when&#160;running&#160;docker&#160;commands.&#160;When&#160;set,&#160;the&#160;`</text><text cl [...]
 </text><text class="breeze-run-r5" x="0" y="922.8" textLength="12.2" clip-path="url(#breeze-run-line-37)">│</text><text class="breeze-run-r1" x="244" y="922.8" textLength="1195.6" clip-path="url(#breeze-run-line-37)">ignored&#160;when&#160;building&#160;images.&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#1 [...]
diff --git a/dev/breeze/doc/images/output_run.txt b/dev/breeze/doc/images/output_run.txt
index f86eff035ab..94a2e4434fc 100644
--- a/dev/breeze/doc/images/output_run.txt
+++ b/dev/breeze/doc/images/output_run.txt
@@ -1 +1 @@
-0a1664708a555d7278011cfa44d040fb
+3b53ba05a05ffdb1d340dcf11470fc22
diff --git a/dev/breeze/doc/images/output_sbom_export-dependency-information.svg b/dev/breeze/doc/images/output_sbom_export-dependency-information.svg
index fc7ff4373b6..0fa61819679 100644
--- a/dev/breeze/doc/images/output_sbom_export-dependency-information.svg
+++ b/dev/breeze/doc/images/output_sbom_export-dependency-information.svg
@@ -166,7 +166,7 @@
 </text><text class="breeze-sbom-export-dependency-information-r5" x="0" y="288.4" textLength="12.2" clip-path="url(#breeze-sbom-export-dependency-information-line-11)">│</text><text class="breeze-sbom-export-dependency-information-r4" x="61" y="288.4" textLength="268.4" clip-path="url(#breeze-sbom-export-dependency-information-line-11)">--include-github-stats</text><text class="breeze-sbom-export-dependency-information-r7" x="427" y="288.4" textLength="24.4" clip-path="url(#breeze-sbom-e [...]
 </text><text class="breeze-sbom-export-dependency-information-r5" x="0" y="312.8" textLength="12.2" clip-path="url(#breeze-sbom-export-dependency-information-line-12)">│</text><text class="breeze-sbom-export-dependency-information-r4" x="61" y="312.8" textLength="207.4" clip-path="url(#breeze-sbom-export-dependency-information-line-12)">--include-actions</text><text class="breeze-sbom-export-dependency-information-r1" x="475.8" y="312.8" textLength="524.6" clip-path="url(#breeze-sbom-exp [...]
 </text><text class="breeze-sbom-export-dependency-information-r5" x="0" y="337.2" textLength="1464" clip-path="url(#breeze-sbom-export-dependency-information-line-13)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-sbom-export-dependency-information-r1" x="1464" y="337.2" textLength="12.2" clip-path="url(#breeze-sbom-export-dependency-information-line-13)">
-</text><text class="breeze-sbom-export-dependency-information-r5" x="0" y="361.6" textLength="24.4" clip-path="url(#breeze-sbom-export-dependency-information-line-14)">╭─</text><text class="breeze-sbom-export-dependency-information-r5" x="24.4" y="361.6" textLength="231.8" clip-path="url(#breeze-sbom-export-dependency-information-line-14)">&#160;Github&#160;auth&#160;flags&#160;</text><text class="breeze-sbom-export-dependency-information-r5" x="256.2" y="361.6" textLength="1183.4" clip- [...]
+</text><text class="breeze-sbom-export-dependency-information-r5" x="0" y="361.6" textLength="24.4" clip-path="url(#breeze-sbom-export-dependency-information-line-14)">╭─</text><text class="breeze-sbom-export-dependency-information-r5" x="24.4" y="361.6" textLength="231.8" clip-path="url(#breeze-sbom-export-dependency-information-line-14)">&#160;GitHub&#160;auth&#160;flags&#160;</text><text class="breeze-sbom-export-dependency-information-r5" x="256.2" y="361.6" textLength="1183.4" clip- [...]
 </text><text class="breeze-sbom-export-dependency-information-r5" x="0" y="386" textLength="12.2" clip-path="url(#breeze-sbom-export-dependency-information-line-15)">│</text><text class="breeze-sbom-export-dependency-information-r4" x="24.4" y="386" textLength="170.8" clip-path="url(#breeze-sbom-export-dependency-information-line-15)">--github-token</text><text class="breeze-sbom-export-dependency-information-r1" x="244" y="386" textLength="500.2" clip-path="url(#breeze-sbom-export-depen [...]
 </text><text class="breeze-sbom-export-dependency-information-r5" x="0" y="410.4" textLength="1464" clip-path="url(#breeze-sbom-export-dependency-information-line-16)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-sbom-export-dependency-information-r1" x="1464" y="410.4" textLength="12.2" clip-path="url(#breeze-sbom-export-dependency-information-line-16)">
 </text><text class="breeze-sbom-export-dependency-information-r5" x="0" y="434.8" textLength="24.4" clip-path="url(#breeze-sbom-export-dependency-information-line-17)">╭─</text><text class="breeze-sbom-export-dependency-information-r5" x="24.4" y="434.8" textLength="317.2" clip-path="url(#breeze-sbom-export-dependency-information-line-17)">&#160;Google&#160;spreadsheet&#160;flags&#160;</text><text class="breeze-sbom-export-dependency-information-r5" x="341.6" y="434.8" textLength="1098"  [...]
diff --git a/dev/breeze/doc/images/output_sbom_export-dependency-information.txt b/dev/breeze/doc/images/output_sbom_export-dependency-information.txt
index 8be6d09b501..db1db7ad9a0 100644
--- a/dev/breeze/doc/images/output_sbom_export-dependency-information.txt
+++ b/dev/breeze/doc/images/output_sbom_export-dependency-information.txt
@@ -1 +1 @@
-432576382063ad0f8e30e277713bbc10
+781251fd7156ca0af1e6660da27a4ecc
diff --git a/dev/breeze/doc/images/output_setup_check-all-params-in-groups.svg b/dev/breeze/doc/images/output_setup_check-all-params-in-groups.svg
index 34663fa1be2..53d05594312 100644
--- a/dev/breeze/doc/images/output_setup_check-all-params-in-groups.svg
+++ b/dev/breeze/doc/images/output_setup_check-all-params-in-groups.svg
@@ -1,4 +1,4 @@
-<svg class="rich-terminal" viewBox="0 0 1482 1099.2" xmlns="http://www.w3.org/2000/svg">
+<svg class="rich-terminal" viewBox="0 0 1482 1123.6" xmlns="http://www.w3.org/2000/svg">
     <!-- Generated with Rich https://www.textualize.io -->
     <style>
 
@@ -43,7 +43,7 @@
 
     <defs>
     <clipPath id="breeze-setup-check-all-params-in-groups-clip-terminal">
-      <rect x="0" y="0" width="1463.0" height="1048.2" />
+      <rect x="0" y="0" width="1463.0" height="1072.6" />
     </clipPath>
     <clipPath id="breeze-setup-check-all-params-in-groups-line-0">
     <rect x="0" y="1.5" width="1464" height="24.65"/>
@@ -171,9 +171,12 @@
 <clipPath id="breeze-setup-check-all-params-in-groups-line-41">
     <rect x="0" y="1001.9" width="1464" height="24.65"/>
             </clipPath>
+<clipPath id="breeze-setup-check-all-params-in-groups-line-42">
+    <rect x="0" y="1026.3" width="1464" height="24.65"/>
+            </clipPath>
     </defs>
 
-    <rect fill="#292929" stroke="rgba(255,255,255,0.35)" stroke-width="1" x="1" y="1" width="1480" height="1097.2" rx="8"/><text class="breeze-setup-check-all-params-in-groups-title" fill="#c5c8c6" text-anchor="middle" x="740" y="27">Command:&#160;setup&#160;check-all-params-in-groups</text>
+    <rect fill="#292929" stroke="rgba(255,255,255,0.35)" stroke-width="1" x="1" y="1" width="1480" height="1121.6" rx="8"/><text class="breeze-setup-check-all-params-in-groups-title" fill="#c5c8c6" text-anchor="middle" x="740" y="27">Command:&#160;setup&#160;check-all-params-in-groups</text>
             <g transform="translate(26,22)">
             <circle cx="0" cy="0" r="7" fill="#ff5f57"/>
             <circle cx="22" cy="0" r="7" fill="#febc2e"/>
@@ -216,16 +219,17 @@
 </text><text class="breeze-setup-check-all-params-in-groups-r5" x="0" y="752" textLength="12.2" clip-path="url(#breeze-setup-check-all-params-in-groups-line-30)">│</text><text class="breeze-setup-check-all-params-in-groups-r6" x="183" y="752" textLength="1256.6" clip-path="url(#breeze-setup-check-all-params-in-groups-line-30)">sbom:export-dependency-information&#160;|&#160;sbom:generate-providers-requirements&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;& [...]
 </text><text class="breeze-setup-check-all-params-in-groups-r5" x="0" y="776.4" textLength="12.2" clip-path="url(#breeze-setup-check-all-params-in-groups-line-31)">│</text><text class="breeze-setup-check-all-params-in-groups-r6" x="183" y="776.4" textLength="1256.6" clip-path="url(#breeze-setup-check-all-params-in-groups-line-31)">sbom:update-sbom-information&#160;|&#160;setup&#160;|&#160;setup:autocomplete&#160;|&#160;setup:check-all-params-in-groups&#160;|&#160;&#160;&#160;&#160;&#160; [...]
 </text><text class="breeze-setup-check-all-params-in-groups-r5" x="0" y="800.8" textLength="12.2" clip-path="url(#breeze-setup-check-all-params-in-groups-line-32)">│</text><text class="breeze-setup-check-all-params-in-groups-r6" x="183" y="800.8" textLength="1256.6" clip-path="url(#breeze-setup-check-all-params-in-groups-line-32)">setup:config&#160;|&#160;setup:regenerate-command-images&#160;|&#160;setup:self-upgrade&#160;|&#160;setup:synchronize-local-mounts&#160;|&#160;</text><text cla [...]
-</text><text class="breeze-setup-check-all-params-in-groups-r5" x="0" y="825.2" textLength="12.2" clip-path="url(#breeze-setup-check-all-params-in-groups-line-33)">│</text><text class="breeze-setup-check-all-params-in-groups-r6" x="183" y="825.2" textLength="1256.6" clip-path="url(#breeze-setup-check-all-params-in-groups-line-33)">setup:version&#160;|&#160;shell&#160;|&#160;start-airflow&#160;|&#160;static-checks&#160;|&#160;testing&#160;|&#160;testing:airflow-ctl-tests&#160;|&#160;&#160 [...]
+</text><text class="breeze-setup-check-all-params-in-groups-r5" x="0" y="825.2" textLength="12.2" clip-path="url(#breeze-setup-check-all-params-in-groups-line-33)">│</text><text class="breeze-setup-check-all-params-in-groups-r6" x="183" y="825.2" textLength="1256.6" clip-path="url(#breeze-setup-check-all-params-in-groups-line-33)">setup:version&#160;|&#160;shell&#160;|&#160;start-airflow&#160;|&#160;testing&#160;|&#160;testing:airflow-ctl-tests&#160;|&#160;&#160;&#160;&#160;&#160;&#160;& [...]
 </text><text class="breeze-setup-check-all-params-in-groups-r5" x="0" y="849.6" textLength="12.2" clip-path="url(#breeze-setup-check-all-params-in-groups-line-34)">│</text><text class="breeze-setup-check-all-params-in-groups-r6" x="183" y="849.6" textLength="1256.6" clip-path="url(#breeze-setup-check-all-params-in-groups-line-34)">testing:core-integration-tests&#160;|&#160;testing:core-tests&#160;|&#160;testing:docker-compose-tests&#160;|&#160;testing:helm-tests</text><text class="breeze [...]
 </text><text class="breeze-setup-check-all-params-in-groups-r5" x="0" y="874" textLength="12.2" clip-path="url(#breeze-setup-check-all-params-in-groups-line-35)">│</text><text class="breeze-setup-check-all-params-in-groups-r6" x="183" y="874" textLength="1256.6" clip-path="url(#breeze-setup-check-all-params-in-groups-line-35)">|&#160;testing:providers-integration-tests&#160;|&#160;testing:providers-tests&#160;|&#160;testing:python-api-client-tests&#160;|&#160;&#160;&#160;&#160;</text><te [...]
-</text><text class="breeze-setup-check-all-params-in-groups-r5" x="0" y="898.4" textLength="12.2" clip-path="url(#breeze-setup-check-all-params-in-groups-line-36)">│</text><text class="breeze-setup-check-all-params-in-groups-r6" x="183" y="898.4" textLength="1256.6" clip-path="url(#breeze-setup-check-all-params-in-groups-line-36)">testing:system-tests&#160;|&#160;testing:task-sdk-tests&#160;|&#160;workflow-run&#160;|&#160;workflow-run:publish-docs)&#160;&#160;&#160;&#160;&#160;&#160;&#16 [...]
-</text><text class="breeze-setup-check-all-params-in-groups-r5" x="0" y="922.8" textLength="1464" clip-path="url(#breeze-setup-check-all-params-in-groups-line-37)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-setup-check-all-params-in-groups-r1" x="1464" y="922.8" textLength="12.2" clip-path="url(#breeze-setup-check-all-params-in-groups-line-37)">
-</text><text class="breeze-setup-check-all-params-in-groups-r5" x="0" y="947.2" textLength="24.4" clip-path="url(#breeze-setup-check-all-params-in-groups-line-38)">╭─</text><text class="breeze-setup-check-all-params-in-groups-r5" x="24.4" y="947.2" textLength="195.2" clip-path="url(#breeze-setup-check-all-params-in-groups-line-38)">&#160;Common&#160;options&#160;</text><text class="breeze-setup-check-all-params-in-groups-r5" x="219.6" y="947.2" textLength="1220" clip-path="url(#breeze-se [...]
-</text><text class="breeze-setup-check-all-params-in-groups-r5" x="0" y="971.6" textLength="12.2" clip-path="url(#breeze-setup-check-all-params-in-groups-line-39)">│</text><text class="breeze-setup-check-all-params-in-groups-r4" x="24.4" y="971.6" textLength="109.8" clip-path="url(#breeze-setup-check-all-params-in-groups-line-39)">--verbose</text><text class="breeze-setup-check-all-params-in-groups-r7" x="158.6" y="971.6" textLength="24.4" clip-path="url(#breeze-setup-check-all-params-in [...]
-</text><text class="breeze-setup-check-all-params-in-groups-r5" x="0" y="996" textLength="12.2" clip-path="url(#breeze-setup-check-all-params-in-groups-line-40)">│</text><text class="breeze-setup-check-all-params-in-groups-r4" x="24.4" y="996" textLength="109.8" clip-path="url(#breeze-setup-check-all-params-in-groups-line-40)">--dry-run</text><text class="breeze-setup-check-all-params-in-groups-r7" x="158.6" y="996" textLength="24.4" clip-path="url(#breeze-setup-check-all-params-in-group [...]
-</text><text class="breeze-setup-check-all-params-in-groups-r5" x="0" y="1020.4" textLength="12.2" clip-path="url(#breeze-setup-check-all-params-in-groups-line-41)">│</text><text class="breeze-setup-check-all-params-in-groups-r4" x="24.4" y="1020.4" textLength="73.2" clip-path="url(#breeze-setup-check-all-params-in-groups-line-41)">--help</text><text class="breeze-setup-check-all-params-in-groups-r7" x="158.6" y="1020.4" textLength="24.4" clip-path="url(#breeze-setup-check-all-params-in- [...]
-</text><text class="breeze-setup-check-all-params-in-groups-r5" x="0" y="1044.8" textLength="1464" clip-path="url(#breeze-setup-check-all-params-in-groups-line-42)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-setup-check-all-params-in-groups-r1" x="1464" y="1044.8" textLength="12.2" clip-path="url(#breeze-setup-check-all-params-in-groups-line-42)">
+</text><text class="breeze-setup-check-all-params-in-groups-r5" x="0" y="898.4" textLength="12.2" clip-path="url(#breeze-setup-check-all-params-in-groups-line-36)">│</text><text class="breeze-setup-check-all-params-in-groups-r6" x="183" y="898.4" textLength="1256.6" clip-path="url(#breeze-setup-check-all-params-in-groups-line-36)">testing:system-tests&#160;|&#160;testing:task-sdk-integration-tests&#160;|&#160;testing:task-sdk-tests&#160;|&#160;workflow-run&#160;|&#160;&#160;&#160;&#160;< [...]
+</text><text class="breeze-setup-check-all-params-in-groups-r5" x="0" y="922.8" textLength="12.2" clip-path="url(#breeze-setup-check-all-params-in-groups-line-37)">│</text><text class="breeze-setup-check-all-params-in-groups-r6" x="183" y="922.8" textLength="1256.6" clip-path="url(#breeze-setup-check-all-params-in-groups-line-37)">workflow-run:publish-docs)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;& [...]
+</text><text class="breeze-setup-check-all-params-in-groups-r5" x="0" y="947.2" textLength="1464" clip-path="url(#breeze-setup-check-all-params-in-groups-line-38)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-setup-check-all-params-in-groups-r1" x="1464" y="947.2" textLength="12.2" clip-path="url(#breeze-setup-check-all-params-in-groups-line-38)">
+</text><text class="breeze-setup-check-all-params-in-groups-r5" x="0" y="971.6" textLength="24.4" clip-path="url(#breeze-setup-check-all-params-in-groups-line-39)">╭─</text><text class="breeze-setup-check-all-params-in-groups-r5" x="24.4" y="971.6" textLength="195.2" clip-path="url(#breeze-setup-check-all-params-in-groups-line-39)">&#160;Common&#160;options&#160;</text><text class="breeze-setup-check-all-params-in-groups-r5" x="219.6" y="971.6" textLength="1220" clip-path="url(#breeze-se [...]
+</text><text class="breeze-setup-check-all-params-in-groups-r5" x="0" y="996" textLength="12.2" clip-path="url(#breeze-setup-check-all-params-in-groups-line-40)">│</text><text class="breeze-setup-check-all-params-in-groups-r4" x="24.4" y="996" textLength="109.8" clip-path="url(#breeze-setup-check-all-params-in-groups-line-40)">--verbose</text><text class="breeze-setup-check-all-params-in-groups-r7" x="158.6" y="996" textLength="24.4" clip-path="url(#breeze-setup-check-all-params-in-group [...]
+</text><text class="breeze-setup-check-all-params-in-groups-r5" x="0" y="1020.4" textLength="12.2" clip-path="url(#breeze-setup-check-all-params-in-groups-line-41)">│</text><text class="breeze-setup-check-all-params-in-groups-r4" x="24.4" y="1020.4" textLength="109.8" clip-path="url(#breeze-setup-check-all-params-in-groups-line-41)">--dry-run</text><text class="breeze-setup-check-all-params-in-groups-r7" x="158.6" y="1020.4" textLength="24.4" clip-path="url(#breeze-setup-check-all-params [...]
+</text><text class="breeze-setup-check-all-params-in-groups-r5" x="0" y="1044.8" textLength="12.2" clip-path="url(#breeze-setup-check-all-params-in-groups-line-42)">│</text><text class="breeze-setup-check-all-params-in-groups-r4" x="24.4" y="1044.8" textLength="73.2" clip-path="url(#breeze-setup-check-all-params-in-groups-line-42)">--help</text><text class="breeze-setup-check-all-params-in-groups-r7" x="158.6" y="1044.8" textLength="24.4" clip-path="url(#breeze-setup-check-all-params-in- [...]
+</text><text class="breeze-setup-check-all-params-in-groups-r5" x="0" y="1069.2" textLength="1464" clip-path="url(#breeze-setup-check-all-params-in-groups-line-43)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-setup-check-all-params-in-groups-r1" x="1464" y="1069.2" textLength="12.2" clip-path="url(#breeze-setup-check-all-params-in-groups-line-43)">
 </text>
     </g>
     </g>
diff --git a/dev/breeze/doc/images/output_setup_check-all-params-in-groups.txt b/dev/breeze/doc/images/output_setup_check-all-params-in-groups.txt
index a91a86646af..2a2e1152f40 100644
--- a/dev/breeze/doc/images/output_setup_check-all-params-in-groups.txt
+++ b/dev/breeze/doc/images/output_setup_check-all-params-in-groups.txt
@@ -1 +1 @@
-051289fd23140ea60188522ec7484eb0
+b1fdbd0feeb3b5ba14f79cc8f13d8e1a
diff --git a/dev/breeze/doc/images/output_setup_regenerate-command-images.svg b/dev/breeze/doc/images/output_setup_regenerate-command-images.svg
index 9e80701baf1..bb856ad3a34 100644
--- a/dev/breeze/doc/images/output_setup_regenerate-command-images.svg
+++ b/dev/breeze/doc/images/output_setup_regenerate-command-images.svg
@@ -233,11 +233,11 @@
 </text><text class="breeze-setup-regenerate-command-images-r5" x="0" y="800.8" textLength="12.2" clip-path="url(#breeze-setup-regenerate-command-images-line-32)">│</text><text class="breeze-setup-regenerate-command-images-r6" x="219.6" y="800.8" textLength="1220" clip-path="url(#breeze-setup-regenerate-command-images-line-32)">sbom:export-dependency-information&#160;|&#160;sbom:generate-providers-requirements&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;& [...]
 </text><text class="breeze-setup-regenerate-command-images-r5" x="0" y="825.2" textLength="12.2" clip-path="url(#breeze-setup-regenerate-command-images-line-33)">│</text><text class="breeze-setup-regenerate-command-images-r6" x="219.6" y="825.2" textLength="1220" clip-path="url(#breeze-setup-regenerate-command-images-line-33)">sbom:update-sbom-information&#160;|&#160;setup&#160;|&#160;setup:autocomplete&#160;|&#160;setup:check-all-params-in-groups&#160;|&#160;&#160;&#160;&#160;&#160;&#16 [...]
 </text><text class="breeze-setup-regenerate-command-images-r5" x="0" y="849.6" textLength="12.2" clip-path="url(#breeze-setup-regenerate-command-images-line-34)">│</text><text class="breeze-setup-regenerate-command-images-r6" x="219.6" y="849.6" textLength="1220" clip-path="url(#breeze-setup-regenerate-command-images-line-34)">setup:config&#160;|&#160;setup:regenerate-command-images&#160;|&#160;setup:self-upgrade&#160;|&#160;setup:synchronize-local-mounts</text><text class="breeze-setup- [...]
-</text><text class="breeze-setup-regenerate-command-images-r5" x="0" y="874" textLength="12.2" clip-path="url(#breeze-setup-regenerate-command-images-line-35)">│</text><text class="breeze-setup-regenerate-command-images-r6" x="219.6" y="874" textLength="1220" clip-path="url(#breeze-setup-regenerate-command-images-line-35)">|&#160;setup:version&#160;|&#160;shell&#160;|&#160;start-airflow&#160;|&#160;static-checks&#160;|&#160;testing&#160;|&#160;testing:airflow-ctl-tests&#160;|&#160;&#160; [...]
+</text><text class="breeze-setup-regenerate-command-images-r5" x="0" y="874" textLength="12.2" clip-path="url(#breeze-setup-regenerate-command-images-line-35)">│</text><text class="breeze-setup-regenerate-command-images-r6" x="219.6" y="874" textLength="1220" clip-path="url(#breeze-setup-regenerate-command-images-line-35)">|&#160;setup:version&#160;|&#160;shell&#160;|&#160;start-airflow&#160;|&#160;testing&#160;|&#160;testing:airflow-ctl-tests&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&# [...]
 </text><text class="breeze-setup-regenerate-command-images-r5" x="0" y="898.4" textLength="12.2" clip-path="url(#breeze-setup-regenerate-command-images-line-36)">│</text><text class="breeze-setup-regenerate-command-images-r6" x="219.6" y="898.4" textLength="1220" clip-path="url(#breeze-setup-regenerate-command-images-line-36)">testing:core-integration-tests&#160;|&#160;testing:core-tests&#160;|&#160;testing:docker-compose-tests&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; [...]
 </text><text class="breeze-setup-regenerate-command-images-r5" x="0" y="922.8" textLength="12.2" clip-path="url(#breeze-setup-regenerate-command-images-line-37)">│</text><text class="breeze-setup-regenerate-command-images-r6" x="219.6" y="922.8" textLength="1220" clip-path="url(#breeze-setup-regenerate-command-images-line-37)">testing:helm-tests&#160;|&#160;testing:providers-integration-tests&#160;|&#160;testing:providers-tests&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; [...]
-</text><text class="breeze-setup-regenerate-command-images-r5" x="0" y="947.2" textLength="12.2" clip-path="url(#breeze-setup-regenerate-command-images-line-38)">│</text><text class="breeze-setup-regenerate-command-images-r6" x="219.6" y="947.2" textLength="1220" clip-path="url(#breeze-setup-regenerate-command-images-line-38)">testing:python-api-client-tests&#160;|&#160;testing:system-tests&#160;|&#160;testing:task-sdk-tests&#160;|&#160;workflow-run&#160;|&#160;&#160;&#160;&#160;</text>< [...]
-</text><text class="breeze-setup-regenerate-command-images-r5" x="0" y="971.6" textLength="12.2" clip-path="url(#breeze-setup-regenerate-command-images-line-39)">│</text><text class="breeze-setup-regenerate-command-images-r6" x="219.6" y="971.6" textLength="1220" clip-path="url(#breeze-setup-regenerate-command-images-line-39)">workflow-run:publish-docs)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160 [...]
+</text><text class="breeze-setup-regenerate-command-images-r5" x="0" y="947.2" textLength="12.2" clip-path="url(#breeze-setup-regenerate-command-images-line-38)">│</text><text class="breeze-setup-regenerate-command-images-r6" x="219.6" y="947.2" textLength="1220" clip-path="url(#breeze-setup-regenerate-command-images-line-38)">testing:python-api-client-tests&#160;|&#160;testing:system-tests&#160;|&#160;testing:task-sdk-integration-tests&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;</t [...]
+</text><text class="breeze-setup-regenerate-command-images-r5" x="0" y="971.6" textLength="12.2" clip-path="url(#breeze-setup-regenerate-command-images-line-39)">│</text><text class="breeze-setup-regenerate-command-images-r6" x="219.6" y="971.6" textLength="1220" clip-path="url(#breeze-setup-regenerate-command-images-line-39)">testing:task-sdk-tests&#160;|&#160;workflow-run&#160;|&#160;workflow-run:publish-docs)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160 [...]
 </text><text class="breeze-setup-regenerate-command-images-r5" x="0" y="996" textLength="12.2" clip-path="url(#breeze-setup-regenerate-command-images-line-40)">│</text><text class="breeze-setup-regenerate-command-images-r4" x="24.4" y="996" textLength="146.4" clip-path="url(#breeze-setup-regenerate-command-images-line-40)">--check-only</text><text class="breeze-setup-regenerate-command-images-r1" x="219.6" y="996" textLength="1220" clip-path="url(#breeze-setup-regenerate-command-images-l [...]
 </text><text class="breeze-setup-regenerate-command-images-r5" x="0" y="1020.4" textLength="12.2" clip-path="url(#breeze-setup-regenerate-command-images-line-41)">│</text><text class="breeze-setup-regenerate-command-images-r1" x="219.6" y="1020.4" textLength="170.8" clip-path="url(#breeze-setup-regenerate-command-images-line-41)">together&#160;with&#160;</text><text class="breeze-setup-regenerate-command-images-r4" x="390.4" y="1020.4" textLength="109.8" clip-path="url(#breeze-setup-rege [...]
 </text><text class="breeze-setup-regenerate-command-images-r5" x="0" y="1044.8" textLength="1464" clip-path="url(#breeze-setup-regenerate-command-images-line-42)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-setup-regenerate-command-images-r1" x="1464" y="1044.8" textLength="12.2" clip-path="url(#breeze-setup-regenerate-command-images-line-42)">
diff --git a/dev/breeze/doc/images/output_setup_regenerate-command-images.txt b/dev/breeze/doc/images/output_setup_regenerate-command-images.txt
index 14f64f8fcb2..f0afa5ca432 100644
--- a/dev/breeze/doc/images/output_setup_regenerate-command-images.txt
+++ b/dev/breeze/doc/images/output_setup_regenerate-command-images.txt
@@ -1 +1 @@
-b6bec540dff082eb353c54319297ed94
+3cb28adadcff7f43ae20d44507368acc
diff --git a/dev/breeze/doc/images/output_shell.svg b/dev/breeze/doc/images/output_shell.svg
index 7d121161f38..fe072fdaff2 100644
--- a/dev/breeze/doc/images/output_shell.svg
+++ b/dev/breeze/doc/images/output_shell.svg
@@ -1,4 +1,4 @@
-<svg class="rich-terminal" viewBox="0 0 1482 4393.2" xmlns="http://www.w3.org/2000/svg">
+<svg class="rich-terminal" viewBox="0 0 1482 4417.599999999999" xmlns="http://www.w3.org/2000/svg">
     <!-- Generated with Rich https://www.textualize.io -->
     <style>
 
@@ -43,7 +43,7 @@
 
     <defs>
     <clipPath id="breeze-shell-clip-terminal">
-      <rect x="0" y="0" width="1463.0" height="4342.2" />
+      <rect x="0" y="0" width="1463.0" height="4366.599999999999" />
     </clipPath>
     <clipPath id="breeze-shell-line-0">
     <rect x="0" y="1.5" width="1464" height="24.65"/>
@@ -576,9 +576,12 @@
 <clipPath id="breeze-shell-line-176">
     <rect x="0" y="4295.9" width="1464" height="24.65"/>
             </clipPath>
+<clipPath id="breeze-shell-line-177">
+    <rect x="0" y="4320.3" width="1464" height="24.65"/>
+            </clipPath>
     </defs>
 
-    <rect fill="#292929" stroke="rgba(255,255,255,0.35)" stroke-width="1" x="1" y="1" width="1480" height="4391.2" rx="8"/><text class="breeze-shell-title" fill="#c5c8c6" text-anchor="middle" x="740" y="27">Command:&#160;shell</text>
+    <rect fill="#292929" stroke="rgba(255,255,255,0.35)" stroke-width="1" x="1" y="1" width="1480" height="4415.6" rx="8"/><text class="breeze-shell-title" fill="#c5c8c6" text-anchor="middle" x="740" y="27">Command:&#160;shell</text>
             <g transform="translate(26,22)">
             <circle cx="0" cy="0" r="7" fill="#ff5f57"/>
             <circle cx="22" cy="0" r="7" fill="#febc2e"/>
@@ -621,7 +624,7 @@
 </text><text class="breeze-shell-r5" x="0" y="752" textLength="12.2" clip-path="url(#breeze-shell-line-30)">│</text><text class="breeze-shell-r4" x="24.4" y="752" textLength="170.8" clip-path="url(#breeze-shell-line-30)">--project-name</text><text class="breeze-shell-r1" x="390.4" y="752" textLength="1049.2" clip-path="url(#breeze-shell-line-30)">Name&#160;of&#160;the&#160;docker-compose&#160;project&#160;to&#160;bring&#160;down.&#160;The&#160;`docker-compose`&#160;is&#160;for&#160;legac [...]
 </text><text class="breeze-shell-r5" x="0" y="776.4" textLength="12.2" clip-path="url(#breeze-shell-line-31)">│</text><text class="breeze-shell-r1" x="390.4" y="776.4" textLength="597.8" clip-path="url(#breeze-shell-line-31)">breeze&#160;project&#160;name&#160;and&#160;you&#160;can&#160;use&#160;`breeze&#160;down&#160;</text><text class="breeze-shell-r4" x="988.2" y="776.4" textLength="170.8" clip-path="url(#breeze-shell-line-31)">--project-name</text><text class="breeze-shell-r1" x="115 [...]
 </text><text class="breeze-shell-r5" x="0" y="800.8" textLength="12.2" clip-path="url(#breeze-shell-line-32)">│</text><text class="breeze-shell-r1" x="390.4" y="800.8" textLength="1049.2" clip-path="url(#breeze-shell-line-32)">stop&#160;all&#160;containers&#160;belonging&#160;to&#160;it.&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; [...]
-</text><text class="breeze-shell-r5" x="0" y="825.2" textLength="12.2" clip-path="url(#breeze-shell-line-33)">│</text><text class="breeze-shell-r7" x="390.4" y="825.2" textLength="1049.2" clip-path="url(#breeze-shell-line-33)">(breeze&#160;|&#160;pre-commit&#160;|&#160;docker-compose)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#1 [...]
+</text><text class="breeze-shell-r5" x="0" y="825.2" textLength="12.2" clip-path="url(#breeze-shell-line-33)">│</text><text class="breeze-shell-r7" x="390.4" y="825.2" textLength="1049.2" clip-path="url(#breeze-shell-line-33)">(breeze&#160;|&#160;prek&#160;|&#160;docker-compose)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#1 [...]
 </text><text class="breeze-shell-r5" x="0" y="849.6" textLength="12.2" clip-path="url(#breeze-shell-line-34)">│</text><text class="breeze-shell-r5" x="390.4" y="849.6" textLength="1049.2" clip-path="url(#breeze-shell-line-34)">[default:&#160;breeze]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#1 [...]
 </text><text class="breeze-shell-r5" x="0" y="874" textLength="12.2" clip-path="url(#breeze-shell-line-35)">│</text><text class="breeze-shell-r4" x="24.4" y="874" textLength="109.8" clip-path="url(#breeze-shell-line-35)">--restart</text><text class="breeze-shell-r1" x="134.2" y="874" textLength="12.2" clip-path="url(#breeze-shell-line-35)">,</text><text class="breeze-shell-r4" x="146.4" y="874" textLength="195.2" clip-path="url(#breeze-shell-line-35)">--remove-orphans</text><text class=" [...]
 </text><text class="breeze-shell-r5" x="0" y="898.4" textLength="12.2" clip-path="url(#breeze-shell-line-36)">│</text><text class="breeze-shell-r4" x="24.4" y="898.4" textLength="158.6" clip-path="url(#breeze-shell-line-36)">--docker-host</text><text class="breeze-shell-r1" x="390.4" y="898.4" textLength="915" clip-path="url(#breeze-shell-line-36)">Optional&#160;-&#160;docker&#160;host&#160;to&#160;use&#160;when&#160;running&#160;docker&#160;commands.&#160;When&#160;set,&#160;the&#160;`< [...]
@@ -633,8 +636,8 @@
 </text><text class="breeze-shell-r5" x="0" y="1044.8" textLength="12.2" clip-path="url(#breeze-shell-line-42)">│</text><text class="breeze-shell-r4" x="24.4" y="1044.8" textLength="317.2" clip-path="url(#breeze-shell-line-42)">--skip-image-upgrade-check</text><text class="breeze-shell-r1" x="475.8" y="1044.8" textLength="536.8" clip-path="url(#breeze-shell-line-42)">Skip&#160;checking&#160;if&#160;the&#160;CI&#160;image&#160;is&#160;up&#160;to&#160;date.</text><text class="breeze-shell-r [...]
 </text><text class="breeze-shell-r5" x="0" y="1069.2" textLength="12.2" clip-path="url(#breeze-shell-line-43)">│</text><text class="breeze-shell-r4" x="24.4" y="1069.2" textLength="329.4" clip-path="url(#breeze-shell-line-43)">--warn-image-upgrade-needed</text><text class="breeze-shell-r1" x="475.8" y="1069.2" textLength="512.4" clip-path="url(#breeze-shell-line-43)">Warn&#160;when&#160;image&#160;upgrade&#160;is&#160;needed&#160;even&#160;if&#160;</text><text class="breeze-shell-r4" x=" [...]
 </text><text class="breeze-shell-r5" x="0" y="1093.6" textLength="12.2" clip-path="url(#breeze-shell-line-44)">│</text><text class="breeze-shell-r4" x="24.4" y="1093.6" textLength="402.6" clip-path="url(#breeze-shell-line-44)">--skip-environment-initialization</text><text class="breeze-shell-r1" x="475.8" y="1093.6" textLength="939.4" clip-path="url(#breeze-shell-line-44)">Skip&#160;running&#160;breeze&#160;entrypoint&#160;initialization&#160;-&#160;no&#160;user&#160;output,&#160;no&#160 [...]
-</text><text class="breeze-shell-r5" x="0" y="1118" textLength="12.2" clip-path="url(#breeze-shell-line-45)">│</text><text class="breeze-shell-r4" x="24.4" y="1118" textLength="61" clip-path="url(#breeze-shell-line-45)">--tty</text><text class="breeze-shell-r1" x="475.8" y="1118" textLength="963.8" clip-path="url(#breeze-shell-line-45)">Whether&#160;to&#160;allocate&#160;pseudo-tty&#160;when&#160;running&#160;docker&#160;command&#160;(useful&#160;for&#160;&#160;&#160;&#160;&#160;&#160;&# [...]
-</text><text class="breeze-shell-r5" x="0" y="1142.4" textLength="12.2" clip-path="url(#breeze-shell-line-46)">│</text><text class="breeze-shell-r1" x="475.8" y="1142.4" textLength="963.8" clip-path="url(#breeze-shell-line-46)">pre-commit&#160;and&#160;CI&#160;to&#160;force-enable&#160;it).&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#1 [...]
+</text><text class="breeze-shell-r5" x="0" y="1118" textLength="12.2" clip-path="url(#breeze-shell-line-45)">│</text><text class="breeze-shell-r4" x="24.4" y="1118" textLength="61" clip-path="url(#breeze-shell-line-45)">--tty</text><text class="breeze-shell-r1" x="475.8" y="1118" textLength="963.8" clip-path="url(#breeze-shell-line-45)">Whether&#160;to&#160;allocate&#160;pseudo-tty&#160;when&#160;running&#160;docker&#160;command&#160;(useful&#160;for&#160;prek&#160;and</text><text class= [...]
+</text><text class="breeze-shell-r5" x="0" y="1142.4" textLength="12.2" clip-path="url(#breeze-shell-line-46)">│</text><text class="breeze-shell-r1" x="475.8" y="1142.4" textLength="963.8" clip-path="url(#breeze-shell-line-46)">CI&#160;to&#160;force-enable&#160;it).&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#16 [...]
 </text><text class="breeze-shell-r5" x="0" y="1166.8" textLength="12.2" clip-path="url(#breeze-shell-line-47)">│</text><text class="breeze-shell-r7" x="475.8" y="1166.8" textLength="963.8" clip-path="url(#breeze-shell-line-47)">(auto&#160;|&#160;enabled&#160;|&#160;disabled)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;& [...]
 </text><text class="breeze-shell-r5" x="0" y="1191.2" textLength="12.2" clip-path="url(#breeze-shell-line-48)">│</text><text class="breeze-shell-r5" x="475.8" y="1191.2" textLength="963.8" clip-path="url(#breeze-shell-line-48)">[default:&#160;auto]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#16 [...]
 </text><text class="breeze-shell-r5" x="0" y="1215.6" textLength="1464" clip-path="url(#breeze-shell-line-49)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-shell-r1" x="1464" y="1215.6" textLength="12.2" clip-path="url(#breeze-shell-line-49)">
@@ -745,27 +748,28 @@
 </text><text class="breeze-shell-r5" x="0" y="3777.6" textLength="1464" clip-path="url(#breeze-shell-line-154)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-shell-r1" x="1464" y="3777.6" textLength="12.2" clip-path="url(#breeze-shell-line-154)">
 </text><text class="breeze-shell-r5" x="0" y="3802" textLength="24.4" clip-path="url(#breeze-shell-line-155)">╭─</text><text class="breeze-shell-r5" x="24.4" y="3802" textLength="610" clip-path="url(#breeze-shell-line-155)">&#160;Upgrading/downgrading/removing&#160;selected&#160;packages&#160;</text><text class="breeze-shell-r5" x="634.4" y="3802" textLength="805.2" clip-path="url(#breeze-shell-line-155)">──────────────────────────────────────────────────────────────────</text><text clas [...]
 </text><text class="breeze-shell-r5" x="0" y="3826.4" textLength="12.2" clip-path="url(#breeze-shell-line-156)">│</text><text class="breeze-shell-r4" x="24.4" y="3826.4" textLength="170.8" clip-path="url(#breeze-shell-line-156)">--upgrade-boto</text><text class="breeze-shell-r1" x="341.6" y="3826.4" textLength="866.2" clip-path="url(#breeze-shell-line-156)">Remove&#160;aiobotocore&#160;and&#160;upgrade&#160;botocore&#160;and&#160;boto&#160;to&#160;the&#160;latest&#160;version.</text><tex [...]
-</text><text class="breeze-shell-r5" x="0" y="3850.8" textLength="12.2" clip-path="url(#breeze-shell-line-157)">│</text><text class="breeze-shell-r4" x="24.4" y="3850.8" textLength="268.4" clip-path="url(#breeze-shell-line-157)">--downgrade-sqlalchemy</text><text class="breeze-shell-r1" x="341.6" y="3850.8" textLength="610" clip-path="url(#breeze-shell-line-157)">Downgrade&#160;SQLAlchemy&#160;to&#160;minimum&#160;supported&#160;version.</text><text class="breeze-shell-r5" x="1451.8" y=" [...]
-</text><text class="breeze-shell-r5" x="0" y="3875.2" textLength="12.2" clip-path="url(#breeze-shell-line-158)">│</text><text class="breeze-shell-r4" x="24.4" y="3875.2" textLength="244" clip-path="url(#breeze-shell-line-158)">--downgrade-pendulum</text><text class="breeze-shell-r1" x="341.6" y="3875.2" textLength="585.6" clip-path="url(#breeze-shell-line-158)">Downgrade&#160;Pendulum&#160;to&#160;minimum&#160;supported&#160;version.</text><text class="breeze-shell-r5" x="1451.8" y="3875 [...]
-</text><text class="breeze-shell-r5" x="0" y="3899.6" textLength="1464" clip-path="url(#breeze-shell-line-159)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-shell-r1" x="1464" y="3899.6" textLength="12.2" clip-path="url(#breeze-shell-line-159)">
-</text><text class="breeze-shell-r5" x="0" y="3924" textLength="24.4" clip-path="url(#breeze-shell-line-160)">╭─</text><text class="breeze-shell-r5" x="24.4" y="3924" textLength="183" clip-path="url(#breeze-shell-line-160)">&#160;DB&#160;test&#160;flags&#160;</text><text class="breeze-shell-r5" x="207.4" y="3924" textLength="1232.2" clip-path="url(#breeze-shell-line-160)">─────────────────────────────────────────────────────────────────────────────────────────────────────</text><text cla [...]
-</text><text class="breeze-shell-r5" x="0" y="3948.4" textLength="12.2" clip-path="url(#breeze-shell-line-161)">│</text><text class="breeze-shell-r4" x="24.4" y="3948.4" textLength="231.8" clip-path="url(#breeze-shell-line-161)">--run-db-tests-only</text><text class="breeze-shell-r1" x="305" y="3948.4" textLength="475.8" clip-path="url(#breeze-shell-line-161)">Only&#160;runs&#160;tests&#160;that&#160;require&#160;a&#160;database</text><text class="breeze-shell-r5" x="1451.8" y="3948.4" t [...]
-</text><text class="breeze-shell-r5" x="0" y="3972.8" textLength="12.2" clip-path="url(#breeze-shell-line-162)">│</text><text class="breeze-shell-r4" x="24.4" y="3972.8" textLength="183" clip-path="url(#breeze-shell-line-162)">--skip-db-tests</text><text class="breeze-shell-r1" x="305" y="3972.8" textLength="414.8" clip-path="url(#breeze-shell-line-162)">Skip&#160;tests&#160;that&#160;require&#160;a&#160;database</text><text class="breeze-shell-r5" x="1451.8" y="3972.8" textLength="12.2" [...]
-</text><text class="breeze-shell-r5" x="0" y="3997.2" textLength="1464" clip-path="url(#breeze-shell-line-163)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-shell-r1" x="1464" y="3997.2" textLength="12.2" clip-path="url(#breeze-shell-line-163)">
-</text><text class="breeze-shell-r5" x="0" y="4021.6" textLength="24.4" clip-path="url(#breeze-shell-line-164)">╭─</text><text class="breeze-shell-r5" x="24.4" y="4021.6" textLength="183" clip-path="url(#breeze-shell-line-164)">&#160;Other&#160;options&#160;</text><text class="breeze-shell-r5" x="207.4" y="4021.6" textLength="1232.2" clip-path="url(#breeze-shell-line-164)">─────────────────────────────────────────────────────────────────────────────────────────────────────</text><text cl [...]
-</text><text class="breeze-shell-r5" x="0" y="4046" textLength="12.2" clip-path="url(#breeze-shell-line-165)">│</text><text class="breeze-shell-r4" x="24.4" y="4046" textLength="256.2" clip-path="url(#breeze-shell-line-165)">--forward-credentials</text><text class="breeze-shell-r6" x="305" y="4046" textLength="24.4" clip-path="url(#breeze-shell-line-165)">-f</text><text class="breeze-shell-r1" x="353.8" y="4046" textLength="634.4" clip-path="url(#breeze-shell-line-165)">Forward&#160;loca [...]
-</text><text class="breeze-shell-r5" x="0" y="4070.4" textLength="12.2" clip-path="url(#breeze-shell-line-166)">│</text><text class="breeze-shell-r4" x="24.4" y="4070.4" textLength="122" clip-path="url(#breeze-shell-line-166)">--max-time</text><text class="breeze-shell-r1" x="353.8" y="4070.4" textLength="1049.2" clip-path="url(#breeze-shell-line-166)">Maximum&#160;time&#160;that&#160;the&#160;command&#160;should&#160;take&#160;-&#160;if&#160;it&#160;takes&#160;longer,&#160;the&#160;comm [...]
-</text><text class="breeze-shell-r5" x="0" y="4094.8" textLength="12.2" clip-path="url(#breeze-shell-line-167)">│</text><text class="breeze-shell-r7" x="353.8" y="4094.8" textLength="1049.2" clip-path="url(#breeze-shell-line-167)">(INTEGER&#160;RANGE)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;& [...]
-</text><text class="breeze-shell-r5" x="0" y="4119.2" textLength="12.2" clip-path="url(#breeze-shell-line-168)">│</text><text class="breeze-shell-r4" x="24.4" y="4119.2" textLength="219.6" clip-path="url(#breeze-shell-line-168)">--verbose-commands</text><text class="breeze-shell-r1" x="353.8" y="4119.2" textLength="414.8" clip-path="url(#breeze-shell-line-168)">Show&#160;details&#160;of&#160;commands&#160;executed.</text><text class="breeze-shell-r5" x="1451.8" y="4119.2" textLength="12. [...]
-</text><text class="breeze-shell-r5" x="0" y="4143.6" textLength="12.2" clip-path="url(#breeze-shell-line-169)">│</text><text class="breeze-shell-r4" x="24.4" y="4143.6" textLength="244" clip-path="url(#breeze-shell-line-169)">--keep-env-variables</text><text class="breeze-shell-r1" x="353.8" y="4143.6" textLength="1000.4" clip-path="url(#breeze-shell-line-169)">Do&#160;not&#160;clear&#160;environment&#160;variables&#160;that&#160;might&#160;have&#160;side&#160;effect&#160;while&#160;run [...]
-</text><text class="breeze-shell-r5" x="0" y="4168" textLength="12.2" clip-path="url(#breeze-shell-line-170)">│</text><text class="breeze-shell-r4" x="24.4" y="4168" textLength="183" clip-path="url(#breeze-shell-line-170)">--no-db-cleanup</text><text class="breeze-shell-r1" x="353.8" y="4168" textLength="597.8" clip-path="url(#breeze-shell-line-170)">Do&#160;not&#160;clear&#160;the&#160;database&#160;before&#160;each&#160;test&#160;module</text><text class="breeze-shell-r5" x="1451.8" y= [...]
-</text><text class="breeze-shell-r5" x="0" y="4192.4" textLength="1464" clip-path="url(#breeze-shell-line-171)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-shell-r1" x="1464" y="4192.4" textLength="12.2" clip-path="url(#breeze-shell-line-171)">
-</text><text class="breeze-shell-r5" x="0" y="4216.8" textLength="24.4" clip-path="url(#breeze-shell-line-172)">╭─</text><text class="breeze-shell-r5" x="24.4" y="4216.8" textLength="195.2" clip-path="url(#breeze-shell-line-172)">&#160;Common&#160;options&#160;</text><text class="breeze-shell-r5" x="219.6" y="4216.8" textLength="1220" clip-path="url(#breeze-shell-line-172)">────────────────────────────────────────────────────────────────────────────────────────────────────</text><text cl [...]
-</text><text class="breeze-shell-r5" x="0" y="4241.2" textLength="12.2" clip-path="url(#breeze-shell-line-173)">│</text><text class="breeze-shell-r4" x="24.4" y="4241.2" textLength="97.6" clip-path="url(#breeze-shell-line-173)">--answer</text><text class="breeze-shell-r6" x="158.6" y="4241.2" textLength="24.4" clip-path="url(#breeze-shell-line-173)">-a</text><text class="breeze-shell-r1" x="207.4" y="4241.2" textLength="317.2" clip-path="url(#breeze-shell-line-173)">Force&#160;answer&#16 [...]
-</text><text class="breeze-shell-r5" x="0" y="4265.6" textLength="12.2" clip-path="url(#breeze-shell-line-174)">│</text><text class="breeze-shell-r4" x="24.4" y="4265.6" textLength="109.8" clip-path="url(#breeze-shell-line-174)">--dry-run</text><text class="breeze-shell-r6" x="158.6" y="4265.6" textLength="24.4" clip-path="url(#breeze-shell-line-174)">-D</text><text class="breeze-shell-r1" x="207.4" y="4265.6" textLength="719.8" clip-path="url(#breeze-shell-line-174)">If&#160;dry-run&#16 [...]
-</text><text class="breeze-shell-r5" x="0" y="4290" textLength="12.2" clip-path="url(#breeze-shell-line-175)">│</text><text class="breeze-shell-r4" x="24.4" y="4290" textLength="109.8" clip-path="url(#breeze-shell-line-175)">--verbose</text><text class="breeze-shell-r6" x="158.6" y="4290" textLength="24.4" clip-path="url(#breeze-shell-line-175)">-v</text><text class="breeze-shell-r1" x="207.4" y="4290" textLength="585.6" clip-path="url(#breeze-shell-line-175)">Print&#160;verbose&#160;inf [...]
-</text><text class="breeze-shell-r5" x="0" y="4314.4" textLength="12.2" clip-path="url(#breeze-shell-line-176)">│</text><text class="breeze-shell-r4" x="24.4" y="4314.4" textLength="73.2" clip-path="url(#breeze-shell-line-176)">--help</text><text class="breeze-shell-r6" x="158.6" y="4314.4" textLength="24.4" clip-path="url(#breeze-shell-line-176)">-h</text><text class="breeze-shell-r1" x="207.4" y="4314.4" textLength="329.4" clip-path="url(#breeze-shell-line-176)">Show&#160;this&#160;mes [...]
-</text><text class="breeze-shell-r5" x="0" y="4338.8" textLength="1464" clip-path="url(#breeze-shell-line-177)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-shell-r1" x="1464" y="4338.8" textLength="12.2" clip-path="url(#breeze-shell-line-177)">
+</text><text class="breeze-shell-r5" x="0" y="3850.8" textLength="12.2" clip-path="url(#breeze-shell-line-157)">│</text><text class="breeze-shell-r4" x="24.4" y="3850.8" textLength="244" clip-path="url(#breeze-shell-line-157)">--upgrade-sqlalchemy</text><text class="breeze-shell-r1" x="341.6" y="3850.8" textLength="500.2" clip-path="url(#breeze-shell-line-157)">Upgrade&#160;SQLAlchemy&#160;to&#160;the&#160;latest&#160;version.</text><text class="breeze-shell-r5" x="1451.8" y="3850.8" tex [...]
+</text><text class="breeze-shell-r5" x="0" y="3875.2" textLength="12.2" clip-path="url(#breeze-shell-line-158)">│</text><text class="breeze-shell-r4" x="24.4" y="3875.2" textLength="268.4" clip-path="url(#breeze-shell-line-158)">--downgrade-sqlalchemy</text><text class="breeze-shell-r1" x="341.6" y="3875.2" textLength="610" clip-path="url(#breeze-shell-line-158)">Downgrade&#160;SQLAlchemy&#160;to&#160;minimum&#160;supported&#160;version.</text><text class="breeze-shell-r5" x="1451.8" y=" [...]
+</text><text class="breeze-shell-r5" x="0" y="3899.6" textLength="12.2" clip-path="url(#breeze-shell-line-159)">│</text><text class="breeze-shell-r4" x="24.4" y="3899.6" textLength="244" clip-path="url(#breeze-shell-line-159)">--downgrade-pendulum</text><text class="breeze-shell-r1" x="341.6" y="3899.6" textLength="585.6" clip-path="url(#breeze-shell-line-159)">Downgrade&#160;Pendulum&#160;to&#160;minimum&#160;supported&#160;version.</text><text class="breeze-shell-r5" x="1451.8" y="3899 [...]
+</text><text class="breeze-shell-r5" x="0" y="3924" textLength="1464" clip-path="url(#breeze-shell-line-160)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-shell-r1" x="1464" y="3924" textLength="12.2" clip-path="url(#breeze-shell-line-160)">
+</text><text class="breeze-shell-r5" x="0" y="3948.4" textLength="24.4" clip-path="url(#breeze-shell-line-161)">╭─</text><text class="breeze-shell-r5" x="24.4" y="3948.4" textLength="183" clip-path="url(#breeze-shell-line-161)">&#160;DB&#160;test&#160;flags&#160;</text><text class="breeze-shell-r5" x="207.4" y="3948.4" textLength="1232.2" clip-path="url(#breeze-shell-line-161)">─────────────────────────────────────────────────────────────────────────────────────────────────────</text><te [...]
+</text><text class="breeze-shell-r5" x="0" y="3972.8" textLength="12.2" clip-path="url(#breeze-shell-line-162)">│</text><text class="breeze-shell-r4" x="24.4" y="3972.8" textLength="231.8" clip-path="url(#breeze-shell-line-162)">--run-db-tests-only</text><text class="breeze-shell-r1" x="305" y="3972.8" textLength="475.8" clip-path="url(#breeze-shell-line-162)">Only&#160;runs&#160;tests&#160;that&#160;require&#160;a&#160;database</text><text class="breeze-shell-r5" x="1451.8" y="3972.8" t [...]
+</text><text class="breeze-shell-r5" x="0" y="3997.2" textLength="12.2" clip-path="url(#breeze-shell-line-163)">│</text><text class="breeze-shell-r4" x="24.4" y="3997.2" textLength="183" clip-path="url(#breeze-shell-line-163)">--skip-db-tests</text><text class="breeze-shell-r1" x="305" y="3997.2" textLength="414.8" clip-path="url(#breeze-shell-line-163)">Skip&#160;tests&#160;that&#160;require&#160;a&#160;database</text><text class="breeze-shell-r5" x="1451.8" y="3997.2" textLength="12.2" [...]
+</text><text class="breeze-shell-r5" x="0" y="4021.6" textLength="1464" clip-path="url(#breeze-shell-line-164)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-shell-r1" x="1464" y="4021.6" textLength="12.2" clip-path="url(#breeze-shell-line-164)">
+</text><text class="breeze-shell-r5" x="0" y="4046" textLength="24.4" clip-path="url(#breeze-shell-line-165)">╭─</text><text class="breeze-shell-r5" x="24.4" y="4046" textLength="183" clip-path="url(#breeze-shell-line-165)">&#160;Other&#160;options&#160;</text><text class="breeze-shell-r5" x="207.4" y="4046" textLength="1232.2" clip-path="url(#breeze-shell-line-165)">─────────────────────────────────────────────────────────────────────────────────────────────────────</text><text class="b [...]
+</text><text class="breeze-shell-r5" x="0" y="4070.4" textLength="12.2" clip-path="url(#breeze-shell-line-166)">│</text><text class="breeze-shell-r4" x="24.4" y="4070.4" textLength="256.2" clip-path="url(#breeze-shell-line-166)">--forward-credentials</text><text class="breeze-shell-r6" x="305" y="4070.4" textLength="24.4" clip-path="url(#breeze-shell-line-166)">-f</text><text class="breeze-shell-r1" x="353.8" y="4070.4" textLength="634.4" clip-path="url(#breeze-shell-line-166)">Forward&# [...]
+</text><text class="breeze-shell-r5" x="0" y="4094.8" textLength="12.2" clip-path="url(#breeze-shell-line-167)">│</text><text class="breeze-shell-r4" x="24.4" y="4094.8" textLength="122" clip-path="url(#breeze-shell-line-167)">--max-time</text><text class="breeze-shell-r1" x="353.8" y="4094.8" textLength="1049.2" clip-path="url(#breeze-shell-line-167)">Maximum&#160;time&#160;that&#160;the&#160;command&#160;should&#160;take&#160;-&#160;if&#160;it&#160;takes&#160;longer,&#160;the&#160;comm [...]
+</text><text class="breeze-shell-r5" x="0" y="4119.2" textLength="12.2" clip-path="url(#breeze-shell-line-168)">│</text><text class="breeze-shell-r7" x="353.8" y="4119.2" textLength="1049.2" clip-path="url(#breeze-shell-line-168)">(INTEGER&#160;RANGE)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;& [...]
+</text><text class="breeze-shell-r5" x="0" y="4143.6" textLength="12.2" clip-path="url(#breeze-shell-line-169)">│</text><text class="breeze-shell-r4" x="24.4" y="4143.6" textLength="219.6" clip-path="url(#breeze-shell-line-169)">--verbose-commands</text><text class="breeze-shell-r1" x="353.8" y="4143.6" textLength="414.8" clip-path="url(#breeze-shell-line-169)">Show&#160;details&#160;of&#160;commands&#160;executed.</text><text class="breeze-shell-r5" x="1451.8" y="4143.6" textLength="12. [...]
+</text><text class="breeze-shell-r5" x="0" y="4168" textLength="12.2" clip-path="url(#breeze-shell-line-170)">│</text><text class="breeze-shell-r4" x="24.4" y="4168" textLength="244" clip-path="url(#breeze-shell-line-170)">--keep-env-variables</text><text class="breeze-shell-r1" x="353.8" y="4168" textLength="1000.4" clip-path="url(#breeze-shell-line-170)">Do&#160;not&#160;clear&#160;environment&#160;variables&#160;that&#160;might&#160;have&#160;side&#160;effect&#160;while&#160;running&# [...]
+</text><text class="breeze-shell-r5" x="0" y="4192.4" textLength="12.2" clip-path="url(#breeze-shell-line-171)">│</text><text class="breeze-shell-r4" x="24.4" y="4192.4" textLength="183" clip-path="url(#breeze-shell-line-171)">--no-db-cleanup</text><text class="breeze-shell-r1" x="353.8" y="4192.4" textLength="597.8" clip-path="url(#breeze-shell-line-171)">Do&#160;not&#160;clear&#160;the&#160;database&#160;before&#160;each&#160;test&#160;module</text><text class="breeze-shell-r5" x="1451 [...]
+</text><text class="breeze-shell-r5" x="0" y="4216.8" textLength="1464" clip-path="url(#breeze-shell-line-172)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-shell-r1" x="1464" y="4216.8" textLength="12.2" clip-path="url(#breeze-shell-line-172)">
+</text><text class="breeze-shell-r5" x="0" y="4241.2" textLength="24.4" clip-path="url(#breeze-shell-line-173)">╭─</text><text class="breeze-shell-r5" x="24.4" y="4241.2" textLength="195.2" clip-path="url(#breeze-shell-line-173)">&#160;Common&#160;options&#160;</text><text class="breeze-shell-r5" x="219.6" y="4241.2" textLength="1220" clip-path="url(#breeze-shell-line-173)">────────────────────────────────────────────────────────────────────────────────────────────────────</text><text cl [...]
+</text><text class="breeze-shell-r5" x="0" y="4265.6" textLength="12.2" clip-path="url(#breeze-shell-line-174)">│</text><text class="breeze-shell-r4" x="24.4" y="4265.6" textLength="97.6" clip-path="url(#breeze-shell-line-174)">--answer</text><text class="breeze-shell-r6" x="158.6" y="4265.6" textLength="24.4" clip-path="url(#breeze-shell-line-174)">-a</text><text class="breeze-shell-r1" x="207.4" y="4265.6" textLength="317.2" clip-path="url(#breeze-shell-line-174)">Force&#160;answer&#16 [...]
+</text><text class="breeze-shell-r5" x="0" y="4290" textLength="12.2" clip-path="url(#breeze-shell-line-175)">│</text><text class="breeze-shell-r4" x="24.4" y="4290" textLength="109.8" clip-path="url(#breeze-shell-line-175)">--dry-run</text><text class="breeze-shell-r6" x="158.6" y="4290" textLength="24.4" clip-path="url(#breeze-shell-line-175)">-D</text><text class="breeze-shell-r1" x="207.4" y="4290" textLength="719.8" clip-path="url(#breeze-shell-line-175)">If&#160;dry-run&#160;is&#16 [...]
+</text><text class="breeze-shell-r5" x="0" y="4314.4" textLength="12.2" clip-path="url(#breeze-shell-line-176)">│</text><text class="breeze-shell-r4" x="24.4" y="4314.4" textLength="109.8" clip-path="url(#breeze-shell-line-176)">--verbose</text><text class="breeze-shell-r6" x="158.6" y="4314.4" textLength="24.4" clip-path="url(#breeze-shell-line-176)">-v</text><text class="breeze-shell-r1" x="207.4" y="4314.4" textLength="585.6" clip-path="url(#breeze-shell-line-176)">Print&#160;verbose& [...]
+</text><text class="breeze-shell-r5" x="0" y="4338.8" textLength="12.2" clip-path="url(#breeze-shell-line-177)">│</text><text class="breeze-shell-r4" x="24.4" y="4338.8" textLength="73.2" clip-path="url(#breeze-shell-line-177)">--help</text><text class="breeze-shell-r6" x="158.6" y="4338.8" textLength="24.4" clip-path="url(#breeze-shell-line-177)">-h</text><text class="breeze-shell-r1" x="207.4" y="4338.8" textLength="329.4" clip-path="url(#breeze-shell-line-177)">Show&#160;this&#160;mes [...]
+</text><text class="breeze-shell-r5" x="0" y="4363.2" textLength="1464" clip-path="url(#breeze-shell-line-178)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-shell-r1" x="1464" y="4363.2" textLength="12.2" clip-path="url(#breeze-shell-line-178)">
 </text>
     </g>
     </g>
diff --git a/dev/breeze/doc/images/output_shell.txt b/dev/breeze/doc/images/output_shell.txt
index 49a4c0104fa..f34a8d6c128 100644
--- a/dev/breeze/doc/images/output_shell.txt
+++ b/dev/breeze/doc/images/output_shell.txt
@@ -1 +1 @@
-40b11309f7c2d8a67de9bacafc961c78
+196b388dd74eb63488c72c6a74fb8fa2
diff --git a/dev/breeze/doc/images/output_start-airflow.svg b/dev/breeze/doc/images/output_start-airflow.svg
index 7132ce59637..297fe9d5339 100644
--- a/dev/breeze/doc/images/output_start-airflow.svg
+++ b/dev/breeze/doc/images/output_start-airflow.svg
@@ -536,7 +536,7 @@
 </text><text class="breeze-start-airflow-r5" x="0" y="800.8" textLength="12.2" clip-path="url(#breeze-start-airflow-line-32)">│</text><text class="breeze-start-airflow-r4" x="24.4" y="800.8" textLength="170.8" clip-path="url(#breeze-start-airflow-line-32)">--project-name</text><text class="breeze-start-airflow-r1" x="390.4" y="800.8" textLength="1049.2" clip-path="url(#breeze-start-airflow-line-32)">Name&#160;of&#160;the&#160;docker-compose&#160;project&#160;to&#160;bring&#160;down.&#160 [...]
 </text><text class="breeze-start-airflow-r5" x="0" y="825.2" textLength="12.2" clip-path="url(#breeze-start-airflow-line-33)">│</text><text class="breeze-start-airflow-r1" x="390.4" y="825.2" textLength="597.8" clip-path="url(#breeze-start-airflow-line-33)">breeze&#160;project&#160;name&#160;and&#160;you&#160;can&#160;use&#160;`breeze&#160;down&#160;</text><text class="breeze-start-airflow-r4" x="988.2" y="825.2" textLength="170.8" clip-path="url(#breeze-start-airflow-line-33)">--project [...]
 </text><text class="breeze-start-airflow-r5" x="0" y="849.6" textLength="12.2" clip-path="url(#breeze-start-airflow-line-34)">│</text><text class="breeze-start-airflow-r1" x="390.4" y="849.6" textLength="1049.2" clip-path="url(#breeze-start-airflow-line-34)">stop&#160;all&#160;containers&#160;belonging&#160;to&#160;it.&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#16 [...]
-</text><text class="breeze-start-airflow-r5" x="0" y="874" textLength="12.2" clip-path="url(#breeze-start-airflow-line-35)">│</text><text class="breeze-start-airflow-r7" x="390.4" y="874" textLength="1049.2" clip-path="url(#breeze-start-airflow-line-35)">(breeze&#160;|&#160;pre-commit&#160;|&#160;docker-compose)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160 [...]
+</text><text class="breeze-start-airflow-r5" x="0" y="874" textLength="12.2" clip-path="url(#breeze-start-airflow-line-35)">│</text><text class="breeze-start-airflow-r7" x="390.4" y="874" textLength="1049.2" clip-path="url(#breeze-start-airflow-line-35)">(breeze&#160;|&#160;prek&#160;|&#160;docker-compose)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160 [...]
 </text><text class="breeze-start-airflow-r5" x="0" y="898.4" textLength="12.2" clip-path="url(#breeze-start-airflow-line-36)">│</text><text class="breeze-start-airflow-r5" x="390.4" y="898.4" textLength="1049.2" clip-path="url(#breeze-start-airflow-line-36)">[default:&#160;breeze]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;& [...]
 </text><text class="breeze-start-airflow-r5" x="0" y="922.8" textLength="12.2" clip-path="url(#breeze-start-airflow-line-37)">│</text><text class="breeze-start-airflow-r4" x="24.4" y="922.8" textLength="109.8" clip-path="url(#breeze-start-airflow-line-37)">--restart</text><text class="breeze-start-airflow-r1" x="134.2" y="922.8" textLength="12.2" clip-path="url(#breeze-start-airflow-line-37)">,</text><text class="breeze-start-airflow-r4" x="146.4" y="922.8" textLength="195.2" clip-path=" [...]
 </text><text class="breeze-start-airflow-r5" x="0" y="947.2" textLength="12.2" clip-path="url(#breeze-start-airflow-line-38)">│</text><text class="breeze-start-airflow-r4" x="24.4" y="947.2" textLength="158.6" clip-path="url(#breeze-start-airflow-line-38)">--docker-host</text><text class="breeze-start-airflow-r1" x="390.4" y="947.2" textLength="915" clip-path="url(#breeze-start-airflow-line-38)">Optional&#160;-&#160;docker&#160;host&#160;to&#160;use&#160;when&#160;running&#160;docker&#16 [...]
diff --git a/dev/breeze/doc/images/output_start-airflow.txt b/dev/breeze/doc/images/output_start-airflow.txt
index 106688cafcd..18f760902c1 100644
--- a/dev/breeze/doc/images/output_start-airflow.txt
+++ b/dev/breeze/doc/images/output_start-airflow.txt
@@ -1 +1 @@
-80d95cab6af3617620014698aa1275ee
+1502ef5511225d0d4b61d6820196770a
diff --git a/dev/breeze/doc/images/output_static-checks.svg b/dev/breeze/doc/images/output_static-checks.svg
deleted file mode 100644
index bcfe7360743..00000000000
--- a/dev/breeze/doc/images/output_static-checks.svg
+++ /dev/null
@@ -1,412 +0,0 @@
-<svg class="rich-terminal" viewBox="0 0 1482 2197.2" xmlns="http://www.w3.org/2000/svg">
-    <!-- Generated with Rich https://www.textualize.io -->
-    <style>
-
-    @font-face {
-        font-family: "Fira Code";
-        src: local("FiraCode-Regular"),
-                url("https://cdnjs.cloudflare.com/ajax/libs/firacode/6.2.0/woff2/FiraCode-Regular.woff2") format("woff2"),
-                url("https://cdnjs.cloudflare.com/ajax/libs/firacode/6.2.0/woff/FiraCode-Regular.woff") format("woff");
-        font-style: normal;
-        font-weight: 400;
-    }
-    @font-face {
-        font-family: "Fira Code";
-        src: local("FiraCode-Bold"),
-                url("https://cdnjs.cloudflare.com/ajax/libs/firacode/6.2.0/woff2/FiraCode-Bold.woff2") format("woff2"),
-                url("https://cdnjs.cloudflare.com/ajax/libs/firacode/6.2.0/woff/FiraCode-Bold.woff") format("woff");
-        font-style: bold;
-        font-weight: 700;
-    }
-
-    .breeze-static-checks-matrix {
-        font-family: Fira Code, monospace;
-        font-size: 20px;
-        line-height: 24.4px;
-        font-variant-east-asian: full-width;
-    }
-
-    .breeze-static-checks-title {
-        font-size: 18px;
-        font-weight: bold;
-        font-family: arial;
-    }
-
-    .breeze-static-checks-r1 { fill: #c5c8c6 }
-.breeze-static-checks-r2 { fill: #d0b344 }
-.breeze-static-checks-r3 { fill: #c5c8c6;font-weight: bold }
-.breeze-static-checks-r4 { fill: #68a0b3;font-weight: bold }
-.breeze-static-checks-r5 { fill: #868887 }
-.breeze-static-checks-r6 { fill: #98a84b;font-weight: bold }
-.breeze-static-checks-r7 { fill: #8d7b39 }
-    </style>
-
-    <defs>
-    <clipPath id="breeze-static-checks-clip-terminal">
-      <rect x="0" y="0" width="1463.0" height="2146.2" />
-    </clipPath>
-    <clipPath id="breeze-static-checks-line-0">
-    <rect x="0" y="1.5" width="1464" height="24.65"/>
-            </clipPath>
-<clipPath id="breeze-static-checks-line-1">
-    <rect x="0" y="25.9" width="1464" height="24.65"/>
-            </clipPath>
-<clipPath id="breeze-static-checks-line-2">
-    <rect x="0" y="50.3" width="1464" height="24.65"/>
-            </clipPath>
-<clipPath id="breeze-static-checks-line-3">
-    <rect x="0" y="74.7" width="1464" height="24.65"/>
-            </clipPath>
-<clipPath id="breeze-static-checks-line-4">
-    <rect x="0" y="99.1" width="1464" height="24.65"/>
-            </clipPath>
-<clipPath id="breeze-static-checks-line-5">
-    <rect x="0" y="123.5" width="1464" height="24.65"/>
-            </clipPath>
-<clipPath id="breeze-static-checks-line-6">
-    <rect x="0" y="147.9" width="1464" height="24.65"/>
-            </clipPath>
-<clipPath id="breeze-static-checks-line-7">
-    <rect x="0" y="172.3" width="1464" height="24.65"/>
-            </clipPath>
-<clipPath id="breeze-static-checks-line-8">
-    <rect x="0" y="196.7" width="1464" height="24.65"/>
-            </clipPath>
-<clipPath id="breeze-static-checks-line-9">
-    <rect x="0" y="221.1" width="1464" height="24.65"/>
-            </clipPath>
-<clipPath id="breeze-static-checks-line-10">
-    <rect x="0" y="245.5" width="1464" height="24.65"/>
-            </clipPath>
-<clipPath id="breeze-static-checks-line-11">
-    <rect x="0" y="269.9" width="1464" height="24.65"/>
-            </clipPath>
-<clipPath id="breeze-static-checks-line-12">
-    <rect x="0" y="294.3" width="1464" height="24.65"/>
-            </clipPath>
-<clipPath id="breeze-static-checks-line-13">
-    <rect x="0" y="318.7" width="1464" height="24.65"/>
-            </clipPath>
-<clipPath id="breeze-static-checks-line-14">
-    <rect x="0" y="343.1" width="1464" height="24.65"/>
-            </clipPath>
-<clipPath id="breeze-static-checks-line-15">
-    <rect x="0" y="367.5" width="1464" height="24.65"/>
-            </clipPath>
-<clipPath id="breeze-static-checks-line-16">
-    <rect x="0" y="391.9" width="1464" height="24.65"/>
-            </clipPath>
-<clipPath id="breeze-static-checks-line-17">
-    <rect x="0" y="416.3" width="1464" height="24.65"/>
-            </clipPath>
-<clipPath id="breeze-static-checks-line-18">
-    <rect x="0" y="440.7" width="1464" height="24.65"/>
-            </clipPath>
-<clipPath id="breeze-static-checks-line-19">
-    <rect x="0" y="465.1" width="1464" height="24.65"/>
-            </clipPath>
-<clipPath id="breeze-static-checks-line-20">
-    <rect x="0" y="489.5" width="1464" height="24.65"/>
-            </clipPath>
-<clipPath id="breeze-static-checks-line-21">
-    <rect x="0" y="513.9" width="1464" height="24.65"/>
-            </clipPath>
-<clipPath id="breeze-static-checks-line-22">
-    <rect x="0" y="538.3" width="1464" height="24.65"/>
-            </clipPath>
-<clipPath id="breeze-static-checks-line-23">
-    <rect x="0" y="562.7" width="1464" height="24.65"/>
-            </clipPath>
-<clipPath id="breeze-static-checks-line-24">
-    <rect x="0" y="587.1" width="1464" height="24.65"/>
-            </clipPath>
-<clipPath id="breeze-static-checks-line-25">
-    <rect x="0" y="611.5" width="1464" height="24.65"/>
-            </clipPath>
-<clipPath id="breeze-static-checks-line-26">
-    <rect x="0" y="635.9" width="1464" height="24.65"/>
-            </clipPath>
-<clipPath id="breeze-static-checks-line-27">
-    <rect x="0" y="660.3" width="1464" height="24.65"/>
-            </clipPath>
-<clipPath id="breeze-static-checks-line-28">
-    <rect x="0" y="684.7" width="1464" height="24.65"/>
-            </clipPath>
-<clipPath id="breeze-static-checks-line-29">
-    <rect x="0" y="709.1" width="1464" height="24.65"/>
-            </clipPath>
-<clipPath id="breeze-static-checks-line-30">
-    <rect x="0" y="733.5" width="1464" height="24.65"/>
-            </clipPath>
-<clipPath id="breeze-static-checks-line-31">
-    <rect x="0" y="757.9" width="1464" height="24.65"/>
-            </clipPath>
-<clipPath id="breeze-static-checks-line-32">
-    <rect x="0" y="782.3" width="1464" height="24.65"/>
-            </clipPath>
-<clipPath id="breeze-static-checks-line-33">
-    <rect x="0" y="806.7" width="1464" height="24.65"/>
-            </clipPath>
-<clipPath id="breeze-static-checks-line-34">
-    <rect x="0" y="831.1" width="1464" height="24.65"/>
-            </clipPath>
-<clipPath id="breeze-static-checks-line-35">
-    <rect x="0" y="855.5" width="1464" height="24.65"/>
-            </clipPath>
-<clipPath id="breeze-static-checks-line-36">
-    <rect x="0" y="879.9" width="1464" height="24.65"/>
-            </clipPath>
-<clipPath id="breeze-static-checks-line-37">
-    <rect x="0" y="904.3" width="1464" height="24.65"/>
-            </clipPath>
-<clipPath id="breeze-static-checks-line-38">
-    <rect x="0" y="928.7" width="1464" height="24.65"/>
-            </clipPath>
-<clipPath id="breeze-static-checks-line-39">
-    <rect x="0" y="953.1" width="1464" height="24.65"/>
-            </clipPath>
-<clipPath id="breeze-static-checks-line-40">
-    <rect x="0" y="977.5" width="1464" height="24.65"/>
-            </clipPath>
-<clipPath id="breeze-static-checks-line-41">
-    <rect x="0" y="1001.9" width="1464" height="24.65"/>
-            </clipPath>
-<clipPath id="breeze-static-checks-line-42">
-    <rect x="0" y="1026.3" width="1464" height="24.65"/>
-            </clipPath>
-<clipPath id="breeze-static-checks-line-43">
-    <rect x="0" y="1050.7" width="1464" height="24.65"/>
-            </clipPath>
-<clipPath id="breeze-static-checks-line-44">
-    <rect x="0" y="1075.1" width="1464" height="24.65"/>
-            </clipPath>
-<clipPath id="breeze-static-checks-line-45">
-    <rect x="0" y="1099.5" width="1464" height="24.65"/>
-            </clipPath>
-<clipPath id="breeze-static-checks-line-46">
-    <rect x="0" y="1123.9" width="1464" height="24.65"/>
-            </clipPath>
-<clipPath id="breeze-static-checks-line-47">
-    <rect x="0" y="1148.3" width="1464" height="24.65"/>
-            </clipPath>
-<clipPath id="breeze-static-checks-line-48">
-    <rect x="0" y="1172.7" width="1464" height="24.65"/>
-            </clipPath>
-<clipPath id="breeze-static-checks-line-49">
-    <rect x="0" y="1197.1" width="1464" height="24.65"/>
-            </clipPath>
-<clipPath id="breeze-static-checks-line-50">
-    <rect x="0" y="1221.5" width="1464" height="24.65"/>
-            </clipPath>
-<clipPath id="breeze-static-checks-line-51">
-    <rect x="0" y="1245.9" width="1464" height="24.65"/>
-            </clipPath>
-<clipPath id="breeze-static-checks-line-52">
-    <rect x="0" y="1270.3" width="1464" height="24.65"/>
-            </clipPath>
-<clipPath id="breeze-static-checks-line-53">
-    <rect x="0" y="1294.7" width="1464" height="24.65"/>
-            </clipPath>
-<clipPath id="breeze-static-checks-line-54">
-    <rect x="0" y="1319.1" width="1464" height="24.65"/>
-            </clipPath>
-<clipPath id="breeze-static-checks-line-55">
-    <rect x="0" y="1343.5" width="1464" height="24.65"/>
-            </clipPath>
-<clipPath id="breeze-static-checks-line-56">
-    <rect x="0" y="1367.9" width="1464" height="24.65"/>
-            </clipPath>
-<clipPath id="breeze-static-checks-line-57">
-    <rect x="0" y="1392.3" width="1464" height="24.65"/>
-            </clipPath>
-<clipPath id="breeze-static-checks-line-58">
-    <rect x="0" y="1416.7" width="1464" height="24.65"/>
-            </clipPath>
-<clipPath id="breeze-static-checks-line-59">
-    <rect x="0" y="1441.1" width="1464" height="24.65"/>
-            </clipPath>
-<clipPath id="breeze-static-checks-line-60">
-    <rect x="0" y="1465.5" width="1464" height="24.65"/>
-            </clipPath>
-<clipPath id="breeze-static-checks-line-61">
-    <rect x="0" y="1489.9" width="1464" height="24.65"/>
-            </clipPath>
-<clipPath id="breeze-static-checks-line-62">
-    <rect x="0" y="1514.3" width="1464" height="24.65"/>
-            </clipPath>
-<clipPath id="breeze-static-checks-line-63">
-    <rect x="0" y="1538.7" width="1464" height="24.65"/>
-            </clipPath>
-<clipPath id="breeze-static-checks-line-64">
-    <rect x="0" y="1563.1" width="1464" height="24.65"/>
-            </clipPath>
-<clipPath id="breeze-static-checks-line-65">
-    <rect x="0" y="1587.5" width="1464" height="24.65"/>
-            </clipPath>
-<clipPath id="breeze-static-checks-line-66">
-    <rect x="0" y="1611.9" width="1464" height="24.65"/>
-            </clipPath>
-<clipPath id="breeze-static-checks-line-67">
-    <rect x="0" y="1636.3" width="1464" height="24.65"/>
-            </clipPath>
-<clipPath id="breeze-static-checks-line-68">
-    <rect x="0" y="1660.7" width="1464" height="24.65"/>
-            </clipPath>
-<clipPath id="breeze-static-checks-line-69">
-    <rect x="0" y="1685.1" width="1464" height="24.65"/>
-            </clipPath>
-<clipPath id="breeze-static-checks-line-70">
-    <rect x="0" y="1709.5" width="1464" height="24.65"/>
-            </clipPath>
-<clipPath id="breeze-static-checks-line-71">
-    <rect x="0" y="1733.9" width="1464" height="24.65"/>
-            </clipPath>
-<clipPath id="breeze-static-checks-line-72">
-    <rect x="0" y="1758.3" width="1464" height="24.65"/>
-            </clipPath>
-<clipPath id="breeze-static-checks-line-73">
-    <rect x="0" y="1782.7" width="1464" height="24.65"/>
-            </clipPath>
-<clipPath id="breeze-static-checks-line-74">
-    <rect x="0" y="1807.1" width="1464" height="24.65"/>
-            </clipPath>
-<clipPath id="breeze-static-checks-line-75">
-    <rect x="0" y="1831.5" width="1464" height="24.65"/>
-            </clipPath>
-<clipPath id="breeze-static-checks-line-76">
-    <rect x="0" y="1855.9" width="1464" height="24.65"/>
-            </clipPath>
-<clipPath id="breeze-static-checks-line-77">
-    <rect x="0" y="1880.3" width="1464" height="24.65"/>
-            </clipPath>
-<clipPath id="breeze-static-checks-line-78">
-    <rect x="0" y="1904.7" width="1464" height="24.65"/>
-            </clipPath>
-<clipPath id="breeze-static-checks-line-79">
-    <rect x="0" y="1929.1" width="1464" height="24.65"/>
-            </clipPath>
-<clipPath id="breeze-static-checks-line-80">
-    <rect x="0" y="1953.5" width="1464" height="24.65"/>
-            </clipPath>
-<clipPath id="breeze-static-checks-line-81">
-    <rect x="0" y="1977.9" width="1464" height="24.65"/>
-            </clipPath>
-<clipPath id="breeze-static-checks-line-82">
-    <rect x="0" y="2002.3" width="1464" height="24.65"/>
-            </clipPath>
-<clipPath id="breeze-static-checks-line-83">
-    <rect x="0" y="2026.7" width="1464" height="24.65"/>
-            </clipPath>
-<clipPath id="breeze-static-checks-line-84">
-    <rect x="0" y="2051.1" width="1464" height="24.65"/>
-            </clipPath>
-<clipPath id="breeze-static-checks-line-85">
-    <rect x="0" y="2075.5" width="1464" height="24.65"/>
-            </clipPath>
-<clipPath id="breeze-static-checks-line-86">
-    <rect x="0" y="2099.9" width="1464" height="24.65"/>
-            </clipPath>
-    </defs>
-
-    <rect fill="#292929" stroke="rgba(255,255,255,0.35)" stroke-width="1" x="1" y="1" width="1480" height="2195.2" rx="8"/><text class="breeze-static-checks-title" fill="#c5c8c6" text-anchor="middle" x="740" y="27">Command:&#160;static-checks</text>
-            <g transform="translate(26,22)">
-            <circle cx="0" cy="0" r="7" fill="#ff5f57"/>
-            <circle cx="22" cy="0" r="7" fill="#febc2e"/>
-            <circle cx="44" cy="0" r="7" fill="#28c840"/>
-            </g>
-        
-    <g transform="translate(9, 41)" clip-path="url(#breeze-static-checks-clip-terminal)">
-    
-    <g class="breeze-static-checks-matrix">
-    <text class="breeze-static-checks-r1" x="1464" y="20" textLength="12.2" clip-path="url(#breeze-static-checks-line-0)">
-</text><text class="breeze-static-checks-r2" x="12.2" y="44.4" textLength="73.2" clip-path="url(#breeze-static-checks-line-1)">Usage:</text><text class="breeze-static-checks-r3" x="97.6" y="44.4" textLength="244" clip-path="url(#breeze-static-checks-line-1)">breeze&#160;static-checks</text><text class="breeze-static-checks-r1" x="353.8" y="44.4" textLength="12.2" clip-path="url(#breeze-static-checks-line-1)">[</text><text class="breeze-static-checks-r4" x="366" y="44.4" textLength="85.4" [...]
-</text><text class="breeze-static-checks-r1" x="1464" y="68.8" textLength="12.2" clip-path="url(#breeze-static-checks-line-2)">
-</text><text class="breeze-static-checks-r1" x="12.2" y="93.2" textLength="219.6" clip-path="url(#breeze-static-checks-line-3)">Run&#160;static&#160;checks.</text><text class="breeze-static-checks-r1" x="1464" y="93.2" textLength="12.2" clip-path="url(#breeze-static-checks-line-3)">
-</text><text class="breeze-static-checks-r1" x="1464" y="117.6" textLength="12.2" clip-path="url(#breeze-static-checks-line-4)">
-</text><text class="breeze-static-checks-r5" x="0" y="142" textLength="24.4" clip-path="url(#breeze-static-checks-line-5)">╭─</text><text class="breeze-static-checks-r5" x="24.4" y="142" textLength="219.6" clip-path="url(#breeze-static-checks-line-5)">&#160;Pre-commit&#160;flags&#160;</text><text class="breeze-static-checks-r5" x="244" y="142" textLength="1195.6" clip-path="url(#breeze-static-checks-line-5)">──────────────────────────────────────────────────────────────────────────────── [...]
-</text><text class="breeze-static-checks-r5" x="0" y="166.4" textLength="12.2" clip-path="url(#breeze-static-checks-line-6)">│</text><text class="breeze-static-checks-r4" x="24.4" y="166.4" textLength="73.2" clip-path="url(#breeze-static-checks-line-6)">--type</text><text class="breeze-static-checks-r6" x="402.6" y="166.4" textLength="24.4" clip-path="url(#breeze-static-checks-line-6)">-t</text><text class="breeze-static-checks-r1" x="451.4" y="166.4" textLength="988.2" clip-path="url(#b [...]
-</text><text class="breeze-static-checks-r5" x="0" y="190.8" textLength="12.2" clip-path="url(#breeze-static-checks-line-7)">│</text><text class="breeze-static-checks-r7" x="451.4" y="190.8" textLength="988.2" clip-path="url(#breeze-static-checks-line-7)">(all&#160;|&#160;bandit&#160;|&#160;blacken-docs&#160;|&#160;check-aiobotocore-optional&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><te [...]
-</text><text class="breeze-static-checks-r5" x="0" y="215.2" textLength="12.2" clip-path="url(#breeze-static-checks-line-8)">│</text><text class="breeze-static-checks-r7" x="451.4" y="215.2" textLength="988.2" clip-path="url(#breeze-static-checks-line-8)">check-airflow-k8s-not-used&#160;|&#160;check-airflow-providers-bug-report-template&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-static-checks-r5" x="1451.8" y="215.2" textLength="12.2" clip-path="url(#breez [...]
-</text><text class="breeze-static-checks-r5" x="0" y="239.6" textLength="12.2" clip-path="url(#breeze-static-checks-line-9)">│</text><text class="breeze-static-checks-r7" x="451.4" y="239.6" textLength="988.2" clip-path="url(#breeze-static-checks-line-9)">check-apache-license-rat&#160;|&#160;check-base-operator-partial-arguments&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-static-checks-r5" x="1451.8" y="239.6" [...]
-</text><text class="breeze-static-checks-r5" x="0" y="264" textLength="12.2" clip-path="url(#breeze-static-checks-line-10)">│</text><text class="breeze-static-checks-r7" x="451.4" y="264" textLength="988.2" clip-path="url(#breeze-static-checks-line-10)">check-base-operator-usage&#160;|&#160;check-boring-cyborg-configuration&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-static-checks-r5" x="1451 [...]
-</text><text class="breeze-static-checks-r5" x="0" y="288.4" textLength="12.2" clip-path="url(#breeze-static-checks-line-11)">│</text><text class="breeze-static-checks-r7" x="451.4" y="288.4" textLength="988.2" clip-path="url(#breeze-static-checks-line-11)">check-breeze-top-dependencies-limited&#160;|&#160;check-builtin-literals&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-static-checks-r5" x="1451. [...]
-</text><text class="breeze-static-checks-r5" x="0" y="312.8" textLength="12.2" clip-path="url(#breeze-static-checks-line-12)">│</text><text class="breeze-static-checks-r7" x="451.4" y="312.8" textLength="988.2" clip-path="url(#breeze-static-checks-line-12)">check-changelog-format&#160;|&#160;check-changelog-has-no-duplicates&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-static [...]
-</text><text class="breeze-static-checks-r5" x="0" y="337.2" textLength="12.2" clip-path="url(#breeze-static-checks-line-13)">│</text><text class="breeze-static-checks-r7" x="451.4" y="337.2" textLength="988.2" clip-path="url(#breeze-static-checks-line-13)">check-cncf-k8s-only-for-executors&#160;|&#160;check-code-deprecations&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-static-chec [...]
-</text><text class="breeze-static-checks-r5" x="0" y="361.6" textLength="12.2" clip-path="url(#breeze-static-checks-line-14)">│</text><text class="breeze-static-checks-r7" x="451.4" y="361.6" textLength="988.2" clip-path="url(#breeze-static-checks-line-14)">check-common-compat-used-for-openlineage&#160;|&#160;check-core-deprecation-classes&#160;|&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-static-checks-r5" x="1451.8" y="361.6" textLength="12.2" clip-path="url(#breeze-s [...]
-</text><text class="breeze-static-checks-r5" x="0" y="386" textLength="12.2" clip-path="url(#breeze-static-checks-line-15)">│</text><text class="breeze-static-checks-r7" x="451.4" y="386" textLength="988.2" clip-path="url(#breeze-static-checks-line-15)">check-daysago-import-from-utils&#160;|&#160;check-decorated-operator-implements-custom-name</text><text class="breeze-static-checks-r5" x="1451.8" y="386" textLength="12.2" clip-path="url(#breeze-static-checks-line-15)">│</text><text clas [...]
-</text><text class="breeze-static-checks-r5" x="0" y="410.4" textLength="12.2" clip-path="url(#breeze-static-checks-line-16)">│</text><text class="breeze-static-checks-r7" x="451.4" y="410.4" textLength="988.2" clip-path="url(#breeze-static-checks-line-16)">|&#160;check-default-configuration&#160;|&#160;check-deferrable-default&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class [...]
-</text><text class="breeze-static-checks-r5" x="0" y="434.8" textLength="12.2" clip-path="url(#breeze-static-checks-line-17)">│</text><text class="breeze-static-checks-r7" x="451.4" y="434.8" textLength="988.2" clip-path="url(#breeze-static-checks-line-17)">check-docstring-param-types&#160;|&#160;check-example-dags-urls&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text>< [...]
-</text><text class="breeze-static-checks-r5" x="0" y="459.2" textLength="12.2" clip-path="url(#breeze-static-checks-line-18)">│</text><text class="breeze-static-checks-r7" x="451.4" y="459.2" textLength="988.2" clip-path="url(#breeze-static-checks-line-18)">check-executables-have-shebangs&#160;|&#160;check-extra-packages-references&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-static-checks-r5" x="1451.8" y="459.2" te [...]
-</text><text class="breeze-static-checks-r5" x="0" y="483.6" textLength="12.2" clip-path="url(#breeze-static-checks-line-19)">│</text><text class="breeze-static-checks-r7" x="451.4" y="483.6" textLength="988.2" clip-path="url(#breeze-static-checks-line-19)">check-extras-order&#160;|&#160;check-fab-migrations&#160;|&#160;check-for-inclusive-language&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-static-checks-r5" x="1451.8" y="483.6" textLength="12.2" clip-path [...]
-</text><text class="breeze-static-checks-r5" x="0" y="508" textLength="12.2" clip-path="url(#breeze-static-checks-line-20)">│</text><text class="breeze-static-checks-r7" x="451.4" y="508" textLength="988.2" clip-path="url(#breeze-static-checks-line-20)">check-get-lineage-collector-providers&#160;|&#160;check-hooks-apply&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-stati [...]
-</text><text class="breeze-static-checks-r5" x="0" y="532.4" textLength="12.2" clip-path="url(#breeze-static-checks-line-21)">│</text><text class="breeze-static-checks-r7" x="451.4" y="532.4" textLength="988.2" clip-path="url(#breeze-static-checks-line-21)">check-imports-in-providers&#160;|&#160;check-incorrect-use-of-LoggingMixin&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-static-checks-r5" x="1451.8" y="532. [...]
-</text><text class="breeze-static-checks-r5" x="0" y="556.8" textLength="12.2" clip-path="url(#breeze-static-checks-line-22)">│</text><text class="breeze-static-checks-r7" x="451.4" y="556.8" textLength="988.2" clip-path="url(#breeze-static-checks-line-22)">check-init-decorator-arguments&#160;|&#160;check-integrations-list-consistent&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-static-checks-r5" x="1451.8" y="556.8" textLength=" [...]
-</text><text class="breeze-static-checks-r5" x="0" y="581.2" textLength="12.2" clip-path="url(#breeze-static-checks-line-23)">│</text><text class="breeze-static-checks-r7" x="451.4" y="581.2" textLength="988.2" clip-path="url(#breeze-static-checks-line-23)">check-lazy-logging&#160;|&#160;check-links-to-example-dags-do-not-use-hardcoded-versions&#160;|&#160;</text><text class="breeze-static-checks-r5" x="1451.8" y="581.2" textLength="12.2" clip-path="url(#breeze-static-checks-line-23)">│< [...]
-</text><text class="breeze-static-checks-r5" x="0" y="605.6" textLength="12.2" clip-path="url(#breeze-static-checks-line-24)">│</text><text class="breeze-static-checks-r7" x="451.4" y="605.6" textLength="988.2" clip-path="url(#breeze-static-checks-line-24)">check-merge-conflict&#160;|&#160;check-min-python-version&#160;|&#160;check-newsfragments-are-valid&#160;|</text><text class="breeze-static-checks-r5" x="1451.8" y="605.6" textLength="12.2" clip-path="url(#breeze-static-checks-line-24 [...]
-</text><text class="breeze-static-checks-r5" x="0" y="630" textLength="12.2" clip-path="url(#breeze-static-checks-line-25)">│</text><text class="breeze-static-checks-r7" x="451.4" y="630" textLength="988.2" clip-path="url(#breeze-static-checks-line-25)">check-no-airflow-deprecation-in-providers&#160;|&#160;check-no-providers-in-core-examples&#160;|</text><text class="breeze-static-checks-r5" x="1451.8" y="630" textLength="12.2" clip-path="url(#breeze-static-checks-line-25)">│</text><text [...]
-</text><text class="breeze-static-checks-r5" x="0" y="654.4" textLength="12.2" clip-path="url(#breeze-static-checks-line-26)">│</text><text class="breeze-static-checks-r7" x="451.4" y="654.4" textLength="988.2" clip-path="url(#breeze-static-checks-line-26)">check-only-new-session-with-provide-session&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#16 [...]
-</text><text class="breeze-static-checks-r5" x="0" y="678.8" textLength="12.2" clip-path="url(#breeze-static-checks-line-27)">│</text><text class="breeze-static-checks-r7" x="451.4" y="678.8" textLength="988.2" clip-path="url(#breeze-static-checks-line-27)">check-persist-credentials-disabled-in-github-workflows&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="bre [...]
-</text><text class="breeze-static-checks-r5" x="0" y="703.2" textLength="12.2" clip-path="url(#breeze-static-checks-line-28)">│</text><text class="breeze-static-checks-r7" x="451.4" y="703.2" textLength="988.2" clip-path="url(#breeze-static-checks-line-28)">check-pre-commit-information-consistent&#160;|&#160;check-provide-create-sessions-imports&#160;|</text><text class="breeze-static-checks-r5" x="1451.8" y="703.2" textLength="12.2" clip-path="url(#breeze-static-checks-line-28)">│</text [...]
-</text><text class="breeze-static-checks-r5" x="0" y="727.6" textLength="12.2" clip-path="url(#breeze-static-checks-line-29)">│</text><text class="breeze-static-checks-r7" x="451.4" y="727.6" textLength="988.2" clip-path="url(#breeze-static-checks-line-29)">check-provider-docs-valid&#160;|&#160;check-provider-yaml-valid&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text>< [...]
-</text><text class="breeze-static-checks-r5" x="0" y="752" textLength="12.2" clip-path="url(#breeze-static-checks-line-30)">│</text><text class="breeze-static-checks-r7" x="451.4" y="752" textLength="988.2" clip-path="url(#breeze-static-checks-line-30)">check-providers-subpackages-init-file-exist&#160;|&#160;check-pydevd-left-in-code&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-static-checks-r5" x="1451.8" y="752" textLength="12.2" clip-path="url(#bree [...]
-</text><text class="breeze-static-checks-r5" x="0" y="776.4" textLength="12.2" clip-path="url(#breeze-static-checks-line-31)">│</text><text class="breeze-static-checks-r7" x="451.4" y="776.4" textLength="988.2" clip-path="url(#breeze-static-checks-line-31)">check-revision-heads-map&#160;|&#160;check-safe-filter-usage-in-html&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-static [...]
-</text><text class="breeze-static-checks-r5" x="0" y="800.8" textLength="12.2" clip-path="url(#breeze-static-checks-line-32)">│</text><text class="breeze-static-checks-r7" x="451.4" y="800.8" textLength="988.2" clip-path="url(#breeze-static-checks-line-32)">check-significant-newsfragments-are-valid&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; [...]
-</text><text class="breeze-static-checks-r5" x="0" y="825.2" textLength="12.2" clip-path="url(#breeze-static-checks-line-33)">│</text><text class="breeze-static-checks-r7" x="451.4" y="825.2" textLength="988.2" clip-path="url(#breeze-static-checks-line-33)">check-sql-dependency-common-data-structure&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160 [...]
-</text><text class="breeze-static-checks-r5" x="0" y="849.6" textLength="12.2" clip-path="url(#breeze-static-checks-line-34)">│</text><text class="breeze-static-checks-r7" x="451.4" y="849.6" textLength="988.2" clip-path="url(#breeze-static-checks-line-34)">check-start-date-not-used-in-defaults&#160;|&#160;check-system-tests-present&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-static-checks-r5" x="1451.8" y="849.6" textLen [...]
-</text><text class="breeze-static-checks-r5" x="0" y="874" textLength="12.2" clip-path="url(#breeze-static-checks-line-35)">│</text><text class="breeze-static-checks-r7" x="451.4" y="874" textLength="988.2" clip-path="url(#breeze-static-checks-line-35)">check-system-tests-tocs&#160;|&#160;check-taskinstance-tis-attrs&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text clas [...]
-</text><text class="breeze-static-checks-r5" x="0" y="898.4" textLength="12.2" clip-path="url(#breeze-static-checks-line-36)">│</text><text class="breeze-static-checks-r7" x="451.4" y="898.4" textLength="988.2" clip-path="url(#breeze-static-checks-line-36)">check-template-context-variable-in-sync&#160;|&#160;check-template-fields-valid&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-static-checks-r5" x="1451.8" y="898.4" textLength="12.2" clip [...]
-</text><text class="breeze-static-checks-r5" x="0" y="922.8" textLength="12.2" clip-path="url(#breeze-static-checks-line-37)">│</text><text class="breeze-static-checks-r7" x="451.4" y="922.8" textLength="988.2" clip-path="url(#breeze-static-checks-line-37)">check-tests-in-the-right-folders&#160;|&#160;check-tests-unittest-testcase&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-static-checks-r5" x="1451.8" y="922. [...]
-</text><text class="breeze-static-checks-r5" x="0" y="947.2" textLength="12.2" clip-path="url(#breeze-static-checks-line-38)">│</text><text class="breeze-static-checks-r7" x="451.4" y="947.2" textLength="988.2" clip-path="url(#breeze-static-checks-line-38)">check-urlparse-usage-in-code&#160;|&#160;check-xml&#160;|&#160;check-zip-file-is-not-committed&#160;|&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-static-checks-r5" x="1451.8" y="947.2" textLength="12.2" clip-path="url(#bre [...]
-</text><text class="breeze-static-checks-r5" x="0" y="971.6" textLength="12.2" clip-path="url(#breeze-static-checks-line-39)">│</text><text class="breeze-static-checks-r7" x="451.4" y="971.6" textLength="988.2" clip-path="url(#breeze-static-checks-line-39)">codespell&#160;|&#160;compile-fab-assets&#160;|&#160;compile-ui-assets&#160;|&#160;compile-ui-assets-dev&#160;|&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-static-checks-r5" x="1451.8" y="971.6" textLength="12.2" clip-path [...]
-</text><text class="breeze-static-checks-r5" x="0" y="996" textLength="12.2" clip-path="url(#breeze-static-checks-line-40)">│</text><text class="breeze-static-checks-r7" x="451.4" y="996" textLength="988.2" clip-path="url(#breeze-static-checks-line-40)">create-missing-init-py-files-tests&#160;|&#160;debug-statements&#160;|&#160;detect-private-key&#160;|&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-static-checks-r5" x="1451.8" y="996" textLength="12.2" clip-path="url(#breeze-st [...]
-</text><text class="breeze-static-checks-r5" x="0" y="1020.4" textLength="12.2" clip-path="url(#breeze-static-checks-line-41)">│</text><text class="breeze-static-checks-r7" x="451.4" y="1020.4" textLength="988.2" clip-path="url(#breeze-static-checks-line-41)">doctoc&#160;|&#160;end-of-file-fixer&#160;|&#160;flynt&#160;|&#160;generate-airflow-diagrams&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-stat [...]
-</text><text class="breeze-static-checks-r5" x="0" y="1044.8" textLength="12.2" clip-path="url(#breeze-static-checks-line-42)">│</text><text class="breeze-static-checks-r7" x="451.4" y="1044.8" textLength="988.2" clip-path="url(#breeze-static-checks-line-42)">generate-openapi-spec&#160;|&#160;generate-openapi-spec-fab&#160;|&#160;generate-pypi-readme&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-static-checks-r5" x="1451.8" y="1044.8" textLength="12.2" clip-p [...]
-</text><text class="breeze-static-checks-r5" x="0" y="1069.2" textLength="12.2" clip-path="url(#breeze-static-checks-line-43)">│</text><text class="breeze-static-checks-r7" x="451.4" y="1069.2" textLength="988.2" clip-path="url(#breeze-static-checks-line-43)">generate-tasksdk-datamodels&#160;|&#160;generate-volumes-for-sources&#160;|&#160;identity&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-static-checks-r5" x="1451.8" y="1069.2" textLengt [...]
-</text><text class="breeze-static-checks-r5" x="0" y="1093.6" textLength="12.2" clip-path="url(#breeze-static-checks-line-44)">│</text><text class="breeze-static-checks-r7" x="451.4" y="1093.6" textLength="988.2" clip-path="url(#breeze-static-checks-line-44)">insert-license&#160;|&#160;kubeconform&#160;|&#160;lint-chart-schema&#160;|&#160;lint-dockerfile&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-static-checks-r5" x="145 [...]
-</text><text class="breeze-static-checks-r5" x="0" y="1118" textLength="12.2" clip-path="url(#breeze-static-checks-line-45)">│</text><text class="breeze-static-checks-r7" x="451.4" y="1118" textLength="988.2" clip-path="url(#breeze-static-checks-line-45)">lint-helm-chart&#160;|&#160;lint-json-schema&#160;|&#160;lint-markdown&#160;|&#160;mixed-line-ending&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-static-checks-r5" x="1451.8" y="1118" textLength [...]
-</text><text class="breeze-static-checks-r5" x="0" y="1142.4" textLength="12.2" clip-path="url(#breeze-static-checks-line-46)">│</text><text class="breeze-static-checks-r7" x="451.4" y="1142.4" textLength="988.2" clip-path="url(#breeze-static-checks-line-46)">mypy-airflow-core&#160;|&#160;mypy-airflow-ctl&#160;|&#160;mypy-dev&#160;|&#160;mypy-devel-common&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-static-checks-r5" x="1451.8"  [...]
-</text><text class="breeze-static-checks-r5" x="0" y="1166.8" textLength="12.2" clip-path="url(#breeze-static-checks-line-47)">│</text><text class="breeze-static-checks-r7" x="451.4" y="1166.8" textLength="988.2" clip-path="url(#breeze-static-checks-line-47)">mypy-providers&#160;|&#160;mypy-task-sdk&#160;|&#160;pretty-format-json&#160;|&#160;pylint&#160;|&#160;python-no-log-warn</text><text class="breeze-static-checks-r5" x="1451.8" y="1166.8" textLength="12.2" clip-path="url(#breeze-sta [...]
-</text><text class="breeze-static-checks-r5" x="0" y="1191.2" textLength="12.2" clip-path="url(#breeze-static-checks-line-48)">│</text><text class="breeze-static-checks-r7" x="451.4" y="1191.2" textLength="988.2" clip-path="url(#breeze-static-checks-line-48)">|&#160;replace-bad-characters&#160;|&#160;rst-backticks&#160;|&#160;ruff&#160;|&#160;ruff-format&#160;|&#160;shellcheck&#160;|&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-static-checks-r5" x="1451.8" y="1191.2" textLengt [...]
-</text><text class="breeze-static-checks-r5" x="0" y="1215.6" textLength="12.2" clip-path="url(#breeze-static-checks-line-49)">│</text><text class="breeze-static-checks-r7" x="451.4" y="1215.6" textLength="988.2" clip-path="url(#breeze-static-checks-line-49)">trailing-whitespace&#160;|&#160;ts-compile-lint-simple-auth-manager-ui&#160;|&#160;ts-compile-lint-ui</text><text class="breeze-static-checks-r5" x="1451.8" y="1215.6" textLength="12.2" clip-path="url(#breeze-static-checks-line-49)" [...]
-</text><text class="breeze-static-checks-r5" x="0" y="1240" textLength="12.2" clip-path="url(#breeze-static-checks-line-50)">│</text><text class="breeze-static-checks-r7" x="451.4" y="1240" textLength="988.2" clip-path="url(#breeze-static-checks-line-50)">|&#160;update-black-version&#160;|&#160;update-breeze-cmd-output&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#1 [...]
-</text><text class="breeze-static-checks-r5" x="0" y="1264.4" textLength="12.2" clip-path="url(#breeze-static-checks-line-51)">│</text><text class="breeze-static-checks-r7" x="451.4" y="1264.4" textLength="988.2" clip-path="url(#breeze-static-checks-line-51)">update-breeze-readme-config-hash&#160;|&#160;update-chart-dependencies&#160;|&#160;update-er-diagram&#160;</text><text class="breeze-static-checks-r5" x="1451.8" y="1264.4" textLength="12.2" clip-path="url(#breeze-static-checks-line [...]
-</text><text class="breeze-static-checks-r5" x="0" y="1288.8" textLength="12.2" clip-path="url(#breeze-static-checks-line-52)">│</text><text class="breeze-static-checks-r7" x="451.4" y="1288.8" textLength="988.2" clip-path="url(#breeze-static-checks-line-52)">|&#160;update-in-the-wild-to-be-sorted&#160;|&#160;update-inlined-dockerfile-scripts&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-static-checks-r5" x="1451.8" y="1288.8" textLength="12 [...]
-</text><text class="breeze-static-checks-r5" x="0" y="1313.2" textLength="12.2" clip-path="url(#breeze-static-checks-line-53)">│</text><text class="breeze-static-checks-r7" x="451.4" y="1313.2" textLength="988.2" clip-path="url(#breeze-static-checks-line-53)">update-installed-providers-to-be-sorted&#160;|&#160;update-installers-and-pre-commit&#160;|&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-static-checks-r5" x="1451.8" y="1313.2" textLength="12.2" clip-path="url(#breeze-sta [...]
-</text><text class="breeze-static-checks-r5" x="0" y="1337.6" textLength="12.2" clip-path="url(#breeze-static-checks-line-54)">│</text><text class="breeze-static-checks-r7" x="451.4" y="1337.6" textLength="988.2" clip-path="url(#breeze-static-checks-line-54)">update-local-yml-file&#160;|&#160;update-migration-references&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&# [...]
-</text><text class="breeze-static-checks-r5" x="0" y="1362" textLength="12.2" clip-path="url(#breeze-static-checks-line-55)">│</text><text class="breeze-static-checks-r7" x="451.4" y="1362" textLength="988.2" clip-path="url(#breeze-static-checks-line-55)">update-providers-build-files&#160;|&#160;update-providers-dependencies&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-static-checks-r5"  [...]
-</text><text class="breeze-static-checks-r5" x="0" y="1386.4" textLength="12.2" clip-path="url(#breeze-static-checks-line-56)">│</text><text class="breeze-static-checks-r7" x="451.4" y="1386.4" textLength="988.2" clip-path="url(#breeze-static-checks-line-56)">update-pyproject-toml&#160;|&#160;update-reproducible-source-date-epoch&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-static-checks-r5" x [...]
-</text><text class="breeze-static-checks-r5" x="0" y="1410.8" textLength="12.2" clip-path="url(#breeze-static-checks-line-57)">│</text><text class="breeze-static-checks-r7" x="451.4" y="1410.8" textLength="988.2" clip-path="url(#breeze-static-checks-line-57)">update-spelling-wordlist-to-be-sorted&#160;|&#160;update-supported-versions&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-static-checks-r5" x="1451.8" y="1410.8" [...]
-</text><text class="breeze-static-checks-r5" x="0" y="1435.2" textLength="12.2" clip-path="url(#breeze-static-checks-line-58)">│</text><text class="breeze-static-checks-r7" x="451.4" y="1435.2" textLength="988.2" clip-path="url(#breeze-static-checks-line-58)">update-vendored-in-k8s-json-schema&#160;|&#160;update-version&#160;|&#160;validate-operators-init&#160;|&#160;&#160;</text><text class="breeze-static-checks-r5" x="1451.8" y="1435.2" textLength="12.2" clip-path="url(#breeze-static-c [...]
-</text><text class="breeze-static-checks-r5" x="0" y="1459.6" textLength="12.2" clip-path="url(#breeze-static-checks-line-59)">│</text><text class="breeze-static-checks-r7" x="451.4" y="1459.6" textLength="988.2" clip-path="url(#breeze-static-checks-line-59)">yamllint&#160;|&#160;zizmor)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; [...]
-</text><text class="breeze-static-checks-r5" x="0" y="1484" textLength="12.2" clip-path="url(#breeze-static-checks-line-60)">│</text><text class="breeze-static-checks-r4" x="24.4" y="1484" textLength="268.4" clip-path="url(#breeze-static-checks-line-60)">--show-diff-on-failure</text><text class="breeze-static-checks-r6" x="402.6" y="1484" textLength="24.4" clip-path="url(#breeze-static-checks-line-60)">-s</text><text class="breeze-static-checks-r1" x="451.4" y="1484" textLength="524.6" c [...]
-</text><text class="breeze-static-checks-r5" x="0" y="1508.4" textLength="12.2" clip-path="url(#breeze-static-checks-line-61)">│</text><text class="breeze-static-checks-r4" x="24.4" y="1508.4" textLength="292.8" clip-path="url(#breeze-static-checks-line-61)">--initialize-environment</text><text class="breeze-static-checks-r1" x="451.4" y="1508.4" textLength="549" clip-path="url(#breeze-static-checks-line-61)">Initialize&#160;environment&#160;before&#160;running&#160;checks.</text><text c [...]
-</text><text class="breeze-static-checks-r5" x="0" y="1532.8" textLength="12.2" clip-path="url(#breeze-static-checks-line-62)">│</text><text class="breeze-static-checks-r4" x="24.4" y="1532.8" textLength="353.8" clip-path="url(#breeze-static-checks-line-62)">--max-initialization-attempts</text><text class="breeze-static-checks-r1" x="451.4" y="1532.8" textLength="854" clip-path="url(#breeze-static-checks-line-62)">Maximum&#160;number&#160;of&#160;attempts&#160;to&#160;initialize&#160;env [...]
-</text><text class="breeze-static-checks-r5" x="0" y="1557.2" textLength="12.2" clip-path="url(#breeze-static-checks-line-63)">│</text><text class="breeze-static-checks-r7" x="451.4" y="1557.2" textLength="854" clip-path="url(#breeze-static-checks-line-63)">(INTEGER&#160;RANGE)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#16 [...]
-</text><text class="breeze-static-checks-r5" x="0" y="1581.6" textLength="12.2" clip-path="url(#breeze-static-checks-line-64)">│</text><text class="breeze-static-checks-r5" x="451.4" y="1581.6" textLength="854" clip-path="url(#breeze-static-checks-line-64)">[default:&#160;3;&#160;1&lt;=x&lt;=10]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#16 [...]
-</text><text class="breeze-static-checks-r5" x="0" y="1606" textLength="1464" clip-path="url(#breeze-static-checks-line-65)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-static-checks-r1" x="1464" y="1606" textLength="12.2" clip-path="url(#breeze-static-checks-line-65)">
-</text><text class="breeze-static-checks-r5" x="0" y="1630.4" textLength="24.4" clip-path="url(#breeze-static-checks-line-66)">╭─</text><text class="breeze-static-checks-r5" x="24.4" y="1630.4" textLength="463.6" clip-path="url(#breeze-static-checks-line-66)">&#160;Selecting&#160;files&#160;to&#160;run&#160;the&#160;checks&#160;on&#160;</text><text class="breeze-static-checks-r5" x="488" y="1630.4" textLength="951.6" clip-path="url(#breeze-static-checks-line-66)">──────────────────────── [...]
-</text><text class="breeze-static-checks-r5" x="0" y="1654.8" textLength="12.2" clip-path="url(#breeze-static-checks-line-67)">│</text><text class="breeze-static-checks-r4" x="24.4" y="1654.8" textLength="73.2" clip-path="url(#breeze-static-checks-line-67)">--file</text><text class="breeze-static-checks-r6" x="256.2" y="1654.8" textLength="24.4" clip-path="url(#breeze-static-checks-line-67)">-f</text><text class="breeze-static-checks-r1" x="305" y="1654.8" textLength="427" clip-path="url [...]
-</text><text class="breeze-static-checks-r5" x="0" y="1679.2" textLength="12.2" clip-path="url(#breeze-static-checks-line-68)">│</text><text class="breeze-static-checks-r4" x="24.4" y="1679.2" textLength="134.2" clip-path="url(#breeze-static-checks-line-68)">--all-files</text><text class="breeze-static-checks-r6" x="256.2" y="1679.2" textLength="24.4" clip-path="url(#breeze-static-checks-line-68)">-a</text><text class="breeze-static-checks-r1" x="305" y="1679.2" textLength="292.8" clip-p [...]
-</text><text class="breeze-static-checks-r5" x="0" y="1703.6" textLength="12.2" clip-path="url(#breeze-static-checks-line-69)">│</text><text class="breeze-static-checks-r4" x="24.4" y="1703.6" textLength="146.4" clip-path="url(#breeze-static-checks-line-69)">--commit-ref</text><text class="breeze-static-checks-r6" x="256.2" y="1703.6" textLength="24.4" clip-path="url(#breeze-static-checks-line-69)">-r</text><text class="breeze-static-checks-r1" x="305" y="1703.6" textLength="1134.6" clip [...]
-</text><text class="breeze-static-checks-r5" x="0" y="1728" textLength="12.2" clip-path="url(#breeze-static-checks-line-70)">│</text><text class="breeze-static-checks-r1" x="305" y="1728" textLength="183" clip-path="url(#breeze-static-checks-line-70)">exclusive&#160;with&#160;</text><text class="breeze-static-checks-r4" x="488" y="1728" textLength="158.6" clip-path="url(#breeze-static-checks-line-70)">--last-commit</text><text class="breeze-static-checks-r1" x="646.6" y="1728" textLength [...]
-</text><text class="breeze-static-checks-r5" x="0" y="1752.4" textLength="12.2" clip-path="url(#breeze-static-checks-line-71)">│</text><text class="breeze-static-checks-r7" x="305" y="1752.4" textLength="1134.6" clip-path="url(#breeze-static-checks-line-71)">(TEXT)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160 [...]
-</text><text class="breeze-static-checks-r5" x="0" y="1776.8" textLength="12.2" clip-path="url(#breeze-static-checks-line-72)">│</text><text class="breeze-static-checks-r4" x="24.4" y="1776.8" textLength="158.6" clip-path="url(#breeze-static-checks-line-72)">--last-commit</text><text class="breeze-static-checks-r6" x="256.2" y="1776.8" textLength="24.4" clip-path="url(#breeze-static-checks-line-72)">-c</text><text class="breeze-static-checks-r1" x="305" y="1776.8" textLength="793" clip-p [...]
-</text><text class="breeze-static-checks-r5" x="0" y="1801.2" textLength="12.2" clip-path="url(#breeze-static-checks-line-73)">│</text><text class="breeze-static-checks-r4" x="24.4" y="1801.2" textLength="207.4" clip-path="url(#breeze-static-checks-line-73)">--only-my-changes</text><text class="breeze-static-checks-r6" x="256.2" y="1801.2" textLength="24.4" clip-path="url(#breeze-static-checks-line-73)">-m</text><text class="breeze-static-checks-r1" x="305" y="1801.2" textLength="1134.6" [...]
-</text><text class="breeze-static-checks-r5" x="0" y="1825.6" textLength="12.2" clip-path="url(#breeze-static-checks-line-74)">│</text><text class="breeze-static-checks-r1" x="305" y="1825.6" textLength="1134.6" clip-path="url(#breeze-static-checks-line-74)">branch&#160;and&#160;HEAD&#160;of&#160;your&#160;branch.&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#1 [...]
-</text><text class="breeze-static-checks-r5" x="0" y="1850" textLength="1464" clip-path="url(#breeze-static-checks-line-75)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-static-checks-r1" x="1464" y="1850" textLength="12.2" clip-path="url(#breeze-static-checks-line-75)">
-</text><text class="breeze-static-checks-r5" x="0" y="1874.4" textLength="24.4" clip-path="url(#breeze-static-checks-line-76)">╭─</text><text class="breeze-static-checks-r5" x="24.4" y="1874.4" textLength="463.6" clip-path="url(#breeze-static-checks-line-76)">&#160;Building&#160;image&#160;before&#160;running&#160;checks&#160;</text><text class="breeze-static-checks-r5" x="488" y="1874.4" textLength="951.6" clip-path="url(#breeze-static-checks-line-76)">────────────────────────────────── [...]
-</text><text class="breeze-static-checks-r5" x="0" y="1898.8" textLength="12.2" clip-path="url(#breeze-static-checks-line-77)">│</text><text class="breeze-static-checks-r4" x="24.4" y="1898.8" textLength="317.2" clip-path="url(#breeze-static-checks-line-77)">--skip-image-upgrade-check</text><text class="breeze-static-checks-r1" x="414.8" y="1898.8" textLength="536.8" clip-path="url(#breeze-static-checks-line-77)">Skip&#160;checking&#160;if&#160;the&#160;CI&#160;image&#160;is&#160;up&#160 [...]
-</text><text class="breeze-static-checks-r5" x="0" y="1923.2" textLength="12.2" clip-path="url(#breeze-static-checks-line-78)">│</text><text class="breeze-static-checks-r4" x="24.4" y="1923.2" textLength="158.6" clip-path="url(#breeze-static-checks-line-78)">--force-build</text><text class="breeze-static-checks-r1" x="414.8" y="1923.2" textLength="707.6" clip-path="url(#breeze-static-checks-line-78)">Force&#160;image&#160;build&#160;no&#160;matter&#160;if&#160;it&#160;is&#160;determined& [...]
-</text><text class="breeze-static-checks-r5" x="0" y="1947.6" textLength="12.2" clip-path="url(#breeze-static-checks-line-79)">│</text><text class="breeze-static-checks-r4" x="24.4" y="1947.6" textLength="231.8" clip-path="url(#breeze-static-checks-line-79)">--github-repository</text><text class="breeze-static-checks-r6" x="366" y="1947.6" textLength="24.4" clip-path="url(#breeze-static-checks-line-79)">-g</text><text class="breeze-static-checks-r1" x="414.8" y="1947.6" textLength="585.6 [...]
-</text><text class="breeze-static-checks-r5" x="0" y="1972" textLength="12.2" clip-path="url(#breeze-static-checks-line-80)">│</text><text class="breeze-static-checks-r4" x="24.4" y="1972" textLength="109.8" clip-path="url(#breeze-static-checks-line-80)">--builder</text><text class="breeze-static-checks-r1" x="414.8" y="1972" textLength="756.4" clip-path="url(#breeze-static-checks-line-80)">Buildx&#160;builder&#160;used&#160;to&#160;perform&#160;`docker&#160;buildx&#160;build`&#160;comma [...]
-</text><text class="breeze-static-checks-r5" x="0" y="1996.4" textLength="12.2" clip-path="url(#breeze-static-checks-line-81)">│</text><text class="breeze-static-checks-r5" x="414.8" y="1996.4" textLength="756.4" clip-path="url(#breeze-static-checks-line-81)">[default:&#160;autodetect]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&# [...]
-</text><text class="breeze-static-checks-r5" x="0" y="2020.8" textLength="1464" clip-path="url(#breeze-static-checks-line-82)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-static-checks-r1" x="1464" y="2020.8" textLength="12.2" clip-path="url(#breeze-static-checks-line-82)">
-</text><text class="breeze-static-checks-r5" x="0" y="2045.2" textLength="24.4" clip-path="url(#breeze-static-checks-line-83)">╭─</text><text class="breeze-static-checks-r5" x="24.4" y="2045.2" textLength="195.2" clip-path="url(#breeze-static-checks-line-83)">&#160;Common&#160;options&#160;</text><text class="breeze-static-checks-r5" x="219.6" y="2045.2" textLength="1220" clip-path="url(#breeze-static-checks-line-83)">────────────────────────────────────────────────────────────────────── [...]
-</text><text class="breeze-static-checks-r5" x="0" y="2069.6" textLength="12.2" clip-path="url(#breeze-static-checks-line-84)">│</text><text class="breeze-static-checks-r4" x="24.4" y="2069.6" textLength="109.8" clip-path="url(#breeze-static-checks-line-84)">--dry-run</text><text class="breeze-static-checks-r6" x="158.6" y="2069.6" textLength="24.4" clip-path="url(#breeze-static-checks-line-84)">-D</text><text class="breeze-static-checks-r1" x="207.4" y="2069.6" textLength="719.8" clip-p [...]
-</text><text class="breeze-static-checks-r5" x="0" y="2094" textLength="12.2" clip-path="url(#breeze-static-checks-line-85)">│</text><text class="breeze-static-checks-r4" x="24.4" y="2094" textLength="109.8" clip-path="url(#breeze-static-checks-line-85)">--verbose</text><text class="breeze-static-checks-r6" x="158.6" y="2094" textLength="24.4" clip-path="url(#breeze-static-checks-line-85)">-v</text><text class="breeze-static-checks-r1" x="207.4" y="2094" textLength="585.6" clip-path="url [...]
-</text><text class="breeze-static-checks-r5" x="0" y="2118.4" textLength="12.2" clip-path="url(#breeze-static-checks-line-86)">│</text><text class="breeze-static-checks-r4" x="24.4" y="2118.4" textLength="73.2" clip-path="url(#breeze-static-checks-line-86)">--help</text><text class="breeze-static-checks-r6" x="158.6" y="2118.4" textLength="24.4" clip-path="url(#breeze-static-checks-line-86)">-h</text><text class="breeze-static-checks-r1" x="207.4" y="2118.4" textLength="329.4" clip-path= [...]
-</text><text class="breeze-static-checks-r5" x="0" y="2142.8" textLength="1464" clip-path="url(#breeze-static-checks-line-87)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-static-checks-r1" x="1464" y="2142.8" textLength="12.2" clip-path="url(#breeze-static-checks-line-87)">
-</text>
-    </g>
-    </g>
-</svg>
diff --git a/dev/breeze/doc/images/output_static-checks.txt b/dev/breeze/doc/images/output_static-checks.txt
deleted file mode 100644
index 32222494f6f..00000000000
--- a/dev/breeze/doc/images/output_static-checks.txt
+++ /dev/null
@@ -1 +0,0 @@
-e4e9ca98d368d38237503800292febf1
diff --git a/dev/breeze/doc/images/output_testing.svg b/dev/breeze/doc/images/output_testing.svg
index a844a8ef1b7..56062dfe5c6 100644
--- a/dev/breeze/doc/images/output_testing.svg
+++ b/dev/breeze/doc/images/output_testing.svg
@@ -1,4 +1,4 @@
-<svg class="rich-terminal" viewBox="0 0 1482 733.1999999999999" xmlns="http://www.w3.org/2000/svg">
+<svg class="rich-terminal" viewBox="0 0 1482 757.5999999999999" xmlns="http://www.w3.org/2000/svg">
     <!-- Generated with Rich https://www.textualize.io -->
     <style>
 
@@ -42,7 +42,7 @@
 
     <defs>
     <clipPath id="breeze-testing-clip-terminal">
-      <rect x="0" y="0" width="1463.0" height="682.1999999999999" />
+      <rect x="0" y="0" width="1463.0" height="706.5999999999999" />
     </clipPath>
     <clipPath id="breeze-testing-line-0">
     <rect x="0" y="1.5" width="1464" height="24.65"/>
@@ -125,9 +125,12 @@
 <clipPath id="breeze-testing-line-26">
     <rect x="0" y="635.9" width="1464" height="24.65"/>
             </clipPath>
+<clipPath id="breeze-testing-line-27">
+    <rect x="0" y="660.3" width="1464" height="24.65"/>
+            </clipPath>
     </defs>
 
-    <rect fill="#292929" stroke="rgba(255,255,255,0.35)" stroke-width="1" x="1" y="1" width="1480" height="731.2" rx="8"/><text class="breeze-testing-title" fill="#c5c8c6" text-anchor="middle" x="740" y="27">Command:&#160;testing</text>
+    <rect fill="#292929" stroke="rgba(255,255,255,0.35)" stroke-width="1" x="1" y="1" width="1480" height="755.6" rx="8"/><text class="breeze-testing-title" fill="#c5c8c6" text-anchor="middle" x="740" y="27">Command:&#160;testing</text>
             <g transform="translate(26,22)">
             <circle cx="0" cy="0" r="7" fill="#ff5f57"/>
             <circle cx="22" cy="0" r="7" fill="#febc2e"/>
@@ -154,17 +157,18 @@
 </text><text class="breeze-testing-r5" x="0" y="361.6" textLength="12.2" clip-path="url(#breeze-testing-line-14)">│</text><text class="breeze-testing-r4" x="24.4" y="361.6" textLength="488" clip-path="url(#breeze-testing-line-14)">providers-integration-tests&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-testing-r1" x="536.8" y="361.6" textLength="902.8" clip-path="url(#breeze-testing-line-14)">Run&#160;the&#160;specified&#160;inte [...]
 </text><text class="breeze-testing-r5" x="0" y="386" textLength="1464" clip-path="url(#breeze-testing-line-15)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-testing-r1" x="1464" y="386" textLength="12.2" clip-path="url(#breeze-testing-line-15)">
 </text><text class="breeze-testing-r5" x="0" y="410.4" textLength="24.4" clip-path="url(#breeze-testing-line-16)">╭─</text><text class="breeze-testing-r5" x="24.4" y="410.4" textLength="195.2" clip-path="url(#breeze-testing-line-16)">&#160;Task&#160;SDK&#160;Tests&#160;</text><text class="breeze-testing-r5" x="219.6" y="410.4" textLength="1220" clip-path="url(#breeze-testing-line-16)">────────────────────────────────────────────────────────────────────────────────────────────────────</te [...]
-</text><text class="breeze-testing-r5" x="0" y="434.8" textLength="12.2" clip-path="url(#breeze-testing-line-17)">│</text><text class="breeze-testing-r4" x="24.4" y="434.8" textLength="268.4" clip-path="url(#breeze-testing-line-17)">task-sdk-tests&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-testing-r1" x="317.2" y="434.8" textLength="1122.4" clip-path="url(#breeze-testing-line-17)">Run&#160;task-sdk&#160;tests&#160;-&#160;all&#160;task&#160;SDK&#160;tests&#1 [...]
-</text><text class="breeze-testing-r5" x="0" y="459.2" textLength="1464" clip-path="url(#breeze-testing-line-18)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-testing-r1" x="1464" y="459.2" textLength="12.2" clip-path="url(#breeze-testing-line-18)">
-</text><text class="breeze-testing-r5" x="0" y="483.6" textLength="24.4" clip-path="url(#breeze-testing-line-19)">╭─</text><text class="breeze-testing-r5" x="24.4" y="483.6" textLength="231.8" clip-path="url(#breeze-testing-line-19)">&#160;Airflow&#160;CTL&#160;Tests&#160;</text><text class="breeze-testing-r5" x="256.2" y="483.6" textLength="1183.4" clip-path="url(#breeze-testing-line-19)">─────────────────────────────────────────────────────────────────────────────────────────────────</ [...]
-</text><text class="breeze-testing-r5" x="0" y="508" textLength="12.2" clip-path="url(#breeze-testing-line-20)">│</text><text class="breeze-testing-r4" x="24.4" y="508" textLength="280.6" clip-path="url(#breeze-testing-line-20)">airflow-ctl-tests&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-testing-r1" x="329.4" y="508" textLength="1110.2" clip-path="url(#breeze-testing-line-20)">Run&#160;airflow-ctl&#160;tests&#160;-&#160;all&#160;Airflow&#160;CTL&#160;tests&#160;are&#1 [...]
-</text><text class="breeze-testing-r5" x="0" y="532.4" textLength="1464" clip-path="url(#breeze-testing-line-21)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-testing-r1" x="1464" y="532.4" textLength="12.2" clip-path="url(#breeze-testing-line-21)">
-</text><text class="breeze-testing-r5" x="0" y="556.8" textLength="24.4" clip-path="url(#breeze-testing-line-22)">╭─</text><text class="breeze-testing-r5" x="24.4" y="556.8" textLength="158.6" clip-path="url(#breeze-testing-line-22)">&#160;Other&#160;Tests&#160;</text><text class="breeze-testing-r5" x="183" y="556.8" textLength="1256.6" clip-path="url(#breeze-testing-line-22)">───────────────────────────────────────────────────────────────────────────────────────────────────────</text><t [...]
-</text><text class="breeze-testing-r5" x="0" y="581.2" textLength="12.2" clip-path="url(#breeze-testing-line-23)">│</text><text class="breeze-testing-r4" x="24.4" y="581.2" textLength="597.8" clip-path="url(#breeze-testing-line-23)">system-tests&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breez [...]
-</text><text class="breeze-testing-r5" x="0" y="605.6" textLength="12.2" clip-path="url(#breeze-testing-line-24)">│</text><text class="breeze-testing-r4" x="24.4" y="605.6" textLength="597.8" clip-path="url(#breeze-testing-line-24)">helm-tests&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text cl [...]
-</text><text class="breeze-testing-r5" x="0" y="630" textLength="12.2" clip-path="url(#breeze-testing-line-25)">│</text><text class="breeze-testing-r4" x="24.4" y="630" textLength="597.8" clip-path="url(#breeze-testing-line-25)">docker-compose-tests&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-testing-r1" x="646.6" y="630" textLength=" [...]
-</text><text class="breeze-testing-r5" x="0" y="654.4" textLength="12.2" clip-path="url(#breeze-testing-line-26)">│</text><text class="breeze-testing-r4" x="24.4" y="654.4" textLength="597.8" clip-path="url(#breeze-testing-line-26)">python-api-client-tests&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-testing-r1" x="646.6" y="654.4" textLength="793" clip [...]
-</text><text class="breeze-testing-r5" x="0" y="678.8" textLength="1464" clip-path="url(#breeze-testing-line-27)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-testing-r1" x="1464" y="678.8" textLength="12.2" clip-path="url(#breeze-testing-line-27)">
+</text><text class="breeze-testing-r5" x="0" y="434.8" textLength="12.2" clip-path="url(#breeze-testing-line-17)">│</text><text class="breeze-testing-r4" x="24.4" y="434.8" textLength="414.8" clip-path="url(#breeze-testing-line-17)">task-sdk-tests&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-testing-r1" x="463.6" y="434.8" textLength="976" clip-path="url(#breeze-testing-line-17)">Run&#160 [...]
+</text><text class="breeze-testing-r5" x="0" y="459.2" textLength="12.2" clip-path="url(#breeze-testing-line-18)">│</text><text class="breeze-testing-r4" x="24.4" y="459.2" textLength="414.8" clip-path="url(#breeze-testing-line-18)">task-sdk-integration-tests&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-testing-r1" x="463.6" y="459.2" textLength="976" clip-path="url(#breeze-testing-line-18)">Run&#160;task&#160;SDK&#160;integration&#160;tests.&#160;&#160;&#160 [...]
+</text><text class="breeze-testing-r5" x="0" y="483.6" textLength="1464" clip-path="url(#breeze-testing-line-19)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-testing-r1" x="1464" y="483.6" textLength="12.2" clip-path="url(#breeze-testing-line-19)">
+</text><text class="breeze-testing-r5" x="0" y="508" textLength="24.4" clip-path="url(#breeze-testing-line-20)">╭─</text><text class="breeze-testing-r5" x="24.4" y="508" textLength="231.8" clip-path="url(#breeze-testing-line-20)">&#160;Airflow&#160;CTL&#160;Tests&#160;</text><text class="breeze-testing-r5" x="256.2" y="508" textLength="1183.4" clip-path="url(#breeze-testing-line-20)">─────────────────────────────────────────────────────────────────────────────────────────────────</text>< [...]
+</text><text class="breeze-testing-r5" x="0" y="532.4" textLength="12.2" clip-path="url(#breeze-testing-line-21)">│</text><text class="breeze-testing-r4" x="24.4" y="532.4" textLength="280.6" clip-path="url(#breeze-testing-line-21)">airflow-ctl-tests&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-testing-r1" x="329.4" y="532.4" textLength="1110.2" clip-path="url(#breeze-testing-line-21)">Run&#160;airflow-ctl&#160;tests&#160;-&#160;all&#160;Airflow&#160;CTL&#160;tests&#160; [...]
+</text><text class="breeze-testing-r5" x="0" y="556.8" textLength="1464" clip-path="url(#breeze-testing-line-22)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-testing-r1" x="1464" y="556.8" textLength="12.2" clip-path="url(#breeze-testing-line-22)">
+</text><text class="breeze-testing-r5" x="0" y="581.2" textLength="24.4" clip-path="url(#breeze-testing-line-23)">╭─</text><text class="breeze-testing-r5" x="24.4" y="581.2" textLength="158.6" clip-path="url(#breeze-testing-line-23)">&#160;Other&#160;Tests&#160;</text><text class="breeze-testing-r5" x="183" y="581.2" textLength="1256.6" clip-path="url(#breeze-testing-line-23)">───────────────────────────────────────────────────────────────────────────────────────────────────────</text><t [...]
+</text><text class="breeze-testing-r5" x="0" y="605.6" textLength="12.2" clip-path="url(#breeze-testing-line-24)">│</text><text class="breeze-testing-r4" x="24.4" y="605.6" textLength="597.8" clip-path="url(#breeze-testing-line-24)">system-tests&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breez [...]
+</text><text class="breeze-testing-r5" x="0" y="630" textLength="12.2" clip-path="url(#breeze-testing-line-25)">│</text><text class="breeze-testing-r4" x="24.4" y="630" textLength="597.8" clip-path="url(#breeze-testing-line-25)">helm-tests&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class= [...]
+</text><text class="breeze-testing-r5" x="0" y="654.4" textLength="12.2" clip-path="url(#breeze-testing-line-26)">│</text><text class="breeze-testing-r4" x="24.4" y="654.4" textLength="597.8" clip-path="url(#breeze-testing-line-26)">docker-compose-tests&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-testing-r1" x="646.6" y="654.4" textLe [...]
+</text><text class="breeze-testing-r5" x="0" y="678.8" textLength="12.2" clip-path="url(#breeze-testing-line-27)">│</text><text class="breeze-testing-r4" x="24.4" y="678.8" textLength="597.8" clip-path="url(#breeze-testing-line-27)">python-api-client-tests&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-testing-r1" x="646.6" y="678.8" textLength="793" clip [...]
+</text><text class="breeze-testing-r5" x="0" y="703.2" textLength="1464" clip-path="url(#breeze-testing-line-28)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-testing-r1" x="1464" y="703.2" textLength="12.2" clip-path="url(#breeze-testing-line-28)">
 </text>
     </g>
     </g>
diff --git a/dev/breeze/doc/images/output_testing.txt b/dev/breeze/doc/images/output_testing.txt
index 8b40c280ece..5b2bdddd426 100644
--- a/dev/breeze/doc/images/output_testing.txt
+++ b/dev/breeze/doc/images/output_testing.txt
@@ -1 +1 @@
-9d4f685eff3c4edcb822384a4244ab3d
+a5b5266ca2a299b69fb8e0c5e4f712b2
diff --git a/dev/breeze/doc/images/output_testing_core-tests.svg b/dev/breeze/doc/images/output_testing_core-tests.svg
index 1355e3171a3..96f7bb063c9 100644
--- a/dev/breeze/doc/images/output_testing_core-tests.svg
+++ b/dev/breeze/doc/images/output_testing_core-tests.svg
@@ -1,4 +1,4 @@
-<svg class="rich-terminal" viewBox="0 0 1482 2758.3999999999996" xmlns="http://www.w3.org/2000/svg">
+<svg class="rich-terminal" viewBox="0 0 1482 2782.7999999999997" xmlns="http://www.w3.org/2000/svg">
     <!-- Generated with Rich https://www.textualize.io -->
     <style>
 
@@ -43,7 +43,7 @@
 
     <defs>
     <clipPath id="breeze-testing-core-tests-clip-terminal">
-      <rect x="0" y="0" width="1463.0" height="2707.3999999999996" />
+      <rect x="0" y="0" width="1463.0" height="2731.7999999999997" />
     </clipPath>
     <clipPath id="breeze-testing-core-tests-line-0">
     <rect x="0" y="1.5" width="1464" height="24.65"/>
@@ -375,9 +375,12 @@
 <clipPath id="breeze-testing-core-tests-line-109">
     <rect x="0" y="2661.1" width="1464" height="24.65"/>
             </clipPath>
+<clipPath id="breeze-testing-core-tests-line-110">
+    <rect x="0" y="2685.5" width="1464" height="24.65"/>
+            </clipPath>
     </defs>
 
-    <rect fill="#292929" stroke="rgba(255,255,255,0.35)" stroke-width="1" x="1" y="1" width="1480" height="2756.4" rx="8"/><text class="breeze-testing-core-tests-title" fill="#c5c8c6" text-anchor="middle" x="740" y="27">Command:&#160;testing&#160;core-tests</text>
+    <rect fill="#292929" stroke="rgba(255,255,255,0.35)" stroke-width="1" x="1" y="1" width="1480" height="2780.8" rx="8"/><text class="breeze-testing-core-tests-title" fill="#c5c8c6" text-anchor="middle" x="740" y="27">Command:&#160;testing&#160;core-tests</text>
             <g transform="translate(26,22)">
             <circle cx="0" cy="0" r="7" fill="#ff5f57"/>
             <circle cx="22" cy="0" r="7" fill="#febc2e"/>
@@ -451,53 +454,54 @@
 </text><text class="breeze-testing-core-tests-r5" x="0" y="1508.4" textLength="1464" clip-path="url(#breeze-testing-core-tests-line-61)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-testing-core-tests-r1" x="1464" y="1508.4" textLength="12.2" clip-path="url(#breeze-testing-core-tests-line-61)">
 </text><text class="breeze-testing-core-tests-r5" x="0" y="1532.8" textLength="24.4" clip-path="url(#breeze-testing-core-tests-line-62)">╭─</text><text class="breeze-testing-core-tests-r5" x="24.4" y="1532.8" textLength="610" clip-path="url(#breeze-testing-core-tests-line-62)">&#160;Upgrading/downgrading/removing&#160;selected&#160;packages&#160;</text><text class="breeze-testing-core-tests-r5" x="634.4" y="1532.8" textLength="805.2" clip-path="url(#breeze-testing-core-tests-line-62)">── [...]
 </text><text class="breeze-testing-core-tests-r5" x="0" y="1557.2" textLength="12.2" clip-path="url(#breeze-testing-core-tests-line-63)">│</text><text class="breeze-testing-core-tests-r4" x="24.4" y="1557.2" textLength="170.8" clip-path="url(#breeze-testing-core-tests-line-63)">--upgrade-boto</text><text class="breeze-testing-core-tests-r1" x="341.6" y="1557.2" textLength="866.2" clip-path="url(#breeze-testing-core-tests-line-63)">Remove&#160;aiobotocore&#160;and&#160;upgrade&#160;botoco [...]
-</text><text class="breeze-testing-core-tests-r5" x="0" y="1581.6" textLength="12.2" clip-path="url(#breeze-testing-core-tests-line-64)">│</text><text class="breeze-testing-core-tests-r4" x="24.4" y="1581.6" textLength="268.4" clip-path="url(#breeze-testing-core-tests-line-64)">--downgrade-sqlalchemy</text><text class="breeze-testing-core-tests-r1" x="341.6" y="1581.6" textLength="610" clip-path="url(#breeze-testing-core-tests-line-64)">Downgrade&#160;SQLAlchemy&#160;to&#160;minimum&#160 [...]
-</text><text class="breeze-testing-core-tests-r5" x="0" y="1606" textLength="12.2" clip-path="url(#breeze-testing-core-tests-line-65)">│</text><text class="breeze-testing-core-tests-r4" x="24.4" y="1606" textLength="244" clip-path="url(#breeze-testing-core-tests-line-65)">--downgrade-pendulum</text><text class="breeze-testing-core-tests-r1" x="341.6" y="1606" textLength="585.6" clip-path="url(#breeze-testing-core-tests-line-65)">Downgrade&#160;Pendulum&#160;to&#160;minimum&#160;supported [...]
-</text><text class="breeze-testing-core-tests-r5" x="0" y="1630.4" textLength="1464" clip-path="url(#breeze-testing-core-tests-line-66)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-testing-core-tests-r1" x="1464" y="1630.4" textLength="12.2" clip-path="url(#breeze-testing-core-tests-line-66)">
-</text><text class="breeze-testing-core-tests-r5" x="0" y="1654.8" textLength="24.4" clip-path="url(#breeze-testing-core-tests-line-67)">╭─</text><text class="breeze-testing-core-tests-r5" x="24.4" y="1654.8" textLength="402.6" clip-path="url(#breeze-testing-core-tests-line-67)">&#160;Advanced&#160;flag&#160;for&#160;tests&#160;command&#160;</text><text class="breeze-testing-core-tests-r5" x="427" y="1654.8" textLength="1012.6" clip-path="url(#breeze-testing-core-tests-line-67)">──────── [...]
-</text><text class="breeze-testing-core-tests-r5" x="0" y="1679.2" textLength="12.2" clip-path="url(#breeze-testing-core-tests-line-68)">│</text><text class="breeze-testing-core-tests-r4" x="24.4" y="1679.2" textLength="231.8" clip-path="url(#breeze-testing-core-tests-line-68)">--github-repository</text><text class="breeze-testing-core-tests-r7" x="366" y="1679.2" textLength="24.4" clip-path="url(#breeze-testing-core-tests-line-68)">-g</text><text class="breeze-testing-core-tests-r1" x=" [...]
-</text><text class="breeze-testing-core-tests-r5" x="0" y="1703.6" textLength="12.2" clip-path="url(#breeze-testing-core-tests-line-69)">│</text><text class="breeze-testing-core-tests-r4" x="24.4" y="1703.6" textLength="183" clip-path="url(#breeze-testing-core-tests-line-69)">--mount-sources</text><text class="breeze-testing-core-tests-r1" x="414.8" y="1703.6" textLength="1024.8" clip-path="url(#breeze-testing-core-tests-line-69)">Choose&#160;scope&#160;of&#160;local&#160;sources&#160;th [...]
-</text><text class="breeze-testing-core-tests-r5" x="0" y="1728" textLength="12.2" clip-path="url(#breeze-testing-core-tests-line-70)">│</text><text class="breeze-testing-core-tests-r1" x="414.8" y="1728" textLength="1024.8" clip-path="url(#breeze-testing-core-tests-line-70)">selected).&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;& [...]
-</text><text class="breeze-testing-core-tests-r5" x="0" y="1752.4" textLength="12.2" clip-path="url(#breeze-testing-core-tests-line-71)">│</text><text class="breeze-testing-core-tests-r6" x="414.8" y="1752.4" textLength="1024.8" clip-path="url(#breeze-testing-core-tests-line-71)">(selected&#160;|&#160;all&#160;|&#160;skip&#160;|&#160;remove&#160;|&#160;tests&#160;|&#160;providers-and-tests)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#1 [...]
-</text><text class="breeze-testing-core-tests-r5" x="0" y="1776.8" textLength="12.2" clip-path="url(#breeze-testing-core-tests-line-72)">│</text><text class="breeze-testing-core-tests-r5" x="414.8" y="1776.8" textLength="1024.8" clip-path="url(#breeze-testing-core-tests-line-72)">[default:&#160;selected]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;& [...]
-</text><text class="breeze-testing-core-tests-r5" x="0" y="1801.2" textLength="12.2" clip-path="url(#breeze-testing-core-tests-line-73)">│</text><text class="breeze-testing-core-tests-r4" x="24.4" y="1801.2" textLength="317.2" clip-path="url(#breeze-testing-core-tests-line-73)">--skip-docker-compose-down</text><text class="breeze-testing-core-tests-r1" x="414.8" y="1801.2" textLength="549" clip-path="url(#breeze-testing-core-tests-line-73)">Skips&#160;running&#160;docker-compose&#160;dow [...]
-</text><text class="breeze-testing-core-tests-r5" x="0" y="1825.6" textLength="12.2" clip-path="url(#breeze-testing-core-tests-line-74)">│</text><text class="breeze-testing-core-tests-r4" x="24.4" y="1825.6" textLength="244" clip-path="url(#breeze-testing-core-tests-line-74)">--keep-env-variables</text><text class="breeze-testing-core-tests-r1" x="414.8" y="1825.6" textLength="1000.4" clip-path="url(#breeze-testing-core-tests-line-74)">Do&#160;not&#160;clear&#160;environment&#160;variabl [...]
-</text><text class="breeze-testing-core-tests-r5" x="0" y="1850" textLength="1464" clip-path="url(#breeze-testing-core-tests-line-75)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-testing-core-tests-r1" x="1464" y="1850" textLength="12.2" clip-path="url(#breeze-testing-core-tests-line-75)">
-</text><text class="breeze-testing-core-tests-r5" x="0" y="1874.4" textLength="24.4" clip-path="url(#breeze-testing-core-tests-line-76)">╭─</text><text class="breeze-testing-core-tests-r5" x="24.4" y="1874.4" textLength="622.2" clip-path="url(#breeze-testing-core-tests-line-76)">&#160;Advanced&#160;flag&#160;for&#160;installing&#160;airflow&#160;in&#160;container&#160;</text><text class="breeze-testing-core-tests-r5" x="646.6" y="1874.4" textLength="793" clip-path="url(#breeze-testing-co [...]
-</text><text class="breeze-testing-core-tests-r5" x="0" y="1898.8" textLength="12.2" clip-path="url(#breeze-testing-core-tests-line-77)">│</text><text class="breeze-testing-core-tests-r4" x="24.4" y="1898.8" textLength="378.2" clip-path="url(#breeze-testing-core-tests-line-77)">--airflow-constraints-reference</text><text class="breeze-testing-core-tests-r1" x="756.4" y="1898.8" textLength="683.2" clip-path="url(#breeze-testing-core-tests-line-77)">Constraint&#160;reference&#160;to&#160;u [...]
-</text><text class="breeze-testing-core-tests-r5" x="0" y="1923.2" textLength="12.2" clip-path="url(#breeze-testing-core-tests-line-78)">│</text><text class="breeze-testing-core-tests-r1" x="756.4" y="1923.2" textLength="683.2" clip-path="url(#breeze-testing-core-tests-line-78)">(used&#160;in&#160;calculated&#160;constraints&#160;URL).&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-testing-core-t [...]
-</text><text class="breeze-testing-core-tests-r5" x="0" y="1947.6" textLength="12.2" clip-path="url(#breeze-testing-core-tests-line-79)">│</text><text class="breeze-testing-core-tests-r6" x="756.4" y="1947.6" textLength="683.2" clip-path="url(#breeze-testing-core-tests-line-79)">(TEXT)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&# [...]
-</text><text class="breeze-testing-core-tests-r5" x="0" y="1972" textLength="12.2" clip-path="url(#breeze-testing-core-tests-line-80)">│</text><text class="breeze-testing-core-tests-r4" x="24.4" y="1972" textLength="341.6" clip-path="url(#breeze-testing-core-tests-line-80)">--clean-airflow-installation</text><text class="breeze-testing-core-tests-r1" x="756.4" y="1972" textLength="683.2" clip-path="url(#breeze-testing-core-tests-line-80)">Clean&#160;the&#160;airflow&#160;installation&#16 [...]
-</text><text class="breeze-testing-core-tests-r5" x="0" y="1996.4" textLength="12.2" clip-path="url(#breeze-testing-core-tests-line-81)">│</text><text class="breeze-testing-core-tests-r1" x="756.4" y="1996.4" textLength="158.6" clip-path="url(#breeze-testing-core-tests-line-81)">specified&#160;by&#160;</text><text class="breeze-testing-core-tests-r4" x="915" y="1996.4" textLength="256.2" clip-path="url(#breeze-testing-core-tests-line-81)">--use-airflow-version</text><text class="breeze-t [...]
-</text><text class="breeze-testing-core-tests-r5" x="0" y="2020.8" textLength="12.2" clip-path="url(#breeze-testing-core-tests-line-82)">│</text><text class="breeze-testing-core-tests-r4" x="24.4" y="2020.8" textLength="329.4" clip-path="url(#breeze-testing-core-tests-line-82)">--force-lowest-dependencies</text><text class="breeze-testing-core-tests-r1" x="756.4" y="2020.8" textLength="683.2" clip-path="url(#breeze-testing-core-tests-line-82)">Run&#160;tests&#160;for&#160;the&#160;lowest [...]
-</text><text class="breeze-testing-core-tests-r5" x="0" y="2045.2" textLength="12.2" clip-path="url(#breeze-testing-core-tests-line-83)">│</text><text class="breeze-testing-core-tests-r1" x="756.4" y="2045.2" textLength="683.2" clip-path="url(#breeze-testing-core-tests-line-83)">or&#160;selected&#160;provider&#160;if&#160;`Provider[PROVIDER_ID]`&#160;is&#160;used&#160;</text><text class="breeze-testing-core-tests-r5" x="1451.8" y="2045.2" textLength="12.2" clip-path="url(#breeze-testing- [...]
-</text><text class="breeze-testing-core-tests-r5" x="0" y="2069.6" textLength="12.2" clip-path="url(#breeze-testing-core-tests-line-84)">│</text><text class="breeze-testing-core-tests-r1" x="756.4" y="2069.6" textLength="683.2" clip-path="url(#breeze-testing-core-tests-line-84)">as&#160;test&#160;type.&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#1 [...]
-</text><text class="breeze-testing-core-tests-r5" x="0" y="2094" textLength="12.2" clip-path="url(#breeze-testing-core-tests-line-85)">│</text><text class="breeze-testing-core-tests-r4" x="24.4" y="2094" textLength="414.8" clip-path="url(#breeze-testing-core-tests-line-85)">--install-airflow-with-constraints</text><text class="breeze-testing-core-tests-r1" x="439.2" y="2094" textLength="12.2" clip-path="url(#breeze-testing-core-tests-line-85)">/</text><text class="breeze-testing-core-tes [...]
-</text><text class="breeze-testing-core-tests-r5" x="0" y="2118.4" textLength="12.2" clip-path="url(#breeze-testing-core-tests-line-86)">│</text><text class="breeze-testing-core-tests-r4" x="24.4" y="2118.4" textLength="195.2" clip-path="url(#breeze-testing-core-tests-line-86)">with-constraints</text><text class="breeze-testing-core-tests-r1" x="756.4" y="2118.4" textLength="683.2" clip-path="url(#breeze-testing-core-tests-line-86)">determined&#160;from&#160;package&#160;or&#160;airflow& [...]
-</text><text class="breeze-testing-core-tests-r5" x="0" y="2142.8" textLength="12.2" clip-path="url(#breeze-testing-core-tests-line-87)">│</text><text class="breeze-testing-core-tests-r5" x="756.4" y="2142.8" textLength="683.2" clip-path="url(#breeze-testing-core-tests-line-87)">[default:&#160;no-install-airflow-with-constraints]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-testing-core-tests-r5" x="1451.8" y="2142.8" textLength="12.2" clip-path=" [...]
-</text><text class="breeze-testing-core-tests-r5" x="0" y="2167.2" textLength="12.2" clip-path="url(#breeze-testing-core-tests-line-88)">│</text><text class="breeze-testing-core-tests-r4" x="24.4" y="2167.2" textLength="256.2" clip-path="url(#breeze-testing-core-tests-line-88)">--distribution-format</text><text class="breeze-testing-core-tests-r1" x="756.4" y="2167.2" textLength="231.8" clip-path="url(#breeze-testing-core-tests-line-88)">Format&#160;of&#160;packages.</text><text class="b [...]
-</text><text class="breeze-testing-core-tests-r5" x="0" y="2191.6" textLength="12.2" clip-path="url(#breeze-testing-core-tests-line-89)">│</text><text class="breeze-testing-core-tests-r5" x="756.4" y="2191.6" textLength="231.8" clip-path="url(#breeze-testing-core-tests-line-89)">[default:&#160;wheel]&#160;&#160;&#160;</text><text class="breeze-testing-core-tests-r5" x="1451.8" y="2191.6" textLength="12.2" clip-path="url(#breeze-testing-core-tests-line-89)">│</text><text class="breeze-tes [...]
-</text><text class="breeze-testing-core-tests-r5" x="0" y="2216" textLength="12.2" clip-path="url(#breeze-testing-core-tests-line-90)">│</text><text class="breeze-testing-core-tests-r4" x="24.4" y="2216" textLength="256.2" clip-path="url(#breeze-testing-core-tests-line-90)">--use-airflow-version</text><text class="breeze-testing-core-tests-r1" x="756.4" y="2216" textLength="683.2" clip-path="url(#breeze-testing-core-tests-line-90)">Use&#160;(reinstall&#160;at&#160;entry)&#160;Airflow&#16 [...]
-</text><text class="breeze-testing-core-tests-r5" x="0" y="2240.4" textLength="12.2" clip-path="url(#breeze-testing-core-tests-line-91)">│</text><text class="breeze-testing-core-tests-r1" x="756.4" y="2240.4" textLength="683.2" clip-path="url(#breeze-testing-core-tests-line-91)">can&#160;also&#160;be&#160;version&#160;(to&#160;install&#160;from&#160;PyPI),&#160;`none`,&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-testing-core-tests-r5" x="1451.8" y="2240.4" textLength="12.2" c [...]
-</text><text class="breeze-testing-core-tests-r5" x="0" y="2264.8" textLength="12.2" clip-path="url(#breeze-testing-core-tests-line-92)">│</text><text class="breeze-testing-core-tests-r1" x="756.4" y="2264.8" textLength="683.2" clip-path="url(#breeze-testing-core-tests-line-92)">`wheel`,&#160;or&#160;`sdist`&#160;to&#160;install&#160;from&#160;`dist`&#160;folder&#160;or&#160;&#160;&#160;&#160;</text><text class="breeze-testing-core-tests-r5" x="1451.8" y="2264.8" textLength="12.2" clip-p [...]
-</text><text class="breeze-testing-core-tests-r5" x="0" y="2289.2" textLength="12.2" clip-path="url(#breeze-testing-core-tests-line-93)">│</text><text class="breeze-testing-core-tests-r1" x="756.4" y="2289.2" textLength="683.2" clip-path="url(#breeze-testing-core-tests-line-93)">`owner/repo:branch`&#160;to&#160;install&#160;from&#160;GitHub&#160;repo.&#160;Uses&#160;&#160;&#160;</text><text class="breeze-testing-core-tests-r5" x="1451.8" y="2289.2" textLength="12.2" clip-path="url(#breez [...]
-</text><text class="breeze-testing-core-tests-r5" x="0" y="2313.6" textLength="12.2" clip-path="url(#breeze-testing-core-tests-line-94)">│</text><text class="breeze-testing-core-tests-r4" x="756.4" y="2313.6" textLength="183" clip-path="url(#breeze-testing-core-tests-line-94)">--mount-sources</text><text class="breeze-testing-core-tests-r1" x="939.4" y="2313.6" textLength="500.2" clip-path="url(#breeze-testing-core-tests-line-94)">&#160;`remove`&#160;if&#160;not&#160;specified,&#160;but& [...]
-</text><text class="breeze-testing-core-tests-r5" x="0" y="2338" textLength="12.2" clip-path="url(#breeze-testing-core-tests-line-95)">│</text><text class="breeze-testing-core-tests-r1" x="756.4" y="2338" textLength="683.2" clip-path="url(#breeze-testing-core-tests-line-95)">`providers-and-tests`&#160;or&#160;`tests`&#160;can&#160;be&#160;specified&#160;for&#160;&#160;&#160;</text><text class="breeze-testing-core-tests-r5" x="1451.8" y="2338" textLength="12.2" clip-path="url(#breeze-test [...]
-</text><text class="breeze-testing-core-tests-r5" x="0" y="2362.4" textLength="12.2" clip-path="url(#breeze-testing-core-tests-line-96)">│</text><text class="breeze-testing-core-tests-r1" x="756.4" y="2362.4" textLength="12.2" clip-path="url(#breeze-testing-core-tests-line-96)">`</text><text class="breeze-testing-core-tests-r4" x="768.6" y="2362.4" textLength="183" clip-path="url(#breeze-testing-core-tests-line-96)">--mount-sources</text><text class="breeze-testing-core-tests-r1" x="951. [...]
-</text><text class="breeze-testing-core-tests-r5" x="0" y="2386.8" textLength="12.2" clip-path="url(#breeze-testing-core-tests-line-97)">│</text><text class="breeze-testing-core-tests-r6" x="756.4" y="2386.8" textLength="683.2" clip-path="url(#breeze-testing-core-tests-line-97)">(none&#160;|&#160;wheel&#160;|&#160;sdist&#160;|&#160;&lt;airflow_version&gt;&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-testing-core-tests-r5"  [...]
-</text><text class="breeze-testing-core-tests-r5" x="0" y="2411.2" textLength="12.2" clip-path="url(#breeze-testing-core-tests-line-98)">│</text><text class="breeze-testing-core-tests-r6" x="756.4" y="2411.2" textLength="683.2" clip-path="url(#breeze-testing-core-tests-line-98)">&lt;owner/repo:branch&gt;)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; [...]
-</text><text class="breeze-testing-core-tests-r5" x="0" y="2435.6" textLength="12.2" clip-path="url(#breeze-testing-core-tests-line-99)">│</text><text class="breeze-testing-core-tests-r4" x="24.4" y="2435.6" textLength="244" clip-path="url(#breeze-testing-core-tests-line-99)">--allow-pre-releases</text><text class="breeze-testing-core-tests-r1" x="756.4" y="2435.6" textLength="683.2" clip-path="url(#breeze-testing-core-tests-line-99)">Allow&#160;pre-releases&#160;of&#160;Airflow,&#160;ta [...]
-</text><text class="breeze-testing-core-tests-r5" x="0" y="2460" textLength="12.2" clip-path="url(#breeze-testing-core-tests-line-100)">│</text><text class="breeze-testing-core-tests-r1" x="756.4" y="2460" textLength="683.2" clip-path="url(#breeze-testing-core-tests-line-100)">be&#160;installed.&#160;Set&#160;to&#160;true&#160;automatically&#160;for&#160;pre-release&#160;</text><text class="breeze-testing-core-tests-r5" x="1451.8" y="2460" textLength="12.2" clip-path="url(#breeze-testing [...]
-</text><text class="breeze-testing-core-tests-r5" x="0" y="2484.4" textLength="12.2" clip-path="url(#breeze-testing-core-tests-line-101)">│</text><text class="breeze-testing-core-tests-r4" x="756.4" y="2484.4" textLength="256.2" clip-path="url(#breeze-testing-core-tests-line-101)">--use-airflow-version</text><text class="breeze-testing-core-tests-r1" x="1012.6" y="2484.4" textLength="427" clip-path="url(#breeze-testing-core-tests-line-101)">)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#16 [...]
-</text><text class="breeze-testing-core-tests-r5" x="0" y="2508.8" textLength="12.2" clip-path="url(#breeze-testing-core-tests-line-102)">│</text><text class="breeze-testing-core-tests-r4" x="24.4" y="2508.8" textLength="353.8" clip-path="url(#breeze-testing-core-tests-line-102)">--use-distributions-from-dist</text><text class="breeze-testing-core-tests-r1" x="756.4" y="2508.8" textLength="402.6" clip-path="url(#breeze-testing-core-tests-line-102)">Install&#160;all&#160;found&#160;distri [...]
-</text><text class="breeze-testing-core-tests-r5" x="0" y="2533.2" textLength="12.2" clip-path="url(#breeze-testing-core-tests-line-103)">│</text><text class="breeze-testing-core-tests-r1" x="756.4" y="2533.2" textLength="683.2" clip-path="url(#breeze-testing-core-tests-line-103)">determines&#160;type)&#160;from&#160;&#x27;dist&#x27;&#160;folder&#160;when&#160;entering&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-testing-core-tests-r5" x="1451.8" y="2533.2" textLen [...]
-</text><text class="breeze-testing-core-tests-r5" x="0" y="2557.6" textLength="12.2" clip-path="url(#breeze-testing-core-tests-line-104)">│</text><text class="breeze-testing-core-tests-r1" x="756.4" y="2557.6" textLength="683.2" clip-path="url(#breeze-testing-core-tests-line-104)">breeze.&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160 [...]
-</text><text class="breeze-testing-core-tests-r5" x="0" y="2582" textLength="1464" clip-path="url(#breeze-testing-core-tests-line-105)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-testing-core-tests-r1" x="1464" y="2582" textLength="12.2" clip-path="url(#breeze-testing-core-tests-line-105)">
-</text><text class="breeze-testing-core-tests-r5" x="0" y="2606.4" textLength="24.4" clip-path="url(#breeze-testing-core-tests-line-106)">╭─</text><text class="breeze-testing-core-tests-r5" x="24.4" y="2606.4" textLength="195.2" clip-path="url(#breeze-testing-core-tests-line-106)">&#160;Common&#160;options&#160;</text><text class="breeze-testing-core-tests-r5" x="219.6" y="2606.4" textLength="1220" clip-path="url(#breeze-testing-core-tests-line-106)">───────────────────────────────────── [...]
-</text><text class="breeze-testing-core-tests-r5" x="0" y="2630.8" textLength="12.2" clip-path="url(#breeze-testing-core-tests-line-107)">│</text><text class="breeze-testing-core-tests-r4" x="24.4" y="2630.8" textLength="109.8" clip-path="url(#breeze-testing-core-tests-line-107)">--dry-run</text><text class="breeze-testing-core-tests-r7" x="158.6" y="2630.8" textLength="24.4" clip-path="url(#breeze-testing-core-tests-line-107)">-D</text><text class="breeze-testing-core-tests-r1" x="207.4 [...]
-</text><text class="breeze-testing-core-tests-r5" x="0" y="2655.2" textLength="12.2" clip-path="url(#breeze-testing-core-tests-line-108)">│</text><text class="breeze-testing-core-tests-r4" x="24.4" y="2655.2" textLength="109.8" clip-path="url(#breeze-testing-core-tests-line-108)">--verbose</text><text class="breeze-testing-core-tests-r7" x="158.6" y="2655.2" textLength="24.4" clip-path="url(#breeze-testing-core-tests-line-108)">-v</text><text class="breeze-testing-core-tests-r1" x="207.4 [...]
-</text><text class="breeze-testing-core-tests-r5" x="0" y="2679.6" textLength="12.2" clip-path="url(#breeze-testing-core-tests-line-109)">│</text><text class="breeze-testing-core-tests-r4" x="24.4" y="2679.6" textLength="73.2" clip-path="url(#breeze-testing-core-tests-line-109)">--help</text><text class="breeze-testing-core-tests-r7" x="158.6" y="2679.6" textLength="24.4" clip-path="url(#breeze-testing-core-tests-line-109)">-h</text><text class="breeze-testing-core-tests-r1" x="207.4" y= [...]
-</text><text class="breeze-testing-core-tests-r5" x="0" y="2704" textLength="1464" clip-path="url(#breeze-testing-core-tests-line-110)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-testing-core-tests-r1" x="1464" y="2704" textLength="12.2" clip-path="url(#breeze-testing-core-tests-line-110)">
+</text><text class="breeze-testing-core-tests-r5" x="0" y="1581.6" textLength="12.2" clip-path="url(#breeze-testing-core-tests-line-64)">│</text><text class="breeze-testing-core-tests-r4" x="24.4" y="1581.6" textLength="244" clip-path="url(#breeze-testing-core-tests-line-64)">--upgrade-sqlalchemy</text><text class="breeze-testing-core-tests-r1" x="341.6" y="1581.6" textLength="500.2" clip-path="url(#breeze-testing-core-tests-line-64)">Upgrade&#160;SQLAlchemy&#160;to&#160;the&#160;latest& [...]
+</text><text class="breeze-testing-core-tests-r5" x="0" y="1606" textLength="12.2" clip-path="url(#breeze-testing-core-tests-line-65)">│</text><text class="breeze-testing-core-tests-r4" x="24.4" y="1606" textLength="268.4" clip-path="url(#breeze-testing-core-tests-line-65)">--downgrade-sqlalchemy</text><text class="breeze-testing-core-tests-r1" x="341.6" y="1606" textLength="610" clip-path="url(#breeze-testing-core-tests-line-65)">Downgrade&#160;SQLAlchemy&#160;to&#160;minimum&#160;suppo [...]
+</text><text class="breeze-testing-core-tests-r5" x="0" y="1630.4" textLength="12.2" clip-path="url(#breeze-testing-core-tests-line-66)">│</text><text class="breeze-testing-core-tests-r4" x="24.4" y="1630.4" textLength="244" clip-path="url(#breeze-testing-core-tests-line-66)">--downgrade-pendulum</text><text class="breeze-testing-core-tests-r1" x="341.6" y="1630.4" textLength="585.6" clip-path="url(#breeze-testing-core-tests-line-66)">Downgrade&#160;Pendulum&#160;to&#160;minimum&#160;sup [...]
+</text><text class="breeze-testing-core-tests-r5" x="0" y="1654.8" textLength="1464" clip-path="url(#breeze-testing-core-tests-line-67)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-testing-core-tests-r1" x="1464" y="1654.8" textLength="12.2" clip-path="url(#breeze-testing-core-tests-line-67)">
+</text><text class="breeze-testing-core-tests-r5" x="0" y="1679.2" textLength="24.4" clip-path="url(#breeze-testing-core-tests-line-68)">╭─</text><text class="breeze-testing-core-tests-r5" x="24.4" y="1679.2" textLength="402.6" clip-path="url(#breeze-testing-core-tests-line-68)">&#160;Advanced&#160;flag&#160;for&#160;tests&#160;command&#160;</text><text class="breeze-testing-core-tests-r5" x="427" y="1679.2" textLength="1012.6" clip-path="url(#breeze-testing-core-tests-line-68)">──────── [...]
+</text><text class="breeze-testing-core-tests-r5" x="0" y="1703.6" textLength="12.2" clip-path="url(#breeze-testing-core-tests-line-69)">│</text><text class="breeze-testing-core-tests-r4" x="24.4" y="1703.6" textLength="231.8" clip-path="url(#breeze-testing-core-tests-line-69)">--github-repository</text><text class="breeze-testing-core-tests-r7" x="366" y="1703.6" textLength="24.4" clip-path="url(#breeze-testing-core-tests-line-69)">-g</text><text class="breeze-testing-core-tests-r1" x=" [...]
+</text><text class="breeze-testing-core-tests-r5" x="0" y="1728" textLength="12.2" clip-path="url(#breeze-testing-core-tests-line-70)">│</text><text class="breeze-testing-core-tests-r4" x="24.4" y="1728" textLength="183" clip-path="url(#breeze-testing-core-tests-line-70)">--mount-sources</text><text class="breeze-testing-core-tests-r1" x="414.8" y="1728" textLength="1024.8" clip-path="url(#breeze-testing-core-tests-line-70)">Choose&#160;scope&#160;of&#160;local&#160;sources&#160;that&#16 [...]
+</text><text class="breeze-testing-core-tests-r5" x="0" y="1752.4" textLength="12.2" clip-path="url(#breeze-testing-core-tests-line-71)">│</text><text class="breeze-testing-core-tests-r1" x="414.8" y="1752.4" textLength="1024.8" clip-path="url(#breeze-testing-core-tests-line-71)">selected).&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#1 [...]
+</text><text class="breeze-testing-core-tests-r5" x="0" y="1776.8" textLength="12.2" clip-path="url(#breeze-testing-core-tests-line-72)">│</text><text class="breeze-testing-core-tests-r6" x="414.8" y="1776.8" textLength="1024.8" clip-path="url(#breeze-testing-core-tests-line-72)">(selected&#160;|&#160;all&#160;|&#160;skip&#160;|&#160;remove&#160;|&#160;tests&#160;|&#160;providers-and-tests)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#1 [...]
+</text><text class="breeze-testing-core-tests-r5" x="0" y="1801.2" textLength="12.2" clip-path="url(#breeze-testing-core-tests-line-73)">│</text><text class="breeze-testing-core-tests-r5" x="414.8" y="1801.2" textLength="1024.8" clip-path="url(#breeze-testing-core-tests-line-73)">[default:&#160;selected]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;& [...]
+</text><text class="breeze-testing-core-tests-r5" x="0" y="1825.6" textLength="12.2" clip-path="url(#breeze-testing-core-tests-line-74)">│</text><text class="breeze-testing-core-tests-r4" x="24.4" y="1825.6" textLength="317.2" clip-path="url(#breeze-testing-core-tests-line-74)">--skip-docker-compose-down</text><text class="breeze-testing-core-tests-r1" x="414.8" y="1825.6" textLength="549" clip-path="url(#breeze-testing-core-tests-line-74)">Skips&#160;running&#160;docker-compose&#160;dow [...]
+</text><text class="breeze-testing-core-tests-r5" x="0" y="1850" textLength="12.2" clip-path="url(#breeze-testing-core-tests-line-75)">│</text><text class="breeze-testing-core-tests-r4" x="24.4" y="1850" textLength="244" clip-path="url(#breeze-testing-core-tests-line-75)">--keep-env-variables</text><text class="breeze-testing-core-tests-r1" x="414.8" y="1850" textLength="1000.4" clip-path="url(#breeze-testing-core-tests-line-75)">Do&#160;not&#160;clear&#160;environment&#160;variables&#16 [...]
+</text><text class="breeze-testing-core-tests-r5" x="0" y="1874.4" textLength="1464" clip-path="url(#breeze-testing-core-tests-line-76)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-testing-core-tests-r1" x="1464" y="1874.4" textLength="12.2" clip-path="url(#breeze-testing-core-tests-line-76)">
+</text><text class="breeze-testing-core-tests-r5" x="0" y="1898.8" textLength="24.4" clip-path="url(#breeze-testing-core-tests-line-77)">╭─</text><text class="breeze-testing-core-tests-r5" x="24.4" y="1898.8" textLength="622.2" clip-path="url(#breeze-testing-core-tests-line-77)">&#160;Advanced&#160;flag&#160;for&#160;installing&#160;airflow&#160;in&#160;container&#160;</text><text class="breeze-testing-core-tests-r5" x="646.6" y="1898.8" textLength="793" clip-path="url(#breeze-testing-co [...]
+</text><text class="breeze-testing-core-tests-r5" x="0" y="1923.2" textLength="12.2" clip-path="url(#breeze-testing-core-tests-line-78)">│</text><text class="breeze-testing-core-tests-r4" x="24.4" y="1923.2" textLength="378.2" clip-path="url(#breeze-testing-core-tests-line-78)">--airflow-constraints-reference</text><text class="breeze-testing-core-tests-r1" x="756.4" y="1923.2" textLength="683.2" clip-path="url(#breeze-testing-core-tests-line-78)">Constraint&#160;reference&#160;to&#160;u [...]
+</text><text class="breeze-testing-core-tests-r5" x="0" y="1947.6" textLength="12.2" clip-path="url(#breeze-testing-core-tests-line-79)">│</text><text class="breeze-testing-core-tests-r1" x="756.4" y="1947.6" textLength="683.2" clip-path="url(#breeze-testing-core-tests-line-79)">(used&#160;in&#160;calculated&#160;constraints&#160;URL).&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-testing-core-t [...]
+</text><text class="breeze-testing-core-tests-r5" x="0" y="1972" textLength="12.2" clip-path="url(#breeze-testing-core-tests-line-80)">│</text><text class="breeze-testing-core-tests-r6" x="756.4" y="1972" textLength="683.2" clip-path="url(#breeze-testing-core-tests-line-80)">(TEXT)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; [...]
+</text><text class="breeze-testing-core-tests-r5" x="0" y="1996.4" textLength="12.2" clip-path="url(#breeze-testing-core-tests-line-81)">│</text><text class="breeze-testing-core-tests-r4" x="24.4" y="1996.4" textLength="341.6" clip-path="url(#breeze-testing-core-tests-line-81)">--clean-airflow-installation</text><text class="breeze-testing-core-tests-r1" x="756.4" y="1996.4" textLength="683.2" clip-path="url(#breeze-testing-core-tests-line-81)">Clean&#160;the&#160;airflow&#160;installati [...]
+</text><text class="breeze-testing-core-tests-r5" x="0" y="2020.8" textLength="12.2" clip-path="url(#breeze-testing-core-tests-line-82)">│</text><text class="breeze-testing-core-tests-r1" x="756.4" y="2020.8" textLength="158.6" clip-path="url(#breeze-testing-core-tests-line-82)">specified&#160;by&#160;</text><text class="breeze-testing-core-tests-r4" x="915" y="2020.8" textLength="256.2" clip-path="url(#breeze-testing-core-tests-line-82)">--use-airflow-version</text><text class="breeze-t [...]
+</text><text class="breeze-testing-core-tests-r5" x="0" y="2045.2" textLength="12.2" clip-path="url(#breeze-testing-core-tests-line-83)">│</text><text class="breeze-testing-core-tests-r4" x="24.4" y="2045.2" textLength="329.4" clip-path="url(#breeze-testing-core-tests-line-83)">--force-lowest-dependencies</text><text class="breeze-testing-core-tests-r1" x="756.4" y="2045.2" textLength="683.2" clip-path="url(#breeze-testing-core-tests-line-83)">Run&#160;tests&#160;for&#160;the&#160;lowest [...]
+</text><text class="breeze-testing-core-tests-r5" x="0" y="2069.6" textLength="12.2" clip-path="url(#breeze-testing-core-tests-line-84)">│</text><text class="breeze-testing-core-tests-r1" x="756.4" y="2069.6" textLength="683.2" clip-path="url(#breeze-testing-core-tests-line-84)">or&#160;selected&#160;provider&#160;if&#160;`Provider[PROVIDER_ID]`&#160;is&#160;used&#160;</text><text class="breeze-testing-core-tests-r5" x="1451.8" y="2069.6" textLength="12.2" clip-path="url(#breeze-testing- [...]
+</text><text class="breeze-testing-core-tests-r5" x="0" y="2094" textLength="12.2" clip-path="url(#breeze-testing-core-tests-line-85)">│</text><text class="breeze-testing-core-tests-r1" x="756.4" y="2094" textLength="683.2" clip-path="url(#breeze-testing-core-tests-line-85)">as&#160;test&#160;type.&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;& [...]
+</text><text class="breeze-testing-core-tests-r5" x="0" y="2118.4" textLength="12.2" clip-path="url(#breeze-testing-core-tests-line-86)">│</text><text class="breeze-testing-core-tests-r4" x="24.4" y="2118.4" textLength="414.8" clip-path="url(#breeze-testing-core-tests-line-86)">--install-airflow-with-constraints</text><text class="breeze-testing-core-tests-r1" x="439.2" y="2118.4" textLength="12.2" clip-path="url(#breeze-testing-core-tests-line-86)">/</text><text class="breeze-testing-co [...]
+</text><text class="breeze-testing-core-tests-r5" x="0" y="2142.8" textLength="12.2" clip-path="url(#breeze-testing-core-tests-line-87)">│</text><text class="breeze-testing-core-tests-r4" x="24.4" y="2142.8" textLength="195.2" clip-path="url(#breeze-testing-core-tests-line-87)">with-constraints</text><text class="breeze-testing-core-tests-r1" x="756.4" y="2142.8" textLength="683.2" clip-path="url(#breeze-testing-core-tests-line-87)">determined&#160;from&#160;package&#160;or&#160;airflow& [...]
+</text><text class="breeze-testing-core-tests-r5" x="0" y="2167.2" textLength="12.2" clip-path="url(#breeze-testing-core-tests-line-88)">│</text><text class="breeze-testing-core-tests-r5" x="756.4" y="2167.2" textLength="683.2" clip-path="url(#breeze-testing-core-tests-line-88)">[default:&#160;no-install-airflow-with-constraints]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-testing-core-tests-r5" x="1451.8" y="2167.2" textLength="12.2" clip-path=" [...]
+</text><text class="breeze-testing-core-tests-r5" x="0" y="2191.6" textLength="12.2" clip-path="url(#breeze-testing-core-tests-line-89)">│</text><text class="breeze-testing-core-tests-r4" x="24.4" y="2191.6" textLength="256.2" clip-path="url(#breeze-testing-core-tests-line-89)">--distribution-format</text><text class="breeze-testing-core-tests-r1" x="756.4" y="2191.6" textLength="231.8" clip-path="url(#breeze-testing-core-tests-line-89)">Format&#160;of&#160;packages.</text><text class="b [...]
+</text><text class="breeze-testing-core-tests-r5" x="0" y="2216" textLength="12.2" clip-path="url(#breeze-testing-core-tests-line-90)">│</text><text class="breeze-testing-core-tests-r5" x="756.4" y="2216" textLength="231.8" clip-path="url(#breeze-testing-core-tests-line-90)">[default:&#160;wheel]&#160;&#160;&#160;</text><text class="breeze-testing-core-tests-r5" x="1451.8" y="2216" textLength="12.2" clip-path="url(#breeze-testing-core-tests-line-90)">│</text><text class="breeze-testing-c [...]
+</text><text class="breeze-testing-core-tests-r5" x="0" y="2240.4" textLength="12.2" clip-path="url(#breeze-testing-core-tests-line-91)">│</text><text class="breeze-testing-core-tests-r4" x="24.4" y="2240.4" textLength="256.2" clip-path="url(#breeze-testing-core-tests-line-91)">--use-airflow-version</text><text class="breeze-testing-core-tests-r1" x="756.4" y="2240.4" textLength="683.2" clip-path="url(#breeze-testing-core-tests-line-91)">Use&#160;(reinstall&#160;at&#160;entry)&#160;Airfl [...]
+</text><text class="breeze-testing-core-tests-r5" x="0" y="2264.8" textLength="12.2" clip-path="url(#breeze-testing-core-tests-line-92)">│</text><text class="breeze-testing-core-tests-r1" x="756.4" y="2264.8" textLength="683.2" clip-path="url(#breeze-testing-core-tests-line-92)">can&#160;also&#160;be&#160;version&#160;(to&#160;install&#160;from&#160;PyPI),&#160;`none`,&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-testing-core-tests-r5" x="1451.8" y="2264.8" textLength="12.2" c [...]
+</text><text class="breeze-testing-core-tests-r5" x="0" y="2289.2" textLength="12.2" clip-path="url(#breeze-testing-core-tests-line-93)">│</text><text class="breeze-testing-core-tests-r1" x="756.4" y="2289.2" textLength="683.2" clip-path="url(#breeze-testing-core-tests-line-93)">`wheel`,&#160;or&#160;`sdist`&#160;to&#160;install&#160;from&#160;`dist`&#160;folder&#160;or&#160;&#160;&#160;&#160;</text><text class="breeze-testing-core-tests-r5" x="1451.8" y="2289.2" textLength="12.2" clip-p [...]
+</text><text class="breeze-testing-core-tests-r5" x="0" y="2313.6" textLength="12.2" clip-path="url(#breeze-testing-core-tests-line-94)">│</text><text class="breeze-testing-core-tests-r1" x="756.4" y="2313.6" textLength="683.2" clip-path="url(#breeze-testing-core-tests-line-94)">`owner/repo:branch`&#160;to&#160;install&#160;from&#160;GitHub&#160;repo.&#160;Uses&#160;&#160;&#160;</text><text class="breeze-testing-core-tests-r5" x="1451.8" y="2313.6" textLength="12.2" clip-path="url(#breez [...]
+</text><text class="breeze-testing-core-tests-r5" x="0" y="2338" textLength="12.2" clip-path="url(#breeze-testing-core-tests-line-95)">│</text><text class="breeze-testing-core-tests-r4" x="756.4" y="2338" textLength="183" clip-path="url(#breeze-testing-core-tests-line-95)">--mount-sources</text><text class="breeze-testing-core-tests-r1" x="939.4" y="2338" textLength="500.2" clip-path="url(#breeze-testing-core-tests-line-95)">&#160;`remove`&#160;if&#160;not&#160;specified,&#160;but&#160;& [...]
+</text><text class="breeze-testing-core-tests-r5" x="0" y="2362.4" textLength="12.2" clip-path="url(#breeze-testing-core-tests-line-96)">│</text><text class="breeze-testing-core-tests-r1" x="756.4" y="2362.4" textLength="683.2" clip-path="url(#breeze-testing-core-tests-line-96)">`providers-and-tests`&#160;or&#160;`tests`&#160;can&#160;be&#160;specified&#160;for&#160;&#160;&#160;</text><text class="breeze-testing-core-tests-r5" x="1451.8" y="2362.4" textLength="12.2" clip-path="url(#breez [...]
+</text><text class="breeze-testing-core-tests-r5" x="0" y="2386.8" textLength="12.2" clip-path="url(#breeze-testing-core-tests-line-97)">│</text><text class="breeze-testing-core-tests-r1" x="756.4" y="2386.8" textLength="12.2" clip-path="url(#breeze-testing-core-tests-line-97)">`</text><text class="breeze-testing-core-tests-r4" x="768.6" y="2386.8" textLength="183" clip-path="url(#breeze-testing-core-tests-line-97)">--mount-sources</text><text class="breeze-testing-core-tests-r1" x="951. [...]
+</text><text class="breeze-testing-core-tests-r5" x="0" y="2411.2" textLength="12.2" clip-path="url(#breeze-testing-core-tests-line-98)">│</text><text class="breeze-testing-core-tests-r6" x="756.4" y="2411.2" textLength="683.2" clip-path="url(#breeze-testing-core-tests-line-98)">(none&#160;|&#160;wheel&#160;|&#160;sdist&#160;|&#160;&lt;airflow_version&gt;&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-testing-core-tests-r5"  [...]
+</text><text class="breeze-testing-core-tests-r5" x="0" y="2435.6" textLength="12.2" clip-path="url(#breeze-testing-core-tests-line-99)">│</text><text class="breeze-testing-core-tests-r6" x="756.4" y="2435.6" textLength="683.2" clip-path="url(#breeze-testing-core-tests-line-99)">&lt;owner/repo:branch&gt;)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; [...]
+</text><text class="breeze-testing-core-tests-r5" x="0" y="2460" textLength="12.2" clip-path="url(#breeze-testing-core-tests-line-100)">│</text><text class="breeze-testing-core-tests-r4" x="24.4" y="2460" textLength="244" clip-path="url(#breeze-testing-core-tests-line-100)">--allow-pre-releases</text><text class="breeze-testing-core-tests-r1" x="756.4" y="2460" textLength="683.2" clip-path="url(#breeze-testing-core-tests-line-100)">Allow&#160;pre-releases&#160;of&#160;Airflow,&#160;task- [...]
+</text><text class="breeze-testing-core-tests-r5" x="0" y="2484.4" textLength="12.2" clip-path="url(#breeze-testing-core-tests-line-101)">│</text><text class="breeze-testing-core-tests-r1" x="756.4" y="2484.4" textLength="683.2" clip-path="url(#breeze-testing-core-tests-line-101)">be&#160;installed.&#160;Set&#160;to&#160;true&#160;automatically&#160;for&#160;pre-release&#160;</text><text class="breeze-testing-core-tests-r5" x="1451.8" y="2484.4" textLength="12.2" clip-path="url(#breeze-t [...]
+</text><text class="breeze-testing-core-tests-r5" x="0" y="2508.8" textLength="12.2" clip-path="url(#breeze-testing-core-tests-line-102)">│</text><text class="breeze-testing-core-tests-r4" x="756.4" y="2508.8" textLength="256.2" clip-path="url(#breeze-testing-core-tests-line-102)">--use-airflow-version</text><text class="breeze-testing-core-tests-r1" x="1012.6" y="2508.8" textLength="427" clip-path="url(#breeze-testing-core-tests-line-102)">)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#16 [...]
+</text><text class="breeze-testing-core-tests-r5" x="0" y="2533.2" textLength="12.2" clip-path="url(#breeze-testing-core-tests-line-103)">│</text><text class="breeze-testing-core-tests-r4" x="24.4" y="2533.2" textLength="353.8" clip-path="url(#breeze-testing-core-tests-line-103)">--use-distributions-from-dist</text><text class="breeze-testing-core-tests-r1" x="756.4" y="2533.2" textLength="402.6" clip-path="url(#breeze-testing-core-tests-line-103)">Install&#160;all&#160;found&#160;distri [...]
+</text><text class="breeze-testing-core-tests-r5" x="0" y="2557.6" textLength="12.2" clip-path="url(#breeze-testing-core-tests-line-104)">│</text><text class="breeze-testing-core-tests-r1" x="756.4" y="2557.6" textLength="683.2" clip-path="url(#breeze-testing-core-tests-line-104)">determines&#160;type)&#160;from&#160;&#x27;dist&#x27;&#160;folder&#160;when&#160;entering&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-testing-core-tests-r5" x="1451.8" y="2557.6" textLen [...]
+</text><text class="breeze-testing-core-tests-r5" x="0" y="2582" textLength="12.2" clip-path="url(#breeze-testing-core-tests-line-105)">│</text><text class="breeze-testing-core-tests-r1" x="756.4" y="2582" textLength="683.2" clip-path="url(#breeze-testing-core-tests-line-105)">breeze.&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#1 [...]
+</text><text class="breeze-testing-core-tests-r5" x="0" y="2606.4" textLength="1464" clip-path="url(#breeze-testing-core-tests-line-106)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-testing-core-tests-r1" x="1464" y="2606.4" textLength="12.2" clip-path="url(#breeze-testing-core-tests-line-106)">
+</text><text class="breeze-testing-core-tests-r5" x="0" y="2630.8" textLength="24.4" clip-path="url(#breeze-testing-core-tests-line-107)">╭─</text><text class="breeze-testing-core-tests-r5" x="24.4" y="2630.8" textLength="195.2" clip-path="url(#breeze-testing-core-tests-line-107)">&#160;Common&#160;options&#160;</text><text class="breeze-testing-core-tests-r5" x="219.6" y="2630.8" textLength="1220" clip-path="url(#breeze-testing-core-tests-line-107)">───────────────────────────────────── [...]
+</text><text class="breeze-testing-core-tests-r5" x="0" y="2655.2" textLength="12.2" clip-path="url(#breeze-testing-core-tests-line-108)">│</text><text class="breeze-testing-core-tests-r4" x="24.4" y="2655.2" textLength="109.8" clip-path="url(#breeze-testing-core-tests-line-108)">--dry-run</text><text class="breeze-testing-core-tests-r7" x="158.6" y="2655.2" textLength="24.4" clip-path="url(#breeze-testing-core-tests-line-108)">-D</text><text class="breeze-testing-core-tests-r1" x="207.4 [...]
+</text><text class="breeze-testing-core-tests-r5" x="0" y="2679.6" textLength="12.2" clip-path="url(#breeze-testing-core-tests-line-109)">│</text><text class="breeze-testing-core-tests-r4" x="24.4" y="2679.6" textLength="109.8" clip-path="url(#breeze-testing-core-tests-line-109)">--verbose</text><text class="breeze-testing-core-tests-r7" x="158.6" y="2679.6" textLength="24.4" clip-path="url(#breeze-testing-core-tests-line-109)">-v</text><text class="breeze-testing-core-tests-r1" x="207.4 [...]
+</text><text class="breeze-testing-core-tests-r5" x="0" y="2704" textLength="12.2" clip-path="url(#breeze-testing-core-tests-line-110)">│</text><text class="breeze-testing-core-tests-r4" x="24.4" y="2704" textLength="73.2" clip-path="url(#breeze-testing-core-tests-line-110)">--help</text><text class="breeze-testing-core-tests-r7" x="158.6" y="2704" textLength="24.4" clip-path="url(#breeze-testing-core-tests-line-110)">-h</text><text class="breeze-testing-core-tests-r1" x="207.4" y="2704" [...]
+</text><text class="breeze-testing-core-tests-r5" x="0" y="2728.4" textLength="1464" clip-path="url(#breeze-testing-core-tests-line-111)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-testing-core-tests-r1" x="1464" y="2728.4" textLength="12.2" clip-path="url(#breeze-testing-core-tests-line-111)">
 </text>
     </g>
     </g>
diff --git a/dev/breeze/doc/images/output_testing_core-tests.txt b/dev/breeze/doc/images/output_testing_core-tests.txt
index 866c8773082..3e5e8ac2d28 100644
--- a/dev/breeze/doc/images/output_testing_core-tests.txt
+++ b/dev/breeze/doc/images/output_testing_core-tests.txt
@@ -1 +1 @@
-f651a178e03f824c9fcc7f7a24170691
+2154820b30d8c3e0950640877442f0e3
diff --git a/dev/breeze/doc/images/output_testing_providers-tests.svg b/dev/breeze/doc/images/output_testing_providers-tests.svg
index 2ecf873d483..8802f8f58ec 100644
--- a/dev/breeze/doc/images/output_testing_providers-tests.svg
+++ b/dev/breeze/doc/images/output_testing_providers-tests.svg
@@ -1,4 +1,4 @@
-<svg class="rich-terminal" viewBox="0 0 1482 3002.3999999999996" xmlns="http://www.w3.org/2000/svg">
+<svg class="rich-terminal" viewBox="0 0 1482 3026.7999999999997" xmlns="http://www.w3.org/2000/svg">
     <!-- Generated with Rich https://www.textualize.io -->
     <style>
 
@@ -43,7 +43,7 @@
 
     <defs>
     <clipPath id="breeze-testing-providers-tests-clip-terminal">
-      <rect x="0" y="0" width="1463.0" height="2951.3999999999996" />
+      <rect x="0" y="0" width="1463.0" height="2975.7999999999997" />
     </clipPath>
     <clipPath id="breeze-testing-providers-tests-line-0">
     <rect x="0" y="1.5" width="1464" height="24.65"/>
@@ -405,9 +405,12 @@
 <clipPath id="breeze-testing-providers-tests-line-119">
     <rect x="0" y="2905.1" width="1464" height="24.65"/>
             </clipPath>
+<clipPath id="breeze-testing-providers-tests-line-120">
+    <rect x="0" y="2929.5" width="1464" height="24.65"/>
+            </clipPath>
     </defs>
 
-    <rect fill="#292929" stroke="rgba(255,255,255,0.35)" stroke-width="1" x="1" y="1" width="1480" height="3000.4" rx="8"/><text class="breeze-testing-providers-tests-title" fill="#c5c8c6" text-anchor="middle" x="740" y="27">Command:&#160;testing&#160;providers-tests</text>
+    <rect fill="#292929" stroke="rgba(255,255,255,0.35)" stroke-width="1" x="1" y="1" width="1480" height="3024.8" rx="8"/><text class="breeze-testing-providers-tests-title" fill="#c5c8c6" text-anchor="middle" x="740" y="27">Command:&#160;testing&#160;providers-tests</text>
             <g transform="translate(26,22)">
             <circle cx="0" cy="0" r="7" fill="#ff5f57"/>
             <circle cx="22" cy="0" r="7" fill="#febc2e"/>
@@ -482,62 +485,63 @@
 </text><text class="breeze-testing-providers-tests-r5" x="0" y="1532.8" textLength="1464" clip-path="url(#breeze-testing-providers-tests-line-62)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-testing-providers-tests-r1" x="1464" y="1532.8" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-62)">
 </text><text class="breeze-testing-providers-tests-r5" x="0" y="1557.2" textLength="24.4" clip-path="url(#breeze-testing-providers-tests-line-63)">╭─</text><text class="breeze-testing-providers-tests-r5" x="24.4" y="1557.2" textLength="610" clip-path="url(#breeze-testing-providers-tests-line-63)">&#160;Upgrading/downgrading/removing&#160;selected&#160;packages&#160;</text><text class="breeze-testing-providers-tests-r5" x="634.4" y="1557.2" textLength="805.2" clip-path="url(#breeze-testin [...]
 </text><text class="breeze-testing-providers-tests-r5" x="0" y="1581.6" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-64)">│</text><text class="breeze-testing-providers-tests-r4" x="24.4" y="1581.6" textLength="170.8" clip-path="url(#breeze-testing-providers-tests-line-64)">--upgrade-boto</text><text class="breeze-testing-providers-tests-r1" x="341.6" y="1581.6" textLength="866.2" clip-path="url(#breeze-testing-providers-tests-line-64)">Remove&#160;aiobotocore&#16 [...]
-</text><text class="breeze-testing-providers-tests-r5" x="0" y="1606" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-65)">│</text><text class="breeze-testing-providers-tests-r4" x="24.4" y="1606" textLength="268.4" clip-path="url(#breeze-testing-providers-tests-line-65)">--downgrade-sqlalchemy</text><text class="breeze-testing-providers-tests-r1" x="341.6" y="1606" textLength="610" clip-path="url(#breeze-testing-providers-tests-line-65)">Downgrade&#160;SQLAlchemy&# [...]
-</text><text class="breeze-testing-providers-tests-r5" x="0" y="1630.4" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-66)">│</text><text class="breeze-testing-providers-tests-r4" x="24.4" y="1630.4" textLength="244" clip-path="url(#breeze-testing-providers-tests-line-66)">--downgrade-pendulum</text><text class="breeze-testing-providers-tests-r1" x="341.6" y="1630.4" textLength="585.6" clip-path="url(#breeze-testing-providers-tests-line-66)">Downgrade&#160;Pendulum [...]
-</text><text class="breeze-testing-providers-tests-r5" x="0" y="1654.8" textLength="1464" clip-path="url(#breeze-testing-providers-tests-line-67)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-testing-providers-tests-r1" x="1464" y="1654.8" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-67)">
-</text><text class="breeze-testing-providers-tests-r5" x="0" y="1679.2" textLength="24.4" clip-path="url(#breeze-testing-providers-tests-line-68)">╭─</text><text class="breeze-testing-providers-tests-r5" x="24.4" y="1679.2" textLength="402.6" clip-path="url(#breeze-testing-providers-tests-line-68)">&#160;Advanced&#160;flag&#160;for&#160;tests&#160;command&#160;</text><text class="breeze-testing-providers-tests-r5" x="427" y="1679.2" textLength="1012.6" clip-path="url(#breeze-testing-prov [...]
-</text><text class="breeze-testing-providers-tests-r5" x="0" y="1703.6" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-69)">│</text><text class="breeze-testing-providers-tests-r4" x="24.4" y="1703.6" textLength="231.8" clip-path="url(#breeze-testing-providers-tests-line-69)">--github-repository</text><text class="breeze-testing-providers-tests-r6" x="366" y="1703.6" textLength="24.4" clip-path="url(#breeze-testing-providers-tests-line-69)">-g</text><text class="bre [...]
-</text><text class="breeze-testing-providers-tests-r5" x="0" y="1728" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-70)">│</text><text class="breeze-testing-providers-tests-r4" x="24.4" y="1728" textLength="183" clip-path="url(#breeze-testing-providers-tests-line-70)">--mount-sources</text><text class="breeze-testing-providers-tests-r1" x="414.8" y="1728" textLength="1024.8" clip-path="url(#breeze-testing-providers-tests-line-70)">Choose&#160;scope&#160;of&#160;lo [...]
-</text><text class="breeze-testing-providers-tests-r5" x="0" y="1752.4" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-71)">│</text><text class="breeze-testing-providers-tests-r1" x="414.8" y="1752.4" textLength="1024.8" clip-path="url(#breeze-testing-providers-tests-line-71)">selected).&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;& [...]
-</text><text class="breeze-testing-providers-tests-r5" x="0" y="1776.8" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-72)">│</text><text class="breeze-testing-providers-tests-r7" x="414.8" y="1776.8" textLength="1024.8" clip-path="url(#breeze-testing-providers-tests-line-72)">(selected&#160;|&#160;all&#160;|&#160;skip&#160;|&#160;remove&#160;|&#160;tests&#160;|&#160;providers-and-tests)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;& [...]
-</text><text class="breeze-testing-providers-tests-r5" x="0" y="1801.2" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-73)">│</text><text class="breeze-testing-providers-tests-r5" x="414.8" y="1801.2" textLength="1024.8" clip-path="url(#breeze-testing-providers-tests-line-73)">[default:&#160;selected]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160 [...]
-</text><text class="breeze-testing-providers-tests-r5" x="0" y="1825.6" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-74)">│</text><text class="breeze-testing-providers-tests-r4" x="24.4" y="1825.6" textLength="317.2" clip-path="url(#breeze-testing-providers-tests-line-74)">--skip-docker-compose-down</text><text class="breeze-testing-providers-tests-r1" x="414.8" y="1825.6" textLength="549" clip-path="url(#breeze-testing-providers-tests-line-74)">Skips&#160;runnin [...]
-</text><text class="breeze-testing-providers-tests-r5" x="0" y="1850" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-75)">│</text><text class="breeze-testing-providers-tests-r4" x="24.4" y="1850" textLength="244" clip-path="url(#breeze-testing-providers-tests-line-75)">--keep-env-variables</text><text class="breeze-testing-providers-tests-r1" x="414.8" y="1850" textLength="1000.4" clip-path="url(#breeze-testing-providers-tests-line-75)">Do&#160;not&#160;clear&#160; [...]
-</text><text class="breeze-testing-providers-tests-r5" x="0" y="1874.4" textLength="1464" clip-path="url(#breeze-testing-providers-tests-line-76)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-testing-providers-tests-r1" x="1464" y="1874.4" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-76)">
-</text><text class="breeze-testing-providers-tests-r5" x="0" y="1898.8" textLength="24.4" clip-path="url(#breeze-testing-providers-tests-line-77)">╭─</text><text class="breeze-testing-providers-tests-r5" x="24.4" y="1898.8" textLength="622.2" clip-path="url(#breeze-testing-providers-tests-line-77)">&#160;Advanced&#160;flag&#160;for&#160;installing&#160;airflow&#160;in&#160;container&#160;</text><text class="breeze-testing-providers-tests-r5" x="646.6" y="1898.8" textLength="793" clip-pat [...]
-</text><text class="breeze-testing-providers-tests-r5" x="0" y="1923.2" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-78)">│</text><text class="breeze-testing-providers-tests-r4" x="24.4" y="1923.2" textLength="378.2" clip-path="url(#breeze-testing-providers-tests-line-78)">--airflow-constraints-reference</text><text class="breeze-testing-providers-tests-r1" x="756.4" y="1923.2" textLength="683.2" clip-path="url(#breeze-testing-providers-tests-line-78)">Constraint [...]
-</text><text class="breeze-testing-providers-tests-r5" x="0" y="1947.6" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-79)">│</text><text class="breeze-testing-providers-tests-r1" x="756.4" y="1947.6" textLength="683.2" clip-path="url(#breeze-testing-providers-tests-line-79)">(used&#160;in&#160;calculated&#160;constraints&#160;URL).&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="b [...]
-</text><text class="breeze-testing-providers-tests-r5" x="0" y="1972" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-80)">│</text><text class="breeze-testing-providers-tests-r7" x="756.4" y="1972" textLength="683.2" clip-path="url(#breeze-testing-providers-tests-line-80)">(TEXT)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#16 [...]
-</text><text class="breeze-testing-providers-tests-r5" x="0" y="1996.4" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-81)">│</text><text class="breeze-testing-providers-tests-r4" x="24.4" y="1996.4" textLength="341.6" clip-path="url(#breeze-testing-providers-tests-line-81)">--clean-airflow-installation</text><text class="breeze-testing-providers-tests-r1" x="756.4" y="1996.4" textLength="683.2" clip-path="url(#breeze-testing-providers-tests-line-81)">Clean&#160;th [...]
-</text><text class="breeze-testing-providers-tests-r5" x="0" y="2020.8" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-82)">│</text><text class="breeze-testing-providers-tests-r1" x="756.4" y="2020.8" textLength="158.6" clip-path="url(#breeze-testing-providers-tests-line-82)">specified&#160;by&#160;</text><text class="breeze-testing-providers-tests-r4" x="915" y="2020.8" textLength="256.2" clip-path="url(#breeze-testing-providers-tests-line-82)">--use-airflow-versi [...]
-</text><text class="breeze-testing-providers-tests-r5" x="0" y="2045.2" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-83)">│</text><text class="breeze-testing-providers-tests-r4" x="24.4" y="2045.2" textLength="329.4" clip-path="url(#breeze-testing-providers-tests-line-83)">--force-lowest-dependencies</text><text class="breeze-testing-providers-tests-r1" x="756.4" y="2045.2" textLength="683.2" clip-path="url(#breeze-testing-providers-tests-line-83)">Run&#160;tests [...]
-</text><text class="breeze-testing-providers-tests-r5" x="0" y="2069.6" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-84)">│</text><text class="breeze-testing-providers-tests-r1" x="756.4" y="2069.6" textLength="683.2" clip-path="url(#breeze-testing-providers-tests-line-84)">or&#160;selected&#160;provider&#160;if&#160;`Provider[PROVIDER_ID]`&#160;is&#160;used&#160;</text><text class="breeze-testing-providers-tests-r5" x="1451.8" y="2069.6" textLength="12.2" clip-p [...]
-</text><text class="breeze-testing-providers-tests-r5" x="0" y="2094" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-85)">│</text><text class="breeze-testing-providers-tests-r1" x="756.4" y="2094" textLength="683.2" clip-path="url(#breeze-testing-providers-tests-line-85)">as&#160;test&#160;type.&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160 [...]
-</text><text class="breeze-testing-providers-tests-r5" x="0" y="2118.4" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-86)">│</text><text class="breeze-testing-providers-tests-r4" x="24.4" y="2118.4" textLength="414.8" clip-path="url(#breeze-testing-providers-tests-line-86)">--install-airflow-with-constraints</text><text class="breeze-testing-providers-tests-r1" x="439.2" y="2118.4" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-86)">/</text> [...]
-</text><text class="breeze-testing-providers-tests-r5" x="0" y="2142.8" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-87)">│</text><text class="breeze-testing-providers-tests-r4" x="24.4" y="2142.8" textLength="195.2" clip-path="url(#breeze-testing-providers-tests-line-87)">with-constraints</text><text class="breeze-testing-providers-tests-r1" x="756.4" y="2142.8" textLength="683.2" clip-path="url(#breeze-testing-providers-tests-line-87)">determined&#160;from&#160 [...]
-</text><text class="breeze-testing-providers-tests-r5" x="0" y="2167.2" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-88)">│</text><text class="breeze-testing-providers-tests-r5" x="756.4" y="2167.2" textLength="683.2" clip-path="url(#breeze-testing-providers-tests-line-88)">[default:&#160;no-install-airflow-with-constraints]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-testing-providers-tests-r5" x="1451.8" y="2167.2" text [...]
-</text><text class="breeze-testing-providers-tests-r5" x="0" y="2191.6" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-89)">│</text><text class="breeze-testing-providers-tests-r4" x="24.4" y="2191.6" textLength="256.2" clip-path="url(#breeze-testing-providers-tests-line-89)">--distribution-format</text><text class="breeze-testing-providers-tests-r1" x="756.4" y="2191.6" textLength="231.8" clip-path="url(#breeze-testing-providers-tests-line-89)">Format&#160;of&#160; [...]
-</text><text class="breeze-testing-providers-tests-r5" x="0" y="2216" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-90)">│</text><text class="breeze-testing-providers-tests-r5" x="756.4" y="2216" textLength="231.8" clip-path="url(#breeze-testing-providers-tests-line-90)">[default:&#160;wheel]&#160;&#160;&#160;</text><text class="breeze-testing-providers-tests-r5" x="1451.8" y="2216" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-90)">│</text [...]
-</text><text class="breeze-testing-providers-tests-r5" x="0" y="2240.4" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-91)">│</text><text class="breeze-testing-providers-tests-r4" x="24.4" y="2240.4" textLength="256.2" clip-path="url(#breeze-testing-providers-tests-line-91)">--use-airflow-version</text><text class="breeze-testing-providers-tests-r1" x="756.4" y="2240.4" textLength="683.2" clip-path="url(#breeze-testing-providers-tests-line-91)">Use&#160;(reinstall& [...]
-</text><text class="breeze-testing-providers-tests-r5" x="0" y="2264.8" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-92)">│</text><text class="breeze-testing-providers-tests-r1" x="756.4" y="2264.8" textLength="683.2" clip-path="url(#breeze-testing-providers-tests-line-92)">can&#160;also&#160;be&#160;version&#160;(to&#160;install&#160;from&#160;PyPI),&#160;`none`,&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-testing-providers-tests-r5" x="1451.8" y="22 [...]
-</text><text class="breeze-testing-providers-tests-r5" x="0" y="2289.2" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-93)">│</text><text class="breeze-testing-providers-tests-r1" x="756.4" y="2289.2" textLength="683.2" clip-path="url(#breeze-testing-providers-tests-line-93)">`wheel`,&#160;or&#160;`sdist`&#160;to&#160;install&#160;from&#160;`dist`&#160;folder&#160;or&#160;&#160;&#160;&#160;</text><text class="breeze-testing-providers-tests-r5" x="1451.8" y="2289.2" [...]
-</text><text class="breeze-testing-providers-tests-r5" x="0" y="2313.6" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-94)">│</text><text class="breeze-testing-providers-tests-r1" x="756.4" y="2313.6" textLength="683.2" clip-path="url(#breeze-testing-providers-tests-line-94)">`owner/repo:branch`&#160;to&#160;install&#160;from&#160;GitHub&#160;repo.&#160;Uses&#160;&#160;&#160;</text><text class="breeze-testing-providers-tests-r5" x="1451.8" y="2313.6" textLength="12 [...]
-</text><text class="breeze-testing-providers-tests-r5" x="0" y="2338" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-95)">│</text><text class="breeze-testing-providers-tests-r4" x="756.4" y="2338" textLength="183" clip-path="url(#breeze-testing-providers-tests-line-95)">--mount-sources</text><text class="breeze-testing-providers-tests-r1" x="939.4" y="2338" textLength="500.2" clip-path="url(#breeze-testing-providers-tests-line-95)">&#160;`remove`&#160;if&#160;not&# [...]
-</text><text class="breeze-testing-providers-tests-r5" x="0" y="2362.4" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-96)">│</text><text class="breeze-testing-providers-tests-r1" x="756.4" y="2362.4" textLength="683.2" clip-path="url(#breeze-testing-providers-tests-line-96)">`providers-and-tests`&#160;or&#160;`tests`&#160;can&#160;be&#160;specified&#160;for&#160;&#160;&#160;</text><text class="breeze-testing-providers-tests-r5" x="1451.8" y="2362.4" textLength="12 [...]
-</text><text class="breeze-testing-providers-tests-r5" x="0" y="2386.8" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-97)">│</text><text class="breeze-testing-providers-tests-r1" x="756.4" y="2386.8" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-97)">`</text><text class="breeze-testing-providers-tests-r4" x="768.6" y="2386.8" textLength="183" clip-path="url(#breeze-testing-providers-tests-line-97)">--mount-sources</text><text class="breeze- [...]
-</text><text class="breeze-testing-providers-tests-r5" x="0" y="2411.2" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-98)">│</text><text class="breeze-testing-providers-tests-r7" x="756.4" y="2411.2" textLength="683.2" clip-path="url(#breeze-testing-providers-tests-line-98)">(none&#160;|&#160;wheel&#160;|&#160;sdist&#160;|&#160;&lt;airflow_version&gt;&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-tes [...]
-</text><text class="breeze-testing-providers-tests-r5" x="0" y="2435.6" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-99)">│</text><text class="breeze-testing-providers-tests-r7" x="756.4" y="2435.6" textLength="683.2" clip-path="url(#breeze-testing-providers-tests-line-99)">&lt;owner/repo:branch&gt;)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#16 [...]
-</text><text class="breeze-testing-providers-tests-r5" x="0" y="2460" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-100)">│</text><text class="breeze-testing-providers-tests-r4" x="24.4" y="2460" textLength="244" clip-path="url(#breeze-testing-providers-tests-line-100)">--allow-pre-releases</text><text class="breeze-testing-providers-tests-r1" x="756.4" y="2460" textLength="683.2" clip-path="url(#breeze-testing-providers-tests-line-100)">Allow&#160;pre-releases&#1 [...]
-</text><text class="breeze-testing-providers-tests-r5" x="0" y="2484.4" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-101)">│</text><text class="breeze-testing-providers-tests-r1" x="756.4" y="2484.4" textLength="683.2" clip-path="url(#breeze-testing-providers-tests-line-101)">be&#160;installed.&#160;Set&#160;to&#160;true&#160;automatically&#160;for&#160;pre-release&#160;</text><text class="breeze-testing-providers-tests-r5" x="1451.8" y="2484.4" textLength="12.2" [...]
-</text><text class="breeze-testing-providers-tests-r5" x="0" y="2508.8" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-102)">│</text><text class="breeze-testing-providers-tests-r4" x="756.4" y="2508.8" textLength="256.2" clip-path="url(#breeze-testing-providers-tests-line-102)">--use-airflow-version</text><text class="breeze-testing-providers-tests-r1" x="1012.6" y="2508.8" textLength="427" clip-path="url(#breeze-testing-providers-tests-line-102)">)&#160;&#160;&#16 [...]
-</text><text class="breeze-testing-providers-tests-r5" x="0" y="2533.2" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-103)">│</text><text class="breeze-testing-providers-tests-r4" x="24.4" y="2533.2" textLength="353.8" clip-path="url(#breeze-testing-providers-tests-line-103)">--use-distributions-from-dist</text><text class="breeze-testing-providers-tests-r1" x="756.4" y="2533.2" textLength="402.6" clip-path="url(#breeze-testing-providers-tests-line-103)">Install&# [...]
-</text><text class="breeze-testing-providers-tests-r5" x="0" y="2557.6" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-104)">│</text><text class="breeze-testing-providers-tests-r1" x="756.4" y="2557.6" textLength="683.2" clip-path="url(#breeze-testing-providers-tests-line-104)">determines&#160;type)&#160;from&#160;&#x27;dist&#x27;&#160;folder&#160;when&#160;entering&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-testing-providers-tests-r5" x="1 [...]
-</text><text class="breeze-testing-providers-tests-r5" x="0" y="2582" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-105)">│</text><text class="breeze-testing-providers-tests-r1" x="756.4" y="2582" textLength="683.2" clip-path="url(#breeze-testing-providers-tests-line-105)">breeze.&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;& [...]
-</text><text class="breeze-testing-providers-tests-r5" x="0" y="2606.4" textLength="1464" clip-path="url(#breeze-testing-providers-tests-line-106)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-testing-providers-tests-r1" x="1464" y="2606.4" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-106)">
-</text><text class="breeze-testing-providers-tests-r5" x="0" y="2630.8" textLength="24.4" clip-path="url(#breeze-testing-providers-tests-line-107)">╭─</text><text class="breeze-testing-providers-tests-r5" x="24.4" y="2630.8" textLength="512.4" clip-path="url(#breeze-testing-providers-tests-line-107)">&#160;Advanced&#160;flag&#160;for&#160;provider&#160;tests&#160;command&#160;</text><text class="breeze-testing-providers-tests-r5" x="536.8" y="2630.8" textLength="902.8" clip-path="url(#br [...]
-</text><text class="breeze-testing-providers-tests-r5" x="0" y="2655.2" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-108)">│</text><text class="breeze-testing-providers-tests-r4" x="24.4" y="2655.2" textLength="244" clip-path="url(#breeze-testing-providers-tests-line-108)">--excluded-providers</text><text class="breeze-testing-providers-tests-r1" x="463.6" y="2655.2" textLength="976" clip-path="url(#breeze-testing-providers-tests-line-108)">JSON-string&#160;of&#1 [...]
-</text><text class="breeze-testing-providers-tests-r5" x="0" y="2679.6" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-109)">│</text><text class="breeze-testing-providers-tests-r1" x="463.6" y="2679.6" textLength="976" clip-path="url(#breeze-testing-providers-tests-line-109)">({&#x27;3.12&#x27;:&#160;[&#x27;provider&#x27;]})&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160 [...]
-</text><text class="breeze-testing-providers-tests-r5" x="0" y="2704" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-110)">│</text><text class="breeze-testing-providers-tests-r7" x="463.6" y="2704" textLength="976" clip-path="url(#breeze-testing-providers-tests-line-110)">(TEXT)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#16 [...]
-</text><text class="breeze-testing-providers-tests-r5" x="0" y="2728.4" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-111)">│</text><text class="breeze-testing-providers-tests-r4" x="24.4" y="2728.4" textLength="390.4" clip-path="url(#breeze-testing-providers-tests-line-111)">--providers-constraints-location</text><text class="breeze-testing-providers-tests-r1" x="463.6" y="2728.4" textLength="927.2" clip-path="url(#breeze-testing-providers-tests-line-111)">Locati [...]
-</text><text class="breeze-testing-providers-tests-r5" x="0" y="2752.8" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-112)">│</text><text class="breeze-testing-providers-tests-r7" x="463.6" y="2752.8" textLength="927.2" clip-path="url(#breeze-testing-providers-tests-line-112)">(TEXT)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#16 [...]
-</text><text class="breeze-testing-providers-tests-r5" x="0" y="2777.2" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-113)">│</text><text class="breeze-testing-providers-tests-r4" x="24.4" y="2777.2" textLength="341.6" clip-path="url(#breeze-testing-providers-tests-line-113)">--providers-skip-constraints</text><text class="breeze-testing-providers-tests-r1" x="463.6" y="2777.2" textLength="597.8" clip-path="url(#breeze-testing-providers-tests-line-113)">Do&#160;no [...]
-</text><text class="breeze-testing-providers-tests-r5" x="0" y="2801.6" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-114)">│</text><text class="breeze-testing-providers-tests-r4" x="24.4" y="2801.6" textLength="195.2" clip-path="url(#breeze-testing-providers-tests-line-114)">--skip-providers</text><text class="breeze-testing-providers-tests-r1" x="463.6" y="2801.6" textLength="768.6" clip-path="url(#breeze-testing-providers-tests-line-114)">Space-separated&#160;l [...]
-</text><text class="breeze-testing-providers-tests-r5" x="0" y="2826" textLength="1464" clip-path="url(#breeze-testing-providers-tests-line-115)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-testing-providers-tests-r1" x="1464" y="2826" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-115)">
-</text><text class="breeze-testing-providers-tests-r5" x="0" y="2850.4" textLength="24.4" clip-path="url(#breeze-testing-providers-tests-line-116)">╭─</text><text class="breeze-testing-providers-tests-r5" x="24.4" y="2850.4" textLength="195.2" clip-path="url(#breeze-testing-providers-tests-line-116)">&#160;Common&#160;options&#160;</text><text class="breeze-testing-providers-tests-r5" x="219.6" y="2850.4" textLength="1220" clip-path="url(#breeze-testing-providers-tests-line-116)">─────── [...]
-</text><text class="breeze-testing-providers-tests-r5" x="0" y="2874.8" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-117)">│</text><text class="breeze-testing-providers-tests-r4" x="24.4" y="2874.8" textLength="109.8" clip-path="url(#breeze-testing-providers-tests-line-117)">--dry-run</text><text class="breeze-testing-providers-tests-r6" x="158.6" y="2874.8" textLength="24.4" clip-path="url(#breeze-testing-providers-tests-line-117)">-D</text><text class="breeze-t [...]
-</text><text class="breeze-testing-providers-tests-r5" x="0" y="2899.2" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-118)">│</text><text class="breeze-testing-providers-tests-r4" x="24.4" y="2899.2" textLength="109.8" clip-path="url(#breeze-testing-providers-tests-line-118)">--verbose</text><text class="breeze-testing-providers-tests-r6" x="158.6" y="2899.2" textLength="24.4" clip-path="url(#breeze-testing-providers-tests-line-118)">-v</text><text class="breeze-t [...]
-</text><text class="breeze-testing-providers-tests-r5" x="0" y="2923.6" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-119)">│</text><text class="breeze-testing-providers-tests-r4" x="24.4" y="2923.6" textLength="73.2" clip-path="url(#breeze-testing-providers-tests-line-119)">--help</text><text class="breeze-testing-providers-tests-r6" x="158.6" y="2923.6" textLength="24.4" clip-path="url(#breeze-testing-providers-tests-line-119)">-h</text><text class="breeze-testi [...]
-</text><text class="breeze-testing-providers-tests-r5" x="0" y="2948" textLength="1464" clip-path="url(#breeze-testing-providers-tests-line-120)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-testing-providers-tests-r1" x="1464" y="2948" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-120)">
+</text><text class="breeze-testing-providers-tests-r5" x="0" y="1606" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-65)">│</text><text class="breeze-testing-providers-tests-r4" x="24.4" y="1606" textLength="244" clip-path="url(#breeze-testing-providers-tests-line-65)">--upgrade-sqlalchemy</text><text class="breeze-testing-providers-tests-r1" x="341.6" y="1606" textLength="500.2" clip-path="url(#breeze-testing-providers-tests-line-65)">Upgrade&#160;SQLAlchemy&#160; [...]
+</text><text class="breeze-testing-providers-tests-r5" x="0" y="1630.4" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-66)">│</text><text class="breeze-testing-providers-tests-r4" x="24.4" y="1630.4" textLength="268.4" clip-path="url(#breeze-testing-providers-tests-line-66)">--downgrade-sqlalchemy</text><text class="breeze-testing-providers-tests-r1" x="341.6" y="1630.4" textLength="610" clip-path="url(#breeze-testing-providers-tests-line-66)">Downgrade&#160;SQLAlc [...]
+</text><text class="breeze-testing-providers-tests-r5" x="0" y="1654.8" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-67)">│</text><text class="breeze-testing-providers-tests-r4" x="24.4" y="1654.8" textLength="244" clip-path="url(#breeze-testing-providers-tests-line-67)">--downgrade-pendulum</text><text class="breeze-testing-providers-tests-r1" x="341.6" y="1654.8" textLength="585.6" clip-path="url(#breeze-testing-providers-tests-line-67)">Downgrade&#160;Pendulum [...]
+</text><text class="breeze-testing-providers-tests-r5" x="0" y="1679.2" textLength="1464" clip-path="url(#breeze-testing-providers-tests-line-68)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-testing-providers-tests-r1" x="1464" y="1679.2" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-68)">
+</text><text class="breeze-testing-providers-tests-r5" x="0" y="1703.6" textLength="24.4" clip-path="url(#breeze-testing-providers-tests-line-69)">╭─</text><text class="breeze-testing-providers-tests-r5" x="24.4" y="1703.6" textLength="402.6" clip-path="url(#breeze-testing-providers-tests-line-69)">&#160;Advanced&#160;flag&#160;for&#160;tests&#160;command&#160;</text><text class="breeze-testing-providers-tests-r5" x="427" y="1703.6" textLength="1012.6" clip-path="url(#breeze-testing-prov [...]
+</text><text class="breeze-testing-providers-tests-r5" x="0" y="1728" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-70)">│</text><text class="breeze-testing-providers-tests-r4" x="24.4" y="1728" textLength="231.8" clip-path="url(#breeze-testing-providers-tests-line-70)">--github-repository</text><text class="breeze-testing-providers-tests-r6" x="366" y="1728" textLength="24.4" clip-path="url(#breeze-testing-providers-tests-line-70)">-g</text><text class="breeze-te [...]
+</text><text class="breeze-testing-providers-tests-r5" x="0" y="1752.4" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-71)">│</text><text class="breeze-testing-providers-tests-r4" x="24.4" y="1752.4" textLength="183" clip-path="url(#breeze-testing-providers-tests-line-71)">--mount-sources</text><text class="breeze-testing-providers-tests-r1" x="414.8" y="1752.4" textLength="1024.8" clip-path="url(#breeze-testing-providers-tests-line-71)">Choose&#160;scope&#160;of&# [...]
+</text><text class="breeze-testing-providers-tests-r5" x="0" y="1776.8" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-72)">│</text><text class="breeze-testing-providers-tests-r1" x="414.8" y="1776.8" textLength="1024.8" clip-path="url(#breeze-testing-providers-tests-line-72)">selected).&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;& [...]
+</text><text class="breeze-testing-providers-tests-r5" x="0" y="1801.2" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-73)">│</text><text class="breeze-testing-providers-tests-r7" x="414.8" y="1801.2" textLength="1024.8" clip-path="url(#breeze-testing-providers-tests-line-73)">(selected&#160;|&#160;all&#160;|&#160;skip&#160;|&#160;remove&#160;|&#160;tests&#160;|&#160;providers-and-tests)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;& [...]
+</text><text class="breeze-testing-providers-tests-r5" x="0" y="1825.6" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-74)">│</text><text class="breeze-testing-providers-tests-r5" x="414.8" y="1825.6" textLength="1024.8" clip-path="url(#breeze-testing-providers-tests-line-74)">[default:&#160;selected]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160 [...]
+</text><text class="breeze-testing-providers-tests-r5" x="0" y="1850" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-75)">│</text><text class="breeze-testing-providers-tests-r4" x="24.4" y="1850" textLength="317.2" clip-path="url(#breeze-testing-providers-tests-line-75)">--skip-docker-compose-down</text><text class="breeze-testing-providers-tests-r1" x="414.8" y="1850" textLength="549" clip-path="url(#breeze-testing-providers-tests-line-75)">Skips&#160;running&#160 [...]
+</text><text class="breeze-testing-providers-tests-r5" x="0" y="1874.4" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-76)">│</text><text class="breeze-testing-providers-tests-r4" x="24.4" y="1874.4" textLength="244" clip-path="url(#breeze-testing-providers-tests-line-76)">--keep-env-variables</text><text class="breeze-testing-providers-tests-r1" x="414.8" y="1874.4" textLength="1000.4" clip-path="url(#breeze-testing-providers-tests-line-76)">Do&#160;not&#160;clear [...]
+</text><text class="breeze-testing-providers-tests-r5" x="0" y="1898.8" textLength="1464" clip-path="url(#breeze-testing-providers-tests-line-77)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-testing-providers-tests-r1" x="1464" y="1898.8" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-77)">
+</text><text class="breeze-testing-providers-tests-r5" x="0" y="1923.2" textLength="24.4" clip-path="url(#breeze-testing-providers-tests-line-78)">╭─</text><text class="breeze-testing-providers-tests-r5" x="24.4" y="1923.2" textLength="622.2" clip-path="url(#breeze-testing-providers-tests-line-78)">&#160;Advanced&#160;flag&#160;for&#160;installing&#160;airflow&#160;in&#160;container&#160;</text><text class="breeze-testing-providers-tests-r5" x="646.6" y="1923.2" textLength="793" clip-pat [...]
+</text><text class="breeze-testing-providers-tests-r5" x="0" y="1947.6" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-79)">│</text><text class="breeze-testing-providers-tests-r4" x="24.4" y="1947.6" textLength="378.2" clip-path="url(#breeze-testing-providers-tests-line-79)">--airflow-constraints-reference</text><text class="breeze-testing-providers-tests-r1" x="756.4" y="1947.6" textLength="683.2" clip-path="url(#breeze-testing-providers-tests-line-79)">Constraint [...]
+</text><text class="breeze-testing-providers-tests-r5" x="0" y="1972" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-80)">│</text><text class="breeze-testing-providers-tests-r1" x="756.4" y="1972" textLength="683.2" clip-path="url(#breeze-testing-providers-tests-line-80)">(used&#160;in&#160;calculated&#160;constraints&#160;URL).&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breez [...]
+</text><text class="breeze-testing-providers-tests-r5" x="0" y="1996.4" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-81)">│</text><text class="breeze-testing-providers-tests-r7" x="756.4" y="1996.4" textLength="683.2" clip-path="url(#breeze-testing-providers-tests-line-81)">(TEXT)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; [...]
+</text><text class="breeze-testing-providers-tests-r5" x="0" y="2020.8" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-82)">│</text><text class="breeze-testing-providers-tests-r4" x="24.4" y="2020.8" textLength="341.6" clip-path="url(#breeze-testing-providers-tests-line-82)">--clean-airflow-installation</text><text class="breeze-testing-providers-tests-r1" x="756.4" y="2020.8" textLength="683.2" clip-path="url(#breeze-testing-providers-tests-line-82)">Clean&#160;th [...]
+</text><text class="breeze-testing-providers-tests-r5" x="0" y="2045.2" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-83)">│</text><text class="breeze-testing-providers-tests-r1" x="756.4" y="2045.2" textLength="158.6" clip-path="url(#breeze-testing-providers-tests-line-83)">specified&#160;by&#160;</text><text class="breeze-testing-providers-tests-r4" x="915" y="2045.2" textLength="256.2" clip-path="url(#breeze-testing-providers-tests-line-83)">--use-airflow-versi [...]
+</text><text class="breeze-testing-providers-tests-r5" x="0" y="2069.6" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-84)">│</text><text class="breeze-testing-providers-tests-r4" x="24.4" y="2069.6" textLength="329.4" clip-path="url(#breeze-testing-providers-tests-line-84)">--force-lowest-dependencies</text><text class="breeze-testing-providers-tests-r1" x="756.4" y="2069.6" textLength="683.2" clip-path="url(#breeze-testing-providers-tests-line-84)">Run&#160;tests [...]
+</text><text class="breeze-testing-providers-tests-r5" x="0" y="2094" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-85)">│</text><text class="breeze-testing-providers-tests-r1" x="756.4" y="2094" textLength="683.2" clip-path="url(#breeze-testing-providers-tests-line-85)">or&#160;selected&#160;provider&#160;if&#160;`Provider[PROVIDER_ID]`&#160;is&#160;used&#160;</text><text class="breeze-testing-providers-tests-r5" x="1451.8" y="2094" textLength="12.2" clip-path="u [...]
+</text><text class="breeze-testing-providers-tests-r5" x="0" y="2118.4" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-86)">│</text><text class="breeze-testing-providers-tests-r1" x="756.4" y="2118.4" textLength="683.2" clip-path="url(#breeze-testing-providers-tests-line-86)">as&#160;test&#160;type.&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;& [...]
+</text><text class="breeze-testing-providers-tests-r5" x="0" y="2142.8" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-87)">│</text><text class="breeze-testing-providers-tests-r4" x="24.4" y="2142.8" textLength="414.8" clip-path="url(#breeze-testing-providers-tests-line-87)">--install-airflow-with-constraints</text><text class="breeze-testing-providers-tests-r1" x="439.2" y="2142.8" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-87)">/</text> [...]
+</text><text class="breeze-testing-providers-tests-r5" x="0" y="2167.2" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-88)">│</text><text class="breeze-testing-providers-tests-r4" x="24.4" y="2167.2" textLength="195.2" clip-path="url(#breeze-testing-providers-tests-line-88)">with-constraints</text><text class="breeze-testing-providers-tests-r1" x="756.4" y="2167.2" textLength="683.2" clip-path="url(#breeze-testing-providers-tests-line-88)">determined&#160;from&#160 [...]
+</text><text class="breeze-testing-providers-tests-r5" x="0" y="2191.6" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-89)">│</text><text class="breeze-testing-providers-tests-r5" x="756.4" y="2191.6" textLength="683.2" clip-path="url(#breeze-testing-providers-tests-line-89)">[default:&#160;no-install-airflow-with-constraints]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-testing-providers-tests-r5" x="1451.8" y="2191.6" text [...]
+</text><text class="breeze-testing-providers-tests-r5" x="0" y="2216" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-90)">│</text><text class="breeze-testing-providers-tests-r4" x="24.4" y="2216" textLength="256.2" clip-path="url(#breeze-testing-providers-tests-line-90)">--distribution-format</text><text class="breeze-testing-providers-tests-r1" x="756.4" y="2216" textLength="231.8" clip-path="url(#breeze-testing-providers-tests-line-90)">Format&#160;of&#160;packag [...]
+</text><text class="breeze-testing-providers-tests-r5" x="0" y="2240.4" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-91)">│</text><text class="breeze-testing-providers-tests-r5" x="756.4" y="2240.4" textLength="231.8" clip-path="url(#breeze-testing-providers-tests-line-91)">[default:&#160;wheel]&#160;&#160;&#160;</text><text class="breeze-testing-providers-tests-r5" x="1451.8" y="2240.4" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-91)">│ [...]
+</text><text class="breeze-testing-providers-tests-r5" x="0" y="2264.8" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-92)">│</text><text class="breeze-testing-providers-tests-r4" x="24.4" y="2264.8" textLength="256.2" clip-path="url(#breeze-testing-providers-tests-line-92)">--use-airflow-version</text><text class="breeze-testing-providers-tests-r1" x="756.4" y="2264.8" textLength="683.2" clip-path="url(#breeze-testing-providers-tests-line-92)">Use&#160;(reinstall& [...]
+</text><text class="breeze-testing-providers-tests-r5" x="0" y="2289.2" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-93)">│</text><text class="breeze-testing-providers-tests-r1" x="756.4" y="2289.2" textLength="683.2" clip-path="url(#breeze-testing-providers-tests-line-93)">can&#160;also&#160;be&#160;version&#160;(to&#160;install&#160;from&#160;PyPI),&#160;`none`,&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-testing-providers-tests-r5" x="1451.8" y="22 [...]
+</text><text class="breeze-testing-providers-tests-r5" x="0" y="2313.6" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-94)">│</text><text class="breeze-testing-providers-tests-r1" x="756.4" y="2313.6" textLength="683.2" clip-path="url(#breeze-testing-providers-tests-line-94)">`wheel`,&#160;or&#160;`sdist`&#160;to&#160;install&#160;from&#160;`dist`&#160;folder&#160;or&#160;&#160;&#160;&#160;</text><text class="breeze-testing-providers-tests-r5" x="1451.8" y="2313.6" [...]
+</text><text class="breeze-testing-providers-tests-r5" x="0" y="2338" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-95)">│</text><text class="breeze-testing-providers-tests-r1" x="756.4" y="2338" textLength="683.2" clip-path="url(#breeze-testing-providers-tests-line-95)">`owner/repo:branch`&#160;to&#160;install&#160;from&#160;GitHub&#160;repo.&#160;Uses&#160;&#160;&#160;</text><text class="breeze-testing-providers-tests-r5" x="1451.8" y="2338" textLength="12.2" cl [...]
+</text><text class="breeze-testing-providers-tests-r5" x="0" y="2362.4" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-96)">│</text><text class="breeze-testing-providers-tests-r4" x="756.4" y="2362.4" textLength="183" clip-path="url(#breeze-testing-providers-tests-line-96)">--mount-sources</text><text class="breeze-testing-providers-tests-r1" x="939.4" y="2362.4" textLength="500.2" clip-path="url(#breeze-testing-providers-tests-line-96)">&#160;`remove`&#160;if&#160 [...]
+</text><text class="breeze-testing-providers-tests-r5" x="0" y="2386.8" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-97)">│</text><text class="breeze-testing-providers-tests-r1" x="756.4" y="2386.8" textLength="683.2" clip-path="url(#breeze-testing-providers-tests-line-97)">`providers-and-tests`&#160;or&#160;`tests`&#160;can&#160;be&#160;specified&#160;for&#160;&#160;&#160;</text><text class="breeze-testing-providers-tests-r5" x="1451.8" y="2386.8" textLength="12 [...]
+</text><text class="breeze-testing-providers-tests-r5" x="0" y="2411.2" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-98)">│</text><text class="breeze-testing-providers-tests-r1" x="756.4" y="2411.2" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-98)">`</text><text class="breeze-testing-providers-tests-r4" x="768.6" y="2411.2" textLength="183" clip-path="url(#breeze-testing-providers-tests-line-98)">--mount-sources</text><text class="breeze- [...]
+</text><text class="breeze-testing-providers-tests-r5" x="0" y="2435.6" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-99)">│</text><text class="breeze-testing-providers-tests-r7" x="756.4" y="2435.6" textLength="683.2" clip-path="url(#breeze-testing-providers-tests-line-99)">(none&#160;|&#160;wheel&#160;|&#160;sdist&#160;|&#160;&lt;airflow_version&gt;&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-tes [...]
+</text><text class="breeze-testing-providers-tests-r5" x="0" y="2460" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-100)">│</text><text class="breeze-testing-providers-tests-r7" x="756.4" y="2460" textLength="683.2" clip-path="url(#breeze-testing-providers-tests-line-100)">&lt;owner/repo:branch&gt;)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; [...]
+</text><text class="breeze-testing-providers-tests-r5" x="0" y="2484.4" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-101)">│</text><text class="breeze-testing-providers-tests-r4" x="24.4" y="2484.4" textLength="244" clip-path="url(#breeze-testing-providers-tests-line-101)">--allow-pre-releases</text><text class="breeze-testing-providers-tests-r1" x="756.4" y="2484.4" textLength="683.2" clip-path="url(#breeze-testing-providers-tests-line-101)">Allow&#160;pre-relea [...]
+</text><text class="breeze-testing-providers-tests-r5" x="0" y="2508.8" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-102)">│</text><text class="breeze-testing-providers-tests-r1" x="756.4" y="2508.8" textLength="683.2" clip-path="url(#breeze-testing-providers-tests-line-102)">be&#160;installed.&#160;Set&#160;to&#160;true&#160;automatically&#160;for&#160;pre-release&#160;</text><text class="breeze-testing-providers-tests-r5" x="1451.8" y="2508.8" textLength="12.2" [...]
+</text><text class="breeze-testing-providers-tests-r5" x="0" y="2533.2" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-103)">│</text><text class="breeze-testing-providers-tests-r4" x="756.4" y="2533.2" textLength="256.2" clip-path="url(#breeze-testing-providers-tests-line-103)">--use-airflow-version</text><text class="breeze-testing-providers-tests-r1" x="1012.6" y="2533.2" textLength="427" clip-path="url(#breeze-testing-providers-tests-line-103)">)&#160;&#160;&#16 [...]
+</text><text class="breeze-testing-providers-tests-r5" x="0" y="2557.6" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-104)">│</text><text class="breeze-testing-providers-tests-r4" x="24.4" y="2557.6" textLength="353.8" clip-path="url(#breeze-testing-providers-tests-line-104)">--use-distributions-from-dist</text><text class="breeze-testing-providers-tests-r1" x="756.4" y="2557.6" textLength="402.6" clip-path="url(#breeze-testing-providers-tests-line-104)">Install&# [...]
+</text><text class="breeze-testing-providers-tests-r5" x="0" y="2582" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-105)">│</text><text class="breeze-testing-providers-tests-r1" x="756.4" y="2582" textLength="683.2" clip-path="url(#breeze-testing-providers-tests-line-105)">determines&#160;type)&#160;from&#160;&#x27;dist&#x27;&#160;folder&#160;when&#160;entering&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-testing-providers-tests-r5" x="1451. [...]
+</text><text class="breeze-testing-providers-tests-r5" x="0" y="2606.4" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-106)">│</text><text class="breeze-testing-providers-tests-r1" x="756.4" y="2606.4" textLength="683.2" clip-path="url(#breeze-testing-providers-tests-line-106)">breeze.&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#1 [...]
+</text><text class="breeze-testing-providers-tests-r5" x="0" y="2630.8" textLength="1464" clip-path="url(#breeze-testing-providers-tests-line-107)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-testing-providers-tests-r1" x="1464" y="2630.8" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-107)">
+</text><text class="breeze-testing-providers-tests-r5" x="0" y="2655.2" textLength="24.4" clip-path="url(#breeze-testing-providers-tests-line-108)">╭─</text><text class="breeze-testing-providers-tests-r5" x="24.4" y="2655.2" textLength="512.4" clip-path="url(#breeze-testing-providers-tests-line-108)">&#160;Advanced&#160;flag&#160;for&#160;provider&#160;tests&#160;command&#160;</text><text class="breeze-testing-providers-tests-r5" x="536.8" y="2655.2" textLength="902.8" clip-path="url(#br [...]
+</text><text class="breeze-testing-providers-tests-r5" x="0" y="2679.6" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-109)">│</text><text class="breeze-testing-providers-tests-r4" x="24.4" y="2679.6" textLength="244" clip-path="url(#breeze-testing-providers-tests-line-109)">--excluded-providers</text><text class="breeze-testing-providers-tests-r1" x="463.6" y="2679.6" textLength="976" clip-path="url(#breeze-testing-providers-tests-line-109)">JSON-string&#160;of&#1 [...]
+</text><text class="breeze-testing-providers-tests-r5" x="0" y="2704" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-110)">│</text><text class="breeze-testing-providers-tests-r1" x="463.6" y="2704" textLength="976" clip-path="url(#breeze-testing-providers-tests-line-110)">({&#x27;3.12&#x27;:&#160;[&#x27;provider&#x27;]})&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#1 [...]
+</text><text class="breeze-testing-providers-tests-r5" x="0" y="2728.4" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-111)">│</text><text class="breeze-testing-providers-tests-r7" x="463.6" y="2728.4" textLength="976" clip-path="url(#breeze-testing-providers-tests-line-111)">(TEXT)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; [...]
+</text><text class="breeze-testing-providers-tests-r5" x="0" y="2752.8" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-112)">│</text><text class="breeze-testing-providers-tests-r4" x="24.4" y="2752.8" textLength="390.4" clip-path="url(#breeze-testing-providers-tests-line-112)">--providers-constraints-location</text><text class="breeze-testing-providers-tests-r1" x="463.6" y="2752.8" textLength="927.2" clip-path="url(#breeze-testing-providers-tests-line-112)">Locati [...]
+</text><text class="breeze-testing-providers-tests-r5" x="0" y="2777.2" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-113)">│</text><text class="breeze-testing-providers-tests-r7" x="463.6" y="2777.2" textLength="927.2" clip-path="url(#breeze-testing-providers-tests-line-113)">(TEXT)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#16 [...]
+</text><text class="breeze-testing-providers-tests-r5" x="0" y="2801.6" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-114)">│</text><text class="breeze-testing-providers-tests-r4" x="24.4" y="2801.6" textLength="341.6" clip-path="url(#breeze-testing-providers-tests-line-114)">--providers-skip-constraints</text><text class="breeze-testing-providers-tests-r1" x="463.6" y="2801.6" textLength="597.8" clip-path="url(#breeze-testing-providers-tests-line-114)">Do&#160;no [...]
+</text><text class="breeze-testing-providers-tests-r5" x="0" y="2826" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-115)">│</text><text class="breeze-testing-providers-tests-r4" x="24.4" y="2826" textLength="195.2" clip-path="url(#breeze-testing-providers-tests-line-115)">--skip-providers</text><text class="breeze-testing-providers-tests-r1" x="463.6" y="2826" textLength="768.6" clip-path="url(#breeze-testing-providers-tests-line-115)">Space-separated&#160;list&#1 [...]
+</text><text class="breeze-testing-providers-tests-r5" x="0" y="2850.4" textLength="1464" clip-path="url(#breeze-testing-providers-tests-line-116)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-testing-providers-tests-r1" x="1464" y="2850.4" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-116)">
+</text><text class="breeze-testing-providers-tests-r5" x="0" y="2874.8" textLength="24.4" clip-path="url(#breeze-testing-providers-tests-line-117)">╭─</text><text class="breeze-testing-providers-tests-r5" x="24.4" y="2874.8" textLength="195.2" clip-path="url(#breeze-testing-providers-tests-line-117)">&#160;Common&#160;options&#160;</text><text class="breeze-testing-providers-tests-r5" x="219.6" y="2874.8" textLength="1220" clip-path="url(#breeze-testing-providers-tests-line-117)">─────── [...]
+</text><text class="breeze-testing-providers-tests-r5" x="0" y="2899.2" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-118)">│</text><text class="breeze-testing-providers-tests-r4" x="24.4" y="2899.2" textLength="109.8" clip-path="url(#breeze-testing-providers-tests-line-118)">--dry-run</text><text class="breeze-testing-providers-tests-r6" x="158.6" y="2899.2" textLength="24.4" clip-path="url(#breeze-testing-providers-tests-line-118)">-D</text><text class="breeze-t [...]
+</text><text class="breeze-testing-providers-tests-r5" x="0" y="2923.6" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-119)">│</text><text class="breeze-testing-providers-tests-r4" x="24.4" y="2923.6" textLength="109.8" clip-path="url(#breeze-testing-providers-tests-line-119)">--verbose</text><text class="breeze-testing-providers-tests-r6" x="158.6" y="2923.6" textLength="24.4" clip-path="url(#breeze-testing-providers-tests-line-119)">-v</text><text class="breeze-t [...]
+</text><text class="breeze-testing-providers-tests-r5" x="0" y="2948" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-120)">│</text><text class="breeze-testing-providers-tests-r4" x="24.4" y="2948" textLength="73.2" clip-path="url(#breeze-testing-providers-tests-line-120)">--help</text><text class="breeze-testing-providers-tests-r6" x="158.6" y="2948" textLength="24.4" clip-path="url(#breeze-testing-providers-tests-line-120)">-h</text><text class="breeze-testing-pro [...]
+</text><text class="breeze-testing-providers-tests-r5" x="0" y="2972.4" textLength="1464" clip-path="url(#breeze-testing-providers-tests-line-121)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-testing-providers-tests-r1" x="1464" y="2972.4" textLength="12.2" clip-path="url(#breeze-testing-providers-tests-line-121)">
 </text>
     </g>
     </g>
diff --git a/dev/breeze/doc/images/output_testing_providers-tests.txt b/dev/breeze/doc/images/output_testing_providers-tests.txt
index adaba105891..a0fe24975e3 100644
--- a/dev/breeze/doc/images/output_testing_providers-tests.txt
+++ b/dev/breeze/doc/images/output_testing_providers-tests.txt
@@ -1 +1 @@
-5285b4c14057f68a9b9f46aa8ddb8cc0
+b344498c0eff8be48428b6421e65a2b5
diff --git a/dev/breeze/doc/images/output_testing_task-sdk-integration-tests.svg b/dev/breeze/doc/images/output_testing_task-sdk-integration-tests.svg
new file mode 100644
index 00000000000..97542975510
--- /dev/null
+++ b/dev/breeze/doc/images/output_testing_task-sdk-integration-tests.svg
@@ -0,0 +1,144 @@
+<svg class="rich-terminal" viewBox="0 0 1482 562.4" xmlns="http://www.w3.org/2000/svg">
+    <!-- Generated with Rich https://www.textualize.io -->
+    <style>
+
+    @font-face {
+        font-family: "Fira Code";
+        src: local("FiraCode-Regular"),
+                url("https://cdnjs.cloudflare.com/ajax/libs/firacode/6.2.0/woff2/FiraCode-Regular.woff2") format("woff2"),
+                url("https://cdnjs.cloudflare.com/ajax/libs/firacode/6.2.0/woff/FiraCode-Regular.woff") format("woff");
+        font-style: normal;
+        font-weight: 400;
+    }
+    @font-face {
+        font-family: "Fira Code";
+        src: local("FiraCode-Bold"),
+                url("https://cdnjs.cloudflare.com/ajax/libs/firacode/6.2.0/woff2/FiraCode-Bold.woff2") format("woff2"),
+                url("https://cdnjs.cloudflare.com/ajax/libs/firacode/6.2.0/woff/FiraCode-Bold.woff") format("woff");
+        font-style: bold;
+        font-weight: 700;
+    }
+
+    .breeze-testing-task-sdk-integration-tests-matrix {
+        font-family: Fira Code, monospace;
+        font-size: 20px;
+        line-height: 24.4px;
+        font-variant-east-asian: full-width;
+    }
+
+    .breeze-testing-task-sdk-integration-tests-title {
+        font-size: 18px;
+        font-weight: bold;
+        font-family: arial;
+    }
+
+    .breeze-testing-task-sdk-integration-tests-r1 { fill: #c5c8c6 }
+.breeze-testing-task-sdk-integration-tests-r2 { fill: #d0b344 }
+.breeze-testing-task-sdk-integration-tests-r3 { fill: #c5c8c6;font-weight: bold }
+.breeze-testing-task-sdk-integration-tests-r4 { fill: #68a0b3;font-weight: bold }
+.breeze-testing-task-sdk-integration-tests-r5 { fill: #868887 }
+.breeze-testing-task-sdk-integration-tests-r6 { fill: #98a84b;font-weight: bold }
+.breeze-testing-task-sdk-integration-tests-r7 { fill: #8d7b39 }
+    </style>
+
+    <defs>
+    <clipPath id="breeze-testing-task-sdk-integration-tests-clip-terminal">
+      <rect x="0" y="0" width="1463.0" height="511.4" />
+    </clipPath>
+    <clipPath id="breeze-testing-task-sdk-integration-tests-line-0">
+    <rect x="0" y="1.5" width="1464" height="24.65"/>
+            </clipPath>
+<clipPath id="breeze-testing-task-sdk-integration-tests-line-1">
+    <rect x="0" y="25.9" width="1464" height="24.65"/>
+            </clipPath>
+<clipPath id="breeze-testing-task-sdk-integration-tests-line-2">
+    <rect x="0" y="50.3" width="1464" height="24.65"/>
+            </clipPath>
+<clipPath id="breeze-testing-task-sdk-integration-tests-line-3">
+    <rect x="0" y="74.7" width="1464" height="24.65"/>
+            </clipPath>
+<clipPath id="breeze-testing-task-sdk-integration-tests-line-4">
+    <rect x="0" y="99.1" width="1464" height="24.65"/>
+            </clipPath>
+<clipPath id="breeze-testing-task-sdk-integration-tests-line-5">
+    <rect x="0" y="123.5" width="1464" height="24.65"/>
+            </clipPath>
+<clipPath id="breeze-testing-task-sdk-integration-tests-line-6">
+    <rect x="0" y="147.9" width="1464" height="24.65"/>
+            </clipPath>
+<clipPath id="breeze-testing-task-sdk-integration-tests-line-7">
+    <rect x="0" y="172.3" width="1464" height="24.65"/>
+            </clipPath>
+<clipPath id="breeze-testing-task-sdk-integration-tests-line-8">
+    <rect x="0" y="196.7" width="1464" height="24.65"/>
+            </clipPath>
+<clipPath id="breeze-testing-task-sdk-integration-tests-line-9">
+    <rect x="0" y="221.1" width="1464" height="24.65"/>
+            </clipPath>
+<clipPath id="breeze-testing-task-sdk-integration-tests-line-10">
+    <rect x="0" y="245.5" width="1464" height="24.65"/>
+            </clipPath>
+<clipPath id="breeze-testing-task-sdk-integration-tests-line-11">
+    <rect x="0" y="269.9" width="1464" height="24.65"/>
+            </clipPath>
+<clipPath id="breeze-testing-task-sdk-integration-tests-line-12">
+    <rect x="0" y="294.3" width="1464" height="24.65"/>
+            </clipPath>
+<clipPath id="breeze-testing-task-sdk-integration-tests-line-13">
+    <rect x="0" y="318.7" width="1464" height="24.65"/>
+            </clipPath>
+<clipPath id="breeze-testing-task-sdk-integration-tests-line-14">
+    <rect x="0" y="343.1" width="1464" height="24.65"/>
+            </clipPath>
+<clipPath id="breeze-testing-task-sdk-integration-tests-line-15">
+    <rect x="0" y="367.5" width="1464" height="24.65"/>
+            </clipPath>
+<clipPath id="breeze-testing-task-sdk-integration-tests-line-16">
+    <rect x="0" y="391.9" width="1464" height="24.65"/>
+            </clipPath>
+<clipPath id="breeze-testing-task-sdk-integration-tests-line-17">
+    <rect x="0" y="416.3" width="1464" height="24.65"/>
+            </clipPath>
+<clipPath id="breeze-testing-task-sdk-integration-tests-line-18">
+    <rect x="0" y="440.7" width="1464" height="24.65"/>
+            </clipPath>
+<clipPath id="breeze-testing-task-sdk-integration-tests-line-19">
+    <rect x="0" y="465.1" width="1464" height="24.65"/>
+            </clipPath>
+    </defs>
+
+    <rect fill="#292929" stroke="rgba(255,255,255,0.35)" stroke-width="1" x="1" y="1" width="1480" height="560.4" rx="8"/><text class="breeze-testing-task-sdk-integration-tests-title" fill="#c5c8c6" text-anchor="middle" x="740" y="27">Command:&#160;testing&#160;task-sdk-integration-tests</text>
+            <g transform="translate(26,22)">
+            <circle cx="0" cy="0" r="7" fill="#ff5f57"/>
+            <circle cx="22" cy="0" r="7" fill="#febc2e"/>
+            <circle cx="44" cy="0" r="7" fill="#28c840"/>
+            </g>
+        
+    <g transform="translate(9, 41)" clip-path="url(#breeze-testing-task-sdk-integration-tests-clip-terminal)">
+    
+    <g class="breeze-testing-task-sdk-integration-tests-matrix">
+    <text class="breeze-testing-task-sdk-integration-tests-r1" x="1464" y="20" textLength="12.2" clip-path="url(#breeze-testing-task-sdk-integration-tests-line-0)">
+</text><text class="breeze-testing-task-sdk-integration-tests-r2" x="12.2" y="44.4" textLength="73.2" clip-path="url(#breeze-testing-task-sdk-integration-tests-line-1)">Usage:</text><text class="breeze-testing-task-sdk-integration-tests-r3" x="97.6" y="44.4" textLength="500.2" clip-path="url(#breeze-testing-task-sdk-integration-tests-line-1)">breeze&#160;testing&#160;task-sdk-integration-tests</text><text class="breeze-testing-task-sdk-integration-tests-r1" x="610" y="44.4" textLength="1 [...]
+</text><text class="breeze-testing-task-sdk-integration-tests-r1" x="1464" y="68.8" textLength="12.2" clip-path="url(#breeze-testing-task-sdk-integration-tests-line-2)">
+</text><text class="breeze-testing-task-sdk-integration-tests-r1" x="12.2" y="93.2" textLength="378.2" clip-path="url(#breeze-testing-task-sdk-integration-tests-line-3)">Run&#160;task&#160;SDK&#160;integration&#160;tests.</text><text class="breeze-testing-task-sdk-integration-tests-r1" x="1464" y="93.2" textLength="12.2" clip-path="url(#breeze-testing-task-sdk-integration-tests-line-3)">
+</text><text class="breeze-testing-task-sdk-integration-tests-r1" x="1464" y="117.6" textLength="12.2" clip-path="url(#breeze-testing-task-sdk-integration-tests-line-4)">
+</text><text class="breeze-testing-task-sdk-integration-tests-r5" x="0" y="142" textLength="24.4" clip-path="url(#breeze-testing-task-sdk-integration-tests-line-5)">╭─</text><text class="breeze-testing-task-sdk-integration-tests-r5" x="24.4" y="142" textLength="329.4" clip-path="url(#breeze-testing-task-sdk-integration-tests-line-5)">&#160;Docker-compose&#160;tests&#160;flag&#160;</text><text class="breeze-testing-task-sdk-integration-tests-r5" x="353.8" y="142" textLength="1085.8" clip- [...]
+</text><text class="breeze-testing-task-sdk-integration-tests-r5" x="0" y="166.4" textLength="12.2" clip-path="url(#breeze-testing-task-sdk-integration-tests-line-6)">│</text><text class="breeze-testing-task-sdk-integration-tests-r4" x="24.4" y="166.4" textLength="146.4" clip-path="url(#breeze-testing-task-sdk-integration-tests-line-6)">--image-name</text><text class="breeze-testing-task-sdk-integration-tests-r6" x="414.8" y="166.4" textLength="24.4" clip-path="url(#breeze-testing-task-s [...]
+</text><text class="breeze-testing-task-sdk-integration-tests-r5" x="0" y="190.8" textLength="12.2" clip-path="url(#breeze-testing-task-sdk-integration-tests-line-7)">│</text><text class="breeze-testing-task-sdk-integration-tests-r4" x="24.4" y="190.8" textLength="97.6" clip-path="url(#breeze-testing-task-sdk-integration-tests-line-7)">--python</text><text class="breeze-testing-task-sdk-integration-tests-r6" x="414.8" y="190.8" textLength="24.4" clip-path="url(#breeze-testing-task-sdk-in [...]
+</text><text class="breeze-testing-task-sdk-integration-tests-r5" x="0" y="215.2" textLength="12.2" clip-path="url(#breeze-testing-task-sdk-integration-tests-line-8)">│</text><text class="breeze-testing-task-sdk-integration-tests-r7" x="463.6" y="215.2" textLength="732" clip-path="url(#breeze-testing-task-sdk-integration-tests-line-8)">(&gt;3.9&lt;&#160;|&#160;3.10&#160;|&#160;3.11&#160;|&#160;3.12)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; [...]
+</text><text class="breeze-testing-task-sdk-integration-tests-r5" x="0" y="239.6" textLength="12.2" clip-path="url(#breeze-testing-task-sdk-integration-tests-line-9)">│</text><text class="breeze-testing-task-sdk-integration-tests-r5" x="463.6" y="239.6" textLength="732" clip-path="url(#breeze-testing-task-sdk-integration-tests-line-9)">[default:&#160;3.9]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#1 [...]
+</text><text class="breeze-testing-task-sdk-integration-tests-r5" x="0" y="264" textLength="12.2" clip-path="url(#breeze-testing-task-sdk-integration-tests-line-10)">│</text><text class="breeze-testing-task-sdk-integration-tests-r4" x="24.4" y="264" textLength="366" clip-path="url(#breeze-testing-task-sdk-integration-tests-line-10)">--skip-docker-compose-deletion</text><text class="breeze-testing-task-sdk-integration-tests-r1" x="463.6" y="264" textLength="671" clip-path="url(#breeze-tes [...]
+</text><text class="breeze-testing-task-sdk-integration-tests-r5" x="0" y="288.4" textLength="12.2" clip-path="url(#breeze-testing-task-sdk-integration-tests-line-11)">│</text><text class="breeze-testing-task-sdk-integration-tests-r4" x="24.4" y="288.4" textLength="305" clip-path="url(#breeze-testing-task-sdk-integration-tests-line-11)">--include-success-outputs</text><text class="breeze-testing-task-sdk-integration-tests-r1" x="463.6" y="288.4" textLength="841.8" clip-path="url(#breeze- [...]
+</text><text class="breeze-testing-task-sdk-integration-tests-r5" x="0" y="312.8" textLength="12.2" clip-path="url(#breeze-testing-task-sdk-integration-tests-line-12)">│</text><text class="breeze-testing-task-sdk-integration-tests-r4" x="24.4" y="312.8" textLength="231.8" clip-path="url(#breeze-testing-task-sdk-integration-tests-line-12)">--github-repository</text><text class="breeze-testing-task-sdk-integration-tests-r6" x="414.8" y="312.8" textLength="24.4" clip-path="url(#breeze-testi [...]
+</text><text class="breeze-testing-task-sdk-integration-tests-r5" x="0" y="337.2" textLength="12.2" clip-path="url(#breeze-testing-task-sdk-integration-tests-line-13)">│</text><text class="breeze-testing-task-sdk-integration-tests-r5" x="463.6" y="337.2" textLength="585.6" clip-path="url(#breeze-testing-task-sdk-integration-tests-line-13)">[default:&#160;apache/airflow]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; [...]
+</text><text class="breeze-testing-task-sdk-integration-tests-r5" x="0" y="361.6" textLength="12.2" clip-path="url(#breeze-testing-task-sdk-integration-tests-line-14)">│</text><text class="breeze-testing-task-sdk-integration-tests-r4" x="24.4" y="361.6" textLength="219.6" clip-path="url(#breeze-testing-task-sdk-integration-tests-line-14)">--task-sdk-version</text><text class="breeze-testing-task-sdk-integration-tests-r1" x="463.6" y="361.6" textLength="329.4" clip-path="url(#breeze-testi [...]
+</text><text class="breeze-testing-task-sdk-integration-tests-r5" x="0" y="386" textLength="1464" clip-path="url(#breeze-testing-task-sdk-integration-tests-line-15)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-testing-task-sdk-integration-tests-r1" x="1464" y="386" textLength="12.2" clip-path="url(#breeze-testing-task-sdk-integration-tests-line-15)">
+</text><text class="breeze-testing-task-sdk-integration-tests-r5" x="0" y="410.4" textLength="24.4" clip-path="url(#breeze-testing-task-sdk-integration-tests-line-16)">╭─</text><text class="breeze-testing-task-sdk-integration-tests-r5" x="24.4" y="410.4" textLength="195.2" clip-path="url(#breeze-testing-task-sdk-integration-tests-line-16)">&#160;Common&#160;options&#160;</text><text class="breeze-testing-task-sdk-integration-tests-r5" x="219.6" y="410.4" textLength="1220" clip-path="url( [...]
+</text><text class="breeze-testing-task-sdk-integration-tests-r5" x="0" y="434.8" textLength="12.2" clip-path="url(#breeze-testing-task-sdk-integration-tests-line-17)">│</text><text class="breeze-testing-task-sdk-integration-tests-r4" x="24.4" y="434.8" textLength="109.8" clip-path="url(#breeze-testing-task-sdk-integration-tests-line-17)">--verbose</text><text class="breeze-testing-task-sdk-integration-tests-r6" x="158.6" y="434.8" textLength="24.4" clip-path="url(#breeze-testing-task-sd [...]
+</text><text class="breeze-testing-task-sdk-integration-tests-r5" x="0" y="459.2" textLength="12.2" clip-path="url(#breeze-testing-task-sdk-integration-tests-line-18)">│</text><text class="breeze-testing-task-sdk-integration-tests-r4" x="24.4" y="459.2" textLength="109.8" clip-path="url(#breeze-testing-task-sdk-integration-tests-line-18)">--dry-run</text><text class="breeze-testing-task-sdk-integration-tests-r6" x="158.6" y="459.2" textLength="24.4" clip-path="url(#breeze-testing-task-sd [...]
+</text><text class="breeze-testing-task-sdk-integration-tests-r5" x="0" y="483.6" textLength="12.2" clip-path="url(#breeze-testing-task-sdk-integration-tests-line-19)">│</text><text class="breeze-testing-task-sdk-integration-tests-r4" x="24.4" y="483.6" textLength="73.2" clip-path="url(#breeze-testing-task-sdk-integration-tests-line-19)">--help</text><text class="breeze-testing-task-sdk-integration-tests-r6" x="158.6" y="483.6" textLength="24.4" clip-path="url(#breeze-testing-task-sdk-in [...]
+</text><text class="breeze-testing-task-sdk-integration-tests-r5" x="0" y="508" textLength="1464" clip-path="url(#breeze-testing-task-sdk-integration-tests-line-20)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-testing-task-sdk-integration-tests-r1" x="1464" y="508" textLength="12.2" clip-path="url(#breeze-testing-task-sdk-integration-tests-line-20)">
+</text>
+    </g>
+    </g>
+</svg>
diff --git a/dev/breeze/doc/images/output_testing_task-sdk-integration-tests.txt b/dev/breeze/doc/images/output_testing_task-sdk-integration-tests.txt
new file mode 100644
index 00000000000..8df51579020
--- /dev/null
+++ b/dev/breeze/doc/images/output_testing_task-sdk-integration-tests.txt
@@ -0,0 +1 @@
+f212a6b0fda1ee1f028e9341f4e1a5ef
diff --git a/dev/breeze/pyproject.toml b/dev/breeze/pyproject.toml
index ada1c0b0b21..1a383d7d6ee 100644
--- a/dev/breeze/pyproject.toml
+++ b/dev/breeze/pyproject.toml
@@ -60,8 +60,7 @@ dependencies = [
     "jinja2>=3.1.5",
     "jsonschema>=4.19.1",
     "packaging>=23.2",
-    "pre-commit>=3.5.0",
-    "pre-commit-uv>=4.1.3",
+    "prek>=0.0.26",
     "psutil>=5.9.6",
     "pygithub>=2.1.1",
     "pytest-xdist>=3.3.1",
diff --git a/dev/breeze/src/airflow_breeze/commands/ci_commands.py b/dev/breeze/src/airflow_breeze/commands/ci_commands.py
index 0c33e11b828..6159fda9aa4 100644
--- a/dev/breeze/src/airflow_breeze/commands/ci_commands.py
+++ b/dev/breeze/src/airflow_breeze/commands/ci_commands.py
@@ -224,14 +224,14 @@ def get_changed_files(commit_ref: str | None) -> tuple[str, ...]:
 @option_github_repository
 @click.option(
     "--github-actor",
-    help="Actor that triggered the event (Github user)",
+    help="Actor that triggered the event (GitHub user)",
     envvar="GITHUB_ACTOR",
     type=str,
     default="",
 )
 @click.option(
     "--github-context",
-    help="Github context (JSON formatted) passed by Github Actions",
+    help="GitHub context (JSON formatted) passed by GitHub Actions",
     envvar="GITHUB_CONTEXT",
     type=str,
     default="",
diff --git a/dev/breeze/src/airflow_breeze/commands/ci_commands_config.py b/dev/breeze/src/airflow_breeze/commands/ci_commands_config.py
index a8b50246a3a..4dcf0da6647 100644
--- a/dev/breeze/src/airflow_breeze/commands/ci_commands_config.py
+++ b/dev/breeze/src/airflow_breeze/commands/ci_commands_config.py
@@ -47,7 +47,7 @@ CI_PARAMETERS: dict[str, list[dict[str, str | list[str]]]] = {
             ],
         },
         {
-            "name": "Github parameters",
+            "name": "GitHub parameters",
             "options": [
                 "--github-event-name",
                 "--github-repository",
diff --git a/dev/breeze/src/airflow_breeze/commands/ci_image_commands.py b/dev/breeze/src/airflow_breeze/commands/ci_image_commands.py
index 64f652ff3cf..6ea020e9ef4 100644
--- a/dev/breeze/src/airflow_breeze/commands/ci_image_commands.py
+++ b/dev/breeze/src/airflow_breeze/commands/ci_image_commands.py
@@ -176,7 +176,7 @@ def run_build_in_parallel(
             ]
     check_async_run_results(
         results=results,
-        success="All images built correctly",
+        success_message="All images built correctly",
         outputs=outputs,
         include_success_outputs=include_success_outputs,
         skip_cleanup=skip_cleanup,
@@ -194,16 +194,7 @@ def kill_process_group(build_process_group_id: int):
 
 
 def get_exitcode(status: int) -> int:
-    # In Python 3.9+ we will be able to use
-    # os.waitstatus_to_exitcode(status) - see https://github.com/python/cpython/issues/84275
-    # but until then we need to do this ugly conversion
-    if os.WIFSIGNALED(status):
-        return -os.WTERMSIG(status)
-    if os.WIFEXITED(status):
-        return os.WEXITSTATUS(status)
-    if os.WIFSTOPPED(status):
-        return -os.WSTOPSIG(status)
-    return 1
+    return os.waitstatus_to_exitcode(status)
 
 
 option_upgrade_to_newer_dependencies = click.option(
@@ -514,7 +505,7 @@ def run_verify_in_parallel(
             ]
     check_async_run_results(
         results=results,
-        success="All images verified",
+        success_message="All images verified",
         outputs=outputs,
         include_success_outputs=include_success_outputs,
         skip_cleanup=skip_cleanup,
@@ -576,7 +567,7 @@ def load(
     from_run: str | None,
     from_pr: str | None,
     github_repository: str,
-    github_token: str,
+    github_token: str | None,
     image_file: Path | None,
     image_file_dir: Path,
     platform: str,
@@ -610,6 +601,13 @@ def load(
         )
         sys.exit(1)
 
+    if from_run or from_pr and not github_token:
+        get_console().print(
+            "[error]The parameter `--github-token` must be provided if `--from-run` or `--from-pr` is "
+            "provided. Exiting.[/]"
+        )
+        sys.exit(1)
+
     if from_run:
         download_artifact_from_run_id(from_run, image_file_to_load, github_repository, github_token)
     elif from_pr:
@@ -827,9 +825,7 @@ def run_build_ci_image(
         process = subprocess.run(
             [
                 sys.executable,
-                os.fspath(
-                    AIRFLOW_ROOT_PATH / "scripts" / "ci" / "pre_commit" / "update_providers_dependencies.py"
-                ),
+                os.fspath(AIRFLOW_ROOT_PATH / "scripts" / "ci" / "prek" / "update_providers_dependencies.py"),
             ],
             check=False,
         )
diff --git a/dev/breeze/src/airflow_breeze/commands/ci_image_commands_config.py b/dev/breeze/src/airflow_breeze/commands/ci_image_commands_config.py
index e40dab7fb30..03136c100a9 100644
--- a/dev/breeze/src/airflow_breeze/commands/ci_image_commands_config.py
+++ b/dev/breeze/src/airflow_breeze/commands/ci_image_commands_config.py
@@ -96,7 +96,7 @@ CI_IMAGE_TOOLS_PARAMETERS: dict[str, list[dict[str, str | list[str]]]] = {
             ],
         },
         {
-            "name": "Github authentication",
+            "name": "GitHub authentication",
             "options": [
                 "--github-repository",
                 "--github-token",
@@ -124,7 +124,7 @@ CI_IMAGE_TOOLS_PARAMETERS: dict[str, list[dict[str, str | list[str]]]] = {
             ],
         },
         {
-            "name": "Github authentication",
+            "name": "GitHub authentication",
             "options": [
                 "--github-repository",
                 "--github-token",
@@ -152,7 +152,7 @@ CI_IMAGE_TOOLS_PARAMETERS: dict[str, list[dict[str, str | list[str]]]] = {
             ],
         },
         {
-            "name": "Github authentication",
+            "name": "GitHub authentication",
             "options": [
                 "--github-repository",
                 "--github-token",
diff --git a/dev/breeze/src/airflow_breeze/commands/common_image_options.py b/dev/breeze/src/airflow_breeze/commands/common_image_options.py
index 3c1e9ed0e82..ea38dfa1197 100644
--- a/dev/breeze/src/airflow_breeze/commands/common_image_options.py
+++ b/dev/breeze/src/airflow_breeze/commands/common_image_options.py
@@ -212,7 +212,6 @@ option_github_token_for_images = click.option(
     help="The token used to authenticate to GitHub. You can generate it with "
     "https://github.com/settings/tokens/new?description=Read%20repo&scopes=public_repo",
     envvar="GITHUB_TOKEN",
-    required=True,
 )
 option_image_file_dir = click.option(
     "--image-file-dir",
diff --git a/dev/breeze/src/airflow_breeze/commands/common_options.py b/dev/breeze/src/airflow_breeze/commands/common_options.py
index 73bc889e485..4ff178c5822 100644
--- a/dev/breeze/src/airflow_breeze/commands/common_options.py
+++ b/dev/breeze/src/airflow_breeze/commands/common_options.py
@@ -390,7 +390,7 @@ option_tty = click.option(
     default=ALLOWED_TTY[0],
     show_default=True,
     help="Whether to allocate pseudo-tty when running docker command"
-    " (useful for pre-commit and CI to force-enable it).",
+    " (useful for prek and CI to force-enable it).",
 )
 option_upgrade_boto = click.option(
     "--upgrade-boto",
@@ -398,6 +398,12 @@ option_upgrade_boto = click.option(
     is_flag=True,
     envvar="UPGRADE_BOTO",
 )
+option_upgrade_sqlalchemy = click.option(
+    "--upgrade-sqlalchemy",
+    help="Upgrade SQLAlchemy to the latest version.",
+    is_flag=True,
+    envvar="UPGRADE_SQLALCHEMY",
+)
 option_use_uv = click.option(
     "--use-uv/--no-use-uv",
     is_flag=True,
diff --git a/dev/breeze/src/airflow_breeze/commands/developer_commands.py b/dev/breeze/src/airflow_breeze/commands/developer_commands.py
index 4cf12424f28..763f9c52881 100644
--- a/dev/breeze/src/airflow_breeze/commands/developer_commands.py
+++ b/dev/breeze/src/airflow_breeze/commands/developer_commands.py
@@ -22,7 +22,6 @@ import shlex
 import shutil
 import sys
 import threading
-from collections.abc import Iterable
 from pathlib import Path
 from signal import SIGTERM
 from time import sleep
@@ -70,6 +69,7 @@ from airflow_breeze.commands.common_options import (
     option_standalone_dag_processor,
     option_tty,
     option_upgrade_boto,
+    option_upgrade_sqlalchemy,
     option_use_airflow_version,
     option_use_uv,
     option_uv_http_timeout,
@@ -103,11 +103,8 @@ from airflow_breeze.global_constants import (
 from airflow_breeze.params.build_ci_params import BuildCiParams
 from airflow_breeze.params.doc_build_params import DocBuildParams
 from airflow_breeze.params.shell_params import ShellParams
-from airflow_breeze.pre_commit_ids import PRE_COMMIT_LIST
-from airflow_breeze.utils.coertions import one_or_none_set
 from airflow_breeze.utils.confirm import Answer, user_confirm
 from airflow_breeze.utils.console import get_console
-from airflow_breeze.utils.custom_param_types import BetterChoice
 from airflow_breeze.utils.docker_command_utils import (
     bring_compose_project_down,
     check_docker_resources,
@@ -123,7 +120,7 @@ from airflow_breeze.utils.path_utils import (
 )
 from airflow_breeze.utils.platforms import get_normalized_platform
 from airflow_breeze.utils.run_utils import (
-    assert_pre_commit_installed,
+    assert_prek_installed,
     run_command,
     run_compile_ui_assets,
 )
@@ -336,6 +333,7 @@ option_load_default_connections = click.option(
 @option_warn_image_upgrade_needed
 @option_standalone_dag_processor
 @option_upgrade_boto
+@option_upgrade_sqlalchemy
 @option_use_airflow_version
 @option_allow_pre_releases
 @option_use_distributions_from_dist
@@ -396,6 +394,7 @@ def shell(
     test_type: str | None,
     tty: str,
     upgrade_boto: bool,
+    upgrade_sqlalchemy: bool,
     use_airflow_version: str | None,
     allow_pre_releases: bool,
     use_distributions_from_dist: bool,
@@ -469,6 +468,7 @@ def shell(
         test_type=test_type,
         tty=tty,
         upgrade_boto=upgrade_boto,
+        upgrade_sqlalchemy=upgrade_sqlalchemy,
         use_airflow_version=use_airflow_version,
         use_distributions_from_dist=use_distributions_from_dist,
         use_uv=use_uv,
@@ -814,194 +814,6 @@ def build_docs(
     sys.exit(result.returncode)
 
 
-@main.command(
-    name="static-checks",
-    help="Run static checks.",
-    context_settings=dict(
-        ignore_unknown_options=True,
-        allow_extra_args=True,
-    ),
-)
-@click.option(
-    "-t",
-    "--type",
-    "type_",
-    help="Type(s) of the static checks to run.",
-    type=BetterChoice(PRE_COMMIT_LIST),
-)
-@click.option("-a", "--all-files", help="Run checks on all files.", is_flag=True)
-@click.option("-f", "--file", help="List of files to run the checks on.", type=click.Path(), multiple=True)
-@click.option(
-    "-s", "--show-diff-on-failure", help="Show diff for files modified by the checks.", is_flag=True
-)
-@click.option(
-    "-c",
-    "--last-commit",
-    help="Run checks for all files in last commit. Mutually exclusive with --commit-ref.",
-    is_flag=True,
-)
-@click.option(
-    "-m",
-    "--only-my-changes",
-    help="Run checks for commits belonging to my PR only: for all commits between merge base to `main` "
-    "branch and HEAD of your branch.",
-    is_flag=True,
-)
-@click.option(
-    "-r",
-    "--commit-ref",
-    help="Run checks for this commit reference only "
-    "(can be any git commit-ish reference). "
-    "Mutually exclusive with --last-commit.",
-)
-@click.option(
-    "--initialize-environment",
-    help="Initialize environment before running checks.",
-    is_flag=True,
-)
-@click.option(
-    "--max-initialization-attempts",
-    help="Maximum number of attempts to initialize environment before giving up.",
-    show_default=True,
-    type=click.IntRange(1, 10),
-    default=3,
-)
-@option_builder
-@option_dry_run
-@option_force_build
-@option_github_repository
-@option_skip_image_upgrade_check
-@option_verbose
-@click.argument("precommit_args", nargs=-1, type=click.UNPROCESSED)
-def static_checks(
-    all_files: bool,
-    builder: str,
-    commit_ref: str,
-    file: Iterable[str],
-    force_build: bool,
-    github_repository: str,
-    initialize_environment: bool,
-    last_commit: bool,
-    max_initialization_attempts: int,
-    only_my_changes: bool,
-    precommit_args: tuple,
-    show_diff_on_failure: bool,
-    skip_image_upgrade_check: bool,
-    type_: str,
-):
-    assert_pre_commit_installed()
-    perform_environment_checks()
-    build_params = BuildCiParams(
-        builder=builder,
-        force_build=force_build,
-        github_repository=github_repository,
-        # for static checks we do not want to regenerate dependencies before pre-commits are run
-        # we want the pre-commit to do it for us (and detect the case the dependencies are updated)
-        skip_provider_dependencies_check=True,
-    )
-    if not skip_image_upgrade_check:
-        rebuild_or_pull_ci_image_if_needed(command_params=build_params)
-
-    if initialize_environment:
-        get_console().print("[info]Make sure that pre-commit is installed and environment initialized[/]")
-        get_console().print(
-            f"[info]Trying to install the environments up to {max_initialization_attempts} "
-            f"times in case of flakiness[/]"
-        )
-        return_code = 0
-        for attempt in range(1, 1 + max_initialization_attempts):
-            get_console().print(f"[info]Attempt number {attempt} to install pre-commit environments")
-            initialization_result = run_command(
-                ["pre-commit", "install", "--install-hooks"],
-                check=False,
-                no_output_dump_on_exception=True,
-                text=True,
-            )
-            if initialization_result.returncode == 0:
-                break
-            get_console().print(f"[warning]Attempt number {attempt} failed - retrying[/]")
-            return_code = initialization_result.returncode
-        else:
-            get_console().print("[error]Could not install pre-commit environments[/]")
-            sys.exit(return_code)
-
-    command_to_execute = ["pre-commit", "run"]
-    if not one_or_none_set([last_commit, commit_ref, only_my_changes, all_files]):
-        get_console().print(
-            "\n[error]You can only specify "
-            "one of --last-commit, --commit-ref, --only-my-changes, --all-files[/]\n"
-        )
-        sys.exit(1)
-    if type_:
-        command_to_execute.append(type_)
-    if only_my_changes:
-        merge_base = run_command(
-            ["git", "merge-base", "HEAD", "main"], capture_output=True, check=False, text=True
-        ).stdout.strip()
-        if not merge_base:
-            get_console().print(
-                "\n[warning]Could not find merge base between HEAD and main. Running check for all files\n"
-            )
-            all_files = True
-        else:
-            get_console().print(
-                f"\n[info]Running checks for files changed in the current branch: {merge_base}..HEAD\n"
-            )
-            command_to_execute.extend(["--from-ref", merge_base, "--to-ref", "HEAD"])
-    if all_files:
-        command_to_execute.append("--all-files")
-    if show_diff_on_failure:
-        command_to_execute.append("--show-diff-on-failure")
-    if last_commit:
-        get_console().print("\n[info]Running checks for last commit in the current branch: HEAD^..HEAD\n")
-        command_to_execute.extend(["--from-ref", "HEAD^", "--to-ref", "HEAD"])
-    if commit_ref:
-        get_console().print(f"\n[info]Running checks for selected commit: {commit_ref}\n")
-        command_to_execute.extend(["--from-ref", f"{commit_ref}^", "--to-ref", f"{commit_ref}"])
-    if get_verbose() or get_dry_run():
-        command_to_execute.append("--verbose")
-    if file:
-        command_to_execute.append("--files")
-        command_to_execute.extend(file)
-    if precommit_args:
-        command_to_execute.extend(precommit_args)
-    skip_checks = os.environ.get("SKIP")
-    if skip_checks and skip_checks != "identity":
-        get_console().print("\nThis static check run skips those checks:\n")
-        get_console().print(skip_checks.split(","))
-        get_console().print()
-    env = os.environ.copy()
-    env["GITHUB_REPOSITORY"] = github_repository
-    env["VERBOSE"] = str(get_verbose()).lower()
-    static_checks_result = run_command(
-        command_to_execute,
-        check=False,
-        no_output_dump_on_exception=True,
-        text=True,
-        env=env,
-    )
-    if not os.environ.get("SKIP_BREEZE_PRE_COMMITS"):
-        fix_ownership_using_docker()
-    if static_checks_result.returncode != 0:
-        if os.environ.get("CI"):
-            get_console().print("\n[error]This error means that you have to fix the issues listed above:[/]")
-            get_console().print("\n[info]Some of the problems might be fixed automatically via pre-commit[/]")
-            get_console().print(
-                "\n[info]You can run it locally with: `pre-commit run --all-files` "
-                "but it might take quite some time.[/]"
-            )
-            get_console().print(
-                "\n[info]If you use breeze you can also run it faster via: "
-                "`breeze static-checks --only-my-changes` but it might produce slightly "
-                "different results.[/]"
-            )
-            get_console().print(
-                "\n[info]To run `pre-commit` as part of git workflow, use "
-                "`pre-commit install`. This will make pre-commit run as you commit changes[/]\n"
-            )
-    sys.exit(static_checks_result.returncode)
-
-
 @main.command(
     name="compile-ui-assets",
     help="Compiles ui assets.",
@@ -1021,7 +833,7 @@ def static_checks(
 @option_dry_run
 def compile_ui_assets(dev: bool, force_clean: bool):
     perform_environment_checks()
-    assert_pre_commit_installed()
+    assert_prek_installed()
     compile_ui_assets_result = run_compile_ui_assets(
         dev=dev, run_in_background=False, force_clean=force_clean
     )
diff --git a/dev/breeze/src/airflow_breeze/commands/developer_commands_config.py b/dev/breeze/src/airflow_breeze/commands/developer_commands_config.py
index 27f76ef8234..67ed4a81504 100644
--- a/dev/breeze/src/airflow_breeze/commands/developer_commands_config.py
+++ b/dev/breeze/src/airflow_breeze/commands/developer_commands_config.py
@@ -20,7 +20,6 @@ DEVELOPER_COMMANDS: dict[str, str | list[str]] = {
     "name": "Developer commands",
     "commands": [
         "start-airflow",
-        "static-checks",
         "build-docs",
         "down",
         "shell",
@@ -171,6 +170,7 @@ DEVELOPER_PARAMETERS: dict[str, list[dict[str, str | list[str]]]] = {
             "name": "Upgrading/downgrading/removing selected packages",
             "options": [
                 "--upgrade-boto",
+                "--upgrade-sqlalchemy",
                 "--downgrade-sqlalchemy",
                 "--downgrade-pendulum",
             ],
@@ -375,36 +375,6 @@ DEVELOPER_PARAMETERS: dict[str, list[dict[str, str | list[str]]]] = {
             ],
         },
     ],
-    "breeze static-checks": [
-        {
-            "name": "Pre-commit flags",
-            "options": [
-                "--type",
-                "--show-diff-on-failure",
-                "--initialize-environment",
-                "--max-initialization-attempts",
-            ],
-        },
-        {
-            "name": "Selecting files to run the checks on",
-            "options": [
-                "--file",
-                "--all-files",
-                "--commit-ref",
-                "--last-commit",
-                "--only-my-changes",
-            ],
-        },
-        {
-            "name": "Building image before running checks",
-            "options": [
-                "--skip-image-upgrade-check",
-                "--force-build",
-                "--github-repository",
-                "--builder",
-            ],
-        },
-    ],
     "breeze cleanup": [
         {
             "name": "Cleanup flags",
diff --git a/dev/breeze/src/airflow_breeze/commands/kubernetes_commands.py b/dev/breeze/src/airflow_breeze/commands/kubernetes_commands.py
index db1fe8873c8..d8c68cb03d7 100644
--- a/dev/breeze/src/airflow_breeze/commands/kubernetes_commands.py
+++ b/dev/breeze/src/airflow_breeze/commands/kubernetes_commands.py
@@ -361,7 +361,7 @@ def create_cluster(
                 ]
         check_async_run_results(
             results=results,
-            success="All clusters created.",
+            success_message="All clusters created.",
             outputs=outputs,
             skip_cleanup=skip_cleanup,
             include_success_outputs=include_success_outputs,
@@ -699,7 +699,7 @@ def build_k8s_image(
                 ]
         check_async_run_results(
             results=results,
-            success="All K8S images built correctly.",
+            success_message="All K8S images built correctly.",
             outputs=outputs,
             skip_cleanup=skip_cleanup,
             include_success_outputs=include_success_outputs,
@@ -776,7 +776,7 @@ def upload_k8s_image(
                 ]
         check_async_run_results(
             results=results,
-            success="All K8S images uploaded correctly.",
+            success_message="All K8S images uploaded correctly.",
             outputs=outputs,
             skip_cleanup=skip_cleanup,
             include_success_outputs=include_success_outputs,
@@ -961,7 +961,7 @@ def configure_cluster(
                 ]
         check_async_run_results(
             results=results,
-            success="All clusters configured correctly.",
+            success_message="All clusters configured correctly.",
             outputs=outputs,
             skip_cleanup=skip_cleanup,
             include_success_outputs=include_success_outputs,
@@ -995,6 +995,8 @@ def _deploy_helm_chart(
     extra_options: tuple[str, ...] | None = None,
     multi_namespace_mode: bool = False,
 ) -> RunCommandResult:
+    from packaging.version import Version
+
     cluster_name = get_kubectl_cluster_name(python=python, kubernetes_version=kubernetes_version)
     _, api_server_port = get_kubernetes_port_numbers(python=python, kubernetes_version=kubernetes_version)
     action = "Deploying" if not upgrade else "Upgrading"
@@ -1005,6 +1007,12 @@ def _deploy_helm_chart(
         get_console(output=output).print(f"[info]Copied chart sources to {tmp_chart_path}")
         kubectl_context = get_kubectl_cluster_name(python=python, kubernetes_version=kubernetes_version)
         params = BuildProdParams(python=python)
+        # TODO (potiuk): we can also run on matrix of auth managers if we make SimpleAuthManager prod-ready ?
+        use_flask_appbuilder = Version(python) < Version("3.13")
+        if use_flask_appbuilder:
+            auth_manager = "airflow.providers.fab.auth_manager.fab_auth_manager.FabAuthManager"
+        else:
+            auth_manager = "airflow.api_fastapi.auth.managers.simple.simple_auth_manager.SimpleAuthManager"
         helm_command = [
             "helm",
             "upgrade" if upgrade else "install",
@@ -1037,12 +1045,14 @@ def _deploy_helm_chart(
             "--set",
             "config.api_auth.jwt_secret=foo",
             "--set",
-            "config.core.auth_manager=airflow.providers.fab.auth_manager.fab_auth_manager.FabAuthManager",
+            f"config.core.auth_manager={auth_manager}",
             "--set",
             f"config.api.base_url=http://localhost:{api_server_port}",
         ]
         if multi_namespace_mode:
             helm_command.extend(["--set", "multiNamespaceMode=true"])
+        if not use_flask_appbuilder:
+            helm_command.extend(["--set", "webserver.defaultUser.enabled=false"])
         if upgrade:
             # force upgrade
             helm_command.append("--force")
@@ -1218,7 +1228,7 @@ def deploy_airflow(
                 ]
         check_async_run_results(
             results=results,
-            success="All Airflow charts successfully deployed.",
+            success_message="All Airflow charts successfully deployed.",
             outputs=outputs,
             skip_cleanup=skip_cleanup,
             include_success_outputs=include_success_outputs,
@@ -1560,7 +1570,7 @@ def kubernetes_tests_command(
                 ]
         check_async_run_results(
             results=results,
-            success="All K8S tests successfully completed.",
+            success_message="All K8S tests successfully completed.",
             outputs=outputs,
             include_success_outputs=include_success_outputs,
             skip_cleanup=skip_cleanup,
@@ -1812,7 +1822,7 @@ def run_complete_tests(
                 ]
         check_async_run_results(
             results=results,
-            success="All K8S tests successfully completed.",
+            success_message="All K8S tests successfully completed.",
             outputs=outputs,
             include_success_outputs=include_success_outputs,
             skip_cleanup=skip_cleanup,
diff --git a/dev/breeze/src/airflow_breeze/commands/main_command.py b/dev/breeze/src/airflow_breeze/commands/main_command.py
index 7409f070fd0..1b10f91d00c 100644
--- a/dev/breeze/src/airflow_breeze/commands/main_command.py
+++ b/dev/breeze/src/airflow_breeze/commands/main_command.py
@@ -22,7 +22,6 @@ import subprocess
 import sys
 from typing import TYPE_CHECKING, Any
 
-from airflow_breeze.commands.ci_image_commands import ci_image
 from airflow_breeze.commands.common_options import (
     option_all_integration,
     option_answer,
@@ -44,8 +43,6 @@ from airflow_breeze.commands.common_options import (
     option_uv_http_timeout,
     option_verbose,
 )
-from airflow_breeze.commands.production_image_commands import prod_image
-from airflow_breeze.commands.testing_commands import group_for_testing
 from airflow_breeze.configure_rich_click import click
 from airflow_breeze.global_constants import generate_provider_dependencies_if_needed
 from airflow_breeze.utils.click_utils import BreezeGroup
@@ -61,43 +58,39 @@ if TYPE_CHECKING:
 
 
 def print_deprecated(deprecated_command: str, command_to_use: str):
-    get_console().print("[yellow]" + ("#" * 80) + "\n")
-    get_console().print(f"[yellow]The command '{deprecated_command}' is deprecated!\n")
+    get_console().print("\n[warning]" + ("#" * 80) + "\n")
+    get_console().print(f"[warning]The command '{deprecated_command}' is deprecated!\n")
     get_console().print(f"Use 'breeze {command_to_use}' instead\n")
-    get_console().print("[yellow]" + ("#" * 80) + "\n")
+    get_console().print("[warning]" + ("#" * 80) + "\n")
+
+
+def print_removed(deprecated_command: str, non_breeze_command_to_use: str, installation_notes: str | None):
+    get_console().print("\n[warning]" + ("#" * 80) + "\n")
+    get_console().print(f"[warning]The command '{deprecated_command}' is removed!\n")
+    get_console().print(f"Use '{non_breeze_command_to_use}' instead.\n")
+    if installation_notes:
+        get_console().print(installation_notes)
+    get_console().print("[warning]" + ("#" * 80) + "\n")
 
 
 class MainGroupWithAliases(BreezeGroup):
     def get_command(self, ctx: Context, cmd_name: str):
         # Aliases for important commands moved to sub-commands or deprecated commands
-        from airflow_breeze.commands.setup_commands import setup
-
-        if cmd_name == "stop":
-            print_deprecated("stop", "down")
-            cmd_name = "down"
-
         rv = click.Group.get_command(self, ctx, cmd_name)
         if rv is not None:
             return rv
-        if cmd_name == "build-image":
-            print_deprecated("build-image", "ci-image build")
-            return ci_image.get_command(ctx, "build")
-        if cmd_name == "build-prod-image":
-            print_deprecated("build-prod-image", "prod-image build")
-            return prod_image.get_command(ctx, "build")
-        if cmd_name == "tests":
-            print_deprecated("tests", "testing tests")
-            return group_for_testing.get_command(ctx, "tests")
-        if cmd_name == "config":
-            print_deprecated("config", "setup config")
-            return setup.get_command(ctx, "config")
-        if cmd_name == "setup-autocomplete":
-            print_deprecated("setup-autocomplete", "setup autocomplete")
-            return setup.get_command(ctx, "autocomplete")
-        if cmd_name == "version":
+        if cmd_name == "static-checks":
             # version alias does not need to be deprecated. It's ok to keep it also at top level
             # even if it is not displayed in help
-            return setup.get_command(ctx, "version")
+            print_removed(
+                "static-checks",
+                "prek",
+                "\nYou can install prek with:\n"
+                "\n[special]uv tool install prek[/]\n\n"
+                "Followed by (in airflow repo):\n\n"
+                "[special]prek install -f[/]\n",
+            )
+            sys.exit(1)
         return None
 
 
diff --git a/dev/breeze/src/airflow_breeze/commands/production_image_commands.py b/dev/breeze/src/airflow_breeze/commands/production_image_commands.py
index def38c0b84d..9aee7a0fa70 100644
--- a/dev/breeze/src/airflow_breeze/commands/production_image_commands.py
+++ b/dev/breeze/src/airflow_breeze/commands/production_image_commands.py
@@ -145,7 +145,7 @@ def run_build_in_parallel(
             ]
     check_async_run_results(
         results=results,
-        success="All images built correctly",
+        success_message="All images built correctly",
         outputs=outputs,
         include_success_outputs=include_success_outputs,
         skip_cleanup=skip_cleanup,
@@ -527,7 +527,7 @@ def run_verify_in_parallel(
             ]
     check_async_run_results(
         results=results,
-        success="All images verified",
+        success_message="All images verified",
         outputs=outputs,
         include_success_outputs=include_success_outputs,
         skip_cleanup=skip_cleanup,
@@ -701,7 +701,7 @@ def load(
     from_run: str | None,
     from_pr: str | None,
     github_repository: str,
-    github_token: str,
+    github_token: str | None,
     image_file: Path | None,
     image_file_dir: Path,
     platform: str,
@@ -712,6 +712,13 @@ def load(
     perform_environment_checks()
     escaped_platform = platform.replace("/", "_")
 
+    if from_run or from_pr and not github_token:
+        get_console().print(
+            "[error]The parameter `--github-token` must be provided if `--from-run` or `--from-pr` is "
+            "provided. Exiting.[/]"
+        )
+        sys.exit(1)
+
     if not image_file:
         image_file_to_load = image_file_dir / f"prod-image-save-{escaped_platform}-{python}.tar"
     elif image_file.is_absolute() or image_file.exists():
diff --git a/dev/breeze/src/airflow_breeze/commands/production_image_commands_config.py b/dev/breeze/src/airflow_breeze/commands/production_image_commands_config.py
index 977484f76e0..1738254250d 100644
--- a/dev/breeze/src/airflow_breeze/commands/production_image_commands_config.py
+++ b/dev/breeze/src/airflow_breeze/commands/production_image_commands_config.py
@@ -112,7 +112,7 @@ PRODUCTION_IMAGE_TOOLS_PARAMETERS: dict[str, list[dict[str, str | list[str]]]] =
             ],
         },
         {
-            "name": "Github authentication",
+            "name": "GitHub authentication",
             "options": [
                 "--github-repository",
                 "--github-token",
@@ -140,7 +140,7 @@ PRODUCTION_IMAGE_TOOLS_PARAMETERS: dict[str, list[dict[str, str | list[str]]]] =
             ],
         },
         {
-            "name": "Github authentication",
+            "name": "GitHub authentication",
             "options": [
                 "--github-repository",
                 "--github-token",
@@ -170,7 +170,7 @@ PRODUCTION_IMAGE_TOOLS_PARAMETERS: dict[str, list[dict[str, str | list[str]]]] =
             ],
         },
         {
-            "name": "Github authentication",
+            "name": "GitHub authentication",
             "options": [
                 "--github-repository",
                 "--github-token",
diff --git a/dev/breeze/src/airflow_breeze/commands/release_command.py b/dev/breeze/src/airflow_breeze/commands/release_command.py
index 5d8d45938c3..4fe371c2e7a 100644
--- a/dev/breeze/src/airflow_breeze/commands/release_command.py
+++ b/dev/breeze/src/airflow_breeze/commands/release_command.py
@@ -128,7 +128,7 @@ def retag_constraints(release_candidate, version):
             ],
             check=True,
         )
-    if confirm_action(f"Push contraints-{version} tag to GitHub?"):
+    if confirm_action(f"Push constraints-{version} tag to GitHub?"):
         run_command(
             ["git", "push", "origin", "tag", f"constraints-{version}"],
             check=True,
diff --git a/dev/breeze/src/airflow_breeze/commands/release_management_commands.py b/dev/breeze/src/airflow_breeze/commands/release_management_commands.py
index 62570a525ad..a2e04699fe9 100644
--- a/dev/breeze/src/airflow_breeze/commands/release_management_commands.py
+++ b/dev/breeze/src/airflow_breeze/commands/release_management_commands.py
@@ -93,14 +93,13 @@ from airflow_breeze.global_constants import (
     ALLOWED_DEBIAN_VERSIONS,
     ALLOWED_DISTRIBUTION_FORMATS,
     ALLOWED_PLATFORMS,
-    ALLOWED_PYTHON_MAJOR_MINOR_VERSIONS,
     APACHE_AIRFLOW_GITHUB_REPOSITORY,
-    CONSTRAINTS_SOURCE_PROVIDERS,
+    CONSTRAINTS,
     CURRENT_PYTHON_MAJOR_MINOR_VERSIONS,
     DEFAULT_PYTHON_MAJOR_MINOR_VERSION,
+    DEFAULT_PYTHON_MAJOR_MINOR_VERSION_FOR_IMAGES,
     DESTINATION_LOCATIONS,
     MULTI_PLATFORM,
-    PYTHON_TO_MIN_AIRFLOW_MAPPING,
     UV_VERSION,
 )
 from airflow_breeze.params.build_ci_params import BuildCiParams
@@ -133,7 +132,6 @@ from airflow_breeze.utils.docker_command_utils import (
     fix_ownership_using_docker,
     perform_environment_checks,
 )
-from airflow_breeze.utils.github import download_constraints_file, get_active_airflow_versions
 from airflow_breeze.utils.packages import (
     PackageSuspendedException,
     apply_version_suffix_to_non_provider_pyproject_tomls,
@@ -159,7 +157,6 @@ from airflow_breeze.utils.path_utils import (
     AIRFLOW_CTL_SOURCES_PATH,
     AIRFLOW_DIST_PATH,
     AIRFLOW_ROOT_PATH,
-    CONSTRAINTS_CACHE_PATH,
     OUT_PATH,
     PROVIDER_METADATA_JSON_PATH,
     TASK_SDK_DIST_PATH,
@@ -169,8 +166,10 @@ from airflow_breeze.utils.path_utils import (
 )
 from airflow_breeze.utils.provider_dependencies import (
     DEPENDENCIES,
-    generate_providers_metadata_for_package,
+    generate_providers_metadata_for_provider,
+    get_all_constraint_files_and_airflow_releases,
     get_related_providers,
+    load_constraints,
 )
 from airflow_breeze.utils.python_versions import get_python_version_list
 from airflow_breeze.utils.reproducible import get_source_date_epoch, repack_deterministically
@@ -246,17 +245,15 @@ class VersionedFile(NamedTuple):
 
 
 AIRFLOW_PIP_VERSION = "25.2"
-AIRFLOW_UV_VERSION = "0.8.8"
+AIRFLOW_UV_VERSION = "0.8.11"
 AIRFLOW_USE_UV = False
 GITPYTHON_VERSION = "3.1.45"
 RICH_VERSION = "14.1.0"
-PRE_COMMIT_VERSION = "4.3.0"
-PRE_COMMIT_UV_VERSION = "4.1.4"
+PREK_VERSION = "0.0.26"
 HATCH_VERSION = "1.14.1"
 PYYAML_VERSION = "6.0.2"
 
-# no need for pre-commit-uv. Those commands will only ever initialize the compile-www-assets
-# pre-commit environment and this is done with node, no python installation is needed.
+# prek environment and this is done with node, no python installation is needed.
 AIRFLOW_BUILD_DOCKERFILE = f"""
 # syntax=docker/dockerfile:1.4
 FROM python:{DEFAULT_PYTHON_MAJOR_MINOR_VERSION}-slim-{ALLOWED_DEBIAN_VERSIONS[0]}
@@ -265,7 +262,7 @@ RUN pip install uv=={UV_VERSION}
 RUN --mount=type=cache,id=cache-airflow-build-dockerfile-installation,target=/root/.cache/ \
   uv pip install --system ignore pip=={AIRFLOW_PIP_VERSION} hatch=={HATCH_VERSION} \
   pyyaml=={PYYAML_VERSION} gitpython=={GITPYTHON_VERSION} rich=={RICH_VERSION} \
-  pre-commit=={PRE_COMMIT_VERSION} pre-commit-uv=={PRE_COMMIT_UV_VERSION}
+  prek=={PREK_VERSION}
 COPY . /opt/airflow
 """
 
@@ -357,7 +354,7 @@ def _build_local_build_image():
     AIRFLOW_BUILD_DOCKERFILE_DOCKERIGNORE_PATH.unlink(missing_ok=True)
     dockerignore_content = AIRFLOW_DOCKERIGNORE_PATH.read_text()
     dockerignore_content = dockerignore_content + textwrap.dedent("""
-        # Include git in the build context - we need to get git version and pre-commit configuration
+        # Include git in the build context - we need to get git version and prek configuration
         # And clients python code to be included in the context
         !.git
         !.pre-commit-config.yaml
@@ -796,12 +793,12 @@ def provider_action_summary(description: str, message_type: MessageType, package
 @click.option(
     "--skip-changelog",
     is_flag=True,
-    help="Skip changelog generation. This is used in pre-commit that updates build-files only.",
+    help="Skip changelog generation. This is used in prek that updates build-files only.",
 )
 @click.option(
     "--skip-readme",
     is_flag=True,
-    help="Skip readme generation. This is used in pre-commit that updates build-files only.",
+    help="Skip readme generation. This is used in prek that updates build-files only.",
 )
 @option_verbose
 def prepare_provider_documentation(
@@ -1202,7 +1199,7 @@ def run_generate_constraints_in_parallel(
             ]
     check_async_run_results(
         results=results,
-        success="All constraints are generated.",
+        success_message="All constraints are generated.",
         outputs=outputs,
         include_success_outputs=include_success_outputs,
         skip_cleanup=skip_cleanup,
@@ -1273,7 +1270,7 @@ def tag_providers(
             if push_result.returncode == 0:
                 get_console().print("\n[success]Tags pushed successfully.[/]")
         except subprocess.CalledProcessError:
-            get_console().print("\n[error]Failed to push tags, probably a connectivity issue to Github.[/]")
+            get_console().print("\n[error]Failed to push tags, probably a connectivity issue to GitHub.[/]")
             if clean_local_tags:
                 for tag in tags:
                     with contextlib.suppress(subprocess.CalledProcessError):
@@ -1580,7 +1577,7 @@ def install_provider_distributions(
                 ]
         check_async_run_results(
             results=results,
-            success="All packages installed successfully",
+            success_message="All packages installed successfully",
             outputs=outputs,
             include_success_outputs=include_success_outputs,
             skip_cleanup=skip_cleanup,
@@ -2003,7 +2000,7 @@ def alias_images(
     get_console().print("[info]Aliasing images with links to the newly created images.[/]")
     for python in python_versions:
         # Always alias the last python version to point to the non-python version
-        if python == ALLOWED_PYTHON_MAJOR_MINOR_VERSIONS[-1]:
+        if python == DEFAULT_PYTHON_MAJOR_MINOR_VERSION_FOR_IMAGES:
             get_console().print(
                 f"[info]Aliasing the {image_prefix}{airflow_version}-python{python} "
                 f"version with {image_prefix}{airflow_version}[/]"
@@ -2027,7 +2024,7 @@ def alias_images(
                     f"{dockerhub_repo}:{airflow_version}-python{python}",
                     f"{dockerhub_repo}:latest-python{python}",
                 )
-            if python == ALLOWED_PYTHON_MAJOR_MINOR_VERSIONS[-1]:
+            if python == DEFAULT_PYTHON_MAJOR_MINOR_VERSION_FOR_IMAGES:
                 alias_image(
                     f"{dockerhub_repo}:{image_prefix}{airflow_version}",
                     f"{dockerhub_repo}:{image_prefix}latest",
@@ -2196,7 +2193,7 @@ def release_prod_images(
         run_command(docker_buildx_command)
         if metadata_file:
             get_console().print(f"[green]Metadata file stored in {metadata_file}")
-        if python == ALLOWED_PYTHON_MAJOR_MINOR_VERSIONS[-1] and not metadata_file:
+        if python == DEFAULT_PYTHON_MAJOR_MINOR_VERSION_FOR_IMAGES and not metadata_file:
             get_console().print(
                 f"[info]Aliasing the latest {python} version to {image_prefix}{airflow_version}[/]"
             )
@@ -2397,12 +2394,20 @@ def create_github_issue_url(title: str, body: str, labels: Iterable[str]) -> str
     is_flag=True,
     help="Only consider package ids with packages prepared in the dist folder",
 )
+@click.option(
+    "--no-include-browser-link",
+    "include_browser_link",
+    flag_value=False,
+    default=True,
+    help="Do not include browser link to prefill GitHub issue",
+)
 @argument_provider_distributions
 def generate_issue_content_providers(
     disable_progress: bool,
     excluded_pr_list: str,
     github_token: str,
     only_available_in_dist: bool,
+    include_browser_link: bool,
     provider_distributions: list[str],
 ):
     import jinja2
@@ -2545,12 +2550,13 @@ def generate_issue_content_providers(
             body=issue_content,
             labels=["testing status", "kind:meta"],
         )
-        get_console().print()
-        get_console().print(
-            "[info]You can prefill the issue by copy&pasting this link to browser "
-            "(or Cmd+Click if your terminal supports it):\n"
-        )
-        print(url_to_create_the_issue)
+        if include_browser_link:
+            get_console().print()
+            get_console().print(
+                "[info]You can prefill the issue by copy&pasting this link to browser "
+                "(or Cmd+Click if your terminal supports it):\n"
+            )
+            print(url_to_create_the_issue)
 
 
 def get_git_log_command(
@@ -2787,98 +2793,72 @@ def generate_issue_content_core(
     )
 
 
-def is_airflow_version_supported_for_python(airflow_version: str, python_version: str) -> bool:
-    from packaging.version import Version
-
-    min_airflow_version = PYTHON_TO_MIN_AIRFLOW_MAPPING.get(python_version)
-    if not min_airflow_version:
-        return False
-    return Version(airflow_version) >= Version(min_airflow_version)
-
-
-def get_airflow_versions_supported_by_python(
-    all_airflow_versions: list[str], python_version: str
-) -> list[str]:
-    return [v for v in all_airflow_versions if is_airflow_version_supported_for_python(v, python_version)]
-
-
-def get_all_constraint_files(
-    refresh_constraints: bool,
-    python_version: str,
-    airflow_constraints_mode: str,
-    github_token: str | None = None,
-) -> tuple[list[str], dict[str, str]]:
-    if refresh_constraints:
-        shutil.rmtree(CONSTRAINTS_CACHE_PATH, ignore_errors=True)
-    all_airflow_versions, airflow_release_dates = get_active_airflow_versions(confirm=False)
-
-    get_console().print(
-        f"[info]Filtering to only use airflow versions supported by current python version: {python_version}[/]"
-    )
-
-    all_airflow_versions = get_airflow_versions_supported_by_python(all_airflow_versions, python_version)
-
-    if not CONSTRAINTS_CACHE_PATH.exists():
-        with ci_group(f"Downloading constraints for all Airflow versions for Python {python_version}"):
-            CONSTRAINTS_CACHE_PATH.mkdir(parents=True, exist_ok=True)
-            for airflow_version in all_airflow_versions:
-                if not download_constraints_file(
-                    constraints_reference=f"constraints-{airflow_version}",
-                    python_version=python_version,
-                    github_token=github_token,
-                    airflow_constraints_mode=airflow_constraints_mode,
-                    output_file=CONSTRAINTS_CACHE_PATH
-                    / f"constraints-{airflow_version}-python-{python_version}.txt",
-                ):
-                    get_console().print(
-                        "[warning]Could not download constraints for "
-                        f"Airflow {airflow_version} and Python {python_version}[/]"
-                    )
-    return all_airflow_versions, airflow_release_dates
-
-
-MATCH_CONSTRAINTS_FILE_REGEX = re.compile(r"constraints-(.*)-python-(.*).txt")
-
-
-def load_constraints(python_version: str) -> dict[str, dict[str, str]]:
-    constraints: dict[str, dict[str, str]] = {}
-    for filename in sorted(CONSTRAINTS_CACHE_PATH.glob(f"constraints-*-python-{python_version}.txt")):
-        filename_match = MATCH_CONSTRAINTS_FILE_REGEX.match(filename.name)
-        if filename_match:
-            airflow_version = filename_match.group(1)
-            constraints[airflow_version] = {}
-            for line in filename.read_text().splitlines():
-                if line and not line.startswith("#"):
-                    package, version = line.split("==")
-                    constraints[airflow_version][package] = version
-    return constraints
-
-
 @release_management.command(name="generate-providers-metadata", help="Generates metadata for providers.")
 @click.option(
-    "--refresh-constraints",
+    "--refresh-constraints-and-airflow-releases",
     is_flag=True,
-    help="Refresh constraints before generating metadata",
+    envvar="REFRESH_CONSTRAINTS_AND_AIRFLOW_RELEASES",
+    help="Refresh constraints and airflow_releases before generating metadata",
+)
+@click.option(
+    "--provider-id",
+    type=BetterChoice(get_available_distributions(include_removed=True, include_suspended=True)),
+    envvar="PROVIDER_ID",
+    help="Provider_id to generate metadata for. If not specified, metadata for all packages will be generated. "
+    "This is debug-only option. When this option is specified, the metadata produced for "
+    "the distribution will not be written to the file, but printed via console.",
+)
+@click.option(
+    "--provider-version",
+    type=str,
+    envvar="PROVIDER_VERSION",
+    help="Provider version to generate metadata for. Only used when --provider-id is specified. Limits running "
+    "metadata generation to only this version of the provider.",
 )
 @option_github_token
 @option_dry_run
 @option_verbose
-def generate_providers_metadata(refresh_constraints: bool, github_token: str | None):
+def generate_providers_metadata(
+    refresh_constraints_and_airflow_releases: bool,
+    provider_id: str | None,
+    provider_version: str | None,
+    github_token: str | None,
+):
+    import json
+
+    if PROVIDER_METADATA_JSON_PATH.exists():
+        current_metadata = json.loads(PROVIDER_METADATA_JSON_PATH.read_text())
+    else:
+        current_metadata = {}
     metadata_dict: dict[str, dict[str, dict[str, str]]] = {}
-    python = DEFAULT_PYTHON_MAJOR_MINOR_VERSION
-    all_airflow_releases, airflow_release_dates = get_all_constraint_files(
-        refresh_constraints=refresh_constraints,
-        python_version=python,
-        airflow_constraints_mode=CONSTRAINTS_SOURCE_PROVIDERS,
+    all_airflow_releases, airflow_release_dates = get_all_constraint_files_and_airflow_releases(
+        refresh_constraints_and_airflow_releases=refresh_constraints_and_airflow_releases,
+        airflow_constraints_mode=CONSTRAINTS,
         github_token=github_token,
     )
-    constraints = load_constraints(python_version=python)
+    constraints = load_constraints()
+    if provider_id:
+        get_console().print(f"[info]Generating metadata for provider {provider_id} only (for debugging)[/]")
+        result = generate_providers_metadata_for_provider(
+            provider_id,
+            provider_version=provider_version,
+            constraints=constraints,
+            all_airflow_releases=all_airflow_releases,
+            airflow_release_dates=airflow_release_dates,
+            current_metadata=current_metadata,
+        )
+        if result:
+            metadata_dict[provider_id] = result
+        get_console().print(metadata_dict)
+        return
 
     partial_generate_providers_metadata = partial(
-        generate_providers_metadata_for_package,
+        generate_providers_metadata_for_provider,
+        provider_version=None,
         constraints=constraints,
         all_airflow_releases=all_airflow_releases,
         airflow_release_dates=airflow_release_dates,
+        current_metadata=current_metadata,
     )
     package_ids = DEPENDENCIES.keys()
     with Pool() as pool:
@@ -2889,7 +2869,6 @@ def generate_providers_metadata(refresh_constraints: bool, github_token: str | N
     for package_id, result in zip(package_ids, results):
         if result:
             metadata_dict[package_id] = result
-    import json
 
     PROVIDER_METADATA_JSON_PATH.write_text(json.dumps(metadata_dict, indent=4) + "\n")
 
@@ -3157,8 +3136,8 @@ def _get_python_client_version(version_suffix):
     version = Version(python_client_version)
     if version_suffix:
         if version.pre:
-            currrent_suffix = version.pre[0] + str(version.pre[1])
-            if currrent_suffix != version_suffix:
+            current_suffix = version.pre[0] + str(version.pre[1])
+            if current_suffix != version_suffix:
                 get_console().print(
                     f"[error]The version suffix for PyPI ({version_suffix}) does not match the "
                     f"suffix in the version ({version})[/]"
diff --git a/dev/breeze/src/airflow_breeze/commands/release_management_commands_config.py b/dev/breeze/src/airflow_breeze/commands/release_management_commands_config.py
index 14e331a3271..62b41b30763 100644
--- a/dev/breeze/src/airflow_breeze/commands/release_management_commands_config.py
+++ b/dev/breeze/src/airflow_breeze/commands/release_management_commands_config.py
@@ -395,6 +395,7 @@ RELEASE_MANAGEMENT_PARAMETERS: dict[str, list[dict[str, str | list[str]]]] = {
                 "--excluded-pr-list",
                 "--github-token",
                 "--only-available-in-dist",
+                "--no-include-browser-link",
             ],
         }
     ],
@@ -407,8 +408,12 @@ RELEASE_MANAGEMENT_PARAMETERS: dict[str, list[dict[str, str | list[str]]]] = {
     "breeze release-management generate-providers-metadata": [
         {
             "name": "Generate providers metadata flags",
-            "options": ["--refresh-constraints", "--github-token"],
-        }
+            "options": ["--refresh-constraints-and-airflow-releases", "--github-token"],
+        },
+        {
+            "name": "Debug options",
+            "options": ["--provider-id", "--provider-version"],
+        },
     ],
     "breeze release-management start-rc-process": [
         {
diff --git a/dev/breeze/src/airflow_breeze/commands/sbom_commands.py b/dev/breeze/src/airflow_breeze/commands/sbom_commands.py
index 1c0a7670802..449c1b318fe 100644
--- a/dev/breeze/src/airflow_breeze/commands/sbom_commands.py
+++ b/dev/breeze/src/airflow_breeze/commands/sbom_commands.py
@@ -417,7 +417,7 @@ def update_sbom_information(
                 ]
         check_async_run_results(
             results=results,
-            success="All SBOMs were generated successfully",
+            success_message="All SBOMs were generated successfully",
             outputs=outputs,
             include_success_outputs=include_success_outputs,
             skip_cleanup=skip_cleanup,
@@ -601,7 +601,7 @@ def build_all_airflow_images(
                 ]
         check_async_run_results(
             results=results,
-            success="All airflow base images were built successfully",
+            success_message="All airflow base images were built successfully",
             outputs=outputs,
             include_success_outputs=include_success_outputs,
             skip_cleanup=skip_cleanup,
@@ -750,7 +750,7 @@ def generate_providers_requirements(
                 ]
         check_async_run_results(
             results=results,
-            success="Providers requirements were generated successfully",
+            success_message="Providers requirements were generated successfully",
             outputs=outputs,
             include_success_outputs=include_success_outputs,
             skip_cleanup=skip_cleanup,
diff --git a/dev/breeze/src/airflow_breeze/commands/sbom_commands_config.py b/dev/breeze/src/airflow_breeze/commands/sbom_commands_config.py
index 401b7cb59c7..1a0ceda2620 100644
--- a/dev/breeze/src/airflow_breeze/commands/sbom_commands_config.py
+++ b/dev/breeze/src/airflow_breeze/commands/sbom_commands_config.py
@@ -109,7 +109,7 @@ SBOM_PARAMETERS: dict[str, list[dict[str, str | list[str]]]] = {
             ],
         },
         {
-            "name": "Github auth flags",
+            "name": "GitHub auth flags",
             "options": [
                 "--github-token",
             ],
diff --git a/dev/breeze/src/airflow_breeze/commands/setup_commands.py b/dev/breeze/src/airflow_breeze/commands/setup_commands.py
index f36952ae9bb..717f50843f7 100644
--- a/dev/breeze/src/airflow_breeze/commands/setup_commands.py
+++ b/dev/breeze/src/airflow_breeze/commands/setup_commands.py
@@ -237,7 +237,7 @@ def change_config(
             touch_cache_file(colour_file)
             get_console().print("[info]Disable Colour[/]")
 
-    def get_supress_status(file: str):
+    def get_suppress_status(file: str):
         return "disabled" if check_if_cache_exists(file) else "enabled"
 
     get_console().print()
@@ -249,10 +249,10 @@ def change_config(
     get_console().print(f"[info]* MySQL version: {mysql_version}[/]")
     get_console().print(f"[info]* Auth Manager: {auth_manager}[/]")
     get_console().print()
-    get_console().print(f"[info]* ASCIIART: {get_supress_status(asciiart_file)}[/]")
-    get_console().print(f"[info]* Cheatsheet: {get_supress_status(cheatsheet_file)}[/]")
+    get_console().print(f"[info]* ASCIIART: {get_suppress_status(asciiart_file)}[/]")
+    get_console().print(f"[info]* Cheatsheet: {get_suppress_status(cheatsheet_file)}[/]")
     get_console().print()
-    get_console().print(f"[info]* Colour: {get_supress_status(colour_file)}[/]")
+    get_console().print(f"[info]* Colour: {get_suppress_status(colour_file)}[/]")
     get_console().print()
 
 
diff --git a/dev/breeze/src/airflow_breeze/commands/testing_commands.py b/dev/breeze/src/airflow_breeze/commands/testing_commands.py
index 3efcb54353b..c32c730c4eb 100644
--- a/dev/breeze/src/airflow_breeze/commands/testing_commands.py
+++ b/dev/breeze/src/airflow_breeze/commands/testing_commands.py
@@ -20,7 +20,9 @@ import contextlib
 import os
 import signal
 import sys
+from collections.abc import Generator
 from datetime import datetime
+from multiprocessing.pool import Pool
 from time import sleep
 
 import click
@@ -57,6 +59,7 @@ from airflow_breeze.commands.common_options import (
     option_skip_cleanup,
     option_skip_db_tests,
     option_upgrade_boto,
+    option_upgrade_sqlalchemy,
     option_use_airflow_version,
     option_verbose,
 )
@@ -269,7 +272,10 @@ def _run_test(
 def _get_project_names(shell_params: ShellParams) -> tuple[str, str]:
     """Return compose project name and project name."""
     project_name = file_name_from_test_type(shell_params.test_type)
-    compose_project_name = f"airflow-test-{project_name}"
+    if shell_params.test_type == ALL_TEST_TYPE:
+        compose_project_name = "airflow-test"
+    else:
+        compose_project_name = f"airflow-test-{project_name}"
     return compose_project_name, project_name
 
 
@@ -282,16 +288,18 @@ def _dump_container_logs(output: Output | None, shell_params: ShellParams):
         text=True,
     )
     container_ids = ps_result.stdout.splitlines()
-    get_console(output=output).print("[info]Wait 10 seconds for logs to find their way to stderr.\n")
+    get_console(output=output).print("[warning]Wait 10 seconds for logs to find their way to stderr.\n")
     sleep(10)
     compose_project_name, project_name = _get_project_names(shell_params)
-    get_console(output=output).print(f"[info]Dumping containers: {container_ids} for {project_name}.\n")
+    get_console(output=output).print(
+        f"[warning]Dumping container logs: {container_ids} for compose project {compose_project_name} (cp.\n"
+    )
     date_str = datetime.now().strftime("%Y_%d_%m_%H_%M_%S")
     for container_id in container_ids:
         if compose_project_name not in container_id:
             continue
         dump_path = FILES_PATH / f"container_logs_{container_id}_{date_str}.log"
-        get_console(output=output).print(f"[info]Dumping container {container_id} to {dump_path}\n")
+        get_console(output=output).print(f"[info]Dumping container log {container_id} to {dump_path}\n")
         with open(dump_path, "w") as outfile:
             run_command(
                 ["docker", "logs", "--details", "--timestamps", container_id],
@@ -311,6 +319,7 @@ def _run_tests_in_pool(
     skip_docker_compose_down: bool,
     test_timeout: int,
     tests_to_run: list[str],
+    handler: TimeoutHandler,
 ):
     if not tests_to_run:
         return
@@ -348,6 +357,7 @@ def _run_tests_in_pool(
                 lines_to_search=400,
             ),
         ) as (pool, outputs):
+            handler.set_pool(pool)
             results = [
                 pool.apply_async(
                     _run_test,
@@ -365,12 +375,13 @@ def _run_tests_in_pool(
     escaped_tests = [test.replace("[", "\\[") for test in tests_to_run]
     check_async_run_results(
         results=results,
-        success=f"Tests {' '.join(escaped_tests)} completed successfully",
+        success_message=f"Tests {' '.join(escaped_tests)} completed successfully",
         outputs=outputs,
         include_success_outputs=include_success_outputs,
         skip_cleanup=skip_cleanup,
         summarize_on_ci=SummarizeAfter.FAILURE,
         summary_start_regexp=r".*= FAILURES.*|.*= ERRORS.*",
+        terminated_on_timeout=handler.terminated_on_timeout_output_list[0],
     )
 
 
@@ -394,6 +405,7 @@ def run_tests_in_parallel(
     parallelism: int,
     skip_cleanup: bool,
     skip_docker_compose_down: bool,
+    handler: TimeoutHandler,
 ) -> None:
     get_console().print("\n[info]Summary of the tests to run\n")
     get_console().print(f"[info]Running tests in parallel with parallelism={parallelism}")
@@ -416,6 +428,7 @@ def run_tests_in_parallel(
         debug_resources=debug_resources,
         skip_cleanup=skip_cleanup,
         skip_docker_compose_down=skip_docker_compose_down,
+        handler=handler,
     )
 
 
@@ -575,6 +588,12 @@ option_total_test_timeout = click.option(
     type=int,
     envvar="TOTAL_TEST_TIMEOUT",
 )
+option_skip_docker_compose_deletion = click.option(
+    "--skip-docker-compose-deletion",
+    help="Skip deletion of docker-compose instance after the test",
+    envvar="SKIP_DOCKER_COMPOSE_DELETION",
+    is_flag=True,
+)
 
 
 @group_for_testing.command(
@@ -620,6 +639,7 @@ option_total_test_timeout = click.option(
 @option_test_type_core_group
 @option_total_test_timeout
 @option_upgrade_boto
+@option_upgrade_sqlalchemy
 @option_use_airflow_version
 @option_allow_pre_releases
 @option_use_distributions_from_dist
@@ -685,6 +705,7 @@ def core_tests(**kwargs):
 @option_test_type_providers_group
 @option_total_test_timeout
 @option_upgrade_boto
+@option_upgrade_sqlalchemy
 @option_use_airflow_version
 @option_allow_pre_releases
 @option_use_distributions_from_dist
@@ -717,6 +738,7 @@ def providers_tests(**kwargs):
 @option_verbose
 @click.argument("extra_pytest_args", nargs=-1, type=click.Path(path_type=str))
 def task_sdk_tests(**kwargs):
+    """Run task SDK tests."""
     _run_test_command(
         test_group=GroupOfTests.TASK_SDK,
         allow_pre_releases=False,
@@ -748,12 +770,67 @@ def task_sdk_tests(**kwargs):
         test_type=ALL_TEST_TYPE,
         total_test_timeout=DEFAULT_TOTAL_TEST_TIMEOUT,
         upgrade_boto=False,
+        upgrade_sqlalchemy=False,
         use_airflow_version=None,
         use_distributions_from_dist=False,
         **kwargs,
     )
 
 
+@group_for_testing.command(
+    name="task-sdk-integration-tests",
+    context_settings=dict(
+        ignore_unknown_options=True,
+        allow_extra_args=True,
+    ),
+)
+@option_python
+@option_image_name
+@option_skip_docker_compose_deletion
+@option_github_repository
+@option_include_success_outputs
+@option_verbose
+@option_dry_run
+@click.option(
+    "--task-sdk-version",
+    help="Version of Task SDK to test",
+    default="1.1.0",
+    show_default=True,
+    envvar="TASK_SDK_VERSION",
+)
+@click.argument("extra_pytest_args", nargs=-1, type=click.Path(path_type=str))
+def task_sdk_integration_tests(
+    python: str,
+    image_name: str,
+    skip_docker_compose_deletion: bool,
+    github_repository: str,
+    include_success_outputs: bool,
+    task_sdk_version: str,
+    extra_pytest_args: tuple,
+):
+    """Run task SDK integration tests."""
+    perform_environment_checks()
+    if image_name is None:
+        build_params = BuildProdParams(python=python, github_repository=github_repository)
+        image_name = build_params.airflow_image_name
+
+    # Export the TASK_SDK_VERSION environment variable for the test
+    import os
+
+    os.environ["TASK_SDK_VERSION"] = task_sdk_version
+
+    get_console().print(f"[info]Running task SDK integration tests with PROD image: {image_name}[/]")
+    get_console().print(f"[info]Using Task SDK version: {task_sdk_version}[/]")
+    return_code, info = run_docker_compose_tests(
+        image_name=image_name,
+        include_success_outputs=include_success_outputs,
+        extra_pytest_args=extra_pytest_args,
+        skip_docker_compose_deletion=skip_docker_compose_deletion,
+        test_type="task-sdk-integration",
+    )
+    sys.exit(return_code)
+
+
 @group_for_testing.command(
     name="airflow-ctl-tests",
     help="Run airflow-ctl tests - all Airflow CTL tests are non-DB bound tests.",
@@ -1190,43 +1267,29 @@ def python_api_client_tests(
     sys.exit(returncode)
 
 
-@contextlib.contextmanager
-def run_with_timeout(timeout: int, shell_params: ShellParams):
-    def timeout_handler(signum, frame):
-        get_console().print("[warning]Timeout reached. Killing the container(s)[/]:")
-        _print_all_containers()
-        if os.environ.get("CI") == "true":
-            get_console().print("[warning]Dumping container logs first[/]:")
-            _dump_container_logs(output=None, shell_params=shell_params)
-        list_of_containers = _get_running_containers().stdout.splitlines()
-        get_console().print("[warning]Attempting to send TERM signal to all remaining containers:")
-        get_console().print(list_of_containers)
-        _send_signal_to_containers(list_of_containers, "SIGTERM")
-        get_console().print(f"[warning]Waiting {GRACE_CONTAINER_STOP_TIMEOUT} seconds for containers to stop")
-        sleep(GRACE_CONTAINER_STOP_TIMEOUT)
-        containers_left = _get_running_containers().stdout.splitlines()
-        if containers_left:
-            get_console().print("[warning]Some containers are still running. Killing them with SIGKILL:")
-            get_console().print(containers_left)
-            _send_signal_to_containers(list_of_containers, "SIGKILL")
-            get_console().print(
-                f"[warning]Waiting {GRACE_CONTAINER_STOP_TIMEOUT} seconds for containers to stop"
-            )
-            sleep(GRACE_CONTAINER_STOP_TIMEOUT)
-            containers_left = _get_running_containers().stdout.splitlines()
-            if containers_left:
-                get_console().print("[error]Some containers are still running. Exiting anyway.")
-                get_console().print(containers_left)
-                sys.exit(1)
+class TimeoutHandler:
+    def __init__(self, shell_params: ShellParams, terminated_on_timeout_output_list: list[bool]):
+        # Initialize the timeout handler with shell parameters and a list to track terminated outputs
+        # The terminated_on_timeout_output_list list is used to signal to the outside world that the
+        # output has been terminate by setting the first element to True when the timeout is reached.
+        self.shell_params = shell_params
+        self.pool: Pool | None = None
+        self.terminated_on_timeout_output_list = terminated_on_timeout_output_list
+        self.terminated_on_timeout_output_list[0] = False
+
+    def set_pool(self, pool: Pool):
+        self.pool = pool
 
-    def _send_signal_to_containers(list_of_containers: list[str], signal: str):
+    @staticmethod
+    def _send_signal_to_containers(list_of_containers: list[str], signal_number: str):
         run_command(
-            ["docker", "kill", "--signal", signal, *list_of_containers],
+            ["docker", "kill", "--signal", signal_number, *list_of_containers],
             check=True,
             capture_output=False,
             text=True,
         )
 
+    @staticmethod
     def _get_running_containers() -> RunCommandResult:
         return run_command(
             ["docker", "ps", "-q"],
@@ -1235,16 +1298,59 @@ def run_with_timeout(timeout: int, shell_params: ShellParams):
             text=True,
         )
 
+    @staticmethod
     def _print_all_containers():
         run_command(
             ["docker", "ps"],
             check=True,
         )
 
-    signal.signal(signal.SIGALRM, timeout_handler)
+    def timeout_method(self, signum, frame):
+        get_console().print("[warning]Timeout reached.[/]")
+        if self.pool:
+            get_console().print("[warning]Terminating the pool[/]")
+            self.pool.close()
+            self.pool.terminate()
+            # No join here. The pool is joined already in the main function
+        get_console().print("[warning]Stopping all running containers[/]:")
+        self._print_all_containers()
+        if os.environ.get("CI") == "true":
+            get_console().print("[warning]Dumping container logs first[/]")
+            _dump_container_logs(output=None, shell_params=self.shell_params)
+        list_of_containers = self._get_running_containers().stdout.splitlines()
+        get_console().print("[warning]Attempting to send TERM signal to all remaining containers:")
+        get_console().print(list_of_containers)
+        self._send_signal_to_containers(list_of_containers, "SIGTERM")
+        get_console().print(f"[warning]Waiting {GRACE_CONTAINER_STOP_TIMEOUT} seconds for containers to stop")
+        sleep(GRACE_CONTAINER_STOP_TIMEOUT)
+        containers_left = self._get_running_containers().stdout.splitlines()
+        if containers_left:
+            get_console().print("[warning]Some containers are still running. Killing them with SIGKILL:")
+            get_console().print(containers_left)
+            self._send_signal_to_containers(list_of_containers, "SIGKILL")
+            get_console().print(
+                f"[warning]Waiting {GRACE_CONTAINER_STOP_TIMEOUT} seconds for containers to stop"
+            )
+            sleep(GRACE_CONTAINER_STOP_TIMEOUT)
+            containers_left = self._get_running_containers().stdout.splitlines()
+            if containers_left:
+                get_console().print(
+                    "[error]Some containers are still running. Marking stuff as terminated anyway."
+                )
+                get_console().print(containers_left)
+        get_console().print(
+            "[warning]All containers stopped. Marking the whole run as terminated on timeout[/]"
+        )
+        self.terminated_on_timeout_output_list[0] = True
+
+
+@contextlib.contextmanager
+def run_with_timeout(timeout: int, shell_params: ShellParams) -> Generator[TimeoutHandler, None, None]:
+    timeout_handler = TimeoutHandler(shell_params=shell_params, terminated_on_timeout_output_list=[False])
+    signal.signal(signal.SIGALRM, lambda signum, frame: timeout_handler.timeout_method(signum, frame))
     signal.alarm(timeout)
     try:
-        yield
+        yield timeout_handler
     finally:
         signal.alarm(0)
 
@@ -1291,6 +1397,7 @@ def _run_test_command(
     test_type: str,
     total_test_timeout: int,
     upgrade_boto: bool,
+    upgrade_sqlalchemy: bool,
     use_airflow_version: str | None,
     use_distributions_from_dist: bool,
     use_xdist: bool,
@@ -1337,6 +1444,7 @@ def _run_test_command(
         test_type=test_type,
         test_group=test_group,
         upgrade_boto=upgrade_boto,
+        upgrade_sqlalchemy=upgrade_sqlalchemy,
         use_airflow_version=use_airflow_version,
         use_distributions_from_dist=use_distributions_from_dist,
         use_xdist=use_xdist,
@@ -1362,7 +1470,7 @@ def _run_test_command(
                 f"Your test type = {test_type}\n"
             )
             sys.exit(1)
-        with run_with_timeout(total_test_timeout, shell_params=shell_params):
+        with run_with_timeout(total_test_timeout, shell_params=shell_params) as handler:
             run_tests_in_parallel(
                 shell_params=shell_params,
                 extra_pytest_args=extra_pytest_args,
@@ -1372,6 +1480,7 @@ def _run_test_command(
                 skip_cleanup=skip_cleanup,
                 debug_resources=debug_resources,
                 skip_docker_compose_down=skip_docker_compose_down,
+                handler=handler,
             )
     else:
         if shell_params.test_type == ALL_TEST_TYPE:
diff --git a/dev/breeze/src/airflow_breeze/commands/testing_commands_config.py b/dev/breeze/src/airflow_breeze/commands/testing_commands_config.py
index f4cfc212eea..f18c999b4d3 100644
--- a/dev/breeze/src/airflow_breeze/commands/testing_commands_config.py
+++ b/dev/breeze/src/airflow_breeze/commands/testing_commands_config.py
@@ -65,6 +65,7 @@ TEST_UPGRADING_PACKAGES: dict[str, str | list[str]] = {
     "name": "Upgrading/downgrading/removing selected packages",
     "options": [
         "--upgrade-boto",
+        "--upgrade-sqlalchemy",
         "--downgrade-sqlalchemy",
         "--downgrade-pendulum",
     ],
@@ -147,7 +148,7 @@ TESTING_COMMANDS: list[dict[str, str | list[str]]] = [
     },
     {
         "name": "Task SDK Tests",
-        "commands": ["task-sdk-tests"],
+        "commands": ["task-sdk-tests", "task-sdk-integration-tests"],
     },
     {
         "name": "Airflow CTL Tests",
@@ -183,6 +184,19 @@ TESTING_PARAMETERS: dict[str, list[dict[str, str | list[str]]]] = {
         },
         TEST_ADVANCED_FLAGS,
     ],
+    "breeze testing task-sdk-integration-tests": [
+        {
+            "name": "Docker-compose tests flag",
+            "options": [
+                "--image-name",
+                "--python",
+                "--skip-docker-compose-deletion",
+                "--include-success-outputs",
+                "--github-repository",
+                "--task-sdk-version",
+            ],
+        }
+    ],
     "breeze testing airflow-ctl-tests": [
         {
             "name": "Test environment",
diff --git a/dev/breeze/src/airflow_breeze/global_constants.py b/dev/breeze/src/airflow_breeze/global_constants.py
index 6627ec1de2f..57406e70abc 100644
--- a/dev/breeze/src/airflow_breeze/global_constants.py
+++ b/dev/breeze/src/airflow_breeze/global_constants.py
@@ -46,6 +46,9 @@ APACHE_AIRFLOW_GITHUB_REPOSITORY = "apache/airflow"
 # Checked before putting in build cache
 ALLOWED_PYTHON_MAJOR_MINOR_VERSIONS = ["3.9", "3.10", "3.11", "3.12"]
 DEFAULT_PYTHON_MAJOR_MINOR_VERSION = ALLOWED_PYTHON_MAJOR_MINOR_VERSIONS[0]
+# We set 3.12 as default image version until FAB supports Python 3.13
+DEFAULT_PYTHON_MAJOR_MINOR_VERSION_FOR_IMAGES = "3.12"
+
 
 # Maps each supported Python version to the minimum Airflow version that supports it.
 # Used to filter Airflow versions incompatible with a given Python runtime.
@@ -61,9 +64,7 @@ NONE_BACKEND = "none"
 ALLOWED_BACKENDS = [SQLITE_BACKEND, MYSQL_BACKEND, POSTGRES_BACKEND, NONE_BACKEND]
 ALLOWED_PROD_BACKENDS = [MYSQL_BACKEND, POSTGRES_BACKEND]
 DEFAULT_BACKEND = ALLOWED_BACKENDS[0]
-TESTABLE_CORE_INTEGRATIONS = [
-    "kerberos",
-]
+TESTABLE_CORE_INTEGRATIONS = ["kerberos"]
 TESTABLE_PROVIDERS_INTEGRATIONS = [
     "celery",
     "cassandra",
@@ -123,7 +124,7 @@ AUTOCOMPLETE_ALL_INTEGRATIONS = sorted(
     ]
 )
 ALLOWED_TTY = ["auto", "enabled", "disabled"]
-ALLOWED_DOCKER_COMPOSE_PROJECTS = ["breeze", "pre-commit", "docker-compose"]
+ALLOWED_DOCKER_COMPOSE_PROJECTS = ["breeze", "prek", "docker-compose"]
 
 # Unlike everything else, k8s versions are supported as long as 2 major cloud providers support them.
 # See:
@@ -199,7 +200,7 @@ if MYSQL_INNOVATION_RELEASE:
 ALLOWED_INSTALL_MYSQL_CLIENT_TYPES = ["mariadb", "mysql"]
 
 PIP_VERSION = "25.2"
-UV_VERSION = "0.8.8"
+UV_VERSION = "0.8.11"
 
 DEFAULT_UV_HTTP_TIMEOUT = 300
 DEFAULT_WSL2_HTTP_TIMEOUT = 900
@@ -602,7 +603,7 @@ AIRFLOW_GENERATED_PROVIDER_DEPENDENCIES_HASH_PATH = (
 )
 
 UPDATE_PROVIDER_DEPENDENCIES_SCRIPT = (
-    AIRFLOW_ROOT_PATH / "scripts" / "ci" / "pre_commit" / "update_providers_dependencies.py"
+    AIRFLOW_ROOT_PATH / "scripts" / "ci" / "prek" / "update_providers_dependencies.py"
 )
 
 ALL_PYPROJECT_TOML_FILES = []
@@ -699,7 +700,7 @@ GITHUB_ACTIONS = ""
 ISSUE_ID = ""
 NUM_RUNS = ""
 
-MIN_DOCKER_VERSION = "24.0.0"
+MIN_DOCKER_VERSION = "25.0.0"
 MIN_DOCKER_COMPOSE_VERSION = "2.20.2"
 MIN_GH_VERSION = "2.70.0"
 
diff --git a/dev/breeze/src/airflow_breeze/params/shell_params.py b/dev/breeze/src/airflow_breeze/params/shell_params.py
index 303c21c64e0..6c43d29d766 100644
--- a/dev/breeze/src/airflow_breeze/params/shell_params.py
+++ b/dev/breeze/src/airflow_breeze/params/shell_params.py
@@ -220,6 +220,7 @@ class ShellParams:
     test_group: GroupOfTests | None = None
     tty: str = "auto"
     upgrade_boto: bool = False
+    upgrade_sqlalchemy: bool = False
     use_airflow_version: str | None = None
     use_distributions_from_dist: bool = False
     use_uv: bool = False
@@ -328,9 +329,8 @@ class ShellParams:
             backend_docker_compose_file = DOCKER_COMPOSE_DIR / f"backend-{backend}.yml"
         if backend in ("sqlite", "none") or not self.forward_ports:
             return [backend_docker_compose_file]
-        if self.project_name == "pre-commit":
-            # do not forward ports for pre-commit runs - to not clash with running containers from
-            # breeze
+        if self.project_name == "prek":
+            # do not forward ports for prek - to not clash with running containers from breeze
             return [backend_docker_compose_file]
         return [backend_docker_compose_file, DOCKER_COMPOSE_DIR / f"backend-{backend}-port.yml"]
 
@@ -387,9 +387,9 @@ class ShellParams:
                 f"{USE_AIRFLOW_MOUNT_SOURCES} mount sources[/]"
             )
             sys.exit(1)
-        if self.forward_ports and not self.project_name == "pre-commit":
+        if self.forward_ports and not self.project_name == "prek":
             compose_file_list.append(DOCKER_COMPOSE_DIR / "base-ports.yml")
-        if self.debug_components and not self.project_name == "pre-commit":
+        if self.debug_components and not self.project_name == "prek":
             compose_file_list.append(DOCKER_COMPOSE_DIR / "debug-ports.yml")
         if self.mount_sources == MOUNT_SELECTED:
             compose_file_list.append(DOCKER_COMPOSE_DIR / "local.yml")
@@ -653,6 +653,7 @@ class ShellParams:
         _set_var(_env, "TEST_TYPE", self.test_type, "")
         _set_var(_env, "TEST_GROUP", str(self.test_group.value) if self.test_group else "")
         _set_var(_env, "UPGRADE_BOTO", self.upgrade_boto)
+        _set_var(_env, "UPGRADE_SQLALCHEMY", self.upgrade_sqlalchemy)
         _set_var(_env, "USE_AIRFLOW_VERSION", self.use_airflow_version, "")
         _set_var(_env, "USE_DISTRIBUTIONS_FROM_DIST", self.use_distributions_from_dist)
         _set_var(_env, "USE_UV", self.use_uv)
diff --git a/dev/breeze/src/airflow_breeze/pre_commit_ids.py b/dev/breeze/src/airflow_breeze/pre_commit_ids.py
deleted file mode 100644
index c7ce5bccaa2..00000000000
--- a/dev/breeze/src/airflow_breeze/pre_commit_ids.py
+++ /dev/null
@@ -1,155 +0,0 @@
-# Licensed to the Apache Software Foundation (ASF) under one
-# or more contributor license agreements.  See the NOTICE file
-# distributed with this work for additional information
-# regarding copyright ownership.  The ASF licenses this file
-# to you under the Apache License, Version 2.0 (the
-# "License"); you may not use this file except in compliance
-# with the License.  You may obtain a copy of the License at
-#
-#   http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing,
-# software distributed under the License is distributed on an
-# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-# KIND, either express or implied.  See the License for the
-# specific language governing permissions and limitations
-# under the License.
-
-# NOTE! THIS FILE IS AUTOMATICALLY GENERATED AND WILL BE
-# OVERWRITTEN WHEN RUNNING PRE_COMMIT CHECKS.
-#
-# IF YOU WANT TO MODIFY IT, YOU SHOULD MODIFY THE TEMPLATE
-# `pre_commit_ids_TEMPLATE.py.jinja2` IN the `dev/breeze/src/airflow_breeze` DIRECTORY
-from __future__ import annotations
-
-PRE_COMMIT_LIST = [
-    "all",
-    "bandit",
-    "blacken-docs",
-    "check-aiobotocore-optional",
-    "check-airflow-k8s-not-used",
-    "check-airflow-providers-bug-report-template",
-    "check-apache-license-rat",
-    "check-base-operator-partial-arguments",
-    "check-base-operator-usage",
-    "check-boring-cyborg-configuration",
-    "check-breeze-top-dependencies-limited",
-    "check-builtin-literals",
-    "check-changelog-format",
-    "check-changelog-has-no-duplicates",
-    "check-cncf-k8s-only-for-executors",
-    "check-code-deprecations",
-    "check-common-compat-used-for-openlineage",
-    "check-core-deprecation-classes",
-    "check-daysago-import-from-utils",
-    "check-decorated-operator-implements-custom-name",
-    "check-default-configuration",
-    "check-deferrable-default",
-    "check-docstring-param-types",
-    "check-example-dags-urls",
-    "check-executables-have-shebangs",
-    "check-extra-packages-references",
-    "check-extras-order",
-    "check-fab-migrations",
-    "check-for-inclusive-language",
-    "check-get-lineage-collector-providers",
-    "check-hooks-apply",
-    "check-imports-in-providers",
-    "check-incorrect-use-of-LoggingMixin",
-    "check-init-decorator-arguments",
-    "check-integrations-list-consistent",
-    "check-lazy-logging",
-    "check-links-to-example-dags-do-not-use-hardcoded-versions",
-    "check-merge-conflict",
-    "check-min-python-version",
-    "check-newsfragments-are-valid",
-    "check-no-airflow-deprecation-in-providers",
-    "check-no-providers-in-core-examples",
-    "check-only-new-session-with-provide-session",
-    "check-persist-credentials-disabled-in-github-workflows",
-    "check-pre-commit-information-consistent",
-    "check-provide-create-sessions-imports",
-    "check-provider-docs-valid",
-    "check-provider-yaml-valid",
-    "check-providers-subpackages-init-file-exist",
-    "check-pydevd-left-in-code",
-    "check-revision-heads-map",
-    "check-safe-filter-usage-in-html",
-    "check-significant-newsfragments-are-valid",
-    "check-sql-dependency-common-data-structure",
-    "check-start-date-not-used-in-defaults",
-    "check-system-tests-present",
-    "check-system-tests-tocs",
-    "check-taskinstance-tis-attrs",
-    "check-template-context-variable-in-sync",
-    "check-template-fields-valid",
-    "check-tests-in-the-right-folders",
-    "check-tests-unittest-testcase",
-    "check-urlparse-usage-in-code",
-    "check-xml",
-    "check-zip-file-is-not-committed",
-    "codespell",
-    "compile-fab-assets",
-    "compile-ui-assets",
-    "compile-ui-assets-dev",
-    "create-missing-init-py-files-tests",
-    "debug-statements",
-    "detect-private-key",
-    "doctoc",
-    "end-of-file-fixer",
-    "flynt",
-    "generate-airflow-diagrams",
-    "generate-openapi-spec",
-    "generate-openapi-spec-fab",
-    "generate-pypi-readme",
-    "generate-tasksdk-datamodels",
-    "generate-volumes-for-sources",
-    "identity",
-    "insert-license",
-    "kubeconform",
-    "lint-chart-schema",
-    "lint-dockerfile",
-    "lint-helm-chart",
-    "lint-json-schema",
-    "lint-markdown",
-    "mixed-line-ending",
-    "mypy-airflow-core",
-    "mypy-airflow-ctl",
-    "mypy-dev",
-    "mypy-devel-common",
-    "mypy-providers",
-    "mypy-task-sdk",
-    "pretty-format-json",
-    "pylint",
-    "python-no-log-warn",
-    "replace-bad-characters",
-    "rst-backticks",
-    "ruff",
-    "ruff-format",
-    "shellcheck",
-    "trailing-whitespace",
-    "ts-compile-lint-simple-auth-manager-ui",
-    "ts-compile-lint-ui",
-    "update-black-version",
-    "update-breeze-cmd-output",
-    "update-breeze-readme-config-hash",
-    "update-chart-dependencies",
-    "update-er-diagram",
-    "update-in-the-wild-to-be-sorted",
-    "update-inlined-dockerfile-scripts",
-    "update-installed-providers-to-be-sorted",
-    "update-installers-and-pre-commit",
-    "update-local-yml-file",
-    "update-migration-references",
-    "update-providers-build-files",
-    "update-providers-dependencies",
-    "update-pyproject-toml",
-    "update-reproducible-source-date-epoch",
-    "update-spelling-wordlist-to-be-sorted",
-    "update-supported-versions",
-    "update-vendored-in-k8s-json-schema",
-    "update-version",
-    "validate-operators-init",
-    "yamllint",
-    "zizmor",
-]
diff --git a/dev/breeze/src/airflow_breeze/pre_commit_ids_TEMPLATE.py.jinja2 b/dev/breeze/src/airflow_breeze/pre_commit_ids_TEMPLATE.py.jinja2
deleted file mode 100644
index 714e731ece2..00000000000
--- a/dev/breeze/src/airflow_breeze/pre_commit_ids_TEMPLATE.py.jinja2
+++ /dev/null
@@ -1,25 +0,0 @@
-# Licensed to the Apache Software Foundation (ASF) under one
-# or more contributor license agreements.  See the NOTICE file
-# distributed with this work for additional information
-# regarding copyright ownership.  The ASF licenses this file
-# to you under the Apache License, Version 2.0 (the
-# "License"); you may not use this file except in compliance
-# with the License.  You may obtain a copy of the License at
-#
-#   http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing,
-# software distributed under the License is distributed on an
-# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-# KIND, either express or implied.  See the License for the
-# specific language governing permissions and limitations
-# under the License.
-
-# NOTE! THIS FILE IS AUTOMATICALLY GENERATED AND WILL BE
-# OVERWRITTEN WHEN RUNNING PRE_COMMIT CHECKS.
-#
-# IF YOU WANT TO MODIFY IT, YOU SHOULD MODIFY THE TEMPLATE
-# `pre_commit_ids_TEMPLATE.py.jinja2` IN the `dev/breeze/src/airflow_breeze` DIRECTORY
-from __future__ import annotations
-
-PRE_COMMIT_LIST= {{ PRE_COMMIT_IDS }}
diff --git a/dev/breeze/src/airflow_breeze/prepare_providers/provider_documentation.py b/dev/breeze/src/airflow_breeze/prepare_providers/provider_documentation.py
index b5f6a339cbd..a7bc466e7aa 100644
--- a/dev/breeze/src/airflow_breeze/prepare_providers/provider_documentation.py
+++ b/dev/breeze/src/airflow_breeze/prepare_providers/provider_documentation.py
@@ -62,7 +62,7 @@ AUTOMATICALLY_GENERATED_CONTENT = (
     f"IT WILL BE OVERWRITTEN AT RELEASE TIME!"
 )
 
-# Taken from pygrep hooks we are using in pre-commit
+# Taken from pygrep hooks we are using in prek
 # https://github.com/pre-commit/pygrep-hooks/blob/main/.pre-commit-hooks.yaml
 BACKTICKS_CHECK = re.compile(r"^(?! {4}).*(^| )`[^`]+`([^_]|$)", re.MULTILINE)
 
@@ -196,24 +196,34 @@ TYPE_OF_CHANGE_DESCRIPTION = {
 
 
 def classification_result(provider_id, changed_files):
-    provider_path = f"providers/{provider_id}/"
-    changed_files = list(filter(lambda f: f.startswith(provider_path), changed_files))
+    provider_id = provider_id.replace(".", "/")
+    changed_files = list(filter(lambda f: provider_id in f, changed_files))
 
     if not changed_files:
         return "other"
 
-    has_docs = any(re.match(r"^providers/[^/]+/docs/", f) and f.endswith(".rst") for f in changed_files)
+    def is_doc(f):
+        return re.match(r"^providers/.+/docs/", f) and f.endswith(".rst")
 
-    has_test_or_example_only = all(
-        re.match(r"^providers/[^/]+/tests/", f)
-        or re.match(r"^providers/[^/]+/src/airflow/providers/[^/]+/example_dags/", f)
-        for f in changed_files
-    )
+    def is_test_or_example(f):
+        return re.match(r"^providers/.+/tests/", f) or re.match(
+            r"^providers/.+/src/airflow/providers/.+/example_dags/", f
+        )
+
+    all_docs = all(is_doc(f) for f in changed_files)
+    all_test_or_example = all(is_test_or_example(f) for f in changed_files)
 
-    if has_docs:
+    has_docs = any(is_doc(f) for f in changed_files)
+    has_test_or_example = any(is_test_or_example(f) for f in changed_files)
+
+    has_real_code = any(not (is_doc(f) or is_test_or_example(f)) for f in changed_files)
+
+    if all_docs:
         return "documentation"
-    if has_test_or_example_only:
+    if all_test_or_example:
         return "test_or_example_only"
+    if not has_real_code and (has_docs or has_test_or_example):
+        return "documentation"
     return "other"
 
 
diff --git a/dev/breeze/src/airflow_breeze/templates/CHANGELOG_TEMPLATE.rst.jinja2 b/dev/breeze/src/airflow_breeze/templates/CHANGELOG_TEMPLATE.rst.jinja2
index a9b55b2312b..0f1466d67e0 100644
--- a/dev/breeze/src/airflow_breeze/templates/CHANGELOG_TEMPLATE.rst.jinja2
+++ b/dev/breeze/src/airflow_breeze/templates/CHANGELOG_TEMPLATE.rst.jinja2
@@ -21,6 +21,9 @@
 {{ version_header }}
 
 
+Release Date: ``|PypiReleaseDate|``
+
+
 {%- if min_airflow_version_bump %}
 
 .. note::
diff --git a/dev/breeze/src/airflow_breeze/templates/pyproject_TEMPLATE.toml.jinja2 b/dev/breeze/src/airflow_breeze/templates/pyproject_TEMPLATE.toml.jinja2
index f8a5b89f505..17a2a9e450a 100644
--- a/dev/breeze/src/airflow_breeze/templates/pyproject_TEMPLATE.toml.jinja2
+++ b/dev/breeze/src/airflow_breeze/templates/pyproject_TEMPLATE.toml.jinja2
@@ -75,7 +75,7 @@ requires-python = "{{ REQUIRES_PYTHON }}"
 
 # The dependencies should be modified in place in the generated file.
 # Any change in the dependencies is preserved when the file is regenerated
-# Make sure to run ``breeze static-checks --type update-providers-dependencies --all-files``
+# Make sure to run ``prek update-providers-dependencies --all-files``
 # After you modify the dependencies, and rebuild your Breeze CI image with ``breeze ci-image build``
 dependencies = [
 {{ INSTALL_REQUIREMENTS }}
diff --git a/dev/breeze/src/airflow_breeze/utils/cdxgen.py b/dev/breeze/src/airflow_breeze/utils/cdxgen.py
index 3bfd38bb40b..362e0cfa0ee 100644
--- a/dev/breeze/src/airflow_breeze/utils/cdxgen.py
+++ b/dev/breeze/src/airflow_breeze/utils/cdxgen.py
@@ -612,7 +612,7 @@ def get_github_stats(
         console.print(f"[bright_blue]Retrieving GitHub Stats from {api_url}")
         response = requests.get(api_url, headers=headers)
         if response.status_code == 404:
-            console.print(f"[yellow]Github API returned 404 for {api_url}")
+            console.print(f"[yellow]GitHub API returned 404 for {api_url}")
             return {}
         response.raise_for_status()
         github_data = response.json()
@@ -631,7 +631,7 @@ def get_github_stats(
         result["Industry importance"] = importance
         console.print("[green]Successfully retrieved GitHub Stats.")
     else:
-        console.print(f"[yellow]Not retrieving Github Stats for {vcs}")
+        console.print(f"[yellow]Not retrieving GitHub Stats for {vcs}")
     return result
 
 
diff --git a/dev/breeze/src/airflow_breeze/utils/constraints_version_check.py b/dev/breeze/src/airflow_breeze/utils/constraints_version_check.py
index 204c917f74d..88f74595815 100755
--- a/dev/breeze/src/airflow_breeze/utils/constraints_version_check.py
+++ b/dev/breeze/src/airflow_breeze/utils/constraints_version_check.py
@@ -88,10 +88,14 @@ def count_versions_between(releases: dict[str, Any], current_version: str, lates
     if current == latest:
         return 0
 
-    valid_versions = [
-        v for v in releases.keys() if releases[v] and is_valid_version(version_str=v, latest_version=latest)
+    versions_between = [
+        v
+        for v in releases.keys()
+        if releases[v]
+        and is_valid_version(version_str=v, latest_version=latest)
+        and current < version.parse(v) <= latest
     ]
-    return max(len(valid_versions), 1) if current < latest else 0
+    return len(versions_between)
 
 
 def get_status_emoji(constraint_date, latest_date, is_latest_version):
diff --git a/dev/breeze/src/airflow_breeze/utils/debug_pyproject_toml.py b/dev/breeze/src/airflow_breeze/utils/debug_pyproject_toml.py
index 1b569527705..5b5a818820e 100644
--- a/dev/breeze/src/airflow_breeze/utils/debug_pyproject_toml.py
+++ b/dev/breeze/src/airflow_breeze/utils/debug_pyproject_toml.py
@@ -28,7 +28,7 @@ from airflow_breeze.utils.shared_options import get_dry_run, get_verbose
 def debug_pyproject_tomls(pyproject_toml_paths: list[Path]) -> None:
     if get_verbose() or get_dry_run():
         for pyproject_toml_path in pyproject_toml_paths:
-            with ci_group(f"Updated {pyproject_toml_path} content", message_type=MessageType.INFO):
+            with ci_group(f"Updated {pyproject_toml_path} content", MessageType.INFO):
                 # Format the content to make it more readable with rich
                 syntax = Syntax(pyproject_toml_path.read_text(), "toml", theme="ansi_dark", line_numbers=True)
                 get_console().print(syntax)
diff --git a/dev/breeze/src/airflow_breeze/utils/docker_command_utils.py b/dev/breeze/src/airflow_breeze/utils/docker_command_utils.py
index ed9e9dd7a2f..8fa3fa960e0 100644
--- a/dev/breeze/src/airflow_breeze/utils/docker_command_utils.py
+++ b/dev/breeze/src/airflow_breeze/utils/docker_command_utils.py
@@ -82,26 +82,25 @@ VOLUMES_FOR_SELECTED_MOUNTS = [
     ("LICENSE", "/opt/airflow/LICENSE"),
     ("RELEASE_NOTES.rst", "/opt/airflow/RELEASE_NOTES.rst"),
     ("airflow-core", "/opt/airflow/airflow-core"),
-    ("airflow-ctl", "/opt/airflow/airflow-ctl"),
-    ("constraints", "/opt/airflow/constraints"),
+    ("chart", "/opt/airflow/chart"),
     ("clients", "/opt/airflow/clients"),
+    ("constraints", "/opt/airflow/constraints"),
     ("dags", "/opt/airflow/dags"),
     ("dev", "/opt/airflow/dev"),
-    ("docs", "/opt/airflow/docs"),
+    ("devel-common", "/opt/airflow/devel-common"),
     ("docker-stack-docs", "/opt/airflow/docker-stack-docs"),
-    ("providers-summary-docs", "/opt/airflow/providers-summary-docs"),
+    ("docker-tests", "/opt/airflow/docker-tests"),
+    ("docs", "/opt/airflow/docs"),
     ("generated", "/opt/airflow/generated"),
+    ("helm-tests", "/opt/airflow/helm-tests"),
+    ("kubernetes-tests", "/opt/airflow/kubernetes-tests"),
     ("logs", "/root/airflow/logs"),
     ("providers", "/opt/airflow/providers"),
-    ("task-sdk", "/opt/airflow/task-sdk"),
+    ("providers-summary-docs", "/opt/airflow/providers-summary-docs"),
     ("pyproject.toml", "/opt/airflow/pyproject.toml"),
     ("scripts", "/opt/airflow/scripts"),
     ("scripts/docker/entrypoint_ci.sh", "/entrypoint"),
-    ("devel-common", "/opt/airflow/devel-common"),
-    ("helm-tests", "/opt/airflow/helm-tests"),
-    ("kubernetes-tests", "/opt/airflow/kubernetes-tests"),
-    ("docker-tests", "/opt/airflow/docker-tests"),
-    ("chart", "/opt/airflow/chart"),
+    ("task-sdk", "/opt/airflow/task-sdk"),
 ]
 
 
diff --git a/dev/breeze/src/airflow_breeze/utils/github.py b/dev/breeze/src/airflow_breeze/utils/github.py
index 967a4adc1f2..4b4ea3f5022 100644
--- a/dev/breeze/src/airflow_breeze/utils/github.py
+++ b/dev/breeze/src/airflow_breeze/utils/github.py
@@ -30,7 +30,7 @@ from rich.markup import escape
 from airflow_breeze.utils.confirm import Answer, user_confirm
 from airflow_breeze.utils.console import get_console
 from airflow_breeze.utils.path_utils import AIRFLOW_ROOT_PATH
-from airflow_breeze.utils.shared_options import get_dry_run
+from airflow_breeze.utils.shared_options import get_dry_run, get_verbose
 
 if TYPE_CHECKING:
     from requests import Response
@@ -88,12 +88,14 @@ def download_file_from_github(
     """
     Downloads a file from the GitHub repository of Apache Airflow using the GitHub API.
 
+    In case of any error different from 404, it will exit the process with error code 1.
+
     :param reference: tag to download from
     :param path: path of the file relative to the repository root
     :param output_file: Path where the file should be downloaded
     :param github_token: GitHub token to use for authentication
     :param timeout: timeout in seconds for the download request, default is 60 seconds
-    :return: whether the file was successfully downloaded (False if the file is missing or error occurred)
+    :return: whether the file was successfully downloaded (False if the file is missing)
     """
     import requests
 
@@ -114,7 +116,7 @@ def download_file_from_github(
                     f"   2. GitHub API rate limiting\n"
                     f"   3. Invalid or missing GitHub token"
                 )
-                return False
+                sys.exit(1)
             if response.status_code == 404:
                 get_console().print(f"[warning]The {url} has not been found. Skipping")
                 return False
@@ -122,11 +124,11 @@ def download_file_from_github(
                 get_console().print(
                     f"[error]{url} could not be downloaded. Status code {response.status_code}"
                 )
-                return False
+                sys.exit(1)
             output_file.write_bytes(response.content)
         except requests.Timeout:
             get_console().print(f"[error]The request to {url} timed out after {timeout} seconds.")
-            return False
+            sys.exit(1)
     get_console().print(f"[success]Downloaded {url} to {output_file}")
     return True
 
@@ -179,7 +181,10 @@ def get_active_airflow_versions(
             get_console().print("[error]Error fetching tag date for Airflow {version}")
             sys.exit(1)
         airflow_release_dates[version] = date
-    get_console().print("[info]All Airflow 2/3 versions")
+    get_console().print("[info]All Airflow 2/3 versions loaded from GitHub[/]")
+    if get_verbose():
+        get_console().print("[info]Found active Airflow versions:[/]")
+        get_console().print(airflow_versions)
     if confirm:
         for version in airflow_versions:
             get_console().print(f"  {version}: [info]{airflow_release_dates[version]}[/]")
diff --git a/dev/breeze/src/airflow_breeze/utils/image.py b/dev/breeze/src/airflow_breeze/utils/image.py
index 0dcde4c33c7..e6c6b7bb415 100644
--- a/dev/breeze/src/airflow_breeze/utils/image.py
+++ b/dev/breeze/src/airflow_breeze/utils/image.py
@@ -18,7 +18,8 @@ from __future__ import annotations
 
 import subprocess
 import time
-from typing import TYPE_CHECKING, Callable
+from collections.abc import Callable
+from typing import TYPE_CHECKING
 
 from airflow_breeze.global_constants import (
     ALLOWED_PYTHON_MAJOR_MINOR_VERSIONS,
@@ -88,7 +89,7 @@ def run_pull_in_parallel(
             ]
     check_async_run_results(
         results=results,
-        success="All images pulled",
+        success_message="All images pulled",
         outputs=outputs,
         include_success_outputs=include_success_outputs,
         skip_cleanup=skip_cleanup,
diff --git a/dev/breeze/src/airflow_breeze/utils/kubernetes_utils.py b/dev/breeze/src/airflow_breeze/utils/kubernetes_utils.py
index 9d8249be3bc..a3fb7d9974d 100644
--- a/dev/breeze/src/airflow_breeze/utils/kubernetes_utils.py
+++ b/dev/breeze/src/airflow_breeze/utils/kubernetes_utils.py
@@ -305,6 +305,8 @@ def run_command_with_k8s_env(
 
 
 def get_k8s_env(python: str, kubernetes_version: str, executor: str | None = None) -> dict[str, str]:
+    from packaging.version import Version
+
     new_env = os.environ.copy()
     new_env["PATH"] = str(K8S_BIN_BASE_PATH) + os.pathsep + new_env["PATH"]
     new_env["KUBECONFIG"] = str(get_kubeconfig_file(python=python, kubernetes_version=kubernetes_version))
@@ -317,6 +319,11 @@ def get_k8s_env(python: str, kubernetes_version: str, executor: str | None = Non
     if executor:
         new_env["PS1"] = f"({kubectl_cluster_name}:{executor})> "
         new_env["EXECUTOR"] = executor
+    use_flask_appbuilder = Version(python) < Version("3.13")
+    if use_flask_appbuilder:
+        new_env["USE_FAB_AUTH_MANAGER"] = "true"
+    else:
+        new_env["USE_FAB_AUTH_MANAGER"] = "false"
     return new_env
 
 
diff --git a/dev/breeze/src/airflow_breeze/utils/packages.py b/dev/breeze/src/airflow_breeze/utils/packages.py
index 6e6206695c6..9fa742c944a 100644
--- a/dev/breeze/src/airflow_breeze/utils/packages.py
+++ b/dev/breeze/src/airflow_breeze/utils/packages.py
@@ -645,8 +645,8 @@ def get_provider_jinja_context(
     ]
     cross_providers_dependencies = get_cross_provider_dependent_packages(provider_id=provider_id)
 
-    # Most providers require the same python versions, but some may have exclusions
     requires_python_version: str = f">={DEFAULT_PYTHON_MAJOR_MINOR_VERSION}"
+    # Most providers require the same python versions, but some may have exclusions
     for excluded_python_version in provider_details.excluded_python_versions:
         requires_python_version += f",!={excluded_python_version}"
 
@@ -916,7 +916,7 @@ def regenerate_pyproject_toml(
     )
 
 
-AIRFLOW_PACKAGE_MATCHER = re.compile(r"(^.*\")(apache-airflow.*>=[\d.]*)(\".*)$")
+AIRFLOW_PACKAGE_MATCHER = re.compile(r"(^.*\")(apache-airflow.*>=[\d.]*)((\".*)$|;.*$)")
 
 
 def modify_dependency_with_suffix(dependency: str, version_suffix: str) -> str:
@@ -1059,7 +1059,12 @@ def update_version_suffix_in_non_provider_pyproject_toml(version_suffix: str, py
                 get_console().print(
                     f"[info]Updating version suffix to {floored_version_suffix} for {base_line}."
                 )
-                base_line = base_line.rstrip('",') + f'{floored_version_suffix}",'
+                if ";" in base_line:
+                    split_on_semicolon = base_line.split(";")
+                    # If there is a semicolon, we need to remove it before adding the version suffix
+                    base_line = split_on_semicolon[0] + f"{floored_version_suffix};" + split_on_semicolon[1]
+                else:
+                    base_line = base_line.rstrip('",') + f'{floored_version_suffix}",'
             if base_line.strip().startswith('"apache-airflow-core') and "==" in base_line:
                 get_console().print(f"[info]Updating version suffix to {version_suffix} for {base_line}.")
                 base_line = base_line.rstrip('",') + f'{version_suffix}",'
diff --git a/dev/breeze/src/airflow_breeze/utils/parallel.py b/dev/breeze/src/airflow_breeze/utils/parallel.py
index 1d6af2d1748..349231193af 100644
--- a/dev/breeze/src/airflow_breeze/utils/parallel.py
+++ b/dev/breeze/src/airflow_breeze/utils/parallel.py
@@ -343,9 +343,9 @@ class ParallelMonitor(Thread):
             get_console().print_exception(show_locals=True)
 
 
-def print_async_summary(completed_list: list[ApplyResult]) -> None:
+def print_async_result_status(completed_list: list[ApplyResult]) -> None:
     """
-    Print summary of completed async results.
+    Print status of completed async results.
     :param completed_list: list of completed async results.
     """
     completed_list.sort(key=lambda x: x.get()[1])
@@ -374,19 +374,26 @@ class SummarizeAfter(Enum):
 
 def check_async_run_results(
     results: list[ApplyResult],
-    success: str,
+    success_message: str,
     outputs: list[Output],
     include_success_outputs: bool,
     poll_time_seconds: float = 0.2,
     skip_cleanup: bool = False,
     summarize_on_ci: SummarizeAfter = SummarizeAfter.NO_SUMMARY,
     summary_start_regexp: str | None = None,
+    terminated_on_timeout: bool = False,
 ):
     """
-    Check if all async results were success. Exits with error if not.
+    Check if all async results were success.
+
+    Exits with error if:
+
+    * exit code 1: some tasks failed
+    * exit code 2: some tasks were terminated on timeout
+
     :param results: results of parallel runs (expected in the form of Tuple: (return_code, info)
     :param outputs: outputs where results are written to
-    :param success: Success string printed when everything is OK
+    :param success_message: Success string printed when everything is OK
     :param include_success_outputs: include outputs of successful parallel runs
     :param poll_time_seconds: what's the poll time between checks
     :param skip_cleanup: whether to skip cleanup of temporary files.
@@ -395,9 +402,37 @@ def check_async_run_results(
     :param summary_start_regexp: the regexp that determines line after which
         outputs should be printed as summary, so that you do not have to look at the folded details of
         the run in CI
+    :param terminated_on_timeout: whether the run was terminated on timeout
     """
-    from airflow_breeze.utils.ci_group import ci_group
+    if terminated_on_timeout:
+        print_outputs_on_timeout(outputs, results, include_success_outputs)
+        sys.exit(2)
+    completed_list = wait_for_all_tasks_completed(poll_time_seconds, results)
+    print_async_result_status(completed_list)
+    print_logs_on_completion(include_success_outputs, outputs, results)
+    summarize_results_outside_of_folded_logs(outputs, results, summarize_on_ci, summary_start_regexp)
+    if finalize_async_tasks(outputs, results, skip_cleanup, success_message):
+        sys.exit(1)
+
+
+def print_logs_on_completion(
+    include_success_outputs: bool, outputs: list[Output], results: list[ApplyResult]
+):
+    for i, result in enumerate(results):
+        if result.get()[0] != 0:
+            message_type = MessageType.ERROR
+        else:
+            message_type = MessageType.SUCCESS
+        if message_type == MessageType.ERROR or include_success_outputs:
+            from airflow_breeze.utils.ci_group import ci_group
+
+            with ci_group(f"{outputs[i].escaped_title}", message_type):
+                os.write(1, Path(outputs[i].file_name).read_bytes())
+        else:
+            get_console().print(f"[success]{outputs[i].escaped_title} OK[/]")
+
 
+def wait_for_all_tasks_completed(poll_time_seconds: float, results: list[ApplyResult]) -> list[ApplyResult]:
     completed_number = 0
     total_number_of_results = len(results)
     completed_list = get_completed_result_list(results)
@@ -409,7 +444,7 @@ def check_async_run_results(
                 f"\n[info]Completed {completed_number} out of {total_number_of_results} "
                 f"({completed_number / total_number_of_results:.0%}).[/]\n"
             )
-            print_async_summary(completed_list)
+            print_async_result_status(completed_list)
         time.sleep(poll_time_seconds)
         completed_list = get_completed_result_list(results)
     completed_number = len(completed_list)
@@ -417,50 +452,113 @@ def check_async_run_results(
         f"\n[info]Completed {completed_number} out of {total_number_of_results} "
         f"({completed_number / total_number_of_results:.0%}).[/]\n"
     )
-    print_async_summary(completed_list)
+    return completed_list
+
+
+def finalize_async_tasks(
+    outputs: list[Output], results: list[ApplyResult], skip_cleanup: bool, success_message: str
+) -> bool:
+    """
+    Finalize async tasks by checking results and cleaning up temporary files.
+
+    :param outputs: List of Output objects containing file names and titles.
+    :param results: List of ApplyResult objects containing the results of the tasks.
+    :param skip_cleanup: Whether to skip cleanup of temporary files.
+    :param success_message: Message to print if all tasks were successful.
+    :return: True if there were errors, False otherwise.
+    """
     errors = False
-    for i, result in enumerate(results):
+    for result in results:
         if result.get()[0] != 0:
             errors = True
+    if errors:
+        get_console().print("\n[error]There were errors when running some tasks. Quitting.[/]\n")
+    else:
+        get_console().print(f"\n[success]{success_message}[/]\n")
+    if not skip_cleanup:
+        for output in outputs:
+            Path(output.file_name).unlink(missing_ok=True)
+    from airflow_breeze.utils.docker_command_utils import fix_ownership_using_docker
+
+    fix_ownership_using_docker()
+    return errors
+
+
+def summarize_results_outside_of_folded_logs(
+    outputs: list[Output],
+    results: list[ApplyResult],
+    summarize_on_ci: SummarizeAfter,
+    summary_start_regexp: str | None = None,
+):
+    """
+    Print summary of the results outside the folded logs in CI.
+
+    :param outputs: List of Output objects containing file names and titles.
+    :param results: List of ApplyResult objects containing the results of the tasks.
+    :param summarize_on_ci: Determines when to summarize the parallel jobs when they are completed in
+        CI, outside the folded CI output.
+    :param summary_start_regexp: The regexp that determines line after which
+        outputs should be printed as summary, so that you do not have to look at the folded details of
+        the run in CI.
+    """
+    if summarize_on_ci == SummarizeAfter.NO_SUMMARY:
+        return
+    regex = re.compile(summary_start_regexp) if summary_start_regexp is not None else None
+    for i, result in enumerate(results):
+        failure = result.get()[0] != 0
+        if summarize_on_ci in [
+            SummarizeAfter.BOTH,
+            SummarizeAfter.FAILURE if failure else SummarizeAfter.SUCCESS,
+        ]:
+            print_lines = False
+            for line in Path(outputs[i].file_name).read_bytes().decode(errors="ignore").splitlines():
+                if not print_lines and (regex is None or regex.match(remove_ansi_colours(line))):
+                    print_lines = True
+                    get_console().print(f"\n[info]Summary: {outputs[i].escaped_title:<30}:\n")
+                if print_lines:
+                    print(line)
+
+
+def print_outputs_on_timeout(
+    outputs: list[Output], results: list[ApplyResult], include_success_outputs: bool
+):
+    """
+    Print outputs of the tasks that were terminated on timeout.
+    This function is called when some tasks were terminated on timeout.
+    It prints the outputs of the tasks that were terminated on timeout,
+    and the outputs of the tasks that were successful if `include_success_outputs` is True.
+    :param outputs: list of Output objects containing file names and titles
+    :param results: list of ApplyResult objects containing the results of the tasks
+    :param include_success_outputs: whether to include outputs of successful tasks
+    """
+    get_console().print(
+        "\n[warning]Some tasks were terminated on timeout. "
+        "Please check the logs of the tasks (below) for more details.[/]\n"
+    )
+    for i, result in enumerate(results):
+        try:
+            exit_code = result.get(timeout=0)[0]
+        except Exception:
+            exit_code = -1
+        if exit_code != 0:
             message_type = MessageType.ERROR
         else:
             message_type = MessageType.SUCCESS
+        output = outputs[i]
         if message_type == MessageType.ERROR or include_success_outputs:
-            with ci_group(title=f"{outputs[i].escaped_title}", message_type=message_type):
-                os.write(1, Path(outputs[i].file_name).read_bytes())
+            from airflow_breeze.utils.ci_group import ci_group
+
+            with ci_group(f"{output.escaped_title}", message_type):
+                os.write(1, Path(output.file_name).read_bytes())
         else:
             get_console().print(f"[success]{outputs[i].escaped_title} OK[/]")
-    if summarize_on_ci != SummarizeAfter.NO_SUMMARY:
-        regex = re.compile(summary_start_regexp) if summary_start_regexp is not None else None
-        for i, result in enumerate(results):
-            failure = result.get()[0] != 0
-            if summarize_on_ci in [
-                SummarizeAfter.BOTH,
-                SummarizeAfter.FAILURE if failure else SummarizeAfter.SUCCESS,
-            ]:
-                print_lines = False
-                for line in Path(outputs[i].file_name).read_bytes().decode(errors="ignore").splitlines():
-                    if not print_lines and (regex is None or regex.match(remove_ansi_colours(line))):
-                        print_lines = True
-                        get_console().print(f"\n[info]Summary: {outputs[i].escaped_title:<30}:\n")
-                    if print_lines:
-                        print(line)
-    try:
-        if errors:
-            get_console().print("\n[error]There were errors when running some tasks. Quitting.[/]\n")
-            from airflow_breeze.utils.docker_command_utils import fix_ownership_using_docker
+    get_console().print(
+        "\n[warning]Some tasks were terminated on timeout. "
+        "Please check the logs of the tasks (above) for more details.[/]\n"
+    )
+    from airflow_breeze.utils.docker_command_utils import fix_ownership_using_docker
 
-            fix_ownership_using_docker()
-            sys.exit(1)
-        else:
-            get_console().print(f"\n[success]{success}[/]\n")
-            from airflow_breeze.utils.docker_command_utils import fix_ownership_using_docker
-
-            fix_ownership_using_docker()
-    finally:
-        if not skip_cleanup:
-            for output in outputs:
-                Path(output.file_name).unlink(missing_ok=True)
+    fix_ownership_using_docker()
 
 
 @contextmanager
diff --git a/dev/breeze/src/airflow_breeze/utils/path_utils.py b/dev/breeze/src/airflow_breeze/utils/path_utils.py
index a9cef7c0dc1..8bb331a55f0 100644
--- a/dev/breeze/src/airflow_breeze/utils/path_utils.py
+++ b/dev/breeze/src/airflow_breeze/utils/path_utils.py
@@ -93,16 +93,24 @@ def get_package_setup_metadata_hash() -> str:
     """
     # local imported to make sure that autocomplete works
     try:
-        from importlib.metadata import distribution  # type: ignore[attr-defined]
+        from importlib.metadata import distribution
     except ImportError:
-        from importlib_metadata import distribution  # type: ignore[no-redef, assignment]
+        from importlib_metadata import distribution  # type: ignore[assignment]
+    try:
+        from importlib.metadata import PackageMetadata  # type: ignore[attr-defined]
+    except ImportError:
+        from importlib_metadata import PackageMetadata  # type: ignore[assignment]
 
     prefix = "Package config hash: "
-    metadata = distribution("apache-airflow-breeze").metadata
+    metadata: PackageMetadata = distribution("apache-airflow-breeze").metadata
     try:
-        description = metadata.json["description"]  # type: ignore[attr-defined]
-    except AttributeError:
-        description = metadata.as_string()
+        description = metadata.json["description"]
+    except (AttributeError, KeyError):
+        description = str(metadata["Description"]) if "Description" in metadata else ""
+
+    if isinstance(description, list):
+        description = "\n".join(description)
+
     for line in description.splitlines(keepends=False):
         if line.startswith(prefix):
             return line[len(prefix) :]
diff --git a/dev/breeze/src/airflow_breeze/utils/provider_dependencies.py b/dev/breeze/src/airflow_breeze/utils/provider_dependencies.py
index 7628d7e0d3d..9d6e48acaed 100644
--- a/dev/breeze/src/airflow_breeze/utils/provider_dependencies.py
+++ b/dev/breeze/src/airflow_breeze/utils/provider_dependencies.py
@@ -18,11 +18,20 @@
 from __future__ import annotations
 
 import json
+import re
+import shutil
+import sys
+from functools import partial
+from multiprocessing import Pool
+from typing import NamedTuple
 
+from airflow_breeze.global_constants import ALL_HISTORICAL_PYTHON_VERSIONS, PYTHON_TO_MIN_AIRFLOW_MAPPING
+from airflow_breeze.utils.ci_group import ci_group
 from airflow_breeze.utils.console import get_console
-from airflow_breeze.utils.github import get_tag_date
+from airflow_breeze.utils.github import download_constraints_file, get_active_airflow_versions, get_tag_date
 from airflow_breeze.utils.packages import get_provider_distributions_metadata
-from airflow_breeze.utils.path_utils import PROVIDER_DEPENDENCIES_JSON_PATH
+from airflow_breeze.utils.path_utils import CONSTRAINTS_CACHE_PATH, PROVIDER_DEPENDENCIES_JSON_PATH
+from airflow_breeze.utils.shared_options import get_verbose
 
 DEPENDENCIES = json.loads(PROVIDER_DEPENDENCIES_JSON_PATH.read_text())
 
@@ -55,44 +64,277 @@ def get_related_providers(
     return related_providers
 
 
+def is_airflow_version_supported_for_python(airflow_version: str, python_version: str) -> bool:
+    from packaging.version import Version
+
+    min_airflow_version = PYTHON_TO_MIN_AIRFLOW_MAPPING.get(python_version)
+    if not min_airflow_version:
+        return False
+    return Version(airflow_version) >= Version(min_airflow_version)
+
+
+def get_all_constraint_files_and_airflow_releases(
+    refresh_constraints_and_airflow_releases: bool,
+    airflow_constraints_mode: str,
+    github_token: str | None,
+) -> tuple[list[str], dict[str, str]]:
+    all_airflow_versions_path = CONSTRAINTS_CACHE_PATH / "all_airflow_versions.json"
+    airflow_release_dates_path = CONSTRAINTS_CACHE_PATH / "airflow_release_dates.json"
+    if not all_airflow_versions_path.exists() or not airflow_release_dates_path.exists():
+        get_console().print(
+            "\n[warning]Airflow version cache does not exist. "
+            "Forcing refreshing constraints and airflow versions.[/]\n"
+        )
+        refresh_constraints_and_airflow_releases = True
+    if refresh_constraints_and_airflow_releases:
+        shutil.rmtree(CONSTRAINTS_CACHE_PATH, ignore_errors=True)
+    if not CONSTRAINTS_CACHE_PATH.exists():
+        if not github_token:
+            get_console().print(
+                "[error]You need to provide GITHUB_TOKEN to generate providers metadata.[/]\n\n"
+                "You can generate it with this URL: "
+                "Please set it to a valid GitHub token with public_repo scope. You can create one by clicking "
+                "the URL:\n\n"
+                "https://github.com/settings/tokens/new?scopes=public_repo&description=airflow-refresh-constraints\n\n"
+                "Once you have the token you can prepend prek command with GITHUB_TOKEN='<your token>' or"
+                "set it in your environment with export GITHUB_TOKEN='<your token>'\n\n"
+            )
+            sys.exit(1)
+        all_python_versions = ALL_HISTORICAL_PYTHON_VERSIONS
+        CONSTRAINTS_CACHE_PATH.mkdir(parents=True, exist_ok=True)
+        all_airflow_versions, airflow_release_dates = get_active_airflow_versions(confirm=False)
+        all_airflow_versions_path.write_text(json.dumps(all_airflow_versions, indent=2))
+        get_console().print(f"[info]All Airflow versions saved in: {all_airflow_versions_path}[/]")
+        airflow_release_dates_path.write_text(json.dumps(airflow_release_dates, indent=2))
+        get_console().print(f"[info]Airflow release dates saved in: {airflow_release_dates_path}[/]")
+        with ci_group("Downloading constraints for all Airflow versions for all historical Python versions"):
+            with Pool() as pool:
+                # We use partial to pass the common parameters to the function
+                get_constraints_for_python_version_partial = partial(
+                    get_constraints_for_python_version,
+                    airflow_constraints_mode=airflow_constraints_mode,
+                    all_airflow_versions=all_airflow_versions,
+                    github_token=github_token,
+                )
+                pool.map(get_constraints_for_python_version_partial, all_python_versions)
+    else:
+        get_console().print("[info]Retrieving airflow versions and using constraint files from cache.[/]")
+        all_airflow_versions = json.loads(all_airflow_versions_path.read_text())
+        airflow_release_dates = json.loads(airflow_release_dates_path.read_text())
+    return all_airflow_versions, airflow_release_dates
+
+
+def get_constraints_for_python_version(
+    python_version: str, airflow_constraints_mode: str, all_airflow_versions: list[str], github_token: str
+):
+    for airflow_version in all_airflow_versions:
+        if not download_constraints_file(
+            constraints_reference=f"constraints-{airflow_version}",
+            python_version=python_version,
+            github_token=github_token,
+            airflow_constraints_mode=airflow_constraints_mode,
+            output_file=CONSTRAINTS_CACHE_PATH / f"constraints-{airflow_version}-python-{python_version}.txt",
+        ):
+            get_console().print(
+                "[info]Could not download constraints for "
+                f"Airflow {airflow_version} and Python {python_version}[/]"
+            )
+
+
+MATCH_CONSTRAINTS_FILE_REGEX = re.compile(r"constraints-(.*)-python-(.*).txt")
+
+
+class PackageInfo(NamedTuple):
+    package_name: str
+    version: str
+
+
+class ConstraintsForPython(NamedTuple):
+    python_version: str
+    packages: dict[str, PackageInfo]
+
+
+class AirflowVersionConstraints(NamedTuple):
+    airflow_version: str
+    constraints_files: list[ConstraintsForPython]
+
+
+def load_constraints() -> dict[str, AirflowVersionConstraints]:
+    get_console().print("[info]Loading constraints for all Airflow versions[/]")
+    all_constraints: dict[str, AirflowVersionConstraints] = {}
+    for filename in sorted(CONSTRAINTS_CACHE_PATH.glob("constraints-*-python-*.txt")):
+        filename_match = MATCH_CONSTRAINTS_FILE_REGEX.match(filename.name)
+        if filename_match:
+            airflow_version = filename_match.group(1)
+            python_version = filename_match.group(2)
+            if airflow_version not in all_constraints:
+                airflow_version_constraints = AirflowVersionConstraints(
+                    airflow_version=airflow_version, constraints_files=[]
+                )
+                all_constraints[airflow_version] = airflow_version_constraints
+            else:
+                airflow_version_constraints = all_constraints[airflow_version]
+            package_dict: dict[str, PackageInfo] = {}
+            for line in filename.read_text().splitlines():
+                if line and not line.startswith("#"):
+                    package_name, version = line.split("==")
+                    package_dict[package_name] = PackageInfo(package_name=package_name, version=version)
+            airflow_version_constraints.constraints_files.append(
+                ConstraintsForPython(python_version=python_version, packages=package_dict)
+            )
+    get_console().print("[info]Constraints loaded[/]\n")
+    if get_verbose():
+        get_console().print("[info]All constraints loaded:\n")
+        for airflow_version, constraints in all_constraints.items():
+            get_console().print(f"[info]Airflow version: {airflow_version}[/]")
+            for constraints_file in constraints.constraints_files:
+                get_console().print(f"  Python version: {constraints_file.python_version}")
+    return all_constraints
+
+
 START_AIRFLOW_VERSION_FROM = "0.0.0"
 
 
-def generate_providers_metadata_for_package(
+def generate_providers_metadata_for_provider(
     provider_id: str,
-    constraints: dict[str, dict[str, str]],
+    provider_version: str | None,
+    constraints: dict[str, AirflowVersionConstraints],
     all_airflow_releases: list[str],
     airflow_release_dates: dict[str, str],
+    current_metadata: dict[str, dict[str, dict[str, str]]],
 ) -> dict[str, dict[str, str]]:
     get_console().print(f"[info]Generating metadata for {provider_id}")
     provider_yaml_dict = get_provider_distributions_metadata().get(provider_id)
     provider_metadata: dict[str, dict[str, str]] = {}
-    last_airflow_version = START_AIRFLOW_VERSION_FROM
     package_name = "apache-airflow-providers-" + provider_id.replace(".", "-")
-    provider_mentioned_in_constraints = False
-    for provider_version in reversed(provider_yaml_dict["versions"]):
-        date_released = get_tag_date(
-            tag="providers-" + provider_id.replace(".", "-") + "/" + provider_version
+    provider_versions = list(reversed(provider_yaml_dict["versions"]))
+    provider_metadata_found = False
+    if get_verbose():
+        get_console().print(f"[info]Provider {provider_id} versions:")
+        get_console().print(provider_versions)
+    if provider_version and provider_version not in provider_versions:
+        get_console().print(
+            f"[error]Provider {provider_id} version {provider_version} is not in the list of versions: "
+            f"{provider_versions}. Skipping it."
         )
-        if not date_released:
+        sys.exit(1)
+    old_provider_metadata = current_metadata.get(provider_id, {})
+    for current_provider_version in provider_versions:
+        if provider_version and current_provider_version != provider_version:
             continue
+        exact_provider_version_found_in_constraints = False
+        provider_date_released = get_tag_date(
+            tag="providers-" + provider_id.replace(".", "-") + "/" + current_provider_version
+        )
+        if not provider_date_released:
+            continue
+        if get_verbose():
+            get_console().print(
+                f"[info]Checking provider {provider_id} version {current_provider_version} released on {provider_date_released}"
+            )
+        airflow_date_released = airflow_release_dates[all_airflow_releases[0]]
+        last_airflow_version = START_AIRFLOW_VERSION_FROM
         for airflow_version in all_airflow_releases:
-            if constraints[airflow_version].get(package_name) == provider_version:
-                last_airflow_version = airflow_version
-                provider_mentioned_in_constraints = True
+            airflow_date_released = airflow_release_dates[airflow_version]
+            if get_verbose():
+                get_console().print(
+                    f"[info]Checking airflow_version {airflow_version} released on {airflow_date_released}"
+                )
+            for python_version_constraint_file in constraints[airflow_version].constraints_files:
+                if get_verbose():
+                    get_console().print(
+                        f"[info]Checking constraints for Python {python_version_constraint_file.python_version}"
+                    )
+                package_info = python_version_constraint_file.packages.get(package_name)
+                if not package_info:
+                    if get_verbose():
+                        get_console().print(
+                            f"[info]Package {package_name} not found in constraints for Airflow {airflow_version} "
+                            f"and Python version {python_version_constraint_file.python_version}"
+                        )
+                else:
+                    if get_verbose():
+                        get_console().print(
+                            f"[info]Package {package_name} found in constraints for Airflow {airflow_version} "
+                            f"and Python version {python_version_constraint_file.python_version}: {package_info}"
+                        )
+                if package_info and package_info.version == current_provider_version:
+                    last_airflow_version = airflow_version
+                    exact_provider_version_found_in_constraints = True
+                    if get_verbose():
+                        get_console().print(
+                            f"[success]Package {package_name} in version {current_provider_version} "
+                            f"found in constraints for Airflow {airflow_version} and "
+                            f"Python version {python_version_constraint_file.python_version}"
+                        )
+                    break
+                if (
+                    airflow_date_released > provider_date_released
+                    and last_airflow_version == START_AIRFLOW_VERSION_FROM
+                ):
+                    # released before first Airflow version so it should be associated with the
+                    # first "real" Airflow version released after it - but in case it was actually
+                    # mentioned later in constraints, we will override it later
+                    last_airflow_version = airflow_version
+                    if get_verbose():
+                        get_console().print(
+                            f"[warning]Provider {provider_id} version {current_provider_version} released on "
+                            f"{provider_date_released} could be associated with {airflow_version} that "
+                            f"was released on {airflow_date_released}. Setting it as candidate."
+                        )
+            if exact_provider_version_found_in_constraints:
                 break
-            if (
-                airflow_release_dates[airflow_version] > date_released
-                and last_airflow_version == START_AIRFLOW_VERSION_FROM
-            ):
-                last_airflow_version = airflow_version
-        provider_metadata[provider_version] = {
+        if last_airflow_version == START_AIRFLOW_VERSION_FROM:
+            # If we did not find any Airflow version that is associated with this provider version
+            # we will not include it in the metadata
+            get_console().print(
+                f"[warning]Provider {provider_id} version {current_provider_version} released on {provider_date_released} "
+                f"is NOT associated with any Airflow version in constraints. Skipping it."
+            )
+            continue
+        old_provider_metadata_for_version = old_provider_metadata.get(current_provider_version, {})
+        new_provider_metadata_for_version = {
             "associated_airflow_version": last_airflow_version,
-            "date_released": date_released,
+            "date_released": provider_date_released,
         }
-    if not provider_mentioned_in_constraints:
+        provider_metadata[current_provider_version] = new_provider_metadata_for_version
+        provider_version_metadata_changed_or_added = False
+        if old_provider_metadata_for_version:
+            if (
+                old_provider_metadata_for_version["associated_airflow_version"] != last_airflow_version
+                or old_provider_metadata_for_version["date_released"] != provider_date_released
+            ):
+                get_console().print(
+                    f"[warning]Old provider metadata for {provider_id} version {current_provider_version} "
+                    f"released on {provider_date_released} differs: "
+                    f"Old metadata: {old_provider_metadata_for_version}. "
+                    f"New metadata: {new_provider_metadata_for_version}."
+                )
+                provider_version_metadata_changed_or_added = True
+        else:
+            provider_version_metadata_changed_or_added = True
+        if exact_provider_version_found_in_constraints:
+            provider_metadata_found = True
+            if get_verbose() or provider_version_metadata_changed_or_added:
+                get_console().print(
+                    f"[success]Provider {provider_id} version {current_provider_version} released on {provider_date_released} "
+                    f"is associated with Airflow {last_airflow_version} released on {airflow_date_released}"
+                )
+        else:
+            if get_verbose() or provider_version_metadata_changed_or_added:
+                get_console().print(
+                    f"[warning]Provider {provider_id} version {current_provider_version} released on {provider_date_released} "
+                    f"was not mentioned in any Airflow version in constraints. Assuming {last_airflow_version} "
+                    f"released on {airflow_date_released} that was released after it."
+                )
+            provider_metadata_found = True
+    if not provider_metadata_found:
         get_console().print(
-            f"[warning]No constraints mention {provider_id} in any Airflow version. Skipping it altogether."
+            f"[warning]No constraints mention {provider_id} in any Airflow version in any Python version. "
+            f"Skipping it altogether."
         )
         return {}
+    if get_verbose():
+        get_console().print(f"[success]Metadata for {provider_id} found:\n")
+        get_console().print(provider_metadata)
     return provider_metadata
diff --git a/dev/breeze/src/airflow_breeze/utils/publish_docs_to_s3.py b/dev/breeze/src/airflow_breeze/utils/publish_docs_to_s3.py
index 865dc5889b0..4c315bbbe87 100644
--- a/dev/breeze/src/airflow_breeze/utils/publish_docs_to_s3.py
+++ b/dev/breeze/src/airflow_breeze/utils/publish_docs_to_s3.py
@@ -22,7 +22,6 @@ import subprocess
 import sys
 from functools import cached_property
 
-import awswrangler as wr
 import boto3
 
 from airflow_breeze.global_constants import PACKAGES_METADATA_EXCLUDE_NAMES
@@ -219,7 +218,7 @@ class S3DocsPublish:
 
         check_async_run_results(
             results=results,
-            success="All docs published successfully",
+            success_message="All docs published successfully",
             outputs=outputs,
             include_success_outputs=False,
         )
@@ -234,6 +233,18 @@ class S3DocsPublish:
             if destination.endswith("stable/")
         ]
 
+    def list_s3_directories(self, s3_path: str) -> list[str]:
+        """
+        List 'directories' (prefixes) in an S3 path using boto3.
+        """
+        bucket, prefix = self.get_bucket_key(s3_path.rstrip("/"))
+        paginator = s3_client.get_paginator("list_objects_v2")
+        result = []
+        for page in paginator.paginate(Bucket=bucket, Prefix=prefix + "/", Delimiter="/"):
+            for cp in page.get("CommonPrefixes", []):
+                result.append(f"s3://{bucket}/" + cp["Prefix"])
+        return result
+
     def generate_packages_metadata(self):
         get_console().print("[info]Generating packages-metadata.json file\n")
 
@@ -243,20 +254,17 @@ class S3DocsPublish:
 
         package_versions_map = {}
         s3_docs_path = self.destination_location.rstrip("/") + "/"
-        resp = wr.s3.list_directories(s3_docs_path)
+        resp = self.list_s3_directories(s3_docs_path)
 
-        # package_path: s3://staging-docs-airflow-apache-org/docs/apache-airflow-providers-apache-cassandra/
         for package_path in resp:
             package_name = package_path.replace(s3_docs_path, "").rstrip("/")
 
             if package_name in PACKAGES_METADATA_EXCLUDE_NAMES:
                 continue
 
-            # version_path: s3://staging-docs-airflow-apache-org/docs/apache-airflow-providers-apache-cassandra/1.0.0/
-
             versions = [
                 version_path.replace(package_path, "").rstrip("/")
-                for version_path in wr.s3.list_directories(package_path)
+                for version_path in self.list_s3_directories(package_path)
                 if version_path.replace(package_path, "").rstrip("/") != "stable"
             ]
             package_versions_map[package_name] = versions
@@ -265,9 +273,6 @@ class S3DocsPublish:
 
         bucket, _ = self.get_bucket_key(self.destination_location)
 
-        # We keep metadata in the same location with constant file name so that
-        # its easy to reference in airflow-site with url
-        # ex: https://staging-docs-airflow-apache-org.s3.us-east-2.amazonaws.com/manifest/packages-metadata.json
         get_console().print("[info]Uploading packages-metadata.json to S3\n")
         s3_client.put_object(
             Bucket=bucket,
@@ -280,7 +285,6 @@ class S3DocsPublish:
         get_console().print(
             f"[info]Invalidating CloudFront cache for the uploaded files: distribution id {distribution_id}\n"
         )
-        # We invalidate all CloudFront caches so that all uploaded files are available immediately
         cloudfront_client.create_invalidation(
             DistributionId=distribution_id,
             InvalidationBatch={
diff --git a/dev/breeze/src/airflow_breeze/utils/reinstall.py b/dev/breeze/src/airflow_breeze/utils/reinstall.py
index 2df1f067cb1..2c2c3298b8c 100644
--- a/dev/breeze/src/airflow_breeze/utils/reinstall.py
+++ b/dev/breeze/src/airflow_breeze/utils/reinstall.py
@@ -80,7 +80,7 @@ def reinstall_breeze(breeze_sources: Path, re_run: bool = True):
 
     if re_run:
         # Make sure we don't loop forever if the metadata hash hasn't been updated yet (else it is tricky to
-        # run pre-commit checks via breeze!)
+        # run prek checks via breeze!)
         os.environ["SKIP_BREEZE_SELF_UPGRADE_CHECK"] = "true"
         os.execl(sys.executable, sys.executable, *sys.argv)
     get_console().print(f"\n[info]Breeze has been reinstalled from {breeze_sources}. Exiting now.[/]\n\n")
diff --git a/dev/breeze/src/airflow_breeze/utils/reproducible.py b/dev/breeze/src/airflow_breeze/utils/reproducible.py
index bc8e9f1bc78..dce8756ae4a 100644
--- a/dev/breeze/src/airflow_breeze/utils/reproducible.py
+++ b/dev/breeze/src/airflow_breeze/utils/reproducible.py
@@ -123,7 +123,7 @@ def repack_deterministically(
         temp_file = f"{dest_archive}.temp~"
         with os.fdopen(os.open(temp_file, os.O_WRONLY | os.O_CREAT, 0o644), "wb") as out_file:
             with gzip.GzipFile(fileobj=out_file, mtime=0, mode="wb") as gzip_file:
-                with tarfile.open(fileobj=gzip_file, mode="w:") as tar_file:  # type: ignore
+                with tarfile.open(fileobj=gzip_file, mode="w:") as tar_file:  # type: ignore [arg-type]
                     for entry in file_list:
                         entry_path = Path(entry)
                         if not entry_path.is_symlink():
diff --git a/dev/breeze/src/airflow_breeze/utils/run_tests.py b/dev/breeze/src/airflow_breeze/utils/run_tests.py
index 62f9463257c..b38dfe4561f 100644
--- a/dev/breeze/src/airflow_breeze/utils/run_tests.py
+++ b/dev/breeze/src/airflow_breeze/utils/run_tests.py
@@ -43,6 +43,10 @@ DOCKER_TESTS_ROOT_PATH = AIRFLOW_ROOT_PATH / "docker-tests"
 DOCKER_TESTS_TESTS_MODULE_PATH = DOCKER_TESTS_ROOT_PATH / "tests" / "docker_tests"
 DOCKER_TESTS_REQUIREMENTS = DOCKER_TESTS_ROOT_PATH / "requirements.txt"
 
+TASK_SDK_TESTS_ROOT_PATH = AIRFLOW_ROOT_PATH / "task-sdk-tests"
+TASK_SDK_TESTS_TESTS_MODULE_PATH = TASK_SDK_TESTS_ROOT_PATH / "tests" / "task_sdk_tests"
+TASK_SDK_TESTS_REQUIREMENTS = TASK_SDK_TESTS_ROOT_PATH / "requirements.txt"
+
 IGNORE_DB_INIT_FOR_TEST_GROUPS = [
     GroupOfTests.HELM,
     GroupOfTests.PYTHON_API_CLIENT,
@@ -96,13 +100,21 @@ def run_docker_compose_tests(
     extra_pytest_args: tuple,
     skip_docker_compose_deletion: bool,
     include_success_outputs: bool,
+    test_type: str = "docker-compose",
 ) -> tuple[int, str]:
     command_result = run_command(["docker", "inspect", image_name], check=False, stdout=DEVNULL)
     if command_result.returncode != 0:
         get_console().print(f"[error]Error when inspecting PROD image: {command_result.returncode}[/]")
-        return command_result.returncode, f"Testing docker-compose python with {image_name}"
+        return command_result.returncode, f"Testing {test_type} python with {image_name}"
     pytest_args = ("--color=yes",)
-    test_path = Path("tests") / "docker_tests" / "test_docker_compose_quick_start.py"
+
+    if test_type == "task-sdk-integration":
+        test_path = Path("tests") / "task_sdk_tests" / "test_task_sdk_health.py"
+        cwd = TASK_SDK_TESTS_ROOT_PATH.as_posix()
+    else:
+        test_path = Path("tests") / "docker_tests" / "test_docker_compose_quick_start.py"
+        cwd = DOCKER_TESTS_ROOT_PATH.as_posix()
+
     env = os.environ.copy()
     env["DOCKER_IMAGE"] = image_name
     if skip_docker_compose_deletion:
@@ -114,9 +126,9 @@ def run_docker_compose_tests(
         ["uv", "run", "pytest", str(test_path), "-s", *pytest_args, *extra_pytest_args],
         env=env,
         check=False,
-        cwd=DOCKER_TESTS_ROOT_PATH.as_posix(),
+        cwd=cwd,
     )
-    return command_result.returncode, f"Testing docker-compose python with {image_name}"
+    return command_result.returncode, f"Testing {test_type} python with {image_name}"
 
 
 def file_name_from_test_type(test_type: str):
@@ -134,22 +146,33 @@ def test_paths(test_type: str, backend: str) -> tuple[str, str, str]:
 
 
 def get_ignore_switches_for_provider(provider_folders: list[str]) -> list[str]:
-    args = []
-    for providers in provider_folders:
-        args.append(f"--ignore=providers/{providers}/tests/")
-    return args
+    return [f"--ignore=providers/{providers}/tests" for providers in provider_folders]
+
 
+def get_test_folders(provider_folders: list[str]) -> list[str]:
+    return [f"providers/{providers}/tests" for providers in provider_folders]
 
-def get_suspended_provider_args() -> list[str]:
+
+def get_suspended_provider_ignore_args() -> list[str]:
     suspended_folders = get_suspended_provider_folders()
     return get_ignore_switches_for_provider(suspended_folders)
 
 
-def get_excluded_provider_args(python_version: str) -> list[str]:
+def get_excluded_provider_ignore_args(python_version: str) -> list[str]:
     excluded_folders = get_excluded_provider_folders(python_version)
     return get_ignore_switches_for_provider(excluded_folders)
 
 
+def get_suspended_test_provider_folders() -> list[str]:
+    suspended_folders = get_suspended_provider_folders()
+    return get_test_folders(suspended_folders)
+
+
+def get_excluded_test_provider_folders(python_version: str) -> list[str]:
+    excluded_folders = get_excluded_provider_folders(python_version)
+    return get_test_folders(excluded_folders)
+
+
 TEST_TYPE_CORE_MAP_TO_PYTEST_ARGS: dict[str, list[str]] = {
     "Always": ["airflow-core/tests/unit/always"],
     "API": ["airflow-core/tests/unit/api", "airflow-core/tests/unit/api_fastapi"],
@@ -413,8 +436,22 @@ def generate_args_for_pytest(
         args.append("--without-db-init")
     if test_group == GroupOfTests.PYTHON_API_CLIENT:
         args.append("--ignore-glob=clients/python/tmp/*")
-    args.extend(get_suspended_provider_args())
-    args.extend(get_excluded_provider_args(python_version))
+    args.extend(get_suspended_provider_ignore_args())
+    args.extend(get_excluded_provider_ignore_args(python_version))
+    suspended_test_folders = get_suspended_test_provider_folders()
+    if suspended_test_folders:
+        get_console().print(f"[info]Suspended test folders to remove: {suspended_test_folders}[/]")
+        for suspended_test_folder in suspended_test_folders:
+            if suspended_test_folder in args:
+                get_console().print(f"[warning]Removing {suspended_test_folder}[/]")
+                args.remove(suspended_test_folder)
+    excluded_test_folders = get_excluded_test_provider_folders(python_version)
+    if excluded_test_folders:
+        get_console().print(f"[info]Excluded test folders to remove: {excluded_test_folders}[/]")
+        for excluded_test_folder in excluded_test_folders:
+            if excluded_test_folder in args:
+                get_console().print(f"[warning]Removing {excluded_test_folder}[/]")
+                args.remove(excluded_test_folder)
     if use_xdist:
         args.extend(["-n", str(parallelism) if parallelism else "auto"])
     # We have to disable coverage for Python 3.12 because of the issue with coverage that takes too long, despite
@@ -422,7 +459,7 @@ def generate_args_for_pytest(
     # full scope of PEP-669. That will be fully done when https://github.com/nedbat/coveragepy/issues/1746 is
     # resolve for now we are disabling coverage for Python 3.12, and it causes slower execution and occasional
     # timeouts
-    if enable_coverage and python_version != "3.12":
+    if enable_coverage and python_version not in ["3.12", "3.13"]:
         args.extend(
             [
                 "--cov=airflow",
@@ -457,7 +494,7 @@ def convert_parallel_types_to_folders(test_group: GroupOfTests, parallel_test_ty
             )
         )
     all_test_prefixes: list[str] = []
-    # leave only folders, strip --pytest-args that exclude some folders with `-' prefix
+    # leave only folders, strip --pytest-args that exclude some folders with `-` prefix
     for group_folders in TEST_GROUP_TO_TEST_FOLDERS.values():
         for group_folder in group_folders:
             all_test_prefixes.append(group_folder)
diff --git a/dev/breeze/src/airflow_breeze/utils/run_utils.py b/dev/breeze/src/airflow_breeze/utils/run_utils.py
index a60b6cf6814..50fe4924e44 100644
--- a/dev/breeze/src/airflow_breeze/utils/run_utils.py
+++ b/dev/breeze/src/airflow_breeze/utils/run_utils.py
@@ -30,7 +30,8 @@ import subprocess
 import sys
 from collections.abc import Mapping
 from pathlib import Path
-from typing import Union
+from subprocess import CalledProcessError, CompletedProcess
+from typing import Any, Union
 
 from rich.markup import escape
 
@@ -48,7 +49,8 @@ from airflow_breeze.utils.path_utils import (
 )
 from airflow_breeze.utils.shared_options import get_dry_run, get_verbose
 
-RunCommandResult = Union[subprocess.CompletedProcess, subprocess.CalledProcessError]
+# RunCommandResult = type[subprocess.CompletedProcess] | type[subprocess.CalledProcessError]
+RunCommandResult = Union[CompletedProcess[Any], CalledProcessError]
 
 OPTION_MATCHER = re.compile(r"^[A-Z_]*=.*$")
 
@@ -82,7 +84,7 @@ def run_command(
 
     :param cmd: command to run
     :param title: optional title for the command (otherwise likely title is automatically determined)
-    :param check: whether to check status value and run exception (same as POpem)
+    :param check: whether to check status value and run exception (same as Popen)
     :param no_output_dump_on_exception: whether to suppress printing logs from output when command fails
     :param env: mapping of environment variables to set for the run command
     :param cwd: working directory to set for the command
@@ -143,7 +145,7 @@ def run_command(
             kwargs["stdout"] = subprocess.DEVNULL
             kwargs["stderr"] = subprocess.DEVNULL
         return subprocess.run(cmd, input=input, check=check, env=cmd_env, cwd=workdir, **kwargs)
-    with ci_group(title=f"Running command: {title}", message_type=None):
+    with ci_group(f"Running command: {title}"):
         get_console(output=output).print(f"\n[info]Working directory {workdir}\n")
         if input:
             get_console(output=output).print("[info]Input:")
@@ -202,73 +204,59 @@ def get_environments_to_print(env: Mapping[str, str] | None):
     return env_to_print
 
 
-def assert_pre_commit_installed():
+def assert_prek_installed():
     """
-    Check if pre-commit is installed in the right version.
+    Check if prek is installed in the right version.
 
-    :return: True is the pre-commit is installed in the right version.
+    :return: True is the prek is installed in the right version.
     """
     # Local import to make autocomplete work
     import yaml
     from packaging.version import Version
 
-    pre_commit_config = yaml.safe_load((AIRFLOW_ROOT_PATH / ".pre-commit-config.yaml").read_text())
-    min_pre_commit_version = pre_commit_config["minimum_pre_commit_version"]
+    prek_config = yaml.safe_load((AIRFLOW_ROOT_PATH / ".pre-commit-config.yaml").read_text())
+    min_prek_version = prek_config["minimum_prek_version"]
 
     python_executable = sys.executable
-    get_console().print(f"[info]Checking pre-commit installed for {python_executable}[/]")
-    need_to_reinstall_precommit = False
+    get_console().print(f"[info]Checking prek installed for {python_executable}[/]")
+    need_to_reinstall_prek = False
     try:
         command_result = run_command(
-            ["pre-commit", "--version"],
+            ["prek", "--version"],
             capture_output=True,
             text=True,
             check=False,
         )
         if command_result.returncode == 0:
             if command_result.stdout:
-                pre_commit_version = command_result.stdout.split(" ")[1].strip()
-                if Version(pre_commit_version) >= Version(min_pre_commit_version):
+                prek_version = command_result.stdout.split(" ")[1].strip()
+                if Version(prek_version) >= Version(min_prek_version):
                     get_console().print(
-                        f"\n[success]Package pre_commit is installed. "
-                        f"Good version {pre_commit_version} (>= {min_pre_commit_version})[/]\n"
+                        f"\n[success]Package prek is installed. "
+                        f"Good version {prek_version} (>= {min_prek_version})[/]\n"
                     )
                 else:
                     get_console().print(
-                        f"\n[error]Package name pre_commit version is wrong. It should be "
-                        f"at least {min_pre_commit_version} and is {pre_commit_version}.[/]\n\n"
+                        f"\n[error]Package name prek version is wrong. It should be "
+                        f"at least {min_prek_version} and is {prek_version}.[/]\n\n"
                     )
                     sys.exit(1)
-                if "pre-commit-uv" not in command_result.stdout:
-                    get_console().print(
-                        "\n[warning]You can significantly improve speed of installing your pre-commit envs "
-                        "by installing `pre-commit-uv` with it.[/]\n"
-                    )
-                    get_console().print(
-                        "\n[warning]With uv you can install it with:[/]\n\n"
-                        "        uv tool install pre-commit --with pre-commit-uv --force-reinstall\n"
-                    )
-                    get_console().print(
-                        "\n[warning]With pipx you can install it with:[/]\n\n"
-                        "        pipx inject pre-commit pre-commit-uv # optionally if you want to use uv to "
-                        "install virtualenvs\n"
-                    )
             else:
                 get_console().print(
-                    "\n[warning]Could not determine version of pre-commit. You might need to update it![/]\n"
+                    "\n[warning]Could not determine version of prek. You might need to update it![/]\n"
                 )
         else:
-            need_to_reinstall_precommit = True
-            get_console().print("\n[error]Error checking for pre-commit-installation:[/]\n")
+            need_to_reinstall_prek = True
+            get_console().print("\n[error]Error checking for prek-installation:[/]\n")
             get_console().print(command_result.stderr)
     except FileNotFoundError as e:
-        need_to_reinstall_precommit = True
-        get_console().print(f"\n[error]Error checking for pre-commit-installation: [/]\n{e}\n")
-    if need_to_reinstall_precommit:
-        get_console().print("[info]Make sure to install pre-commit. For example by running:\n")
-        get_console().print("   uv tool install pre-commit --with pre-commit-uv\n")
+        need_to_reinstall_prek = True
+        get_console().print(f"\n[error]Error checking for prek installation: [/]\n{e}\n")
+    if need_to_reinstall_prek:
+        get_console().print("[info]Make sure to install prek. For example by running:\n")
+        get_console().print("   uv tool install prek\n")
         get_console().print("Or if you prefer pipx:\n")
-        get_console().print("   pipx install pre-commit")
+        get_console().print("   pipx install prek")
         sys.exit(1)
 
 
@@ -477,7 +465,7 @@ def run_compile_ui_assets(
             "[info]However, it requires you to have local pnpm installation.\n"
         )
     command_to_execute = [
-        "pre-commit",
+        "prek",
         "run",
         "--hook-stage",
         "manual",
diff --git a/dev/breeze/src/airflow_breeze/utils/selective_checks.py b/dev/breeze/src/airflow_breeze/utils/selective_checks.py
index 336fa184652..1ff4a76a9d6 100644
--- a/dev/breeze/src/airflow_breeze/utils/selective_checks.py
+++ b/dev/breeze/src/airflow_breeze/utils/selective_checks.py
@@ -124,6 +124,7 @@ class FileGroupForCi(Enum):
     TESTS_UTILS_FILES = "test_utils_files"
     ASSET_FILES = "asset_files"
     UNIT_TEST_FILES = "unit_test_files"
+    DEVEL_TOML_FILES = "devel_toml_files"
 
 
 class AllProvidersSentinel:
@@ -295,6 +296,9 @@ CI_FILE_GROUP_MATCHES = HashableDict(
             r"^airflow-ctl/src/airflowctl/.*\.py$",
             r"^airflow-ctl/tests/.*\.py$",
         ],
+        FileGroupForCi.DEVEL_TOML_FILES: [
+            r"^devel-common/pyproject\.toml$",
+        ],
     }
 )
 
@@ -705,6 +709,17 @@ class SelectiveChecks:
     @cached_property
     def mypy_checks(self) -> list[str]:
         checks_to_run: list[str] = []
+        if (
+            self._matching_files(FileGroupForCi.DEVEL_TOML_FILES, CI_FILE_GROUP_MATCHES)
+            and self._default_branch == "main"
+        ):
+            return [
+                "mypy-airflow-core",
+                "mypy-providers",
+                "mypy-dev",
+                "mypy-task-sdk",
+                "mypy-devel-common",
+            ]
         if (
             self._matching_files(FileGroupForCi.ALL_AIRFLOW_PYTHON_FILES, CI_FILE_GROUP_MATCHES)
             or self.full_tests_needed
@@ -733,11 +748,6 @@ class SelectiveChecks:
             or self.full_tests_needed
         ):
             checks_to_run.append("mypy-devel-common")
-        if (
-            self._matching_files(FileGroupForCi.ALL_AIRFLOW_CTL_PYTHON_FILES, CI_FILE_GROUP_MATCHES)
-            or self.full_tests_needed
-        ):
-            checks_to_run.append("mypy-airflow-ctl")
         return checks_to_run
 
     @cached_property
@@ -1177,29 +1187,28 @@ class SelectiveChecks:
         return " ".join(packages)
 
     @cached_property
-    def skip_pre_commits(self) -> str:
-        pre_commits_to_skip = set()
-        pre_commits_to_skip.add("identity")
+    def skip_prek_hooks(self) -> str:
+        prek_hooks_to_skip = set()
+        prek_hooks_to_skip.add("identity")
         # Skip all mypy "individual" file checks if we are running mypy checks in CI
         # In the CI we always run mypy for the whole "package" rather than for `--all-files` because
-        # The pre-commit will semi-randomly skip such list of files into several groups and we want
+        # The prek will semi-randomly skip such list of files into several groups and we want
         # to make sure that such checks are always run in CI for whole "group" of files - i.e.
         # whole package rather than for individual files. That's why we skip those checks in CI
         # and run them via `mypy-all` command instead and dedicated CI job in matrix
         # This will also speed up static-checks job usually as the jobs will be running in parallel
-        pre_commits_to_skip.update(
+        prek_hooks_to_skip.update(
             {
                 "mypy-providers",
                 "mypy-airflow-core",
                 "mypy-dev",
                 "mypy-task-sdk",
-                "mypy-airflow-ctl",
                 "mypy-devel-common",
             }
         )
         if self._default_branch != "main":
             # Skip those tests on all "release" branches
-            pre_commits_to_skip.update(
+            prek_hooks_to_skip.update(
                 (
                     "compile-fab-assets",
                     "generate-openapi-spec-fab",
@@ -1217,21 +1226,21 @@ class SelectiveChecks:
 
         if self.full_tests_needed:
             # when full tests are needed, we do not want to skip any checks and we should
-            # run all the pre-commits just to be sure everything is ok when some structural changes occurred
-            return ",".join(sorted(pre_commits_to_skip))
+            # run all the prek hooks just to be sure everything is ok when some structural changes occurred
+            return ",".join(sorted(prek_hooks_to_skip))
         if not (
             self._matching_files(FileGroupForCi.UI_FILES, CI_FILE_GROUP_MATCHES)
             or self._matching_files(FileGroupForCi.API_CODEGEN_FILES, CI_FILE_GROUP_MATCHES)
         ):
-            pre_commits_to_skip.add("ts-compile-lint-ui")
-            pre_commits_to_skip.add("ts-compile-lint-simple-auth-manager-ui")
+            prek_hooks_to_skip.add("ts-compile-lint-ui")
+            prek_hooks_to_skip.add("ts-compile-lint-simple-auth-manager-ui")
         if not self._matching_files(FileGroupForCi.ALL_PYTHON_FILES, CI_FILE_GROUP_MATCHES):
-            pre_commits_to_skip.add("flynt")
+            prek_hooks_to_skip.add("flynt")
         if not self._matching_files(
             FileGroupForCi.HELM_FILES,
             CI_FILE_GROUP_MATCHES,
         ):
-            pre_commits_to_skip.add("lint-helm-chart")
+            prek_hooks_to_skip.add("lint-helm-chart")
         if not (
             self._matching_files(
                 FileGroupForCi.ALL_PROVIDERS_DISTRIBUTION_CONFIG_FILES, CI_FILE_GROUP_MATCHES
@@ -1240,8 +1249,8 @@ class SelectiveChecks:
         ):
             # only skip provider validation if none of the provider.yaml and provider
             # python files changed because validation also walks through all the provider python files
-            pre_commits_to_skip.add("check-provider-yaml-valid")
-        return ",".join(sorted(pre_commits_to_skip))
+            prek_hooks_to_skip.add("check-provider-yaml-valid")
+        return ",".join(sorted(prek_hooks_to_skip))
 
     @cached_property
     def skip_providers_tests(self) -> bool:
diff --git a/dev/breeze/src/airflow_breeze/utils/workflow_status.py b/dev/breeze/src/airflow_breeze/utils/workflow_status.py
new file mode 100644
index 00000000000..4e24437d747
--- /dev/null
+++ b/dev/breeze/src/airflow_breeze/utils/workflow_status.py
@@ -0,0 +1,94 @@
+#!/usr/bin/env python3
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+# /// script
+# requires-python = ">=3.10"
+# dependencies = [
+#     "rich",
+# ]
+# ///
+from __future__ import annotations
+
+import json
+import os
+import subprocess
+import sys
+
+from rich.console import Console
+
+console = Console(width=400, color_system="standard")
+
+
+def workflow_status(
+    branch: str,
+    workflow_id: str,
+) -> list[dict]:
+    """Check the status of a GitHub Actions workflow run."""
+    cmd = [
+        "gh",
+        "run",
+        "list",
+        "--workflow",
+        workflow_id,
+        "--branch",
+        branch,
+        "--limit",
+        "1",  # Limit to the most recent run
+        "--repo",
+        "apache/airflow",
+        "--json",
+        "conclusion,url",
+    ]
+    result = subprocess.run(
+        cmd,
+        capture_output=True,
+        check=False,
+    )
+    if result.returncode != 0:
+        console.print(f"[red]Error fetching workflow run ID: {str(result.stderr)}[/red]")
+        sys.exit(1)
+
+    runs_data = result.stdout.strip()
+    if not runs_data:
+        console.print("[red]No workflow runs found.[/red]")
+        sys.exit(1)
+    run_info = json.loads(runs_data)
+    console.print(f"[blue]Workflow status for {workflow_id}: {run_info}[/blue]")
+    return run_info
+
+
+if __name__ == "__main__":
+    branch = os.environ.get("workflow_branch")
+    workflow_id = os.environ.get("workflow_id")
+
+    if not branch or not workflow_id:
+        console.print("[red]Both workflow-branch and workflow-id environment variables must be set.[/red]")
+        sys.exit(1)
+
+    console.print(f"[blue]Checking workflow status for branch: {branch}, workflow_id: {workflow_id}[/blue]")
+
+    data: list[dict] = workflow_status(branch, workflow_id)
+    conclusion = data[0].get("conclusion")
+    url = data[0].get("url")
+
+    if os.environ.get("GITHUB_OUTPUT") is None:
+        console.print("[red]GITHUB_OUTPUT environment variable is not set. Cannot write output.[/red]")
+        sys.exit(1)
+
+    with open(os.environ["GITHUB_OUTPUT"], "a") as f:
+        f.write(f"conclusion={conclusion}\n")
+        f.write(f"run-url={url}\n")
diff --git a/dev/breeze/tests/test_docker_command_utils.py b/dev/breeze/tests/test_docker_command_utils.py
index a50c0435263..37ecf0ee6f7 100644
--- a/dev/breeze/tests/test_docker_command_utils.py
+++ b/dev/breeze/tests/test_docker_command_utils.py
@@ -53,7 +53,7 @@ def test_check_docker_version_unknown(
     mock_get_console.return_value.print.assert_called_with(
         """
 [warning]Your version of docker is unknown. If the scripts fail, please make sure to[/]
-[warning]install docker at least: 24.0.0 version.[/]
+[warning]install docker at least: 25.0.0 version.[/]
 """
     )
 
@@ -81,7 +81,7 @@ def test_check_docker_version_too_low(
     )
     mock_get_console.return_value.print.assert_called_with(
         """
-[error]Your version of docker is too old: 0.9.\n[/]\n[warning]Please upgrade to at least 24.0.0.\n[/]\n\
+[error]Your version of docker is too old: 0.9.\n[/]\n[warning]Please upgrade to at least 25.0.0.\n[/]\n\
 You can find installation instructions here: https://docs.docker.com/engine/install/
 """
     )
@@ -93,7 +93,7 @@ You can find installation instructions here: https://docs.docker.com/engine/inst
 def test_check_docker_version_ok(mock_get_console, mock_run_command, mock_check_docker_permission_denied):
     mock_check_docker_permission_denied.return_value = False
     mock_run_command.return_value.returncode = 0
-    mock_run_command.return_value.stdout = "24.0.0"
+    mock_run_command.return_value.stdout = "25.0.0"
     check_docker_version()
     mock_check_docker_permission_denied.assert_called()
     mock_run_command.assert_called_with(
@@ -104,7 +104,7 @@ def test_check_docker_version_ok(mock_get_console, mock_run_command, mock_check_
         check=False,
         dry_run_override=False,
     )
-    mock_get_console.return_value.print.assert_called_with("[success]Good version of Docker: 24.0.0.[/]")
+    mock_get_console.return_value.print.assert_called_with("[success]Good version of Docker: 25.0.0.[/]")
 
 
 @mock.patch("airflow_breeze.utils.docker_command_utils.check_docker_permission_denied")
@@ -113,7 +113,7 @@ def test_check_docker_version_ok(mock_get_console, mock_run_command, mock_check_
 def test_check_docker_version_higher(mock_get_console, mock_run_command, mock_check_docker_permission_denied):
     mock_check_docker_permission_denied.return_value = False
     mock_run_command.return_value.returncode = 0
-    mock_run_command.return_value.stdout = "24.0.0"
+    mock_run_command.return_value.stdout = "25.0.0"
     check_docker_version()
     mock_check_docker_permission_denied.assert_called()
     mock_run_command.assert_called_with(
@@ -124,7 +124,7 @@ def test_check_docker_version_higher(mock_get_console, mock_run_command, mock_ch
         check=False,
         dry_run_override=False,
     )
-    mock_get_console.return_value.print.assert_called_with("[success]Good version of Docker: 24.0.0.[/]")
+    mock_get_console.return_value.print.assert_called_with("[success]Good version of Docker: 25.0.0.[/]")
 
 
 @mock.patch("airflow_breeze.utils.docker_command_utils.check_docker_permission_denied")
@@ -135,7 +135,7 @@ def test_check_docker_version_higher_rancher_desktop(
 ):
     mock_check_docker_permission_denied.return_value = False
     mock_run_command.return_value.returncode = 0
-    mock_run_command.return_value.stdout = "24.0.0-rd"
+    mock_run_command.return_value.stdout = "25.0.0-rd"
     check_docker_version()
     mock_check_docker_permission_denied.assert_called()
     mock_run_command.assert_called_with(
@@ -146,7 +146,7 @@ def test_check_docker_version_higher_rancher_desktop(
         check=False,
         dry_run_override=False,
     )
-    mock_get_console.return_value.print.assert_called_with("[success]Good version of Docker: 24.0.0-r.[/]")
+    mock_get_console.return_value.print.assert_called_with("[success]Good version of Docker: 25.0.0-r.[/]")
 
 
 @mock.patch("airflow_breeze.utils.docker_command_utils.run_command")
diff --git a/dev/breeze/tests/test_provider_documentation.py b/dev/breeze/tests/test_provider_documentation.py
index 6ff67e267d3..7502f449fd9 100644
--- a/dev/breeze/tests/test_provider_documentation.py
+++ b/dev/breeze/tests/test_provider_documentation.py
@@ -398,9 +398,21 @@ def test_get_most_impactful_change(changes, expected):
     "provider_id, changed_files, expected",
     [
         pytest.param("slack", ["providers/slack/docs/slack.rst"], "documentation", id="only_docs"),
+        pytest.param(
+            "apache.flink",
+            ["providers/apache/flink/docs/slack.rst"],
+            "documentation",
+            id="only_docs_longer_path",
+        ),
         pytest.param(
             "slack", ["providers/slack/tests/test_slack.py"], "test_or_example_only", id="only_tests"
         ),
+        pytest.param(
+            "apache.flink",
+            ["providers/apache/flink/tests/unit/apache/flink/sensors/test_flink_kubernetes.py"],
+            "test_or_example_only",
+            id="only_tests_longer_path",
+        ),
         pytest.param(
             "slack",
             ["providers/slack/src/airflow/providers/slack/example_dags/example_notify.py"],
@@ -429,19 +441,20 @@ def test_get_most_impactful_change(changes, expected):
             "slack",
             [
                 "providers/slack/src/airflow/providers/slack/hooks/slack.py",
-                "providers/slack/docs/slack.rst",
+                "providers/slack/tests/test_slack.py",
             ],
-            "documentation",
-            id="docs_and_real_code",
+            "other",
+            id="real_code_and_tests",
         ),
         pytest.param(
             "slack",
             [
                 "providers/slack/src/airflow/providers/slack/hooks/slack.py",
                 "providers/slack/tests/test_slack.py",
+                "providers/slack/docs/slack.rst",
             ],
             "other",
-            id="real_code_and_tests",
+            id="docs_and_real_code",
         ),
         pytest.param(
             "google",
diff --git a/dev/breeze/tests/test_run_test_args.py b/dev/breeze/tests/test_run_test_args.py
index 1c409670f3d..446d49fe0dd 100644
--- a/dev/breeze/tests/test_run_test_args.py
+++ b/dev/breeze/tests/test_run_test_args.py
@@ -86,7 +86,8 @@ def test_irregular_provider_with_extra_ignore_should_be_valid_cmd(mock_run_comma
     # positional arg of the command call
     run_cmd_call = mock_run_command.call_args_list[1]
     arg_str = " ".join(run_cmd_call.args[0])
-    assert f"--ignore=providers/{fake_provider_name}/tests/ " in arg_str
+    assert f"--ignore=providers/{fake_provider_name}/tests " in arg_str
+    assert f"providers/{fake_provider_name}/tests" not in arg_str.split(" ")
 
 
 def test_test_is_skipped_if_all_are_ignored(mock_run_command):
diff --git a/dev/breeze/tests/test_selective_checks.py b/dev/breeze/tests/test_selective_checks.py
index 7c258a13bef..4b21b7d652b 100644
--- a/dev/breeze/tests/test_selective_checks.py
+++ b/dev/breeze/tests/test_selective_checks.py
@@ -16,7 +16,6 @@
 # under the License.
 from __future__ import annotations
 
-import itertools
 import json
 import re
 from typing import Any
@@ -54,21 +53,15 @@ ALL_KUBERNETES_VERSIONS_AS_LIST = "[" + ", ".join([f"'{v}'" for v in ALLOWED_KUB
 ALL_PYTHON_VERSIONS_AS_STRING = " ".join(ALLOWED_PYTHON_MAJOR_MINOR_VERSIONS)
 ALL_PYTHON_VERSIONS_AS_LIST = "[" + ", ".join([f"'{v}'" for v in ALLOWED_PYTHON_MAJOR_MINOR_VERSIONS]) + "]"
 
+PYTHON_K8S_COMBO_LENGTH = max(len(ALLOWED_PYTHON_MAJOR_MINOR_VERSIONS), len(ALLOWED_KUBERNETES_VERSIONS))
+PYTHON_VERSIONS_MAX = (ALLOWED_PYTHON_MAJOR_MINOR_VERSIONS * 2)[:PYTHON_K8S_COMBO_LENGTH]
+KUBERNETES_VERSIONS_MAX = (ALLOWED_KUBERNETES_VERSIONS * 2)[:PYTHON_K8S_COMBO_LENGTH]
+
 ZIP_PYTHON_AND_KUBERNETES_VERSIONS_AS_STRING = " ".join(
-    [
-        f"{t[0]}-{t[1]}"
-        for t in itertools.zip_longest(ALLOWED_PYTHON_MAJOR_MINOR_VERSIONS, ALLOWED_KUBERNETES_VERSIONS)
-    ]
+    [f"{t[0]}-{t[1]}" for t in zip(PYTHON_VERSIONS_MAX, KUBERNETES_VERSIONS_MAX)]
 )
 ZIP_PYTHON_AND_KUBERNETES_VERSIONS_AS_LIST = (
-    "["
-    + ", ".join(
-        [
-            f"'{t[0]}-{t[1]}'"
-            for t in itertools.zip_longest(ALLOWED_PYTHON_MAJOR_MINOR_VERSIONS, ALLOWED_KUBERNETES_VERSIONS)
-        ]
-    )
-    + "]"
+    "[" + ", ".join([f"'{t[0]}-{t[1]}'" for t in zip(PYTHON_VERSIONS_MAX, KUBERNETES_VERSIONS_MAX)]) + "]"
 )
 
 
@@ -102,7 +95,6 @@ ALL_MYPY_CHECKS_ARRAY = [
     "mypy-dev",
     "mypy-task-sdk",
     "mypy-devel-common",
-    "mypy-airflow-ctl",
 ]
 
 ALL_MYPY_CHECKS = str(ALL_MYPY_CHECKS_ARRAY)
@@ -112,67 +104,65 @@ ALL_MYPY_CHECKS_EXCEPT_PROVIDERS = str(
 )
 
 ALL_SKIPPED_COMMITS_ON_NO_CI_IMAGE = (
-    "check-provider-yaml-valid,flynt,identity,lint-helm-chart,mypy-airflow-core,mypy-airflow-ctl,"
+    "check-provider-yaml-valid,flynt,identity,lint-helm-chart,mypy-airflow-core,"
     "mypy-dev,mypy-devel-common,mypy-providers,mypy-task-sdk,"
     "ts-compile-lint-simple-auth-manager-ui,ts-compile-lint-ui"
 )
 
 ALL_SKIPPED_COMMITS_BY_DEFAULT_ON_ALL_TESTS_NEEDED = (
-    "identity,mypy-airflow-core,mypy-airflow-ctl,mypy-dev,mypy-devel-common,mypy-providers,mypy-task-sdk"
+    "identity,mypy-airflow-core,mypy-dev,mypy-devel-common,mypy-providers,mypy-task-sdk"
 )
 
 ALL_SKIPPED_COMMITS_IF_NO_UI = (
-    "identity,mypy-airflow-core,mypy-airflow-ctl,mypy-dev,mypy-devel-common,"
+    "identity,mypy-airflow-core,mypy-dev,mypy-devel-common,"
     "mypy-providers,mypy-task-sdk,ts-compile-lint-simple-auth-manager-ui,ts-compile-lint-ui"
 )
 ALL_SKIPPED_COMMITS_IF_NO_HELM_TESTS = (
-    "identity,lint-helm-chart,mypy-airflow-core,mypy-airflow-ctl,mypy-dev,mypy-devel-common,"
-    "mypy-providers,mypy-task-sdk"
+    "identity,lint-helm-chart,mypy-airflow-core,mypy-dev,mypy-devel-common,mypy-providers,mypy-task-sdk"
 )
 
 ALL_SKIPPED_COMMITS_IF_NO_UI_AND_HELM_TESTS = (
-    "identity,lint-helm-chart,mypy-airflow-core,mypy-airflow-ctl,mypy-dev,mypy-devel-common,"
+    "identity,lint-helm-chart,mypy-airflow-core,mypy-dev,mypy-devel-common,"
     "mypy-providers,mypy-task-sdk,ts-compile-lint-simple-auth-manager-ui,ts-compile-lint-ui"
 )
 
 ALL_SKIPPED_COMMITS_IF_NO_PROVIDERS_AND_UI = (
-    "check-provider-yaml-valid,identity,mypy-airflow-core,mypy-airflow-ctl,"
+    "check-provider-yaml-valid,identity,mypy-airflow-core,"
     "mypy-dev,mypy-devel-common,mypy-providers,mypy-task-sdk,"
     "ts-compile-lint-simple-auth-manager-ui,ts-compile-lint-ui"
 )
 
 ALL_SKIPPED_COMMITS_IF_NO_PROVIDERS = (
-    "check-provider-yaml-valid,identity,lint-helm-chart,mypy-airflow-core,mypy-airflow-ctl,"
+    "check-provider-yaml-valid,identity,lint-helm-chart,mypy-airflow-core,"
     "mypy-dev,mypy-devel-common,mypy-providers,mypy-task-sdk,"
     "ts-compile-lint-simple-auth-manager-ui,ts-compile-lint-ui"
 )
 
 
 ALL_SKIPPED_COMMITS_IF_NO_PROVIDERS_UI_AND_HELM_TESTS = (
-    "check-provider-yaml-valid,identity,lint-helm-chart,mypy-airflow-core,mypy-airflow-ctl,"
+    "check-provider-yaml-valid,identity,lint-helm-chart,mypy-airflow-core,"
     "mypy-dev,mypy-devel-common,mypy-providers,mypy-task-sdk,"
     "ts-compile-lint-simple-auth-manager-ui,ts-compile-lint-ui"
 )
 
 ALL_SKIPPED_COMMITS_IF_NO_CODE_PROVIDERS_AND_HELM_TESTS = (
-    "check-provider-yaml-valid,flynt,identity,lint-helm-chart,mypy-airflow-core,mypy-airflow-ctl,"
+    "check-provider-yaml-valid,flynt,identity,lint-helm-chart,mypy-airflow-core,"
     "mypy-dev,mypy-devel-common,mypy-providers,mypy-task-sdk"
 )
 
 ALL_SKIPPED_COMMITS_IF_NOT_IMPORTANT_FILES_CHANGED = (
-    "check-provider-yaml-valid,flynt,identity,lint-helm-chart,mypy-airflow-core,mypy-airflow-ctl,"
+    "check-provider-yaml-valid,flynt,identity,lint-helm-chart,mypy-airflow-core,"
     "mypy-dev,mypy-devel-common,mypy-providers,mypy-task-sdk,"
     "ts-compile-lint-simple-auth-manager-ui,ts-compile-lint-ui"
 )
 
 
 All_SKIPPED_COMMITS_IF_NON_MAIN_BRANCH = (
-    "check-airflow-provider-compatibility,check-airflow-providers-bug-report-template,"
-    "check-deferrable-default,check-extra-packages-references,"
-    "check-imports-in-providers,check-provider-yaml-valid,compile-fab-assets,"
-    "generate-openapi-spec-fab,identity,lint-helm-chart,mypy-airflow-core,"
-    "mypy-airflow-ctl,mypy-dev,mypy-devel-common,mypy-providers,mypy-task-sdk,"
-    "update-providers-build-files,validate-operators-init"
+    "check-airflow-provider-compatibility,check-airflow-providers-bug-report-template,check-deferrable-default,"
+    "check-extra-packages-references,check-imports-in-providers,check-provider-yaml-valid,"
+    "compile-fab-assets,generate-openapi-spec-fab,identity,"
+    "lint-helm-chart,mypy-airflow-core,mypy-dev,"
+    "mypy-devel-common,mypy-providers,mypy-task-sdk,update-providers-build-files,validate-operators-init"
 )
 
 
@@ -255,7 +245,7 @@ def assert_outputs_are_printed(expected_outputs: dict[str, str], stderr: str):
                     "run-tests": "false",
                     "run-amazon-tests": "false",
                     "docs-build": "false",
-                    "skip-pre-commits": ALL_SKIPPED_COMMITS_ON_NO_CI_IMAGE,
+                    "skip-prek-hooks": ALL_SKIPPED_COMMITS_ON_NO_CI_IMAGE,
                     "upgrade-to-newer-dependencies": "false",
                     "core-test-types-list-as-strings-in-json": None,
                     "providers-test-types-list-as-strings-in-json": None,
@@ -289,7 +279,7 @@ def assert_outputs_are_printed(expected_outputs: dict[str, str], stderr: str):
                     "needs-helm-tests": "true",
                     "run-tests": "true",
                     "docs-build": "true",
-                    "skip-pre-commits": ALL_SKIPPED_COMMITS_BY_DEFAULT_ON_ALL_TESTS_NEEDED,
+                    "skip-prek-hooks": ALL_SKIPPED_COMMITS_BY_DEFAULT_ON_ALL_TESTS_NEEDED,
                     "upgrade-to-newer-dependencies": "false",
                     "core-test-types-list-as-strings-in-json": ALL_CI_SELECTIVE_TEST_TYPES_AS_JSON,
                     "providers-test-types-list-as-strings-in-json": ALL_PROVIDERS_SELECTIVE_TEST_TYPES_AS_JSON,
@@ -314,7 +304,7 @@ def assert_outputs_are_printed(expected_outputs: dict[str, str], stderr: str):
                     "run-tests": "true",
                     "run-amazon-tests": "true",
                     "docs-build": "true",
-                    "skip-pre-commits": ALL_SKIPPED_COMMITS_BY_DEFAULT_ON_ALL_TESTS_NEEDED,
+                    "skip-prek-hooks": ALL_SKIPPED_COMMITS_BY_DEFAULT_ON_ALL_TESTS_NEEDED,
                     "upgrade-to-newer-dependencies": "false",
                     "core-test-types-list-as-strings-in-json": ALL_CI_SELECTIVE_TEST_TYPES_AS_JSON,
                     "providers-test-types-list-as-strings-in-json": ALL_PROVIDERS_SELECTIVE_TEST_TYPES_AS_JSON,
@@ -339,7 +329,7 @@ def assert_outputs_are_printed(expected_outputs: dict[str, str], stderr: str):
                     "run-tests": "true",
                     "run-amazon-tests": "true",
                     "docs-build": "true",
-                    "skip-pre-commits": ALL_SKIPPED_COMMITS_BY_DEFAULT_ON_ALL_TESTS_NEEDED,
+                    "skip-prek-hooks": ALL_SKIPPED_COMMITS_BY_DEFAULT_ON_ALL_TESTS_NEEDED,
                     "upgrade-to-newer-dependencies": "false",
                     "core-test-types-list-as-strings-in-json": ALL_CI_SELECTIVE_TEST_TYPES_AS_JSON,
                     "providers-test-types-list-as-strings-in-json": ALL_PROVIDERS_SELECTIVE_TEST_TYPES_AS_JSON,
@@ -365,7 +355,7 @@ def assert_outputs_are_printed(expected_outputs: dict[str, str], stderr: str):
                     "run-tests": "true",
                     "run-amazon-tests": "false",
                     "docs-build": "true",
-                    "skip-pre-commits": ALL_SKIPPED_COMMITS_IF_NO_PROVIDERS_UI_AND_HELM_TESTS,
+                    "skip-prek-hooks": ALL_SKIPPED_COMMITS_IF_NO_PROVIDERS_UI_AND_HELM_TESTS,
                     "upgrade-to-newer-dependencies": "false",
                     "core-test-types-list-as-strings-in-json": json.dumps(
                         [{"description": "Always...Serialization", "test_types": "Always Core Serialization"}]
@@ -397,7 +387,7 @@ def assert_outputs_are_printed(expected_outputs: dict[str, str], stderr: str):
                     "run-tests": "true",
                     "run-amazon-tests": "true",
                     "docs-build": "true",
-                    "skip-pre-commits": ALL_SKIPPED_COMMITS_BY_DEFAULT_ON_ALL_TESTS_NEEDED,
+                    "skip-prek-hooks": ALL_SKIPPED_COMMITS_BY_DEFAULT_ON_ALL_TESTS_NEEDED,
                     "upgrade-to-newer-dependencies": "false",
                     "core-test-types-list-as-strings-in-json": ALL_CI_SELECTIVE_TEST_TYPES_AS_JSON,
                     "providers-test-types-list-as-strings-in-json": ALL_PROVIDERS_SELECTIVE_TEST_TYPES_AS_JSON,
@@ -423,7 +413,7 @@ def assert_outputs_are_printed(expected_outputs: dict[str, str], stderr: str):
                     "run-tests": "true",
                     "run-amazon-tests": "false",
                     "docs-build": "true",
-                    "skip-pre-commits": ALL_SKIPPED_COMMITS_IF_NO_UI_AND_HELM_TESTS,
+                    "skip-prek-hooks": ALL_SKIPPED_COMMITS_IF_NO_UI_AND_HELM_TESTS,
                     "run-kubernetes-tests": "false",
                     "upgrade-to-newer-dependencies": "false",
                     "core-test-types-list-as-strings-in-json": json.dumps(
@@ -467,7 +457,7 @@ def assert_outputs_are_printed(expected_outputs: dict[str, str], stderr: str):
                     "run-tests": "true",
                     "run-amazon-tests": "false",
                     "docs-build": "true",
-                    "skip-pre-commits": ALL_SKIPPED_COMMITS_IF_NO_UI_AND_HELM_TESTS,
+                    "skip-prek-hooks": ALL_SKIPPED_COMMITS_IF_NO_UI_AND_HELM_TESTS,
                     "run-kubernetes-tests": "false",
                     "upgrade-to-newer-dependencies": "false",
                     "core-test-types-list-as-strings-in-json": json.dumps(
@@ -515,7 +505,7 @@ def assert_outputs_are_printed(expected_outputs: dict[str, str], stderr: str):
                     "run-tests": "true",
                     "run-amazon-tests": "false",
                     "docs-build": "true",
-                    "skip-pre-commits": ALL_SKIPPED_COMMITS_IF_NO_UI_AND_HELM_TESTS,
+                    "skip-prek-hooks": ALL_SKIPPED_COMMITS_IF_NO_UI_AND_HELM_TESTS,
                     "run-kubernetes-tests": "false",
                     "upgrade-to-newer-dependencies": "false",
                     "core-test-types-list-as-strings-in-json": json.dumps(
@@ -563,7 +553,7 @@ def assert_outputs_are_printed(expected_outputs: dict[str, str], stderr: str):
                     "run-tests": "true",
                     "run-amazon-tests": "false",
                     "docs-build": "true",
-                    "skip-pre-commits": ALL_SKIPPED_COMMITS_IF_NO_UI_AND_HELM_TESTS,
+                    "skip-prek-hooks": ALL_SKIPPED_COMMITS_IF_NO_UI_AND_HELM_TESTS,
                     "run-kubernetes-tests": "false",
                     "upgrade-to-newer-dependencies": "false",
                     "core-test-types-list-as-strings-in-json": json.dumps(
@@ -609,7 +599,7 @@ def assert_outputs_are_printed(expected_outputs: dict[str, str], stderr: str):
                     "run-tests": "false",
                     "run-amazon-tests": "false",
                     "docs-build": "true",
-                    "skip-pre-commits": ALL_SKIPPED_COMMITS_ON_NO_CI_IMAGE,
+                    "skip-prek-hooks": ALL_SKIPPED_COMMITS_ON_NO_CI_IMAGE,
                     "run-kubernetes-tests": "false",
                     "upgrade-to-newer-dependencies": "false",
                     "core-test-types-list-as-strings-in-json": None,
@@ -637,7 +627,7 @@ def assert_outputs_are_printed(expected_outputs: dict[str, str], stderr: str):
                     "run-task-sdk-tests": "true",
                     "docs-build": "true",
                     "full-tests-needed": "false",
-                    "skip-pre-commits": ALL_SKIPPED_COMMITS_IF_NO_PROVIDERS_UI_AND_HELM_TESTS,
+                    "skip-prek-hooks": ALL_SKIPPED_COMMITS_IF_NO_PROVIDERS_UI_AND_HELM_TESTS,
                     "skip-providers-tests": "false",
                     "upgrade-to-newer-dependencies": "false",
                     "core-test-types-list-as-strings-in-json": ALL_CI_SELECTIVE_TEST_TYPES_AS_JSON,
@@ -667,7 +657,7 @@ def assert_outputs_are_printed(expected_outputs: dict[str, str], stderr: str):
                     "run-tests": "true",
                     "run-amazon-tests": "true",
                     "docs-build": "true",
-                    "skip-pre-commits": ALL_SKIPPED_COMMITS_IF_NO_UI,
+                    "skip-prek-hooks": ALL_SKIPPED_COMMITS_IF_NO_UI,
                     "run-kubernetes-tests": "true",
                     "upgrade-to-newer-dependencies": "false",
                     "core-test-types-list-as-strings-in-json": json.dumps(
@@ -709,7 +699,7 @@ def assert_outputs_are_printed(expected_outputs: dict[str, str], stderr: str):
                     "run-tests": "true",
                     "run-amazon-tests": "true",
                     "docs-build": "true",
-                    "skip-pre-commits": ALL_SKIPPED_COMMITS_IF_NO_UI,
+                    "skip-prek-hooks": ALL_SKIPPED_COMMITS_IF_NO_UI,
                     "run-kubernetes-tests": "true",
                     "upgrade-to-newer-dependencies": "false",
                     "core-test-types-list-as-strings-in-json": json.dumps(
@@ -729,7 +719,10 @@ def assert_outputs_are_printed(expected_outputs: dict[str, str], stderr: str):
                                 "description": "amazon...apache.livy",
                                 "test_types": "Providers[amazon] Providers[apache.livy]",
                             },
-                            {"description": "dbt.cloud", "test_types": "Providers[dbt.cloud]"},
+                            {
+                                "description": "dbt.cloud",
+                                "test_types": "Providers[dbt.cloud]",
+                            },
                             {
                                 "description": "dingding",
                                 "test_types": "Providers[dingding]",
@@ -764,7 +757,7 @@ def assert_outputs_are_printed(expected_outputs: dict[str, str], stderr: str):
                     "run-tests": "true",
                     "run-amazon-tests": "false",
                     "docs-build": "true",
-                    "skip-pre-commits": ALL_SKIPPED_COMMITS_IF_NO_UI,
+                    "skip-prek-hooks": ALL_SKIPPED_COMMITS_IF_NO_UI,
                     "run-kubernetes-tests": "true",
                     "upgrade-to-newer-dependencies": "false",
                     "core-test-types-list-as-strings-in-json": json.dumps(
@@ -796,7 +789,7 @@ def assert_outputs_are_printed(expected_outputs: dict[str, str], stderr: str):
                     "needs-helm-tests": "true",
                     "run-tests": "true",
                     "docs-build": "true",
-                    "skip-pre-commits": ALL_SKIPPED_COMMITS_IF_NO_PROVIDERS_AND_UI,
+                    "skip-prek-hooks": ALL_SKIPPED_COMMITS_IF_NO_PROVIDERS_AND_UI,
                     "run-amazon-tests": "false",
                     "run-kubernetes-tests": "true",
                     "upgrade-to-newer-dependencies": "false",
@@ -816,9 +809,9 @@ def assert_outputs_are_printed(expected_outputs: dict[str, str], stderr: str):
                 ("pyproject.toml",),
                 {
                     "selected-providers-list-as-string": ALL_PROVIDERS_AFFECTED,
-                    "all-python-versions": "['3.9', '3.10', '3.11', '3.12']",
+                    "all-python-versions": ALL_PYTHON_VERSIONS_AS_LIST,
                     "all-python-versions-list-as-string": ALL_PYTHON_VERSIONS_AS_STRING,
-                    "python-versions": "['3.9', '3.10', '3.11', '3.12']",
+                    "python-versions": ALL_PYTHON_VERSIONS_AS_LIST,
                     "python-versions-list-as-string": ALL_PYTHON_VERSIONS_AS_STRING,
                     "ci-image-build": "true",
                     "prod-image-build": "true",
@@ -827,7 +820,7 @@ def assert_outputs_are_printed(expected_outputs: dict[str, str], stderr: str):
                     "run-amazon-tests": "true",
                     "docs-build": "true",
                     "full-tests-needed": "true",
-                    "skip-pre-commits": ALL_SKIPPED_COMMITS_BY_DEFAULT_ON_ALL_TESTS_NEEDED,
+                    "skip-prek-hooks": ALL_SKIPPED_COMMITS_BY_DEFAULT_ON_ALL_TESTS_NEEDED,
                     "upgrade-to-newer-dependencies": "true",
                     "core-test-types-list-as-strings-in-json": ALL_CI_SELECTIVE_TEST_TYPES_AS_JSON,
                     "providers-test-types-list-as-strings-in-json": ALL_PROVIDERS_SELECTIVE_TEST_TYPES_AS_JSON,
@@ -853,7 +846,7 @@ def assert_outputs_are_printed(expected_outputs: dict[str, str], stderr: str):
                 "run-tests": "true",
                 "docs-build": "true",
                 # no python files changed so flynt should not run
-                "skip-pre-commits": "flynt," + ALL_SKIPPED_COMMITS_IF_NO_UI_AND_HELM_TESTS,
+                "skip-prek-hooks": "flynt," + ALL_SKIPPED_COMMITS_IF_NO_UI_AND_HELM_TESTS,
                 "run-kubernetes-tests": "false",
                 "upgrade-to-newer-dependencies": "false",
                 "run-amazon-tests": "true",
@@ -890,7 +883,7 @@ def assert_outputs_are_printed(expected_outputs: dict[str, str], stderr: str):
                 "run-tests": "true",
                 "run-amazon-tests": "false",
                 "docs-build": "true",
-                "skip-pre-commits": ALL_SKIPPED_COMMITS_IF_NO_UI_AND_HELM_TESTS,
+                "skip-prek-hooks": ALL_SKIPPED_COMMITS_IF_NO_UI_AND_HELM_TESTS,
                 "run-kubernetes-tests": "false",
                 "upgrade-to-newer-dependencies": "false",
                 "core-test-types-list-as-strings-in-json": json.dumps(
@@ -920,7 +913,7 @@ def assert_outputs_are_printed(expected_outputs: dict[str, str], stderr: str):
                 "run-tests": "true",
                 "run-amazon-tests": "true",
                 "docs-build": "true",
-                "skip-pre-commits": ALL_SKIPPED_COMMITS_IF_NO_UI_AND_HELM_TESTS,
+                "skip-prek-hooks": ALL_SKIPPED_COMMITS_IF_NO_UI_AND_HELM_TESTS,
                 "run-kubernetes-tests": "false",
                 "upgrade-to-newer-dependencies": "false",
                 "core-test-types-list-as-strings-in-json": json.dumps(
@@ -961,7 +954,7 @@ def assert_outputs_are_printed(expected_outputs: dict[str, str], stderr: str):
                 "run-amazon-tests": "false",
                 "docs-build": "true",
                 "run-kubernetes-tests": "false",
-                "skip-pre-commits": ALL_SKIPPED_COMMITS_IF_NO_UI_AND_HELM_TESTS,
+                "skip-prek-hooks": ALL_SKIPPED_COMMITS_IF_NO_UI_AND_HELM_TESTS,
                 "upgrade-to-newer-dependencies": "false",
                 "core-test-types-list-as-strings-in-json": json.dumps(
                     [{"description": "Always", "test_types": "Always"}]
@@ -993,7 +986,7 @@ def assert_outputs_are_printed(expected_outputs: dict[str, str], stderr: str):
                 "run-amazon-tests": "true",
                 "docs-build": "true",
                 "run-kubernetes-tests": "true",
-                "skip-pre-commits": ALL_SKIPPED_COMMITS_BY_DEFAULT_ON_ALL_TESTS_NEEDED,
+                "skip-prek-hooks": ALL_SKIPPED_COMMITS_BY_DEFAULT_ON_ALL_TESTS_NEEDED,
                 "upgrade-to-newer-dependencies": "false",
                 "core-test-types-list-as-strings-in-json": ALL_CI_SELECTIVE_TEST_TYPES_AS_JSON,
                 "providers-test-types-list-as-strings-in-json": ALL_PROVIDERS_SELECTIVE_TEST_TYPES_AS_JSON,
@@ -1018,7 +1011,7 @@ def assert_outputs_are_printed(expected_outputs: dict[str, str], stderr: str):
                     "run-amazon-tests": "true",
                     "docs-build": "true",
                     "full-tests-needed": "true",
-                    "skip-pre-commits": ALL_SKIPPED_COMMITS_BY_DEFAULT_ON_ALL_TESTS_NEEDED,
+                    "skip-prek-hooks": ALL_SKIPPED_COMMITS_BY_DEFAULT_ON_ALL_TESTS_NEEDED,
                     "upgrade-to-newer-dependencies": "false",
                     "core-test-types-list-as-strings-in-json": ALL_CI_SELECTIVE_TEST_TYPES_AS_JSON,
                     "providers-test-types-list-as-strings-in-json": ALL_PROVIDERS_SELECTIVE_TEST_TYPES_AS_JSON,
@@ -1044,7 +1037,7 @@ def assert_outputs_are_printed(expected_outputs: dict[str, str], stderr: str):
                     "run-amazon-tests": "true",
                     "docs-build": "true",
                     "full-tests-needed": "true",
-                    "skip-pre-commits": ALL_SKIPPED_COMMITS_BY_DEFAULT_ON_ALL_TESTS_NEEDED,
+                    "skip-prek-hooks": ALL_SKIPPED_COMMITS_BY_DEFAULT_ON_ALL_TESTS_NEEDED,
                     "upgrade-to-newer-dependencies": "false",
                     "core-test-types-list-as-strings-in-json": ALL_CI_SELECTIVE_TEST_TYPES_AS_JSON,
                     "providers-test-types-list-as-strings-in-json": ALL_PROVIDERS_SELECTIVE_TEST_TYPES_AS_JSON,
@@ -1073,7 +1066,7 @@ def assert_outputs_are_printed(expected_outputs: dict[str, str], stderr: str):
                     "run-amazon-tests": "false",
                     "docs-build": "false",
                     "full-tests-needed": "false",
-                    "skip-pre-commits": ALL_SKIPPED_COMMITS_IF_NO_CODE_PROVIDERS_AND_HELM_TESTS,
+                    "skip-prek-hooks": ALL_SKIPPED_COMMITS_IF_NO_CODE_PROVIDERS_AND_HELM_TESTS,
                     "upgrade-to-newer-dependencies": "false",
                     "needs-mypy": "false",
                     "mypy-checks": "[]",
@@ -1096,7 +1089,7 @@ def assert_outputs_are_printed(expected_outputs: dict[str, str], stderr: str):
                 "run-tests": "false",
                 "run-amazon-tests": "false",
                 "docs-build": "true",
-                "skip-pre-commits": ALL_SKIPPED_COMMITS_ON_NO_CI_IMAGE,
+                "skip-prek-hooks": ALL_SKIPPED_COMMITS_ON_NO_CI_IMAGE,
                 "upgrade-to-newer-dependencies": "false",
                 "core-test-types-list-as-strings-in-json": None,
                 "providers-test-types-list-as-strings-in-json": None,
@@ -1119,7 +1112,7 @@ def assert_outputs_are_printed(expected_outputs: dict[str, str], stderr: str):
                 "run-tests": "true",
                 "run-amazon-tests": "false",
                 "docs-build": "true",
-                "skip-pre-commits": "check-provider-yaml-valid,flynt,identity,mypy-airflow-core,mypy-airflow-ctl,mypy-dev,mypy-devel-common,mypy-providers,mypy-task-sdk,ts-compile-lint-simple-auth-manager-ui,ts-compile-lint-ui",
+                "skip-prek-hooks": "check-provider-yaml-valid,flynt,identity,mypy-airflow-core,mypy-dev,mypy-devel-common,mypy-providers,mypy-task-sdk,ts-compile-lint-simple-auth-manager-ui,ts-compile-lint-ui",
                 "upgrade-to-newer-dependencies": "false",
                 "core-test-types-list-as-strings-in-json": None,
                 "providers-test-types-list-as-strings-in-json": None,
@@ -1142,7 +1135,7 @@ def assert_outputs_are_printed(expected_outputs: dict[str, str], stderr: str):
                 "run-tests": "false",
                 "run-amazon-tests": "false",
                 "docs-build": "true",
-                "skip-pre-commits": ALL_SKIPPED_COMMITS_ON_NO_CI_IMAGE,
+                "skip-prek-hooks": ALL_SKIPPED_COMMITS_ON_NO_CI_IMAGE,
                 "upgrade-to-newer-dependencies": "false",
                 "core-test-types-list-as-strings-in-json": None,
                 "providers-test-types-list-as-strings-in-json": None,
@@ -1157,6 +1150,16 @@ def assert_outputs_are_printed(expected_outputs: dict[str, str], stderr: str):
             {"run-go-sdk-tests": "true"},
             id="Run go tests for go-sdk",
         ),
+        (
+            pytest.param(
+                ("devel-common/pyproject.toml",),
+                {
+                    "needs-mypy": "true",
+                    "mypy-checks": ALL_MYPY_CHECKS,
+                },
+                id="All mypy checks should run when devel-common/pyproject.toml changes",
+            )
+        ),
     ],
 )
 def test_expected_output_pull_request_main(
@@ -1232,7 +1235,9 @@ def test_excluded_providers():
     )
     assert_outputs_are_printed(
         {
-            "excluded-providers-as-string": json.dumps({DEFAULT_PYTHON_MAJOR_MINOR_VERSION: ["cloudant"]}),
+            "excluded-providers-as-string": json.dumps(
+                {"3.9": ["cloudant"]},
+            ),
         },
         str(stderr),
     )
@@ -1243,11 +1248,11 @@ def test_excluded_providers():
     [
         (
             pytest.param(
-                ("scripts/ci/pre_commit/file.sh",),
+                ("scripts/ci/prek/file.sh",),
                 {
                     "full-tests-needed": "false",
                 },
-                id="No full tests needed when pre-commit scripts change",
+                id="No full tests needed when prek scripts change",
             )
         ),
         (
@@ -1316,7 +1321,7 @@ def test_full_test_needed_when_scripts_changes(files: tuple[str, ...], expected_
                     "docs-build": "true",
... 6775 lines suppressed ...