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

amoghdesai 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 c0e9952314d Add pre-commit hook to prevent task SDK imports in airflow 
core (#53700)
c0e9952314d is described below

commit c0e9952314d110c439825d382690117386bc4f47
Author: Amogh Desai <[email protected]>
AuthorDate: Fri Jul 25 11:56:13 2025 +0530

    Add pre-commit hook to prevent task SDK imports in airflow core (#53700)
---
 .pre-commit-config.yaml                         |  94 +++++++++++++++++
 contributing-docs/08_static_code_checks.rst     |   2 +
 dev/breeze/doc/images/output_static-checks.svg  | 128 ++++++++++++------------
 dev/breeze/doc/images/output_static-checks.txt  |   2 +-
 dev/breeze/src/airflow_breeze/pre_commit_ids.py |   1 +
 scripts/ci/pre_commit/check_sdk_imports.py      |  78 +++++++++++++++
 6 files changed, 242 insertions(+), 63 deletions(-)

diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml
index 048cda1db6e..8c22927419a 100644
--- a/.pre-commit-config.yaml
+++ b/.pre-commit-config.yaml
@@ -1605,4 +1605,98 @@ repos:
         types: [python]
         files: ^providers/.*/src/airflow/providers/.*\.py$
         require_serial: true
+      - id: check-sdk-imports
+        name: Check for SDK imports in core files
+        entry: ./scripts/ci/pre_commit/check_sdk_imports.py
+        language: python
+        types: [python]
+        files: ^airflow-core/src/airflow/
+        exclude: |
+          (?x)
+          # Allow SDK imports in these legitimate locations
+          ^airflow-core/src/airflow/example_dags/.*\.py$|
+
+          # TODO: These files need to be refactored to remove SDK coupling
+          ^airflow-core/src/airflow/__init__\.py$|
+          ^airflow-core/src/airflow/models/__init__\.py$|
+          ^airflow-core/src/airflow/api/common/mark_tasks\.py$|
+          
^airflow-core/src/airflow/api_fastapi/core_api/datamodels/assets\.py$|
+          ^airflow-core/src/airflow/api_fastapi/core_api/datamodels/hitl\.py$|
+          
^airflow-core/src/airflow/api_fastapi/core_api/datamodels/variables\.py$|
+          ^airflow-core/src/airflow/api_fastapi/core_api/routes/ui/grid\.py$|
+          
^airflow-core/src/airflow/api_fastapi/core_api/routes/ui/structure\.py$|
+          
^airflow-core/src/airflow/api_fastapi/core_api/services/ui/connections\.py$|
+          ^airflow-core/src/airflow/api_fastapi/core_api/services/ui/grid\.py$|
+          ^airflow-core/src/airflow/api_fastapi/execution_api/routes/hitl\.py$|
+          
^airflow-core/src/airflow/api_fastapi/execution_api/routes/task_instances\.py$|
+          ^airflow-core/src/airflow/api_fastapi/logging/decorators\.py$|
+          ^airflow-core/src/airflow/assets/evaluation\.py$|
+          ^airflow-core/src/airflow/assets/manager\.py$|
+          ^airflow-core/src/airflow/cli/commands/connection_command\.py$|
+          ^airflow-core/src/airflow/cli/commands/task_command\.py$|
+          ^airflow-core/src/airflow/configuration\.py$|
+          ^airflow-core/src/airflow/dag_processing/collection\.py$|
+          ^airflow-core/src/airflow/dag_processing/manager\.py$|
+          ^airflow-core/src/airflow/dag_processing/processor\.py$|
+          ^airflow-core/src/airflow/datasets/metadata\.py$|
+          ^airflow-core/src/airflow/exceptions\.py$|
+          ^airflow-core/src/airflow/executors/local_executor\.py$|
+          ^airflow-core/src/airflow/jobs/triggerer_job_runner\.py$|
+          ^airflow-core/src/airflow/lineage/hook\.py$|
+          ^airflow-core/src/airflow/listeners/spec/asset\.py$|
+          ^airflow-core/src/airflow/listeners/spec/taskinstance\.py$|
+          ^airflow-core/src/airflow/logging/remote\.py$|
+          ^airflow-core/src/airflow/models/asset\.py$|
+          ^airflow-core/src/airflow/models/baseoperator\.py$|
+          ^airflow-core/src/airflow/models/connection\.py$|
+          ^airflow-core/src/airflow/models/dag\.py$|
+          ^airflow-core/src/airflow/models/dagbag\.py$|
+          ^airflow-core/src/airflow/models/dagrun\.py$|
+          ^airflow-core/src/airflow/models/mappedoperator\.py$|
+          ^airflow-core/src/airflow/models/operator\.py$|
+          ^airflow-core/src/airflow/models/param\.py$|
+          ^airflow-core/src/airflow/models/serialized_dag\.py$|
+          ^airflow-core/src/airflow/models/taskinstance\.py$|
+          ^airflow-core/src/airflow/models/taskinstancekey\.py$|
+          ^airflow-core/src/airflow/models/taskmap\.py$|
+          ^airflow-core/src/airflow/models/taskreschedule\.py$|
+          ^airflow-core/src/airflow/models/variable\.py$|
+          ^airflow-core/src/airflow/operators/subdag\.py$|
+          ^airflow-core/src/airflow/serialization/dag\.py$|
+          ^airflow-core/src/airflow/serialization/enums\.py$|
+          ^airflow-core/src/airflow/serialization/serialized_objects\.py$|
+          ^airflow-core/src/airflow/task/task_runner/bash_task_runner\.py$|
+          ^airflow-core/src/airflow/task/task_runner/standard_task_runner\.py$|
+          ^airflow-core/src/airflow/utils/dag_cycle_tester\.py$|
+          ^airflow-core/src/airflow/utils/dag_parsing_context\.py$|
+          ^airflow-core/src/airflow/utils/decorators\.py$|
+          ^airflow-core/src/airflow/utils/operator_helpers\.py$|
+          ^airflow-core/src/airflow/utils/session\.py$|
+          ^airflow-core/src/airflow/utils/task_group\.py$|
+          ^airflow-core/src/airflow/utils/trigger_rule\.py$|
+          ^airflow-core/src/airflow/utils/xcom\.py$|
+          ^airflow-core/src/airflow/providers_manager\.py$|
+          ^airflow-core/src/airflow/timetables/assets\.py$|
+          ^airflow-core/src/airflow/ti_deps/deps/prev_dagrun_dep\.py$|
+          ^airflow-core/src/airflow/utils/context\.py$|
+          ^airflow-core/src/airflow/models/taskmixin\.py$|
+          ^airflow-core/src/airflow/utils/edgemodifier\.py$|
+          ^airflow-core/src/airflow/utils/email\.py$|
+          ^airflow-core/src/airflow/ti_deps/deps/trigger_rule_dep\.py$|
+          ^airflow-core/src/airflow/utils/helpers\.py$|
+          ^airflow-core/src/airflow/ti_deps/deps/mapped_task_upstream_dep\.py$|
+          ^airflow-core/src/airflow/utils/types\.py$|
+          ^airflow-core/src/airflow/utils/dag_edges\.py$|
+          ^airflow-core/src/airflow/utils/cli\.py$|
+          ^airflow-core/src/airflow/timetables/base\.py$|
+          ^airflow-core/src/airflow/utils/dot_renderer\.py$|
+          ^airflow-core/src/airflow/models/xcom_arg\.py$|
+          ^airflow-core/src/airflow/plugins_manager\.py$|
+          ^airflow-core/src/airflow/models/xcom\.py$|
+          ^airflow-core/src/airflow/timetables/simple\.py$|
+          ^airflow-core/src/airflow/settings\.py$|
+          ^airflow-core/src/airflow/models/renderedtifields\.py$|
+          ^airflow-core/src/airflow/serialization/helpers\.py$|
+          ^airflow-core/src/airflow/models/expandinput\.py$
+        additional_dependencies: ['rich>=12.4.4']
         ## ONLY ADD PRE-COMMITS HERE THAT REQUIRE CI IMAGE
diff --git a/contributing-docs/08_static_code_checks.rst 
b/contributing-docs/08_static_code_checks.rst
index 70569c1a8f3..81b7c4b43f4 100644
--- a/contributing-docs/08_static_code_checks.rst
+++ b/contributing-docs/08_static_code_checks.rst
@@ -227,6 +227,8 @@ require Breeze Docker image to be built locally.
 
+-----------------------------------------------------------+--------------------------------------------------------+---------+
 | check-safe-filter-usage-in-html                           | Don't use safe 
in templates                            |         |
 
+-----------------------------------------------------------+--------------------------------------------------------+---------+
+| check-sdk-imports                                         | Check for SDK 
imports in core files                    | *       |
++-----------------------------------------------------------+--------------------------------------------------------+---------+
 | check-significant-newsfragments-are-valid                 | Check 
significant newsfragments are valid              |         |
 
+-----------------------------------------------------------+--------------------------------------------------------+---------+
 | check-sql-dependency-common-data-structure                | Check dependency 
of SQL providers                      |         |
diff --git a/dev/breeze/doc/images/output_static-checks.svg 
b/dev/breeze/doc/images/output_static-checks.svg
index 0857d08d9d6..20a18306dee 100644
--- a/dev/breeze/doc/images/output_static-checks.svg
+++ b/dev/breeze/doc/images/output_static-checks.svg
@@ -1,4 +1,4 @@
-<svg class="rich-terminal" viewBox="0 0 1482 2270.4" 
xmlns="http://www.w3.org/2000/svg";>
+<svg class="rich-terminal" viewBox="0 0 1482 2294.7999999999997" 
xmlns="http://www.w3.org/2000/svg";>
     <!-- Generated with Rich https://www.textualize.io -->
     <style>
 
@@ -43,7 +43,7 @@
 
     <defs>
     <clipPath id="breeze-static-checks-clip-terminal">
-      <rect x="0" y="0" width="1463.0" height="2219.4" />
+      <rect x="0" y="0" width="1463.0" height="2243.7999999999997" />
     </clipPath>
     <clipPath id="breeze-static-checks-line-0">
     <rect x="0" y="1.5" width="1464" height="24.65"/>
@@ -315,9 +315,12 @@
 <clipPath id="breeze-static-checks-line-89">
     <rect x="0" y="2173.1" width="1464" height="24.65"/>
             </clipPath>
+<clipPath id="breeze-static-checks-line-90">
+    <rect x="0" y="2197.5" width="1464" height="24.65"/>
+            </clipPath>
     </defs>
 
-    <rect fill="#292929" stroke="rgba(255,255,255,0.35)" stroke-width="1" 
x="1" y="1" width="1480" height="2268.4" rx="8"/><text 
class="breeze-static-checks-title" fill="#c5c8c6" text-anchor="middle" x="740" 
y="27">Command:&#160;static-checks</text>
+    <rect fill="#292929" stroke="rgba(255,255,255,0.35)" stroke-width="1" 
x="1" y="1" width="1480" height="2292.8" rx="8"/><text 
class="breeze-static-checks-title" fill="#c5c8c6" text-anchor="middle" x="740" 
y="27">Command:&#160;static-checks</text>
             <g transform="translate(26,22)">
             <circle cx="0" cy="0" r="7" fill="#ff5f57"/>
             <circle cx="22" cy="0" r="7" fill="#febc2e"/>
@@ -359,65 +362,66 @@
 </text><text class="breeze-static-checks-r5" x="0" y="727.6" textLength="12.2" 
clip-path="url(#breeze-static-checks-line-29)">│</text><text 
class="breeze-static-checks-r7" x="451.4" y="727.6" textLength="988.2" 
clip-path="url(#breeze-static-checks-line-29)">check-provider-docs-valid&#160;|&#160;check-provider-yaml-valid&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><
 [...]
 </text><text class="breeze-static-checks-r5" x="0" y="752" textLength="12.2" 
clip-path="url(#breeze-static-checks-line-30)">│</text><text 
class="breeze-static-checks-r7" x="451.4" y="752" textLength="988.2" 
clip-path="url(#breeze-static-checks-line-30)">check-providers-subpackages-init-file-exist&#160;|&#160;check-pydevd-left-in-code&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text
 class="breeze-static-checks-r5" x="1451.8" y="752" textLength="12.2" 
clip-path="url(#bree [...]
 </text><text class="breeze-static-checks-r5" x="0" y="776.4" textLength="12.2" 
clip-path="url(#breeze-static-checks-line-31)">│</text><text 
class="breeze-static-checks-r7" x="451.4" y="776.4" textLength="988.2" 
clip-path="url(#breeze-static-checks-line-31)">check-pytest-mark-db-test-in-providers&#160;|&#160;check-revision-heads-map&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text
 class="breeze-static-checks-r5" x="1451.8" y="776.4" te [...]
-</text><text class="breeze-static-checks-r5" x="0" y="800.8" textLength="12.2" 
clip-path="url(#breeze-static-checks-line-32)">│</text><text 
class="breeze-static-checks-r7" x="451.4" y="800.8" textLength="988.2" 
clip-path="url(#breeze-static-checks-line-32)">check-safe-filter-usage-in-html&#160;|&#160;check-significant-newsfragments-are-valid&#160;|&#160;&#160;&#160;&#160;</text><text
 class="breeze-static-checks-r5" x="1451.8" y="800.8" textLength="12.2" 
clip-path="url(#breeze-static-chec [...]
-</text><text class="breeze-static-checks-r5" x="0" y="825.2" textLength="12.2" 
clip-path="url(#breeze-static-checks-line-33)">│</text><text 
class="breeze-static-checks-r7" x="451.4" y="825.2" textLength="988.2" 
clip-path="url(#breeze-static-checks-line-33)">check-sql-dependency-common-data-structure&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160
 [...]
-</text><text class="breeze-static-checks-r5" x="0" y="849.6" textLength="12.2" 
clip-path="url(#breeze-static-checks-line-34)">│</text><text 
class="breeze-static-checks-r7" x="451.4" y="849.6" textLength="988.2" 
clip-path="url(#breeze-static-checks-line-34)">check-start-date-not-used-in-defaults&#160;|&#160;check-system-tests-present&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text
 class="breeze-static-checks-r5" x="1451.8" y="849.6" textLen [...]
-</text><text class="breeze-static-checks-r5" x="0" y="874" textLength="12.2" 
clip-path="url(#breeze-static-checks-line-35)">│</text><text 
class="breeze-static-checks-r7" x="451.4" y="874" textLength="988.2" 
clip-path="url(#breeze-static-checks-line-35)">check-system-tests-tocs&#160;|&#160;check-taskinstance-tis-attrs&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text
 clas [...]
-</text><text class="breeze-static-checks-r5" x="0" y="898.4" textLength="12.2" 
clip-path="url(#breeze-static-checks-line-36)">│</text><text 
class="breeze-static-checks-r7" x="451.4" y="898.4" textLength="988.2" 
clip-path="url(#breeze-static-checks-line-36)">check-template-context-variable-in-sync&#160;|&#160;check-template-fields-valid&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text
 class="breeze-static-checks-r5" x="1451.8" y="898.4" textLength="12.2" clip 
[...]
-</text><text class="breeze-static-checks-r5" x="0" y="922.8" textLength="12.2" 
clip-path="url(#breeze-static-checks-line-37)">│</text><text 
class="breeze-static-checks-r7" x="451.4" y="922.8" textLength="988.2" 
clip-path="url(#breeze-static-checks-line-37)">check-tests-in-the-right-folders&#160;|&#160;check-tests-unittest-testcase&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text
 class="breeze-static-checks-r5" x="1451.8" y="922. [...]
-</text><text class="breeze-static-checks-r5" x="0" y="947.2" textLength="12.2" 
clip-path="url(#breeze-static-checks-line-38)">│</text><text 
class="breeze-static-checks-r7" x="451.4" y="947.2" textLength="988.2" 
clip-path="url(#breeze-static-checks-line-38)">check-urlparse-usage-in-code&#160;|&#160;check-xml&#160;|&#160;check-zip-file-is-not-committed&#160;|&#160;&#160;&#160;&#160;&#160;</text><text
 class="breeze-static-checks-r5" x="1451.8" y="947.2" textLength="12.2" 
clip-path="url(#bre [...]
-</text><text class="breeze-static-checks-r5" x="0" y="971.6" textLength="12.2" 
clip-path="url(#breeze-static-checks-line-39)">│</text><text 
class="breeze-static-checks-r7" x="451.4" y="971.6" textLength="988.2" 
clip-path="url(#breeze-static-checks-line-39)">codespell&#160;|&#160;compile-fab-assets&#160;|&#160;compile-ui-assets&#160;|&#160;compile-ui-assets-dev&#160;|&#160;&#160;&#160;&#160;&#160;</text><text
 class="breeze-static-checks-r5" x="1451.8" y="971.6" textLength="12.2" 
clip-path [...]
-</text><text class="breeze-static-checks-r5" x="0" y="996" textLength="12.2" 
clip-path="url(#breeze-static-checks-line-40)">│</text><text 
class="breeze-static-checks-r7" x="451.4" y="996" textLength="988.2" 
clip-path="url(#breeze-static-checks-line-40)">create-missing-init-py-files-tests&#160;|&#160;debug-statements&#160;|&#160;detect-private-key&#160;|&#160;&#160;&#160;&#160;&#160;</text><text
 class="breeze-static-checks-r5" x="1451.8" y="996" textLength="12.2" 
clip-path="url(#breeze-st [...]
-</text><text class="breeze-static-checks-r5" x="0" y="1020.4" 
textLength="12.2" clip-path="url(#breeze-static-checks-line-41)">│</text><text 
class="breeze-static-checks-r7" x="451.4" y="1020.4" textLength="988.2" 
clip-path="url(#breeze-static-checks-line-41)">doctoc&#160;|&#160;end-of-file-fixer&#160;|&#160;fix-encoding-pragma&#160;|&#160;flynt&#160;|&#160;gci&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text
 class="b [...]
-</text><text class="breeze-static-checks-r5" x="0" y="1044.8" 
textLength="12.2" clip-path="url(#breeze-static-checks-line-42)">│</text><text 
class="breeze-static-checks-r7" x="451.4" y="1044.8" textLength="988.2" 
clip-path="url(#breeze-static-checks-line-42)">generate-airflow-diagrams&#160;|&#160;generate-airflowctl-datamodels&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text
 class="breeze-stat [...]
-</text><text class="breeze-static-checks-r5" x="0" y="1069.2" 
textLength="12.2" clip-path="url(#breeze-static-checks-line-43)">│</text><text 
class="breeze-static-checks-r7" x="451.4" y="1069.2" textLength="988.2" 
clip-path="url(#breeze-static-checks-line-43)">generate-airflowctl-help-images&#160;|&#160;generate-openapi-spec&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text
 cla [...]
-</text><text class="breeze-static-checks-r5" x="0" y="1093.6" 
textLength="12.2" clip-path="url(#breeze-static-checks-line-44)">│</text><text 
class="breeze-static-checks-r7" x="451.4" y="1093.6" textLength="988.2" 
clip-path="url(#breeze-static-checks-line-44)">generate-openapi-spec-fab&#160;|&#160;generate-pypi-readme&#160;|&#160;generate-tasksdk-datamodels&#160;|&#160;</text><text
 class="breeze-static-checks-r5" x="1451.8" y="1093.6" textLength="12.2" 
clip-path="url(#breeze-static-checks [...]
-</text><text class="breeze-static-checks-r5" x="0" y="1118" textLength="12.2" 
clip-path="url(#breeze-static-checks-line-45)">│</text><text 
class="breeze-static-checks-r7" x="451.4" y="1118" textLength="988.2" 
clip-path="url(#breeze-static-checks-line-45)">generate-volumes-for-sources&#160;|&#160;go-mockery&#160;|&#160;go-mod-tidy&#160;|&#160;gofmt&#160;|&#160;identity&#160;|&#160;&#160;&#160;&#160;&#160;</text><text
 class="breeze-static-checks-r5" x="1451.8" y="1118" textLength="12.2" cl [...]
-</text><text class="breeze-static-checks-r5" x="0" y="1142.4" 
textLength="12.2" clip-path="url(#breeze-static-checks-line-46)">│</text><text 
class="breeze-static-checks-r7" x="451.4" y="1142.4" textLength="988.2" 
clip-path="url(#breeze-static-checks-line-46)">insert-license&#160;|&#160;kubeconform&#160;|&#160;lint-chart-schema&#160;|&#160;lint-dockerfile&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text
 class="breeze-static-checks-r5" x="145 [...]
-</text><text class="breeze-static-checks-r5" x="0" y="1166.8" 
textLength="12.2" clip-path="url(#breeze-static-checks-line-47)">│</text><text 
class="breeze-static-checks-r7" x="451.4" y="1166.8" textLength="988.2" 
clip-path="url(#breeze-static-checks-line-47)">lint-helm-chart&#160;|&#160;lint-json-schema&#160;|&#160;lint-markdown&#160;|&#160;mixed-line-ending&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text
 class="breeze-static-checks-r5" x="1451.8" y="1166.8" text [...]
-</text><text class="breeze-static-checks-r5" x="0" y="1191.2" 
textLength="12.2" clip-path="url(#breeze-static-checks-line-48)">│</text><text 
class="breeze-static-checks-r7" x="451.4" y="1191.2" textLength="988.2" 
clip-path="url(#breeze-static-checks-line-48)">mypy-airflow-core&#160;|&#160;mypy-airflow-ctl&#160;|&#160;mypy-dev&#160;|&#160;mypy-devel-common&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text
 class="breeze-static-checks-r5" x="1451.8"  [...]
-</text><text class="breeze-static-checks-r5" x="0" y="1215.6" 
textLength="12.2" clip-path="url(#breeze-static-checks-line-49)">│</text><text 
class="breeze-static-checks-r7" x="451.4" y="1215.6" textLength="988.2" 
clip-path="url(#breeze-static-checks-line-49)">mypy-providers&#160;|&#160;mypy-task-sdk&#160;|&#160;pretty-format-json&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#16
 [...]
-</text><text class="breeze-static-checks-r5" x="0" y="1240" textLength="12.2" 
clip-path="url(#breeze-static-checks-line-50)">│</text><text 
class="breeze-static-checks-r7" x="451.4" y="1240" textLength="988.2" 
clip-path="url(#breeze-static-checks-line-50)">prevent-deprecated-sqlalchemy-usage&#160;|&#160;provider-version-compat&#160;|&#160;pylint&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text
 class="breeze-static-checks-r5" x="1451.8" y="1240" textLength="12.2" cl [...]
-</text><text class="breeze-static-checks-r5" x="0" y="1264.4" 
textLength="12.2" clip-path="url(#breeze-static-checks-line-51)">│</text><text 
class="breeze-static-checks-r7" x="451.4" y="1264.4" textLength="988.2" 
clip-path="url(#breeze-static-checks-line-51)">python-no-log-warn&#160;|&#160;replace-bad-characters&#160;|&#160;rst-backticks&#160;|&#160;ruff&#160;|&#160;ruff-format&#160;</text><text
 class="breeze-static-checks-r5" x="1451.8" y="1264.4" textLength="12.2" 
clip-path="url(#breez [...]
-</text><text class="breeze-static-checks-r5" x="0" y="1288.8" 
textLength="12.2" clip-path="url(#breeze-static-checks-line-52)">│</text><text 
class="breeze-static-checks-r7" x="451.4" y="1288.8" textLength="988.2" 
clip-path="url(#breeze-static-checks-line-52)">|&#160;shellcheck&#160;|&#160;trailing-whitespace&#160;|&#160;ts-compile-lint-simple-auth-manager-ui&#160;|&#160;&#160;&#160;&#160;</text><text
 class="breeze-static-checks-r5" x="1451.8" y="1288.8" textLength="12.2" 
clip-path="url(# [...]
-</text><text class="breeze-static-checks-r5" x="0" y="1313.2" 
textLength="12.2" clip-path="url(#breeze-static-checks-line-53)">│</text><text 
class="breeze-static-checks-r7" x="451.4" y="1313.2" textLength="988.2" 
clip-path="url(#breeze-static-checks-line-53)">ts-compile-lint-ui&#160;|&#160;update-black-version&#160;|&#160;update-breeze-cmd-output&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text
 class="breeze-static-checks-r5" x="1451.8" y="1313.2" text [...]
-</text><text class="breeze-static-checks-r5" x="0" y="1337.6" 
textLength="12.2" clip-path="url(#breeze-static-checks-line-54)">│</text><text 
class="breeze-static-checks-r7" x="451.4" y="1337.6" textLength="988.2" 
clip-path="url(#breeze-static-checks-line-54)">update-breeze-readme-config-hash&#160;|&#160;update-chart-dependencies&#160;|&#160;update-er-diagram&#160;</text><text
 class="breeze-static-checks-r5" x="1451.8" y="1337.6" textLength="12.2" 
clip-path="url(#breeze-static-checks-line [...]
-</text><text class="breeze-static-checks-r5" x="0" y="1362" textLength="12.2" 
clip-path="url(#breeze-static-checks-line-55)">│</text><text 
class="breeze-static-checks-r7" x="451.4" y="1362" textLength="988.2" 
clip-path="url(#breeze-static-checks-line-55)">|&#160;update-in-the-wild-to-be-sorted&#160;|&#160;update-inlined-dockerfile-scripts&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text
 class="breeze-static-checks-r5" x="1451.8" y="1362" textLength="12.2" cl [...]
-</text><text class="breeze-static-checks-r5" x="0" y="1386.4" 
textLength="12.2" clip-path="url(#breeze-static-checks-line-56)">│</text><text 
class="breeze-static-checks-r7" x="451.4" y="1386.4" textLength="988.2" 
clip-path="url(#breeze-static-checks-line-56)">update-installed-providers-to-be-sorted&#160;|&#160;update-installers-and-pre-commit&#160;|&#160;&#160;&#160;&#160;&#160;</text><text
 class="breeze-static-checks-r5" x="1451.8" y="1386.4" textLength="12.2" 
clip-path="url(#breeze-sta [...]
-</text><text class="breeze-static-checks-r5" x="0" y="1410.8" 
textLength="12.2" clip-path="url(#breeze-static-checks-line-57)">│</text><text 
class="breeze-static-checks-r7" x="451.4" y="1410.8" textLength="988.2" 
clip-path="url(#breeze-static-checks-line-57)">update-local-yml-file&#160;|&#160;update-migration-references&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#
 [...]
-</text><text class="breeze-static-checks-r5" x="0" y="1435.2" 
textLength="12.2" clip-path="url(#breeze-static-checks-line-58)">│</text><text 
class="breeze-static-checks-r7" x="451.4" y="1435.2" textLength="988.2" 
clip-path="url(#breeze-static-checks-line-58)">update-providers-build-files&#160;|&#160;update-providers-dependencies&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text
 class="breeze-static-checks- [...]
-</text><text class="breeze-static-checks-r5" x="0" y="1459.6" 
textLength="12.2" clip-path="url(#breeze-static-checks-line-59)">│</text><text 
class="breeze-static-checks-r7" x="451.4" y="1459.6" textLength="988.2" 
clip-path="url(#breeze-static-checks-line-59)">update-pyproject-toml&#160;|&#160;update-reproducible-source-date-epoch&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text
 class="breeze-static-checks-r5" x [...]
-</text><text class="breeze-static-checks-r5" x="0" y="1484" textLength="12.2" 
clip-path="url(#breeze-static-checks-line-60)">│</text><text 
class="breeze-static-checks-r7" x="451.4" y="1484" textLength="988.2" 
clip-path="url(#breeze-static-checks-line-60)">update-spelling-wordlist-to-be-sorted&#160;|&#160;update-supported-versions&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text
 class="breeze-static-checks-r5" x="1451.8" y="1484" textL [...]
-</text><text class="breeze-static-checks-r5" x="0" y="1508.4" 
textLength="12.2" clip-path="url(#breeze-static-checks-line-61)">│</text><text 
class="breeze-static-checks-r7" x="451.4" y="1508.4" textLength="988.2" 
clip-path="url(#breeze-static-checks-line-61)">update-vendored-in-k8s-json-schema&#160;|&#160;update-version&#160;|&#160;validate-chart-annotations&#160;</text><text
 class="breeze-static-checks-r5" x="1451.8" y="1508.4" textLength="12.2" 
clip-path="url(#breeze-static-checks-line [...]
-</text><text class="breeze-static-checks-r5" x="0" y="1532.8" 
textLength="12.2" clip-path="url(#breeze-static-checks-line-62)">│</text><text 
class="breeze-static-checks-r7" x="451.4" y="1532.8" textLength="988.2" 
clip-path="url(#breeze-static-checks-line-62)">|&#160;validate-operators-init&#160;|&#160;yamllint&#160;|&#160;zizmor)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160
 [...]
-</text><text class="breeze-static-checks-r5" x="0" y="1557.2" 
textLength="12.2" clip-path="url(#breeze-static-checks-line-63)">│</text><text 
class="breeze-static-checks-r4" x="24.4" y="1557.2" textLength="268.4" 
clip-path="url(#breeze-static-checks-line-63)">--show-diff-on-failure</text><text
 class="breeze-static-checks-r6" x="402.6" y="1557.2" textLength="24.4" 
clip-path="url(#breeze-static-checks-line-63)">-s</text><text 
class="breeze-static-checks-r1" x="451.4" y="1557.2" textLength=" [...]
-</text><text class="breeze-static-checks-r5" x="0" y="1581.6" 
textLength="12.2" clip-path="url(#breeze-static-checks-line-64)">│</text><text 
class="breeze-static-checks-r4" x="24.4" y="1581.6" textLength="292.8" 
clip-path="url(#breeze-static-checks-line-64)">--initialize-environment</text><text
 class="breeze-static-checks-r1" x="451.4" y="1581.6" textLength="549" 
clip-path="url(#breeze-static-checks-line-64)">Initialize&#160;environment&#160;before&#160;running&#160;checks.</text><text
 c [...]
-</text><text class="breeze-static-checks-r5" x="0" y="1606" textLength="12.2" 
clip-path="url(#breeze-static-checks-line-65)">│</text><text 
class="breeze-static-checks-r4" x="24.4" y="1606" textLength="353.8" 
clip-path="url(#breeze-static-checks-line-65)">--max-initialization-attempts</text><text
 class="breeze-static-checks-r1" x="451.4" y="1606" textLength="854" 
clip-path="url(#breeze-static-checks-line-65)">Maximum&#160;number&#160;of&#160;attempts&#160;to&#160;initialize&#160;environme
 [...]
-</text><text class="breeze-static-checks-r5" x="0" y="1630.4" 
textLength="12.2" clip-path="url(#breeze-static-checks-line-66)">│</text><text 
class="breeze-static-checks-r7" x="451.4" y="1630.4" textLength="854" 
clip-path="url(#breeze-static-checks-line-66)">(INTEGER&#160;RANGE)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#16
 [...]
-</text><text class="breeze-static-checks-r5" x="0" y="1654.8" 
textLength="12.2" clip-path="url(#breeze-static-checks-line-67)">│</text><text 
class="breeze-static-checks-r5" x="451.4" y="1654.8" textLength="854" 
clip-path="url(#breeze-static-checks-line-67)">[default:&#160;3;&#160;1&lt;=x&lt;=10]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#16
 [...]
-</text><text class="breeze-static-checks-r5" x="0" y="1679.2" 
textLength="1464" 
clip-path="url(#breeze-static-checks-line-68)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text
 class="breeze-static-checks-r1" x="1464" y="1679.2" textLength="12.2" 
clip-path="url(#breeze-static-checks-line-68)">
-</text><text class="breeze-static-checks-r5" x="0" y="1703.6" 
textLength="24.4" clip-path="url(#breeze-static-checks-line-69)">╭─</text><text 
class="breeze-static-checks-r5" x="24.4" y="1703.6" textLength="463.6" 
clip-path="url(#breeze-static-checks-line-69)">&#160;Selecting&#160;files&#160;to&#160;run&#160;the&#160;checks&#160;on&#160;</text><text
 class="breeze-static-checks-r5" x="488" y="1703.6" textLength="951.6" 
clip-path="url(#breeze-static-checks-line-69)">──────────────────────── [...]
-</text><text class="breeze-static-checks-r5" x="0" y="1728" textLength="12.2" 
clip-path="url(#breeze-static-checks-line-70)">│</text><text 
class="breeze-static-checks-r4" x="24.4" y="1728" textLength="73.2" 
clip-path="url(#breeze-static-checks-line-70)">--file</text><text 
class="breeze-static-checks-r6" x="256.2" y="1728" textLength="24.4" 
clip-path="url(#breeze-static-checks-line-70)">-f</text><text 
class="breeze-static-checks-r1" x="305" y="1728" textLength="427" 
clip-path="url(#breeze [...]
-</text><text class="breeze-static-checks-r5" x="0" y="1752.4" 
textLength="12.2" clip-path="url(#breeze-static-checks-line-71)">│</text><text 
class="breeze-static-checks-r4" x="24.4" y="1752.4" textLength="134.2" 
clip-path="url(#breeze-static-checks-line-71)">--all-files</text><text 
class="breeze-static-checks-r6" x="256.2" y="1752.4" textLength="24.4" 
clip-path="url(#breeze-static-checks-line-71)">-a</text><text 
class="breeze-static-checks-r1" x="305" y="1752.4" textLength="292.8" clip-p 
[...]
-</text><text class="breeze-static-checks-r5" x="0" y="1776.8" 
textLength="12.2" clip-path="url(#breeze-static-checks-line-72)">│</text><text 
class="breeze-static-checks-r4" x="24.4" y="1776.8" textLength="146.4" 
clip-path="url(#breeze-static-checks-line-72)">--commit-ref</text><text 
class="breeze-static-checks-r6" x="256.2" y="1776.8" textLength="24.4" 
clip-path="url(#breeze-static-checks-line-72)">-r</text><text 
class="breeze-static-checks-r1" x="305" y="1776.8" textLength="1134.6" clip 
[...]
-</text><text class="breeze-static-checks-r5" x="0" y="1801.2" 
textLength="12.2" clip-path="url(#breeze-static-checks-line-73)">│</text><text 
class="breeze-static-checks-r1" x="305" y="1801.2" textLength="183" 
clip-path="url(#breeze-static-checks-line-73)">exclusive&#160;with&#160;</text><text
 class="breeze-static-checks-r4" x="488" y="1801.2" textLength="158.6" 
clip-path="url(#breeze-static-checks-line-73)">--last-commit</text><text 
class="breeze-static-checks-r1" x="646.6" y="1801.2" te [...]
-</text><text class="breeze-static-checks-r5" x="0" y="1825.6" 
textLength="12.2" clip-path="url(#breeze-static-checks-line-74)">│</text><text 
class="breeze-static-checks-r7" x="305" y="1825.6" textLength="1134.6" 
clip-path="url(#breeze-static-checks-line-74)">(TEXT)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160
 [...]
-</text><text class="breeze-static-checks-r5" x="0" y="1850" textLength="12.2" 
clip-path="url(#breeze-static-checks-line-75)">│</text><text 
class="breeze-static-checks-r4" x="24.4" y="1850" textLength="158.6" 
clip-path="url(#breeze-static-checks-line-75)">--last-commit</text><text 
class="breeze-static-checks-r6" x="256.2" y="1850" textLength="24.4" 
clip-path="url(#breeze-static-checks-line-75)">-c</text><text 
class="breeze-static-checks-r1" x="305" y="1850" textLength="793" 
clip-path="url [...]
-</text><text class="breeze-static-checks-r5" x="0" y="1874.4" 
textLength="12.2" clip-path="url(#breeze-static-checks-line-76)">│</text><text 
class="breeze-static-checks-r4" x="24.4" y="1874.4" textLength="207.4" 
clip-path="url(#breeze-static-checks-line-76)">--only-my-changes</text><text 
class="breeze-static-checks-r6" x="256.2" y="1874.4" textLength="24.4" 
clip-path="url(#breeze-static-checks-line-76)">-m</text><text 
class="breeze-static-checks-r1" x="305" y="1874.4" textLength="1134.6" [...]
-</text><text class="breeze-static-checks-r5" x="0" y="1898.8" 
textLength="12.2" clip-path="url(#breeze-static-checks-line-77)">│</text><text 
class="breeze-static-checks-r1" x="305" y="1898.8" textLength="1134.6" 
clip-path="url(#breeze-static-checks-line-77)">branch&#160;and&#160;HEAD&#160;of&#160;your&#160;branch.&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#1
 [...]
-</text><text class="breeze-static-checks-r5" x="0" y="1923.2" 
textLength="1464" 
clip-path="url(#breeze-static-checks-line-78)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text
 class="breeze-static-checks-r1" x="1464" y="1923.2" textLength="12.2" 
clip-path="url(#breeze-static-checks-line-78)">
-</text><text class="breeze-static-checks-r5" x="0" y="1947.6" 
textLength="24.4" clip-path="url(#breeze-static-checks-line-79)">╭─</text><text 
class="breeze-static-checks-r5" x="24.4" y="1947.6" textLength="463.6" 
clip-path="url(#breeze-static-checks-line-79)">&#160;Building&#160;image&#160;before&#160;running&#160;checks&#160;</text><text
 class="breeze-static-checks-r5" x="488" y="1947.6" textLength="951.6" 
clip-path="url(#breeze-static-checks-line-79)">──────────────────────────────────
 [...]
-</text><text class="breeze-static-checks-r5" x="0" y="1972" textLength="12.2" 
clip-path="url(#breeze-static-checks-line-80)">│</text><text 
class="breeze-static-checks-r4" x="24.4" y="1972" textLength="317.2" 
clip-path="url(#breeze-static-checks-line-80)">--skip-image-upgrade-check</text><text
 class="breeze-static-checks-r1" x="414.8" y="1972" textLength="536.8" 
clip-path="url(#breeze-static-checks-line-80)">Skip&#160;checking&#160;if&#160;the&#160;CI&#160;image&#160;is&#160;up&#160;to&#1
 [...]
-</text><text class="breeze-static-checks-r5" x="0" y="1996.4" 
textLength="12.2" clip-path="url(#breeze-static-checks-line-81)">│</text><text 
class="breeze-static-checks-r4" x="24.4" y="1996.4" textLength="158.6" 
clip-path="url(#breeze-static-checks-line-81)">--force-build</text><text 
class="breeze-static-checks-r1" x="414.8" y="1996.4" textLength="707.6" 
clip-path="url(#breeze-static-checks-line-81)">Force&#160;image&#160;build&#160;no&#160;matter&#160;if&#160;it&#160;is&#160;determined&
 [...]
-</text><text class="breeze-static-checks-r5" x="0" y="2020.8" 
textLength="12.2" clip-path="url(#breeze-static-checks-line-82)">│</text><text 
class="breeze-static-checks-r4" x="24.4" y="2020.8" textLength="231.8" 
clip-path="url(#breeze-static-checks-line-82)">--github-repository</text><text 
class="breeze-static-checks-r6" x="366" y="2020.8" textLength="24.4" 
clip-path="url(#breeze-static-checks-line-82)">-g</text><text 
class="breeze-static-checks-r1" x="414.8" y="2020.8" textLength="585.6 [...]
-</text><text class="breeze-static-checks-r5" x="0" y="2045.2" 
textLength="12.2" clip-path="url(#breeze-static-checks-line-83)">│</text><text 
class="breeze-static-checks-r4" x="24.4" y="2045.2" textLength="109.8" 
clip-path="url(#breeze-static-checks-line-83)">--builder</text><text 
class="breeze-static-checks-r1" x="414.8" y="2045.2" textLength="756.4" 
clip-path="url(#breeze-static-checks-line-83)">Buildx&#160;builder&#160;used&#160;to&#160;perform&#160;`docker&#160;buildx&#160;build`&#160
 [...]
-</text><text class="breeze-static-checks-r5" x="0" y="2069.6" 
textLength="12.2" clip-path="url(#breeze-static-checks-line-84)">│</text><text 
class="breeze-static-checks-r5" x="414.8" y="2069.6" textLength="756.4" 
clip-path="url(#breeze-static-checks-line-84)">[default:&#160;autodetect]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#
 [...]
-</text><text class="breeze-static-checks-r5" x="0" y="2094" textLength="1464" 
clip-path="url(#breeze-static-checks-line-85)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text
 class="breeze-static-checks-r1" x="1464" y="2094" textLength="12.2" 
clip-path="url(#breeze-static-checks-line-85)">
-</text><text class="breeze-static-checks-r5" x="0" y="2118.4" 
textLength="24.4" clip-path="url(#breeze-static-checks-line-86)">╭─</text><text 
class="breeze-static-checks-r5" x="24.4" y="2118.4" textLength="195.2" 
clip-path="url(#breeze-static-checks-line-86)">&#160;Common&#160;options&#160;</text><text
 class="breeze-static-checks-r5" x="219.6" y="2118.4" textLength="1220" 
clip-path="url(#breeze-static-checks-line-86)">──────────────────────────────────────────────────────────────────────
 [...]
-</text><text class="breeze-static-checks-r5" x="0" y="2142.8" 
textLength="12.2" clip-path="url(#breeze-static-checks-line-87)">│</text><text 
class="breeze-static-checks-r4" x="24.4" y="2142.8" textLength="109.8" 
clip-path="url(#breeze-static-checks-line-87)">--dry-run</text><text 
class="breeze-static-checks-r6" x="158.6" y="2142.8" textLength="24.4" 
clip-path="url(#breeze-static-checks-line-87)">-D</text><text 
class="breeze-static-checks-r1" x="207.4" y="2142.8" textLength="719.8" clip-p 
[...]
-</text><text class="breeze-static-checks-r5" x="0" y="2167.2" 
textLength="12.2" clip-path="url(#breeze-static-checks-line-88)">│</text><text 
class="breeze-static-checks-r4" x="24.4" y="2167.2" textLength="109.8" 
clip-path="url(#breeze-static-checks-line-88)">--verbose</text><text 
class="breeze-static-checks-r6" x="158.6" y="2167.2" textLength="24.4" 
clip-path="url(#breeze-static-checks-line-88)">-v</text><text 
class="breeze-static-checks-r1" x="207.4" y="2167.2" textLength="585.6" clip-p 
[...]
-</text><text class="breeze-static-checks-r5" x="0" y="2191.6" 
textLength="12.2" clip-path="url(#breeze-static-checks-line-89)">│</text><text 
class="breeze-static-checks-r4" x="24.4" y="2191.6" textLength="73.2" 
clip-path="url(#breeze-static-checks-line-89)">--help</text><text 
class="breeze-static-checks-r6" x="158.6" y="2191.6" textLength="24.4" 
clip-path="url(#breeze-static-checks-line-89)">-h</text><text 
class="breeze-static-checks-r1" x="207.4" y="2191.6" textLength="329.4" 
clip-path= [...]
-</text><text class="breeze-static-checks-r5" x="0" y="2216" textLength="1464" 
clip-path="url(#breeze-static-checks-line-90)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text
 class="breeze-static-checks-r1" x="1464" y="2216" textLength="12.2" 
clip-path="url(#breeze-static-checks-line-90)">
+</text><text class="breeze-static-checks-r5" x="0" y="800.8" textLength="12.2" 
clip-path="url(#breeze-static-checks-line-32)">│</text><text 
class="breeze-static-checks-r7" x="451.4" y="800.8" textLength="988.2" 
clip-path="url(#breeze-static-checks-line-32)">check-safe-filter-usage-in-html&#160;|&#160;check-sdk-imports&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#16
 [...]
+</text><text class="breeze-static-checks-r5" x="0" y="825.2" textLength="12.2" 
clip-path="url(#breeze-static-checks-line-33)">│</text><text 
class="breeze-static-checks-r7" x="451.4" y="825.2" textLength="988.2" 
clip-path="url(#breeze-static-checks-line-33)">check-significant-newsfragments-are-valid&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;
 [...]
+</text><text class="breeze-static-checks-r5" x="0" y="849.6" textLength="12.2" 
clip-path="url(#breeze-static-checks-line-34)">│</text><text 
class="breeze-static-checks-r7" x="451.4" y="849.6" textLength="988.2" 
clip-path="url(#breeze-static-checks-line-34)">check-sql-dependency-common-data-structure&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160
 [...]
+</text><text class="breeze-static-checks-r5" x="0" y="874" textLength="12.2" 
clip-path="url(#breeze-static-checks-line-35)">│</text><text 
class="breeze-static-checks-r7" x="451.4" y="874" textLength="988.2" 
clip-path="url(#breeze-static-checks-line-35)">check-start-date-not-used-in-defaults&#160;|&#160;check-system-tests-present&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text
 class="breeze-static-checks-r5" x="1451.8" y="874" textLength="1 [...]
+</text><text class="breeze-static-checks-r5" x="0" y="898.4" textLength="12.2" 
clip-path="url(#breeze-static-checks-line-36)">│</text><text 
class="breeze-static-checks-r7" x="451.4" y="898.4" textLength="988.2" 
clip-path="url(#breeze-static-checks-line-36)">check-system-tests-tocs&#160;|&#160;check-taskinstance-tis-attrs&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text
  [...]
+</text><text class="breeze-static-checks-r5" x="0" y="922.8" textLength="12.2" 
clip-path="url(#breeze-static-checks-line-37)">│</text><text 
class="breeze-static-checks-r7" x="451.4" y="922.8" textLength="988.2" 
clip-path="url(#breeze-static-checks-line-37)">check-template-context-variable-in-sync&#160;|&#160;check-template-fields-valid&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text
 class="breeze-static-checks-r5" x="1451.8" y="922.8" textLength="12.2" clip 
[...]
+</text><text class="breeze-static-checks-r5" x="0" y="947.2" textLength="12.2" 
clip-path="url(#breeze-static-checks-line-38)">│</text><text 
class="breeze-static-checks-r7" x="451.4" y="947.2" textLength="988.2" 
clip-path="url(#breeze-static-checks-line-38)">check-tests-in-the-right-folders&#160;|&#160;check-tests-unittest-testcase&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text
 class="breeze-static-checks-r5" x="1451.8" y="947. [...]
+</text><text class="breeze-static-checks-r5" x="0" y="971.6" textLength="12.2" 
clip-path="url(#breeze-static-checks-line-39)">│</text><text 
class="breeze-static-checks-r7" x="451.4" y="971.6" textLength="988.2" 
clip-path="url(#breeze-static-checks-line-39)">check-urlparse-usage-in-code&#160;|&#160;check-xml&#160;|&#160;check-zip-file-is-not-committed&#160;|&#160;&#160;&#160;&#160;&#160;</text><text
 class="breeze-static-checks-r5" x="1451.8" y="971.6" textLength="12.2" 
clip-path="url(#bre [...]
+</text><text class="breeze-static-checks-r5" x="0" y="996" textLength="12.2" 
clip-path="url(#breeze-static-checks-line-40)">│</text><text 
class="breeze-static-checks-r7" x="451.4" y="996" textLength="988.2" 
clip-path="url(#breeze-static-checks-line-40)">codespell&#160;|&#160;compile-fab-assets&#160;|&#160;compile-ui-assets&#160;|&#160;compile-ui-assets-dev&#160;|&#160;&#160;&#160;&#160;&#160;</text><text
 class="breeze-static-checks-r5" x="1451.8" y="996" textLength="12.2" 
clip-path="url( [...]
+</text><text class="breeze-static-checks-r5" x="0" y="1020.4" 
textLength="12.2" clip-path="url(#breeze-static-checks-line-41)">│</text><text 
class="breeze-static-checks-r7" x="451.4" y="1020.4" textLength="988.2" 
clip-path="url(#breeze-static-checks-line-41)">create-missing-init-py-files-tests&#160;|&#160;debug-statements&#160;|&#160;detect-private-key&#160;|&#160;&#160;&#160;&#160;&#160;</text><text
 class="breeze-static-checks-r5" x="1451.8" y="1020.4" textLength="12.2" 
clip-path="url(# [...]
+</text><text class="breeze-static-checks-r5" x="0" y="1044.8" 
textLength="12.2" clip-path="url(#breeze-static-checks-line-42)">│</text><text 
class="breeze-static-checks-r7" x="451.4" y="1044.8" textLength="988.2" 
clip-path="url(#breeze-static-checks-line-42)">doctoc&#160;|&#160;end-of-file-fixer&#160;|&#160;fix-encoding-pragma&#160;|&#160;flynt&#160;|&#160;gci&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text
 class="b [...]
+</text><text class="breeze-static-checks-r5" x="0" y="1069.2" 
textLength="12.2" clip-path="url(#breeze-static-checks-line-43)">│</text><text 
class="breeze-static-checks-r7" x="451.4" y="1069.2" textLength="988.2" 
clip-path="url(#breeze-static-checks-line-43)">generate-airflow-diagrams&#160;|&#160;generate-airflowctl-datamodels&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text
 class="breeze-stat [...]
+</text><text class="breeze-static-checks-r5" x="0" y="1093.6" 
textLength="12.2" clip-path="url(#breeze-static-checks-line-44)">│</text><text 
class="breeze-static-checks-r7" x="451.4" y="1093.6" textLength="988.2" 
clip-path="url(#breeze-static-checks-line-44)">generate-airflowctl-help-images&#160;|&#160;generate-openapi-spec&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text
 cla [...]
+</text><text class="breeze-static-checks-r5" x="0" y="1118" textLength="12.2" 
clip-path="url(#breeze-static-checks-line-45)">│</text><text 
class="breeze-static-checks-r7" x="451.4" y="1118" textLength="988.2" 
clip-path="url(#breeze-static-checks-line-45)">generate-openapi-spec-fab&#160;|&#160;generate-pypi-readme&#160;|&#160;generate-tasksdk-datamodels&#160;|&#160;</text><text
 class="breeze-static-checks-r5" x="1451.8" y="1118" textLength="12.2" 
clip-path="url(#breeze-static-checks-line- [...]
+</text><text class="breeze-static-checks-r5" x="0" y="1142.4" 
textLength="12.2" clip-path="url(#breeze-static-checks-line-46)">│</text><text 
class="breeze-static-checks-r7" x="451.4" y="1142.4" textLength="988.2" 
clip-path="url(#breeze-static-checks-line-46)">generate-volumes-for-sources&#160;|&#160;go-mockery&#160;|&#160;go-mod-tidy&#160;|&#160;gofmt&#160;|&#160;identity&#160;|&#160;&#160;&#160;&#160;&#160;</text><text
 class="breeze-static-checks-r5" x="1451.8" y="1142.4" textLength="12 [...]
+</text><text class="breeze-static-checks-r5" x="0" y="1166.8" 
textLength="12.2" clip-path="url(#breeze-static-checks-line-47)">│</text><text 
class="breeze-static-checks-r7" x="451.4" y="1166.8" textLength="988.2" 
clip-path="url(#breeze-static-checks-line-47)">insert-license&#160;|&#160;kubeconform&#160;|&#160;lint-chart-schema&#160;|&#160;lint-dockerfile&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text
 class="breeze-static-checks-r5" x="145 [...]
+</text><text class="breeze-static-checks-r5" x="0" y="1191.2" 
textLength="12.2" clip-path="url(#breeze-static-checks-line-48)">│</text><text 
class="breeze-static-checks-r7" x="451.4" y="1191.2" textLength="988.2" 
clip-path="url(#breeze-static-checks-line-48)">lint-helm-chart&#160;|&#160;lint-json-schema&#160;|&#160;lint-markdown&#160;|&#160;mixed-line-ending&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text
 class="breeze-static-checks-r5" x="1451.8" y="1191.2" text [...]
+</text><text class="breeze-static-checks-r5" x="0" y="1215.6" 
textLength="12.2" clip-path="url(#breeze-static-checks-line-49)">│</text><text 
class="breeze-static-checks-r7" x="451.4" y="1215.6" textLength="988.2" 
clip-path="url(#breeze-static-checks-line-49)">mypy-airflow-core&#160;|&#160;mypy-airflow-ctl&#160;|&#160;mypy-dev&#160;|&#160;mypy-devel-common&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text
 class="breeze-static-checks-r5" x="1451.8"  [...]
+</text><text class="breeze-static-checks-r5" x="0" y="1240" textLength="12.2" 
clip-path="url(#breeze-static-checks-line-50)">│</text><text 
class="breeze-static-checks-r7" x="451.4" y="1240" textLength="988.2" 
clip-path="url(#breeze-static-checks-line-50)">mypy-providers&#160;|&#160;mypy-task-sdk&#160;|&#160;pretty-format-json&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#
 [...]
+</text><text class="breeze-static-checks-r5" x="0" y="1264.4" 
textLength="12.2" clip-path="url(#breeze-static-checks-line-51)">│</text><text 
class="breeze-static-checks-r7" x="451.4" y="1264.4" textLength="988.2" 
clip-path="url(#breeze-static-checks-line-51)">prevent-deprecated-sqlalchemy-usage&#160;|&#160;provider-version-compat&#160;|&#160;pylint&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text
 class="breeze-static-checks-r5" x="1451.8" y="1264.4" textLength="12 [...]
+</text><text class="breeze-static-checks-r5" x="0" y="1288.8" 
textLength="12.2" clip-path="url(#breeze-static-checks-line-52)">│</text><text 
class="breeze-static-checks-r7" x="451.4" y="1288.8" textLength="988.2" 
clip-path="url(#breeze-static-checks-line-52)">python-no-log-warn&#160;|&#160;replace-bad-characters&#160;|&#160;rst-backticks&#160;|&#160;ruff&#160;|&#160;ruff-format&#160;</text><text
 class="breeze-static-checks-r5" x="1451.8" y="1288.8" textLength="12.2" 
clip-path="url(#breez [...]
+</text><text class="breeze-static-checks-r5" x="0" y="1313.2" 
textLength="12.2" clip-path="url(#breeze-static-checks-line-53)">│</text><text 
class="breeze-static-checks-r7" x="451.4" y="1313.2" textLength="988.2" 
clip-path="url(#breeze-static-checks-line-53)">|&#160;shellcheck&#160;|&#160;trailing-whitespace&#160;|&#160;ts-compile-lint-simple-auth-manager-ui&#160;|&#160;&#160;&#160;&#160;</text><text
 class="breeze-static-checks-r5" x="1451.8" y="1313.2" textLength="12.2" 
clip-path="url(# [...]
+</text><text class="breeze-static-checks-r5" x="0" y="1337.6" 
textLength="12.2" clip-path="url(#breeze-static-checks-line-54)">│</text><text 
class="breeze-static-checks-r7" x="451.4" y="1337.6" textLength="988.2" 
clip-path="url(#breeze-static-checks-line-54)">ts-compile-lint-ui&#160;|&#160;update-black-version&#160;|&#160;update-breeze-cmd-output&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text
 class="breeze-static-checks-r5" x="1451.8" y="1337.6" text [...]
+</text><text class="breeze-static-checks-r5" x="0" y="1362" textLength="12.2" 
clip-path="url(#breeze-static-checks-line-55)">│</text><text 
class="breeze-static-checks-r7" x="451.4" y="1362" textLength="988.2" 
clip-path="url(#breeze-static-checks-line-55)">update-breeze-readme-config-hash&#160;|&#160;update-chart-dependencies&#160;|&#160;update-er-diagram&#160;</text><text
 class="breeze-static-checks-r5" x="1451.8" y="1362" textLength="12.2" 
clip-path="url(#breeze-static-checks-line-55)"> [...]
+</text><text class="breeze-static-checks-r5" x="0" y="1386.4" 
textLength="12.2" clip-path="url(#breeze-static-checks-line-56)">│</text><text 
class="breeze-static-checks-r7" x="451.4" y="1386.4" textLength="988.2" 
clip-path="url(#breeze-static-checks-line-56)">|&#160;update-in-the-wild-to-be-sorted&#160;|&#160;update-inlined-dockerfile-scripts&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text
 class="breeze-static-checks-r5" x="1451.8" y="1386.4" textLength="12 [...]
+</text><text class="breeze-static-checks-r5" x="0" y="1410.8" 
textLength="12.2" clip-path="url(#breeze-static-checks-line-57)">│</text><text 
class="breeze-static-checks-r7" x="451.4" y="1410.8" textLength="988.2" 
clip-path="url(#breeze-static-checks-line-57)">update-installed-providers-to-be-sorted&#160;|&#160;update-installers-and-pre-commit&#160;|&#160;&#160;&#160;&#160;&#160;</text><text
 class="breeze-static-checks-r5" x="1451.8" y="1410.8" textLength="12.2" 
clip-path="url(#breeze-sta [...]
+</text><text class="breeze-static-checks-r5" x="0" y="1435.2" 
textLength="12.2" clip-path="url(#breeze-static-checks-line-58)">│</text><text 
class="breeze-static-checks-r7" x="451.4" y="1435.2" textLength="988.2" 
clip-path="url(#breeze-static-checks-line-58)">update-local-yml-file&#160;|&#160;update-migration-references&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#
 [...]
+</text><text class="breeze-static-checks-r5" x="0" y="1459.6" 
textLength="12.2" clip-path="url(#breeze-static-checks-line-59)">│</text><text 
class="breeze-static-checks-r7" x="451.4" y="1459.6" textLength="988.2" 
clip-path="url(#breeze-static-checks-line-59)">update-providers-build-files&#160;|&#160;update-providers-dependencies&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text
 class="breeze-static-checks- [...]
+</text><text class="breeze-static-checks-r5" x="0" y="1484" textLength="12.2" 
clip-path="url(#breeze-static-checks-line-60)">│</text><text 
class="breeze-static-checks-r7" x="451.4" y="1484" textLength="988.2" 
clip-path="url(#breeze-static-checks-line-60)">update-pyproject-toml&#160;|&#160;update-reproducible-source-date-epoch&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text
 class="breeze-static-checks-r5" x="14 [...]
+</text><text class="breeze-static-checks-r5" x="0" y="1508.4" 
textLength="12.2" clip-path="url(#breeze-static-checks-line-61)">│</text><text 
class="breeze-static-checks-r7" x="451.4" y="1508.4" textLength="988.2" 
clip-path="url(#breeze-static-checks-line-61)">update-spelling-wordlist-to-be-sorted&#160;|&#160;update-supported-versions&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text
 class="breeze-static-checks-r5" x="1451.8" y="1508.4" [...]
+</text><text class="breeze-static-checks-r5" x="0" y="1532.8" 
textLength="12.2" clip-path="url(#breeze-static-checks-line-62)">│</text><text 
class="breeze-static-checks-r7" x="451.4" y="1532.8" textLength="988.2" 
clip-path="url(#breeze-static-checks-line-62)">update-vendored-in-k8s-json-schema&#160;|&#160;update-version&#160;|&#160;validate-chart-annotations&#160;</text><text
 class="breeze-static-checks-r5" x="1451.8" y="1532.8" textLength="12.2" 
clip-path="url(#breeze-static-checks-line [...]
+</text><text class="breeze-static-checks-r5" x="0" y="1557.2" 
textLength="12.2" clip-path="url(#breeze-static-checks-line-63)">│</text><text 
class="breeze-static-checks-r7" x="451.4" y="1557.2" textLength="988.2" 
clip-path="url(#breeze-static-checks-line-63)">|&#160;validate-operators-init&#160;|&#160;yamllint&#160;|&#160;zizmor)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160
 [...]
+</text><text class="breeze-static-checks-r5" x="0" y="1581.6" 
textLength="12.2" clip-path="url(#breeze-static-checks-line-64)">│</text><text 
class="breeze-static-checks-r4" x="24.4" y="1581.6" textLength="268.4" 
clip-path="url(#breeze-static-checks-line-64)">--show-diff-on-failure</text><text
 class="breeze-static-checks-r6" x="402.6" y="1581.6" textLength="24.4" 
clip-path="url(#breeze-static-checks-line-64)">-s</text><text 
class="breeze-static-checks-r1" x="451.4" y="1581.6" textLength=" [...]
+</text><text class="breeze-static-checks-r5" x="0" y="1606" textLength="12.2" 
clip-path="url(#breeze-static-checks-line-65)">│</text><text 
class="breeze-static-checks-r4" x="24.4" y="1606" textLength="292.8" 
clip-path="url(#breeze-static-checks-line-65)">--initialize-environment</text><text
 class="breeze-static-checks-r1" x="451.4" y="1606" textLength="549" 
clip-path="url(#breeze-static-checks-line-65)">Initialize&#160;environment&#160;before&#160;running&#160;checks.</text><text
 class=" [...]
+</text><text class="breeze-static-checks-r5" x="0" y="1630.4" 
textLength="12.2" clip-path="url(#breeze-static-checks-line-66)">│</text><text 
class="breeze-static-checks-r4" x="24.4" y="1630.4" textLength="353.8" 
clip-path="url(#breeze-static-checks-line-66)">--max-initialization-attempts</text><text
 class="breeze-static-checks-r1" x="451.4" y="1630.4" textLength="854" 
clip-path="url(#breeze-static-checks-line-66)">Maximum&#160;number&#160;of&#160;attempts&#160;to&#160;initialize&#160;env
 [...]
+</text><text class="breeze-static-checks-r5" x="0" y="1654.8" 
textLength="12.2" clip-path="url(#breeze-static-checks-line-67)">│</text><text 
class="breeze-static-checks-r7" x="451.4" y="1654.8" textLength="854" 
clip-path="url(#breeze-static-checks-line-67)">(INTEGER&#160;RANGE)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#16
 [...]
+</text><text class="breeze-static-checks-r5" x="0" y="1679.2" 
textLength="12.2" clip-path="url(#breeze-static-checks-line-68)">│</text><text 
class="breeze-static-checks-r5" x="451.4" y="1679.2" textLength="854" 
clip-path="url(#breeze-static-checks-line-68)">[default:&#160;3;&#160;1&lt;=x&lt;=10]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#16
 [...]
+</text><text class="breeze-static-checks-r5" x="0" y="1703.6" 
textLength="1464" 
clip-path="url(#breeze-static-checks-line-69)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text
 class="breeze-static-checks-r1" x="1464" y="1703.6" textLength="12.2" 
clip-path="url(#breeze-static-checks-line-69)">
+</text><text class="breeze-static-checks-r5" x="0" y="1728" textLength="24.4" 
clip-path="url(#breeze-static-checks-line-70)">╭─</text><text 
class="breeze-static-checks-r5" x="24.4" y="1728" textLength="463.6" 
clip-path="url(#breeze-static-checks-line-70)">&#160;Selecting&#160;files&#160;to&#160;run&#160;the&#160;checks&#160;on&#160;</text><text
 class="breeze-static-checks-r5" x="488" y="1728" textLength="951.6" 
clip-path="url(#breeze-static-checks-line-70)">────────────────────────────── 
[...]
+</text><text class="breeze-static-checks-r5" x="0" y="1752.4" 
textLength="12.2" clip-path="url(#breeze-static-checks-line-71)">│</text><text 
class="breeze-static-checks-r4" x="24.4" y="1752.4" textLength="73.2" 
clip-path="url(#breeze-static-checks-line-71)">--file</text><text 
class="breeze-static-checks-r6" x="256.2" y="1752.4" textLength="24.4" 
clip-path="url(#breeze-static-checks-line-71)">-f</text><text 
class="breeze-static-checks-r1" x="305" y="1752.4" textLength="427" 
clip-path="url [...]
+</text><text class="breeze-static-checks-r5" x="0" y="1776.8" 
textLength="12.2" clip-path="url(#breeze-static-checks-line-72)">│</text><text 
class="breeze-static-checks-r4" x="24.4" y="1776.8" textLength="134.2" 
clip-path="url(#breeze-static-checks-line-72)">--all-files</text><text 
class="breeze-static-checks-r6" x="256.2" y="1776.8" textLength="24.4" 
clip-path="url(#breeze-static-checks-line-72)">-a</text><text 
class="breeze-static-checks-r1" x="305" y="1776.8" textLength="292.8" clip-p 
[...]
+</text><text class="breeze-static-checks-r5" x="0" y="1801.2" 
textLength="12.2" clip-path="url(#breeze-static-checks-line-73)">│</text><text 
class="breeze-static-checks-r4" x="24.4" y="1801.2" textLength="146.4" 
clip-path="url(#breeze-static-checks-line-73)">--commit-ref</text><text 
class="breeze-static-checks-r6" x="256.2" y="1801.2" textLength="24.4" 
clip-path="url(#breeze-static-checks-line-73)">-r</text><text 
class="breeze-static-checks-r1" x="305" y="1801.2" textLength="1134.6" clip 
[...]
+</text><text class="breeze-static-checks-r5" x="0" y="1825.6" 
textLength="12.2" clip-path="url(#breeze-static-checks-line-74)">│</text><text 
class="breeze-static-checks-r1" x="305" y="1825.6" textLength="183" 
clip-path="url(#breeze-static-checks-line-74)">exclusive&#160;with&#160;</text><text
 class="breeze-static-checks-r4" x="488" y="1825.6" textLength="158.6" 
clip-path="url(#breeze-static-checks-line-74)">--last-commit</text><text 
class="breeze-static-checks-r1" x="646.6" y="1825.6" te [...]
+</text><text class="breeze-static-checks-r5" x="0" y="1850" textLength="12.2" 
clip-path="url(#breeze-static-checks-line-75)">│</text><text 
class="breeze-static-checks-r7" x="305" y="1850" textLength="1134.6" 
clip-path="url(#breeze-static-checks-line-75)">(TEXT)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#1
 [...]
+</text><text class="breeze-static-checks-r5" x="0" y="1874.4" 
textLength="12.2" clip-path="url(#breeze-static-checks-line-76)">│</text><text 
class="breeze-static-checks-r4" x="24.4" y="1874.4" textLength="158.6" 
clip-path="url(#breeze-static-checks-line-76)">--last-commit</text><text 
class="breeze-static-checks-r6" x="256.2" y="1874.4" textLength="24.4" 
clip-path="url(#breeze-static-checks-line-76)">-c</text><text 
class="breeze-static-checks-r1" x="305" y="1874.4" textLength="793" clip-p [...]
+</text><text class="breeze-static-checks-r5" x="0" y="1898.8" 
textLength="12.2" clip-path="url(#breeze-static-checks-line-77)">│</text><text 
class="breeze-static-checks-r4" x="24.4" y="1898.8" textLength="207.4" 
clip-path="url(#breeze-static-checks-line-77)">--only-my-changes</text><text 
class="breeze-static-checks-r6" x="256.2" y="1898.8" textLength="24.4" 
clip-path="url(#breeze-static-checks-line-77)">-m</text><text 
class="breeze-static-checks-r1" x="305" y="1898.8" textLength="1134.6" [...]
+</text><text class="breeze-static-checks-r5" x="0" y="1923.2" 
textLength="12.2" clip-path="url(#breeze-static-checks-line-78)">│</text><text 
class="breeze-static-checks-r1" x="305" y="1923.2" textLength="1134.6" 
clip-path="url(#breeze-static-checks-line-78)">branch&#160;and&#160;HEAD&#160;of&#160;your&#160;branch.&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#1
 [...]
+</text><text class="breeze-static-checks-r5" x="0" y="1947.6" 
textLength="1464" 
clip-path="url(#breeze-static-checks-line-79)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text
 class="breeze-static-checks-r1" x="1464" y="1947.6" textLength="12.2" 
clip-path="url(#breeze-static-checks-line-79)">
+</text><text class="breeze-static-checks-r5" x="0" y="1972" textLength="24.4" 
clip-path="url(#breeze-static-checks-line-80)">╭─</text><text 
class="breeze-static-checks-r5" x="24.4" y="1972" textLength="463.6" 
clip-path="url(#breeze-static-checks-line-80)">&#160;Building&#160;image&#160;before&#160;running&#160;checks&#160;</text><text
 class="breeze-static-checks-r5" x="488" y="1972" textLength="951.6" 
clip-path="url(#breeze-static-checks-line-80)">────────────────────────────────────────
 [...]
+</text><text class="breeze-static-checks-r5" x="0" y="1996.4" 
textLength="12.2" clip-path="url(#breeze-static-checks-line-81)">│</text><text 
class="breeze-static-checks-r4" x="24.4" y="1996.4" textLength="317.2" 
clip-path="url(#breeze-static-checks-line-81)">--skip-image-upgrade-check</text><text
 class="breeze-static-checks-r1" x="414.8" y="1996.4" textLength="536.8" 
clip-path="url(#breeze-static-checks-line-81)">Skip&#160;checking&#160;if&#160;the&#160;CI&#160;image&#160;is&#160;up&#160
 [...]
+</text><text class="breeze-static-checks-r5" x="0" y="2020.8" 
textLength="12.2" clip-path="url(#breeze-static-checks-line-82)">│</text><text 
class="breeze-static-checks-r4" x="24.4" y="2020.8" textLength="158.6" 
clip-path="url(#breeze-static-checks-line-82)">--force-build</text><text 
class="breeze-static-checks-r1" x="414.8" y="2020.8" textLength="707.6" 
clip-path="url(#breeze-static-checks-line-82)">Force&#160;image&#160;build&#160;no&#160;matter&#160;if&#160;it&#160;is&#160;determined&
 [...]
+</text><text class="breeze-static-checks-r5" x="0" y="2045.2" 
textLength="12.2" clip-path="url(#breeze-static-checks-line-83)">│</text><text 
class="breeze-static-checks-r4" x="24.4" y="2045.2" textLength="231.8" 
clip-path="url(#breeze-static-checks-line-83)">--github-repository</text><text 
class="breeze-static-checks-r6" x="366" y="2045.2" textLength="24.4" 
clip-path="url(#breeze-static-checks-line-83)">-g</text><text 
class="breeze-static-checks-r1" x="414.8" y="2045.2" textLength="585.6 [...]
+</text><text class="breeze-static-checks-r5" x="0" y="2069.6" 
textLength="12.2" clip-path="url(#breeze-static-checks-line-84)">│</text><text 
class="breeze-static-checks-r4" x="24.4" y="2069.6" textLength="109.8" 
clip-path="url(#breeze-static-checks-line-84)">--builder</text><text 
class="breeze-static-checks-r1" x="414.8" y="2069.6" textLength="756.4" 
clip-path="url(#breeze-static-checks-line-84)">Buildx&#160;builder&#160;used&#160;to&#160;perform&#160;`docker&#160;buildx&#160;build`&#160
 [...]
+</text><text class="breeze-static-checks-r5" x="0" y="2094" textLength="12.2" 
clip-path="url(#breeze-static-checks-line-85)">│</text><text 
class="breeze-static-checks-r5" x="414.8" y="2094" textLength="756.4" 
clip-path="url(#breeze-static-checks-line-85)">[default:&#160;autodetect]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;
 [...]
+</text><text class="breeze-static-checks-r5" x="0" y="2118.4" 
textLength="1464" 
clip-path="url(#breeze-static-checks-line-86)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text
 class="breeze-static-checks-r1" x="1464" y="2118.4" textLength="12.2" 
clip-path="url(#breeze-static-checks-line-86)">
+</text><text class="breeze-static-checks-r5" x="0" y="2142.8" 
textLength="24.4" clip-path="url(#breeze-static-checks-line-87)">╭─</text><text 
class="breeze-static-checks-r5" x="24.4" y="2142.8" textLength="195.2" 
clip-path="url(#breeze-static-checks-line-87)">&#160;Common&#160;options&#160;</text><text
 class="breeze-static-checks-r5" x="219.6" y="2142.8" textLength="1220" 
clip-path="url(#breeze-static-checks-line-87)">──────────────────────────────────────────────────────────────────────
 [...]
+</text><text class="breeze-static-checks-r5" x="0" y="2167.2" 
textLength="12.2" clip-path="url(#breeze-static-checks-line-88)">│</text><text 
class="breeze-static-checks-r4" x="24.4" y="2167.2" textLength="109.8" 
clip-path="url(#breeze-static-checks-line-88)">--dry-run</text><text 
class="breeze-static-checks-r6" x="158.6" y="2167.2" textLength="24.4" 
clip-path="url(#breeze-static-checks-line-88)">-D</text><text 
class="breeze-static-checks-r1" x="207.4" y="2167.2" textLength="719.8" clip-p 
[...]
+</text><text class="breeze-static-checks-r5" x="0" y="2191.6" 
textLength="12.2" clip-path="url(#breeze-static-checks-line-89)">│</text><text 
class="breeze-static-checks-r4" x="24.4" y="2191.6" textLength="109.8" 
clip-path="url(#breeze-static-checks-line-89)">--verbose</text><text 
class="breeze-static-checks-r6" x="158.6" y="2191.6" textLength="24.4" 
clip-path="url(#breeze-static-checks-line-89)">-v</text><text 
class="breeze-static-checks-r1" x="207.4" y="2191.6" textLength="585.6" clip-p 
[...]
+</text><text class="breeze-static-checks-r5" x="0" y="2216" textLength="12.2" 
clip-path="url(#breeze-static-checks-line-90)">│</text><text 
class="breeze-static-checks-r4" x="24.4" y="2216" textLength="73.2" 
clip-path="url(#breeze-static-checks-line-90)">--help</text><text 
class="breeze-static-checks-r6" x="158.6" y="2216" textLength="24.4" 
clip-path="url(#breeze-static-checks-line-90)">-h</text><text 
class="breeze-static-checks-r1" x="207.4" y="2216" textLength="329.4" 
clip-path="url(#br [...]
+</text><text class="breeze-static-checks-r5" x="0" y="2240.4" 
textLength="1464" 
clip-path="url(#breeze-static-checks-line-91)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text
 class="breeze-static-checks-r1" x="1464" y="2240.4" textLength="12.2" 
clip-path="url(#breeze-static-checks-line-91)">
 </text>
     </g>
     </g>
diff --git a/dev/breeze/doc/images/output_static-checks.txt 
b/dev/breeze/doc/images/output_static-checks.txt
index c4ea9001bac..6e002ae8d30 100644
--- a/dev/breeze/doc/images/output_static-checks.txt
+++ b/dev/breeze/doc/images/output_static-checks.txt
@@ -1 +1 @@
-c3e2295a3b4cfc4073a1c8bea4ee4f3b
+574ddc53c1454f66d2db8d22bac539ce
diff --git a/dev/breeze/src/airflow_breeze/pre_commit_ids.py 
b/dev/breeze/src/airflow_breeze/pre_commit_ids.py
index a9d1b62c0b8..eb941f4deb7 100644
--- a/dev/breeze/src/airflow_breeze/pre_commit_ids.py
+++ b/dev/breeze/src/airflow_breeze/pre_commit_ids.py
@@ -77,6 +77,7 @@ PRE_COMMIT_LIST = [
     "check-pytest-mark-db-test-in-providers",
     "check-revision-heads-map",
     "check-safe-filter-usage-in-html",
+    "check-sdk-imports",
     "check-significant-newsfragments-are-valid",
     "check-sql-dependency-common-data-structure",
     "check-start-date-not-used-in-defaults",
diff --git a/scripts/ci/pre_commit/check_sdk_imports.py 
b/scripts/ci/pre_commit/check_sdk_imports.py
new file mode 100755
index 00000000000..cdf40dc1842
--- /dev/null
+++ b/scripts/ci/pre_commit/check_sdk_imports.py
@@ -0,0 +1,78 @@
+#!/usr/bin/env python
+#
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+from __future__ import annotations
+
+import argparse
+import ast
+import sys
+from pathlib import Path
+
+sys.path.insert(0, str(Path(__file__).parent.resolve()))
+from common_precommit_utils import console
+
+
+def check_file_for_sdk_imports(file_path: Path) -> list[tuple[int, str]]:
+    """Check file for airflow.sdk imports. Returns list of (line_num, 
import_statement)."""
+    try:
+        with open(file_path, encoding="utf-8") as f:
+            source = f.read()
+            tree = ast.parse(source, filename=str(file_path))
+    except (OSError, UnicodeDecodeError, SyntaxError):
+        return []
+
+    mismatches = []
+
+    for node in ast.walk(tree):
+        if isinstance(node, ast.ImportFrom):
+            if node.module and ("airflow.sdk" in node.module):
+                import_names = ", ".join(alias.name for alias in node.names)
+                statement = f"from {node.module} import {import_names}"
+                mismatches.append((node.lineno, statement))
+
+    return mismatches
+
+
+def main():
+    parser = argparse.ArgumentParser(description="Check for SDK imports in 
airflow-core files")
+    parser.add_argument("files", nargs="*", help="Files to check")
+    args = parser.parse_args()
+
+    if not args.files:
+        return
+
+    files_to_check = [Path(f) for f in args.files if f.endswith(".py")]
+    total_violations = 0
+
+    for file_path in files_to_check:
+        mismatches = check_file_for_sdk_imports(file_path)
+        if mismatches:
+            console.print(f"[red]{file_path}[/red]:")
+            for line_num, statement in mismatches:
+                console.print(f"  [yellow]Line {line_num}[/yellow]: 
{statement}")
+            total_violations += len(mismatches)
+
+    if total_violations:
+        console.print()
+        console.print(f"[red]Found {total_violations} SDK import(s) in core 
files[/red]")
+        sys.exit(1)
+
+
+if __name__ == "__main__":
+    main()
+    sys.exit(0)

Reply via email to