You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@airflow.apache.org by mo...@apache.org on 2024/11/18 16:50:02 UTC

(airflow) 02/02: Support Py3.8

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

mobuchowski pushed a commit to branch genproviders
in repository https://gitbox.apache.org/repos/asf/airflow.git

commit fc2b0c3f575d7f03fc09a5b86b8e7f4c63ac68e7
Author: Maciej Obuchowski <ob...@gmail.com>
AuthorDate: Mon Nov 18 17:49:41 2024 +0100

    Support Py3.8
    
    Signed-off-by: Maciej Obuchowski <ob...@gmail.com>
---
 .github/actions/breeze/action.yml                  |   3 +
 .github/workflows/build-images.yml                 |  18 +-
 .github/workflows/check-providers.yml              |   5 +-
 .pre-commit-config.yaml                            |   7 +
 .readthedocs.yml                                   |   2 +-
 Dockerfile                                         |   2 +-
 Dockerfile.ci                                      |   4 +-
 INSTALL                                            |  12 +-
 README.md                                          |   8 +-
 airflow/cli/commands/connection_command.py         |   2 +-
 .../constants.py => airflow/compat/functools.py    |  19 +-
 airflow/configuration.py                           |   4 +-
 airflow/io/__init__.py                             |   2 +-
 airflow/models/taskinstance.py                     |   2 +-
 airflow/operators/python.py                        |   2 +-
 airflow/providers/MANAGING_PROVIDERS_LIFECYCLE.rst |   2 +-
 .../providers/amazon/aws/transfers/sql_to_s3.py    |   9 +-
 airflow/providers/amazon/aws/utils/mixins.py       |   3 +-
 airflow/providers/cloudant/provider.yaml           |   3 +-
 .../cncf/kubernetes/kubernetes_helper_functions.py |   2 +-
 airflow/providers/common/io/xcom/backend.py        |  21 +-
 airflow/providers/openlineage/conf.py              |   2 +-
 airflow/serialization/serialized_objects.py        |   2 +-
 airflow/serialization/serializers/timezone.py      |  16 +-
 airflow/utils/log/secrets_masker.py                |   3 +-
 airflow/utils/platform.py                          |   3 +-
 airflow/www/forms.py                               |   2 +-
 airflow/www/views.py                               |   5 +-
 clients/python/README.md                           |   2 +-
 clients/python/pyproject.toml                      |   5 +-
 clients/python/test_python_client.py               |   2 +-
 constraints/README.md                              |   6 +-
 contributing-docs/03_contributors_quick_start.rst  |  49 ++--
 contributing-docs/05_pull_requests.rst             |   2 +-
 contributing-docs/07_local_virtualenv.rst          |  14 +-
 contributing-docs/08_static_code_checks.rst        |   4 +-
 .../12_airflow_dependencies_and_extras.rst         |   8 +-
 contributing-docs/testing/docker_compose_tests.rst |   8 +-
 contributing-docs/testing/k8s_tests.rst            |  84 +++---
 contributing-docs/testing/unit_tests.rst           |  12 +-
 dev/README_RELEASE_AIRFLOW.md                      |   8 +-
 dev/README_RELEASE_PROVIDER_PACKAGES.md            |   2 +-
 dev/breeze/README.md                               |   2 +-
 dev/breeze/doc/01_installation.rst                 |   6 +-
 dev/breeze/doc/03_developer_tasks.rst              |  10 +-
 dev/breeze/doc/06_managing_docker_images.rst       |   4 +-
 dev/breeze/doc/10_advanced_breeze_topics.rst       |   6 +-
 .../0002-implement-standalone-python-command.md    |   2 +-
 dev/breeze/doc/ci/02_images.md                     |  63 +++--
 dev/breeze/doc/ci/04_selective_checks.md           |  12 +-
 dev/breeze/doc/ci/08_running_ci_locally.md         |   8 +-
 dev/breeze/doc/images/output-commands.svg          |   4 +-
 dev/breeze/doc/images/output_ci-image_build.svg    |   6 +-
 dev/breeze/doc/images/output_ci-image_build.txt    |   2 +-
 dev/breeze/doc/images/output_ci-image_pull.svg     |  64 +++--
 dev/breeze/doc/images/output_ci-image_pull.txt     |   2 +-
 dev/breeze/doc/images/output_ci-image_verify.svg   |   6 +-
 dev/breeze/doc/images/output_ci-image_verify.txt   |   2 +-
 .../doc/images/output_k8s_build-k8s-image.svg      |   6 +-
 .../doc/images/output_k8s_build-k8s-image.txt      |   2 +-
 .../doc/images/output_k8s_configure-cluster.svg    |  60 ++--
 .../doc/images/output_k8s_configure-cluster.txt    |   2 +-
 .../doc/images/output_k8s_create-cluster.svg       |   6 +-
 .../doc/images/output_k8s_create-cluster.txt       |   2 +-
 .../doc/images/output_k8s_delete-cluster.svg       |  34 ++-
 .../doc/images/output_k8s_delete-cluster.txt       |   2 +-
 .../doc/images/output_k8s_deploy-airflow.svg       |   6 +-
 .../doc/images/output_k8s_deploy-airflow.txt       |   2 +-
 dev/breeze/doc/images/output_k8s_k9s.svg           |  32 ++-
 dev/breeze/doc/images/output_k8s_k9s.txt           |   2 +-
 dev/breeze/doc/images/output_k8s_logs.svg          |  34 ++-
 dev/breeze/doc/images/output_k8s_logs.txt          |   2 +-
 .../doc/images/output_k8s_run-complete-tests.svg   |  70 ++---
 .../doc/images/output_k8s_run-complete-tests.txt   |   2 +-
 dev/breeze/doc/images/output_k8s_shell.svg         |  42 +--
 dev/breeze/doc/images/output_k8s_shell.txt         |   2 +-
 dev/breeze/doc/images/output_k8s_status.svg        |   4 +-
 dev/breeze/doc/images/output_k8s_status.txt        |   2 +-
 dev/breeze/doc/images/output_k8s_tests.svg         |  70 ++---
 dev/breeze/doc/images/output_k8s_tests.txt         |   2 +-
 .../doc/images/output_k8s_upload-k8s-image.svg     |  58 ++--
 .../doc/images/output_k8s_upload-k8s-image.txt     |   2 +-
 dev/breeze/doc/images/output_prod-image_build.svg  |   6 +-
 dev/breeze/doc/images/output_prod-image_build.txt  |   2 +-
 dev/breeze/doc/images/output_prod-image_pull.svg   |  64 +++--
 dev/breeze/doc/images/output_prod-image_pull.txt   |   2 +-
 dev/breeze/doc/images/output_prod-image_verify.svg |   6 +-
 dev/breeze/doc/images/output_prod-image_verify.txt |   2 +-
 ...put_release-management_generate-constraints.svg |   6 +-
 ...put_release-management_generate-constraints.txt |   2 +-
 ...elease-management_install-provider-packages.svg | 126 +++++----
 ...elease-management_install-provider-packages.txt |   2 +-
 ...tput_release-management_release-prod-images.svg |   2 +-
 ...tput_release-management_release-prod-images.txt |   2 +-
 ...release-management_verify-provider-packages.svg | 132 ++++-----
 ...release-management_verify-provider-packages.txt |   2 +-
 .../output_sbom_export-dependency-information.svg  |   4 +-
 .../output_sbom_export-dependency-information.txt  |   2 +-
 dev/breeze/doc/images/output_setup_config.svg      |   4 +-
 dev/breeze/doc/images/output_setup_config.txt      |   2 +-
 dev/breeze/doc/images/output_shell.svg             |   4 +-
 dev/breeze/doc/images/output_shell.txt             |   2 +-
 dev/breeze/doc/images/output_start-airflow.svg     |   4 +-
 dev/breeze/doc/images/output_start-airflow.txt     |   2 +-
 dev/breeze/doc/images/output_static-checks.svg     |  26 +-
 dev/breeze/doc/images/output_static-checks.txt     |   2 +-
 dev/breeze/doc/images/output_testing_db-tests.svg  |   4 +-
 dev/breeze/doc/images/output_testing_db-tests.txt  |   2 +-
 .../images/output_testing_docker-compose-tests.svg |   4 +-
 .../images/output_testing_docker-compose-tests.txt |   2 +-
 .../images/output_testing_integration-tests.svg    |   4 +-
 .../images/output_testing_integration-tests.txt    |   2 +-
 .../doc/images/output_testing_non-db-tests.svg     |   4 +-
 .../doc/images/output_testing_non-db-tests.txt     |   2 +-
 dev/breeze/doc/images/output_testing_tests.svg     |   4 +-
 dev/breeze/doc/images/output_testing_tests.txt     |   2 +-
 dev/breeze/pyproject.toml                          |   3 +-
 .../src/airflow_breeze/commands/ci_commands.py     |   3 +-
 .../airflow_breeze/commands/developer_commands.py  |   2 +-
 .../commands/minor_release_command.py              |   2 +-
 .../commands/release_candidate_command.py          |   2 +-
 .../commands/release_management_commands.py        |   3 +-
 dev/breeze/src/airflow_breeze/global_constants.py  |  28 +-
 .../airflow_breeze/params/common_build_params.py   |   2 +-
 dev/breeze/src/airflow_breeze/pre_commit_ids.py    |   1 +
 .../templates/pyproject_TEMPLATE.toml.jinja2       |   2 +-
 .../src/airflow_breeze/utils/backtracking.py       |   2 +-
 dev/breeze/src/airflow_breeze/utils/black_utils.py |   4 +-
 dev/breeze/src/airflow_breeze/utils/cdxgen.py      |   3 +-
 dev/breeze/src/airflow_breeze/utils/coertions.py   |   2 +-
 dev/breeze/src/airflow_breeze/utils/console.py     |   6 +-
 .../src/airflow_breeze/utils/custom_param_types.py |   3 +-
 dev/breeze/src/airflow_breeze/utils/packages.py    |   5 +-
 dev/breeze/src/airflow_breeze/utils/parallel.py    |   3 +-
 dev/breeze/src/airflow_breeze/utils/path_utils.py  |   4 +-
 dev/breeze/src/airflow_breeze/utils/run_utils.py   |   7 +-
 .../src/airflow_breeze/utils/selective_checks.py   |   8 +-
 .../src/airflow_breeze/utils/virtualenv_utils.py   |   2 +-
 dev/breeze/tests/test_cache.py                     |   4 +-
 dev/breeze/tests/test_packages.py                  |   4 +-
 dev/breeze/tests/test_run_test_args.py             |   6 +-
 dev/breeze/tests/test_selective_checks.py          | 315 +++++++++++----------
 dev/breeze/tests/test_shell_params.py              |   8 +-
 dev/check_files.py                                 |   2 +-
 dev/refresh_images.sh                              |   4 +-
 dev/retag_docker_images.py                         |   2 +-
 docker_tests/constants.py                          |   2 +-
 docker_tests/docker_utils.py                       |   4 +-
 .../executors/general.rst                          |   6 +-
 .../installing-from-pypi.rst                       |   2 +-
 .../modules_management.rst                         |  26 +-
 docs/apache-airflow/extra-packages-ref.rst         |   2 +-
 .../installation/installing-from-pypi.rst          |  24 +-
 docs/apache-airflow/installation/prerequisites.rst |   2 +-
 .../installation/supported-versions.rst            |   4 +-
 docs/apache-airflow/start.rst                      |   4 +-
 docs/docker-stack/README.md                        |   8 +-
 docs/docker-stack/build-arg-ref.rst                |   2 +-
 docs/docker-stack/build.rst                        |  20 +-
 .../customizing/add-build-essential-custom.sh      |   2 +-
 .../docker-examples/customizing/custom-sources.sh  |   2 +-
 .../customizing/github-different-repository.sh     |   2 +-
 .../docker-examples/customizing/github-main.sh     |   2 +-
 .../customizing/github-v2-2-test.sh                |   2 +-
 .../customizing/pypi-dev-runtime-deps.sh           |   2 +-
 .../customizing/pypi-extras-and-deps.sh            |   2 +-
 .../customizing/pypi-selected-version.sh           |   2 +-
 .../restricted/restricted_environments.sh          |  10 +-
 docs/docker-stack/entrypoint.rst                   |  14 +-
 docs/docker-stack/index.rst                        |   8 +-
 generated/PYPI_README.md                           |   6 +-
 generated/provider_dependencies.json               |   1 +
 hatch_build.py                                     |   2 +-
 kubernetes_tests/test_kubernetes_pod_operator.py   |   2 +-
 newsfragments/42739.significant.rst                |   1 -
 pyproject.toml                                     |  13 +-
 scripts/ci/docker-compose/devcontainer.env         |   4 +-
 scripts/ci/docker-compose/devcontainer.yml         |   2 +-
 scripts/ci/kubernetes/k8s_requirements.txt         |   2 +-
 scripts/ci/pre_commit/common_precommit_utils.py    |   6 +-
 scripts/ci/pre_commit/compat_cache_on_methods.py   |  69 +++++
 scripts/ci/pre_commit/mypy.py                      |   2 +-
 scripts/ci/pre_commit/mypy_folder.py               |   2 +-
 scripts/ci/pre_commit/sync_init_decorator.py       |  11 +-
 scripts/ci/pre_commit/update_build_dependencies.py |   4 +-
 scripts/docker/entrypoint_ci.sh                    |   2 +-
 .../in_container/install_airflow_and_providers.py  |   2 +-
 scripts/in_container/run_generate_constraints.py   |   4 +-
 tests/providers/cloudant/hooks/test_cloudant.py    |   2 +-
 .../google/cloud/operators/test_mlengine.py        |   2 +-
 .../google/cloud/triggers/test_mlengine.py         |   2 +-
 .../kubernetes/example_kubernetes_decorator.py     |   4 +-
 tests/www/views/test_views.py                      |   4 +-
 193 files changed, 1195 insertions(+), 1004 deletions(-)

diff --git a/.github/actions/breeze/action.yml b/.github/actions/breeze/action.yml
index 69ebcc7c66e..164914c3d52 100644
--- a/.github/actions/breeze/action.yml
+++ b/.github/actions/breeze/action.yml
@@ -21,6 +21,9 @@ description: 'Sets up Python and Breeze'
 inputs:
   python-version:
     description: 'Python version to use'
+    # Version of Python used for reproducibility of the packages built
+    # Python 3.8 tarfile produces different tarballs than Python 3.9+ tarfile that's why we are forcing
+    # Python 3.9 for all release preparation commands to make sure that the tarballs are reproducible
     default: "3.9"
 outputs:
   host-python-version:
diff --git a/.github/workflows/build-images.yml b/.github/workflows/build-images.yml
index 6c6d55d7504..abf966faede 100644
--- a/.github/workflows/build-images.yml
+++ b/.github/workflows/build-images.yml
@@ -16,7 +16,7 @@
 # under the License.
 #
 ---
-name: Build Images
+name: "Build Images"
 run-name: >
   Build images for ${{ github.event.pull_request.title }} ${{ github.event.pull_request._links.html.href }}
 on:  # yamllint disable-line rule:truthy
@@ -54,7 +54,7 @@ concurrency:
 jobs:
   build-info:
     timeout-minutes: 10
-    name: Build Info
+    name: "Build Info"
     # At build-info stage we do not yet have outputs so we need to hard-code the runs-on to public runners
     runs-on: ["ubuntu-22.04"]
     env:
@@ -89,7 +89,7 @@ jobs:
         }}"
     if: github.repository == 'apache/airflow'
     steps:
-      - name: Cleanup repo
+      - name: "Cleanup repo"
         shell: bash
         run: docker run -v "${GITHUB_WORKSPACE}:/workspace" -u 0:0 bash -c "rm -rf /workspace/*"
       - name: Discover PR merge commit
@@ -154,13 +154,13 @@ jobs:
       #  COMPOSITE ACTIONS. WE CAN RUN ANYTHING THAT IS IN THE TARGET BRANCH AND THERE IS NO RISK THAT
       #  CODE WILL BE RUN FROM THE PR.
       ####################################################################################################
-      - name: Cleanup docker
+      - name: "Cleanup docker"
         run: ./scripts/ci/cleanup_docker.sh
-      - name: Setup python
+      - name: "Setup python"
         uses: actions/setup-python@v5
         with:
-          python-version: "3.9"
-      - name: Install Breeze
+          python-version: 3.8
+      - name: "Install Breeze"
         uses: ./.github/actions/breeze
       ####################################################################################################
       #  WE RUN SELECTIVE CHECKS HERE USING THE TARGET COMMIT AND ITS PARENT TO BE ABLE TO COMPARE THEM
@@ -212,7 +212,7 @@ jobs:
       docker-cache: ${{ needs.build-info.outputs.docker-cache }}
 
   generate-constraints:
-    name: Generate constraints
+    name: "Generate constraints"
     needs: [build-info, build-ci-images]
     uses: ./.github/workflows/generate-constraints.yml
     with:
@@ -247,7 +247,7 @@ jobs:
       push-image: "true"
       use-uv: "true"
       image-tag: ${{ needs.build-info.outputs.image-tag }}
-      platform: linux/amd64
+      platform: "linux/amd64"
       python-versions: ${{ needs.build-info.outputs.python-versions }}
       default-python-version: ${{ needs.build-info.outputs.default-python-version }}
       branch: ${{ needs.build-info.outputs.default-branch }}
diff --git a/.github/workflows/check-providers.yml b/.github/workflows/check-providers.yml
index f5ff95b73c2..b394f792732 100644
--- a/.github/workflows/check-providers.yml
+++ b/.github/workflows/check-providers.yml
@@ -108,9 +108,10 @@ jobs:
         run: >
           breeze release-management generate-issue-content-providers
           --only-available-in-dist --disable-progress
-      - name: Remove Python 3.9-incompatible provider packages
+      - name: >
+          Remove incompatible Python ${{ matrix.python-version }} provider packages
         run: |
-          echo "Removing Python 3.9-incompatible provider: cloudant"
+          echo "Removing Python 3.8-incompatible provider: cloudant"
           rm -vf dist/apache_airflow_providers_cloudant*
       - name: "Generate source constraints from CI image"
         shell: bash
diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml
index ce557dba431..db5a4ba0340 100644
--- a/.pre-commit-config.yaml
+++ b/.pre-commit-config.yaml
@@ -1058,6 +1058,13 @@ repos:
         files: \.py$
         exclude: ^.*/.*_vendor/
         additional_dependencies: ['rich>=12.4.4']
+      - id: check-compat-cache-on-methods
+        name: Check that compat cache do not use on class methods
+        entry: ./scripts/ci/pre_commit/compat_cache_on_methods.py
+        language: python
+        pass_filenames: true
+        files: ^airflow/.*\.py$
+        exclude: ^.*/.*_vendor/
       - id: check-code-deprecations
         name: Check deprecations categories in decorators
         entry: ./scripts/ci/pre_commit/check_deprecations.py
diff --git a/.readthedocs.yml b/.readthedocs.yml
index 4aa28ee78b0..aa16e3a8e3d 100644
--- a/.readthedocs.yml
+++ b/.readthedocs.yml
@@ -20,7 +20,7 @@ formats: []
 sphinx:
     configuration: docs/rtd-deprecation/conf.py
 python:
-    version: "3.9"
+    version: "3.8"
     install:
         - method: pip
           path: .
diff --git a/Dockerfile b/Dockerfile
index 4525a717728..cfb894ac87d 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -47,7 +47,7 @@ ARG AIRFLOW_USER_HOME_DIR=/home/airflow
 # latest released version here
 ARG AIRFLOW_VERSION="2.10.2"
 
-ARG PYTHON_BASE_IMAGE="python:3.9-slim-bookworm"
+ARG PYTHON_BASE_IMAGE="python:3.8-slim-bookworm"
 
 ARG AIRFLOW_PIP_VERSION=24.2
 ARG AIRFLOW_UV_VERSION=0.4.17
diff --git a/Dockerfile.ci b/Dockerfile.ci
index 304d2a4a2d4..f7b7bb41720 100644
--- a/Dockerfile.ci
+++ b/Dockerfile.ci
@@ -16,7 +16,7 @@
 #
 # WARNING: THIS DOCKERFILE IS NOT INTENDED FOR PRODUCTION USE OR DEPLOYMENT.
 #
-ARG PYTHON_BASE_IMAGE="python:3.9-slim-bookworm"
+ARG PYTHON_BASE_IMAGE="python:3.8-slim-bookworm"
 
 ##############################################################################################
 # This is the script image where we keep all inlined bash scripts needed in other segments
@@ -810,7 +810,7 @@ chmod 1777 /tmp
 
 AIRFLOW_SOURCES=$(cd "${IN_CONTAINER_DIR}/../.." || exit 1; pwd)
 
-PYTHON_MAJOR_MINOR_VERSION=${PYTHON_MAJOR_MINOR_VERSION:=3.9}
+PYTHON_MAJOR_MINOR_VERSION=${PYTHON_MAJOR_MINOR_VERSION:=3.8}
 
 export AIRFLOW_HOME=${AIRFLOW_HOME:=${HOME}}
 
diff --git a/INSTALL b/INSTALL
index 6583d9de442..5ccabe2ff32 100644
--- a/INSTALL
+++ b/INSTALL
@@ -141,7 +141,9 @@ This is what it shows currently:
 ┏━━━━━━━━━━━━━┳━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
 ┃ Name        ┃ Type    ┃ Description                                                   ┃
 ┡━━━━━━━━━━━━━╇━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┩
-│ default     │ virtual │ Default environment with Python 3.9 for maximum compatibility │
+│ default     │ virtual │ Default environment with Python 3.8 for maximum compatibility │
+├─────────────┼─────────┼───────────────────────────────────────────────────────────────┤
+│ airflow-38  │ virtual │ Environment with Python 3.8. No devel installed.              │
 ├─────────────┼─────────┼───────────────────────────────────────────────────────────────┤
 │ airflow-39  │ virtual │ Environment with Python 3.9. No devel installed.              │
 ├─────────────┼─────────┼───────────────────────────────────────────────────────────────┤
@@ -152,7 +154,7 @@ This is what it shows currently:
 │ airflow-312 │ virtual │ Environment with Python 3.12. No devel installed              │
 └─────────────┴─────────┴───────────────────────────────────────────────────────────────┘
 
-The default env (if you have not used one explicitly) is `default` and it is a Python 3.9
+The default env (if you have not used one explicitly) is `default` and it is a Python 3.8
 virtualenv for maximum compatibility with `devel` extra installed - this devel extra contains the minimum set
 of dependencies and tools that should be used during unit testing of core Airflow and running all `airflow`
 CLI commands - without support for providers or databases.
@@ -226,15 +228,15 @@ to avoid "works-for-me" syndrome, where you use different versions of dependenci
 that are used in main CI tests and by other contributors.
 
 There are different constraint files for different Python versions. For example, this command will install
-all basic devel requirements and requirements of Google provider as last successfully tested for Python 3.9:
+all basic devel requirements and requirements of Google provider as last successfully tested for Python 3.8:
 
     pip install -e ".[devel,google]"" \
-      --constraint "https://raw.githubusercontent.com/apache/airflow/constraints-main/constraints-3.9.txt"
+      --constraint "https://raw.githubusercontent.com/apache/airflow/constraints-main/constraints-3.8.txt"
 
 Using the 'constraints-no-providers' constraint files, you can upgrade Airflow without paying attention to the provider's dependencies. This allows you to keep installed provider dependencies and install the latest supported ones using pure Airflow core.
 
 pip install -e ".[devel]" \
-  --constraint "https://raw.githubusercontent.com/apache/airflow/constraints-main/constraints-no-providers-3.9.txt"
+  --constraint "https://raw.githubusercontent.com/apache/airflow/constraints-main/constraints-no-providers-3.8.txt"
 
 Airflow extras
 ==============
diff --git a/README.md b/README.md
index 0419ae04560..3cd6416e934 100644
--- a/README.md
+++ b/README.md
@@ -99,7 +99,7 @@ Apache Airflow is tested with:
 
 |            | Main version (dev)         | Stable version (2.10.2)    |
 |------------|----------------------------|----------------------------|
-| Python     | 3.9, 3.10, 3.11, 3.12      | 3.8, 3.9, 3.10, 3.11, 3.12 |
+| Python     | 3.8, 3.9, 3.10, 3.11, 3.12 | 3.8, 3.9, 3.10, 3.11, 3.12 |
 | Platform   | AMD64/ARM64(\*)            | AMD64/ARM64(\*)            |
 | Kubernetes | 1.28, 1.29, 1.30, 1.31     | 1.27, 1.28, 1.29, 1.30     |
 | PostgreSQL | 12, 13, 14, 15, 16, 17     | 12, 13, 14, 15, 16         |
@@ -178,14 +178,14 @@ them to the appropriate format and workflow that your tool requires.
 
 ```bash
 pip install 'apache-airflow==2.10.2' \
- --constraint "https://raw.githubusercontent.com/apache/airflow/constraints-2.10.2/constraints-3.9.txt"
+ --constraint "https://raw.githubusercontent.com/apache/airflow/constraints-2.10.2/constraints-3.8.txt"
 ```
 
 2. Installing with extras (i.e., postgres, google)
 
 ```bash
 pip install 'apache-airflow[postgres,google]==2.10.2' \
- --constraint "https://raw.githubusercontent.com/apache/airflow/constraints-2.10.2/constraints-3.9.txt"
+ --constraint "https://raw.githubusercontent.com/apache/airflow/constraints-2.10.2/constraints-3.8.txt"
 ```
 
 For information on installing provider packages, check
@@ -313,7 +313,7 @@ They are based on the official release schedule of Python and Kubernetes, nicely
 1. We drop support for Python and Kubernetes versions when they reach EOL. Except for Kubernetes, a
    version stays supported by Airflow if two major cloud providers still provide support for it. We drop
    support for those EOL versions in main right after EOL date, and it is effectively removed when we release
-   the first new MINOR (Or MAJOR if there is no new MINOR version) of Airflow. For example, for Python 3.9 it
+   the first new MINOR (Or MAJOR if there is no new MINOR version) of Airflow. For example, for Python 3.8 it
    means that we will drop support in main right after 27.06.2023, and the first MAJOR or MINOR version of
    Airflow released after will not have it.
 
diff --git a/airflow/cli/commands/connection_command.py b/airflow/cli/commands/connection_command.py
index aace3f9c9ae..f68830c490b 100644
--- a/airflow/cli/commands/connection_command.py
+++ b/airflow/cli/commands/connection_command.py
@@ -21,7 +21,6 @@ from __future__ import annotations
 import json
 import os
 import warnings
-from functools import cache
 from pathlib import Path
 from typing import Any
 from urllib.parse import urlsplit, urlunsplit
@@ -31,6 +30,7 @@ from sqlalchemy.orm import exc
 
 from airflow.cli.simple_table import AirflowConsole
 from airflow.cli.utils import is_stdout, print_export_output
+from airflow.compat.functools import cache
 from airflow.configuration import conf
 from airflow.exceptions import AirflowNotFoundException
 from airflow.hooks.base import BaseHook
diff --git a/docker_tests/constants.py b/airflow/compat/functools.py
similarity index 67%
copy from docker_tests/constants.py
copy to airflow/compat/functools.py
index 7be368a2f8b..7b521f9f9da 100644
--- a/docker_tests/constants.py
+++ b/airflow/compat/functools.py
@@ -1,3 +1,4 @@
+#
 # 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
@@ -16,11 +17,17 @@
 # under the License.
 from __future__ import annotations
 
-import os
-from pathlib import Path
+import sys
+
+if sys.version_info >= (3, 9):
+    from functools import cache
+else:
+    from functools import lru_cache
+
+    cache = lru_cache(maxsize=None)
 
-SOURCE_ROOT = Path(__file__).resolve().parents[1]
+# We need to keep it around, in case it was used in the code of old providers, but since we are
+# Python 3.8+ we can directly import the functools one
+from functools import cached_property  # type: ignore
 
-DEFAULT_PYTHON_MAJOR_MINOR_VERSION = "3.9"
-DEFAULT_DOCKER_IMAGE = f"ghcr.io/apache/airflow/main/prod/python{DEFAULT_PYTHON_MAJOR_MINOR_VERSION}:latest"
-DOCKER_IMAGE = os.environ.get("DOCKER_IMAGE") or DEFAULT_DOCKER_IMAGE
+__all__ = ["cache", "cached_property"]
diff --git a/airflow/configuration.py b/airflow/configuration.py
index 81dc1836539..f50e1926838 100644
--- a/airflow/configuration.py
+++ b/airflow/configuration.py
@@ -1790,7 +1790,9 @@ class AirflowConfigParser(ConfigParser):
                     )
         self._default_values = create_default_config_parser(self.configuration_description)
         # sensitive_config_values needs to be refreshed here. This is a cached_property, so we can delete
-        # the cached values, and it will be refreshed on next access.
+        # the cached values, and it will be refreshed on next access. This has been an implementation
+        # detail in Python 3.8 but as of Python 3.9 it is documented behaviour.
+        # See https://docs.python.org/3/library/functools.html#functools.cached_property
         try:
             del self.sensitive_config_values
         except AttributeError:
diff --git a/airflow/io/__init__.py b/airflow/io/__init__.py
index 49f2711c3c6..9996a77717a 100644
--- a/airflow/io/__init__.py
+++ b/airflow/io/__init__.py
@@ -18,7 +18,6 @@ from __future__ import annotations
 
 import inspect
 import logging
-from functools import cache
 from typing import (
     TYPE_CHECKING,
     Callable,
@@ -27,6 +26,7 @@ from typing import (
 
 from fsspec.implementations.local import LocalFileSystem
 
+from airflow.compat.functools import cache
 from airflow.providers_manager import ProvidersManager
 from airflow.stats import Stats
 from airflow.utils.module_loading import import_string
diff --git a/airflow/models/taskinstance.py b/airflow/models/taskinstance.py
index e75ad83923b..31f7b6535a9 100644
--- a/airflow/models/taskinstance.py
+++ b/airflow/models/taskinstance.py
@@ -31,7 +31,6 @@ from collections import defaultdict
 from contextlib import nullcontext
 from datetime import timedelta
 from enum import Enum
-from functools import cache
 from typing import TYPE_CHECKING, Any, Callable, Collection, Generator, Iterable, Mapping, Tuple
 from urllib.parse import quote
 
@@ -70,6 +69,7 @@ from airflow import settings
 from airflow.api_internal.internal_api_call import InternalApiConfig, internal_api_call
 from airflow.assets import Asset, AssetAlias
 from airflow.assets.manager import asset_manager
+from airflow.compat.functools import cache
 from airflow.configuration import conf
 from airflow.exceptions import (
     AirflowException,
diff --git a/airflow/operators/python.py b/airflow/operators/python.py
index b032b45ed3e..a4788caedf4 100644
--- a/airflow/operators/python.py
+++ b/airflow/operators/python.py
@@ -30,13 +30,13 @@ import types
 import warnings
 from abc import ABCMeta, abstractmethod
 from collections.abc import Container
-from functools import cache
 from pathlib import Path
 from tempfile import TemporaryDirectory
 from typing import TYPE_CHECKING, Any, Callable, Collection, Iterable, Mapping, NamedTuple, Sequence
 
 import lazy_object_proxy
 
+from airflow.compat.functools import cache
 from airflow.exceptions import (
     AirflowConfigException,
     AirflowException,
diff --git a/airflow/providers/MANAGING_PROVIDERS_LIFECYCLE.rst b/airflow/providers/MANAGING_PROVIDERS_LIFECYCLE.rst
index 3d3e95c28b1..48980f2153c 100644
--- a/airflow/providers/MANAGING_PROVIDERS_LIFECYCLE.rst
+++ b/airflow/providers/MANAGING_PROVIDERS_LIFECYCLE.rst
@@ -454,7 +454,7 @@ If you have pre-commit installed, pre-commit will be run automatically on commit
 manually after commit, you can run it via ``breeze static-checks --last-commit`` some of the tests might fail
 because suspension of the provider might cause changes in the dependencies, so if you see errors about
 missing dependencies imports, non-usable classes etc., you will need to build the CI image locally
-via ``breeze build-image --python 3.9 --upgrade-to-newer-dependencies`` after the first pre-commit run
+via ``breeze build-image --python 3.8 --upgrade-to-newer-dependencies`` after the first pre-commit run
 and then run the static checks again.
 
 If you want to be absolutely sure to run all static checks you can always do this via
diff --git a/airflow/providers/amazon/aws/transfers/sql_to_s3.py b/airflow/providers/amazon/aws/transfers/sql_to_s3.py
index 19bc7f016b1..65e40797a59 100644
--- a/airflow/providers/amazon/aws/transfers/sql_to_s3.py
+++ b/airflow/providers/amazon/aws/transfers/sql_to_s3.py
@@ -223,9 +223,12 @@ class SqlToS3Operator(BaseOperator):
         for group_label in (grouped_df := df.groupby(**self.groupby_kwargs)).groups:
             yield (
                 cast(str, group_label),
-                grouped_df.get_group(group_label)
-                .drop(random_column_name, axis=1, errors="ignore")
-                .reset_index(drop=True),
+                cast(
+                    "pd.DataFrame",
+                    grouped_df.get_group(group_label)
+                    .drop(random_column_name, axis=1, errors="ignore")
+                    .reset_index(drop=True),
+                ),
             )
 
     def _get_hook(self) -> DbApiHook:
diff --git a/airflow/providers/amazon/aws/utils/mixins.py b/airflow/providers/amazon/aws/utils/mixins.py
index 2fb80bcb151..9dbbde91487 100644
--- a/airflow/providers/amazon/aws/utils/mixins.py
+++ b/airflow/providers/amazon/aws/utils/mixins.py
@@ -27,11 +27,12 @@ This module contains different mixin classes for internal use within the Amazon
 
 from __future__ import annotations
 
-from functools import cache, cached_property
+from functools import cached_property
 from typing import Any, Generic, NamedTuple, TypeVar
 
 from typing_extensions import final
 
+from airflow.compat.functools import cache
 from airflow.providers.amazon.aws.hooks.base_aws import AwsGenericHook
 
 AwsHookType = TypeVar("AwsHookType", bound=AwsGenericHook)
diff --git a/airflow/providers/cloudant/provider.yaml b/airflow/providers/cloudant/provider.yaml
index 57afe105209..b9fc6b39471 100644
--- a/airflow/providers/cloudant/provider.yaml
+++ b/airflow/providers/cloudant/provider.yaml
@@ -52,9 +52,10 @@ dependencies:
 
 excluded-python-versions:
   # ibmcloudant transitively brings in urllib3 2.x, but the snowflake provider has a dependency that pins
-  # urllib3 to 1.x on Python 3.9; thus we exclude those Python versions from taking the update
+  # urllib3 to 1.x on Python 3.8 and 3.9; thus we exclude those Python versions from taking the update
   # to ibmcloudant.
   # See #21004, #41555, and https://github.com/snowflakedb/snowflake-connector-python/issues/2016
+  - "3.8"
   - "3.9"
 
 integrations:
diff --git a/airflow/providers/cncf/kubernetes/kubernetes_helper_functions.py b/airflow/providers/cncf/kubernetes/kubernetes_helper_functions.py
index c603f8a178b..d337caf14c1 100644
--- a/airflow/providers/cncf/kubernetes/kubernetes_helper_functions.py
+++ b/airflow/providers/cncf/kubernetes/kubernetes_helper_functions.py
@@ -19,7 +19,6 @@ from __future__ import annotations
 import logging
 import secrets
 import string
-from functools import cache
 from typing import TYPE_CHECKING
 
 import pendulum
@@ -27,6 +26,7 @@ from deprecated import deprecated
 from kubernetes.client.rest import ApiException
 from slugify import slugify
 
+from airflow.compat.functools import cache
 from airflow.configuration import conf
 from airflow.exceptions import AirflowProviderDeprecationWarning
 
diff --git a/airflow/providers/common/io/xcom/backend.py b/airflow/providers/common/io/xcom/backend.py
index 256b503181e..af55baa4c06 100644
--- a/airflow/providers/common/io/xcom/backend.py
+++ b/airflow/providers/common/io/xcom/backend.py
@@ -19,13 +19,12 @@ from __future__ import annotations
 import contextlib
 import json
 import uuid
-from functools import cache
-from pathlib import Path
 from typing import TYPE_CHECKING, Any, TypeVar
 from urllib.parse import urlsplit
 
 import fsspec.utils
 
+from airflow.compat.functools import cache
 from airflow.configuration import conf
 from airflow.io.path import ObjectStoragePath
 from airflow.models.xcom import BaseXCom
@@ -41,6 +40,22 @@ T = TypeVar("T")
 SECTION = "common.io"
 
 
+def _is_relative_to(o: ObjectStoragePath, other: ObjectStoragePath) -> bool:
+    """
+    Return whether or not this path is relative to the other path.
+
+    This is a port of the pathlib.Path.is_relative_to method. It is not available in python 3.8.
+    """
+    if hasattr(o, "is_relative_to"):
+        return o.is_relative_to(other)
+
+    try:
+        o.relative_to(other)
+        return True
+    except ValueError:
+        return False
+
+
 def _get_compression_suffix(compression: str) -> str:
     """
     Return the compression suffix for the given compression.
@@ -96,7 +111,7 @@ class XComObjectStorageBackend(BaseXCom):
             raise TypeError(f"Not a valid url: {data}") from None
 
         if url.scheme:
-            if not Path.is_relative_to(ObjectStoragePath(data), p):
+            if not _is_relative_to(ObjectStoragePath(data), p):
                 raise ValueError(f"Invalid key: {data}")
             return p / data.replace(str(p), "", 1).lstrip("/")
 
diff --git a/airflow/providers/openlineage/conf.py b/airflow/providers/openlineage/conf.py
index 9c0253bbab4..b0c763b280a 100644
--- a/airflow/providers/openlineage/conf.py
+++ b/airflow/providers/openlineage/conf.py
@@ -35,7 +35,7 @@ if os.getenv("PYTEST_VERSION"):
 
     cache = decorator
 else:
-    from functools import cache
+    from airflow.compat.functools import cache
 from airflow.configuration import conf
 
 _CONFIG_SECTION = "openlineage"
diff --git a/airflow/serialization/serialized_objects.py b/airflow/serialization/serialized_objects.py
index 9f180c2a5de..a4801b767ac 100644
--- a/airflow/serialization/serialized_objects.py
+++ b/airflow/serialization/serialized_objects.py
@@ -24,7 +24,6 @@ import enum
 import inspect
 import logging
 import weakref
-from functools import cache
 from inspect import signature
 from textwrap import dedent
 from typing import TYPE_CHECKING, Any, Collection, Iterable, Mapping, NamedTuple, Union, cast
@@ -44,6 +43,7 @@ from airflow.assets import (
     _AssetAliasCondition,
 )
 from airflow.callbacks.callback_requests import DagCallbackRequest, TaskCallbackRequest
+from airflow.compat.functools import cache
 from airflow.exceptions import AirflowException, SerializationError, TaskDeferred
 from airflow.jobs.job import Job
 from airflow.models import Trigger
diff --git a/airflow/serialization/serializers/timezone.py b/airflow/serialization/serializers/timezone.py
index 3d2a29ea08b..a1f40e67c69 100644
--- a/airflow/serialization/serializers/timezone.py
+++ b/airflow/serialization/serializers/timezone.py
@@ -18,6 +18,7 @@
 from __future__ import annotations
 
 import datetime
+import sys
 from typing import TYPE_CHECKING, Any, cast
 
 from airflow.utils.module_loading import qualname
@@ -29,9 +30,15 @@ if TYPE_CHECKING:
 serializers = [
     "pendulum.tz.timezone.FixedTimezone",
     "pendulum.tz.timezone.Timezone",
-    "zoneinfo.ZoneInfo",
 ]
 
+PY39 = sys.version_info >= (3, 9)
+
+if PY39:
+    serializers.append("zoneinfo.ZoneInfo")
+else:
+    serializers.append("backports.zoneinfo.ZoneInfo")
+
 deserializers = serializers
 
 __version__ = 1
@@ -76,8 +83,11 @@ def deserialize(classname: str, version: int, data: object) -> Any:
     if version > __version__:
         raise TypeError(f"serialized {version} of {classname} > {__version__}")
 
-    if classname == "backports.zoneinfo.ZoneInfo" and isinstance(data, str):
-        from zoneinfo import ZoneInfo
+    if "zoneinfo.ZoneInfo" in classname:
+        try:
+            from zoneinfo import ZoneInfo
+        except ImportError:
+            from backports.zoneinfo import ZoneInfo
 
         return ZoneInfo(data)
 
diff --git a/airflow/utils/log/secrets_masker.py b/airflow/utils/log/secrets_masker.py
index 4f9604aced7..13c93d992ff 100644
--- a/airflow/utils/log/secrets_masker.py
+++ b/airflow/utils/log/secrets_masker.py
@@ -22,7 +22,7 @@ import collections.abc
 import logging
 import sys
 from enum import Enum
-from functools import cache, cached_property
+from functools import cached_property
 from typing import (
     TYPE_CHECKING,
     Any,
@@ -42,6 +42,7 @@ from typing import (
 import re2
 
 from airflow import settings
+from airflow.compat.functools import cache
 
 if TYPE_CHECKING:
     from kubernetes.client import V1EnvVar
diff --git a/airflow/utils/platform.py b/airflow/utils/platform.py
index 74f56a0ab03..7945e2b9453 100644
--- a/airflow/utils/platform.py
+++ b/airflow/utils/platform.py
@@ -24,7 +24,8 @@ import os
 import pkgutil
 import platform
 import sys
-from functools import cache
+
+from airflow.compat.functools import cache
 
 IS_WINDOWS = platform.system() == "Windows"
 
diff --git a/airflow/www/forms.py b/airflow/www/forms.py
index a3b1d5262db..5b746ab633c 100644
--- a/airflow/www/forms.py
+++ b/airflow/www/forms.py
@@ -20,7 +20,6 @@ from __future__ import annotations
 import datetime
 import json
 import operator
-from functools import cache
 from typing import Iterator
 
 import pendulum
@@ -37,6 +36,7 @@ from wtforms import widgets
 from wtforms.fields import Field, IntegerField, PasswordField, SelectField, StringField, TextAreaField
 from wtforms.validators import InputRequired, Optional
 
+from airflow.compat.functools import cache
 from airflow.configuration import conf
 from airflow.providers_manager import ProvidersManager
 from airflow.utils.types import DagRunType
diff --git a/airflow/www/views.py b/airflow/www/views.py
index 8dba4c4fcc0..c4e4867ec9a 100644
--- a/airflow/www/views.py
+++ b/airflow/www/views.py
@@ -32,7 +32,7 @@ import traceback
 import warnings
 from bisect import insort_left
 from collections import defaultdict
-from functools import cache, cached_property
+from functools import cached_property
 from json import JSONDecodeError
 from pathlib import Path
 from typing import TYPE_CHECKING, Any, Collection, Iterator, Mapping, MutableMapping, Sequence
@@ -89,6 +89,7 @@ from airflow.api.common.mark_tasks import (
 )
 from airflow.assets import Asset, AssetAlias
 from airflow.auth.managers.models.resource_details import AccessView, DagAccessEntity, DagDetails
+from airflow.compat.functools import cache
 from airflow.configuration import AIRFLOW_CONFIG, conf
 from airflow.exceptions import (
     AirflowConfigException,
@@ -177,7 +178,7 @@ def sanitize_args(args: dict[str, Any]) -> dict[str, Any]:
     return {key: value for key, value in args.items() if not key.startswith("_")}
 
 
-# Following the release of https://github.com/python/cpython/issues/102153 in Python 3.9.17 on
+# Following the release of https://github.com/python/cpython/issues/102153 in Python 3.8.17 and 3.9.17 on
 # June 6, 2023, we are adding extra sanitization of the urls passed to get_safe_url method to make it works
 # the same way regardless if the user uses latest Python patchlevel versions or not. This also follows
 # a recommended solution by the Python core team.
diff --git a/clients/python/README.md b/clients/python/README.md
index 7bba821e43e..e1427fce92d 100644
--- a/clients/python/README.md
+++ b/clients/python/README.md
@@ -248,7 +248,7 @@ For more information, please visit [https://airflow.apache.org](https://airflow.
 
 ## Requirements.
 
-Python >=3.9
+Python >=3.8
 
 ## Installation & Usage
 
diff --git a/clients/python/pyproject.toml b/clients/python/pyproject.toml
index 15847442496..1a5ccdc9e2b 100644
--- a/clients/python/pyproject.toml
+++ b/clients/python/pyproject.toml
@@ -25,7 +25,7 @@ dynamic = ["version"]
 description = "Apache Airflow API (Stable)"
 readme = "README.md"
 license-files.globs = ["LICENSE", "NOTICE"]
-requires-python = "~=3.9"
+requires-python = "~=3.8"
 authors = [
     { name = "Apache Software Foundation", email = "dev@airflow.apache.org" },
 ]
@@ -42,6 +42,7 @@ classifiers = [
     "Intended Audience :: Developers",
     "Intended Audience :: System Administrators",
     "License :: OSI Approved :: Apache Software License",
+    "Programming Language :: Python :: 3.8",
     "Programming Language :: Python :: 3.9",
     "Programming Language :: Python :: 3.10",
     "Programming Language :: Python :: 3.11",
@@ -73,7 +74,7 @@ run-coverage = "pytest test"
 run = "run-coverage --no-cov"
 
 [[tool.hatch.envs.test.matrix]]
-python = ["3.9", "3.10", "3.11"]
+python = ["3.8", "3.9", "3.10", "3.11"]
 
 [tool.hatch.version]
 path = "./version.txt"
diff --git a/clients/python/test_python_client.py b/clients/python/test_python_client.py
index 5d0accdc019..d4d3f98efd8 100644
--- a/clients/python/test_python_client.py
+++ b/clients/python/test_python_client.py
@@ -17,7 +17,7 @@
 #
 # PEP 723 compliant inline script metadata (not yet widely supported)
 # /// script
-# requires-python = ">=3.9"
+# requires-python = ">=3.8"
 # dependencies = [
 #   "apache-airflow-client",
 #   "rich",
diff --git a/constraints/README.md b/constraints/README.md
index 9d02755dc5c..791450d1bd7 100644
--- a/constraints/README.md
+++ b/constraints/README.md
@@ -29,12 +29,12 @@ This allows you to iterate on dependencies without having to run `--upgrade-to-n
 Typical workflow in this case is:
 
 * download and copy the constraint file to the folder (for example via
-[The GitHub Raw Link](https://raw.githubusercontent.com/apache/airflow/constraints-main/constraints-3.9.txt)
+[The GitHub Raw Link](https://raw.githubusercontent.com/apache/airflow/constraints-main/constraints-3.8.txt)
 * modify the constraint file in "constraints" folder
 * build the image using this command
 
 ```bash
-breeze ci-image build --python 3.9 --airflow-constraints-location constraints/constraints-3.9.txt
+breeze ci-image build --python 3.8 --airflow-constraints-location constraints/constraints-3.8txt
 ```
 
 You can continue iterating and updating the constraint file (and rebuilding the image)
@@ -46,7 +46,7 @@ pip freeze | sort | \
     grep -v "apache_airflow" | \
     grep -v "apache-airflow==" | \
     grep -v "@" | \
-    grep -v "/opt/airflow" > /opt/airflow/constraints/constraints-3.9.txt
+    grep -v "/opt/airflow" > /opt/airflow/constraints/constraints-3.8.txt
 ```
 
 If you are working with others on updating the dependencies, you can also commit the constraint
diff --git a/contributing-docs/03_contributors_quick_start.rst b/contributing-docs/03_contributors_quick_start.rst
index bddecc6f1e4..8f7ead6deac 100644
--- a/contributing-docs/03_contributors_quick_start.rst
+++ b/contributing-docs/03_contributors_quick_start.rst
@@ -256,7 +256,7 @@ Setting up Breeze
 
 .. code-block:: bash
 
-  breeze --python 3.9 --backend postgres
+  breeze --python 3.8 --backend postgres
 
 .. note::
    If you encounter an error like "docker.credentials.errors.InitializationError:
@@ -313,7 +313,7 @@ Using Breeze
 ------------
 
 1. Starting breeze environment using ``breeze start-airflow`` starts Breeze environment with last configuration run(
-   In this case python and backend will be picked up from last execution ``breeze --python 3.9 --backend postgres``)
+   In this case python and backend will be picked up from last execution ``breeze --python 3.8 --backend postgres``)
    It also automatically starts webserver, backend and scheduler. It drops you in tmux with scheduler in bottom left
    and webserver in bottom right. Use ``[Ctrl + B] and Arrow keys`` to navigate.
 
@@ -324,9 +324,9 @@ Using Breeze
       Use CI image.
 
    Branch name:            main
-   Docker image:           ghcr.io/apache/airflow/main/ci/python3.9:latest
+   Docker image:           ghcr.io/apache/airflow/main/ci/python3.8:latest
    Airflow source version: 2.4.0.dev0
-   Python version:         3.9
+   Python version:         3.8
    Backend:                mysql 5.7
 
 
@@ -365,7 +365,7 @@ Using Breeze
 
   .. code-block:: bash
 
-    breeze --python 3.9 --backend postgres
+    breeze --python 3.8 --backend postgres
 
   2. Open tmux
 
@@ -601,27 +601,34 @@ All Tests are inside ./tests directory.
 
    root@63528318c8b1:/opt/airflow# pytest tests/utils/test_dates.py
    ============================================================= test session starts ==============================================================
-   platform linux -- Python 3.9.20, pytest-8.3.3, pluggy-1.5.0 -- /usr/local/bin/python
+   platform linux -- Python 3.8.16, pytest-7.2.1, pluggy-1.0.0 -- /usr/local/bin/python
    cachedir: .pytest_cache
-   rootdir: /opt/airflow
-   configfile: pyproject.toml
-   plugins: anyio-4.6.0, time-machine-2.15.0, icdiff-0.9, rerunfailures-14.0, instafail-0.5.0, custom-exit-code-0.3.0, xdist-3.6.1, mock-3.14.0, cov-5.0.0, asyncio-0.24.0, requests-mock-1.12.1, timeouts-1.2.1
-   asyncio: mode=strict, default_loop_scope=None
+   rootdir: /opt/airflow, configfile: pytest.ini
+   plugins: timeouts-1.2.1, capture-warnings-0.0.4, cov-4.0.0, requests-mock-1.10.0, rerunfailures-11.1.1, anyio-3.6.2, instafail-0.4.2, time-machine-2.9.0, asyncio-0.20.3, httpx-0.21.3, xdist-3.2.0
+   asyncio: mode=strict
    setup timeout: 0.0s, execution timeout: 0.0s, teardown timeout: 0.0s
-   collected 4 items
-
-   tests/utils/test_dates.py::TestDates::test_parse_execution_date PASSED                                                                           [ 25%]
-   tests/utils/test_dates.py::TestDates::test_round_time PASSED                                                                                     [ 50%]
-   tests/utils/test_dates.py::TestDates::test_infer_time_unit PASSED                                                                                [ 75%]
-   tests/utils/test_dates.py::TestDates::test_scale_time_units PASSED                                                                               [100%]
-
-   ================================================================== 4 passed in 3.30s ===================================================================
+   collected 12 items
+
+   tests/utils/test_dates.py::TestDates::test_days_ago PASSED                                                                               [  8%]
+   tests/utils/test_dates.py::TestDates::test_parse_execution_date PASSED                                                                   [ 16%]
+   tests/utils/test_dates.py::TestDates::test_round_time PASSED                                                                             [ 25%]
+   tests/utils/test_dates.py::TestDates::test_infer_time_unit PASSED                                                                        [ 33%]
+   tests/utils/test_dates.py::TestDates::test_scale_time_units PASSED                                                                       [ 41%]
+   tests/utils/test_dates.py::TestUtilsDatesDateRange::test_no_delta PASSED                                                                 [ 50%]
+   tests/utils/test_dates.py::TestUtilsDatesDateRange::test_end_date_before_start_date PASSED                                               [ 58%]
+   tests/utils/test_dates.py::TestUtilsDatesDateRange::test_both_end_date_and_num_given PASSED                                              [ 66%]
+   tests/utils/test_dates.py::TestUtilsDatesDateRange::test_invalid_delta PASSED                                                            [ 75%]
+   tests/utils/test_dates.py::TestUtilsDatesDateRange::test_positive_num_given PASSED                                                       [ 83%]
+   tests/utils/test_dates.py::TestUtilsDatesDateRange::test_negative_num_given PASSED                                                       [ 91%]
+   tests/utils/test_dates.py::TestUtilsDatesDateRange::test_delta_cron_presets PASSED                                                       [100%]
+
+   ============================================================== 12 passed in 0.24s ==============================================================
 
 - Running All the test with Breeze by specifying required python version, backend, backend version
 
 .. code-block:: bash
 
-   breeze --backend postgres --postgres-version 15 --python 3.9 --db-reset testing tests --test-type All
+   breeze --backend postgres --postgres-version 15 --python 3.8 --db-reset testing tests --test-type All
 
 - Running specific type of test
 
@@ -631,7 +638,7 @@ All Tests are inside ./tests directory.
 
   .. code-block:: bash
 
-    breeze --backend postgres --postgres-version 15 --python 3.9 --db-reset testing tests --test-type Core
+    breeze --backend postgres --postgres-version 15 --python 3.8 --db-reset testing tests --test-type Core
 
 
 - Running Integration test for specific test type
@@ -640,7 +647,7 @@ All Tests are inside ./tests directory.
 
   .. code-block:: bash
 
-   breeze --backend postgres --postgres-version 15 --python 3.9 --db-reset testing tests --test-type All --integration mongo
+   breeze --backend postgres --postgres-version 15 --python 3.8 --db-reset testing tests --test-type All --integration mongo
 
 - For more information on Testing visit : |09_testing.rst|
 
diff --git a/contributing-docs/05_pull_requests.rst b/contributing-docs/05_pull_requests.rst
index 1e141679434..ea9300f9c64 100644
--- a/contributing-docs/05_pull_requests.rst
+++ b/contributing-docs/05_pull_requests.rst
@@ -92,7 +92,7 @@ these guidelines:
     you can push your code to PR and see results of the tests in the CI.
 
 -   You can use any supported python version to run the tests, but the best is to check
-    if it works for the oldest supported version (Python 3.9 currently). In rare cases
+    if it works for the oldest supported version (Python 3.8 currently). In rare cases
     tests might fail with the oldest version when you use features that are available in newer Python
     versions. For that purpose we have ``airflow.compat`` package where we keep back-ported
     useful features from newer versions.
diff --git a/contributing-docs/07_local_virtualenv.rst b/contributing-docs/07_local_virtualenv.rst
index 2c92edee97a..8439eb2ab20 100644
--- a/contributing-docs/07_local_virtualenv.rst
+++ b/contributing-docs/07_local_virtualenv.rst
@@ -37,7 +37,7 @@ Required Software Packages
 Use system-level package managers like yum, apt-get for Linux, or
 Homebrew for macOS to install required software packages:
 
-* Python (One of: 3.9, 3.10, 3.11, 3.12)
+* Python (One of: 3.8, 3.9, 3.10, 3.11, 3.12)
 * MySQL 5.7+
 * libxml
 * helm (only for helm chart tests)
@@ -187,7 +187,9 @@ This is what it shows currently:
 +-------------+---------+---------------------------------------------------------------+
 | Name        | Type    | Description                                                   |
 +=============+=========+===============================================================+
-| default     | virtual | Default environment with Python 3.9 for maximum compatibility |
+| default     | virtual | Default environment with Python 3.8 for maximum compatibility |
++-------------+---------+---------------------------------------------------------------+
+| airflow-38  | virtual | Environment with Python 3.8. No devel installed.              |
 +-------------+---------+---------------------------------------------------------------+
 | airflow-39  | virtual | Environment with Python 3.9. No devel installed.              |
 +-------------+---------+---------------------------------------------------------------+
@@ -198,7 +200,7 @@ This is what it shows currently:
 | airflow-312 | virtual | Environment with Python 3.12. No devel installed              |
 +-------------+---------+---------------------------------------------------------------+
 
-The default env (if you have not used one explicitly) is ``default`` and it is a Python 3.9
+The default env (if you have not used one explicitly) is ``default`` and it is a Python 3.8
 virtualenv for maximum compatibility. You can install devel set of dependencies with it
 by running:
 
@@ -379,12 +381,12 @@ to avoid "works-for-me" syndrome, where you use different version of dependencie
 that are used in main, CI tests and by other contributors.
 
 There are different constraint files for different python versions. For example this command will install
-all basic devel requirements and requirements of google provider as last successfully tested for Python 3.9:
+all basic devel requirements and requirements of google provider as last successfully tested for Python 3.8:
 
 .. code:: bash
 
     pip install -e ".[devel,google]" \
-      --constraint "https://raw.githubusercontent.com/apache/airflow/constraints-main/constraints-source-providers-3.9.txt"
+      --constraint "https://raw.githubusercontent.com/apache/airflow/constraints-main/constraints-source-providers-3.8.txt"
 
 Make sure to use latest main for such installation, those constraints are "development constraints" and they
 are refreshed several times a day to make sure they are up to date with the latest changes in the main branch.
@@ -401,7 +403,7 @@ and install to latest supported ones by pure airflow core.
 .. code:: bash
 
     pip install -e ".[devel]" \
-      --constraint "https://raw.githubusercontent.com/apache/airflow/constraints-main/constraints-no-providers-3.9.txt"
+      --constraint "https://raw.githubusercontent.com/apache/airflow/constraints-main/constraints-no-providers-3.8.txt"
 
 These are examples of the development options available with the local virtualenv in your IDE:
 
diff --git a/contributing-docs/08_static_code_checks.rst b/contributing-docs/08_static_code_checks.rst
index 422a9f027e1..d50b9db3e60 100644
--- a/contributing-docs/08_static_code_checks.rst
+++ b/contributing-docs/08_static_code_checks.rst
@@ -40,7 +40,7 @@ use. So, you can be sure your modifications will also work for CI if they pass
 pre-commit 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.
+in our development workflow. To install and use it, you need at least Python 3.8 locally.
 
 Installing pre-commit hooks
 ---------------------------
@@ -152,6 +152,8 @@ require Breeze Docker image to be built locally.
 +-----------------------------------------------------------+--------------------------------------------------------+---------+
 | check-common-compat-used-for-openlineage                  | Check common.compat is used for OL deprecated classes  |         |
 +-----------------------------------------------------------+--------------------------------------------------------+---------+
+| check-compat-cache-on-methods                             | Check that compat cache do not use on class methods    |         |
++-----------------------------------------------------------+--------------------------------------------------------+---------+
 | check-core-deprecation-classes                            | Verify usage of Airflow deprecation classes in core    |         |
 +-----------------------------------------------------------+--------------------------------------------------------+---------+
 | check-daysago-import-from-utils                           | days_ago imported from airflow.utils.dates             |         |
diff --git a/contributing-docs/12_airflow_dependencies_and_extras.rst b/contributing-docs/12_airflow_dependencies_and_extras.rst
index 8bfbdb630c9..16d2f32ee17 100644
--- a/contributing-docs/12_airflow_dependencies_and_extras.rst
+++ b/contributing-docs/12_airflow_dependencies_and_extras.rst
@@ -86,7 +86,7 @@ from the PyPI package:
 .. code-block:: bash
 
   pip install "apache-airflow[google,amazon,async]==2.2.5" \
-    --constraint "https://raw.githubusercontent.com/apache/airflow/constraints-2.2.5/constraints-3.9.txt"
+    --constraint "https://raw.githubusercontent.com/apache/airflow/constraints-2.2.5/constraints-3.8.txt"
 
 The last one can be used to install Airflow in "minimal" mode - i.e when bare Airflow is installed without
 extras.
@@ -98,7 +98,7 @@ requirements).
 .. code-block:: bash
 
   pip install -e ".[devel]" \
-    --constraint "https://raw.githubusercontent.com/apache/airflow/constraints-main/constraints-source-providers-3.9.txt"
+    --constraint "https://raw.githubusercontent.com/apache/airflow/constraints-main/constraints-source-providers-3.8.txt"
 
 
 This also works with extras - for example:
@@ -106,7 +106,7 @@ This also works with extras - for example:
 .. code-block:: bash
 
   pip install ".[ssh]" \
-    --constraint "https://raw.githubusercontent.com/apache/airflow/constraints-main/constraints-source-providers-3.9.txt"
+    --constraint "https://raw.githubusercontent.com/apache/airflow/constraints-main/constraints-source-providers-3.8.txt"
 
 
 There are different set of fixed constraint files for different python major/minor versions and you should
@@ -118,7 +118,7 @@ using ``constraints-no-providers`` constraint files as well.
 .. code-block:: bash
 
   pip install . --upgrade \
-    --constraint "https://raw.githubusercontent.com/apache/airflow/constraints-main/constraints-no-providers-3.9.txt"
+    --constraint "https://raw.githubusercontent.com/apache/airflow/constraints-main/constraints-no-providers-3.8.txt"
 
 
 The ``constraints-<PYTHON_MAJOR_MINOR_VERSION>.txt`` and ``constraints-no-providers-<PYTHON_MAJOR_MINOR_VERSION>.txt``
diff --git a/contributing-docs/testing/docker_compose_tests.rst b/contributing-docs/testing/docker_compose_tests.rst
index 921a3cafb19..94864b4137d 100644
--- a/contributing-docs/testing/docker_compose_tests.rst
+++ b/contributing-docs/testing/docker_compose_tests.rst
@@ -48,7 +48,7 @@ Running complete test with breeze:
 
 .. code-block:: bash
 
-    breeze prod-image build --python 3.9
+    breeze prod-image build --python 3.8
     breeze testing docker-compose-tests
 
 In case the test fails, it will dump the logs from the running containers to the console and it
@@ -65,8 +65,8 @@ to see the output of the test as it happens (it can be also set via
 The test can be also run manually with ``pytest docker_tests/test_docker_compose_quick_start.py``
 command, provided that you have a local airflow venv with ``dev`` extra set and the
 ``DOCKER_IMAGE`` environment variable is set to the image you want to test. The variable defaults
-to ``ghcr.io/apache/airflow/main/prod/python3.9:latest`` which is built by default
-when you run ``breeze prod-image build --python 3.9``. also the switches ``--skip-docker-compose-deletion``
+to ``ghcr.io/apache/airflow/main/prod/python3.8:latest`` which is built by default
+when you run ``breeze prod-image build --python 3.8``. also the switches ``--skip-docker-compose-deletion``
 and ``--wait-for-containers-timeout`` can only be passed via environment variables.
 
 If you want to debug the deployment using ``docker compose`` commands after ``SKIP_DOCKER_COMPOSE_DELETION``
@@ -87,7 +87,7 @@ the prod image build command above.
 
 .. code-block:: bash
 
-    export AIRFLOW_IMAGE_NAME=ghcr.io/apache/airflow/main/prod/python3.9:latest
+    export AIRFLOW_IMAGE_NAME=ghcr.io/apache/airflow/main/prod/python3.8:latest
 
 and follow the instructions in the
 `Running Airflow in Docker <https://airflow.apache.org/docs/apache-airflow/stable/howto/docker-compose/index.html>`_
diff --git a/contributing-docs/testing/k8s_tests.rst b/contributing-docs/testing/k8s_tests.rst
index a9ba3151fe9..a4a6f67da0e 100644
--- a/contributing-docs/testing/k8s_tests.rst
+++ b/contributing-docs/testing/k8s_tests.rst
@@ -47,7 +47,7 @@ per each combination of Python and Kubernetes version. This is used during CI wh
 tests against those different clusters - even in parallel.
 
 The cluster name follows the pattern ``airflow-python-X.Y-vA.B.C`` where X.Y is a major/minor Python version
-and A.B.C is Kubernetes version. Example cluster name:  ``airflow-python-3.9-v1.24.0``
+and A.B.C is Kubernetes version. Example cluster name:  ``airflow-python-3.8-v1.24.0``
 
 Most of the commands can be executed in parallel for multiple images/clusters by adding ``--run-in-parallel``
 to create clusters or deploy airflow. Similarly checking for status, dumping logs and deleting clusters
@@ -215,7 +215,7 @@ Should result in KinD creating the K8S cluster.
 
 .. code-block:: text
 
-    Config created in /Users/jarek/IdeaProjects/airflow/.build/.k8s-clusters/airflow-python-3.9-v1.24.2/.kindconfig.yaml:
+    Config created in /Users/jarek/IdeaProjects/airflow/.build/.k8s-clusters/airflow-python-3.8-v1.24.2/.kindconfig.yaml:
 
     # Licensed to the Apache Software Foundation (ASF) under one
     # or more contributor license agreements.  See the NOTICE file
@@ -251,7 +251,7 @@ Should result in KinD creating the K8S cluster.
 
 
 
-    Creating cluster "airflow-python-3.9-v1.24.2" ...
+    Creating cluster "airflow-python-3.8-v1.24.2" ...
      ✓ Ensuring node image (kindest/node:v1.24.2) 🖼
      ✓ Preparing nodes 📦 📦
      ✓ Writing configuration 📜
@@ -259,10 +259,10 @@ Should result in KinD creating the K8S cluster.
      ✓ Installing CNI 🔌
      ✓ Installing StorageClass 💾
      ✓ Joining worker nodes 🚜
-    Set kubectl context to "kind-airflow-python-3.9-v1.24.2"
+    Set kubectl context to "kind-airflow-python-3.8-v1.24.2"
     You can now use your cluster with:
 
-    kubectl cluster-info --context kind-airflow-python-3.9-v1.24.2
+    kubectl cluster-info --context kind-airflow-python-3.8-v1.24.2
 
     Not sure what to do next? 😅  Check out https://kind.sigs.k8s.io/docs/user/quick-start/
 
@@ -270,9 +270,9 @@ Should result in KinD creating the K8S cluster.
     Connecting to localhost:18150. Num try: 1
     Error when connecting to localhost:18150 : ('Connection aborted.', RemoteDisconnected('Remote end closed connection without response'))
 
-    Airflow webserver is not available at port 18150. Run `breeze k8s deploy-airflow --python 3.9 --kubernetes-version v1.24.2` to (re)deploy airflow
+    Airflow webserver is not available at port 18150. Run `breeze k8s deploy-airflow --python 3.8 --kubernetes-version v1.24.2` to (re)deploy airflow
 
-    KinD cluster airflow-python-3.9-v1.24.2 created!
+    KinD cluster airflow-python-3.8-v1.24.2 created!
 
     NEXT STEP: You might now configure your cluster by:
 
@@ -286,20 +286,20 @@ Should result in KinD creating the K8S cluster.
 
 .. code-block:: text
 
-    Configuring airflow-python-3.9-v1.24.2 to be ready for Airflow deployment
-    Deleting K8S namespaces for kind-airflow-python-3.9-v1.24.2
+    Configuring airflow-python-3.8-v1.24.2 to be ready for Airflow deployment
+    Deleting K8S namespaces for kind-airflow-python-3.8-v1.24.2
     Error from server (NotFound): namespaces "airflow" not found
     Error from server (NotFound): namespaces "test-namespace" not found
     Creating namespaces
     namespace/airflow created
     namespace/test-namespace created
-    Created K8S namespaces for cluster kind-airflow-python-3.9-v1.24.2
+    Created K8S namespaces for cluster kind-airflow-python-3.8-v1.24.2
 
-    Deploying test resources for cluster kind-airflow-python-3.9-v1.24.2
+    Deploying test resources for cluster kind-airflow-python-3.8-v1.24.2
     persistentvolume/test-volume created
     persistentvolumeclaim/test-volume created
     service/airflow-webserver-node-port created
-    Deployed test resources for cluster kind-airflow-python-3.9-v1.24.2
+    Deployed test resources for cluster kind-airflow-python-3.8-v1.24.2
 
 
     NEXT STEP: You might now build your k8s image by:
@@ -317,45 +317,45 @@ Should show the status of current KinD cluster.
 .. code-block:: text
 
     ========================================================================================================================
-    Cluster: airflow-python-3.9-v1.24.2
+    Cluster: airflow-python-3.8-v1.24.2
 
-        * KUBECONFIG=/Users/jarek/IdeaProjects/airflow/.build/.k8s-clusters/airflow-python-3.9-v1.24.2/.kubeconfig
-        * KINDCONFIG=/Users/jarek/IdeaProjects/airflow/.build/.k8s-clusters/airflow-python-3.9-v1.24.2/.kindconfig.yaml
+        * KUBECONFIG=/Users/jarek/IdeaProjects/airflow/.build/.k8s-clusters/airflow-python-3.8-v1.24.2/.kubeconfig
+        * KINDCONFIG=/Users/jarek/IdeaProjects/airflow/.build/.k8s-clusters/airflow-python-3.8-v1.24.2/.kindconfig.yaml
 
-    Cluster info: airflow-python-3.9-v1.24.2
+    Cluster info: airflow-python-3.8-v1.24.2
 
     Kubernetes control plane is running at https://127.0.0.1:48366
     CoreDNS is running at https://127.0.0.1:48366/api/v1/namespaces/kube-system/services/kube-dns:dns/proxy
 
     To further debug and diagnose cluster problems, use 'kubectl cluster-info dump'.
 
-    Storage class for airflow-python-3.9-v1.24.2
+    Storage class for airflow-python-3.8-v1.24.2
 
     NAME                 PROVISIONER             RECLAIMPOLICY   VOLUMEBINDINGMODE      ALLOWVOLUMEEXPANSION   AGE
     standard (default)   rancher.io/local-path   Delete          WaitForFirstConsumer   false                  83s
 
-    Running pods for airflow-python-3.9-v1.24.2
+    Running pods for airflow-python-3.8-v1.24.2
 
     NAME                                                               READY   STATUS    RESTARTS   AGE
     coredns-6d4b75cb6d-rwp9d                                           1/1     Running   0          71s
     coredns-6d4b75cb6d-vqnrc                                           1/1     Running   0          71s
-    etcd-airflow-python-3.9-v1.24.2-control-plane                      1/1     Running   0          84s
+    etcd-airflow-python-3.8-v1.24.2-control-plane                      1/1     Running   0          84s
     kindnet-ckc8l                                                      1/1     Running   0          69s
     kindnet-qqt8k                                                      1/1     Running   0          71s
-    kube-apiserver-airflow-python-3.9-v1.24.2-control-plane            1/1     Running   0          84s
-    kube-controller-manager-airflow-python-3.9-v1.24.2-control-plane   1/1     Running   0          84s
+    kube-apiserver-airflow-python-3.8-v1.24.2-control-plane            1/1     Running   0          84s
+    kube-controller-manager-airflow-python-3.8-v1.24.2-control-plane   1/1     Running   0          84s
     kube-proxy-6g7hn                                                   1/1     Running   0          69s
     kube-proxy-dwfvp                                                   1/1     Running   0          71s
-    kube-scheduler-airflow-python-3.9-v1.24.2-control-plane            1/1     Running   0          84s
+    kube-scheduler-airflow-python-3.8-v1.24.2-control-plane            1/1     Running   0          84s
 
     KinD Cluster API server URL: http://localhost:48366
     Connecting to localhost:18150. Num try: 1
     Error when connecting to localhost:18150 : ('Connection aborted.', RemoteDisconnected('Remote end closed connection without response'))
 
-    Airflow webserver is not available at port 18150. Run `breeze k8s deploy-airflow --python 3.9 --kubernetes-version v1.24.2` to (re)deploy airflow
+    Airflow webserver is not available at port 18150. Run `breeze k8s deploy-airflow --python 3.8 --kubernetes-version v1.24.2` to (re)deploy airflow
 
 
-    Cluster healthy: airflow-python-3.9-v1.24.2
+    Cluster healthy: airflow-python-3.8-v1.24.2
 
 5. Build the image base on PROD Airflow image. You need to build the PROD image first (the command will
    guide you if you did not) either by running the build separately or passing ``--rebuild-base-image``
@@ -373,15 +373,15 @@ Should show the status of current KinD cluster.
 
 .. code-block:: text
 
-    Building the K8S image for Python 3.9 using airflow base image: ghcr.io/apache/airflow/main/prod/python3.9:latest
+    Building the K8S image for Python 3.8 using airflow base image: ghcr.io/apache/airflow/main/prod/python3.8:latest
 
     [+] Building 0.1s (8/8) FINISHED
      => [internal] load build definition from Dockerfile                                                                                                                                                                                                                                           0.0s
      => => transferring dockerfile: 301B                                                                                                                                                                                                                                                           0.0s
      => [internal] load .dockerignore                                                                                                                                                                                                                                                              0.0s
      => => transferring context: 35B                                                                                                                                                                                                                                                               0.0s
-     => [internal] load metadata for ghcr.io/apache/airflow/main/prod/python3.9:latest                                                                                                                                                                                                             0.0s
-     => [1/3] FROM ghcr.io/apache/airflow/main/prod/python3.9:latest                                                                                                                                                                                                                               0.0s
+     => [internal] load metadata for ghcr.io/apache/airflow/main/prod/python3.8:latest                                                                                                                                                                                                             0.0s
+     => [1/3] FROM ghcr.io/apache/airflow/main/prod/python3.8:latest                                                                                                                                                                                                                               0.0s
      => [internal] load build context                                                                                                                                                                                                                                                              0.0s
      => => transferring context: 3.00kB                                                                                                                                                                                                                                                            0.0s
      => CACHED [2/3] COPY airflow/example_dags/ /opt/airflow/dags/                                                                                                                                                                                                                                 0.0s
@@ -389,7 +389,7 @@ Should show the status of current KinD cluster.
      => exporting to image                                                                                                                                                                                                                                                                         0.0s
      => => exporting layers                                                                                                                                                                                                                                                                        0.0s
      => => writing image sha256:c0bdd363c549c3b0731b8e8ce34153d081f239ee2b582355b7b3ffd5394c40bb                                                                                                                                                                                                   0.0s
-     => => naming to ghcr.io/apache/airflow/main/prod/python3.9-kubernetes:latest
+     => => naming to ghcr.io/apache/airflow/main/prod/python3.8-kubernetes:latest
 
     NEXT STEP: You might now upload your k8s image by:
 
@@ -409,9 +409,9 @@ Should show the status of current KinD cluster.
     Good version of kubectl installed: 1.25.0 in /Users/jarek/IdeaProjects/airflow/.build/.k8s-env/bin
     Good version of helm installed: 3.9.2 in /Users/jarek/IdeaProjects/airflow/.build/.k8s-env/bin
     Stable repo is already added
-    Uploading Airflow image ghcr.io/apache/airflow/main/prod/python3.9-kubernetes to cluster airflow-python-3.9-v1.24.2
-    Image: "ghcr.io/apache/airflow/main/prod/python3.9-kubernetes" with ID "sha256:fb6195f7c2c2ad97788a563a3fe9420bf3576c85575378d642cd7985aff97412" not yet present on node "airflow-python-3.9-v1.24.2-worker", loading...
-    Image: "ghcr.io/apache/airflow/main/prod/python3.9-kubernetes" with ID "sha256:fb6195f7c2c2ad97788a563a3fe9420bf3576c85575378d642cd7985aff97412" not yet present on node "airflow-python-3.9-v1.24.2-control-plane", loading...
+    Uploading Airflow image ghcr.io/apache/airflow/main/prod/python3.8-kubernetes to cluster airflow-python-3.8-v1.24.2
+    Image: "ghcr.io/apache/airflow/main/prod/python3.8-kubernetes" with ID "sha256:fb6195f7c2c2ad97788a563a3fe9420bf3576c85575378d642cd7985aff97412" not yet present on node "airflow-python-3.8-v1.24.2-worker", loading...
+    Image: "ghcr.io/apache/airflow/main/prod/python3.8-kubernetes" with ID "sha256:fb6195f7c2c2ad97788a563a3fe9420bf3576c85575378d642cd7985aff97412" not yet present on node "airflow-python-3.8-v1.24.2-control-plane", loading...
 
     NEXT STEP: You might now deploy airflow by:
 
@@ -426,8 +426,8 @@ Should show the status of current KinD cluster.
 
 .. code-block:: text
 
-    Deploying Airflow for cluster airflow-python-3.9-v1.24.2
-    Deploying kind-airflow-python-3.9-v1.24.2 with airflow Helm Chart.
+    Deploying Airflow for cluster airflow-python-3.8-v1.24.2
+    Deploying kind-airflow-python-3.8-v1.24.2 with airflow Helm Chart.
     Copied chart sources to /private/var/folders/v3/gvj4_mw152q556w2rrh7m46w0000gn/T/chart_edu__kir/chart
     Deploying Airflow from /private/var/folders/v3/gvj4_mw152q556w2rrh7m46w0000gn/T/chart_edu__kir/chart
     NAME: airflow
@@ -469,12 +469,12 @@ Should show the status of current KinD cluster.
 
     Information on how to set a static webserver secret key can be found here:
     https://airflow.apache.org/docs/helm-chart/stable/production-guide.html#webserver-secret-key
-    Deployed kind-airflow-python-3.9-v1.24.2 with airflow Helm Chart.
+    Deployed kind-airflow-python-3.8-v1.24.2 with airflow Helm Chart.
 
-    Airflow for Python 3.9 and K8S version v1.24.2 has been successfully deployed.
+    Airflow for Python 3.8 and K8S version v1.24.2 has been successfully deployed.
 
-    The KinD cluster name: airflow-python-3.9-v1.24.2
-    The kubectl cluster name: kind-airflow-python-3.9-v1.24.2.
+    The KinD cluster name: airflow-python-3.8-v1.24.2
+    The kubectl cluster name: kind-airflow-python-3.8-v1.24.2.
 
 
     KinD Cluster API server URL: http://localhost:48366
@@ -508,7 +508,7 @@ The virtualenv required will be created automatically when the scripts are run.
 
 .. code-block:: text
 
-    Running tests with kind-airflow-python-3.9-v1.24.2 cluster.
+    Running tests with kind-airflow-python-3.8-v1.24.2 cluster.
      Command to run: pytest kubernetes_tests
     ========================================================================================= test session starts ==========================================================================================
     platform darwin -- Python 3.9.9, pytest-6.2.5, py-1.11.0, pluggy-1.0.0 -- /Users/jarek/IdeaProjects/airflow/.build/.k8s-env/bin/python
@@ -537,7 +537,7 @@ Once you enter the environment, you receive this information:
 
     Entering interactive k8s shell.
 
-    (kind-airflow-python-3.9-v1.24.2:KubernetesExecutor)>
+    (kind-airflow-python-3.8-v1.24.2:KubernetesExecutor)>
 
 In a separate terminal you can open the k9s CLI:
 
@@ -647,9 +647,9 @@ Kind has also useful commands to inspect your running cluster:
 
 .. code-block:: text
 
-    Deleting KinD cluster airflow-python-3.9-v1.24.2!
-    Deleting cluster "airflow-python-3.9-v1.24.2" ...
-    KinD cluster airflow-python-3.9-v1.24.2 deleted!
+    Deleting KinD cluster airflow-python-3.8-v1.24.2!
+    Deleting cluster "airflow-python-3.8-v1.24.2" ...
+    KinD cluster airflow-python-3.8-v1.24.2 deleted!
 
 
 Running complete k8s tests
diff --git a/contributing-docs/testing/unit_tests.rst b/contributing-docs/testing/unit_tests.rst
index dff3835a02f..cd0b9ab00bf 100644
--- a/contributing-docs/testing/unit_tests.rst
+++ b/contributing-docs/testing/unit_tests.rst
@@ -209,7 +209,7 @@ rerun in Breeze as you will (``-n auto`` will parallelize tests using ``pytest-x
 
 .. code-block:: bash
 
-    breeze shell --backend none --python 3.9
+    breeze shell --backend none --python 3.8
     > pytest tests --skip-db-tests -n auto
 
 
@@ -251,7 +251,7 @@ You can also run DB tests with ``breeze`` dockerized environment. You can choose
 ``--backend`` flag. The default is ``sqlite`` but you can also use others such as ``postgres`` or ``mysql``.
 You can also select backend version and Python version to use. You can specify the ``test-type`` to run -
 breeze will list the test types you can run with ``--help`` and provide auto-complete for them. Example
-below runs the ``Core`` tests with ``postgres`` backend and ``3.9`` Python version:
+below runs the ``Core`` tests with ``postgres`` backend and ``3.8`` Python version:
 
 We have a dedicated, opinionated ``breeze testing db-tests`` command as well that runs DB tests
 (it is also used in CI to run the DB tests, where you do not have to specify extra flags for
@@ -286,7 +286,7 @@ either by package/module/test or by test type - whatever ``pytest`` supports.
 
 .. code-block:: bash
 
-    breeze shell --backend postgres --python 3.9
+    breeze shell --backend postgres --python 3.8
     > pytest tests --run-db-tests-only
 
 As explained before, you cannot run DB tests in parallel using ``pytest-xdist`` plugin, but ``breeze`` has
@@ -296,7 +296,7 @@ you use ``breeze testing db-tests`` command):
 
 .. code-block:: bash
 
-    breeze testing tests --run-db-tests-only --backend postgres --python 3.9 --run-in-parallel
+    breeze testing tests --run-db-tests-only --backend postgres --python 3.8 --run-in-parallel
 
 Examples of marking test as DB test
 ...................................
@@ -1133,7 +1133,7 @@ directly to the container.
 
 .. code-block:: bash
 
-   breeze ci-image build --python 3.9
+   breeze ci-image build --python 3.8
 
 2. Enter breeze environment by selecting the appropriate airflow version and choosing
    ``providers-and-tests`` option for ``--mount-sources`` flag.
@@ -1241,7 +1241,7 @@ Herr id how to reproduce it.
 
 .. code-block:: bash
 
-   breeze ci-image build --python 3.9
+   breeze ci-image build --python 3.8
 
 2. Build providers from latest sources:
 
diff --git a/dev/README_RELEASE_AIRFLOW.md b/dev/README_RELEASE_AIRFLOW.md
index 1f56def2764..e0e014cfcb1 100644
--- a/dev/README_RELEASE_AIRFLOW.md
+++ b/dev/README_RELEASE_AIRFLOW.md
@@ -682,7 +682,7 @@ Optionally it can be followed with constraints
 
 ```shell script
 pip install apache-airflow==<VERSION>rc<X> \
-  --constraint "https://raw.githubusercontent.com/apache/airflow/constraints-<VERSION>/constraints-3.9.txt"`
+  --constraint "https://raw.githubusercontent.com/apache/airflow/constraints-<VERSION>/constraints-3.8.txt"`
 ```
 
 Note that the constraints contain python version that you are installing it with.
@@ -694,7 +694,7 @@ There is also an easy way of installation with Breeze if you have the latest sou
 Running the following command will use tmux inside breeze, create `admin` user and run Webserver & Scheduler:
 
 ```shell script
-breeze start-airflow --use-airflow-version 2.7.0rc1 --python 3.9 --backend postgres
+breeze start-airflow --use-airflow-version 2.7.0rc1 --python 3.8 --backend postgres
 ```
 
 You can also choose different executors and extras to install when you are installing airflow this way. For
@@ -702,7 +702,7 @@ example in order to run Airflow with CeleryExecutor and install celery, google a
 Airflow 2.7.0, you need to have celery provider installed to run Airflow with CeleryExecutor) you can run:
 
 ```shell script
-breeze start-airflow --use-airflow-version 2.7.0rc1 --python 3.9 --backend postgres \
+breeze start-airflow --use-airflow-version 2.7.0rc1 --python 3.8 --backend postgres \
   --executor CeleryExecutor --airflow-extras "celery,google,amazon"
 ```
 
@@ -838,7 +838,7 @@ the older branches, you should set the "skip" field to true.
 ## Verify production images
 
 ```shell script
-for PYTHON in 3.9 3.10 3.11 3.12
+for PYTHON in 3.8 3.9 3.10 3.11 3.12
 do
     docker pull apache/airflow:${VERSION}-python${PYTHON}
     breeze prod-image verify --image-name apache/airflow:${VERSION}-python${PYTHON}
diff --git a/dev/README_RELEASE_PROVIDER_PACKAGES.md b/dev/README_RELEASE_PROVIDER_PACKAGES.md
index dbb785200f7..67d1bfa30fc 100644
--- a/dev/README_RELEASE_PROVIDER_PACKAGES.md
+++ b/dev/README_RELEASE_PROVIDER_PACKAGES.md
@@ -1031,7 +1031,7 @@ pip install apache-airflow-providers-<provider>==<VERSION>rc<X>
 ### Installing with Breeze
 
 ```shell
-breeze start-airflow --use-airflow-version 2.2.4 --python 3.9 --backend postgres \
+breeze start-airflow --use-airflow-version 2.2.4 --python 3.8 --backend postgres \
     --load-example-dags --load-default-connections
 ```
 
diff --git a/dev/breeze/README.md b/dev/breeze/README.md
index d28cfd5353a..15c0b66f57f 100644
--- a/dev/breeze/README.md
+++ b/dev/breeze/README.md
@@ -66,6 +66,6 @@ PLEASE DO NOT MODIFY THE HASH BELOW! IT IS AUTOMATICALLY UPDATED BY PRE-COMMIT.
 
 ---------------------------------------------------------------------------------------------------------
 
-Package config hash: 2ae1201c56227b6fcb599f020360a906100a80b32ed3a0d4927c8721e738afee3867f9ed567fd75ec9f368933c3a94c1336f8ab068f7892ed1ebe6244ccf20fe
+Package config hash: 8e382ff46231b261a569886a45480104eb5436434d2845c3eb011ee9dd4da3c2fa33f561eaa36f2245a29c8719ae2e86d7ffec39463c46e0b3b4bde56a27abe6
 
 ---------------------------------------------------------------------------------------------------------
diff --git a/dev/breeze/doc/01_installation.rst b/dev/breeze/doc/01_installation.rst
index 1c7ad0ee628..7107be900d9 100644
--- a/dev/breeze/doc/01_installation.rst
+++ b/dev/breeze/doc/01_installation.rst
@@ -313,7 +313,7 @@ that Breeze works on
 
 .. warning:: Upgrading from earlier Python version
 
-    If you used Breeze with Python 3.8 and when running it, it will complain that it needs Python 3.9. In this
+    If you used Breeze with Python 3.7 and when running it, it will complain that it needs Python 3.8. In this
     case you should force-reinstall Breeze with ``pipx``:
 
         .. code-block:: bash
@@ -342,14 +342,14 @@ that Breeze works on
 
         .. code-block:: bash
 
-            pipx reinstall --python /Users/airflow/.pyenv/versions/3.9.16/bin/python apache-airflow-breeze
+            pipx reinstall --python /Users/airflow/.pyenv/versions/3.8.16/bin/python apache-airflow-breeze
 
         Or you can uninstall breeze and install it with a specific python version:
 
         .. code-block:: bash
 
             pipx uninstall apache-airflow-breeze
-            pipx install -e ./dev/breeze --python /Users/airflow/.pyenv/versions/3.9.16/bin/python
+            pipx install -e ./dev/breeze --python /Users/airflow/.pyenv/versions/3.8.16/bin/python
 
 
 Running Breeze for the first time
diff --git a/dev/breeze/doc/03_developer_tasks.rst b/dev/breeze/doc/03_developer_tasks.rst
index 87bb2713b93..76f43606837 100644
--- a/dev/breeze/doc/03_developer_tasks.rst
+++ b/dev/breeze/doc/03_developer_tasks.rst
@@ -34,12 +34,12 @@ You can use additional ``breeze`` flags to choose your environment. You can spec
 version to use, and backend (the meta-data database). Thanks to that, with Breeze, you can recreate the same
 environments as we have in matrix builds in the CI. See next chapter for backend selection.
 
-For example, you can choose to run Python 3.9 tests with MySQL as backend and with mysql version 8
+For example, you can choose to run Python 3.8 tests with MySQL as backend and with mysql version 8
 as follows:
 
 .. code-block:: bash
 
-    breeze --python 3.9 --backend mysql --mysql-version 8.0
+    breeze --python 3.8 --backend mysql --mysql-version 8.0
 
 .. note:: Note for Windows WSL2 users
 
@@ -55,7 +55,7 @@ Try adding ``--builder=default`` to your command. For example:
 
 .. code-block:: bash
 
-    breeze --builder=default --python 3.9 --backend mysql --mysql-version 8.0
+    breeze --builder=default --python 3.8 --backend mysql --mysql-version 8.0
 
 The choices you make are persisted in the ``./.build/`` cache directory so that next time when you use the
 ``breeze`` script, it could use the values that were used previously. This way you do not have to specify
@@ -331,7 +331,7 @@ When you are starting airflow from local sources, www asset compilation is autom
 
 .. code-block:: bash
 
-    breeze --python 3.9 --backend mysql start-airflow
+    breeze --python 3.8 --backend mysql start-airflow
 
 You can also use it to start different executor.
 
@@ -344,7 +344,7 @@ You can also use it to start any released version of Airflow from ``PyPI`` with
 
 .. code-block:: bash
 
-    breeze start-airflow --python 3.9 --backend mysql --use-airflow-version 2.7.0
+    breeze start-airflow --python 3.8 --backend mysql --use-airflow-version 2.7.0
 
 When you are installing version from PyPI, it's also possible to specify extras that should be used
 when installing Airflow - you can provide several extras separated by coma - for example to install
diff --git a/dev/breeze/doc/06_managing_docker_images.rst b/dev/breeze/doc/06_managing_docker_images.rst
index bb4c4f9e06f..294f1540f36 100644
--- a/dev/breeze/doc/06_managing_docker_images.rst
+++ b/dev/breeze/doc/06_managing_docker_images.rst
@@ -140,10 +140,10 @@ suffix and they need to also be paired with corresponding runtime dependency add
 
 .. code-block:: bash
 
-     breeze prod-image build --python 3.9 --additional-dev-deps "libasound2-dev" \
+     breeze prod-image build --python 3.8 --additional-dev-deps "libasound2-dev" \
         --additional-runtime-apt-deps "libasound2"
 
-Same as above but uses python 3.9.
+Same as above but uses python 3.8.
 
 Building PROD image
 ...................
diff --git a/dev/breeze/doc/10_advanced_breeze_topics.rst b/dev/breeze/doc/10_advanced_breeze_topics.rst
index a4f93848630..ac5421f85aa 100644
--- a/dev/breeze/doc/10_advanced_breeze_topics.rst
+++ b/dev/breeze/doc/10_advanced_breeze_topics.rst
@@ -33,8 +33,8 @@ For testing, you can create your own virtual environment, or use the one that ``
 already installed breeze following the recommended ``pipx install -e ./dev/breeze`` command.
 
 For local virtualenv, you can use ``pyenv`` or any other virtualenv wrapper. For example with ``pyenv``,
-you can use ``pyenv virtualenv 3.9.6 airflow-breeze`` to create virtualenv called ``airflow-breeze``
-with Python 3.9.6. Then you can use ``pyenv activate airflow-breeze`` to activate it and install breeze
+you can use ``pyenv virtualenv 3.8.6 airflow-breeze`` to create virtualenv called ``airflow-breeze``
+with Python 3.8.6. Then you can use ``pyenv activate airflow-breeze`` to activate it and install breeze
 in editable mode with ``pip install -e ./dev/breeze``.
 
 For ``pipx`` virtualenv, you can use the virtualenv that ``pipx`` created for you. You can find the name
@@ -56,7 +56,7 @@ make sure to follow these steps:
   this will bypass the check we run in Breeze to see if there are new requirements to install for it
 
 See example configuration for PyCharm which has run/debug configuration for
-``breeze sbom generate-providers-requirements --provider-id sqlite --python 3.9``
+``breeze sbom generate-providers-requirements --provider-id sqlite --python 3.8``
 
 .. raw:: html
 
diff --git a/dev/breeze/doc/adr/0002-implement-standalone-python-command.md b/dev/breeze/doc/adr/0002-implement-standalone-python-command.md
index ddd005fd92d..37eebcf3e15 100644
--- a/dev/breeze/doc/adr/0002-implement-standalone-python-command.md
+++ b/dev/breeze/doc/adr/0002-implement-standalone-python-command.md
@@ -138,7 +138,7 @@ There are a few properties of Breeze/CI scripts that should be maintained though
   run a command and get everything done with the least number of prerequisites
 
 * The prerequisites for Breeze and CI are:
-   * Python 3.9+ (Python 3.9 end of life is October 2025)
+   * Python 3.8+ (Python 3.8 end of life is October 2024)
    * Docker (23.0+)
    * Docker Compose (2.16.0+)
    * No other tools and CLI commands should be needed
diff --git a/dev/breeze/doc/ci/02_images.md b/dev/breeze/doc/ci/02_images.md
index 8c699e43b5d..6dfa8f350f8 100644
--- a/dev/breeze/doc/ci/02_images.md
+++ b/dev/breeze/doc/ci/02_images.md
@@ -129,17 +129,17 @@ The images are built with default extras - different extras for CI and
 production image and you can change the extras via the `--airflow-extras`
 parameters and add new ones with `--additional-airflow-extras`.
 
-For example if you want to build Python 3.9 version of production image
+For example if you want to build Python 3.8 version of production image
 with "all" extras installed you should run this command:
 
 ``` bash
-breeze prod-image build --python 3.9 --airflow-extras "all"
+breeze prod-image build --python 3.8 --airflow-extras "all"
 ```
 
 If you just want to add new extras you can add them like that:
 
 ``` bash
-breeze prod-image build --python 3.9 --additional-airflow-extras "all"
+breeze prod-image build --python 3.8 --additional-airflow-extras "all"
 ```
 
 The command that builds the CI image is optimized to minimize the time
@@ -160,7 +160,7 @@ You can also build production images from PIP packages via providing
 `--install-airflow-version` parameter to Breeze:
 
 ``` bash
-breeze prod-image build --python 3.9 --additional-airflow-extras=trino --install-airflow-version=2.0.0
+breeze prod-image build --python 3.8 --additional-airflow-extras=trino --install-airflow-version=2.0.0
 ```
 
 This will build the image using command similar to:
@@ -168,7 +168,7 @@ This will build the image using command similar to:
 ``` bash
 pip install \
   apache-airflow[async,amazon,celery,cncf.kubernetes,docker,elasticsearch,ftp,grpc,hashicorp,http,ldap,google,microsoft.azure,mysql,postgres,redis,sendgrid,sftp,slack,ssh,statsd,virtualenv]==2.0.0 \
-  --constraint "https://raw.githubusercontent.com/apache/airflow/constraints-2.0.0/constraints-3.9.txt"
+  --constraint "https://raw.githubusercontent.com/apache/airflow/constraints-2.0.0/constraints-3.8.txt"
 ```
 
 > [!NOTE]
@@ -199,7 +199,7 @@ HEAD of development for constraints):
 
 ``` bash
 pip install "https://github.com/apache/airflow/archive/<tag>.tar.gz#egg=apache-airflow" \
-  --constraint "https://raw.githubusercontent.com/apache/airflow/constraints-main/constraints-3.9.txt"
+  --constraint "https://raw.githubusercontent.com/apache/airflow/constraints-main/constraints-3.8.txt"
 ```
 
 You can also skip installing airflow and install it from locally
@@ -207,7 +207,7 @@ provided files by using `--install-packages-from-context` parameter to
 Breeze:
 
 ``` bash
-breeze prod-image build --python 3.9 --additional-airflow-extras=trino --install-packages-from-context
+breeze prod-image build --python 3.8 --additional-airflow-extras=trino --install-packages-from-context
 ```
 
 In this case you airflow and all packages (.whl files) should be placed
@@ -241,20 +241,20 @@ flags: `registry` (default), `local`, or `disabled` flags when you run
 Breeze commands. For example:
 
 ``` bash
-breeze ci-image build --python 3.9 --docker-cache local
+breeze ci-image build --python 3.8 --docker-cache local
 ```
 
 Will build the CI image using local build cache (note that it will take
 quite a long time the first time you run it).
 
 ``` bash
-breeze prod-image build --python 3.9 --docker-cache registry
+breeze prod-image build --python 3.8 --docker-cache registry
 ```
 
 Will build the production image with cache used from registry.
 
 ``` bash
-breeze prod-image build --python 3.9 --docker-cache disabled
+breeze prod-image build --python 3.8 --docker-cache disabled
 ```
 
 Will build the production image from the scratch.
@@ -336,12 +336,12 @@ faster. It is enough to pass `--image-tag` and the registry and Breeze
 will download and execute commands using the same image that was used
 during the CI tests.
 
-For example this command will run the same Python 3.9 image as was used
+For example this command will run the same Python 3.8 image as was used
 in build identified with 9a621eaa394c0a0a336f8e1b31b35eff4e4ee86e commit
 SHA with enabled rabbitmq integration.
 
 ``` bash
-breeze --image-tag 9a621eaa394c0a0a336f8e1b31b35eff4e4ee86e --python 3.9 --integration rabbitmq
+breeze --image-tag 9a621eaa394c0a0a336f8e1b31b35eff4e4ee86e --python 3.8 --integration rabbitmq
 ```
 
 You can see more details and examples in[Breeze](../README.rst)
@@ -361,7 +361,7 @@ you can build the image in the
 Here just a few examples are presented which should give you general
 understanding of what you can customize.
 
-This builds the production image in version 3.9 with additional airflow
+This builds the production image in version 3.8 with additional airflow
 extras from 2.0.0 PyPI package and additional apt dev and runtime
 dependencies.
 
@@ -373,7 +373,7 @@ plugin installed.
 ``` bash
 DOCKER_BUILDKIT=1 docker build . -f Dockerfile.ci \
   --pull \
-  --build-arg PYTHON_BASE_IMAGE="python:3.9-slim-bookworm" \
+  --build-arg PYTHON_BASE_IMAGE="python:3.8-slim-bookworm" \
   --build-arg ADDITIONAL_AIRFLOW_EXTRAS="jdbc" \
   --build-arg ADDITIONAL_PYTHON_DEPS="pandas" \
   --build-arg ADDITIONAL_DEV_APT_DEPS="gcc g++" \
@@ -384,7 +384,7 @@ the same image can be built using `breeze` (it supports auto-completion
 of the options):
 
 ``` bash
-breeze ci-image build --python 3.9 --additional-airflow-extras=jdbc --additional-python-deps="pandas" \
+breeze ci-image build --python 3.8 --additional-airflow-extras=jdbc --additional-python-deps="pandas" \
     --additional-dev-apt-deps="gcc g++"
 ```
 
@@ -398,7 +398,7 @@ comment](https://github.com/apache/airflow/issues/8605#issuecomment-690065621):
 ``` bash
 DOCKER_BUILDKIT=1 docker build . -f Dockerfile.ci \
   --pull \
-  --build-arg PYTHON_BASE_IMAGE="python:3.9-slim-bookworm" \
+  --build-arg PYTHON_BASE_IMAGE="python:3.8-slim-bookworm" \
   --build-arg AIRFLOW_INSTALLATION_METHOD="apache-airflow" \
   --build-arg ADDITIONAL_AIRFLOW_EXTRAS="slack" \
   --build-arg ADDITIONAL_PYTHON_DEPS="apache-airflow-providers-odbc \
@@ -423,8 +423,8 @@ can be used for CI images:
 
 | Build argument                    | Default value                                                           | Description                                                                                                                                                |
 |-----------------------------------|-------------------------------------------------------------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------|
-| `PYTHON_BASE_IMAGE`               | `python:3.9-slim-bookworm`                                              | Base Python image                                                                                                                                          |
-| `PYTHON_MAJOR_MINOR_VERSION`      | `3.9`                                                                   | major/minor version of Python (should match base image)                                                                                                    |
+| `PYTHON_BASE_IMAGE`               | `python:3.8-slim-bookworm`                                              | Base Python image                                                                                                                                          |
+| `PYTHON_MAJOR_MINOR_VERSION`      | `3.8`                                                                   | major/minor version of Python (should match base image)                                                                                                    |
 | `DEPENDENCIES_EPOCH_NUMBER`       | `2`                                                                     | increasing this number will reinstall all apt dependencies                                                                                                 |
 | `ADDITIONAL_PIP_INSTALL_FLAGS`    |                                                                         | additional `pip` flags passed to the installation commands (except when reinstalling `pip` itself)                                                         |
 | `PIP_NO_CACHE_DIR`                | `true`                                                                  | if true, then no pip cache will be stored                                                                                                                  |
@@ -455,59 +455,59 @@ can be used for CI images:
 Here are some examples of how CI images can built manually. CI is always
 built from local sources.
 
-This builds the CI image in version 3.9 with default extras ("all").
+This builds the CI image in version 3.8 with default extras ("all").
 
 ``` bash
 DOCKER_BUILDKIT=1 docker build . -f Dockerfile.ci \
    --pull \
-   --build-arg PYTHON_BASE_IMAGE="python:3.9-slim-bookworm" --tag my-image:0.0.1
+   --build-arg PYTHON_BASE_IMAGE="python:3.8-slim-bookworm" --tag my-image:0.0.1
 ```
 
-This builds the CI image in version 3.9 with "gcp" extra only.
+This builds the CI image in version 3.8 with "gcp" extra only.
 
 ``` bash
 DOCKER_BUILDKIT=1 docker build . -f Dockerfile.ci \
   --pull \
-  --build-arg PYTHON_BASE_IMAGE="python:3.9-slim-bookworm" \
+  --build-arg PYTHON_BASE_IMAGE="python:3.8-slim-bookworm" \
   --build-arg AIRFLOW_EXTRAS=gcp --tag my-image:0.0.1
 ```
 
-This builds the CI image in version 3.9 with "apache-beam" extra added.
+This builds the CI image in version 3.8 with "apache-beam" extra added.
 
 ``` bash
 DOCKER_BUILDKIT=1 docker build . -f Dockerfile.ci \
   --pull \
-  --build-arg PYTHON_BASE_IMAGE="python:3.9-slim-bookworm" \
+  --build-arg PYTHON_BASE_IMAGE="python:3.8-slim-bookworm" \
   --build-arg ADDITIONAL_AIRFLOW_EXTRAS="apache-beam" --tag my-image:0.0.1
 ```
 
-This builds the CI image in version 3.9 with "mssql" additional package
+This builds the CI image in version 3.8 with "mssql" additional package
 added.
 
 ``` bash
 DOCKER_BUILDKIT=1 docker build . -f Dockerfile.ci \
   --pull \
-  --build-arg PYTHON_BASE_IMAGE="python:3.9-slim-bookworm" \
+  --build-arg PYTHON_BASE_IMAGE="python:3.8-slim-bookworm" \
   --build-arg ADDITIONAL_PYTHON_DEPS="mssql" --tag my-image:0.0.1
 ```
 
-This builds the CI image in version 3.9 with "gcc" and "g++" additional
+This builds the CI image in version 3.8 with "gcc" and "g++" additional
 apt dev dependencies added.
 
 ```
 DOCKER_BUILDKIT=1 docker build . -f Dockerfile.ci \
   --pull
-  --build-arg PYTHON_BASE_IMAGE="python:3.9-slim-bookworm" \
+  --build-arg PYTHON_BASE_IMAGE="python:3.8-slim-bookworm" \
   --build-arg ADDITIONAL_DEV_APT_DEPS="gcc g++" --tag my-image:0.0.1
 ```
 
-This builds the CI image in version 3.9 with "jdbc" extra and
+This builds the CI image in version 3.8 with "jdbc" extra and
 "default-jre-headless" additional apt runtime dependencies added.
 
 ```
 DOCKER_BUILDKIT=1 docker build . -f Dockerfile.ci \
   --pull \
-  --build-arg PYTHON_BASE_IMAGE="python:3.9-slim-bookworm" \
+  --build-arg PYTHON_BASE_IMAGE="python:3.8-slim-bookworm" \
   --build-arg AIRFLOW_EXTRAS=jdbc \
   --tag my-image:0.0.1
 ```
@@ -573,7 +573,8 @@ percent-encoded when you access them via UI (/ = %2F)
 | PROD image               | airflow/\<BRANCH\>/prod/python\<X.Y\>:\<TAG\>      | faster to build or pull. Production image optimized for size. |
 
 - \<BRANCH\> might be either "main" or "v2-\*-test"
-- \<X.Y\> - Python version (Major + Minor).Should be one of \["3.9", "3.10", "3.11", "3.12" \].
+- \<X.Y\> - Python version (Major + Minor).Should be one of \["3.8",
+  "3.9", "3.10", "3.11", "3.12" \].
 - \<COMMIT_SHA\> - full-length SHA of commit either from the tip of the
   branch (for pushes/schedule) or commit from the tip of the branch used
   for the PR.
diff --git a/dev/breeze/doc/ci/04_selective_checks.md b/dev/breeze/doc/ci/04_selective_checks.md
index e5894b02968..23131ec8939 100644
--- a/dev/breeze/doc/ci/04_selective_checks.md
+++ b/dev/breeze/doc/ci/04_selective_checks.md
@@ -169,8 +169,8 @@ Github Actions to pass the list of parameters to a command to execute
 | Output                                 | Meaning of the output                                                                                | Example value                             | List as string |
 |----------------------------------------|------------------------------------------------------------------------------------------------------|-------------------------------------------|----------------|
 | affected-providers-list-as-string      | List of providers affected when they are selectively affected.                                       | airbyte http                              | *              |
-| all-python-versions                    | List of all python versions there are available in the form of JSON array                            | ['3.9', '3.10']                           |                |
-| 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-python-versions                    | List of all python versions there are available in the form of JSON array                            | ['3.8', '3.9', '3.10']                    |                |
+| all-python-versions-list-as-string     | List of all python versions there are available in the form of space separated string                | 3.8 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                                     |                |
 | build_system_changed_in_pyproject_toml | When builds system dependencies changed in pyproject.toml changed in the PR.                         | false                                     |                |
@@ -184,7 +184,7 @@ Github Actions to pass the list of parameters to a command to execute
 | default-kubernetes-version             | Which Kubernetes version to use as default                                                           | v1.25.2                                   |                |
 | default-mysql-version                  | Which MySQL version to use as default                                                                | 5.7                                       |                |
 | default-postgres-version               | Which Postgres version to use as default                                                             | 10                                        |                |
-| default-python-version                 | Which Python version to use as default                                                               | 3.9                                       |                |
+| default-python-version                 | Which Python version to use as default                                                               | 3.8                                       |                |
 | docker-cache                           | Which cache should be used for images ("registry", "local" , "disabled")                             | registry                                  |                |
 | docs-build                             | Whether to build documentation ("true"/"false")                                                      | true                                      |                |
 | docs-list-as-string                    | What filter to apply to docs building - based on which documentation packages should be built        | apache-airflow helm-chart google          |                |
@@ -200,7 +200,7 @@ Github Actions to pass the list of parameters to a command to execute
 | is-self-hosted-runner                  | Whether the runner is self-hosted                                                                    | false                                     |                |
 | is-vm-runner                           | Whether the runner uses VM to run                                                                    | true                                      |                |
 | kind-version                           | Which Kind version to use for tests                                                                  | v0.16.0                                   |                |
-| kubernetes-combos-list-as-string       | All combinations of Python version and Kubernetes version to use for tests as space-separated string | 3.9-v1.25.2 3.9-v1.26.4                   | *              |
+| kubernetes-combos-list-as-string       | All combinations of Python version and Kubernetes version to use for tests as space-separated string | 3.8-v1.25.2 3.9-v1.26.4                   | *              |
 | kubernetes-versions                    | All Kubernetes versions to use for tests as JSON array                                               | ['v1.25.2']                               |                |
 | kubernetes-versions-list-as-string     | All Kubernetes versions to use for tests as space-separated string                                   | v1.25.2                                   | *              |
 | mypy-folders                           | List of folders to be considered for mypy                                                            | []                                        |                |
@@ -219,8 +219,8 @@ Github Actions to pass the list of parameters to a command to execute
 | prod-image-build                       | Whether PROD image build is needed                                                                   | true                                      |                |
 | providers-compatibility-checks         | List of dicts: (python_version, airflow_version, removed_providers) for compatibility checks         | []                                        |                |
 | pyproject-toml-changed                 | When pyproject.toml changed in the PR.                                                               | false                                     |                |
-| python-versions                        | List of python versions to use for that build                                                        | ['3.9']                                   | *              |
-| python-versions-list-as-string         | Which versions of MySQL to use for tests as space-separated string                                   | 3.9                                       | *              |
+| python-versions                        | List of python versions to use for that build                                                        | ['3.8']                                   | *              |
+| python-versions-list-as-string         | Which versions of MySQL to use for tests as space-separated string                                   | 3.8                                       | *              |
 | run-amazon-tests                       | Whether Amazon tests should be run ("true"/"false")                                                  | true                                      |                |
 | run-kubernetes-tests                   | Whether Kubernetes tests should be run ("true"/"false")                                              | true                                      |                |
 | run-tests                              | Whether unit tests should be run ("true"/"false")                                                    | true                                      |                |
diff --git a/dev/breeze/doc/ci/08_running_ci_locally.md b/dev/breeze/doc/ci/08_running_ci_locally.md
index cc9c89954df..6e1cbb09175 100644
--- a/dev/breeze/doc/ci/08_running_ci_locally.md
+++ b/dev/breeze/doc/ci/08_running_ci_locally.md
@@ -72,19 +72,19 @@ For example knowing that the CI job was for commit
 `cd27124534b46c9688a1d89e75fcd137ab5137e3`:
 
 ``` bash
-docker pull ghcr.io/apache/airflow/main/ci/python3.9:cd27124534b46c9688a1d89e75fcd137ab5137e3
+docker pull ghcr.io/apache/airflow/main/ci/python3.8:cd27124534b46c9688a1d89e75fcd137ab5137e3
 
-docker run -it ghcr.io/apache/airflow/main/ci/python3.9:cd27124534b46c9688a1d89e75fcd137ab5137e3
+docker run -it ghcr.io/apache/airflow/main/ci/python3.8:cd27124534b46c9688a1d89e75fcd137ab5137e3
 ```
 
 But you usually need to pass more variables and complex setup if you
 want to connect to a database or enable some integrations. Therefore it
 is easiest to use [Breeze](../README.rst) for that. For
-example if you need to reproduce a MySQL environment in python 3.9
+example if you need to reproduce a MySQL environment in python 3.8
 environment you can run:
 
 ``` bash
-breeze --image-tag cd27124534b46c9688a1d89e75fcd137ab5137e3 --python 3.9 --backend mysql
+breeze --image-tag cd27124534b46c9688a1d89e75fcd137ab5137e3 --python 3.8 --backend mysql
 ```
 
 You will be dropped into a shell with the exact version that was used
diff --git a/dev/breeze/doc/images/output-commands.svg b/dev/breeze/doc/images/output-commands.svg
index f80a72a9fbc..78c753526e4 100644
--- a/dev/breeze/doc/images/output-commands.svg
+++ b/dev/breeze/doc/images/output-commands.svg
@@ -302,8 +302,8 @@
 </text><text class="breeze-help-r1" x="1464" y="68.8" textLength="12.2" clip-path="url(#breeze-help-line-2)">
 </text><text class="breeze-help-r5" x="0" y="93.2" textLength="24.4" clip-path="url(#breeze-help-line-3)">╭─</text><text class="breeze-help-r5" x="24.4" y="93.2" textLength="195.2" clip-path="url(#breeze-help-line-3)">&#160;Execution&#160;mode&#160;</text><text class="breeze-help-r5" x="219.6" y="93.2" textLength="1220" clip-path="url(#breeze-help-line-3)">────────────────────────────────────────────────────────────────────────────────────────────────────</text><text class="breeze-help-r [...]
 </text><text class="breeze-help-r5" x="0" y="117.6" textLength="12.2" clip-path="url(#breeze-help-line-4)">│</text><text class="breeze-help-r4" x="24.4" y="117.6" textLength="97.6" clip-path="url(#breeze-help-line-4)">--python</text><text class="breeze-help-r6" x="366" y="117.6" textLength="24.4" clip-path="url(#breeze-help-line-4)">-p</text><text class="breeze-help-r1" x="414.8" y="117.6" textLength="732" clip-path="url(#breeze-help-line-4)">Python&#160;major/minor&#160;version&#160;use [...]
-</text><text class="breeze-help-r5" x="0" y="142" textLength="12.2" clip-path="url(#breeze-help-line-5)">│</text><text class="breeze-help-r7" x="414.8" y="142" textLength="732" clip-path="url(#breeze-help-line-5)">(&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;&#160;&#160;&#160;</text><text class="br [...]
-</text><text class="breeze-help-r5" x="0" y="166.4" textLength="12.2" clip-path="url(#breeze-help-line-6)">│</text><text class="breeze-help-r5" x="414.8" y="166.4" textLength="732" clip-path="url(#breeze-help-line-6)">[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;&#160;&#160;&#160;&#160;&#160;&#160;&#1 [...]
+</text><text class="breeze-help-r5" x="0" y="142" textLength="12.2" clip-path="url(#breeze-help-line-5)">│</text><text class="breeze-help-r7" x="414.8" y="142" textLength="732" clip-path="url(#breeze-help-line-5)">(&gt;3.8&lt;&#160;|&#160;3.9&#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;</text><text class="breeze-help-r5" x="145 [...]
+</text><text class="breeze-help-r5" x="0" y="166.4" textLength="12.2" clip-path="url(#breeze-help-line-6)">│</text><text class="breeze-help-r5" x="414.8" y="166.4" textLength="732" clip-path="url(#breeze-help-line-6)">[default:&#160;3.8]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#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="190.8" textLength="12.2" clip-path="url(#breeze-help-line-7)">│</text><text class="breeze-help-r4" x="24.4" y="190.8" textLength="158.6" clip-path="url(#breeze-help-line-7)">--integration</text><text class="breeze-help-r1" x="414.8" y="190.8" textLength="1024.8" clip-path="url(#breeze-help-line-7)">Integration(s)&#160;to&#160;enable&#160;when&#160;running&#160;(can&#160;be&#160;more&#160;than&#160;one).&#160;&#160;&#160;&#160;&#160;&#160;&#160 [...]
 </text><text class="breeze-help-r5" x="0" y="215.2" textLength="12.2" clip-path="url(#breeze-help-line-8)">│</text><text class="breeze-help-r7" x="414.8" y="215.2" textLength="1024.8" clip-path="url(#breeze-help-line-8)">(all&#160;|&#160;all-testable&#160;|&#160;cassandra&#160;|&#160;celery&#160;|&#160;drill&#160;|&#160;kafka&#160;|&#160;kerberos&#160;|&#160;mongo&#160;|&#160;mssql&#160;</text><text class="breeze-help-r5" x="1451.8" y="215.2" textLength="12.2" clip-path="url(#breeze-help [...]
 </text><text class="breeze-help-r5" x="0" y="239.6" textLength="12.2" clip-path="url(#breeze-help-line-9)">│</text><text class="breeze-help-r7" x="414.8" y="239.6" textLength="1024.8" clip-path="url(#breeze-help-line-9)">|&#160;openlineage&#160;|&#160;otel&#160;|&#160;pinot&#160;|&#160;qdrant&#160;|&#160;redis&#160;|&#160;statsd&#160;|&#160;trino&#160;|&#160;ydb)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-help-r5" x [...]
diff --git a/dev/breeze/doc/images/output_ci-image_build.svg b/dev/breeze/doc/images/output_ci-image_build.svg
index 6dd856c3dc8..131b618e403 100644
--- a/dev/breeze/doc/images/output_ci-image_build.svg
+++ b/dev/breeze/doc/images/output_ci-image_build.svg
@@ -352,8 +352,8 @@
 </text><text class="breeze-ci-image-build-r1" x="1464" y="117.6" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-4)">
 </text><text class="breeze-ci-image-build-r5" x="0" y="142" textLength="24.4" clip-path="url(#breeze-ci-image-build-line-5)">╭─</text><text class="breeze-ci-image-build-r5" x="24.4" y="142" textLength="158.6" clip-path="url(#breeze-ci-image-build-line-5)">&#160;Basic&#160;usage&#160;</text><text class="breeze-ci-image-build-r5" x="183" y="142" textLength="1256.6" clip-path="url(#breeze-ci-image-build-line-5)">─────────────────────────────────────────────────────────────────────────────── [...]
 </text><text class="breeze-ci-image-build-r5" x="0" y="166.4" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-6)">│</text><text class="breeze-ci-image-build-r4" x="24.4" y="166.4" textLength="97.6" clip-path="url(#breeze-ci-image-build-line-6)">--python</text><text class="breeze-ci-image-build-r6" x="585.6" y="166.4" textLength="24.4" clip-path="url(#breeze-ci-image-build-line-6)">-p</text><text class="breeze-ci-image-build-r1" x="634.4" y="166.4" textLength="732" clip-path= [...]
-</text><text class="breeze-ci-image-build-r5" x="0" y="190.8" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-7)">│</text><text class="breeze-ci-image-build-r7" x="634.4" y="190.8" textLength="732" clip-path="url(#breeze-ci-image-build-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;&# [...]
-</text><text class="breeze-ci-image-build-r5" x="0" y="215.2" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-8)">│</text><text class="breeze-ci-image-build-r5" x="634.4" y="215.2" textLength="732" clip-path="url(#breeze-ci-image-build-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 [...]
+</text><text class="breeze-ci-image-build-r5" x="0" y="190.8" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-7)">│</text><text class="breeze-ci-image-build-r7" x="634.4" y="190.8" textLength="732" clip-path="url(#breeze-ci-image-build-line-7)">(&gt;3.8&lt;&#160;|&#160;3.9&#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;&#16 [...]
+</text><text class="breeze-ci-image-build-r5" x="0" y="215.2" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-8)">│</text><text class="breeze-ci-image-build-r5" x="634.4" y="215.2" textLength="732" clip-path="url(#breeze-ci-image-build-line-8)">[default:&#160;3.8]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#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="239.6" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-9)">│</text><text class="breeze-ci-image-build-r4" x="24.4" y="239.6" textLength="378.2" clip-path="url(#breeze-ci-image-build-line-9)">--upgrade-to-newer-dependencies</text><text class="breeze-ci-image-build-r6" x="585.6" y="239.6" textLength="24.4" clip-path="url(#breeze-ci-image-build-line-9)">-u</text><text class="breeze-ci-image-build-r1" x="634.4" y="239.6" tex [...]
 </text><text class="breeze-ci-image-build-r5" x="0" y="264" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-10)">│</text><text class="breeze-ci-image-build-r4" x="24.4" y="264" textLength="244" clip-path="url(#breeze-ci-image-build-line-10)">--upgrade-on-failure</text><text class="breeze-ci-image-build-r1" x="268.4" y="264" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-10)">/</text><text class="breeze-ci-image-build-r4" x="280.6" y="264" textLength="280.6" cli [...]
 </text><text class="breeze-ci-image-build-r5" x="0" y="288.4" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-11)">│</text><text class="breeze-ci-image-build-r1" x="634.4" y="288.4" textLength="805.2" clip-path="url(#breeze-ci-image-build-line-11)">regular&#160;build&#160;fails.&#160;It&#160;is&#160;set&#160;to&#160;False&#160;by&#160;default&#160;on&#160;CI&#160;and&#160;True&#160;</text><text class="breeze-ci-image-build-r5" x="1451.8" y="288.4" textLength="12.2" clip-path [...]
@@ -380,7 +380,7 @@
 </text><text class="breeze-ci-image-build-r5" x="0" y="800.8" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-32)">│</text><text class="breeze-ci-image-build-r7" x="378.2" y="800.8" textLength="915" clip-path="url(#breeze-ci-image-build-line-32)">(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;&# [...]
 </text><text class="breeze-ci-image-build-r5" x="0" y="825.2" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-33)">│</text><text class="breeze-ci-image-build-r5" x="378.2" y="825.2" textLength="915" clip-path="url(#breeze-ci-image-build-line-33)">[default:&#160;4;&#160;1&lt;=x&lt;=8]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#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-build-r5" x="0" y="849.6" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-34)">│</text><text class="breeze-ci-image-build-r4" x="24.4" y="849.6" textLength="207.4" clip-path="url(#breeze-ci-image-build-line-34)">--python-versions</text><text class="breeze-ci-image-build-r1" x="378.2" y="849.6" textLength="951.6" clip-path="url(#breeze-ci-image-build-line-34)">Space&#160;separated&#160;list&#160;of&#160;python&#160;versions&#160;used&#160;f [...]
-</text><text class="breeze-ci-image-build-r5" x="0" y="874" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-35)">│</text><text class="breeze-ci-image-build-r5" x="378.2" y="874" textLength="951.6" clip-path="url(#breeze-ci-image-build-line-35)">[default:&#160;3.9&#160;3.10&#160;3.11&#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;&#160;&#160 [...]
+</text><text class="breeze-ci-image-build-r5" x="0" y="874" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-35)">│</text><text class="breeze-ci-image-build-r5" x="378.2" y="874" textLength="951.6" clip-path="url(#breeze-ci-image-build-line-35)">[default:&#160;3.8&#160;3.9&#160;3.10&#160;3.11&#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-build-r5" x="0" y="898.4" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-36)">│</text><text class="breeze-ci-image-build-r4" x="24.4" y="898.4" textLength="207.4" clip-path="url(#breeze-ci-image-build-line-36)">--run-in-parallel</text><text class="breeze-ci-image-build-r1" x="378.2" y="898.4" textLength="854" clip-path="url(#breeze-ci-image-build-line-36)">Run&#160;the&#160;operation&#160;in&#160;parallel&#160;on&#160;all&#160;or&#160;sel [...]
 </text><text class="breeze-ci-image-build-r5" x="0" y="922.8" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-37)">│</text><text class="breeze-ci-image-build-r4" x="24.4" y="922.8" textLength="170.8" clip-path="url(#breeze-ci-image-build-line-37)">--skip-cleanup</text><text class="breeze-ci-image-build-r1" x="378.2" y="922.8" textLength="732" clip-path="url(#breeze-ci-image-build-line-37)">Skip&#160;cleanup&#160;of&#160;temporary&#160;files&#160;created&#160;during&#160;para [...]
 </text><text class="breeze-ci-image-build-r5" x="0" y="947.2" textLength="1464" clip-path="url(#breeze-ci-image-build-line-38)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-ci-image-build-r1" x="1464" y="947.2" textLength="12.2" clip-path="url(#breeze-ci-image-build-line-38)">
diff --git a/dev/breeze/doc/images/output_ci-image_build.txt b/dev/breeze/doc/images/output_ci-image_build.txt
index 905847bedc7..b56ee7c68ab 100644
--- a/dev/breeze/doc/images/output_ci-image_build.txt
+++ b/dev/breeze/doc/images/output_ci-image_build.txt
@@ -1 +1 @@
-686950c27e41fa50cf22abb8c25e496a
+d64cda52af48f5c2dc704fac8a738d49
diff --git a/dev/breeze/doc/images/output_ci-image_pull.svg b/dev/breeze/doc/images/output_ci-image_pull.svg
index a784b4c9a23..b0ebd7a1ea5 100644
--- a/dev/breeze/doc/images/output_ci-image_pull.svg
+++ b/dev/breeze/doc/images/output_ci-image_pull.svg
@@ -1,4 +1,4 @@
-<svg class="rich-terminal" viewBox="0 0 1482 879.5999999999999" xmlns="http://www.w3.org/2000/svg">
+<svg class="rich-terminal" viewBox="0 0 1482 904.0" xmlns="http://www.w3.org/2000/svg">
     <!-- Generated with Rich https://www.textualize.io -->
     <style>
 
@@ -43,7 +43,7 @@
 
     <defs>
     <clipPath id="breeze-ci-image-pull-clip-terminal">
-      <rect x="0" y="0" width="1463.0" height="828.5999999999999" />
+      <rect x="0" y="0" width="1463.0" height="853.0" />
     </clipPath>
     <clipPath id="breeze-ci-image-pull-line-0">
     <rect x="0" y="1.5" width="1464" height="24.65"/>
@@ -144,9 +144,12 @@
 <clipPath id="breeze-ci-image-pull-line-32">
     <rect x="0" y="782.3" width="1464" height="24.65"/>
             </clipPath>
+<clipPath id="breeze-ci-image-pull-line-33">
+    <rect x="0" y="806.7" 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="877.6" rx="8"/><text class="breeze-ci-image-pull-title" fill="#c5c8c6" text-anchor="middle" x="740" y="27">Command:&#160;ci-image&#160;pull</text>
+    <rect fill="#292929" stroke="rgba(255,255,255,0.35)" stroke-width="1" x="1" y="1" width="1480" height="902" rx="8"/><text class="breeze-ci-image-pull-title" fill="#c5c8c6" text-anchor="middle" x="740" y="27">Command:&#160;ci-image&#160;pull</text>
             <g transform="translate(26,22)">
             <circle cx="0" cy="0" r="7" fill="#ff5f57"/>
             <circle cx="22" cy="0" r="7" fill="#febc2e"/>
@@ -163,33 +166,34 @@
 </text><text class="breeze-ci-image-pull-r1" x="1464" y="117.6" textLength="12.2" clip-path="url(#breeze-ci-image-pull-line-4)">
 </text><text class="breeze-ci-image-pull-r5" x="0" y="142" textLength="24.4" clip-path="url(#breeze-ci-image-pull-line-5)">╭─</text><text class="breeze-ci-image-pull-r5" x="24.4" y="142" textLength="219.6" clip-path="url(#breeze-ci-image-pull-line-5)">&#160;Pull&#160;image&#160;flags&#160;</text><text class="breeze-ci-image-pull-r5" x="244" y="142" textLength="1195.6" clip-path="url(#breeze-ci-image-pull-line-5)">─────────────────────────────────────────────────────────────────────────── [...]
 </text><text class="breeze-ci-image-pull-r5" x="0" y="166.4" textLength="12.2" clip-path="url(#breeze-ci-image-pull-line-6)">│</text><text class="breeze-ci-image-pull-r4" x="24.4" y="166.4" textLength="134.2" clip-path="url(#breeze-ci-image-pull-line-6)">--image-tag</text><text class="breeze-ci-image-pull-r6" x="244" y="166.4" textLength="24.4" clip-path="url(#breeze-ci-image-pull-line-6)">-t</text><text class="breeze-ci-image-pull-r1" x="292.8" y="166.4" textLength="597.8" clip-path="ur [...]
-</text><text class="breeze-ci-image-pull-r5" x="0" y="190.8" textLength="12.2" clip-path="url(#breeze-ci-image-pull-line-7)">│</text><text class="breeze-ci-image-pull-r4" x="24.4" y="190.8" textLength="97.6" clip-path="url(#breeze-ci-image-pull-line-7)">--python</text><text class="breeze-ci-image-pull-r6" x="244" y="190.8" textLength="24.4" clip-path="url(#breeze-ci-image-pull-line-7)">-p</text><text class="breeze-ci-image-pull-r1" x="292.8" y="190.8" textLength="732" clip-path="url(#bre [...]
-</text><text class="breeze-ci-image-pull-r5" x="0" y="215.2" textLength="12.2" clip-path="url(#breeze-ci-image-pull-line-8)">│</text><text class="breeze-ci-image-pull-r5" x="292.8" y="215.2" textLength="732" clip-path="url(#breeze-ci-image-pull-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-pull-r5" x="0" y="239.6" textLength="12.2" clip-path="url(#breeze-ci-image-pull-line-9)">│</text><text class="breeze-ci-image-pull-r4" x="24.4" y="239.6" textLength="97.6" clip-path="url(#breeze-ci-image-pull-line-9)">--verify</text><text class="breeze-ci-image-pull-r1" x="292.8" y="239.6" textLength="158.6" clip-path="url(#breeze-ci-image-pull-line-9)">Verify&#160;image.</text><text class="breeze-ci-image-pull-r5" x="1451.8" y="239.6" textLength="12.2 [...]
-</text><text class="breeze-ci-image-pull-r5" x="0" y="264" textLength="12.2" clip-path="url(#breeze-ci-image-pull-line-10)">│</text><text class="breeze-ci-image-pull-r4" x="24.4" y="264" textLength="195.2" clip-path="url(#breeze-ci-image-pull-line-10)">--wait-for-image</text><text class="breeze-ci-image-pull-r1" x="292.8" y="264" textLength="366" clip-path="url(#breeze-ci-image-pull-line-10)">Wait&#160;until&#160;image&#160;is&#160;available.</text><text class="breeze-ci-image-pull-r5" x [...]
-</text><text class="breeze-ci-image-pull-r5" x="0" y="288.4" textLength="12.2" clip-path="url(#breeze-ci-image-pull-line-11)">│</text><text class="breeze-ci-image-pull-r4" x="24.4" y="288.4" textLength="183" clip-path="url(#breeze-ci-image-pull-line-11)">--tag-as-latest</text><text class="breeze-ci-image-pull-r1" x="292.8" y="288.4" textLength="1146.8" clip-path="url(#breeze-ci-image-pull-line-11)">Tags&#160;the&#160;image&#160;as&#160;latest&#160;and&#160;update&#160;checksum&#160;of&#1 [...]
-</text><text class="breeze-ci-image-pull-r5" x="0" y="312.8" textLength="12.2" clip-path="url(#breeze-ci-image-pull-line-12)">│</text><text class="breeze-ci-image-pull-r1" x="292.8" y="312.8" textLength="231.8" clip-path="url(#breeze-ci-image-pull-line-12)">or&#160;pull&#160;image&#160;with&#160;</text><text class="breeze-ci-image-pull-r4" x="524.6" y="312.8" textLength="134.2" clip-path="url(#breeze-ci-image-pull-line-12)">--image-tag</text><text class="breeze-ci-image-pull-r1" x="658.8 [...]
-</text><text class="breeze-ci-image-pull-r5" x="0" y="337.2" textLength="1464" clip-path="url(#breeze-ci-image-pull-line-13)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-ci-image-pull-r1" x="1464" y="337.2" textLength="12.2" clip-path="url(#breeze-ci-image-pull-line-13)">
-</text><text class="breeze-ci-image-pull-r5" x="0" y="361.6" textLength="24.4" clip-path="url(#breeze-ci-image-pull-line-14)">╭─</text><text class="breeze-ci-image-pull-r5" x="24.4" y="361.6" textLength="219.6" clip-path="url(#breeze-ci-image-pull-line-14)">&#160;Parallel&#160;running&#160;</text><text class="breeze-ci-image-pull-r5" x="244" y="361.6" textLength="1195.6" clip-path="url(#breeze-ci-image-pull-line-14)">─────────────────────────────────────────────────────────────────────── [...]
-</text><text class="breeze-ci-image-pull-r5" x="0" y="386" textLength="12.2" clip-path="url(#breeze-ci-image-pull-line-15)">│</text><text class="breeze-ci-image-pull-r4" x="24.4" y="386" textLength="207.4" clip-path="url(#breeze-ci-image-pull-line-15)">--run-in-parallel</text><text class="breeze-ci-image-pull-r1" x="378.2" y="386" textLength="854" clip-path="url(#breeze-ci-image-pull-line-15)">Run&#160;the&#160;operation&#160;in&#160;parallel&#160;on&#160;all&#160;or&#160;selected&#160;s [...]
-</text><text class="breeze-ci-image-pull-r5" x="0" y="410.4" textLength="12.2" clip-path="url(#breeze-ci-image-pull-line-16)">│</text><text class="breeze-ci-image-pull-r4" x="24.4" y="410.4" textLength="158.6" clip-path="url(#breeze-ci-image-pull-line-16)">--parallelism</text><text class="breeze-ci-image-pull-r1" x="378.2" y="410.4" textLength="915" clip-path="url(#breeze-ci-image-pull-line-16)">Maximum&#160;number&#160;of&#160;processes&#160;to&#160;use&#160;while&#160;running&#160;the& [...]
-</text><text class="breeze-ci-image-pull-r5" x="0" y="434.8" textLength="12.2" clip-path="url(#breeze-ci-image-pull-line-17)">│</text><text class="breeze-ci-image-pull-r7" x="378.2" y="434.8" textLength="915" clip-path="url(#breeze-ci-image-pull-line-17)">(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; [...]
-</text><text class="breeze-ci-image-pull-r5" x="0" y="459.2" textLength="12.2" clip-path="url(#breeze-ci-image-pull-line-18)">│</text><text class="breeze-ci-image-pull-r5" x="378.2" y="459.2" textLength="915" clip-path="url(#breeze-ci-image-pull-line-18)">[default:&#160;4;&#160;1&lt;=x&lt;=8]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#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-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)">--python-versions</text><text class="breeze-ci-image-pull-r1" x="378.2" y="483.6" textLength="951.6" clip-path="url(#breeze-ci-image-pull-line-19)">Space&#160;separated&#160;list&#160;of&#160;python&#160;versions&#160;used&#160;for&#16 [...]
-</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-r5" x="378.2" y="508" textLength="951.6" clip-path="url(#breeze-ci-image-pull-line-20)">[default:&#160;3.9&#160;3.10&#160;3.11&#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;&#160;&#160;&#1 [...]
-</text><text class="breeze-ci-image-pull-r5" x="0" y="532.4" textLength="12.2" clip-path="url(#breeze-ci-image-pull-line-21)">│</text><text class="breeze-ci-image-pull-r4" x="24.4" y="532.4" textLength="170.8" clip-path="url(#breeze-ci-image-pull-line-21)">--skip-cleanup</text><text class="breeze-ci-image-pull-r1" x="378.2" y="532.4" textLength="732" clip-path="url(#breeze-ci-image-pull-line-21)">Skip&#160;cleanup&#160;of&#160;temporary&#160;files&#160;created&#160;during&#160;parallel&# [...]
-</text><text class="breeze-ci-image-pull-r5" x="0" y="556.8" textLength="12.2" clip-path="url(#breeze-ci-image-pull-line-22)">│</text><text class="breeze-ci-image-pull-r4" x="24.4" y="556.8" textLength="207.4" clip-path="url(#breeze-ci-image-pull-line-22)">--debug-resources</text><text class="breeze-ci-image-pull-r1" x="378.2" y="556.8" textLength="768.6" clip-path="url(#breeze-ci-image-pull-line-22)">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="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="305" clip-path="url(#breeze-ci-image-pull-line-23)">--include-success-outputs</text><text class="breeze-ci-image-pull-r1" x="378.2" y="581.2" textLength="927.2" clip-path="url(#breeze-ci-image-pull-line-23)">Whether&#160;to&#160;include&#160;outputs&#160;of&#160;successful&#160;parallel&# [...]
-</text><text class="breeze-ci-image-pull-r5" x="0" y="605.6" textLength="1464" clip-path="url(#breeze-ci-image-pull-line-24)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-ci-image-pull-r1" x="1464" y="605.6" textLength="12.2" clip-path="url(#breeze-ci-image-pull-line-24)">
-</text><text class="breeze-ci-image-pull-r5" x="0" y="630" textLength="24.4" clip-path="url(#breeze-ci-image-pull-line-25)">╭─</text><text class="breeze-ci-image-pull-r5" x="24.4" y="630" textLength="280.6" clip-path="url(#breeze-ci-image-pull-line-25)">&#160;Github&#160;authentication&#160;</text><text class="breeze-ci-image-pull-r5" x="305" y="630" textLength="1134.6" clip-path="url(#breeze-ci-image-pull-line-25)">──────────────────────────────────────────────────────────────────────── [...]
-</text><text class="breeze-ci-image-pull-r5" x="0" y="654.4" textLength="12.2" clip-path="url(#breeze-ci-image-pull-line-26)">│</text><text class="breeze-ci-image-pull-r4" x="24.4" y="654.4" textLength="231.8" clip-path="url(#breeze-ci-image-pull-line-26)">--github-repository</text><text class="breeze-ci-image-pull-r6" x="280.6" y="654.4" textLength="24.4" clip-path="url(#breeze-ci-image-pull-line-26)">-g</text><text class="breeze-ci-image-pull-r1" x="329.4" y="654.4" textLength="585.6"  [...]
-</text><text class="breeze-ci-image-pull-r5" x="0" y="678.8" textLength="12.2" clip-path="url(#breeze-ci-image-pull-line-27)">│</text><text class="breeze-ci-image-pull-r4" x="24.4" y="678.8" textLength="170.8" clip-path="url(#breeze-ci-image-pull-line-27)">--github-token</text><text class="breeze-ci-image-pull-r1" x="329.4" y="678.8" textLength="500.2" clip-path="url(#breeze-ci-image-pull-line-27)">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="703.2" textLength="1464" clip-path="url(#breeze-ci-image-pull-line-28)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-ci-image-pull-r1" x="1464" y="703.2" textLength="12.2" clip-path="url(#breeze-ci-image-pull-line-28)">
-</text><text class="breeze-ci-image-pull-r5" x="0" y="727.6" textLength="24.4" clip-path="url(#breeze-ci-image-pull-line-29)">╭─</text><text class="breeze-ci-image-pull-r5" x="24.4" y="727.6" textLength="195.2" clip-path="url(#breeze-ci-image-pull-line-29)">&#160;Common&#160;options&#160;</text><text class="breeze-ci-image-pull-r5" x="219.6" y="727.6" textLength="1220" clip-path="url(#breeze-ci-image-pull-line-29)">───────────────────────────────────────────────────────────────────────── [...]
-</text><text class="breeze-ci-image-pull-r5" x="0" y="752" textLength="12.2" clip-path="url(#breeze-ci-image-pull-line-30)">│</text><text class="breeze-ci-image-pull-r4" x="24.4" y="752" textLength="109.8" clip-path="url(#breeze-ci-image-pull-line-30)">--verbose</text><text class="breeze-ci-image-pull-r6" x="158.6" y="752" textLength="24.4" clip-path="url(#breeze-ci-image-pull-line-30)">-v</text><text class="breeze-ci-image-pull-r1" x="207.4" y="752" textLength="585.6" clip-path="url(#br [...]
-</text><text class="breeze-ci-image-pull-r5" x="0" y="776.4" textLength="12.2" clip-path="url(#breeze-ci-image-pull-line-31)">│</text><text class="breeze-ci-image-pull-r4" x="24.4" y="776.4" textLength="109.8" clip-path="url(#breeze-ci-image-pull-line-31)">--dry-run</text><text class="breeze-ci-image-pull-r6" x="158.6" y="776.4" textLength="24.4" clip-path="url(#breeze-ci-image-pull-line-31)">-D</text><text class="breeze-ci-image-pull-r1" x="207.4" y="776.4" textLength="719.8" clip-path= [...]
-</text><text class="breeze-ci-image-pull-r5" x="0" y="800.8" textLength="12.2" clip-path="url(#breeze-ci-image-pull-line-32)">│</text><text class="breeze-ci-image-pull-r4" x="24.4" y="800.8" textLength="73.2" clip-path="url(#breeze-ci-image-pull-line-32)">--help</text><text class="breeze-ci-image-pull-r6" x="158.6" y="800.8" textLength="24.4" clip-path="url(#breeze-ci-image-pull-line-32)">-h</text><text class="breeze-ci-image-pull-r1" x="207.4" y="800.8" textLength="329.4" clip-path="url [...]
-</text><text class="breeze-ci-image-pull-r5" x="0" y="825.2" textLength="1464" clip-path="url(#breeze-ci-image-pull-line-33)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-ci-image-pull-r1" x="1464" y="825.2" textLength="12.2" clip-path="url(#breeze-ci-image-pull-line-33)">
+</text><text class="breeze-ci-image-pull-r5" x="0" y="190.8" textLength="12.2" clip-path="url(#breeze-ci-image-pull-line-7)">│</text><text class="breeze-ci-image-pull-r4" x="24.4" y="190.8" textLength="97.6" clip-path="url(#breeze-ci-image-pull-line-7)">--python</text><text class="breeze-ci-image-pull-r6" x="244" y="190.8" textLength="24.4" clip-path="url(#breeze-ci-image-pull-line-7)">-p</text><text class="breeze-ci-image-pull-r1" x="292.8" y="190.8" textLength="732" clip-path="url(#bre [...]
+</text><text class="breeze-ci-image-pull-r5" x="0" y="215.2" textLength="12.2" clip-path="url(#breeze-ci-image-pull-line-8)">│</text><text class="breeze-ci-image-pull-r7" x="292.8" y="215.2" textLength="732" clip-path="url(#breeze-ci-image-pull-line-8)">(&gt;3.8&lt;&#160;|&#160;3.9&#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;</ [...]
+</text><text class="breeze-ci-image-pull-r5" x="0" y="239.6" textLength="12.2" clip-path="url(#breeze-ci-image-pull-line-9)">│</text><text class="breeze-ci-image-pull-r5" x="292.8" y="239.6" textLength="732" clip-path="url(#breeze-ci-image-pull-line-9)">[default:&#160;3.8]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#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-pull-r5" x="0" y="264" textLength="12.2" clip-path="url(#breeze-ci-image-pull-line-10)">│</text><text class="breeze-ci-image-pull-r4" x="24.4" y="264" textLength="97.6" clip-path="url(#breeze-ci-image-pull-line-10)">--verify</text><text class="breeze-ci-image-pull-r1" x="292.8" y="264" textLength="158.6" clip-path="url(#breeze-ci-image-pull-line-10)">Verify&#160;image.</text><text class="breeze-ci-image-pull-r5" x="1451.8" y="264" textLength="12.2" cli [...]
+</text><text class="breeze-ci-image-pull-r5" x="0" y="288.4" textLength="12.2" clip-path="url(#breeze-ci-image-pull-line-11)">│</text><text class="breeze-ci-image-pull-r4" x="24.4" y="288.4" textLength="195.2" clip-path="url(#breeze-ci-image-pull-line-11)">--wait-for-image</text><text class="breeze-ci-image-pull-r1" x="292.8" y="288.4" textLength="366" clip-path="url(#breeze-ci-image-pull-line-11)">Wait&#160;until&#160;image&#160;is&#160;available.</text><text class="breeze-ci-image-pull [...]
+</text><text class="breeze-ci-image-pull-r5" x="0" y="312.8" textLength="12.2" clip-path="url(#breeze-ci-image-pull-line-12)">│</text><text class="breeze-ci-image-pull-r4" x="24.4" y="312.8" textLength="183" clip-path="url(#breeze-ci-image-pull-line-12)">--tag-as-latest</text><text class="breeze-ci-image-pull-r1" x="292.8" y="312.8" textLength="1146.8" clip-path="url(#breeze-ci-image-pull-line-12)">Tags&#160;the&#160;image&#160;as&#160;latest&#160;and&#160;update&#160;checksum&#160;of&#1 [...]
+</text><text class="breeze-ci-image-pull-r5" x="0" y="337.2" textLength="12.2" clip-path="url(#breeze-ci-image-pull-line-13)">│</text><text class="breeze-ci-image-pull-r1" x="292.8" y="337.2" textLength="231.8" clip-path="url(#breeze-ci-image-pull-line-13)">or&#160;pull&#160;image&#160;with&#160;</text><text class="breeze-ci-image-pull-r4" x="524.6" y="337.2" textLength="134.2" clip-path="url(#breeze-ci-image-pull-line-13)">--image-tag</text><text class="breeze-ci-image-pull-r1" x="658.8 [...]
+</text><text class="breeze-ci-image-pull-r5" x="0" y="361.6" textLength="1464" clip-path="url(#breeze-ci-image-pull-line-14)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-ci-image-pull-r1" x="1464" y="361.6" textLength="12.2" clip-path="url(#breeze-ci-image-pull-line-14)">
+</text><text class="breeze-ci-image-pull-r5" x="0" y="386" textLength="24.4" clip-path="url(#breeze-ci-image-pull-line-15)">╭─</text><text class="breeze-ci-image-pull-r5" x="24.4" y="386" textLength="219.6" clip-path="url(#breeze-ci-image-pull-line-15)">&#160;Parallel&#160;running&#160;</text><text class="breeze-ci-image-pull-r5" x="244" y="386" textLength="1195.6" clip-path="url(#breeze-ci-image-pull-line-15)">───────────────────────────────────────────────────────────────────────────── [...]
+</text><text class="breeze-ci-image-pull-r5" x="0" y="410.4" textLength="12.2" clip-path="url(#breeze-ci-image-pull-line-16)">│</text><text class="breeze-ci-image-pull-r4" x="24.4" y="410.4" textLength="207.4" clip-path="url(#breeze-ci-image-pull-line-16)">--run-in-parallel</text><text class="breeze-ci-image-pull-r1" x="378.2" y="410.4" textLength="854" clip-path="url(#breeze-ci-image-pull-line-16)">Run&#160;the&#160;operation&#160;in&#160;parallel&#160;on&#160;all&#160;or&#160;selected& [...]
+</text><text class="breeze-ci-image-pull-r5" x="0" y="434.8" textLength="12.2" clip-path="url(#breeze-ci-image-pull-line-17)">│</text><text class="breeze-ci-image-pull-r4" x="24.4" y="434.8" textLength="158.6" clip-path="url(#breeze-ci-image-pull-line-17)">--parallelism</text><text class="breeze-ci-image-pull-r1" x="378.2" y="434.8" textLength="915" clip-path="url(#breeze-ci-image-pull-line-17)">Maximum&#160;number&#160;of&#160;processes&#160;to&#160;use&#160;while&#160;running&#160;the& [...]
+</text><text class="breeze-ci-image-pull-r5" x="0" y="459.2" textLength="12.2" clip-path="url(#breeze-ci-image-pull-line-18)">│</text><text class="breeze-ci-image-pull-r7" x="378.2" y="459.2" textLength="915" clip-path="url(#breeze-ci-image-pull-line-18)">(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; [...]
+</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-r5" x="378.2" y="483.6" textLength="915" clip-path="url(#breeze-ci-image-pull-line-19)">[default:&#160;4;&#160;1&lt;=x&lt;=8]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#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-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="207.4" clip-path="url(#breeze-ci-image-pull-line-20)">--python-versions</text><text class="breeze-ci-image-pull-r1" x="378.2" y="508" textLength="951.6" clip-path="url(#breeze-ci-image-pull-line-20)">Space&#160;separated&#160;list&#160;of&#160;python&#160;versions&#160;used&#160;for&#160;buil [...]
+</text><text class="breeze-ci-image-pull-r5" x="0" y="532.4" textLength="12.2" clip-path="url(#breeze-ci-image-pull-line-21)">│</text><text class="breeze-ci-image-pull-r5" x="378.2" y="532.4" textLength="951.6" clip-path="url(#breeze-ci-image-pull-line-21)">[default:&#160;3.8&#160;3.9&#160;3.10&#160;3.11&#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-pull-r5" x="0" y="556.8" textLength="12.2" clip-path="url(#breeze-ci-image-pull-line-22)">│</text><text class="breeze-ci-image-pull-r4" x="24.4" y="556.8" textLength="170.8" clip-path="url(#breeze-ci-image-pull-line-22)">--skip-cleanup</text><text class="breeze-ci-image-pull-r1" x="378.2" y="556.8" textLength="732" clip-path="url(#breeze-ci-image-pull-line-22)">Skip&#160;cleanup&#160;of&#160;temporary&#160;files&#160;created&#160;during&#160;parallel&# [...]
+</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="207.4" clip-path="url(#breeze-ci-image-pull-line-23)">--debug-resources</text><text class="breeze-ci-image-pull-r1" x="378.2" y="581.2" textLength="768.6" clip-path="url(#breeze-ci-image-pull-line-23)">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="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="305" clip-path="url(#breeze-ci-image-pull-line-24)">--include-success-outputs</text><text class="breeze-ci-image-pull-r1" x="378.2" y="605.6" textLength="927.2" clip-path="url(#breeze-ci-image-pull-line-24)">Whether&#160;to&#160;include&#160;outputs&#160;of&#160;successful&#160;parallel&# [...]
+</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)">
+</text><text class="breeze-ci-image-pull-r5" x="0" y="654.4" textLength="24.4" clip-path="url(#breeze-ci-image-pull-line-26)">╭─</text><text class="breeze-ci-image-pull-r5" x="24.4" y="654.4" textLength="280.6" clip-path="url(#breeze-ci-image-pull-line-26)">&#160;Github&#160;authentication&#160;</text><text class="breeze-ci-image-pull-r5" x="305" y="654.4" textLength="1134.6" clip-path="url(#breeze-ci-image-pull-line-26)">────────────────────────────────────────────────────────────────── [...]
+</text><text class="breeze-ci-image-pull-r5" x="0" y="678.8" textLength="12.2" clip-path="url(#breeze-ci-image-pull-line-27)">│</text><text class="breeze-ci-image-pull-r4" x="24.4" y="678.8" textLength="231.8" clip-path="url(#breeze-ci-image-pull-line-27)">--github-repository</text><text class="breeze-ci-image-pull-r6" x="280.6" y="678.8" textLength="24.4" clip-path="url(#breeze-ci-image-pull-line-27)">-g</text><text class="breeze-ci-image-pull-r1" x="329.4" y="678.8" textLength="585.6"  [...]
+</text><text class="breeze-ci-image-pull-r5" x="0" y="703.2" textLength="12.2" clip-path="url(#breeze-ci-image-pull-line-28)">│</text><text class="breeze-ci-image-pull-r4" x="24.4" y="703.2" textLength="170.8" clip-path="url(#breeze-ci-image-pull-line-28)">--github-token</text><text class="breeze-ci-image-pull-r1" x="329.4" y="703.2" textLength="500.2" clip-path="url(#breeze-ci-image-pull-line-28)">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="727.6" textLength="1464" clip-path="url(#breeze-ci-image-pull-line-29)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-ci-image-pull-r1" x="1464" y="727.6" textLength="12.2" clip-path="url(#breeze-ci-image-pull-line-29)">
+</text><text class="breeze-ci-image-pull-r5" x="0" y="752" textLength="24.4" clip-path="url(#breeze-ci-image-pull-line-30)">╭─</text><text class="breeze-ci-image-pull-r5" x="24.4" y="752" textLength="195.2" clip-path="url(#breeze-ci-image-pull-line-30)">&#160;Common&#160;options&#160;</text><text class="breeze-ci-image-pull-r5" x="219.6" y="752" textLength="1220" clip-path="url(#breeze-ci-image-pull-line-30)">─────────────────────────────────────────────────────────────────────────────── [...]
+</text><text class="breeze-ci-image-pull-r5" x="0" y="776.4" textLength="12.2" clip-path="url(#breeze-ci-image-pull-line-31)">│</text><text class="breeze-ci-image-pull-r4" x="24.4" y="776.4" textLength="109.8" clip-path="url(#breeze-ci-image-pull-line-31)">--verbose</text><text class="breeze-ci-image-pull-r6" x="158.6" y="776.4" textLength="24.4" clip-path="url(#breeze-ci-image-pull-line-31)">-v</text><text class="breeze-ci-image-pull-r1" x="207.4" y="776.4" textLength="585.6" clip-path= [...]
+</text><text class="breeze-ci-image-pull-r5" x="0" y="800.8" textLength="12.2" clip-path="url(#breeze-ci-image-pull-line-32)">│</text><text class="breeze-ci-image-pull-r4" x="24.4" y="800.8" textLength="109.8" clip-path="url(#breeze-ci-image-pull-line-32)">--dry-run</text><text class="breeze-ci-image-pull-r6" x="158.6" y="800.8" textLength="24.4" clip-path="url(#breeze-ci-image-pull-line-32)">-D</text><text class="breeze-ci-image-pull-r1" x="207.4" y="800.8" textLength="719.8" clip-path= [...]
+</text><text class="breeze-ci-image-pull-r5" x="0" y="825.2" textLength="12.2" clip-path="url(#breeze-ci-image-pull-line-33)">│</text><text class="breeze-ci-image-pull-r4" x="24.4" y="825.2" textLength="73.2" clip-path="url(#breeze-ci-image-pull-line-33)">--help</text><text class="breeze-ci-image-pull-r6" x="158.6" y="825.2" textLength="24.4" clip-path="url(#breeze-ci-image-pull-line-33)">-h</text><text class="breeze-ci-image-pull-r1" x="207.4" y="825.2" textLength="329.4" clip-path="url [...]
+</text><text class="breeze-ci-image-pull-r5" x="0" y="849.6" textLength="1464" clip-path="url(#breeze-ci-image-pull-line-34)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-ci-image-pull-r1" x="1464" y="849.6" textLength="12.2" clip-path="url(#breeze-ci-image-pull-line-34)">
 </text>
     </g>
     </g>
diff --git a/dev/breeze/doc/images/output_ci-image_pull.txt b/dev/breeze/doc/images/output_ci-image_pull.txt
index aac2c46f1ad..c916be1bf34 100644
--- a/dev/breeze/doc/images/output_ci-image_pull.txt
+++ b/dev/breeze/doc/images/output_ci-image_pull.txt
@@ -1 +1 @@
-eadf5c7b6661cf557c2ab5b38e462481
+3c950cd0e358661163e52c9f3726aee8
diff --git a/dev/breeze/doc/images/output_ci-image_verify.svg b/dev/breeze/doc/images/output_ci-image_verify.svg
index 23acf815112..61a73a5df55 100644
--- a/dev/breeze/doc/images/output_ci-image_verify.svg
+++ b/dev/breeze/doc/images/output_ci-image_verify.svg
@@ -157,8 +157,8 @@
 </text><text class="breeze-ci-image-verify-r1" x="1464" y="117.6" textLength="12.2" clip-path="url(#breeze-ci-image-verify-line-4)">
 </text><text class="breeze-ci-image-verify-r5" x="0" y="142" textLength="24.4" clip-path="url(#breeze-ci-image-verify-line-5)">╭─</text><text class="breeze-ci-image-verify-r5" x="24.4" y="142" textLength="244" clip-path="url(#breeze-ci-image-verify-line-5)">&#160;Verify&#160;image&#160;flags&#160;</text><text class="breeze-ci-image-verify-r5" x="268.4" y="142" textLength="1171.2" clip-path="url(#breeze-ci-image-verify-line-5)">───────────────────────────────────────────────────────────── [...]
 </text><text class="breeze-ci-image-verify-r5" x="0" y="166.4" textLength="12.2" clip-path="url(#breeze-ci-image-verify-line-6)">│</text><text class="breeze-ci-image-verify-r4" x="24.4" y="166.4" textLength="146.4" clip-path="url(#breeze-ci-image-verify-line-6)">--image-name</text><text class="breeze-ci-image-verify-r6" x="195.2" y="166.4" textLength="24.4" clip-path="url(#breeze-ci-image-verify-line-6)">-n</text><text class="breeze-ci-image-verify-r1" x="244" y="166.4" textLength="475.8 [...]
-</text><text class="breeze-ci-image-verify-r5" x="0" y="190.8" textLength="12.2" clip-path="url(#breeze-ci-image-verify-line-7)">│</text><text class="breeze-ci-image-verify-r4" x="24.4" y="190.8" textLength="97.6" clip-path="url(#breeze-ci-image-verify-line-7)">--python</text><text class="breeze-ci-image-verify-r6" x="195.2" y="190.8" textLength="24.4" clip-path="url(#breeze-ci-image-verify-line-7)">-p</text><text class="breeze-ci-image-verify-r1" x="244" y="190.8" textLength="732" clip- [...]
-</text><text class="breeze-ci-image-verify-r5" x="0" y="215.2" textLength="12.2" clip-path="url(#breeze-ci-image-verify-line-8)">│</text><text class="breeze-ci-image-verify-r5" x="244" y="215.2" textLength="732" clip-path="url(#breeze-ci-image-verify-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;&#1 [...]
+</text><text class="breeze-ci-image-verify-r5" x="0" y="190.8" textLength="12.2" clip-path="url(#breeze-ci-image-verify-line-7)">│</text><text class="breeze-ci-image-verify-r4" x="24.4" y="190.8" textLength="97.6" clip-path="url(#breeze-ci-image-verify-line-7)">--python</text><text class="breeze-ci-image-verify-r6" x="195.2" y="190.8" textLength="24.4" clip-path="url(#breeze-ci-image-verify-line-7)">-p</text><text class="breeze-ci-image-verify-r1" x="244" y="190.8" textLength="732" clip- [...]
+</text><text class="breeze-ci-image-verify-r5" x="0" y="215.2" textLength="12.2" clip-path="url(#breeze-ci-image-verify-line-8)">│</text><text class="breeze-ci-image-verify-r5" x="244" y="215.2" textLength="732" clip-path="url(#breeze-ci-image-verify-line-8)">[default:&#160;3.8]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#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-verify-r5" x="0" y="239.6" textLength="12.2" clip-path="url(#breeze-ci-image-verify-line-9)">│</text><text class="breeze-ci-image-verify-r4" x="24.4" y="239.6" textLength="134.2" clip-path="url(#breeze-ci-image-verify-line-9)">--image-tag</text><text class="breeze-ci-image-verify-r6" x="195.2" y="239.6" textLength="24.4" clip-path="url(#breeze-ci-image-verify-line-9)">-t</text><text class="breeze-ci-image-verify-r1" x="244" y="239.6" textLength="427" c [...]
 </text><text class="breeze-ci-image-verify-r5" x="0" y="264" textLength="12.2" clip-path="url(#breeze-ci-image-verify-line-10)">│</text><text class="breeze-ci-image-verify-r4" x="24.4" y="264" textLength="73.2" clip-path="url(#breeze-ci-image-verify-line-10)">--pull</text><text class="breeze-ci-image-verify-r1" x="244" y="264" textLength="646.6" clip-path="url(#breeze-ci-image-verify-line-10)">Pull&#160;image&#160;is&#160;missing&#160;before&#160;attempting&#160;to&#160;verify&#160;it.</ [...]
 </text><text class="breeze-ci-image-verify-r5" x="0" y="288.4" textLength="1464" clip-path="url(#breeze-ci-image-verify-line-11)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-ci-image-verify-r1" x="1464" y="288.4" textLength="12.2" clip-path="url(#breeze-ci-image-verify-line-11)">
@@ -168,7 +168,7 @@
 </text><text class="breeze-ci-image-verify-r5" x="0" y="386" textLength="12.2" clip-path="url(#breeze-ci-image-verify-line-15)">│</text><text class="breeze-ci-image-verify-r7" x="378.2" y="386" textLength="915" clip-path="url(#breeze-ci-image-verify-line-15)">(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;&# [...]
 </text><text class="breeze-ci-image-verify-r5" x="0" y="410.4" textLength="12.2" clip-path="url(#breeze-ci-image-verify-line-16)">│</text><text class="breeze-ci-image-verify-r5" x="378.2" y="410.4" textLength="915" clip-path="url(#breeze-ci-image-verify-line-16)">[default:&#160;4;&#160;1&lt;=x&lt;=8]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#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-verify-r5" x="0" y="434.8" textLength="12.2" clip-path="url(#breeze-ci-image-verify-line-17)">│</text><text class="breeze-ci-image-verify-r4" x="24.4" y="434.8" textLength="207.4" clip-path="url(#breeze-ci-image-verify-line-17)">--python-versions</text><text class="breeze-ci-image-verify-r1" x="378.2" y="434.8" textLength="951.6" clip-path="url(#breeze-ci-image-verify-line-17)">Space&#160;separated&#160;list&#160;of&#160;python&#160;versions&#160;used& [...]
-</text><text class="breeze-ci-image-verify-r5" x="0" y="459.2" textLength="12.2" clip-path="url(#breeze-ci-image-verify-line-18)">│</text><text class="breeze-ci-image-verify-r5" x="378.2" y="459.2" textLength="951.6" clip-path="url(#breeze-ci-image-verify-line-18)">[default:&#160;3.9&#160;3.10&#160;3.11&#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;&#1 [...]
+</text><text class="breeze-ci-image-verify-r5" x="0" y="459.2" textLength="12.2" clip-path="url(#breeze-ci-image-verify-line-18)">│</text><text class="breeze-ci-image-verify-r5" x="378.2" y="459.2" textLength="951.6" clip-path="url(#breeze-ci-image-verify-line-18)">[default:&#160;3.8&#160;3.9&#160;3.10&#160;3.11&#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; [...]
 </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="170.8" clip-path="url(#breeze-ci-image-verify-line-19)">--skip-cleanup</text><text class="breeze-ci-image-verify-r1" x="378.2" y="483.6" textLength="732" clip-path="url(#breeze-ci-image-verify-line-19)">Skip&#160;cleanup&#160;of&#160;temporary&#160;files&#160;created&#160;during&#16 [...]
 </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="207.4" clip-path="url(#breeze-ci-image-verify-line-20)">--debug-resources</text><text class="breeze-ci-image-verify-r1" x="378.2" y="508" textLength="768.6" clip-path="url(#breeze-ci-image-verify-line-20)">Whether&#160;to&#160;show&#160;resource&#160;information&#160;while&#160;running& [...]
 </text><text class="breeze-ci-image-verify-r5" x="0" y="532.4" textLength="12.2" clip-path="url(#breeze-ci-image-verify-line-21)">│</text><text class="breeze-ci-image-verify-r4" x="24.4" y="532.4" textLength="305" clip-path="url(#breeze-ci-image-verify-line-21)">--include-success-outputs</text><text class="breeze-ci-image-verify-r1" x="378.2" y="532.4" textLength="927.2" clip-path="url(#breeze-ci-image-verify-line-21)">Whether&#160;to&#160;include&#160;outputs&#160;of&#160;successful&#16 [...]
diff --git a/dev/breeze/doc/images/output_ci-image_verify.txt b/dev/breeze/doc/images/output_ci-image_verify.txt
index 3d2f72ffa68..bad4f7d8a8b 100644
--- a/dev/breeze/doc/images/output_ci-image_verify.txt
+++ b/dev/breeze/doc/images/output_ci-image_verify.txt
@@ -1 +1 @@
-324f4d4949eef209e991d890ddf2ff4f
+ec059842b7c4c41db33a6362a361b0ef
diff --git a/dev/breeze/doc/images/output_k8s_build-k8s-image.svg b/dev/breeze/doc/images/output_k8s_build-k8s-image.svg
index eff84069b0f..8708f57a34e 100644
--- a/dev/breeze/doc/images/output_k8s_build-k8s-image.svg
+++ b/dev/breeze/doc/images/output_k8s_build-k8s-image.svg
@@ -157,8 +157,8 @@
 </text><text class="breeze-k8s-build-k8s-image-r1" x="1464" y="117.6" textLength="12.2" clip-path="url(#breeze-k8s-build-k8s-image-line-4)">
 </text><text class="breeze-k8s-build-k8s-image-r5" x="0" y="142" textLength="24.4" clip-path="url(#breeze-k8s-build-k8s-image-line-5)">╭─</text><text class="breeze-k8s-build-k8s-image-r5" x="24.4" y="142" textLength="231.8" clip-path="url(#breeze-k8s-build-k8s-image-line-5)">&#160;Build&#160;image&#160;flags&#160;</text><text class="breeze-k8s-build-k8s-image-r5" x="256.2" y="142" textLength="1183.4" clip-path="url(#breeze-k8s-build-k8s-image-line-5)">──────────────────────────────────── [...]
 </text><text class="breeze-k8s-build-k8s-image-r5" x="0" y="166.4" textLength="12.2" clip-path="url(#breeze-k8s-build-k8s-image-line-6)">│</text><text class="breeze-k8s-build-k8s-image-r4" x="24.4" y="166.4" textLength="97.6" clip-path="url(#breeze-k8s-build-k8s-image-line-6)">--python</text><text class="breeze-k8s-build-k8s-image-r6" x="585.6" y="166.4" textLength="24.4" clip-path="url(#breeze-k8s-build-k8s-image-line-6)">-p</text><text class="breeze-k8s-build-k8s-image-r1" x="634.4" y= [...]
-</text><text class="breeze-k8s-build-k8s-image-r5" x="0" y="190.8" textLength="12.2" clip-path="url(#breeze-k8s-build-k8s-image-line-7)">│</text><text class="breeze-k8s-build-k8s-image-r7" x="634.4" y="190.8" textLength="732" clip-path="url(#breeze-k8s-build-k8s-image-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; [...]
-</text><text class="breeze-k8s-build-k8s-image-r5" x="0" y="215.2" textLength="12.2" clip-path="url(#breeze-k8s-build-k8s-image-line-8)">│</text><text class="breeze-k8s-build-k8s-image-r5" x="634.4" y="215.2" textLength="732" clip-path="url(#breeze-k8s-build-k8s-image-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;&#1 [...]
+</text><text class="breeze-k8s-build-k8s-image-r5" x="0" y="190.8" textLength="12.2" clip-path="url(#breeze-k8s-build-k8s-image-line-7)">│</text><text class="breeze-k8s-build-k8s-image-r7" x="634.4" y="190.8" textLength="732" clip-path="url(#breeze-k8s-build-k8s-image-line-7)">(&gt;3.8&lt;&#160;|&#160;3.9&#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;&# [...]
+</text><text class="breeze-k8s-build-k8s-image-r5" x="0" y="215.2" textLength="12.2" clip-path="url(#breeze-k8s-build-k8s-image-line-8)">│</text><text class="breeze-k8s-build-k8s-image-r5" x="634.4" y="215.2" textLength="732" clip-path="url(#breeze-k8s-build-k8s-image-line-8)">[default:&#160;3.8]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#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-k8s-build-k8s-image-r5" x="0" y="239.6" textLength="12.2" clip-path="url(#breeze-k8s-build-k8s-image-line-9)">│</text><text class="breeze-k8s-build-k8s-image-r4" x="24.4" y="239.6" textLength="134.2" clip-path="url(#breeze-k8s-build-k8s-image-line-9)">--image-tag</text><text class="breeze-k8s-build-k8s-image-r6" x="585.6" y="239.6" textLength="24.4" clip-path="url(#breeze-k8s-build-k8s-image-line-9)">-t</text><text class="breeze-k8s-build-k8s-image-r1" x="634.4 [...]
 </text><text class="breeze-k8s-build-k8s-image-r5" x="0" y="264" textLength="12.2" clip-path="url(#breeze-k8s-build-k8s-image-line-10)">│</text><text class="breeze-k8s-build-k8s-image-r4" x="24.4" y="264" textLength="244" clip-path="url(#breeze-k8s-build-k8s-image-line-10)">--rebuild-base-image</text><text class="breeze-k8s-build-k8s-image-r1" x="634.4" y="264" textLength="658.8" clip-path="url(#breeze-k8s-build-k8s-image-line-10)">Rebuilds&#160;base&#160;Airflow&#160;image&#160;before&# [...]
 </text><text class="breeze-k8s-build-k8s-image-r5" x="0" y="288.4" textLength="12.2" clip-path="url(#breeze-k8s-build-k8s-image-line-11)">│</text><text class="breeze-k8s-build-k8s-image-r4" x="24.4" y="288.4" textLength="244" clip-path="url(#breeze-k8s-build-k8s-image-line-11)">--copy-local-sources</text><text class="breeze-k8s-build-k8s-image-r1" x="268.4" y="288.4" textLength="12.2" clip-path="url(#breeze-k8s-build-k8s-image-line-11)">/</text><text class="breeze-k8s-build-k8s-image-r4" [...]
@@ -171,7 +171,7 @@
 </text><text class="breeze-k8s-build-k8s-image-r5" x="0" y="459.2" textLength="12.2" clip-path="url(#breeze-k8s-build-k8s-image-line-18)">│</text><text class="breeze-k8s-build-k8s-image-r7" x="378.2" y="459.2" textLength="915" clip-path="url(#breeze-k8s-build-k8s-image-line-18)">(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; [...]
 </text><text class="breeze-k8s-build-k8s-image-r5" x="0" y="483.6" textLength="12.2" clip-path="url(#breeze-k8s-build-k8s-image-line-19)">│</text><text class="breeze-k8s-build-k8s-image-r5" x="378.2" y="483.6" textLength="915" clip-path="url(#breeze-k8s-build-k8s-image-line-19)">[default:&#160;4;&#160;1&lt;=x&lt;=8]&#160;&#160;&#160;&#160;&#160;&#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-k8s-build-k8s-image-r5" x="0" y="508" textLength="12.2" clip-path="url(#breeze-k8s-build-k8s-image-line-20)">│</text><text class="breeze-k8s-build-k8s-image-r4" x="24.4" y="508" textLength="207.4" clip-path="url(#breeze-k8s-build-k8s-image-line-20)">--python-versions</text><text class="breeze-k8s-build-k8s-image-r1" x="378.2" y="508" textLength="951.6" clip-path="url(#breeze-k8s-build-k8s-image-line-20)">Space&#160;separated&#160;list&#160;of&#160;python&#160;v [...]
-</text><text class="breeze-k8s-build-k8s-image-r5" x="0" y="532.4" textLength="12.2" clip-path="url(#breeze-k8s-build-k8s-image-line-21)">│</text><text class="breeze-k8s-build-k8s-image-r5" x="378.2" y="532.4" textLength="951.6" clip-path="url(#breeze-k8s-build-k8s-image-line-21)">[default:&#160;3.9&#160;3.10&#160;3.11&#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 [...]
+</text><text class="breeze-k8s-build-k8s-image-r5" x="0" y="532.4" textLength="12.2" clip-path="url(#breeze-k8s-build-k8s-image-line-21)">│</text><text class="breeze-k8s-build-k8s-image-r5" x="378.2" y="532.4" textLength="951.6" clip-path="url(#breeze-k8s-build-k8s-image-line-21)">[default:&#160;3.8&#160;3.9&#160;3.10&#160;3.11&#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;&# [...]
 </text><text class="breeze-k8s-build-k8s-image-r5" x="0" y="556.8" textLength="12.2" clip-path="url(#breeze-k8s-build-k8s-image-line-22)">│</text><text class="breeze-k8s-build-k8s-image-r4" x="24.4" y="556.8" textLength="170.8" clip-path="url(#breeze-k8s-build-k8s-image-line-22)">--skip-cleanup</text><text class="breeze-k8s-build-k8s-image-r1" x="378.2" y="556.8" textLength="732" clip-path="url(#breeze-k8s-build-k8s-image-line-22)">Skip&#160;cleanup&#160;of&#160;temporary&#160;files&#160 [...]
 </text><text class="breeze-k8s-build-k8s-image-r5" x="0" y="581.2" textLength="12.2" clip-path="url(#breeze-k8s-build-k8s-image-line-23)">│</text><text class="breeze-k8s-build-k8s-image-r4" x="24.4" y="581.2" textLength="207.4" clip-path="url(#breeze-k8s-build-k8s-image-line-23)">--debug-resources</text><text class="breeze-k8s-build-k8s-image-r1" x="378.2" y="581.2" textLength="768.6" clip-path="url(#breeze-k8s-build-k8s-image-line-23)">Whether&#160;to&#160;show&#160;resource&#160;inform [...]
 </text><text class="breeze-k8s-build-k8s-image-r5" x="0" y="605.6" textLength="12.2" clip-path="url(#breeze-k8s-build-k8s-image-line-24)">│</text><text class="breeze-k8s-build-k8s-image-r4" x="24.4" y="605.6" textLength="305" clip-path="url(#breeze-k8s-build-k8s-image-line-24)">--include-success-outputs</text><text class="breeze-k8s-build-k8s-image-r1" x="378.2" y="605.6" textLength="927.2" clip-path="url(#breeze-k8s-build-k8s-image-line-24)">Whether&#160;to&#160;include&#160;outputs&#16 [...]
diff --git a/dev/breeze/doc/images/output_k8s_build-k8s-image.txt b/dev/breeze/doc/images/output_k8s_build-k8s-image.txt
index dd6b1b79cdf..0afa131e5c1 100644
--- a/dev/breeze/doc/images/output_k8s_build-k8s-image.txt
+++ b/dev/breeze/doc/images/output_k8s_build-k8s-image.txt
@@ -1 +1 @@
-7e4553f3179fe40e5c05bfc556cb2355
+f9669ae229dfd2954ae7bf6f66bb92bf
diff --git a/dev/breeze/doc/images/output_k8s_configure-cluster.svg b/dev/breeze/doc/images/output_k8s_configure-cluster.svg
index b46a5fd1175..2ecb3db7ecb 100644
--- a/dev/breeze/doc/images/output_k8s_configure-cluster.svg
+++ b/dev/breeze/doc/images/output_k8s_configure-cluster.svg
@@ -1,4 +1,4 @@
-<svg class="rich-terminal" viewBox="0 0 1482 830.8" xmlns="http://www.w3.org/2000/svg">
+<svg class="rich-terminal" viewBox="0 0 1482 855.1999999999999" xmlns="http://www.w3.org/2000/svg">
     <!-- Generated with Rich https://www.textualize.io -->
     <style>
 
@@ -43,7 +43,7 @@
 
     <defs>
     <clipPath id="breeze-k8s-configure-cluster-clip-terminal">
-      <rect x="0" y="0" width="1463.0" height="779.8" />
+      <rect x="0" y="0" width="1463.0" height="804.1999999999999" />
     </clipPath>
     <clipPath id="breeze-k8s-configure-cluster-line-0">
     <rect x="0" y="1.5" width="1464" height="24.65"/>
@@ -138,9 +138,12 @@
 <clipPath id="breeze-k8s-configure-cluster-line-30">
     <rect x="0" y="733.5" width="1464" height="24.65"/>
             </clipPath>
+<clipPath id="breeze-k8s-configure-cluster-line-31">
+    <rect x="0" y="757.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="828.8" rx="8"/><text class="breeze-k8s-configure-cluster-title" fill="#c5c8c6" text-anchor="middle" x="740" y="27">Command:&#160;k8s&#160;configure-cluster</text>
+    <rect fill="#292929" stroke="rgba(255,255,255,0.35)" stroke-width="1" x="1" y="1" width="1480" height="853.2" rx="8"/><text class="breeze-k8s-configure-cluster-title" fill="#c5c8c6" text-anchor="middle" x="740" y="27">Command:&#160;k8s&#160;configure-cluster</text>
             <g transform="translate(26,22)">
             <circle cx="0" cy="0" r="7" fill="#ff5f57"/>
             <circle cx="22" cy="0" r="7" fill="#febc2e"/>
@@ -157,31 +160,32 @@
 </text><text class="breeze-k8s-configure-cluster-r1" x="12.2" y="117.6" textLength="122" clip-path="url(#breeze-k8s-configure-cluster-line-4)">parallel).</text><text class="breeze-k8s-configure-cluster-r1" x="1464" y="117.6" textLength="12.2" clip-path="url(#breeze-k8s-configure-cluster-line-4)">
 </text><text class="breeze-k8s-configure-cluster-r1" x="1464" y="142" textLength="12.2" clip-path="url(#breeze-k8s-configure-cluster-line-5)">
 </text><text class="breeze-k8s-configure-cluster-r5" x="0" y="166.4" textLength="24.4" clip-path="url(#breeze-k8s-configure-cluster-line-6)">╭─</text><text class="breeze-k8s-configure-cluster-r5" x="24.4" y="166.4" textLength="305" clip-path="url(#breeze-k8s-configure-cluster-line-6)">&#160;Configure&#160;cluster&#160;flags&#160;</text><text class="breeze-k8s-configure-cluster-r5" x="329.4" y="166.4" textLength="1110.2" clip-path="url(#breeze-k8s-configure-cluster-line-6)">────────────── [...]
-</text><text class="breeze-k8s-configure-cluster-r5" x="0" y="190.8" textLength="12.2" clip-path="url(#breeze-k8s-configure-cluster-line-7)">│</text><text class="breeze-k8s-configure-cluster-r4" x="24.4" y="190.8" textLength="97.6" clip-path="url(#breeze-k8s-configure-cluster-line-7)">--python</text><text class="breeze-k8s-configure-cluster-r6" x="292.8" y="190.8" textLength="24.4" clip-path="url(#breeze-k8s-configure-cluster-line-7)">-p</text><text class="breeze-k8s-configure-cluster-r1 [...]
-</text><text class="breeze-k8s-configure-cluster-r5" x="0" y="215.2" textLength="12.2" clip-path="url(#breeze-k8s-configure-cluster-line-8)">│</text><text class="breeze-k8s-configure-cluster-r5" x="341.6" y="215.2" textLength="732" clip-path="url(#breeze-k8s-configure-cluster-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;& [...]
-</text><text class="breeze-k8s-configure-cluster-r5" x="0" y="239.6" textLength="12.2" clip-path="url(#breeze-k8s-configure-cluster-line-9)">│</text><text class="breeze-k8s-configure-cluster-r4" x="24.4" y="239.6" textLength="244" clip-path="url(#breeze-k8s-configure-cluster-line-9)">--kubernetes-version</text><text class="breeze-k8s-configure-cluster-r1" x="341.6" y="239.6" textLength="658.8" clip-path="url(#breeze-k8s-configure-cluster-line-9)">Kubernetes&#160;version&#160;used&#160;to [...]
-</text><text class="breeze-k8s-configure-cluster-r5" x="0" y="264" textLength="12.2" clip-path="url(#breeze-k8s-configure-cluster-line-10)">│</text><text class="breeze-k8s-configure-cluster-r7" x="341.6" y="264" textLength="658.8" clip-path="url(#breeze-k8s-configure-cluster-line-10)">(&gt;v1.28.13&lt;&#160;|&#160;v1.29.8&#160;|&#160;v1.30.4&#160;|&#160;v1.31.0)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-k8s-configure-cluster-r5" x=" [...]
-</text><text class="breeze-k8s-configure-cluster-r5" x="0" y="288.4" textLength="12.2" clip-path="url(#breeze-k8s-configure-cluster-line-11)">│</text><text class="breeze-k8s-configure-cluster-r5" x="341.6" y="288.4" textLength="658.8" clip-path="url(#breeze-k8s-configure-cluster-line-11)">[default:&#160;v1.28.13]&#160;&#160;&#160;&#160;&#160;&#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-k8s-configure-cluster-r5" x="0" y="312.8" textLength="1464" clip-path="url(#breeze-k8s-configure-cluster-line-12)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-k8s-configure-cluster-r1" x="1464" y="312.8" textLength="12.2" clip-path="url(#breeze-k8s-configure-cluster-line-12)">
-</text><text class="breeze-k8s-configure-cluster-r5" x="0" y="337.2" textLength="24.4" clip-path="url(#breeze-k8s-configure-cluster-line-13)">╭─</text><text class="breeze-k8s-configure-cluster-r5" x="24.4" y="337.2" textLength="219.6" clip-path="url(#breeze-k8s-configure-cluster-line-13)">&#160;Parallel&#160;options&#160;</text><text class="breeze-k8s-configure-cluster-r5" x="244" y="337.2" textLength="1195.6" clip-path="url(#breeze-k8s-configure-cluster-line-13)">─────────────────────── [...]
-</text><text class="breeze-k8s-configure-cluster-r5" x="0" y="361.6" textLength="12.2" clip-path="url(#breeze-k8s-configure-cluster-line-14)">│</text><text class="breeze-k8s-configure-cluster-r4" x="24.4" y="361.6" textLength="207.4" clip-path="url(#breeze-k8s-configure-cluster-line-14)">--run-in-parallel</text><text class="breeze-k8s-configure-cluster-r1" x="378.2" y="361.6" textLength="854" clip-path="url(#breeze-k8s-configure-cluster-line-14)">Run&#160;the&#160;operation&#160;in&#160; [...]
-</text><text class="breeze-k8s-configure-cluster-r5" x="0" y="386" textLength="12.2" clip-path="url(#breeze-k8s-configure-cluster-line-15)">│</text><text class="breeze-k8s-configure-cluster-r4" x="24.4" y="386" textLength="158.6" clip-path="url(#breeze-k8s-configure-cluster-line-15)">--parallelism</text><text class="breeze-k8s-configure-cluster-r1" x="378.2" y="386" textLength="1061.4" clip-path="url(#breeze-k8s-configure-cluster-line-15)">Maximum&#160;number&#160;of&#160;processes&#160; [...]
-</text><text class="breeze-k8s-configure-cluster-r5" x="0" y="410.4" textLength="12.2" clip-path="url(#breeze-k8s-configure-cluster-line-16)">│</text><text class="breeze-k8s-configure-cluster-r1" x="378.2" y="410.4" textLength="1061.4" clip-path="url(#breeze-k8s-configure-cluster-line-16)">operations.&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#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-k8s-configure-cluster-r5" x="0" y="434.8" textLength="12.2" clip-path="url(#breeze-k8s-configure-cluster-line-17)">│</text><text class="breeze-k8s-configure-cluster-r7" x="378.2" y="434.8" textLength="1061.4" clip-path="url(#breeze-k8s-configure-cluster-line-17)">(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;& [...]
-</text><text class="breeze-k8s-configure-cluster-r5" x="0" y="459.2" textLength="12.2" clip-path="url(#breeze-k8s-configure-cluster-line-18)">│</text><text class="breeze-k8s-configure-cluster-r5" x="378.2" y="459.2" textLength="1061.4" clip-path="url(#breeze-k8s-configure-cluster-line-18)">[default:&#160;2;&#160;1&lt;=x&lt;=4]&#160;&#160;&#160;&#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-k8s-configure-cluster-r5" x="0" y="483.6" textLength="12.2" clip-path="url(#breeze-k8s-configure-cluster-line-19)">│</text><text class="breeze-k8s-configure-cluster-r4" x="24.4" y="483.6" textLength="207.4" clip-path="url(#breeze-k8s-configure-cluster-line-19)">--python-versions</text><text class="breeze-k8s-configure-cluster-r1" x="378.2" y="483.6" textLength="951.6" clip-path="url(#breeze-k8s-configure-cluster-line-19)">Space&#160;separated&#160;list&#160;of& [...]
-</text><text class="breeze-k8s-configure-cluster-r5" x="0" y="508" textLength="12.2" clip-path="url(#breeze-k8s-configure-cluster-line-20)">│</text><text class="breeze-k8s-configure-cluster-r5" x="378.2" y="508" textLength="951.6" clip-path="url(#breeze-k8s-configure-cluster-line-20)">[default:&#160;3.9&#160;3.10&#160;3.11&#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;& [...]
-</text><text class="breeze-k8s-configure-cluster-r5" x="0" y="532.4" textLength="12.2" clip-path="url(#breeze-k8s-configure-cluster-line-21)">│</text><text class="breeze-k8s-configure-cluster-r4" x="24.4" y="532.4" textLength="256.2" clip-path="url(#breeze-k8s-configure-cluster-line-21)">--kubernetes-versions</text><text class="breeze-k8s-configure-cluster-r1" x="378.2" y="532.4" textLength="756.4" clip-path="url(#breeze-k8s-configure-cluster-line-21)">Kubernetes&#160;versions&#160;used& [...]
-</text><text class="breeze-k8s-configure-cluster-r5" x="0" y="556.8" textLength="12.2" clip-path="url(#breeze-k8s-configure-cluster-line-22)">│</text><text class="breeze-k8s-configure-cluster-r5" x="378.2" y="556.8" textLength="756.4" clip-path="url(#breeze-k8s-configure-cluster-line-22)">[default:&#160;v1.28.13&#160;v1.29.8&#160;v1.30.4&#160;v1.31.0]&#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-k8s-configure-cluster-r5" x="0" y="581.2" textLength="12.2" clip-path="url(#breeze-k8s-configure-cluster-line-23)">│</text><text class="breeze-k8s-configure-cluster-r4" x="24.4" y="581.2" textLength="170.8" clip-path="url(#breeze-k8s-configure-cluster-line-23)">--skip-cleanup</text><text class="breeze-k8s-configure-cluster-r1" x="378.2" y="581.2" textLength="732" clip-path="url(#breeze-k8s-configure-cluster-line-23)">Skip&#160;cleanup&#160;of&#160;temporary&#16 [...]
-</text><text class="breeze-k8s-configure-cluster-r5" x="0" y="605.6" textLength="12.2" clip-path="url(#breeze-k8s-configure-cluster-line-24)">│</text><text class="breeze-k8s-configure-cluster-r4" x="24.4" y="605.6" textLength="207.4" clip-path="url(#breeze-k8s-configure-cluster-line-24)">--debug-resources</text><text class="breeze-k8s-configure-cluster-r1" x="378.2" y="605.6" textLength="768.6" clip-path="url(#breeze-k8s-configure-cluster-line-24)">Whether&#160;to&#160;show&#160;resource [...]
-</text><text class="breeze-k8s-configure-cluster-r5" x="0" y="630" textLength="12.2" clip-path="url(#breeze-k8s-configure-cluster-line-25)">│</text><text class="breeze-k8s-configure-cluster-r4" x="24.4" y="630" textLength="305" clip-path="url(#breeze-k8s-configure-cluster-line-25)">--include-success-outputs</text><text class="breeze-k8s-configure-cluster-r1" x="378.2" y="630" textLength="927.2" clip-path="url(#breeze-k8s-configure-cluster-line-25)">Whether&#160;to&#160;include&#160;outpu [...]
-</text><text class="breeze-k8s-configure-cluster-r5" x="0" y="654.4" textLength="1464" clip-path="url(#breeze-k8s-configure-cluster-line-26)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-k8s-configure-cluster-r1" x="1464" y="654.4" textLength="12.2" clip-path="url(#breeze-k8s-configure-cluster-line-26)">
-</text><text class="breeze-k8s-configure-cluster-r5" x="0" y="678.8" textLength="24.4" clip-path="url(#breeze-k8s-configure-cluster-line-27)">╭─</text><text class="breeze-k8s-configure-cluster-r5" x="24.4" y="678.8" textLength="195.2" clip-path="url(#breeze-k8s-configure-cluster-line-27)">&#160;Common&#160;options&#160;</text><text class="breeze-k8s-configure-cluster-r5" x="219.6" y="678.8" textLength="1220" clip-path="url(#breeze-k8s-configure-cluster-line-27)">───────────────────────── [...]
-</text><text class="breeze-k8s-configure-cluster-r5" x="0" y="703.2" textLength="12.2" clip-path="url(#breeze-k8s-configure-cluster-line-28)">│</text><text class="breeze-k8s-configure-cluster-r4" x="24.4" y="703.2" textLength="109.8" clip-path="url(#breeze-k8s-configure-cluster-line-28)">--verbose</text><text class="breeze-k8s-configure-cluster-r6" x="158.6" y="703.2" textLength="24.4" clip-path="url(#breeze-k8s-configure-cluster-line-28)">-v</text><text class="breeze-k8s-configure-clust [...]
-</text><text class="breeze-k8s-configure-cluster-r5" x="0" y="727.6" textLength="12.2" clip-path="url(#breeze-k8s-configure-cluster-line-29)">│</text><text class="breeze-k8s-configure-cluster-r4" x="24.4" y="727.6" textLength="109.8" clip-path="url(#breeze-k8s-configure-cluster-line-29)">--dry-run</text><text class="breeze-k8s-configure-cluster-r6" x="158.6" y="727.6" textLength="24.4" clip-path="url(#breeze-k8s-configure-cluster-line-29)">-D</text><text class="breeze-k8s-configure-clust [...]
-</text><text class="breeze-k8s-configure-cluster-r5" x="0" y="752" textLength="12.2" clip-path="url(#breeze-k8s-configure-cluster-line-30)">│</text><text class="breeze-k8s-configure-cluster-r4" x="24.4" y="752" textLength="73.2" clip-path="url(#breeze-k8s-configure-cluster-line-30)">--help</text><text class="breeze-k8s-configure-cluster-r6" x="158.6" y="752" textLength="24.4" clip-path="url(#breeze-k8s-configure-cluster-line-30)">-h</text><text class="breeze-k8s-configure-cluster-r1" x=" [...]
-</text><text class="breeze-k8s-configure-cluster-r5" x="0" y="776.4" textLength="1464" clip-path="url(#breeze-k8s-configure-cluster-line-31)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-k8s-configure-cluster-r1" x="1464" y="776.4" textLength="12.2" clip-path="url(#breeze-k8s-configure-cluster-line-31)">
+</text><text class="breeze-k8s-configure-cluster-r5" x="0" y="190.8" textLength="12.2" clip-path="url(#breeze-k8s-configure-cluster-line-7)">│</text><text class="breeze-k8s-configure-cluster-r4" x="24.4" y="190.8" textLength="97.6" clip-path="url(#breeze-k8s-configure-cluster-line-7)">--python</text><text class="breeze-k8s-configure-cluster-r6" x="292.8" y="190.8" textLength="24.4" clip-path="url(#breeze-k8s-configure-cluster-line-7)">-p</text><text class="breeze-k8s-configure-cluster-r1 [...]
+</text><text class="breeze-k8s-configure-cluster-r5" x="0" y="215.2" textLength="12.2" clip-path="url(#breeze-k8s-configure-cluster-line-8)">│</text><text class="breeze-k8s-configure-cluster-r7" x="341.6" y="215.2" textLength="732" clip-path="url(#breeze-k8s-configure-cluster-line-8)">(&gt;3.8&lt;&#160;|&#160;3.9&#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; [...]
+</text><text class="breeze-k8s-configure-cluster-r5" x="0" y="239.6" textLength="12.2" clip-path="url(#breeze-k8s-configure-cluster-line-9)">│</text><text class="breeze-k8s-configure-cluster-r5" x="341.6" y="239.6" textLength="732" clip-path="url(#breeze-k8s-configure-cluster-line-9)">[default:&#160;3.8]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#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-k8s-configure-cluster-r5" x="0" y="264" textLength="12.2" clip-path="url(#breeze-k8s-configure-cluster-line-10)">│</text><text class="breeze-k8s-configure-cluster-r4" x="24.4" y="264" textLength="244" clip-path="url(#breeze-k8s-configure-cluster-line-10)">--kubernetes-version</text><text class="breeze-k8s-configure-cluster-r1" x="341.6" y="264" textLength="658.8" clip-path="url(#breeze-k8s-configure-cluster-line-10)">Kubernetes&#160;version&#160;used&#160;to&#1 [...]
+</text><text class="breeze-k8s-configure-cluster-r5" x="0" y="288.4" textLength="12.2" clip-path="url(#breeze-k8s-configure-cluster-line-11)">│</text><text class="breeze-k8s-configure-cluster-r7" x="341.6" y="288.4" textLength="658.8" clip-path="url(#breeze-k8s-configure-cluster-line-11)">(&gt;v1.28.13&lt;&#160;|&#160;v1.29.8&#160;|&#160;v1.30.4&#160;|&#160;v1.31.0)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-k8s-configure-cluster-r5" [...]
+</text><text class="breeze-k8s-configure-cluster-r5" x="0" y="312.8" textLength="12.2" clip-path="url(#breeze-k8s-configure-cluster-line-12)">│</text><text class="breeze-k8s-configure-cluster-r5" x="341.6" y="312.8" textLength="658.8" clip-path="url(#breeze-k8s-configure-cluster-line-12)">[default:&#160;v1.28.13]&#160;&#160;&#160;&#160;&#160;&#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-k8s-configure-cluster-r5" x="0" y="337.2" textLength="1464" clip-path="url(#breeze-k8s-configure-cluster-line-13)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-k8s-configure-cluster-r1" x="1464" y="337.2" textLength="12.2" clip-path="url(#breeze-k8s-configure-cluster-line-13)">
+</text><text class="breeze-k8s-configure-cluster-r5" x="0" y="361.6" textLength="24.4" clip-path="url(#breeze-k8s-configure-cluster-line-14)">╭─</text><text class="breeze-k8s-configure-cluster-r5" x="24.4" y="361.6" textLength="219.6" clip-path="url(#breeze-k8s-configure-cluster-line-14)">&#160;Parallel&#160;options&#160;</text><text class="breeze-k8s-configure-cluster-r5" x="244" y="361.6" textLength="1195.6" clip-path="url(#breeze-k8s-configure-cluster-line-14)">─────────────────────── [...]
+</text><text class="breeze-k8s-configure-cluster-r5" x="0" y="386" textLength="12.2" clip-path="url(#breeze-k8s-configure-cluster-line-15)">│</text><text class="breeze-k8s-configure-cluster-r4" x="24.4" y="386" textLength="207.4" clip-path="url(#breeze-k8s-configure-cluster-line-15)">--run-in-parallel</text><text class="breeze-k8s-configure-cluster-r1" x="378.2" y="386" textLength="854" clip-path="url(#breeze-k8s-configure-cluster-line-15)">Run&#160;the&#160;operation&#160;in&#160;parall [...]
+</text><text class="breeze-k8s-configure-cluster-r5" x="0" y="410.4" textLength="12.2" clip-path="url(#breeze-k8s-configure-cluster-line-16)">│</text><text class="breeze-k8s-configure-cluster-r4" x="24.4" y="410.4" textLength="158.6" clip-path="url(#breeze-k8s-configure-cluster-line-16)">--parallelism</text><text class="breeze-k8s-configure-cluster-r1" x="378.2" y="410.4" textLength="1061.4" clip-path="url(#breeze-k8s-configure-cluster-line-16)">Maximum&#160;number&#160;of&#160;processes [...]
+</text><text class="breeze-k8s-configure-cluster-r5" x="0" y="434.8" textLength="12.2" clip-path="url(#breeze-k8s-configure-cluster-line-17)">│</text><text class="breeze-k8s-configure-cluster-r1" x="378.2" y="434.8" textLength="1061.4" clip-path="url(#breeze-k8s-configure-cluster-line-17)">operations.&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#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-k8s-configure-cluster-r5" x="0" y="459.2" textLength="12.2" clip-path="url(#breeze-k8s-configure-cluster-line-18)">│</text><text class="breeze-k8s-configure-cluster-r7" x="378.2" y="459.2" textLength="1061.4" clip-path="url(#breeze-k8s-configure-cluster-line-18)">(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;& [...]
+</text><text class="breeze-k8s-configure-cluster-r5" x="0" y="483.6" textLength="12.2" clip-path="url(#breeze-k8s-configure-cluster-line-19)">│</text><text class="breeze-k8s-configure-cluster-r5" x="378.2" y="483.6" textLength="1061.4" clip-path="url(#breeze-k8s-configure-cluster-line-19)">[default:&#160;2;&#160;1&lt;=x&lt;=4]&#160;&#160;&#160;&#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-k8s-configure-cluster-r5" x="0" y="508" textLength="12.2" clip-path="url(#breeze-k8s-configure-cluster-line-20)">│</text><text class="breeze-k8s-configure-cluster-r4" x="24.4" y="508" textLength="207.4" clip-path="url(#breeze-k8s-configure-cluster-line-20)">--python-versions</text><text class="breeze-k8s-configure-cluster-r1" x="378.2" y="508" textLength="951.6" clip-path="url(#breeze-k8s-configure-cluster-line-20)">Space&#160;separated&#160;list&#160;of&#160;p [...]
+</text><text class="breeze-k8s-configure-cluster-r5" x="0" y="532.4" textLength="12.2" clip-path="url(#breeze-k8s-configure-cluster-line-21)">│</text><text class="breeze-k8s-configure-cluster-r5" x="378.2" y="532.4" textLength="951.6" clip-path="url(#breeze-k8s-configure-cluster-line-21)">[default:&#160;3.8&#160;3.9&#160;3.10&#160;3.11&#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; [...]
+</text><text class="breeze-k8s-configure-cluster-r5" x="0" y="556.8" textLength="12.2" clip-path="url(#breeze-k8s-configure-cluster-line-22)">│</text><text class="breeze-k8s-configure-cluster-r4" x="24.4" y="556.8" textLength="256.2" clip-path="url(#breeze-k8s-configure-cluster-line-22)">--kubernetes-versions</text><text class="breeze-k8s-configure-cluster-r1" x="378.2" y="556.8" textLength="756.4" clip-path="url(#breeze-k8s-configure-cluster-line-22)">Kubernetes&#160;versions&#160;used& [...]
+</text><text class="breeze-k8s-configure-cluster-r5" x="0" y="581.2" textLength="12.2" clip-path="url(#breeze-k8s-configure-cluster-line-23)">│</text><text class="breeze-k8s-configure-cluster-r5" x="378.2" y="581.2" textLength="756.4" clip-path="url(#breeze-k8s-configure-cluster-line-23)">[default:&#160;v1.28.13&#160;v1.29.8&#160;v1.30.4&#160;v1.31.0]&#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-k8s-configure-cluster-r5" x="0" y="605.6" textLength="12.2" clip-path="url(#breeze-k8s-configure-cluster-line-24)">│</text><text class="breeze-k8s-configure-cluster-r4" x="24.4" y="605.6" textLength="170.8" clip-path="url(#breeze-k8s-configure-cluster-line-24)">--skip-cleanup</text><text class="breeze-k8s-configure-cluster-r1" x="378.2" y="605.6" textLength="732" clip-path="url(#breeze-k8s-configure-cluster-line-24)">Skip&#160;cleanup&#160;of&#160;temporary&#16 [...]
+</text><text class="breeze-k8s-configure-cluster-r5" x="0" y="630" textLength="12.2" clip-path="url(#breeze-k8s-configure-cluster-line-25)">│</text><text class="breeze-k8s-configure-cluster-r4" x="24.4" y="630" textLength="207.4" clip-path="url(#breeze-k8s-configure-cluster-line-25)">--debug-resources</text><text class="breeze-k8s-configure-cluster-r1" x="378.2" y="630" textLength="768.6" clip-path="url(#breeze-k8s-configure-cluster-line-25)">Whether&#160;to&#160;show&#160;resource&#160; [...]
+</text><text class="breeze-k8s-configure-cluster-r5" x="0" y="654.4" textLength="12.2" clip-path="url(#breeze-k8s-configure-cluster-line-26)">│</text><text class="breeze-k8s-configure-cluster-r4" x="24.4" y="654.4" textLength="305" clip-path="url(#breeze-k8s-configure-cluster-line-26)">--include-success-outputs</text><text class="breeze-k8s-configure-cluster-r1" x="378.2" y="654.4" textLength="927.2" clip-path="url(#breeze-k8s-configure-cluster-line-26)">Whether&#160;to&#160;include&#160 [...]
+</text><text class="breeze-k8s-configure-cluster-r5" x="0" y="678.8" textLength="1464" clip-path="url(#breeze-k8s-configure-cluster-line-27)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-k8s-configure-cluster-r1" x="1464" y="678.8" textLength="12.2" clip-path="url(#breeze-k8s-configure-cluster-line-27)">
+</text><text class="breeze-k8s-configure-cluster-r5" x="0" y="703.2" textLength="24.4" clip-path="url(#breeze-k8s-configure-cluster-line-28)">╭─</text><text class="breeze-k8s-configure-cluster-r5" x="24.4" y="703.2" textLength="195.2" clip-path="url(#breeze-k8s-configure-cluster-line-28)">&#160;Common&#160;options&#160;</text><text class="breeze-k8s-configure-cluster-r5" x="219.6" y="703.2" textLength="1220" clip-path="url(#breeze-k8s-configure-cluster-line-28)">───────────────────────── [...]
+</text><text class="breeze-k8s-configure-cluster-r5" x="0" y="727.6" textLength="12.2" clip-path="url(#breeze-k8s-configure-cluster-line-29)">│</text><text class="breeze-k8s-configure-cluster-r4" x="24.4" y="727.6" textLength="109.8" clip-path="url(#breeze-k8s-configure-cluster-line-29)">--verbose</text><text class="breeze-k8s-configure-cluster-r6" x="158.6" y="727.6" textLength="24.4" clip-path="url(#breeze-k8s-configure-cluster-line-29)">-v</text><text class="breeze-k8s-configure-clust [...]
+</text><text class="breeze-k8s-configure-cluster-r5" x="0" y="752" textLength="12.2" clip-path="url(#breeze-k8s-configure-cluster-line-30)">│</text><text class="breeze-k8s-configure-cluster-r4" x="24.4" y="752" textLength="109.8" clip-path="url(#breeze-k8s-configure-cluster-line-30)">--dry-run</text><text class="breeze-k8s-configure-cluster-r6" x="158.6" y="752" textLength="24.4" clip-path="url(#breeze-k8s-configure-cluster-line-30)">-D</text><text class="breeze-k8s-configure-cluster-r1" [...]
+</text><text class="breeze-k8s-configure-cluster-r5" x="0" y="776.4" textLength="12.2" clip-path="url(#breeze-k8s-configure-cluster-line-31)">│</text><text class="breeze-k8s-configure-cluster-r4" x="24.4" y="776.4" textLength="73.2" clip-path="url(#breeze-k8s-configure-cluster-line-31)">--help</text><text class="breeze-k8s-configure-cluster-r6" x="158.6" y="776.4" textLength="24.4" clip-path="url(#breeze-k8s-configure-cluster-line-31)">-h</text><text class="breeze-k8s-configure-cluster-r [...]
+</text><text class="breeze-k8s-configure-cluster-r5" x="0" y="800.8" textLength="1464" clip-path="url(#breeze-k8s-configure-cluster-line-32)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-k8s-configure-cluster-r1" x="1464" y="800.8" textLength="12.2" clip-path="url(#breeze-k8s-configure-cluster-line-32)">
 </text>
     </g>
     </g>
diff --git a/dev/breeze/doc/images/output_k8s_configure-cluster.txt b/dev/breeze/doc/images/output_k8s_configure-cluster.txt
index 7ed7f0e9914..ac398e9fbce 100644
--- a/dev/breeze/doc/images/output_k8s_configure-cluster.txt
+++ b/dev/breeze/doc/images/output_k8s_configure-cluster.txt
@@ -1 +1 @@
-6e0e5ed30fcde18abe30f7dab1c4f0b6
+c175cc4375923707f1aa91074df42c37
diff --git a/dev/breeze/doc/images/output_k8s_create-cluster.svg b/dev/breeze/doc/images/output_k8s_create-cluster.svg
index 04176b416c1..6d3f18d341a 100644
--- a/dev/breeze/doc/images/output_k8s_create-cluster.svg
+++ b/dev/breeze/doc/images/output_k8s_create-cluster.svg
@@ -160,8 +160,8 @@
 </text><text class="breeze-k8s-create-cluster-r1" x="1464" y="117.6" textLength="12.2" clip-path="url(#breeze-k8s-create-cluster-line-4)">
 </text><text class="breeze-k8s-create-cluster-r5" x="0" y="142" textLength="24.4" clip-path="url(#breeze-k8s-create-cluster-line-5)">╭─</text><text class="breeze-k8s-create-cluster-r5" x="24.4" y="142" textLength="341.6" clip-path="url(#breeze-k8s-create-cluster-line-5)">&#160;K8S&#160;cluster&#160;creation&#160;flags&#160;</text><text class="breeze-k8s-create-cluster-r5" x="366" y="142" textLength="1073.6" clip-path="url(#breeze-k8s-create-cluster-line-5)">────────────────────────────── [...]
 </text><text class="breeze-k8s-create-cluster-r5" x="0" y="166.4" textLength="12.2" clip-path="url(#breeze-k8s-create-cluster-line-6)">│</text><text class="breeze-k8s-create-cluster-r4" x="24.4" y="166.4" textLength="97.6" clip-path="url(#breeze-k8s-create-cluster-line-6)">--python</text><text class="breeze-k8s-create-cluster-r6" x="341.6" y="166.4" textLength="24.4" clip-path="url(#breeze-k8s-create-cluster-line-6)">-p</text><text class="breeze-k8s-create-cluster-r1" x="390.4" y="166.4" [...]
-</text><text class="breeze-k8s-create-cluster-r5" x="0" y="190.8" textLength="12.2" clip-path="url(#breeze-k8s-create-cluster-line-7)">│</text><text class="breeze-k8s-create-cluster-r7" x="390.4" y="190.8" textLength="732" clip-path="url(#breeze-k8s-create-cluster-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;&#16 [...]
-</text><text class="breeze-k8s-create-cluster-r5" x="0" y="215.2" textLength="12.2" clip-path="url(#breeze-k8s-create-cluster-line-8)">│</text><text class="breeze-k8s-create-cluster-r5" x="390.4" y="215.2" textLength="732" clip-path="url(#breeze-k8s-create-cluster-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;& [...]
+</text><text class="breeze-k8s-create-cluster-r5" x="0" y="190.8" textLength="12.2" clip-path="url(#breeze-k8s-create-cluster-line-7)">│</text><text class="breeze-k8s-create-cluster-r7" x="390.4" y="190.8" textLength="732" clip-path="url(#breeze-k8s-create-cluster-line-7)">(&gt;3.8&lt;&#160;|&#160;3.9&#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; [...]
+</text><text class="breeze-k8s-create-cluster-r5" x="0" y="215.2" textLength="12.2" clip-path="url(#breeze-k8s-create-cluster-line-8)">│</text><text class="breeze-k8s-create-cluster-r5" x="390.4" y="215.2" textLength="732" clip-path="url(#breeze-k8s-create-cluster-line-8)">[default:&#160;3.8]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#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-k8s-create-cluster-r5" x="0" y="239.6" textLength="12.2" clip-path="url(#breeze-k8s-create-cluster-line-9)">│</text><text class="breeze-k8s-create-cluster-r4" x="24.4" y="239.6" textLength="244" clip-path="url(#breeze-k8s-create-cluster-line-9)">--kubernetes-version</text><text class="breeze-k8s-create-cluster-r1" x="390.4" y="239.6" textLength="658.8" clip-path="url(#breeze-k8s-create-cluster-line-9)">Kubernetes&#160;version&#160;used&#160;to&#160;create&#160; [...]
 </text><text class="breeze-k8s-create-cluster-r5" x="0" y="264" textLength="12.2" clip-path="url(#breeze-k8s-create-cluster-line-10)">│</text><text class="breeze-k8s-create-cluster-r7" x="390.4" y="264" textLength="658.8" clip-path="url(#breeze-k8s-create-cluster-line-10)">(&gt;v1.28.13&lt;&#160;|&#160;v1.29.8&#160;|&#160;v1.30.4&#160;|&#160;v1.31.0)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-k8s-create-cluster-r5" x="1451.8" y="264" [...]
 </text><text class="breeze-k8s-create-cluster-r5" x="0" y="288.4" textLength="12.2" clip-path="url(#breeze-k8s-create-cluster-line-11)">│</text><text class="breeze-k8s-create-cluster-r5" x="390.4" y="288.4" textLength="658.8" clip-path="url(#breeze-k8s-create-cluster-line-11)">[default:&#160;v1.28.13]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#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 [...]
@@ -174,7 +174,7 @@
 </text><text class="breeze-k8s-create-cluster-r5" x="0" y="459.2" textLength="12.2" clip-path="url(#breeze-k8s-create-cluster-line-18)">│</text><text class="breeze-k8s-create-cluster-r7" x="378.2" y="459.2" textLength="1061.4" clip-path="url(#breeze-k8s-create-cluster-line-18)">(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;& [...]
 </text><text class="breeze-k8s-create-cluster-r5" x="0" y="483.6" textLength="12.2" clip-path="url(#breeze-k8s-create-cluster-line-19)">│</text><text class="breeze-k8s-create-cluster-r5" x="378.2" y="483.6" textLength="1061.4" clip-path="url(#breeze-k8s-create-cluster-line-19)">[default:&#160;2;&#160;1&lt;=x&lt;=4]&#160;&#160;&#160;&#160;&#160;&#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-k8s-create-cluster-r5" x="0" y="508" textLength="12.2" clip-path="url(#breeze-k8s-create-cluster-line-20)">│</text><text class="breeze-k8s-create-cluster-r4" x="24.4" y="508" textLength="207.4" clip-path="url(#breeze-k8s-create-cluster-line-20)">--python-versions</text><text class="breeze-k8s-create-cluster-r1" x="378.2" y="508" textLength="951.6" clip-path="url(#breeze-k8s-create-cluster-line-20)">Space&#160;separated&#160;list&#160;of&#160;python&#160;version [...]
-</text><text class="breeze-k8s-create-cluster-r5" x="0" y="532.4" textLength="12.2" clip-path="url(#breeze-k8s-create-cluster-line-21)">│</text><text class="breeze-k8s-create-cluster-r5" x="378.2" y="532.4" textLength="951.6" clip-path="url(#breeze-k8s-create-cluster-line-21)">[default:&#160;3.9&#160;3.10&#160;3.11&#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;&#1 [...]
+</text><text class="breeze-k8s-create-cluster-r5" x="0" y="532.4" textLength="12.2" clip-path="url(#breeze-k8s-create-cluster-line-21)">│</text><text class="breeze-k8s-create-cluster-r5" x="378.2" y="532.4" textLength="951.6" clip-path="url(#breeze-k8s-create-cluster-line-21)">[default:&#160;3.8&#160;3.9&#160;3.10&#160;3.11&#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; [...]
 </text><text class="breeze-k8s-create-cluster-r5" x="0" y="556.8" textLength="12.2" clip-path="url(#breeze-k8s-create-cluster-line-22)">│</text><text class="breeze-k8s-create-cluster-r4" x="24.4" y="556.8" textLength="256.2" clip-path="url(#breeze-k8s-create-cluster-line-22)">--kubernetes-versions</text><text class="breeze-k8s-create-cluster-r1" x="378.2" y="556.8" textLength="756.4" clip-path="url(#breeze-k8s-create-cluster-line-22)">Kubernetes&#160;versions&#160;used&#160;to&#160;run&# [...]
 </text><text class="breeze-k8s-create-cluster-r5" x="0" y="581.2" textLength="12.2" clip-path="url(#breeze-k8s-create-cluster-line-23)">│</text><text class="breeze-k8s-create-cluster-r5" x="378.2" y="581.2" textLength="756.4" clip-path="url(#breeze-k8s-create-cluster-line-23)">[default:&#160;v1.28.13&#160;v1.29.8&#160;v1.30.4&#160;v1.31.0]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-k8s-create [...]
 </text><text class="breeze-k8s-create-cluster-r5" x="0" y="605.6" textLength="12.2" clip-path="url(#breeze-k8s-create-cluster-line-24)">│</text><text class="breeze-k8s-create-cluster-r4" x="24.4" y="605.6" textLength="170.8" clip-path="url(#breeze-k8s-create-cluster-line-24)">--skip-cleanup</text><text class="breeze-k8s-create-cluster-r1" x="378.2" y="605.6" textLength="732" clip-path="url(#breeze-k8s-create-cluster-line-24)">Skip&#160;cleanup&#160;of&#160;temporary&#160;files&#160;creat [...]
diff --git a/dev/breeze/doc/images/output_k8s_create-cluster.txt b/dev/breeze/doc/images/output_k8s_create-cluster.txt
index e9e52f4a391..29557703705 100644
--- a/dev/breeze/doc/images/output_k8s_create-cluster.txt
+++ b/dev/breeze/doc/images/output_k8s_create-cluster.txt
@@ -1 +1 @@
-254a3805eeb108125d078abecf9226fb
+98956f766fe2b98109626b909082e4f3
diff --git a/dev/breeze/doc/images/output_k8s_delete-cluster.svg b/dev/breeze/doc/images/output_k8s_delete-cluster.svg
index ebb3878309b..83efc5b324a 100644
--- a/dev/breeze/doc/images/output_k8s_delete-cluster.svg
+++ b/dev/breeze/doc/images/output_k8s_delete-cluster.svg
@@ -1,4 +1,4 @@
-<svg class="rich-terminal" viewBox="0 0 1482 489.2" xmlns="http://www.w3.org/2000/svg">
+<svg class="rich-terminal" viewBox="0 0 1482 513.5999999999999" xmlns="http://www.w3.org/2000/svg">
     <!-- Generated with Rich https://www.textualize.io -->
     <style>
 
@@ -43,7 +43,7 @@
 
     <defs>
     <clipPath id="breeze-k8s-delete-cluster-clip-terminal">
-      <rect x="0" y="0" width="1463.0" height="438.2" />
+      <rect x="0" y="0" width="1463.0" height="462.59999999999997" />
     </clipPath>
     <clipPath id="breeze-k8s-delete-cluster-line-0">
     <rect x="0" y="1.5" width="1464" height="24.65"/>
@@ -96,9 +96,12 @@
 <clipPath id="breeze-k8s-delete-cluster-line-16">
     <rect x="0" y="391.9" width="1464" height="24.65"/>
             </clipPath>
+<clipPath id="breeze-k8s-delete-cluster-line-17">
+    <rect x="0" y="416.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="487.2" rx="8"/><text class="breeze-k8s-delete-cluster-title" fill="#c5c8c6" text-anchor="middle" x="740" y="27">Command:&#160;k8s&#160;delete-cluster</text>
+    <rect fill="#292929" stroke="rgba(255,255,255,0.35)" stroke-width="1" x="1" y="1" width="1480" height="511.6" rx="8"/><text class="breeze-k8s-delete-cluster-title" fill="#c5c8c6" text-anchor="middle" x="740" y="27">Command:&#160;k8s&#160;delete-cluster</text>
             <g transform="translate(26,22)">
             <circle cx="0" cy="0" r="7" fill="#ff5f57"/>
             <circle cx="22" cy="0" r="7" fill="#febc2e"/>
@@ -114,18 +117,19 @@
 </text><text class="breeze-k8s-delete-cluster-r1" x="12.2" y="93.2" textLength="707.6" clip-path="url(#breeze-k8s-delete-cluster-line-3)">Delete&#160;the&#160;current&#160;KinD&#160;Cluster&#160;(optionally&#160;all&#160;clusters).</text><text class="breeze-k8s-delete-cluster-r1" x="1464" y="93.2" textLength="12.2" clip-path="url(#breeze-k8s-delete-cluster-line-3)">
 </text><text class="breeze-k8s-delete-cluster-r1" x="1464" y="117.6" textLength="12.2" clip-path="url(#breeze-k8s-delete-cluster-line-4)">
 </text><text class="breeze-k8s-delete-cluster-r5" x="0" y="142" textLength="24.4" clip-path="url(#breeze-k8s-delete-cluster-line-5)">╭─</text><text class="breeze-k8s-delete-cluster-r5" x="24.4" y="142" textLength="317.2" clip-path="url(#breeze-k8s-delete-cluster-line-5)">&#160;K8S&#160;cluster&#160;delete&#160;flags&#160;</text><text class="breeze-k8s-delete-cluster-r5" x="341.6" y="142" textLength="1098" clip-path="url(#breeze-k8s-delete-cluster-line-5)">──────────────────────────────── [...]
-</text><text class="breeze-k8s-delete-cluster-r5" x="0" y="166.4" textLength="12.2" clip-path="url(#breeze-k8s-delete-cluster-line-6)">│</text><text class="breeze-k8s-delete-cluster-r4" x="24.4" y="166.4" textLength="97.6" clip-path="url(#breeze-k8s-delete-cluster-line-6)">--python</text><text class="breeze-k8s-delete-cluster-r6" x="292.8" y="166.4" textLength="24.4" clip-path="url(#breeze-k8s-delete-cluster-line-6)">-p</text><text class="breeze-k8s-delete-cluster-r1" x="341.6" y="166.4" [...]
-</text><text class="breeze-k8s-delete-cluster-r5" x="0" y="190.8" textLength="12.2" clip-path="url(#breeze-k8s-delete-cluster-line-7)">│</text><text class="breeze-k8s-delete-cluster-r5" x="341.6" y="190.8" textLength="732" clip-path="url(#breeze-k8s-delete-cluster-line-7)">[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;& [...]
-</text><text class="breeze-k8s-delete-cluster-r5" x="0" y="215.2" textLength="12.2" clip-path="url(#breeze-k8s-delete-cluster-line-8)">│</text><text class="breeze-k8s-delete-cluster-r4" x="24.4" y="215.2" textLength="244" clip-path="url(#breeze-k8s-delete-cluster-line-8)">--kubernetes-version</text><text class="breeze-k8s-delete-cluster-r1" x="341.6" y="215.2" textLength="658.8" clip-path="url(#breeze-k8s-delete-cluster-line-8)">Kubernetes&#160;version&#160;used&#160;to&#160;create&#160; [...]
-</text><text class="breeze-k8s-delete-cluster-r5" x="0" y="239.6" textLength="12.2" clip-path="url(#breeze-k8s-delete-cluster-line-9)">│</text><text class="breeze-k8s-delete-cluster-r7" x="341.6" y="239.6" textLength="658.8" clip-path="url(#breeze-k8s-delete-cluster-line-9)">(&gt;v1.28.13&lt;&#160;|&#160;v1.29.8&#160;|&#160;v1.30.4&#160;|&#160;v1.31.0)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-k8s-delete-cluster-r5" x="1451.8" y="23 [...]
-</text><text class="breeze-k8s-delete-cluster-r5" x="0" y="264" textLength="12.2" clip-path="url(#breeze-k8s-delete-cluster-line-10)">│</text><text class="breeze-k8s-delete-cluster-r5" x="341.6" y="264" textLength="658.8" clip-path="url(#breeze-k8s-delete-cluster-line-10)">[default:&#160;v1.28.13]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#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-k8s-delete-cluster-r5" x="0" y="288.4" textLength="12.2" clip-path="url(#breeze-k8s-delete-cluster-line-11)">│</text><text class="breeze-k8s-delete-cluster-r4" x="24.4" y="288.4" textLength="61" clip-path="url(#breeze-k8s-delete-cluster-line-11)">--all</text><text class="breeze-k8s-delete-cluster-r1" x="341.6" y="288.4" textLength="390.4" clip-path="url(#breeze-k8s-delete-cluster-line-11)">Apply&#160;it&#160;to&#160;all&#160;created&#160;clusters</text><text cl [...]
-</text><text class="breeze-k8s-delete-cluster-r5" x="0" y="312.8" textLength="1464" clip-path="url(#breeze-k8s-delete-cluster-line-12)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-k8s-delete-cluster-r1" x="1464" y="312.8" textLength="12.2" clip-path="url(#breeze-k8s-delete-cluster-line-12)">
-</text><text class="breeze-k8s-delete-cluster-r5" x="0" y="337.2" textLength="24.4" clip-path="url(#breeze-k8s-delete-cluster-line-13)">╭─</text><text class="breeze-k8s-delete-cluster-r5" x="24.4" y="337.2" textLength="195.2" clip-path="url(#breeze-k8s-delete-cluster-line-13)">&#160;Common&#160;options&#160;</text><text class="breeze-k8s-delete-cluster-r5" x="219.6" y="337.2" textLength="1220" clip-path="url(#breeze-k8s-delete-cluster-line-13)">─────────────────────────────────────────── [...]
-</text><text class="breeze-k8s-delete-cluster-r5" x="0" y="361.6" textLength="12.2" clip-path="url(#breeze-k8s-delete-cluster-line-14)">│</text><text class="breeze-k8s-delete-cluster-r4" x="24.4" y="361.6" textLength="109.8" clip-path="url(#breeze-k8s-delete-cluster-line-14)">--verbose</text><text class="breeze-k8s-delete-cluster-r6" x="158.6" y="361.6" textLength="24.4" clip-path="url(#breeze-k8s-delete-cluster-line-14)">-v</text><text class="breeze-k8s-delete-cluster-r1" x="207.4" y="3 [...]
-</text><text class="breeze-k8s-delete-cluster-r5" x="0" y="386" textLength="12.2" clip-path="url(#breeze-k8s-delete-cluster-line-15)">│</text><text class="breeze-k8s-delete-cluster-r4" x="24.4" y="386" textLength="109.8" clip-path="url(#breeze-k8s-delete-cluster-line-15)">--dry-run</text><text class="breeze-k8s-delete-cluster-r6" x="158.6" y="386" textLength="24.4" clip-path="url(#breeze-k8s-delete-cluster-line-15)">-D</text><text class="breeze-k8s-delete-cluster-r1" x="207.4" y="386" te [...]
-</text><text class="breeze-k8s-delete-cluster-r5" x="0" y="410.4" textLength="12.2" clip-path="url(#breeze-k8s-delete-cluster-line-16)">│</text><text class="breeze-k8s-delete-cluster-r4" x="24.4" y="410.4" textLength="73.2" clip-path="url(#breeze-k8s-delete-cluster-line-16)">--help</text><text class="breeze-k8s-delete-cluster-r6" x="158.6" y="410.4" textLength="24.4" clip-path="url(#breeze-k8s-delete-cluster-line-16)">-h</text><text class="breeze-k8s-delete-cluster-r1" x="207.4" y="410.4 [...]
-</text><text class="breeze-k8s-delete-cluster-r5" x="0" y="434.8" textLength="1464" clip-path="url(#breeze-k8s-delete-cluster-line-17)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-k8s-delete-cluster-r1" x="1464" y="434.8" textLength="12.2" clip-path="url(#breeze-k8s-delete-cluster-line-17)">
+</text><text class="breeze-k8s-delete-cluster-r5" x="0" y="166.4" textLength="12.2" clip-path="url(#breeze-k8s-delete-cluster-line-6)">│</text><text class="breeze-k8s-delete-cluster-r4" x="24.4" y="166.4" textLength="97.6" clip-path="url(#breeze-k8s-delete-cluster-line-6)">--python</text><text class="breeze-k8s-delete-cluster-r6" x="292.8" y="166.4" textLength="24.4" clip-path="url(#breeze-k8s-delete-cluster-line-6)">-p</text><text class="breeze-k8s-delete-cluster-r1" x="341.6" y="166.4" [...]
+</text><text class="breeze-k8s-delete-cluster-r5" x="0" y="190.8" textLength="12.2" clip-path="url(#breeze-k8s-delete-cluster-line-7)">│</text><text class="breeze-k8s-delete-cluster-r7" x="341.6" y="190.8" textLength="732" clip-path="url(#breeze-k8s-delete-cluster-line-7)">(&gt;3.8&lt;&#160;|&#160;3.9&#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; [...]
+</text><text class="breeze-k8s-delete-cluster-r5" x="0" y="215.2" textLength="12.2" clip-path="url(#breeze-k8s-delete-cluster-line-8)">│</text><text class="breeze-k8s-delete-cluster-r5" x="341.6" y="215.2" textLength="732" clip-path="url(#breeze-k8s-delete-cluster-line-8)">[default:&#160;3.8]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#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-k8s-delete-cluster-r5" x="0" y="239.6" textLength="12.2" clip-path="url(#breeze-k8s-delete-cluster-line-9)">│</text><text class="breeze-k8s-delete-cluster-r4" x="24.4" y="239.6" textLength="244" clip-path="url(#breeze-k8s-delete-cluster-line-9)">--kubernetes-version</text><text class="breeze-k8s-delete-cluster-r1" x="341.6" y="239.6" textLength="658.8" clip-path="url(#breeze-k8s-delete-cluster-line-9)">Kubernetes&#160;version&#160;used&#160;to&#160;create&#160; [...]
+</text><text class="breeze-k8s-delete-cluster-r5" x="0" y="264" textLength="12.2" clip-path="url(#breeze-k8s-delete-cluster-line-10)">│</text><text class="breeze-k8s-delete-cluster-r7" x="341.6" y="264" textLength="658.8" clip-path="url(#breeze-k8s-delete-cluster-line-10)">(&gt;v1.28.13&lt;&#160;|&#160;v1.29.8&#160;|&#160;v1.30.4&#160;|&#160;v1.31.0)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-k8s-delete-cluster-r5" x="1451.8" y="264" [...]
+</text><text class="breeze-k8s-delete-cluster-r5" x="0" y="288.4" textLength="12.2" clip-path="url(#breeze-k8s-delete-cluster-line-11)">│</text><text class="breeze-k8s-delete-cluster-r5" x="341.6" y="288.4" textLength="658.8" clip-path="url(#breeze-k8s-delete-cluster-line-11)">[default:&#160;v1.28.13]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#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-k8s-delete-cluster-r5" x="0" y="312.8" textLength="12.2" clip-path="url(#breeze-k8s-delete-cluster-line-12)">│</text><text class="breeze-k8s-delete-cluster-r4" x="24.4" y="312.8" textLength="61" clip-path="url(#breeze-k8s-delete-cluster-line-12)">--all</text><text class="breeze-k8s-delete-cluster-r1" x="341.6" y="312.8" textLength="390.4" clip-path="url(#breeze-k8s-delete-cluster-line-12)">Apply&#160;it&#160;to&#160;all&#160;created&#160;clusters</text><text cl [...]
+</text><text class="breeze-k8s-delete-cluster-r5" x="0" y="337.2" textLength="1464" clip-path="url(#breeze-k8s-delete-cluster-line-13)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-k8s-delete-cluster-r1" x="1464" y="337.2" textLength="12.2" clip-path="url(#breeze-k8s-delete-cluster-line-13)">
+</text><text class="breeze-k8s-delete-cluster-r5" x="0" y="361.6" textLength="24.4" clip-path="url(#breeze-k8s-delete-cluster-line-14)">╭─</text><text class="breeze-k8s-delete-cluster-r5" x="24.4" y="361.6" textLength="195.2" clip-path="url(#breeze-k8s-delete-cluster-line-14)">&#160;Common&#160;options&#160;</text><text class="breeze-k8s-delete-cluster-r5" x="219.6" y="361.6" textLength="1220" clip-path="url(#breeze-k8s-delete-cluster-line-14)">─────────────────────────────────────────── [...]
+</text><text class="breeze-k8s-delete-cluster-r5" x="0" y="386" textLength="12.2" clip-path="url(#breeze-k8s-delete-cluster-line-15)">│</text><text class="breeze-k8s-delete-cluster-r4" x="24.4" y="386" textLength="109.8" clip-path="url(#breeze-k8s-delete-cluster-line-15)">--verbose</text><text class="breeze-k8s-delete-cluster-r6" x="158.6" y="386" textLength="24.4" clip-path="url(#breeze-k8s-delete-cluster-line-15)">-v</text><text class="breeze-k8s-delete-cluster-r1" x="207.4" y="386" te [...]
+</text><text class="breeze-k8s-delete-cluster-r5" x="0" y="410.4" textLength="12.2" clip-path="url(#breeze-k8s-delete-cluster-line-16)">│</text><text class="breeze-k8s-delete-cluster-r4" x="24.4" y="410.4" textLength="109.8" clip-path="url(#breeze-k8s-delete-cluster-line-16)">--dry-run</text><text class="breeze-k8s-delete-cluster-r6" x="158.6" y="410.4" textLength="24.4" clip-path="url(#breeze-k8s-delete-cluster-line-16)">-D</text><text class="breeze-k8s-delete-cluster-r1" x="207.4" y="4 [...]
+</text><text class="breeze-k8s-delete-cluster-r5" x="0" y="434.8" textLength="12.2" clip-path="url(#breeze-k8s-delete-cluster-line-17)">│</text><text class="breeze-k8s-delete-cluster-r4" x="24.4" y="434.8" textLength="73.2" clip-path="url(#breeze-k8s-delete-cluster-line-17)">--help</text><text class="breeze-k8s-delete-cluster-r6" x="158.6" y="434.8" textLength="24.4" clip-path="url(#breeze-k8s-delete-cluster-line-17)">-h</text><text class="breeze-k8s-delete-cluster-r1" x="207.4" y="434.8 [...]
+</text><text class="breeze-k8s-delete-cluster-r5" x="0" y="459.2" textLength="1464" clip-path="url(#breeze-k8s-delete-cluster-line-18)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-k8s-delete-cluster-r1" x="1464" y="459.2" textLength="12.2" clip-path="url(#breeze-k8s-delete-cluster-line-18)">
 </text>
     </g>
     </g>
diff --git a/dev/breeze/doc/images/output_k8s_delete-cluster.txt b/dev/breeze/doc/images/output_k8s_delete-cluster.txt
index 3c0998b1f3c..9057ac44c26 100644
--- a/dev/breeze/doc/images/output_k8s_delete-cluster.txt
+++ b/dev/breeze/doc/images/output_k8s_delete-cluster.txt
@@ -1 +1 @@
-11cd0c89e39c35786fb33d00fbb927fc
+ab4aacbb44ee638a91f4ff225cb1dbfa
diff --git a/dev/breeze/doc/images/output_k8s_deploy-airflow.svg b/dev/breeze/doc/images/output_k8s_deploy-airflow.svg
index 1ad64158746..034b87a27da 100644
--- a/dev/breeze/doc/images/output_k8s_deploy-airflow.svg
+++ b/dev/breeze/doc/images/output_k8s_deploy-airflow.svg
@@ -181,8 +181,8 @@
 </text><text class="breeze-k8s-deploy-airflow-r1" x="1464" y="117.6" textLength="12.2" clip-path="url(#breeze-k8s-deploy-airflow-line-4)">
 </text><text class="breeze-k8s-deploy-airflow-r5" x="0" y="142" textLength="24.4" clip-path="url(#breeze-k8s-deploy-airflow-line-5)">╭─</text><text class="breeze-k8s-deploy-airflow-r5" x="24.4" y="142" textLength="268.4" clip-path="url(#breeze-k8s-deploy-airflow-line-5)">&#160;Airflow&#160;deploy&#160;flags&#160;</text><text class="breeze-k8s-deploy-airflow-r5" x="292.8" y="142" textLength="1146.8" clip-path="url(#breeze-k8s-deploy-airflow-line-5)">─────────────────────────────────────── [...]
 </text><text class="breeze-k8s-deploy-airflow-r5" x="0" y="166.4" textLength="12.2" clip-path="url(#breeze-k8s-deploy-airflow-line-6)">│</text><text class="breeze-k8s-deploy-airflow-r4" x="24.4" y="166.4" textLength="97.6" clip-path="url(#breeze-k8s-deploy-airflow-line-6)">--python</text><text class="breeze-k8s-deploy-airflow-r6" x="317.2" y="166.4" textLength="24.4" clip-path="url(#breeze-k8s-deploy-airflow-line-6)">-p</text><text class="breeze-k8s-deploy-airflow-r1" x="366" y="166.4" t [...]
-</text><text class="breeze-k8s-deploy-airflow-r5" x="0" y="190.8" textLength="12.2" clip-path="url(#breeze-k8s-deploy-airflow-line-7)">│</text><text class="breeze-k8s-deploy-airflow-r7" x="366" y="190.8" textLength="732" clip-path="url(#breeze-k8s-deploy-airflow-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; [...]
-</text><text class="breeze-k8s-deploy-airflow-r5" x="0" y="215.2" textLength="12.2" clip-path="url(#breeze-k8s-deploy-airflow-line-8)">│</text><text class="breeze-k8s-deploy-airflow-r5" x="366" y="215.2" textLength="732" clip-path="url(#breeze-k8s-deploy-airflow-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;&#1 [...]
+</text><text class="breeze-k8s-deploy-airflow-r5" x="0" y="190.8" textLength="12.2" clip-path="url(#breeze-k8s-deploy-airflow-line-7)">│</text><text class="breeze-k8s-deploy-airflow-r7" x="366" y="190.8" textLength="732" clip-path="url(#breeze-k8s-deploy-airflow-line-7)">(&gt;3.8&lt;&#160;|&#160;3.9&#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;&# [...]
+</text><text class="breeze-k8s-deploy-airflow-r5" x="0" y="215.2" textLength="12.2" clip-path="url(#breeze-k8s-deploy-airflow-line-8)">│</text><text class="breeze-k8s-deploy-airflow-r5" x="366" y="215.2" textLength="732" clip-path="url(#breeze-k8s-deploy-airflow-line-8)">[default:&#160;3.8]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#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-k8s-deploy-airflow-r5" x="0" y="239.6" textLength="12.2" clip-path="url(#breeze-k8s-deploy-airflow-line-9)">│</text><text class="breeze-k8s-deploy-airflow-r4" x="24.4" y="239.6" textLength="244" clip-path="url(#breeze-k8s-deploy-airflow-line-9)">--kubernetes-version</text><text class="breeze-k8s-deploy-airflow-r1" x="366" y="239.6" textLength="658.8" clip-path="url(#breeze-k8s-deploy-airflow-line-9)">Kubernetes&#160;version&#160;used&#160;to&#160;create&#160;th [...]
 </text><text class="breeze-k8s-deploy-airflow-r5" x="0" y="264" textLength="12.2" clip-path="url(#breeze-k8s-deploy-airflow-line-10)">│</text><text class="breeze-k8s-deploy-airflow-r7" x="366" y="264" textLength="658.8" clip-path="url(#breeze-k8s-deploy-airflow-line-10)">(&gt;v1.28.13&lt;&#160;|&#160;v1.29.8&#160;|&#160;v1.30.4&#160;|&#160;v1.31.0)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-k8s-deploy-airflow-r5" x="1451.8" y="264" t [...]
 </text><text class="breeze-k8s-deploy-airflow-r5" x="0" y="288.4" textLength="12.2" clip-path="url(#breeze-k8s-deploy-airflow-line-11)">│</text><text class="breeze-k8s-deploy-airflow-r5" x="366" y="288.4" textLength="658.8" clip-path="url(#breeze-k8s-deploy-airflow-line-11)">[default:&#160;v1.28.13]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; [...]
@@ -202,7 +202,7 @@
 </text><text class="breeze-k8s-deploy-airflow-r5" x="0" y="630" textLength="12.2" clip-path="url(#breeze-k8s-deploy-airflow-line-25)">│</text><text class="breeze-k8s-deploy-airflow-r7" x="378.2" y="630" textLength="1061.4" clip-path="url(#breeze-k8s-deploy-airflow-line-25)">(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 [...]
 </text><text class="breeze-k8s-deploy-airflow-r5" x="0" y="654.4" textLength="12.2" clip-path="url(#breeze-k8s-deploy-airflow-line-26)">│</text><text class="breeze-k8s-deploy-airflow-r5" x="378.2" y="654.4" textLength="1061.4" clip-path="url(#breeze-k8s-deploy-airflow-line-26)">[default:&#160;2;&#160;1&lt;=x&lt;=4]&#160;&#160;&#160;&#160;&#160;&#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-k8s-deploy-airflow-r5" x="0" y="678.8" textLength="12.2" clip-path="url(#breeze-k8s-deploy-airflow-line-27)">│</text><text class="breeze-k8s-deploy-airflow-r4" x="24.4" y="678.8" textLength="207.4" clip-path="url(#breeze-k8s-deploy-airflow-line-27)">--python-versions</text><text class="breeze-k8s-deploy-airflow-r1" x="378.2" y="678.8" textLength="951.6" clip-path="url(#breeze-k8s-deploy-airflow-line-27)">Space&#160;separated&#160;list&#160;of&#160;python&#160;v [...]
-</text><text class="breeze-k8s-deploy-airflow-r5" x="0" y="703.2" textLength="12.2" clip-path="url(#breeze-k8s-deploy-airflow-line-28)">│</text><text class="breeze-k8s-deploy-airflow-r5" x="378.2" y="703.2" textLength="951.6" clip-path="url(#breeze-k8s-deploy-airflow-line-28)">[default:&#160;3.9&#160;3.10&#160;3.11&#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;&#1 [...]
+</text><text class="breeze-k8s-deploy-airflow-r5" x="0" y="703.2" textLength="12.2" clip-path="url(#breeze-k8s-deploy-airflow-line-28)">│</text><text class="breeze-k8s-deploy-airflow-r5" x="378.2" y="703.2" textLength="951.6" clip-path="url(#breeze-k8s-deploy-airflow-line-28)">[default:&#160;3.8&#160;3.9&#160;3.10&#160;3.11&#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; [...]
 </text><text class="breeze-k8s-deploy-airflow-r5" x="0" y="727.6" textLength="12.2" clip-path="url(#breeze-k8s-deploy-airflow-line-29)">│</text><text class="breeze-k8s-deploy-airflow-r4" x="24.4" y="727.6" textLength="256.2" clip-path="url(#breeze-k8s-deploy-airflow-line-29)">--kubernetes-versions</text><text class="breeze-k8s-deploy-airflow-r1" x="378.2" y="727.6" textLength="756.4" clip-path="url(#breeze-k8s-deploy-airflow-line-29)">Kubernetes&#160;versions&#160;used&#160;to&#160;run&# [...]
 </text><text class="breeze-k8s-deploy-airflow-r5" x="0" y="752" textLength="12.2" clip-path="url(#breeze-k8s-deploy-airflow-line-30)">│</text><text class="breeze-k8s-deploy-airflow-r5" x="378.2" y="752" textLength="756.4" clip-path="url(#breeze-k8s-deploy-airflow-line-30)">[default:&#160;v1.28.13&#160;v1.29.8&#160;v1.30.4&#160;v1.31.0]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-k8s-deploy-air [...]
 </text><text class="breeze-k8s-deploy-airflow-r5" x="0" y="776.4" textLength="12.2" clip-path="url(#breeze-k8s-deploy-airflow-line-31)">│</text><text class="breeze-k8s-deploy-airflow-r4" x="24.4" y="776.4" textLength="170.8" clip-path="url(#breeze-k8s-deploy-airflow-line-31)">--skip-cleanup</text><text class="breeze-k8s-deploy-airflow-r1" x="378.2" y="776.4" textLength="732" clip-path="url(#breeze-k8s-deploy-airflow-line-31)">Skip&#160;cleanup&#160;of&#160;temporary&#160;files&#160;creat [...]
diff --git a/dev/breeze/doc/images/output_k8s_deploy-airflow.txt b/dev/breeze/doc/images/output_k8s_deploy-airflow.txt
index 207f9115256..8029f4f3e1a 100644
--- a/dev/breeze/doc/images/output_k8s_deploy-airflow.txt
+++ b/dev/breeze/doc/images/output_k8s_deploy-airflow.txt
@@ -1 +1 @@
-027d1bd159cdc426dd4a64051bf2dd8d
+640037e62b7ed467a7a8134046444da2
diff --git a/dev/breeze/doc/images/output_k8s_k9s.svg b/dev/breeze/doc/images/output_k8s_k9s.svg
index 55a6d16fbb1..ed98b978fdc 100644
--- a/dev/breeze/doc/images/output_k8s_k9s.svg
+++ b/dev/breeze/doc/images/output_k8s_k9s.svg
@@ -1,4 +1,4 @@
-<svg class="rich-terminal" viewBox="0 0 1482 513.5999999999999" xmlns="http://www.w3.org/2000/svg">
+<svg class="rich-terminal" viewBox="0 0 1482 538.0" xmlns="http://www.w3.org/2000/svg">
     <!-- Generated with Rich https://www.textualize.io -->
     <style>
 
@@ -43,7 +43,7 @@
 
     <defs>
     <clipPath id="breeze-k8s-k9s-clip-terminal">
-      <rect x="0" y="0" width="1463.0" height="462.59999999999997" />
+      <rect x="0" y="0" width="1463.0" height="487.0" />
     </clipPath>
     <clipPath id="breeze-k8s-k9s-line-0">
     <rect x="0" y="1.5" width="1464" height="24.65"/>
@@ -99,9 +99,12 @@
 <clipPath id="breeze-k8s-k9s-line-17">
     <rect x="0" y="416.3" width="1464" height="24.65"/>
             </clipPath>
+<clipPath id="breeze-k8s-k9s-line-18">
+    <rect x="0" y="440.7" 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="511.6" rx="8"/><text class="breeze-k8s-k9s-title" fill="#c5c8c6" text-anchor="middle" x="740" y="27">Command:&#160;k8s&#160;k9s</text>
+    <rect fill="#292929" stroke="rgba(255,255,255,0.35)" stroke-width="1" x="1" y="1" width="1480" height="536" rx="8"/><text class="breeze-k8s-k9s-title" fill="#c5c8c6" text-anchor="middle" x="740" y="27">Command:&#160;k8s&#160;k9s</text>
             <g transform="translate(26,22)">
             <circle cx="0" cy="0" r="7" fill="#ff5f57"/>
             <circle cx="22" cy="0" r="7" fill="#febc2e"/>
@@ -119,17 +122,18 @@
 </text><text class="breeze-k8s-k9s-r5" x="0" y="142" textLength="24.4" clip-path="url(#breeze-k8s-k9s-line-5)">╭─</text><text class="breeze-k8s-k9s-r5" x="24.4" y="142" textLength="183" clip-path="url(#breeze-k8s-k9s-line-5)">&#160;K8S&#160;k9s&#160;flags&#160;</text><text class="breeze-k8s-k9s-r5" x="207.4" y="142" textLength="1232.2" clip-path="url(#breeze-k8s-k9s-line-5)">─────────────────────────────────────────────────────────────────────────────────────────────────────</text><text  [...]
 </text><text class="breeze-k8s-k9s-r5" x="0" y="166.4" textLength="12.2" clip-path="url(#breeze-k8s-k9s-line-6)">│</text><text class="breeze-k8s-k9s-r4" x="24.4" y="166.4" textLength="146.4" clip-path="url(#breeze-k8s-k9s-line-6)">--use-docker</text><text class="breeze-k8s-k9s-r1" x="341.6" y="166.4" textLength="1098" clip-path="url(#breeze-k8s-k9s-line-6)">Use&#160;Docker&#160;to&#160;start&#160;k8s&#160;executor&#160;(otherwise&#160;k9s&#160;from&#160;PATH&#160;is&#160;used&#160;and&#1 [...]
 </text><text class="breeze-k8s-k9s-r5" x="0" y="190.8" textLength="12.2" clip-path="url(#breeze-k8s-k9s-line-7)">│</text><text class="breeze-k8s-k9s-r1" x="341.6" y="190.8" textLength="1098" clip-path="url(#breeze-k8s-k9s-line-7)">if&#160;not&#160;found&#160;on&#160;PATH).&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#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-k8s-k9s-r5" x="0" y="215.2" textLength="12.2" clip-path="url(#breeze-k8s-k9s-line-8)">│</text><text class="breeze-k8s-k9s-r4" x="24.4" y="215.2" textLength="97.6" clip-path="url(#breeze-k8s-k9s-line-8)">--python</text><text class="breeze-k8s-k9s-r6" x="292.8" y="215.2" textLength="24.4" clip-path="url(#breeze-k8s-k9s-line-8)">-p</text><text class="breeze-k8s-k9s-r1" x="341.6" y="215.2" textLength="732" clip-path="url(#breeze-k8s-k9s-line-8)">Python&#160;major/m [...]
-</text><text class="breeze-k8s-k9s-r5" x="0" y="239.6" textLength="12.2" clip-path="url(#breeze-k8s-k9s-line-9)">│</text><text class="breeze-k8s-k9s-r5" x="341.6" y="239.6" textLength="732" clip-path="url(#breeze-k8s-k9s-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;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#1 [...]
-</text><text class="breeze-k8s-k9s-r5" x="0" y="264" textLength="12.2" clip-path="url(#breeze-k8s-k9s-line-10)">│</text><text class="breeze-k8s-k9s-r4" x="24.4" y="264" textLength="244" clip-path="url(#breeze-k8s-k9s-line-10)">--kubernetes-version</text><text class="breeze-k8s-k9s-r1" x="341.6" y="264" textLength="658.8" clip-path="url(#breeze-k8s-k9s-line-10)">Kubernetes&#160;version&#160;used&#160;to&#160;create&#160;the&#160;KinD&#160;cluster&#160;of.</text><text class="breeze-k8s-k9s [...]
-</text><text class="breeze-k8s-k9s-r5" x="0" y="288.4" textLength="12.2" clip-path="url(#breeze-k8s-k9s-line-11)">│</text><text class="breeze-k8s-k9s-r7" x="341.6" y="288.4" textLength="658.8" clip-path="url(#breeze-k8s-k9s-line-11)">(&gt;v1.28.13&lt;&#160;|&#160;v1.29.8&#160;|&#160;v1.30.4&#160;|&#160;v1.31.0)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-k8s-k9s-r5" x="1451.8" y="288.4" textLength="12.2" clip-path="url(#breeze-k8s-k9s [...]
-</text><text class="breeze-k8s-k9s-r5" x="0" y="312.8" textLength="12.2" clip-path="url(#breeze-k8s-k9s-line-12)">│</text><text class="breeze-k8s-k9s-r5" x="341.6" y="312.8" textLength="658.8" clip-path="url(#breeze-k8s-k9s-line-12)">[default:&#160;v1.28.13]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#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="bree [...]
-</text><text class="breeze-k8s-k9s-r5" x="0" y="337.2" textLength="1464" clip-path="url(#breeze-k8s-k9s-line-13)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-k8s-k9s-r1" x="1464" y="337.2" textLength="12.2" clip-path="url(#breeze-k8s-k9s-line-13)">
-</text><text class="breeze-k8s-k9s-r5" x="0" y="361.6" textLength="24.4" clip-path="url(#breeze-k8s-k9s-line-14)">╭─</text><text class="breeze-k8s-k9s-r5" x="24.4" y="361.6" textLength="195.2" clip-path="url(#breeze-k8s-k9s-line-14)">&#160;Common&#160;options&#160;</text><text class="breeze-k8s-k9s-r5" x="219.6" y="361.6" textLength="1220" clip-path="url(#breeze-k8s-k9s-line-14)">────────────────────────────────────────────────────────────────────────────────────────────────────</text><t [...]
-</text><text class="breeze-k8s-k9s-r5" x="0" y="386" textLength="12.2" clip-path="url(#breeze-k8s-k9s-line-15)">│</text><text class="breeze-k8s-k9s-r4" x="24.4" y="386" textLength="109.8" clip-path="url(#breeze-k8s-k9s-line-15)">--verbose</text><text class="breeze-k8s-k9s-r6" x="158.6" y="386" textLength="24.4" clip-path="url(#breeze-k8s-k9s-line-15)">-v</text><text class="breeze-k8s-k9s-r1" x="207.4" y="386" textLength="585.6" clip-path="url(#breeze-k8s-k9s-line-15)">Print&#160;verbose& [...]
-</text><text class="breeze-k8s-k9s-r5" x="0" y="410.4" textLength="12.2" clip-path="url(#breeze-k8s-k9s-line-16)">│</text><text class="breeze-k8s-k9s-r4" x="24.4" y="410.4" textLength="109.8" clip-path="url(#breeze-k8s-k9s-line-16)">--dry-run</text><text class="breeze-k8s-k9s-r6" x="158.6" y="410.4" textLength="24.4" clip-path="url(#breeze-k8s-k9s-line-16)">-D</text><text class="breeze-k8s-k9s-r1" x="207.4" y="410.4" textLength="719.8" clip-path="url(#breeze-k8s-k9s-line-16)">If&#160;dry [...]
-</text><text class="breeze-k8s-k9s-r5" x="0" y="434.8" textLength="12.2" clip-path="url(#breeze-k8s-k9s-line-17)">│</text><text class="breeze-k8s-k9s-r4" x="24.4" y="434.8" textLength="73.2" clip-path="url(#breeze-k8s-k9s-line-17)">--help</text><text class="breeze-k8s-k9s-r6" x="158.6" y="434.8" textLength="24.4" clip-path="url(#breeze-k8s-k9s-line-17)">-h</text><text class="breeze-k8s-k9s-r1" x="207.4" y="434.8" textLength="329.4" clip-path="url(#breeze-k8s-k9s-line-17)">Show&#160;this& [...]
-</text><text class="breeze-k8s-k9s-r5" x="0" y="459.2" textLength="1464" clip-path="url(#breeze-k8s-k9s-line-18)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-k8s-k9s-r1" x="1464" y="459.2" textLength="12.2" clip-path="url(#breeze-k8s-k9s-line-18)">
+</text><text class="breeze-k8s-k9s-r5" x="0" y="215.2" textLength="12.2" clip-path="url(#breeze-k8s-k9s-line-8)">│</text><text class="breeze-k8s-k9s-r4" x="24.4" y="215.2" textLength="97.6" clip-path="url(#breeze-k8s-k9s-line-8)">--python</text><text class="breeze-k8s-k9s-r6" x="292.8" y="215.2" textLength="24.4" clip-path="url(#breeze-k8s-k9s-line-8)">-p</text><text class="breeze-k8s-k9s-r1" x="341.6" y="215.2" textLength="732" clip-path="url(#breeze-k8s-k9s-line-8)">Python&#160;major/m [...]
+</text><text class="breeze-k8s-k9s-r5" x="0" y="239.6" textLength="12.2" clip-path="url(#breeze-k8s-k9s-line-9)">│</text><text class="breeze-k8s-k9s-r7" x="341.6" y="239.6" textLength="732" clip-path="url(#breeze-k8s-k9s-line-9)">(&gt;3.8&lt;&#160;|&#160;3.9&#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;</text><text class="breeze [...]
+</text><text class="breeze-k8s-k9s-r5" x="0" y="264" textLength="12.2" clip-path="url(#breeze-k8s-k9s-line-10)">│</text><text class="breeze-k8s-k9s-r5" x="341.6" y="264" textLength="732" clip-path="url(#breeze-k8s-k9s-line-10)">[default:&#160;3.8]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#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-k8s-k9s-r5" x="0" y="288.4" textLength="12.2" clip-path="url(#breeze-k8s-k9s-line-11)">│</text><text class="breeze-k8s-k9s-r4" x="24.4" y="288.4" textLength="244" clip-path="url(#breeze-k8s-k9s-line-11)">--kubernetes-version</text><text class="breeze-k8s-k9s-r1" x="341.6" y="288.4" textLength="658.8" clip-path="url(#breeze-k8s-k9s-line-11)">Kubernetes&#160;version&#160;used&#160;to&#160;create&#160;the&#160;KinD&#160;cluster&#160;of.</text><text class="breeze-k [...]
+</text><text class="breeze-k8s-k9s-r5" x="0" y="312.8" textLength="12.2" clip-path="url(#breeze-k8s-k9s-line-12)">│</text><text class="breeze-k8s-k9s-r7" x="341.6" y="312.8" textLength="658.8" clip-path="url(#breeze-k8s-k9s-line-12)">(&gt;v1.28.13&lt;&#160;|&#160;v1.29.8&#160;|&#160;v1.30.4&#160;|&#160;v1.31.0)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-k8s-k9s-r5" x="1451.8" y="312.8" textLength="12.2" clip-path="url(#breeze-k8s-k9s [...]
+</text><text class="breeze-k8s-k9s-r5" x="0" y="337.2" textLength="12.2" clip-path="url(#breeze-k8s-k9s-line-13)">│</text><text class="breeze-k8s-k9s-r5" x="341.6" y="337.2" textLength="658.8" clip-path="url(#breeze-k8s-k9s-line-13)">[default:&#160;v1.28.13]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#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="bree [...]
+</text><text class="breeze-k8s-k9s-r5" x="0" y="361.6" textLength="1464" clip-path="url(#breeze-k8s-k9s-line-14)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-k8s-k9s-r1" x="1464" y="361.6" textLength="12.2" clip-path="url(#breeze-k8s-k9s-line-14)">
+</text><text class="breeze-k8s-k9s-r5" x="0" y="386" textLength="24.4" clip-path="url(#breeze-k8s-k9s-line-15)">╭─</text><text class="breeze-k8s-k9s-r5" x="24.4" y="386" textLength="195.2" clip-path="url(#breeze-k8s-k9s-line-15)">&#160;Common&#160;options&#160;</text><text class="breeze-k8s-k9s-r5" x="219.6" y="386" textLength="1220" clip-path="url(#breeze-k8s-k9s-line-15)">────────────────────────────────────────────────────────────────────────────────────────────────────</text><text cl [...]
+</text><text class="breeze-k8s-k9s-r5" x="0" y="410.4" textLength="12.2" clip-path="url(#breeze-k8s-k9s-line-16)">│</text><text class="breeze-k8s-k9s-r4" x="24.4" y="410.4" textLength="109.8" clip-path="url(#breeze-k8s-k9s-line-16)">--verbose</text><text class="breeze-k8s-k9s-r6" x="158.6" y="410.4" textLength="24.4" clip-path="url(#breeze-k8s-k9s-line-16)">-v</text><text class="breeze-k8s-k9s-r1" x="207.4" y="410.4" textLength="585.6" clip-path="url(#breeze-k8s-k9s-line-16)">Print&#160; [...]
+</text><text class="breeze-k8s-k9s-r5" x="0" y="434.8" textLength="12.2" clip-path="url(#breeze-k8s-k9s-line-17)">│</text><text class="breeze-k8s-k9s-r4" x="24.4" y="434.8" textLength="109.8" clip-path="url(#breeze-k8s-k9s-line-17)">--dry-run</text><text class="breeze-k8s-k9s-r6" x="158.6" y="434.8" textLength="24.4" clip-path="url(#breeze-k8s-k9s-line-17)">-D</text><text class="breeze-k8s-k9s-r1" x="207.4" y="434.8" textLength="719.8" clip-path="url(#breeze-k8s-k9s-line-17)">If&#160;dry [...]
+</text><text class="breeze-k8s-k9s-r5" x="0" y="459.2" textLength="12.2" clip-path="url(#breeze-k8s-k9s-line-18)">│</text><text class="breeze-k8s-k9s-r4" x="24.4" y="459.2" textLength="73.2" clip-path="url(#breeze-k8s-k9s-line-18)">--help</text><text class="breeze-k8s-k9s-r6" x="158.6" y="459.2" textLength="24.4" clip-path="url(#breeze-k8s-k9s-line-18)">-h</text><text class="breeze-k8s-k9s-r1" x="207.4" y="459.2" textLength="329.4" clip-path="url(#breeze-k8s-k9s-line-18)">Show&#160;this& [...]
+</text><text class="breeze-k8s-k9s-r5" x="0" y="483.6" textLength="1464" clip-path="url(#breeze-k8s-k9s-line-19)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-k8s-k9s-r1" x="1464" y="483.6" textLength="12.2" clip-path="url(#breeze-k8s-k9s-line-19)">
 </text>
     </g>
     </g>
diff --git a/dev/breeze/doc/images/output_k8s_k9s.txt b/dev/breeze/doc/images/output_k8s_k9s.txt
index 41cb876d4b8..a6d65c87c51 100644
--- a/dev/breeze/doc/images/output_k8s_k9s.txt
+++ b/dev/breeze/doc/images/output_k8s_k9s.txt
@@ -1 +1 @@
-4330a248804808ca67646fd429521ea4
+52c49a84f6fa6752bbdda1a47765d117
diff --git a/dev/breeze/doc/images/output_k8s_logs.svg b/dev/breeze/doc/images/output_k8s_logs.svg
index 706b4b621c1..fc2daaab41a 100644
--- a/dev/breeze/doc/images/output_k8s_logs.svg
+++ b/dev/breeze/doc/images/output_k8s_logs.svg
@@ -1,4 +1,4 @@
-<svg class="rich-terminal" viewBox="0 0 1482 489.2" xmlns="http://www.w3.org/2000/svg">
+<svg class="rich-terminal" viewBox="0 0 1482 513.5999999999999" xmlns="http://www.w3.org/2000/svg">
     <!-- Generated with Rich https://www.textualize.io -->
     <style>
 
@@ -44,7 +44,7 @@
 
     <defs>
     <clipPath id="breeze-k8s-logs-clip-terminal">
-      <rect x="0" y="0" width="1463.0" height="438.2" />
+      <rect x="0" y="0" width="1463.0" height="462.59999999999997" />
     </clipPath>
     <clipPath id="breeze-k8s-logs-line-0">
     <rect x="0" y="1.5" width="1464" height="24.65"/>
@@ -97,9 +97,12 @@
 <clipPath id="breeze-k8s-logs-line-16">
     <rect x="0" y="391.9" width="1464" height="24.65"/>
             </clipPath>
+<clipPath id="breeze-k8s-logs-line-17">
+    <rect x="0" y="416.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="487.2" rx="8"/><text class="breeze-k8s-logs-title" fill="#c5c8c6" text-anchor="middle" x="740" y="27">Command:&#160;k8s&#160;logs</text>
+    <rect fill="#292929" stroke="rgba(255,255,255,0.35)" stroke-width="1" x="1" y="1" width="1480" height="511.6" rx="8"/><text class="breeze-k8s-logs-title" fill="#c5c8c6" text-anchor="middle" x="740" y="27">Command:&#160;k8s&#160;logs</text>
             <g transform="translate(26,22)">
             <circle cx="0" cy="0" r="7" fill="#ff5f57"/>
             <circle cx="22" cy="0" r="7" fill="#febc2e"/>
@@ -115,18 +118,19 @@
 </text><text class="breeze-k8s-logs-r1" x="12.2" y="93.2" textLength="463.6" clip-path="url(#breeze-k8s-logs-line-3)">Dump&#160;k8s&#160;logs&#160;to&#160;${TMP_DIR}/kind_logs_</text><text class="breeze-k8s-logs-r5" x="475.8" y="93.2" textLength="170.8" clip-path="url(#breeze-k8s-logs-line-3)">&lt;cluster_name&gt;</text><text class="breeze-k8s-logs-r1" x="646.6" y="93.2" textLength="451.4" clip-path="url(#breeze-k8s-logs-line-3)">&#160;directory&#160;(optionally&#160;all&#160;clusters).< [...]
 </text><text class="breeze-k8s-logs-r1" x="1464" y="117.6" textLength="12.2" clip-path="url(#breeze-k8s-logs-line-4)">
 </text><text class="breeze-k8s-logs-r6" x="0" y="142" textLength="24.4" clip-path="url(#breeze-k8s-logs-line-5)">╭─</text><text class="breeze-k8s-logs-r6" x="24.4" y="142" textLength="195.2" clip-path="url(#breeze-k8s-logs-line-5)">&#160;K8S&#160;logs&#160;flags&#160;</text><text class="breeze-k8s-logs-r6" x="219.6" y="142" textLength="1220" clip-path="url(#breeze-k8s-logs-line-5)">────────────────────────────────────────────────────────────────────────────────────────────────────</text> [...]
-</text><text class="breeze-k8s-logs-r6" x="0" y="166.4" textLength="12.2" clip-path="url(#breeze-k8s-logs-line-6)">│</text><text class="breeze-k8s-logs-r4" x="24.4" y="166.4" textLength="97.6" clip-path="url(#breeze-k8s-logs-line-6)">--python</text><text class="breeze-k8s-logs-r7" x="292.8" y="166.4" textLength="24.4" clip-path="url(#breeze-k8s-logs-line-6)">-p</text><text class="breeze-k8s-logs-r1" x="341.6" y="166.4" textLength="732" clip-path="url(#breeze-k8s-logs-line-6)">Python&#160 [...]
-</text><text class="breeze-k8s-logs-r6" x="0" y="190.8" textLength="12.2" clip-path="url(#breeze-k8s-logs-line-7)">│</text><text class="breeze-k8s-logs-r6" x="341.6" y="190.8" textLength="732" clip-path="url(#breeze-k8s-logs-line-7)">[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;&#160;&#160;&#160;&#160 [...]
-</text><text class="breeze-k8s-logs-r6" x="0" y="215.2" textLength="12.2" clip-path="url(#breeze-k8s-logs-line-8)">│</text><text class="breeze-k8s-logs-r4" x="24.4" y="215.2" textLength="244" clip-path="url(#breeze-k8s-logs-line-8)">--kubernetes-version</text><text class="breeze-k8s-logs-r1" x="341.6" y="215.2" textLength="658.8" clip-path="url(#breeze-k8s-logs-line-8)">Kubernetes&#160;version&#160;used&#160;to&#160;create&#160;the&#160;KinD&#160;cluster&#160;of.</text><text class="breez [...]
-</text><text class="breeze-k8s-logs-r6" x="0" y="239.6" textLength="12.2" clip-path="url(#breeze-k8s-logs-line-9)">│</text><text class="breeze-k8s-logs-r8" x="341.6" y="239.6" textLength="658.8" clip-path="url(#breeze-k8s-logs-line-9)">(&gt;v1.28.13&lt;&#160;|&#160;v1.29.8&#160;|&#160;v1.30.4&#160;|&#160;v1.31.0)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-k8s-logs-r6" x="1451.8" y="239.6" textLength="12.2" clip-path="url(#breeze-k8s- [...]
-</text><text class="breeze-k8s-logs-r6" x="0" y="264" textLength="12.2" clip-path="url(#breeze-k8s-logs-line-10)">│</text><text class="breeze-k8s-logs-r6" x="341.6" y="264" textLength="658.8" clip-path="url(#breeze-k8s-logs-line-10)">[default:&#160;v1.28.13]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#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="bree [...]
-</text><text class="breeze-k8s-logs-r6" x="0" y="288.4" textLength="12.2" clip-path="url(#breeze-k8s-logs-line-11)">│</text><text class="breeze-k8s-logs-r4" x="24.4" y="288.4" textLength="61" clip-path="url(#breeze-k8s-logs-line-11)">--all</text><text class="breeze-k8s-logs-r1" x="341.6" y="288.4" textLength="390.4" clip-path="url(#breeze-k8s-logs-line-11)">Apply&#160;it&#160;to&#160;all&#160;created&#160;clusters</text><text class="breeze-k8s-logs-r6" x="1451.8" y="288.4" textLength="12 [...]
-</text><text class="breeze-k8s-logs-r6" x="0" y="312.8" textLength="1464" clip-path="url(#breeze-k8s-logs-line-12)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-k8s-logs-r1" x="1464" y="312.8" textLength="12.2" clip-path="url(#breeze-k8s-logs-line-12)">
-</text><text class="breeze-k8s-logs-r6" x="0" y="337.2" textLength="24.4" clip-path="url(#breeze-k8s-logs-line-13)">╭─</text><text class="breeze-k8s-logs-r6" x="24.4" y="337.2" textLength="195.2" clip-path="url(#breeze-k8s-logs-line-13)">&#160;Common&#160;options&#160;</text><text class="breeze-k8s-logs-r6" x="219.6" y="337.2" textLength="1220" clip-path="url(#breeze-k8s-logs-line-13)">────────────────────────────────────────────────────────────────────────────────────────────────────</t [...]
-</text><text class="breeze-k8s-logs-r6" x="0" y="361.6" textLength="12.2" clip-path="url(#breeze-k8s-logs-line-14)">│</text><text class="breeze-k8s-logs-r4" x="24.4" y="361.6" textLength="109.8" clip-path="url(#breeze-k8s-logs-line-14)">--verbose</text><text class="breeze-k8s-logs-r7" x="158.6" y="361.6" textLength="24.4" clip-path="url(#breeze-k8s-logs-line-14)">-v</text><text class="breeze-k8s-logs-r1" x="207.4" y="361.6" textLength="585.6" clip-path="url(#breeze-k8s-logs-line-14)">Pri [...]
-</text><text class="breeze-k8s-logs-r6" x="0" y="386" textLength="12.2" clip-path="url(#breeze-k8s-logs-line-15)">│</text><text class="breeze-k8s-logs-r4" x="24.4" y="386" textLength="109.8" clip-path="url(#breeze-k8s-logs-line-15)">--dry-run</text><text class="breeze-k8s-logs-r7" x="158.6" y="386" textLength="24.4" clip-path="url(#breeze-k8s-logs-line-15)">-D</text><text class="breeze-k8s-logs-r1" x="207.4" y="386" textLength="719.8" clip-path="url(#breeze-k8s-logs-line-15)">If&#160;dry [...]
-</text><text class="breeze-k8s-logs-r6" x="0" y="410.4" textLength="12.2" clip-path="url(#breeze-k8s-logs-line-16)">│</text><text class="breeze-k8s-logs-r4" x="24.4" y="410.4" textLength="73.2" clip-path="url(#breeze-k8s-logs-line-16)">--help</text><text class="breeze-k8s-logs-r7" x="158.6" y="410.4" textLength="24.4" clip-path="url(#breeze-k8s-logs-line-16)">-h</text><text class="breeze-k8s-logs-r1" x="207.4" y="410.4" textLength="329.4" clip-path="url(#breeze-k8s-logs-line-16)">Show&#1 [...]
-</text><text class="breeze-k8s-logs-r6" x="0" y="434.8" textLength="1464" clip-path="url(#breeze-k8s-logs-line-17)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-k8s-logs-r1" x="1464" y="434.8" textLength="12.2" clip-path="url(#breeze-k8s-logs-line-17)">
+</text><text class="breeze-k8s-logs-r6" x="0" y="166.4" textLength="12.2" clip-path="url(#breeze-k8s-logs-line-6)">│</text><text class="breeze-k8s-logs-r4" x="24.4" y="166.4" textLength="97.6" clip-path="url(#breeze-k8s-logs-line-6)">--python</text><text class="breeze-k8s-logs-r7" x="292.8" y="166.4" textLength="24.4" clip-path="url(#breeze-k8s-logs-line-6)">-p</text><text class="breeze-k8s-logs-r1" x="341.6" y="166.4" textLength="732" clip-path="url(#breeze-k8s-logs-line-6)">Python&#160 [...]
+</text><text class="breeze-k8s-logs-r6" x="0" y="190.8" textLength="12.2" clip-path="url(#breeze-k8s-logs-line-7)">│</text><text class="breeze-k8s-logs-r8" x="341.6" y="190.8" textLength="732" clip-path="url(#breeze-k8s-logs-line-7)">(&gt;3.8&lt;&#160;|&#160;3.9&#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;</text><text class="br [...]
+</text><text class="breeze-k8s-logs-r6" x="0" y="215.2" textLength="12.2" clip-path="url(#breeze-k8s-logs-line-8)">│</text><text class="breeze-k8s-logs-r6" x="341.6" y="215.2" textLength="732" clip-path="url(#breeze-k8s-logs-line-8)">[default:&#160;3.8]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#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-k8s-logs-r6" x="0" y="239.6" textLength="12.2" clip-path="url(#breeze-k8s-logs-line-9)">│</text><text class="breeze-k8s-logs-r4" x="24.4" y="239.6" textLength="244" clip-path="url(#breeze-k8s-logs-line-9)">--kubernetes-version</text><text class="breeze-k8s-logs-r1" x="341.6" y="239.6" textLength="658.8" clip-path="url(#breeze-k8s-logs-line-9)">Kubernetes&#160;version&#160;used&#160;to&#160;create&#160;the&#160;KinD&#160;cluster&#160;of.</text><text class="breez [...]
+</text><text class="breeze-k8s-logs-r6" x="0" y="264" textLength="12.2" clip-path="url(#breeze-k8s-logs-line-10)">│</text><text class="breeze-k8s-logs-r8" x="341.6" y="264" textLength="658.8" clip-path="url(#breeze-k8s-logs-line-10)">(&gt;v1.28.13&lt;&#160;|&#160;v1.29.8&#160;|&#160;v1.30.4&#160;|&#160;v1.31.0)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-k8s-logs-r6" x="1451.8" y="264" textLength="12.2" clip-path="url(#breeze-k8s-logs [...]
+</text><text class="breeze-k8s-logs-r6" x="0" y="288.4" textLength="12.2" clip-path="url(#breeze-k8s-logs-line-11)">│</text><text class="breeze-k8s-logs-r6" x="341.6" y="288.4" textLength="658.8" clip-path="url(#breeze-k8s-logs-line-11)">[default:&#160;v1.28.13]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#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-k8s-logs-r6" x="0" y="312.8" textLength="12.2" clip-path="url(#breeze-k8s-logs-line-12)">│</text><text class="breeze-k8s-logs-r4" x="24.4" y="312.8" textLength="61" clip-path="url(#breeze-k8s-logs-line-12)">--all</text><text class="breeze-k8s-logs-r1" x="341.6" y="312.8" textLength="390.4" clip-path="url(#breeze-k8s-logs-line-12)">Apply&#160;it&#160;to&#160;all&#160;created&#160;clusters</text><text class="breeze-k8s-logs-r6" x="1451.8" y="312.8" textLength="12 [...]
+</text><text class="breeze-k8s-logs-r6" x="0" y="337.2" textLength="1464" clip-path="url(#breeze-k8s-logs-line-13)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-k8s-logs-r1" x="1464" y="337.2" textLength="12.2" clip-path="url(#breeze-k8s-logs-line-13)">
+</text><text class="breeze-k8s-logs-r6" x="0" y="361.6" textLength="24.4" clip-path="url(#breeze-k8s-logs-line-14)">╭─</text><text class="breeze-k8s-logs-r6" x="24.4" y="361.6" textLength="195.2" clip-path="url(#breeze-k8s-logs-line-14)">&#160;Common&#160;options&#160;</text><text class="breeze-k8s-logs-r6" x="219.6" y="361.6" textLength="1220" clip-path="url(#breeze-k8s-logs-line-14)">────────────────────────────────────────────────────────────────────────────────────────────────────</t [...]
+</text><text class="breeze-k8s-logs-r6" x="0" y="386" textLength="12.2" clip-path="url(#breeze-k8s-logs-line-15)">│</text><text class="breeze-k8s-logs-r4" x="24.4" y="386" textLength="109.8" clip-path="url(#breeze-k8s-logs-line-15)">--verbose</text><text class="breeze-k8s-logs-r7" x="158.6" y="386" textLength="24.4" clip-path="url(#breeze-k8s-logs-line-15)">-v</text><text class="breeze-k8s-logs-r1" x="207.4" y="386" textLength="585.6" clip-path="url(#breeze-k8s-logs-line-15)">Print&#160; [...]
+</text><text class="breeze-k8s-logs-r6" x="0" y="410.4" textLength="12.2" clip-path="url(#breeze-k8s-logs-line-16)">│</text><text class="breeze-k8s-logs-r4" x="24.4" y="410.4" textLength="109.8" clip-path="url(#breeze-k8s-logs-line-16)">--dry-run</text><text class="breeze-k8s-logs-r7" x="158.6" y="410.4" textLength="24.4" clip-path="url(#breeze-k8s-logs-line-16)">-D</text><text class="breeze-k8s-logs-r1" x="207.4" y="410.4" textLength="719.8" clip-path="url(#breeze-k8s-logs-line-16)">If& [...]
+</text><text class="breeze-k8s-logs-r6" x="0" y="434.8" textLength="12.2" clip-path="url(#breeze-k8s-logs-line-17)">│</text><text class="breeze-k8s-logs-r4" x="24.4" y="434.8" textLength="73.2" clip-path="url(#breeze-k8s-logs-line-17)">--help</text><text class="breeze-k8s-logs-r7" x="158.6" y="434.8" textLength="24.4" clip-path="url(#breeze-k8s-logs-line-17)">-h</text><text class="breeze-k8s-logs-r1" x="207.4" y="434.8" textLength="329.4" clip-path="url(#breeze-k8s-logs-line-17)">Show&#1 [...]
+</text><text class="breeze-k8s-logs-r6" x="0" y="459.2" textLength="1464" clip-path="url(#breeze-k8s-logs-line-18)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-k8s-logs-r1" x="1464" y="459.2" textLength="12.2" clip-path="url(#breeze-k8s-logs-line-18)">
 </text>
     </g>
     </g>
diff --git a/dev/breeze/doc/images/output_k8s_logs.txt b/dev/breeze/doc/images/output_k8s_logs.txt
index cb10a8737e7..07b408de2f8 100644
--- a/dev/breeze/doc/images/output_k8s_logs.txt
+++ b/dev/breeze/doc/images/output_k8s_logs.txt
@@ -1 +1 @@
-109337ad03745a9ee525cc5c88b44965
+fbccc0c50975f48c1d09e7918a4f6dee
diff --git a/dev/breeze/doc/images/output_k8s_run-complete-tests.svg b/dev/breeze/doc/images/output_k8s_run-complete-tests.svg
index 6dd5b2b5894..96ee147eda5 100644
--- a/dev/breeze/doc/images/output_k8s_run-complete-tests.svg
+++ b/dev/breeze/doc/images/output_k8s_run-complete-tests.svg
@@ -1,4 +1,4 @@
-<svg class="rich-terminal" viewBox="0 0 1482 1318.8" xmlns="http://www.w3.org/2000/svg">
+<svg class="rich-terminal" viewBox="0 0 1482 1343.1999999999998" xmlns="http://www.w3.org/2000/svg">
     <!-- Generated with Rich https://www.textualize.io -->
     <style>
 
@@ -43,7 +43,7 @@
 
     <defs>
     <clipPath id="breeze-k8s-run-complete-tests-clip-terminal">
-      <rect x="0" y="0" width="1463.0" height="1267.8" />
+      <rect x="0" y="0" width="1463.0" height="1292.1999999999998" />
     </clipPath>
     <clipPath id="breeze-k8s-run-complete-tests-line-0">
     <rect x="0" y="1.5" width="1464" height="24.65"/>
@@ -198,9 +198,12 @@
 <clipPath id="breeze-k8s-run-complete-tests-line-50">
     <rect x="0" y="1221.5" width="1464" height="24.65"/>
             </clipPath>
+<clipPath id="breeze-k8s-run-complete-tests-line-51">
+    <rect x="0" y="1245.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="1316.8" rx="8"/><text class="breeze-k8s-run-complete-tests-title" fill="#c5c8c6" text-anchor="middle" x="740" y="27">Command:&#160;k8s&#160;run-complete-tests</text>
+    <rect fill="#292929" stroke="rgba(255,255,255,0.35)" stroke-width="1" x="1" y="1" width="1480" height="1341.2" rx="8"/><text class="breeze-k8s-run-complete-tests-title" fill="#c5c8c6" text-anchor="middle" x="740" y="27">Command:&#160;k8s&#160;run-complete-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"/>
@@ -232,36 +235,37 @@
 </text><text class="breeze-k8s-run-complete-tests-r5" x="0" y="483.6" textLength="12.2" clip-path="url(#breeze-k8s-run-complete-tests-line-19)">│</text><text class="breeze-k8s-run-complete-tests-r5" x="634.4" y="483.6" textLength="719.8" clip-path="url(#breeze-k8s-run-complete-tests-line-19)">[default:&#160;use-uv]&#160;&#160;&#160;&#160;&#160;&#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-k8s-run-complete-tests-r5" x="0" y="508" textLength="1464" clip-path="url(#breeze-k8s-run-complete-tests-line-20)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-k8s-run-complete-tests-r1" x="1464" y="508" textLength="12.2" clip-path="url(#breeze-k8s-run-complete-tests-line-20)">
 </text><text class="breeze-k8s-run-complete-tests-r5" x="0" y="532.4" textLength="24.4" clip-path="url(#breeze-k8s-run-complete-tests-line-21)">╭─</text><text class="breeze-k8s-run-complete-tests-r5" x="24.4" y="532.4" textLength="207.4" clip-path="url(#breeze-k8s-run-complete-tests-line-21)">&#160;K8S&#160;tests&#160;flags&#160;</text><text class="breeze-k8s-run-complete-tests-r5" x="231.8" y="532.4" textLength="1207.8" clip-path="url(#breeze-k8s-run-complete-tests-line-21)">─────────── [...]
-</text><text class="breeze-k8s-run-complete-tests-r5" x="0" y="556.8" textLength="12.2" clip-path="url(#breeze-k8s-run-complete-tests-line-22)">│</text><text class="breeze-k8s-run-complete-tests-r4" x="24.4" y="556.8" textLength="97.6" clip-path="url(#breeze-k8s-run-complete-tests-line-22)">--python</text><text class="breeze-k8s-run-complete-tests-r7" x="292.8" y="556.8" textLength="24.4" clip-path="url(#breeze-k8s-run-complete-tests-line-22)">-p</text><text class="breeze-k8s-run-complet [...]
-</text><text class="breeze-k8s-run-complete-tests-r5" x="0" y="581.2" textLength="12.2" clip-path="url(#breeze-k8s-run-complete-tests-line-23)">│</text><text class="breeze-k8s-run-complete-tests-r5" x="341.6" y="581.2" textLength="732" clip-path="url(#breeze-k8s-run-complete-tests-line-23)">[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;& [...]
-</text><text class="breeze-k8s-run-complete-tests-r5" x="0" y="605.6" textLength="12.2" clip-path="url(#breeze-k8s-run-complete-tests-line-24)">│</text><text class="breeze-k8s-run-complete-tests-r4" x="24.4" y="605.6" textLength="244" clip-path="url(#breeze-k8s-run-complete-tests-line-24)">--kubernetes-version</text><text class="breeze-k8s-run-complete-tests-r1" x="341.6" y="605.6" textLength="658.8" clip-path="url(#breeze-k8s-run-complete-tests-line-24)">Kubernetes&#160;version&#160;use [...]
-</text><text class="breeze-k8s-run-complete-tests-r5" x="0" y="630" textLength="12.2" clip-path="url(#breeze-k8s-run-complete-tests-line-25)">│</text><text class="breeze-k8s-run-complete-tests-r6" x="341.6" y="630" textLength="658.8" clip-path="url(#breeze-k8s-run-complete-tests-line-25)">(&gt;v1.28.13&lt;&#160;|&#160;v1.29.8&#160;|&#160;v1.30.4&#160;|&#160;v1.31.0)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-k8s-run-complete-tests-r5 [...]
-</text><text class="breeze-k8s-run-complete-tests-r5" x="0" y="654.4" textLength="12.2" clip-path="url(#breeze-k8s-run-complete-tests-line-26)">│</text><text class="breeze-k8s-run-complete-tests-r5" x="341.6" y="654.4" textLength="658.8" clip-path="url(#breeze-k8s-run-complete-tests-line-26)">[default:&#160;v1.28.13]&#160;&#160;&#160;&#160;&#160;&#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-k8s-run-complete-tests-r5" x="0" y="678.8" textLength="12.2" clip-path="url(#breeze-k8s-run-complete-tests-line-27)">│</text><text class="breeze-k8s-run-complete-tests-r4" x="24.4" y="678.8" textLength="122" clip-path="url(#breeze-k8s-run-complete-tests-line-27)">--executor</text><text class="breeze-k8s-run-complete-tests-r1" x="341.6" y="678.8" textLength="1098" clip-path="url(#breeze-k8s-run-complete-tests-line-27)">Executor&#160;to&#160;use&#160;for&#160;a&# [...]
-</text><text class="breeze-k8s-run-complete-tests-r5" x="0" y="703.2" textLength="12.2" clip-path="url(#breeze-k8s-run-complete-tests-line-28)">│</text><text class="breeze-k8s-run-complete-tests-r6" x="341.6" y="703.2" textLength="1098" clip-path="url(#breeze-k8s-run-complete-tests-line-28)">(&gt;LocalExecutor&lt;&#160;|&#160;KubernetesExecutor&#160;|&#160;CeleryExecutor&#160;|&#160;CeleryKubernetesExecutor&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-k8s-ru [...]
-</text><text class="breeze-k8s-run-complete-tests-r5" x="0" y="727.6" textLength="12.2" clip-path="url(#breeze-k8s-run-complete-tests-line-29)">│</text><text class="breeze-k8s-run-complete-tests-r6" x="341.6" y="727.6" textLength="1098" clip-path="url(#breeze-k8s-run-complete-tests-line-29)">SequentialExecutor)&#160;&#160;&#160;&#160;&#160;&#160;&#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-k8s-run-complete-tests-r5" x="0" y="752" textLength="12.2" clip-path="url(#breeze-k8s-run-complete-tests-line-30)">│</text><text class="breeze-k8s-run-complete-tests-r5" x="341.6" y="752" textLength="1098" clip-path="url(#breeze-k8s-run-complete-tests-line-30)">[default:&#160;LocalExecutor]&#160;&#160;&#160;&#160;&#160;&#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-k8s-run-complete-tests-r5" x="0" y="776.4" textLength="12.2" clip-path="url(#breeze-k8s-run-complete-tests-line-31)">│</text><text class="breeze-k8s-run-complete-tests-r4" x="24.4" y="776.4" textLength="219.6" clip-path="url(#breeze-k8s-run-complete-tests-line-31)">--force-venv-setup</text><text class="breeze-k8s-run-complete-tests-r1" x="341.6" y="776.4" textLength="427" clip-path="url(#breeze-k8s-run-complete-tests-line-31)">Force&#160;recreation&#160;of&#160 [...]
-</text><text class="breeze-k8s-run-complete-tests-r5" x="0" y="800.8" textLength="1464" clip-path="url(#breeze-k8s-run-complete-tests-line-32)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-k8s-run-complete-tests-r1" x="1464" y="800.8" textLength="12.2" clip-path="url(#breeze-k8s-run-complete-tests-line-32)">
-</text><text class="breeze-k8s-run-complete-tests-r5" x="0" y="825.2" textLength="24.4" clip-path="url(#breeze-k8s-run-complete-tests-line-33)">╭─</text><text class="breeze-k8s-run-complete-tests-r5" x="24.4" y="825.2" textLength="219.6" clip-path="url(#breeze-k8s-run-complete-tests-line-33)">&#160;Parallel&#160;options&#160;</text><text class="breeze-k8s-run-complete-tests-r5" x="244" y="825.2" textLength="1195.6" clip-path="url(#breeze-k8s-run-complete-tests-line-33)">───────────────── [...]
-</text><text class="breeze-k8s-run-complete-tests-r5" x="0" y="849.6" textLength="12.2" clip-path="url(#breeze-k8s-run-complete-tests-line-34)">│</text><text class="breeze-k8s-run-complete-tests-r4" x="24.4" y="849.6" textLength="207.4" clip-path="url(#breeze-k8s-run-complete-tests-line-34)">--run-in-parallel</text><text class="breeze-k8s-run-complete-tests-r1" x="378.2" y="849.6" textLength="854" clip-path="url(#breeze-k8s-run-complete-tests-line-34)">Run&#160;the&#160;operation&#160;in [...]
-</text><text class="breeze-k8s-run-complete-tests-r5" x="0" y="874" textLength="12.2" clip-path="url(#breeze-k8s-run-complete-tests-line-35)">│</text><text class="breeze-k8s-run-complete-tests-r4" x="24.4" y="874" textLength="158.6" clip-path="url(#breeze-k8s-run-complete-tests-line-35)">--parallelism</text><text class="breeze-k8s-run-complete-tests-r1" x="378.2" y="874" textLength="1061.4" clip-path="url(#breeze-k8s-run-complete-tests-line-35)">Maximum&#160;number&#160;of&#160;processes [...]
-</text><text class="breeze-k8s-run-complete-tests-r5" x="0" y="898.4" textLength="12.2" clip-path="url(#breeze-k8s-run-complete-tests-line-36)">│</text><text class="breeze-k8s-run-complete-tests-r1" x="378.2" y="898.4" textLength="1061.4" clip-path="url(#breeze-k8s-run-complete-tests-line-36)">operations.&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#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-k8s-run-complete-tests-r5" x="0" y="922.8" textLength="12.2" clip-path="url(#breeze-k8s-run-complete-tests-line-37)">│</text><text class="breeze-k8s-run-complete-tests-r6" x="378.2" y="922.8" textLength="1061.4" clip-path="url(#breeze-k8s-run-complete-tests-line-37)">(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;&#1 [...]
-</text><text class="breeze-k8s-run-complete-tests-r5" x="0" y="947.2" textLength="12.2" clip-path="url(#breeze-k8s-run-complete-tests-line-38)">│</text><text class="breeze-k8s-run-complete-tests-r5" x="378.2" y="947.2" textLength="1061.4" clip-path="url(#breeze-k8s-run-complete-tests-line-38)">[default:&#160;2;&#160;1&lt;=x&lt;=4]&#160;&#160;&#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-k8s-run-complete-tests-r5" x="0" y="971.6" textLength="12.2" clip-path="url(#breeze-k8s-run-complete-tests-line-39)">│</text><text class="breeze-k8s-run-complete-tests-r4" x="24.4" y="971.6" textLength="207.4" clip-path="url(#breeze-k8s-run-complete-tests-line-39)">--python-versions</text><text class="breeze-k8s-run-complete-tests-r1" x="378.2" y="971.6" textLength="951.6" clip-path="url(#breeze-k8s-run-complete-tests-line-39)">Space&#160;separated&#160;list&#1 [...]
-</text><text class="breeze-k8s-run-complete-tests-r5" x="0" y="996" textLength="12.2" clip-path="url(#breeze-k8s-run-complete-tests-line-40)">│</text><text class="breeze-k8s-run-complete-tests-r5" x="378.2" y="996" textLength="951.6" clip-path="url(#breeze-k8s-run-complete-tests-line-40)">[default:&#160;3.9&#160;3.10&#160;3.11&#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;&#1 [...]
-</text><text class="breeze-k8s-run-complete-tests-r5" x="0" y="1020.4" textLength="12.2" clip-path="url(#breeze-k8s-run-complete-tests-line-41)">│</text><text class="breeze-k8s-run-complete-tests-r4" x="24.4" y="1020.4" textLength="256.2" clip-path="url(#breeze-k8s-run-complete-tests-line-41)">--kubernetes-versions</text><text class="breeze-k8s-run-complete-tests-r1" x="378.2" y="1020.4" textLength="756.4" clip-path="url(#breeze-k8s-run-complete-tests-line-41)">Kubernetes&#160;versions&# [...]
-</text><text class="breeze-k8s-run-complete-tests-r5" x="0" y="1044.8" textLength="12.2" clip-path="url(#breeze-k8s-run-complete-tests-line-42)">│</text><text class="breeze-k8s-run-complete-tests-r5" x="378.2" y="1044.8" textLength="756.4" clip-path="url(#breeze-k8s-run-complete-tests-line-42)">[default:&#160;v1.28.13&#160;v1.29.8&#160;v1.30.4&#160;v1.31.0]&#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-k8s-run-complete-tests-r5" x="0" y="1069.2" textLength="12.2" clip-path="url(#breeze-k8s-run-complete-tests-line-43)">│</text><text class="breeze-k8s-run-complete-tests-r4" x="24.4" y="1069.2" textLength="170.8" clip-path="url(#breeze-k8s-run-complete-tests-line-43)">--skip-cleanup</text><text class="breeze-k8s-run-complete-tests-r1" x="378.2" y="1069.2" textLength="732" clip-path="url(#breeze-k8s-run-complete-tests-line-43)">Skip&#160;cleanup&#160;of&#160;temp [...]
-</text><text class="breeze-k8s-run-complete-tests-r5" x="0" y="1093.6" textLength="12.2" clip-path="url(#breeze-k8s-run-complete-tests-line-44)">│</text><text class="breeze-k8s-run-complete-tests-r4" x="24.4" y="1093.6" textLength="207.4" clip-path="url(#breeze-k8s-run-complete-tests-line-44)">--debug-resources</text><text class="breeze-k8s-run-complete-tests-r1" x="378.2" y="1093.6" textLength="768.6" clip-path="url(#breeze-k8s-run-complete-tests-line-44)">Whether&#160;to&#160;show&#160 [...]
-</text><text class="breeze-k8s-run-complete-tests-r5" x="0" y="1118" textLength="12.2" clip-path="url(#breeze-k8s-run-complete-tests-line-45)">│</text><text class="breeze-k8s-run-complete-tests-r4" x="24.4" y="1118" textLength="305" clip-path="url(#breeze-k8s-run-complete-tests-line-45)">--include-success-outputs</text><text class="breeze-k8s-run-complete-tests-r1" x="378.2" y="1118" textLength="927.2" clip-path="url(#breeze-k8s-run-complete-tests-line-45)">Whether&#160;to&#160;include&# [...]
-</text><text class="breeze-k8s-run-complete-tests-r5" x="0" y="1142.4" textLength="1464" clip-path="url(#breeze-k8s-run-complete-tests-line-46)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-k8s-run-complete-tests-r1" x="1464" y="1142.4" textLength="12.2" clip-path="url(#breeze-k8s-run-complete-tests-line-46)">
-</text><text class="breeze-k8s-run-complete-tests-r5" x="0" y="1166.8" textLength="24.4" clip-path="url(#breeze-k8s-run-complete-tests-line-47)">╭─</text><text class="breeze-k8s-run-complete-tests-r5" x="24.4" y="1166.8" textLength="195.2" clip-path="url(#breeze-k8s-run-complete-tests-line-47)">&#160;Common&#160;options&#160;</text><text class="breeze-k8s-run-complete-tests-r5" x="219.6" y="1166.8" textLength="1220" clip-path="url(#breeze-k8s-run-complete-tests-line-47)">──────────────── [...]
-</text><text class="breeze-k8s-run-complete-tests-r5" x="0" y="1191.2" textLength="12.2" clip-path="url(#breeze-k8s-run-complete-tests-line-48)">│</text><text class="breeze-k8s-run-complete-tests-r4" x="24.4" y="1191.2" textLength="109.8" clip-path="url(#breeze-k8s-run-complete-tests-line-48)">--dry-run</text><text class="breeze-k8s-run-complete-tests-r7" x="158.6" y="1191.2" textLength="24.4" clip-path="url(#breeze-k8s-run-complete-tests-line-48)">-D</text><text class="breeze-k8s-run-co [...]
-</text><text class="breeze-k8s-run-complete-tests-r5" x="0" y="1215.6" textLength="12.2" clip-path="url(#breeze-k8s-run-complete-tests-line-49)">│</text><text class="breeze-k8s-run-complete-tests-r4" x="24.4" y="1215.6" textLength="109.8" clip-path="url(#breeze-k8s-run-complete-tests-line-49)">--verbose</text><text class="breeze-k8s-run-complete-tests-r7" x="158.6" y="1215.6" textLength="24.4" clip-path="url(#breeze-k8s-run-complete-tests-line-49)">-v</text><text class="breeze-k8s-run-co [...]
-</text><text class="breeze-k8s-run-complete-tests-r5" x="0" y="1240" textLength="12.2" clip-path="url(#breeze-k8s-run-complete-tests-line-50)">│</text><text class="breeze-k8s-run-complete-tests-r4" x="24.4" y="1240" textLength="73.2" clip-path="url(#breeze-k8s-run-complete-tests-line-50)">--help</text><text class="breeze-k8s-run-complete-tests-r7" x="158.6" y="1240" textLength="24.4" clip-path="url(#breeze-k8s-run-complete-tests-line-50)">-h</text><text class="breeze-k8s-run-complete-tes [...]
-</text><text class="breeze-k8s-run-complete-tests-r5" x="0" y="1264.4" textLength="1464" clip-path="url(#breeze-k8s-run-complete-tests-line-51)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-k8s-run-complete-tests-r1" x="1464" y="1264.4" textLength="12.2" clip-path="url(#breeze-k8s-run-complete-tests-line-51)">
+</text><text class="breeze-k8s-run-complete-tests-r5" x="0" y="556.8" textLength="12.2" clip-path="url(#breeze-k8s-run-complete-tests-line-22)">│</text><text class="breeze-k8s-run-complete-tests-r4" x="24.4" y="556.8" textLength="97.6" clip-path="url(#breeze-k8s-run-complete-tests-line-22)">--python</text><text class="breeze-k8s-run-complete-tests-r7" x="292.8" y="556.8" textLength="24.4" clip-path="url(#breeze-k8s-run-complete-tests-line-22)">-p</text><text class="breeze-k8s-run-complet [...]
+</text><text class="breeze-k8s-run-complete-tests-r5" x="0" y="581.2" textLength="12.2" clip-path="url(#breeze-k8s-run-complete-tests-line-23)">│</text><text class="breeze-k8s-run-complete-tests-r6" x="341.6" y="581.2" textLength="732" clip-path="url(#breeze-k8s-run-complete-tests-line-23)">(&gt;3.8&lt;&#160;|&#160;3.9&#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; [...]
+</text><text class="breeze-k8s-run-complete-tests-r5" x="0" y="605.6" textLength="12.2" clip-path="url(#breeze-k8s-run-complete-tests-line-24)">│</text><text class="breeze-k8s-run-complete-tests-r5" x="341.6" y="605.6" textLength="732" clip-path="url(#breeze-k8s-run-complete-tests-line-24)">[default:&#160;3.8]&#160;&#160;&#160;&#160;&#160;&#160;&#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-k8s-run-complete-tests-r5" x="0" y="630" textLength="12.2" clip-path="url(#breeze-k8s-run-complete-tests-line-25)">│</text><text class="breeze-k8s-run-complete-tests-r4" x="24.4" y="630" textLength="244" clip-path="url(#breeze-k8s-run-complete-tests-line-25)">--kubernetes-version</text><text class="breeze-k8s-run-complete-tests-r1" x="341.6" y="630" textLength="658.8" clip-path="url(#breeze-k8s-run-complete-tests-line-25)">Kubernetes&#160;version&#160;used&#160 [...]
+</text><text class="breeze-k8s-run-complete-tests-r5" x="0" y="654.4" textLength="12.2" clip-path="url(#breeze-k8s-run-complete-tests-line-26)">│</text><text class="breeze-k8s-run-complete-tests-r6" x="341.6" y="654.4" textLength="658.8" clip-path="url(#breeze-k8s-run-complete-tests-line-26)">(&gt;v1.28.13&lt;&#160;|&#160;v1.29.8&#160;|&#160;v1.30.4&#160;|&#160;v1.31.0)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-k8s-run-complete-test [...]
+</text><text class="breeze-k8s-run-complete-tests-r5" x="0" y="678.8" textLength="12.2" clip-path="url(#breeze-k8s-run-complete-tests-line-27)">│</text><text class="breeze-k8s-run-complete-tests-r5" x="341.6" y="678.8" textLength="658.8" clip-path="url(#breeze-k8s-run-complete-tests-line-27)">[default:&#160;v1.28.13]&#160;&#160;&#160;&#160;&#160;&#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-k8s-run-complete-tests-r5" x="0" y="703.2" textLength="12.2" clip-path="url(#breeze-k8s-run-complete-tests-line-28)">│</text><text class="breeze-k8s-run-complete-tests-r4" x="24.4" y="703.2" textLength="122" clip-path="url(#breeze-k8s-run-complete-tests-line-28)">--executor</text><text class="breeze-k8s-run-complete-tests-r1" x="341.6" y="703.2" textLength="1098" clip-path="url(#breeze-k8s-run-complete-tests-line-28)">Executor&#160;to&#160;use&#160;for&#160;a&# [...]
+</text><text class="breeze-k8s-run-complete-tests-r5" x="0" y="727.6" textLength="12.2" clip-path="url(#breeze-k8s-run-complete-tests-line-29)">│</text><text class="breeze-k8s-run-complete-tests-r6" x="341.6" y="727.6" textLength="1098" clip-path="url(#breeze-k8s-run-complete-tests-line-29)">(&gt;LocalExecutor&lt;&#160;|&#160;KubernetesExecutor&#160;|&#160;CeleryExecutor&#160;|&#160;CeleryKubernetesExecutor&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-k8s-ru [...]
+</text><text class="breeze-k8s-run-complete-tests-r5" x="0" y="752" textLength="12.2" clip-path="url(#breeze-k8s-run-complete-tests-line-30)">│</text><text class="breeze-k8s-run-complete-tests-r6" x="341.6" y="752" textLength="1098" clip-path="url(#breeze-k8s-run-complete-tests-line-30)">SequentialExecutor)&#160;&#160;&#160;&#160;&#160;&#160;&#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-k8s-run-complete-tests-r5" x="0" y="776.4" textLength="12.2" clip-path="url(#breeze-k8s-run-complete-tests-line-31)">│</text><text class="breeze-k8s-run-complete-tests-r5" x="341.6" y="776.4" textLength="1098" clip-path="url(#breeze-k8s-run-complete-tests-line-31)">[default:&#160;LocalExecutor]&#160;&#160;&#160;&#160;&#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-k8s-run-complete-tests-r5" x="0" y="800.8" textLength="12.2" clip-path="url(#breeze-k8s-run-complete-tests-line-32)">│</text><text class="breeze-k8s-run-complete-tests-r4" x="24.4" y="800.8" textLength="219.6" clip-path="url(#breeze-k8s-run-complete-tests-line-32)">--force-venv-setup</text><text class="breeze-k8s-run-complete-tests-r1" x="341.6" y="800.8" textLength="427" clip-path="url(#breeze-k8s-run-complete-tests-line-32)">Force&#160;recreation&#160;of&#160 [...]
+</text><text class="breeze-k8s-run-complete-tests-r5" x="0" y="825.2" textLength="1464" clip-path="url(#breeze-k8s-run-complete-tests-line-33)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-k8s-run-complete-tests-r1" x="1464" y="825.2" textLength="12.2" clip-path="url(#breeze-k8s-run-complete-tests-line-33)">
+</text><text class="breeze-k8s-run-complete-tests-r5" x="0" y="849.6" textLength="24.4" clip-path="url(#breeze-k8s-run-complete-tests-line-34)">╭─</text><text class="breeze-k8s-run-complete-tests-r5" x="24.4" y="849.6" textLength="219.6" clip-path="url(#breeze-k8s-run-complete-tests-line-34)">&#160;Parallel&#160;options&#160;</text><text class="breeze-k8s-run-complete-tests-r5" x="244" y="849.6" textLength="1195.6" clip-path="url(#breeze-k8s-run-complete-tests-line-34)">───────────────── [...]
+</text><text class="breeze-k8s-run-complete-tests-r5" x="0" y="874" textLength="12.2" clip-path="url(#breeze-k8s-run-complete-tests-line-35)">│</text><text class="breeze-k8s-run-complete-tests-r4" x="24.4" y="874" textLength="207.4" clip-path="url(#breeze-k8s-run-complete-tests-line-35)">--run-in-parallel</text><text class="breeze-k8s-run-complete-tests-r1" x="378.2" y="874" textLength="854" clip-path="url(#breeze-k8s-run-complete-tests-line-35)">Run&#160;the&#160;operation&#160;in&#160; [...]
+</text><text class="breeze-k8s-run-complete-tests-r5" x="0" y="898.4" textLength="12.2" clip-path="url(#breeze-k8s-run-complete-tests-line-36)">│</text><text class="breeze-k8s-run-complete-tests-r4" x="24.4" y="898.4" textLength="158.6" clip-path="url(#breeze-k8s-run-complete-tests-line-36)">--parallelism</text><text class="breeze-k8s-run-complete-tests-r1" x="378.2" y="898.4" textLength="1061.4" clip-path="url(#breeze-k8s-run-complete-tests-line-36)">Maximum&#160;number&#160;of&#160;pro [...]
+</text><text class="breeze-k8s-run-complete-tests-r5" x="0" y="922.8" textLength="12.2" clip-path="url(#breeze-k8s-run-complete-tests-line-37)">│</text><text class="breeze-k8s-run-complete-tests-r1" x="378.2" y="922.8" textLength="1061.4" clip-path="url(#breeze-k8s-run-complete-tests-line-37)">operations.&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#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-k8s-run-complete-tests-r5" x="0" y="947.2" textLength="12.2" clip-path="url(#breeze-k8s-run-complete-tests-line-38)">│</text><text class="breeze-k8s-run-complete-tests-r6" x="378.2" y="947.2" textLength="1061.4" clip-path="url(#breeze-k8s-run-complete-tests-line-38)">(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;&#1 [...]
+</text><text class="breeze-k8s-run-complete-tests-r5" x="0" y="971.6" textLength="12.2" clip-path="url(#breeze-k8s-run-complete-tests-line-39)">│</text><text class="breeze-k8s-run-complete-tests-r5" x="378.2" y="971.6" textLength="1061.4" clip-path="url(#breeze-k8s-run-complete-tests-line-39)">[default:&#160;2;&#160;1&lt;=x&lt;=4]&#160;&#160;&#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-k8s-run-complete-tests-r5" x="0" y="996" textLength="12.2" clip-path="url(#breeze-k8s-run-complete-tests-line-40)">│</text><text class="breeze-k8s-run-complete-tests-r4" x="24.4" y="996" textLength="207.4" clip-path="url(#breeze-k8s-run-complete-tests-line-40)">--python-versions</text><text class="breeze-k8s-run-complete-tests-r1" x="378.2" y="996" textLength="951.6" clip-path="url(#breeze-k8s-run-complete-tests-line-40)">Space&#160;separated&#160;list&#160;of& [...]
+</text><text class="breeze-k8s-run-complete-tests-r5" x="0" y="1020.4" textLength="12.2" clip-path="url(#breeze-k8s-run-complete-tests-line-41)">│</text><text class="breeze-k8s-run-complete-tests-r5" x="378.2" y="1020.4" textLength="951.6" clip-path="url(#breeze-k8s-run-complete-tests-line-41)">[default:&#160;3.8&#160;3.9&#160;3.10&#160;3.11&#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; [...]
+</text><text class="breeze-k8s-run-complete-tests-r5" x="0" y="1044.8" textLength="12.2" clip-path="url(#breeze-k8s-run-complete-tests-line-42)">│</text><text class="breeze-k8s-run-complete-tests-r4" x="24.4" y="1044.8" textLength="256.2" clip-path="url(#breeze-k8s-run-complete-tests-line-42)">--kubernetes-versions</text><text class="breeze-k8s-run-complete-tests-r1" x="378.2" y="1044.8" textLength="756.4" clip-path="url(#breeze-k8s-run-complete-tests-line-42)">Kubernetes&#160;versions&# [...]
+</text><text class="breeze-k8s-run-complete-tests-r5" x="0" y="1069.2" textLength="12.2" clip-path="url(#breeze-k8s-run-complete-tests-line-43)">│</text><text class="breeze-k8s-run-complete-tests-r5" x="378.2" y="1069.2" textLength="756.4" clip-path="url(#breeze-k8s-run-complete-tests-line-43)">[default:&#160;v1.28.13&#160;v1.29.8&#160;v1.30.4&#160;v1.31.0]&#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-k8s-run-complete-tests-r5" x="0" y="1093.6" textLength="12.2" clip-path="url(#breeze-k8s-run-complete-tests-line-44)">│</text><text class="breeze-k8s-run-complete-tests-r4" x="24.4" y="1093.6" textLength="170.8" clip-path="url(#breeze-k8s-run-complete-tests-line-44)">--skip-cleanup</text><text class="breeze-k8s-run-complete-tests-r1" x="378.2" y="1093.6" textLength="732" clip-path="url(#breeze-k8s-run-complete-tests-line-44)">Skip&#160;cleanup&#160;of&#160;temp [...]
+</text><text class="breeze-k8s-run-complete-tests-r5" x="0" y="1118" textLength="12.2" clip-path="url(#breeze-k8s-run-complete-tests-line-45)">│</text><text class="breeze-k8s-run-complete-tests-r4" x="24.4" y="1118" textLength="207.4" clip-path="url(#breeze-k8s-run-complete-tests-line-45)">--debug-resources</text><text class="breeze-k8s-run-complete-tests-r1" x="378.2" y="1118" textLength="768.6" clip-path="url(#breeze-k8s-run-complete-tests-line-45)">Whether&#160;to&#160;show&#160;resou [...]
+</text><text class="breeze-k8s-run-complete-tests-r5" x="0" y="1142.4" textLength="12.2" clip-path="url(#breeze-k8s-run-complete-tests-line-46)">│</text><text class="breeze-k8s-run-complete-tests-r4" x="24.4" y="1142.4" textLength="305" clip-path="url(#breeze-k8s-run-complete-tests-line-46)">--include-success-outputs</text><text class="breeze-k8s-run-complete-tests-r1" x="378.2" y="1142.4" textLength="927.2" clip-path="url(#breeze-k8s-run-complete-tests-line-46)">Whether&#160;to&#160;inc [...]
+</text><text class="breeze-k8s-run-complete-tests-r5" x="0" y="1166.8" textLength="1464" clip-path="url(#breeze-k8s-run-complete-tests-line-47)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-k8s-run-complete-tests-r1" x="1464" y="1166.8" textLength="12.2" clip-path="url(#breeze-k8s-run-complete-tests-line-47)">
+</text><text class="breeze-k8s-run-complete-tests-r5" x="0" y="1191.2" textLength="24.4" clip-path="url(#breeze-k8s-run-complete-tests-line-48)">╭─</text><text class="breeze-k8s-run-complete-tests-r5" x="24.4" y="1191.2" textLength="195.2" clip-path="url(#breeze-k8s-run-complete-tests-line-48)">&#160;Common&#160;options&#160;</text><text class="breeze-k8s-run-complete-tests-r5" x="219.6" y="1191.2" textLength="1220" clip-path="url(#breeze-k8s-run-complete-tests-line-48)">──────────────── [...]
+</text><text class="breeze-k8s-run-complete-tests-r5" x="0" y="1215.6" textLength="12.2" clip-path="url(#breeze-k8s-run-complete-tests-line-49)">│</text><text class="breeze-k8s-run-complete-tests-r4" x="24.4" y="1215.6" textLength="109.8" clip-path="url(#breeze-k8s-run-complete-tests-line-49)">--dry-run</text><text class="breeze-k8s-run-complete-tests-r7" x="158.6" y="1215.6" textLength="24.4" clip-path="url(#breeze-k8s-run-complete-tests-line-49)">-D</text><text class="breeze-k8s-run-co [...]
+</text><text class="breeze-k8s-run-complete-tests-r5" x="0" y="1240" textLength="12.2" clip-path="url(#breeze-k8s-run-complete-tests-line-50)">│</text><text class="breeze-k8s-run-complete-tests-r4" x="24.4" y="1240" textLength="109.8" clip-path="url(#breeze-k8s-run-complete-tests-line-50)">--verbose</text><text class="breeze-k8s-run-complete-tests-r7" x="158.6" y="1240" textLength="24.4" clip-path="url(#breeze-k8s-run-complete-tests-line-50)">-v</text><text class="breeze-k8s-run-complete [...]
+</text><text class="breeze-k8s-run-complete-tests-r5" x="0" y="1264.4" textLength="12.2" clip-path="url(#breeze-k8s-run-complete-tests-line-51)">│</text><text class="breeze-k8s-run-complete-tests-r4" x="24.4" y="1264.4" textLength="73.2" clip-path="url(#breeze-k8s-run-complete-tests-line-51)">--help</text><text class="breeze-k8s-run-complete-tests-r7" x="158.6" y="1264.4" textLength="24.4" clip-path="url(#breeze-k8s-run-complete-tests-line-51)">-h</text><text class="breeze-k8s-run-comple [...]
+</text><text class="breeze-k8s-run-complete-tests-r5" x="0" y="1288.8" textLength="1464" clip-path="url(#breeze-k8s-run-complete-tests-line-52)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-k8s-run-complete-tests-r1" x="1464" y="1288.8" textLength="12.2" clip-path="url(#breeze-k8s-run-complete-tests-line-52)">
 </text>
     </g>
     </g>
diff --git a/dev/breeze/doc/images/output_k8s_run-complete-tests.txt b/dev/breeze/doc/images/output_k8s_run-complete-tests.txt
index 9d8421e9d1f..f820f6b91dc 100644
--- a/dev/breeze/doc/images/output_k8s_run-complete-tests.txt
+++ b/dev/breeze/doc/images/output_k8s_run-complete-tests.txt
@@ -1 +1 @@
-ec0ec300c680b15b4691906739d9bfba
+f4f962a7fb204b045599f7e6f479f32d
diff --git a/dev/breeze/doc/images/output_k8s_shell.svg b/dev/breeze/doc/images/output_k8s_shell.svg
index 29873585b25..f4e6b89b68e 100644
--- a/dev/breeze/doc/images/output_k8s_shell.svg
+++ b/dev/breeze/doc/images/output_k8s_shell.svg
@@ -1,4 +1,4 @@
-<svg class="rich-terminal" viewBox="0 0 1482 586.8" xmlns="http://www.w3.org/2000/svg">
+<svg class="rich-terminal" viewBox="0 0 1482 611.1999999999999" xmlns="http://www.w3.org/2000/svg">
     <!-- Generated with Rich https://www.textualize.io -->
     <style>
 
@@ -43,7 +43,7 @@
 
     <defs>
     <clipPath id="breeze-k8s-shell-clip-terminal">
-      <rect x="0" y="0" width="1463.0" height="535.8" />
+      <rect x="0" y="0" width="1463.0" height="560.1999999999999" />
     </clipPath>
     <clipPath id="breeze-k8s-shell-line-0">
     <rect x="0" y="1.5" width="1464" height="24.65"/>
@@ -108,9 +108,12 @@
 <clipPath id="breeze-k8s-shell-line-20">
     <rect x="0" y="489.5" width="1464" height="24.65"/>
             </clipPath>
+<clipPath id="breeze-k8s-shell-line-21">
+    <rect x="0" y="513.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="584.8" rx="8"/><text class="breeze-k8s-shell-title" fill="#c5c8c6" text-anchor="middle" x="740" y="27">Command:&#160;k8s&#160;shell</text>
+    <rect fill="#292929" stroke="rgba(255,255,255,0.35)" stroke-width="1" x="1" y="1" width="1480" height="609.2" rx="8"/><text class="breeze-k8s-shell-title" fill="#c5c8c6" text-anchor="middle" x="740" y="27">Command:&#160;k8s&#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"/>
@@ -126,22 +129,23 @@
 </text><text class="breeze-k8s-shell-r1" x="12.2" y="93.2" textLength="622.2" clip-path="url(#breeze-k8s-shell-line-3)">Run&#160;shell&#160;environment&#160;for&#160;the&#160;current&#160;KinD&#160;cluster.</text><text class="breeze-k8s-shell-r1" x="1464" y="93.2" textLength="12.2" clip-path="url(#breeze-k8s-shell-line-3)">
 </text><text class="breeze-k8s-shell-r1" x="1464" y="117.6" textLength="12.2" clip-path="url(#breeze-k8s-shell-line-4)">
 </text><text class="breeze-k8s-shell-r5" x="0" y="142" textLength="24.4" clip-path="url(#breeze-k8s-shell-line-5)">╭─</text><text class="breeze-k8s-shell-r5" x="24.4" y="142" textLength="207.4" clip-path="url(#breeze-k8s-shell-line-5)">&#160;K8S&#160;shell&#160;flags&#160;</text><text class="breeze-k8s-shell-r5" x="231.8" y="142" textLength="1207.8" clip-path="url(#breeze-k8s-shell-line-5)">────────────────────────────────────────────────────────────────────────────────────────────────── [...]
-</text><text class="breeze-k8s-shell-r5" x="0" y="166.4" textLength="12.2" clip-path="url(#breeze-k8s-shell-line-6)">│</text><text class="breeze-k8s-shell-r4" x="24.4" y="166.4" textLength="97.6" clip-path="url(#breeze-k8s-shell-line-6)">--python</text><text class="breeze-k8s-shell-r6" x="292.8" y="166.4" textLength="24.4" clip-path="url(#breeze-k8s-shell-line-6)">-p</text><text class="breeze-k8s-shell-r1" x="341.6" y="166.4" textLength="732" clip-path="url(#breeze-k8s-shell-line-6)">Pyt [...]
-</text><text class="breeze-k8s-shell-r5" x="0" y="190.8" textLength="12.2" clip-path="url(#breeze-k8s-shell-line-7)">│</text><text class="breeze-k8s-shell-r5" x="341.6" y="190.8" textLength="732" clip-path="url(#breeze-k8s-shell-line-7)">[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;&#160;&#160;&#160;& [...]
-</text><text class="breeze-k8s-shell-r5" x="0" y="215.2" textLength="12.2" clip-path="url(#breeze-k8s-shell-line-8)">│</text><text class="breeze-k8s-shell-r4" x="24.4" y="215.2" textLength="244" clip-path="url(#breeze-k8s-shell-line-8)">--kubernetes-version</text><text class="breeze-k8s-shell-r1" x="341.6" y="215.2" textLength="658.8" clip-path="url(#breeze-k8s-shell-line-8)">Kubernetes&#160;version&#160;used&#160;to&#160;create&#160;the&#160;KinD&#160;cluster&#160;of.</text><text class= [...]
-</text><text class="breeze-k8s-shell-r5" x="0" y="239.6" textLength="12.2" clip-path="url(#breeze-k8s-shell-line-9)">│</text><text class="breeze-k8s-shell-r7" x="341.6" y="239.6" textLength="658.8" clip-path="url(#breeze-k8s-shell-line-9)">(&gt;v1.28.13&lt;&#160;|&#160;v1.29.8&#160;|&#160;v1.30.4&#160;|&#160;v1.31.0)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-k8s-shell-r5" x="1451.8" y="239.6" textLength="12.2" clip-path="url(#breeze [...]
-</text><text class="breeze-k8s-shell-r5" x="0" y="264" textLength="12.2" clip-path="url(#breeze-k8s-shell-line-10)">│</text><text class="breeze-k8s-shell-r5" x="341.6" y="264" textLength="658.8" clip-path="url(#breeze-k8s-shell-line-10)">[default:&#160;v1.28.13]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#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-k8s-shell-r5" x="0" y="288.4" textLength="12.2" clip-path="url(#breeze-k8s-shell-line-11)">│</text><text class="breeze-k8s-shell-r4" x="24.4" y="288.4" textLength="122" clip-path="url(#breeze-k8s-shell-line-11)">--executor</text><text class="breeze-k8s-shell-r1" x="341.6" y="288.4" textLength="1098" clip-path="url(#breeze-k8s-shell-line-11)">Executor&#160;to&#160;use&#160;for&#160;a&#160;kubernetes&#160;cluster.&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&# [...]
-</text><text class="breeze-k8s-shell-r5" x="0" y="312.8" textLength="12.2" clip-path="url(#breeze-k8s-shell-line-12)">│</text><text class="breeze-k8s-shell-r7" x="341.6" y="312.8" textLength="1098" clip-path="url(#breeze-k8s-shell-line-12)">(&gt;LocalExecutor&lt;&#160;|&#160;KubernetesExecutor&#160;|&#160;CeleryExecutor&#160;|&#160;CeleryKubernetesExecutor&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-k8s-shell-r5" x="1451.8" y="312.8" textLength="12.2" clip- [...]
-</text><text class="breeze-k8s-shell-r5" x="0" y="337.2" textLength="12.2" clip-path="url(#breeze-k8s-shell-line-13)">│</text><text class="breeze-k8s-shell-r7" x="341.6" y="337.2" textLength="1098" clip-path="url(#breeze-k8s-shell-line-13)">SequentialExecutor)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#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-k8s-shell-r5" x="0" y="361.6" textLength="12.2" clip-path="url(#breeze-k8s-shell-line-14)">│</text><text class="breeze-k8s-shell-r5" x="341.6" y="361.6" textLength="1098" clip-path="url(#breeze-k8s-shell-line-14)">[default:&#160;LocalExecutor]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#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-k8s-shell-r5" x="0" y="386" textLength="12.2" clip-path="url(#breeze-k8s-shell-line-15)">│</text><text class="breeze-k8s-shell-r4" x="24.4" y="386" textLength="219.6" clip-path="url(#breeze-k8s-shell-line-15)">--force-venv-setup</text><text class="breeze-k8s-shell-r1" x="341.6" y="386" textLength="427" clip-path="url(#breeze-k8s-shell-line-15)">Force&#160;recreation&#160;of&#160;the&#160;virtualenv.</text><text class="breeze-k8s-shell-r5" x="1451.8" y="386" tex [...]
-</text><text class="breeze-k8s-shell-r5" x="0" y="410.4" textLength="1464" clip-path="url(#breeze-k8s-shell-line-16)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-k8s-shell-r1" x="1464" y="410.4" textLength="12.2" clip-path="url(#breeze-k8s-shell-line-16)">
-</text><text class="breeze-k8s-shell-r5" x="0" y="434.8" textLength="24.4" clip-path="url(#breeze-k8s-shell-line-17)">╭─</text><text class="breeze-k8s-shell-r5" x="24.4" y="434.8" textLength="195.2" clip-path="url(#breeze-k8s-shell-line-17)">&#160;Common&#160;options&#160;</text><text class="breeze-k8s-shell-r5" x="219.6" y="434.8" textLength="1220" clip-path="url(#breeze-k8s-shell-line-17)">───────────────────────────────────────────────────────────────────────────────────────────────── [...]
-</text><text class="breeze-k8s-shell-r5" x="0" y="459.2" textLength="12.2" clip-path="url(#breeze-k8s-shell-line-18)">│</text><text class="breeze-k8s-shell-r4" x="24.4" y="459.2" textLength="109.8" clip-path="url(#breeze-k8s-shell-line-18)">--verbose</text><text class="breeze-k8s-shell-r6" x="158.6" y="459.2" textLength="24.4" clip-path="url(#breeze-k8s-shell-line-18)">-v</text><text class="breeze-k8s-shell-r1" x="207.4" y="459.2" textLength="585.6" clip-path="url(#breeze-k8s-shell-line- [...]
-</text><text class="breeze-k8s-shell-r5" x="0" y="483.6" textLength="12.2" clip-path="url(#breeze-k8s-shell-line-19)">│</text><text class="breeze-k8s-shell-r4" x="24.4" y="483.6" textLength="109.8" clip-path="url(#breeze-k8s-shell-line-19)">--dry-run</text><text class="breeze-k8s-shell-r6" x="158.6" y="483.6" textLength="24.4" clip-path="url(#breeze-k8s-shell-line-19)">-D</text><text class="breeze-k8s-shell-r1" x="207.4" y="483.6" textLength="719.8" clip-path="url(#breeze-k8s-shell-line- [...]
-</text><text class="breeze-k8s-shell-r5" x="0" y="508" textLength="12.2" clip-path="url(#breeze-k8s-shell-line-20)">│</text><text class="breeze-k8s-shell-r4" x="24.4" y="508" textLength="73.2" clip-path="url(#breeze-k8s-shell-line-20)">--help</text><text class="breeze-k8s-shell-r6" x="158.6" y="508" textLength="24.4" clip-path="url(#breeze-k8s-shell-line-20)">-h</text><text class="breeze-k8s-shell-r1" x="207.4" y="508" textLength="329.4" clip-path="url(#breeze-k8s-shell-line-20)">Show&#1 [...]
-</text><text class="breeze-k8s-shell-r5" x="0" y="532.4" textLength="1464" clip-path="url(#breeze-k8s-shell-line-21)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-k8s-shell-r1" x="1464" y="532.4" textLength="12.2" clip-path="url(#breeze-k8s-shell-line-21)">
+</text><text class="breeze-k8s-shell-r5" x="0" y="166.4" textLength="12.2" clip-path="url(#breeze-k8s-shell-line-6)">│</text><text class="breeze-k8s-shell-r4" x="24.4" y="166.4" textLength="97.6" clip-path="url(#breeze-k8s-shell-line-6)">--python</text><text class="breeze-k8s-shell-r6" x="292.8" y="166.4" textLength="24.4" clip-path="url(#breeze-k8s-shell-line-6)">-p</text><text class="breeze-k8s-shell-r1" x="341.6" y="166.4" textLength="732" clip-path="url(#breeze-k8s-shell-line-6)">Pyt [...]
+</text><text class="breeze-k8s-shell-r5" x="0" y="190.8" textLength="12.2" clip-path="url(#breeze-k8s-shell-line-7)">│</text><text class="breeze-k8s-shell-r7" x="341.6" y="190.8" textLength="732" clip-path="url(#breeze-k8s-shell-line-7)">(&gt;3.8&lt;&#160;|&#160;3.9&#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;</text><text class [...]
+</text><text class="breeze-k8s-shell-r5" x="0" y="215.2" textLength="12.2" clip-path="url(#breeze-k8s-shell-line-8)">│</text><text class="breeze-k8s-shell-r5" x="341.6" y="215.2" textLength="732" clip-path="url(#breeze-k8s-shell-line-8)">[default:&#160;3.8]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#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-k8s-shell-r5" x="0" y="239.6" textLength="12.2" clip-path="url(#breeze-k8s-shell-line-9)">│</text><text class="breeze-k8s-shell-r4" x="24.4" y="239.6" textLength="244" clip-path="url(#breeze-k8s-shell-line-9)">--kubernetes-version</text><text class="breeze-k8s-shell-r1" x="341.6" y="239.6" textLength="658.8" clip-path="url(#breeze-k8s-shell-line-9)">Kubernetes&#160;version&#160;used&#160;to&#160;create&#160;the&#160;KinD&#160;cluster&#160;of.</text><text class= [...]
+</text><text class="breeze-k8s-shell-r5" x="0" y="264" textLength="12.2" clip-path="url(#breeze-k8s-shell-line-10)">│</text><text class="breeze-k8s-shell-r7" x="341.6" y="264" textLength="658.8" clip-path="url(#breeze-k8s-shell-line-10)">(&gt;v1.28.13&lt;&#160;|&#160;v1.29.8&#160;|&#160;v1.30.4&#160;|&#160;v1.31.0)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-k8s-shell-r5" x="1451.8" y="264" textLength="12.2" clip-path="url(#breeze-k8s [...]
+</text><text class="breeze-k8s-shell-r5" x="0" y="288.4" textLength="12.2" clip-path="url(#breeze-k8s-shell-line-11)">│</text><text class="breeze-k8s-shell-r5" x="341.6" y="288.4" textLength="658.8" clip-path="url(#breeze-k8s-shell-line-11)">[default:&#160;v1.28.13]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#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 cla [...]
+</text><text class="breeze-k8s-shell-r5" x="0" y="312.8" textLength="12.2" clip-path="url(#breeze-k8s-shell-line-12)">│</text><text class="breeze-k8s-shell-r4" x="24.4" y="312.8" textLength="122" clip-path="url(#breeze-k8s-shell-line-12)">--executor</text><text class="breeze-k8s-shell-r1" x="341.6" y="312.8" textLength="1098" clip-path="url(#breeze-k8s-shell-line-12)">Executor&#160;to&#160;use&#160;for&#160;a&#160;kubernetes&#160;cluster.&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&# [...]
+</text><text class="breeze-k8s-shell-r5" x="0" y="337.2" textLength="12.2" clip-path="url(#breeze-k8s-shell-line-13)">│</text><text class="breeze-k8s-shell-r7" x="341.6" y="337.2" textLength="1098" clip-path="url(#breeze-k8s-shell-line-13)">(&gt;LocalExecutor&lt;&#160;|&#160;KubernetesExecutor&#160;|&#160;CeleryExecutor&#160;|&#160;CeleryKubernetesExecutor&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-k8s-shell-r5" x="1451.8" y="337.2" textLength="12.2" clip- [...]
+</text><text class="breeze-k8s-shell-r5" x="0" y="361.6" textLength="12.2" clip-path="url(#breeze-k8s-shell-line-14)">│</text><text class="breeze-k8s-shell-r7" x="341.6" y="361.6" textLength="1098" clip-path="url(#breeze-k8s-shell-line-14)">SequentialExecutor)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#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-k8s-shell-r5" x="0" y="386" textLength="12.2" clip-path="url(#breeze-k8s-shell-line-15)">│</text><text class="breeze-k8s-shell-r5" x="341.6" y="386" textLength="1098" clip-path="url(#breeze-k8s-shell-line-15)">[default:&#160;LocalExecutor]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#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-k8s-shell-r5" x="0" y="410.4" textLength="12.2" clip-path="url(#breeze-k8s-shell-line-16)">│</text><text class="breeze-k8s-shell-r4" x="24.4" y="410.4" textLength="219.6" clip-path="url(#breeze-k8s-shell-line-16)">--force-venv-setup</text><text class="breeze-k8s-shell-r1" x="341.6" y="410.4" textLength="427" clip-path="url(#breeze-k8s-shell-line-16)">Force&#160;recreation&#160;of&#160;the&#160;virtualenv.</text><text class="breeze-k8s-shell-r5" x="1451.8" y="41 [...]
+</text><text class="breeze-k8s-shell-r5" x="0" y="434.8" textLength="1464" clip-path="url(#breeze-k8s-shell-line-17)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-k8s-shell-r1" x="1464" y="434.8" textLength="12.2" clip-path="url(#breeze-k8s-shell-line-17)">
+</text><text class="breeze-k8s-shell-r5" x="0" y="459.2" textLength="24.4" clip-path="url(#breeze-k8s-shell-line-18)">╭─</text><text class="breeze-k8s-shell-r5" x="24.4" y="459.2" textLength="195.2" clip-path="url(#breeze-k8s-shell-line-18)">&#160;Common&#160;options&#160;</text><text class="breeze-k8s-shell-r5" x="219.6" y="459.2" textLength="1220" clip-path="url(#breeze-k8s-shell-line-18)">───────────────────────────────────────────────────────────────────────────────────────────────── [...]
+</text><text class="breeze-k8s-shell-r5" x="0" y="483.6" textLength="12.2" clip-path="url(#breeze-k8s-shell-line-19)">│</text><text class="breeze-k8s-shell-r4" x="24.4" y="483.6" textLength="109.8" clip-path="url(#breeze-k8s-shell-line-19)">--verbose</text><text class="breeze-k8s-shell-r6" x="158.6" y="483.6" textLength="24.4" clip-path="url(#breeze-k8s-shell-line-19)">-v</text><text class="breeze-k8s-shell-r1" x="207.4" y="483.6" textLength="585.6" clip-path="url(#breeze-k8s-shell-line- [...]
+</text><text class="breeze-k8s-shell-r5" x="0" y="508" textLength="12.2" clip-path="url(#breeze-k8s-shell-line-20)">│</text><text class="breeze-k8s-shell-r4" x="24.4" y="508" textLength="109.8" clip-path="url(#breeze-k8s-shell-line-20)">--dry-run</text><text class="breeze-k8s-shell-r6" x="158.6" y="508" textLength="24.4" clip-path="url(#breeze-k8s-shell-line-20)">-D</text><text class="breeze-k8s-shell-r1" x="207.4" y="508" textLength="719.8" clip-path="url(#breeze-k8s-shell-line-20)">If& [...]
+</text><text class="breeze-k8s-shell-r5" x="0" y="532.4" textLength="12.2" clip-path="url(#breeze-k8s-shell-line-21)">│</text><text class="breeze-k8s-shell-r4" x="24.4" y="532.4" textLength="73.2" clip-path="url(#breeze-k8s-shell-line-21)">--help</text><text class="breeze-k8s-shell-r6" x="158.6" y="532.4" textLength="24.4" clip-path="url(#breeze-k8s-shell-line-21)">-h</text><text class="breeze-k8s-shell-r1" x="207.4" y="532.4" textLength="329.4" clip-path="url(#breeze-k8s-shell-line-21)" [...]
+</text><text class="breeze-k8s-shell-r5" x="0" y="556.8" textLength="1464" clip-path="url(#breeze-k8s-shell-line-22)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-k8s-shell-r1" x="1464" y="556.8" textLength="12.2" clip-path="url(#breeze-k8s-shell-line-22)">
 </text>
     </g>
     </g>
diff --git a/dev/breeze/doc/images/output_k8s_shell.txt b/dev/breeze/doc/images/output_k8s_shell.txt
index dbd274213e0..1cd3d1308b7 100644
--- a/dev/breeze/doc/images/output_k8s_shell.txt
+++ b/dev/breeze/doc/images/output_k8s_shell.txt
@@ -1 +1 @@
-4212ceccbdcd06c509ddc67baee33c65
+f408a8012171d22c22b6a5d5eb6cbf5a
diff --git a/dev/breeze/doc/images/output_k8s_status.svg b/dev/breeze/doc/images/output_k8s_status.svg
index 75562760da3..3226fe73ea1 100644
--- a/dev/breeze/doc/images/output_k8s_status.svg
+++ b/dev/breeze/doc/images/output_k8s_status.svg
@@ -121,8 +121,8 @@
 </text><text class="breeze-k8s-status-r1" x="1464" y="117.6" textLength="12.2" clip-path="url(#breeze-k8s-status-line-4)">
 </text><text class="breeze-k8s-status-r5" x="0" y="142" textLength="24.4" clip-path="url(#breeze-k8s-status-line-5)">╭─</text><text class="breeze-k8s-status-r5" x="24.4" y="142" textLength="317.2" clip-path="url(#breeze-k8s-status-line-5)">&#160;K8S&#160;cluster&#160;status&#160;flags&#160;</text><text class="breeze-k8s-status-r5" x="341.6" y="142" textLength="1098" clip-path="url(#breeze-k8s-status-line-5)">──────────────────────────────────────────────────────────────────────────────── [...]
 </text><text class="breeze-k8s-status-r5" x="0" y="166.4" textLength="12.2" clip-path="url(#breeze-k8s-status-line-6)">│</text><text class="breeze-k8s-status-r4" x="24.4" y="166.4" textLength="97.6" clip-path="url(#breeze-k8s-status-line-6)">--python</text><text class="breeze-k8s-status-r6" x="317.2" y="166.4" textLength="24.4" clip-path="url(#breeze-k8s-status-line-6)">-p</text><text class="breeze-k8s-status-r1" x="366" y="166.4" textLength="732" clip-path="url(#breeze-k8s-status-line-6 [...]
-</text><text class="breeze-k8s-status-r5" x="0" y="190.8" textLength="12.2" clip-path="url(#breeze-k8s-status-line-7)">│</text><text class="breeze-k8s-status-r7" x="366" y="190.8" textLength="732" clip-path="url(#breeze-k8s-status-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;&#160;&#160;&# [...]
-</text><text class="breeze-k8s-status-r5" x="0" y="215.2" textLength="12.2" clip-path="url(#breeze-k8s-status-line-8)">│</text><text class="breeze-k8s-status-r5" x="366" y="215.2" textLength="732" clip-path="url(#breeze-k8s-status-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;&#160;&#160;&#160 [...]
+</text><text class="breeze-k8s-status-r5" x="0" y="190.8" textLength="12.2" clip-path="url(#breeze-k8s-status-line-7)">│</text><text class="breeze-k8s-status-r7" x="366" y="190.8" textLength="732" clip-path="url(#breeze-k8s-status-line-7)">(&gt;3.8&lt;&#160;|&#160;3.9&#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;</text><text cla [...]
+</text><text class="breeze-k8s-status-r5" x="0" y="215.2" textLength="12.2" clip-path="url(#breeze-k8s-status-line-8)">│</text><text class="breeze-k8s-status-r5" x="366" y="215.2" textLength="732" clip-path="url(#breeze-k8s-status-line-8)">[default:&#160;3.8]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#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-k8s-status-r5" x="0" y="239.6" textLength="12.2" clip-path="url(#breeze-k8s-status-line-9)">│</text><text class="breeze-k8s-status-r4" x="24.4" y="239.6" textLength="244" clip-path="url(#breeze-k8s-status-line-9)">--kubernetes-version</text><text class="breeze-k8s-status-r1" x="366" y="239.6" textLength="658.8" clip-path="url(#breeze-k8s-status-line-9)">Kubernetes&#160;version&#160;used&#160;to&#160;create&#160;the&#160;KinD&#160;cluster&#160;of.</text><text cl [...]
 </text><text class="breeze-k8s-status-r5" x="0" y="264" textLength="12.2" clip-path="url(#breeze-k8s-status-line-10)">│</text><text class="breeze-k8s-status-r7" x="366" y="264" textLength="658.8" clip-path="url(#breeze-k8s-status-line-10)">(&gt;v1.28.13&lt;&#160;|&#160;v1.29.8&#160;|&#160;v1.30.4&#160;|&#160;v1.31.0)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-k8s-status-r5" x="1451.8" y="264" textLength="12.2" clip-path="url(#breeze- [...]
 </text><text class="breeze-k8s-status-r5" x="0" y="288.4" textLength="12.2" clip-path="url(#breeze-k8s-status-line-11)">│</text><text class="breeze-k8s-status-r5" x="366" y="288.4" textLength="658.8" clip-path="url(#breeze-k8s-status-line-11)">[default:&#160;v1.28.13]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#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 c [...]
diff --git a/dev/breeze/doc/images/output_k8s_status.txt b/dev/breeze/doc/images/output_k8s_status.txt
index 1c221abaefe..b60cd9ec522 100644
--- a/dev/breeze/doc/images/output_k8s_status.txt
+++ b/dev/breeze/doc/images/output_k8s_status.txt
@@ -1 +1 @@
-8d422180eade6405e3bb880496242aaa
+99aceb075ea01a447a00cbaabf96e1d2
diff --git a/dev/breeze/doc/images/output_k8s_tests.svg b/dev/breeze/doc/images/output_k8s_tests.svg
index 6f724e4cbcb..d20c29896ed 100644
--- a/dev/breeze/doc/images/output_k8s_tests.svg
+++ b/dev/breeze/doc/images/output_k8s_tests.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 952.8" xmlns="http://www.w3.org/2000/svg">
     <!-- Generated with Rich https://www.textualize.io -->
     <style>
 
@@ -43,7 +43,7 @@
 
     <defs>
     <clipPath id="breeze-k8s-tests-clip-terminal">
-      <rect x="0" y="0" width="1463.0" height="877.4" />
+      <rect x="0" y="0" width="1463.0" height="901.8" />
     </clipPath>
     <clipPath id="breeze-k8s-tests-line-0">
     <rect x="0" y="1.5" width="1464" height="24.65"/>
@@ -150,9 +150,12 @@
 <clipPath id="breeze-k8s-tests-line-34">
     <rect x="0" y="831.1" width="1464" height="24.65"/>
             </clipPath>
+<clipPath id="breeze-k8s-tests-line-35">
+    <rect x="0" y="855.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="926.4" rx="8"/><text class="breeze-k8s-tests-title" fill="#c5c8c6" text-anchor="middle" x="740" y="27">Command:&#160;k8s&#160;tests</text>
+    <rect fill="#292929" stroke="rgba(255,255,255,0.35)" stroke-width="1" x="1" y="1" width="1480" height="950.8" rx="8"/><text class="breeze-k8s-tests-title" fill="#c5c8c6" text-anchor="middle" x="740" y="27">Command:&#160;k8s&#160;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"/>
@@ -168,36 +171,37 @@
 </text><text class="breeze-k8s-tests-r1" x="12.2" y="93.2" textLength="1037" clip-path="url(#breeze-k8s-tests-line-3)">Run&#160;tests&#160;against&#160;the&#160;current&#160;KinD&#160;cluster&#160;(optionally&#160;for&#160;all&#160;clusters&#160;in&#160;parallel).</text><text class="breeze-k8s-tests-r1" x="1464" y="93.2" textLength="12.2" clip-path="url(#breeze-k8s-tests-line-3)">
 </text><text class="breeze-k8s-tests-r1" x="1464" y="117.6" textLength="12.2" clip-path="url(#breeze-k8s-tests-line-4)">
 </text><text class="breeze-k8s-tests-r5" x="0" y="142" textLength="24.4" clip-path="url(#breeze-k8s-tests-line-5)">╭─</text><text class="breeze-k8s-tests-r5" x="24.4" y="142" textLength="207.4" clip-path="url(#breeze-k8s-tests-line-5)">&#160;K8S&#160;tests&#160;flags&#160;</text><text class="breeze-k8s-tests-r5" x="231.8" y="142" textLength="1207.8" clip-path="url(#breeze-k8s-tests-line-5)">────────────────────────────────────────────────────────────────────────────────────────────────── [...]
-</text><text class="breeze-k8s-tests-r5" x="0" y="166.4" textLength="12.2" clip-path="url(#breeze-k8s-tests-line-6)">│</text><text class="breeze-k8s-tests-r4" x="24.4" y="166.4" textLength="97.6" clip-path="url(#breeze-k8s-tests-line-6)">--python</text><text class="breeze-k8s-tests-r6" x="292.8" y="166.4" textLength="24.4" clip-path="url(#breeze-k8s-tests-line-6)">-p</text><text class="breeze-k8s-tests-r1" x="341.6" y="166.4" textLength="732" clip-path="url(#breeze-k8s-tests-line-6)">Pyt [...]
-</text><text class="breeze-k8s-tests-r5" x="0" y="190.8" textLength="12.2" clip-path="url(#breeze-k8s-tests-line-7)">│</text><text class="breeze-k8s-tests-r5" x="341.6" y="190.8" textLength="732" clip-path="url(#breeze-k8s-tests-line-7)">[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;&#160;&#160;&#160;& [...]
-</text><text class="breeze-k8s-tests-r5" x="0" y="215.2" textLength="12.2" clip-path="url(#breeze-k8s-tests-line-8)">│</text><text class="breeze-k8s-tests-r4" x="24.4" y="215.2" textLength="244" clip-path="url(#breeze-k8s-tests-line-8)">--kubernetes-version</text><text class="breeze-k8s-tests-r1" x="341.6" y="215.2" textLength="658.8" clip-path="url(#breeze-k8s-tests-line-8)">Kubernetes&#160;version&#160;used&#160;to&#160;create&#160;the&#160;KinD&#160;cluster&#160;of.</text><text class= [...]
-</text><text class="breeze-k8s-tests-r5" x="0" y="239.6" textLength="12.2" clip-path="url(#breeze-k8s-tests-line-9)">│</text><text class="breeze-k8s-tests-r7" x="341.6" y="239.6" textLength="658.8" clip-path="url(#breeze-k8s-tests-line-9)">(&gt;v1.28.13&lt;&#160;|&#160;v1.29.8&#160;|&#160;v1.30.4&#160;|&#160;v1.31.0)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-k8s-tests-r5" x="1451.8" y="239.6" textLength="12.2" clip-path="url(#breeze [...]
-</text><text class="breeze-k8s-tests-r5" x="0" y="264" textLength="12.2" clip-path="url(#breeze-k8s-tests-line-10)">│</text><text class="breeze-k8s-tests-r5" x="341.6" y="264" textLength="658.8" clip-path="url(#breeze-k8s-tests-line-10)">[default:&#160;v1.28.13]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#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-k8s-tests-r5" x="0" y="288.4" textLength="12.2" clip-path="url(#breeze-k8s-tests-line-11)">│</text><text class="breeze-k8s-tests-r4" x="24.4" y="288.4" textLength="122" clip-path="url(#breeze-k8s-tests-line-11)">--executor</text><text class="breeze-k8s-tests-r1" x="341.6" y="288.4" textLength="1098" clip-path="url(#breeze-k8s-tests-line-11)">Executor&#160;to&#160;use&#160;for&#160;a&#160;kubernetes&#160;cluster.&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&# [...]
-</text><text class="breeze-k8s-tests-r5" x="0" y="312.8" textLength="12.2" clip-path="url(#breeze-k8s-tests-line-12)">│</text><text class="breeze-k8s-tests-r7" x="341.6" y="312.8" textLength="1098" clip-path="url(#breeze-k8s-tests-line-12)">(&gt;LocalExecutor&lt;&#160;|&#160;KubernetesExecutor&#160;|&#160;CeleryExecutor&#160;|&#160;CeleryKubernetesExecutor&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-k8s-tests-r5" x="1451.8" y="312.8" textLength="12.2" clip- [...]
-</text><text class="breeze-k8s-tests-r5" x="0" y="337.2" textLength="12.2" clip-path="url(#breeze-k8s-tests-line-13)">│</text><text class="breeze-k8s-tests-r7" x="341.6" y="337.2" textLength="1098" clip-path="url(#breeze-k8s-tests-line-13)">SequentialExecutor)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#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-k8s-tests-r5" x="0" y="361.6" textLength="12.2" clip-path="url(#breeze-k8s-tests-line-14)">│</text><text class="breeze-k8s-tests-r5" x="341.6" y="361.6" textLength="1098" clip-path="url(#breeze-k8s-tests-line-14)">[default:&#160;LocalExecutor]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#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-k8s-tests-r5" x="0" y="386" textLength="12.2" clip-path="url(#breeze-k8s-tests-line-15)">│</text><text class="breeze-k8s-tests-r4" x="24.4" y="386" textLength="219.6" clip-path="url(#breeze-k8s-tests-line-15)">--force-venv-setup</text><text class="breeze-k8s-tests-r1" x="341.6" y="386" textLength="427" clip-path="url(#breeze-k8s-tests-line-15)">Force&#160;recreation&#160;of&#160;the&#160;virtualenv.</text><text class="breeze-k8s-tests-r5" x="1451.8" y="386" tex [...]
-</text><text class="breeze-k8s-tests-r5" x="0" y="410.4" textLength="1464" clip-path="url(#breeze-k8s-tests-line-16)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-k8s-tests-r1" x="1464" y="410.4" textLength="12.2" clip-path="url(#breeze-k8s-tests-line-16)">
-</text><text class="breeze-k8s-tests-r5" x="0" y="434.8" textLength="24.4" clip-path="url(#breeze-k8s-tests-line-17)">╭─</text><text class="breeze-k8s-tests-r5" x="24.4" y="434.8" textLength="219.6" clip-path="url(#breeze-k8s-tests-line-17)">&#160;Parallel&#160;options&#160;</text><text class="breeze-k8s-tests-r5" x="244" y="434.8" textLength="1195.6" clip-path="url(#breeze-k8s-tests-line-17)">─────────────────────────────────────────────────────────────────────────────────────────────── [...]
-</text><text class="breeze-k8s-tests-r5" x="0" y="459.2" textLength="12.2" clip-path="url(#breeze-k8s-tests-line-18)">│</text><text class="breeze-k8s-tests-r4" x="24.4" y="459.2" textLength="207.4" clip-path="url(#breeze-k8s-tests-line-18)">--run-in-parallel</text><text class="breeze-k8s-tests-r1" x="378.2" y="459.2" textLength="854" clip-path="url(#breeze-k8s-tests-line-18)">Run&#160;the&#160;operation&#160;in&#160;parallel&#160;on&#160;all&#160;or&#160;selected&#160;subset&#160;of&#160 [...]
-</text><text class="breeze-k8s-tests-r5" x="0" y="483.6" textLength="12.2" clip-path="url(#breeze-k8s-tests-line-19)">│</text><text class="breeze-k8s-tests-r4" x="24.4" y="483.6" textLength="158.6" clip-path="url(#breeze-k8s-tests-line-19)">--parallelism</text><text class="breeze-k8s-tests-r1" x="378.2" y="483.6" textLength="1061.4" clip-path="url(#breeze-k8s-tests-line-19)">Maximum&#160;number&#160;of&#160;processes&#160;to&#160;use&#160;while&#160;running&#160;the&#160;operation&#160;i [...]
-</text><text class="breeze-k8s-tests-r5" x="0" y="508" textLength="12.2" clip-path="url(#breeze-k8s-tests-line-20)">│</text><text class="breeze-k8s-tests-r1" x="378.2" y="508" textLength="1061.4" clip-path="url(#breeze-k8s-tests-line-20)">operations.&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#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-k8s-tests-r5" x="0" y="532.4" textLength="12.2" clip-path="url(#breeze-k8s-tests-line-21)">│</text><text class="breeze-k8s-tests-r7" x="378.2" y="532.4" textLength="1061.4" clip-path="url(#breeze-k8s-tests-line-21)">(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;& [...]
-</text><text class="breeze-k8s-tests-r5" x="0" y="556.8" textLength="12.2" clip-path="url(#breeze-k8s-tests-line-22)">│</text><text class="breeze-k8s-tests-r5" x="378.2" y="556.8" textLength="1061.4" clip-path="url(#breeze-k8s-tests-line-22)">[default:&#160;2;&#160;1&lt;=x&lt;=4]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#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-k8s-tests-r5" x="0" y="581.2" textLength="12.2" clip-path="url(#breeze-k8s-tests-line-23)">│</text><text class="breeze-k8s-tests-r4" x="24.4" y="581.2" textLength="207.4" clip-path="url(#breeze-k8s-tests-line-23)">--python-versions</text><text class="breeze-k8s-tests-r1" x="378.2" y="581.2" textLength="951.6" clip-path="url(#breeze-k8s-tests-line-23)">Space&#160;separated&#160;list&#160;of&#160;python&#160;versions&#160;used&#160;for&#160;build&#160;with&#160;m [...]
-</text><text class="breeze-k8s-tests-r5" x="0" y="605.6" textLength="12.2" clip-path="url(#breeze-k8s-tests-line-24)">│</text><text class="breeze-k8s-tests-r5" x="378.2" y="605.6" textLength="951.6" clip-path="url(#breeze-k8s-tests-line-24)">[default:&#160;3.9&#160;3.10&#160;3.11&#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;&#160;&#160;&#160;&#160;&#1 [...]
-</text><text class="breeze-k8s-tests-r5" x="0" y="630" textLength="12.2" clip-path="url(#breeze-k8s-tests-line-25)">│</text><text class="breeze-k8s-tests-r4" x="24.4" y="630" textLength="256.2" clip-path="url(#breeze-k8s-tests-line-25)">--kubernetes-versions</text><text class="breeze-k8s-tests-r1" x="378.2" y="630" textLength="756.4" clip-path="url(#breeze-k8s-tests-line-25)">Kubernetes&#160;versions&#160;used&#160;to&#160;run&#160;in&#160;parallel&#160;(space&#160;separated).</text><tex [...]
-</text><text class="breeze-k8s-tests-r5" x="0" y="654.4" textLength="12.2" clip-path="url(#breeze-k8s-tests-line-26)">│</text><text class="breeze-k8s-tests-r5" x="378.2" y="654.4" textLength="756.4" clip-path="url(#breeze-k8s-tests-line-26)">[default:&#160;v1.28.13&#160;v1.29.8&#160;v1.30.4&#160;v1.31.0]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-k8s-tests-r5" x="1451.8" y="654.4" textLength= [...]
-</text><text class="breeze-k8s-tests-r5" x="0" y="678.8" textLength="12.2" clip-path="url(#breeze-k8s-tests-line-27)">│</text><text class="breeze-k8s-tests-r4" x="24.4" y="678.8" textLength="170.8" clip-path="url(#breeze-k8s-tests-line-27)">--skip-cleanup</text><text class="breeze-k8s-tests-r1" x="378.2" y="678.8" textLength="732" clip-path="url(#breeze-k8s-tests-line-27)">Skip&#160;cleanup&#160;of&#160;temporary&#160;files&#160;created&#160;during&#160;parallel&#160;run.</text><text cla [...]
-</text><text class="breeze-k8s-tests-r5" x="0" y="703.2" textLength="12.2" clip-path="url(#breeze-k8s-tests-line-28)">│</text><text class="breeze-k8s-tests-r4" x="24.4" y="703.2" textLength="207.4" clip-path="url(#breeze-k8s-tests-line-28)">--debug-resources</text><text class="breeze-k8s-tests-r1" x="378.2" y="703.2" textLength="768.6" clip-path="url(#breeze-k8s-tests-line-28)">Whether&#160;to&#160;show&#160;resource&#160;information&#160;while&#160;running&#160;in&#160;parallel.</text>< [...]
-</text><text class="breeze-k8s-tests-r5" x="0" y="727.6" textLength="12.2" clip-path="url(#breeze-k8s-tests-line-29)">│</text><text class="breeze-k8s-tests-r4" x="24.4" y="727.6" textLength="305" clip-path="url(#breeze-k8s-tests-line-29)">--include-success-outputs</text><text class="breeze-k8s-tests-r1" x="378.2" y="727.6" textLength="927.2" clip-path="url(#breeze-k8s-tests-line-29)">Whether&#160;to&#160;include&#160;outputs&#160;of&#160;successful&#160;parallel&#160;runs&#160;(skipped&# [...]
-</text><text class="breeze-k8s-tests-r5" x="0" y="752" textLength="1464" clip-path="url(#breeze-k8s-tests-line-30)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-k8s-tests-r1" x="1464" y="752" textLength="12.2" clip-path="url(#breeze-k8s-tests-line-30)">
-</text><text class="breeze-k8s-tests-r5" x="0" y="776.4" textLength="24.4" clip-path="url(#breeze-k8s-tests-line-31)">╭─</text><text class="breeze-k8s-tests-r5" x="24.4" y="776.4" textLength="195.2" clip-path="url(#breeze-k8s-tests-line-31)">&#160;Common&#160;options&#160;</text><text class="breeze-k8s-tests-r5" x="219.6" y="776.4" textLength="1220" clip-path="url(#breeze-k8s-tests-line-31)">───────────────────────────────────────────────────────────────────────────────────────────────── [...]
-</text><text class="breeze-k8s-tests-r5" x="0" y="800.8" textLength="12.2" clip-path="url(#breeze-k8s-tests-line-32)">│</text><text class="breeze-k8s-tests-r4" x="24.4" y="800.8" textLength="109.8" clip-path="url(#breeze-k8s-tests-line-32)">--verbose</text><text class="breeze-k8s-tests-r6" x="158.6" y="800.8" textLength="24.4" clip-path="url(#breeze-k8s-tests-line-32)">-v</text><text class="breeze-k8s-tests-r1" x="207.4" y="800.8" textLength="585.6" clip-path="url(#breeze-k8s-tests-line- [...]
-</text><text class="breeze-k8s-tests-r5" x="0" y="825.2" textLength="12.2" clip-path="url(#breeze-k8s-tests-line-33)">│</text><text class="breeze-k8s-tests-r4" x="24.4" y="825.2" textLength="109.8" clip-path="url(#breeze-k8s-tests-line-33)">--dry-run</text><text class="breeze-k8s-tests-r6" x="158.6" y="825.2" textLength="24.4" clip-path="url(#breeze-k8s-tests-line-33)">-D</text><text class="breeze-k8s-tests-r1" x="207.4" y="825.2" textLength="719.8" clip-path="url(#breeze-k8s-tests-line- [...]
-</text><text class="breeze-k8s-tests-r5" x="0" y="849.6" textLength="12.2" clip-path="url(#breeze-k8s-tests-line-34)">│</text><text class="breeze-k8s-tests-r4" x="24.4" y="849.6" textLength="73.2" clip-path="url(#breeze-k8s-tests-line-34)">--help</text><text class="breeze-k8s-tests-r6" x="158.6" y="849.6" textLength="24.4" clip-path="url(#breeze-k8s-tests-line-34)">-h</text><text class="breeze-k8s-tests-r1" x="207.4" y="849.6" textLength="329.4" clip-path="url(#breeze-k8s-tests-line-34)" [...]
-</text><text class="breeze-k8s-tests-r5" x="0" y="874" textLength="1464" clip-path="url(#breeze-k8s-tests-line-35)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-k8s-tests-r1" x="1464" y="874" textLength="12.2" clip-path="url(#breeze-k8s-tests-line-35)">
+</text><text class="breeze-k8s-tests-r5" x="0" y="166.4" textLength="12.2" clip-path="url(#breeze-k8s-tests-line-6)">│</text><text class="breeze-k8s-tests-r4" x="24.4" y="166.4" textLength="97.6" clip-path="url(#breeze-k8s-tests-line-6)">--python</text><text class="breeze-k8s-tests-r6" x="292.8" y="166.4" textLength="24.4" clip-path="url(#breeze-k8s-tests-line-6)">-p</text><text class="breeze-k8s-tests-r1" x="341.6" y="166.4" textLength="732" clip-path="url(#breeze-k8s-tests-line-6)">Pyt [...]
+</text><text class="breeze-k8s-tests-r5" x="0" y="190.8" textLength="12.2" clip-path="url(#breeze-k8s-tests-line-7)">│</text><text class="breeze-k8s-tests-r7" x="341.6" y="190.8" textLength="732" clip-path="url(#breeze-k8s-tests-line-7)">(&gt;3.8&lt;&#160;|&#160;3.9&#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;</text><text class [...]
+</text><text class="breeze-k8s-tests-r5" x="0" y="215.2" textLength="12.2" clip-path="url(#breeze-k8s-tests-line-8)">│</text><text class="breeze-k8s-tests-r5" x="341.6" y="215.2" textLength="732" clip-path="url(#breeze-k8s-tests-line-8)">[default:&#160;3.8]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#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-k8s-tests-r5" x="0" y="239.6" textLength="12.2" clip-path="url(#breeze-k8s-tests-line-9)">│</text><text class="breeze-k8s-tests-r4" x="24.4" y="239.6" textLength="244" clip-path="url(#breeze-k8s-tests-line-9)">--kubernetes-version</text><text class="breeze-k8s-tests-r1" x="341.6" y="239.6" textLength="658.8" clip-path="url(#breeze-k8s-tests-line-9)">Kubernetes&#160;version&#160;used&#160;to&#160;create&#160;the&#160;KinD&#160;cluster&#160;of.</text><text class= [...]
+</text><text class="breeze-k8s-tests-r5" x="0" y="264" textLength="12.2" clip-path="url(#breeze-k8s-tests-line-10)">│</text><text class="breeze-k8s-tests-r7" x="341.6" y="264" textLength="658.8" clip-path="url(#breeze-k8s-tests-line-10)">(&gt;v1.28.13&lt;&#160;|&#160;v1.29.8&#160;|&#160;v1.30.4&#160;|&#160;v1.31.0)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-k8s-tests-r5" x="1451.8" y="264" textLength="12.2" clip-path="url(#breeze-k8s [...]
+</text><text class="breeze-k8s-tests-r5" x="0" y="288.4" textLength="12.2" clip-path="url(#breeze-k8s-tests-line-11)">│</text><text class="breeze-k8s-tests-r5" x="341.6" y="288.4" textLength="658.8" clip-path="url(#breeze-k8s-tests-line-11)">[default:&#160;v1.28.13]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#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 cla [...]
+</text><text class="breeze-k8s-tests-r5" x="0" y="312.8" textLength="12.2" clip-path="url(#breeze-k8s-tests-line-12)">│</text><text class="breeze-k8s-tests-r4" x="24.4" y="312.8" textLength="122" clip-path="url(#breeze-k8s-tests-line-12)">--executor</text><text class="breeze-k8s-tests-r1" x="341.6" y="312.8" textLength="1098" clip-path="url(#breeze-k8s-tests-line-12)">Executor&#160;to&#160;use&#160;for&#160;a&#160;kubernetes&#160;cluster.&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&# [...]
+</text><text class="breeze-k8s-tests-r5" x="0" y="337.2" textLength="12.2" clip-path="url(#breeze-k8s-tests-line-13)">│</text><text class="breeze-k8s-tests-r7" x="341.6" y="337.2" textLength="1098" clip-path="url(#breeze-k8s-tests-line-13)">(&gt;LocalExecutor&lt;&#160;|&#160;KubernetesExecutor&#160;|&#160;CeleryExecutor&#160;|&#160;CeleryKubernetesExecutor&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-k8s-tests-r5" x="1451.8" y="337.2" textLength="12.2" clip- [...]
+</text><text class="breeze-k8s-tests-r5" x="0" y="361.6" textLength="12.2" clip-path="url(#breeze-k8s-tests-line-14)">│</text><text class="breeze-k8s-tests-r7" x="341.6" y="361.6" textLength="1098" clip-path="url(#breeze-k8s-tests-line-14)">SequentialExecutor)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#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-k8s-tests-r5" x="0" y="386" textLength="12.2" clip-path="url(#breeze-k8s-tests-line-15)">│</text><text class="breeze-k8s-tests-r5" x="341.6" y="386" textLength="1098" clip-path="url(#breeze-k8s-tests-line-15)">[default:&#160;LocalExecutor]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#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-k8s-tests-r5" x="0" y="410.4" textLength="12.2" clip-path="url(#breeze-k8s-tests-line-16)">│</text><text class="breeze-k8s-tests-r4" x="24.4" y="410.4" textLength="219.6" clip-path="url(#breeze-k8s-tests-line-16)">--force-venv-setup</text><text class="breeze-k8s-tests-r1" x="341.6" y="410.4" textLength="427" clip-path="url(#breeze-k8s-tests-line-16)">Force&#160;recreation&#160;of&#160;the&#160;virtualenv.</text><text class="breeze-k8s-tests-r5" x="1451.8" y="41 [...]
+</text><text class="breeze-k8s-tests-r5" x="0" y="434.8" textLength="1464" clip-path="url(#breeze-k8s-tests-line-17)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-k8s-tests-r1" x="1464" y="434.8" textLength="12.2" clip-path="url(#breeze-k8s-tests-line-17)">
+</text><text class="breeze-k8s-tests-r5" x="0" y="459.2" textLength="24.4" clip-path="url(#breeze-k8s-tests-line-18)">╭─</text><text class="breeze-k8s-tests-r5" x="24.4" y="459.2" textLength="219.6" clip-path="url(#breeze-k8s-tests-line-18)">&#160;Parallel&#160;options&#160;</text><text class="breeze-k8s-tests-r5" x="244" y="459.2" textLength="1195.6" clip-path="url(#breeze-k8s-tests-line-18)">─────────────────────────────────────────────────────────────────────────────────────────────── [...]
+</text><text class="breeze-k8s-tests-r5" x="0" y="483.6" textLength="12.2" clip-path="url(#breeze-k8s-tests-line-19)">│</text><text class="breeze-k8s-tests-r4" x="24.4" y="483.6" textLength="207.4" clip-path="url(#breeze-k8s-tests-line-19)">--run-in-parallel</text><text class="breeze-k8s-tests-r1" x="378.2" y="483.6" textLength="854" clip-path="url(#breeze-k8s-tests-line-19)">Run&#160;the&#160;operation&#160;in&#160;parallel&#160;on&#160;all&#160;or&#160;selected&#160;subset&#160;of&#160 [...]
+</text><text class="breeze-k8s-tests-r5" x="0" y="508" textLength="12.2" clip-path="url(#breeze-k8s-tests-line-20)">│</text><text class="breeze-k8s-tests-r4" x="24.4" y="508" textLength="158.6" clip-path="url(#breeze-k8s-tests-line-20)">--parallelism</text><text class="breeze-k8s-tests-r1" x="378.2" y="508" textLength="1061.4" clip-path="url(#breeze-k8s-tests-line-20)">Maximum&#160;number&#160;of&#160;processes&#160;to&#160;use&#160;while&#160;running&#160;the&#160;operation&#160;in&#160 [...]
+</text><text class="breeze-k8s-tests-r5" x="0" y="532.4" textLength="12.2" clip-path="url(#breeze-k8s-tests-line-21)">│</text><text class="breeze-k8s-tests-r1" x="378.2" y="532.4" textLength="1061.4" clip-path="url(#breeze-k8s-tests-line-21)">operations.&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#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-k8s-tests-r5" x="0" y="556.8" textLength="12.2" clip-path="url(#breeze-k8s-tests-line-22)">│</text><text class="breeze-k8s-tests-r7" x="378.2" y="556.8" textLength="1061.4" clip-path="url(#breeze-k8s-tests-line-22)">(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;& [...]
+</text><text class="breeze-k8s-tests-r5" x="0" y="581.2" textLength="12.2" clip-path="url(#breeze-k8s-tests-line-23)">│</text><text class="breeze-k8s-tests-r5" x="378.2" y="581.2" textLength="1061.4" clip-path="url(#breeze-k8s-tests-line-23)">[default:&#160;2;&#160;1&lt;=x&lt;=4]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#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-k8s-tests-r5" x="0" y="605.6" textLength="12.2" clip-path="url(#breeze-k8s-tests-line-24)">│</text><text class="breeze-k8s-tests-r4" x="24.4" y="605.6" textLength="207.4" clip-path="url(#breeze-k8s-tests-line-24)">--python-versions</text><text class="breeze-k8s-tests-r1" x="378.2" y="605.6" textLength="951.6" clip-path="url(#breeze-k8s-tests-line-24)">Space&#160;separated&#160;list&#160;of&#160;python&#160;versions&#160;used&#160;for&#160;build&#160;with&#160;m [...]
+</text><text class="breeze-k8s-tests-r5" x="0" y="630" textLength="12.2" clip-path="url(#breeze-k8s-tests-line-25)">│</text><text class="breeze-k8s-tests-r5" x="378.2" y="630" textLength="951.6" clip-path="url(#breeze-k8s-tests-line-25)">[default:&#160;3.8&#160;3.9&#160;3.10&#160;3.11&#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;&#160;&#160;&#160;&#16 [...]
+</text><text class="breeze-k8s-tests-r5" x="0" y="654.4" textLength="12.2" clip-path="url(#breeze-k8s-tests-line-26)">│</text><text class="breeze-k8s-tests-r4" x="24.4" y="654.4" textLength="256.2" clip-path="url(#breeze-k8s-tests-line-26)">--kubernetes-versions</text><text class="breeze-k8s-tests-r1" x="378.2" y="654.4" textLength="756.4" clip-path="url(#breeze-k8s-tests-line-26)">Kubernetes&#160;versions&#160;used&#160;to&#160;run&#160;in&#160;parallel&#160;(space&#160;separated).</tex [...]
+</text><text class="breeze-k8s-tests-r5" x="0" y="678.8" textLength="12.2" clip-path="url(#breeze-k8s-tests-line-27)">│</text><text class="breeze-k8s-tests-r5" x="378.2" y="678.8" textLength="756.4" clip-path="url(#breeze-k8s-tests-line-27)">[default:&#160;v1.28.13&#160;v1.29.8&#160;v1.30.4&#160;v1.31.0]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-k8s-tests-r5" x="1451.8" y="678.8" textLength= [...]
+</text><text class="breeze-k8s-tests-r5" x="0" y="703.2" textLength="12.2" clip-path="url(#breeze-k8s-tests-line-28)">│</text><text class="breeze-k8s-tests-r4" x="24.4" y="703.2" textLength="170.8" clip-path="url(#breeze-k8s-tests-line-28)">--skip-cleanup</text><text class="breeze-k8s-tests-r1" x="378.2" y="703.2" textLength="732" clip-path="url(#breeze-k8s-tests-line-28)">Skip&#160;cleanup&#160;of&#160;temporary&#160;files&#160;created&#160;during&#160;parallel&#160;run.</text><text cla [...]
+</text><text class="breeze-k8s-tests-r5" x="0" y="727.6" textLength="12.2" clip-path="url(#breeze-k8s-tests-line-29)">│</text><text class="breeze-k8s-tests-r4" x="24.4" y="727.6" textLength="207.4" clip-path="url(#breeze-k8s-tests-line-29)">--debug-resources</text><text class="breeze-k8s-tests-r1" x="378.2" y="727.6" textLength="768.6" clip-path="url(#breeze-k8s-tests-line-29)">Whether&#160;to&#160;show&#160;resource&#160;information&#160;while&#160;running&#160;in&#160;parallel.</text>< [...]
+</text><text class="breeze-k8s-tests-r5" x="0" y="752" textLength="12.2" clip-path="url(#breeze-k8s-tests-line-30)">│</text><text class="breeze-k8s-tests-r4" x="24.4" y="752" textLength="305" clip-path="url(#breeze-k8s-tests-line-30)">--include-success-outputs</text><text class="breeze-k8s-tests-r1" x="378.2" y="752" textLength="927.2" clip-path="url(#breeze-k8s-tests-line-30)">Whether&#160;to&#160;include&#160;outputs&#160;of&#160;successful&#160;parallel&#160;runs&#160;(skipped&#160;by [...]
+</text><text class="breeze-k8s-tests-r5" x="0" y="776.4" textLength="1464" clip-path="url(#breeze-k8s-tests-line-31)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-k8s-tests-r1" x="1464" y="776.4" textLength="12.2" clip-path="url(#breeze-k8s-tests-line-31)">
+</text><text class="breeze-k8s-tests-r5" x="0" y="800.8" textLength="24.4" clip-path="url(#breeze-k8s-tests-line-32)">╭─</text><text class="breeze-k8s-tests-r5" x="24.4" y="800.8" textLength="195.2" clip-path="url(#breeze-k8s-tests-line-32)">&#160;Common&#160;options&#160;</text><text class="breeze-k8s-tests-r5" x="219.6" y="800.8" textLength="1220" clip-path="url(#breeze-k8s-tests-line-32)">───────────────────────────────────────────────────────────────────────────────────────────────── [...]
+</text><text class="breeze-k8s-tests-r5" x="0" y="825.2" textLength="12.2" clip-path="url(#breeze-k8s-tests-line-33)">│</text><text class="breeze-k8s-tests-r4" x="24.4" y="825.2" textLength="109.8" clip-path="url(#breeze-k8s-tests-line-33)">--verbose</text><text class="breeze-k8s-tests-r6" x="158.6" y="825.2" textLength="24.4" clip-path="url(#breeze-k8s-tests-line-33)">-v</text><text class="breeze-k8s-tests-r1" x="207.4" y="825.2" textLength="585.6" clip-path="url(#breeze-k8s-tests-line- [...]
+</text><text class="breeze-k8s-tests-r5" x="0" y="849.6" textLength="12.2" clip-path="url(#breeze-k8s-tests-line-34)">│</text><text class="breeze-k8s-tests-r4" x="24.4" y="849.6" textLength="109.8" clip-path="url(#breeze-k8s-tests-line-34)">--dry-run</text><text class="breeze-k8s-tests-r6" x="158.6" y="849.6" textLength="24.4" clip-path="url(#breeze-k8s-tests-line-34)">-D</text><text class="breeze-k8s-tests-r1" x="207.4" y="849.6" textLength="719.8" clip-path="url(#breeze-k8s-tests-line- [...]
+</text><text class="breeze-k8s-tests-r5" x="0" y="874" textLength="12.2" clip-path="url(#breeze-k8s-tests-line-35)">│</text><text class="breeze-k8s-tests-r4" x="24.4" y="874" textLength="73.2" clip-path="url(#breeze-k8s-tests-line-35)">--help</text><text class="breeze-k8s-tests-r6" x="158.6" y="874" textLength="24.4" clip-path="url(#breeze-k8s-tests-line-35)">-h</text><text class="breeze-k8s-tests-r1" x="207.4" y="874" textLength="329.4" clip-path="url(#breeze-k8s-tests-line-35)">Show&#1 [...]
+</text><text class="breeze-k8s-tests-r5" x="0" y="898.4" textLength="1464" clip-path="url(#breeze-k8s-tests-line-36)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-k8s-tests-r1" x="1464" y="898.4" textLength="12.2" clip-path="url(#breeze-k8s-tests-line-36)">
 </text>
     </g>
     </g>
diff --git a/dev/breeze/doc/images/output_k8s_tests.txt b/dev/breeze/doc/images/output_k8s_tests.txt
index bbfd2ca5186..b719d5162ac 100644
--- a/dev/breeze/doc/images/output_k8s_tests.txt
+++ b/dev/breeze/doc/images/output_k8s_tests.txt
@@ -1 +1 @@
-f2702410a9ab81d60f6170f247345487
+a082a9c4992ff6df0342f3ae773bc627
diff --git a/dev/breeze/doc/images/output_k8s_upload-k8s-image.svg b/dev/breeze/doc/images/output_k8s_upload-k8s-image.svg
index 4ffe39e823e..ebebf01c36f 100644
--- a/dev/breeze/doc/images/output_k8s_upload-k8s-image.svg
+++ b/dev/breeze/doc/images/output_k8s_upload-k8s-image.svg
@@ -1,4 +1,4 @@
-<svg class="rich-terminal" viewBox="0 0 1482 782.0" xmlns="http://www.w3.org/2000/svg">
+<svg class="rich-terminal" viewBox="0 0 1482 806.4" xmlns="http://www.w3.org/2000/svg">
     <!-- Generated with Rich https://www.textualize.io -->
     <style>
 
@@ -43,7 +43,7 @@
 
     <defs>
     <clipPath id="breeze-k8s-upload-k8s-image-clip-terminal">
-      <rect x="0" y="0" width="1463.0" height="731.0" />
+      <rect x="0" y="0" width="1463.0" height="755.4" />
     </clipPath>
     <clipPath id="breeze-k8s-upload-k8s-image-line-0">
     <rect x="0" y="1.5" width="1464" height="24.65"/>
@@ -132,9 +132,12 @@
 <clipPath id="breeze-k8s-upload-k8s-image-line-28">
     <rect x="0" y="684.7" width="1464" height="24.65"/>
             </clipPath>
+<clipPath id="breeze-k8s-upload-k8s-image-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="780" rx="8"/><text class="breeze-k8s-upload-k8s-image-title" fill="#c5c8c6" text-anchor="middle" x="740" y="27">Command:&#160;k8s&#160;upload-k8s-image</text>
+    <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-k8s-upload-k8s-image-title" fill="#c5c8c6" text-anchor="middle" x="740" y="27">Command:&#160;k8s&#160;upload-k8s-image</text>
             <g transform="translate(26,22)">
             <circle cx="0" cy="0" r="7" fill="#ff5f57"/>
             <circle cx="22" cy="0" r="7" fill="#febc2e"/>
@@ -150,30 +153,31 @@
 </text><text class="breeze-k8s-upload-k8s-image-r1" x="12.2" y="93.2" textLength="1110.2" clip-path="url(#breeze-k8s-upload-k8s-image-line-3)">Upload&#160;k8s-ready&#160;airflow&#160;image&#160;to&#160;the&#160;KinD&#160;cluster&#160;(optionally&#160;to&#160;all&#160;clusters&#160;in&#160;parallel)</text><text class="breeze-k8s-upload-k8s-image-r1" x="1464" y="93.2" textLength="12.2" clip-path="url(#breeze-k8s-upload-k8s-image-line-3)">
 </text><text class="breeze-k8s-upload-k8s-image-r1" x="1464" y="117.6" textLength="12.2" clip-path="url(#breeze-k8s-upload-k8s-image-line-4)">
 </text><text class="breeze-k8s-upload-k8s-image-r5" x="0" y="142" textLength="24.4" clip-path="url(#breeze-k8s-upload-k8s-image-line-5)">╭─</text><text class="breeze-k8s-upload-k8s-image-r5" x="24.4" y="142" textLength="244" clip-path="url(#breeze-k8s-upload-k8s-image-line-5)">&#160;Upload&#160;image&#160;flags&#160;</text><text class="breeze-k8s-upload-k8s-image-r5" x="268.4" y="142" textLength="1171.2" clip-path="url(#breeze-k8s-upload-k8s-image-line-5)">─────────────────────────────── [...]
-</text><text class="breeze-k8s-upload-k8s-image-r5" x="0" y="166.4" textLength="12.2" clip-path="url(#breeze-k8s-upload-k8s-image-line-6)">│</text><text class="breeze-k8s-upload-k8s-image-r4" x="24.4" y="166.4" textLength="97.6" clip-path="url(#breeze-k8s-upload-k8s-image-line-6)">--python</text><text class="breeze-k8s-upload-k8s-image-r6" x="292.8" y="166.4" textLength="24.4" clip-path="url(#breeze-k8s-upload-k8s-image-line-6)">-p</text><text class="breeze-k8s-upload-k8s-image-r1" x="34 [...]
-</text><text class="breeze-k8s-upload-k8s-image-r5" x="0" y="190.8" textLength="12.2" clip-path="url(#breeze-k8s-upload-k8s-image-line-7)">│</text><text class="breeze-k8s-upload-k8s-image-r5" x="341.6" y="190.8" textLength="732" clip-path="url(#breeze-k8s-upload-k8s-image-line-7)">[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 [...]
-</text><text class="breeze-k8s-upload-k8s-image-r5" x="0" y="215.2" textLength="12.2" clip-path="url(#breeze-k8s-upload-k8s-image-line-8)">│</text><text class="breeze-k8s-upload-k8s-image-r4" x="24.4" y="215.2" textLength="244" clip-path="url(#breeze-k8s-upload-k8s-image-line-8)">--kubernetes-version</text><text class="breeze-k8s-upload-k8s-image-r1" x="341.6" y="215.2" textLength="658.8" clip-path="url(#breeze-k8s-upload-k8s-image-line-8)">Kubernetes&#160;version&#160;used&#160;to&#160; [...]
-</text><text class="breeze-k8s-upload-k8s-image-r5" x="0" y="239.6" textLength="12.2" clip-path="url(#breeze-k8s-upload-k8s-image-line-9)">│</text><text class="breeze-k8s-upload-k8s-image-r7" x="341.6" y="239.6" textLength="658.8" clip-path="url(#breeze-k8s-upload-k8s-image-line-9)">(&gt;v1.28.13&lt;&#160;|&#160;v1.29.8&#160;|&#160;v1.30.4&#160;|&#160;v1.31.0)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-k8s-upload-k8s-image-r5" x="145 [...]
-</text><text class="breeze-k8s-upload-k8s-image-r5" x="0" y="264" textLength="12.2" clip-path="url(#breeze-k8s-upload-k8s-image-line-10)">│</text><text class="breeze-k8s-upload-k8s-image-r5" x="341.6" y="264" textLength="658.8" clip-path="url(#breeze-k8s-upload-k8s-image-line-10)">[default:&#160;v1.28.13]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#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-k8s-upload-k8s-image-r5" x="0" y="288.4" textLength="1464" clip-path="url(#breeze-k8s-upload-k8s-image-line-11)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-k8s-upload-k8s-image-r1" x="1464" y="288.4" textLength="12.2" clip-path="url(#breeze-k8s-upload-k8s-image-line-11)">
-</text><text class="breeze-k8s-upload-k8s-image-r5" x="0" y="312.8" textLength="24.4" clip-path="url(#breeze-k8s-upload-k8s-image-line-12)">╭─</text><text class="breeze-k8s-upload-k8s-image-r5" x="24.4" y="312.8" textLength="219.6" clip-path="url(#breeze-k8s-upload-k8s-image-line-12)">&#160;Parallel&#160;options&#160;</text><text class="breeze-k8s-upload-k8s-image-r5" x="244" y="312.8" textLength="1195.6" clip-path="url(#breeze-k8s-upload-k8s-image-line-12)">───────────────────────────── [...]
-</text><text class="breeze-k8s-upload-k8s-image-r5" x="0" y="337.2" textLength="12.2" clip-path="url(#breeze-k8s-upload-k8s-image-line-13)">│</text><text class="breeze-k8s-upload-k8s-image-r4" x="24.4" y="337.2" textLength="207.4" clip-path="url(#breeze-k8s-upload-k8s-image-line-13)">--run-in-parallel</text><text class="breeze-k8s-upload-k8s-image-r1" x="378.2" y="337.2" textLength="854" clip-path="url(#breeze-k8s-upload-k8s-image-line-13)">Run&#160;the&#160;operation&#160;in&#160;parall [...]
-</text><text class="breeze-k8s-upload-k8s-image-r5" x="0" y="361.6" textLength="12.2" clip-path="url(#breeze-k8s-upload-k8s-image-line-14)">│</text><text class="breeze-k8s-upload-k8s-image-r4" x="24.4" y="361.6" textLength="158.6" clip-path="url(#breeze-k8s-upload-k8s-image-line-14)">--parallelism</text><text class="breeze-k8s-upload-k8s-image-r1" x="378.2" y="361.6" textLength="915" clip-path="url(#breeze-k8s-upload-k8s-image-line-14)">Maximum&#160;number&#160;of&#160;processes&#160;to& [...]
-</text><text class="breeze-k8s-upload-k8s-image-r5" x="0" y="386" textLength="12.2" clip-path="url(#breeze-k8s-upload-k8s-image-line-15)">│</text><text class="breeze-k8s-upload-k8s-image-r7" x="378.2" y="386" textLength="915" clip-path="url(#breeze-k8s-upload-k8s-image-line-15)">(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; [...]
-</text><text class="breeze-k8s-upload-k8s-image-r5" x="0" y="410.4" textLength="12.2" clip-path="url(#breeze-k8s-upload-k8s-image-line-16)">│</text><text class="breeze-k8s-upload-k8s-image-r5" x="378.2" y="410.4" textLength="915" clip-path="url(#breeze-k8s-upload-k8s-image-line-16)">[default:&#160;4;&#160;1&lt;=x&lt;=8]&#160;&#160;&#160;&#160;&#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-k8s-upload-k8s-image-r5" x="0" y="434.8" textLength="12.2" clip-path="url(#breeze-k8s-upload-k8s-image-line-17)">│</text><text class="breeze-k8s-upload-k8s-image-r4" x="24.4" y="434.8" textLength="207.4" clip-path="url(#breeze-k8s-upload-k8s-image-line-17)">--python-versions</text><text class="breeze-k8s-upload-k8s-image-r1" x="378.2" y="434.8" textLength="951.6" clip-path="url(#breeze-k8s-upload-k8s-image-line-17)">Space&#160;separated&#160;list&#160;of&#160;p [...]
-</text><text class="breeze-k8s-upload-k8s-image-r5" x="0" y="459.2" textLength="12.2" clip-path="url(#breeze-k8s-upload-k8s-image-line-18)">│</text><text class="breeze-k8s-upload-k8s-image-r5" x="378.2" y="459.2" textLength="951.6" clip-path="url(#breeze-k8s-upload-k8s-image-line-18)">[default:&#160;3.9&#160;3.10&#160;3.11&#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;& [...]
-</text><text class="breeze-k8s-upload-k8s-image-r5" x="0" y="483.6" textLength="12.2" clip-path="url(#breeze-k8s-upload-k8s-image-line-19)">│</text><text class="breeze-k8s-upload-k8s-image-r4" x="24.4" y="483.6" textLength="256.2" clip-path="url(#breeze-k8s-upload-k8s-image-line-19)">--kubernetes-versions</text><text class="breeze-k8s-upload-k8s-image-r1" x="378.2" y="483.6" textLength="756.4" clip-path="url(#breeze-k8s-upload-k8s-image-line-19)">Kubernetes&#160;versions&#160;used&#160;t [...]
-</text><text class="breeze-k8s-upload-k8s-image-r5" x="0" y="508" textLength="12.2" clip-path="url(#breeze-k8s-upload-k8s-image-line-20)">│</text><text class="breeze-k8s-upload-k8s-image-r5" x="378.2" y="508" textLength="756.4" clip-path="url(#breeze-k8s-upload-k8s-image-line-20)">[default:&#160;v1.28.13&#160;v1.29.8&#160;v1.30.4&#160;v1.31.0]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-k8s-up [...]
-</text><text class="breeze-k8s-upload-k8s-image-r5" x="0" y="532.4" textLength="12.2" clip-path="url(#breeze-k8s-upload-k8s-image-line-21)">│</text><text class="breeze-k8s-upload-k8s-image-r4" x="24.4" y="532.4" textLength="170.8" clip-path="url(#breeze-k8s-upload-k8s-image-line-21)">--skip-cleanup</text><text class="breeze-k8s-upload-k8s-image-r1" x="378.2" y="532.4" textLength="732" clip-path="url(#breeze-k8s-upload-k8s-image-line-21)">Skip&#160;cleanup&#160;of&#160;temporary&#160;file [...]
-</text><text class="breeze-k8s-upload-k8s-image-r5" x="0" y="556.8" textLength="12.2" clip-path="url(#breeze-k8s-upload-k8s-image-line-22)">│</text><text class="breeze-k8s-upload-k8s-image-r4" x="24.4" y="556.8" textLength="207.4" clip-path="url(#breeze-k8s-upload-k8s-image-line-22)">--debug-resources</text><text class="breeze-k8s-upload-k8s-image-r1" x="378.2" y="556.8" textLength="768.6" clip-path="url(#breeze-k8s-upload-k8s-image-line-22)">Whether&#160;to&#160;show&#160;resource&#160; [...]
-</text><text class="breeze-k8s-upload-k8s-image-r5" x="0" y="581.2" textLength="12.2" clip-path="url(#breeze-k8s-upload-k8s-image-line-23)">│</text><text class="breeze-k8s-upload-k8s-image-r4" x="24.4" y="581.2" textLength="305" clip-path="url(#breeze-k8s-upload-k8s-image-line-23)">--include-success-outputs</text><text class="breeze-k8s-upload-k8s-image-r1" x="378.2" y="581.2" textLength="927.2" clip-path="url(#breeze-k8s-upload-k8s-image-line-23)">Whether&#160;to&#160;include&#160;outpu [...]
-</text><text class="breeze-k8s-upload-k8s-image-r5" x="0" y="605.6" textLength="1464" clip-path="url(#breeze-k8s-upload-k8s-image-line-24)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-k8s-upload-k8s-image-r1" x="1464" y="605.6" textLength="12.2" clip-path="url(#breeze-k8s-upload-k8s-image-line-24)">
-</text><text class="breeze-k8s-upload-k8s-image-r5" x="0" y="630" textLength="24.4" clip-path="url(#breeze-k8s-upload-k8s-image-line-25)">╭─</text><text class="breeze-k8s-upload-k8s-image-r5" x="24.4" y="630" textLength="195.2" clip-path="url(#breeze-k8s-upload-k8s-image-line-25)">&#160;Common&#160;options&#160;</text><text class="breeze-k8s-upload-k8s-image-r5" x="219.6" y="630" textLength="1220" clip-path="url(#breeze-k8s-upload-k8s-image-line-25)">───────────────────────────────────── [...]
-</text><text class="breeze-k8s-upload-k8s-image-r5" x="0" y="654.4" textLength="12.2" clip-path="url(#breeze-k8s-upload-k8s-image-line-26)">│</text><text class="breeze-k8s-upload-k8s-image-r4" x="24.4" y="654.4" textLength="109.8" clip-path="url(#breeze-k8s-upload-k8s-image-line-26)">--verbose</text><text class="breeze-k8s-upload-k8s-image-r6" x="158.6" y="654.4" textLength="24.4" clip-path="url(#breeze-k8s-upload-k8s-image-line-26)">-v</text><text class="breeze-k8s-upload-k8s-image-r1"  [...]
-</text><text class="breeze-k8s-upload-k8s-image-r5" x="0" y="678.8" textLength="12.2" clip-path="url(#breeze-k8s-upload-k8s-image-line-27)">│</text><text class="breeze-k8s-upload-k8s-image-r4" x="24.4" y="678.8" textLength="109.8" clip-path="url(#breeze-k8s-upload-k8s-image-line-27)">--dry-run</text><text class="breeze-k8s-upload-k8s-image-r6" x="158.6" y="678.8" textLength="24.4" clip-path="url(#breeze-k8s-upload-k8s-image-line-27)">-D</text><text class="breeze-k8s-upload-k8s-image-r1"  [...]
-</text><text class="breeze-k8s-upload-k8s-image-r5" x="0" y="703.2" textLength="12.2" clip-path="url(#breeze-k8s-upload-k8s-image-line-28)">│</text><text class="breeze-k8s-upload-k8s-image-r4" x="24.4" y="703.2" textLength="73.2" clip-path="url(#breeze-k8s-upload-k8s-image-line-28)">--help</text><text class="breeze-k8s-upload-k8s-image-r6" x="158.6" y="703.2" textLength="24.4" clip-path="url(#breeze-k8s-upload-k8s-image-line-28)">-h</text><text class="breeze-k8s-upload-k8s-image-r1" x="2 [...]
-</text><text class="breeze-k8s-upload-k8s-image-r5" x="0" y="727.6" textLength="1464" clip-path="url(#breeze-k8s-upload-k8s-image-line-29)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-k8s-upload-k8s-image-r1" x="1464" y="727.6" textLength="12.2" clip-path="url(#breeze-k8s-upload-k8s-image-line-29)">
+</text><text class="breeze-k8s-upload-k8s-image-r5" x="0" y="166.4" textLength="12.2" clip-path="url(#breeze-k8s-upload-k8s-image-line-6)">│</text><text class="breeze-k8s-upload-k8s-image-r4" x="24.4" y="166.4" textLength="97.6" clip-path="url(#breeze-k8s-upload-k8s-image-line-6)">--python</text><text class="breeze-k8s-upload-k8s-image-r6" x="292.8" y="166.4" textLength="24.4" clip-path="url(#breeze-k8s-upload-k8s-image-line-6)">-p</text><text class="breeze-k8s-upload-k8s-image-r1" x="34 [...]
+</text><text class="breeze-k8s-upload-k8s-image-r5" x="0" y="190.8" textLength="12.2" clip-path="url(#breeze-k8s-upload-k8s-image-line-7)">│</text><text class="breeze-k8s-upload-k8s-image-r7" x="341.6" y="190.8" textLength="732" clip-path="url(#breeze-k8s-upload-k8s-image-line-7)">(&gt;3.8&lt;&#160;|&#160;3.9&#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;&#16 [...]
+</text><text class="breeze-k8s-upload-k8s-image-r5" x="0" y="215.2" textLength="12.2" clip-path="url(#breeze-k8s-upload-k8s-image-line-8)">│</text><text class="breeze-k8s-upload-k8s-image-r5" x="341.6" y="215.2" textLength="732" clip-path="url(#breeze-k8s-upload-k8s-image-line-8)">[default:&#160;3.8]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#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-k8s-upload-k8s-image-r5" x="0" y="239.6" textLength="12.2" clip-path="url(#breeze-k8s-upload-k8s-image-line-9)">│</text><text class="breeze-k8s-upload-k8s-image-r4" x="24.4" y="239.6" textLength="244" clip-path="url(#breeze-k8s-upload-k8s-image-line-9)">--kubernetes-version</text><text class="breeze-k8s-upload-k8s-image-r1" x="341.6" y="239.6" textLength="658.8" clip-path="url(#breeze-k8s-upload-k8s-image-line-9)">Kubernetes&#160;version&#160;used&#160;to&#160; [...]
+</text><text class="breeze-k8s-upload-k8s-image-r5" x="0" y="264" textLength="12.2" clip-path="url(#breeze-k8s-upload-k8s-image-line-10)">│</text><text class="breeze-k8s-upload-k8s-image-r7" x="341.6" y="264" textLength="658.8" clip-path="url(#breeze-k8s-upload-k8s-image-line-10)">(&gt;v1.28.13&lt;&#160;|&#160;v1.29.8&#160;|&#160;v1.30.4&#160;|&#160;v1.31.0)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-k8s-upload-k8s-image-r5" x="1451. [...]
+</text><text class="breeze-k8s-upload-k8s-image-r5" x="0" y="288.4" textLength="12.2" clip-path="url(#breeze-k8s-upload-k8s-image-line-11)">│</text><text class="breeze-k8s-upload-k8s-image-r5" x="341.6" y="288.4" textLength="658.8" clip-path="url(#breeze-k8s-upload-k8s-image-line-11)">[default:&#160;v1.28.13]&#160;&#160;&#160;&#160;&#160;&#160;&#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-k8s-upload-k8s-image-r5" x="0" y="312.8" textLength="1464" clip-path="url(#breeze-k8s-upload-k8s-image-line-12)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-k8s-upload-k8s-image-r1" x="1464" y="312.8" textLength="12.2" clip-path="url(#breeze-k8s-upload-k8s-image-line-12)">
+</text><text class="breeze-k8s-upload-k8s-image-r5" x="0" y="337.2" textLength="24.4" clip-path="url(#breeze-k8s-upload-k8s-image-line-13)">╭─</text><text class="breeze-k8s-upload-k8s-image-r5" x="24.4" y="337.2" textLength="219.6" clip-path="url(#breeze-k8s-upload-k8s-image-line-13)">&#160;Parallel&#160;options&#160;</text><text class="breeze-k8s-upload-k8s-image-r5" x="244" y="337.2" textLength="1195.6" clip-path="url(#breeze-k8s-upload-k8s-image-line-13)">───────────────────────────── [...]
+</text><text class="breeze-k8s-upload-k8s-image-r5" x="0" y="361.6" textLength="12.2" clip-path="url(#breeze-k8s-upload-k8s-image-line-14)">│</text><text class="breeze-k8s-upload-k8s-image-r4" x="24.4" y="361.6" textLength="207.4" clip-path="url(#breeze-k8s-upload-k8s-image-line-14)">--run-in-parallel</text><text class="breeze-k8s-upload-k8s-image-r1" x="378.2" y="361.6" textLength="854" clip-path="url(#breeze-k8s-upload-k8s-image-line-14)">Run&#160;the&#160;operation&#160;in&#160;parall [...]
+</text><text class="breeze-k8s-upload-k8s-image-r5" x="0" y="386" textLength="12.2" clip-path="url(#breeze-k8s-upload-k8s-image-line-15)">│</text><text class="breeze-k8s-upload-k8s-image-r4" x="24.4" y="386" textLength="158.6" clip-path="url(#breeze-k8s-upload-k8s-image-line-15)">--parallelism</text><text class="breeze-k8s-upload-k8s-image-r1" x="378.2" y="386" textLength="915" clip-path="url(#breeze-k8s-upload-k8s-image-line-15)">Maximum&#160;number&#160;of&#160;processes&#160;to&#160;u [...]
+</text><text class="breeze-k8s-upload-k8s-image-r5" x="0" y="410.4" textLength="12.2" clip-path="url(#breeze-k8s-upload-k8s-image-line-16)">│</text><text class="breeze-k8s-upload-k8s-image-r7" x="378.2" y="410.4" textLength="915" clip-path="url(#breeze-k8s-upload-k8s-image-line-16)">(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;&# [...]
+</text><text class="breeze-k8s-upload-k8s-image-r5" x="0" y="434.8" textLength="12.2" clip-path="url(#breeze-k8s-upload-k8s-image-line-17)">│</text><text class="breeze-k8s-upload-k8s-image-r5" x="378.2" y="434.8" textLength="915" clip-path="url(#breeze-k8s-upload-k8s-image-line-17)">[default:&#160;4;&#160;1&lt;=x&lt;=8]&#160;&#160;&#160;&#160;&#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-k8s-upload-k8s-image-r5" x="0" y="459.2" textLength="12.2" clip-path="url(#breeze-k8s-upload-k8s-image-line-18)">│</text><text class="breeze-k8s-upload-k8s-image-r4" x="24.4" y="459.2" textLength="207.4" clip-path="url(#breeze-k8s-upload-k8s-image-line-18)">--python-versions</text><text class="breeze-k8s-upload-k8s-image-r1" x="378.2" y="459.2" textLength="951.6" clip-path="url(#breeze-k8s-upload-k8s-image-line-18)">Space&#160;separated&#160;list&#160;of&#160;p [...]
+</text><text class="breeze-k8s-upload-k8s-image-r5" x="0" y="483.6" textLength="12.2" clip-path="url(#breeze-k8s-upload-k8s-image-line-19)">│</text><text class="breeze-k8s-upload-k8s-image-r5" x="378.2" y="483.6" textLength="951.6" clip-path="url(#breeze-k8s-upload-k8s-image-line-19)">[default:&#160;3.8&#160;3.9&#160;3.10&#160;3.11&#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;&#16 [...]
+</text><text class="breeze-k8s-upload-k8s-image-r5" x="0" y="508" textLength="12.2" clip-path="url(#breeze-k8s-upload-k8s-image-line-20)">│</text><text class="breeze-k8s-upload-k8s-image-r4" x="24.4" y="508" textLength="256.2" clip-path="url(#breeze-k8s-upload-k8s-image-line-20)">--kubernetes-versions</text><text class="breeze-k8s-upload-k8s-image-r1" x="378.2" y="508" textLength="756.4" clip-path="url(#breeze-k8s-upload-k8s-image-line-20)">Kubernetes&#160;versions&#160;used&#160;to&#160 [...]
+</text><text class="breeze-k8s-upload-k8s-image-r5" x="0" y="532.4" textLength="12.2" clip-path="url(#breeze-k8s-upload-k8s-image-line-21)">│</text><text class="breeze-k8s-upload-k8s-image-r5" x="378.2" y="532.4" textLength="756.4" clip-path="url(#breeze-k8s-upload-k8s-image-line-21)">[default:&#160;v1.28.13&#160;v1.29.8&#160;v1.30.4&#160;v1.31.0]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-k8 [...]
+</text><text class="breeze-k8s-upload-k8s-image-r5" x="0" y="556.8" textLength="12.2" clip-path="url(#breeze-k8s-upload-k8s-image-line-22)">│</text><text class="breeze-k8s-upload-k8s-image-r4" x="24.4" y="556.8" textLength="170.8" clip-path="url(#breeze-k8s-upload-k8s-image-line-22)">--skip-cleanup</text><text class="breeze-k8s-upload-k8s-image-r1" x="378.2" y="556.8" textLength="732" clip-path="url(#breeze-k8s-upload-k8s-image-line-22)">Skip&#160;cleanup&#160;of&#160;temporary&#160;file [...]
+</text><text class="breeze-k8s-upload-k8s-image-r5" x="0" y="581.2" textLength="12.2" clip-path="url(#breeze-k8s-upload-k8s-image-line-23)">│</text><text class="breeze-k8s-upload-k8s-image-r4" x="24.4" y="581.2" textLength="207.4" clip-path="url(#breeze-k8s-upload-k8s-image-line-23)">--debug-resources</text><text class="breeze-k8s-upload-k8s-image-r1" x="378.2" y="581.2" textLength="768.6" clip-path="url(#breeze-k8s-upload-k8s-image-line-23)">Whether&#160;to&#160;show&#160;resource&#160; [...]
+</text><text class="breeze-k8s-upload-k8s-image-r5" x="0" y="605.6" textLength="12.2" clip-path="url(#breeze-k8s-upload-k8s-image-line-24)">│</text><text class="breeze-k8s-upload-k8s-image-r4" x="24.4" y="605.6" textLength="305" clip-path="url(#breeze-k8s-upload-k8s-image-line-24)">--include-success-outputs</text><text class="breeze-k8s-upload-k8s-image-r1" x="378.2" y="605.6" textLength="927.2" clip-path="url(#breeze-k8s-upload-k8s-image-line-24)">Whether&#160;to&#160;include&#160;outpu [...]
+</text><text class="breeze-k8s-upload-k8s-image-r5" x="0" y="630" textLength="1464" clip-path="url(#breeze-k8s-upload-k8s-image-line-25)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-k8s-upload-k8s-image-r1" x="1464" y="630" textLength="12.2" clip-path="url(#breeze-k8s-upload-k8s-image-line-25)">
+</text><text class="breeze-k8s-upload-k8s-image-r5" x="0" y="654.4" textLength="24.4" clip-path="url(#breeze-k8s-upload-k8s-image-line-26)">╭─</text><text class="breeze-k8s-upload-k8s-image-r5" x="24.4" y="654.4" textLength="195.2" clip-path="url(#breeze-k8s-upload-k8s-image-line-26)">&#160;Common&#160;options&#160;</text><text class="breeze-k8s-upload-k8s-image-r5" x="219.6" y="654.4" textLength="1220" clip-path="url(#breeze-k8s-upload-k8s-image-line-26)">─────────────────────────────── [...]
+</text><text class="breeze-k8s-upload-k8s-image-r5" x="0" y="678.8" textLength="12.2" clip-path="url(#breeze-k8s-upload-k8s-image-line-27)">│</text><text class="breeze-k8s-upload-k8s-image-r4" x="24.4" y="678.8" textLength="109.8" clip-path="url(#breeze-k8s-upload-k8s-image-line-27)">--verbose</text><text class="breeze-k8s-upload-k8s-image-r6" x="158.6" y="678.8" textLength="24.4" clip-path="url(#breeze-k8s-upload-k8s-image-line-27)">-v</text><text class="breeze-k8s-upload-k8s-image-r1"  [...]
+</text><text class="breeze-k8s-upload-k8s-image-r5" x="0" y="703.2" textLength="12.2" clip-path="url(#breeze-k8s-upload-k8s-image-line-28)">│</text><text class="breeze-k8s-upload-k8s-image-r4" x="24.4" y="703.2" textLength="109.8" clip-path="url(#breeze-k8s-upload-k8s-image-line-28)">--dry-run</text><text class="breeze-k8s-upload-k8s-image-r6" x="158.6" y="703.2" textLength="24.4" clip-path="url(#breeze-k8s-upload-k8s-image-line-28)">-D</text><text class="breeze-k8s-upload-k8s-image-r1"  [...]
+</text><text class="breeze-k8s-upload-k8s-image-r5" x="0" y="727.6" textLength="12.2" clip-path="url(#breeze-k8s-upload-k8s-image-line-29)">│</text><text class="breeze-k8s-upload-k8s-image-r4" x="24.4" y="727.6" textLength="73.2" clip-path="url(#breeze-k8s-upload-k8s-image-line-29)">--help</text><text class="breeze-k8s-upload-k8s-image-r6" x="158.6" y="727.6" textLength="24.4" clip-path="url(#breeze-k8s-upload-k8s-image-line-29)">-h</text><text class="breeze-k8s-upload-k8s-image-r1" x="2 [...]
+</text><text class="breeze-k8s-upload-k8s-image-r5" x="0" y="752" textLength="1464" clip-path="url(#breeze-k8s-upload-k8s-image-line-30)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-k8s-upload-k8s-image-r1" x="1464" y="752" textLength="12.2" clip-path="url(#breeze-k8s-upload-k8s-image-line-30)">
 </text>
     </g>
     </g>
diff --git a/dev/breeze/doc/images/output_k8s_upload-k8s-image.txt b/dev/breeze/doc/images/output_k8s_upload-k8s-image.txt
index 7e93734dfe0..df2e5c987bd 100644
--- a/dev/breeze/doc/images/output_k8s_upload-k8s-image.txt
+++ b/dev/breeze/doc/images/output_k8s_upload-k8s-image.txt
@@ -1 +1 @@
-774439a1c9e22923f9ace56902c41dcd
+bbe1817b251e10542aa5ba970230c457
diff --git a/dev/breeze/doc/images/output_prod-image_build.svg b/dev/breeze/doc/images/output_prod-image_build.svg
index 5684063c953..db40cc2417e 100644
--- a/dev/breeze/doc/images/output_prod-image_build.svg
+++ b/dev/breeze/doc/images/output_prod-image_build.svg
@@ -384,8 +384,8 @@
 </text><text class="breeze-prod-image-build-r5" x="0" y="312.8" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-12)">│</text><text class="breeze-prod-image-build-r4" x="24.4" y="312.8" textLength="134.2" clip-path="url(#breeze-prod-image-build-line-12)">--image-tag</text><text class="breeze-prod-image-build-r1" x="402.6" y="312.8" textLength="390.4" clip-path="url(#breeze-prod-image-build-line-12)">Tag&#160;the&#160;image&#160;after&#160;building&#160;it.</text><text class [...]
 </text><text class="breeze-prod-image-build-r5" x="0" y="337.2" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-13)">│</text><text class="breeze-prod-image-build-r4" x="24.4" y="337.2" textLength="305" clip-path="url(#breeze-prod-image-build-line-13)">--install-airflow-version</text><text class="breeze-prod-image-build-r7" x="353.8" y="337.2" textLength="24.4" clip-path="url(#breeze-prod-image-build-line-13)">-V</text><text class="breeze-prod-image-build-r1" x="402.6" y="3 [...]
 </text><text class="breeze-prod-image-build-r5" x="0" y="361.6" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-14)">│</text><text class="breeze-prod-image-build-r4" x="24.4" y="361.6" textLength="97.6" clip-path="url(#breeze-prod-image-build-line-14)">--python</text><text class="breeze-prod-image-build-r7" x="353.8" y="361.6" textLength="24.4" clip-path="url(#breeze-prod-image-build-line-14)">-p</text><text class="breeze-prod-image-build-r1" x="402.6" y="361.6" textLength [...]
-</text><text class="breeze-prod-image-build-r5" x="0" y="386" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-15)">│</text><text class="breeze-prod-image-build-r6" x="402.6" y="386" textLength="732" clip-path="url(#breeze-prod-image-build-line-15)">(&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;&# [...]
-</text><text class="breeze-prod-image-build-r5" x="0" y="410.4" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-16)">│</text><text class="breeze-prod-image-build-r5" x="402.6" y="410.4" textLength="732" clip-path="url(#breeze-prod-image-build-line-16)">[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;& [...]
+</text><text class="breeze-prod-image-build-r5" x="0" y="386" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-15)">│</text><text class="breeze-prod-image-build-r6" x="402.6" y="386" textLength="732" clip-path="url(#breeze-prod-image-build-line-15)">(&gt;3.8&lt;&#160;|&#160;3.9&#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;&#16 [...]
+</text><text class="breeze-prod-image-build-r5" x="0" y="410.4" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-16)">│</text><text class="breeze-prod-image-build-r5" x="402.6" y="410.4" textLength="732" clip-path="url(#breeze-prod-image-build-line-16)">[default:&#160;3.8]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#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="434.8" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-17)">│</text><text class="breeze-prod-image-build-r4" x="24.4" y="434.8" textLength="183" clip-path="url(#breeze-prod-image-build-line-17)">--tag-as-latest</text><text class="breeze-prod-image-build-r1" x="402.6" y="434.8" textLength="1037" clip-path="url(#breeze-prod-image-build-line-17)">Tags&#160;the&#160;image&#160;as&#160;latest&#160;and&#160;update&#160;che [...]
 </text><text class="breeze-prod-image-build-r5" x="0" y="459.2" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-18)">│</text><text class="breeze-prod-image-build-r1" x="402.6" y="459.2" textLength="353.8" clip-path="url(#breeze-prod-image-build-line-18)">you&#160;build&#160;or&#160;pull&#160;image&#160;with&#160;</text><text class="breeze-prod-image-build-r4" x="756.4" y="459.2" textLength="134.2" clip-path="url(#breeze-prod-image-build-line-18)">--image-tag</text><text cl [...]
 </text><text class="breeze-prod-image-build-r5" x="0" y="483.6" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-19)">│</text><text class="breeze-prod-image-build-r4" x="24.4" y="483.6" textLength="305" clip-path="url(#breeze-prod-image-build-line-19)">--version-suffix-for-pypi</text><text class="breeze-prod-image-build-r1" x="402.6" y="483.6" textLength="768.6" clip-path="url(#breeze-prod-image-build-line-19)">Version&#160;suffix&#160;used&#160;for&#160;PyPI&#160;packages& [...]
@@ -396,7 +396,7 @@
 </text><text class="breeze-prod-image-build-r5" x="0" y="605.6" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-24)">│</text><text class="breeze-prod-image-build-r6" x="378.2" y="605.6" textLength="915" clip-path="url(#breeze-prod-image-build-line-24)">(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; [...]
 </text><text class="breeze-prod-image-build-r5" x="0" y="630" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-25)">│</text><text class="breeze-prod-image-build-r5" x="378.2" y="630" textLength="915" clip-path="url(#breeze-prod-image-build-line-25)">[default:&#160;4;&#160;1&lt;=x&lt;=8]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#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="654.4" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-26)">│</text><text class="breeze-prod-image-build-r4" x="24.4" y="654.4" textLength="207.4" clip-path="url(#breeze-prod-image-build-line-26)">--python-versions</text><text class="breeze-prod-image-build-r1" x="378.2" y="654.4" textLength="951.6" clip-path="url(#breeze-prod-image-build-line-26)">Space&#160;separated&#160;list&#160;of&#160;python&#160;versions&#160 [...]
-</text><text class="breeze-prod-image-build-r5" x="0" y="678.8" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-27)">│</text><text class="breeze-prod-image-build-r5" x="378.2" y="678.8" textLength="951.6" clip-path="url(#breeze-prod-image-build-line-27)">[default:&#160;3.9&#160;3.10&#160;3.11&#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-prod-image-build-r5" x="0" y="678.8" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-27)">│</text><text class="breeze-prod-image-build-r5" x="378.2" y="678.8" textLength="951.6" clip-path="url(#breeze-prod-image-build-line-27)">[default:&#160;3.8&#160;3.9&#160;3.10&#160;3.11&#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;&# [...]
 </text><text class="breeze-prod-image-build-r5" x="0" y="703.2" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-28)">│</text><text class="breeze-prod-image-build-r4" x="24.4" y="703.2" textLength="170.8" clip-path="url(#breeze-prod-image-build-line-28)">--skip-cleanup</text><text class="breeze-prod-image-build-r1" x="378.2" y="703.2" textLength="732" clip-path="url(#breeze-prod-image-build-line-28)">Skip&#160;cleanup&#160;of&#160;temporary&#160;files&#160;created&#160;duri [...]
 </text><text class="breeze-prod-image-build-r5" x="0" y="727.6" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-29)">│</text><text class="breeze-prod-image-build-r4" x="24.4" y="727.6" textLength="207.4" clip-path="url(#breeze-prod-image-build-line-29)">--debug-resources</text><text class="breeze-prod-image-build-r1" x="378.2" y="727.6" textLength="768.6" clip-path="url(#breeze-prod-image-build-line-29)">Whether&#160;to&#160;show&#160;resource&#160;information&#160;while&# [...]
 </text><text class="breeze-prod-image-build-r5" x="0" y="752" textLength="12.2" clip-path="url(#breeze-prod-image-build-line-30)">│</text><text class="breeze-prod-image-build-r4" x="24.4" y="752" textLength="305" clip-path="url(#breeze-prod-image-build-line-30)">--include-success-outputs</text><text class="breeze-prod-image-build-r1" x="378.2" y="752" textLength="927.2" clip-path="url(#breeze-prod-image-build-line-30)">Whether&#160;to&#160;include&#160;outputs&#160;of&#160;successful&#16 [...]
diff --git a/dev/breeze/doc/images/output_prod-image_build.txt b/dev/breeze/doc/images/output_prod-image_build.txt
index b8131522f12..2de9e791661 100644
--- a/dev/breeze/doc/images/output_prod-image_build.txt
+++ b/dev/breeze/doc/images/output_prod-image_build.txt
@@ -1 +1 @@
-3d6fee0b510d006927e45a56aa45d505
+a4d68d31f40453db37b567dc8166b7ba
diff --git a/dev/breeze/doc/images/output_prod-image_pull.svg b/dev/breeze/doc/images/output_prod-image_pull.svg
index ef55df1638d..54384eda2ab 100644
--- a/dev/breeze/doc/images/output_prod-image_pull.svg
+++ b/dev/breeze/doc/images/output_prod-image_pull.svg
@@ -1,4 +1,4 @@
-<svg class="rich-terminal" viewBox="0 0 1482 879.5999999999999" xmlns="http://www.w3.org/2000/svg">
+<svg class="rich-terminal" viewBox="0 0 1482 904.0" xmlns="http://www.w3.org/2000/svg">
     <!-- Generated with Rich https://www.textualize.io -->
     <style>
 
@@ -43,7 +43,7 @@
 
     <defs>
     <clipPath id="breeze-prod-image-pull-clip-terminal">
-      <rect x="0" y="0" width="1463.0" height="828.5999999999999" />
+      <rect x="0" y="0" width="1463.0" height="853.0" />
     </clipPath>
     <clipPath id="breeze-prod-image-pull-line-0">
     <rect x="0" y="1.5" width="1464" height="24.65"/>
@@ -144,9 +144,12 @@
 <clipPath id="breeze-prod-image-pull-line-32">
     <rect x="0" y="782.3" width="1464" height="24.65"/>
             </clipPath>
+<clipPath id="breeze-prod-image-pull-line-33">
+    <rect x="0" y="806.7" 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="877.6" rx="8"/><text class="breeze-prod-image-pull-title" fill="#c5c8c6" text-anchor="middle" x="740" y="27">Command:&#160;prod-image&#160;pull</text>
+    <rect fill="#292929" stroke="rgba(255,255,255,0.35)" stroke-width="1" x="1" y="1" width="1480" height="902" rx="8"/><text class="breeze-prod-image-pull-title" fill="#c5c8c6" text-anchor="middle" x="740" y="27">Command:&#160;prod-image&#160;pull</text>
             <g transform="translate(26,22)">
             <circle cx="0" cy="0" r="7" fill="#ff5f57"/>
             <circle cx="22" cy="0" r="7" fill="#febc2e"/>
@@ -163,33 +166,34 @@
 </text><text class="breeze-prod-image-pull-r1" x="1464" y="117.6" textLength="12.2" clip-path="url(#breeze-prod-image-pull-line-4)">
 </text><text class="breeze-prod-image-pull-r5" x="0" y="142" textLength="24.4" clip-path="url(#breeze-prod-image-pull-line-5)">╭─</text><text class="breeze-prod-image-pull-r5" x="24.4" y="142" textLength="219.6" clip-path="url(#breeze-prod-image-pull-line-5)">&#160;Pull&#160;image&#160;flags&#160;</text><text class="breeze-prod-image-pull-r5" x="244" y="142" textLength="1195.6" clip-path="url(#breeze-prod-image-pull-line-5)">─────────────────────────────────────────────────────────────── [...]
 </text><text class="breeze-prod-image-pull-r5" x="0" y="166.4" textLength="12.2" clip-path="url(#breeze-prod-image-pull-line-6)">│</text><text class="breeze-prod-image-pull-r4" x="24.4" y="166.4" textLength="134.2" clip-path="url(#breeze-prod-image-pull-line-6)">--image-tag</text><text class="breeze-prod-image-pull-r6" x="244" y="166.4" textLength="24.4" clip-path="url(#breeze-prod-image-pull-line-6)">-t</text><text class="breeze-prod-image-pull-r1" x="292.8" y="166.4" textLength="597.8" [...]
-</text><text class="breeze-prod-image-pull-r5" x="0" y="190.8" textLength="12.2" clip-path="url(#breeze-prod-image-pull-line-7)">│</text><text class="breeze-prod-image-pull-r4" x="24.4" y="190.8" textLength="97.6" clip-path="url(#breeze-prod-image-pull-line-7)">--python</text><text class="breeze-prod-image-pull-r6" x="244" y="190.8" textLength="24.4" clip-path="url(#breeze-prod-image-pull-line-7)">-p</text><text class="breeze-prod-image-pull-r1" x="292.8" y="190.8" textLength="732" clip- [...]
-</text><text class="breeze-prod-image-pull-r5" x="0" y="215.2" textLength="12.2" clip-path="url(#breeze-prod-image-pull-line-8)">│</text><text class="breeze-prod-image-pull-r5" x="292.8" y="215.2" textLength="732" clip-path="url(#breeze-prod-image-pull-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-pull-r5" x="0" y="239.6" textLength="12.2" clip-path="url(#breeze-prod-image-pull-line-9)">│</text><text class="breeze-prod-image-pull-r4" x="24.4" y="239.6" textLength="97.6" clip-path="url(#breeze-prod-image-pull-line-9)">--verify</text><text class="breeze-prod-image-pull-r1" x="292.8" y="239.6" textLength="158.6" clip-path="url(#breeze-prod-image-pull-line-9)">Verify&#160;image.</text><text class="breeze-prod-image-pull-r5" x="1451.8" y="239.6" te [...]
-</text><text class="breeze-prod-image-pull-r5" x="0" y="264" textLength="12.2" clip-path="url(#breeze-prod-image-pull-line-10)">│</text><text class="breeze-prod-image-pull-r4" x="24.4" y="264" textLength="195.2" clip-path="url(#breeze-prod-image-pull-line-10)">--wait-for-image</text><text class="breeze-prod-image-pull-r1" x="292.8" y="264" textLength="366" clip-path="url(#breeze-prod-image-pull-line-10)">Wait&#160;until&#160;image&#160;is&#160;available.</text><text class="breeze-prod-im [...]
-</text><text class="breeze-prod-image-pull-r5" x="0" y="288.4" textLength="12.2" clip-path="url(#breeze-prod-image-pull-line-11)">│</text><text class="breeze-prod-image-pull-r4" x="24.4" y="288.4" textLength="183" clip-path="url(#breeze-prod-image-pull-line-11)">--tag-as-latest</text><text class="breeze-prod-image-pull-r1" x="292.8" y="288.4" textLength="1146.8" clip-path="url(#breeze-prod-image-pull-line-11)">Tags&#160;the&#160;image&#160;as&#160;latest&#160;and&#160;update&#160;checksu [...]
-</text><text class="breeze-prod-image-pull-r5" x="0" y="312.8" textLength="12.2" clip-path="url(#breeze-prod-image-pull-line-12)">│</text><text class="breeze-prod-image-pull-r1" x="292.8" y="312.8" textLength="231.8" clip-path="url(#breeze-prod-image-pull-line-12)">or&#160;pull&#160;image&#160;with&#160;</text><text class="breeze-prod-image-pull-r4" x="524.6" y="312.8" textLength="134.2" clip-path="url(#breeze-prod-image-pull-line-12)">--image-tag</text><text class="breeze-prod-image-pul [...]
-</text><text class="breeze-prod-image-pull-r5" x="0" y="337.2" textLength="1464" clip-path="url(#breeze-prod-image-pull-line-13)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-prod-image-pull-r1" x="1464" y="337.2" textLength="12.2" clip-path="url(#breeze-prod-image-pull-line-13)">
-</text><text class="breeze-prod-image-pull-r5" x="0" y="361.6" textLength="24.4" clip-path="url(#breeze-prod-image-pull-line-14)">╭─</text><text class="breeze-prod-image-pull-r5" x="24.4" y="361.6" textLength="219.6" clip-path="url(#breeze-prod-image-pull-line-14)">&#160;Parallel&#160;running&#160;</text><text class="breeze-prod-image-pull-r5" x="244" y="361.6" textLength="1195.6" clip-path="url(#breeze-prod-image-pull-line-14)">─────────────────────────────────────────────────────────── [...]
-</text><text class="breeze-prod-image-pull-r5" x="0" y="386" textLength="12.2" clip-path="url(#breeze-prod-image-pull-line-15)">│</text><text class="breeze-prod-image-pull-r4" x="24.4" y="386" textLength="207.4" clip-path="url(#breeze-prod-image-pull-line-15)">--run-in-parallel</text><text class="breeze-prod-image-pull-r1" x="378.2" y="386" textLength="854" clip-path="url(#breeze-prod-image-pull-line-15)">Run&#160;the&#160;operation&#160;in&#160;parallel&#160;on&#160;all&#160;or&#160;sel [...]
-</text><text class="breeze-prod-image-pull-r5" x="0" y="410.4" textLength="12.2" clip-path="url(#breeze-prod-image-pull-line-16)">│</text><text class="breeze-prod-image-pull-r4" x="24.4" y="410.4" textLength="158.6" clip-path="url(#breeze-prod-image-pull-line-16)">--parallelism</text><text class="breeze-prod-image-pull-r1" x="378.2" y="410.4" textLength="915" clip-path="url(#breeze-prod-image-pull-line-16)">Maximum&#160;number&#160;of&#160;processes&#160;to&#160;use&#160;while&#160;runni [...]
-</text><text class="breeze-prod-image-pull-r5" x="0" y="434.8" textLength="12.2" clip-path="url(#breeze-prod-image-pull-line-17)">│</text><text class="breeze-prod-image-pull-r7" x="378.2" y="434.8" textLength="915" clip-path="url(#breeze-prod-image-pull-line-17)">(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;&#16 [...]
-</text><text class="breeze-prod-image-pull-r5" x="0" y="459.2" textLength="12.2" clip-path="url(#breeze-prod-image-pull-line-18)">│</text><text class="breeze-prod-image-pull-r5" x="378.2" y="459.2" textLength="915" clip-path="url(#breeze-prod-image-pull-line-18)">[default:&#160;4;&#160;1&lt;=x&lt;=8]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#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-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)">--python-versions</text><text class="breeze-prod-image-pull-r1" x="378.2" y="483.6" textLength="951.6" clip-path="url(#breeze-prod-image-pull-line-19)">Space&#160;separated&#160;list&#160;of&#160;python&#160;versions&#160;used& [...]
-</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-r5" x="378.2" y="508" textLength="951.6" clip-path="url(#breeze-prod-image-pull-line-20)">[default:&#160;3.9&#160;3.10&#160;3.11&#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;&#160;& [...]
-</text><text class="breeze-prod-image-pull-r5" x="0" y="532.4" textLength="12.2" clip-path="url(#breeze-prod-image-pull-line-21)">│</text><text class="breeze-prod-image-pull-r4" x="24.4" y="532.4" textLength="170.8" clip-path="url(#breeze-prod-image-pull-line-21)">--skip-cleanup</text><text class="breeze-prod-image-pull-r1" x="378.2" y="532.4" textLength="732" clip-path="url(#breeze-prod-image-pull-line-21)">Skip&#160;cleanup&#160;of&#160;temporary&#160;files&#160;created&#160;during&#16 [...]
-</text><text class="breeze-prod-image-pull-r5" x="0" y="556.8" textLength="12.2" clip-path="url(#breeze-prod-image-pull-line-22)">│</text><text class="breeze-prod-image-pull-r4" x="24.4" y="556.8" textLength="207.4" clip-path="url(#breeze-prod-image-pull-line-22)">--debug-resources</text><text class="breeze-prod-image-pull-r1" x="378.2" y="556.8" textLength="768.6" clip-path="url(#breeze-prod-image-pull-line-22)">Whether&#160;to&#160;show&#160;resource&#160;information&#160;while&#160;ru [...]
-</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="305" clip-path="url(#breeze-prod-image-pull-line-23)">--include-success-outputs</text><text class="breeze-prod-image-pull-r1" x="378.2" y="581.2" textLength="927.2" clip-path="url(#breeze-prod-image-pull-line-23)">Whether&#160;to&#160;include&#160;outputs&#160;of&#160;successful&#16 [...]
-</text><text class="breeze-prod-image-pull-r5" x="0" y="605.6" textLength="1464" clip-path="url(#breeze-prod-image-pull-line-24)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-prod-image-pull-r1" x="1464" y="605.6" textLength="12.2" clip-path="url(#breeze-prod-image-pull-line-24)">
-</text><text class="breeze-prod-image-pull-r5" x="0" y="630" textLength="24.4" clip-path="url(#breeze-prod-image-pull-line-25)">╭─</text><text class="breeze-prod-image-pull-r5" x="24.4" y="630" textLength="280.6" clip-path="url(#breeze-prod-image-pull-line-25)">&#160;Github&#160;authentication&#160;</text><text class="breeze-prod-image-pull-r5" x="305" y="630" textLength="1134.6" clip-path="url(#breeze-prod-image-pull-line-25)">──────────────────────────────────────────────────────────── [...]
-</text><text class="breeze-prod-image-pull-r5" x="0" y="654.4" textLength="12.2" clip-path="url(#breeze-prod-image-pull-line-26)">│</text><text class="breeze-prod-image-pull-r4" x="24.4" y="654.4" textLength="231.8" clip-path="url(#breeze-prod-image-pull-line-26)">--github-repository</text><text class="breeze-prod-image-pull-r6" x="280.6" y="654.4" textLength="24.4" clip-path="url(#breeze-prod-image-pull-line-26)">-g</text><text class="breeze-prod-image-pull-r1" x="329.4" y="654.4" textL [...]
-</text><text class="breeze-prod-image-pull-r5" x="0" y="678.8" textLength="12.2" clip-path="url(#breeze-prod-image-pull-line-27)">│</text><text class="breeze-prod-image-pull-r4" x="24.4" y="678.8" textLength="170.8" clip-path="url(#breeze-prod-image-pull-line-27)">--github-token</text><text class="breeze-prod-image-pull-r1" x="329.4" y="678.8" textLength="500.2" clip-path="url(#breeze-prod-image-pull-line-27)">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="703.2" textLength="1464" clip-path="url(#breeze-prod-image-pull-line-28)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-prod-image-pull-r1" x="1464" y="703.2" textLength="12.2" clip-path="url(#breeze-prod-image-pull-line-28)">
-</text><text class="breeze-prod-image-pull-r5" x="0" y="727.6" textLength="24.4" clip-path="url(#breeze-prod-image-pull-line-29)">╭─</text><text class="breeze-prod-image-pull-r5" x="24.4" y="727.6" textLength="195.2" clip-path="url(#breeze-prod-image-pull-line-29)">&#160;Common&#160;options&#160;</text><text class="breeze-prod-image-pull-r5" x="219.6" y="727.6" textLength="1220" clip-path="url(#breeze-prod-image-pull-line-29)">───────────────────────────────────────────────────────────── [...]
-</text><text class="breeze-prod-image-pull-r5" x="0" y="752" textLength="12.2" clip-path="url(#breeze-prod-image-pull-line-30)">│</text><text class="breeze-prod-image-pull-r4" x="24.4" y="752" textLength="109.8" clip-path="url(#breeze-prod-image-pull-line-30)">--verbose</text><text class="breeze-prod-image-pull-r6" x="158.6" y="752" textLength="24.4" clip-path="url(#breeze-prod-image-pull-line-30)">-v</text><text class="breeze-prod-image-pull-r1" x="207.4" y="752" textLength="585.6" clip [...]
-</text><text class="breeze-prod-image-pull-r5" x="0" y="776.4" textLength="12.2" clip-path="url(#breeze-prod-image-pull-line-31)">│</text><text class="breeze-prod-image-pull-r4" x="24.4" y="776.4" textLength="109.8" clip-path="url(#breeze-prod-image-pull-line-31)">--dry-run</text><text class="breeze-prod-image-pull-r6" x="158.6" y="776.4" textLength="24.4" clip-path="url(#breeze-prod-image-pull-line-31)">-D</text><text class="breeze-prod-image-pull-r1" x="207.4" y="776.4" textLength="719 [...]
-</text><text class="breeze-prod-image-pull-r5" x="0" y="800.8" textLength="12.2" clip-path="url(#breeze-prod-image-pull-line-32)">│</text><text class="breeze-prod-image-pull-r4" x="24.4" y="800.8" textLength="73.2" clip-path="url(#breeze-prod-image-pull-line-32)">--help</text><text class="breeze-prod-image-pull-r6" x="158.6" y="800.8" textLength="24.4" clip-path="url(#breeze-prod-image-pull-line-32)">-h</text><text class="breeze-prod-image-pull-r1" x="207.4" y="800.8" textLength="329.4"  [...]
-</text><text class="breeze-prod-image-pull-r5" x="0" y="825.2" textLength="1464" clip-path="url(#breeze-prod-image-pull-line-33)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-prod-image-pull-r1" x="1464" y="825.2" textLength="12.2" clip-path="url(#breeze-prod-image-pull-line-33)">
+</text><text class="breeze-prod-image-pull-r5" x="0" y="190.8" textLength="12.2" clip-path="url(#breeze-prod-image-pull-line-7)">│</text><text class="breeze-prod-image-pull-r4" x="24.4" y="190.8" textLength="97.6" clip-path="url(#breeze-prod-image-pull-line-7)">--python</text><text class="breeze-prod-image-pull-r6" x="244" y="190.8" textLength="24.4" clip-path="url(#breeze-prod-image-pull-line-7)">-p</text><text class="breeze-prod-image-pull-r1" x="292.8" y="190.8" textLength="732" clip- [...]
+</text><text class="breeze-prod-image-pull-r5" x="0" y="215.2" textLength="12.2" clip-path="url(#breeze-prod-image-pull-line-8)">│</text><text class="breeze-prod-image-pull-r7" x="292.8" y="215.2" textLength="732" clip-path="url(#breeze-prod-image-pull-line-8)">(&gt;3.8&lt;&#160;|&#160;3.9&#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; [...]
+</text><text class="breeze-prod-image-pull-r5" x="0" y="239.6" textLength="12.2" clip-path="url(#breeze-prod-image-pull-line-9)">│</text><text class="breeze-prod-image-pull-r5" x="292.8" y="239.6" textLength="732" clip-path="url(#breeze-prod-image-pull-line-9)">[default:&#160;3.8]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#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-pull-r5" x="0" y="264" textLength="12.2" clip-path="url(#breeze-prod-image-pull-line-10)">│</text><text class="breeze-prod-image-pull-r4" x="24.4" y="264" textLength="97.6" clip-path="url(#breeze-prod-image-pull-line-10)">--verify</text><text class="breeze-prod-image-pull-r1" x="292.8" y="264" textLength="158.6" clip-path="url(#breeze-prod-image-pull-line-10)">Verify&#160;image.</text><text class="breeze-prod-image-pull-r5" x="1451.8" y="264" textLen [...]
+</text><text class="breeze-prod-image-pull-r5" x="0" y="288.4" textLength="12.2" clip-path="url(#breeze-prod-image-pull-line-11)">│</text><text class="breeze-prod-image-pull-r4" x="24.4" y="288.4" textLength="195.2" clip-path="url(#breeze-prod-image-pull-line-11)">--wait-for-image</text><text class="breeze-prod-image-pull-r1" x="292.8" y="288.4" textLength="366" clip-path="url(#breeze-prod-image-pull-line-11)">Wait&#160;until&#160;image&#160;is&#160;available.</text><text class="breeze-p [...]
+</text><text class="breeze-prod-image-pull-r5" x="0" y="312.8" textLength="12.2" clip-path="url(#breeze-prod-image-pull-line-12)">│</text><text class="breeze-prod-image-pull-r4" x="24.4" y="312.8" textLength="183" clip-path="url(#breeze-prod-image-pull-line-12)">--tag-as-latest</text><text class="breeze-prod-image-pull-r1" x="292.8" y="312.8" textLength="1146.8" clip-path="url(#breeze-prod-image-pull-line-12)">Tags&#160;the&#160;image&#160;as&#160;latest&#160;and&#160;update&#160;checksu [...]
+</text><text class="breeze-prod-image-pull-r5" x="0" y="337.2" textLength="12.2" clip-path="url(#breeze-prod-image-pull-line-13)">│</text><text class="breeze-prod-image-pull-r1" x="292.8" y="337.2" textLength="231.8" clip-path="url(#breeze-prod-image-pull-line-13)">or&#160;pull&#160;image&#160;with&#160;</text><text class="breeze-prod-image-pull-r4" x="524.6" y="337.2" textLength="134.2" clip-path="url(#breeze-prod-image-pull-line-13)">--image-tag</text><text class="breeze-prod-image-pul [...]
+</text><text class="breeze-prod-image-pull-r5" x="0" y="361.6" textLength="1464" clip-path="url(#breeze-prod-image-pull-line-14)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-prod-image-pull-r1" x="1464" y="361.6" textLength="12.2" clip-path="url(#breeze-prod-image-pull-line-14)">
+</text><text class="breeze-prod-image-pull-r5" x="0" y="386" textLength="24.4" clip-path="url(#breeze-prod-image-pull-line-15)">╭─</text><text class="breeze-prod-image-pull-r5" x="24.4" y="386" textLength="219.6" clip-path="url(#breeze-prod-image-pull-line-15)">&#160;Parallel&#160;running&#160;</text><text class="breeze-prod-image-pull-r5" x="244" y="386" textLength="1195.6" clip-path="url(#breeze-prod-image-pull-line-15)">───────────────────────────────────────────────────────────────── [...]
+</text><text class="breeze-prod-image-pull-r5" x="0" y="410.4" textLength="12.2" clip-path="url(#breeze-prod-image-pull-line-16)">│</text><text class="breeze-prod-image-pull-r4" x="24.4" y="410.4" textLength="207.4" clip-path="url(#breeze-prod-image-pull-line-16)">--run-in-parallel</text><text class="breeze-prod-image-pull-r1" x="378.2" y="410.4" textLength="854" clip-path="url(#breeze-prod-image-pull-line-16)">Run&#160;the&#160;operation&#160;in&#160;parallel&#160;on&#160;all&#160;or&#1 [...]
+</text><text class="breeze-prod-image-pull-r5" x="0" y="434.8" textLength="12.2" clip-path="url(#breeze-prod-image-pull-line-17)">│</text><text class="breeze-prod-image-pull-r4" x="24.4" y="434.8" textLength="158.6" clip-path="url(#breeze-prod-image-pull-line-17)">--parallelism</text><text class="breeze-prod-image-pull-r1" x="378.2" y="434.8" textLength="915" clip-path="url(#breeze-prod-image-pull-line-17)">Maximum&#160;number&#160;of&#160;processes&#160;to&#160;use&#160;while&#160;runni [...]
+</text><text class="breeze-prod-image-pull-r5" x="0" y="459.2" textLength="12.2" clip-path="url(#breeze-prod-image-pull-line-18)">│</text><text class="breeze-prod-image-pull-r7" x="378.2" y="459.2" textLength="915" clip-path="url(#breeze-prod-image-pull-line-18)">(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;&#16 [...]
+</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-r5" x="378.2" y="483.6" textLength="915" clip-path="url(#breeze-prod-image-pull-line-19)">[default:&#160;4;&#160;1&lt;=x&lt;=8]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#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-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="207.4" clip-path="url(#breeze-prod-image-pull-line-20)">--python-versions</text><text class="breeze-prod-image-pull-r1" x="378.2" y="508" textLength="951.6" clip-path="url(#breeze-prod-image-pull-line-20)">Space&#160;separated&#160;list&#160;of&#160;python&#160;versions&#160;used&#160;f [...]
+</text><text class="breeze-prod-image-pull-r5" x="0" y="532.4" textLength="12.2" clip-path="url(#breeze-prod-image-pull-line-21)">│</text><text class="breeze-prod-image-pull-r5" x="378.2" y="532.4" textLength="951.6" clip-path="url(#breeze-prod-image-pull-line-21)">[default:&#160;3.8&#160;3.9&#160;3.10&#160;3.11&#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; [...]
+</text><text class="breeze-prod-image-pull-r5" x="0" y="556.8" textLength="12.2" clip-path="url(#breeze-prod-image-pull-line-22)">│</text><text class="breeze-prod-image-pull-r4" x="24.4" y="556.8" textLength="170.8" clip-path="url(#breeze-prod-image-pull-line-22)">--skip-cleanup</text><text class="breeze-prod-image-pull-r1" x="378.2" y="556.8" textLength="732" clip-path="url(#breeze-prod-image-pull-line-22)">Skip&#160;cleanup&#160;of&#160;temporary&#160;files&#160;created&#160;during&#16 [...]
+</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="207.4" clip-path="url(#breeze-prod-image-pull-line-23)">--debug-resources</text><text class="breeze-prod-image-pull-r1" x="378.2" y="581.2" textLength="768.6" clip-path="url(#breeze-prod-image-pull-line-23)">Whether&#160;to&#160;show&#160;resource&#160;information&#160;while&#160;ru [...]
+</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="305" clip-path="url(#breeze-prod-image-pull-line-24)">--include-success-outputs</text><text class="breeze-prod-image-pull-r1" x="378.2" y="605.6" textLength="927.2" clip-path="url(#breeze-prod-image-pull-line-24)">Whether&#160;to&#160;include&#160;outputs&#160;of&#160;successful&#16 [...]
+</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)">
+</text><text class="breeze-prod-image-pull-r5" x="0" y="654.4" textLength="24.4" clip-path="url(#breeze-prod-image-pull-line-26)">╭─</text><text class="breeze-prod-image-pull-r5" x="24.4" y="654.4" textLength="280.6" clip-path="url(#breeze-prod-image-pull-line-26)">&#160;Github&#160;authentication&#160;</text><text class="breeze-prod-image-pull-r5" x="305" y="654.4" textLength="1134.6" clip-path="url(#breeze-prod-image-pull-line-26)">────────────────────────────────────────────────────── [...]
+</text><text class="breeze-prod-image-pull-r5" x="0" y="678.8" textLength="12.2" clip-path="url(#breeze-prod-image-pull-line-27)">│</text><text class="breeze-prod-image-pull-r4" x="24.4" y="678.8" textLength="231.8" clip-path="url(#breeze-prod-image-pull-line-27)">--github-repository</text><text class="breeze-prod-image-pull-r6" x="280.6" y="678.8" textLength="24.4" clip-path="url(#breeze-prod-image-pull-line-27)">-g</text><text class="breeze-prod-image-pull-r1" x="329.4" y="678.8" textL [...]
+</text><text class="breeze-prod-image-pull-r5" x="0" y="703.2" textLength="12.2" clip-path="url(#breeze-prod-image-pull-line-28)">│</text><text class="breeze-prod-image-pull-r4" x="24.4" y="703.2" textLength="170.8" clip-path="url(#breeze-prod-image-pull-line-28)">--github-token</text><text class="breeze-prod-image-pull-r1" x="329.4" y="703.2" textLength="500.2" clip-path="url(#breeze-prod-image-pull-line-28)">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="727.6" textLength="1464" clip-path="url(#breeze-prod-image-pull-line-29)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-prod-image-pull-r1" x="1464" y="727.6" textLength="12.2" clip-path="url(#breeze-prod-image-pull-line-29)">
+</text><text class="breeze-prod-image-pull-r5" x="0" y="752" textLength="24.4" clip-path="url(#breeze-prod-image-pull-line-30)">╭─</text><text class="breeze-prod-image-pull-r5" x="24.4" y="752" textLength="195.2" clip-path="url(#breeze-prod-image-pull-line-30)">&#160;Common&#160;options&#160;</text><text class="breeze-prod-image-pull-r5" x="219.6" y="752" textLength="1220" clip-path="url(#breeze-prod-image-pull-line-30)">─────────────────────────────────────────────────────────────────── [...]
+</text><text class="breeze-prod-image-pull-r5" x="0" y="776.4" textLength="12.2" clip-path="url(#breeze-prod-image-pull-line-31)">│</text><text class="breeze-prod-image-pull-r4" x="24.4" y="776.4" textLength="109.8" clip-path="url(#breeze-prod-image-pull-line-31)">--verbose</text><text class="breeze-prod-image-pull-r6" x="158.6" y="776.4" textLength="24.4" clip-path="url(#breeze-prod-image-pull-line-31)">-v</text><text class="breeze-prod-image-pull-r1" x="207.4" y="776.4" textLength="585 [...]
+</text><text class="breeze-prod-image-pull-r5" x="0" y="800.8" textLength="12.2" clip-path="url(#breeze-prod-image-pull-line-32)">│</text><text class="breeze-prod-image-pull-r4" x="24.4" y="800.8" textLength="109.8" clip-path="url(#breeze-prod-image-pull-line-32)">--dry-run</text><text class="breeze-prod-image-pull-r6" x="158.6" y="800.8" textLength="24.4" clip-path="url(#breeze-prod-image-pull-line-32)">-D</text><text class="breeze-prod-image-pull-r1" x="207.4" y="800.8" textLength="719 [...]
+</text><text class="breeze-prod-image-pull-r5" x="0" y="825.2" textLength="12.2" clip-path="url(#breeze-prod-image-pull-line-33)">│</text><text class="breeze-prod-image-pull-r4" x="24.4" y="825.2" textLength="73.2" clip-path="url(#breeze-prod-image-pull-line-33)">--help</text><text class="breeze-prod-image-pull-r6" x="158.6" y="825.2" textLength="24.4" clip-path="url(#breeze-prod-image-pull-line-33)">-h</text><text class="breeze-prod-image-pull-r1" x="207.4" y="825.2" textLength="329.4"  [...]
+</text><text class="breeze-prod-image-pull-r5" x="0" y="849.6" textLength="1464" clip-path="url(#breeze-prod-image-pull-line-34)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-prod-image-pull-r1" x="1464" y="849.6" textLength="12.2" clip-path="url(#breeze-prod-image-pull-line-34)">
 </text>
     </g>
     </g>
diff --git a/dev/breeze/doc/images/output_prod-image_pull.txt b/dev/breeze/doc/images/output_prod-image_pull.txt
index ae34f765e6a..2a3753775f2 100644
--- a/dev/breeze/doc/images/output_prod-image_pull.txt
+++ b/dev/breeze/doc/images/output_prod-image_pull.txt
@@ -1 +1 @@
-54188d6d9544b2bd4cc9b77f55a34565
+cc93e1715ab169931a87c1d6b1157ddb
diff --git a/dev/breeze/doc/images/output_prod-image_verify.svg b/dev/breeze/doc/images/output_prod-image_verify.svg
index fae64feb265..1c1d66e01f7 100644
--- a/dev/breeze/doc/images/output_prod-image_verify.svg
+++ b/dev/breeze/doc/images/output_prod-image_verify.svg
@@ -160,8 +160,8 @@
 </text><text class="breeze-prod-image-verify-r1" x="1464" y="117.6" textLength="12.2" clip-path="url(#breeze-prod-image-verify-line-4)">
 </text><text class="breeze-prod-image-verify-r5" x="0" y="142" textLength="24.4" clip-path="url(#breeze-prod-image-verify-line-5)">╭─</text><text class="breeze-prod-image-verify-r5" x="24.4" y="142" textLength="244" clip-path="url(#breeze-prod-image-verify-line-5)">&#160;Verify&#160;image&#160;flags&#160;</text><text class="breeze-prod-image-verify-r5" x="268.4" y="142" textLength="1171.2" clip-path="url(#breeze-prod-image-verify-line-5)">───────────────────────────────────────────────── [...]
 </text><text class="breeze-prod-image-verify-r5" x="0" y="166.4" textLength="12.2" clip-path="url(#breeze-prod-image-verify-line-6)">│</text><text class="breeze-prod-image-verify-r4" x="24.4" y="166.4" textLength="146.4" clip-path="url(#breeze-prod-image-verify-line-6)">--image-name</text><text class="breeze-prod-image-verify-r6" x="195.2" y="166.4" textLength="24.4" clip-path="url(#breeze-prod-image-verify-line-6)">-n</text><text class="breeze-prod-image-verify-r1" x="244" y="166.4" tex [...]
-</text><text class="breeze-prod-image-verify-r5" x="0" y="190.8" textLength="12.2" clip-path="url(#breeze-prod-image-verify-line-7)">│</text><text class="breeze-prod-image-verify-r4" x="24.4" y="190.8" textLength="97.6" clip-path="url(#breeze-prod-image-verify-line-7)">--python</text><text class="breeze-prod-image-verify-r6" x="195.2" y="190.8" textLength="24.4" clip-path="url(#breeze-prod-image-verify-line-7)">-p</text><text class="breeze-prod-image-verify-r1" x="244" y="190.8" textLeng [...]
-</text><text class="breeze-prod-image-verify-r5" x="0" y="215.2" textLength="12.2" clip-path="url(#breeze-prod-image-verify-line-8)">│</text><text class="breeze-prod-image-verify-r5" x="244" y="215.2" textLength="732" clip-path="url(#breeze-prod-image-verify-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;& [...]
+</text><text class="breeze-prod-image-verify-r5" x="0" y="190.8" textLength="12.2" clip-path="url(#breeze-prod-image-verify-line-7)">│</text><text class="breeze-prod-image-verify-r4" x="24.4" y="190.8" textLength="97.6" clip-path="url(#breeze-prod-image-verify-line-7)">--python</text><text class="breeze-prod-image-verify-r6" x="195.2" y="190.8" textLength="24.4" clip-path="url(#breeze-prod-image-verify-line-7)">-p</text><text class="breeze-prod-image-verify-r1" x="244" y="190.8" textLeng [...]
+</text><text class="breeze-prod-image-verify-r5" x="0" y="215.2" textLength="12.2" clip-path="url(#breeze-prod-image-verify-line-8)">│</text><text class="breeze-prod-image-verify-r5" x="244" y="215.2" textLength="732" clip-path="url(#breeze-prod-image-verify-line-8)">[default:&#160;3.8]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#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-verify-r5" x="0" y="239.6" textLength="12.2" clip-path="url(#breeze-prod-image-verify-line-9)">│</text><text class="breeze-prod-image-verify-r4" x="24.4" y="239.6" textLength="146.4" clip-path="url(#breeze-prod-image-verify-line-9)">--slim-image</text><text class="breeze-prod-image-verify-r1" x="244" y="239.6" textLength="793" clip-path="url(#breeze-prod-image-verify-line-9)">The&#160;image&#160;to&#160;verify&#160;is&#160;slim&#160;and&#160;non-slim [...]
 </text><text class="breeze-prod-image-verify-r5" x="0" y="264" textLength="12.2" clip-path="url(#breeze-prod-image-verify-line-10)">│</text><text class="breeze-prod-image-verify-r4" x="24.4" y="264" textLength="134.2" clip-path="url(#breeze-prod-image-verify-line-10)">--image-tag</text><text class="breeze-prod-image-verify-r6" x="195.2" y="264" textLength="24.4" clip-path="url(#breeze-prod-image-verify-line-10)">-t</text><text class="breeze-prod-image-verify-r1" x="244" y="264" textLengt [...]
 </text><text class="breeze-prod-image-verify-r5" x="0" y="288.4" textLength="12.2" clip-path="url(#breeze-prod-image-verify-line-11)">│</text><text class="breeze-prod-image-verify-r4" x="24.4" y="288.4" textLength="73.2" clip-path="url(#breeze-prod-image-verify-line-11)">--pull</text><text class="breeze-prod-image-verify-r1" x="244" y="288.4" textLength="646.6" clip-path="url(#breeze-prod-image-verify-line-11)">Pull&#160;image&#160;is&#160;missing&#160;before&#160;attempting&#160;to&#160 [...]
@@ -172,7 +172,7 @@
 </text><text class="breeze-prod-image-verify-r5" x="0" y="410.4" textLength="12.2" clip-path="url(#breeze-prod-image-verify-line-16)">│</text><text class="breeze-prod-image-verify-r7" x="378.2" y="410.4" textLength="915" clip-path="url(#breeze-prod-image-verify-line-16)">(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;&# [...]
 </text><text class="breeze-prod-image-verify-r5" x="0" y="434.8" textLength="12.2" clip-path="url(#breeze-prod-image-verify-line-17)">│</text><text class="breeze-prod-image-verify-r5" x="378.2" y="434.8" textLength="915" clip-path="url(#breeze-prod-image-verify-line-17)">[default:&#160;4;&#160;1&lt;=x&lt;=8]&#160;&#160;&#160;&#160;&#160;&#160;&#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-verify-r5" x="0" y="459.2" textLength="12.2" clip-path="url(#breeze-prod-image-verify-line-18)">│</text><text class="breeze-prod-image-verify-r4" x="24.4" y="459.2" textLength="207.4" clip-path="url(#breeze-prod-image-verify-line-18)">--python-versions</text><text class="breeze-prod-image-verify-r1" x="378.2" y="459.2" textLength="951.6" clip-path="url(#breeze-prod-image-verify-line-18)">Space&#160;separated&#160;list&#160;of&#160;python&#160;version [...]
-</text><text class="breeze-prod-image-verify-r5" x="0" y="483.6" textLength="12.2" clip-path="url(#breeze-prod-image-verify-line-19)">│</text><text class="breeze-prod-image-verify-r5" x="378.2" y="483.6" textLength="951.6" clip-path="url(#breeze-prod-image-verify-line-19)">[default:&#160;3.9&#160;3.10&#160;3.11&#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;& [...]
+</text><text class="breeze-prod-image-verify-r5" x="0" y="483.6" textLength="12.2" clip-path="url(#breeze-prod-image-verify-line-19)">│</text><text class="breeze-prod-image-verify-r5" x="378.2" y="483.6" textLength="951.6" clip-path="url(#breeze-prod-image-verify-line-19)">[default:&#160;3.8&#160;3.9&#160;3.10&#160;3.11&#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;&#16 [...]
 </text><text class="breeze-prod-image-verify-r5" x="0" y="508" textLength="12.2" clip-path="url(#breeze-prod-image-verify-line-20)">│</text><text class="breeze-prod-image-verify-r4" x="24.4" y="508" textLength="170.8" clip-path="url(#breeze-prod-image-verify-line-20)">--skip-cleanup</text><text class="breeze-prod-image-verify-r1" x="378.2" y="508" textLength="732" clip-path="url(#breeze-prod-image-verify-line-20)">Skip&#160;cleanup&#160;of&#160;temporary&#160;files&#160;created&#160;duri [...]
 </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="927.2" clip-path="url(#breeze-prod-image-verify-line-22)">Whether&#160;to&#160;include&#160;outputs&#160;of&#160;su [...]
diff --git a/dev/breeze/doc/images/output_prod-image_verify.txt b/dev/breeze/doc/images/output_prod-image_verify.txt
index aaf8ba31ae5..ba10a9b94c4 100644
--- a/dev/breeze/doc/images/output_prod-image_verify.txt
+++ b/dev/breeze/doc/images/output_prod-image_verify.txt
@@ -1 +1 @@
-1c833a3c2dcde9f9edf165a958fccb47
+5f5c03c80a4e23ddc088d5e59f914dfe
diff --git a/dev/breeze/doc/images/output_release-management_generate-constraints.svg b/dev/breeze/doc/images/output_release-management_generate-constraints.svg
index a43b171ba21..b98df40c4a6 100644
--- a/dev/breeze/doc/images/output_release-management_generate-constraints.svg
+++ b/dev/breeze/doc/images/output_release-management_generate-constraints.svg
@@ -183,8 +183,8 @@
 </text><text class="breeze-release-management-generate-constraints-r5" x="0" y="386" textLength="12.2" clip-path="url(#breeze-release-management-generate-constraints-line-15)">│</text><text class="breeze-release-management-generate-constraints-r6" x="414.8" y="386" textLength="963.8" clip-path="url(#breeze-release-management-generate-constraints-line-15)">(TEXT)&#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-release-management-generate-constraints-r5" x="0" y="410.4" textLength="12.2" clip-path="url(#breeze-release-management-generate-constraints-line-16)">│</text><text class="breeze-release-management-generate-constraints-r5" x="414.8" y="410.4" textLength="963.8" clip-path="url(#breeze-release-management-generate-constraints-line-16)">[default:&#160;latest]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; [...]
 </text><text class="breeze-release-management-generate-constraints-r5" x="0" y="434.8" textLength="12.2" clip-path="url(#breeze-release-management-generate-constraints-line-17)">│</text><text class="breeze-release-management-generate-constraints-r4" x="24.4" y="434.8" textLength="97.6" clip-path="url(#breeze-release-management-generate-constraints-line-17)">--python</text><text class="breeze-release-management-generate-constraints-r7" x="366" y="434.8" textLength="24.4" clip-path="url(#b [...]
-</text><text class="breeze-release-management-generate-constraints-r5" x="0" y="459.2" textLength="12.2" clip-path="url(#breeze-release-management-generate-constraints-line-18)">│</text><text class="breeze-release-management-generate-constraints-r6" x="414.8" y="459.2" textLength="732" clip-path="url(#breeze-release-management-generate-constraints-line-18)">(&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;&# [...]
-</text><text class="breeze-release-management-generate-constraints-r5" x="0" y="483.6" textLength="12.2" clip-path="url(#breeze-release-management-generate-constraints-line-19)">│</text><text class="breeze-release-management-generate-constraints-r5" x="414.8" y="483.6" textLength="732" clip-path="url(#breeze-release-management-generate-constraints-line-19)">[default:&#160;3.9]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160 [...]
+</text><text class="breeze-release-management-generate-constraints-r5" x="0" y="459.2" textLength="12.2" clip-path="url(#breeze-release-management-generate-constraints-line-18)">│</text><text class="breeze-release-management-generate-constraints-r6" x="414.8" y="459.2" textLength="732" clip-path="url(#breeze-release-management-generate-constraints-line-18)">(&gt;3.8&lt;&#160;|&#160;3.9&#160;|&#160;3.10&#160;|&#160;3.11&#160;|&#160;3.12)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#16 [...]
+</text><text class="breeze-release-management-generate-constraints-r5" x="0" y="483.6" textLength="12.2" clip-path="url(#breeze-release-management-generate-constraints-line-19)">│</text><text class="breeze-release-management-generate-constraints-r5" x="414.8" y="483.6" textLength="732" clip-path="url(#breeze-release-management-generate-constraints-line-19)">[default:&#160;3.8]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160 [...]
 </text><text class="breeze-release-management-generate-constraints-r5" x="0" y="508" textLength="12.2" clip-path="url(#breeze-release-management-generate-constraints-line-20)">│</text><text class="breeze-release-management-generate-constraints-r4" x="24.4" y="508" textLength="97.6" clip-path="url(#breeze-release-management-generate-constraints-line-20)">--use-uv</text><text class="breeze-release-management-generate-constraints-r1" x="122" y="508" textLength="12.2" clip-path="url(#breeze- [...]
 </text><text class="breeze-release-management-generate-constraints-r5" x="0" y="532.4" textLength="1464" clip-path="url(#breeze-release-management-generate-constraints-line-21)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-release-management-generate-constraints-r1" x="1464" y="532.4" textLength="12.2" clip-path="url(#breeze-release-management-generate-constraints-line-21)">
 </text><text class="breeze-release-management-generate-constraints-r5" x="0" y="556.8" textLength="24.4" clip-path="url(#breeze-release-management-generate-constraints-line-22)">╭─</text><text class="breeze-release-management-generate-constraints-r5" x="24.4" y="556.8" textLength="219.6" clip-path="url(#breeze-release-management-generate-constraints-line-22)">&#160;Parallel&#160;running&#160;</text><text class="breeze-release-management-generate-constraints-r5" x="244" y="556.8" textLeng [...]
@@ -192,7 +192,7 @@
 </text><text class="breeze-release-management-generate-constraints-r5" x="0" y="605.6" textLength="12.2" clip-path="url(#breeze-release-management-generate-constraints-line-24)">│</text><text class="breeze-release-management-generate-constraints-r4" x="24.4" y="605.6" textLength="158.6" clip-path="url(#breeze-release-management-generate-constraints-line-24)">--parallelism</text><text class="breeze-release-management-generate-constraints-r1" x="280.6" y="605.6" textLength="915" clip-path= [...]
 </text><text class="breeze-release-management-generate-constraints-r5" x="0" y="630" textLength="12.2" clip-path="url(#breeze-release-management-generate-constraints-line-25)">│</text><text class="breeze-release-management-generate-constraints-r5" x="280.6" y="630" textLength="915" clip-path="url(#breeze-release-management-generate-constraints-line-25)">[default:&#160;4;&#160;1&lt;=x&lt;=8]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#1 [...]
 </text><text class="breeze-release-management-generate-constraints-r5" x="0" y="654.4" textLength="12.2" clip-path="url(#breeze-release-management-generate-constraints-line-26)">│</text><text class="breeze-release-management-generate-constraints-r4" x="24.4" y="654.4" textLength="207.4" clip-path="url(#breeze-release-management-generate-constraints-line-26)">--python-versions</text><text class="breeze-release-management-generate-constraints-r1" x="280.6" y="654.4" textLength="951.6" clip [...]
-</text><text class="breeze-release-management-generate-constraints-r5" x="0" y="678.8" textLength="12.2" clip-path="url(#breeze-release-management-generate-constraints-line-27)">│</text><text class="breeze-release-management-generate-constraints-r5" x="280.6" y="678.8" textLength="951.6" clip-path="url(#breeze-release-management-generate-constraints-line-27)">[default:&#160;3.9&#160;3.10&#160;3.11&#160;3.12]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#1 [...]
+</text><text class="breeze-release-management-generate-constraints-r5" x="0" y="678.8" textLength="12.2" clip-path="url(#breeze-release-management-generate-constraints-line-27)">│</text><text class="breeze-release-management-generate-constraints-r5" x="280.6" y="678.8" textLength="951.6" clip-path="url(#breeze-release-management-generate-constraints-line-27)">[default:&#160;3.8&#160;3.9&#160;3.10&#160;3.11&#160;3.12]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; [...]
 </text><text class="breeze-release-management-generate-constraints-r5" x="0" y="703.2" textLength="12.2" clip-path="url(#breeze-release-management-generate-constraints-line-28)">│</text><text class="breeze-release-management-generate-constraints-r4" x="24.4" y="703.2" textLength="207.4" clip-path="url(#breeze-release-management-generate-constraints-line-28)">--run-in-parallel</text><text class="breeze-release-management-generate-constraints-r1" x="280.6" y="703.2" textLength="854" clip-p [...]
 </text><text class="breeze-release-management-generate-constraints-r5" x="0" y="727.6" textLength="12.2" clip-path="url(#breeze-release-management-generate-constraints-line-29)">│</text><text class="breeze-release-management-generate-constraints-r4" x="24.4" y="727.6" textLength="170.8" clip-path="url(#breeze-release-management-generate-constraints-line-29)">--skip-cleanup</text><text class="breeze-release-management-generate-constraints-r1" x="280.6" y="727.6" textLength="732" clip-path [...]
 </text><text class="breeze-release-management-generate-constraints-r5" x="0" y="752" textLength="1464" clip-path="url(#breeze-release-management-generate-constraints-line-30)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-release-management-generate-constraints-r1" x="1464" y="752" textLength="12.2" clip-path="url(#breeze-release-management-generate-constraints-line-30)">
diff --git a/dev/breeze/doc/images/output_release-management_generate-constraints.txt b/dev/breeze/doc/images/output_release-management_generate-constraints.txt
index 5af8f1b6f85..e804b5c36f0 100644
--- a/dev/breeze/doc/images/output_release-management_generate-constraints.txt
+++ b/dev/breeze/doc/images/output_release-management_generate-constraints.txt
@@ -1 +1 @@
-ac54d7c8e352e6012280df2649354c3b
+f1ab55e1bb009a39f13cd054b913fca3
diff --git a/dev/breeze/doc/images/output_release-management_install-provider-packages.svg b/dev/breeze/doc/images/output_release-management_install-provider-packages.svg
index 65765722c1d..9610cac4f73 100644
--- a/dev/breeze/doc/images/output_release-management_install-provider-packages.svg
+++ b/dev/breeze/doc/images/output_release-management_install-provider-packages.svg
@@ -1,4 +1,4 @@
-<svg class="rich-terminal" viewBox="0 0 1482 1611.6" xmlns="http://www.w3.org/2000/svg">
+<svg class="rich-terminal" viewBox="0 0 1482 1636.0" 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-install-provider-packages-clip-terminal">
-      <rect x="0" y="0" width="1463.0" height="1560.6" />
+      <rect x="0" y="0" width="1463.0" height="1585.0" />
     </clipPath>
     <clipPath id="breeze-release-management-install-provider-packages-line-0">
     <rect x="0" y="1.5" width="1464" height="24.65"/>
@@ -234,9 +234,12 @@
 <clipPath id="breeze-release-management-install-provider-packages-line-62">
     <rect x="0" y="1514.3" width="1464" height="24.65"/>
             </clipPath>
+<clipPath id="breeze-release-management-install-provider-packages-line-63">
+    <rect x="0" y="1538.7" 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="1609.6" rx="8"/><text class="breeze-release-management-install-provider-packages-title" fill="#c5c8c6" text-anchor="middle" x="740" y="27">Command:&#160;release-management&#160;install-provider-packages</text>
+    <rect fill="#292929" stroke="rgba(255,255,255,0.35)" stroke-width="1" x="1" y="1" width="1480" height="1634" rx="8"/><text class="breeze-release-management-install-provider-packages-title" fill="#c5c8c6" text-anchor="middle" x="740" y="27">Command:&#160;release-management&#160;install-provider-packages</text>
             <g transform="translate(26,22)">
             <circle cx="0" cy="0" r="7" fill="#ff5f57"/>
             <circle cx="22" cy="0" r="7" fill="#febc2e"/>
@@ -252,64 +255,65 @@
 </text><text class="breeze-release-management-install-provider-packages-r1" x="12.2" y="93.2" textLength="646.6" clip-path="url(#breeze-release-management-install-provider-packages-line-3)">Installs&#160;provider&#160;packages&#160;that&#160;can&#160;be&#160;found&#160;in&#160;dist.</text><text class="breeze-release-management-install-provider-packages-r1" x="1464" y="93.2" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-packages-line-3)">
 </text><text class="breeze-release-management-install-provider-packages-r1" x="1464" y="117.6" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-packages-line-4)">
 </text><text class="breeze-release-management-install-provider-packages-r5" x="0" y="142" textLength="24.4" clip-path="url(#breeze-release-management-install-provider-packages-line-5)">╭─</text><text class="breeze-release-management-install-provider-packages-r5" x="24.4" y="142" textLength="353.8" clip-path="url(#breeze-release-management-install-provider-packages-line-5)">&#160;Provider&#160;installation&#160;flags&#160;</text><text class="breeze-release-management-install-provider-pack [...]
-</text><text class="breeze-release-management-install-provider-packages-r5" x="0" y="166.4" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-packages-line-6)">│</text><text class="breeze-release-management-install-provider-packages-r4" x="24.4" y="166.4" textLength="97.6" clip-path="url(#breeze-release-management-install-provider-packages-line-6)">--python</text><text class="breeze-release-management-install-provider-packages-r6" x="280.6" y="166.4" textLength [...]
-</text><text class="breeze-release-management-install-provider-packages-r5" x="0" y="190.8" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-packages-line-7)">│</text><text class="breeze-release-management-install-provider-packages-r5" x="329.4" y="190.8" textLength="732" clip-path="url(#breeze-release-management-install-provider-packages-line-7)">[default:&#160;3.9]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160 [...]
-</text><text class="breeze-release-management-install-provider-packages-r5" x="0" y="215.2" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-packages-line-8)">│</text><text class="breeze-release-management-install-provider-packages-r4" x="24.4" y="215.2" textLength="183" clip-path="url(#breeze-release-management-install-provider-packages-line-8)">--mount-sources</text><text class="breeze-release-management-install-provider-packages-r1" x="329.4" y="215.2" text [...]
-</text><text class="breeze-release-management-install-provider-packages-r5" x="0" y="239.6" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-packages-line-9)">│</text><text class="breeze-release-management-install-provider-packages-r1" x="329.4" y="239.6" textLength="1110.2" clip-path="url(#breeze-release-management-install-provider-packages-line-9)">selected).&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160 [...]
-</text><text class="breeze-release-management-install-provider-packages-r5" x="0" y="264" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-packages-line-10)">│</text><text class="breeze-release-management-install-provider-packages-r7" x="329.4" y="264" textLength="1110.2" clip-path="url(#breeze-release-management-install-provider-packages-line-10)">(selected&#160;|&#160;all&#160;|&#160;skip&#160;|&#160;remove&#160;|&#160;tests&#160;|&#160;providers-and-tests)& [...]
-</text><text class="breeze-release-management-install-provider-packages-r5" x="0" y="288.4" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-packages-line-11)">│</text><text class="breeze-release-management-install-provider-packages-r5" x="329.4" y="288.4" textLength="1110.2" clip-path="url(#breeze-release-management-install-provider-packages-line-11)">[default:&#160;selected]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;& [...]
-</text><text class="breeze-release-management-install-provider-packages-r5" x="0" y="312.8" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-packages-line-12)">│</text><text class="breeze-release-management-install-provider-packages-r4" x="24.4" y="312.8" textLength="231.8" clip-path="url(#breeze-release-management-install-provider-packages-line-12)">--github-repository</text><text class="breeze-release-management-install-provider-packages-r6" x="280.6" y="312 [...]
-</text><text class="breeze-release-management-install-provider-packages-r5" x="0" y="337.2" textLength="1464" clip-path="url(#breeze-release-management-install-provider-packages-line-13)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-release-management-install-provider-packages-r1" x="1464" y="337.2" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-packages-line-13)">
-</text><text class="breeze-release-management-install-provider-packages-r5" x="0" y="361.6" textLength="24.4" clip-path="url(#breeze-release-management-install-provider-packages-line-14)">╭─</text><text class="breeze-release-management-install-provider-packages-r5" x="24.4" y="361.6" textLength="512.4" clip-path="url(#breeze-release-management-install-provider-packages-line-14)">&#160;Installing&#160;packages&#160;after&#160;entering&#160;shell&#160;</text><text class="breeze-release-man [...]
-</text><text class="breeze-release-management-install-provider-packages-r5" x="0" y="386" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-packages-line-15)">│</text><text class="breeze-release-management-install-provider-packages-r4" x="24.4" y="386" textLength="366" clip-path="url(#breeze-release-management-install-provider-packages-line-15)">--airflow-constraints-location</text><text class="breeze-release-management-install-provider-packages-r1" x="475.8" y [...]
-</text><text class="breeze-release-management-install-provider-packages-r5" x="0" y="410.4" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-packages-line-16)">│</text><text class="breeze-release-management-install-provider-packages-r7" x="475.8" y="410.4" textLength="902.8" clip-path="url(#breeze-release-management-install-provider-packages-line-16)">(TEXT)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&# [...]
-</text><text class="breeze-release-management-install-provider-packages-r5" x="0" y="434.8" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-packages-line-17)">│</text><text class="breeze-release-management-install-provider-packages-r4" x="24.4" y="434.8" textLength="317.2" clip-path="url(#breeze-release-management-install-provider-packages-line-17)">--airflow-constraints-mode</text><text class="breeze-release-management-install-provider-packages-r1" x="475.8" [...]
-</text><text class="breeze-release-management-install-provider-packages-r5" x="0" y="459.2" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-packages-line-18)">│</text><text class="breeze-release-management-install-provider-packages-r7" x="475.8" y="459.2" textLength="866.2" clip-path="url(#breeze-release-management-install-provider-packages-line-18)">(constraints-source-providers&#160;|&#160;constraints&#160;|&#160;constraints-no-providers)</text><text class= [...]
-</text><text class="breeze-release-management-install-provider-packages-r5" x="0" y="483.6" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-packages-line-19)">│</text><text class="breeze-release-management-install-provider-packages-r5" x="475.8" y="483.6" textLength="866.2" clip-path="url(#breeze-release-management-install-provider-packages-line-19)">[default:&#160;constraints-source-providers]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; [...]
-</text><text class="breeze-release-management-install-provider-packages-r5" x="0" y="508" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-packages-line-20)">│</text><text class="breeze-release-management-install-provider-packages-r4" x="24.4" y="508" textLength="378.2" clip-path="url(#breeze-release-management-install-provider-packages-line-20)">--airflow-constraints-reference</text><text class="breeze-release-management-install-provider-packages-r1" x="475.8 [...]
-</text><text class="breeze-release-management-install-provider-packages-r5" x="0" y="532.4" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-packages-line-21)">│</text><text class="breeze-release-management-install-provider-packages-r1" x="475.8" y="532.4" textLength="963.8" clip-path="url(#breeze-release-management-install-provider-packages-line-21)">constraints&#160;URL).&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#16 [...]
-</text><text class="breeze-release-management-install-provider-packages-r5" x="0" y="556.8" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-packages-line-22)">│</text><text class="breeze-release-management-install-provider-packages-r7" x="475.8" y="556.8" textLength="963.8" clip-path="url(#breeze-release-management-install-provider-packages-line-22)">(TEXT)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&# [...]
-</text><text class="breeze-release-management-install-provider-packages-r5" x="0" y="581.2" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-packages-line-23)">│</text><text class="breeze-release-management-install-provider-packages-r4" x="24.4" y="581.2" textLength="195.2" clip-path="url(#breeze-release-management-install-provider-packages-line-23)">--airflow-extras</text><text class="breeze-release-management-install-provider-packages-r1" x="475.8" y="581.2" [...]
-</text><text class="breeze-release-management-install-provider-packages-r5" x="0" y="605.6" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-packages-line-24)">│</text><text class="breeze-release-management-install-provider-packages-r4" x="24.4" y="605.6" textLength="317.2" clip-path="url(#breeze-release-management-install-provider-packages-line-24)">--airflow-skip-constraints</text><text class="breeze-release-management-install-provider-packages-r1" x="475.8" [...]
-</text><text class="breeze-release-management-install-provider-packages-r5" x="0" y="630" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-packages-line-25)">│</text><text class="breeze-release-management-install-provider-packages-r4" x="24.4" y="630" textLength="341.6" clip-path="url(#breeze-release-management-install-provider-packages-line-25)">--clean-airflow-installation</text><text class="breeze-release-management-install-provider-packages-r1" x="475.8" y [...]
-</text><text class="breeze-release-management-install-provider-packages-r5" x="0" y="654.4" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-packages-line-26)">│</text><text class="breeze-release-management-install-provider-packages-r4" x="475.8" y="654.4" textLength="256.2" clip-path="url(#breeze-release-management-install-provider-packages-line-26)">--use-airflow-version</text><text class="breeze-release-management-install-provider-packages-r1" x="732" y="65 [...]
-</text><text class="breeze-release-management-install-provider-packages-r5" x="0" y="678.8" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-packages-line-27)">│</text><text class="breeze-release-management-install-provider-packages-r4" x="24.4" y="678.8" textLength="341.6" clip-path="url(#breeze-release-management-install-provider-packages-line-27)">--install-selected-providers</text><text class="breeze-release-management-install-provider-packages-r1" x="475. [...]
-</text><text class="breeze-release-management-install-provider-packages-r5" x="0" y="703.2" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-packages-line-28)">│</text><text class="breeze-release-management-install-provider-packages-r4" x="475.8" y="703.2" textLength="292.8" clip-path="url(#breeze-release-management-install-provider-packages-line-28)">--use-packages-from-dist</text><text class="breeze-release-management-install-provider-packages-r1" x="768.6"  [...]
-</text><text class="breeze-release-management-install-provider-packages-r5" x="0" y="727.6" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-packages-line-29)">│</text><text class="breeze-release-management-install-provider-packages-r7" x="475.8" y="727.6" textLength="963.8" clip-path="url(#breeze-release-management-install-provider-packages-line-29)">(TEXT)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&# [...]
-</text><text class="breeze-release-management-install-provider-packages-r5" x="0" y="752" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-packages-line-30)">│</text><text class="breeze-release-management-install-provider-packages-r4" x="24.4" y="752" textLength="195.2" clip-path="url(#breeze-release-management-install-provider-packages-line-30)">--package-format</text><text class="breeze-release-management-install-provider-packages-r1" x="475.8" y="752" textL [...]
-</text><text class="breeze-release-management-install-provider-packages-r5" x="0" y="776.4" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-packages-line-31)">│</text><text class="breeze-release-management-install-provider-packages-r5" x="475.8" y="776.4" textLength="658.8" clip-path="url(#breeze-release-management-install-provider-packages-line-31)">[default:&#160;wheel]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160 [...]
-</text><text class="breeze-release-management-install-provider-packages-r5" x="0" y="800.8" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-packages-line-32)">│</text><text class="breeze-release-management-install-provider-packages-r4" x="24.4" y="800.8" textLength="390.4" clip-path="url(#breeze-release-management-install-provider-packages-line-32)">--providers-constraints-location</text><text class="breeze-release-management-install-provider-packages-r1" x=" [...]
-</text><text class="breeze-release-management-install-provider-packages-r5" x="0" y="825.2" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-packages-line-33)">│</text><text class="breeze-release-management-install-provider-packages-r7" x="475.8" y="825.2" textLength="927.2" clip-path="url(#breeze-release-management-install-provider-packages-line-33)">(TEXT)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&# [...]
-</text><text class="breeze-release-management-install-provider-packages-r5" x="0" y="849.6" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-packages-line-34)">│</text><text class="breeze-release-management-install-provider-packages-r4" x="24.4" y="849.6" textLength="341.6" clip-path="url(#breeze-release-management-install-provider-packages-line-34)">--providers-constraints-mode</text><text class="breeze-release-management-install-provider-packages-r1" x="475. [...]
-</text><text class="breeze-release-management-install-provider-packages-r5" x="0" y="874" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-packages-line-35)">│</text><text class="breeze-release-management-install-provider-packages-r7" x="475.8" y="874" textLength="866.2" clip-path="url(#breeze-release-management-install-provider-packages-line-35)">(constraints-source-providers&#160;|&#160;constraints&#160;|&#160;constraints-no-providers)</text><text class="bre [...]
-</text><text class="breeze-release-management-install-provider-packages-r5" x="0" y="898.4" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-packages-line-36)">│</text><text class="breeze-release-management-install-provider-packages-r5" x="475.8" y="898.4" textLength="866.2" clip-path="url(#breeze-release-management-install-provider-packages-line-36)">[default:&#160;constraints-source-providers]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; [...]
-</text><text class="breeze-release-management-install-provider-packages-r5" x="0" y="922.8" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-packages-line-37)">│</text><text class="breeze-release-management-install-provider-packages-r4" x="24.4" y="922.8" textLength="402.6" clip-path="url(#breeze-release-management-install-provider-packages-line-37)">--providers-constraints-reference</text><text class="breeze-release-management-install-provider-packages-r1" x= [...]
-</text><text class="breeze-release-management-install-provider-packages-r5" x="0" y="947.2" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-packages-line-38)">│</text><text class="breeze-release-management-install-provider-packages-r1" x="475.8" y="947.2" textLength="963.8" clip-path="url(#breeze-release-management-install-provider-packages-line-38)">constraints&#160;URL).&#160;Can&#160;be&#160;&#x27;default&#x27;&#160;in&#160;which&#160;case&#160;the&#160;de [...]
-</text><text class="breeze-release-management-install-provider-packages-r5" x="0" y="971.6" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-packages-line-39)">│</text><text class="breeze-release-management-install-provider-packages-r1" x="475.8" y="971.6" textLength="963.8" clip-path="url(#breeze-release-management-install-provider-packages-line-39)">constraints-reference&#160;is&#160;used.&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#16 [...]
-</text><text class="breeze-release-management-install-provider-packages-r5" x="0" y="996" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-packages-line-40)">│</text><text class="breeze-release-management-install-provider-packages-r7" x="475.8" y="996" textLength="963.8" clip-path="url(#breeze-release-management-install-provider-packages-line-40)">(TEXT)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; [...]
-</text><text class="breeze-release-management-install-provider-packages-r5" x="0" y="1020.4" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-packages-line-41)">│</text><text class="breeze-release-management-install-provider-packages-r4" x="24.4" y="1020.4" textLength="341.6" clip-path="url(#breeze-release-management-install-provider-packages-line-41)">--providers-skip-constraints</text><text class="breeze-release-management-install-provider-packages-r1" x="47 [...]
-</text><text class="breeze-release-management-install-provider-packages-r5" x="0" y="1044.8" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-packages-line-42)">│</text><text class="breeze-release-management-install-provider-packages-r4" x="24.4" y="1044.8" textLength="256.2" clip-path="url(#breeze-release-management-install-provider-packages-line-42)">--use-airflow-version</text><text class="breeze-release-management-install-provider-packages-r1" x="475.8" y= [...]
-</text><text class="breeze-release-management-install-provider-packages-r5" x="0" y="1069.2" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-packages-line-43)">│</text><text class="breeze-release-management-install-provider-packages-r1" x="475.8" y="1069.2" textLength="963.8" clip-path="url(#breeze-release-management-install-provider-packages-line-43)">install&#160;from&#160;PyPI),&#160;`none`,&#160;`wheel`,&#160;or&#160;`sdist`&#160;to&#160;install&#160;from [...]
-</text><text class="breeze-release-management-install-provider-packages-r5" x="0" y="1093.6" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-packages-line-44)">│</text><text class="breeze-release-management-install-provider-packages-r1" x="475.8" y="1093.6" textLength="963.8" clip-path="url(#breeze-release-management-install-provider-packages-line-44)">or&#160;VCS&#160;URL&#160;to&#160;install&#160;from&#160;(https://pip.pypa.io/en/stable/topics/vcs-support/) [...]
-</text><text class="breeze-release-management-install-provider-packages-r5" x="0" y="1118" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-packages-line-45)">│</text><text class="breeze-release-management-install-provider-packages-r1" x="475.8" y="1118" textLength="97.6" clip-path="url(#breeze-release-management-install-provider-packages-line-45)">Implies&#160;</text><text class="breeze-release-management-install-provider-packages-r4" x="573.4" y="1118" textL [...]
-</text><text class="breeze-release-management-install-provider-packages-r5" x="0" y="1142.4" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-packages-line-46)">│</text><text class="breeze-release-management-install-provider-packages-r7" x="475.8" y="1142.4" textLength="963.8" clip-path="url(#breeze-release-management-install-provider-packages-line-46)">(none&#160;|&#160;wheel&#160;|&#160;sdist&#160;|&#160;&lt;airflow_version&gt;)&#160;&#160;&#160;&#160;&#160; [...]
-</text><text class="breeze-release-management-install-provider-packages-r5" x="0" y="1166.8" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-packages-line-47)">│</text><text class="breeze-release-management-install-provider-packages-r4" x="24.4" y="1166.8" textLength="292.8" clip-path="url(#breeze-release-management-install-provider-packages-line-47)">--use-packages-from-dist</text><text class="breeze-release-management-install-provider-packages-r1" x="475.8" [...]
-</text><text class="breeze-release-management-install-provider-packages-r5" x="0" y="1191.2" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-packages-line-48)">│</text><text class="breeze-release-management-install-provider-packages-r1" x="475.8" y="1191.2" textLength="963.8" clip-path="url(#breeze-release-management-install-provider-packages-line-48)">folder&#160;when&#160;entering&#160;breeze.&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160 [...]
-</text><text class="breeze-release-management-install-provider-packages-r5" x="0" y="1215.6" textLength="1464" clip-path="url(#breeze-release-management-install-provider-packages-line-49)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-release-management-install-provider-packages-r1" x="1464" y="1215.6" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-packages-l [...]
-</text><text class="breeze-release-management-install-provider-packages-r5" x="0" y="1240" textLength="24.4" clip-path="url(#breeze-release-management-install-provider-packages-line-50)">╭─</text><text class="breeze-release-management-install-provider-packages-r5" x="24.4" y="1240" textLength="219.6" clip-path="url(#breeze-release-management-install-provider-packages-line-50)">&#160;Parallel&#160;running&#160;</text><text class="breeze-release-management-install-provider-packages-r5" x=" [...]
-</text><text class="breeze-release-management-install-provider-packages-r5" x="0" y="1264.4" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-packages-line-51)">│</text><text class="breeze-release-management-install-provider-packages-r4" x="24.4" y="1264.4" textLength="207.4" clip-path="url(#breeze-release-management-install-provider-packages-line-51)">--run-in-parallel</text><text class="breeze-release-management-install-provider-packages-r1" x="378.2" y="126 [...]
-</text><text class="breeze-release-management-install-provider-packages-r5" x="0" y="1288.8" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-packages-line-52)">│</text><text class="breeze-release-management-install-provider-packages-r4" x="24.4" y="1288.8" textLength="158.6" clip-path="url(#breeze-release-management-install-provider-packages-line-52)">--parallelism</text><text class="breeze-release-management-install-provider-packages-r1" x="378.2" y="1288.8" [...]
-</text><text class="breeze-release-management-install-provider-packages-r5" x="0" y="1313.2" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-packages-line-53)">│</text><text class="breeze-release-management-install-provider-packages-r7" x="378.2" y="1313.2" textLength="915" clip-path="url(#breeze-release-management-install-provider-packages-line-53)">(INTEGER&#160;RANGE)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; [...]
-</text><text class="breeze-release-management-install-provider-packages-r5" x="0" y="1337.6" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-packages-line-54)">│</text><text class="breeze-release-management-install-provider-packages-r5" x="378.2" y="1337.6" textLength="915" clip-path="url(#breeze-release-management-install-provider-packages-line-54)">[default:&#160;4;&#160;1&lt;=x&lt;=8]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;& [...]
-</text><text class="breeze-release-management-install-provider-packages-r5" x="0" y="1362" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-packages-line-55)">│</text><text class="breeze-release-management-install-provider-packages-r4" x="24.4" y="1362" textLength="170.8" clip-path="url(#breeze-release-management-install-provider-packages-line-55)">--skip-cleanup</text><text class="breeze-release-management-install-provider-packages-r1" x="378.2" y="1362" text [...]
-</text><text class="breeze-release-management-install-provider-packages-r5" x="0" y="1386.4" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-packages-line-56)">│</text><text class="breeze-release-management-install-provider-packages-r4" x="24.4" y="1386.4" textLength="305" clip-path="url(#breeze-release-management-install-provider-packages-line-56)">--include-success-outputs</text><text class="breeze-release-management-install-provider-packages-r1" x="378.2"  [...]
-</text><text class="breeze-release-management-install-provider-packages-r5" x="0" y="1410.8" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-packages-line-57)">│</text><text class="breeze-release-management-install-provider-packages-r4" x="24.4" y="1410.8" textLength="207.4" clip-path="url(#breeze-release-management-install-provider-packages-line-57)">--debug-resources</text><text class="breeze-release-management-install-provider-packages-r1" x="378.2" y="141 [...]
-</text><text class="breeze-release-management-install-provider-packages-r5" x="0" y="1435.2" textLength="1464" clip-path="url(#breeze-release-management-install-provider-packages-line-58)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-release-management-install-provider-packages-r1" x="1464" y="1435.2" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-packages-l [...]
-</text><text class="breeze-release-management-install-provider-packages-r5" x="0" y="1459.6" textLength="24.4" clip-path="url(#breeze-release-management-install-provider-packages-line-59)">╭─</text><text class="breeze-release-management-install-provider-packages-r5" x="24.4" y="1459.6" textLength="195.2" clip-path="url(#breeze-release-management-install-provider-packages-line-59)">&#160;Common&#160;options&#160;</text><text class="breeze-release-management-install-provider-packages-r5" x [...]
-</text><text class="breeze-release-management-install-provider-packages-r5" x="0" y="1484" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-packages-line-60)">│</text><text class="breeze-release-management-install-provider-packages-r4" x="24.4" y="1484" textLength="109.8" clip-path="url(#breeze-release-management-install-provider-packages-line-60)">--dry-run</text><text class="breeze-release-management-install-provider-packages-r6" x="158.6" y="1484" textLengt [...]
-</text><text class="breeze-release-management-install-provider-packages-r5" x="0" y="1508.4" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-packages-line-61)">│</text><text class="breeze-release-management-install-provider-packages-r4" x="24.4" y="1508.4" textLength="109.8" clip-path="url(#breeze-release-management-install-provider-packages-line-61)">--verbose</text><text class="breeze-release-management-install-provider-packages-r6" x="158.6" y="1508.4" tex [...]
-</text><text class="breeze-release-management-install-provider-packages-r5" x="0" y="1532.8" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-packages-line-62)">│</text><text class="breeze-release-management-install-provider-packages-r4" x="24.4" y="1532.8" textLength="73.2" clip-path="url(#breeze-release-management-install-provider-packages-line-62)">--help</text><text class="breeze-release-management-install-provider-packages-r6" x="158.6" y="1532.8" textLen [...]
-</text><text class="breeze-release-management-install-provider-packages-r5" x="0" y="1557.2" textLength="1464" clip-path="url(#breeze-release-management-install-provider-packages-line-63)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-release-management-install-provider-packages-r1" x="1464" y="1557.2" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-packages-l [...]
+</text><text class="breeze-release-management-install-provider-packages-r5" x="0" y="166.4" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-packages-line-6)">│</text><text class="breeze-release-management-install-provider-packages-r4" x="24.4" y="166.4" textLength="97.6" clip-path="url(#breeze-release-management-install-provider-packages-line-6)">--python</text><text class="breeze-release-management-install-provider-packages-r6" x="280.6" y="166.4" textLength [...]
+</text><text class="breeze-release-management-install-provider-packages-r5" x="0" y="190.8" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-packages-line-7)">│</text><text class="breeze-release-management-install-provider-packages-r7" x="329.4" y="190.8" textLength="732" clip-path="url(#breeze-release-management-install-provider-packages-line-7)">(&gt;3.8&lt;&#160;|&#160;3.9&#160;|&#160;3.10&#160;|&#160;3.11&#160;|&#160;3.12)&#160;&#160;&#160;&#160;&#160;&#16 [...]
+</text><text class="breeze-release-management-install-provider-packages-r5" x="0" y="215.2" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-packages-line-8)">│</text><text class="breeze-release-management-install-provider-packages-r5" x="329.4" y="215.2" textLength="732" clip-path="url(#breeze-release-management-install-provider-packages-line-8)">[default:&#160;3.8]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160 [...]
+</text><text class="breeze-release-management-install-provider-packages-r5" x="0" y="239.6" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-packages-line-9)">│</text><text class="breeze-release-management-install-provider-packages-r4" x="24.4" y="239.6" textLength="183" clip-path="url(#breeze-release-management-install-provider-packages-line-9)">--mount-sources</text><text class="breeze-release-management-install-provider-packages-r1" x="329.4" y="239.6" text [...]
+</text><text class="breeze-release-management-install-provider-packages-r5" x="0" y="264" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-packages-line-10)">│</text><text class="breeze-release-management-install-provider-packages-r1" x="329.4" y="264" textLength="1110.2" clip-path="url(#breeze-release-management-install-provider-packages-line-10)">selected).&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;& [...]
+</text><text class="breeze-release-management-install-provider-packages-r5" x="0" y="288.4" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-packages-line-11)">│</text><text class="breeze-release-management-install-provider-packages-r7" x="329.4" y="288.4" textLength="1110.2" clip-path="url(#breeze-release-management-install-provider-packages-line-11)">(selected&#160;|&#160;all&#160;|&#160;skip&#160;|&#160;remove&#160;|&#160;tests&#160;|&#160;providers-and-tes [...]
+</text><text class="breeze-release-management-install-provider-packages-r5" x="0" y="312.8" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-packages-line-12)">│</text><text class="breeze-release-management-install-provider-packages-r5" x="329.4" y="312.8" textLength="1110.2" clip-path="url(#breeze-release-management-install-provider-packages-line-12)">[default:&#160;selected]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;& [...]
+</text><text class="breeze-release-management-install-provider-packages-r5" x="0" y="337.2" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-packages-line-13)">│</text><text class="breeze-release-management-install-provider-packages-r4" x="24.4" y="337.2" textLength="231.8" clip-path="url(#breeze-release-management-install-provider-packages-line-13)">--github-repository</text><text class="breeze-release-management-install-provider-packages-r6" x="280.6" y="337 [...]
+</text><text class="breeze-release-management-install-provider-packages-r5" x="0" y="361.6" textLength="1464" clip-path="url(#breeze-release-management-install-provider-packages-line-14)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-release-management-install-provider-packages-r1" x="1464" y="361.6" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-packages-line-14)">
+</text><text class="breeze-release-management-install-provider-packages-r5" x="0" y="386" textLength="24.4" clip-path="url(#breeze-release-management-install-provider-packages-line-15)">╭─</text><text class="breeze-release-management-install-provider-packages-r5" x="24.4" y="386" textLength="512.4" clip-path="url(#breeze-release-management-install-provider-packages-line-15)">&#160;Installing&#160;packages&#160;after&#160;entering&#160;shell&#160;</text><text class="breeze-release-managem [...]
+</text><text class="breeze-release-management-install-provider-packages-r5" x="0" y="410.4" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-packages-line-16)">│</text><text class="breeze-release-management-install-provider-packages-r4" x="24.4" y="410.4" textLength="366" clip-path="url(#breeze-release-management-install-provider-packages-line-16)">--airflow-constraints-location</text><text class="breeze-release-management-install-provider-packages-r1" x="475. [...]
+</text><text class="breeze-release-management-install-provider-packages-r5" x="0" y="434.8" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-packages-line-17)">│</text><text class="breeze-release-management-install-provider-packages-r7" x="475.8" y="434.8" textLength="902.8" clip-path="url(#breeze-release-management-install-provider-packages-line-17)">(TEXT)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&# [...]
+</text><text class="breeze-release-management-install-provider-packages-r5" x="0" y="459.2" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-packages-line-18)">│</text><text class="breeze-release-management-install-provider-packages-r4" x="24.4" y="459.2" textLength="317.2" clip-path="url(#breeze-release-management-install-provider-packages-line-18)">--airflow-constraints-mode</text><text class="breeze-release-management-install-provider-packages-r1" x="475.8" [...]
+</text><text class="breeze-release-management-install-provider-packages-r5" x="0" y="483.6" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-packages-line-19)">│</text><text class="breeze-release-management-install-provider-packages-r7" x="475.8" y="483.6" textLength="866.2" clip-path="url(#breeze-release-management-install-provider-packages-line-19)">(constraints-source-providers&#160;|&#160;constraints&#160;|&#160;constraints-no-providers)</text><text class= [...]
+</text><text class="breeze-release-management-install-provider-packages-r5" x="0" y="508" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-packages-line-20)">│</text><text class="breeze-release-management-install-provider-packages-r5" x="475.8" y="508" textLength="866.2" clip-path="url(#breeze-release-management-install-provider-packages-line-20)">[default:&#160;constraints-source-providers]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#16 [...]
+</text><text class="breeze-release-management-install-provider-packages-r5" x="0" y="532.4" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-packages-line-21)">│</text><text class="breeze-release-management-install-provider-packages-r4" x="24.4" y="532.4" textLength="378.2" clip-path="url(#breeze-release-management-install-provider-packages-line-21)">--airflow-constraints-reference</text><text class="breeze-release-management-install-provider-packages-r1" x="4 [...]
+</text><text class="breeze-release-management-install-provider-packages-r5" x="0" y="556.8" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-packages-line-22)">│</text><text class="breeze-release-management-install-provider-packages-r1" x="475.8" y="556.8" textLength="963.8" clip-path="url(#breeze-release-management-install-provider-packages-line-22)">constraints&#160;URL).&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#16 [...]
+</text><text class="breeze-release-management-install-provider-packages-r5" x="0" y="581.2" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-packages-line-23)">│</text><text class="breeze-release-management-install-provider-packages-r7" x="475.8" y="581.2" textLength="963.8" clip-path="url(#breeze-release-management-install-provider-packages-line-23)">(TEXT)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&# [...]
+</text><text class="breeze-release-management-install-provider-packages-r5" x="0" y="605.6" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-packages-line-24)">│</text><text class="breeze-release-management-install-provider-packages-r4" x="24.4" y="605.6" textLength="195.2" clip-path="url(#breeze-release-management-install-provider-packages-line-24)">--airflow-extras</text><text class="breeze-release-management-install-provider-packages-r1" x="475.8" y="605.6" [...]
+</text><text class="breeze-release-management-install-provider-packages-r5" x="0" y="630" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-packages-line-25)">│</text><text class="breeze-release-management-install-provider-packages-r4" x="24.4" y="630" textLength="317.2" clip-path="url(#breeze-release-management-install-provider-packages-line-25)">--airflow-skip-constraints</text><text class="breeze-release-management-install-provider-packages-r1" x="475.8" y=" [...]
+</text><text class="breeze-release-management-install-provider-packages-r5" x="0" y="654.4" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-packages-line-26)">│</text><text class="breeze-release-management-install-provider-packages-r4" x="24.4" y="654.4" textLength="341.6" clip-path="url(#breeze-release-management-install-provider-packages-line-26)">--clean-airflow-installation</text><text class="breeze-release-management-install-provider-packages-r1" x="475. [...]
+</text><text class="breeze-release-management-install-provider-packages-r5" x="0" y="678.8" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-packages-line-27)">│</text><text class="breeze-release-management-install-provider-packages-r4" x="475.8" y="678.8" textLength="256.2" clip-path="url(#breeze-release-management-install-provider-packages-line-27)">--use-airflow-version</text><text class="breeze-release-management-install-provider-packages-r1" x="732" y="67 [...]
+</text><text class="breeze-release-management-install-provider-packages-r5" x="0" y="703.2" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-packages-line-28)">│</text><text class="breeze-release-management-install-provider-packages-r4" x="24.4" y="703.2" textLength="341.6" clip-path="url(#breeze-release-management-install-provider-packages-line-28)">--install-selected-providers</text><text class="breeze-release-management-install-provider-packages-r1" x="475. [...]
+</text><text class="breeze-release-management-install-provider-packages-r5" x="0" y="727.6" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-packages-line-29)">│</text><text class="breeze-release-management-install-provider-packages-r4" x="475.8" y="727.6" textLength="292.8" clip-path="url(#breeze-release-management-install-provider-packages-line-29)">--use-packages-from-dist</text><text class="breeze-release-management-install-provider-packages-r1" x="768.6"  [...]
+</text><text class="breeze-release-management-install-provider-packages-r5" x="0" y="752" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-packages-line-30)">│</text><text class="breeze-release-management-install-provider-packages-r7" x="475.8" y="752" textLength="963.8" clip-path="url(#breeze-release-management-install-provider-packages-line-30)">(TEXT)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; [...]
+</text><text class="breeze-release-management-install-provider-packages-r5" x="0" y="776.4" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-packages-line-31)">│</text><text class="breeze-release-management-install-provider-packages-r4" x="24.4" y="776.4" textLength="195.2" clip-path="url(#breeze-release-management-install-provider-packages-line-31)">--package-format</text><text class="breeze-release-management-install-provider-packages-r1" x="475.8" y="776.4" [...]
+</text><text class="breeze-release-management-install-provider-packages-r5" x="0" y="800.8" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-packages-line-32)">│</text><text class="breeze-release-management-install-provider-packages-r5" x="475.8" y="800.8" textLength="658.8" clip-path="url(#breeze-release-management-install-provider-packages-line-32)">[default:&#160;wheel]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160 [...]
+</text><text class="breeze-release-management-install-provider-packages-r5" x="0" y="825.2" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-packages-line-33)">│</text><text class="breeze-release-management-install-provider-packages-r4" x="24.4" y="825.2" textLength="390.4" clip-path="url(#breeze-release-management-install-provider-packages-line-33)">--providers-constraints-location</text><text class="breeze-release-management-install-provider-packages-r1" x=" [...]
+</text><text class="breeze-release-management-install-provider-packages-r5" x="0" y="849.6" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-packages-line-34)">│</text><text class="breeze-release-management-install-provider-packages-r7" x="475.8" y="849.6" textLength="927.2" clip-path="url(#breeze-release-management-install-provider-packages-line-34)">(TEXT)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&# [...]
+</text><text class="breeze-release-management-install-provider-packages-r5" x="0" y="874" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-packages-line-35)">│</text><text class="breeze-release-management-install-provider-packages-r4" x="24.4" y="874" textLength="341.6" clip-path="url(#breeze-release-management-install-provider-packages-line-35)">--providers-constraints-mode</text><text class="breeze-release-management-install-provider-packages-r1" x="475.8" y [...]
+</text><text class="breeze-release-management-install-provider-packages-r5" x="0" y="898.4" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-packages-line-36)">│</text><text class="breeze-release-management-install-provider-packages-r7" x="475.8" y="898.4" textLength="866.2" clip-path="url(#breeze-release-management-install-provider-packages-line-36)">(constraints-source-providers&#160;|&#160;constraints&#160;|&#160;constraints-no-providers)</text><text class= [...]
+</text><text class="breeze-release-management-install-provider-packages-r5" x="0" y="922.8" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-packages-line-37)">│</text><text class="breeze-release-management-install-provider-packages-r5" x="475.8" y="922.8" textLength="866.2" clip-path="url(#breeze-release-management-install-provider-packages-line-37)">[default:&#160;constraints-source-providers]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; [...]
+</text><text class="breeze-release-management-install-provider-packages-r5" x="0" y="947.2" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-packages-line-38)">│</text><text class="breeze-release-management-install-provider-packages-r4" x="24.4" y="947.2" textLength="402.6" clip-path="url(#breeze-release-management-install-provider-packages-line-38)">--providers-constraints-reference</text><text class="breeze-release-management-install-provider-packages-r1" x= [...]
+</text><text class="breeze-release-management-install-provider-packages-r5" x="0" y="971.6" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-packages-line-39)">│</text><text class="breeze-release-management-install-provider-packages-r1" x="475.8" y="971.6" textLength="963.8" clip-path="url(#breeze-release-management-install-provider-packages-line-39)">constraints&#160;URL).&#160;Can&#160;be&#160;&#x27;default&#x27;&#160;in&#160;which&#160;case&#160;the&#160;de [...]
+</text><text class="breeze-release-management-install-provider-packages-r5" x="0" y="996" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-packages-line-40)">│</text><text class="breeze-release-management-install-provider-packages-r1" x="475.8" y="996" textLength="963.8" clip-path="url(#breeze-release-management-install-provider-packages-line-40)">constraints-reference&#160;is&#160;used.&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&# [...]
+</text><text class="breeze-release-management-install-provider-packages-r5" x="0" y="1020.4" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-packages-line-41)">│</text><text class="breeze-release-management-install-provider-packages-r7" x="475.8" y="1020.4" textLength="963.8" clip-path="url(#breeze-release-management-install-provider-packages-line-41)">(TEXT)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; [...]
+</text><text class="breeze-release-management-install-provider-packages-r5" x="0" y="1044.8" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-packages-line-42)">│</text><text class="breeze-release-management-install-provider-packages-r4" x="24.4" y="1044.8" textLength="341.6" clip-path="url(#breeze-release-management-install-provider-packages-line-42)">--providers-skip-constraints</text><text class="breeze-release-management-install-provider-packages-r1" x="47 [...]
+</text><text class="breeze-release-management-install-provider-packages-r5" x="0" y="1069.2" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-packages-line-43)">│</text><text class="breeze-release-management-install-provider-packages-r4" x="24.4" y="1069.2" textLength="256.2" clip-path="url(#breeze-release-management-install-provider-packages-line-43)">--use-airflow-version</text><text class="breeze-release-management-install-provider-packages-r1" x="475.8" y= [...]
+</text><text class="breeze-release-management-install-provider-packages-r5" x="0" y="1093.6" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-packages-line-44)">│</text><text class="breeze-release-management-install-provider-packages-r1" x="475.8" y="1093.6" textLength="963.8" clip-path="url(#breeze-release-management-install-provider-packages-line-44)">install&#160;from&#160;PyPI),&#160;`none`,&#160;`wheel`,&#160;or&#160;`sdist`&#160;to&#160;install&#160;from [...]
+</text><text class="breeze-release-management-install-provider-packages-r5" x="0" y="1118" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-packages-line-45)">│</text><text class="breeze-release-management-install-provider-packages-r1" x="475.8" y="1118" textLength="963.8" clip-path="url(#breeze-release-management-install-provider-packages-line-45)">or&#160;VCS&#160;URL&#160;to&#160;install&#160;from&#160;(https://pip.pypa.io/en/stable/topics/vcs-support/).</t [...]
+</text><text class="breeze-release-management-install-provider-packages-r5" x="0" y="1142.4" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-packages-line-46)">│</text><text class="breeze-release-management-install-provider-packages-r1" x="475.8" y="1142.4" textLength="97.6" clip-path="url(#breeze-release-management-install-provider-packages-line-46)">Implies&#160;</text><text class="breeze-release-management-install-provider-packages-r4" x="573.4" y="1142.4" [...]
+</text><text class="breeze-release-management-install-provider-packages-r5" x="0" y="1166.8" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-packages-line-47)">│</text><text class="breeze-release-management-install-provider-packages-r7" x="475.8" y="1166.8" textLength="963.8" clip-path="url(#breeze-release-management-install-provider-packages-line-47)">(none&#160;|&#160;wheel&#160;|&#160;sdist&#160;|&#160;&lt;airflow_version&gt;)&#160;&#160;&#160;&#160;&#160; [...]
+</text><text class="breeze-release-management-install-provider-packages-r5" x="0" y="1191.2" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-packages-line-48)">│</text><text class="breeze-release-management-install-provider-packages-r4" x="24.4" y="1191.2" textLength="292.8" clip-path="url(#breeze-release-management-install-provider-packages-line-48)">--use-packages-from-dist</text><text class="breeze-release-management-install-provider-packages-r1" x="475.8" [...]
+</text><text class="breeze-release-management-install-provider-packages-r5" x="0" y="1215.6" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-packages-line-49)">│</text><text class="breeze-release-management-install-provider-packages-r1" x="475.8" y="1215.6" textLength="963.8" clip-path="url(#breeze-release-management-install-provider-packages-line-49)">folder&#160;when&#160;entering&#160;breeze.&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160 [...]
+</text><text class="breeze-release-management-install-provider-packages-r5" x="0" y="1240" textLength="1464" clip-path="url(#breeze-release-management-install-provider-packages-line-50)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-release-management-install-provider-packages-r1" x="1464" y="1240" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-packages-line-50)">
+</text><text class="breeze-release-management-install-provider-packages-r5" x="0" y="1264.4" textLength="24.4" clip-path="url(#breeze-release-management-install-provider-packages-line-51)">╭─</text><text class="breeze-release-management-install-provider-packages-r5" x="24.4" y="1264.4" textLength="219.6" clip-path="url(#breeze-release-management-install-provider-packages-line-51)">&#160;Parallel&#160;running&#160;</text><text class="breeze-release-management-install-provider-packages-r5" [...]
+</text><text class="breeze-release-management-install-provider-packages-r5" x="0" y="1288.8" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-packages-line-52)">│</text><text class="breeze-release-management-install-provider-packages-r4" x="24.4" y="1288.8" textLength="207.4" clip-path="url(#breeze-release-management-install-provider-packages-line-52)">--run-in-parallel</text><text class="breeze-release-management-install-provider-packages-r1" x="378.2" y="128 [...]
+</text><text class="breeze-release-management-install-provider-packages-r5" x="0" y="1313.2" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-packages-line-53)">│</text><text class="breeze-release-management-install-provider-packages-r4" x="24.4" y="1313.2" textLength="158.6" clip-path="url(#breeze-release-management-install-provider-packages-line-53)">--parallelism</text><text class="breeze-release-management-install-provider-packages-r1" x="378.2" y="1313.2" [...]
+</text><text class="breeze-release-management-install-provider-packages-r5" x="0" y="1337.6" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-packages-line-54)">│</text><text class="breeze-release-management-install-provider-packages-r7" x="378.2" y="1337.6" textLength="915" clip-path="url(#breeze-release-management-install-provider-packages-line-54)">(INTEGER&#160;RANGE)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; [...]
+</text><text class="breeze-release-management-install-provider-packages-r5" x="0" y="1362" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-packages-line-55)">│</text><text class="breeze-release-management-install-provider-packages-r5" x="378.2" y="1362" textLength="915" clip-path="url(#breeze-release-management-install-provider-packages-line-55)">[default:&#160;4;&#160;1&lt;=x&lt;=8]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160 [...]
+</text><text class="breeze-release-management-install-provider-packages-r5" x="0" y="1386.4" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-packages-line-56)">│</text><text class="breeze-release-management-install-provider-packages-r4" x="24.4" y="1386.4" textLength="170.8" clip-path="url(#breeze-release-management-install-provider-packages-line-56)">--skip-cleanup</text><text class="breeze-release-management-install-provider-packages-r1" x="378.2" y="1386.4 [...]
+</text><text class="breeze-release-management-install-provider-packages-r5" x="0" y="1410.8" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-packages-line-57)">│</text><text class="breeze-release-management-install-provider-packages-r4" x="24.4" y="1410.8" textLength="305" clip-path="url(#breeze-release-management-install-provider-packages-line-57)">--include-success-outputs</text><text class="breeze-release-management-install-provider-packages-r1" x="378.2"  [...]
+</text><text class="breeze-release-management-install-provider-packages-r5" x="0" y="1435.2" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-packages-line-58)">│</text><text class="breeze-release-management-install-provider-packages-r4" x="24.4" y="1435.2" textLength="207.4" clip-path="url(#breeze-release-management-install-provider-packages-line-58)">--debug-resources</text><text class="breeze-release-management-install-provider-packages-r1" x="378.2" y="143 [...]
+</text><text class="breeze-release-management-install-provider-packages-r5" x="0" y="1459.6" textLength="1464" clip-path="url(#breeze-release-management-install-provider-packages-line-59)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-release-management-install-provider-packages-r1" x="1464" y="1459.6" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-packages-l [...]
+</text><text class="breeze-release-management-install-provider-packages-r5" x="0" y="1484" textLength="24.4" clip-path="url(#breeze-release-management-install-provider-packages-line-60)">╭─</text><text class="breeze-release-management-install-provider-packages-r5" x="24.4" y="1484" textLength="195.2" clip-path="url(#breeze-release-management-install-provider-packages-line-60)">&#160;Common&#160;options&#160;</text><text class="breeze-release-management-install-provider-packages-r5" x="21 [...]
+</text><text class="breeze-release-management-install-provider-packages-r5" x="0" y="1508.4" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-packages-line-61)">│</text><text class="breeze-release-management-install-provider-packages-r4" x="24.4" y="1508.4" textLength="109.8" clip-path="url(#breeze-release-management-install-provider-packages-line-61)">--dry-run</text><text class="breeze-release-management-install-provider-packages-r6" x="158.6" y="1508.4" tex [...]
+</text><text class="breeze-release-management-install-provider-packages-r5" x="0" y="1532.8" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-packages-line-62)">│</text><text class="breeze-release-management-install-provider-packages-r4" x="24.4" y="1532.8" textLength="109.8" clip-path="url(#breeze-release-management-install-provider-packages-line-62)">--verbose</text><text class="breeze-release-management-install-provider-packages-r6" x="158.6" y="1532.8" tex [...]
+</text><text class="breeze-release-management-install-provider-packages-r5" x="0" y="1557.2" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-packages-line-63)">│</text><text class="breeze-release-management-install-provider-packages-r4" x="24.4" y="1557.2" textLength="73.2" clip-path="url(#breeze-release-management-install-provider-packages-line-63)">--help</text><text class="breeze-release-management-install-provider-packages-r6" x="158.6" y="1557.2" textLen [...]
+</text><text class="breeze-release-management-install-provider-packages-r5" x="0" y="1581.6" textLength="1464" clip-path="url(#breeze-release-management-install-provider-packages-line-64)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-release-management-install-provider-packages-r1" x="1464" y="1581.6" textLength="12.2" clip-path="url(#breeze-release-management-install-provider-packages-l [...]
 </text>
     </g>
     </g>
diff --git a/dev/breeze/doc/images/output_release-management_install-provider-packages.txt b/dev/breeze/doc/images/output_release-management_install-provider-packages.txt
index 7c0c58e9d25..eedd8ca5a3b 100644
--- a/dev/breeze/doc/images/output_release-management_install-provider-packages.txt
+++ b/dev/breeze/doc/images/output_release-management_install-provider-packages.txt
@@ -1 +1 @@
-28d0c552a4f581e0541835944c72498e
+47c9f57fabfb8bae746afdf3eedc65b0
diff --git a/dev/breeze/doc/images/output_release-management_release-prod-images.svg b/dev/breeze/doc/images/output_release-management_release-prod-images.svg
index dac443f5181..feae600bdb9 100644
--- a/dev/breeze/doc/images/output_release-management_release-prod-images.svg
+++ b/dev/breeze/doc/images/output_release-management_release-prod-images.svg
@@ -161,7 +161,7 @@
 </text><text class="breeze-release-management-release-prod-images-r5" x="0" y="312.8" textLength="12.2" clip-path="url(#breeze-release-management-release-prod-images-line-12)">│</text><text class="breeze-release-management-release-prod-images-r4" x="61" y="312.8" textLength="195.2" clip-path="url(#breeze-release-management-release-prod-images-line-12)">--dockerhub-repo</text><text class="breeze-release-management-release-prod-images-r1" x="390.4" y="312.8" textLength="427" clip-path="url [...]
 </text><text class="breeze-release-management-release-prod-images-r5" x="0" y="337.2" textLength="12.2" clip-path="url(#breeze-release-management-release-prod-images-line-13)">│</text><text class="breeze-release-management-release-prod-images-r4" x="61" y="337.2" textLength="170.8" clip-path="url(#breeze-release-management-release-prod-images-line-13)">--limit-python</text><text class="breeze-release-management-release-prod-images-r1" x="390.4" y="337.2" textLength="1049.2" clip-path="ur [...]
 </text><text class="breeze-release-management-release-prod-images-r5" x="0" y="361.6" textLength="12.2" clip-path="url(#breeze-release-management-release-prod-images-line-14)">│</text><text class="breeze-release-management-release-prod-images-r1" x="390.4" y="361.6" textLength="1049.2" clip-path="url(#breeze-release-management-release-prod-images-line-14)">all&#160;available&#160;python&#160;versions)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#16 [...]
-</text><text class="breeze-release-management-release-prod-images-r5" x="0" y="386" textLength="12.2" clip-path="url(#breeze-release-management-release-prod-images-line-15)">│</text><text class="breeze-release-management-release-prod-images-r7" x="390.4" y="386" textLength="1049.2" clip-path="url(#breeze-release-management-release-prod-images-line-15)">(3.9&#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;&#1 [...]
+</text><text class="breeze-release-management-release-prod-images-r5" x="0" y="386" textLength="12.2" clip-path="url(#breeze-release-management-release-prod-images-line-15)">│</text><text class="breeze-release-management-release-prod-images-r7" x="390.4" y="386" textLength="1049.2" clip-path="url(#breeze-release-management-release-prod-images-line-15)">(3.8&#160;|&#160;3.9&#160;|&#160;3.10&#160;|&#160;3.11&#160;|&#160;3.12)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160 [...]
 </text><text class="breeze-release-management-release-prod-images-r5" x="0" y="410.4" textLength="12.2" clip-path="url(#breeze-release-management-release-prod-images-line-16)">│</text><text class="breeze-release-management-release-prod-images-r4" x="61" y="410.4" textLength="195.2" clip-path="url(#breeze-release-management-release-prod-images-line-16)">--limit-platform</text><text class="breeze-release-management-release-prod-images-r1" x="390.4" y="410.4" textLength="1049.2" clip-path=" [...]
 </text><text class="breeze-release-management-release-prod-images-r5" x="0" y="434.8" textLength="12.2" clip-path="url(#breeze-release-management-release-prod-images-line-17)">│</text><text class="breeze-release-management-release-prod-images-r1" x="390.4" y="434.8" textLength="1049.2" clip-path="url(#breeze-release-management-release-prod-images-line-17)">built.&#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-release-management-release-prod-images-r5" x="0" y="459.2" textLength="12.2" clip-path="url(#breeze-release-management-release-prod-images-line-18)">│</text><text class="breeze-release-management-release-prod-images-r7" x="390.4" y="459.2" textLength="1049.2" clip-path="url(#breeze-release-management-release-prod-images-line-18)">(linux/amd64&#160;|&#160;linux/arm64&#160;|&#160;linux/amd64,linux/arm64)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; [...]
diff --git a/dev/breeze/doc/images/output_release-management_release-prod-images.txt b/dev/breeze/doc/images/output_release-management_release-prod-images.txt
index 0ffb3563d02..c424e07c067 100644
--- a/dev/breeze/doc/images/output_release-management_release-prod-images.txt
+++ b/dev/breeze/doc/images/output_release-management_release-prod-images.txt
@@ -1 +1 @@
-88257fc6d1b13061b19f0a623183c1c1
+cbe10608aa153edac07e6bc2ee656879
diff --git a/dev/breeze/doc/images/output_release-management_verify-provider-packages.svg b/dev/breeze/doc/images/output_release-management_verify-provider-packages.svg
index f4eb44fbc16..ba02c16ac97 100644
--- a/dev/breeze/doc/images/output_release-management_verify-provider-packages.svg
+++ b/dev/breeze/doc/images/output_release-management_verify-provider-packages.svg
@@ -1,4 +1,4 @@
-<svg class="rich-terminal" viewBox="0 0 1482 1684.8" xmlns="http://www.w3.org/2000/svg">
+<svg class="rich-terminal" viewBox="0 0 1482 1709.1999999999998" 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-verify-provider-packages-clip-terminal">
-      <rect x="0" y="0" width="1463.0" height="1633.8" />
+      <rect x="0" y="0" width="1463.0" height="1658.1999999999998" />
     </clipPath>
     <clipPath id="breeze-release-management-verify-provider-packages-line-0">
     <rect x="0" y="1.5" width="1464" height="24.65"/>
@@ -243,9 +243,12 @@
 <clipPath id="breeze-release-management-verify-provider-packages-line-65">
     <rect x="0" y="1587.5" width="1464" height="24.65"/>
             </clipPath>
+<clipPath id="breeze-release-management-verify-provider-packages-line-66">
+    <rect x="0" y="1611.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="1682.8" rx="8"/><text class="breeze-release-management-verify-provider-packages-title" fill="#c5c8c6" text-anchor="middle" x="740" y="27">Command:&#160;release-management&#160;verify-provider-packages</text>
+    <rect fill="#292929" stroke="rgba(255,255,255,0.35)" stroke-width="1" x="1" y="1" width="1480" height="1707.2" rx="8"/><text class="breeze-release-management-verify-provider-packages-title" fill="#c5c8c6" text-anchor="middle" x="740" y="27">Command:&#160;release-management&#160;verify-provider-packages</text>
             <g transform="translate(26,22)">
             <circle cx="0" cy="0" r="7" fill="#ff5f57"/>
             <circle cx="22" cy="0" r="7" fill="#febc2e"/>
@@ -261,67 +264,68 @@
 </text><text class="breeze-release-management-verify-provider-packages-r1" x="12.2" y="93.2" textLength="854" clip-path="url(#breeze-release-management-verify-provider-packages-line-3)">Verifies&#160;if&#160;all&#160;provider&#160;code&#160;is&#160;following&#160;expectations&#160;for&#160;providers.</text><text class="breeze-release-management-verify-provider-packages-r1" x="1464" y="93.2" textLength="12.2" clip-path="url(#breeze-release-management-verify-provider-packages-line-3)">
 </text><text class="breeze-release-management-verify-provider-packages-r1" x="1464" y="117.6" textLength="12.2" clip-path="url(#breeze-release-management-verify-provider-packages-line-4)">
 </text><text class="breeze-release-management-verify-provider-packages-r5" x="0" y="142" textLength="24.4" clip-path="url(#breeze-release-management-verify-provider-packages-line-5)">╭─</text><text class="breeze-release-management-verify-provider-packages-r5" x="24.4" y="142" textLength="353.8" clip-path="url(#breeze-release-management-verify-provider-packages-line-5)">&#160;Provider&#160;verification&#160;flags&#160;</text><text class="breeze-release-management-verify-provider-packages- [...]
-</text><text class="breeze-release-management-verify-provider-packages-r5" x="0" y="166.4" textLength="12.2" clip-path="url(#breeze-release-management-verify-provider-packages-line-6)">│</text><text class="breeze-release-management-verify-provider-packages-r4" x="24.4" y="166.4" textLength="97.6" clip-path="url(#breeze-release-management-verify-provider-packages-line-6)">--python</text><text class="breeze-release-management-verify-provider-packages-r6" x="280.6" y="166.4" textLength="24. [...]
-</text><text class="breeze-release-management-verify-provider-packages-r5" x="0" y="190.8" textLength="12.2" clip-path="url(#breeze-release-management-verify-provider-packages-line-7)">│</text><text class="breeze-release-management-verify-provider-packages-r5" x="329.4" y="190.8" textLength="732" clip-path="url(#breeze-release-management-verify-provider-packages-line-7)">[default:&#160;3.9]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#1 [...]
-</text><text class="breeze-release-management-verify-provider-packages-r5" x="0" y="215.2" textLength="12.2" clip-path="url(#breeze-release-management-verify-provider-packages-line-8)">│</text><text class="breeze-release-management-verify-provider-packages-r4" x="24.4" y="215.2" textLength="183" clip-path="url(#breeze-release-management-verify-provider-packages-line-8)">--mount-sources</text><text class="breeze-release-management-verify-provider-packages-r1" x="329.4" y="215.2" textLengt [...]
-</text><text class="breeze-release-management-verify-provider-packages-r5" x="0" y="239.6" textLength="12.2" clip-path="url(#breeze-release-management-verify-provider-packages-line-9)">│</text><text class="breeze-release-management-verify-provider-packages-r1" x="329.4" y="239.6" textLength="1110.2" clip-path="url(#breeze-release-management-verify-provider-packages-line-9)">selected).&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#1 [...]
-</text><text class="breeze-release-management-verify-provider-packages-r5" x="0" y="264" textLength="12.2" clip-path="url(#breeze-release-management-verify-provider-packages-line-10)">│</text><text class="breeze-release-management-verify-provider-packages-r7" x="329.4" y="264" textLength="1110.2" clip-path="url(#breeze-release-management-verify-provider-packages-line-10)">(selected&#160;|&#160;all&#160;|&#160;skip&#160;|&#160;remove&#160;|&#160;tests&#160;|&#160;providers-and-tests)&#160 [...]
-</text><text class="breeze-release-management-verify-provider-packages-r5" x="0" y="288.4" textLength="12.2" clip-path="url(#breeze-release-management-verify-provider-packages-line-11)">│</text><text class="breeze-release-management-verify-provider-packages-r5" x="329.4" y="288.4" textLength="1110.2" clip-path="url(#breeze-release-management-verify-provider-packages-line-11)">[default:&#160;selected]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160 [...]
-</text><text class="breeze-release-management-verify-provider-packages-r5" x="0" y="312.8" textLength="12.2" clip-path="url(#breeze-release-management-verify-provider-packages-line-12)">│</text><text class="breeze-release-management-verify-provider-packages-r4" x="24.4" y="312.8" textLength="231.8" clip-path="url(#breeze-release-management-verify-provider-packages-line-12)">--github-repository</text><text class="breeze-release-management-verify-provider-packages-r6" x="280.6" y="312.8" t [...]
-</text><text class="breeze-release-management-verify-provider-packages-r5" x="0" y="337.2" textLength="1464" clip-path="url(#breeze-release-management-verify-provider-packages-line-13)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-release-management-verify-provider-packages-r1" x="1464" y="337.2" textLength="12.2" clip-path="url(#breeze-release-management-verify-provider-packages-line-13)">
-</text><text class="breeze-release-management-verify-provider-packages-r5" x="0" y="361.6" textLength="24.4" clip-path="url(#breeze-release-management-verify-provider-packages-line-14)">╭─</text><text class="breeze-release-management-verify-provider-packages-r5" x="24.4" y="361.6" textLength="512.4" clip-path="url(#breeze-release-management-verify-provider-packages-line-14)">&#160;Installing&#160;packages&#160;after&#160;entering&#160;shell&#160;</text><text class="breeze-release-managem [...]
-</text><text class="breeze-release-management-verify-provider-packages-r5" x="0" y="386" textLength="12.2" clip-path="url(#breeze-release-management-verify-provider-packages-line-15)">│</text><text class="breeze-release-management-verify-provider-packages-r4" x="24.4" y="386" textLength="366" clip-path="url(#breeze-release-management-verify-provider-packages-line-15)">--airflow-constraints-location</text><text class="breeze-release-management-verify-provider-packages-r1" x="756.4" y="386 [...]
-</text><text class="breeze-release-management-verify-provider-packages-r5" x="0" y="410.4" textLength="12.2" clip-path="url(#breeze-release-management-verify-provider-packages-line-16)">│</text><text class="breeze-release-management-verify-provider-packages-r1" x="756.4" y="410.4" textLength="683.2" clip-path="url(#breeze-release-management-verify-provider-packages-line-16)">local&#160;context&#160;file).&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; [...]
-</text><text class="breeze-release-management-verify-provider-packages-r5" x="0" y="434.8" textLength="12.2" clip-path="url(#breeze-release-management-verify-provider-packages-line-17)">│</text><text class="breeze-release-management-verify-provider-packages-r7" x="756.4" y="434.8" textLength="683.2" clip-path="url(#breeze-release-management-verify-provider-packages-line-17)">(TEXT)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; [...]
-</text><text class="breeze-release-management-verify-provider-packages-r5" x="0" y="459.2" textLength="12.2" clip-path="url(#breeze-release-management-verify-provider-packages-line-18)">│</text><text class="breeze-release-management-verify-provider-packages-r4" x="24.4" y="459.2" textLength="317.2" clip-path="url(#breeze-release-management-verify-provider-packages-line-18)">--airflow-constraints-mode</text><text class="breeze-release-management-verify-provider-packages-r1" x="756.4" y="4 [...]
-</text><text class="breeze-release-management-verify-provider-packages-r5" x="0" y="483.6" textLength="12.2" clip-path="url(#breeze-release-management-verify-provider-packages-line-19)">│</text><text class="breeze-release-management-verify-provider-packages-r7" x="756.4" y="483.6" textLength="683.2" clip-path="url(#breeze-release-management-verify-provider-packages-line-19)">(constraints-source-providers&#160;|&#160;constraints&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; [...]
-</text><text class="breeze-release-management-verify-provider-packages-r5" x="0" y="508" textLength="12.2" clip-path="url(#breeze-release-management-verify-provider-packages-line-20)">│</text><text class="breeze-release-management-verify-provider-packages-r7" x="756.4" y="508" textLength="683.2" clip-path="url(#breeze-release-management-verify-provider-packages-line-20)">constraints-no-providers)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#1 [...]
-</text><text class="breeze-release-management-verify-provider-packages-r5" x="0" y="532.4" textLength="12.2" clip-path="url(#breeze-release-management-verify-provider-packages-line-21)">│</text><text class="breeze-release-management-verify-provider-packages-r5" x="756.4" y="532.4" textLength="683.2" clip-path="url(#breeze-release-management-verify-provider-packages-line-21)">[default:&#160;constraints-source-providers]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#16 [...]
-</text><text class="breeze-release-management-verify-provider-packages-r5" x="0" y="556.8" textLength="12.2" clip-path="url(#breeze-release-management-verify-provider-packages-line-22)">│</text><text class="breeze-release-management-verify-provider-packages-r4" x="24.4" y="556.8" textLength="378.2" clip-path="url(#breeze-release-management-verify-provider-packages-line-22)">--airflow-constraints-reference</text><text class="breeze-release-management-verify-provider-packages-r1" x="756.4" [...]
-</text><text class="breeze-release-management-verify-provider-packages-r5" x="0" y="581.2" textLength="12.2" clip-path="url(#breeze-release-management-verify-provider-packages-line-23)">│</text><text class="breeze-release-management-verify-provider-packages-r1" x="756.4" y="581.2" textLength="683.2" clip-path="url(#breeze-release-management-verify-provider-packages-line-23)">(used&#160;in&#160;calculated&#160;constraints&#160;URL).&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#1 [...]
-</text><text class="breeze-release-management-verify-provider-packages-r5" x="0" y="605.6" textLength="12.2" clip-path="url(#breeze-release-management-verify-provider-packages-line-24)">│</text><text class="breeze-release-management-verify-provider-packages-r7" x="756.4" y="605.6" textLength="683.2" clip-path="url(#breeze-release-management-verify-provider-packages-line-24)">(TEXT)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; [...]
-</text><text class="breeze-release-management-verify-provider-packages-r5" x="0" y="630" textLength="12.2" clip-path="url(#breeze-release-management-verify-provider-packages-line-25)">│</text><text class="breeze-release-management-verify-provider-packages-r4" x="24.4" y="630" textLength="195.2" clip-path="url(#breeze-release-management-verify-provider-packages-line-25)">--airflow-extras</text><text class="breeze-release-management-verify-provider-packages-r1" x="756.4" y="630" textLength [...]
-</text><text class="breeze-release-management-verify-provider-packages-r5" x="0" y="654.4" textLength="12.2" clip-path="url(#breeze-release-management-verify-provider-packages-line-26)">│</text><text class="breeze-release-management-verify-provider-packages-r1" x="756.4" y="654.4" textLength="683.2" clip-path="url(#breeze-release-management-verify-provider-packages-line-26)">used&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&# [...]
-</text><text class="breeze-release-management-verify-provider-packages-r5" x="0" y="678.8" textLength="12.2" clip-path="url(#breeze-release-management-verify-provider-packages-line-27)">│</text><text class="breeze-release-management-verify-provider-packages-r7" x="756.4" y="678.8" textLength="683.2" clip-path="url(#breeze-release-management-verify-provider-packages-line-27)">(TEXT)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; [...]
-</text><text class="breeze-release-management-verify-provider-packages-r5" x="0" y="703.2" textLength="12.2" clip-path="url(#breeze-release-management-verify-provider-packages-line-28)">│</text><text class="breeze-release-management-verify-provider-packages-r4" x="24.4" y="703.2" textLength="317.2" clip-path="url(#breeze-release-management-verify-provider-packages-line-28)">--airflow-skip-constraints</text><text class="breeze-release-management-verify-provider-packages-r1" x="756.4" y="7 [...]
-</text><text class="breeze-release-management-verify-provider-packages-r5" x="0" y="727.6" textLength="12.2" clip-path="url(#breeze-release-management-verify-provider-packages-line-29)">│</text><text class="breeze-release-management-verify-provider-packages-r4" x="24.4" y="727.6" textLength="341.6" clip-path="url(#breeze-release-management-verify-provider-packages-line-29)">--clean-airflow-installation</text><text class="breeze-release-management-verify-provider-packages-r1" x="756.4" y= [...]
-</text><text class="breeze-release-management-verify-provider-packages-r5" x="0" y="752" textLength="12.2" clip-path="url(#breeze-release-management-verify-provider-packages-line-30)">│</text><text class="breeze-release-management-verify-provider-packages-r1" x="756.4" y="752" textLength="158.6" clip-path="url(#breeze-release-management-verify-provider-packages-line-30)">specified&#160;by&#160;</text><text class="breeze-release-management-verify-provider-packages-r4" x="915" y="752" text [...]
-</text><text class="breeze-release-management-verify-provider-packages-r5" x="0" y="776.4" textLength="12.2" clip-path="url(#breeze-release-management-verify-provider-packages-line-31)">│</text><text class="breeze-release-management-verify-provider-packages-r4" x="24.4" y="776.4" textLength="414.8" clip-path="url(#breeze-release-management-verify-provider-packages-line-31)">--install-airflow-with-constraints</text><text class="breeze-release-management-verify-provider-packages-r1" x="439 [...]
-</text><text class="breeze-release-management-verify-provider-packages-r5" x="0" y="800.8" textLength="12.2" clip-path="url(#breeze-release-management-verify-provider-packages-line-32)">│</text><text class="breeze-release-management-verify-provider-packages-r1" x="756.4" y="800.8" textLength="683.2" clip-path="url(#breeze-release-management-verify-provider-packages-line-32)">determined&#160;from&#160;package&#160;or&#160;airflow&#160;version.&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#16 [...]
-</text><text class="breeze-release-management-verify-provider-packages-r5" x="0" y="825.2" textLength="12.2" clip-path="url(#breeze-release-management-verify-provider-packages-line-33)">│</text><text class="breeze-release-management-verify-provider-packages-r5" x="756.4" y="825.2" textLength="683.2" clip-path="url(#breeze-release-management-verify-provider-packages-line-33)">[default:&#160;no-install-airflow-with-constraints]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</t [...]
-</text><text class="breeze-release-management-verify-provider-packages-r5" x="0" y="849.6" textLength="12.2" clip-path="url(#breeze-release-management-verify-provider-packages-line-34)">│</text><text class="breeze-release-management-verify-provider-packages-r4" x="24.4" y="849.6" textLength="341.6" clip-path="url(#breeze-release-management-verify-provider-packages-line-34)">--install-selected-providers</text><text class="breeze-release-management-verify-provider-packages-r1" x="756.4" y= [...]
-</text><text class="breeze-release-management-verify-provider-packages-r5" x="0" y="874" textLength="12.2" clip-path="url(#breeze-release-management-verify-provider-packages-line-35)">│</text><text class="breeze-release-management-verify-provider-packages-r1" x="756.4" y="874" textLength="231.8" clip-path="url(#breeze-release-management-verify-provider-packages-line-35)">installed&#160;(implies&#160;</text><text class="breeze-release-management-verify-provider-packages-r4" x="988.2" y="8 [...]
-</text><text class="breeze-release-management-verify-provider-packages-r5" x="0" y="898.4" textLength="12.2" clip-path="url(#breeze-release-management-verify-provider-packages-line-36)">│</text><text class="breeze-release-management-verify-provider-packages-r7" x="756.4" y="898.4" textLength="683.2" clip-path="url(#breeze-release-management-verify-provider-packages-line-36)">(TEXT)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; [...]
-</text><text class="breeze-release-management-verify-provider-packages-r5" x="0" y="922.8" textLength="12.2" clip-path="url(#breeze-release-management-verify-provider-packages-line-37)">│</text><text class="breeze-release-management-verify-provider-packages-r4" x="24.4" y="922.8" textLength="195.2" clip-path="url(#breeze-release-management-verify-provider-packages-line-37)">--package-format</text><text class="breeze-release-management-verify-provider-packages-r1" x="756.4" y="922.8" text [...]
-</text><text class="breeze-release-management-verify-provider-packages-r5" x="0" y="947.2" textLength="12.2" clip-path="url(#breeze-release-management-verify-provider-packages-line-38)">│</text><text class="breeze-release-management-verify-provider-packages-r7" x="756.4" y="947.2" textLength="658.8" clip-path="url(#breeze-release-management-verify-provider-packages-line-38)">(wheel&#160;|&#160;sdist)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160 [...]
-</text><text class="breeze-release-management-verify-provider-packages-r5" x="0" y="971.6" textLength="12.2" clip-path="url(#breeze-release-management-verify-provider-packages-line-39)">│</text><text class="breeze-release-management-verify-provider-packages-r5" x="756.4" y="971.6" textLength="658.8" clip-path="url(#breeze-release-management-verify-provider-packages-line-39)">[default:&#160;wheel]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#1 [...]
-</text><text class="breeze-release-management-verify-provider-packages-r5" x="0" y="996" textLength="12.2" clip-path="url(#breeze-release-management-verify-provider-packages-line-40)">│</text><text class="breeze-release-management-verify-provider-packages-r4" x="24.4" y="996" textLength="390.4" clip-path="url(#breeze-release-management-verify-provider-packages-line-40)">--providers-constraints-location</text><text class="breeze-release-management-verify-provider-packages-r1" x="756.4" y= [...]
-</text><text class="breeze-release-management-verify-provider-packages-r5" x="0" y="1020.4" textLength="12.2" clip-path="url(#breeze-release-management-verify-provider-packages-line-41)">│</text><text class="breeze-release-management-verify-provider-packages-r1" x="756.4" y="1020.4" textLength="683.2" clip-path="url(#breeze-release-management-verify-provider-packages-line-41)">local&#160;context&#160;file).&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#16 [...]
-</text><text class="breeze-release-management-verify-provider-packages-r5" x="0" y="1044.8" textLength="12.2" clip-path="url(#breeze-release-management-verify-provider-packages-line-42)">│</text><text class="breeze-release-management-verify-provider-packages-r7" x="756.4" y="1044.8" textLength="683.2" clip-path="url(#breeze-release-management-verify-provider-packages-line-42)">(TEXT)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#16 [...]
-</text><text class="breeze-release-management-verify-provider-packages-r5" x="0" y="1069.2" textLength="12.2" clip-path="url(#breeze-release-management-verify-provider-packages-line-43)">│</text><text class="breeze-release-management-verify-provider-packages-r4" x="24.4" y="1069.2" textLength="341.6" clip-path="url(#breeze-release-management-verify-provider-packages-line-43)">--providers-constraints-mode</text><text class="breeze-release-management-verify-provider-packages-r1" x="756.4"  [...]
-</text><text class="breeze-release-management-verify-provider-packages-r5" x="0" y="1093.6" textLength="12.2" clip-path="url(#breeze-release-management-verify-provider-packages-line-44)">│</text><text class="breeze-release-management-verify-provider-packages-r7" x="756.4" y="1093.6" textLength="683.2" clip-path="url(#breeze-release-management-verify-provider-packages-line-44)">(constraints-source-providers&#160;|&#160;constraints&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#16 [...]
-</text><text class="breeze-release-management-verify-provider-packages-r5" x="0" y="1118" textLength="12.2" clip-path="url(#breeze-release-management-verify-provider-packages-line-45)">│</text><text class="breeze-release-management-verify-provider-packages-r7" x="756.4" y="1118" textLength="683.2" clip-path="url(#breeze-release-management-verify-provider-packages-line-45)">constraints-no-providers)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;& [...]
-</text><text class="breeze-release-management-verify-provider-packages-r5" x="0" y="1142.4" textLength="12.2" clip-path="url(#breeze-release-management-verify-provider-packages-line-46)">│</text><text class="breeze-release-management-verify-provider-packages-r5" x="756.4" y="1142.4" textLength="683.2" clip-path="url(#breeze-release-management-verify-provider-packages-line-46)">[default:&#160;constraints-source-providers]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&# [...]
-</text><text class="breeze-release-management-verify-provider-packages-r5" x="0" y="1166.8" textLength="12.2" clip-path="url(#breeze-release-management-verify-provider-packages-line-47)">│</text><text class="breeze-release-management-verify-provider-packages-r4" x="24.4" y="1166.8" textLength="402.6" clip-path="url(#breeze-release-management-verify-provider-packages-line-47)">--providers-constraints-reference</text><text class="breeze-release-management-verify-provider-packages-r1" x="75 [...]
-</text><text class="breeze-release-management-verify-provider-packages-r5" x="0" y="1191.2" textLength="12.2" clip-path="url(#breeze-release-management-verify-provider-packages-line-48)">│</text><text class="breeze-release-management-verify-provider-packages-r1" x="756.4" y="1191.2" textLength="683.2" clip-path="url(#breeze-release-management-verify-provider-packages-line-48)">(used&#160;in&#160;calculated&#160;constraints&#160;URL).&#160;Can&#160;be&#160;&#x27;default&#x27;&#160;&#160;< [...]
-</text><text class="breeze-release-management-verify-provider-packages-r5" x="0" y="1215.6" textLength="12.2" clip-path="url(#breeze-release-management-verify-provider-packages-line-49)">│</text><text class="breeze-release-management-verify-provider-packages-r1" x="756.4" y="1215.6" textLength="683.2" clip-path="url(#breeze-release-management-verify-provider-packages-line-49)">in&#160;which&#160;case&#160;the&#160;default&#160;constraints-reference&#160;is&#160;used.</text><text class="b [...]
-</text><text class="breeze-release-management-verify-provider-packages-r5" x="0" y="1240" textLength="12.2" clip-path="url(#breeze-release-management-verify-provider-packages-line-50)">│</text><text class="breeze-release-management-verify-provider-packages-r7" x="756.4" y="1240" textLength="683.2" clip-path="url(#breeze-release-management-verify-provider-packages-line-50)">(TEXT)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&# [...]
-</text><text class="breeze-release-management-verify-provider-packages-r5" x="0" y="1264.4" textLength="12.2" clip-path="url(#breeze-release-management-verify-provider-packages-line-51)">│</text><text class="breeze-release-management-verify-provider-packages-r4" x="24.4" y="1264.4" textLength="341.6" clip-path="url(#breeze-release-management-verify-provider-packages-line-51)">--providers-skip-constraints</text><text class="breeze-release-management-verify-provider-packages-r1" x="756.4"  [...]
-</text><text class="breeze-release-management-verify-provider-packages-r5" x="0" y="1288.8" textLength="12.2" clip-path="url(#breeze-release-management-verify-provider-packages-line-52)">│</text><text class="breeze-release-management-verify-provider-packages-r4" x="24.4" y="1288.8" textLength="256.2" clip-path="url(#breeze-release-management-verify-provider-packages-line-52)">--use-airflow-version</text><text class="breeze-release-management-verify-provider-packages-r1" x="756.4" y="1288 [...]
-</text><text class="breeze-release-management-verify-provider-packages-r5" x="0" y="1313.2" textLength="12.2" clip-path="url(#breeze-release-management-verify-provider-packages-line-53)">│</text><text class="breeze-release-management-verify-provider-packages-r1" x="756.4" y="1313.2" textLength="683.2" clip-path="url(#breeze-release-management-verify-provider-packages-line-53)">can&#160;also&#160;be&#160;version&#160;(to&#160;install&#160;from&#160;PyPI),&#160;`none`,&#160;&#160;&#160;&#1 [...]
-</text><text class="breeze-release-management-verify-provider-packages-r5" x="0" y="1337.6" textLength="12.2" clip-path="url(#breeze-release-management-verify-provider-packages-line-54)">│</text><text class="breeze-release-management-verify-provider-packages-r1" x="756.4" y="1337.6" textLength="683.2" clip-path="url(#breeze-release-management-verify-provider-packages-line-54)">`wheel`,&#160;or&#160;`sdist`&#160;to&#160;install&#160;from&#160;`dist`&#160;folder,&#160;or&#160;&#160;&#160;< [...]
-</text><text class="breeze-release-management-verify-provider-packages-r5" x="0" y="1362" textLength="12.2" clip-path="url(#breeze-release-management-verify-provider-packages-line-55)">│</text><text class="breeze-release-management-verify-provider-packages-r1" x="756.4" y="1362" textLength="683.2" clip-path="url(#breeze-release-management-verify-provider-packages-line-55)">VCS&#160;URL&#160;to&#160;install&#160;from&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;& [...]
-</text><text class="breeze-release-management-verify-provider-packages-r5" x="0" y="1386.4" textLength="12.2" clip-path="url(#breeze-release-management-verify-provider-packages-line-56)">│</text><text class="breeze-release-management-verify-provider-packages-r1" x="756.4" y="1386.4" textLength="683.2" clip-path="url(#breeze-release-management-verify-provider-packages-line-56)">(https://pip.pypa.io/en/stable/topics/vcs-support/).&#160;&#160;&#160;&#160;</text><text class="breeze-release-m [...]
-</text><text class="breeze-release-management-verify-provider-packages-r5" x="0" y="1410.8" textLength="12.2" clip-path="url(#breeze-release-management-verify-provider-packages-line-57)">│</text><text class="breeze-release-management-verify-provider-packages-r1" x="756.4" y="1410.8" textLength="97.6" clip-path="url(#breeze-release-management-verify-provider-packages-line-57)">Implies&#160;</text><text class="breeze-release-management-verify-provider-packages-r4" x="854" y="1410.8" textLe [...]
-</text><text class="breeze-release-management-verify-provider-packages-r5" x="0" y="1435.2" textLength="12.2" clip-path="url(#breeze-release-management-verify-provider-packages-line-58)">│</text><text class="breeze-release-management-verify-provider-packages-r7" x="756.4" y="1435.2" textLength="683.2" clip-path="url(#breeze-release-management-verify-provider-packages-line-58)">(none&#160;|&#160;wheel&#160;|&#160;sdist&#160;|&#160;&lt;airflow_version&gt;)&#160;&#160;&#160;&#160;&#160;&#16 [...]
-</text><text class="breeze-release-management-verify-provider-packages-r5" x="0" y="1459.6" textLength="12.2" clip-path="url(#breeze-release-management-verify-provider-packages-line-59)">│</text><text class="breeze-release-management-verify-provider-packages-r4" x="24.4" y="1459.6" textLength="292.8" clip-path="url(#breeze-release-management-verify-provider-packages-line-59)">--use-packages-from-dist</text><text class="breeze-release-management-verify-provider-packages-r1" x="756.4" y="1 [...]
-</text><text class="breeze-release-management-verify-provider-packages-r5" x="0" y="1484" textLength="12.2" clip-path="url(#breeze-release-management-verify-provider-packages-line-60)">│</text><text class="breeze-release-management-verify-provider-packages-r1" x="756.4" y="1484" textLength="683.2" clip-path="url(#breeze-release-management-verify-provider-packages-line-60)">type)&#160;from&#160;&#x27;dist&#x27;&#160;folder&#160;when&#160;entering&#160;breeze.&#160;&#160;&#160;&#160;&#160; [...]
-</text><text class="breeze-release-management-verify-provider-packages-r5" x="0" y="1508.4" textLength="1464" clip-path="url(#breeze-release-management-verify-provider-packages-line-61)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-release-management-verify-provider-packages-r1" x="1464" y="1508.4" textLength="12.2" clip-path="url(#breeze-release-management-verify-provider-packages-line-61)">
-</text><text class="breeze-release-management-verify-provider-packages-r5" x="0" y="1532.8" textLength="24.4" clip-path="url(#breeze-release-management-verify-provider-packages-line-62)">╭─</text><text class="breeze-release-management-verify-provider-packages-r5" x="24.4" y="1532.8" textLength="195.2" clip-path="url(#breeze-release-management-verify-provider-packages-line-62)">&#160;Common&#160;options&#160;</text><text class="breeze-release-management-verify-provider-packages-r5" x="219 [...]
-</text><text class="breeze-release-management-verify-provider-packages-r5" x="0" y="1557.2" textLength="12.2" clip-path="url(#breeze-release-management-verify-provider-packages-line-63)">│</text><text class="breeze-release-management-verify-provider-packages-r4" x="24.4" y="1557.2" textLength="109.8" clip-path="url(#breeze-release-management-verify-provider-packages-line-63)">--dry-run</text><text class="breeze-release-management-verify-provider-packages-r6" x="158.6" y="1557.2" textLeng [...]
-</text><text class="breeze-release-management-verify-provider-packages-r5" x="0" y="1581.6" textLength="12.2" clip-path="url(#breeze-release-management-verify-provider-packages-line-64)">│</text><text class="breeze-release-management-verify-provider-packages-r4" x="24.4" y="1581.6" textLength="109.8" clip-path="url(#breeze-release-management-verify-provider-packages-line-64)">--verbose</text><text class="breeze-release-management-verify-provider-packages-r6" x="158.6" y="1581.6" textLeng [...]
-</text><text class="breeze-release-management-verify-provider-packages-r5" x="0" y="1606" textLength="12.2" clip-path="url(#breeze-release-management-verify-provider-packages-line-65)">│</text><text class="breeze-release-management-verify-provider-packages-r4" x="24.4" y="1606" textLength="73.2" clip-path="url(#breeze-release-management-verify-provider-packages-line-65)">--help</text><text class="breeze-release-management-verify-provider-packages-r6" x="158.6" y="1606" textLength="24.4"  [...]
-</text><text class="breeze-release-management-verify-provider-packages-r5" x="0" y="1630.4" textLength="1464" clip-path="url(#breeze-release-management-verify-provider-packages-line-66)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-release-management-verify-provider-packages-r1" x="1464" y="1630.4" textLength="12.2" clip-path="url(#breeze-release-management-verify-provider-packages-line-66)">
+</text><text class="breeze-release-management-verify-provider-packages-r5" x="0" y="166.4" textLength="12.2" clip-path="url(#breeze-release-management-verify-provider-packages-line-6)">│</text><text class="breeze-release-management-verify-provider-packages-r4" x="24.4" y="166.4" textLength="97.6" clip-path="url(#breeze-release-management-verify-provider-packages-line-6)">--python</text><text class="breeze-release-management-verify-provider-packages-r6" x="280.6" y="166.4" textLength="24. [...]
+</text><text class="breeze-release-management-verify-provider-packages-r5" x="0" y="190.8" textLength="12.2" clip-path="url(#breeze-release-management-verify-provider-packages-line-7)">│</text><text class="breeze-release-management-verify-provider-packages-r7" x="329.4" y="190.8" textLength="732" clip-path="url(#breeze-release-management-verify-provider-packages-line-7)">(&gt;3.8&lt;&#160;|&#160;3.9&#160;|&#160;3.10&#160;|&#160;3.11&#160;|&#160;3.12)&#160;&#160;&#160;&#160;&#160;&#160;&# [...]
+</text><text class="breeze-release-management-verify-provider-packages-r5" x="0" y="215.2" textLength="12.2" clip-path="url(#breeze-release-management-verify-provider-packages-line-8)">│</text><text class="breeze-release-management-verify-provider-packages-r5" x="329.4" y="215.2" textLength="732" clip-path="url(#breeze-release-management-verify-provider-packages-line-8)">[default:&#160;3.8]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#1 [...]
+</text><text class="breeze-release-management-verify-provider-packages-r5" x="0" y="239.6" textLength="12.2" clip-path="url(#breeze-release-management-verify-provider-packages-line-9)">│</text><text class="breeze-release-management-verify-provider-packages-r4" x="24.4" y="239.6" textLength="183" clip-path="url(#breeze-release-management-verify-provider-packages-line-9)">--mount-sources</text><text class="breeze-release-management-verify-provider-packages-r1" x="329.4" y="239.6" textLengt [...]
+</text><text class="breeze-release-management-verify-provider-packages-r5" x="0" y="264" textLength="12.2" clip-path="url(#breeze-release-management-verify-provider-packages-line-10)">│</text><text class="breeze-release-management-verify-provider-packages-r1" x="329.4" y="264" textLength="1110.2" clip-path="url(#breeze-release-management-verify-provider-packages-line-10)">selected).&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160 [...]
+</text><text class="breeze-release-management-verify-provider-packages-r5" x="0" y="288.4" textLength="12.2" clip-path="url(#breeze-release-management-verify-provider-packages-line-11)">│</text><text class="breeze-release-management-verify-provider-packages-r7" x="329.4" y="288.4" textLength="1110.2" clip-path="url(#breeze-release-management-verify-provider-packages-line-11)">(selected&#160;|&#160;all&#160;|&#160;skip&#160;|&#160;remove&#160;|&#160;tests&#160;|&#160;providers-and-tests)& [...]
+</text><text class="breeze-release-management-verify-provider-packages-r5" x="0" y="312.8" textLength="12.2" clip-path="url(#breeze-release-management-verify-provider-packages-line-12)">│</text><text class="breeze-release-management-verify-provider-packages-r5" x="329.4" y="312.8" textLength="1110.2" clip-path="url(#breeze-release-management-verify-provider-packages-line-12)">[default:&#160;selected]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160 [...]
+</text><text class="breeze-release-management-verify-provider-packages-r5" x="0" y="337.2" textLength="12.2" clip-path="url(#breeze-release-management-verify-provider-packages-line-13)">│</text><text class="breeze-release-management-verify-provider-packages-r4" x="24.4" y="337.2" textLength="231.8" clip-path="url(#breeze-release-management-verify-provider-packages-line-13)">--github-repository</text><text class="breeze-release-management-verify-provider-packages-r6" x="280.6" y="337.2" t [...]
+</text><text class="breeze-release-management-verify-provider-packages-r5" x="0" y="361.6" textLength="1464" clip-path="url(#breeze-release-management-verify-provider-packages-line-14)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-release-management-verify-provider-packages-r1" x="1464" y="361.6" textLength="12.2" clip-path="url(#breeze-release-management-verify-provider-packages-line-14)">
+</text><text class="breeze-release-management-verify-provider-packages-r5" x="0" y="386" textLength="24.4" clip-path="url(#breeze-release-management-verify-provider-packages-line-15)">╭─</text><text class="breeze-release-management-verify-provider-packages-r5" x="24.4" y="386" textLength="512.4" clip-path="url(#breeze-release-management-verify-provider-packages-line-15)">&#160;Installing&#160;packages&#160;after&#160;entering&#160;shell&#160;</text><text class="breeze-release-management- [...]
+</text><text class="breeze-release-management-verify-provider-packages-r5" x="0" y="410.4" textLength="12.2" clip-path="url(#breeze-release-management-verify-provider-packages-line-16)">│</text><text class="breeze-release-management-verify-provider-packages-r4" x="24.4" y="410.4" textLength="366" clip-path="url(#breeze-release-management-verify-provider-packages-line-16)">--airflow-constraints-location</text><text class="breeze-release-management-verify-provider-packages-r1" x="756.4" y= [...]
+</text><text class="breeze-release-management-verify-provider-packages-r5" x="0" y="434.8" textLength="12.2" clip-path="url(#breeze-release-management-verify-provider-packages-line-17)">│</text><text class="breeze-release-management-verify-provider-packages-r1" x="756.4" y="434.8" textLength="683.2" clip-path="url(#breeze-release-management-verify-provider-packages-line-17)">local&#160;context&#160;file).&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; [...]
+</text><text class="breeze-release-management-verify-provider-packages-r5" x="0" y="459.2" textLength="12.2" clip-path="url(#breeze-release-management-verify-provider-packages-line-18)">│</text><text class="breeze-release-management-verify-provider-packages-r7" x="756.4" y="459.2" textLength="683.2" clip-path="url(#breeze-release-management-verify-provider-packages-line-18)">(TEXT)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; [...]
+</text><text class="breeze-release-management-verify-provider-packages-r5" x="0" y="483.6" textLength="12.2" clip-path="url(#breeze-release-management-verify-provider-packages-line-19)">│</text><text class="breeze-release-management-verify-provider-packages-r4" x="24.4" y="483.6" textLength="317.2" clip-path="url(#breeze-release-management-verify-provider-packages-line-19)">--airflow-constraints-mode</text><text class="breeze-release-management-verify-provider-packages-r1" x="756.4" y="4 [...]
+</text><text class="breeze-release-management-verify-provider-packages-r5" x="0" y="508" textLength="12.2" clip-path="url(#breeze-release-management-verify-provider-packages-line-20)">│</text><text class="breeze-release-management-verify-provider-packages-r7" x="756.4" y="508" textLength="683.2" clip-path="url(#breeze-release-management-verify-provider-packages-line-20)">(constraints-source-providers&#160;|&#160;constraints&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#16 [...]
+</text><text class="breeze-release-management-verify-provider-packages-r5" x="0" y="532.4" textLength="12.2" clip-path="url(#breeze-release-management-verify-provider-packages-line-21)">│</text><text class="breeze-release-management-verify-provider-packages-r7" x="756.4" y="532.4" textLength="683.2" clip-path="url(#breeze-release-management-verify-provider-packages-line-21)">constraints-no-providers)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160 [...]
+</text><text class="breeze-release-management-verify-provider-packages-r5" x="0" y="556.8" textLength="12.2" clip-path="url(#breeze-release-management-verify-provider-packages-line-22)">│</text><text class="breeze-release-management-verify-provider-packages-r5" x="756.4" y="556.8" textLength="683.2" clip-path="url(#breeze-release-management-verify-provider-packages-line-22)">[default:&#160;constraints-source-providers]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#16 [...]
+</text><text class="breeze-release-management-verify-provider-packages-r5" x="0" y="581.2" textLength="12.2" clip-path="url(#breeze-release-management-verify-provider-packages-line-23)">│</text><text class="breeze-release-management-verify-provider-packages-r4" x="24.4" y="581.2" textLength="378.2" clip-path="url(#breeze-release-management-verify-provider-packages-line-23)">--airflow-constraints-reference</text><text class="breeze-release-management-verify-provider-packages-r1" x="756.4" [...]
+</text><text class="breeze-release-management-verify-provider-packages-r5" x="0" y="605.6" textLength="12.2" clip-path="url(#breeze-release-management-verify-provider-packages-line-24)">│</text><text class="breeze-release-management-verify-provider-packages-r1" x="756.4" y="605.6" textLength="683.2" clip-path="url(#breeze-release-management-verify-provider-packages-line-24)">(used&#160;in&#160;calculated&#160;constraints&#160;URL).&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#1 [...]
+</text><text class="breeze-release-management-verify-provider-packages-r5" x="0" y="630" textLength="12.2" clip-path="url(#breeze-release-management-verify-provider-packages-line-25)">│</text><text class="breeze-release-management-verify-provider-packages-r7" x="756.4" y="630" textLength="683.2" clip-path="url(#breeze-release-management-verify-provider-packages-line-25)">(TEXT)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#16 [...]
+</text><text class="breeze-release-management-verify-provider-packages-r5" x="0" y="654.4" textLength="12.2" clip-path="url(#breeze-release-management-verify-provider-packages-line-26)">│</text><text class="breeze-release-management-verify-provider-packages-r4" x="24.4" y="654.4" textLength="195.2" clip-path="url(#breeze-release-management-verify-provider-packages-line-26)">--airflow-extras</text><text class="breeze-release-management-verify-provider-packages-r1" x="756.4" y="654.4" text [...]
+</text><text class="breeze-release-management-verify-provider-packages-r5" x="0" y="678.8" textLength="12.2" clip-path="url(#breeze-release-management-verify-provider-packages-line-27)">│</text><text class="breeze-release-management-verify-provider-packages-r1" x="756.4" y="678.8" textLength="683.2" clip-path="url(#breeze-release-management-verify-provider-packages-line-27)">used&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&# [...]
+</text><text class="breeze-release-management-verify-provider-packages-r5" x="0" y="703.2" textLength="12.2" clip-path="url(#breeze-release-management-verify-provider-packages-line-28)">│</text><text class="breeze-release-management-verify-provider-packages-r7" x="756.4" y="703.2" textLength="683.2" clip-path="url(#breeze-release-management-verify-provider-packages-line-28)">(TEXT)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; [...]
+</text><text class="breeze-release-management-verify-provider-packages-r5" x="0" y="727.6" textLength="12.2" clip-path="url(#breeze-release-management-verify-provider-packages-line-29)">│</text><text class="breeze-release-management-verify-provider-packages-r4" x="24.4" y="727.6" textLength="317.2" clip-path="url(#breeze-release-management-verify-provider-packages-line-29)">--airflow-skip-constraints</text><text class="breeze-release-management-verify-provider-packages-r1" x="756.4" y="7 [...]
+</text><text class="breeze-release-management-verify-provider-packages-r5" x="0" y="752" textLength="12.2" clip-path="url(#breeze-release-management-verify-provider-packages-line-30)">│</text><text class="breeze-release-management-verify-provider-packages-r4" x="24.4" y="752" textLength="341.6" clip-path="url(#breeze-release-management-verify-provider-packages-line-30)">--clean-airflow-installation</text><text class="breeze-release-management-verify-provider-packages-r1" x="756.4" y="752 [...]
+</text><text class="breeze-release-management-verify-provider-packages-r5" x="0" y="776.4" textLength="12.2" clip-path="url(#breeze-release-management-verify-provider-packages-line-31)">│</text><text class="breeze-release-management-verify-provider-packages-r1" x="756.4" y="776.4" textLength="158.6" clip-path="url(#breeze-release-management-verify-provider-packages-line-31)">specified&#160;by&#160;</text><text class="breeze-release-management-verify-provider-packages-r4" x="915" y="776.4 [...]
+</text><text class="breeze-release-management-verify-provider-packages-r5" x="0" y="800.8" textLength="12.2" clip-path="url(#breeze-release-management-verify-provider-packages-line-32)">│</text><text class="breeze-release-management-verify-provider-packages-r4" x="24.4" y="800.8" textLength="414.8" clip-path="url(#breeze-release-management-verify-provider-packages-line-32)">--install-airflow-with-constraints</text><text class="breeze-release-management-verify-provider-packages-r1" x="439 [...]
+</text><text class="breeze-release-management-verify-provider-packages-r5" x="0" y="825.2" textLength="12.2" clip-path="url(#breeze-release-management-verify-provider-packages-line-33)">│</text><text class="breeze-release-management-verify-provider-packages-r1" x="756.4" y="825.2" textLength="683.2" clip-path="url(#breeze-release-management-verify-provider-packages-line-33)">determined&#160;from&#160;package&#160;or&#160;airflow&#160;version.&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#16 [...]
+</text><text class="breeze-release-management-verify-provider-packages-r5" x="0" y="849.6" textLength="12.2" clip-path="url(#breeze-release-management-verify-provider-packages-line-34)">│</text><text class="breeze-release-management-verify-provider-packages-r5" x="756.4" y="849.6" textLength="683.2" clip-path="url(#breeze-release-management-verify-provider-packages-line-34)">[default:&#160;no-install-airflow-with-constraints]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</t [...]
+</text><text class="breeze-release-management-verify-provider-packages-r5" x="0" y="874" textLength="12.2" clip-path="url(#breeze-release-management-verify-provider-packages-line-35)">│</text><text class="breeze-release-management-verify-provider-packages-r4" x="24.4" y="874" textLength="341.6" clip-path="url(#breeze-release-management-verify-provider-packages-line-35)">--install-selected-providers</text><text class="breeze-release-management-verify-provider-packages-r1" x="756.4" y="874 [...]
+</text><text class="breeze-release-management-verify-provider-packages-r5" x="0" y="898.4" textLength="12.2" clip-path="url(#breeze-release-management-verify-provider-packages-line-36)">│</text><text class="breeze-release-management-verify-provider-packages-r1" x="756.4" y="898.4" textLength="231.8" clip-path="url(#breeze-release-management-verify-provider-packages-line-36)">installed&#160;(implies&#160;</text><text class="breeze-release-management-verify-provider-packages-r4" x="988.2"  [...]
+</text><text class="breeze-release-management-verify-provider-packages-r5" x="0" y="922.8" textLength="12.2" clip-path="url(#breeze-release-management-verify-provider-packages-line-37)">│</text><text class="breeze-release-management-verify-provider-packages-r7" x="756.4" y="922.8" textLength="683.2" clip-path="url(#breeze-release-management-verify-provider-packages-line-37)">(TEXT)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; [...]
+</text><text class="breeze-release-management-verify-provider-packages-r5" x="0" y="947.2" textLength="12.2" clip-path="url(#breeze-release-management-verify-provider-packages-line-38)">│</text><text class="breeze-release-management-verify-provider-packages-r4" x="24.4" y="947.2" textLength="195.2" clip-path="url(#breeze-release-management-verify-provider-packages-line-38)">--package-format</text><text class="breeze-release-management-verify-provider-packages-r1" x="756.4" y="947.2" text [...]
+</text><text class="breeze-release-management-verify-provider-packages-r5" x="0" y="971.6" textLength="12.2" clip-path="url(#breeze-release-management-verify-provider-packages-line-39)">│</text><text class="breeze-release-management-verify-provider-packages-r7" x="756.4" y="971.6" textLength="658.8" clip-path="url(#breeze-release-management-verify-provider-packages-line-39)">(wheel&#160;|&#160;sdist)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160 [...]
+</text><text class="breeze-release-management-verify-provider-packages-r5" x="0" y="996" textLength="12.2" clip-path="url(#breeze-release-management-verify-provider-packages-line-40)">│</text><text class="breeze-release-management-verify-provider-packages-r5" x="756.4" y="996" textLength="658.8" clip-path="url(#breeze-release-management-verify-provider-packages-line-40)">[default:&#160;wheel]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;& [...]
+</text><text class="breeze-release-management-verify-provider-packages-r5" x="0" y="1020.4" textLength="12.2" clip-path="url(#breeze-release-management-verify-provider-packages-line-41)">│</text><text class="breeze-release-management-verify-provider-packages-r4" x="24.4" y="1020.4" textLength="390.4" clip-path="url(#breeze-release-management-verify-provider-packages-line-41)">--providers-constraints-location</text><text class="breeze-release-management-verify-provider-packages-r1" x="756 [...]
+</text><text class="breeze-release-management-verify-provider-packages-r5" x="0" y="1044.8" textLength="12.2" clip-path="url(#breeze-release-management-verify-provider-packages-line-42)">│</text><text class="breeze-release-management-verify-provider-packages-r1" x="756.4" y="1044.8" textLength="683.2" clip-path="url(#breeze-release-management-verify-provider-packages-line-42)">local&#160;context&#160;file).&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#16 [...]
+</text><text class="breeze-release-management-verify-provider-packages-r5" x="0" y="1069.2" textLength="12.2" clip-path="url(#breeze-release-management-verify-provider-packages-line-43)">│</text><text class="breeze-release-management-verify-provider-packages-r7" x="756.4" y="1069.2" textLength="683.2" clip-path="url(#breeze-release-management-verify-provider-packages-line-43)">(TEXT)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#16 [...]
+</text><text class="breeze-release-management-verify-provider-packages-r5" x="0" y="1093.6" textLength="12.2" clip-path="url(#breeze-release-management-verify-provider-packages-line-44)">│</text><text class="breeze-release-management-verify-provider-packages-r4" x="24.4" y="1093.6" textLength="341.6" clip-path="url(#breeze-release-management-verify-provider-packages-line-44)">--providers-constraints-mode</text><text class="breeze-release-management-verify-provider-packages-r1" x="756.4"  [...]
+</text><text class="breeze-release-management-verify-provider-packages-r5" x="0" y="1118" textLength="12.2" clip-path="url(#breeze-release-management-verify-provider-packages-line-45)">│</text><text class="breeze-release-management-verify-provider-packages-r7" x="756.4" y="1118" textLength="683.2" clip-path="url(#breeze-release-management-verify-provider-packages-line-45)">(constraints-source-providers&#160;|&#160;constraints&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&# [...]
+</text><text class="breeze-release-management-verify-provider-packages-r5" x="0" y="1142.4" textLength="12.2" clip-path="url(#breeze-release-management-verify-provider-packages-line-46)">│</text><text class="breeze-release-management-verify-provider-packages-r7" x="756.4" y="1142.4" textLength="683.2" clip-path="url(#breeze-release-management-verify-provider-packages-line-46)">constraints-no-providers)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#1 [...]
+</text><text class="breeze-release-management-verify-provider-packages-r5" x="0" y="1166.8" textLength="12.2" clip-path="url(#breeze-release-management-verify-provider-packages-line-47)">│</text><text class="breeze-release-management-verify-provider-packages-r5" x="756.4" y="1166.8" textLength="683.2" clip-path="url(#breeze-release-management-verify-provider-packages-line-47)">[default:&#160;constraints-source-providers]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&# [...]
+</text><text class="breeze-release-management-verify-provider-packages-r5" x="0" y="1191.2" textLength="12.2" clip-path="url(#breeze-release-management-verify-provider-packages-line-48)">│</text><text class="breeze-release-management-verify-provider-packages-r4" x="24.4" y="1191.2" textLength="402.6" clip-path="url(#breeze-release-management-verify-provider-packages-line-48)">--providers-constraints-reference</text><text class="breeze-release-management-verify-provider-packages-r1" x="75 [...]
+</text><text class="breeze-release-management-verify-provider-packages-r5" x="0" y="1215.6" textLength="12.2" clip-path="url(#breeze-release-management-verify-provider-packages-line-49)">│</text><text class="breeze-release-management-verify-provider-packages-r1" x="756.4" y="1215.6" textLength="683.2" clip-path="url(#breeze-release-management-verify-provider-packages-line-49)">(used&#160;in&#160;calculated&#160;constraints&#160;URL).&#160;Can&#160;be&#160;&#x27;default&#x27;&#160;&#160;< [...]
+</text><text class="breeze-release-management-verify-provider-packages-r5" x="0" y="1240" textLength="12.2" clip-path="url(#breeze-release-management-verify-provider-packages-line-50)">│</text><text class="breeze-release-management-verify-provider-packages-r1" x="756.4" y="1240" textLength="683.2" clip-path="url(#breeze-release-management-verify-provider-packages-line-50)">in&#160;which&#160;case&#160;the&#160;default&#160;constraints-reference&#160;is&#160;used.</text><text class="breez [...]
+</text><text class="breeze-release-management-verify-provider-packages-r5" x="0" y="1264.4" textLength="12.2" clip-path="url(#breeze-release-management-verify-provider-packages-line-51)">│</text><text class="breeze-release-management-verify-provider-packages-r7" x="756.4" y="1264.4" textLength="683.2" clip-path="url(#breeze-release-management-verify-provider-packages-line-51)">(TEXT)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#16 [...]
+</text><text class="breeze-release-management-verify-provider-packages-r5" x="0" y="1288.8" textLength="12.2" clip-path="url(#breeze-release-management-verify-provider-packages-line-52)">│</text><text class="breeze-release-management-verify-provider-packages-r4" x="24.4" y="1288.8" textLength="341.6" clip-path="url(#breeze-release-management-verify-provider-packages-line-52)">--providers-skip-constraints</text><text class="breeze-release-management-verify-provider-packages-r1" x="756.4"  [...]
+</text><text class="breeze-release-management-verify-provider-packages-r5" x="0" y="1313.2" textLength="12.2" clip-path="url(#breeze-release-management-verify-provider-packages-line-53)">│</text><text class="breeze-release-management-verify-provider-packages-r4" x="24.4" y="1313.2" textLength="256.2" clip-path="url(#breeze-release-management-verify-provider-packages-line-53)">--use-airflow-version</text><text class="breeze-release-management-verify-provider-packages-r1" x="756.4" y="1313 [...]
+</text><text class="breeze-release-management-verify-provider-packages-r5" x="0" y="1337.6" textLength="12.2" clip-path="url(#breeze-release-management-verify-provider-packages-line-54)">│</text><text class="breeze-release-management-verify-provider-packages-r1" x="756.4" y="1337.6" textLength="683.2" clip-path="url(#breeze-release-management-verify-provider-packages-line-54)">can&#160;also&#160;be&#160;version&#160;(to&#160;install&#160;from&#160;PyPI),&#160;`none`,&#160;&#160;&#160;&#1 [...]
+</text><text class="breeze-release-management-verify-provider-packages-r5" x="0" y="1362" textLength="12.2" clip-path="url(#breeze-release-management-verify-provider-packages-line-55)">│</text><text class="breeze-release-management-verify-provider-packages-r1" x="756.4" y="1362" textLength="683.2" clip-path="url(#breeze-release-management-verify-provider-packages-line-55)">`wheel`,&#160;or&#160;`sdist`&#160;to&#160;install&#160;from&#160;`dist`&#160;folder,&#160;or&#160;&#160;&#160;</tex [...]
+</text><text class="breeze-release-management-verify-provider-packages-r5" x="0" y="1386.4" textLength="12.2" clip-path="url(#breeze-release-management-verify-provider-packages-line-56)">│</text><text class="breeze-release-management-verify-provider-packages-r1" x="756.4" y="1386.4" textLength="683.2" clip-path="url(#breeze-release-management-verify-provider-packages-line-56)">VCS&#160;URL&#160;to&#160;install&#160;from&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#1 [...]
+</text><text class="breeze-release-management-verify-provider-packages-r5" x="0" y="1410.8" textLength="12.2" clip-path="url(#breeze-release-management-verify-provider-packages-line-57)">│</text><text class="breeze-release-management-verify-provider-packages-r1" x="756.4" y="1410.8" textLength="683.2" clip-path="url(#breeze-release-management-verify-provider-packages-line-57)">(https://pip.pypa.io/en/stable/topics/vcs-support/).&#160;&#160;&#160;&#160;</text><text class="breeze-release-m [...]
+</text><text class="breeze-release-management-verify-provider-packages-r5" x="0" y="1435.2" textLength="12.2" clip-path="url(#breeze-release-management-verify-provider-packages-line-58)">│</text><text class="breeze-release-management-verify-provider-packages-r1" x="756.4" y="1435.2" textLength="97.6" clip-path="url(#breeze-release-management-verify-provider-packages-line-58)">Implies&#160;</text><text class="breeze-release-management-verify-provider-packages-r4" x="854" y="1435.2" textLe [...]
+</text><text class="breeze-release-management-verify-provider-packages-r5" x="0" y="1459.6" textLength="12.2" clip-path="url(#breeze-release-management-verify-provider-packages-line-59)">│</text><text class="breeze-release-management-verify-provider-packages-r7" x="756.4" y="1459.6" textLength="683.2" clip-path="url(#breeze-release-management-verify-provider-packages-line-59)">(none&#160;|&#160;wheel&#160;|&#160;sdist&#160;|&#160;&lt;airflow_version&gt;)&#160;&#160;&#160;&#160;&#160;&#16 [...]
+</text><text class="breeze-release-management-verify-provider-packages-r5" x="0" y="1484" textLength="12.2" clip-path="url(#breeze-release-management-verify-provider-packages-line-60)">│</text><text class="breeze-release-management-verify-provider-packages-r4" x="24.4" y="1484" textLength="292.8" clip-path="url(#breeze-release-management-verify-provider-packages-line-60)">--use-packages-from-dist</text><text class="breeze-release-management-verify-provider-packages-r1" x="756.4" y="1484" [...]
+</text><text class="breeze-release-management-verify-provider-packages-r5" x="0" y="1508.4" textLength="12.2" clip-path="url(#breeze-release-management-verify-provider-packages-line-61)">│</text><text class="breeze-release-management-verify-provider-packages-r1" x="756.4" y="1508.4" textLength="683.2" clip-path="url(#breeze-release-management-verify-provider-packages-line-61)">type)&#160;from&#160;&#x27;dist&#x27;&#160;folder&#160;when&#160;entering&#160;breeze.&#160;&#160;&#160;&#160;&# [...]
+</text><text class="breeze-release-management-verify-provider-packages-r5" x="0" y="1532.8" textLength="1464" clip-path="url(#breeze-release-management-verify-provider-packages-line-62)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-release-management-verify-provider-packages-r1" x="1464" y="1532.8" textLength="12.2" clip-path="url(#breeze-release-management-verify-provider-packages-line-62)">
+</text><text class="breeze-release-management-verify-provider-packages-r5" x="0" y="1557.2" textLength="24.4" clip-path="url(#breeze-release-management-verify-provider-packages-line-63)">╭─</text><text class="breeze-release-management-verify-provider-packages-r5" x="24.4" y="1557.2" textLength="195.2" clip-path="url(#breeze-release-management-verify-provider-packages-line-63)">&#160;Common&#160;options&#160;</text><text class="breeze-release-management-verify-provider-packages-r5" x="219 [...]
+</text><text class="breeze-release-management-verify-provider-packages-r5" x="0" y="1581.6" textLength="12.2" clip-path="url(#breeze-release-management-verify-provider-packages-line-64)">│</text><text class="breeze-release-management-verify-provider-packages-r4" x="24.4" y="1581.6" textLength="109.8" clip-path="url(#breeze-release-management-verify-provider-packages-line-64)">--dry-run</text><text class="breeze-release-management-verify-provider-packages-r6" x="158.6" y="1581.6" textLeng [...]
+</text><text class="breeze-release-management-verify-provider-packages-r5" x="0" y="1606" textLength="12.2" clip-path="url(#breeze-release-management-verify-provider-packages-line-65)">│</text><text class="breeze-release-management-verify-provider-packages-r4" x="24.4" y="1606" textLength="109.8" clip-path="url(#breeze-release-management-verify-provider-packages-line-65)">--verbose</text><text class="breeze-release-management-verify-provider-packages-r6" x="158.6" y="1606" textLength="24 [...]
+</text><text class="breeze-release-management-verify-provider-packages-r5" x="0" y="1630.4" textLength="12.2" clip-path="url(#breeze-release-management-verify-provider-packages-line-66)">│</text><text class="breeze-release-management-verify-provider-packages-r4" x="24.4" y="1630.4" textLength="73.2" clip-path="url(#breeze-release-management-verify-provider-packages-line-66)">--help</text><text class="breeze-release-management-verify-provider-packages-r6" x="158.6" y="1630.4" textLength=" [...]
+</text><text class="breeze-release-management-verify-provider-packages-r5" x="0" y="1654.8" textLength="1464" clip-path="url(#breeze-release-management-verify-provider-packages-line-67)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-release-management-verify-provider-packages-r1" x="1464" y="1654.8" textLength="12.2" clip-path="url(#breeze-release-management-verify-provider-packages-line-67)">
 </text>
     </g>
     </g>
diff --git a/dev/breeze/doc/images/output_release-management_verify-provider-packages.txt b/dev/breeze/doc/images/output_release-management_verify-provider-packages.txt
index ce367241ef2..7fd442d7009 100644
--- a/dev/breeze/doc/images/output_release-management_verify-provider-packages.txt
+++ b/dev/breeze/doc/images/output_release-management_verify-provider-packages.txt
@@ -1 +1 @@
-627539a2eca6bbf7f261697db125f983
+c092d6e71312d96e28f98f537fd88796
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..7ca69f16e4a 100644
--- a/dev/breeze/doc/images/output_sbom_export-dependency-information.svg
+++ b/dev/breeze/doc/images/output_sbom_export-dependency-information.svg
@@ -160,8 +160,8 @@
 </text><text class="breeze-sbom-export-dependency-information-r5" x="0" y="142" textLength="24.4" clip-path="url(#breeze-sbom-export-dependency-information-line-5)">╭─</text><text class="breeze-sbom-export-dependency-information-r5" x="24.4" y="142" textLength="451.4" clip-path="url(#breeze-sbom-export-dependency-information-line-5)">&#160;Export&#160;dependency&#160;information&#160;flags&#160;</text><text class="breeze-sbom-export-dependency-information-r5" x="475.8" y="142" textLength [...]
 </text><text class="breeze-sbom-export-dependency-information-r5" x="0" y="166.4" textLength="12.2" clip-path="url(#breeze-sbom-export-dependency-information-line-6)">│</text><text class="breeze-sbom-export-dependency-information-r6" x="24.4" y="166.4" textLength="12.2" clip-path="url(#breeze-sbom-export-dependency-information-line-6)">*</text><text class="breeze-sbom-export-dependency-information-r4" x="61" y="166.4" textLength="207.4" clip-path="url(#breeze-sbom-export-dependency-infor [...]
 </text><text class="breeze-sbom-export-dependency-information-r5" x="0" y="190.8" textLength="12.2" clip-path="url(#breeze-sbom-export-dependency-information-line-7)">│</text><text class="breeze-sbom-export-dependency-information-r4" x="61" y="190.8" textLength="97.6" clip-path="url(#breeze-sbom-export-dependency-information-line-7)">--python</text><text class="breeze-sbom-export-dependency-information-r7" x="427" y="190.8" textLength="24.4" clip-path="url(#breeze-sbom-export-dependency- [...]
-</text><text class="breeze-sbom-export-dependency-information-r5" x="0" y="215.2" textLength="12.2" clip-path="url(#breeze-sbom-export-dependency-information-line-8)">│</text><text class="breeze-sbom-export-dependency-information-r8" x="475.8" y="215.2" textLength="732" clip-path="url(#breeze-sbom-export-dependency-information-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-sbom-export-dependency-information-r5" x="0" y="239.6" textLength="12.2" clip-path="url(#breeze-sbom-export-dependency-information-line-9)">│</text><text class="breeze-sbom-export-dependency-information-r5" x="475.8" y="239.6" textLength="732" clip-path="url(#breeze-sbom-export-dependency-information-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-sbom-export-dependency-information-r5" x="0" y="215.2" textLength="12.2" clip-path="url(#breeze-sbom-export-dependency-information-line-8)">│</text><text class="breeze-sbom-export-dependency-information-r8" x="475.8" y="215.2" textLength="732" clip-path="url(#breeze-sbom-export-dependency-information-line-8)">(&gt;3.8&lt;&#160;|&#160;3.9&#160;|&#160;3.10&#160;|&#160;3.11&#160;|&#160;3.12)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&# [...]
+</text><text class="breeze-sbom-export-dependency-information-r5" x="0" y="239.6" textLength="12.2" clip-path="url(#breeze-sbom-export-dependency-information-line-9)">│</text><text class="breeze-sbom-export-dependency-information-r5" x="475.8" y="239.6" textLength="732" clip-path="url(#breeze-sbom-export-dependency-information-line-9)">[default:&#160;3.8]&#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-sbom-export-dependency-information-r5" x="0" y="264" textLength="12.2" clip-path="url(#breeze-sbom-export-dependency-information-line-10)">│</text><text class="breeze-sbom-export-dependency-information-r4" x="61" y="264" textLength="341.6" clip-path="url(#breeze-sbom-export-dependency-information-line-10)">--include-open-psf-scorecard</text><text class="breeze-sbom-export-dependency-information-r7" x="427" y="264" textLength="24.4" clip-path="url(#breeze-sbom-e [...]
 </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 [...]
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 624c885a7c0..8e3aafe7eeb 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 @@
-dae379c46a11a46a2cef916899fea34f
+9b70343c1f234949268e2a38a1b9fef4
diff --git a/dev/breeze/doc/images/output_setup_config.svg b/dev/breeze/doc/images/output_setup_config.svg
index 808e5e2c306..69780cb5426 100644
--- a/dev/breeze/doc/images/output_setup_config.svg
+++ b/dev/breeze/doc/images/output_setup_config.svg
@@ -130,8 +130,8 @@
 </text><text class="breeze-setup-config-r1" x="1464" y="117.6" textLength="12.2" clip-path="url(#breeze-setup-config-line-4)">
 </text><text class="breeze-setup-config-r5" x="0" y="142" textLength="24.4" clip-path="url(#breeze-setup-config-line-5)">╭─</text><text class="breeze-setup-config-r5" x="24.4" y="142" textLength="170.8" clip-path="url(#breeze-setup-config-line-5)">&#160;Config&#160;flags&#160;</text><text class="breeze-setup-config-r5" x="195.2" y="142" textLength="1244.4" clip-path="url(#breeze-setup-config-line-5)">──────────────────────────────────────────────────────────────────────────────────────── [...]
 </text><text class="breeze-setup-config-r5" x="0" y="166.4" textLength="12.2" clip-path="url(#breeze-setup-config-line-6)">│</text><text class="breeze-setup-config-r4" x="24.4" y="166.4" textLength="97.6" clip-path="url(#breeze-setup-config-line-6)">--python</text><text class="breeze-setup-config-r6" x="390.4" y="166.4" textLength="24.4" clip-path="url(#breeze-setup-config-line-6)">-p</text><text class="breeze-setup-config-r1" x="475.8" y="166.4" textLength="732" clip-path="url(#breeze-s [...]
-</text><text class="breeze-setup-config-r5" x="0" y="190.8" textLength="12.2" clip-path="url(#breeze-setup-config-line-7)">│</text><text class="breeze-setup-config-r7" x="475.8" y="190.8" textLength="732" clip-path="url(#breeze-setup-config-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;&#16 [...]
-</text><text class="breeze-setup-config-r5" x="0" y="215.2" textLength="12.2" clip-path="url(#breeze-setup-config-line-8)">│</text><text class="breeze-setup-config-r5" x="475.8" y="215.2" textLength="732" clip-path="url(#breeze-setup-config-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;&#160;& [...]
+</text><text class="breeze-setup-config-r5" x="0" y="190.8" textLength="12.2" clip-path="url(#breeze-setup-config-line-7)">│</text><text class="breeze-setup-config-r7" x="475.8" y="190.8" textLength="732" clip-path="url(#breeze-setup-config-line-7)">(&gt;3.8&lt;&#160;|&#160;3.9&#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;</text [...]
+</text><text class="breeze-setup-config-r5" x="0" y="215.2" textLength="12.2" clip-path="url(#breeze-setup-config-line-8)">│</text><text class="breeze-setup-config-r5" x="475.8" y="215.2" textLength="732" clip-path="url(#breeze-setup-config-line-8)">[default:&#160;3.8]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#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-setup-config-r5" x="0" y="239.6" textLength="12.2" clip-path="url(#breeze-setup-config-line-9)">│</text><text class="breeze-setup-config-r4" x="24.4" y="239.6" textLength="109.8" clip-path="url(#breeze-setup-config-line-9)">--backend</text><text class="breeze-setup-config-r6" x="390.4" y="239.6" textLength="24.4" clip-path="url(#breeze-setup-config-line-9)">-b</text><text class="breeze-setup-config-r1" x="475.8" y="239.6" textLength="963.8" clip-path="url(#bree [...]
 </text><text class="breeze-setup-config-r5" x="0" y="264" textLength="12.2" clip-path="url(#breeze-setup-config-line-10)">│</text><text class="breeze-setup-config-r1" x="475.8" y="264" textLength="963.8" clip-path="url(#breeze-setup-config-line-10)">database&#160;configuration,&#160;meaning&#160;there&#160;will&#160;be&#160;no&#160;database&#160;available,&#160;and&#160;any&#160;&#160;&#160;</text><text class="breeze-setup-config-r5" x="1451.8" y="264" textLength="12.2" clip-path="url(#b [...]
 </text><text class="breeze-setup-config-r5" x="0" y="288.4" textLength="12.2" clip-path="url(#breeze-setup-config-line-11)">│</text><text class="breeze-setup-config-r1" x="475.8" y="288.4" textLength="963.8" clip-path="url(#breeze-setup-config-line-11)">attempts&#160;to&#160;connect&#160;to&#160;the&#160;Airflow&#160;database&#160;will&#160;fail.&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; [...]
diff --git a/dev/breeze/doc/images/output_setup_config.txt b/dev/breeze/doc/images/output_setup_config.txt
index 6bc958bebb2..97d022c37b5 100644
--- a/dev/breeze/doc/images/output_setup_config.txt
+++ b/dev/breeze/doc/images/output_setup_config.txt
@@ -1 +1 @@
-ee2e731f011b1d93dcbfbcaebf6482a6
+783acef079cbdd31cd7880618c20fae5
diff --git a/dev/breeze/doc/images/output_shell.svg b/dev/breeze/doc/images/output_shell.svg
index 1e23fe528b6..1e86993b2c4 100644
--- a/dev/breeze/doc/images/output_shell.svg
+++ b/dev/breeze/doc/images/output_shell.svg
@@ -538,8 +538,8 @@
 </text><text class="breeze-shell-r1" x="1464" y="117.6" textLength="12.2" clip-path="url(#breeze-shell-line-4)">
 </text><text class="breeze-shell-r5" x="0" y="142" textLength="24.4" clip-path="url(#breeze-shell-line-5)">╭─</text><text class="breeze-shell-r5" x="24.4" y="142" textLength="195.2" clip-path="url(#breeze-shell-line-5)">&#160;Execution&#160;mode&#160;</text><text class="breeze-shell-r5" x="219.6" y="142" textLength="1220" clip-path="url(#breeze-shell-line-5)">────────────────────────────────────────────────────────────────────────────────────────────────────</text><text class="breeze-she [...]
 </text><text class="breeze-shell-r5" x="0" y="166.4" textLength="12.2" clip-path="url(#breeze-shell-line-6)">│</text><text class="breeze-shell-r4" x="24.4" y="166.4" textLength="97.6" clip-path="url(#breeze-shell-line-6)">--python</text><text class="breeze-shell-r6" x="366" y="166.4" textLength="24.4" clip-path="url(#breeze-shell-line-6)">-p</text><text class="breeze-shell-r1" x="414.8" y="166.4" textLength="732" clip-path="url(#breeze-shell-line-6)">Python&#160;major/minor&#160;version& [...]
-</text><text class="breeze-shell-r5" x="0" y="190.8" textLength="12.2" clip-path="url(#breeze-shell-line-7)">│</text><text class="breeze-shell-r7" x="414.8" y="190.8" textLength="732" clip-path="url(#breeze-shell-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;&#160;&#160;&#160;</text><text c [...]
-</text><text class="breeze-shell-r5" x="0" y="215.2" textLength="12.2" clip-path="url(#breeze-shell-line-8)">│</text><text class="breeze-shell-r5" x="414.8" y="215.2" textLength="732" clip-path="url(#breeze-shell-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;&#160;&#160;&#160;&#160;&#160;&#160 [...]
+</text><text class="breeze-shell-r5" x="0" y="190.8" textLength="12.2" clip-path="url(#breeze-shell-line-7)">│</text><text class="breeze-shell-r7" x="414.8" y="190.8" textLength="732" clip-path="url(#breeze-shell-line-7)">(&gt;3.8&lt;&#160;|&#160;3.9&#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;</text><text class="breeze-shell-r [...]
+</text><text class="breeze-shell-r5" x="0" y="215.2" textLength="12.2" clip-path="url(#breeze-shell-line-8)">│</text><text class="breeze-shell-r5" x="414.8" y="215.2" textLength="732" clip-path="url(#breeze-shell-line-8)">[default:&#160;3.8]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#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="239.6" textLength="12.2" clip-path="url(#breeze-shell-line-9)">│</text><text class="breeze-shell-r4" x="24.4" y="239.6" textLength="158.6" clip-path="url(#breeze-shell-line-9)">--integration</text><text class="breeze-shell-r1" x="414.8" y="239.6" textLength="1024.8" clip-path="url(#breeze-shell-line-9)">Integration(s)&#160;to&#160;enable&#160;when&#160;running&#160;(can&#160;be&#160;more&#160;than&#160;one).&#160;&#160;&#160;&#160;&#160;&#160 [...]
 </text><text class="breeze-shell-r5" x="0" y="264" textLength="12.2" clip-path="url(#breeze-shell-line-10)">│</text><text class="breeze-shell-r7" x="414.8" y="264" textLength="1024.8" clip-path="url(#breeze-shell-line-10)">(all&#160;|&#160;all-testable&#160;|&#160;cassandra&#160;|&#160;celery&#160;|&#160;drill&#160;|&#160;kafka&#160;|&#160;kerberos&#160;|&#160;mongo&#160;|&#160;mssql&#160;</text><text class="breeze-shell-r5" x="1451.8" y="264" textLength="12.2" clip-path="url(#breeze-she [...]
 </text><text class="breeze-shell-r5" x="0" y="288.4" textLength="12.2" clip-path="url(#breeze-shell-line-11)">│</text><text class="breeze-shell-r7" x="414.8" y="288.4" textLength="1024.8" clip-path="url(#breeze-shell-line-11)">|&#160;openlineage&#160;|&#160;otel&#160;|&#160;pinot&#160;|&#160;qdrant&#160;|&#160;redis&#160;|&#160;statsd&#160;|&#160;trino&#160;|&#160;ydb)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-shel [...]
diff --git a/dev/breeze/doc/images/output_shell.txt b/dev/breeze/doc/images/output_shell.txt
index 51aa99ed73c..8529a312009 100644
--- a/dev/breeze/doc/images/output_shell.txt
+++ b/dev/breeze/doc/images/output_shell.txt
@@ -1 +1 @@
-94eabd0345df65038958fc4842a0ff4b
+12f9e4a84051e05a5e0b9ec4fe3c8632
diff --git a/dev/breeze/doc/images/output_start-airflow.svg b/dev/breeze/doc/images/output_start-airflow.svg
index 7770587d74e..55bac0da8cd 100644
--- a/dev/breeze/doc/images/output_start-airflow.svg
+++ b/dev/breeze/doc/images/output_start-airflow.svg
@@ -404,8 +404,8 @@
 </text><text class="breeze-start-airflow-r1" x="1464" y="142" textLength="12.2" clip-path="url(#breeze-start-airflow-line-5)">
 </text><text class="breeze-start-airflow-r5" x="0" y="166.4" textLength="24.4" clip-path="url(#breeze-start-airflow-line-6)">╭─</text><text class="breeze-start-airflow-r5" x="24.4" y="166.4" textLength="195.2" clip-path="url(#breeze-start-airflow-line-6)">&#160;Execution&#160;mode&#160;</text><text class="breeze-start-airflow-r5" x="219.6" y="166.4" textLength="1220" clip-path="url(#breeze-start-airflow-line-6)">──────────────────────────────────────────────────────────────────────────── [...]
 </text><text class="breeze-start-airflow-r5" x="0" y="190.8" textLength="12.2" clip-path="url(#breeze-start-airflow-line-7)">│</text><text class="breeze-start-airflow-r4" x="24.4" y="190.8" textLength="97.6" clip-path="url(#breeze-start-airflow-line-7)">--python</text><text class="breeze-start-airflow-r6" x="366" y="190.8" textLength="24.4" clip-path="url(#breeze-start-airflow-line-7)">-p</text><text class="breeze-start-airflow-r1" x="414.8" y="190.8" textLength="732" clip-path="url(#bre [...]
-</text><text class="breeze-start-airflow-r5" x="0" y="215.2" textLength="12.2" clip-path="url(#breeze-start-airflow-line-8)">│</text><text class="breeze-start-airflow-r7" x="414.8" y="215.2" textLength="732" clip-path="url(#breeze-start-airflow-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;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; [...]
-</text><text class="breeze-start-airflow-r5" x="0" y="239.6" textLength="12.2" clip-path="url(#breeze-start-airflow-line-9)">│</text><text class="breeze-start-airflow-r5" x="414.8" y="239.6" textLength="732" clip-path="url(#breeze-start-airflow-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;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#1 [...]
+</text><text class="breeze-start-airflow-r5" x="0" y="215.2" textLength="12.2" clip-path="url(#breeze-start-airflow-line-8)">│</text><text class="breeze-start-airflow-r7" x="414.8" y="215.2" textLength="732" clip-path="url(#breeze-start-airflow-line-8)">(&gt;3.8&lt;&#160;|&#160;3.9&#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;</ [...]
+</text><text class="breeze-start-airflow-r5" x="0" y="239.6" textLength="12.2" clip-path="url(#breeze-start-airflow-line-9)">│</text><text class="breeze-start-airflow-r5" x="414.8" y="239.6" textLength="732" clip-path="url(#breeze-start-airflow-line-9)">[default:&#160;3.8]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#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-start-airflow-r5" x="0" y="264" textLength="12.2" clip-path="url(#breeze-start-airflow-line-10)">│</text><text class="breeze-start-airflow-r4" x="24.4" y="264" textLength="122" clip-path="url(#breeze-start-airflow-line-10)">--platform</text><text class="breeze-start-airflow-r1" x="414.8" y="264" textLength="329.4" clip-path="url(#breeze-start-airflow-line-10)">Platform&#160;for&#160;Airflow&#160;image.</text><text class="breeze-start-airflow-r7" x="756.4" y="26 [...]
 </text><text class="breeze-start-airflow-r5" x="0" y="288.4" textLength="12.2" clip-path="url(#breeze-start-airflow-line-11)">│</text><text class="breeze-start-airflow-r4" x="24.4" y="288.4" textLength="158.6" clip-path="url(#breeze-start-airflow-line-11)">--integration</text><text class="breeze-start-airflow-r1" x="414.8" y="288.4" textLength="1024.8" clip-path="url(#breeze-start-airflow-line-11)">Integration(s)&#160;to&#160;enable&#160;when&#160;running&#160;(can&#160;be&#160;more&#160 [...]
 </text><text class="breeze-start-airflow-r5" x="0" y="312.8" textLength="12.2" clip-path="url(#breeze-start-airflow-line-12)">│</text><text class="breeze-start-airflow-r7" x="414.8" y="312.8" textLength="1024.8" clip-path="url(#breeze-start-airflow-line-12)">(all&#160;|&#160;all-testable&#160;|&#160;cassandra&#160;|&#160;celery&#160;|&#160;drill&#160;|&#160;kafka&#160;|&#160;kerberos&#160;|&#160;mongo&#160;|&#160;mssql&#160;</text><text class="breeze-start-airflow-r5" x="1451.8" y="312.8 [...]
diff --git a/dev/breeze/doc/images/output_start-airflow.txt b/dev/breeze/doc/images/output_start-airflow.txt
index 65c587a1c2b..3aaa148b8ca 100644
--- a/dev/breeze/doc/images/output_start-airflow.txt
+++ b/dev/breeze/doc/images/output_start-airflow.txt
@@ -1 +1 @@
-f32bc14609bdfe554743cf2752bf7701
+f6365a250b86242436df9236025d447f
diff --git a/dev/breeze/doc/images/output_static-checks.svg b/dev/breeze/doc/images/output_static-checks.svg
index ade76225d10..36b88513a56 100644
--- a/dev/breeze/doc/images/output_static-checks.svg
+++ b/dev/breeze/doc/images/output_static-checks.svg
@@ -336,19 +336,19 @@
 </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-builtin-literals&#160;|&#160;check-changelog-format&#160;|&#160;&#160;&#160;&#160;&#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="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-changelog-has-no-duplicates&#160;|&#160;check-cncf-k8s-only-for-executors&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-static-checks-r5" x="1451.8" y="337.2" textLength="12.2" clip [...]
 </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-code-deprecations&#160;|&#160;check-common-compat-used-for-openlineage&#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="361.6" textLen [...]
-</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-core-deprecation-classes&#160;|&#160;check-daysago-import-from-utils&#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="386" tex [...]
-</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)">check-decorated-operator-implements-custom-name&#160;|&#160;check-deferrable-default&#160;|&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-static-checks-r5" x="1451.8" y="410.4" textLength="12.2" clip-path="url(#breeze-static [...]
-</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-google-re2-as-dependency&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-static-checks-r5" x="1451.8" y="508" textLength="12.2" clip-path="url( [...]
-</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-hatch-build-order&#160;|&#160;check-hooks-apply&#160;|&#160;check-incorrect-use-of-LoggingMixin</text><text class="breeze-static-checks-r5" x="1451.8" y="532.4" textLength="12.2" clip-path="url(#breeze-static-checks-line-21)">│< [...]
-</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)">|&#160;check-init-decorator-arguments&#160;|&#160;check-integrations-list-consistent&#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="12.2" [...]
-</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-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;</t [...]
-</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="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-compat-cache-on-methods&#160;|&#160;check-core-deprecation-classes&#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.8" y [...]
+</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)">check-daysago-import-from-utils&#160;|&#160;check-decorated-operator-implements-custom-name</text><text class="breeze-static-checks-r5" x="1451.8" y="410.4" textLength="12.2" clip-path="url(#breeze-static-checks-line-16)">│</text><tex [...]
+</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)">|&#160;check-deferrable-default&#160;|&#160;check-docstring-param-types&#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="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-example-dags-urls&#160;|&#160;check-executables-have-shebangs&#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-s [...]
+</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-extra-packages-references&#160;|&#160;check-extras-order&#160;|&#160;check-fab-migrations&#160;|&#160;&#160;&#160;&#160;</text><text class="breeze-static-checks-r5" x="1451.8" y="483.6" textLength="12.2" clip-path="url(#breeze-s [...]
+</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-for-inclusive-language&#160;|&#160;check-get-lineage-collector-providers&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-static-checks-r5" x="1451.8" y="508" textLength="12.2" clip- [...]
+</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-google-re2-as-dependency&#160;|&#160;check-hatch-build-order&#160;|&#160;check-hooks-apply&#160;|&#160;&#160;&#160;</text><text class="breeze-static-checks-r5" x="1451.8" y="532.4" textLength="12.2" clip-path="url(#breeze-static [...]
+</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-incorrect-use-of-LoggingMixin&#160;|&#160;check-init-decorator-arguments&#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="12.2" [...]
+</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-integrations-list-consistent&#160;|&#160;check-lazy-logging&#160;|&#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="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-links-to-example-dags-do-not-use-hardcoded-versions&#160;|&#160;check-merge-conflict&#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><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)">|&#160;check-newsfragments-are-valid&#160;|&#160;check-no-airflow-deprecation-in-providers&#160;|&#160;&#160;&#160;&#160;</text><text class="breeze-static-checks-r5" x="1451.8" y="630" textLength="12.2" clip-path="url(#breeze-static-check [...]
+</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-no-providers-in-core-examples&#160;|&#160;check-only-new-session-with-provide-session</text><text class="breeze-static-checks-r5" x="1451.8" y="654.4" textLength="12.2" clip-path="url(#breeze-static-checks-line-26)">│</text><tex [...]
+</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)">|&#160;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;</text><text class="breeze-s [...]
 </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-init-file-missing&#160;|&#160;check-providers-subpackages-init-file-exist&#160;|</text><text class="breeze-static-checks-r5" x="1451.8" y="752" textLength="12.2" clip-path="url(#breeze-static-checks-line-30)">│</text><text [...]
diff --git a/dev/breeze/doc/images/output_static-checks.txt b/dev/breeze/doc/images/output_static-checks.txt
index 0b4fae743bd..9e3ae461306 100644
--- a/dev/breeze/doc/images/output_static-checks.txt
+++ b/dev/breeze/doc/images/output_static-checks.txt
@@ -1 +1 @@
-769905ba0e5eea7f79c37b2d047699e0
+e33cdf5f43d8c63290e44e92dc19d2c4
diff --git a/dev/breeze/doc/images/output_testing_db-tests.svg b/dev/breeze/doc/images/output_testing_db-tests.svg
index 708665af52d..d9f6d92eef1 100644
--- a/dev/breeze/doc/images/output_testing_db-tests.svg
+++ b/dev/breeze/doc/images/output_testing_db-tests.svg
@@ -437,8 +437,8 @@
 </text><text class="breeze-testing-db-tests-r5" x="0" y="874" textLength="12.2" clip-path="url(#breeze-testing-db-tests-line-35)">│</text><text class="breeze-testing-db-tests-r6" x="610" y="874" textLength="829.6" clip-path="url(#breeze-testing-db-tests-line-35)">(&gt;sqlite&lt;&#160;|&#160;mysql&#160;|&#160;postgres&#160;|&#160;none)&#160;&#160;&#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-db-tests-r5" x="0" y="898.4" textLength="12.2" clip-path="url(#breeze-testing-db-tests-line-36)">│</text><text class="breeze-testing-db-tests-r5" x="610" y="898.4" textLength="829.6" clip-path="url(#breeze-testing-db-tests-line-36)">[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;&#16 [...]
 </text><text class="breeze-testing-db-tests-r5" x="0" y="922.8" textLength="12.2" clip-path="url(#breeze-testing-db-tests-line-37)">│</text><text class="breeze-testing-db-tests-r4" x="24.4" y="922.8" textLength="97.6" clip-path="url(#breeze-testing-db-tests-line-37)">--python</text><text class="breeze-testing-db-tests-r7" x="561.2" y="922.8" textLength="24.4" clip-path="url(#breeze-testing-db-tests-line-37)">-p</text><text class="breeze-testing-db-tests-r1" x="610" y="922.8" textLength=" [...]
-</text><text class="breeze-testing-db-tests-r5" x="0" y="947.2" textLength="12.2" clip-path="url(#breeze-testing-db-tests-line-38)">│</text><text class="breeze-testing-db-tests-r6" x="610" y="947.2" textLength="732" clip-path="url(#breeze-testing-db-tests-line-38)">(&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; [...]
-</text><text class="breeze-testing-db-tests-r5" x="0" y="971.6" textLength="12.2" clip-path="url(#breeze-testing-db-tests-line-39)">│</text><text class="breeze-testing-db-tests-r5" x="610" y="971.6" textLength="732" clip-path="url(#breeze-testing-db-tests-line-39)">[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;&#1 [...]
+</text><text class="breeze-testing-db-tests-r5" x="0" y="947.2" textLength="12.2" clip-path="url(#breeze-testing-db-tests-line-38)">│</text><text class="breeze-testing-db-tests-r6" x="610" y="947.2" textLength="732" clip-path="url(#breeze-testing-db-tests-line-38)">(&gt;3.8&lt;&#160;|&#160;3.9&#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;&# [...]
+</text><text class="breeze-testing-db-tests-r5" x="0" y="971.6" textLength="12.2" clip-path="url(#breeze-testing-db-tests-line-39)">│</text><text class="breeze-testing-db-tests-r5" x="610" y="971.6" textLength="732" clip-path="url(#breeze-testing-db-tests-line-39)">[default:&#160;3.8]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#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-db-tests-r5" x="0" y="996" textLength="12.2" clip-path="url(#breeze-testing-db-tests-line-40)">│</text><text class="breeze-testing-db-tests-r4" x="24.4" y="996" textLength="219.6" clip-path="url(#breeze-testing-db-tests-line-40)">--postgres-version</text><text class="breeze-testing-db-tests-r7" x="561.2" y="996" textLength="24.4" clip-path="url(#breeze-testing-db-tests-line-40)">-P</text><text class="breeze-testing-db-tests-r1" x="610" y="996" textLengt [...]
 </text><text class="breeze-testing-db-tests-r5" x="0" y="1020.4" textLength="12.2" clip-path="url(#breeze-testing-db-tests-line-41)">│</text><text class="breeze-testing-db-tests-r5" x="610" y="1020.4" textLength="305" clip-path="url(#breeze-testing-db-tests-line-41)">[default:&#160;12]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-testing-db-tests-r5" x="1451.8" y="1020.4" textLength="12.2" clip-path="url(#breeze-testing-db-tests-line-4 [...]
 </text><text class="breeze-testing-db-tests-r5" x="0" y="1044.8" textLength="12.2" clip-path="url(#breeze-testing-db-tests-line-42)">│</text><text class="breeze-testing-db-tests-r4" x="24.4" y="1044.8" textLength="183" clip-path="url(#breeze-testing-db-tests-line-42)">--mysql-version</text><text class="breeze-testing-db-tests-r7" x="561.2" y="1044.8" textLength="24.4" clip-path="url(#breeze-testing-db-tests-line-42)">-M</text><text class="breeze-testing-db-tests-r1" x="610" y="1044.8" te [...]
diff --git a/dev/breeze/doc/images/output_testing_db-tests.txt b/dev/breeze/doc/images/output_testing_db-tests.txt
index 6027a2d1e66..683eef1d050 100644
--- a/dev/breeze/doc/images/output_testing_db-tests.txt
+++ b/dev/breeze/doc/images/output_testing_db-tests.txt
@@ -1 +1 @@
-7b406b63cd4a75aba6ac38b8c0b7431c
+5a6490989a911c538b427ca2806d0e3e
diff --git a/dev/breeze/doc/images/output_testing_docker-compose-tests.svg b/dev/breeze/doc/images/output_testing_docker-compose-tests.svg
index deb86e79ea7..939a8969f22 100644
--- a/dev/breeze/doc/images/output_testing_docker-compose-tests.svg
+++ b/dev/breeze/doc/images/output_testing_docker-compose-tests.svg
@@ -131,8 +131,8 @@
 </text><text class="breeze-testing-docker-compose-tests-r5" x="0" y="215.2" textLength="12.2" clip-path="url(#breeze-testing-docker-compose-tests-line-8)">│</text><text class="breeze-testing-docker-compose-tests-r7" x="463.6" y="215.2" textLength="963.8" clip-path="url(#breeze-testing-docker-compose-tests-line-8)">(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;&# [...]
 </text><text class="breeze-testing-docker-compose-tests-r5" x="0" y="239.6" textLength="12.2" clip-path="url(#breeze-testing-docker-compose-tests-line-9)">│</text><text class="breeze-testing-docker-compose-tests-r5" x="463.6" y="239.6" textLength="963.8" clip-path="url(#breeze-testing-docker-compose-tests-line-9)">[default:&#160;latest]&#160;&#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-docker-compose-tests-r5" x="0" y="264" textLength="12.2" clip-path="url(#breeze-testing-docker-compose-tests-line-10)">│</text><text class="breeze-testing-docker-compose-tests-r4" x="24.4" y="264" textLength="97.6" clip-path="url(#breeze-testing-docker-compose-tests-line-10)">--python</text><text class="breeze-testing-docker-compose-tests-r6" x="414.8" y="264" textLength="24.4" clip-path="url(#breeze-testing-docker-compose-tests-line-10)">-p</text><text [...]
-</text><text class="breeze-testing-docker-compose-tests-r5" x="0" y="288.4" textLength="12.2" clip-path="url(#breeze-testing-docker-compose-tests-line-11)">│</text><text class="breeze-testing-docker-compose-tests-r7" x="463.6" y="288.4" textLength="732" clip-path="url(#breeze-testing-docker-compose-tests-line-11)">(&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;&#16 [...]
-</text><text class="breeze-testing-docker-compose-tests-r5" x="0" y="312.8" textLength="12.2" clip-path="url(#breeze-testing-docker-compose-tests-line-12)">│</text><text class="breeze-testing-docker-compose-tests-r5" x="463.6" y="312.8" textLength="732" clip-path="url(#breeze-testing-docker-compose-tests-line-12)">[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;& [...]
+</text><text class="breeze-testing-docker-compose-tests-r5" x="0" y="288.4" textLength="12.2" clip-path="url(#breeze-testing-docker-compose-tests-line-11)">│</text><text class="breeze-testing-docker-compose-tests-r7" x="463.6" y="288.4" textLength="732" clip-path="url(#breeze-testing-docker-compose-tests-line-11)">(&gt;3.8&lt;&#160;|&#160;3.9&#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; [...]
+</text><text class="breeze-testing-docker-compose-tests-r5" x="0" y="312.8" textLength="12.2" clip-path="url(#breeze-testing-docker-compose-tests-line-12)">│</text><text class="breeze-testing-docker-compose-tests-r5" x="463.6" y="312.8" textLength="732" clip-path="url(#breeze-testing-docker-compose-tests-line-12)">[default:&#160;3.8]&#160;&#160;&#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-docker-compose-tests-r5" x="0" y="337.2" textLength="12.2" clip-path="url(#breeze-testing-docker-compose-tests-line-13)">│</text><text class="breeze-testing-docker-compose-tests-r4" x="24.4" y="337.2" textLength="366" clip-path="url(#breeze-testing-docker-compose-tests-line-13)">--skip-docker-compose-deletion</text><text class="breeze-testing-docker-compose-tests-r1" x="463.6" y="337.2" textLength="671" clip-path="url(#breeze-testing-docker-compose-test [...]
 </text><text class="breeze-testing-docker-compose-tests-r5" x="0" y="361.6" textLength="12.2" clip-path="url(#breeze-testing-docker-compose-tests-line-14)">│</text><text class="breeze-testing-docker-compose-tests-r4" x="24.4" y="361.6" textLength="231.8" clip-path="url(#breeze-testing-docker-compose-tests-line-14)">--github-repository</text><text class="breeze-testing-docker-compose-tests-r6" x="414.8" y="361.6" textLength="24.4" clip-path="url(#breeze-testing-docker-compose-tests-line-1 [...]
 </text><text class="breeze-testing-docker-compose-tests-r5" x="0" y="386" textLength="12.2" clip-path="url(#breeze-testing-docker-compose-tests-line-15)">│</text><text class="breeze-testing-docker-compose-tests-r5" x="463.6" y="386" textLength="585.6" clip-path="url(#breeze-testing-docker-compose-tests-line-15)">[default:&#160;apache/airflow]&#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 [...]
diff --git a/dev/breeze/doc/images/output_testing_docker-compose-tests.txt b/dev/breeze/doc/images/output_testing_docker-compose-tests.txt
index 26d622c8ac4..4261d7d7afc 100644
--- a/dev/breeze/doc/images/output_testing_docker-compose-tests.txt
+++ b/dev/breeze/doc/images/output_testing_docker-compose-tests.txt
@@ -1 +1 @@
-3700d2215f374f7e7449ff5c9972ed37
+5b7689bb2cd766a1ba08b52fa70af9d1
diff --git a/dev/breeze/doc/images/output_testing_integration-tests.svg b/dev/breeze/doc/images/output_testing_integration-tests.svg
index 07a2ef88b13..4f86fcef38b 100644
--- a/dev/breeze/doc/images/output_testing_integration-tests.svg
+++ b/dev/breeze/doc/images/output_testing_integration-tests.svg
@@ -227,8 +227,8 @@
 </text><text class="breeze-testing-integration-tests-r5" x="0" y="581.2" textLength="12.2" clip-path="url(#breeze-testing-integration-tests-line-23)">│</text><text class="breeze-testing-integration-tests-r6" x="610" y="581.2" textLength="829.6" clip-path="url(#breeze-testing-integration-tests-line-23)">(&gt;sqlite&lt;&#160;|&#160;mysql&#160;|&#160;postgres&#160;|&#160;none)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&# [...]
 </text><text class="breeze-testing-integration-tests-r5" x="0" y="605.6" textLength="12.2" clip-path="url(#breeze-testing-integration-tests-line-24)">│</text><text class="breeze-testing-integration-tests-r5" x="610" y="605.6" textLength="829.6" clip-path="url(#breeze-testing-integration-tests-line-24)">[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;&#16 [...]
 </text><text class="breeze-testing-integration-tests-r5" x="0" y="630" textLength="12.2" clip-path="url(#breeze-testing-integration-tests-line-25)">│</text><text class="breeze-testing-integration-tests-r4" x="24.4" y="630" textLength="97.6" clip-path="url(#breeze-testing-integration-tests-line-25)">--python</text><text class="breeze-testing-integration-tests-r7" x="561.2" y="630" textLength="24.4" clip-path="url(#breeze-testing-integration-tests-line-25)">-p</text><text class="breeze-tes [...]
-</text><text class="breeze-testing-integration-tests-r5" x="0" y="654.4" textLength="12.2" clip-path="url(#breeze-testing-integration-tests-line-26)">│</text><text class="breeze-testing-integration-tests-r6" x="610" y="654.4" textLength="732" clip-path="url(#breeze-testing-integration-tests-line-26)">(&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; [...]
-</text><text class="breeze-testing-integration-tests-r5" x="0" y="678.8" textLength="12.2" clip-path="url(#breeze-testing-integration-tests-line-27)">│</text><text class="breeze-testing-integration-tests-r5" x="610" y="678.8" textLength="732" clip-path="url(#breeze-testing-integration-tests-line-27)">[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;&#1 [...]
+</text><text class="breeze-testing-integration-tests-r5" x="0" y="654.4" textLength="12.2" clip-path="url(#breeze-testing-integration-tests-line-26)">│</text><text class="breeze-testing-integration-tests-r6" x="610" y="654.4" textLength="732" clip-path="url(#breeze-testing-integration-tests-line-26)">(&gt;3.8&lt;&#160;|&#160;3.9&#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;&# [...]
+</text><text class="breeze-testing-integration-tests-r5" x="0" y="678.8" textLength="12.2" clip-path="url(#breeze-testing-integration-tests-line-27)">│</text><text class="breeze-testing-integration-tests-r5" x="610" y="678.8" textLength="732" clip-path="url(#breeze-testing-integration-tests-line-27)">[default:&#160;3.8]&#160;&#160;&#160;&#160;&#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-integration-tests-r5" x="0" y="703.2" textLength="12.2" clip-path="url(#breeze-testing-integration-tests-line-28)">│</text><text class="breeze-testing-integration-tests-r4" x="24.4" y="703.2" textLength="219.6" clip-path="url(#breeze-testing-integration-tests-line-28)">--postgres-version</text><text class="breeze-testing-integration-tests-r7" x="561.2" y="703.2" textLength="24.4" clip-path="url(#breeze-testing-integration-tests-line-28)">-P</text><text  [...]
 </text><text class="breeze-testing-integration-tests-r5" x="0" y="727.6" textLength="12.2" clip-path="url(#breeze-testing-integration-tests-line-29)">│</text><text class="breeze-testing-integration-tests-r5" x="610" y="727.6" textLength="305" clip-path="url(#breeze-testing-integration-tests-line-29)">[default:&#160;12]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-testing-integration-tests-r5" x="1451.8" y="727.6" textLength="12.2" clip [...]
 </text><text class="breeze-testing-integration-tests-r5" x="0" y="752" textLength="12.2" clip-path="url(#breeze-testing-integration-tests-line-30)">│</text><text class="breeze-testing-integration-tests-r4" x="24.4" y="752" textLength="183" clip-path="url(#breeze-testing-integration-tests-line-30)">--mysql-version</text><text class="breeze-testing-integration-tests-r7" x="561.2" y="752" textLength="24.4" clip-path="url(#breeze-testing-integration-tests-line-30)">-M</text><text class="bree [...]
diff --git a/dev/breeze/doc/images/output_testing_integration-tests.txt b/dev/breeze/doc/images/output_testing_integration-tests.txt
index 81d45b246b5..3b623bd0570 100644
--- a/dev/breeze/doc/images/output_testing_integration-tests.txt
+++ b/dev/breeze/doc/images/output_testing_integration-tests.txt
@@ -1 +1 @@
-5436131180cd928292c8234d15e0496f
+dfb4721dd43816a0f9f2bfb8a32d240e
diff --git a/dev/breeze/doc/images/output_testing_non-db-tests.svg b/dev/breeze/doc/images/output_testing_non-db-tests.svg
index 28fc44c0283..fe704058695 100644
--- a/dev/breeze/doc/images/output_testing_non-db-tests.svg
+++ b/dev/breeze/doc/images/output_testing_non-db-tests.svg
@@ -396,8 +396,8 @@
 </text><text class="breeze-testing-non-db-tests-r5" x="0" y="678.8" textLength="1464" clip-path="url(#breeze-testing-non-db-tests-line-27)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-testing-non-db-tests-r1" x="1464" y="678.8" textLength="12.2" clip-path="url(#breeze-testing-non-db-tests-line-27)">
 </text><text class="breeze-testing-non-db-tests-r5" x="0" y="703.2" textLength="24.4" clip-path="url(#breeze-testing-non-db-tests-line-28)">╭─</text><text class="breeze-testing-non-db-tests-r5" x="24.4" y="703.2" textLength="219.6" clip-path="url(#breeze-testing-non-db-tests-line-28)">&#160;Test&#160;environment&#160;</text><text class="breeze-testing-non-db-tests-r5" x="244" y="703.2" textLength="1195.6" clip-path="url(#breeze-testing-non-db-tests-line-28)">───────────────────────────── [...]
 </text><text class="breeze-testing-non-db-tests-r5" x="0" y="727.6" textLength="12.2" clip-path="url(#breeze-testing-non-db-tests-line-29)">│</text><text class="breeze-testing-non-db-tests-r4" x="24.4" y="727.6" textLength="97.6" clip-path="url(#breeze-testing-non-db-tests-line-29)">--python</text><text class="breeze-testing-non-db-tests-r7" x="561.2" y="727.6" textLength="24.4" clip-path="url(#breeze-testing-non-db-tests-line-29)">-p</text><text class="breeze-testing-non-db-tests-r1" x= [...]
-</text><text class="breeze-testing-non-db-tests-r5" x="0" y="752" textLength="12.2" clip-path="url(#breeze-testing-non-db-tests-line-30)">│</text><text class="breeze-testing-non-db-tests-r6" x="610" y="752" textLength="732" clip-path="url(#breeze-testing-non-db-tests-line-30)">(&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; [...]
-</text><text class="breeze-testing-non-db-tests-r5" x="0" y="776.4" textLength="12.2" clip-path="url(#breeze-testing-non-db-tests-line-31)">│</text><text class="breeze-testing-non-db-tests-r5" x="610" y="776.4" textLength="732" clip-path="url(#breeze-testing-non-db-tests-line-31)">[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 [...]
+</text><text class="breeze-testing-non-db-tests-r5" x="0" y="752" textLength="12.2" clip-path="url(#breeze-testing-non-db-tests-line-30)">│</text><text class="breeze-testing-non-db-tests-r6" x="610" y="752" textLength="732" clip-path="url(#breeze-testing-non-db-tests-line-30)">(&gt;3.8&lt;&#160;|&#160;3.9&#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;&# [...]
+</text><text class="breeze-testing-non-db-tests-r5" x="0" y="776.4" textLength="12.2" clip-path="url(#breeze-testing-non-db-tests-line-31)">│</text><text class="breeze-testing-non-db-tests-r5" x="610" y="776.4" textLength="732" clip-path="url(#breeze-testing-non-db-tests-line-31)">[default:&#160;3.8]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#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-non-db-tests-r5" x="0" y="800.8" textLength="12.2" clip-path="url(#breeze-testing-non-db-tests-line-32)">│</text><text class="breeze-testing-non-db-tests-r4" x="24.4" y="800.8" textLength="256.2" clip-path="url(#breeze-testing-non-db-tests-line-32)">--forward-credentials</text><text class="breeze-testing-non-db-tests-r7" x="561.2" y="800.8" textLength="24.4" clip-path="url(#breeze-testing-non-db-tests-line-32)">-f</text><text class="breeze-testing-non-d [...]
 </text><text class="breeze-testing-non-db-tests-r5" x="0" y="825.2" textLength="12.2" clip-path="url(#breeze-testing-non-db-tests-line-33)">│</text><text class="breeze-testing-non-db-tests-r4" x="24.4" y="825.2" textLength="231.8" clip-path="url(#breeze-testing-non-db-tests-line-33)">--force-sa-warnings</text><text class="breeze-testing-non-db-tests-r1" x="256.2" y="825.2" textLength="12.2" clip-path="url(#breeze-testing-non-db-tests-line-33)">/</text><text class="breeze-testing-non-db-t [...]
 </text><text class="breeze-testing-non-db-tests-r5" x="0" y="849.6" textLength="12.2" clip-path="url(#breeze-testing-non-db-tests-line-34)">│</text><text class="breeze-testing-non-db-tests-r5" x="610" y="849.6" textLength="768.6" clip-path="url(#breeze-testing-non-db-tests-line-34)">[default:&#160;force-sa-warnings]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;& [...]
diff --git a/dev/breeze/doc/images/output_testing_non-db-tests.txt b/dev/breeze/doc/images/output_testing_non-db-tests.txt
index 8be059e5511..e5ed9ef58d3 100644
--- a/dev/breeze/doc/images/output_testing_non-db-tests.txt
+++ b/dev/breeze/doc/images/output_testing_non-db-tests.txt
@@ -1 +1 @@
-3120758ec7ae00c88305cca093595aca
+6ebf18a90749320bec9c56ef8490084a
diff --git a/dev/breeze/doc/images/output_testing_tests.svg b/dev/breeze/doc/images/output_testing_tests.svg
index a5da2b4d53f..df29134e300 100644
--- a/dev/breeze/doc/images/output_testing_tests.svg
+++ b/dev/breeze/doc/images/output_testing_tests.svg
@@ -507,8 +507,8 @@
 </text><text class="breeze-testing-tests-r5" x="0" y="1264.4" textLength="12.2" clip-path="url(#breeze-testing-tests-line-51)">│</text><text class="breeze-testing-tests-r5" x="610" y="1264.4" textLength="829.6" clip-path="url(#breeze-testing-tests-line-51)">[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;&# [...]
 </text><text class="breeze-testing-tests-r5" x="0" y="1288.8" textLength="12.2" clip-path="url(#breeze-testing-tests-line-52)">│</text><text class="breeze-testing-tests-r4" x="24.4" y="1288.8" textLength="244" clip-path="url(#breeze-testing-tests-line-52)">--database-isolation</text><text class="breeze-testing-tests-r1" x="610" y="1288.8" textLength="475.8" clip-path="url(#breeze-testing-tests-line-52)">Run&#160;airflow&#160;in&#160;database&#160;isolation&#160;mode.</text><text class="b [...]
 </text><text class="breeze-testing-tests-r5" x="0" y="1313.2" textLength="12.2" clip-path="url(#breeze-testing-tests-line-53)">│</text><text class="breeze-testing-tests-r4" x="24.4" y="1313.2" textLength="97.6" clip-path="url(#breeze-testing-tests-line-53)">--python</text><text class="breeze-testing-tests-r6" x="561.2" y="1313.2" textLength="24.4" clip-path="url(#breeze-testing-tests-line-53)">-p</text><text class="breeze-testing-tests-r1" x="610" y="1313.2" textLength="732" clip-path="u [...]
-</text><text class="breeze-testing-tests-r5" x="0" y="1337.6" textLength="12.2" clip-path="url(#breeze-testing-tests-line-54)">│</text><text class="breeze-testing-tests-r7" x="610" y="1337.6" textLength="732" clip-path="url(#breeze-testing-tests-line-54)">(&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;&#16 [...]
-</text><text class="breeze-testing-tests-r5" x="0" y="1362" textLength="12.2" clip-path="url(#breeze-testing-tests-line-55)">│</text><text class="breeze-testing-tests-r5" x="610" y="1362" textLength="732" clip-path="url(#breeze-testing-tests-line-55)">[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;&#160 [...]
+</text><text class="breeze-testing-tests-r5" x="0" y="1337.6" textLength="12.2" clip-path="url(#breeze-testing-tests-line-54)">│</text><text class="breeze-testing-tests-r7" x="610" y="1337.6" textLength="732" clip-path="url(#breeze-testing-tests-line-54)">(&gt;3.8&lt;&#160;|&#160;3.9&#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; [...]
+</text><text class="breeze-testing-tests-r5" x="0" y="1362" textLength="12.2" clip-path="url(#breeze-testing-tests-line-55)">│</text><text class="breeze-testing-tests-r5" x="610" y="1362" textLength="732" clip-path="url(#breeze-testing-tests-line-55)">[default:&#160;3.8]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#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-tests-r5" x="0" y="1386.4" textLength="12.2" clip-path="url(#breeze-testing-tests-line-56)">│</text><text class="breeze-testing-tests-r4" x="24.4" y="1386.4" textLength="219.6" clip-path="url(#breeze-testing-tests-line-56)">--postgres-version</text><text class="breeze-testing-tests-r6" x="561.2" y="1386.4" textLength="24.4" clip-path="url(#breeze-testing-tests-line-56)">-P</text><text class="breeze-testing-tests-r1" x="610" y="1386.4" textLength="305" c [...]
 </text><text class="breeze-testing-tests-r5" x="0" y="1410.8" textLength="12.2" clip-path="url(#breeze-testing-tests-line-57)">│</text><text class="breeze-testing-tests-r5" x="610" y="1410.8" textLength="305" clip-path="url(#breeze-testing-tests-line-57)">[default:&#160;12]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-testing-tests-r5" x="1451.8" y="1410.8" textLength="12.2" clip-path="url(#breeze-testing-tests-line-57)">│</text><text  [...]
 </text><text class="breeze-testing-tests-r5" x="0" y="1435.2" textLength="12.2" clip-path="url(#breeze-testing-tests-line-58)">│</text><text class="breeze-testing-tests-r4" x="24.4" y="1435.2" textLength="183" clip-path="url(#breeze-testing-tests-line-58)">--mysql-version</text><text class="breeze-testing-tests-r6" x="561.2" y="1435.2" textLength="24.4" clip-path="url(#breeze-testing-tests-line-58)">-M</text><text class="breeze-testing-tests-r1" x="610" y="1435.2" textLength="268.4" clip [...]
diff --git a/dev/breeze/doc/images/output_testing_tests.txt b/dev/breeze/doc/images/output_testing_tests.txt
index 7e33718d66c..d21f8480f17 100644
--- a/dev/breeze/doc/images/output_testing_tests.txt
+++ b/dev/breeze/doc/images/output_testing_tests.txt
@@ -1 +1 @@
-2be847f8a1f4e2b80c6da1e4433203aa
+de596109071bd2473da9b613ec4cb7e0
diff --git a/dev/breeze/pyproject.toml b/dev/breeze/pyproject.toml
index b06e4cdf060..7aa94df878d 100644
--- a/dev/breeze/pyproject.toml
+++ b/dev/breeze/pyproject.toml
@@ -36,12 +36,13 @@ classifiers = [
     "Intended Audience :: Developers",
     "Framework :: Apache Airflow",
     "License :: OSI Approved :: Apache Software License",
+    "Programming Language :: Python :: 3.8",
     "Programming Language :: Python :: 3.9",
     "Programming Language :: Python :: 3.10",
     "Programming Language :: Python :: 3.11",
     "Programming Language :: Python :: 3.12",
 ]
-requires-python = "~=3.9"
+requires-python = "~=3.8"
 
 dependencies = [
     "black>=23.11.0",
diff --git a/dev/breeze/src/airflow_breeze/commands/ci_commands.py b/dev/breeze/src/airflow_breeze/commands/ci_commands.py
index d40aedfc68d..c201c1b4970 100644
--- a/dev/breeze/src/airflow_breeze/commands/ci_commands.py
+++ b/dev/breeze/src/airflow_breeze/commands/ci_commands.py
@@ -25,10 +25,9 @@ import shutil
 import subprocess
 import sys
 import tempfile
-from collections.abc import Iterable
 from io import StringIO
 from pathlib import Path
-from typing import Any, NamedTuple
+from typing import Any, Iterable, NamedTuple
 
 import click
 
diff --git a/dev/breeze/src/airflow_breeze/commands/developer_commands.py b/dev/breeze/src/airflow_breeze/commands/developer_commands.py
index 0f9cec28710..212c066c862 100644
--- a/dev/breeze/src/airflow_breeze/commands/developer_commands.py
+++ b/dev/breeze/src/airflow_breeze/commands/developer_commands.py
@@ -22,9 +22,9 @@ import shlex
 import shutil
 import sys
 import threading
-from collections.abc import Iterable
 from signal import SIGTERM
 from time import sleep
+from typing import Iterable
 
 import click
 
diff --git a/dev/breeze/src/airflow_breeze/commands/minor_release_command.py b/dev/breeze/src/airflow_breeze/commands/minor_release_command.py
index fc972cc57fd..50ffc35817b 100644
--- a/dev/breeze/src/airflow_breeze/commands/minor_release_command.py
+++ b/dev/breeze/src/airflow_breeze/commands/minor_release_command.py
@@ -227,7 +227,7 @@ def create_minor_version_branch(version_branch):
     if confirm_action("Build latest breeze image?"):
         if DRY_RUN:
             console_print("Skipping below command on CI")
-        run_command(["breeze", "ci-image", "build", "--python", "3.9"], dry_run_override=DRY_RUN, check=True)
+        run_command(["breeze", "ci-image", "build", "--python", "3.8"], dry_run_override=DRY_RUN, check=True)
     # Update default branches
     update_default_branch(version_branch)
     # Commit changes
diff --git a/dev/breeze/src/airflow_breeze/commands/release_candidate_command.py b/dev/breeze/src/airflow_breeze/commands/release_candidate_command.py
index 7fcba61f106..422804b79a9 100644
--- a/dev/breeze/src/airflow_breeze/commands/release_candidate_command.py
+++ b/dev/breeze/src/airflow_breeze/commands/release_candidate_command.py
@@ -273,7 +273,7 @@ def push_packages_to_pypi(version):
             "Install it with the appropriate constraint file, adapt python version: "
             f"pip install apache-airflow=={version} --constraint "
             f"https://raw.githubusercontent.com/apache/airflow/"
-            f"constraints-{version}/constraints-3.9.txt"
+            f"constraints-{version}/constraints-3.8.txt"
         )
         confirm_action(
             "I have tested the package I uploaded to PyPI. "
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 d286e7ed4e6..060ccafcd2f 100644
--- a/dev/breeze/src/airflow_breeze/commands/release_management_commands.py
+++ b/dev/breeze/src/airflow_breeze/commands/release_management_commands.py
@@ -28,14 +28,13 @@ import tempfile
 import textwrap
 import time
 from collections import defaultdict
-from collections.abc import Generator, Iterable
 from copy import deepcopy
 from datetime import date, datetime
 from functools import partial
 from multiprocessing import Pool
 from pathlib import Path
 from subprocess import DEVNULL
-from typing import IO, TYPE_CHECKING, Any, Literal, NamedTuple, Union
+from typing import IO, TYPE_CHECKING, Any, Generator, Iterable, Literal, NamedTuple, Union
 
 import click
 from rich.progress import Progress
diff --git a/dev/breeze/src/airflow_breeze/global_constants.py b/dev/breeze/src/airflow_breeze/global_constants.py
index 64bf8112112..7d1da863140 100644
--- a/dev/breeze/src/airflow_breeze/global_constants.py
+++ b/dev/breeze/src/airflow_breeze/global_constants.py
@@ -23,7 +23,7 @@ from __future__ import annotations
 import json
 import platform
 from enum import Enum
-from functools import cache
+from functools import lru_cache
 from pathlib import Path
 
 from airflow_breeze.utils.host_info_utils import Architecture
@@ -45,7 +45,7 @@ ANSWER = ""
 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"]
+ALLOWED_PYTHON_MAJOR_MINOR_VERSIONS = ["3.8", "3.9", "3.10", "3.11", "3.12"]
 DEFAULT_PYTHON_MAJOR_MINOR_VERSION = ALLOWED_PYTHON_MAJOR_MINOR_VERSIONS[0]
 ALLOWED_ARCHITECTURES = [Architecture.X86_64, Architecture.ARM]
 # Database Backends used when starting Breeze. The "none" value means that invalid configuration
@@ -161,12 +161,12 @@ REGULAR_DOC_PACKAGES = [
 ]
 
 
-@cache
+@lru_cache(maxsize=None)
 def all_selective_test_types() -> tuple[str, ...]:
     return tuple(sorted(e.value for e in SelectiveUnitTestTypes))
 
 
-@cache
+@lru_cache(maxsize=None)
 def all_selective_test_types_except_providers() -> tuple[str, ...]:
     return tuple(sorted(e.value for e in SelectiveUnitTestTypes if e != SelectiveUnitTestTypes.PROVIDERS))
 
@@ -202,7 +202,7 @@ ALLOWED_PARALLEL_TEST_TYPE_CHOICES = [
 ]
 
 
-@cache
+@lru_cache(maxsize=None)
 def all_helm_test_packages() -> list[str]:
     return sorted(
         [
@@ -263,7 +263,7 @@ PRODUCTION_IMAGE = False
 # All python versions include all past python versions available in previous branches
 # Even if we remove them from the main version. This is needed to make sure we can cherry-pick
 # changes from main to the previous branch.
-ALL_PYTHON_MAJOR_MINOR_VERSIONS = ["3.9", "3.10", "3.11", "3.12"]
+ALL_PYTHON_MAJOR_MINOR_VERSIONS = ["3.8", "3.9", "3.10", "3.11", "3.12"]
 CURRENT_PYTHON_MAJOR_MINOR_VERSIONS = ALL_PYTHON_MAJOR_MINOR_VERSIONS
 CURRENT_POSTGRES_VERSIONS = ["12", "13", "14", "15", "16", "17"]
 DEFAULT_POSTGRES_VERSION = CURRENT_POSTGRES_VERSIONS[0]
@@ -316,12 +316,6 @@ AIRFLOW_PYTHON_COMPATIBILITY_MATRIX = {
     "2.8.2": ["3.8", "3.9", "3.10", "3.11"],
     "2.8.3": ["3.8", "3.9", "3.10", "3.11"],
     "2.9.0": ["3.8", "3.9", "3.10", "3.11", "3.12"],
-    "2.9.1": ["3.8", "3.9", "3.10", "3.11", "3.12"],
-    "2.9.2": ["3.8", "3.9", "3.10", "3.11", "3.12"],
-    "2.9.3": ["3.8", "3.9", "3.10", "3.11", "3.12"],
-    "2.10.0": ["3.8", "3.9", "3.10", "3.11", "3.12"],
-    "2.10.1": ["3.8", "3.9", "3.10", "3.11", "3.12"],
-    "2.10.2": ["3.8", "3.9", "3.10", "3.11", "3.12"],
 }
 
 DB_RESET = False
@@ -414,7 +408,7 @@ def get_airflow_version():
     return airflow_version
 
 
-@cache
+@lru_cache(maxsize=None)
 def get_airflow_extras():
     airflow_dockerfile = AIRFLOW_SOURCES_ROOT / "Dockerfile"
     with open(airflow_dockerfile) as dockerfile:
@@ -513,19 +507,19 @@ CHICKEN_EGG_PROVIDERS = " ".join(["standard"])
 
 BASE_PROVIDERS_COMPATIBILITY_CHECKS: list[dict[str, str | list[str]]] = [
     {
-        "python-version": "3.9",
+        "python-version": "3.8",
         "airflow-version": "2.8.4",
         "remove-providers": "cloudant fab edge standard",
         "run-tests": "true",
     },
     {
-        "python-version": "3.9",
+        "python-version": "3.8",
         "airflow-version": "2.9.3",
         "remove-providers": "cloudant edge standard",
         "run-tests": "true",
     },
     {
-        "python-version": "3.9",
+        "python-version": "3.8",
         "airflow-version": "2.10.1",
         "remove-providers": "cloudant",
         "run-tests": "true",
@@ -544,6 +538,6 @@ class GithubEvents(Enum):
     WORKFLOW_RUN = "workflow_run"
 
 
-@cache
+@lru_cache(maxsize=None)
 def github_events() -> list[str]:
     return [e.value for e in GithubEvents]
diff --git a/dev/breeze/src/airflow_breeze/params/common_build_params.py b/dev/breeze/src/airflow_breeze/params/common_build_params.py
index ce0f2c0063f..6286a28b86d 100644
--- a/dev/breeze/src/airflow_breeze/params/common_build_params.py
+++ b/dev/breeze/src/airflow_breeze/params/common_build_params.py
@@ -67,7 +67,7 @@ class CommonBuildParams:
     prepare_buildx_cache: bool = False
     python_image: str | None = None
     push: bool = False
-    python: str = "3.9"
+    python: str = "3.8"
     tag_as_latest: bool = False
     uv_http_timeout: int = DEFAULT_UV_HTTP_TIMEOUT
     dry_run: bool = False
diff --git a/dev/breeze/src/airflow_breeze/pre_commit_ids.py b/dev/breeze/src/airflow_breeze/pre_commit_ids.py
index 03873ed8ac7..457379f5b90 100644
--- a/dev/breeze/src/airflow_breeze/pre_commit_ids.py
+++ b/dev/breeze/src/airflow_breeze/pre_commit_ids.py
@@ -41,6 +41,7 @@ PRE_COMMIT_LIST = [
     "check-cncf-k8s-only-for-executors",
     "check-code-deprecations",
     "check-common-compat-used-for-openlineage",
+    "check-compat-cache-on-methods",
     "check-core-deprecation-classes",
     "check-daysago-import-from-utils",
     "check-decorated-operator-implements-custom-name",
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 654800075e9..389d2ce62e5 100644
--- a/dev/breeze/src/airflow_breeze/templates/pyproject_TEMPLATE.toml.jinja2
+++ b/dev/breeze/src/airflow_breeze/templates/pyproject_TEMPLATE.toml.jinja2
@@ -70,7 +70,7 @@ classifiers = [
     {%- endfor %}
     "Topic :: System :: Monitoring",
 ]
-requires-python = "~=3.9"
+requires-python = "~=3.8"
 dependencies = [
 {{- INSTALL_REQUIREMENTS }}
 ]
diff --git a/dev/breeze/src/airflow_breeze/utils/backtracking.py b/dev/breeze/src/airflow_breeze/utils/backtracking.py
index 418e381b87f..d719be8d0d4 100644
--- a/dev/breeze/src/airflow_breeze/utils/backtracking.py
+++ b/dev/breeze/src/airflow_breeze/utils/backtracking.py
@@ -38,7 +38,7 @@ def print_backtracking_candidates():
 
     all_latest_dependencies_response = requests.get(
         "https://raw.githubusercontent.com/apache/airflow/"
-        "constraints-main/constraints-source-providers-3.9.txt"
+        "constraints-main/constraints-source-providers-3.8.txt"
     )
     all_latest_dependencies_response.raise_for_status()
     constraints_text = all_latest_dependencies_response.text
diff --git a/dev/breeze/src/airflow_breeze/utils/black_utils.py b/dev/breeze/src/airflow_breeze/utils/black_utils.py
index 612795042fd..23891b8206c 100644
--- a/dev/breeze/src/airflow_breeze/utils/black_utils.py
+++ b/dev/breeze/src/airflow_breeze/utils/black_utils.py
@@ -17,14 +17,14 @@
 from __future__ import annotations
 
 import os
-from functools import cache
+from functools import lru_cache
 
 from black import Mode, TargetVersion, format_str, parse_pyproject_toml
 
 from airflow_breeze.utils.path_utils import AIRFLOW_SOURCES_ROOT
 
 
-@cache
+@lru_cache(maxsize=None)
 def _black_mode() -> Mode:
     config = parse_pyproject_toml(os.path.join(AIRFLOW_SOURCES_ROOT, "pyproject.toml"))
     target_versions = {TargetVersion[val.upper()] for val in config.get("target_version", ())}
diff --git a/dev/breeze/src/airflow_breeze/utils/cdxgen.py b/dev/breeze/src/airflow_breeze/utils/cdxgen.py
index 5431daaa0fb..7e6b47ad627 100644
--- a/dev/breeze/src/airflow_breeze/utils/cdxgen.py
+++ b/dev/breeze/src/airflow_breeze/utils/cdxgen.py
@@ -24,11 +24,10 @@ import signal
 import sys
 import time
 from abc import abstractmethod
-from collections.abc import Generator
 from dataclasses import dataclass
 from multiprocessing.pool import Pool
 from pathlib import Path
-from typing import TYPE_CHECKING, Any
+from typing import TYPE_CHECKING, Any, Generator
 
 import yaml
 
diff --git a/dev/breeze/src/airflow_breeze/utils/coertions.py b/dev/breeze/src/airflow_breeze/utils/coertions.py
index 6f8c2c21baa..415b9472c23 100644
--- a/dev/breeze/src/airflow_breeze/utils/coertions.py
+++ b/dev/breeze/src/airflow_breeze/utils/coertions.py
@@ -17,7 +17,7 @@
 
 from __future__ import annotations
 
-from collections.abc import Iterable
+from typing import Iterable
 
 
 def coerce_bool_value(value: str | bool) -> bool:
diff --git a/dev/breeze/src/airflow_breeze/utils/console.py b/dev/breeze/src/airflow_breeze/utils/console.py
index 0b886167388..1083875c372 100644
--- a/dev/breeze/src/airflow_breeze/utils/console.py
+++ b/dev/breeze/src/airflow_breeze/utils/console.py
@@ -23,7 +23,7 @@ from __future__ import annotations
 
 import os
 from enum import Enum
-from functools import cache
+from functools import lru_cache
 from typing import NamedTuple, TextIO
 
 from rich.console import Console
@@ -90,7 +90,7 @@ class Output(NamedTuple):
         return self.title.replace("[", "\\[")
 
 
-@cache
+@lru_cache(maxsize=None)
 def get_console(output: Output | None = None) -> Console:
     return Console(
         force_terminal=True,
@@ -102,7 +102,7 @@ def get_console(output: Output | None = None) -> Console:
     )
 
 
-@cache
+@lru_cache(maxsize=None)
 def get_stderr_console(output: Output | None = None) -> Console:
     return Console(
         force_terminal=True,
diff --git a/dev/breeze/src/airflow_breeze/utils/custom_param_types.py b/dev/breeze/src/airflow_breeze/utils/custom_param_types.py
index a5d99fc8460..8f0529ffb0e 100644
--- a/dev/breeze/src/airflow_breeze/utils/custom_param_types.py
+++ b/dev/breeze/src/airflow_breeze/utils/custom_param_types.py
@@ -18,9 +18,8 @@ from __future__ import annotations
 
 import os
 import re
-from collections.abc import Sequence
 from dataclasses import dataclass
-from typing import Any
+from typing import Any, Sequence
 
 import click
 from click import Context, Parameter, ParamType
diff --git a/dev/breeze/src/airflow_breeze/utils/packages.py b/dev/breeze/src/airflow_breeze/utils/packages.py
index 2db95fcb7e6..6c4a8241407 100644
--- a/dev/breeze/src/airflow_breeze/utils/packages.py
+++ b/dev/breeze/src/airflow_breeze/utils/packages.py
@@ -22,11 +22,10 @@ import json
 import os
 import subprocess
 import sys
-from collections.abc import Iterable
 from enum import Enum
 from functools import lru_cache
 from pathlib import Path
-from typing import Any, NamedTuple
+from typing import Any, Iterable, NamedTuple
 
 from airflow_breeze.global_constants import (
     ALLOWED_PYTHON_MAJOR_MINOR_VERSIONS,
@@ -543,7 +542,7 @@ def get_min_airflow_version(provider_id: str) -> str:
 
 
 def get_python_requires(provider_id: str) -> str:
-    python_requires = "~=3.9"
+    python_requires = "~=3.8"
     provider_details = get_provider_details(provider_id=provider_id)
     for p in provider_details.excluded_python_versions:
         python_requires += f", !={p}"
diff --git a/dev/breeze/src/airflow_breeze/utils/parallel.py b/dev/breeze/src/airflow_breeze/utils/parallel.py
index 8da62198ef4..cf3e1e6d3f2 100644
--- a/dev/breeze/src/airflow_breeze/utils/parallel.py
+++ b/dev/breeze/src/airflow_breeze/utils/parallel.py
@@ -23,14 +23,13 @@ import sys
 import textwrap
 import time
 from abc import ABCMeta, abstractmethod
-from collections.abc import Generator
 from contextlib import contextmanager
 from enum import Enum
 from multiprocessing.pool import ApplyResult, Pool
 from pathlib import Path
 from tempfile import NamedTemporaryFile
 from threading import Thread
-from typing import Any, NamedTuple
+from typing import Any, Generator, NamedTuple
 
 from rich.table import Table
 
diff --git a/dev/breeze/src/airflow_breeze/utils/path_utils.py b/dev/breeze/src/airflow_breeze/utils/path_utils.py
index 064a61771fb..7ffa2152f47 100644
--- a/dev/breeze/src/airflow_breeze/utils/path_utils.py
+++ b/dev/breeze/src/airflow_breeze/utils/path_utils.py
@@ -27,7 +27,7 @@ import shutil
 import subprocess
 import sys
 import tempfile
-from functools import cache
+from functools import lru_cache
 from pathlib import Path
 
 from airflow_breeze import NAME
@@ -221,7 +221,7 @@ def get_used_airflow_sources() -> Path:
     return current_sources
 
 
-@cache
+@lru_cache(maxsize=None)
 def find_airflow_sources_root_to_operate_on() -> Path:
     """
     Find the root of airflow sources we operate on. Handle the case when Breeze is installed via `pipx` from
diff --git a/dev/breeze/src/airflow_breeze/utils/run_utils.py b/dev/breeze/src/airflow_breeze/utils/run_utils.py
index 2e828936aa6..c6a782935cd 100644
--- a/dev/breeze/src/airflow_breeze/utils/run_utils.py
+++ b/dev/breeze/src/airflow_breeze/utils/run_utils.py
@@ -28,10 +28,9 @@ import signal
 import stat
 import subprocess
 import sys
-from collections.abc import Mapping
-from functools import cache
+from functools import lru_cache
 from pathlib import Path
-from typing import Union
+from typing import Mapping, Union
 
 from rich.markup import escape
 
@@ -363,7 +362,7 @@ def check_if_buildx_plugin_installed() -> bool:
     return False
 
 
-@cache
+@lru_cache(maxsize=None)
 def commit_sha():
     """Returns commit SHA of current repo. Cached for various usages."""
     command_result = run_command(["git", "rev-parse", "HEAD"], capture_output=True, text=True, check=False)
diff --git a/dev/breeze/src/airflow_breeze/utils/selective_checks.py b/dev/breeze/src/airflow_breeze/utils/selective_checks.py
index 385cd6f1441..28b12d0578a 100644
--- a/dev/breeze/src/airflow_breeze/utils/selective_checks.py
+++ b/dev/breeze/src/airflow_breeze/utils/selective_checks.py
@@ -23,9 +23,9 @@ import re
 import sys
 from collections import defaultdict
 from enum import Enum
-from functools import cache, cached_property
+from functools import cached_property, lru_cache
 from pathlib import Path
-from typing import Any, TypeVar
+from typing import Any, Dict, List, TypeVar
 
 from airflow_breeze.branch_defaults import AIRFLOW_BRANCH, DEFAULT_AIRFLOW_CONSTRAINTS_BRANCH
 from airflow_breeze.global_constants import (
@@ -125,7 +125,7 @@ class FileGroupForCi(Enum):
 T = TypeVar("T", FileGroupForCi, SelectiveUnitTestTypes)
 
 
-class HashableDict(dict[T, list[str]]):
+class HashableDict(Dict[T, List[str]]):
     def __hash__(self):
         return hash(frozenset(self))
 
@@ -348,7 +348,7 @@ def _exclude_files_with_regexps(files: tuple[str, ...], matched_files, exclude_r
                 matched_files.remove(file)
 
 
-@cache
+@lru_cache(maxsize=None)
 def _matching_files(
     files: tuple[str, ...], match_group: FileGroupForCi, match_dict: HashableDict, exclude_dict: HashableDict
 ) -> list[str]:
diff --git a/dev/breeze/src/airflow_breeze/utils/virtualenv_utils.py b/dev/breeze/src/airflow_breeze/utils/virtualenv_utils.py
index b78731d2070..0288e49b909 100644
--- a/dev/breeze/src/airflow_breeze/utils/virtualenv_utils.py
+++ b/dev/breeze/src/airflow_breeze/utils/virtualenv_utils.py
@@ -20,8 +20,8 @@ from __future__ import annotations
 import contextlib
 import sys
 import tempfile
-from collections.abc import Generator
 from pathlib import Path
+from typing import Generator
 
 from airflow_breeze.utils.console import get_console
 from airflow_breeze.utils.run_utils import run_command
diff --git a/dev/breeze/tests/test_cache.py b/dev/breeze/tests/test_cache.py
index cc485467400..52ba6ada1e0 100644
--- a/dev/breeze/tests/test_cache.py
+++ b/dev/breeze/tests/test_cache.py
@@ -36,8 +36,8 @@ AIRFLOW_SOURCES = Path(__file__).parents[3].resolve()
     [
         ("backend", "mysql", (True, ["sqlite", "mysql", "postgres", "none"]), None),
         ("backend", "xxx", (False, ["sqlite", "mysql", "postgres", "none"]), None),
-        ("python_major_minor_version", "3.9", (True, ["3.9", "3.10", "3.11", "3.12"]), None),
-        ("python_major_minor_version", "3.8", (False, ["3.9", "3.10", "3.11", "3.12"]), None),
+        ("python_major_minor_version", "3.8", (True, ["3.8", "3.9", "3.10", "3.11", "3.12"]), None),
+        ("python_major_minor_version", "3.7", (False, ["3.8", "3.9", "3.10", "3.11", "3.12"]), None),
         ("missing", "value", None, AttributeError),
     ],
 )
diff --git a/dev/breeze/tests/test_packages.py b/dev/breeze/tests/test_packages.py
index a3126b3f554..39ee245cf36 100644
--- a/dev/breeze/tests/test_packages.py
+++ b/dev/breeze/tests/test_packages.py
@@ -16,7 +16,7 @@
 # under the License.
 from __future__ import annotations
 
-from collections.abc import Iterable
+from typing import Iterable
 
 import pytest
 
@@ -497,7 +497,7 @@ def test_provider_jinja_context():
         "VERSION_SUFFIX": ".rc1",
         "PROVIDER_DESCRIPTION": "Amazon integration (including `Amazon Web Services (AWS) <https://aws.amazon.com/>`__).\n",
         "CHANGELOG_RELATIVE_PATH": "../../airflow/providers/amazon",
-        "SUPPORTED_PYTHON_VERSIONS": ["3.9", "3.10", "3.11", "3.12"],
+        "SUPPORTED_PYTHON_VERSIONS": ["3.8", "3.9", "3.10", "3.11", "3.12"],
         "PLUGINS": [],
         "MIN_AIRFLOW_VERSION": "2.8.0",
         "PROVIDER_REMOVED": False,
diff --git a/dev/breeze/tests/test_run_test_args.py b/dev/breeze/tests/test_run_test_args.py
index 66d57c8d782..e11e8f4406b 100644
--- a/dev/breeze/tests/test_run_test_args.py
+++ b/dev/breeze/tests/test_run_test_args.py
@@ -76,7 +76,7 @@ def test_irregular_provider_with_extra_ignore_should_be_valid_cmd(mock_run_comma
     _run_test(
         shell_params=ShellParams(test_type="Providers"),
         extra_pytest_args=(f"--ignore=tests/providers/{fake_provider_name}",),
-        python_version="3.9",
+        python_version="3.8",
         output=None,
         test_timeout=60,
         skip_docker_compose_down=True,
@@ -105,7 +105,7 @@ def test_primary_test_arg_is_excluded_by_extra_pytest_arg(mock_run_command):
     _run_test(
         shell_params=ShellParams(test_type=f"Providers[{test_provider},{test_provider_not_skipped}]"),
         extra_pytest_args=(f"--ignore=tests/providers/{test_provider}",),
-        python_version="3.9",
+        python_version="3.8",
         output=None,
         test_timeout=60,
         skip_docker_compose_down=True,
@@ -136,7 +136,7 @@ def test_test_is_skipped_if_all_are_ignored(mock_run_command):
     _run_test(
         shell_params=ShellParams(test_type=f"Providers[{','.join(test_providers)}]"),
         extra_pytest_args=[f"--ignore=tests/providers/{provider}" for provider in test_providers],
-        python_version="3.9",
+        python_version="3.8",
         output=None,
         test_timeout=60,
         skip_docker_compose_down=True,
diff --git a/dev/breeze/tests/test_selective_checks.py b/dev/breeze/tests/test_selective_checks.py
index 3b58a45ae1b..5cdbb5e1d9b 100644
--- a/dev/breeze/tests/test_selective_checks.py
+++ b/dev/breeze/tests/test_selective_checks.py
@@ -18,7 +18,7 @@ from __future__ import annotations
 
 import json
 import re
-from functools import cache
+from functools import lru_cache
 from typing import Any
 
 import pytest
@@ -56,7 +56,8 @@ def escape_ansi_colors(line):
     return ANSI_COLORS_MATCHER.sub("", line)
 
 
-@cache
+# Can be replaced with cache when we move to Python 3.9 (when 3.8 is EOL)
+@lru_cache(maxsize=None)
 def get_rich_console() -> Console:
     return Console(color_system="truecolor", force_terminal=True)
 
@@ -110,10 +111,10 @@ def assert_outputs_are_printed(expected_outputs: dict[str, str], stderr: str):
                 ("INTHEWILD.md",),
                 {
                     "affected-providers-list-as-string": None,
-                    "all-python-versions": "['3.9']",
-                    "all-python-versions-list-as-string": "3.9",
-                    "python-versions": "['3.9']",
-                    "python-versions-list-as-string": "3.9",
+                    "all-python-versions": "['3.8']",
+                    "all-python-versions-list-as-string": "3.8",
+                    "python-versions": "['3.8']",
+                    "python-versions-list-as-string": "3.8",
                     "ci-image-build": "false",
                     "needs-helm-tests": "false",
                     "run-tests": "false",
@@ -136,10 +137,10 @@ def assert_outputs_are_printed(expected_outputs: dict[str, str], stderr: str):
                 ("airflow/api/file.py",),
                 {
                     "affected-providers-list-as-string": "common.compat fab",
-                    "all-python-versions": "['3.9']",
-                    "all-python-versions-list-as-string": "3.9",
-                    "python-versions": "['3.9']",
-                    "python-versions-list-as-string": "3.9",
+                    "all-python-versions": "['3.8']",
+                    "all-python-versions-list-as-string": "3.8",
+                    "python-versions": "['3.8']",
+                    "python-versions-list-as-string": "3.8",
                     "ci-image-build": "true",
                     "prod-image-build": "false",
                     "needs-helm-tests": "false",
@@ -162,10 +163,10 @@ def assert_outputs_are_printed(expected_outputs: dict[str, str], stderr: str):
             pytest.param(
                 ("airflow/api_internal/file.py",),
                 {
-                    "all-python-versions": "['3.9']",
-                    "all-python-versions-list-as-string": "3.9",
-                    "python-versions": "['3.9']",
-                    "python-versions-list-as-string": "3.9",
+                    "all-python-versions": "['3.8']",
+                    "all-python-versions-list-as-string": "3.8",
+                    "python-versions": "['3.8']",
+                    "python-versions-list-as-string": "3.8",
                     "ci-image-build": "true",
                     "prod-image-build": "false",
                     "needs-helm-tests": "false",
@@ -187,10 +188,10 @@ def assert_outputs_are_printed(expected_outputs: dict[str, str], stderr: str):
             pytest.param(
                 ("airflow/api_fastapi/file.py",),
                 {
-                    "all-python-versions": "['3.9']",
-                    "all-python-versions-list-as-string": "3.9",
-                    "python-versions": "['3.9']",
-                    "python-versions-list-as-string": "3.9",
+                    "all-python-versions": "['3.8']",
+                    "all-python-versions-list-as-string": "3.8",
+                    "python-versions": "['3.8']",
+                    "python-versions-list-as-string": "3.8",
                     "ci-image-build": "true",
                     "prod-image-build": "false",
                     "needs-helm-tests": "false",
@@ -212,10 +213,10 @@ def assert_outputs_are_printed(expected_outputs: dict[str, str], stderr: str):
             pytest.param(
                 ("tests/api/file.py",),
                 {
-                    "all-python-versions": "['3.9']",
-                    "all-python-versions-list-as-string": "3.9",
-                    "python-versions": "['3.9']",
-                    "python-versions-list-as-string": "3.9",
+                    "all-python-versions": "['3.8']",
+                    "all-python-versions-list-as-string": "3.8",
+                    "python-versions": "['3.8']",
+                    "python-versions-list-as-string": "3.8",
                     "ci-image-build": "true",
                     "prod-image-build": "false",
                     "needs-helm-tests": "false",
@@ -238,10 +239,10 @@ def assert_outputs_are_printed(expected_outputs: dict[str, str], stderr: str):
                 ("airflow/operators/file.py",),
                 {
                     "affected-providers-list-as-string": None,
-                    "all-python-versions": "['3.9']",
-                    "all-python-versions-list-as-string": "3.9",
-                    "python-versions": "['3.9']",
-                    "python-versions-list-as-string": "3.9",
+                    "all-python-versions": "['3.8']",
+                    "all-python-versions-list-as-string": "3.8",
+                    "python-versions": "['3.8']",
+                    "python-versions-list-as-string": "3.8",
                     "ci-image-build": "true",
                     "prod-image-build": "false",
                     "needs-helm-tests": "false",
@@ -265,10 +266,10 @@ def assert_outputs_are_printed(expected_outputs: dict[str, str], stderr: str):
                 ("airflow/operators/python.py",),
                 {
                     "affected-providers-list-as-string": None,
-                    "all-python-versions": "['3.9']",
-                    "all-python-versions-list-as-string": "3.9",
-                    "python-versions": "['3.9']",
-                    "python-versions-list-as-string": "3.9",
+                    "all-python-versions": "['3.8']",
+                    "all-python-versions-list-as-string": "3.8",
+                    "python-versions": "['3.8']",
+                    "python-versions-list-as-string": "3.8",
                     "ci-image-build": "true",
                     "prod-image-build": "false",
                     "needs-helm-tests": "false",
@@ -294,10 +295,10 @@ def assert_outputs_are_printed(expected_outputs: dict[str, str], stderr: str):
                 ("airflow/serialization/python.py",),
                 {
                     "affected-providers-list-as-string": None,
-                    "all-python-versions": "['3.9']",
-                    "all-python-versions-list-as-string": "3.9",
-                    "python-versions": "['3.9']",
-                    "python-versions-list-as-string": "3.9",
+                    "all-python-versions": "['3.8']",
+                    "all-python-versions-list-as-string": "3.8",
+                    "python-versions": "['3.8']",
+                    "python-versions-list-as-string": "3.8",
                     "ci-image-build": "true",
                     "prod-image-build": "false",
                     "needs-helm-tests": "false",
@@ -325,10 +326,10 @@ def assert_outputs_are_printed(expected_outputs: dict[str, str], stderr: str):
                 {
                     "affected-providers-list-as-string": "amazon common.compat common.sql fab google openlineage "
                     "pgvector postgres",
-                    "all-python-versions": "['3.9']",
-                    "all-python-versions-list-as-string": "3.9",
-                    "python-versions": "['3.9']",
-                    "python-versions-list-as-string": "3.9",
+                    "all-python-versions": "['3.8']",
+                    "all-python-versions-list-as-string": "3.8",
+                    "python-versions": "['3.8']",
+                    "python-versions-list-as-string": "3.8",
                     "ci-image-build": "true",
                     "prod-image-build": "false",
                     "needs-helm-tests": "false",
@@ -356,10 +357,10 @@ def assert_outputs_are_printed(expected_outputs: dict[str, str], stderr: str):
                 ("tests/providers/apache/beam/file.py",),
                 {
                     "affected-providers-list-as-string": "apache.beam google",
-                    "all-python-versions": "['3.9']",
-                    "all-python-versions-list-as-string": "3.9",
-                    "python-versions": "['3.9']",
-                    "python-versions-list-as-string": "3.9",
+                    "all-python-versions": "['3.8']",
+                    "all-python-versions-list-as-string": "3.8",
+                    "python-versions": "['3.8']",
+                    "python-versions-list-as-string": "3.8",
                     "ci-image-build": "true",
                     "prod-image-build": "false",
                     "needs-helm-tests": "false",
@@ -384,10 +385,10 @@ def assert_outputs_are_printed(expected_outputs: dict[str, str], stderr: str):
                 ("docs/file.rst",),
                 {
                     "affected-providers-list-as-string": None,
-                    "all-python-versions": "['3.9']",
-                    "all-python-versions-list-as-string": "3.9",
-                    "python-versions": "['3.9']",
-                    "python-versions-list-as-string": "3.9",
+                    "all-python-versions": "['3.8']",
+                    "all-python-versions-list-as-string": "3.8",
+                    "python-versions": "['3.8']",
+                    "python-versions-list-as-string": "3.8",
                     "ci-image-build": "true",
                     "prod-image-build": "false",
                     "needs-helm-tests": "false",
@@ -415,10 +416,10 @@ def assert_outputs_are_printed(expected_outputs: dict[str, str], stderr: str):
                 {
                     "affected-providers-list-as-string": "amazon common.sql google openlineage "
                     "pgvector postgres",
-                    "all-python-versions": "['3.9']",
-                    "all-python-versions-list-as-string": "3.9",
-                    "python-versions": "['3.9']",
-                    "python-versions-list-as-string": "3.9",
+                    "all-python-versions": "['3.8']",
+                    "all-python-versions-list-as-string": "3.8",
+                    "python-versions": "['3.8']",
+                    "python-versions-list-as-string": "3.8",
                     "ci-image-build": "true",
                     "prod-image-build": "true",
                     "needs-helm-tests": "true",
@@ -450,10 +451,10 @@ def assert_outputs_are_printed(expected_outputs: dict[str, str], stderr: str):
                 {
                     "affected-providers-list-as-string": "amazon apache.livy "
                     "dbt.cloud dingding discord http",
-                    "all-python-versions": "['3.9']",
-                    "all-python-versions-list-as-string": "3.9",
-                    "python-versions": "['3.9']",
-                    "python-versions-list-as-string": "3.9",
+                    "all-python-versions": "['3.8']",
+                    "all-python-versions-list-as-string": "3.8",
+                    "python-versions": "['3.8']",
+                    "python-versions-list-as-string": "3.8",
                     "ci-image-build": "true",
                     "prod-image-build": "true",
                     "needs-helm-tests": "true",
@@ -486,10 +487,10 @@ def assert_outputs_are_printed(expected_outputs: dict[str, str], stderr: str):
                 ),
                 {
                     "affected-providers-list-as-string": "airbyte",
-                    "all-python-versions": "['3.9']",
-                    "all-python-versions-list-as-string": "3.9",
-                    "python-versions": "['3.9']",
-                    "python-versions-list-as-string": "3.9",
+                    "all-python-versions": "['3.8']",
+                    "all-python-versions-list-as-string": "3.8",
+                    "python-versions": "['3.8']",
+                    "python-versions-list-as-string": "3.8",
                     "ci-image-build": "true",
                     "prod-image-build": "true",
                     "needs-helm-tests": "true",
@@ -518,10 +519,10 @@ def assert_outputs_are_printed(expected_outputs: dict[str, str], stderr: str):
                 ),
                 {
                     "affected-providers-list-as-string": None,
-                    "all-python-versions": "['3.9']",
-                    "all-python-versions-list-as-string": "3.9",
-                    "python-versions": "['3.9']",
-                    "python-versions-list-as-string": "3.9",
+                    "all-python-versions": "['3.8']",
+                    "all-python-versions-list-as-string": "3.8",
+                    "python-versions": "['3.8']",
+                    "python-versions-list-as-string": "3.8",
                     "ci-image-build": "true",
                     "prod-image-build": "true",
                     "needs-helm-tests": "true",
@@ -546,10 +547,10 @@ def assert_outputs_are_printed(expected_outputs: dict[str, str], stderr: str):
                 ("generated/provider_dependencies.json",),
                 {
                     "affected-providers-list-as-string": ALL_PROVIDERS_AFFECTED,
-                    "all-python-versions": "['3.9', '3.10', '3.11', '3.12']",
-                    "all-python-versions-list-as-string": "3.9 3.10 3.11 3.12",
-                    "python-versions": "['3.9', '3.10', '3.11', '3.12']",
-                    "python-versions-list-as-string": "3.9 3.10 3.11 3.12",
+                    "all-python-versions": "['3.8', '3.9', '3.10', '3.11', '3.12']",
+                    "all-python-versions-list-as-string": "3.8 3.9 3.10 3.11 3.12",
+                    "python-versions": "['3.8', '3.9', '3.10', '3.11', '3.12']",
+                    "python-versions-list-as-string": "3.8 3.9 3.10 3.11 3.12",
                     "ci-image-build": "true",
                     "prod-image-build": "true",
                     "needs-helm-tests": "true",
@@ -573,10 +574,10 @@ def assert_outputs_are_printed(expected_outputs: dict[str, str], stderr: str):
                 ("generated/provider_dependencies.json",),
                 {
                     "affected-providers-list-as-string": ALL_PROVIDERS_AFFECTED,
-                    "all-python-versions": "['3.9', '3.10', '3.11', '3.12']",
-                    "all-python-versions-list-as-string": "3.9 3.10 3.11 3.12",
-                    "python-versions": "['3.9', '3.10', '3.11', '3.12']",
-                    "python-versions-list-as-string": "3.9 3.10 3.11 3.12",
+                    "all-python-versions": "['3.8', '3.9', '3.10', '3.11', '3.12']",
+                    "all-python-versions-list-as-string": "3.8 3.9 3.10 3.11 3.12",
+                    "python-versions": "['3.8', '3.9', '3.10', '3.11', '3.12']",
+                    "python-versions-list-as-string": "3.8 3.9 3.10 3.11 3.12",
                     "ci-image-build": "true",
                     "prod-image-build": "true",
                     "needs-helm-tests": "true",
@@ -600,10 +601,10 @@ def assert_outputs_are_printed(expected_outputs: dict[str, str], stderr: str):
                 "affected-providers-list-as-string": "amazon apache.hive cncf.kubernetes "
                 "common.compat common.sql exasol ftp google http imap microsoft.azure "
                 "mongo mysql openlineage postgres salesforce ssh teradata",
-                "all-python-versions": "['3.9']",
-                "all-python-versions-list-as-string": "3.9",
-                "python-versions": "['3.9']",
-                "python-versions-list-as-string": "3.9",
+                "all-python-versions": "['3.8']",
+                "all-python-versions-list-as-string": "3.8",
+                "python-versions": "['3.8']",
+                "python-versions-list-as-string": "3.8",
                 "ci-image-build": "true",
                 "prod-image-build": "false",
                 "needs-helm-tests": "false",
@@ -626,10 +627,10 @@ def assert_outputs_are_printed(expected_outputs: dict[str, str], stderr: str):
             ("tests/providers/airbyte/__init__.py",),
             {
                 "affected-providers-list-as-string": "airbyte",
-                "all-python-versions": "['3.9']",
-                "all-python-versions-list-as-string": "3.9",
-                "python-versions": "['3.9']",
-                "python-versions-list-as-string": "3.9",
+                "all-python-versions": "['3.8']",
+                "all-python-versions-list-as-string": "3.8",
+                "python-versions": "['3.8']",
+                "python-versions-list-as-string": "3.8",
                 "ci-image-build": "true",
                 "prod-image-build": "false",
                 "needs-helm-tests": "false",
@@ -652,10 +653,10 @@ def assert_outputs_are_printed(expected_outputs: dict[str, str], stderr: str):
                 "affected-providers-list-as-string": "amazon apache.hive cncf.kubernetes "
                 "common.compat common.sql exasol ftp google http imap microsoft.azure "
                 "mongo mysql openlineage postgres salesforce ssh teradata",
-                "all-python-versions": "['3.9']",
-                "all-python-versions-list-as-string": "3.9",
-                "python-versions": "['3.9']",
-                "python-versions-list-as-string": "3.9",
+                "all-python-versions": "['3.8']",
+                "all-python-versions-list-as-string": "3.8",
+                "python-versions": "['3.8']",
+                "python-versions-list-as-string": "3.8",
                 "ci-image-build": "true",
                 "prod-image-build": "false",
                 "needs-helm-tests": "false",
@@ -682,10 +683,10 @@ def assert_outputs_are_printed(expected_outputs: dict[str, str], stderr: str):
             ),
             {
                 "affected-providers-list-as-string": "common.compat common.io openlineage",
-                "all-python-versions": "['3.9']",
-                "all-python-versions-list-as-string": "3.9",
-                "python-versions": "['3.9']",
-                "python-versions-list-as-string": "3.9",
+                "all-python-versions": "['3.8']",
+                "all-python-versions-list-as-string": "3.8",
+                "python-versions": "['3.8']",
+                "python-versions-list-as-string": "3.8",
                 "ci-image-build": "true",
                 "prod-image-build": "false",
                 "needs-helm-tests": "false",
@@ -706,10 +707,10 @@ def assert_outputs_are_printed(expected_outputs: dict[str, str], stderr: str):
             ("airflow/providers/standard/operators/bash.py",),
             {
                 "affected-providers-list-as-string": "celery edge standard",
-                "all-python-versions": "['3.9']",
-                "all-python-versions-list-as-string": "3.9",
-                "python-versions": "['3.9']",
-                "python-versions-list-as-string": "3.9",
+                "all-python-versions": "['3.8']",
+                "all-python-versions-list-as-string": "3.8",
+                "python-versions": "['3.8']",
+                "python-versions-list-as-string": "3.8",
                 "ci-image-build": "true",
                 "prod-image-build": "false",
                 "needs-helm-tests": "false",
@@ -730,10 +731,10 @@ def assert_outputs_are_printed(expected_outputs: dict[str, str], stderr: str):
             ("tests/operators/bash.py",),
             {
                 "affected-providers-list-as-string": None,
-                "all-python-versions": "['3.9']",
-                "all-python-versions-list-as-string": "3.9",
-                "python-versions": "['3.9']",
-                "python-versions-list-as-string": "3.9",
+                "all-python-versions": "['3.8']",
+                "all-python-versions-list-as-string": "3.8",
+                "python-versions": "['3.8']",
+                "python-versions-list-as-string": "3.8",
                 "ci-image-build": "true",
                 "prod-image-build": "false",
                 "needs-helm-tests": "false",
@@ -755,10 +756,10 @@ def assert_outputs_are_printed(expected_outputs: dict[str, str], stderr: str):
                 ("tests/utils/test_cli_util.py",),
                 {
                     "affected-providers-list-as-string": ALL_PROVIDERS_AFFECTED,
-                    "all-python-versions": "['3.9']",
-                    "all-python-versions-list-as-string": "3.9",
-                    "python-versions": "['3.9']",
-                    "python-versions-list-as-string": "3.9",
+                    "all-python-versions": "['3.8']",
+                    "all-python-versions-list-as-string": "3.8",
+                    "python-versions": "['3.8']",
+                    "python-versions-list-as-string": "3.8",
                     "ci-image-build": "true",
                     "prod-image-build": "true",
                     "needs-helm-tests": "true",
@@ -854,7 +855,9 @@ def test_excluded_providers():
     )
     assert_outputs_are_printed(
         {
-            "excluded-providers-as-string": json.dumps({"3.9": ["cloudant"], "3.12": ["apache.beam"]}),
+            "excluded-providers-as-string": json.dumps(
+                {"3.8": ["cloudant"], "3.9": ["cloudant"], "3.12": ["apache.beam"]}
+            ),
         },
         str(stderr),
     )
@@ -922,15 +925,15 @@ def test_full_test_needed_when_scripts_changes(files: tuple[str, ...], expected_
                 {
                     "affected-providers-list-as-string": ALL_PROVIDERS_AFFECTED,
                     "all-versions": "true",
-                    "all-python-versions": "['3.9', '3.10', '3.11', '3.12']",
-                    "all-python-versions-list-as-string": "3.9 3.10 3.11 3.12",
+                    "all-python-versions": "['3.8', '3.9', '3.10', '3.11', '3.12']",
+                    "all-python-versions-list-as-string": "3.8 3.9 3.10 3.11 3.12",
                     "mysql-versions": "['8.0', '8.4']",
                     "postgres-versions": "['12', '13', '14', '15', '16', '17']",
-                    "python-versions": "['3.9', '3.10', '3.11', '3.12']",
-                    "python-versions-list-as-string": "3.9 3.10 3.11 3.12",
+                    "python-versions": "['3.8', '3.9', '3.10', '3.11', '3.12']",
+                    "python-versions-list-as-string": "3.8 3.9 3.10 3.11 3.12",
                     "kubernetes-versions": "['v1.28.13', 'v1.29.8', 'v1.30.4', 'v1.31.0']",
                     "kubernetes-versions-list-as-string": "v1.28.13 v1.29.8 v1.30.4 v1.31.0",
-                    "kubernetes-combos-list-as-string": "3.9-v1.28.13 3.10-v1.29.8 3.11-v1.30.4 3.12-v1.31.0",
+                    "kubernetes-combos-list-as-string": "3.8-v1.28.13 3.9-v1.29.8 3.10-v1.30.4 3.11-v1.31.0 3.12-v1.28.13",
                     "ci-image-build": "true",
                     "prod-image-build": "true",
                     "run-tests": "true",
@@ -955,16 +958,16 @@ def test_full_test_needed_when_scripts_changes(files: tuple[str, ...], expected_
                 "main",
                 {
                     "affected-providers-list-as-string": ALL_PROVIDERS_AFFECTED,
-                    "all-python-versions": "['3.9']",
-                    "all-python-versions-list-as-string": "3.9",
+                    "all-python-versions": "['3.8']",
+                    "all-python-versions-list-as-string": "3.8",
                     "all-versions": "false",
                     "mysql-versions": "['8.0']",
                     "postgres-versions": "['12']",
-                    "python-versions": "['3.9']",
-                    "python-versions-list-as-string": "3.9",
+                    "python-versions": "['3.8']",
+                    "python-versions-list-as-string": "3.8",
                     "kubernetes-versions": "['v1.28.13']",
                     "kubernetes-versions-list-as-string": "v1.28.13",
-                    "kubernetes-combos-list-as-string": "3.9-v1.28.13",
+                    "kubernetes-combos-list-as-string": "3.8-v1.28.13",
                     "ci-image-build": "true",
                     "prod-image-build": "true",
                     "run-tests": "true",
@@ -989,16 +992,16 @@ def test_full_test_needed_when_scripts_changes(files: tuple[str, ...], expected_
                 "main",
                 {
                     "affected-providers-list-as-string": ALL_PROVIDERS_AFFECTED,
-                    "all-python-versions": "['3.9']",
-                    "all-python-versions-list-as-string": "3.9",
+                    "all-python-versions": "['3.8']",
+                    "all-python-versions-list-as-string": "3.8",
                     "all-versions": "false",
                     "mysql-versions": "['8.0']",
                     "postgres-versions": "['12']",
-                    "python-versions": "['3.9']",
-                    "python-versions-list-as-string": "3.9",
+                    "python-versions": "['3.8']",
+                    "python-versions-list-as-string": "3.8",
                     "kubernetes-versions": "['v1.28.13']",
                     "kubernetes-versions-list-as-string": "v1.28.13",
-                    "kubernetes-combos-list-as-string": "3.9-v1.28.13",
+                    "kubernetes-combos-list-as-string": "3.8-v1.28.13",
                     "ci-image-build": "true",
                     "prod-image-build": "true",
                     "run-tests": "true",
@@ -1061,14 +1064,14 @@ def test_full_test_needed_when_scripts_changes(files: tuple[str, ...], expected_
                 "main",
                 {
                     "affected-providers-list-as-string": ALL_PROVIDERS_AFFECTED,
-                    "all-python-versions": "['3.9']",
-                    "all-python-versions-list-as-string": "3.9",
+                    "all-python-versions": "['3.8']",
+                    "all-python-versions-list-as-string": "3.8",
                     "all-versions": "false",
-                    "python-versions": "['3.9']",
-                    "python-versions-list-as-string": "3.9",
+                    "python-versions": "['3.8']",
+                    "python-versions-list-as-string": "3.8",
                     "kubernetes-versions": "['v1.28.13']",
                     "kubernetes-versions-list-as-string": "v1.28.13",
-                    "kubernetes-combos-list-as-string": "3.9-v1.28.13",
+                    "kubernetes-combos-list-as-string": "3.8-v1.28.13",
                     "ci-image-build": "true",
                     "prod-image-build": "true",
                     "run-tests": "true",
@@ -1093,14 +1096,14 @@ def test_full_test_needed_when_scripts_changes(files: tuple[str, ...], expected_
                 "main",
                 {
                     "affected-providers-list-as-string": ALL_PROVIDERS_AFFECTED,
-                    "all-python-versions": "['3.9']",
-                    "all-python-versions-list-as-string": "3.9",
+                    "all-python-versions": "['3.8']",
+                    "all-python-versions-list-as-string": "3.8",
                     "all-versions": "false",
-                    "python-versions": "['3.9']",
-                    "python-versions-list-as-string": "3.9",
+                    "python-versions": "['3.8']",
+                    "python-versions-list-as-string": "3.8",
                     "kubernetes-versions": "['v1.28.13']",
                     "kubernetes-versions-list-as-string": "v1.28.13",
-                    "kubernetes-combos-list-as-string": "3.9-v1.28.13",
+                    "kubernetes-combos-list-as-string": "3.8-v1.28.13",
                     "ci-image-build": "true",
                     "prod-image-build": "true",
                     "run-tests": "true",
@@ -1129,10 +1132,10 @@ def test_full_test_needed_when_scripts_changes(files: tuple[str, ...], expected_
                 "v2-7-stable",
                 {
                     "affected-providers-list-as-string": ALL_PROVIDERS_AFFECTED,
-                    "all-python-versions": "['3.9']",
-                    "all-python-versions-list-as-string": "3.9",
-                    "python-versions": "['3.9']",
-                    "python-versions-list-as-string": "3.9",
+                    "all-python-versions": "['3.8']",
+                    "all-python-versions-list-as-string": "3.8",
+                    "python-versions": "['3.8']",
+                    "python-versions-list-as-string": "3.8",
                     "all-versions": "false",
                     "ci-image-build": "true",
                     "prod-image-build": "true",
@@ -1181,8 +1184,8 @@ def test_expected_output_full_tests_needed(
             ("INTHEWILD.md",),
             {
                 "affected-providers-list-as-string": None,
-                "all-python-versions": "['3.9']",
-                "all-python-versions-list-as-string": "3.9",
+                "all-python-versions": "['3.8']",
+                "all-python-versions-list-as-string": "3.8",
                 "ci-image-build": "false",
                 "needs-helm-tests": "false",
                 "run-tests": "false",
@@ -1206,8 +1209,8 @@ def test_expected_output_full_tests_needed(
                 "affected-providers-list-as-string": "amazon apache.beam apache.cassandra cncf.kubernetes "
                 "common.compat common.sql facebook google hashicorp microsoft.azure microsoft.mssql "
                 "mysql openlineage oracle postgres presto salesforce samba sftp ssh trino",
-                "all-python-versions": "['3.9']",
-                "all-python-versions-list-as-string": "3.9",
+                "all-python-versions": "['3.8']",
+                "all-python-versions-list-as-string": "3.8",
                 "needs-helm-tests": "false",
                 "ci-image-build": "true",
                 "prod-image-build": "true",
@@ -1236,8 +1239,8 @@ def test_expected_output_full_tests_needed(
                 "cncf.kubernetes common.compat common.sql facebook google "
                 "hashicorp microsoft.azure microsoft.mssql mysql openlineage oracle postgres "
                 "presto salesforce samba sftp ssh trino",
-                "all-python-versions": "['3.9']",
-                "all-python-versions-list-as-string": "3.9",
+                "all-python-versions": "['3.8']",
+                "all-python-versions-list-as-string": "3.8",
                 "ci-image-build": "true",
                 "prod-image-build": "true",
                 "needs-helm-tests": "false",
@@ -1261,8 +1264,8 @@ def test_expected_output_full_tests_needed(
             ),
             {
                 "affected-providers-list-as-string": ALL_PROVIDERS_AFFECTED,
-                "all-python-versions": "['3.9']",
-                "all-python-versions-list-as-string": "3.9",
+                "all-python-versions": "['3.8']",
+                "all-python-versions-list-as-string": "3.8",
                 "ci-image-build": "true",
                 "prod-image-build": "false",
                 "needs-helm-tests": "false",
@@ -1304,8 +1307,8 @@ def test_expected_output_pull_request_v2_7(
             ("INTHEWILD.md",),
             {
                 "affected-providers-list-as-string": None,
-                "all-python-versions": "['3.9']",
-                "all-python-versions-list-as-string": "3.9",
+                "all-python-versions": "['3.8']",
+                "all-python-versions-list-as-string": "3.8",
                 "ci-image-build": "false",
                 "needs-helm-tests": "false",
                 "run-tests": "false",
@@ -1325,8 +1328,8 @@ def test_expected_output_pull_request_v2_7(
             ("tests/system/any_file.py",),
             {
                 "affected-providers-list-as-string": None,
-                "all-python-versions": "['3.9']",
-                "all-python-versions-list-as-string": "3.9",
+                "all-python-versions": "['3.8']",
+                "all-python-versions-list-as-string": "3.8",
                 "ci-image-build": "true",
                 "prod-image-build": "false",
                 "needs-helm-tests": "false",
@@ -1354,8 +1357,8 @@ def test_expected_output_pull_request_v2_7(
                 "cncf.kubernetes common.compat common.sql "
                 "facebook google hashicorp microsoft.azure microsoft.mssql mysql "
                 "openlineage oracle postgres presto salesforce samba sftp ssh trino",
-                "all-python-versions": "['3.9']",
-                "all-python-versions-list-as-string": "3.9",
+                "all-python-versions": "['3.8']",
+                "all-python-versions-list-as-string": "3.8",
                 "ci-image-build": "true",
                 "prod-image-build": "true",
                 "needs-helm-tests": "true",
@@ -1388,8 +1391,8 @@ def test_expected_output_pull_request_v2_7(
             ),
             {
                 "affected-providers-list-as-string": "common.compat fab",
-                "all-python-versions": "['3.9']",
-                "all-python-versions-list-as-string": "3.9",
+                "all-python-versions": "['3.8']",
+                "all-python-versions-list-as-string": "3.8",
                 "ci-image-build": "true",
                 "prod-image-build": "false",
                 "needs-helm-tests": "false",
@@ -1410,8 +1413,8 @@ def test_expected_output_pull_request_v2_7(
         pytest.param(
             ("airflow/models/test.py",),
             {
-                "all-python-versions": "['3.9']",
-                "all-python-versions-list-as-string": "3.9",
+                "all-python-versions": "['3.8']",
+                "all-python-versions-list-as-string": "3.8",
                 "ci-image-build": "true",
                 "prod-image-build": "false",
                 "needs-helm-tests": "false",
@@ -1432,8 +1435,8 @@ def test_expected_output_pull_request_v2_7(
         pytest.param(
             ("airflow/file.py",),
             {
-                "all-python-versions": "['3.9']",
-                "all-python-versions-list-as-string": "3.9",
+                "all-python-versions": "['3.8']",
+                "all-python-versions-list-as-string": "3.8",
                 "ci-image-build": "true",
                 "prod-image-build": "false",
                 "needs-helm-tests": "false",
@@ -1477,8 +1480,8 @@ def test_expected_output_pull_request_target(
             "main",
             {
                 "affected-providers-list-as-string": ALL_PROVIDERS_AFFECTED,
-                "all-python-versions": "['3.9', '3.10', '3.11', '3.12']",
-                "all-python-versions-list-as-string": "3.9 3.10 3.11 3.12",
+                "all-python-versions": "['3.8', '3.9', '3.10', '3.11', '3.12']",
+                "all-python-versions-list-as-string": "3.8 3.9 3.10 3.11 3.12",
                 "ci-image-build": "true",
                 "prod-image-build": "true",
                 "needs-helm-tests": "true",
@@ -1499,8 +1502,8 @@ def test_expected_output_pull_request_target(
             "v2-3-stable",
             {
                 "affected-providers-list-as-string": ALL_PROVIDERS_AFFECTED,
-                "all-python-versions": "['3.9', '3.10', '3.11', '3.12']",
-                "all-python-versions-list-as-string": "3.9 3.10 3.11 3.12",
+                "all-python-versions": "['3.8', '3.9', '3.10', '3.11', '3.12']",
+                "all-python-versions-list-as-string": "3.8 3.9 3.10 3.11 3.12",
                 "ci-image-build": "true",
                 "prod-image-build": "true",
                 "needs-helm-tests": "false",
@@ -1523,8 +1526,8 @@ def test_expected_output_pull_request_target(
             "main",
             {
                 "affected-providers-list-as-string": ALL_PROVIDERS_AFFECTED,
-                "all-python-versions": "['3.9', '3.10', '3.11', '3.12']",
-                "all-python-versions-list-as-string": "3.9 3.10 3.11 3.12",
+                "all-python-versions": "['3.8', '3.9', '3.10', '3.11', '3.12']",
+                "all-python-versions-list-as-string": "3.8 3.9 3.10 3.11 3.12",
                 "ci-image-build": "true",
                 "prod-image-build": "true",
                 "needs-helm-tests": "true",
@@ -1577,8 +1580,8 @@ def test_no_commit_provided_trigger_full_build_for_any_event_type(github_event):
     )
     assert_outputs_are_printed(
         {
-            "all-python-versions": "['3.9', '3.10', '3.11', '3.12']",
-            "all-python-versions-list-as-string": "3.9 3.10 3.11 3.12",
+            "all-python-versions": "['3.8', '3.9', '3.10', '3.11', '3.12']",
+            "all-python-versions-list-as-string": "3.8 3.9 3.10 3.11 3.12",
             "ci-image-build": "true",
             "prod-image-build": "true",
             "needs-helm-tests": "true",
diff --git a/dev/breeze/tests/test_shell_params.py b/dev/breeze/tests/test_shell_params.py
index 98ec098cd64..987884f4c84 100644
--- a/dev/breeze/tests/test_shell_params.py
+++ b/dev/breeze/tests/test_shell_params.py
@@ -67,8 +67,8 @@ console = Console(width=400, color_system="standard")
             {"airflow_branch": "v2-7-test"},
             {
                 "DEFAULT_BRANCH": "v2-7-test",
-                "AIRFLOW_CI_IMAGE": "ghcr.io/apache/airflow/v2-7-test/ci/python3.9",
-                "PYTHON_MAJOR_MINOR_VERSION": "3.9",
+                "AIRFLOW_CI_IMAGE": "ghcr.io/apache/airflow/v2-7-test/ci/python3.8",
+                "PYTHON_MAJOR_MINOR_VERSION": "3.8",
             },
             id="With release branch",
         ),
@@ -77,8 +77,8 @@ console = Console(width=400, color_system="standard")
             {},
             {
                 "DEFAULT_BRANCH": AIRFLOW_BRANCH,  # DEFAULT_BRANCH is overridden from sources
-                "AIRFLOW_CI_IMAGE": f"ghcr.io/apache/airflow/{AIRFLOW_BRANCH}/ci/python3.9",
-                "PYTHON_MAJOR_MINOR_VERSION": "3.9",
+                "AIRFLOW_CI_IMAGE": f"ghcr.io/apache/airflow/{AIRFLOW_BRANCH}/ci/python3.8",
+                "PYTHON_MAJOR_MINOR_VERSION": "3.8",
             },
             id="Branch variable from sources not from original env",
         ),
diff --git a/dev/check_files.py b/dev/check_files.py
index 981b8fd5115..321f646a2c2 100644
--- a/dev/check_files.py
+++ b/dev/check_files.py
@@ -33,7 +33,7 @@ RUN rm -rf /opt/airflow/airflow/providers
 """
 
 AIRFLOW_DOCKER = """\
-FROM python:3.9
+FROM python:3.8
 
 # Upgrade
 RUN pip install "apache-airflow=={}"
diff --git a/dev/refresh_images.sh b/dev/refresh_images.sh
index e64d4ce7533..c09619de316 100755
--- a/dev/refresh_images.sh
+++ b/dev/refresh_images.sh
@@ -26,7 +26,7 @@ export PLATFORM=${PLATFORM:="linux/amd64,linux/arm64"}
 
 breeze setup self-upgrade --use-current-airflow-sources
 
-for PYTHON in 3.9 3.10 3.11 3.12
+for PYTHON in 3.8 3.9 3.10 3.11 3.12
 do
     breeze ci-image build \
          --builder airflow_cache \
@@ -48,7 +48,7 @@ breeze release-management prepare-airflow-package --package-format wheel --versi
 
 mv -v ./dist/*.whl ./docker-context-files && chmod a+r ./docker-context-files/*
 
-for PYTHON in 3.9 3.10 3.11 3.12
+for PYTHON in 3.8 3.9 3.10 3.11 3.12
 do
     breeze prod-image build \
          --builder airflow_cache \
diff --git a/dev/retag_docker_images.py b/dev/retag_docker_images.py
index edb4c6856c7..208e8eeb30e 100755
--- a/dev/retag_docker_images.py
+++ b/dev/retag_docker_images.py
@@ -32,7 +32,7 @@ import subprocess
 
 import rich_click as click
 
-PYTHON_VERSIONS = ["3.9", "3.10", "3.11", "3.12"]
+PYTHON_VERSIONS = ["3.8", "3.9", "3.10", "3.11", "3.12"]
 
 GHCR_IO_PREFIX = "ghcr.io"
 
diff --git a/docker_tests/constants.py b/docker_tests/constants.py
index 7be368a2f8b..83c77e2fb4c 100644
--- a/docker_tests/constants.py
+++ b/docker_tests/constants.py
@@ -21,6 +21,6 @@ from pathlib import Path
 
 SOURCE_ROOT = Path(__file__).resolve().parents[1]
 
-DEFAULT_PYTHON_MAJOR_MINOR_VERSION = "3.9"
+DEFAULT_PYTHON_MAJOR_MINOR_VERSION = "3.8"
 DEFAULT_DOCKER_IMAGE = f"ghcr.io/apache/airflow/main/prod/python{DEFAULT_PYTHON_MAJOR_MINOR_VERSION}:latest"
 DOCKER_IMAGE = os.environ.get("DOCKER_IMAGE") or DEFAULT_DOCKER_IMAGE
diff --git a/docker_tests/docker_utils.py b/docker_tests/docker_utils.py
index a5230d6be21..1c9aea8a420 100644
--- a/docker_tests/docker_utils.py
+++ b/docker_tests/docker_utils.py
@@ -87,11 +87,11 @@ In case 2) - Follow the steps below:
 
 CI image:
 
-     breeze ci-image build --upgrade-to-newer-dependencies --python 3.9
+     breeze ci-image build --upgrade-to-newer-dependencies --python 3.8
 
 Production image:
 
-     breeze ci-image build --production-image --upgrade-to-newer-dependencies --python 3.9
+     breeze ci-image build --production-image --upgrade-to-newer-dependencies --python 3.8
 
 * You will see error messages there telling which requirements are conflicting and which packages caused the
   conflict. Add the limitation that caused the conflict to EAGER_UPGRADE_ADDITIONAL_REQUIREMENTS
diff --git a/docs/apache-airflow-providers-amazon/executors/general.rst b/docs/apache-airflow-providers-amazon/executors/general.rst
index 7df66e36ac4..5e4ba28c6e9 100644
--- a/docs/apache-airflow-providers-amazon/executors/general.rst
+++ b/docs/apache-airflow-providers-amazon/executors/general.rst
@@ -138,9 +138,9 @@ which is running the Airflow scheduler process (and thus, the |executorName|
 executor.) Apache Airflow images with specific python versions can be
 downloaded from the Dockerhub registry, and filtering tags by the
 `python
-version <https://hub.docker.com/r/apache/airflow/tags?page=1&name=3.9>`__.
-For example, the tag ``latest-python3.9`` specifies that the image will
-have python 3.9 installed.
+version <https://hub.docker.com/r/apache/airflow/tags?page=1&name=3.8>`__.
+For example, the tag ``latest-python3.8`` specifies that the image will
+have python 3.8 installed.
 
 
 Loading DAGs
diff --git a/docs/apache-airflow-providers/installing-from-pypi.rst b/docs/apache-airflow-providers/installing-from-pypi.rst
index dca0eea2ab2..f0531387059 100644
--- a/docs/apache-airflow-providers/installing-from-pypi.rst
+++ b/docs/apache-airflow-providers/installing-from-pypi.rst
@@ -45,6 +45,6 @@ Typical command to install airflow from PyPI looks like below (you need to use t
 
 .. code-block::
 
-    pip install "apache-airflow-providers-celery" --constraint "https://raw.githubusercontent.com/apache/airflow/constraints-2.10.2/constraints-3.9.txt"
+    pip install "apache-airflow-providers-celery" --constraint "https://raw.githubusercontent.com/apache/airflow/constraints-2.3.0/constraints-3.8.txt"
 
 This is an example, see :doc:`apache-airflow:installation/installing-from-pypi` for more examples, including how to upgrade the providers.
diff --git a/docs/apache-airflow/administration-and-deployment/modules_management.rst b/docs/apache-airflow/administration-and-deployment/modules_management.rst
index 64517c50148..25adb5f333c 100644
--- a/docs/apache-airflow/administration-and-deployment/modules_management.rst
+++ b/docs/apache-airflow/administration-and-deployment/modules_management.rst
@@ -57,10 +57,10 @@ by running an interactive terminal as in the example below:
     >>> from pprint import pprint
     >>> pprint(sys.path)
     ['',
-     '/home/arch/.pyenv/versions/3.9.4/lib/python37.zip',
-     '/home/arch/.pyenv/versions/3.9.4/lib/python3.9',
-     '/home/arch/.pyenv/versions/3.9.4/lib/python3.9/lib-dynload',
-     '/home/arch/venvs/airflow/lib/python3.9/site-packages']
+     '/home/arch/.pyenv/versions/3.8.4/lib/python37.zip',
+     '/home/arch/.pyenv/versions/3.8.4/lib/python3.8',
+     '/home/arch/.pyenv/versions/3.8.4/lib/python3.8/lib-dynload',
+     '/home/arch/venvs/airflow/lib/python3.8/site-packages']
 
 ``sys.path`` is initialized during program startup. The first precedence is
 given to the current directory, i.e, ``path[0]`` is the directory containing
@@ -230,7 +230,7 @@ specified by this command may be as follows:
 
 .. code-block:: none
 
-    Python PATH: [/home/rootcss/venvs/airflow/bin:/usr/lib/python38.zip:/usr/lib/python3.9:/usr/lib/python3.9/lib-dynload:/home/rootcss/venvs/airflow/lib/python3.9/site-packages:/home/rootcss/airflow/dags:/home/rootcss/airflow/config:/home/rootcss/airflow/plugins]
+    Python PATH: [/home/rootcss/venvs/airflow/bin:/usr/lib/python38.zip:/usr/lib/python3.8:/usr/lib/python3.8/lib-dynload:/home/rootcss/venvs/airflow/lib/python3.8/site-packages:/home/rootcss/airflow/dags:/home/rootcss/airflow/config:/home/rootcss/airflow/plugins]
 
 Below is the sample output of the ``airflow info`` command:
 
@@ -245,7 +245,7 @@ Below is the sample output of the ``airflow info`` command:
     architecture    | x86_64
     uname           | uname_result(system='Linux', node='85cd7ab7018e', release='4.19.76-linuxkit', version='#1 SMP Tue May 26 11:42:35 UTC 2020', machine='x86_64', processor='')
     locale          | ('en_US', 'UTF-8')
-    python_version  | 3.9.6 (default, Nov 25 2020, 02:47:44)  [GCC 8.3.0]
+    python_version  | 3.8.6 (default, Nov 25 2020, 02:47:44)  [GCC 8.3.0]
     python_location | /usr/local/bin/python
 
     Tools info
@@ -261,8 +261,8 @@ Below is the sample output of the ``airflow info`` command:
     Paths info
     airflow_home    | /root/airflow
     system_path     | /usr/local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
-    python_path     | /usr/local/bin:/opt/airflow:/files/plugins:/usr/local/lib/python38.zip:/usr/local/lib/python3.9:/usr/
-                    | local/lib/python3.9/lib-dynload:/usr/local/lib/python3.9/site-packages:/files/dags:/root/airflow/conf
+    python_path     | /usr/local/bin:/opt/airflow:/files/plugins:/usr/local/lib/python38.zip:/usr/local/lib/python3.8:/usr/
+                    | local/lib/python3.8/lib-dynload:/usr/local/lib/python3.8/site-packages:/files/dags:/root/airflow/conf
                     | ig:/root/airflow/plugins
     airflow_on_path | True
 
@@ -303,10 +303,10 @@ The ``sys.path`` variable will look like below:
     >>> pprint(sys.path)
     ['',
      '/home/arch/projects/airflow_operators'
-     '/home/arch/.pyenv/versions/3.9.4/lib/python37.zip',
-     '/home/arch/.pyenv/versions/3.9.4/lib/python3.9',
-     '/home/arch/.pyenv/versions/3.9.4/lib/python3.9/lib-dynload',
-     '/home/arch/venvs/airflow/lib/python3.9/site-packages']
+     '/home/arch/.pyenv/versions/3.8.4/lib/python37.zip',
+     '/home/arch/.pyenv/versions/3.8.4/lib/python3.8',
+     '/home/arch/.pyenv/versions/3.8.4/lib/python3.8/lib-dynload',
+     '/home/arch/venvs/airflow/lib/python3.8/site-packages']
 
 As we can see that our provided directory is now added to the path, let's
 try to import the package now:
@@ -329,7 +329,7 @@ value as shown below:
 
 .. code-block:: none
 
-    Python PATH: [/home/arch/venv/bin:/home/arch/projects/airflow_operators:/usr/lib/python38.zip:/usr/lib/python3.9:/usr/lib/python3.9/lib-dynload:/home/arch/venv/lib/python3.9/site-packages:/home/arch/airflow/dags:/home/arch/airflow/config:/home/arch/airflow/plugins]
+    Python PATH: [/home/arch/venv/bin:/home/arch/projects/airflow_operators:/usr/lib/python38.zip:/usr/lib/python3.8:/usr/lib/python3.8/lib-dynload:/home/arch/venv/lib/python3.8/site-packages:/home/arch/airflow/dags:/home/arch/airflow/config:/home/arch/airflow/plugins]
 
 Creating a package in Python
 ----------------------------
diff --git a/docs/apache-airflow/extra-packages-ref.rst b/docs/apache-airflow/extra-packages-ref.rst
index 92ab5b7ad83..219709dd1da 100644
--- a/docs/apache-airflow/extra-packages-ref.rst
+++ b/docs/apache-airflow/extra-packages-ref.rst
@@ -113,7 +113,7 @@ with a consistent set of dependencies based on constraint files provided by Airf
     :substitutions:
 
     pip install apache-airflow[google,amazon,apache-spark]==|version| \
-      --constraint "https://raw.githubusercontent.com/apache/airflow/constraints-|version|/constraints-3.9.txt"
+      --constraint "https://raw.githubusercontent.com/apache/airflow/constraints-|version|/constraints-3.8.txt"
 
 Note, that this will install providers in the versions that were released at the time of Airflow |version| release. You can later
 upgrade those providers manually if you want to use latest versions of the providers.
diff --git a/docs/apache-airflow/installation/installing-from-pypi.rst b/docs/apache-airflow/installation/installing-from-pypi.rst
index fa34287a315..8c689da5e1f 100644
--- a/docs/apache-airflow/installation/installing-from-pypi.rst
+++ b/docs/apache-airflow/installation/installing-from-pypi.rst
@@ -44,7 +44,7 @@ Typical command to install airflow from scratch in a reproducible way from PyPI
 
 .. code-block:: bash
 
-    pip install "apache-airflow[celery]==|version|" --constraint "https://raw.githubusercontent.com/apache/airflow/constraints-|version|/constraints-3.9.txt"
+    pip install "apache-airflow[celery]==|version|" --constraint "https://raw.githubusercontent.com/apache/airflow/constraints-|version|/constraints-3.8.txt"
 
 
 Typically, you can add other dependencies and providers as separate command after the reproducible
@@ -109,14 +109,14 @@ You can create the URL to the file substituting the variables in the template be
 where:
 
 - ``AIRFLOW_VERSION`` - Airflow version (e.g. :subst-code:`|version|`) or ``main``, ``2-0``, for latest development version
-- ``PYTHON_VERSION`` Python version e.g. ``3.9``, ``3.10``
+- ``PYTHON_VERSION`` Python version e.g. ``3.8``, ``3.9``
 
 The examples below assume that you want to use install airflow in a reproducible way with the ``celery`` extra,
 but you can pick your own set of extras and providers to install.
 
 .. code-block:: bash
 
-    pip install "apache-airflow[celery]==|version|" --constraint "https://raw.githubusercontent.com/apache/airflow/constraints-|version|/constraints-3.9.txt"
+    pip install "apache-airflow[celery]==|version|" --constraint "https://raw.githubusercontent.com/apache/airflow/constraints-|version|/constraints-3.8.txt"
 
 
 .. note::
@@ -147,7 +147,7 @@ performing dependency resolution.
 
 .. code-block:: bash
 
-    pip install "apache-airflow[celery]==|version|" --constraint "https://raw.githubusercontent.com/apache/airflow/constraints-|version|/constraints-3.9.txt"
+    pip install "apache-airflow[celery]==|version|" --constraint "https://raw.githubusercontent.com/apache/airflow/constraints-|version|/constraints-3.8.txt"
     pip install "apache-airflow==|version|" apache-airflow-providers-google==10.1.1
 
 You can also downgrade or upgrade other dependencies this way - even if they are not compatible with
@@ -155,7 +155,7 @@ those dependencies that are stored in the original constraints file:
 
 .. code-block:: bash
 
-    pip install "apache-airflow[celery]==|version|" --constraint "https://raw.githubusercontent.com/apache/airflow/constraints-|version|/constraints-3.9.txt"
+    pip install "apache-airflow[celery]==|version|" --constraint "https://raw.githubusercontent.com/apache/airflow/constraints-|version|/constraints-3.8.txt"
     pip install "apache-airflow[celery]==|version|" dbt-core==0.20.0
 
 .. warning::
@@ -198,7 +198,7 @@ one provided by the community.
 
 .. code-block:: bash
 
-    pip install "apache-airflow[celery]==|version|" --constraint "https://raw.githubusercontent.com/apache/airflow/constraints-|version|/constraints-3.9.txt"
+    pip install "apache-airflow[celery]==|version|" --constraint "https://raw.githubusercontent.com/apache/airflow/constraints-|version|/constraints-3.8.txt"
     pip install "apache-airflow==|version|" dbt-core==0.20.0
     pip freeze > my-constraints.txt
 
@@ -325,9 +325,9 @@ dependencies compatible with just airflow core at the moment Airflow was release
 
     AIRFLOW_VERSION=|version|
     PYTHON_VERSION="$(python -c 'import sys; print(f"{sys.version_info.major}.{sys.version_info.minor}")')"
-    # For example: 3.9
+    # For example: 3.8
     CONSTRAINT_URL="https://raw.githubusercontent.com/apache/airflow/constraints-${AIRFLOW_VERSION}/constraints-no-providers-${PYTHON_VERSION}.txt"
-    # For example: https://raw.githubusercontent.com/apache/airflow/constraints-|version|/constraints-no-providers-3.9.txt
+    # For example: https://raw.githubusercontent.com/apache/airflow/constraints-|version|/constraints-no-providers-3.8.txt
     pip install "apache-airflow==${AIRFLOW_VERSION}" --constraint "${CONSTRAINT_URL}"
 
 
@@ -357,7 +357,7 @@ Symbol not found: ``_Py_GetArgcArgv``
 =====================================
 
 If you see ``Symbol not found: _Py_GetArgcArgv`` while starting or importing ``airflow``, this may mean that you are using an incompatible version of Python.
-For a homebrew installed version of Python, this is generally caused by using Python in ``/usr/local/opt/bin`` rather than the Frameworks installation (e.g. for ``python 3.9``: ``/usr/local/opt/python@3.9/Frameworks/Python.framework/Versions/3.9``).
+For a homebrew installed version of Python, this is generally caused by using Python in ``/usr/local/opt/bin`` rather than the Frameworks installation (e.g. for ``python 3.8``: ``/usr/local/opt/python@3.8/Frameworks/Python.framework/Versions/3.8``).
 
 The crux of the issue is that a library Airflow depends on, ``setproctitle``, uses a non-public Python API
 which is not available from the standard installation ``/usr/local/opt/`` (which symlinks to a path under ``/usr/local/Cellar``).
@@ -366,9 +366,9 @@ An easy fix is just to ensure you use a version of Python that has a dylib of th
 
 .. code-block:: bash
 
-  # Note: these instructions are for python3.9 but can be loosely modified for other versions
-  brew install python@3.9
-  virtualenv -p /usr/local/opt/python@3.9/Frameworks/Python.framework/Versions/3.9/bin/python3 .toy-venv
+  # Note: these instructions are for python3.8 but can be loosely modified for other versions
+  brew install python@3.8
+  virtualenv -p /usr/local/opt/python@3.8/Frameworks/Python.framework/Versions/3.8/bin/python3 .toy-venv
   source .toy-venv/bin/activate
   pip install apache-airflow
   python
diff --git a/docs/apache-airflow/installation/prerequisites.rst b/docs/apache-airflow/installation/prerequisites.rst
index 3342b63bf15..c0fc2f64dff 100644
--- a/docs/apache-airflow/installation/prerequisites.rst
+++ b/docs/apache-airflow/installation/prerequisites.rst
@@ -20,7 +20,7 @@ Prerequisites
 
 Airflow® is tested with:
 
-* Python: 3.9, 3.10, 3.11, 3.12
+* Python: 3.8, 3.9, 3.10, 3.11, 3.12
 
 * Databases:
 
diff --git a/docs/apache-airflow/installation/supported-versions.rst b/docs/apache-airflow/installation/supported-versions.rst
index 22ff9cc8fbd..d82500728ce 100644
--- a/docs/apache-airflow/installation/supported-versions.rst
+++ b/docs/apache-airflow/installation/supported-versions.rst
@@ -60,8 +60,8 @@ They are based on the official release schedule of Python and Kubernetes, nicely
 
 2. The "oldest" supported version of Python/Kubernetes is the default one. "Default" is only meaningful
    in terms of "smoke tests" in CI PRs which are run using this default version and default reference
-   image available in DockerHub. Currently the ``apache/airflow:latest`` and ``apache/airflow:2.10.2`` images
-   are Python 3.8 images, however, in the first MINOR/MAJOR release of Airflow released after 2024-10-14,
+   image available in DockerHub. Currently the ``apache/airflow:latest`` and ``apache/airflow:2.5.2`` images
+   are Python 3.8 images, however, in the first MINOR/MAJOR release of Airflow released after 14.09.2023,
    they will become Python 3.9 images.
 
 3. We support a new version of Python/Kubernetes in main after they are officially released, as soon as we
diff --git a/docs/apache-airflow/start.rst b/docs/apache-airflow/start.rst
index c1565ac8c23..e7d62f6acf6 100644
--- a/docs/apache-airflow/start.rst
+++ b/docs/apache-airflow/start.rst
@@ -24,7 +24,7 @@ This quick start guide will help you bootstrap an Airflow standalone instance on
 
 .. note::
 
-   Successful installation requires a Python 3 environment. Starting with Airflow 2.7.0, Airflow supports Python 3.9, 3.10, 3.11 and 3.12.
+   Successful installation requires a Python 3 environment. Starting with Airflow 2.7.0, Airflow supports Python 3.8, 3.9, 3.10, 3.11 and 3.12.
 
    Only ``pip`` installation is currently officially supported.
 
@@ -65,7 +65,7 @@ constraint files to enable reproducible installation, so using ``pip`` and const
       PYTHON_VERSION="$(python -c 'import sys; print(f"{sys.version_info.major}.{sys.version_info.minor}")')"
 
       CONSTRAINT_URL="https://raw.githubusercontent.com/apache/airflow/constraints-${AIRFLOW_VERSION}/constraints-${PYTHON_VERSION}.txt"
-      # For example this would install |version| with python 3.9: https://raw.githubusercontent.com/apache/airflow/constraints-|version|/constraints-3.9.txt
+      # For example this would install |version| with python 3.8: https://raw.githubusercontent.com/apache/airflow/constraints-|version|/constraints-3.8.txt
 
       pip install "apache-airflow==${AIRFLOW_VERSION}" --constraint "${CONSTRAINT_URL}"
 
diff --git a/docs/docker-stack/README.md b/docs/docker-stack/README.md
index c3e798c264d..f6ce1fd9c8a 100644
--- a/docs/docker-stack/README.md
+++ b/docs/docker-stack/README.md
@@ -33,9 +33,9 @@ for all the supported Python versions.
 
 You can find the following images there (Assuming Airflow version `3.0.0.dev0`):
 
-* `apache/airflow:latest` - the latest released Airflow image with default Python version (3.12 currently)
+* `apache/airflow:latest` - the latest released Airflow image with default Python version (3.8 currently)
 * `apache/airflow:latest-pythonX.Y` - the latest released Airflow image with specific Python version
-* `apache/airflow:3.0.0.dev0` - the versioned Airflow image with default Python version (3.12 currently)
+* `apache/airflow:3.0.0.dev0` - the versioned Airflow image with default Python version (3.8 currently)
 * `apache/airflow:3.0.0.dev0-pythonX.Y` - the versioned Airflow image with specific Python version
 
 Those are "reference" regular images. They contain the most common set of extras, dependencies and providers that are
@@ -45,9 +45,9 @@ You can also use "slim" images that contain only core airflow and are about half
 but you need to add all the [Reference for package extras](https://airflow.apache.org/docs/apache-airflow/stable/extra-packages-ref.html) and providers that you need separately
 via [Building the image](https://airflow.apache.org/docs/docker-stack/build.html#build-build-image).
 
-* `apache/airflow:slim-latest`              - the latest released Airflow image with default Python version (3.12 currently)
+* `apache/airflow:slim-latest`              - the latest released Airflow image with default Python version (3.8 currently)
 * `apache/airflow:slim-latest-pythonX.Y`    - the latest released Airflow image with specific Python version
-* `apache/airflow:slim-3.0.0.dev0`           - the versioned Airflow image with default Python version (3.12 currently)
+* `apache/airflow:slim-3.0.0.dev0`           - the versioned Airflow image with default Python version (3.8 currently)
 * `apache/airflow:slim-3.0.0.dev0-pythonX.Y` - the versioned Airflow image with specific Python version
 
 The Apache Airflow image provided as convenience package is optimized for size, and
diff --git a/docs/docker-stack/build-arg-ref.rst b/docs/docker-stack/build-arg-ref.rst
index 1c64db79c63..49ec996b823 100644
--- a/docs/docker-stack/build-arg-ref.rst
+++ b/docs/docker-stack/build-arg-ref.rst
@@ -30,7 +30,7 @@ Those are the most common arguments that you use when you want to build a custom
 +------------------------------------------+------------------------------------------+---------------------------------------------+
 | Build argument                           | Default value                            | Description                                 |
 +==========================================+==========================================+=============================================+
-| ``PYTHON_BASE_IMAGE``                    | ``python:3.9-slim-bookworm``             | Base python image.                          |
+| ``PYTHON_BASE_IMAGE``                    | ``python:3.8-slim-bookworm``             | Base python image.                          |
 +------------------------------------------+------------------------------------------+---------------------------------------------+
 | ``AIRFLOW_VERSION``                      | :subst-code:`|airflow-version|`          | version of Airflow.                         |
 +------------------------------------------+------------------------------------------+---------------------------------------------+
diff --git a/docs/docker-stack/build.rst b/docs/docker-stack/build.rst
index 4b2bcab5b2e..3317957f009 100644
--- a/docs/docker-stack/build.rst
+++ b/docs/docker-stack/build.rst
@@ -215,7 +215,7 @@ In the simplest case building your image consists of those steps:
 
 1) Create your own ``Dockerfile`` (name it ``Dockerfile``) where you add:
 
-* information what your image should be based on (for example ``FROM: apache/airflow:|airflow-version|-python3.9``
+* information what your image should be based on (for example ``FROM: apache/airflow:|airflow-version|-python3.8``
 
 * additional steps that should be executed in your image (typically in the form of ``RUN <command>``)
 
@@ -316,13 +316,13 @@ Naming conventions for the images:
 +----------------+-----------------------+---------------------------------+--------------------------------------+
 | Image          | Python                | Standard image                  | Slim image                           |
 +================+=======================+=================================+======================================+
-| Latest default | 3.9                   | apache/airflow:latest           | apache/airflow:slim-latest           |
+| Latest default | 3.8                   | apache/airflow:latest           | apache/airflow:slim-latest           |
 +----------------+-----------------------+---------------------------------+--------------------------------------+
-| Default        | 3.9                   | apache/airflow:X.Y.Z            | apache/airflow:slim-X.Y.Z            |
+| Default        | 3.8                   | apache/airflow:X.Y.Z            | apache/airflow:slim-X.Y.Z            |
 +----------------+-----------------------+---------------------------------+--------------------------------------+
-| Latest         | 3.9,3.10,3.11,3.12    | apache/airflow:latest-pythonN.M | apache/airflow:slim-latest-pythonN.M |
+| Latest         | 3.8,3.9,3.10,3.11     | apache/airflow:latest-pythonN.M | apache/airflow:slim-latest-pythonN.M |
 +----------------+-----------------------+---------------------------------+--------------------------------------+
-| Specific       | 3.9,3.10,3.11,3.12    | apache/airflow:X.Y.Z-pythonN.M  | apache/airflow:slim-X.Y.Z-pythonN.M  |
+| Specific       | 3.8,3.9,3.10,3.11     | apache/airflow:X.Y.Z-pythonN.M  | apache/airflow:slim-X.Y.Z-pythonN.M  |
 +----------------+-----------------------+---------------------------------+--------------------------------------+
 
 * The "latest" image is always the latest released stable version available.
@@ -714,7 +714,7 @@ Building from PyPI packages
 
 This is the basic way of building the custom images from sources.
 
-The following example builds the production image in version ``3.9`` with latest PyPI-released Airflow,
+The following example builds the production image in version ``3.8`` with latest PyPI-released Airflow,
 with default set of Airflow extras and dependencies. The latest PyPI-released Airflow constraints are used automatically.
 
 .. exampleinclude:: docker-examples/customizing/stable-airflow.sh
@@ -722,7 +722,7 @@ with default set of Airflow extras and dependencies. The latest PyPI-released Ai
     :start-after: [START build]
     :end-before: [END build]
 
-The following example builds the production image in version ``3.9`` with default extras from ``2.3.0`` Airflow
+The following example builds the production image in version ``3.8`` with default extras from ``2.3.0`` Airflow
 package. The ``2.3.0`` constraints are used automatically.
 
 .. exampleinclude:: docker-examples/customizing/pypi-selected-version.sh
@@ -730,7 +730,7 @@ package. The ``2.3.0`` constraints are used automatically.
     :start-after: [START build]
     :end-before: [END build]
 
-The following example builds the production image in version ``3.9`` with additional airflow extras
+The following example builds the production image in version ``3.8`` with additional airflow extras
 (``mssql,hdfs``) from ``2.3.0`` PyPI package, and additional dependency (``oauth2client``).
 
 .. exampleinclude:: docker-examples/customizing/pypi-extras-and-deps.sh
@@ -757,7 +757,7 @@ have more complex dependencies to build.
 Building optimized images
 .........................
 
-The following example builds the production image in version ``3.9`` with additional airflow extras from
+The following example builds the production image in version ``3.8`` with additional airflow extras from
 PyPI package but it includes additional apt dev and runtime dependencies.
 
 The dev dependencies are those that require ``build-essential`` and usually need to involve recompiling
@@ -815,7 +815,7 @@ a branch or tag in your repository and use the tag or branch in the URL that you
 In case of GitHub builds you need to pass the constraints reference manually in case you want to use
 specific constraints, otherwise the default ``constraints-main`` is used.
 
-The following example builds the production image in version ``3.9`` with default extras from the latest main version and
+The following example builds the production image in version ``3.8`` with default extras from the latest main version and
 constraints are taken from latest version of the constraints-main branch in GitHub.
 
 .. exampleinclude:: docker-examples/customizing/github-main.sh
diff --git a/docs/docker-stack/docker-examples/customizing/add-build-essential-custom.sh b/docs/docker-stack/docker-examples/customizing/add-build-essential-custom.sh
index 9426d892504..f0d30cb20fb 100755
--- a/docs/docker-stack/docker-examples/customizing/add-build-essential-custom.sh
+++ b/docs/docker-stack/docker-examples/customizing/add-build-essential-custom.sh
@@ -31,7 +31,7 @@ export DOCKER_BUILDKIT=1
 
 docker build . \
     --pull \
-    --build-arg PYTHON_BASE_IMAGE="python:3.9-slim-bookworm" \
+    --build-arg PYTHON_BASE_IMAGE="python:3.8-slim-bookworm" \
     --build-arg AIRFLOW_VERSION="${AIRFLOW_VERSION}" \
     --build-arg ADDITIONAL_PYTHON_DEPS="mpi4py==3.1.6" \
     --build-arg ADDITIONAL_DEV_APT_DEPS="libopenmpi-dev" \
diff --git a/docs/docker-stack/docker-examples/customizing/custom-sources.sh b/docs/docker-stack/docker-examples/customizing/custom-sources.sh
index 311ba5c4d33..ae4a9df4f00 100755
--- a/docs/docker-stack/docker-examples/customizing/custom-sources.sh
+++ b/docs/docker-stack/docker-examples/customizing/custom-sources.sh
@@ -32,7 +32,7 @@ export DOCKER_BUILDKIT=1
 docker build . -f Dockerfile \
     --pull \
     --platform 'linux/amd64' \
-    --build-arg PYTHON_BASE_IMAGE="python:3.9-slim-bookworm" \
+    --build-arg PYTHON_BASE_IMAGE="python:3.8-slim-bookworm" \
     --build-arg AIRFLOW_VERSION="${AIRFLOW_VERSION}" \
     --build-arg ADDITIONAL_AIRFLOW_EXTRAS="slack,odbc" \
     --build-arg ADDITIONAL_PYTHON_DEPS=" \
diff --git a/docs/docker-stack/docker-examples/customizing/github-different-repository.sh b/docs/docker-stack/docker-examples/customizing/github-different-repository.sh
index 30d4c40ef80..e88117d4930 100755
--- a/docs/docker-stack/docker-examples/customizing/github-different-repository.sh
+++ b/docs/docker-stack/docker-examples/customizing/github-different-repository.sh
@@ -29,7 +29,7 @@ export DOCKER_BUILDKIT=1
 
 docker build . \
     --pull \
-    --build-arg PYTHON_BASE_IMAGE="python:3.9-slim-bookworm" \
+    --build-arg PYTHON_BASE_IMAGE="python:3.8-slim-bookworm" \
     --build-arg AIRFLOW_INSTALLATION_METHOD="apache-airflow @ https://github.com/potiuk/airflow/archive/main.tar.gz" \
     --build-arg AIRFLOW_CONSTRAINTS_REFERENCE="constraints-main" \
     --build-arg CONSTRAINTS_GITHUB_REPOSITORY="potiuk/airflow" \
diff --git a/docs/docker-stack/docker-examples/customizing/github-main.sh b/docs/docker-stack/docker-examples/customizing/github-main.sh
index 19ed9e7955d..666b57081c0 100755
--- a/docs/docker-stack/docker-examples/customizing/github-main.sh
+++ b/docs/docker-stack/docker-examples/customizing/github-main.sh
@@ -30,7 +30,7 @@ export DOCKER_BUILDKIT=1
 
 docker build . \
     --pull \
-    --build-arg PYTHON_BASE_IMAGE="python:3.9-slim-bookworm" \
+    --build-arg PYTHON_BASE_IMAGE="python:3.8-slim-bookworm" \
     --build-arg AIRFLOW_INSTALLATION_METHOD="apache-airflow @ https://github.com/apache/airflow/archive/main.tar.gz" \
     --build-arg AIRFLOW_CONSTRAINTS_REFERENCE="constraints-main" \
     --tag "my-github-main:0.0.1"
diff --git a/docs/docker-stack/docker-examples/customizing/github-v2-2-test.sh b/docs/docker-stack/docker-examples/customizing/github-v2-2-test.sh
index 14a0cb01c75..ab1ca265011 100755
--- a/docs/docker-stack/docker-examples/customizing/github-v2-2-test.sh
+++ b/docs/docker-stack/docker-examples/customizing/github-v2-2-test.sh
@@ -31,7 +31,7 @@ export DOCKER_BUILDKIT=1
 
 docker build . \
     --pull \
-    --build-arg PYTHON_BASE_IMAGE="python:3.9-slim-bookworm" \
+    --build-arg PYTHON_BASE_IMAGE="python:3.8-slim-bookworm" \
     --build-arg AIRFLOW_INSTALLATION_METHOD="apache-airflow @ https://github.com/apache/airflow/archive/v2-2-test.tar.gz" \
     --build-arg AIRFLOW_CONSTRAINTS_REFERENCE="constraints-2-2" \
     --tag "my-github-v2-2:0.0.1"
diff --git a/docs/docker-stack/docker-examples/customizing/pypi-dev-runtime-deps.sh b/docs/docker-stack/docker-examples/customizing/pypi-dev-runtime-deps.sh
index 64be44ba6a2..74863922d33 100755
--- a/docs/docker-stack/docker-examples/customizing/pypi-dev-runtime-deps.sh
+++ b/docs/docker-stack/docker-examples/customizing/pypi-dev-runtime-deps.sh
@@ -32,7 +32,7 @@ export DOCKER_BUILDKIT=1
 
 docker build . \
     --pull \
-    --build-arg PYTHON_BASE_IMAGE="python:3.9-slim-bookworm" \
+    --build-arg PYTHON_BASE_IMAGE="python:3.8-slim-bookworm" \
     --build-arg AIRFLOW_VERSION="${AIRFLOW_VERSION}" \
     --build-arg ADDITIONAL_AIRFLOW_EXTRAS="jdbc" \
     --build-arg ADDITIONAL_PYTHON_DEPS="pandas" \
diff --git a/docs/docker-stack/docker-examples/customizing/pypi-extras-and-deps.sh b/docs/docker-stack/docker-examples/customizing/pypi-extras-and-deps.sh
index 4d3baa7735c..6bd60719d8f 100755
--- a/docs/docker-stack/docker-examples/customizing/pypi-extras-and-deps.sh
+++ b/docs/docker-stack/docker-examples/customizing/pypi-extras-and-deps.sh
@@ -31,7 +31,7 @@ export DOCKER_BUILDKIT=1
 
 docker build . \
     --pull \
-    --build-arg PYTHON_BASE_IMAGE="python:3.9-slim-bookworm" \
+    --build-arg PYTHON_BASE_IMAGE="python:3.8-slim-bookworm" \
     --build-arg AIRFLOW_VERSION="${AIRFLOW_VERSION}" \
     --build-arg ADDITIONAL_AIRFLOW_EXTRAS="mssql,hdfs" \
     --build-arg ADDITIONAL_PYTHON_DEPS="oauth2client" \
diff --git a/docs/docker-stack/docker-examples/customizing/pypi-selected-version.sh b/docs/docker-stack/docker-examples/customizing/pypi-selected-version.sh
index 8b4b69a4db1..2cf287e07ac 100755
--- a/docs/docker-stack/docker-examples/customizing/pypi-selected-version.sh
+++ b/docs/docker-stack/docker-examples/customizing/pypi-selected-version.sh
@@ -30,7 +30,7 @@ export AIRFLOW_VERSION=2.3.4
 export DOCKER_BUILDKIT=1
 
 docker build . \
-    --build-arg PYTHON_BASE_IMAGE="python:3.9-slim-bookworm" \
+    --build-arg PYTHON_BASE_IMAGE="python:3.8-slim-bookworm" \
     --build-arg AIRFLOW_VERSION="${AIRFLOW_VERSION}" \
     --tag "my-pypi-selected-version:0.0.1"
 # [END build]
diff --git a/docs/docker-stack/docker-examples/restricted/restricted_environments.sh b/docs/docker-stack/docker-examples/restricted/restricted_environments.sh
index 2f2b91d2b7a..50f184e8845 100755
--- a/docs/docker-stack/docker-examples/restricted/restricted_environments.sh
+++ b/docs/docker-stack/docker-examples/restricted/restricted_environments.sh
@@ -29,8 +29,8 @@ mkdir -p docker-context-files
 export AIRFLOW_VERSION="2.5.3"
 rm docker-context-files/*.whl docker-context-files/*.tar.gz docker-context-files/*.txt || true
 
-curl -Lo "docker-context-files/constraints-3.9.txt" \
-    "https://raw.githubusercontent.com/apache/airflow/constraints-${AIRFLOW_VERSION}/constraints-3.9.txt"
+curl -Lo "docker-context-files/constraints-3.8.txt" \
+    "https://raw.githubusercontent.com/apache/airflow/constraints-${AIRFLOW_VERSION}/constraints-3.8.txt"
 
 echo
 echo "Make sure you use the right python version here (should be same as in constraints)!"
@@ -38,7 +38,7 @@ echo
 python --version
 
 pip download --dest docker-context-files \
-    --constraint docker-context-files/constraints-3.9.txt  \
+    --constraint docker-context-files/constraints-3.8.txt  \
     "apache-airflow[async,celery,elasticsearch,kubernetes,postgres,redis,ssh,statsd,virtualenv]==${AIRFLOW_VERSION}"
 # [END download]
 
@@ -47,7 +47,7 @@ export DOCKER_BUILDKIT=1
 
 docker build . \
     --pull \
-    --build-arg PYTHON_BASE_IMAGE="python:3.9-slim-bookworm" \
+    --build-arg PYTHON_BASE_IMAGE="python:3.8-slim-bookworm" \
     --build-arg AIRFLOW_INSTALLATION_METHOD="apache-airflow" \
     --build-arg AIRFLOW_VERSION="${AIRFLOW_VERSION}" \
     --build-arg INSTALL_MYSQL_CLIENT="false" \
@@ -56,7 +56,7 @@ docker build . \
     --build-arg AIRFLOW_PRE_CACHED_PIP_PACKAGES="false" \
     --build-arg DOCKER_CONTEXT_FILES="docker-context-files" \
     --build-arg INSTALL_PACKAGES_FROM_CONTEXT="true" \
-    --build-arg AIRFLOW_CONSTRAINTS_LOCATION="/docker-context-files/constraints-3.9.txt" \
+    --build-arg AIRFLOW_CONSTRAINTS_LOCATION="/docker-context-files/constraints-3.8.txt" \
     --tag airflow-my-restricted-environment:0.0.1
 # [END build]
 
diff --git a/docs/docker-stack/entrypoint.rst b/docs/docker-stack/entrypoint.rst
index f90395df2af..65a2b92b573 100644
--- a/docs/docker-stack/entrypoint.rst
+++ b/docs/docker-stack/entrypoint.rst
@@ -132,7 +132,7 @@ if you specify extra arguments. For example:
 
 .. code-block:: bash
 
-  docker run -it apache/airflow:3.0.0.dev0-python3.9 bash -c "ls -la"
+  docker run -it apache/airflow:3.0.0.dev0-python3.8 bash -c "ls -la"
   total 16
   drwxr-xr-x 4 airflow root 4096 Jun  5 18:12 .
   drwxr-xr-x 1 root    root 4096 Jun  5 18:12 ..
@@ -144,7 +144,7 @@ you pass extra parameters. For example:
 
 .. code-block:: bash
 
-  > docker run -it apache/airflow:3.0.0.dev0-python3.9 python -c "print('test')"
+  > docker run -it apache/airflow:3.0.0.dev0-python3.8 python -c "print('test')"
   test
 
 If first argument equals to "airflow" - the rest of the arguments is treated as an airflow command
@@ -152,13 +152,13 @@ to execute. Example:
 
 .. code-block:: bash
 
-   docker run -it apache/airflow:3.0.0.dev0-python3.9 airflow webserver
+   docker run -it apache/airflow:3.0.0.dev0-python3.8 airflow webserver
 
 If there are any other arguments - they are simply passed to the "airflow" command
 
 .. code-block:: bash
 
-  > docker run -it apache/airflow:3.0.0.dev0-python3.9 help
+  > docker run -it apache/airflow:3.0.0.dev0-python3.8 help
     usage: airflow [-h] GROUP_OR_COMMAND ...
 
     positional arguments:
@@ -363,7 +363,7 @@ database and creating an ``admin/admin`` Admin user with the following command:
     --env "_AIRFLOW_DB_MIGRATE=true" \
     --env "_AIRFLOW_WWW_USER_CREATE=true" \
     --env "_AIRFLOW_WWW_USER_PASSWORD=admin" \
-      apache/airflow:3.0.0.dev0-python3.9 webserver
+      apache/airflow:3.0.0.dev0-python3.8 webserver
 
 
 .. code-block:: bash
@@ -372,7 +372,7 @@ database and creating an ``admin/admin`` Admin user with the following command:
     --env "_AIRFLOW_DB_MIGRATE=true" \
     --env "_AIRFLOW_WWW_USER_CREATE=true" \
     --env "_AIRFLOW_WWW_USER_PASSWORD_CMD=echo admin" \
-      apache/airflow:3.0.0.dev0-python3.9 webserver
+      apache/airflow:3.0.0.dev0-python3.8 webserver
 
 The commands above perform initialization of the SQLite database, create admin user with admin password
 and Admin role. They also forward local port ``8080`` to the webserver port and finally start the webserver.
@@ -412,6 +412,6 @@ Example:
     --env "_AIRFLOW_DB_MIGRATE=true" \
     --env "_AIRFLOW_WWW_USER_CREATE=true" \
     --env "_AIRFLOW_WWW_USER_PASSWORD_CMD=echo admin" \
-      apache/airflow:3.0.0.dev0-python3.9 webserver
+      apache/airflow:3.0.0.dev0-python3.8 webserver
 
 This method is only available starting from Docker image of Airflow 2.1.1 and above.
diff --git a/docs/docker-stack/index.rst b/docs/docker-stack/index.rst
index b579d2e8c23..e5620daa245 100644
--- a/docs/docker-stack/index.rst
+++ b/docs/docker-stack/index.rst
@@ -50,9 +50,9 @@ for all the supported Python versions.
 
 You can find the following images there (Assuming Airflow version :subst-code:`|airflow-version|`):
 
-* :subst-code:`apache/airflow:latest`              - the latest released Airflow image with default Python version (3.12 currently)
+* :subst-code:`apache/airflow:latest`              - the latest released Airflow image with default Python version (3.8 currently)
 * :subst-code:`apache/airflow:latest-pythonX.Y`    - the latest released Airflow image with specific Python version
-* :subst-code:`apache/airflow:|airflow-version|`           - the versioned Airflow image with default Python version (3.12 currently)
+* :subst-code:`apache/airflow:|airflow-version|`           - the versioned Airflow image with default Python version (3.8 currently)
 * :subst-code:`apache/airflow:|airflow-version|-pythonX.Y` - the versioned Airflow image with specific Python version
 
 Those are "reference" regular images. They contain the most common set of extras, dependencies and providers that are
@@ -62,9 +62,9 @@ You can also use "slim" images that contain only core airflow and are about half
 but you need to add all the :doc:`apache-airflow:extra-packages-ref` and providers that you need separately
 via :ref:`Building the image <build:build_image>`.
 
-* :subst-code:`apache/airflow:slim-latest`              - the latest released Airflow image with default Python version (3.12 currently)
+* :subst-code:`apache/airflow:slim-latest`              - the latest released Airflow image with default Python version (3.8 currently)
 * :subst-code:`apache/airflow:slim-latest-pythonX.Y`    - the latest released Airflow image with specific Python version
-* :subst-code:`apache/airflow:slim-|airflow-version|`           - the versioned Airflow image with default Python version (3.12 currently)
+* :subst-code:`apache/airflow:slim-|airflow-version|`           - the versioned Airflow image with default Python version (3.8 currently)
 * :subst-code:`apache/airflow:slim-|airflow-version|-pythonX.Y` - the versioned Airflow image with specific Python version
 
 The Apache Airflow image provided as convenience package is optimized for size, and
diff --git a/generated/PYPI_README.md b/generated/PYPI_README.md
index 88c6e356302..79f4bffb70e 100644
--- a/generated/PYPI_README.md
+++ b/generated/PYPI_README.md
@@ -56,7 +56,7 @@ Apache Airflow is tested with:
 
 |            | Main version (dev)         | Stable version (2.10.2)    |
 |------------|----------------------------|----------------------------|
-| Python     | 3.9, 3.10, 3.11, 3.12      | 3.8, 3.9, 3.10, 3.11, 3.12 |
+| Python     | 3.8, 3.9, 3.10, 3.11, 3.12 | 3.8, 3.9, 3.10, 3.11, 3.12 |
 | Platform   | AMD64/ARM64(\*)            | AMD64/ARM64(\*)            |
 | Kubernetes | 1.28, 1.29, 1.30, 1.31     | 1.27, 1.28, 1.29, 1.30     |
 | PostgreSQL | 12, 13, 14, 15, 16, 17     | 12, 13, 14, 15, 16         |
@@ -131,14 +131,14 @@ them to the appropriate format and workflow that your tool requires.
 
 ```bash
 pip install 'apache-airflow==2.10.2' \
- --constraint "https://raw.githubusercontent.com/apache/airflow/constraints-2.10.2/constraints-3.9.txt"
+ --constraint "https://raw.githubusercontent.com/apache/airflow/constraints-2.10.2/constraints-3.8.txt"
 ```
 
 2. Installing with extras (i.e., postgres, google)
 
 ```bash
 pip install 'apache-airflow[postgres,google]==2.10.2' \
- --constraint "https://raw.githubusercontent.com/apache/airflow/constraints-2.10.2/constraints-3.9.txt"
+ --constraint "https://raw.githubusercontent.com/apache/airflow/constraints-2.10.2/constraints-3.8.txt"
 ```
 
 For information on installing provider packages, check
diff --git a/generated/provider_dependencies.json b/generated/provider_dependencies.json
index 43349959407..33551430c9e 100644
--- a/generated/provider_dependencies.json
+++ b/generated/provider_dependencies.json
@@ -360,6 +360,7 @@
     "plugins": [],
     "cross-providers-deps": [],
     "excluded-python-versions": [
+      "3.8",
       "3.9"
     ],
     "state": "ready"
diff --git a/hatch_build.py b/hatch_build.py
index 72f59c79ef9..e54d85a2c00 100644
--- a/hatch_build.py
+++ b/hatch_build.py
@@ -369,7 +369,7 @@ DEPENDENCIES = [
     "cryptography>=41.0.0",
     "deprecated>=1.2.13",
     "dill>=0.2.2",
-    # Required for python 3.9 to work with new annotations styles. Check package
+    # Required for python 3.8 and 3.9 to work with new annotations styles. Check package
     # description on PyPI for more details: https://pypi.org/project/eval-type-backport/
     "eval-type-backport>=0.2.0",
     "fastapi[standard]>=0.112.2",
diff --git a/kubernetes_tests/test_kubernetes_pod_operator.py b/kubernetes_tests/test_kubernetes_pod_operator.py
index 13bf99d728d..87fa668daa4 100644
--- a/kubernetes_tests/test_kubernetes_pod_operator.py
+++ b/kubernetes_tests/test_kubernetes_pod_operator.py
@@ -1346,7 +1346,7 @@ def test_hide_sensitive_field_in_templated_fields_on_error(caplog, monkeypatch):
     task = KubernetesPodOperator(
         task_id="dry_run_demo",
         name="hello-dry-run",
-        image="python:3.9-slim-buster",
+        image="python:3.8-slim-buster",
         cmds=["printenv"],
         env_vars=[
             V1EnvVar(name="password", value="{{ password }}"),
diff --git a/newsfragments/42739.significant.rst b/newsfragments/42739.significant.rst
deleted file mode 100644
index 542f761720b..00000000000
--- a/newsfragments/42739.significant.rst
+++ /dev/null
@@ -1 +0,0 @@
-Remove support for Python 3.8 as this version is not maintained within Python release schedule, see https://peps.python.org/pep-0596/.
diff --git a/pyproject.toml b/pyproject.toml
index bc5842fc51c..fba69567851 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -39,7 +39,7 @@ name = "apache-airflow"
 description = "Programmatically author, schedule and monitor data pipelines"
 readme = { file = "generated/PYPI_README.md", content-type = "text/markdown" }
 license-files.globs = ["LICENSE", "3rd-party-licenses/*.txt"]
-requires-python = "~=3.9,<3.13"
+requires-python = "~=3.8,<3.13"
 authors = [
     { name = "Apache Software Foundation", email = "dev@airflow.apache.org" },
 ]
@@ -55,6 +55,7 @@ classifiers = [
     "Intended Audience :: Developers",
     "Intended Audience :: System Administrators",
     "License :: OSI Approved :: Apache Software License",
+    "Programming Language :: Python :: 3.8",
     "Programming Language :: Python :: 3.9",
     "Programming Language :: Python :: 3.10",
     "Programming Language :: Python :: 3.11",
@@ -157,9 +158,15 @@ Twitter = "https://twitter.com/ApacheAirflow"
 YouTube = "https://www.youtube.com/channel/UCSXwxpWZQ7XZ1WL3wqevChA/"
 
 [tool.hatch.envs.default]
-python = "3.9"
+python = "3.8"
+platforms = ["linux", "macos"]
+description = "Default environment with Python 3.8 for maximum compatibility"
+features = []
+
+[tool.hatch.envs.airflow-38]
+python = "3.8"
 platforms = ["linux", "macos"]
-description = "Default environment with Python 3.9 for maximum compatibility"
+description = "Environment with Python 3.8. No devel installed."
 features = []
 
 [tool.hatch.envs.airflow-39]
diff --git a/scripts/ci/docker-compose/devcontainer.env b/scripts/ci/docker-compose/devcontainer.env
index 16c4f19b502..f6c7e2e022f 100644
--- a/scripts/ci/docker-compose/devcontainer.env
+++ b/scripts/ci/docker-compose/devcontainer.env
@@ -15,11 +15,11 @@
 # specific language governing permissions and limitations
 # under the License.
 HOME=
-AIRFLOW_CI_IMAGE="ghcr.io/apache/airflow/main/ci/python3.9:latest"
+AIRFLOW_CI_IMAGE="ghcr.io/apache/airflow/main/ci/python3.8:latest"
 ANSWER=
 AIRFLOW_ENABLE_AIP_44="true"
 AIRFLOW_ENV="development"
-PYTHON_MAJOR_MINOR_VERSION="3.9"
+PYTHON_MAJOR_MINOR_VERSION="3.8"
 AIRFLOW_EXTRAS=
 BASE_BRANCH="main"
 BREEZE="true"
diff --git a/scripts/ci/docker-compose/devcontainer.yml b/scripts/ci/docker-compose/devcontainer.yml
index f3f77f253f5..59230f1b5b0 100644
--- a/scripts/ci/docker-compose/devcontainer.yml
+++ b/scripts/ci/docker-compose/devcontainer.yml
@@ -19,7 +19,7 @@ services:
   airflow:
     stdin_open: true  # docker run -i
     tty: true  # docker run -t
-    image: ghcr.io/apache/airflow/main/ci/python3.9
+    image: ghcr.io/apache/airflow/main/ci/python3.8
     env_file: devcontainer.env
     ports:
       - "22:22"
diff --git a/scripts/ci/kubernetes/k8s_requirements.txt b/scripts/ci/kubernetes/k8s_requirements.txt
index 50e9399f5f2..ebef4fa0f44 100644
--- a/scripts/ci/kubernetes/k8s_requirements.txt
+++ b/scripts/ci/kubernetes/k8s_requirements.txt
@@ -1 +1 @@
--e .[devel-devscripts,devel-tests,cncf.kubernetes] --constraint "https://raw.githubusercontent.com/apache/airflow/constraints-main/constraints-3.9.txt"
+-e .[devel-devscripts,devel-tests,cncf.kubernetes] --constraint "https://raw.githubusercontent.com/apache/airflow/constraints-main/constraints-3.8.txt"
diff --git a/scripts/ci/pre_commit/common_precommit_utils.py b/scripts/ci/pre_commit/common_precommit_utils.py
index c3cb40ffeb5..4f62c50cabe 100644
--- a/scripts/ci/pre_commit/common_precommit_utils.py
+++ b/scripts/ci/pre_commit/common_precommit_utils.py
@@ -30,7 +30,7 @@ from rich.console import Console
 
 AIRFLOW_SOURCES_ROOT_PATH = Path(__file__).parents[3].resolve()
 AIRFLOW_BREEZE_SOURCES_PATH = AIRFLOW_SOURCES_ROOT_PATH / "dev" / "breeze"
-DEFAULT_PYTHON_MAJOR_MINOR_VERSION = "3.9"
+DEFAULT_PYTHON_MAJOR_MINOR_VERSION = "3.8"
 
 console = Console(width=400, color_system="standard")
 
@@ -220,11 +220,11 @@ def validate_cmd_result(cmd_result, include_ci_env_check=False):
                 "\n[yellow]If you see strange stacktraces above, especially about missing imports "
                 "run this command:[/]\n"
             )
-            console.print("[magenta]breeze ci-image build --python 3.9 --upgrade-to-newer-dependencies[/]\n")
+            console.print("[magenta]breeze ci-image build --python 3.8 --upgrade-to-newer-dependencies[/]\n")
 
     elif cmd_result.returncode != 0:
         console.print(
             "[warning]\nIf you see strange stacktraces above, "
-            "run `breeze ci-image build --python 3.9` and try again."
+            "run `breeze ci-image build --python 3.8` and try again."
         )
     sys.exit(cmd_result.returncode)
diff --git a/scripts/ci/pre_commit/compat_cache_on_methods.py b/scripts/ci/pre_commit/compat_cache_on_methods.py
new file mode 100755
index 00000000000..5fee74ff2a4
--- /dev/null
+++ b/scripts/ci/pre_commit/compat_cache_on_methods.py
@@ -0,0 +1,69 @@
+#!/usr/bin/env python
+# 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.
+from __future__ import annotations
+
+import ast
+import pathlib
+import sys
+
+COMPAT_MODULE = "airflow.compat.functools"
+
+
+def check_test_file(file: str) -> int:
+    node = ast.parse(pathlib.Path(file).read_text("utf-8"), file)
+    if not (classes := [c for c in node.body if isinstance(c, ast.ClassDef)]):
+        # Exit early if module doesn't contain any classes
+        return 0
+
+    compat_cache_aliases = []
+    for stmt in node.body:
+        if not isinstance(stmt, ast.ImportFrom) or stmt.module != COMPAT_MODULE:
+            continue
+        for alias in stmt.names:
+            if "cache" in alias.name:
+                compat_cache_aliases.append(alias.asname or alias.name)
+    if not compat_cache_aliases:
+        # Exit early in case if there are no imports from `airflow.compat.functools.cache`
+        return 0
+
+    found = 0
+    for klass in classes:
+        for cls_stmt in klass.body:
+            if not isinstance(cls_stmt, ast.FunctionDef) or not cls_stmt.decorator_list:
+                continue
+            for decorator in cls_stmt.decorator_list:
+                if (isinstance(decorator, ast.Name) and decorator.id in compat_cache_aliases) or (
+                    isinstance(decorator, ast.Attribute) and decorator.attr in compat_cache_aliases
+                ):
+                    found += 1
+                    prefix = f"{file}:{decorator.lineno}:"
+                    print(f"{prefix} Use of `{COMPAT_MODULE}.cache` on methods can lead to memory leaks")
+
+    return found
+
+
+def main(*args: str) -> int:
+    errors = sum(check_test_file(file) for file in args[1:])
+    if not errors:
+        return 0
+    print(f"Found {errors} error{'s' if errors > 1 else ''}.")
+    return 1
+
+
+if __name__ == "__main__":
+    sys.exit(main(*sys.argv))
diff --git a/scripts/ci/pre_commit/mypy.py b/scripts/ci/pre_commit/mypy.py
index f57818342d7..fde1bd85511 100755
--- a/scripts/ci/pre_commit/mypy.py
+++ b/scripts/ci/pre_commit/mypy.py
@@ -63,6 +63,6 @@ if res.returncode != 0:
         "[yellow]If you see strange stacktraces above, and can't reproduce it, please run"
         " this command and try again:\n"
     )
-    console.print(f"breeze ci-image build --python 3.9{flag}\n")
+    console.print(f"breeze ci-image build --python 3.8{flag}\n")
     console.print("[yellow]You can also run `breeze down --cleanup-mypy-cache` to clean up the cache used.\n")
 sys.exit(res.returncode)
diff --git a/scripts/ci/pre_commit/mypy_folder.py b/scripts/ci/pre_commit/mypy_folder.py
index 2e50a3334f2..366c54aae4c 100755
--- a/scripts/ci/pre_commit/mypy_folder.py
+++ b/scripts/ci/pre_commit/mypy_folder.py
@@ -102,6 +102,6 @@ if res.returncode != 0:
         "[yellow]If you see strange stacktraces above, and can't reproduce it, please run"
         " this command and try again:\n"
     )
-    console.print(f"breeze ci-image build --python 3.9{flag}\n")
+    console.print(f"breeze ci-image build --python 3.8{flag}\n")
     console.print("[yellow]You can also run `breeze down --cleanup-mypy-cache` to clean up the cache used.\n")
 sys.exit(res.returncode)
diff --git a/scripts/ci/pre_commit/sync_init_decorator.py b/scripts/ci/pre_commit/sync_init_decorator.py
index fc99fc48d7b..963e9b92225 100755
--- a/scripts/ci/pre_commit/sync_init_decorator.py
+++ b/scripts/ci/pre_commit/sync_init_decorator.py
@@ -74,6 +74,13 @@ def _find_tg_deco(mod: ast.Module) -> ast.FunctionDef:
     )
 
 
+# The new unparse() output is much more readable; fallback to dump() otherwise.
+if hasattr(ast, "unparse"):
+    _reveal = ast.unparse  # type: ignore[attr-defined]
+else:
+    _reveal = ast.dump
+
+
 def _match_arguments(
     init_def: tuple[str, list[ast.arg]],
     deco_def: tuple[str, list[ast.arg]],
@@ -104,7 +111,7 @@ def _match_arguments(
         if ini.annotation and dec.annotation and ast.dump(ini.annotation) != ast.dump(dec.annotation):
             yield (
                 f"Type annotations differ on argument {ini.arg} between {init_name} and @{deco_name}: "
-                f"{ast.unparse(ini.annotation)} != {ast.unparse(dec.annotation)}"
+                f"{_reveal(ini.annotation)} != {_reveal(dec.annotation)}"
             )
         else:
             if not ini.annotation:
@@ -124,7 +131,7 @@ def _match_defaults(
         if ast.dump(ini) != ast.dump(dec):  # Poorly implemented equality check.
             yield (
                 f"Argument {arg_names[i]!r} default mismatch: "
-                f"{init_name} has {ast.unparse(ini)} but @{deco_name} has {ast.unparse(dec)}"
+                f"{init_name} has {_reveal(ini)} but @{deco_name} has {_reveal(dec)}"
             )
 
 
diff --git a/scripts/ci/pre_commit/update_build_dependencies.py b/scripts/ci/pre_commit/update_build_dependencies.py
index d50a0ef22a2..e32a8b2bb51 100755
--- a/scripts/ci/pre_commit/update_build_dependencies.py
+++ b/scripts/ci/pre_commit/update_build_dependencies.py
@@ -39,9 +39,9 @@ files_changed = False
 
 
 if __name__ == "__main__":
-    python38_bin = shutil.which("python3.9")
+    python38_bin = shutil.which("python3.8")
     if not python38_bin:
-        print("Python 3.9 is required to run this script.")
+        print("Python 3.8 is required to run this script.")
         sys.exit(1)
     temp_dir = Path(tempfile.mkdtemp())
     hatchling_spec = ""
diff --git a/scripts/docker/entrypoint_ci.sh b/scripts/docker/entrypoint_ci.sh
index d0946b39e0e..534171355f2 100755
--- a/scripts/docker/entrypoint_ci.sh
+++ b/scripts/docker/entrypoint_ci.sh
@@ -40,7 +40,7 @@ chmod 1777 /tmp
 
 AIRFLOW_SOURCES=$(cd "${IN_CONTAINER_DIR}/../.." || exit 1; pwd)
 
-PYTHON_MAJOR_MINOR_VERSION=${PYTHON_MAJOR_MINOR_VERSION:=3.9}
+PYTHON_MAJOR_MINOR_VERSION=${PYTHON_MAJOR_MINOR_VERSION:=3.8}
 
 export AIRFLOW_HOME=${AIRFLOW_HOME:=${HOME}}
 
diff --git a/scripts/in_container/install_airflow_and_providers.py b/scripts/in_container/install_airflow_and_providers.py
index bc281558758..d07da8360b7 100755
--- a/scripts/in_container/install_airflow_and_providers.py
+++ b/scripts/in_container/install_airflow_and_providers.py
@@ -404,7 +404,7 @@ ALLOWED_MOUNT_SOURCES = ["remove", "tests", "providers-and-tests"]
 )
 @click.option(
     "--python-version",
-    default="3.9",
+    default="3.8",
     envvar="PYTHON_MAJOR_MINOR_VERSION",
     show_default=True,
     help="Python version to use",
diff --git a/scripts/in_container/run_generate_constraints.py b/scripts/in_container/run_generate_constraints.py
index d5553e7a3e2..1721279cb4c 100755
--- a/scripts/in_container/run_generate_constraints.py
+++ b/scripts/in_container/run_generate_constraints.py
@@ -33,7 +33,7 @@ from in_container_utils import click, console, run_command
 AIRFLOW_SOURCE_DIR = Path(__file__).resolve().parents[2]
 
 DEFAULT_BRANCH = os.environ.get("DEFAULT_BRANCH", "main")
-PYTHON_VERSION = os.environ.get("PYTHON_MAJOR_MINOR_VERSION", "3.9")
+PYTHON_VERSION = os.environ.get("PYTHON_MAJOR_MINOR_VERSION", "3.8")
 GENERATED_PROVIDER_DEPENDENCIES_FILE = AIRFLOW_SOURCE_DIR / "generated" / "provider_dependencies.json"
 
 ALL_PROVIDER_DEPENDENCIES = json.loads(GENERATED_PROVIDER_DEPENDENCIES_FILE.read_text())
@@ -83,7 +83,7 @@ PYPI_PROVIDERS_CONSTRAINTS_PREFIX = f"""
 # commands that might change the installed version of apache-airflow should include "apache-airflow==X.Y.Z"
 # in the list of install targets to prevent Airflow accidental upgrade or downgrade.
 #
-# Typical installation process of airflow for Python 3.9 is (with random selection of extras and custom
+# Typical installation process of airflow for Python 3.8 is (with random selection of extras and custom
 # dependencies added), usually consists of two steps:
 #
 # 1. Reproducible installation of airflow with selected providers (note constraints are used):
diff --git a/tests/providers/cloudant/hooks/test_cloudant.py b/tests/providers/cloudant/hooks/test_cloudant.py
index 9580401d98d..eec71f65e79 100644
--- a/tests/providers/cloudant/hooks/test_cloudant.py
+++ b/tests/providers/cloudant/hooks/test_cloudant.py
@@ -30,7 +30,7 @@ pytestmark = [pytest.mark.db_test]
 if sys.version_info < (3, 10):
     pytestmark.append(
         pytest.mark.skip(
-            f"Skipping {__name__} as the cloudant provider is not supported on Python 3.9, see #41555."
+            f"Skipping {__name__} as the cloudant provider is not supported on Python 3.8 and 3.9, see #41555."
         )
     )
 else:
diff --git a/tests/providers/google/cloud/operators/test_mlengine.py b/tests/providers/google/cloud/operators/test_mlengine.py
index c6dcd3853a7..98208accead 100644
--- a/tests/providers/google/cloud/operators/test_mlengine.py
+++ b/tests/providers/google/cloud/operators/test_mlengine.py
@@ -1274,7 +1274,7 @@ TEST_JOB_ID = "1234"
 TEST_GCP_PROJECT_ID = "test-project"
 TEST_REGION = "us-central1"
 TEST_RUNTIME_VERSION = "1.15"
-TEST_PYTHON_VERSION = "3.9"
+TEST_PYTHON_VERSION = "3.8"
 TEST_JOB_DIR = "gs://example_mlengine_bucket/job-dir"
 TEST_PACKAGE_URIS = ["gs://system-tests-resources/example_gcp_mlengine/trainer-0.1.tar.gz"]
 TEST_TRAINING_PYTHON_MODULE = "trainer.task"
diff --git a/tests/providers/google/cloud/triggers/test_mlengine.py b/tests/providers/google/cloud/triggers/test_mlengine.py
index 497793ed3cd..9372ee0c386 100644
--- a/tests/providers/google/cloud/triggers/test_mlengine.py
+++ b/tests/providers/google/cloud/triggers/test_mlengine.py
@@ -30,7 +30,7 @@ TEST_JOB_ID = "1234"
 TEST_GCP_PROJECT_ID = "test-project"
 TEST_REGION = "us-central1"
 TEST_RUNTIME_VERSION = "1.15"
-TEST_PYTHON_VERSION = "3.9"
+TEST_PYTHON_VERSION = "3.8"
 TEST_JOB_DIR = "gs://example_mlengine_bucket/job-dir"
 TEST_PACKAGE_URIS = ["gs://system-tests-resources/example_gcp_mlengine/trainer-0.1.tar.gz"]
 TEST_TRAINING_PYTHON_MODULE = "trainer.task"
diff --git a/tests/system/providers/cncf/kubernetes/example_kubernetes_decorator.py b/tests/system/providers/cncf/kubernetes/example_kubernetes_decorator.py
index 20fd7d5f74f..3d989080d20 100644
--- a/tests/system/providers/cncf/kubernetes/example_kubernetes_decorator.py
+++ b/tests/system/providers/cncf/kubernetes/example_kubernetes_decorator.py
@@ -31,7 +31,7 @@ with DAG(
 ) as dag:
     # [START howto_operator_kubernetes]
     @task.kubernetes(
-        image="python:3.9-slim-buster",
+        image="python:3.8-slim-buster",
         name="k8s_test",
         namespace="default",
         in_cluster=False,
@@ -43,7 +43,7 @@ with DAG(
         print("Hello from k8s pod")
         time.sleep(2)
 
-    @task.kubernetes(image="python:3.9-slim-buster", namespace="default", in_cluster=False)
+    @task.kubernetes(image="python:3.8-slim-buster", namespace="default", in_cluster=False)
     def print_pattern():
         n = 5
         for i in range(n):
diff --git a/tests/www/views/test_views.py b/tests/www/views/test_views.py
index b51fd3ab1c0..1d63846783d 100644
--- a/tests/www/views/test_views.py
+++ b/tests/www/views/test_views.py
@@ -612,7 +612,7 @@ def test_invalid_dates(app, admin_client, url, content):
 @patch("airflow.utils.usage_data_collection.get_database_version", return_value="12.3")
 @patch("airflow.utils.usage_data_collection.get_database_name", return_value="postgres")
 @patch("airflow.utils.usage_data_collection.get_executor", return_value="SequentialExecutor")
-@patch("airflow.utils.usage_data_collection.get_python_version", return_value="3.9")
+@patch("airflow.utils.usage_data_collection.get_python_version", return_value="3.8")
 @patch("airflow.utils.usage_data_collection.get_plugin_counts")
 def test_build_scarf_url(
     get_plugin_counts,
@@ -634,7 +634,7 @@ def test_build_scarf_url(
         result = build_scarf_url(5)
         expected_url = (
             "https://apacheairflow.gateway.scarf.sh/webserver/"
-            f"{airflow_version}/3.9/Linux/x86_64/postgres/12.3/SequentialExecutor/1-5"
+            f"{airflow_version}/3.8/Linux/x86_64/postgres/12.3/SequentialExecutor/1-5"
             f"/6-10/15/20/25/21-50"
         )
         if enabled: