You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@airflow.apache.org by ra...@apache.org on 2026/10/12 13:06:05 UTC

(airflow) branch main updated: Add start-beta-process command to cut beta pre-releases (#74464)

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

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


The following commit(s) were added to refs/heads/main by this push:
     new fac3157a735 Add start-beta-process command to cut beta pre-releases (#74464)
fac3157a735 is described below

commit fac3157a735fec7522ac2e7e2c260e7e46561559
Author: Rahul Vats <43...@users.noreply.github.com>
AuthorDate: Mon Oct 12 18:35:53 2026 +0530

    Add start-beta-process command to cut beta pre-releases (#74464)
    
    Betas are cut from vX-Y-test only: there is no vX-Y-stable branch yet and
    no sync PR (a sync PR exists only to carry changes from vX-Y-test into
    vX-Y-stable for an rc or final), and there is no vote. start-rc-process
    requires the stable branch and a sync branch, so a beta had to be cut by
    hand. A dedicated command keeps start-rc-process untouched and models the
    real beta flow: tag the vX-Y-test tip (the version-bump and release-notes
    commits are pushed there beforehand through normal PRs) and resolve the
    constraints through the release-constraints workflow from vX-Y-test, the
    same way an rc does. The workflow is taught to accept beta versions and
    treat them as pre-releases: provider rc waves are allowed and the result
    lands on its own constraints-X.Y.0bN branch and tag, leaving the shared
    constraints-X-Y branch untouched (only a final moves it).
---
 .github/workflows/release-constraints.yml          |  21 ++--
 dev/README_RELEASE_AIRFLOW.md                      |  24 ++++
 dev/breeze/doc/09_release_management_tasks.rst     |  14 +++
 .../doc/images/output_release-management.svg       | 120 +++++++++---------
 .../doc/images/output_release-management.txt       |   2 +-
 ...utput_release-management_start-beta-process.svg | 138 ++++++++++++++++++++
 ...utput_release-management_start-beta-process.txt |   1 +
 .../output_setup_check-all-params-in-groups.svg    |  48 +++----
 .../output_setup_check-all-params-in-groups.txt    |   2 +-
 .../output_setup_regenerate-command-images.svg     |  56 +++++----
 .../output_setup_regenerate-command-images.txt     |   2 +-
 .../commands/release_candidate_command.py          | 140 ++++++++++++++++++++-
 .../commands/release_management_commands_config.py |  11 ++
 .../airflow_breeze/utils/release_constraints.py    |  10 +-
 dev/breeze/tests/test_release_candidate_command.py |  88 ++++++++++++-
 dev/breeze/tests/test_release_constraints.py       |   1 +
 16 files changed, 555 insertions(+), 123 deletions(-)

diff --git a/.github/workflows/release-constraints.yml b/.github/workflows/release-constraints.yml
index d815251380f..9c10f291f86 100644
--- a/.github/workflows/release-constraints.yml
+++ b/.github/workflows/release-constraints.yml
@@ -20,15 +20,15 @@
 #
 # The stage is derived from the version, so the two cannot be mismatched by hand:
 #
-#   * a candidate (`3.3.1rc1`) pins the providers at the versions PyPI holds - the wave being
-#     voted on exists there only as rc versions - and lands on a branch of its own, so a candidate
-#     never moves the branch every other build reads. Re-running it for the same candidate
-#     replaces that branch and its tag, so the two always describe the run that produced them;
+#   * a pre-release - beta (`3.4.0b1`) or candidate (`3.3.1rc1`) - pins the providers at the versions
+#     PyPI holds (rc provider waves included) and lands on a branch of its own, so it never moves the
+#     branch every other build reads. Re-running it for the same pre-release replaces that branch and
+#     its tag, so the two always describe the run that produced them;
 #   * a final (`3.3.1`) pins the providers at their released versions, ignoring any candidate, and
 #     commits onto `constraints-X-Y` itself, which is what makes the released constraints the
 #     baseline everything downstream reads.
 #
-# A final therefore cannot be produced by retagging a candidate: a released version must never
+# A final therefore cannot be produced by retagging a pre-release: a released version must never
 # pin an rc.
 ---
 name: Release constraints
@@ -36,7 +36,7 @@ on:  # yamllint disable-line rule:truthy
   workflow_dispatch:
     inputs:
       version:
-        description: "Version the constraints belong to, e.g. 3.3.1rc1 or 3.3.1"
+        description: "Version the constraints belong to, e.g. 3.4.0b1, 3.3.1rc1 or 3.3.1"
         required: true
         type: string
       ref:
@@ -109,15 +109,18 @@ jobs:
         env:
           VERSION: ${{ inputs.version }}
         run: |
-          if [[ ! "${VERSION}" =~ ^[0-9]+\.[0-9]+\.[0-9]+(rc[0-9]+)?$ ]]; then
-            echo "'${VERSION}' is not a release version - expected X.Y.Z or X.Y.ZrcN." >&2
+          if [[ ! "${VERSION}" =~ ^[0-9]+\.[0-9]+\.[0-9]+((b|rc)[0-9]+)?$ ]]; then
+            echo "'${VERSION}' is not a release version - expected X.Y.Z, X.Y.ZbN or X.Y.ZrcN." >&2
             exit 1
           fi
           major="$(echo "${VERSION}" | cut -d. -f1)"
           minor="$(echo "${VERSION}" | cut -d. -f2)"
           constraints_branch="constraints-${major}-${minor}"
           echo "constraints-branch=${constraints_branch}" >> "${GITHUB_OUTPUT}"
-          if [[ "${VERSION}" == *rc* ]]; then
+          # A pre-release - beta or rc - pins the providers at the versions PyPI holds (rc provider
+          # waves included) and lands on a branch and tag of its own, so it never moves the shared
+          # constraints-X-Y branch. A final pins released providers and commits onto the shared branch.
+          if [[ "${VERSION}" =~ (b|rc)[0-9]+$ ]]; then
             echo "allow-pre-releases=true" >> "${GITHUB_OUTPUT}"
             echo "target-branch=constraints-${VERSION}" >> "${GITHUB_OUTPUT}"
           else
diff --git a/dev/README_RELEASE_AIRFLOW.md b/dev/README_RELEASE_AIRFLOW.md
index d29de1bbe39..c7dd2f54855 100644
--- a/dev/README_RELEASE_AIRFLOW.md
+++ b/dev/README_RELEASE_AIRFLOW.md
@@ -114,6 +114,30 @@ moves `vX-Y-test` forward to the current `main` - only the branch-specific commi
 `Update default branches for X.Y`) are kept on top of `main`. Each beta is cut from the branch
 in that state, so everything merged to `main` lands in the next beta.
 
+### Cutting a beta
+
+A beta is cut with `breeze release-management start-beta-process`, not `start-rc-process`. A beta is
+released from `vX-Y-test` only: there is no `vX-Y-stable` branch yet and therefore no sync PR (a sync
+PR exists only to carry changes from `vX-Y-test` into `vX-Y-stable` for an `rc`/final), and there is
+no vote.
+
+1. Push the version-bump and release-notes commits to `vX-Y-test` through normal PRs, so the tip of
+   `vX-Y-test` is exactly what the beta should ship.
+2. Run:
+
+   ```shell script
+   breeze release-management start-beta-process \
+       --version ${VERSION} \
+       --task-sdk-version ${TASK_SDK_VERSION}
+   ```
+
+   It validates that `vX-Y-test` exists, checks out its tip, tags the beta there, builds and signs
+   the artifacts, resolves constraints through the `release-constraints` workflow from `vX-Y-test`
+   (exactly like an `rc`: provider rc waves are allowed and the result lands on its own
+   `constraints-X.Y.0bN` branch and tag, leaving the shared `constraints-X-Y` untouched), uploads to
+   SVN dev and PyPI, and pushes the tags. Everything downstream of the tag is the same as an `rc`;
+   only the branch/sync/vote handling differs.
+
 During this phase, all automation that would add commits directly to `vX-Y-test` must be paused -
 any such commit makes `vX-Y-test` diverge from `main` and breaks the next fast-forward. Upgrades and
 fixes land on `main` only and reach `vX-Y-test` with the next fast-forward. When you add the new
diff --git a/dev/breeze/doc/09_release_management_tasks.rst b/dev/breeze/doc/09_release_management_tasks.rst
index 346836f4650..25caf147ac8 100644
--- a/dev/breeze/doc/09_release_management_tasks.rst
+++ b/dev/breeze/doc/09_release_management_tasks.rst
@@ -176,6 +176,20 @@ automates it.
   :alt: Breeze release-management create-minor-branch
 
 
+Start beta process
+""""""""""""""""""
+
+When we prepare a beta pre-release, we automate some of the steps we need to do.
+
+.. code-block:: bash
+
+     breeze release-management start-beta-process
+
+.. image:: ./images/output_release-management_start-beta-process.svg
+  :target: https://raw.githubusercontent.com/apache/airflow/main/dev/breeze/doc/images/output_release-management_start-beta-process.svg
+  :width: 100%
+  :alt: Breeze release-management start-beta-process
+
 Start release candidate process
 """""""""""""""""""""""""""""""
 
diff --git a/dev/breeze/doc/images/output_release-management.svg b/dev/breeze/doc/images/output_release-management.svg
index 01900bf07f6..ed3cab0d811 100644
--- a/dev/breeze/doc/images/output_release-management.svg
+++ b/dev/breeze/doc/images/output_release-management.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>
 
@@ -42,7 +42,7 @@
 
     <defs>
     <clipPath id="breeze-release-management-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-line-0">
     <rect x="0" y="1.5" width="1464" height="24.65"/>
@@ -242,9 +242,12 @@
 <clipPath id="breeze-release-management-line-65">
     <rect x="0" y="1587.5" width="1464" height="24.65"/>
             </clipPath>
+<clipPath id="breeze-release-management-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-title" fill="#c5c8c6" text-anchor="middle" x="740" y="27">Command:&#160;release-management</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-title" fill="#c5c8c6" text-anchor="middle" x="740" y="27">Command:&#160;release-management</text>
             <g transform="translate(26,22)">
             <circle cx="0" cy="0" r="7" fill="#ff5f57"/>
             <circle cx="22" cy="0" r="7" fill="#febc2e"/>
@@ -266,61 +269,62 @@
 </text><text class="breeze-release-management-r5" x="0" y="239.6" textLength="12.2" clip-path="url(#breeze-release-management-line-9)">│</text><text class="breeze-release-management-r4" x="24.4" y="239.6" textLength="414.8" clip-path="url(#breeze-release-management-line-9)">create-minor-branch&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-release-management-r1" x="463.6" y="239.6" textLength="976" clip-path="url(#breez [...]
 </text><text class="breeze-release-management-r5" x="0" y="264" textLength="12.2" clip-path="url(#breeze-release-management-line-10)">│</text><text class="breeze-release-management-r4" x="24.4" y="264" textLength="414.8" clip-path="url(#breeze-release-management-line-10)">prepare-airflow-distributions&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-release-management-r1" x="463.6" y="264" textLength="976" clip-path="url(#breeze-release-management-line-10)">Prepare&#160;sdist/whl& [...]
 </text><text class="breeze-release-management-r5" x="0" y="288.4" textLength="12.2" clip-path="url(#breeze-release-management-line-11)">│</text><text class="breeze-release-management-r4" x="24.4" y="288.4" textLength="414.8" clip-path="url(#breeze-release-management-line-11)">prepare-tarball&#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-r1" x="463.6" y="288.4" textLength="976" [...]
-</text><text class="breeze-release-management-r5" x="0" y="312.8" textLength="12.2" clip-path="url(#breeze-release-management-line-12)">│</text><text class="breeze-release-management-r4" x="24.4" y="312.8" textLength="414.8" clip-path="url(#breeze-release-management-line-12)">start-rc-process&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-release-management-r1" x="463.6" y="312.8" textLength="976" clip [...]
-</text><text class="breeze-release-management-r5" x="0" y="337.2" textLength="12.2" clip-path="url(#breeze-release-management-line-13)">│</text><text class="breeze-release-management-r4" x="24.4" y="337.2" textLength="414.8" clip-path="url(#breeze-release-management-line-13)">start-release&#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-r1" x="463.6" y="337.2" textLe [...]
-</text><text class="breeze-release-management-r5" x="0" y="361.6" textLength="12.2" clip-path="url(#breeze-release-management-line-14)">│</text><text class="breeze-release-management-r4" x="24.4" y="361.6" textLength="414.8" clip-path="url(#breeze-release-management-line-14)">release-prod-images&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-release-management-r1" x="463.6" y="361.6" textLength="976" clip-path="url(#bre [...]
-</text><text class="breeze-release-management-r5" x="0" y="386" textLength="12.2" clip-path="url(#breeze-release-management-line-15)">│</text><text class="breeze-release-management-r4" x="24.4" y="386" textLength="414.8" clip-path="url(#breeze-release-management-line-15)">generate-issue-content-core&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-release-management-r1" x="463.6" y="386" textLength="976" clip-path="url(#breeze-release-management-line-15)">Generates&#16 [...]
-</text><text class="breeze-release-management-r5" x="0" y="410.4" textLength="1464" clip-path="url(#breeze-release-management-line-16)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-release-management-r1" x="1464" y="410.4" textLength="12.2" clip-path="url(#breeze-release-management-line-16)">
-</text><text class="breeze-release-management-r5" x="0" y="434.8" textLength="24.4" clip-path="url(#breeze-release-management-line-17)">╭─</text><text class="breeze-release-management-r5" x="24.4" y="434.8" textLength="280.6" clip-path="url(#breeze-release-management-line-17)">&#160;Helm&#160;release&#160;commands&#160;</text><text class="breeze-release-management-r5" x="305" y="434.8" textLength="1134.6" clip-path="url(#breeze-release-management-line-17)">─────────────────────────────── [...]
-</text><text class="breeze-release-management-r5" x="0" y="459.2" textLength="12.2" clip-path="url(#breeze-release-management-line-18)">│</text><text class="breeze-release-management-r4" x="24.4" y="459.2" textLength="500.2" clip-path="url(#breeze-release-management-line-18)">prepare-helm-chart-tarball&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-release-management-r1" x="549" y="459.2" textLength="890.6" clip-path="u [...]
-</text><text class="breeze-release-management-r5" x="0" y="483.6" textLength="12.2" clip-path="url(#breeze-release-management-line-19)">│</text><text class="breeze-release-management-r4" x="24.4" y="483.6" textLength="500.2" clip-path="url(#breeze-release-management-line-19)">prepare-helm-chart-package&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-release-management-r1" x="549" y="483.6" textLength="890.6" clip-path="u [...]
-</text><text class="breeze-release-management-r5" x="0" y="508" textLength="12.2" clip-path="url(#breeze-release-management-line-20)">│</text><text class="breeze-release-management-r4" x="24.4" y="508" textLength="500.2" clip-path="url(#breeze-release-management-line-20)">generate-issue-content-helm-chart&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-release-management-r1" x="549" y="508" textLength="890.6" clip-path="url(#breeze-release-management-line-20)">G [...]
-</text><text class="breeze-release-management-r5" x="0" y="532.4" textLength="1464" clip-path="url(#breeze-release-management-line-21)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-release-management-r1" x="1464" y="532.4" textLength="12.2" clip-path="url(#breeze-release-management-line-21)">
-</text><text class="breeze-release-management-r5" x="0" y="556.8" textLength="24.4" clip-path="url(#breeze-release-management-line-22)">╭─</text><text class="breeze-release-management-r5" x="24.4" y="556.8" textLength="341.6" clip-path="url(#breeze-release-management-line-22)">&#160;Providers&#160;release&#160;commands&#160;</text><text class="breeze-release-management-r5" x="366" y="556.8" textLength="1073.6" clip-path="url(#breeze-release-management-line-22)">────────────────────────── [...]
-</text><text class="breeze-release-management-r5" x="0" y="581.2" textLength="12.2" clip-path="url(#breeze-release-management-line-23)">│</text><text class="breeze-release-management-r4" x="24.4" y="581.2" textLength="390.4" clip-path="url(#breeze-release-management-line-23)">prepare-provider-documentation&#160;&#160;</text><text class="breeze-release-management-r1" x="439.2" y="581.2" textLength="1000.4" clip-path="url(#breeze-release-management-line-23)">Prepare&#160;CHANGELOG,&#160;RE [...]
-</text><text class="breeze-release-management-r5" x="0" y="605.6" textLength="12.2" clip-path="url(#breeze-release-management-line-24)">│</text><text class="breeze-release-management-r4" x="24.4" y="605.6" textLength="390.4" clip-path="url(#breeze-release-management-line-24)">classify-provider-changes&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-release-management-r1" x="439.2" y="605.6" textLength="1000.4" clip-path="url(#breeze-release-management-line-24)">Classi [...]
-</text><text class="breeze-release-management-r5" x="0" y="630" textLength="12.2" clip-path="url(#breeze-release-management-line-25)">│</text><text class="breeze-release-management-r1" x="439.2" y="630" textLength="1000.4" clip-path="url(#breeze-release-management-line-25)">rules,&#160;flagging&#160;ambiguous&#160;commits&#160;as&#160;&#x27;needs_llm&#x27;&#160;for&#160;an&#160;agent/skill&#160;to&#160;assess.&#160;&#160;&#160;&#160;</text><text class="breeze-release-management-r5" x="14 [...]
-</text><text class="breeze-release-management-r5" x="0" y="654.4" textLength="12.2" clip-path="url(#breeze-release-management-line-26)">│</text><text class="breeze-release-management-r1" x="439.2" y="654.4" textLength="707.6" clip-path="url(#breeze-release-management-line-26)">Outputs&#160;JSON&#160;-&#160;a&#160;deterministic&#160;alternative&#160;to&#160;the&#160;random&#160;&#x27;</text><text class="breeze-release-management-r4" x="1146.8" y="654.4" textLength="207.4" clip-path="url(# [...]
-</text><text class="breeze-release-management-r5" x="0" y="678.8" textLength="12.2" clip-path="url(#breeze-release-management-line-27)">│</text><text class="breeze-release-management-r1" x="439.2" y="678.8" textLength="1000.4" clip-path="url(#breeze-release-management-line-27)">used&#160;purely&#160;for&#160;discovery.&#160;&#160;&#160;&#160;&#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-release-management-r5" x="0" y="703.2" textLength="12.2" clip-path="url(#breeze-release-management-line-28)">│</text><text class="breeze-release-management-r4" x="24.4" y="703.2" textLength="390.4" clip-path="url(#breeze-release-management-line-28)">update-providers-next-version&#160;&#160;&#160;</text><text class="breeze-release-management-r1" x="439.2" y="703.2" textLength="1000.4" clip-path="url(#breeze-release-management-line-28)">Update&#160;provider&#160; [...]
-</text><text class="breeze-release-management-r5" x="0" y="727.6" textLength="12.2" clip-path="url(#breeze-release-management-line-29)">│</text><text class="breeze-release-management-r4" x="24.4" y="727.6" textLength="390.4" clip-path="url(#breeze-release-management-line-29)">prepare-provider-distributions&#160;&#160;</text><text class="breeze-release-management-r1" x="439.2" y="727.6" textLength="1000.4" clip-path="url(#breeze-release-management-line-29)">Prepare&#160;sdist/whl&#160;dis [...]
-</text><text class="breeze-release-management-r5" x="0" y="752" textLength="12.2" clip-path="url(#breeze-release-management-line-30)">│</text><text class="breeze-release-management-r1" x="439.2" y="752" textLength="268.4" clip-path="url(#breeze-release-management-line-30)">wiped&#160;with&#160;`git&#160;clean&#160;</text><text class="breeze-release-management-r6" x="707.6" y="752" textLength="48.8" clip-path="url(#breeze-release-management-line-30)">-fdx</text><text class="breeze-release [...]
-</text><text class="breeze-release-management-r5" x="0" y="776.4" textLength="12.2" clip-path="url(#breeze-release-management-line-31)">│</text><text class="breeze-release-management-r1" x="439.2" y="776.4" textLength="1000.4" clip-path="url(#breeze-release-management-line-31)">keep&#160;in-tree&#160;generated&#160;files&#160;out&#160;of&#160;the&#160;artifact.&#160;See&#160;dev/breeze&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&# [...]
-</text><text class="breeze-release-management-r5" x="0" y="800.8" textLength="12.2" clip-path="url(#breeze-release-management-line-32)">│</text><text class="breeze-release-management-r1" x="439.2" y="800.8" textLength="1000.4" clip-path="url(#breeze-release-management-line-32)">release-management&#160;docs.&#160;&#160;&#160;&#160;&#160;&#160;&#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-release-management-r5" x="0" y="825.2" textLength="12.2" clip-path="url(#breeze-release-management-line-33)">│</text><text class="breeze-release-management-r4" x="24.4" y="825.2" textLength="390.4" clip-path="url(#breeze-release-management-line-33)">install-provider-distributions&#160;&#160;</text><text class="breeze-release-management-r1" x="439.2" y="825.2" textLength="1000.4" clip-path="url(#breeze-release-management-line-33)">Installs&#160;provider&#160;dis [...]
-</text><text class="breeze-release-management-r5" x="0" y="849.6" textLength="12.2" clip-path="url(#breeze-release-management-line-34)">│</text><text class="breeze-release-management-r4" x="24.4" y="849.6" textLength="390.4" clip-path="url(#breeze-release-management-line-34)">verify-provider-distributions&#160;&#160;&#160;</text><text class="breeze-release-management-r1" x="439.2" y="849.6" textLength="1000.4" clip-path="url(#breeze-release-management-line-34)">Verifies&#160;if&#160;all& [...]
-</text><text class="breeze-release-management-r5" x="0" y="874" textLength="12.2" clip-path="url(#breeze-release-management-line-35)">│</text><text class="breeze-release-management-r4" x="24.4" y="874" textLength="390.4" clip-path="url(#breeze-release-management-line-35)">generate-providers-metadata&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-release-management-r1" x="439.2" y="874" textLength="1000.4" clip-path="url(#breeze-release-management-line-35)">Generates&#160;metadat [...]
-</text><text class="breeze-release-management-r5" x="0" y="898.4" textLength="12.2" clip-path="url(#breeze-release-management-line-36)">│</text><text class="breeze-release-management-r4" x="24.4" y="898.4" textLength="390.4" clip-path="url(#breeze-release-management-line-36)">generate-issue-content-providers</text><text class="breeze-release-management-r1" x="439.2" y="898.4" textLength="1000.4" clip-path="url(#breeze-release-management-line-36)">Generates&#160;content&#160;for&#160;issu [...]
-</text><text class="breeze-release-management-r5" x="0" y="922.8" textLength="12.2" clip-path="url(#breeze-release-management-line-37)">│</text><text class="breeze-release-management-r4" x="24.4" y="922.8" textLength="390.4" clip-path="url(#breeze-release-management-line-37)">clean-old-provider-artifacts&#160;&#160;&#160;&#160;</text><text class="breeze-release-management-r1" x="439.2" y="922.8" textLength="1000.4" clip-path="url(#breeze-release-management-line-37)">Cleans&#160;the&#160; [...]
-</text><text class="breeze-release-management-r5" x="0" y="947.2" textLength="12.2" clip-path="url(#breeze-release-management-line-38)">│</text><text class="breeze-release-management-r4" x="24.4" y="947.2" textLength="390.4" clip-path="url(#breeze-release-management-line-38)">tag-providers&#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-r1" x="439.2" y="947.2" textLength="1000.4 [...]
-</text><text class="breeze-release-management-r5" x="0" y="971.6" textLength="1464" clip-path="url(#breeze-release-management-line-39)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-release-management-r1" x="1464" y="971.6" textLength="12.2" clip-path="url(#breeze-release-management-line-39)">
-</text><text class="breeze-release-management-r5" x="0" y="996" textLength="24.4" clip-path="url(#breeze-release-management-line-40)">╭─</text><text class="breeze-release-management-r5" x="24.4" y="996" textLength="427" clip-path="url(#breeze-release-management-line-40)">&#160;Airflow&#160;Task&#160;SDK&#160;release&#160;commands&#160;</text><text class="breeze-release-management-r5" x="451.4" y="996" textLength="988.2" clip-path="url(#breeze-release-management-line-40)">──────────────── [...]
-</text><text class="breeze-release-management-r5" x="0" y="1020.4" textLength="12.2" clip-path="url(#breeze-release-management-line-41)">│</text><text class="breeze-release-management-r4" x="24.4" y="1020.4" textLength="512.4" clip-path="url(#breeze-release-management-line-41)">prepare-task-sdk-distributions&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-release-management-r1" x="561.2" y="1020.4" textLength="878.4" clip-path="url(#breez [...]
-</text><text class="breeze-release-management-r5" x="0" y="1044.8" textLength="1464" clip-path="url(#breeze-release-management-line-42)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-release-management-r1" x="1464" y="1044.8" textLength="12.2" clip-path="url(#breeze-release-management-line-42)">
-</text><text class="breeze-release-management-r5" x="0" y="1069.2" textLength="24.4" clip-path="url(#breeze-release-management-line-43)">╭─</text><text class="breeze-release-management-r5" x="24.4" y="1069.2" textLength="353.8" clip-path="url(#breeze-release-management-line-43)">&#160;airflowctl&#160;release&#160;commands&#160;</text><text class="breeze-release-management-r5" x="378.2" y="1069.2" textLength="1061.4" clip-path="url(#breeze-release-management-line-43)">──────────────────── [...]
-</text><text class="breeze-release-management-r5" x="0" y="1093.6" textLength="12.2" clip-path="url(#breeze-release-management-line-44)">│</text><text class="breeze-release-management-r4" x="24.4" y="1093.6" textLength="414.8" clip-path="url(#breeze-release-management-line-44)">prepare-airflow-ctl-distributions&#160;</text><text class="breeze-release-management-r1" x="463.6" y="1093.6" textLength="976" clip-path="url(#breeze-release-management-line-44)">Prepare&#160;sdist/whl&#160;distri [...]
-</text><text class="breeze-release-management-r5" x="0" y="1118" textLength="12.2" clip-path="url(#breeze-release-management-line-45)">│</text><text class="breeze-release-management-r4" x="24.4" y="1118" textLength="414.8" clip-path="url(#breeze-release-management-line-45)">generate-issue-content-airflow-ctl</text><text class="breeze-release-management-r1" x="463.6" y="1118" textLength="976" clip-path="url(#breeze-release-management-line-45)">Generates&#160;content&#160;for&#160;issue&#1 [...]
-</text><text class="breeze-release-management-r5" x="0" y="1142.4" textLength="12.2" clip-path="url(#breeze-release-management-line-46)">│</text><text class="breeze-release-management-r4" x="24.4" y="1142.4" textLength="414.8" clip-path="url(#breeze-release-management-line-46)">generate-airflowctl-changelog&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-release-management-r1" x="463.6" y="1142.4" textLength="976" clip-path="url(#breeze-release-management-line-46)">Generates&#160 [...]
-</text><text class="breeze-release-management-r5" x="0" y="1166.8" textLength="12.2" clip-path="url(#breeze-release-management-line-47)">│</text><text class="breeze-release-management-r1" x="463.6" y="1166.8" textLength="976" clip-path="url(#breeze-release-management-line-47)">RELEASE_NOTES.rst.&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#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-release-management-r5" x="0" y="1191.2" textLength="1464" clip-path="url(#breeze-release-management-line-48)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-release-management-r1" x="1464" y="1191.2" textLength="12.2" clip-path="url(#breeze-release-management-line-48)">
-</text><text class="breeze-release-management-r5" x="0" y="1215.6" textLength="24.4" clip-path="url(#breeze-release-management-line-49)">╭─</text><text class="breeze-release-management-r5" x="24.4" y="1215.6" textLength="463.6" clip-path="url(#breeze-release-management-line-49)">&#160;Apache&#160;Airflow&#160;Mypy&#160;release&#160;commands&#160;</text><text class="breeze-release-management-r5" x="488" y="1215.6" textLength="951.6" clip-path="url(#breeze-release-management-line-49)">──── [...]
-</text><text class="breeze-release-management-r5" x="0" y="1240" textLength="12.2" clip-path="url(#breeze-release-management-line-50)">│</text><text class="breeze-release-management-r4" x="24.4" y="1240" textLength="451.4" clip-path="url(#breeze-release-management-line-50)">prepare-mypy-distributions&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-release-management-r1" x="500.2" y="1240" textLength="939.4" clip-path="url(#breeze-release-manage [...]
-</text><text class="breeze-release-management-r5" x="0" y="1264.4" textLength="1464" clip-path="url(#breeze-release-management-line-51)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-release-management-r1" x="1464" y="1264.4" textLength="12.2" clip-path="url(#breeze-release-management-line-51)">
-</text><text class="breeze-release-management-r5" x="0" y="1288.8" textLength="24.4" clip-path="url(#breeze-release-management-line-52)">╭─</text><text class="breeze-release-management-r5" x="24.4" y="1288.8" textLength="292.8" clip-path="url(#breeze-release-management-line-52)">&#160;Other&#160;release&#160;commands&#160;</text><text class="breeze-release-management-r5" x="317.2" y="1288.8" textLength="1122.4" clip-path="url(#breeze-release-management-line-52)">───────────────────────── [...]
-</text><text class="breeze-release-management-r5" x="0" y="1313.2" textLength="12.2" clip-path="url(#breeze-release-management-line-53)">│</text><text class="breeze-release-management-r4" x="24.4" y="1313.2" textLength="292.8" clip-path="url(#breeze-release-management-line-53)">add-back-references&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-release-management-r1" x="341.6" y="1313.2" textLength="1098" clip-path="url(#breeze-release-management-line-53)">Command&#160;to&#160;ad [...]
-</text><text class="breeze-release-management-r5" x="0" y="1337.6" textLength="12.2" clip-path="url(#breeze-release-management-line-54)">│</text><text class="breeze-release-management-r4" x="24.4" y="1337.6" textLength="292.8" clip-path="url(#breeze-release-management-line-54)">prepare-python-client&#160;&#160;&#160;</text><text class="breeze-release-management-r1" x="341.6" y="1337.6" textLength="1098" clip-path="url(#breeze-release-management-line-54)">Prepares&#160;python&#160;client& [...]
-</text><text class="breeze-release-management-r5" x="0" y="1362" textLength="12.2" clip-path="url(#breeze-release-management-line-55)">│</text><text class="breeze-release-management-r4" x="24.4" y="1362" textLength="292.8" clip-path="url(#breeze-release-management-line-55)">publish-docs&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-release-management-r1" x="341.6" y="1362" textLength="1098" clip-path="url(#breeze-release-management-line [...]
-</text><text class="breeze-release-management-r5" x="0" y="1386.4" textLength="12.2" clip-path="url(#breeze-release-management-line-56)">│</text><text class="breeze-release-management-r4" x="24.4" y="1386.4" textLength="292.8" clip-path="url(#breeze-release-management-line-56)">generate-constraints&#160;&#160;&#160;&#160;</text><text class="breeze-release-management-r1" x="341.6" y="1386.4" textLength="1098" clip-path="url(#breeze-release-management-line-56)">Generates&#160;pinned&#160;c [...]
-</text><text class="breeze-release-management-r5" x="0" y="1410.8" textLength="12.2" clip-path="url(#breeze-release-management-line-57)">│</text><text class="breeze-release-management-r4" x="24.4" y="1410.8" textLength="292.8" clip-path="url(#breeze-release-management-line-57)">update-constraints&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-release-management-r1" x="341.6" y="1410.8" textLength="1098" clip-path="url(#breeze-release-management-line-57)">Update&#160;releas [...]
-</text><text class="breeze-release-management-r5" x="0" y="1435.2" textLength="12.2" clip-path="url(#breeze-release-management-line-58)">│</text><text class="breeze-release-management-r4" x="24.4" y="1435.2" textLength="292.8" clip-path="url(#breeze-release-management-line-58)">publish-docs-to-s3&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-release-management-r1" x="341.6" y="1435.2" textLength="1098" clip-path="url(#breeze-release-management-line-58)">Publishes&#160;doc [...]
-</text><text class="breeze-release-management-r5" x="0" y="1459.6" textLength="12.2" clip-path="url(#breeze-release-management-line-59)">│</text><text class="breeze-release-management-r4" x="24.4" y="1459.6" textLength="292.8" clip-path="url(#breeze-release-management-line-59)">publish-schemas-to-s3&#160;&#160;&#160;</text><text class="breeze-release-management-r1" x="341.6" y="1459.6" textLength="1098" clip-path="url(#breeze-release-management-line-59)">Publishes&#160;generated&#160;JSO [...]
-</text><text class="breeze-release-management-r5" x="0" y="1484" textLength="12.2" clip-path="url(#breeze-release-management-line-60)">│</text><text class="breeze-release-management-r4" x="24.4" y="1484" textLength="292.8" clip-path="url(#breeze-release-management-line-60)">verify-rc-by-pmc&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-release-management-r1" x="341.6" y="1484" textLength="1098" clip-path="url(#breeze-release-management-line-60)">[EXPERIMENTAL] [...]
-</text><text class="breeze-release-management-r5" x="0" y="1508.4" textLength="12.2" clip-path="url(#breeze-release-management-line-61)">│</text><text class="breeze-release-management-r4" x="24.4" y="1508.4" textLength="292.8" clip-path="url(#breeze-release-management-line-61)">check-release-files&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-release-management-r1" x="341.6" y="1508.4" textLength="1098" clip-path="url(#breeze-release-management-line-61)">Verify&#160;that&#160;a [...]
-</text><text class="breeze-release-management-r5" x="0" y="1532.8" textLength="1464" clip-path="url(#breeze-release-management-line-62)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-release-management-r1" x="1464" y="1532.8" textLength="12.2" clip-path="url(#breeze-release-management-line-62)">
-</text><text class="breeze-release-management-r5" x="0" y="1557.2" textLength="24.4" clip-path="url(#breeze-release-management-line-63)">╭─</text><text class="breeze-release-management-r5" x="24.4" y="1557.2" textLength="122" clip-path="url(#breeze-release-management-line-63)">&#160;Commands&#160;</text><text class="breeze-release-management-r5" x="146.4" y="1557.2" textLength="1293.2" clip-path="url(#breeze-release-management-line-63)">─────────────────────────────────────────────────── [...]
-</text><text class="breeze-release-management-r5" x="0" y="1581.6" textLength="12.2" clip-path="url(#breeze-release-management-line-64)">│</text><text class="breeze-release-management-r4" x="24.4" y="1581.6" textLength="305" clip-path="url(#breeze-release-management-line-64)">constraints-version-check</text><text class="breeze-release-management-r1" x="353.8" y="1581.6" textLength="1085.8" clip-path="url(#breeze-release-management-line-64)">Check&#160;constraints&#160;against&#160;releas [...]
-</text><text class="breeze-release-management-r5" x="0" y="1606" textLength="12.2" clip-path="url(#breeze-release-management-line-65)">│</text><text class="breeze-release-management-r4" x="24.4" y="1606" textLength="305" clip-path="url(#breeze-release-management-line-65)">merge-prod-images&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-release-management-r1" x="353.8" y="1606" textLength="1085.8" clip-path="url(#breeze-release-management-line-65)">Merge&#160;pr [...]
-</text><text class="breeze-release-management-r5" x="0" y="1630.4" textLength="1464" clip-path="url(#breeze-release-management-line-66)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-release-management-r1" x="1464" y="1630.4" textLength="12.2" clip-path="url(#breeze-release-management-line-66)">
+</text><text class="breeze-release-management-r5" x="0" y="312.8" textLength="12.2" clip-path="url(#breeze-release-management-line-12)">│</text><text class="breeze-release-management-r4" x="24.4" y="312.8" textLength="414.8" clip-path="url(#breeze-release-management-line-12)">start-beta-process&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-release-management-r1" x="463.6" y="312.8" textLength="976" clip-path="url [...]
+</text><text class="breeze-release-management-r5" x="0" y="337.2" textLength="12.2" clip-path="url(#breeze-release-management-line-13)">│</text><text class="breeze-release-management-r4" x="24.4" y="337.2" textLength="414.8" clip-path="url(#breeze-release-management-line-13)">start-rc-process&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-release-management-r1" x="463.6" y="337.2" textLength="976" clip [...]
+</text><text class="breeze-release-management-r5" x="0" y="361.6" textLength="12.2" clip-path="url(#breeze-release-management-line-14)">│</text><text class="breeze-release-management-r4" x="24.4" y="361.6" textLength="414.8" clip-path="url(#breeze-release-management-line-14)">start-release&#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-r1" x="463.6" y="361.6" textLe [...]
+</text><text class="breeze-release-management-r5" x="0" y="386" textLength="12.2" clip-path="url(#breeze-release-management-line-15)">│</text><text class="breeze-release-management-r4" x="24.4" y="386" textLength="414.8" clip-path="url(#breeze-release-management-line-15)">release-prod-images&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-release-management-r1" x="463.6" y="386" textLength="976" clip-path="url(#breeze-re [...]
+</text><text class="breeze-release-management-r5" x="0" y="410.4" textLength="12.2" clip-path="url(#breeze-release-management-line-16)">│</text><text class="breeze-release-management-r4" x="24.4" y="410.4" textLength="414.8" clip-path="url(#breeze-release-management-line-16)">generate-issue-content-core&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-release-management-r1" x="463.6" y="410.4" textLength="976" clip-path="url(#breeze-release-management-line-16)">Generat [...]
+</text><text class="breeze-release-management-r5" x="0" y="434.8" textLength="1464" clip-path="url(#breeze-release-management-line-17)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-release-management-r1" x="1464" y="434.8" textLength="12.2" clip-path="url(#breeze-release-management-line-17)">
+</text><text class="breeze-release-management-r5" x="0" y="459.2" textLength="24.4" clip-path="url(#breeze-release-management-line-18)">╭─</text><text class="breeze-release-management-r5" x="24.4" y="459.2" textLength="280.6" clip-path="url(#breeze-release-management-line-18)">&#160;Helm&#160;release&#160;commands&#160;</text><text class="breeze-release-management-r5" x="305" y="459.2" textLength="1134.6" clip-path="url(#breeze-release-management-line-18)">─────────────────────────────── [...]
+</text><text class="breeze-release-management-r5" x="0" y="483.6" textLength="12.2" clip-path="url(#breeze-release-management-line-19)">│</text><text class="breeze-release-management-r4" x="24.4" y="483.6" textLength="500.2" clip-path="url(#breeze-release-management-line-19)">prepare-helm-chart-tarball&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-release-management-r1" x="549" y="483.6" textLength="890.6" clip-path="u [...]
+</text><text class="breeze-release-management-r5" x="0" y="508" textLength="12.2" clip-path="url(#breeze-release-management-line-20)">│</text><text class="breeze-release-management-r4" x="24.4" y="508" textLength="500.2" clip-path="url(#breeze-release-management-line-20)">prepare-helm-chart-package&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-release-management-r1" x="549" y="508" textLength="890.6" clip-path="url(#br [...]
+</text><text class="breeze-release-management-r5" x="0" y="532.4" textLength="12.2" clip-path="url(#breeze-release-management-line-21)">│</text><text class="breeze-release-management-r4" x="24.4" y="532.4" textLength="500.2" clip-path="url(#breeze-release-management-line-21)">generate-issue-content-helm-chart&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-release-management-r1" x="549" y="532.4" textLength="890.6" clip-path="url(#breeze-release-management-line- [...]
+</text><text class="breeze-release-management-r5" x="0" y="556.8" textLength="1464" clip-path="url(#breeze-release-management-line-22)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-release-management-r1" x="1464" y="556.8" textLength="12.2" clip-path="url(#breeze-release-management-line-22)">
+</text><text class="breeze-release-management-r5" x="0" y="581.2" textLength="24.4" clip-path="url(#breeze-release-management-line-23)">╭─</text><text class="breeze-release-management-r5" x="24.4" y="581.2" textLength="341.6" clip-path="url(#breeze-release-management-line-23)">&#160;Providers&#160;release&#160;commands&#160;</text><text class="breeze-release-management-r5" x="366" y="581.2" textLength="1073.6" clip-path="url(#breeze-release-management-line-23)">────────────────────────── [...]
+</text><text class="breeze-release-management-r5" x="0" y="605.6" textLength="12.2" clip-path="url(#breeze-release-management-line-24)">│</text><text class="breeze-release-management-r4" x="24.4" y="605.6" textLength="390.4" clip-path="url(#breeze-release-management-line-24)">prepare-provider-documentation&#160;&#160;</text><text class="breeze-release-management-r1" x="439.2" y="605.6" textLength="1000.4" clip-path="url(#breeze-release-management-line-24)">Prepare&#160;CHANGELOG,&#160;RE [...]
+</text><text class="breeze-release-management-r5" x="0" y="630" textLength="12.2" clip-path="url(#breeze-release-management-line-25)">│</text><text class="breeze-release-management-r4" x="24.4" y="630" textLength="390.4" clip-path="url(#breeze-release-management-line-25)">classify-provider-changes&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-release-management-r1" x="439.2" y="630" textLength="1000.4" clip-path="url(#breeze-release-management-line-25)">Classify&#16 [...]
+</text><text class="breeze-release-management-r5" x="0" y="654.4" textLength="12.2" clip-path="url(#breeze-release-management-line-26)">│</text><text class="breeze-release-management-r1" x="439.2" y="654.4" textLength="1000.4" clip-path="url(#breeze-release-management-line-26)">rules,&#160;flagging&#160;ambiguous&#160;commits&#160;as&#160;&#x27;needs_llm&#x27;&#160;for&#160;an&#160;agent/skill&#160;to&#160;assess.&#160;&#160;&#160;&#160;</text><text class="breeze-release-management-r5" x [...]
+</text><text class="breeze-release-management-r5" x="0" y="678.8" textLength="12.2" clip-path="url(#breeze-release-management-line-27)">│</text><text class="breeze-release-management-r1" x="439.2" y="678.8" textLength="707.6" clip-path="url(#breeze-release-management-line-27)">Outputs&#160;JSON&#160;-&#160;a&#160;deterministic&#160;alternative&#160;to&#160;the&#160;random&#160;&#x27;</text><text class="breeze-release-management-r4" x="1146.8" y="678.8" textLength="207.4" clip-path="url(# [...]
+</text><text class="breeze-release-management-r5" x="0" y="703.2" textLength="12.2" clip-path="url(#breeze-release-management-line-28)">│</text><text class="breeze-release-management-r1" x="439.2" y="703.2" textLength="1000.4" clip-path="url(#breeze-release-management-line-28)">used&#160;purely&#160;for&#160;discovery.&#160;&#160;&#160;&#160;&#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-release-management-r5" x="0" y="727.6" textLength="12.2" clip-path="url(#breeze-release-management-line-29)">│</text><text class="breeze-release-management-r4" x="24.4" y="727.6" textLength="390.4" clip-path="url(#breeze-release-management-line-29)">update-providers-next-version&#160;&#160;&#160;</text><text class="breeze-release-management-r1" x="439.2" y="727.6" textLength="1000.4" clip-path="url(#breeze-release-management-line-29)">Update&#160;provider&#160; [...]
+</text><text class="breeze-release-management-r5" x="0" y="752" textLength="12.2" clip-path="url(#breeze-release-management-line-30)">│</text><text class="breeze-release-management-r4" x="24.4" y="752" textLength="390.4" clip-path="url(#breeze-release-management-line-30)">prepare-provider-distributions&#160;&#160;</text><text class="breeze-release-management-r1" x="439.2" y="752" textLength="1000.4" clip-path="url(#breeze-release-management-line-30)">Prepare&#160;sdist/whl&#160;distribut [...]
+</text><text class="breeze-release-management-r5" x="0" y="776.4" textLength="12.2" clip-path="url(#breeze-release-management-line-31)">│</text><text class="breeze-release-management-r1" x="439.2" y="776.4" textLength="268.4" clip-path="url(#breeze-release-management-line-31)">wiped&#160;with&#160;`git&#160;clean&#160;</text><text class="breeze-release-management-r6" x="707.6" y="776.4" textLength="48.8" clip-path="url(#breeze-release-management-line-31)">-fdx</text><text class="breeze-r [...]
+</text><text class="breeze-release-management-r5" x="0" y="800.8" textLength="12.2" clip-path="url(#breeze-release-management-line-32)">│</text><text class="breeze-release-management-r1" x="439.2" y="800.8" textLength="1000.4" clip-path="url(#breeze-release-management-line-32)">keep&#160;in-tree&#160;generated&#160;files&#160;out&#160;of&#160;the&#160;artifact.&#160;See&#160;dev/breeze&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&# [...]
+</text><text class="breeze-release-management-r5" x="0" y="825.2" textLength="12.2" clip-path="url(#breeze-release-management-line-33)">│</text><text class="breeze-release-management-r1" x="439.2" y="825.2" textLength="1000.4" clip-path="url(#breeze-release-management-line-33)">release-management&#160;docs.&#160;&#160;&#160;&#160;&#160;&#160;&#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-release-management-r5" x="0" y="849.6" textLength="12.2" clip-path="url(#breeze-release-management-line-34)">│</text><text class="breeze-release-management-r4" x="24.4" y="849.6" textLength="390.4" clip-path="url(#breeze-release-management-line-34)">install-provider-distributions&#160;&#160;</text><text class="breeze-release-management-r1" x="439.2" y="849.6" textLength="1000.4" clip-path="url(#breeze-release-management-line-34)">Installs&#160;provider&#160;dis [...]
+</text><text class="breeze-release-management-r5" x="0" y="874" textLength="12.2" clip-path="url(#breeze-release-management-line-35)">│</text><text class="breeze-release-management-r4" x="24.4" y="874" textLength="390.4" clip-path="url(#breeze-release-management-line-35)">verify-provider-distributions&#160;&#160;&#160;</text><text class="breeze-release-management-r1" x="439.2" y="874" textLength="1000.4" clip-path="url(#breeze-release-management-line-35)">Verifies&#160;if&#160;all&#160;p [...]
+</text><text class="breeze-release-management-r5" x="0" y="898.4" textLength="12.2" clip-path="url(#breeze-release-management-line-36)">│</text><text class="breeze-release-management-r4" x="24.4" y="898.4" textLength="390.4" clip-path="url(#breeze-release-management-line-36)">generate-providers-metadata&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-release-management-r1" x="439.2" y="898.4" textLength="1000.4" clip-path="url(#breeze-release-management-line-36)">Generates&#160;m [...]
+</text><text class="breeze-release-management-r5" x="0" y="922.8" textLength="12.2" clip-path="url(#breeze-release-management-line-37)">│</text><text class="breeze-release-management-r4" x="24.4" y="922.8" textLength="390.4" clip-path="url(#breeze-release-management-line-37)">generate-issue-content-providers</text><text class="breeze-release-management-r1" x="439.2" y="922.8" textLength="1000.4" clip-path="url(#breeze-release-management-line-37)">Generates&#160;content&#160;for&#160;issu [...]
+</text><text class="breeze-release-management-r5" x="0" y="947.2" textLength="12.2" clip-path="url(#breeze-release-management-line-38)">│</text><text class="breeze-release-management-r4" x="24.4" y="947.2" textLength="390.4" clip-path="url(#breeze-release-management-line-38)">clean-old-provider-artifacts&#160;&#160;&#160;&#160;</text><text class="breeze-release-management-r1" x="439.2" y="947.2" textLength="1000.4" clip-path="url(#breeze-release-management-line-38)">Cleans&#160;the&#160; [...]
+</text><text class="breeze-release-management-r5" x="0" y="971.6" textLength="12.2" clip-path="url(#breeze-release-management-line-39)">│</text><text class="breeze-release-management-r4" x="24.4" y="971.6" textLength="390.4" clip-path="url(#breeze-release-management-line-39)">tag-providers&#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-r1" x="439.2" y="971.6" textLength="1000.4 [...]
+</text><text class="breeze-release-management-r5" x="0" y="996" textLength="1464" clip-path="url(#breeze-release-management-line-40)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-release-management-r1" x="1464" y="996" textLength="12.2" clip-path="url(#breeze-release-management-line-40)">
+</text><text class="breeze-release-management-r5" x="0" y="1020.4" textLength="24.4" clip-path="url(#breeze-release-management-line-41)">╭─</text><text class="breeze-release-management-r5" x="24.4" y="1020.4" textLength="427" clip-path="url(#breeze-release-management-line-41)">&#160;Airflow&#160;Task&#160;SDK&#160;release&#160;commands&#160;</text><text class="breeze-release-management-r5" x="451.4" y="1020.4" textLength="988.2" clip-path="url(#breeze-release-management-line-41)">─────── [...]
+</text><text class="breeze-release-management-r5" x="0" y="1044.8" textLength="12.2" clip-path="url(#breeze-release-management-line-42)">│</text><text class="breeze-release-management-r4" x="24.4" y="1044.8" textLength="512.4" clip-path="url(#breeze-release-management-line-42)">prepare-task-sdk-distributions&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-release-management-r1" x="561.2" y="1044.8" textLength="878.4" clip-path="url(#breez [...]
+</text><text class="breeze-release-management-r5" x="0" y="1069.2" textLength="1464" clip-path="url(#breeze-release-management-line-43)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-release-management-r1" x="1464" y="1069.2" textLength="12.2" clip-path="url(#breeze-release-management-line-43)">
+</text><text class="breeze-release-management-r5" x="0" y="1093.6" textLength="24.4" clip-path="url(#breeze-release-management-line-44)">╭─</text><text class="breeze-release-management-r5" x="24.4" y="1093.6" textLength="353.8" clip-path="url(#breeze-release-management-line-44)">&#160;airflowctl&#160;release&#160;commands&#160;</text><text class="breeze-release-management-r5" x="378.2" y="1093.6" textLength="1061.4" clip-path="url(#breeze-release-management-line-44)">──────────────────── [...]
+</text><text class="breeze-release-management-r5" x="0" y="1118" textLength="12.2" clip-path="url(#breeze-release-management-line-45)">│</text><text class="breeze-release-management-r4" x="24.4" y="1118" textLength="414.8" clip-path="url(#breeze-release-management-line-45)">prepare-airflow-ctl-distributions&#160;</text><text class="breeze-release-management-r1" x="463.6" y="1118" textLength="976" clip-path="url(#breeze-release-management-line-45)">Prepare&#160;sdist/whl&#160;distribution [...]
+</text><text class="breeze-release-management-r5" x="0" y="1142.4" textLength="12.2" clip-path="url(#breeze-release-management-line-46)">│</text><text class="breeze-release-management-r4" x="24.4" y="1142.4" textLength="414.8" clip-path="url(#breeze-release-management-line-46)">generate-issue-content-airflow-ctl</text><text class="breeze-release-management-r1" x="463.6" y="1142.4" textLength="976" clip-path="url(#breeze-release-management-line-46)">Generates&#160;content&#160;for&#160;is [...]
+</text><text class="breeze-release-management-r5" x="0" y="1166.8" textLength="12.2" clip-path="url(#breeze-release-management-line-47)">│</text><text class="breeze-release-management-r4" x="24.4" y="1166.8" textLength="414.8" clip-path="url(#breeze-release-management-line-47)">generate-airflowctl-changelog&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-release-management-r1" x="463.6" y="1166.8" textLength="976" clip-path="url(#breeze-release-management-line-47)">Generates&#160 [...]
+</text><text class="breeze-release-management-r5" x="0" y="1191.2" textLength="12.2" clip-path="url(#breeze-release-management-line-48)">│</text><text class="breeze-release-management-r1" x="463.6" y="1191.2" textLength="976" clip-path="url(#breeze-release-management-line-48)">RELEASE_NOTES.rst.&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#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-release-management-r5" x="0" y="1215.6" textLength="1464" clip-path="url(#breeze-release-management-line-49)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-release-management-r1" x="1464" y="1215.6" textLength="12.2" clip-path="url(#breeze-release-management-line-49)">
+</text><text class="breeze-release-management-r5" x="0" y="1240" textLength="24.4" clip-path="url(#breeze-release-management-line-50)">╭─</text><text class="breeze-release-management-r5" x="24.4" y="1240" textLength="463.6" clip-path="url(#breeze-release-management-line-50)">&#160;Apache&#160;Airflow&#160;Mypy&#160;release&#160;commands&#160;</text><text class="breeze-release-management-r5" x="488" y="1240" textLength="951.6" clip-path="url(#breeze-release-management-line-50)">────────── [...]
+</text><text class="breeze-release-management-r5" x="0" y="1264.4" textLength="12.2" clip-path="url(#breeze-release-management-line-51)">│</text><text class="breeze-release-management-r4" x="24.4" y="1264.4" textLength="451.4" clip-path="url(#breeze-release-management-line-51)">prepare-mypy-distributions&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-release-management-r1" x="500.2" y="1264.4" textLength="939.4" clip-path="url(#breeze-release- [...]
+</text><text class="breeze-release-management-r5" x="0" y="1288.8" textLength="1464" clip-path="url(#breeze-release-management-line-52)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-release-management-r1" x="1464" y="1288.8" textLength="12.2" clip-path="url(#breeze-release-management-line-52)">
+</text><text class="breeze-release-management-r5" x="0" y="1313.2" textLength="24.4" clip-path="url(#breeze-release-management-line-53)">╭─</text><text class="breeze-release-management-r5" x="24.4" y="1313.2" textLength="292.8" clip-path="url(#breeze-release-management-line-53)">&#160;Other&#160;release&#160;commands&#160;</text><text class="breeze-release-management-r5" x="317.2" y="1313.2" textLength="1122.4" clip-path="url(#breeze-release-management-line-53)">───────────────────────── [...]
+</text><text class="breeze-release-management-r5" x="0" y="1337.6" textLength="12.2" clip-path="url(#breeze-release-management-line-54)">│</text><text class="breeze-release-management-r4" x="24.4" y="1337.6" textLength="292.8" clip-path="url(#breeze-release-management-line-54)">add-back-references&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-release-management-r1" x="341.6" y="1337.6" textLength="1098" clip-path="url(#breeze-release-management-line-54)">Command&#160;to&#160;ad [...]
+</text><text class="breeze-release-management-r5" x="0" y="1362" textLength="12.2" clip-path="url(#breeze-release-management-line-55)">│</text><text class="breeze-release-management-r4" x="24.4" y="1362" textLength="292.8" clip-path="url(#breeze-release-management-line-55)">prepare-python-client&#160;&#160;&#160;</text><text class="breeze-release-management-r1" x="341.6" y="1362" textLength="1098" clip-path="url(#breeze-release-management-line-55)">Prepares&#160;python&#160;client&#160;p [...]
+</text><text class="breeze-release-management-r5" x="0" y="1386.4" textLength="12.2" clip-path="url(#breeze-release-management-line-56)">│</text><text class="breeze-release-management-r4" x="24.4" y="1386.4" textLength="292.8" clip-path="url(#breeze-release-management-line-56)">publish-docs&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-release-management-r1" x="341.6" y="1386.4" textLength="1098" clip-path="url(#breeze-release-managemen [...]
+</text><text class="breeze-release-management-r5" x="0" y="1410.8" textLength="12.2" clip-path="url(#breeze-release-management-line-57)">│</text><text class="breeze-release-management-r4" x="24.4" y="1410.8" textLength="292.8" clip-path="url(#breeze-release-management-line-57)">generate-constraints&#160;&#160;&#160;&#160;</text><text class="breeze-release-management-r1" x="341.6" y="1410.8" textLength="1098" clip-path="url(#breeze-release-management-line-57)">Generates&#160;pinned&#160;c [...]
+</text><text class="breeze-release-management-r5" x="0" y="1435.2" textLength="12.2" clip-path="url(#breeze-release-management-line-58)">│</text><text class="breeze-release-management-r4" x="24.4" y="1435.2" textLength="292.8" clip-path="url(#breeze-release-management-line-58)">update-constraints&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-release-management-r1" x="341.6" y="1435.2" textLength="1098" clip-path="url(#breeze-release-management-line-58)">Update&#160;releas [...]
+</text><text class="breeze-release-management-r5" x="0" y="1459.6" textLength="12.2" clip-path="url(#breeze-release-management-line-59)">│</text><text class="breeze-release-management-r4" x="24.4" y="1459.6" textLength="292.8" clip-path="url(#breeze-release-management-line-59)">publish-docs-to-s3&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-release-management-r1" x="341.6" y="1459.6" textLength="1098" clip-path="url(#breeze-release-management-line-59)">Publishes&#160;doc [...]
+</text><text class="breeze-release-management-r5" x="0" y="1484" textLength="12.2" clip-path="url(#breeze-release-management-line-60)">│</text><text class="breeze-release-management-r4" x="24.4" y="1484" textLength="292.8" clip-path="url(#breeze-release-management-line-60)">publish-schemas-to-s3&#160;&#160;&#160;</text><text class="breeze-release-management-r1" x="341.6" y="1484" textLength="1098" clip-path="url(#breeze-release-management-line-60)">Publishes&#160;generated&#160;JSON&#160 [...]
+</text><text class="breeze-release-management-r5" x="0" y="1508.4" textLength="12.2" clip-path="url(#breeze-release-management-line-61)">│</text><text class="breeze-release-management-r4" x="24.4" y="1508.4" textLength="292.8" clip-path="url(#breeze-release-management-line-61)">verify-rc-by-pmc&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-release-management-r1" x="341.6" y="1508.4" textLength="1098" clip-path="url(#breeze-release-management-line-61)">[EXPERIM [...]
+</text><text class="breeze-release-management-r5" x="0" y="1532.8" textLength="12.2" clip-path="url(#breeze-release-management-line-62)">│</text><text class="breeze-release-management-r4" x="24.4" y="1532.8" textLength="292.8" clip-path="url(#breeze-release-management-line-62)">check-release-files&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-release-management-r1" x="341.6" y="1532.8" textLength="1098" clip-path="url(#breeze-release-management-line-62)">Verify&#160;that&#160;a [...]
+</text><text class="breeze-release-management-r5" x="0" y="1557.2" textLength="1464" clip-path="url(#breeze-release-management-line-63)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-release-management-r1" x="1464" y="1557.2" textLength="12.2" clip-path="url(#breeze-release-management-line-63)">
+</text><text class="breeze-release-management-r5" x="0" y="1581.6" textLength="24.4" clip-path="url(#breeze-release-management-line-64)">╭─</text><text class="breeze-release-management-r5" x="24.4" y="1581.6" textLength="122" clip-path="url(#breeze-release-management-line-64)">&#160;Commands&#160;</text><text class="breeze-release-management-r5" x="146.4" y="1581.6" textLength="1293.2" clip-path="url(#breeze-release-management-line-64)">─────────────────────────────────────────────────── [...]
+</text><text class="breeze-release-management-r5" x="0" y="1606" textLength="12.2" clip-path="url(#breeze-release-management-line-65)">│</text><text class="breeze-release-management-r4" x="24.4" y="1606" textLength="305" clip-path="url(#breeze-release-management-line-65)">constraints-version-check</text><text class="breeze-release-management-r1" x="353.8" y="1606" textLength="1085.8" clip-path="url(#breeze-release-management-line-65)">Check&#160;constraints&#160;against&#160;released&#16 [...]
+</text><text class="breeze-release-management-r5" x="0" y="1630.4" textLength="12.2" clip-path="url(#breeze-release-management-line-66)">│</text><text class="breeze-release-management-r4" x="24.4" y="1630.4" textLength="305" clip-path="url(#breeze-release-management-line-66)">merge-prod-images&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-release-management-r1" x="353.8" y="1630.4" textLength="1085.8" clip-path="url(#breeze-release-management-line-66)">Merge&# [...]
+</text><text class="breeze-release-management-r5" x="0" y="1654.8" textLength="1464" clip-path="url(#breeze-release-management-line-67)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-release-management-r1" x="1464" y="1654.8" textLength="12.2" clip-path="url(#breeze-release-management-line-67)">
 </text>
     </g>
     </g>
diff --git a/dev/breeze/doc/images/output_release-management.txt b/dev/breeze/doc/images/output_release-management.txt
index bed6316d48f..1a2955706e0 100644
--- a/dev/breeze/doc/images/output_release-management.txt
+++ b/dev/breeze/doc/images/output_release-management.txt
@@ -1 +1 @@
-016eb82c476bc36ac2bcb754d3e87919
+186f43f8d9e9e522daa2e16d537a46d3
diff --git a/dev/breeze/doc/images/output_release-management_start-beta-process.svg b/dev/breeze/doc/images/output_release-management_start-beta-process.svg
new file mode 100644
index 00000000000..769f330a19c
--- /dev/null
+++ b/dev/breeze/doc/images/output_release-management_start-beta-process.svg
@@ -0,0 +1,138 @@
+<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>
+
+    @font-face {
+        font-family: "Fira Code";
+        src: local("FiraCode-Regular"),
+                url("https://cdnjs.cloudflare.com/ajax/libs/firacode/6.2.0/woff2/FiraCode-Regular.woff2") format("woff2"),
+                url("https://cdnjs.cloudflare.com/ajax/libs/firacode/6.2.0/woff/FiraCode-Regular.woff") format("woff");
+        font-style: normal;
+        font-weight: 400;
+    }
+    @font-face {
+        font-family: "Fira Code";
+        src: local("FiraCode-Bold"),
+                url("https://cdnjs.cloudflare.com/ajax/libs/firacode/6.2.0/woff2/FiraCode-Bold.woff2") format("woff2"),
+                url("https://cdnjs.cloudflare.com/ajax/libs/firacode/6.2.0/woff/FiraCode-Bold.woff") format("woff");
+        font-style: bold;
+        font-weight: 700;
+    }
+
+    .breeze-release-management-start-beta-process-matrix {
+        font-family: Fira Code, monospace;
+        font-size: 20px;
+        line-height: 24.4px;
+        font-variant-east-asian: full-width;
+    }
+
+    .breeze-release-management-start-beta-process-title {
+        font-size: 18px;
+        font-weight: bold;
+        font-family: arial;
+    }
+
+    .breeze-release-management-start-beta-process-r1 { fill: #c5c8c6 }
+.breeze-release-management-start-beta-process-r2 { fill: #d0b344 }
+.breeze-release-management-start-beta-process-r3 { fill: #c5c8c6;font-weight: bold }
+.breeze-release-management-start-beta-process-r4 { fill: #68a0b3;font-weight: bold }
+.breeze-release-management-start-beta-process-r5 { fill: #868887 }
+.breeze-release-management-start-beta-process-r6 { fill: #cc555a }
+.breeze-release-management-start-beta-process-r7 { fill: #8a4346 }
+.breeze-release-management-start-beta-process-r8 { fill: #8d7b39 }
+.breeze-release-management-start-beta-process-r9 { fill: #98a84b;font-weight: bold }
+    </style>
+
+    <defs>
+    <clipPath id="breeze-release-management-start-beta-process-clip-terminal">
+      <rect x="0" y="0" width="1463.0" height="462.59999999999997" />
+    </clipPath>
+    <clipPath id="breeze-release-management-start-beta-process-line-0">
+    <rect x="0" y="1.5" width="1464" height="24.65"/>
+            </clipPath>
+<clipPath id="breeze-release-management-start-beta-process-line-1">
+    <rect x="0" y="25.9" width="1464" height="24.65"/>
+            </clipPath>
+<clipPath id="breeze-release-management-start-beta-process-line-2">
+    <rect x="0" y="50.3" width="1464" height="24.65"/>
+            </clipPath>
+<clipPath id="breeze-release-management-start-beta-process-line-3">
+    <rect x="0" y="74.7" width="1464" height="24.65"/>
+            </clipPath>
+<clipPath id="breeze-release-management-start-beta-process-line-4">
+    <rect x="0" y="99.1" width="1464" height="24.65"/>
+            </clipPath>
+<clipPath id="breeze-release-management-start-beta-process-line-5">
+    <rect x="0" y="123.5" width="1464" height="24.65"/>
+            </clipPath>
+<clipPath id="breeze-release-management-start-beta-process-line-6">
+    <rect x="0" y="147.9" width="1464" height="24.65"/>
+            </clipPath>
+<clipPath id="breeze-release-management-start-beta-process-line-7">
+    <rect x="0" y="172.3" width="1464" height="24.65"/>
+            </clipPath>
+<clipPath id="breeze-release-management-start-beta-process-line-8">
+    <rect x="0" y="196.7" width="1464" height="24.65"/>
+            </clipPath>
+<clipPath id="breeze-release-management-start-beta-process-line-9">
+    <rect x="0" y="221.1" width="1464" height="24.65"/>
+            </clipPath>
+<clipPath id="breeze-release-management-start-beta-process-line-10">
+    <rect x="0" y="245.5" width="1464" height="24.65"/>
+            </clipPath>
+<clipPath id="breeze-release-management-start-beta-process-line-11">
+    <rect x="0" y="269.9" width="1464" height="24.65"/>
+            </clipPath>
+<clipPath id="breeze-release-management-start-beta-process-line-12">
+    <rect x="0" y="294.3" width="1464" height="24.65"/>
+            </clipPath>
+<clipPath id="breeze-release-management-start-beta-process-line-13">
+    <rect x="0" y="318.7" width="1464" height="24.65"/>
+            </clipPath>
+<clipPath id="breeze-release-management-start-beta-process-line-14">
+    <rect x="0" y="343.1" width="1464" height="24.65"/>
+            </clipPath>
+<clipPath id="breeze-release-management-start-beta-process-line-15">
+    <rect x="0" y="367.5" width="1464" height="24.65"/>
+            </clipPath>
+<clipPath id="breeze-release-management-start-beta-process-line-16">
+    <rect x="0" y="391.9" width="1464" height="24.65"/>
+            </clipPath>
+<clipPath id="breeze-release-management-start-beta-process-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="511.6" rx="8"/><text class="breeze-release-management-start-beta-process-title" fill="#c5c8c6" text-anchor="middle" x="740" y="27">Command:&#160;release-management&#160;start-beta-process</text>
+            <g transform="translate(26,22)">
+            <circle cx="0" cy="0" r="7" fill="#ff5f57"/>
+            <circle cx="22" cy="0" r="7" fill="#febc2e"/>
+            <circle cx="44" cy="0" r="7" fill="#28c840"/>
+            </g>
+        
+    <g transform="translate(9, 41)" clip-path="url(#breeze-release-management-start-beta-process-clip-terminal)">
+    
+    <g class="breeze-release-management-start-beta-process-matrix">
+    <text class="breeze-release-management-start-beta-process-r1" x="1464" y="20" textLength="12.2" clip-path="url(#breeze-release-management-start-beta-process-line-0)">
+</text><text class="breeze-release-management-start-beta-process-r2" x="12.2" y="44.4" textLength="73.2" clip-path="url(#breeze-release-management-start-beta-process-line-1)">Usage:</text><text class="breeze-release-management-start-beta-process-r3" x="97.6" y="44.4" textLength="536.8" clip-path="url(#breeze-release-management-start-beta-process-line-1)">breeze&#160;release-management&#160;start-beta-process</text><text class="breeze-release-management-start-beta-process-r1" x="646.6" y= [...]
+</text><text class="breeze-release-management-start-beta-process-r1" x="1464" y="68.8" textLength="12.2" clip-path="url(#breeze-release-management-start-beta-process-line-2)">
+</text><text class="breeze-release-management-start-beta-process-r1" x="12.2" y="93.2" textLength="671" clip-path="url(#breeze-release-management-start-beta-process-line-3)">Start&#160;the&#160;process&#160;for&#160;releasing&#160;a&#160;new&#160;beta&#160;pre-release.</text><text class="breeze-release-management-start-beta-process-r1" x="1464" y="93.2" textLength="12.2" clip-path="url(#breeze-release-management-start-beta-process-line-3)">
+</text><text class="breeze-release-management-start-beta-process-r1" x="1464" y="117.6" textLength="12.2" clip-path="url(#breeze-release-management-start-beta-process-line-4)">
+</text><text class="breeze-release-management-start-beta-process-r5" x="0" y="142" textLength="24.4" clip-path="url(#breeze-release-management-start-beta-process-line-5)">╭─</text><text class="breeze-release-management-start-beta-process-r5" x="24.4" y="142" textLength="317.2" clip-path="url(#breeze-release-management-start-beta-process-line-5)">&#160;Start&#160;beta&#160;process&#160;flags&#160;</text><text class="breeze-release-management-start-beta-process-r5" x="341.6" y="142" textLe [...]
+</text><text class="breeze-release-management-start-beta-process-r5" x="0" y="166.4" textLength="12.2" clip-path="url(#breeze-release-management-start-beta-process-line-6)">│</text><text class="breeze-release-management-start-beta-process-r6" x="24.4" y="166.4" textLength="12.2" clip-path="url(#breeze-release-management-start-beta-process-line-6)">*</text><text class="breeze-release-management-start-beta-process-r4" x="61" y="166.4" textLength="219.6" clip-path="url(#breeze-release-manag [...]
+</text><text class="breeze-release-management-start-beta-process-r5" x="0" y="190.8" textLength="12.2" clip-path="url(#breeze-release-management-start-beta-process-line-7)">│</text><text class="breeze-release-management-start-beta-process-r6" x="24.4" y="190.8" textLength="12.2" clip-path="url(#breeze-release-management-start-beta-process-line-7)">*</text><text class="breeze-release-management-start-beta-process-r4" x="61" y="190.8" textLength="219.6" clip-path="url(#breeze-release-manag [...]
+</text><text class="breeze-release-management-start-beta-process-r5" x="0" y="215.2" textLength="12.2" clip-path="url(#breeze-release-management-start-beta-process-line-8)">│</text><text class="breeze-release-management-start-beta-process-r4" x="61" y="215.2" textLength="219.6" clip-path="url(#breeze-release-management-start-beta-process-line-8)">--remote-name&#160;&#160;&#160;&#160;&#160;</text><text class="breeze-release-management-start-beta-process-r1" x="305" y="215.2" textLength="1 [...]
+</text><text class="breeze-release-management-start-beta-process-r5" x="0" y="239.6" textLength="12.2" clip-path="url(#breeze-release-management-start-beta-process-line-9)">│</text><text class="breeze-release-management-start-beta-process-r1" x="305" y="239.6" textLength="1134.6" clip-path="url(#breeze-release-management-start-beta-process-line-9)">(default:&#160;&#x27;upstream&#x27;&#160;per&#160;the&#160;standard&#160;remote&#160;naming&#160;convention&#160;—&#160;see&#160;&#160;&#160; [...]
+</text><text class="breeze-release-management-start-beta-process-r5" x="0" y="264" textLength="12.2" clip-path="url(#breeze-release-management-start-beta-process-line-10)">│</text><text class="breeze-release-management-start-beta-process-r1" x="305" y="264" textLength="1134.6" clip-path="url(#breeze-release-management-start-beta-process-line-10)">contributing-docs/10_working_with_git.rst).&#160;Override&#160;if&#160;your&#160;release&#160;clone&#160;uses&#160;a&#160;different&#160;&#160; [...]
+</text><text class="breeze-release-management-start-beta-process-r5" x="0" y="288.4" textLength="12.2" clip-path="url(#breeze-release-management-start-beta-process-line-11)">│</text><text class="breeze-release-management-start-beta-process-r1" x="305" y="288.4" textLength="829.6" clip-path="url(#breeze-release-management-start-beta-process-line-11)">name&#160;(for&#160;example&#160;&#x27;origin&#x27;&#160;when&#160;you&#160;clone&#160;apache/airflow&#160;directly).&#160;</text><text clas [...]
+</text><text class="breeze-release-management-start-beta-process-r5" x="0" y="312.8" textLength="1464" clip-path="url(#breeze-release-management-start-beta-process-line-12)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-release-management-start-beta-process-r1" x="1464" y="312.8" textLength="12.2" clip-path="url(#breeze-release-management-start-beta-process-line-12)">
+</text><text class="breeze-release-management-start-beta-process-r5" x="0" y="337.2" textLength="24.4" clip-path="url(#breeze-release-management-start-beta-process-line-13)">╭─</text><text class="breeze-release-management-start-beta-process-r5" x="24.4" y="337.2" textLength="195.2" clip-path="url(#breeze-release-management-start-beta-process-line-13)">&#160;Common&#160;options&#160;</text><text class="breeze-release-management-start-beta-process-r5" x="219.6" y="337.2" textLength="1220"  [...]
+</text><text class="breeze-release-management-start-beta-process-r5" x="0" y="361.6" textLength="12.2" clip-path="url(#breeze-release-management-start-beta-process-line-14)">│</text><text class="breeze-release-management-start-beta-process-r4" x="24.4" y="361.6" textLength="109.8" clip-path="url(#breeze-release-management-start-beta-process-line-14)">--answer&#160;</text><text class="breeze-release-management-start-beta-process-r9" x="158.6" y="361.6" textLength="24.4" clip-path="url(#br [...]
+</text><text class="breeze-release-management-start-beta-process-r5" x="0" y="386" textLength="12.2" clip-path="url(#breeze-release-management-start-beta-process-line-15)">│</text><text class="breeze-release-management-start-beta-process-r4" x="24.4" y="386" textLength="109.8" clip-path="url(#breeze-release-management-start-beta-process-line-15)">--dry-run</text><text class="breeze-release-management-start-beta-process-r9" x="158.6" y="386" textLength="24.4" clip-path="url(#breeze-releas [...]
+</text><text class="breeze-release-management-start-beta-process-r5" x="0" y="410.4" textLength="12.2" clip-path="url(#breeze-release-management-start-beta-process-line-16)">│</text><text class="breeze-release-management-start-beta-process-r4" x="24.4" y="410.4" textLength="109.8" clip-path="url(#breeze-release-management-start-beta-process-line-16)">--verbose</text><text class="breeze-release-management-start-beta-process-r9" x="158.6" y="410.4" textLength="24.4" clip-path="url(#breeze- [...]
+</text><text class="breeze-release-management-start-beta-process-r5" x="0" y="434.8" textLength="12.2" clip-path="url(#breeze-release-management-start-beta-process-line-17)">│</text><text class="breeze-release-management-start-beta-process-r4" x="24.4" y="434.8" textLength="109.8" clip-path="url(#breeze-release-management-start-beta-process-line-17)">--help&#160;&#160;&#160;</text><text class="breeze-release-management-start-beta-process-r9" x="158.6" y="434.8" textLength="24.4" clip-pat [...]
+</text><text class="breeze-release-management-start-beta-process-r5" x="0" y="459.2" textLength="1464" clip-path="url(#breeze-release-management-start-beta-process-line-18)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-release-management-start-beta-process-r1" x="1464" y="459.2" textLength="12.2" clip-path="url(#breeze-release-management-start-beta-process-line-18)">
+</text>
+    </g>
+    </g>
+</svg>
diff --git a/dev/breeze/doc/images/output_release-management_start-beta-process.txt b/dev/breeze/doc/images/output_release-management_start-beta-process.txt
new file mode 100644
index 00000000000..a7adfd4275d
--- /dev/null
+++ b/dev/breeze/doc/images/output_release-management_start-beta-process.txt
@@ -0,0 +1 @@
+2e2b12e37332f5104bcb33c01a092d7a
diff --git a/dev/breeze/doc/images/output_setup_check-all-params-in-groups.svg b/dev/breeze/doc/images/output_setup_check-all-params-in-groups.svg
index a3da27c3903..ed6be314547 100644
--- a/dev/breeze/doc/images/output_setup_check-all-params-in-groups.svg
+++ b/dev/breeze/doc/images/output_setup_check-all-params-in-groups.svg
@@ -1,4 +1,4 @@
-<svg class="rich-terminal" viewBox="0 0 1482 1270.0" xmlns="http://www.w3.org/2000/svg">
+<svg class="rich-terminal" viewBox="0 0 1482 1294.3999999999999" xmlns="http://www.w3.org/2000/svg">
     <!-- Generated with Rich https://www.textualize.io -->
     <style>
 
@@ -43,7 +43,7 @@
 
     <defs>
     <clipPath id="breeze-setup-check-all-params-in-groups-clip-terminal">
-      <rect x="0" y="0" width="1463.0" height="1219.0" />
+      <rect x="0" y="0" width="1463.0" height="1243.3999999999999" />
     </clipPath>
     <clipPath id="breeze-setup-check-all-params-in-groups-line-0">
     <rect x="0" y="1.5" width="1464" height="24.65"/>
@@ -192,9 +192,12 @@
 <clipPath id="breeze-setup-check-all-params-in-groups-line-48">
     <rect x="0" y="1172.7" width="1464" height="24.65"/>
             </clipPath>
+<clipPath id="breeze-setup-check-all-params-in-groups-line-49">
+    <rect x="0" y="1197.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="1268" rx="8"/><text class="breeze-setup-check-all-params-in-groups-title" fill="#c5c8c6" text-anchor="middle" x="740" y="27">Command:&#160;setup&#160;check-all-params-in-groups</text>
+    <rect fill="#292929" stroke="rgba(255,255,255,0.35)" stroke-width="1" x="1" y="1" width="1480" height="1292.4" rx="8"/><text class="breeze-setup-check-all-params-in-groups-title" fill="#c5c8c6" text-anchor="middle" x="740" y="27">Command:&#160;setup&#160;check-all-params-in-groups</text>
             <g transform="translate(26,22)">
             <circle cx="0" cy="0" r="7" fill="#ff5f57"/>
             <circle cx="22" cy="0" r="7" fill="#febc2e"/>
@@ -235,25 +238,26 @@
 </text><text class="breeze-setup-check-all-params-in-groups-r5" x="0" y="703.2" textLength="12.2" clip-path="url(#breeze-setup-check-all-params-in-groups-line-28)">│</text><text class="breeze-setup-check-all-params-in-groups-r6" x="158.6" y="703.2" textLength="1085.8" clip-path="url(#breeze-setup-check-all-params-in-groups-line-28)">release-management:prepare-tarball&#160;|&#160;release-management:prepare-task-sdk-distributions&#160;|&#160;</text><text class="breeze-setup-check-all-param [...]
 </text><text class="breeze-setup-check-all-params-in-groups-r5" x="0" y="727.6" textLength="12.2" clip-path="url(#breeze-setup-check-all-params-in-groups-line-29)">│</text><text class="breeze-setup-check-all-params-in-groups-r6" x="158.6" y="727.6" textLength="902.8" clip-path="url(#breeze-setup-check-all-params-in-groups-line-29)">release-management:publish-docs&#160;|&#160;release-management:publish-docs-to-s3&#160;|&#160;</text><text class="breeze-setup-check-all-params-in-groups-r5"  [...]
 </text><text class="breeze-setup-check-all-params-in-groups-r5" x="0" y="752" textLength="12.2" clip-path="url(#breeze-setup-check-all-params-in-groups-line-30)">│</text><text class="breeze-setup-check-all-params-in-groups-r6" x="158.6" y="752" textLength="1024.8" clip-path="url(#breeze-setup-check-all-params-in-groups-line-30)">release-management:publish-schemas-to-s3&#160;|&#160;release-management:release-prod-images&#160;|&#160;</text><text class="breeze-setup-check-all-params-in-grou [...]
-</text><text class="breeze-setup-check-all-params-in-groups-r5" x="0" y="776.4" textLength="12.2" clip-path="url(#breeze-setup-check-all-params-in-groups-line-31)">│</text><text class="breeze-setup-check-all-params-in-groups-r6" x="158.6" y="776.4" textLength="1281" clip-path="url(#breeze-setup-check-all-params-in-groups-line-31)">release-management:start-rc-process&#160;|&#160;release-management:start-release&#160;|&#160;release-management:tag-providers</text><text class="breeze-setup-c [...]
-</text><text class="breeze-setup-check-all-params-in-groups-r5" x="0" y="800.8" textLength="12.2" clip-path="url(#breeze-setup-check-all-params-in-groups-line-32)">│</text><text class="breeze-setup-check-all-params-in-groups-r6" x="158.6" y="800.8" textLength="1134.6" clip-path="url(#breeze-setup-check-all-params-in-groups-line-32)">|&#160;release-management:update-constraints&#160;|&#160;release-management:update-providers-next-version&#160;|&#160;</text><text class="breeze-setup-check- [...]
-</text><text class="breeze-setup-check-all-params-in-groups-r5" x="0" y="825.2" textLength="12.2" clip-path="url(#breeze-setup-check-all-params-in-groups-line-33)">│</text><text class="breeze-setup-check-all-params-in-groups-r6" x="158.6" y="825.2" textLength="1244.4" clip-path="url(#breeze-setup-check-all-params-in-groups-line-33)">release-management:verify-provider-distributions&#160;|&#160;release-management:verify-rc-by-pmc&#160;|&#160;run&#160;|&#160;sbom&#160;|&#160;</text><text cl [...]
-</text><text class="breeze-setup-check-all-params-in-groups-r5" x="0" y="849.6" textLength="12.2" clip-path="url(#breeze-setup-check-all-params-in-groups-line-34)">│</text><text class="breeze-setup-check-all-params-in-groups-r6" x="158.6" y="849.6" textLength="1281" clip-path="url(#breeze-setup-check-all-params-in-groups-line-34)">sbom:build-all-airflow-images&#160;|&#160;sbom:export-dependency-information&#160;|&#160;sbom:generate-providers-requirements</text><text class="breeze-setup-c [...]
-</text><text class="breeze-setup-check-all-params-in-groups-r5" x="0" y="874" textLength="12.2" clip-path="url(#breeze-setup-check-all-params-in-groups-line-35)">│</text><text class="breeze-setup-check-all-params-in-groups-r6" x="158.6" y="874" textLength="1183.4" clip-path="url(#breeze-setup-check-all-params-in-groups-line-35)">|&#160;sbom:update-sbom-information&#160;|&#160;setup&#160;|&#160;setup:autocomplete&#160;|&#160;setup:check-all-params-in-groups&#160;|&#160;</text><text class= [...]
-</text><text class="breeze-setup-check-all-params-in-groups-r5" x="0" y="898.4" textLength="12.2" clip-path="url(#breeze-setup-check-all-params-in-groups-line-36)">│</text><text class="breeze-setup-check-all-params-in-groups-r6" x="158.6" y="898.4" textLength="1256.6" clip-path="url(#breeze-setup-check-all-params-in-groups-line-36)">setup:config&#160;|&#160;setup:regenerate-command-images&#160;|&#160;setup:self-upgrade&#160;|&#160;setup:synchronize-local-mounts&#160;|&#160;</text><text c [...]
-</text><text class="breeze-setup-check-all-params-in-groups-r5" x="0" y="922.8" textLength="12.2" clip-path="url(#breeze-setup-check-all-params-in-groups-line-37)">│</text><text class="breeze-setup-check-all-params-in-groups-r6" x="158.6" y="922.8" textLength="1098" clip-path="url(#breeze-setup-check-all-params-in-groups-line-37)">setup:version&#160;|&#160;shell&#160;|&#160;start-airflow&#160;|&#160;testing&#160;|&#160;testing:airflow-ctl-integration-tests&#160;|&#160;</text><text class= [...]
-</text><text class="breeze-setup-check-all-params-in-groups-r5" x="0" y="947.2" textLength="12.2" clip-path="url(#breeze-setup-check-all-params-in-groups-line-38)">│</text><text class="breeze-setup-check-all-params-in-groups-r6" x="158.6" y="947.2" textLength="1085.8" clip-path="url(#breeze-setup-check-all-params-in-groups-line-38)">testing:airflow-ctl-tests&#160;|&#160;testing:airflow-e2e-tests&#160;|&#160;testing:core-integration-tests&#160;|&#160;</text><text class="breeze-setup-check [...]
-</text><text class="breeze-setup-check-all-params-in-groups-r5" x="0" y="971.6" textLength="12.2" clip-path="url(#breeze-setup-check-all-params-in-groups-line-39)">│</text><text class="breeze-setup-check-all-params-in-groups-r6" x="158.6" y="971.6" textLength="890.6" clip-path="url(#breeze-setup-check-all-params-in-groups-line-39)">testing:core-tests&#160;|&#160;testing:docker-compose-tests&#160;|&#160;testing:helm-tests&#160;|&#160;</text><text class="breeze-setup-check-all-params-in-gr [...]
-</text><text class="breeze-setup-check-all-params-in-groups-r5" x="0" y="996" textLength="12.2" clip-path="url(#breeze-setup-check-all-params-in-groups-line-40)">│</text><text class="breeze-setup-check-all-params-in-groups-r6" x="158.6" y="996" textLength="1195.6" clip-path="url(#breeze-setup-check-all-params-in-groups-line-40)">testing:providers-integration-tests&#160;|&#160;testing:providers-tests&#160;|&#160;testing:python-api-client-tests&#160;|&#160;</text><text class="breeze-setup- [...]
-</text><text class="breeze-setup-check-all-params-in-groups-r5" x="0" y="1020.4" textLength="12.2" clip-path="url(#breeze-setup-check-all-params-in-groups-line-41)">│</text><text class="breeze-setup-check-all-params-in-groups-r6" x="158.6" y="1020.4" textLength="1281" clip-path="url(#breeze-setup-check-all-params-in-groups-line-41)">testing:system-tests&#160;|&#160;testing:task-sdk-integration-tests&#160;|&#160;testing:task-sdk-tests&#160;|&#160;testing:ui-e2e-tests</text><text class="br [...]
-</text><text class="breeze-setup-check-all-params-in-groups-r5" x="0" y="1044.8" textLength="12.2" clip-path="url(#breeze-setup-check-all-params-in-groups-line-42)">│</text><text class="breeze-setup-check-all-params-in-groups-r6" x="158.6" y="1044.8" textLength="1061.4" clip-path="url(#breeze-setup-check-all-params-in-groups-line-42)">|&#160;ui&#160;|&#160;ui:check-translation-completeness&#160;|&#160;ui:compile-assets&#160;|&#160;verify&#160;|&#160;workflow-run&#160;|&#160;</text><text  [...]
-</text><text class="breeze-setup-check-all-params-in-groups-r5" x="0" y="1069.2" textLength="12.2" clip-path="url(#breeze-setup-check-all-params-in-groups-line-43)">│</text><text class="breeze-setup-check-all-params-in-groups-r6" x="158.6" y="1069.2" textLength="1183.4" clip-path="url(#breeze-setup-check-all-params-in-groups-line-43)">workflow-run:publish-docs&#160;|&#160;workflow-run:release-constraints&#160;|&#160;workflow-run:sync-staging-to-main)</text><text class="breeze-setup-check [...]
-</text><text class="breeze-setup-check-all-params-in-groups-r5" x="0" y="1093.6" textLength="1464" clip-path="url(#breeze-setup-check-all-params-in-groups-line-44)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-setup-check-all-params-in-groups-r1" x="1464" y="1093.6" textLength="12.2" clip-path="url(#breeze-setup-check-all-params-in-groups-line-44)">
-</text><text class="breeze-setup-check-all-params-in-groups-r5" x="0" y="1118" textLength="24.4" clip-path="url(#breeze-setup-check-all-params-in-groups-line-45)">╭─</text><text class="breeze-setup-check-all-params-in-groups-r5" x="24.4" y="1118" textLength="195.2" clip-path="url(#breeze-setup-check-all-params-in-groups-line-45)">&#160;Common&#160;options&#160;</text><text class="breeze-setup-check-all-params-in-groups-r5" x="219.6" y="1118" textLength="1220" clip-path="url(#breeze-setup [...]
-</text><text class="breeze-setup-check-all-params-in-groups-r5" x="0" y="1142.4" textLength="12.2" clip-path="url(#breeze-setup-check-all-params-in-groups-line-46)">│</text><text class="breeze-setup-check-all-params-in-groups-r4" x="24.4" y="1142.4" textLength="109.8" clip-path="url(#breeze-setup-check-all-params-in-groups-line-46)">--verbose</text><text class="breeze-setup-check-all-params-in-groups-r7" x="158.6" y="1142.4" textLength="24.4" clip-path="url(#breeze-setup-check-all-params [...]
-</text><text class="breeze-setup-check-all-params-in-groups-r5" x="0" y="1166.8" textLength="12.2" clip-path="url(#breeze-setup-check-all-params-in-groups-line-47)">│</text><text class="breeze-setup-check-all-params-in-groups-r4" x="24.4" y="1166.8" textLength="109.8" clip-path="url(#breeze-setup-check-all-params-in-groups-line-47)">--dry-run</text><text class="breeze-setup-check-all-params-in-groups-r7" x="158.6" y="1166.8" textLength="24.4" clip-path="url(#breeze-setup-check-all-params [...]
-</text><text class="breeze-setup-check-all-params-in-groups-r5" x="0" y="1191.2" textLength="12.2" clip-path="url(#breeze-setup-check-all-params-in-groups-line-48)">│</text><text class="breeze-setup-check-all-params-in-groups-r4" x="24.4" y="1191.2" textLength="109.8" clip-path="url(#breeze-setup-check-all-params-in-groups-line-48)">--help&#160;&#160;&#160;</text><text class="breeze-setup-check-all-params-in-groups-r7" x="158.6" y="1191.2" textLength="24.4" clip-path="url(#breeze-setup-c [...]
-</text><text class="breeze-setup-check-all-params-in-groups-r5" x="0" y="1215.6" textLength="1464" clip-path="url(#breeze-setup-check-all-params-in-groups-line-49)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-setup-check-all-params-in-groups-r1" x="1464" y="1215.6" textLength="12.2" clip-path="url(#breeze-setup-check-all-params-in-groups-line-49)">
+</text><text class="breeze-setup-check-all-params-in-groups-r5" x="0" y="776.4" textLength="12.2" clip-path="url(#breeze-setup-check-all-params-in-groups-line-31)">│</text><text class="breeze-setup-check-all-params-in-groups-r6" x="158.6" y="776.4" textLength="951.6" clip-path="url(#breeze-setup-check-all-params-in-groups-line-31)">release-management:start-beta-process&#160;|&#160;release-management:start-rc-process&#160;|&#160;</text><text class="breeze-setup-check-all-params-in-groups- [...]
+</text><text class="breeze-setup-check-all-params-in-groups-r5" x="0" y="800.8" textLength="12.2" clip-path="url(#breeze-setup-check-all-params-in-groups-line-32)">│</text><text class="breeze-setup-check-all-params-in-groups-r6" x="158.6" y="800.8" textLength="854" clip-path="url(#breeze-setup-check-all-params-in-groups-line-32)">release-management:start-release&#160;|&#160;release-management:tag-providers&#160;|&#160;</text><text class="breeze-setup-check-all-params-in-groups-r5" x="145 [...]
+</text><text class="breeze-setup-check-all-params-in-groups-r5" x="0" y="825.2" textLength="12.2" clip-path="url(#breeze-setup-check-all-params-in-groups-line-33)">│</text><text class="breeze-setup-check-all-params-in-groups-r6" x="158.6" y="825.2" textLength="1110.2" clip-path="url(#breeze-setup-check-all-params-in-groups-line-33)">release-management:update-constraints&#160;|&#160;release-management:update-providers-next-version&#160;|&#160;</text><text class="breeze-setup-check-all-par [...]
+</text><text class="breeze-setup-check-all-params-in-groups-r5" x="0" y="849.6" textLength="12.2" clip-path="url(#breeze-setup-check-all-params-in-groups-line-34)">│</text><text class="breeze-setup-check-all-params-in-groups-r6" x="158.6" y="849.6" textLength="1244.4" clip-path="url(#breeze-setup-check-all-params-in-groups-line-34)">release-management:verify-provider-distributions&#160;|&#160;release-management:verify-rc-by-pmc&#160;|&#160;run&#160;|&#160;sbom&#160;|&#160;</text><text cl [...]
+</text><text class="breeze-setup-check-all-params-in-groups-r5" x="0" y="874" textLength="12.2" clip-path="url(#breeze-setup-check-all-params-in-groups-line-35)">│</text><text class="breeze-setup-check-all-params-in-groups-r6" x="158.6" y="874" textLength="1281" clip-path="url(#breeze-setup-check-all-params-in-groups-line-35)">sbom:build-all-airflow-images&#160;|&#160;sbom:export-dependency-information&#160;|&#160;sbom:generate-providers-requirements</text><text class="breeze-setup-check [...]
+</text><text class="breeze-setup-check-all-params-in-groups-r5" x="0" y="898.4" textLength="12.2" clip-path="url(#breeze-setup-check-all-params-in-groups-line-36)">│</text><text class="breeze-setup-check-all-params-in-groups-r6" x="158.6" y="898.4" textLength="1183.4" clip-path="url(#breeze-setup-check-all-params-in-groups-line-36)">|&#160;sbom:update-sbom-information&#160;|&#160;setup&#160;|&#160;setup:autocomplete&#160;|&#160;setup:check-all-params-in-groups&#160;|&#160;</text><text cl [...]
+</text><text class="breeze-setup-check-all-params-in-groups-r5" x="0" y="922.8" textLength="12.2" clip-path="url(#breeze-setup-check-all-params-in-groups-line-37)">│</text><text class="breeze-setup-check-all-params-in-groups-r6" x="158.6" y="922.8" textLength="1256.6" clip-path="url(#breeze-setup-check-all-params-in-groups-line-37)">setup:config&#160;|&#160;setup:regenerate-command-images&#160;|&#160;setup:self-upgrade&#160;|&#160;setup:synchronize-local-mounts&#160;|&#160;</text><text c [...]
+</text><text class="breeze-setup-check-all-params-in-groups-r5" x="0" y="947.2" textLength="12.2" clip-path="url(#breeze-setup-check-all-params-in-groups-line-38)">│</text><text class="breeze-setup-check-all-params-in-groups-r6" x="158.6" y="947.2" textLength="1098" clip-path="url(#breeze-setup-check-all-params-in-groups-line-38)">setup:version&#160;|&#160;shell&#160;|&#160;start-airflow&#160;|&#160;testing&#160;|&#160;testing:airflow-ctl-integration-tests&#160;|&#160;</text><text class= [...]
+</text><text class="breeze-setup-check-all-params-in-groups-r5" x="0" y="971.6" textLength="12.2" clip-path="url(#breeze-setup-check-all-params-in-groups-line-39)">│</text><text class="breeze-setup-check-all-params-in-groups-r6" x="158.6" y="971.6" textLength="1085.8" clip-path="url(#breeze-setup-check-all-params-in-groups-line-39)">testing:airflow-ctl-tests&#160;|&#160;testing:airflow-e2e-tests&#160;|&#160;testing:core-integration-tests&#160;|&#160;</text><text class="breeze-setup-check [...]
+</text><text class="breeze-setup-check-all-params-in-groups-r5" x="0" y="996" textLength="12.2" clip-path="url(#breeze-setup-check-all-params-in-groups-line-40)">│</text><text class="breeze-setup-check-all-params-in-groups-r6" x="158.6" y="996" textLength="890.6" clip-path="url(#breeze-setup-check-all-params-in-groups-line-40)">testing:core-tests&#160;|&#160;testing:docker-compose-tests&#160;|&#160;testing:helm-tests&#160;|&#160;</text><text class="breeze-setup-check-all-params-in-groups [...]
+</text><text class="breeze-setup-check-all-params-in-groups-r5" x="0" y="1020.4" textLength="12.2" clip-path="url(#breeze-setup-check-all-params-in-groups-line-41)">│</text><text class="breeze-setup-check-all-params-in-groups-r6" x="158.6" y="1020.4" textLength="1195.6" clip-path="url(#breeze-setup-check-all-params-in-groups-line-41)">testing:providers-integration-tests&#160;|&#160;testing:providers-tests&#160;|&#160;testing:python-api-client-tests&#160;|&#160;</text><text class="breeze- [...]
+</text><text class="breeze-setup-check-all-params-in-groups-r5" x="0" y="1044.8" textLength="12.2" clip-path="url(#breeze-setup-check-all-params-in-groups-line-42)">│</text><text class="breeze-setup-check-all-params-in-groups-r6" x="158.6" y="1044.8" textLength="1281" clip-path="url(#breeze-setup-check-all-params-in-groups-line-42)">testing:system-tests&#160;|&#160;testing:task-sdk-integration-tests&#160;|&#160;testing:task-sdk-tests&#160;|&#160;testing:ui-e2e-tests</text><text class="br [...]
+</text><text class="breeze-setup-check-all-params-in-groups-r5" x="0" y="1069.2" textLength="12.2" clip-path="url(#breeze-setup-check-all-params-in-groups-line-43)">│</text><text class="breeze-setup-check-all-params-in-groups-r6" x="158.6" y="1069.2" textLength="1061.4" clip-path="url(#breeze-setup-check-all-params-in-groups-line-43)">|&#160;ui&#160;|&#160;ui:check-translation-completeness&#160;|&#160;ui:compile-assets&#160;|&#160;verify&#160;|&#160;workflow-run&#160;|&#160;</text><text  [...]
+</text><text class="breeze-setup-check-all-params-in-groups-r5" x="0" y="1093.6" textLength="12.2" clip-path="url(#breeze-setup-check-all-params-in-groups-line-44)">│</text><text class="breeze-setup-check-all-params-in-groups-r6" x="158.6" y="1093.6" textLength="1183.4" clip-path="url(#breeze-setup-check-all-params-in-groups-line-44)">workflow-run:publish-docs&#160;|&#160;workflow-run:release-constraints&#160;|&#160;workflow-run:sync-staging-to-main)</text><text class="breeze-setup-check [...]
+</text><text class="breeze-setup-check-all-params-in-groups-r5" x="0" y="1118" textLength="1464" clip-path="url(#breeze-setup-check-all-params-in-groups-line-45)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-setup-check-all-params-in-groups-r1" x="1464" y="1118" textLength="12.2" clip-path="url(#breeze-setup-check-all-params-in-groups-line-45)">
+</text><text class="breeze-setup-check-all-params-in-groups-r5" x="0" y="1142.4" textLength="24.4" clip-path="url(#breeze-setup-check-all-params-in-groups-line-46)">╭─</text><text class="breeze-setup-check-all-params-in-groups-r5" x="24.4" y="1142.4" textLength="195.2" clip-path="url(#breeze-setup-check-all-params-in-groups-line-46)">&#160;Common&#160;options&#160;</text><text class="breeze-setup-check-all-params-in-groups-r5" x="219.6" y="1142.4" textLength="1220" clip-path="url(#breeze [...]
+</text><text class="breeze-setup-check-all-params-in-groups-r5" x="0" y="1166.8" textLength="12.2" clip-path="url(#breeze-setup-check-all-params-in-groups-line-47)">│</text><text class="breeze-setup-check-all-params-in-groups-r4" x="24.4" y="1166.8" textLength="109.8" clip-path="url(#breeze-setup-check-all-params-in-groups-line-47)">--verbose</text><text class="breeze-setup-check-all-params-in-groups-r7" x="158.6" y="1166.8" textLength="24.4" clip-path="url(#breeze-setup-check-all-params [...]
+</text><text class="breeze-setup-check-all-params-in-groups-r5" x="0" y="1191.2" textLength="12.2" clip-path="url(#breeze-setup-check-all-params-in-groups-line-48)">│</text><text class="breeze-setup-check-all-params-in-groups-r4" x="24.4" y="1191.2" textLength="109.8" clip-path="url(#breeze-setup-check-all-params-in-groups-line-48)">--dry-run</text><text class="breeze-setup-check-all-params-in-groups-r7" x="158.6" y="1191.2" textLength="24.4" clip-path="url(#breeze-setup-check-all-params [...]
+</text><text class="breeze-setup-check-all-params-in-groups-r5" x="0" y="1215.6" textLength="12.2" clip-path="url(#breeze-setup-check-all-params-in-groups-line-49)">│</text><text class="breeze-setup-check-all-params-in-groups-r4" x="24.4" y="1215.6" textLength="109.8" clip-path="url(#breeze-setup-check-all-params-in-groups-line-49)">--help&#160;&#160;&#160;</text><text class="breeze-setup-check-all-params-in-groups-r7" x="158.6" y="1215.6" textLength="24.4" clip-path="url(#breeze-setup-c [...]
+</text><text class="breeze-setup-check-all-params-in-groups-r5" x="0" y="1240" textLength="1464" clip-path="url(#breeze-setup-check-all-params-in-groups-line-50)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-setup-check-all-params-in-groups-r1" x="1464" y="1240" textLength="12.2" clip-path="url(#breeze-setup-check-all-params-in-groups-line-50)">
 </text>
     </g>
     </g>
diff --git a/dev/breeze/doc/images/output_setup_check-all-params-in-groups.txt b/dev/breeze/doc/images/output_setup_check-all-params-in-groups.txt
index e906db0e840..9d053954e72 100644
--- a/dev/breeze/doc/images/output_setup_check-all-params-in-groups.txt
+++ b/dev/breeze/doc/images/output_setup_check-all-params-in-groups.txt
@@ -1 +1 @@
-071569892714c5561156e19cdaa04041
+cd743de2ac920faaec5a33b506ede093
diff --git a/dev/breeze/doc/images/output_setup_regenerate-command-images.svg b/dev/breeze/doc/images/output_setup_regenerate-command-images.svg
index 8d98810ae3a..a1ef0efe0d8 100644
--- a/dev/breeze/doc/images/output_setup_regenerate-command-images.svg
+++ b/dev/breeze/doc/images/output_setup_regenerate-command-images.svg
@@ -1,4 +1,4 @@
-<svg class="rich-terminal" viewBox="0 0 1482 1392.0" xmlns="http://www.w3.org/2000/svg">
+<svg class="rich-terminal" viewBox="0 0 1482 1416.3999999999999" xmlns="http://www.w3.org/2000/svg">
     <!-- Generated with Rich https://www.textualize.io -->
     <style>
 
@@ -43,7 +43,7 @@
 
     <defs>
     <clipPath id="breeze-setup-regenerate-command-images-clip-terminal">
-      <rect x="0" y="0" width="1463.0" height="1341.0" />
+      <rect x="0" y="0" width="1463.0" height="1365.3999999999999" />
     </clipPath>
     <clipPath id="breeze-setup-regenerate-command-images-line-0">
     <rect x="0" y="1.5" width="1464" height="24.65"/>
@@ -207,9 +207,12 @@
 <clipPath id="breeze-setup-regenerate-command-images-line-53">
     <rect x="0" y="1294.7" width="1464" height="24.65"/>
             </clipPath>
+<clipPath id="breeze-setup-regenerate-command-images-line-54">
+    <rect x="0" y="1319.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="1390" rx="8"/><text class="breeze-setup-regenerate-command-images-title" fill="#c5c8c6" text-anchor="middle" x="740" y="27">Command:&#160;setup&#160;regenerate-command-images</text>
+    <rect fill="#292929" stroke="rgba(255,255,255,0.35)" stroke-width="1" x="1" y="1" width="1480" height="1414.4" rx="8"/><text class="breeze-setup-regenerate-command-images-title" fill="#c5c8c6" text-anchor="middle" x="740" y="27">Command:&#160;setup&#160;regenerate-command-images</text>
             <g transform="translate(26,22)">
             <circle cx="0" cy="0" r="7" fill="#ff5f57"/>
             <circle cx="22" cy="0" r="7" fill="#febc2e"/>
@@ -251,29 +254,30 @@
 </text><text class="breeze-setup-regenerate-command-images-r5" x="0" y="727.6" textLength="12.2" clip-path="url(#breeze-setup-regenerate-command-images-line-29)">│</text><text class="breeze-setup-regenerate-command-images-r6" x="195.2" y="727.6" textLength="1000.4" clip-path="url(#breeze-setup-regenerate-command-images-line-29)">|&#160;release-management:prepare-python-client&#160;|&#160;release-management:prepare-tarball&#160;|&#160;</text><text class="breeze-setup-regenerate-command-im [...]
 </text><text class="breeze-setup-regenerate-command-images-r5" x="0" y="752" textLength="12.2" clip-path="url(#breeze-setup-regenerate-command-images-line-30)">│</text><text class="breeze-setup-regenerate-command-images-r6" x="195.2" y="752" textLength="1049.2" clip-path="url(#breeze-setup-regenerate-command-images-line-30)">release-management:prepare-task-sdk-distributions&#160;|&#160;release-management:publish-docs&#160;|&#160;</text><text class="breeze-setup-regenerate-command-images- [...]
 </text><text class="breeze-setup-regenerate-command-images-r5" x="0" y="776.4" textLength="12.2" clip-path="url(#breeze-setup-regenerate-command-images-line-31)">│</text><text class="breeze-setup-regenerate-command-images-r6" x="195.2" y="776.4" textLength="1012.6" clip-path="url(#breeze-setup-regenerate-command-images-line-31)">release-management:publish-docs-to-s3&#160;|&#160;release-management:publish-schemas-to-s3&#160;|&#160;</text><text class="breeze-setup-regenerate-command-images [...]
-</text><text class="breeze-setup-regenerate-command-images-r5" x="0" y="800.8" textLength="12.2" clip-path="url(#breeze-setup-regenerate-command-images-line-32)">│</text><text class="breeze-setup-regenerate-command-images-r6" x="195.2" y="800.8" textLength="963.8" clip-path="url(#breeze-setup-regenerate-command-images-line-32)">release-management:release-prod-images&#160;|&#160;release-management:start-rc-process&#160;|&#160;</text><text class="breeze-setup-regenerate-command-images-r5"  [...]
-</text><text class="breeze-setup-regenerate-command-images-r5" x="0" y="825.2" textLength="12.2" clip-path="url(#breeze-setup-regenerate-command-images-line-33)">│</text><text class="breeze-setup-regenerate-command-images-r6" x="195.2" y="825.2" textLength="854" clip-path="url(#breeze-setup-regenerate-command-images-line-33)">release-management:start-release&#160;|&#160;release-management:tag-providers&#160;|&#160;</text><text class="breeze-setup-regenerate-command-images-r5" x="1451.8"  [...]
-</text><text class="breeze-setup-regenerate-command-images-r5" x="0" y="849.6" textLength="12.2" clip-path="url(#breeze-setup-regenerate-command-images-line-34)">│</text><text class="breeze-setup-regenerate-command-images-r6" x="195.2" y="849.6" textLength="1110.2" clip-path="url(#breeze-setup-regenerate-command-images-line-34)">release-management:update-constraints&#160;|&#160;release-management:update-providers-next-version&#160;|&#160;</text><text class="breeze-setup-regenerate-comman [...]
-</text><text class="breeze-setup-regenerate-command-images-r5" x="0" y="874" textLength="12.2" clip-path="url(#breeze-setup-regenerate-command-images-line-35)">│</text><text class="breeze-setup-regenerate-command-images-r6" x="195.2" y="874" textLength="1244.4" clip-path="url(#breeze-setup-regenerate-command-images-line-35)">release-management:verify-provider-distributions&#160;|&#160;release-management:verify-rc-by-pmc&#160;|&#160;run&#160;|&#160;sbom&#160;|&#160;</text><text class="bre [...]
-</text><text class="breeze-setup-regenerate-command-images-r5" x="0" y="898.4" textLength="12.2" clip-path="url(#breeze-setup-regenerate-command-images-line-36)">│</text><text class="breeze-setup-regenerate-command-images-r6" x="195.2" y="898.4" textLength="841.8" clip-path="url(#breeze-setup-regenerate-command-images-line-36)">sbom:build-all-airflow-images&#160;|&#160;sbom:export-dependency-information&#160;|&#160;</text><text class="breeze-setup-regenerate-command-images-r5" x="1451.8" [...]
-</text><text class="breeze-setup-regenerate-command-images-r5" x="0" y="922.8" textLength="12.2" clip-path="url(#breeze-setup-regenerate-command-images-line-37)">│</text><text class="breeze-setup-regenerate-command-images-r6" x="195.2" y="922.8" textLength="1207.8" clip-path="url(#breeze-setup-regenerate-command-images-line-37)">sbom:generate-providers-requirements&#160;|&#160;sbom:update-sbom-information&#160;|&#160;setup&#160;|&#160;setup:autocomplete&#160;|&#160;</text><text class="br [...]
-</text><text class="breeze-setup-regenerate-command-images-r5" x="0" y="947.2" textLength="12.2" clip-path="url(#breeze-setup-regenerate-command-images-line-38)">│</text><text class="breeze-setup-regenerate-command-images-r6" x="195.2" y="947.2" textLength="1244.4" clip-path="url(#breeze-setup-regenerate-command-images-line-38)">setup:check-all-params-in-groups&#160;|&#160;setup:config&#160;|&#160;setup:regenerate-command-images&#160;|&#160;setup:self-upgrade</text><text class="breeze-se [...]
-</text><text class="breeze-setup-regenerate-command-images-r5" x="0" y="971.6" textLength="12.2" clip-path="url(#breeze-setup-regenerate-command-images-line-39)">│</text><text class="breeze-setup-regenerate-command-images-r6" x="195.2" y="971.6" textLength="1037" clip-path="url(#breeze-setup-regenerate-command-images-line-39)">|&#160;setup:synchronize-local-mounts&#160;|&#160;setup:version&#160;|&#160;shell&#160;|&#160;start-airflow&#160;|&#160;testing&#160;|&#160;</text><text class="bre [...]
-</text><text class="breeze-setup-regenerate-command-images-r5" x="0" y="996" textLength="12.2" clip-path="url(#breeze-setup-regenerate-command-images-line-40)">│</text><text class="breeze-setup-regenerate-command-images-r6" x="195.2" y="996" textLength="1171.2" clip-path="url(#breeze-setup-regenerate-command-images-line-40)">testing:airflow-ctl-integration-tests&#160;|&#160;testing:airflow-ctl-tests&#160;|&#160;testing:airflow-e2e-tests&#160;|&#160;</text><text class="breeze-setup-regene [...]
-</text><text class="breeze-setup-regenerate-command-images-r5" x="0" y="1020.4" textLength="12.2" clip-path="url(#breeze-setup-regenerate-command-images-line-41)">│</text><text class="breeze-setup-regenerate-command-images-r6" x="195.2" y="1020.4" textLength="1037" clip-path="url(#breeze-setup-regenerate-command-images-line-41)">testing:core-integration-tests&#160;|&#160;testing:core-tests&#160;|&#160;testing:docker-compose-tests&#160;|&#160;</text><text class="breeze-setup-regenerate-co [...]
-</text><text class="breeze-setup-regenerate-command-images-r5" x="0" y="1044.8" textLength="12.2" clip-path="url(#breeze-setup-regenerate-command-images-line-42)">│</text><text class="breeze-setup-regenerate-command-images-r6" x="195.2" y="1044.8" textLength="1037" clip-path="url(#breeze-setup-regenerate-command-images-line-42)">testing:helm-tests&#160;|&#160;testing:providers-integration-tests&#160;|&#160;testing:providers-tests&#160;|&#160;</text><text class="breeze-setup-regenerate-co [...]
-</text><text class="breeze-setup-regenerate-command-images-r5" x="0" y="1069.2" textLength="12.2" clip-path="url(#breeze-setup-regenerate-command-images-line-43)">│</text><text class="breeze-setup-regenerate-command-images-r6" x="195.2" y="1069.2" textLength="1146.8" clip-path="url(#breeze-setup-regenerate-command-images-line-43)">testing:python-api-client-tests&#160;|&#160;testing:system-tests&#160;|&#160;testing:task-sdk-integration-tests&#160;|&#160;</text><text class="breeze-setup-re [...]
-</text><text class="breeze-setup-regenerate-command-images-r5" x="0" y="1093.6" textLength="12.2" clip-path="url(#breeze-setup-regenerate-command-images-line-44)">│</text><text class="breeze-setup-regenerate-command-images-r6" x="195.2" y="1093.6" textLength="1085.8" clip-path="url(#breeze-setup-regenerate-command-images-line-44)">testing:task-sdk-tests&#160;|&#160;testing:ui-e2e-tests&#160;|&#160;ui&#160;|&#160;ui:check-translation-completeness&#160;|&#160;</text><text class="breeze-set [...]
-</text><text class="breeze-setup-regenerate-command-images-r5" x="0" y="1118" textLength="12.2" clip-path="url(#breeze-setup-regenerate-command-images-line-45)">│</text><text class="breeze-setup-regenerate-command-images-r6" x="195.2" y="1118" textLength="878.4" clip-path="url(#breeze-setup-regenerate-command-images-line-45)">ui:compile-assets&#160;|&#160;verify&#160;|&#160;workflow-run&#160;|&#160;workflow-run:publish-docs&#160;|&#160;</text><text class="breeze-setup-regenerate-command- [...]
-</text><text class="breeze-setup-regenerate-command-images-r5" x="0" y="1142.4" textLength="12.2" clip-path="url(#breeze-setup-regenerate-command-images-line-46)">│</text><text class="breeze-setup-regenerate-command-images-r6" x="195.2" y="1142.4" textLength="841.8" clip-path="url(#breeze-setup-regenerate-command-images-line-46)">workflow-run:release-constraints&#160;|&#160;workflow-run:sync-staging-to-main)</text><text class="breeze-setup-regenerate-command-images-r5" x="1451.8" y="1142 [...]
-</text><text class="breeze-setup-regenerate-command-images-r5" x="0" y="1166.8" textLength="12.2" clip-path="url(#breeze-setup-regenerate-command-images-line-47)">│</text><text class="breeze-setup-regenerate-command-images-r4" x="24.4" y="1166.8" textLength="146.4" clip-path="url(#breeze-setup-regenerate-command-images-line-47)">--check-only</text><text class="breeze-setup-regenerate-command-images-r1" x="195.2" y="1166.8" textLength="1244.4" clip-path="url(#breeze-setup-regenerate-comma [...]
-</text><text class="breeze-setup-regenerate-command-images-r5" x="0" y="1191.2" textLength="12.2" clip-path="url(#breeze-setup-regenerate-command-images-line-48)">│</text><text class="breeze-setup-regenerate-command-images-r1" x="195.2" y="1191.2" textLength="170.8" clip-path="url(#breeze-setup-regenerate-command-images-line-48)">together&#160;with&#160;</text><text class="breeze-setup-regenerate-command-images-r4" x="366" y="1191.2" textLength="109.8" clip-path="url(#breeze-setup-regene [...]
-</text><text class="breeze-setup-regenerate-command-images-r5" x="0" y="1215.6" textLength="1464" clip-path="url(#breeze-setup-regenerate-command-images-line-49)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-setup-regenerate-command-images-r1" x="1464" y="1215.6" textLength="12.2" clip-path="url(#breeze-setup-regenerate-command-images-line-49)">
-</text><text class="breeze-setup-regenerate-command-images-r5" x="0" y="1240" textLength="24.4" clip-path="url(#breeze-setup-regenerate-command-images-line-50)">╭─</text><text class="breeze-setup-regenerate-command-images-r5" x="24.4" y="1240" textLength="195.2" clip-path="url(#breeze-setup-regenerate-command-images-line-50)">&#160;Common&#160;options&#160;</text><text class="breeze-setup-regenerate-command-images-r5" x="219.6" y="1240" textLength="1220" clip-path="url(#breeze-setup-rege [...]
-</text><text class="breeze-setup-regenerate-command-images-r5" x="0" y="1264.4" textLength="12.2" clip-path="url(#breeze-setup-regenerate-command-images-line-51)">│</text><text class="breeze-setup-regenerate-command-images-r4" x="24.4" y="1264.4" textLength="109.8" clip-path="url(#breeze-setup-regenerate-command-images-line-51)">--verbose</text><text class="breeze-setup-regenerate-command-images-r7" x="158.6" y="1264.4" textLength="24.4" clip-path="url(#breeze-setup-regenerate-command-im [...]
-</text><text class="breeze-setup-regenerate-command-images-r5" x="0" y="1288.8" textLength="12.2" clip-path="url(#breeze-setup-regenerate-command-images-line-52)">│</text><text class="breeze-setup-regenerate-command-images-r4" x="24.4" y="1288.8" textLength="109.8" clip-path="url(#breeze-setup-regenerate-command-images-line-52)">--dry-run</text><text class="breeze-setup-regenerate-command-images-r7" x="158.6" y="1288.8" textLength="24.4" clip-path="url(#breeze-setup-regenerate-command-im [...]
-</text><text class="breeze-setup-regenerate-command-images-r5" x="0" y="1313.2" textLength="12.2" clip-path="url(#breeze-setup-regenerate-command-images-line-53)">│</text><text class="breeze-setup-regenerate-command-images-r4" x="24.4" y="1313.2" textLength="109.8" clip-path="url(#breeze-setup-regenerate-command-images-line-53)">--help&#160;&#160;&#160;</text><text class="breeze-setup-regenerate-command-images-r7" x="158.6" y="1313.2" textLength="24.4" clip-path="url(#breeze-setup-regene [...]
-</text><text class="breeze-setup-regenerate-command-images-r5" x="0" y="1337.6" textLength="1464" clip-path="url(#breeze-setup-regenerate-command-images-line-54)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-setup-regenerate-command-images-r1" x="1464" y="1337.6" textLength="12.2" clip-path="url(#breeze-setup-regenerate-command-images-line-54)">
+</text><text class="breeze-setup-regenerate-command-images-r5" x="0" y="800.8" textLength="12.2" clip-path="url(#breeze-setup-regenerate-command-images-line-32)">│</text><text class="breeze-setup-regenerate-command-images-r6" x="195.2" y="800.8" textLength="988.2" clip-path="url(#breeze-setup-regenerate-command-images-line-32)">release-management:release-prod-images&#160;|&#160;release-management:start-beta-process&#160;|&#160;</text><text class="breeze-setup-regenerate-command-images-r5 [...]
+</text><text class="breeze-setup-regenerate-command-images-r5" x="0" y="825.2" textLength="12.2" clip-path="url(#breeze-setup-regenerate-command-images-line-33)">│</text><text class="breeze-setup-regenerate-command-images-r6" x="195.2" y="825.2" textLength="890.6" clip-path="url(#breeze-setup-regenerate-command-images-line-33)">release-management:start-rc-process&#160;|&#160;release-management:start-release&#160;|&#160;</text><text class="breeze-setup-regenerate-command-images-r5" x="145 [...]
+</text><text class="breeze-setup-regenerate-command-images-r5" x="0" y="849.6" textLength="12.2" clip-path="url(#breeze-setup-regenerate-command-images-line-34)">│</text><text class="breeze-setup-regenerate-command-images-r6" x="195.2" y="849.6" textLength="915" clip-path="url(#breeze-setup-regenerate-command-images-line-34)">release-management:tag-providers&#160;|&#160;release-management:update-constraints&#160;|&#160;</text><text class="breeze-setup-regenerate-command-images-r5" x="145 [...]
+</text><text class="breeze-setup-regenerate-command-images-r5" x="0" y="874" textLength="12.2" clip-path="url(#breeze-setup-regenerate-command-images-line-35)">│</text><text class="breeze-setup-regenerate-command-images-r6" x="195.2" y="874" textLength="1244.4" clip-path="url(#breeze-setup-regenerate-command-images-line-35)">release-management:update-providers-next-version&#160;|&#160;release-management:verify-provider-distributions&#160;|&#160;</text><text class="breeze-setup-regenerate [...]
+</text><text class="breeze-setup-regenerate-command-images-r5" x="0" y="898.4" textLength="12.2" clip-path="url(#breeze-setup-regenerate-command-images-line-36)">│</text><text class="breeze-setup-regenerate-command-images-r6" x="195.2" y="898.4" textLength="1012.6" clip-path="url(#breeze-setup-regenerate-command-images-line-36)">release-management:verify-rc-by-pmc&#160;|&#160;run&#160;|&#160;sbom&#160;|&#160;sbom:build-all-airflow-images&#160;|&#160;</text><text class="breeze-setup-regen [...]
+</text><text class="breeze-setup-regenerate-command-images-r5" x="0" y="922.8" textLength="12.2" clip-path="url(#breeze-setup-regenerate-command-images-line-37)">│</text><text class="breeze-setup-regenerate-command-images-r6" x="195.2" y="922.8" textLength="927.2" clip-path="url(#breeze-setup-regenerate-command-images-line-37)">sbom:export-dependency-information&#160;|&#160;sbom:generate-providers-requirements&#160;|&#160;</text><text class="breeze-setup-regenerate-command-images-r5" x=" [...]
+</text><text class="breeze-setup-regenerate-command-images-r5" x="0" y="947.2" textLength="12.2" clip-path="url(#breeze-setup-regenerate-command-images-line-38)">│</text><text class="breeze-setup-regenerate-command-images-r6" x="195.2" y="947.2" textLength="1159" clip-path="url(#breeze-setup-regenerate-command-images-line-38)">sbom:update-sbom-information&#160;|&#160;setup&#160;|&#160;setup:autocomplete&#160;|&#160;setup:check-all-params-in-groups&#160;|&#160;</text><text class="breeze-s [...]
+</text><text class="breeze-setup-regenerate-command-images-r5" x="0" y="971.6" textLength="12.2" clip-path="url(#breeze-setup-regenerate-command-images-line-39)">│</text><text class="breeze-setup-regenerate-command-images-r6" x="195.2" y="971.6" textLength="1244.4" clip-path="url(#breeze-setup-regenerate-command-images-line-39)">setup:config&#160;|&#160;setup:regenerate-command-images&#160;|&#160;setup:self-upgrade&#160;|&#160;setup:synchronize-local-mounts&#160;|</text><text class="bree [...]
+</text><text class="breeze-setup-regenerate-command-images-r5" x="0" y="996" textLength="12.2" clip-path="url(#breeze-setup-regenerate-command-images-line-40)">│</text><text class="breeze-setup-regenerate-command-images-r6" x="195.2" y="996" textLength="1098" clip-path="url(#breeze-setup-regenerate-command-images-line-40)">setup:version&#160;|&#160;shell&#160;|&#160;start-airflow&#160;|&#160;testing&#160;|&#160;testing:airflow-ctl-integration-tests&#160;|&#160;</text><text class="breeze- [...]
+</text><text class="breeze-setup-regenerate-command-images-r5" x="0" y="1020.4" textLength="12.2" clip-path="url(#breeze-setup-regenerate-command-images-line-41)">│</text><text class="breeze-setup-regenerate-command-images-r6" x="195.2" y="1020.4" textLength="1085.8" clip-path="url(#breeze-setup-regenerate-command-images-line-41)">testing:airflow-ctl-tests&#160;|&#160;testing:airflow-e2e-tests&#160;|&#160;testing:core-integration-tests&#160;|&#160;</text><text class="breeze-setup-regener [...]
+</text><text class="breeze-setup-regenerate-command-images-r5" x="0" y="1044.8" textLength="12.2" clip-path="url(#breeze-setup-regenerate-command-images-line-42)">│</text><text class="breeze-setup-regenerate-command-images-r6" x="195.2" y="1044.8" textLength="890.6" clip-path="url(#breeze-setup-regenerate-command-images-line-42)">testing:core-tests&#160;|&#160;testing:docker-compose-tests&#160;|&#160;testing:helm-tests&#160;|&#160;</text><text class="breeze-setup-regenerate-command-image [...]
+</text><text class="breeze-setup-regenerate-command-images-r5" x="0" y="1069.2" textLength="12.2" clip-path="url(#breeze-setup-regenerate-command-images-line-43)">│</text><text class="breeze-setup-regenerate-command-images-r6" x="195.2" y="1069.2" textLength="1195.6" clip-path="url(#breeze-setup-regenerate-command-images-line-43)">testing:providers-integration-tests&#160;|&#160;testing:providers-tests&#160;|&#160;testing:python-api-client-tests&#160;|&#160;</text><text class="breeze-setu [...]
+</text><text class="breeze-setup-regenerate-command-images-r5" x="0" y="1093.6" textLength="12.2" clip-path="url(#breeze-setup-regenerate-command-images-line-44)">│</text><text class="breeze-setup-regenerate-command-images-r6" x="195.2" y="1093.6" textLength="1037" clip-path="url(#breeze-setup-regenerate-command-images-line-44)">testing:system-tests&#160;|&#160;testing:task-sdk-integration-tests&#160;|&#160;testing:task-sdk-tests&#160;|&#160;</text><text class="breeze-setup-regenerate-co [...]
+</text><text class="breeze-setup-regenerate-command-images-r5" x="0" y="1118" textLength="12.2" clip-path="url(#breeze-setup-regenerate-command-images-line-45)">│</text><text class="breeze-setup-regenerate-command-images-r6" x="195.2" y="1118" textLength="1134.6" clip-path="url(#breeze-setup-regenerate-command-images-line-45)">testing:ui-e2e-tests&#160;|&#160;ui&#160;|&#160;ui:check-translation-completeness&#160;|&#160;ui:compile-assets&#160;|&#160;verify&#160;|&#160;</text><text class=" [...]
+</text><text class="breeze-setup-regenerate-command-images-r5" x="0" y="1142.4" textLength="12.2" clip-path="url(#breeze-setup-regenerate-command-images-line-46)">│</text><text class="breeze-setup-regenerate-command-images-r6" x="195.2" y="1142.4" textLength="951.6" clip-path="url(#breeze-setup-regenerate-command-images-line-46)">workflow-run&#160;|&#160;workflow-run:publish-docs&#160;|&#160;workflow-run:release-constraints&#160;|&#160;</text><text class="breeze-setup-regenerate-command- [...]
+</text><text class="breeze-setup-regenerate-command-images-r5" x="0" y="1166.8" textLength="12.2" clip-path="url(#breeze-setup-regenerate-command-images-line-47)">│</text><text class="breeze-setup-regenerate-command-images-r6" x="195.2" y="1166.8" textLength="414.8" clip-path="url(#breeze-setup-regenerate-command-images-line-47)">workflow-run:sync-staging-to-main)</text><text class="breeze-setup-regenerate-command-images-r5" x="1451.8" y="1166.8" textLength="12.2" clip-path="url(#breeze- [...]
+</text><text class="breeze-setup-regenerate-command-images-r5" x="0" y="1191.2" textLength="12.2" clip-path="url(#breeze-setup-regenerate-command-images-line-48)">│</text><text class="breeze-setup-regenerate-command-images-r4" x="24.4" y="1191.2" textLength="146.4" clip-path="url(#breeze-setup-regenerate-command-images-line-48)">--check-only</text><text class="breeze-setup-regenerate-command-images-r1" x="195.2" y="1191.2" textLength="1244.4" clip-path="url(#breeze-setup-regenerate-comma [...]
+</text><text class="breeze-setup-regenerate-command-images-r5" x="0" y="1215.6" textLength="12.2" clip-path="url(#breeze-setup-regenerate-command-images-line-49)">│</text><text class="breeze-setup-regenerate-command-images-r1" x="195.2" y="1215.6" textLength="170.8" clip-path="url(#breeze-setup-regenerate-command-images-line-49)">together&#160;with&#160;</text><text class="breeze-setup-regenerate-command-images-r4" x="366" y="1215.6" textLength="109.8" clip-path="url(#breeze-setup-regene [...]
+</text><text class="breeze-setup-regenerate-command-images-r5" x="0" y="1240" textLength="1464" clip-path="url(#breeze-setup-regenerate-command-images-line-50)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-setup-regenerate-command-images-r1" x="1464" y="1240" textLength="12.2" clip-path="url(#breeze-setup-regenerate-command-images-line-50)">
+</text><text class="breeze-setup-regenerate-command-images-r5" x="0" y="1264.4" textLength="24.4" clip-path="url(#breeze-setup-regenerate-command-images-line-51)">╭─</text><text class="breeze-setup-regenerate-command-images-r5" x="24.4" y="1264.4" textLength="195.2" clip-path="url(#breeze-setup-regenerate-command-images-line-51)">&#160;Common&#160;options&#160;</text><text class="breeze-setup-regenerate-command-images-r5" x="219.6" y="1264.4" textLength="1220" clip-path="url(#breeze-setu [...]
+</text><text class="breeze-setup-regenerate-command-images-r5" x="0" y="1288.8" textLength="12.2" clip-path="url(#breeze-setup-regenerate-command-images-line-52)">│</text><text class="breeze-setup-regenerate-command-images-r4" x="24.4" y="1288.8" textLength="109.8" clip-path="url(#breeze-setup-regenerate-command-images-line-52)">--verbose</text><text class="breeze-setup-regenerate-command-images-r7" x="158.6" y="1288.8" textLength="24.4" clip-path="url(#breeze-setup-regenerate-command-im [...]
+</text><text class="breeze-setup-regenerate-command-images-r5" x="0" y="1313.2" textLength="12.2" clip-path="url(#breeze-setup-regenerate-command-images-line-53)">│</text><text class="breeze-setup-regenerate-command-images-r4" x="24.4" y="1313.2" textLength="109.8" clip-path="url(#breeze-setup-regenerate-command-images-line-53)">--dry-run</text><text class="breeze-setup-regenerate-command-images-r7" x="158.6" y="1313.2" textLength="24.4" clip-path="url(#breeze-setup-regenerate-command-im [...]
+</text><text class="breeze-setup-regenerate-command-images-r5" x="0" y="1337.6" textLength="12.2" clip-path="url(#breeze-setup-regenerate-command-images-line-54)">│</text><text class="breeze-setup-regenerate-command-images-r4" x="24.4" y="1337.6" textLength="109.8" clip-path="url(#breeze-setup-regenerate-command-images-line-54)">--help&#160;&#160;&#160;</text><text class="breeze-setup-regenerate-command-images-r7" x="158.6" y="1337.6" textLength="24.4" clip-path="url(#breeze-setup-regene [...]
+</text><text class="breeze-setup-regenerate-command-images-r5" x="0" y="1362" textLength="1464" clip-path="url(#breeze-setup-regenerate-command-images-line-55)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text class="breeze-setup-regenerate-command-images-r1" x="1464" y="1362" textLength="12.2" clip-path="url(#breeze-setup-regenerate-command-images-line-55)">
 </text>
     </g>
     </g>
diff --git a/dev/breeze/doc/images/output_setup_regenerate-command-images.txt b/dev/breeze/doc/images/output_setup_regenerate-command-images.txt
index d5eb31a16b7..c925b44aa64 100644
--- a/dev/breeze/doc/images/output_setup_regenerate-command-images.txt
+++ b/dev/breeze/doc/images/output_setup_regenerate-command-images.txt
@@ -1 +1 @@
-57d31722815e46eeb1cdf1b92d5a87b1
+b34bcd0ca3348d1279d48f96682a25e5
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 f6ac278bb35..ec86ecc46a0 100644
--- a/dev/breeze/src/airflow_breeze/commands/release_candidate_command.py
+++ b/dev/breeze/src/airflow_breeze/commands/release_candidate_command.py
@@ -54,7 +54,7 @@ from airflow_breeze.utils.reproducible import get_source_date_epoch, repack_dete
 from airflow_breeze.utils.run_utils import run_command
 from airflow_breeze.utils.shared_options import get_dry_run
 
-RC_PATTERN = re.compile(r"^(?P<major>\d+)\.(?P<minor>\d+)\.(?P<patch>\d+)rc(?P<rc>\d+)$")
+PRE_RELEASE_PATTERN = re.compile(r"^(?P<major>\d+)\.(?P<minor>\d+)\.(?P<patch>\d+)(?:b|rc)(?P<pre>\d+)$")
 SVN_NUM_TRIES = 3
 SVN_OPERATION_RETRY_DELAY = 5
 
@@ -449,6 +449,32 @@ def generate_and_push_constraints(version, version_branch):
     publish_constraints(version=version, ref=f"v{version_branch}-stable")
 
 
+def validate_test_branch_exists(version_branch, remote_name):
+    """A beta is cut from vX-Y-test; the stable branch does not exist yet during the beta phase."""
+    console_print(f"[info]Validating test branch exists for {version_branch}...")
+    test_branch = f"v{version_branch}-test"
+    run_command(["git", "fetch", remote_name], check=True)
+    result = run_command(["git", "branch", "-r"], check=True, capture_output=True, text=True)
+    if f"{remote_name}/{test_branch}" not in result.stdout:
+        console_print(f"[error]Test branch '{remote_name}/{test_branch}' does not exist!")
+        console_print("Available remote branches:")
+        run_command(["git", "branch", "-r"])
+        exit(1)
+    console_print(f"[success]Test branch '{remote_name}/{test_branch}' exists")
+
+
+def checkout_test_branch_tip(version_branch, remote_name):
+    """Check out the vX-Y-test tip so the beta is tagged from exactly what was pushed to the branch.
+
+    The version-bump and release-notes commits are pushed to vX-Y-test before the beta is cut, so the
+    beta tag is just the branch tip - no sync PR and no merge.
+    """
+    test_branch = f"v{version_branch}-test"
+    run_command(["git", "checkout", test_branch], check=True)
+    run_command(["git", "reset", "--hard", f"{remote_name}/{test_branch}"], check=True)
+    console_print(f"[success]Checked out {remote_name}/{test_branch} tip for tagging")
+
+
 def clone_asf_repo(version, repo_root):
     if confirm_action("Do you want to clone asf repo?"):
         os.chdir(repo_root)
@@ -647,7 +673,7 @@ def remove_old_releases(version, task_sdk_version, repo_root):
         if entry.name == version:
             # Don't remove the current RC
             continue
-        if entry.is_dir() and RC_PATTERN.match(entry.name):
+        if entry.is_dir() and PRE_RELEASE_PATTERN.match(entry.name):
             old_releases.append(entry.name)
     old_releases.sort()
     console_print(f"The following old Airflow releases should be removed: {old_releases}")
@@ -669,7 +695,7 @@ def remove_old_releases(version, task_sdk_version, repo_root):
             if entry.name == task_sdk_version:
                 # Don't remove the current RC
                 continue
-            if entry.is_dir() and RC_PATTERN.match(entry.name):
+            if entry.is_dir() and PRE_RELEASE_PATTERN.match(entry.name):
                 old_task_sdk_releases.append(entry.name)
         old_task_sdk_releases.sort()
         console_print(f"The following old Task SDK releases should be removed: {old_task_sdk_releases}")
@@ -859,3 +885,111 @@ def publish_release_candidate(
 
     console_print()
     console_print("Done!")
+
+
+@release_management_group.command(
+    name="start-beta-process",
+    short_help="Start beta process",
+    help="Start the process for releasing a new beta pre-release.",
+)
+@click.option("--version", required=True, help="The beta version e.g. 3.4.0b1")
+@click.option("--task-sdk-version", required=True, help="The task SDK version e.g. 1.5.0b1.")
+@click.option(
+    "--remote-name",
+    default="upstream",
+    help=(
+        "Git remote name that tracks apache/airflow and receives release tags / branch pushes "
+        "(default: 'upstream' per the standard remote naming convention — "
+        "see contributing-docs/10_working_with_git.rst). Override if your release clone uses a "
+        "different name (for example 'origin' when you clone apache/airflow directly)."
+    ),
+)
+@option_answer
+@option_dry_run
+@option_verbose
+def publish_beta(version, task_sdk_version, remote_name):
+    """Cut a beta pre-release from vX-Y-test.
+
+    A beta is released from vX-Y-test only - there is no vX-Y-stable branch yet and no sync PR. The
+    version-bump and release-notes commits are pushed to vX-Y-test beforehand (via normal PRs); this
+    command tags the vX-Y-test tip and resolves the constraints through the release-constraints
+    workflow from vX-Y-test, the same way an rc does.
+    """
+    from packaging.version import Version
+
+    airflow_version = Version(version)
+    if not airflow_version.is_prerelease or airflow_version.pre is None or airflow_version.pre[0] != "b":
+        exit("--version value must be a beta pre-release, e.g. 3.4.0b1")
+
+    version_suffix = airflow_version.pre[0] + str(airflow_version.pre[1])
+    version_branch = str(airflow_version.release[0]) + "-" + str(airflow_version.release[1])
+    version_without_beta = airflow_version.base_version
+
+    task_sdk_version_obj = Version(task_sdk_version)
+    task_sdk_version_without_beta = task_sdk_version_obj.base_version
+
+    os.chdir(AIRFLOW_ROOT_PATH)
+    airflow_repo_root = os.getcwd()
+
+    if not get_dry_run():
+        validate_remote_tracks_apache_airflow(remote_name)
+        validate_git_status()
+        validate_test_branch_exists(version_branch, remote_name)
+        validate_tag_does_not_exist(version, remote_name)
+        validate_tag_does_not_exist(f"task-sdk/{task_sdk_version}", remote_name)
+
+    console_print()
+    console_print(f"Airflow version: {version}")
+    console_print(f"Task SDK version: {task_sdk_version}")
+    console_print(f"version_suffix: {version_suffix}")
+    console_print(f"version_branch: {version_branch}")
+    console_print(f"version_without_beta: {version_without_beta}")
+    console_print(f"task_sdk_version_without_beta: {task_sdk_version_without_beta}")
+    console_print(f"airflow_repo_root: {airflow_repo_root}")
+    console_print(f"remote_name: {remote_name}")
+    console_print()
+    console_print(f"Below are your git remotes. We will push to {remote_name}:")
+    run_command(["git", "remote", "-v"])
+    console_print()
+    confirm_action("Verify that the above information is correct. Do you want to continue?", abort=True)
+
+    # Tag the vX-Y-test tip directly - no sync PR, no merge.
+    if not get_dry_run():
+        checkout_test_branch_tip(version_branch, remote_name)
+    git_tag(version, f"Apache Airflow {version}")
+    git_tag(f"task-sdk/{task_sdk_version}", f"Airflow Task SDK {task_sdk_version}")
+    git_clean()
+    source_date_epoch = get_source_date_epoch(AIRFLOW_ROOT_PATH)
+    shutil.rmtree(AIRFLOW_DIST_PATH, ignore_errors=True)
+    if confirm_action("Use docker to create artifacts?"):
+        create_artifacts_with_docker()
+    elif confirm_action("Use hatch to create artifacts?"):
+        create_artifacts_with_hatch(source_date_epoch)
+    if confirm_action("Create tarball?"):
+        tarball_release(
+            version=version_without_beta,
+            source_date_epoch=source_date_epoch,
+            tarball_type=TarBallType.AIRFLOW,
+            tag=version,
+        )
+    test_airflow()
+    sign_the_release(airflow_repo_root)
+    # Resolve and tag the constraints via the release-constraints workflow from the vX-Y-test sources
+    # the beta is cut from. Like an rc, it allows the provider rc wave and lands on its own
+    # constraints-X.Y.0bN branch/tag without moving the shared constraints-X-Y branch.
+    publish_constraints(version=version, ref=f"v{version_branch}-test")
+    clone_asf_repo(version, airflow_repo_root)
+    move_artifacts_to_svn(
+        version, version_without_beta, task_sdk_version, task_sdk_version_without_beta, airflow_repo_root
+    )
+    push_artifacts_to_asf_repo(version, task_sdk_version, airflow_repo_root)
+    remove_old_releases(version, task_sdk_version, airflow_repo_root)
+    delete_asf_repo(airflow_repo_root)
+    prepare_pypi_packages(version, version_suffix, airflow_repo_root)
+    push_packages_to_pypi(version)
+    push_release_candidate_tag_to_github(version, remote_name)
+    push_release_candidate_tag_to_github(f"task-sdk/{task_sdk_version}", remote_name)
+    os.chdir(airflow_repo_root)
+
+    console_print()
+    console_print("Done!")
diff --git a/dev/breeze/src/airflow_breeze/commands/release_management_commands_config.py b/dev/breeze/src/airflow_breeze/commands/release_management_commands_config.py
index 4c6175d5949..3cf90f73dc3 100644
--- a/dev/breeze/src/airflow_breeze/commands/release_management_commands_config.py
+++ b/dev/breeze/src/airflow_breeze/commands/release_management_commands_config.py
@@ -22,6 +22,7 @@ RELEASE_AIRFLOW_COMMANDS: dict[str, str | list[str]] = {
         "create-minor-branch",
         "prepare-airflow-distributions",
         "prepare-tarball",
+        "start-beta-process",
         "start-rc-process",
         "start-release",
         "release-prod-images",
@@ -500,6 +501,16 @@ RELEASE_MANAGEMENT_PARAMETERS: dict[str, list[dict[str, str | list[str]]]] = {
             "options": ["--provider-id", "--provider-version"],
         },
     ],
+    "breeze release-management start-beta-process": [
+        {
+            "name": "Start beta process flags",
+            "options": [
+                "--version",
+                "--task-sdk-version",
+                "--remote-name",
+            ],
+        }
+    ],
     "breeze release-management start-rc-process": [
         {
             "name": "Start RC process flags",
diff --git a/dev/breeze/src/airflow_breeze/utils/release_constraints.py b/dev/breeze/src/airflow_breeze/utils/release_constraints.py
index 103f45e750b..2565e430608 100644
--- a/dev/breeze/src/airflow_breeze/utils/release_constraints.py
+++ b/dev/breeze/src/airflow_breeze/utils/release_constraints.py
@@ -46,7 +46,15 @@ def publish_constraints(*, version: str, ref: str, workflow_branch: str = "main"
     (``3.3.1``) resolves against the published releases and commits onto ``constraints-X-Y``, which
     is what makes the released constraints the baseline everything downstream reads.
     """
-    stage = "candidate" if "rc" in version else "final"
+    from packaging.version import Version
+
+    parsed = Version(version)
+    if not parsed.is_prerelease:
+        stage = "final"
+    elif parsed.pre and parsed.pre[0] == "b":
+        stage = "beta"
+    else:
+        stage = "candidate"
     if not confirm_action(
         f"Trigger the release-constraints workflow for the {stage} {version} (resolved from {ref})?"
     ):
diff --git a/dev/breeze/tests/test_release_candidate_command.py b/dev/breeze/tests/test_release_candidate_command.py
index 8f50ab526bb..1877590a2d4 100644
--- a/dev/breeze/tests/test_release_candidate_command.py
+++ b/dev/breeze/tests/test_release_candidate_command.py
@@ -148,7 +148,7 @@ def test_remove_old_releases_only_collects_rc_directories(monkeypatch, rc_cmd):
     # Act
     rc_cmd.remove_old_releases(version=version, task_sdk_version=task_sdk_version, repo_root=repo_root)
 
-    # Assert: only directory entries matching RC_PATTERN, excluding current version, and sorted.
+    # Assert: only directory entries matching PRE_RELEASE_PATTERN, excluding current version, and sorted.
     assert f"{repo_root}/asf-dist/dev/airflow" in chdir_calls
     assert repo_root in chdir_calls
     assert (
@@ -728,3 +728,89 @@ def test_push_artifacts_to_asf_repo_completes_successfully(monkeypatch, rc_cmd):
         "Verify that the files are available here: https://dist.apache.org/repos/dist/dev/airflow/"
         in console_messages
     )
+
+
+# --- start-beta-process ---------------------------------------------------------------------------
+
+
+@pytest.mark.parametrize(
+    ("name", "matches"),
+    [
+        pytest.param("3.4.0rc1", True, id="rc"),
+        pytest.param("3.4.0b1", True, id="beta"),
+        pytest.param("3.4.0b2", True, id="later-beta"),
+        pytest.param("3.4.0", False, id="final"),
+        pytest.param("3.4.0a1", False, id="alpha"),
+        pytest.param("not-a-release", False, id="garbage"),
+    ],
+)
+def test_pre_release_pattern_matches_rc_and_beta(rc_cmd, name, matches):
+    """Old-release cleanup collects rc and beta directories, not finals or anything else."""
+    assert bool(rc_cmd.PRE_RELEASE_PATTERN.match(name)) is matches
+
+
+def test_remove_old_releases_collects_beta_directories(monkeypatch, rc_cmd):
+    """A beta run offers to remove older beta directories, not only rc ones."""
+    version = "3.4.0b2"
+    task_sdk_version = "1.5.0b2"
+    repo_root = "/repo/root"
+
+    entries = [
+        FakeDirEntry(version, is_dir=True),  # current beta: skipped
+        FakeDirEntry("3.4.0b1", is_dir=True),  # old beta: collected
+        FakeDirEntry("3.4.0", is_dir=True),  # final: excluded
+    ]
+    console_messages: list[str] = []
+
+    monkeypatch.setattr(rc_cmd.os, "chdir", lambda path: None)
+    monkeypatch.setattr(rc_cmd.os, "scandir", lambda: iter(entries))
+    monkeypatch.setattr(rc_cmd.os.path, "exists", lambda path: False)
+    monkeypatch.setattr(
+        rc_cmd, "confirm_action", lambda prompt, **k: prompt == "Do you want to look for old RCs to remove?"
+    )
+    monkeypatch.setattr(rc_cmd, "console_print", lambda msg="": console_messages.append(str(msg)))
+    monkeypatch.setattr(rc_cmd, "run_command", lambda *a, **k: None)
+
+    rc_cmd.remove_old_releases(version=version, task_sdk_version=task_sdk_version, repo_root=repo_root)
+
+    assert "The following old Airflow releases should be removed: ['3.4.0b1']" in console_messages
+
+
+@pytest.mark.parametrize(
+    ("remote_branches", "should_exit"),
+    [
+        pytest.param("  origin/v3-4-test\n", False, id="passes-with-test-branch"),
+        pytest.param("  origin/main\n", True, id="exits-without-test-branch"),
+    ],
+)
+def test_validate_test_branch_exists(monkeypatch, rc_cmd, remote_branches, should_exit):
+    """A beta needs only vX-Y-test; it must not require a stable branch."""
+    import types
+
+    def fake_run_command(cmd, **kwargs):
+        if cmd[:3] == ["git", "branch", "-r"] and kwargs.get("capture_output"):
+            return types.SimpleNamespace(stdout=remote_branches)
+        return None
+
+    monkeypatch.setattr(rc_cmd, "run_command", fake_run_command)
+    monkeypatch.setattr(rc_cmd, "console_print", lambda *a, **k: None)
+
+    if should_exit:
+        with pytest.raises(SystemExit):
+            rc_cmd.validate_test_branch_exists("3-4", "origin")
+    else:
+        rc_cmd.validate_test_branch_exists("3-4", "origin")
+
+
+def test_checkout_test_branch_tip_resets_to_remote_tip(monkeypatch, rc_cmd):
+    """The beta is tagged from exactly the pushed vX-Y-test tip (checkout + hard reset to remote)."""
+    run_command_calls: list[list[str]] = []
+    monkeypatch.setattr(rc_cmd, "console_print", lambda *a, **k: None)
+    monkeypatch.setattr(rc_cmd, "run_command", lambda cmd, **k: run_command_calls.append(cmd))
+
+    rc_cmd.checkout_test_branch_tip("3-4", "origin")
+
+    assert run_command_calls == [
+        ["git", "checkout", "v3-4-test"],
+        ["git", "reset", "--hard", "origin/v3-4-test"],
+    ]
diff --git a/dev/breeze/tests/test_release_constraints.py b/dev/breeze/tests/test_release_constraints.py
index db914d97722..84e6b2144a9 100644
--- a/dev/breeze/tests/test_release_constraints.py
+++ b/dev/breeze/tests/test_release_constraints.py
@@ -77,6 +77,7 @@ def test_nothing_is_dispatched_when_declined(monkeypatch, triggered):
     ("version", "expected_stage"),
     [
         pytest.param("3.1.3rc2", "candidate", id="rc-is-a-candidate"),
+        pytest.param("3.4.0b1", "beta", id="beta-is-a-beta"),
         pytest.param("3.1.3", "final", id="plain-version-is-final"),
     ],
 )