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

jedcunningham pushed a commit to branch v2-9-test
in repository https://gitbox.apache.org/repos/asf/airflow.git

commit d2ae8c97550eaeaefca309d4b5878546d66895c9
Author: Andrey Anshin <andrey.ans...@taragol.is>
AuthorDate: Thu Apr 25 17:44:22 2024 +0400

    Force to use Airflow Deprecation warnings categories on `@deprecated` 
decorator (#39205)
    
    * Force to use Airflow Deprecation warnings categories on @deprecated 
decorator
    
    * Catch warning in Experimental API test
    
    (cherry picked from commit c2ef1daea65885db04610eaa7e02555500aec0e0)
---
 .pre-commit-config.yaml                            |   7 +
 airflow/api/common/experimental/get_code.py        |   6 +-
 .../api/common/experimental/get_dag_run_state.py   |   3 +-
 airflow/api/common/experimental/get_task.py        |   3 +-
 .../api/common/experimental/get_task_instance.py   |   4 +-
 airflow/api/common/experimental/pool.py            |  10 +-
 airflow/auth/managers/fab/fab_auth_manager.py      |   5 +-
 .../auth/managers/fab/security_manager/override.py |   4 +-
 airflow/www/security.py                            |   4 +-
 contributing-docs/08_static_code_checks.rst        |   2 +
 dev/breeze/doc/images/output_static-checks.svg     | 152 ++++++++--------
 dev/breeze/doc/images/output_static-checks.txt     |   2 +-
 dev/breeze/src/airflow_breeze/pre_commit_ids.py    |   1 +
 scripts/ci/pre_commit/check_deprecations.py        | 194 +++++++++++++++++++++
 .../auth/backend/test_basic_auth.py                |   6 +-
 15 files changed, 313 insertions(+), 90 deletions(-)

diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml
index b2f998afa9..308d63a615 100644
--- a/.pre-commit-config.yaml
+++ b/.pre-commit-config.yaml
@@ -987,6 +987,13 @@ repos:
         pass_filenames: true
         files: ^airflow/.*\.py$
         exclude: ^.*/.*_vendor/
+      - id: check-code-deprecations
+        name: Check deprecations categories in decorators
+        entry: ./scripts/ci/pre_commit/check_deprecations.py
+        language: python
+        pass_filenames: true
+        files: ^airflow/.*\.py$
+        exclude: ^.*/.*_vendor/
       - id: lint-chart-schema
         name: Lint chart/values.schema.json file
         entry: ./scripts/ci/pre_commit/chart_schema.py
diff --git a/airflow/api/common/experimental/get_code.py 
b/airflow/api/common/experimental/get_code.py
index f618690a92..96aadc441b 100644
--- a/airflow/api/common/experimental/get_code.py
+++ b/airflow/api/common/experimental/get_code.py
@@ -22,11 +22,13 @@ from __future__ import annotations
 from deprecated import deprecated
 
 from airflow.api.common.experimental import check_and_get_dag
-from airflow.exceptions import AirflowException, DagCodeNotFound
+from airflow.exceptions import AirflowException, DagCodeNotFound, 
RemovedInAirflow3Warning
 from airflow.models.dagcode import DagCode
 
 
-@deprecated(reason="Use DagCode().get_code_by_fileloc() instead", 
version="2.2.4")
+@deprecated(
+    reason="Use DagCode().get_code_by_fileloc() instead", version="2.2.4", 
category=RemovedInAirflow3Warning
+)
 def get_code(dag_id: str) -> str:
     """Return python code of a given dag_id.
 
diff --git a/airflow/api/common/experimental/get_dag_run_state.py 
b/airflow/api/common/experimental/get_dag_run_state.py
index 8905aa4f04..6c7cd96c2b 100644
--- a/airflow/api/common/experimental/get_dag_run_state.py
+++ b/airflow/api/common/experimental/get_dag_run_state.py
@@ -24,12 +24,13 @@ from typing import TYPE_CHECKING
 from deprecated import deprecated
 
 from airflow.api.common.experimental import check_and_get_dag, 
check_and_get_dagrun
+from airflow.exceptions import RemovedInAirflow3Warning
 
 if TYPE_CHECKING:
     from datetime import datetime
 
 
-@deprecated(reason="Use DagRun().get_state() instead", version="2.2.4")
+@deprecated(reason="Use DagRun().get_state() instead", version="2.2.4", 
category=RemovedInAirflow3Warning)
 def get_dag_run_state(dag_id: str, execution_date: datetime) -> dict[str, str]:
     """Return the Dag Run state identified by the given dag_id and 
execution_date.
 
diff --git a/airflow/api/common/experimental/get_task.py 
b/airflow/api/common/experimental/get_task.py
index 6bc58d0328..7e25ff4ffd 100644
--- a/airflow/api/common/experimental/get_task.py
+++ b/airflow/api/common/experimental/get_task.py
@@ -24,12 +24,13 @@ from typing import TYPE_CHECKING
 from deprecated import deprecated
 
 from airflow.api.common.experimental import check_and_get_dag
+from airflow.exceptions import RemovedInAirflow3Warning
 
 if TYPE_CHECKING:
     from airflow.models import TaskInstance
 
 
-@deprecated(reason="Use DAG().get_task", version="2.2.4")
+@deprecated(reason="Use DAG().get_task", version="2.2.4", 
category=RemovedInAirflow3Warning)
 def get_task(dag_id: str, task_id: str) -> TaskInstance:
     """Return the task object identified by the given dag_id and task_id."""
     dag = check_and_get_dag(dag_id, task_id)
diff --git a/airflow/api/common/experimental/get_task_instance.py 
b/airflow/api/common/experimental/get_task_instance.py
index 8a22e2c24e..722120534d 100644
--- a/airflow/api/common/experimental/get_task_instance.py
+++ b/airflow/api/common/experimental/get_task_instance.py
@@ -24,14 +24,14 @@ from typing import TYPE_CHECKING
 from deprecated import deprecated
 
 from airflow.api.common.experimental import check_and_get_dag, 
check_and_get_dagrun
-from airflow.exceptions import TaskInstanceNotFound
+from airflow.exceptions import RemovedInAirflow3Warning, TaskInstanceNotFound
 from airflow.models import TaskInstance
 
 if TYPE_CHECKING:
     from datetime import datetime
 
 
-@deprecated(version="2.2.4", reason="Use DagRun.get_task_instance instead")
+@deprecated(version="2.2.4", reason="Use DagRun.get_task_instance instead", 
category=RemovedInAirflow3Warning)
 def get_task_instance(dag_id: str, task_id: str, execution_date: datetime) -> 
TaskInstance:
     """Return the task instance identified by the given dag_id, task_id and 
execution_date."""
     dag = check_and_get_dag(dag_id, task_id)
diff --git a/airflow/api/common/experimental/pool.py 
b/airflow/api/common/experimental/pool.py
index cfa1ffcc71..e3d99be8c1 100644
--- a/airflow/api/common/experimental/pool.py
+++ b/airflow/api/common/experimental/pool.py
@@ -24,7 +24,7 @@ from typing import TYPE_CHECKING
 from deprecated import deprecated
 from sqlalchemy import select
 
-from airflow.exceptions import AirflowBadRequest, PoolNotFound
+from airflow.exceptions import AirflowBadRequest, PoolNotFound, 
RemovedInAirflow3Warning
 from airflow.models import Pool
 from airflow.utils.session import NEW_SESSION, provide_session
 
@@ -32,7 +32,7 @@ if TYPE_CHECKING:
     from sqlalchemy.orm import Session
 
 
-@deprecated(reason="Use Pool.get_pool() instead", version="2.2.4")
+@deprecated(reason="Use Pool.get_pool() instead", version="2.2.4", 
category=RemovedInAirflow3Warning)
 @provide_session
 def get_pool(name, session: Session = NEW_SESSION):
     """Get pool by a given name."""
@@ -46,14 +46,14 @@ def get_pool(name, session: Session = NEW_SESSION):
     return pool
 
 
-@deprecated(reason="Use Pool.get_pools() instead", version="2.2.4")
+@deprecated(reason="Use Pool.get_pools() instead", version="2.2.4", 
category=RemovedInAirflow3Warning)
 @provide_session
 def get_pools(session: Session = NEW_SESSION):
     """Get all pools."""
     return session.scalars(select(Pool)).all()
 
 
-@deprecated(reason="Use Pool.create_pool() instead", version="2.2.4")
+@deprecated(reason="Use Pool.create_pool() instead", version="2.2.4", 
category=RemovedInAirflow3Warning)
 @provide_session
 def create_pool(name, slots, description, session: Session = NEW_SESSION):
     """Create a pool with given parameters."""
@@ -84,7 +84,7 @@ def create_pool(name, slots, description, session: Session = 
NEW_SESSION):
     return pool
 
 
-@deprecated(reason="Use Pool.delete_pool() instead", version="2.2.4")
+@deprecated(reason="Use Pool.delete_pool() instead", version="2.2.4", 
category=RemovedInAirflow3Warning)
 @provide_session
 def delete_pool(name, session: Session = NEW_SESSION):
     """Delete pool by a given name."""
diff --git a/airflow/auth/managers/fab/fab_auth_manager.py 
b/airflow/auth/managers/fab/fab_auth_manager.py
index ffbda9c808..aa77656639 100644
--- a/airflow/auth/managers/fab/fab_auth_manager.py
+++ b/airflow/auth/managers/fab/fab_auth_manager.py
@@ -19,11 +19,14 @@ from __future__ import annotations
 
 from deprecated import deprecated
 
+from airflow.exceptions import RemovedInAirflow3Warning
 from airflow.providers.fab.auth_manager.fab_auth_manager import FabAuthManager 
as FabAuthManagerProvider
 
 
 @deprecated(
-    reason="Use 
airflow.providers.fab.auth_manager.fab_auth_manager.FabAuthManager instead", 
version="2.9.0"
+    reason="Use 
airflow.providers.fab.auth_manager.fab_auth_manager.FabAuthManager instead",
+    version="2.9.0",
+    category=RemovedInAirflow3Warning,
 )
 class FabAuthManager(FabAuthManagerProvider):
     """
diff --git a/airflow/auth/managers/fab/security_manager/override.py 
b/airflow/auth/managers/fab/security_manager/override.py
index 96b98a268b..cae7da7e92 100644
--- a/airflow/auth/managers/fab/security_manager/override.py
+++ b/airflow/auth/managers/fab/security_manager/override.py
@@ -19,6 +19,7 @@ from __future__ import annotations
 
 from deprecated import deprecated
 
+from airflow.exceptions import RemovedInAirflow3Warning
 from airflow.providers.fab.auth_manager.security_manager.override import (
     FabAirflowSecurityManagerOverride as 
FabProviderAirflowSecurityManagerOverride,
 )
@@ -27,7 +28,8 @@ from 
airflow.providers.fab.auth_manager.security_manager.override import (
 @deprecated(
     reason="If you want to override the security manager, you should inherit 
from "
     
"`airflow.providers.fab.auth_manager.security_manager.override.FabAirflowSecurityManagerOverride`
 "
-    "instead"
+    "instead",
+    category=RemovedInAirflow3Warning,
 )
 class 
FabAirflowSecurityManagerOverride(FabProviderAirflowSecurityManagerOverride):
     """
diff --git a/airflow/www/security.py b/airflow/www/security.py
index 9cb21cf45a..69c90d65eb 100644
--- a/airflow/www/security.py
+++ b/airflow/www/security.py
@@ -18,6 +18,7 @@ from __future__ import annotations
 
 from deprecated import deprecated
 
+from airflow.exceptions import RemovedInAirflow3Warning
 from airflow.providers.fab.auth_manager.security_manager.override import 
FabAirflowSecurityManagerOverride
 
 EXISTING_ROLES = {
@@ -32,7 +33,8 @@ EXISTING_ROLES = {
 @deprecated(
     reason="If you want to override the security manager, you should inherit 
from "
     
"`airflow.providers.fab.auth_manager.security_manager.override.FabAirflowSecurityManagerOverride`
 "
-    "instead"
+    "instead",
+    category=RemovedInAirflow3Warning,
 )
 class AirflowSecurityManager(FabAirflowSecurityManagerOverride):
     """Placeholder, just here to avoid breaking the code of users who inherit 
from this.
diff --git a/contributing-docs/08_static_code_checks.rst 
b/contributing-docs/08_static_code_checks.rst
index b02c8749a7..e3fcf28ed4 100644
--- a/contributing-docs/08_static_code_checks.rst
+++ b/contributing-docs/08_static_code_checks.rst
@@ -146,6 +146,8 @@ require Breeze Docker image to be built locally.
 
+-----------------------------------------------------------+--------------------------------------------------------------+---------+
 | check-cncf-k8s-only-for-executors                         | Check 
cncf.kubernetes imports used for executors only        |         |
 
+-----------------------------------------------------------+--------------------------------------------------------------+---------+
+| check-code-deprecations                                   | Check 
deprecations categories in decorators                  |         |
++-----------------------------------------------------------+--------------------------------------------------------------+---------+
 | check-compat-cache-on-methods                             | Check that 
compat cache do not use on class methods          |         |
 
+-----------------------------------------------------------+--------------------------------------------------------------+---------+
 | check-core-deprecation-classes                            | Verify usage of 
Airflow deprecation classes in core          |         |
diff --git a/dev/breeze/doc/images/output_static-checks.svg 
b/dev/breeze/doc/images/output_static-checks.svg
index a4c1734c30..f1d369044a 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 2099.6" 
xmlns="http://www.w3.org/2000/svg";>
+<svg class="rich-terminal" viewBox="0 0 1482 2124.0" 
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="2048.6" />
+      <rect x="0" y="0" width="1463.0" height="2073.0" />
     </clipPath>
     <clipPath id="breeze-static-checks-line-0">
     <rect x="0" y="1.5" width="1464" height="24.65"/>
@@ -294,9 +294,12 @@
 <clipPath id="breeze-static-checks-line-82">
     <rect x="0" y="2002.3" width="1464" height="24.65"/>
             </clipPath>
+<clipPath id="breeze-static-checks-line-83">
+    <rect x="0" y="2026.7" width="1464" height="24.65"/>
+            </clipPath>
     </defs>
 
-    <rect fill="#292929" stroke="rgba(255,255,255,0.35)" stroke-width="1" 
x="1" y="1" width="1480" height="2097.6" 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="2122" 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"/>
@@ -319,77 +322,78 @@
 </text><text class="breeze-static-checks-r5" x="0" y="264" textLength="12.2" 
clip-path="url(#breeze-static-checks-line-10)">│</text><text 
class="breeze-static-checks-r7" x="451.4" y="264" textLength="988.2" 
clip-path="url(#breeze-static-checks-line-10)">check-base-operator-partial-arguments&#160;|&#160;check-base-operator-usage&#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="264" textLeng [...]
 </text><text class="breeze-static-checks-r5" x="0" y="288.4" textLength="12.2" 
clip-path="url(#breeze-static-checks-line-11)">│</text><text 
class="breeze-static-checks-r7" x="451.4" y="288.4" textLength="988.2" 
clip-path="url(#breeze-static-checks-line-11)">check-boring-cyborg-configuration&#160;|&#160;check-breeze-top-dependencies-limited&#160;|&#160;&#160;&#160;&#160;&#160;&#160;</text><text
 class="breeze-static-checks-r5" x="1451.8" y="288.4" textLength="12.2" 
clip-path="url(#breeze-s [...]
 </text><text class="breeze-static-checks-r5" x="0" y="312.8" textLength="12.2" 
clip-path="url(#breeze-static-checks-line-12)">│</text><text 
class="breeze-static-checks-r7" x="451.4" y="312.8" textLength="988.2" 
clip-path="url(#breeze-static-checks-line-12)">check-builtin-literals&#160;|&#160;check-changelog-has-no-duplicates&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text
 class="breeze-static [...]
-</text><text class="breeze-static-checks-r5" x="0" y="337.2" textLength="12.2" 
clip-path="url(#breeze-static-checks-line-13)">│</text><text 
class="breeze-static-checks-r7" x="451.4" y="337.2" textLength="988.2" 
clip-path="url(#breeze-static-checks-line-13)">check-cncf-k8s-only-for-executors&#160;|&#160;check-compat-cache-on-methods&#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="337.2" te [...]
-</text><text class="breeze-static-checks-r5" x="0" y="361.6" textLength="12.2" 
clip-path="url(#breeze-static-checks-line-14)">│</text><text 
class="breeze-static-checks-r7" x="451.4" y="361.6" textLength="988.2" 
clip-path="url(#breeze-static-checks-line-14)">check-core-deprecation-classes&#160;|&#160;check-daysago-import-from-utils&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text
 class="breeze-static-checks-r5" x="1451.8" y="361. [...]
-</text><text class="breeze-static-checks-r5" x="0" y="386" textLength="12.2" 
clip-path="url(#breeze-static-checks-line-15)">│</text><text 
class="breeze-static-checks-r7" x="451.4" y="386" textLength="988.2" 
clip-path="url(#breeze-static-checks-line-15)">check-decorated-operator-implements-custom-name&#160;|&#160;check-deferrable-default-value&#160;</text><text
 class="breeze-static-checks-r5" x="1451.8" y="386" textLength="12.2" 
clip-path="url(#breeze-static-checks-line-15)">│</text><text [...]
-</text><text class="breeze-static-checks-r5" x="0" y="410.4" textLength="12.2" 
clip-path="url(#breeze-static-checks-line-16)">│</text><text 
class="breeze-static-checks-r7" x="451.4" y="410.4" textLength="988.2" 
clip-path="url(#breeze-static-checks-line-16)">|&#160;check-docstring-param-types&#160;|&#160;check-example-dags-urls&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text
  [...]
-</text><text class="breeze-static-checks-r5" x="0" y="434.8" textLength="12.2" 
clip-path="url(#breeze-static-checks-line-17)">│</text><text 
class="breeze-static-checks-r7" x="451.4" y="434.8" textLength="988.2" 
clip-path="url(#breeze-static-checks-line-17)">check-executables-have-shebangs&#160;|&#160;check-extra-packages-references&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text
 class="breeze-static-checks-r5" x="1451.8" y="434.8" te [...]
-</text><text class="breeze-static-checks-r5" x="0" y="459.2" textLength="12.2" 
clip-path="url(#breeze-static-checks-line-18)">│</text><text 
class="breeze-static-checks-r7" x="451.4" y="459.2" textLength="988.2" 
clip-path="url(#breeze-static-checks-line-18)">check-extras-order&#160;|&#160;check-fab-migrations&#160;|&#160;check-for-inclusive-language&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text
 class="breeze-static-checks-r5" x="1451.8" y="459.2" textLength="12.2" 
clip-path [...]
-</text><text class="breeze-static-checks-r5" x="0" y="483.6" textLength="12.2" 
clip-path="url(#breeze-static-checks-line-19)">│</text><text 
class="breeze-static-checks-r7" x="451.4" y="483.6" textLength="988.2" 
clip-path="url(#breeze-static-checks-line-19)">check-google-re2-as-dependency&#160;|&#160;check-hatch-build-order&#160;|&#160;check-hooks-apply&#160;|&#160;&#160;&#160;</text><text
 class="breeze-static-checks-r5" x="1451.8" y="483.6" textLength="12.2" 
clip-path="url(#breeze-static [...]
-</text><text class="breeze-static-checks-r5" x="0" y="508" textLength="12.2" 
clip-path="url(#breeze-static-checks-line-20)">│</text><text 
class="breeze-static-checks-r7" x="451.4" y="508" textLength="988.2" 
clip-path="url(#breeze-static-checks-line-20)">check-incorrect-use-of-LoggingMixin&#160;|&#160;check-init-decorator-arguments&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text
 class="breeze-static-checks-r5" x="1451.8" y="508" textLength="12.2" clip- 
[...]
-</text><text class="breeze-static-checks-r5" x="0" y="532.4" textLength="12.2" 
clip-path="url(#breeze-static-checks-line-21)">│</text><text 
class="breeze-static-checks-r7" x="451.4" y="532.4" textLength="988.2" 
clip-path="url(#breeze-static-checks-line-21)">check-integrations-list-consistent&#160;|&#160;check-lazy-logging&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text
 class [...]
-</text><text class="breeze-static-checks-r5" x="0" y="556.8" textLength="12.2" 
clip-path="url(#breeze-static-checks-line-22)">│</text><text 
class="breeze-static-checks-r7" x="451.4" y="556.8" textLength="988.2" 
clip-path="url(#breeze-static-checks-line-22)">check-links-to-example-dags-do-not-use-hardcoded-versions&#160;|&#160;check-merge-conflict&#160;</text><text
 class="breeze-static-checks-r5" x="1451.8" y="556.8" textLength="12.2" 
clip-path="url(#breeze-static-checks-line-22)">│</text [...]
-</text><text class="breeze-static-checks-r5" x="0" y="581.2" textLength="12.2" 
clip-path="url(#breeze-static-checks-line-23)">│</text><text 
class="breeze-static-checks-r7" x="451.4" y="581.2" textLength="988.2" 
clip-path="url(#breeze-static-checks-line-23)">|&#160;check-newsfragments-are-valid&#160;|&#160;check-no-airflow-deprecation-in-providers&#160;|&#160;&#160;&#160;&#160;</text><text
 class="breeze-static-checks-r5" x="1451.8" y="581.2" textLength="12.2" 
clip-path="url(#breeze-static [...]
-</text><text class="breeze-static-checks-r5" x="0" y="605.6" textLength="12.2" 
clip-path="url(#breeze-static-checks-line-24)">│</text><text 
class="breeze-static-checks-r7" x="451.4" y="605.6" textLength="988.2" 
clip-path="url(#breeze-static-checks-line-24)">check-no-providers-in-core-examples&#160;|&#160;check-only-new-session-with-provide-session</text><text
 class="breeze-static-checks-r5" x="1451.8" y="605.6" textLength="12.2" 
clip-path="url(#breeze-static-checks-line-24)">│</text><tex [...]
-</text><text class="breeze-static-checks-r5" x="0" y="630" textLength="12.2" 
clip-path="url(#breeze-static-checks-line-25)">│</text><text 
class="breeze-static-checks-r7" x="451.4" y="630" textLength="988.2" 
clip-path="url(#breeze-static-checks-line-25)">|&#160;check-persist-credentials-disabled-in-github-workflows&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text
 class="breeze-stati [...]
-</text><text class="breeze-static-checks-r5" x="0" y="654.4" textLength="12.2" 
clip-path="url(#breeze-static-checks-line-26)">│</text><text 
class="breeze-static-checks-r7" x="451.4" y="654.4" textLength="988.2" 
clip-path="url(#breeze-static-checks-line-26)">check-pre-commit-information-consistent&#160;|&#160;check-provide-create-sessions-imports&#160;|</text><text
 class="breeze-static-checks-r5" x="1451.8" y="654.4" textLength="12.2" 
clip-path="url(#breeze-static-checks-line-26)">│</text [...]
-</text><text class="breeze-static-checks-r5" x="0" y="678.8" textLength="12.2" 
clip-path="url(#breeze-static-checks-line-27)">│</text><text 
class="breeze-static-checks-r7" x="451.4" y="678.8" textLength="988.2" 
clip-path="url(#breeze-static-checks-line-27)">check-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="703.2" textLength="12.2" 
clip-path="url(#breeze-static-checks-line-28)">│</text><text 
class="breeze-static-checks-r7" x="451.4" y="703.2" textLength="988.2" 
clip-path="url(#breeze-static-checks-line-28)">check-providers-init-file-missing&#160;|&#160;check-providers-subpackages-init-file-exist&#160;|</text><text
 class="breeze-static-checks-r5" x="1451.8" y="703.2" textLength="12.2" 
clip-path="url(#breeze-static-checks-line-28)">│</text [...]
-</text><text class="breeze-static-checks-r5" x="0" y="727.6" textLength="12.2" 
clip-path="url(#breeze-static-checks-line-29)">│</text><text 
class="breeze-static-checks-r7" x="451.4" y="727.6" textLength="988.2" 
clip-path="url(#breeze-static-checks-line-29)">check-pydevd-left-in-code&#160;|&#160;check-revision-heads-map&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</t
 [...]
-</text><text class="breeze-static-checks-r5" x="0" y="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-safe-filter-usage-in-html&#160;|&#160;check-sql-dependency-common-data-structure&#160;|&#160;&#160;&#160;</text><text
 class="breeze-static-checks-r5" x="1451.8" y="752" textLength="12.2" 
clip-path="url(#breeze-static-checks-line-30) [...]
-</text><text 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-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="776.4" textLen [...]
-</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-system-tests-tocs&#160;|&#160;check-tests-in-the-right-folders&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text
 class="breeze-static [...]
-</text><text class="breeze-static-checks-r5" x="0" y="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-tests-unittest-testcase&#160;|&#160;check-urlparse-usage-in-code&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text
 class="breeze-static-checks-r5 [...]
-</text><text class="breeze-static-checks-r5" x="0" y="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-usage-of-re2-over-re&#160;|&#160;check-xml&#160;|&#160;codespell&#160;|&#160;compile-www-assets&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text
 class="breeze-static-checks-r5" x="1451.8" y="849.6" textLength=" [...]
-</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)">compile-www-assets-dev&#160;|&#160;create-missing-init-py-files-tests&#160;|&#160;debug-statements&#160;|&#160;</text><text
 class="breeze-static-checks-r5" x="1451.8" y="874" textLength="12.2" 
clip-path="url(#breeze-static-checks-line-35) [...]
-</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)">detect-private-key&#160;|&#160;doctoc&#160;|&#160;end-of-file-fixer&#160;|&#160;fix-encoding-pragma&#160;|&#160;flynt&#160;|&#160;&#160;</text><text
 class="breeze-static-checks-r5" x="1451.8" y="898.4" textLength="12.2" 
clip-path="url [...]
-</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)">generate-airflow-diagrams&#160;|&#160;generate-pypi-readme&#160;|&#160;identity&#160;|&#160;insert-license&#160;|&#160;&#160;&#160;</text><text
 class="breeze-static-checks-r5" x="1451.8" y="922.8" textLength="12.2" 
clip-path="url(#bre [...]
-</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)">kubeconform&#160;|&#160;lint-chart-schema&#160;|&#160;lint-css&#160;|&#160;lint-dockerfile&#160;|&#160;lint-helm-chart&#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)">lint-json-schema&#160;|&#160;lint-markdown&#160;|&#160;lint-openapi&#160;|&#160;mixed-line-ending&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text
 class="breeze-static-checks-r5" x="1451.8" y= [...]
-</text><text class="breeze-static-checks-r5" x="0" y="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)">mypy-airflow&#160;|&#160;mypy-dev&#160;|&#160;mypy-docs&#160;|&#160;mypy-providers&#160;|&#160;pretty-format-json&#160;|&#160;&#160;&#160;&#160;&#160;&#160;</text><text
 class="breeze-static-checks-r5" x="1451.8" y="996" textLength="12.2"  [...]
-</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)">pylint&#160;|&#160;python-no-log-warn&#160;|&#160;replace-bad-characters&#160;|&#160;rst-backticks&#160;|&#160;ruff&#160;|&#160;&#160;&#160;&#160;</text><text
 class="breeze-static-checks-r5" x="1451.8" y="1020.4" textLength="12.2" c [...]
-</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)">ruff-format&#160;|&#160;shellcheck&#160;|&#160;trailing-whitespace&#160;|&#160;ts-compile-format-lint-www&#160;|&#160;&#160;&#160;&#160;</text><text
 class="breeze-static-checks-r5" x="1451.8" y="1044.8" textLength="12.2" 
clip-path=" [...]
-</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)">update-black-version&#160;|&#160;update-breeze-cmd-output&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;
 [...]
-</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)">update-breeze-readme-config-hash&#160;|&#160;update-build-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="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)">update-chart-dependencies&#160;|&#160;update-common-sql-api-stubs&#160;|&#160;update-er-diagram&#160;|&#160;&#160;&#160;&#160;</text><text
 class="breeze-static-checks-r5" x="1451.8" y="1118" textLength="12.2" 
clip-path="url(#breeze-stat [...]
-</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)">update-extras&#160;|&#160;update-in-the-wild-to-be-sorted&#160;|&#160;&#160;&#160;&#160;&#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="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)">update-inlined-dockerfile-scripts&#160;|&#160;update-installed-providers-to-be-sorted&#160;|&#160;&#160;&#160;&#160;</text><text
 class="breeze-static-checks-r5" x="1451.8" y="1166.8" textLength="12.2" 
clip-path="url(#breeze-static-c [...]
-</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)">update-installers&#160;|&#160;update-local-yml-file&#160;|&#160;update-migration-references&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text
 class="breeze-static-checks-r5" x="1451.8" y="1191.2" textLength="12.2" c [...]
-</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)">update-providers-dependencies&#160;|&#160;update-reproducible-source-date-epoch&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text
 class="breeze-static-checks-r5" x="1451.8" y="1215.6" textLength="12.2" c [...]
-</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)">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="1240" textL [...]
-</text><text class="breeze-static-checks-r5" x="0" y="1264.4" 
textLength="12.2" clip-path="url(#breeze-static-checks-line-51)">│</text><text 
class="breeze-static-checks-r7" x="451.4" y="1264.4" textLength="988.2" 
clip-path="url(#breeze-static-checks-line-51)">update-vendored-in-k8s-json-schema&#160;|&#160;update-version&#160;|&#160;validate-operators-init&#160;|&#160;&#160;</text><text
 class="breeze-static-checks-r5" x="1451.8" y="1264.4" textLength="12.2" 
clip-path="url(#breeze-static-c [...]
-</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)">yamllint)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#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="1313.2" 
textLength="12.2" clip-path="url(#breeze-static-checks-line-53)">│</text><text 
class="breeze-static-checks-r4" x="24.4" y="1313.2" textLength="12.2" 
clip-path="url(#breeze-static-checks-line-53)">-</text><text 
class="breeze-static-checks-r4" x="36.6" y="1313.2" textLength="61" 
clip-path="url(#breeze-static-checks-line-53)">-show</text><text 
class="breeze-static-checks-r4" x="97.6" y="1313.2" textLength="195.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-r4" x="24.4" y="1337.6" textLength="12.2" 
clip-path="url(#breeze-static-checks-line-54)">-</text><text 
class="breeze-static-checks-r4" x="36.6" y="1337.6" textLength="134.2" 
clip-path="url(#breeze-static-checks-line-54)">-initialize</text><text 
class="breeze-static-checks-r4" x="170.8" y="1337.6" textLength="146.4" clip-p 
[...]
-</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-r4" x="24.4" y="1362" textLength="12.2" 
clip-path="url(#breeze-static-checks-line-55)">-</text><text 
class="breeze-static-checks-r4" x="36.6" y="1362" textLength="48.8" 
clip-path="url(#breeze-static-checks-line-55)">-max</text><text 
class="breeze-static-checks-r4" x="85.4" y="1362" textLength="292.8" 
clip-path="url(#breeze- [...]
-</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="854" 
clip-path="url(#breeze-static-checks-line-56)">(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="1410.8" 
textLength="12.2" clip-path="url(#breeze-static-checks-line-57)">│</text><text 
class="breeze-static-checks-r5" x="451.4" y="1410.8" textLength="854" 
clip-path="url(#breeze-static-checks-line-57)">[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="1435.2" 
textLength="1464" 
clip-path="url(#breeze-static-checks-line-58)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text
 class="breeze-static-checks-r1" x="1464" y="1435.2" textLength="12.2" 
clip-path="url(#breeze-static-checks-line-58)">
-</text><text class="breeze-static-checks-r5" x="0" y="1459.6" 
textLength="24.4" clip-path="url(#breeze-static-checks-line-59)">╭─</text><text 
class="breeze-static-checks-r5" x="24.4" y="1459.6" textLength="463.6" 
clip-path="url(#breeze-static-checks-line-59)">&#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="1459.6" textLength="951.6" 
clip-path="url(#breeze-static-checks-line-59)">──────────────────────── [...]
-</text><text class="breeze-static-checks-r5" x="0" y="1484" textLength="12.2" 
clip-path="url(#breeze-static-checks-line-60)">│</text><text 
class="breeze-static-checks-r4" x="24.4" y="1484" textLength="12.2" 
clip-path="url(#breeze-static-checks-line-60)">-</text><text 
class="breeze-static-checks-r4" x="36.6" y="1484" textLength="61" 
clip-path="url(#breeze-static-checks-line-60)">-file</text><text 
class="breeze-static-checks-r6" x="256.2" y="1484" textLength="24.4" 
clip-path="url(#breeze-s [...]
-</text><text class="breeze-static-checks-r5" x="0" y="1508.4" 
textLength="12.2" clip-path="url(#breeze-static-checks-line-61)">│</text><text 
class="breeze-static-checks-r4" x="24.4" y="1508.4" textLength="12.2" 
clip-path="url(#breeze-static-checks-line-61)">-</text><text 
class="breeze-static-checks-r4" x="36.6" y="1508.4" textLength="48.8" 
clip-path="url(#breeze-static-checks-line-61)">-all</text><text 
class="breeze-static-checks-r4" x="85.4" y="1508.4" textLength="73.2" 
clip-path="url(# [...]
-</text><text class="breeze-static-checks-r5" x="0" y="1532.8" 
textLength="12.2" clip-path="url(#breeze-static-checks-line-62)">│</text><text 
class="breeze-static-checks-r4" x="24.4" y="1532.8" textLength="12.2" 
clip-path="url(#breeze-static-checks-line-62)">-</text><text 
class="breeze-static-checks-r4" x="36.6" y="1532.8" textLength="85.4" 
clip-path="url(#breeze-static-checks-line-62)">-commit</text><text 
class="breeze-static-checks-r4" x="122" y="1532.8" textLength="48.8" 
clip-path="url [...]
-</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-r1" x="305" y="1557.2" textLength="183" 
clip-path="url(#breeze-static-checks-line-63)">exclusive&#160;with&#160;</text><text
 class="breeze-static-checks-r4" x="488" y="1557.2" textLength="12.2" 
clip-path="url(#breeze-static-checks-line-63)">-</text><text 
class="breeze-static-checks-r4" x="500.2" y="1557.2" textLength="61" [...]
-</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-r7" x="305" y="1581.6" textLength="1134.6" 
clip-path="url(#breeze-static-checks-line-64)">(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="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="12.2" 
clip-path="url(#breeze-static-checks-line-65)">-</text><text 
class="breeze-static-checks-r4" x="36.6" y="1606" textLength="61" 
clip-path="url(#breeze-static-checks-line-65)">-last</text><text 
class="breeze-static-checks-r4" x="97.6" y="1606" textLength="85.4" 
clip-path="url(#breeze-st [...]
-</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="12.2" 
clip-path="url(#breeze-static-checks-line-66)">-</text><text 
class="breeze-static-checks-r4" x="36.6" y="1630.4" textLength="61" 
clip-path="url(#breeze-static-checks-line-66)">-only</text><text 
class="breeze-static-checks-r4" x="97.6" y="1630.4" textLength="134.2" 
clip-path="url(# [...]
-</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-r1" x="305" y="1654.8" textLength="1134.6" 
clip-path="url(#breeze-static-checks-line-67)">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="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;Building&#160;image&#160;before&#160;running&#160;checks&#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="12.2" 
clip-path="url(#breeze-static-checks-line-70)">-</text><text 
class="breeze-static-checks-r4" x="36.6" y="1728" textLength="61" 
clip-path="url(#breeze-static-checks-line-70)">-skip</text><text 
class="breeze-static-checks-r4" x="97.6" y="1728" textLength="244" 
clip-path="url(#breeze-sta [...]
-</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="12.2" 
clip-path="url(#breeze-static-checks-line-71)">-</text><text 
class="breeze-static-checks-r4" x="36.6" y="1752.4" textLength="73.2" 
clip-path="url(#breeze-static-checks-line-71)">-force</text><text 
class="breeze-static-checks-r4" x="109.8" y="1752.4" textLength="73.2" 
clip-path="ur [...]
-</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="12.2" 
clip-path="url(#breeze-static-checks-line-72)">-</text><text 
class="breeze-static-checks-r4" x="36.6" y="1776.8" textLength="73.2" 
clip-path="url(#breeze-static-checks-line-72)">-image</text><text 
class="breeze-static-checks-r4" x="109.8" y="1776.8" textLength="48.8" 
clip-path="ur [...]
-</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-r7" x="414.8" y="1801.2" textLength="963.8" 
clip-path="url(#breeze-static-checks-line-73)">(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;&#16
 [...]
-</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-r5" x="414.8" y="1825.6" textLength="963.8" 
clip-path="url(#breeze-static-checks-line-74)">[default:&#160;latest]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#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="12.2" 
clip-path="url(#breeze-static-checks-line-75)">-</text><text 
class="breeze-static-checks-r4" x="36.6" y="1850" textLength="85.4" 
clip-path="url(#breeze-static-checks-line-75)">-github</text><text 
class="breeze-static-checks-r4" x="122" y="1850" textLength="134.2" 
clip-path="url(#breez [...]
-</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="12.2" 
clip-path="url(#breeze-static-checks-line-76)">-</text><text 
class="breeze-static-checks-r4" x="36.6" y="1874.4" textLength="97.6" 
clip-path="url(#breeze-static-checks-line-76)">-builder</text><text 
class="breeze-static-checks-r1" x="414.8" y="1874.4" textLength="756.4" 
clip-path= [...]
-</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-r5" x="414.8" y="1898.8" textLength="756.4" 
clip-path="url(#breeze-static-checks-line-77)">[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="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="195.2" 
clip-path="url(#breeze-static-checks-line-79)">&#160;Common&#160;options&#160;</text><text
 class="breeze-static-checks-r5" x="219.6" y="1947.6" textLength="1220" 
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="12.2" 
clip-path="url(#breeze-static-checks-line-80)">-</text><text 
class="breeze-static-checks-r4" x="36.6" y="1972" textLength="48.8" 
clip-path="url(#breeze-static-checks-line-80)">-dry</text><text 
class="breeze-static-checks-r4" x="85.4" y="1972" textLength="48.8" 
clip-path="url(#breeze-s [...]
-</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="12.2" 
clip-path="url(#breeze-static-checks-line-81)">-</text><text 
class="breeze-static-checks-r4" x="36.6" y="1996.4" textLength="97.6" 
clip-path="url(#breeze-static-checks-line-81)">-verbose</text><text 
class="breeze-static-checks-r6" x="158.6" y="1996.4" textLength="24.4" 
clip-path=" [...]
-</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="12.2" 
clip-path="url(#breeze-static-checks-line-82)">-</text><text 
class="breeze-static-checks-r4" x="36.6" y="2020.8" textLength="61" 
clip-path="url(#breeze-static-checks-line-82)">-help</text><text 
class="breeze-static-checks-r6" x="158.6" y="2020.8" textLength="24.4" 
clip-path="url(# [...]
-</text><text class="breeze-static-checks-r5" x="0" y="2045.2" 
textLength="1464" 
clip-path="url(#breeze-static-checks-line-83)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text
 class="breeze-static-checks-r1" x="1464" y="2045.2" textLength="12.2" 
clip-path="url(#breeze-static-checks-line-83)">
+</text><text class="breeze-static-checks-r5" x="0" y="337.2" textLength="12.2" 
clip-path="url(#breeze-static-checks-line-13)">│</text><text 
class="breeze-static-checks-r7" x="451.4" y="337.2" textLength="988.2" 
clip-path="url(#breeze-static-checks-line-13)">check-cncf-k8s-only-for-executors&#160;|&#160;check-code-deprecations&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text
 class="breeze-static-chec [...]
+</text><text class="breeze-static-checks-r5" x="0" y="361.6" textLength="12.2" 
clip-path="url(#breeze-static-checks-line-14)">│</text><text 
class="breeze-static-checks-r7" x="451.4" y="361.6" textLength="988.2" 
clip-path="url(#breeze-static-checks-line-14)">check-compat-cache-on-methods&#160;|&#160;check-core-deprecation-classes&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text
 class="breeze-static-checks-r5" x="1451. [...]
+</text><text class="breeze-static-checks-r5" x="0" y="386" textLength="12.2" 
clip-path="url(#breeze-static-checks-line-15)">│</text><text 
class="breeze-static-checks-r7" x="451.4" y="386" textLength="988.2" 
clip-path="url(#breeze-static-checks-line-15)">check-daysago-import-from-utils&#160;|&#160;check-decorated-operator-implements-custom-name</text><text
 class="breeze-static-checks-r5" x="1451.8" y="386" textLength="12.2" 
clip-path="url(#breeze-static-checks-line-15)">│</text><text clas [...]
+</text><text class="breeze-static-checks-r5" x="0" y="410.4" textLength="12.2" 
clip-path="url(#breeze-static-checks-line-16)">│</text><text 
class="breeze-static-checks-r7" x="451.4" y="410.4" textLength="988.2" 
clip-path="url(#breeze-static-checks-line-16)">|&#160;check-deferrable-default-value&#160;|&#160;check-docstring-param-types&#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="434.8" textLength="12.2" 
clip-path="url(#breeze-static-checks-line-17)">│</text><text 
class="breeze-static-checks-r7" x="451.4" y="434.8" textLength="988.2" 
clip-path="url(#breeze-static-checks-line-17)">check-example-dags-urls&#160;|&#160;check-executables-have-shebangs&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text
 class="breeze-s [...]
+</text><text class="breeze-static-checks-r5" x="0" y="459.2" textLength="12.2" 
clip-path="url(#breeze-static-checks-line-18)">│</text><text 
class="breeze-static-checks-r7" x="451.4" y="459.2" textLength="988.2" 
clip-path="url(#breeze-static-checks-line-18)">check-extra-packages-references&#160;|&#160;check-extras-order&#160;|&#160;check-fab-migrations&#160;|&#160;&#160;&#160;&#160;</text><text
 class="breeze-static-checks-r5" x="1451.8" y="459.2" textLength="12.2" 
clip-path="url(#breeze-s [...]
+</text><text class="breeze-static-checks-r5" x="0" y="483.6" textLength="12.2" 
clip-path="url(#breeze-static-checks-line-19)">│</text><text 
class="breeze-static-checks-r7" x="451.4" y="483.6" textLength="988.2" 
clip-path="url(#breeze-static-checks-line-19)">check-for-inclusive-language&#160;|&#160;check-google-re2-as-dependency&#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="508" textLength="12.2" 
clip-path="url(#breeze-static-checks-line-20)">│</text><text 
class="breeze-static-checks-r7" x="451.4" y="508" textLength="988.2" 
clip-path="url(#breeze-static-checks-line-20)">check-hatch-build-order&#160;|&#160;check-hooks-apply&#160;|&#160;check-incorrect-use-of-LoggingMixin</text><text
 class="breeze-static-checks-r5" x="1451.8" y="508" textLength="12.2" 
clip-path="url(#breeze-static-checks-line-20)">│</text> [...]
+</text><text class="breeze-static-checks-r5" x="0" y="532.4" textLength="12.2" 
clip-path="url(#breeze-static-checks-line-21)">│</text><text 
class="breeze-static-checks-r7" x="451.4" y="532.4" textLength="988.2" 
clip-path="url(#breeze-static-checks-line-21)">|&#160;check-init-decorator-arguments&#160;|&#160;check-integrations-list-consistent&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text
 class="breeze-static-checks-r5" x="1451.8" y="532.4" textLength="12.2" [...]
+</text><text class="breeze-static-checks-r5" x="0" y="556.8" textLength="12.2" 
clip-path="url(#breeze-static-checks-line-22)">│</text><text 
class="breeze-static-checks-r7" x="451.4" y="556.8" textLength="988.2" 
clip-path="url(#breeze-static-checks-line-22)">check-lazy-logging&#160;|&#160;check-links-to-example-dags-do-not-use-hardcoded-versions&#160;|&#160;</text><text
 class="breeze-static-checks-r5" x="1451.8" y="556.8" textLength="12.2" 
clip-path="url(#breeze-static-checks-line-22)">│< [...]
+</text><text class="breeze-static-checks-r5" x="0" y="581.2" textLength="12.2" 
clip-path="url(#breeze-static-checks-line-23)">│</text><text 
class="breeze-static-checks-r7" x="451.4" y="581.2" textLength="988.2" 
clip-path="url(#breeze-static-checks-line-23)">check-merge-conflict&#160;|&#160;check-newsfragments-are-valid&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</t
 [...]
+</text><text class="breeze-static-checks-r5" x="0" y="605.6" textLength="12.2" 
clip-path="url(#breeze-static-checks-line-24)">│</text><text 
class="breeze-static-checks-r7" x="451.4" y="605.6" textLength="988.2" 
clip-path="url(#breeze-static-checks-line-24)">check-no-airflow-deprecation-in-providers&#160;|&#160;check-no-providers-in-core-examples&#160;|</text><text
 class="breeze-static-checks-r5" x="1451.8" y="605.6" textLength="12.2" 
clip-path="url(#breeze-static-checks-line-24)">│</text [...]
+</text><text class="breeze-static-checks-r5" x="0" y="630" textLength="12.2" 
clip-path="url(#breeze-static-checks-line-25)">│</text><text 
class="breeze-static-checks-r7" x="451.4" y="630" textLength="988.2" 
clip-path="url(#breeze-static-checks-line-25)">check-only-new-session-with-provide-session&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#
 [...]
+</text><text class="breeze-static-checks-r5" x="0" y="654.4" textLength="12.2" 
clip-path="url(#breeze-static-checks-line-26)">│</text><text 
class="breeze-static-checks-r7" x="451.4" y="654.4" textLength="988.2" 
clip-path="url(#breeze-static-checks-line-26)">check-persist-credentials-disabled-in-github-workflows&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text
 class="bre [...]
+</text><text class="breeze-static-checks-r5" x="0" y="678.8" textLength="12.2" 
clip-path="url(#breeze-static-checks-line-27)">│</text><text 
class="breeze-static-checks-r7" x="451.4" y="678.8" textLength="988.2" 
clip-path="url(#breeze-static-checks-line-27)">check-pre-commit-information-consistent&#160;|&#160;check-provide-create-sessions-imports&#160;|</text><text
 class="breeze-static-checks-r5" x="1451.8" y="678.8" textLength="12.2" 
clip-path="url(#breeze-static-checks-line-27)">│</text [...]
+</text><text class="breeze-static-checks-r5" x="0" y="703.2" textLength="12.2" 
clip-path="url(#breeze-static-checks-line-28)">│</text><text 
class="breeze-static-checks-r7" x="451.4" y="703.2" textLength="988.2" 
clip-path="url(#breeze-static-checks-line-28)">check-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="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-providers-init-file-missing&#160;|&#160;check-providers-subpackages-init-file-exist&#160;|</text><text
 class="breeze-static-checks-r5" x="1451.8" y="727.6" textLength="12.2" 
clip-path="url(#breeze-static-checks-line-29)">│</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-pydevd-left-in-code&#160;|&#160;check-revision-heads-map&#160;|&#160;&#160;&#160;&#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="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-safe-filter-usage-in-html&#160;|&#160;check-sql-dependency-common-data-structure&#160;|&#160;&#160;&#160;</text><text
 class="breeze-static-checks-r5" x="1451.8" y="776.4" textLength="12.2" 
clip-path="url(#breeze-static-checks-li [...]
+</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-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="800.8" textLen [...]
+</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-system-tests-tocs&#160;|&#160;check-tests-in-the-right-folders&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text
 class="breeze-static [...]
+</text><text class="breeze-static-checks-r5" x="0" y="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-tests-unittest-testcase&#160;|&#160;check-urlparse-usage-in-code&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text
 class="breeze-static-checks-r5 [...]
+</text><text class="breeze-static-checks-r5" x="0" y="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-usage-of-re2-over-re&#160;|&#160;check-xml&#160;|&#160;codespell&#160;|&#160;compile-www-assets&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text
 class="breeze-static-checks-r5" x="1451.8" y="874" textLength="12.2"  [...]
+</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)">compile-www-assets-dev&#160;|&#160;create-missing-init-py-files-tests&#160;|&#160;debug-statements&#160;|&#160;</text><text
 class="breeze-static-checks-r5" x="1451.8" y="898.4" textLength="12.2" 
clip-path="url(#breeze-static-checks-li [...]
+</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)">detect-private-key&#160;|&#160;doctoc&#160;|&#160;end-of-file-fixer&#160;|&#160;fix-encoding-pragma&#160;|&#160;flynt&#160;|&#160;&#160;</text><text
 class="breeze-static-checks-r5" x="1451.8" y="922.8" textLength="12.2" 
clip-path="url [...]
+</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)">generate-airflow-diagrams&#160;|&#160;generate-pypi-readme&#160;|&#160;identity&#160;|&#160;insert-license&#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)">kubeconform&#160;|&#160;lint-chart-schema&#160;|&#160;lint-css&#160;|&#160;lint-dockerfile&#160;|&#160;lint-helm-chart&#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)">lint-json-schema&#160;|&#160;lint-markdown&#160;|&#160;lint-openapi&#160;|&#160;mixed-line-ending&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text
 class="breeze-static-checks-r5" x="1451.8" y="996 [...]
+</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)">mypy-airflow&#160;|&#160;mypy-dev&#160;|&#160;mypy-docs&#160;|&#160;mypy-providers&#160;|&#160;pretty-format-json&#160;|&#160;&#160;&#160;&#160;&#160;&#160;</text><text
 class="breeze-static-checks-r5" x="1451.8" y="1020.4" textLengt [...]
+</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)">pylint&#160;|&#160;python-no-log-warn&#160;|&#160;replace-bad-characters&#160;|&#160;rst-backticks&#160;|&#160;ruff&#160;|&#160;&#160;&#160;&#160;</text><text
 class="breeze-static-checks-r5" x="1451.8" y="1044.8" textLength="12.2" c [...]
+</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)">ruff-format&#160;|&#160;shellcheck&#160;|&#160;trailing-whitespace&#160;|&#160;ts-compile-format-lint-www&#160;|&#160;&#160;&#160;&#160;</text><text
 class="breeze-static-checks-r5" x="1451.8" y="1069.2" textLength="12.2" 
clip-path=" [...]
+</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)">update-black-version&#160;|&#160;update-breeze-cmd-output&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;
 [...]
+</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)">update-breeze-readme-config-hash&#160;|&#160;update-build-dependencies&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text
 class="breeze-static-checks-r5"  [...]
+</text><text class="breeze-static-checks-r5" x="0" y="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)">update-chart-dependencies&#160;|&#160;update-common-sql-api-stubs&#160;|&#160;update-er-diagram&#160;|&#160;&#160;&#160;&#160;</text><text
 class="breeze-static-checks-r5" x="1451.8" y="1142.4" textLength="12.2" 
clip-path="url(#breez [...]
+</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)">update-extras&#160;|&#160;update-in-the-wild-to-be-sorted&#160;|&#160;&#160;&#160;&#160;&#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="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)">update-inlined-dockerfile-scripts&#160;|&#160;update-installed-providers-to-be-sorted&#160;|&#160;&#160;&#160;&#160;</text><text
 class="breeze-static-checks-r5" x="1451.8" y="1191.2" textLength="12.2" 
clip-path="url(#breeze-static-c [...]
+</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)">update-installers&#160;|&#160;update-local-yml-file&#160;|&#160;update-migration-references&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text
 class="breeze-static-checks-r5" x="1451.8" y="1215.6" textLength="12.2" c [...]
+</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)">update-providers-dependencies&#160;|&#160;update-reproducible-source-date-epoch&#160;|&#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" clip-pa 
[...]
+</text><text class="breeze-static-checks-r5" x="0" y="1264.4" 
textLength="12.2" clip-path="url(#breeze-static-checks-line-51)">│</text><text 
class="breeze-static-checks-r7" x="451.4" y="1264.4" textLength="988.2" 
clip-path="url(#breeze-static-checks-line-51)">update-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="1264.4" [...]
+</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)">update-vendored-in-k8s-json-schema&#160;|&#160;update-version&#160;|&#160;validate-operators-init&#160;|&#160;&#160;</text><text
 class="breeze-static-checks-r5" x="1451.8" y="1288.8" textLength="12.2" 
clip-path="url(#breeze-static-c [...]
+</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)">yamllint)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#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="1337.6" 
textLength="12.2" clip-path="url(#breeze-static-checks-line-54)">│</text><text 
class="breeze-static-checks-r4" x="24.4" y="1337.6" textLength="12.2" 
clip-path="url(#breeze-static-checks-line-54)">-</text><text 
class="breeze-static-checks-r4" x="36.6" y="1337.6" textLength="61" 
clip-path="url(#breeze-static-checks-line-54)">-show</text><text 
class="breeze-static-checks-r4" x="97.6" y="1337.6" textLength="195.2" 
clip-path="url(# [...]
+</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-r4" x="24.4" y="1362" textLength="12.2" 
clip-path="url(#breeze-static-checks-line-55)">-</text><text 
class="breeze-static-checks-r4" x="36.6" y="1362" textLength="134.2" 
clip-path="url(#breeze-static-checks-line-55)">-initialize</text><text 
class="breeze-static-checks-r4" x="170.8" y="1362" textLength="146.4" 
clip-path="url [...]
+</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-r4" x="24.4" y="1386.4" textLength="12.2" 
clip-path="url(#breeze-static-checks-line-56)">-</text><text 
class="breeze-static-checks-r4" x="36.6" y="1386.4" textLength="48.8" 
clip-path="url(#breeze-static-checks-line-56)">-max</text><text 
class="breeze-static-checks-r4" x="85.4" y="1386.4" textLength="292.8" 
clip-path="url( [...]
+</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="854" 
clip-path="url(#breeze-static-checks-line-57)">(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="1435.2" 
textLength="12.2" clip-path="url(#breeze-static-checks-line-58)">│</text><text 
class="breeze-static-checks-r5" x="451.4" y="1435.2" textLength="854" 
clip-path="url(#breeze-static-checks-line-58)">[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="1459.6" 
textLength="1464" 
clip-path="url(#breeze-static-checks-line-59)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text
 class="breeze-static-checks-r1" x="1464" y="1459.6" textLength="12.2" 
clip-path="url(#breeze-static-checks-line-59)">
+</text><text class="breeze-static-checks-r5" x="0" y="1484" textLength="24.4" 
clip-path="url(#breeze-static-checks-line-60)">╭─</text><text 
class="breeze-static-checks-r5" x="24.4" y="1484" textLength="463.6" 
clip-path="url(#breeze-static-checks-line-60)">&#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="1484" textLength="951.6" 
clip-path="url(#breeze-static-checks-line-60)">────────────────────────────── 
[...]
+</text><text class="breeze-static-checks-r5" x="0" y="1508.4" 
textLength="12.2" clip-path="url(#breeze-static-checks-line-61)">│</text><text 
class="breeze-static-checks-r4" x="24.4" y="1508.4" textLength="12.2" 
clip-path="url(#breeze-static-checks-line-61)">-</text><text 
class="breeze-static-checks-r4" x="36.6" y="1508.4" textLength="61" 
clip-path="url(#breeze-static-checks-line-61)">-file</text><text 
class="breeze-static-checks-r6" x="256.2" y="1508.4" textLength="24.4" 
clip-path="url(# [...]
+</text><text class="breeze-static-checks-r5" x="0" y="1532.8" 
textLength="12.2" clip-path="url(#breeze-static-checks-line-62)">│</text><text 
class="breeze-static-checks-r4" x="24.4" y="1532.8" textLength="12.2" 
clip-path="url(#breeze-static-checks-line-62)">-</text><text 
class="breeze-static-checks-r4" x="36.6" y="1532.8" textLength="48.8" 
clip-path="url(#breeze-static-checks-line-62)">-all</text><text 
class="breeze-static-checks-r4" x="85.4" y="1532.8" textLength="73.2" 
clip-path="url(# [...]
+</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="12.2" 
clip-path="url(#breeze-static-checks-line-63)">-</text><text 
class="breeze-static-checks-r4" x="36.6" y="1557.2" textLength="85.4" 
clip-path="url(#breeze-static-checks-line-63)">-commit</text><text 
class="breeze-static-checks-r4" x="122" y="1557.2" textLength="48.8" 
clip-path="url [...]
+</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-r1" x="305" y="1581.6" textLength="183" 
clip-path="url(#breeze-static-checks-line-64)">exclusive&#160;with&#160;</text><text
 class="breeze-static-checks-r4" x="488" y="1581.6" textLength="12.2" 
clip-path="url(#breeze-static-checks-line-64)">-</text><text 
class="breeze-static-checks-r4" x="500.2" y="1581.6" textLength="61" [...]
+</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-r7" x="305" y="1606" textLength="1134.6" 
clip-path="url(#breeze-static-checks-line-65)">(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="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="12.2" 
clip-path="url(#breeze-static-checks-line-66)">-</text><text 
class="breeze-static-checks-r4" x="36.6" y="1630.4" textLength="61" 
clip-path="url(#breeze-static-checks-line-66)">-last</text><text 
class="breeze-static-checks-r4" x="97.6" y="1630.4" textLength="85.4" 
clip-path="url(#b [...]
+</text><text class="breeze-static-checks-r5" x="0" y="1654.8" 
textLength="12.2" clip-path="url(#breeze-static-checks-line-67)">│</text><text 
class="breeze-static-checks-r4" x="24.4" y="1654.8" textLength="12.2" 
clip-path="url(#breeze-static-checks-line-67)">-</text><text 
class="breeze-static-checks-r4" x="36.6" y="1654.8" textLength="61" 
clip-path="url(#breeze-static-checks-line-67)">-only</text><text 
class="breeze-static-checks-r4" x="97.6" y="1654.8" textLength="134.2" 
clip-path="url(# [...]
+</text><text class="breeze-static-checks-r5" x="0" y="1679.2" 
textLength="12.2" clip-path="url(#breeze-static-checks-line-68)">│</text><text 
class="breeze-static-checks-r1" x="305" y="1679.2" textLength="1134.6" 
clip-path="url(#breeze-static-checks-line-68)">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="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;Building&#160;image&#160;before&#160;running&#160;checks&#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="12.2" 
clip-path="url(#breeze-static-checks-line-71)">-</text><text 
class="breeze-static-checks-r4" x="36.6" y="1752.4" textLength="61" 
clip-path="url(#breeze-static-checks-line-71)">-skip</text><text 
class="breeze-static-checks-r4" x="97.6" y="1752.4" textLength="244" 
clip-path="url(#br [...]
+</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="12.2" 
clip-path="url(#breeze-static-checks-line-72)">-</text><text 
class="breeze-static-checks-r4" x="36.6" y="1776.8" textLength="73.2" 
clip-path="url(#breeze-static-checks-line-72)">-force</text><text 
class="breeze-static-checks-r4" x="109.8" y="1776.8" textLength="73.2" 
clip-path="ur [...]
+</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="12.2" 
clip-path="url(#breeze-static-checks-line-73)">-</text><text 
class="breeze-static-checks-r4" x="36.6" y="1801.2" textLength="73.2" 
clip-path="url(#breeze-static-checks-line-73)">-image</text><text 
class="breeze-static-checks-r4" x="109.8" y="1801.2" textLength="48.8" 
clip-path="ur [...]
+</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="414.8" y="1825.6" textLength="963.8" 
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;&#16
 [...]
+</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-r5" x="414.8" y="1850" textLength="963.8" 
clip-path="url(#breeze-static-checks-line-75)">[default:&#160;latest]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#16
 [...]
+</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="12.2" 
clip-path="url(#breeze-static-checks-line-76)">-</text><text 
class="breeze-static-checks-r4" x="36.6" y="1874.4" textLength="85.4" 
clip-path="url(#breeze-static-checks-line-76)">-github</text><text 
class="breeze-static-checks-r4" x="122" y="1874.4" textLength="134.2" 
clip-path="ur [...]
+</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="12.2" 
clip-path="url(#breeze-static-checks-line-77)">-</text><text 
class="breeze-static-checks-r4" x="36.6" y="1898.8" textLength="97.6" 
clip-path="url(#breeze-static-checks-line-77)">-builder</text><text 
class="breeze-static-checks-r1" x="414.8" y="1898.8" textLength="756.4" 
clip-path= [...]
+</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-r5" x="414.8" y="1923.2" textLength="756.4" 
clip-path="url(#breeze-static-checks-line-78)">[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="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="195.2" 
clip-path="url(#breeze-static-checks-line-80)">&#160;Common&#160;options&#160;</text><text
 class="breeze-static-checks-r5" x="219.6" y="1972" textLength="1220" 
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="12.2" 
clip-path="url(#breeze-static-checks-line-81)">-</text><text 
class="breeze-static-checks-r4" x="36.6" y="1996.4" textLength="48.8" 
clip-path="url(#breeze-static-checks-line-81)">-dry</text><text 
class="breeze-static-checks-r4" x="85.4" y="1996.4" textLength="48.8" 
clip-path="url(# [...]
+</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="12.2" 
clip-path="url(#breeze-static-checks-line-82)">-</text><text 
class="breeze-static-checks-r4" x="36.6" y="2020.8" textLength="97.6" 
clip-path="url(#breeze-static-checks-line-82)">-verbose</text><text 
class="breeze-static-checks-r6" x="158.6" y="2020.8" textLength="24.4" 
clip-path=" [...]
+</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="12.2" 
clip-path="url(#breeze-static-checks-line-83)">-</text><text 
class="breeze-static-checks-r4" x="36.6" y="2045.2" textLength="61" 
clip-path="url(#breeze-static-checks-line-83)">-help</text><text 
class="breeze-static-checks-r6" x="158.6" y="2045.2" textLength="24.4" 
clip-path="url(# [...]
+</text><text class="breeze-static-checks-r5" x="0" y="2069.6" 
textLength="1464" 
clip-path="url(#breeze-static-checks-line-84)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text
 class="breeze-static-checks-r1" x="1464" y="2069.6" textLength="12.2" 
clip-path="url(#breeze-static-checks-line-84)">
 </text>
     </g>
     </g>
diff --git a/dev/breeze/doc/images/output_static-checks.txt 
b/dev/breeze/doc/images/output_static-checks.txt
index ebec23568e..78b9775ad8 100644
--- a/dev/breeze/doc/images/output_static-checks.txt
+++ b/dev/breeze/doc/images/output_static-checks.txt
@@ -1 +1 @@
-e83bbc2b97062b42c940992d0c2d80f6
+bff57d0c14fb8cd14a682610c408b8fd
diff --git a/dev/breeze/src/airflow_breeze/pre_commit_ids.py 
b/dev/breeze/src/airflow_breeze/pre_commit_ids.py
index eb5c46e1ab..2ca41946e1 100644
--- a/dev/breeze/src/airflow_breeze/pre_commit_ids.py
+++ b/dev/breeze/src/airflow_breeze/pre_commit_ids.py
@@ -38,6 +38,7 @@ PRE_COMMIT_LIST = [
     "check-builtin-literals",
     "check-changelog-has-no-duplicates",
     "check-cncf-k8s-only-for-executors",
+    "check-code-deprecations",
     "check-compat-cache-on-methods",
     "check-core-deprecation-classes",
     "check-daysago-import-from-utils",
diff --git a/scripts/ci/pre_commit/check_deprecations.py 
b/scripts/ci/pre_commit/check_deprecations.py
new file mode 100755
index 0000000000..aa01e56065
--- /dev/null
+++ b/scripts/ci/pre_commit/check_deprecations.py
@@ -0,0 +1,194 @@
+#!/usr/bin/env python
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+
+from __future__ import annotations
+
+import ast
+import sys
+from functools import lru_cache
+from pathlib import Path
+
+allowed_warnings: dict[str, tuple[str, ...]] = {
+    "airflow": (
+        "airflow.exceptions.RemovedInAirflow3Warning",
+        "airflow.utils.context.AirflowContextDeprecationWarning",
+    ),
+    "providers": ("airflow.exceptions.AirflowProviderDeprecationWarning",),
+}
+compatible_decorators: frozenset[tuple[str, ...]] = frozenset(
+    [
+        # PEP 702 decorators
+        ("warnings", "deprecated"),
+        ("typing_extensions", "deprecated"),
+        # `Deprecated` package decorators
+        ("deprecated", "deprecated"),
+        ("deprecated", "classic", "deprecated"),
+    ]
+)
+
+
+@lru_cache(maxsize=None)
+def allowed_group_warnings(group: str) -> tuple[str, tuple[str, ...]]:
+    group_warnings = allowed_warnings[group]
+    if len(group_warnings) == 1:
+        return f"expected {group_warnings[0]} type", group_warnings
+    else:
+        return f"expected one of {', '.join(group_warnings)} types", 
group_warnings
+
+
+def built_import_from(import_from: ast.ImportFrom) -> list[str]:
+    result: list[str] = []
+    module_name = import_from.module
+    if not module_name:
+        return result
+
+    imports_levels = module_name.count(".") + 1
+    for import_path in compatible_decorators:
+        if imports_levels >= len(import_path):
+            continue
+        if module_name != ".".join(import_path[:imports_levels]):
+            continue
+        for name in import_from.names:
+            if name.name == import_path[imports_levels]:
+                alias: str = name.asname or name.name
+                remaining_part = len(import_path) - imports_levels - 1
+                if remaining_part > 0:
+                    alias = ".".join([alias, *import_path[-remaining_part:]])
+                result.append(alias)
+    return result
+
+
+def built_import(import_clause: ast.Import) -> list[str]:
+    result = []
+    for name in import_clause.names:
+        module_name = name.name
+        imports_levels = module_name.count(".") + 1
+        for import_path in compatible_decorators:
+            if imports_levels > len(import_path):
+                continue
+            if module_name != ".".join(import_path[:imports_levels]):
+                continue
+
+            alias: str = name.asname or module_name
+            remaining_part = len(import_path) - imports_levels
+            if remaining_part > 0:
+                alias = ".".join([alias, *import_path[-remaining_part:]])
+            result.append(alias)
+    return result
+
+
+def found_compatible_decorators(mod: ast.Module) -> tuple[str, ...]:
+    result = []
+    for node in mod.body:
+        if not isinstance(node, (ast.ImportFrom, ast.Import)):
+            continue
+        result.extend(built_import_from(node) if isinstance(node, 
ast.ImportFrom) else built_import(node))
+    return tuple(sorted(set(result)))
+
+
+def resolve_name(obj: ast.Attribute | ast.Name) -> str:
+    name = ""
+    while True:
+        if isinstance(obj, ast.Name):
+            name = f"{obj.id}.{name}" if name else obj.id
+            break
+        elif isinstance(obj, ast.Attribute):
+            name = f"{obj.attr}.{name}" if name else obj.attr
+            obj = obj.value  # type: ignore[assignment]
+        else:
+            msg = f"Expected to got ast.Name or ast.Attribute but got 
{type(obj).__name__!r}."
+            raise SystemExit(msg)
+
+    return name
+
+
+def resolve_decorator_name(obj: ast.Call | ast.Attribute | ast.Name) -> str:
+    return resolve_name(obj.func if isinstance(obj, ast.Call) else obj)  # 
type: ignore[arg-type]
+
+
+def check_decorators(mod: ast.Module, file: str, file_group: str) -> int:
+    if not (decorators_names := found_compatible_decorators(mod)):
+        # There are no expected decorators into module, exit early
+        return 0
+
+    errors = 0
+    for node in ast.walk(mod):
+        if not hasattr(node, "decorator_list"):
+            continue
+
+        for decorator in node.decorator_list:
+            decorator_name = resolve_decorator_name(decorator)
+            if decorator_name not in decorators_names:
+                continue
+
+            expected_types, warns_types = allowed_group_warnings(file_group)
+            category_keyword: ast.keyword | None = next(
+                filter(lambda k: k and k.arg == "category", 
decorator.keywords), None
+            )
+            if category_keyword is None:
+                errors += 1
+                print(
+                    f"{file}:{decorator.lineno}: Missing `category` keyword on 
decorator @{decorator_name}, "
+                    f"{expected_types}"
+                )
+                continue
+            elif not hasattr(category_keyword, "value"):
+                continue
+            category_value_ast = category_keyword.value
+
+            warns_types = allowed_warnings[file_group]
+            if isinstance(category_value_ast, (ast.Name, ast.Attribute)):
+                category_value = resolve_name(category_value_ast)
+                if not any(cv.endswith(category_value) for cv in warns_types):
+                    errors += 1
+                    print(
+                        f"{file}:{category_keyword.lineno}: "
+                        f"category={category_value}, but {expected_types}"
+                    )
+            elif isinstance(category_value_ast, ast.Constant):
+                errors += 1
+                print(
+                    f"{file}:{category_keyword.lineno}: "
+                    f"category=Literal[{category_value_ast.value!r}], but 
{expected_types}"
+                )
+
+    return errors
+
+
+def check_file(file: str) -> int:
+    file_path = Path(file)
+    if not file_path.as_posix().startswith("airflow"):
+        # Not expected file, exit early
+        return 0
+    file_group = "providers" if 
file_path.as_posix().startswith("airflow/providers") else "airflow"
+    ast_module = ast.parse(file_path.read_text("utf-8"), file)
+    errors = 0
+    errors += check_decorators(ast_module, file, file_group)
+    return errors
+
+
+def main(*args: str) -> int:
+    errors = sum(check_file(file) for file in args[1:])
+    if not errors:
+        return 0
+    print(f"Found {errors} error{'s' if errors > 1 else ''}.")
+    return 1
+
+
+if __name__ == "__main__":
+    sys.exit(main(*sys.argv))
diff --git a/tests/api_experimental/auth/backend/test_basic_auth.py 
b/tests/api_experimental/auth/backend/test_basic_auth.py
index 0d84465dd0..a7f7a2a1cd 100644
--- a/tests/api_experimental/auth/backend/test_basic_auth.py
+++ b/tests/api_experimental/auth/backend/test_basic_auth.py
@@ -21,6 +21,7 @@ from base64 import b64encode
 import pytest
 from flask_login import current_user
 
+from airflow.exceptions import RemovedInAirflow3Warning
 from tests.test_utils.db import clear_db_pools
 
 pytestmark = pytest.mark.db_test
@@ -49,7 +50,10 @@ class TestBasicAuth:
         clear_db_pools()
 
         with self.app.test_client() as test_client:
-            response = test_client.get("/api/experimental/pools", 
headers={"Authorization": token})
+            with pytest.warns(RemovedInAirflow3Warning, match=r"Use 
Pool.get_pools\(\) instead"):
+                # Experimental client itself deprecated, no reason to change 
to actual methods
+                # It should be removed in the same time: Airflow 3.0
+                response = test_client.get("/api/experimental/pools", 
headers={"Authorization": token})
             assert current_user.email == "t...@fab.org"
 
         assert response.status_code == 200

Reply via email to