This is an automated email from the ASF dual-hosted git repository.
potiuk pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/airflow.git
The following commit(s) were added to refs/heads/main by this push:
new 82343f67812 Add filtering options to auto-triage command (#63300)
82343f67812 is described below
commit 82343f67812be56f23b1f02b163c67fc182f0914
Author: Jarek Potiuk <[email protected]>
AuthorDate: Tue Mar 10 23:39:07 2026 +0100
Add filtering options to auto-triage command (#63300)
Add several new filtering criteria organized into logical groups:
Filter options:
- --label: now supports wildcards (e.g. 'area:*', 'provider:amazon*')
- --exclude-label: exclude PRs by label, supports wildcards
- --created-after/--created-before: date range for PR creation
- --updated-after/--updated-before: date range for last update
- --include-collaborators: include collaborator PRs (normally skipped)
- --pending-approval-only: only show PRs needing workflow approval
- --checks-state: filter by CI status (failure/success/pending/any)
- --min-commits-behind: filter by staleness
Exact labels and date ranges are pushed to GitHub search for efficiency.
Wildcard labels are matched client-side with fnmatch after fetching.
Option groups in pr_commands_config.py reorganized into: Target selection,
Filter options, Pagination and sorting, Assessment options, Action options.
Co-authored-by: Claude Opus 4.6 <[email protected]>
---
dev/breeze/doc/images/output_pr_auto-triage.svg | 206 +++++++++++++++------
dev/breeze/doc/images/output_pr_auto-triage.txt | 2 +-
.../src/airflow_breeze/commands/pr_commands.py | 183 ++++++++++++++++--
.../airflow_breeze/commands/pr_commands_config.py | 31 +++-
4 files changed, 343 insertions(+), 79 deletions(-)
diff --git a/dev/breeze/doc/images/output_pr_auto-triage.svg
b/dev/breeze/doc/images/output_pr_auto-triage.svg
index c80d47d3a19..7210505b83e 100644
--- a/dev/breeze/doc/images/output_pr_auto-triage.svg
+++ b/dev/breeze/doc/images/output_pr_auto-triage.svg
@@ -1,4 +1,4 @@
-<svg class="rich-terminal" viewBox="0 0 1482 1636.0"
xmlns="http://www.w3.org/2000/svg">
+<svg class="rich-terminal" viewBox="0 0 1482 2172.7999999999997"
xmlns="http://www.w3.org/2000/svg">
<!-- Generated with Rich https://www.textualize.io -->
<style>
@@ -43,7 +43,7 @@
<defs>
<clipPath id="breeze-pr-auto-triage-clip-terminal">
- <rect x="0" y="0" width="1463.0" height="1585.0" />
+ <rect x="0" y="0" width="1463.0" height="2121.7999999999997" />
</clipPath>
<clipPath id="breeze-pr-auto-triage-line-0">
<rect x="0" y="1.5" width="1464" height="24.65"/>
@@ -237,9 +237,75 @@
<clipPath id="breeze-pr-auto-triage-line-63">
<rect x="0" y="1538.7" width="1464" height="24.65"/>
</clipPath>
+<clipPath id="breeze-pr-auto-triage-line-64">
+ <rect x="0" y="1563.1" width="1464" height="24.65"/>
+ </clipPath>
+<clipPath id="breeze-pr-auto-triage-line-65">
+ <rect x="0" y="1587.5" width="1464" height="24.65"/>
+ </clipPath>
+<clipPath id="breeze-pr-auto-triage-line-66">
+ <rect x="0" y="1611.9" width="1464" height="24.65"/>
+ </clipPath>
+<clipPath id="breeze-pr-auto-triage-line-67">
+ <rect x="0" y="1636.3" width="1464" height="24.65"/>
+ </clipPath>
+<clipPath id="breeze-pr-auto-triage-line-68">
+ <rect x="0" y="1660.7" width="1464" height="24.65"/>
+ </clipPath>
+<clipPath id="breeze-pr-auto-triage-line-69">
+ <rect x="0" y="1685.1" width="1464" height="24.65"/>
+ </clipPath>
+<clipPath id="breeze-pr-auto-triage-line-70">
+ <rect x="0" y="1709.5" width="1464" height="24.65"/>
+ </clipPath>
+<clipPath id="breeze-pr-auto-triage-line-71">
+ <rect x="0" y="1733.9" width="1464" height="24.65"/>
+ </clipPath>
+<clipPath id="breeze-pr-auto-triage-line-72">
+ <rect x="0" y="1758.3" width="1464" height="24.65"/>
+ </clipPath>
+<clipPath id="breeze-pr-auto-triage-line-73">
+ <rect x="0" y="1782.7" width="1464" height="24.65"/>
+ </clipPath>
+<clipPath id="breeze-pr-auto-triage-line-74">
+ <rect x="0" y="1807.1" width="1464" height="24.65"/>
+ </clipPath>
+<clipPath id="breeze-pr-auto-triage-line-75">
+ <rect x="0" y="1831.5" width="1464" height="24.65"/>
+ </clipPath>
+<clipPath id="breeze-pr-auto-triage-line-76">
+ <rect x="0" y="1855.9" width="1464" height="24.65"/>
+ </clipPath>
+<clipPath id="breeze-pr-auto-triage-line-77">
+ <rect x="0" y="1880.3" width="1464" height="24.65"/>
+ </clipPath>
+<clipPath id="breeze-pr-auto-triage-line-78">
+ <rect x="0" y="1904.7" width="1464" height="24.65"/>
+ </clipPath>
+<clipPath id="breeze-pr-auto-triage-line-79">
+ <rect x="0" y="1929.1" width="1464" height="24.65"/>
+ </clipPath>
+<clipPath id="breeze-pr-auto-triage-line-80">
+ <rect x="0" y="1953.5" width="1464" height="24.65"/>
+ </clipPath>
+<clipPath id="breeze-pr-auto-triage-line-81">
+ <rect x="0" y="1977.9" width="1464" height="24.65"/>
+ </clipPath>
+<clipPath id="breeze-pr-auto-triage-line-82">
+ <rect x="0" y="2002.3" width="1464" height="24.65"/>
+ </clipPath>
+<clipPath id="breeze-pr-auto-triage-line-83">
+ <rect x="0" y="2026.7" width="1464" height="24.65"/>
+ </clipPath>
+<clipPath id="breeze-pr-auto-triage-line-84">
+ <rect x="0" y="2051.1" width="1464" height="24.65"/>
+ </clipPath>
+<clipPath id="breeze-pr-auto-triage-line-85">
+ <rect x="0" y="2075.5" width="1464" height="24.65"/>
+ </clipPath>
</defs>
- <rect fill="#292929" stroke="rgba(255,255,255,0.35)" stroke-width="1"
x="1" y="1" width="1480" height="1634" rx="8"/><text
class="breeze-pr-auto-triage-title" fill="#c5c8c6" text-anchor="middle" x="740"
y="27">Command: pr auto-triage</text>
+ <rect fill="#292929" stroke="rgba(255,255,255,0.35)" stroke-width="1"
x="1" y="1" width="1480" height="2170.8" rx="8"/><text
class="breeze-pr-auto-triage-title" fill="#c5c8c6" text-anchor="middle" x="740"
y="27">Command: pr auto-triage</text>
<g transform="translate(26,22)">
<circle cx="0" cy="0" r="7" fill="#ff5f57"/>
<circle cx="22" cy="0" r="7" fill="#febc2e"/>
@@ -258,62 +324,84 @@
</text><text class="breeze-pr-auto-triage-r5" x="0" y="166.4"
textLength="12.2" clip-path="url(#breeze-pr-auto-triage-line-6)">│</text><text
class="breeze-pr-auto-triage-r4" x="24.4" y="166.4" textLength="231.8"
clip-path="url(#breeze-pr-auto-triage-line-6)">--github-token     </text><text
class="breeze-pr-auto-triage-r1" x="329.4" y="166.4" textLength="512.4"
clip-path="url(#breeze-pr-auto-triage-line-6)">The token used to authenticate t
[...]
</text><text class="breeze-pr-auto-triage-r5" x="0" y="190.8"
textLength="12.2" clip-path="url(#breeze-pr-auto-triage-line-7)">│</text><text
class="breeze-pr-auto-triage-r4" x="24.4" y="190.8" textLength="231.8"
clip-path="url(#breeze-pr-auto-triage-line-7)">--github-repository</text><text
class="breeze-pr-auto-triage-r7" x="280.6" y="190.8" textLength="24.4"
clip-path="url(#breeze-pr-auto-triage-line-7)">-g</text><text
class="breeze-pr-auto-triage-r1" x="329.4" y="190.8" textLength="597 [...]
</text><text class="breeze-pr-auto-triage-r5" x="0" y="215.2"
textLength="1464"
clip-path="url(#breeze-pr-auto-triage-line-8)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text
class="breeze-pr-auto-triage-r1" x="1464" y="215.2" textLength="12.2"
clip-path="url(#breeze-pr-auto-triage-line-8)">
-</text><text class="breeze-pr-auto-triage-r5" x="0" y="239.6"
textLength="24.4" clip-path="url(#breeze-pr-auto-triage-line-9)">╭─</text><text
class="breeze-pr-auto-triage-r5" x="24.4" y="239.6" textLength="195.2"
clip-path="url(#breeze-pr-auto-triage-line-9)"> Filter options </text><text
class="breeze-pr-auto-triage-r5" x="219.6" y="239.6" textLength="1220"
clip-path="url(#breeze-pr-auto-triage-line-9)">──────────────────────────────────────────────────────────────────────
[...]
-</text><text class="breeze-pr-auto-triage-r5" x="0" y="264" textLength="12.2"
clip-path="url(#breeze-pr-auto-triage-line-10)">│</text><text
class="breeze-pr-auto-triage-r4" x="24.4" y="264" textLength="97.6"
clip-path="url(#breeze-pr-auto-triage-line-10)">--pr    </text><text
class="breeze-pr-auto-triage-r1" x="146.4" y="264" textLength="646.6"
clip-path="url(#breeze-pr-auto-triage-line-10)">Triage a specific PR by number instead of&
[...]
-</text><text class="breeze-pr-auto-triage-r5" x="0" y="288.4"
textLength="12.2" clip-path="url(#breeze-pr-auto-triage-line-11)">│</text><text
class="breeze-pr-auto-triage-r4" x="24.4" y="288.4" textLength="97.6"
clip-path="url(#breeze-pr-auto-triage-line-11)">--label </text><text
class="breeze-pr-auto-triage-r1" x="146.4" y="288.4" textLength="475.8"
clip-path="url(#breeze-pr-auto-triage-line-11)">Filter PRs by label (can be repeated). </text><text
[...]
-</text><text class="breeze-pr-auto-triage-r5" x="0" y="312.8"
textLength="12.2" clip-path="url(#breeze-pr-auto-triage-line-12)">│</text><text
class="breeze-pr-auto-triage-r6" x="146.4" y="312.8" textLength="1207.8"
clip-path="url(#breeze-pr-auto-triage-line-12)">area:Executors-core | area:Lineage | area:Logging | area:Plugins | area:Scheduler | area:Secrets | </text><text
class="breeze-pr-auto-triage-r5" x="1451.8" y="312.8" tex [...]
-</text><text class="breeze-pr-auto-triage-r5" x="0" y="337.2"
textLength="12.2" clip-path="url(#breeze-pr-auto-triage-line-13)">│</text><text
class="breeze-pr-auto-triage-r6" x="146.4" y="337.2" textLength="1085.8"
clip-path="url(#breeze-pr-auto-triage-line-13)">area:Triggerer | area:UI | area:airflow-ctl | area:core-operators | area:db-migrations | </text><text
class="breeze-pr-auto-triage-r5" x="1451.8" y="337.2" textLength="12.2" clip-
[...]
-</text><text class="breeze-pr-auto-triage-r5" x="0" y="361.6"
textLength="12.2" clip-path="url(#breeze-pr-auto-triage-line-14)">│</text><text
class="breeze-pr-auto-triage-r6" x="146.4" y="361.6" textLength="1122.4"
clip-path="url(#breeze-pr-auto-triage-line-14)">area:deadline-alerts | area:dev-tools | area:docker-tests | area:go-sdk | area:helm-chart | </text><text
class="breeze-pr-auto-triage-r5" x="1451.8" y="361.6" textLength="12.2" cl
[...]
-</text><text class="breeze-pr-auto-triage-r5" x="0" y="386" textLength="12.2"
clip-path="url(#breeze-pr-auto-triage-line-15)">│</text><text
class="breeze-pr-auto-triage-r6" x="146.4" y="386" textLength="1232.2"
clip-path="url(#breeze-pr-auto-triage-line-15)">area:kubernetes-tests | area:production-image | area:providers | area:registry | area:system-tests | </text><text
class="breeze-pr-auto-triage-r5" x="1451.8" y="386" textLength="12.2" [...]
-</text><text class="breeze-pr-auto-triage-r5" x="0" y="410.4"
textLength="12.2" clip-path="url(#breeze-pr-auto-triage-line-16)">│</text><text
class="breeze-pr-auto-triage-r6" x="146.4" y="410.4" textLength="1220"
clip-path="url(#breeze-pr-auto-triage-line-16)">area:task-sdk | area:translations | backport-to-v3-1-test | kind:documentation | provider:airbyte | </text><text
class="breeze-pr-auto-triage-r5" x="1451.8" y="410.4" textLength="12 [...]
-</text><text class="breeze-pr-auto-triage-r5" x="0" y="434.8"
textLength="12.2" clip-path="url(#breeze-pr-auto-triage-line-17)">│</text><text
class="breeze-pr-auto-triage-r6" x="146.4" y="434.8" textLength="1073.6"
clip-path="url(#breeze-pr-auto-triage-line-17)">provider:alibaba | provider:amazon | provider:apache-beam | provider:apache-cassandra | </text><text
class="breeze-pr-auto-triage-r5" x="1451.8" y="434.8" textLength="12.2"
clip-path="url(# [...]
-</text><text class="breeze-pr-auto-triage-r5" x="0" y="459.2"
textLength="12.2" clip-path="url(#breeze-pr-auto-triage-line-18)">│</text><text
class="breeze-pr-auto-triage-r6" x="146.4" y="459.2" textLength="1159"
clip-path="url(#breeze-pr-auto-triage-line-18)">provider:apache-drill | provider:apache-druid | provider:apache-flink | provider:apache-hdfs | </text><text
class="breeze-pr-auto-triage-r5" x="1451.8" y="459.2" textLength="12.2"
clip-path=" [...]
-</text><text class="breeze-pr-auto-triage-r5" x="0" y="483.6"
textLength="12.2" clip-path="url(#breeze-pr-auto-triage-line-19)">│</text><text
class="breeze-pr-auto-triage-r6" x="146.4" y="483.6" textLength="1195.6"
clip-path="url(#breeze-pr-auto-triage-line-19)">provider:apache-hive | provider:apache-iceberg | provider:apache-impala | provider:apache-kafka | </text><text
class="breeze-pr-auto-triage-r5" x="1451.8" y="483.6" textLength="12.2" clip-p
[...]
-</text><text class="breeze-pr-auto-triage-r5" x="0" y="508" textLength="12.2"
clip-path="url(#breeze-pr-auto-triage-line-20)">│</text><text
class="breeze-pr-auto-triage-r6" x="146.4" y="508" textLength="1134.6"
clip-path="url(#breeze-pr-auto-triage-line-20)">provider:apache-kylin | provider:apache-livy | provider:apache-pig | provider:apache-pinot | </text><text
class="breeze-pr-auto-triage-r5" x="1451.8" y="508" textLength="12.2"
clip-path="url(#b [...]
-</text><text class="breeze-pr-auto-triage-r5" x="0" y="532.4"
textLength="12.2" clip-path="url(#breeze-pr-auto-triage-line-21)">│</text><text
class="breeze-pr-auto-triage-r6" x="146.4" y="532.4" textLength="1293.2"
clip-path="url(#breeze-pr-auto-triage-line-21)">provider:apache-spark | provider:apache-tinkerpop | provider:apprise | provider:arangodb | provider:asana </text><text
class="breeze-pr-auto-triage-r5" x="1451.8" y="532.4" textLength= [...]
-</text><text class="breeze-pr-auto-triage-r5" x="0" y="556.8"
textLength="12.2" clip-path="url(#breeze-pr-auto-triage-line-22)">│</text><text
class="breeze-pr-auto-triage-r6" x="146.4" y="556.8" textLength="1134.6"
clip-path="url(#breeze-pr-auto-triage-line-22)">| provider:atlassian-jira | provider:celery | provider:cloudant | provider:cncf-kubernetes | </text><text
class="breeze-pr-auto-triage-r5" x="1451.8" y="556.8" textLength="12.2" clip-p
[...]
-</text><text class="breeze-pr-auto-triage-r5" x="0" y="581.2"
textLength="12.2" clip-path="url(#breeze-pr-auto-triage-line-23)">│</text><text
class="breeze-pr-auto-triage-r6" x="146.4" y="581.2" textLength="1037"
clip-path="url(#breeze-pr-auto-triage-line-23)">provider:cohere | provider:common-ai | provider:common-compat | provider:common-io | </text><text
class="breeze-pr-auto-triage-r5" x="1451.8" y="581.2" textLength="12.2"
clip-path="url(#breez [...]
-</text><text class="breeze-pr-auto-triage-r5" x="0" y="605.6"
textLength="12.2" clip-path="url(#breeze-pr-auto-triage-line-24)">│</text><text
class="breeze-pr-auto-triage-r6" x="146.4" y="605.6" textLength="1110.2"
clip-path="url(#breeze-pr-auto-triage-line-24)">provider:common-messaging | provider:common-sql | provider:databricks | provider:datadog | </text><text
class="breeze-pr-auto-triage-r5" x="1451.8" y="605.6" textLength="12.2"
clip-path="ur [...]
-</text><text class="breeze-pr-auto-triage-r5" x="0" y="630" textLength="12.2"
clip-path="url(#breeze-pr-auto-triage-line-25)">│</text><text
class="breeze-pr-auto-triage-r6" x="146.4" y="630" textLength="1146.8"
clip-path="url(#breeze-pr-auto-triage-line-25)">provider:dbt-cloud | provider:dingding | provider:discord | provider:docker | provider:edge | </text><text
class="breeze-pr-auto-triage-r5" x="1451.8" y="630" textLength="12.2" clip-p
[...]
-</text><text class="breeze-pr-auto-triage-r5" x="0" y="654.4"
textLength="12.2" clip-path="url(#breeze-pr-auto-triage-line-26)">│</text><text
class="breeze-pr-auto-triage-r6" x="146.4" y="654.4" textLength="1293.2"
clip-path="url(#breeze-pr-auto-triage-line-26)">provider:elasticsearch | provider:exasol | provider:fab | provider:facebook | provider:ftp | provider:git </text><text
class="breeze-pr-auto-triage-r5" x="1451.8" y="654.4" t [...]
-</text><text class="breeze-pr-auto-triage-r5" x="0" y="678.8"
textLength="12.2" clip-path="url(#breeze-pr-auto-triage-line-27)">│</text><text
class="breeze-pr-auto-triage-r6" x="146.4" y="678.8" textLength="1293.2"
clip-path="url(#breeze-pr-auto-triage-line-27)">| provider:github | provider:google | provider:grpc | provider:hashicorp | provider:http | provider:imap |</text><text
class="breeze-pr-auto-triage-r5" x="1451.8" y="678 [...]
-</text><text class="breeze-pr-auto-triage-r5" x="0" y="703.2"
textLength="12.2" clip-path="url(#breeze-pr-auto-triage-line-28)">│</text><text
class="breeze-pr-auto-triage-r6" x="146.4" y="703.2" textLength="1195.6"
clip-path="url(#breeze-pr-auto-triage-line-28)">provider:influxdb | provider:informatica | provider:jdbc | provider:jenkins | provider:keycloak | </text><text
class="breeze-pr-auto-triage-r5" x="1451.8" y="703.2" textLength="12 [...]
-</text><text class="breeze-pr-auto-triage-r5" x="0" y="727.6"
textLength="12.2" clip-path="url(#breeze-pr-auto-triage-line-29)">│</text><text
class="breeze-pr-auto-triage-r6" x="146.4" y="727.6" textLength="1293.2"
clip-path="url(#breeze-pr-auto-triage-line-29)">provider:microsoft-azure | provider:microsoft-mssql | provider:microsoft-psrp | provider:microsoft-winrm |</text><text
class="breeze-pr-auto-triage-r5" x="1451.8" y="727.6" textLength="12.2" cli
[...]
-</text><text class="breeze-pr-auto-triage-r5" x="0" y="752" textLength="12.2"
clip-path="url(#breeze-pr-auto-triage-line-30)">│</text><text
class="breeze-pr-auto-triage-r6" x="146.4" y="752" textLength="1281"
clip-path="url(#breeze-pr-auto-triage-line-30)">provider:mongo | provider:mysql | provider:neo4j | provider:odbc | provider:openai | provider:openfaas | </text><text
class="breeze-pr-auto-triage-r5" x="1451.8" y="752" textL [...]
-</text><text class="breeze-pr-auto-triage-r5" x="0" y="776.4"
textLength="12.2" clip-path="url(#breeze-pr-auto-triage-line-31)">│</text><text
class="breeze-pr-auto-triage-r6" x="146.4" y="776.4" textLength="1268.8"
clip-path="url(#breeze-pr-auto-triage-line-31)">provider:openlineage | provider:opensearch | provider:opsgenie | provider:oracle | provider:pagerduty | </text><text
class="breeze-pr-auto-triage-r5" x="1451.8" y="776.4" textLeng [...]
-</text><text class="breeze-pr-auto-triage-r5" x="0" y="800.8"
textLength="12.2" clip-path="url(#breeze-pr-auto-triage-line-32)">│</text><text
class="breeze-pr-auto-triage-r6" x="146.4" y="800.8" textLength="1207.8"
clip-path="url(#breeze-pr-auto-triage-line-32)">provider:papermill | provider:pgvector | provider:pinecone | provider:postgres | provider:presto | </text><text
class="breeze-pr-auto-triage-r5" x="1451.8" y="800.8" textLength="1 [...]
-</text><text class="breeze-pr-auto-triage-r5" x="0" y="825.2"
textLength="12.2" clip-path="url(#breeze-pr-auto-triage-line-33)">│</text><text
class="breeze-pr-auto-triage-r6" x="146.4" y="825.2" textLength="1134.6"
clip-path="url(#breeze-pr-auto-triage-line-33)">provider:qdrant | provider:redis | provider:salesforce | provider:samba | provider:segment | </text><text
class="breeze-pr-auto-triage-r5" x="1451.8" y="825.2" textLength="12.2" c [...]
-</text><text class="breeze-pr-auto-triage-r5" x="0" y="849.6"
textLength="12.2" clip-path="url(#breeze-pr-auto-triage-line-34)">│</text><text
class="breeze-pr-auto-triage-r6" x="146.4" y="849.6" textLength="1122.4"
clip-path="url(#breeze-pr-auto-triage-line-34)">provider:sendgrid | provider:sftp | provider:singularity | provider:slack | provider:smtp | </text><text
class="breeze-pr-auto-triage-r5" x="1451.8" y="849.6" textLength="12.2" cl
[...]
-</text><text class="breeze-pr-auto-triage-r5" x="0" y="874" textLength="12.2"
clip-path="url(#breeze-pr-auto-triage-line-35)">│</text><text
class="breeze-pr-auto-triage-r6" x="146.4" y="874" textLength="1134.6"
clip-path="url(#breeze-pr-auto-triage-line-35)">provider:snowflake | provider:sqlite | provider:ssh | provider:standard | provider:tableau | </text><text
class="breeze-pr-auto-triage-r5" x="1451.8" y="874" textLength="12.2" clip-pa
[...]
-</text><text class="breeze-pr-auto-triage-r5" x="0" y="898.4"
textLength="12.2" clip-path="url(#breeze-pr-auto-triage-line-36)">│</text><text
class="breeze-pr-auto-triage-r6" x="146.4" y="898.4" textLength="1171.2"
clip-path="url(#breeze-pr-auto-triage-line-36)">provider:telegram | provider:teradata | provider:trino | provider:vertica | provider:weaviate | </text><text
class="breeze-pr-auto-triage-r5" x="1451.8" y="898.4" textLength="12.2 [...]
-</text><text class="breeze-pr-auto-triage-r5" x="0" y="922.8"
textLength="12.2" clip-path="url(#breeze-pr-auto-triage-line-37)">│</text><text
class="breeze-pr-auto-triage-r6" x="146.4" y="922.8" textLength="1256.6"
clip-path="url(#breeze-pr-auto-triage-line-37)">provider:yandex | provider:ydb | provider:zendesk | translation:ar | translation:ca | translation:de | </text><text
class="breeze-pr-auto-triage-r5" x="1451.8" y="922.8" [...]
-</text><text class="breeze-pr-auto-triage-r5" x="0" y="947.2"
textLength="12.2" clip-path="url(#breeze-pr-auto-triage-line-38)">│</text><text
class="breeze-pr-auto-triage-r6" x="146.4" y="947.2" textLength="1293.2"
clip-path="url(#breeze-pr-auto-triage-line-38)">translation:default | translation:el | translation:es | translation:fr | translation:he | translation:hi |</text><text
class="breeze-pr-auto-triage-r5" x="1451.8" y="947.2" t [...]
-</text><text class="breeze-pr-auto-triage-r5" x="0" y="971.6"
textLength="12.2" clip-path="url(#breeze-pr-auto-triage-line-39)">│</text><text
class="breeze-pr-auto-triage-r6" x="146.4" y="971.6" textLength="1244.4"
clip-path="url(#breeze-pr-auto-triage-line-39)">translation:hu | translation:it | translation:ja | translation:ko | translation:nl | translation:pl | </text><text
class="breeze-pr-auto-triage-r5" x="1451.8" y="971.6" [...]
-</text><text class="breeze-pr-auto-triage-r5" x="0" y="996" textLength="12.2"
clip-path="url(#breeze-pr-auto-triage-line-40)">│</text><text
class="breeze-pr-auto-triage-r6" x="146.4" y="996" textLength="1085.8"
clip-path="url(#breeze-pr-auto-triage-line-40)">translation:pt | translation:th | translation:tr | translation:zh-CN | translation:zh-TW)</text><text
class="breeze-pr-auto-triage-r5" x="1451.8" y="996" textLength="12.2"
clip-path="url(#breez [...]
-</text><text class="breeze-pr-auto-triage-r5" x="0" y="1020.4"
textLength="12.2" clip-path="url(#breeze-pr-auto-triage-line-41)">│</text><text
class="breeze-pr-auto-triage-r4" x="24.4" y="1020.4" textLength="97.6"
clip-path="url(#breeze-pr-auto-triage-line-41)">--author</text><text
class="breeze-pr-auto-triage-r1" x="146.4" y="1020.4" textLength="402.6"
clip-path="url(#breeze-pr-auto-triage-line-41)">Filter PRs to a specific author. </text><text
class="breez [...]
-</text><text class="breeze-pr-auto-triage-r5" x="0" y="1044.8"
textLength="12.2" clip-path="url(#breeze-pr-auto-triage-line-42)">│</text><text
class="breeze-pr-auto-triage-r4" x="24.4" y="1044.8" textLength="97.6"
clip-path="url(#breeze-pr-auto-triage-line-42)">--sort  </text><text
class="breeze-pr-auto-triage-r1" x="146.4" y="1044.8" textLength="414.8"
clip-path="url(#breeze-pr-auto-triage-line-42)">Sort order for PR search results. </text><text
c [...]
-</text><text class="breeze-pr-auto-triage-r5" x="0" y="1069.2"
textLength="12.2" clip-path="url(#breeze-pr-auto-triage-line-43)">│</text><text
class="breeze-pr-auto-triage-r6" x="146.4" y="1069.2" textLength="622.2"
clip-path="url(#breeze-pr-auto-triage-line-43)">(created-asc|created-desc|updated-asc|updated-desc)</text><text
class="breeze-pr-auto-triage-r5" x="1451.8" y="1069.2" textLength="12.2"
clip-path="url(#breeze-pr-auto-triage-line-43)">│</text><text
class="breeze-pr-auto-triage- [...]
-</text><text class="breeze-pr-auto-triage-r5" x="0" y="1093.6"
textLength="1464"
clip-path="url(#breeze-pr-auto-triage-line-44)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text
class="breeze-pr-auto-triage-r1" x="1464" y="1093.6" textLength="12.2"
clip-path="url(#breeze-pr-auto-triage-line-44)">
-</text><text class="breeze-pr-auto-triage-r5" x="0" y="1118" textLength="24.4"
clip-path="url(#breeze-pr-auto-triage-line-45)">╭─</text><text
class="breeze-pr-auto-triage-r5" x="24.4" y="1118" textLength="244"
clip-path="url(#breeze-pr-auto-triage-line-45)"> Processing options </text><text
class="breeze-pr-auto-triage-r5" x="268.4" y="1118" textLength="1171.2"
clip-path="url(#breeze-pr-auto-triage-line-45)">──────────────────────────────────────────────────────────────────
[...]
-</text><text class="breeze-pr-auto-triage-r5" x="0" y="1142.4"
textLength="12.2" clip-path="url(#breeze-pr-auto-triage-line-46)">│</text><text
class="breeze-pr-auto-triage-r4" x="24.4" y="1142.4" textLength="207.4"
clip-path="url(#breeze-pr-auto-triage-line-46)">--batch-size     </text><text
class="breeze-pr-auto-triage-r1" x="256.2" y="1142.4" textLength="500.2"
clip-path="url(#breeze-pr-auto-triage-line-46)">Number of PRs to fetch per&#
[...]
-</text><text class="breeze-pr-auto-triage-r5" x="0" y="1166.8"
textLength="12.2" clip-path="url(#breeze-pr-auto-triage-line-47)">│</text><text
class="breeze-pr-auto-triage-r4" x="24.4" y="1166.8" textLength="207.4"
clip-path="url(#breeze-pr-auto-triage-line-47)">--max-num        </text><text
class="breeze-pr-auto-triage-r1" x="256.2" y="1166.8" textLength="793"
clip-path="url(#breeze-pr-auto-triage-line-47)">Maximum number of non-col
[...]
-</text><text class="breeze-pr-auto-triage-r5" x="0" y="1191.2"
textLength="12.2" clip-path="url(#breeze-pr-auto-triage-line-48)">│</text><text
class="breeze-pr-auto-triage-r4" x="24.4" y="1191.2" textLength="207.4"
clip-path="url(#breeze-pr-auto-triage-line-48)">--check-mode     </text><text
class="breeze-pr-auto-triage-r1" x="256.2" y="1191.2" textLength="1037"
clip-path="url(#breeze-pr-auto-triage-line-48)">Which checks to run: 'both&#x
[...]
-</text><text class="breeze-pr-auto-triage-r5" x="0" y="1215.6"
textLength="12.2" clip-path="url(#breeze-pr-auto-triage-line-49)">│</text><text
class="breeze-pr-auto-triage-r5" x="256.2" y="1215.6" textLength="61"
clip-path="url(#breeze-pr-auto-triage-line-49)">both]</text><text
class="breeze-pr-auto-triage-r6" x="329.4" y="1215.6" textLength="158.6"
clip-path="url(#breeze-pr-auto-triage-line-49)">(both|ci|llm)</text><text
class="breeze-pr-auto-triage-r5" x="1451.8" y="1215.6" textLength= [...]
-</text><text class="breeze-pr-auto-triage-r5" x="0" y="1240" textLength="12.2"
clip-path="url(#breeze-pr-auto-triage-line-50)">│</text><text
class="breeze-pr-auto-triage-r4" x="24.4" y="1240" textLength="207.4"
clip-path="url(#breeze-pr-auto-triage-line-50)">--llm-model      </text><text
class="breeze-pr-auto-triage-r1" x="256.2" y="1240" textLength="1183.4"
clip-path="url(#breeze-pr-auto-triage-line-50)">LLM model for assessment (format:
[...]
-</text><text class="breeze-pr-auto-triage-r5" x="0" y="1264.4"
textLength="12.2" clip-path="url(#breeze-pr-auto-triage-line-51)">│</text><text
class="breeze-pr-auto-triage-r1" x="256.2" y="1264.4" textLength="268.4"
clip-path="url(#breeze-pr-auto-triage-line-51)">for OpenAI Codex CLI. </text><text
class="breeze-pr-auto-triage-r5" x="524.6" y="1264.4" textLength="427"
clip-path="url(#breeze-pr-auto-triage-line-51)">[default: claude/claude-sonnet-4-6]</text><text
c [...]
-</text><text class="breeze-pr-auto-triage-r5" x="0" y="1288.8"
textLength="12.2" clip-path="url(#breeze-pr-auto-triage-line-52)">│</text><text
class="breeze-pr-auto-triage-r6" x="256.2" y="1288.8" textLength="1159"
clip-path="url(#breeze-pr-auto-triage-line-52)">>claude/claude-sonnet-4-6< | claude/claude-opus-4-20250514 | claude/claude-sonnet-4-20250514 | </text><text
class="breeze-pr-auto-triage-r5" x="1451.8" y="1288.8" textLength="12.2"
clip-path="u [...]
-</text><text class="breeze-pr-auto-triage-r5" x="0" y="1313.2"
textLength="12.2" clip-path="url(#breeze-pr-auto-triage-line-53)">│</text><text
class="breeze-pr-auto-triage-r6" x="256.2" y="1313.2" textLength="976"
clip-path="url(#breeze-pr-auto-triage-line-53)">claude/claude-haiku-4-5-20251001 | claude/sonnet | claude/opus | claude/haiku | </text><text
class="breeze-pr-auto-triage-r5" x="1451.8" y="1313.2" textLength="12.2"
clip-path="url(#breeze-p [...]
-</text><text class="breeze-pr-auto-triage-r5" x="0" y="1337.6"
textLength="12.2" clip-path="url(#breeze-pr-auto-triage-line-54)">│</text><text
class="breeze-pr-auto-triage-r6" x="256.2" y="1337.6" textLength="1146.8"
clip-path="url(#breeze-pr-auto-triage-line-54)">codex/gpt-5.3-codex | codex/gpt-5.3-codex-spark | codex/gpt-5.2-codex | codex/gpt-5.1-codex | </text><text
class="breeze-pr-auto-triage-r5" x="1451.8" y="1337.6" textLength="12.2"
clip-pa [...]
-</text><text class="breeze-pr-auto-triage-r5" x="0" y="1362" textLength="12.2"
clip-path="url(#breeze-pr-auto-triage-line-55)">│</text><text
class="breeze-pr-auto-triage-r6" x="256.2" y="1362" textLength="695.4"
clip-path="url(#breeze-pr-auto-triage-line-55)">codex/gpt-5-codex | codex/gpt-5-codex-mini | codex/gpt-5)</text><text
class="breeze-pr-auto-triage-r5" x="1451.8" y="1362" textLength="12.2"
clip-path="url(#breeze-pr-auto-triage-line-55)">│</text><text class="br [...]
-</text><text class="breeze-pr-auto-triage-r5" x="0" y="1386.4"
textLength="12.2" clip-path="url(#breeze-pr-auto-triage-line-56)">│</text><text
class="breeze-pr-auto-triage-r4" x="24.4" y="1386.4" textLength="207.4"
clip-path="url(#breeze-pr-auto-triage-line-56)">--llm-concurrency</text><text
class="breeze-pr-auto-triage-r1" x="256.2" y="1386.4" textLength="524.6"
clip-path="url(#breeze-pr-auto-triage-line-56)">Number of concurrent LLM assessment calls. </tex
[...]
-</text><text class="breeze-pr-auto-triage-r5" x="0" y="1410.8"
textLength="12.2" clip-path="url(#breeze-pr-auto-triage-line-57)">│</text><text
class="breeze-pr-auto-triage-r4" x="24.4" y="1410.8" textLength="207.4"
clip-path="url(#breeze-pr-auto-triage-line-57)">--answer-triage  </text><text
class="breeze-pr-auto-triage-r1" x="256.2" y="1410.8" textLength="1183.4"
clip-path="url(#breeze-pr-auto-triage-line-57)">Force answer to triage prompts: [d]raft,&#
[...]
-</text><text class="breeze-pr-auto-triage-r5" x="0" y="1435.2"
textLength="12.2" clip-path="url(#breeze-pr-auto-triage-line-58)">│</text><text
class="breeze-pr-auto-triage-r6" x="256.2" y="1435.2" textLength="183"
clip-path="url(#breeze-pr-auto-triage-line-58)">(d|c|r|s|q|y|n)</text><text
class="breeze-pr-auto-triage-r5" x="1451.8" y="1435.2" textLength="12.2"
clip-path="url(#breeze-pr-auto-triage-line-58)">│</text><text
class="breeze-pr-auto-triage-r1" x="1464" y="1435.2" textLength="12 [...]
-</text><text class="breeze-pr-auto-triage-r5" x="0" y="1459.6"
textLength="1464"
clip-path="url(#breeze-pr-auto-triage-line-59)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text
class="breeze-pr-auto-triage-r1" x="1464" y="1459.6" textLength="12.2"
clip-path="url(#breeze-pr-auto-triage-line-59)">
-</text><text class="breeze-pr-auto-triage-r5" x="0" y="1484" textLength="24.4"
clip-path="url(#breeze-pr-auto-triage-line-60)">╭─</text><text
class="breeze-pr-auto-triage-r5" x="24.4" y="1484" textLength="195.2"
clip-path="url(#breeze-pr-auto-triage-line-60)"> Common options </text><text
class="breeze-pr-auto-triage-r5" x="219.6" y="1484" textLength="1220"
clip-path="url(#breeze-pr-auto-triage-line-60)">──────────────────────────────────────────────────────────────────────
[...]
-</text><text class="breeze-pr-auto-triage-r5" x="0" y="1508.4"
textLength="12.2" clip-path="url(#breeze-pr-auto-triage-line-61)">│</text><text
class="breeze-pr-auto-triage-r4" x="24.4" y="1508.4" textLength="109.8"
clip-path="url(#breeze-pr-auto-triage-line-61)">--dry-run</text><text
class="breeze-pr-auto-triage-r7" x="158.6" y="1508.4" textLength="24.4"
clip-path="url(#breeze-pr-auto-triage-line-61)">-D</text><text
class="breeze-pr-auto-triage-r1" x="207.4" y="1508.4" textLength="719.8" [...]
-</text><text class="breeze-pr-auto-triage-r5" x="0" y="1532.8"
textLength="12.2" clip-path="url(#breeze-pr-auto-triage-line-62)">│</text><text
class="breeze-pr-auto-triage-r4" x="24.4" y="1532.8" textLength="109.8"
clip-path="url(#breeze-pr-auto-triage-line-62)">--verbose</text><text
class="breeze-pr-auto-triage-r7" x="158.6" y="1532.8" textLength="24.4"
clip-path="url(#breeze-pr-auto-triage-line-62)">-v</text><text
class="breeze-pr-auto-triage-r1" x="207.4" y="1532.8" textLength="585.6" [...]
-</text><text class="breeze-pr-auto-triage-r5" x="0" y="1557.2"
textLength="12.2" clip-path="url(#breeze-pr-auto-triage-line-63)">│</text><text
class="breeze-pr-auto-triage-r4" x="24.4" y="1557.2" textLength="109.8"
clip-path="url(#breeze-pr-auto-triage-line-63)">--help   </text><text
class="breeze-pr-auto-triage-r7" x="158.6" y="1557.2" textLength="24.4"
clip-path="url(#breeze-pr-auto-triage-line-63)">-h</text><text
class="breeze-pr-auto-triage-r1" x="207.4" y="1557.2" tex [...]
-</text><text class="breeze-pr-auto-triage-r5" x="0" y="1581.6"
textLength="1464"
clip-path="url(#breeze-pr-auto-triage-line-64)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text
class="breeze-pr-auto-triage-r1" x="1464" y="1581.6" textLength="12.2"
clip-path="url(#breeze-pr-auto-triage-line-64)">
+</text><text class="breeze-pr-auto-triage-r5" x="0" y="239.6"
textLength="24.4" clip-path="url(#breeze-pr-auto-triage-line-9)">╭─</text><text
class="breeze-pr-auto-triage-r5" x="24.4" y="239.6" textLength="219.6"
clip-path="url(#breeze-pr-auto-triage-line-9)"> Target selection </text><text
class="breeze-pr-auto-triage-r5" x="244" y="239.6" textLength="1195.6"
clip-path="url(#breeze-pr-auto-triage-line-9)">────────────────────────────────────────────────────────────────────
[...]
+</text><text class="breeze-pr-auto-triage-r5" x="0" y="264" textLength="12.2"
clip-path="url(#breeze-pr-auto-triage-line-10)">│</text><text
class="breeze-pr-auto-triage-r4" x="24.4" y="264" textLength="48.8"
clip-path="url(#breeze-pr-auto-triage-line-10)">--pr</text><text
class="breeze-pr-auto-triage-r1" x="97.6" y="264" textLength="646.6"
clip-path="url(#breeze-pr-auto-triage-line-10)">Triage a specific PR by number instead of searching. </te
[...]
+</text><text class="breeze-pr-auto-triage-r5" x="0" y="288.4"
textLength="1464"
clip-path="url(#breeze-pr-auto-triage-line-11)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text
class="breeze-pr-auto-triage-r1" x="1464" y="288.4" textLength="12.2"
clip-path="url(#breeze-pr-auto-triage-line-11)">
+</text><text class="breeze-pr-auto-triage-r5" x="0" y="312.8"
textLength="24.4"
clip-path="url(#breeze-pr-auto-triage-line-12)">╭─</text><text
class="breeze-pr-auto-triage-r5" x="24.4" y="312.8" textLength="195.2"
clip-path="url(#breeze-pr-auto-triage-line-12)"> Filter options </text><text
class="breeze-pr-auto-triage-r5" x="219.6" y="312.8" textLength="1220"
clip-path="url(#breeze-pr-auto-triage-line-12)">───────────────────────────────────────────────────────────────────
[...]
+</text><text class="breeze-pr-auto-triage-r5" x="0" y="337.2"
textLength="12.2" clip-path="url(#breeze-pr-auto-triage-line-13)">│</text><text
class="breeze-pr-auto-triage-r4" x="24.4" y="337.2" textLength="280.6"
clip-path="url(#breeze-pr-auto-triage-line-13)">--label                </text><text
class="breeze-pr-auto-triage-r1" x="329.4" y="337.2" textLength="1110.2"
clip-path="url(#breeze-pr-auto-triage-line [...]
+</text><text class="breeze-pr-auto-triage-r5" x="0" y="361.6"
textLength="12.2" clip-path="url(#breeze-pr-auto-triage-line-14)">│</text><text
class="breeze-pr-auto-triage-r1" x="329.4" y="361.6" textLength="122"
clip-path="url(#breeze-pr-auto-triage-line-14)">repeated. </text><text
class="breeze-pr-auto-triage-r6" x="451.4" y="361.6" textLength="829.6"
clip-path="url(#breeze-pr-auto-triage-line-14)">(area:API | area:CLI | area:ConfigTemplates | area:DAG
[...]
+</text><text class="breeze-pr-auto-triage-r5" x="0" y="386" textLength="12.2"
clip-path="url(#breeze-pr-auto-triage-line-15)">│</text><text
class="breeze-pr-auto-triage-r6" x="329.4" y="386" textLength="1024.8"
clip-path="url(#breeze-pr-auto-triage-line-15)">area:Executors-core | area:Lineage | area:Logging | area:Plugins | area:Scheduler | </text><text
class="breeze-pr-auto-triage-r5" x="1451.8" y="386" textLength="12.2"
clip-path="url(# [...]
+</text><text class="breeze-pr-auto-triage-r5" x="0" y="410.4"
textLength="12.2" clip-path="url(#breeze-pr-auto-triage-line-16)">│</text><text
class="breeze-pr-auto-triage-r6" x="329.4" y="410.4" textLength="1012.6"
clip-path="url(#breeze-pr-auto-triage-line-16)">area:Secrets | area:Triggerer | area:UI | area:airflow-ctl | area:core-operators | </text><text
class="breeze-pr-auto-triage-r5" x="1451.8" y="410.4" textLength="12.2"
clip-path=" [...]
+</text><text class="breeze-pr-auto-triage-r5" x="0" y="434.8"
textLength="12.2" clip-path="url(#breeze-pr-auto-triage-line-17)">│</text><text
class="breeze-pr-auto-triage-r6" x="329.4" y="434.8" textLength="988.2"
clip-path="url(#breeze-pr-auto-triage-line-17)">area:db-migrations | area:deadline-alerts | area:dev-tools | area:docker-tests | </text><text
class="breeze-pr-auto-triage-r5" x="1451.8" y="434.8" textLength="12.2"
clip-path="url(#breeze-p [...]
+</text><text class="breeze-pr-auto-triage-r5" x="0" y="459.2"
textLength="12.2" clip-path="url(#breeze-pr-auto-triage-line-18)">│</text><text
class="breeze-pr-auto-triage-r6" x="329.4" y="459.2" textLength="976"
clip-path="url(#breeze-pr-auto-triage-line-18)">area:go-sdk | area:helm-chart | area:kubernetes-tests | area:production-image | </text><text
class="breeze-pr-auto-triage-r5" x="1451.8" y="459.2" textLength="12.2"
clip-path="url(#breeze-pr-a [...]
+</text><text class="breeze-pr-auto-triage-r5" x="0" y="483.6"
textLength="12.2" clip-path="url(#breeze-pr-auto-triage-line-19)">│</text><text
class="breeze-pr-auto-triage-r6" x="329.4" y="483.6" textLength="1085.8"
clip-path="url(#breeze-pr-auto-triage-line-19)">area:providers | area:registry | area:system-tests | area:task-sdk | area:translations | </text><text
class="breeze-pr-auto-triage-r5" x="1451.8" y="483.6" textLength="12.2" clip-
[...]
+</text><text class="breeze-pr-auto-triage-r5" x="0" y="508" textLength="12.2"
clip-path="url(#breeze-pr-auto-triage-line-20)">│</text><text
class="breeze-pr-auto-triage-r6" x="329.4" y="508" textLength="1012.6"
clip-path="url(#breeze-pr-auto-triage-line-20)">backport-to-v3-1-test | kind:documentation | provider:airbyte | provider:alibaba | </text><text
class="breeze-pr-auto-triage-r5" x="1451.8" y="508" textLength="12.2"
clip-path="url(#breeze-pr-a [...]
+</text><text class="breeze-pr-auto-triage-r5" x="0" y="532.4"
textLength="12.2" clip-path="url(#breeze-pr-auto-triage-line-21)">│</text><text
class="breeze-pr-auto-triage-r6" x="329.4" y="532.4" textLength="1110.2"
clip-path="url(#breeze-pr-auto-triage-line-21)">provider:amazon | provider:apache-beam | provider:apache-cassandra | provider:apache-drill </text><text
class="breeze-pr-auto-triage-r5" x="1451.8" y="532.4" textLength="12.2"
clip-path="url(#br [...]
+</text><text class="breeze-pr-auto-triage-r5" x="0" y="556.8"
textLength="12.2" clip-path="url(#breeze-pr-auto-triage-line-22)">│</text><text
class="breeze-pr-auto-triage-r6" x="329.4" y="556.8" textLength="890.6"
clip-path="url(#breeze-pr-auto-triage-line-22)">| provider:apache-druid | provider:apache-flink | provider:apache-hdfs | </text><text
class="breeze-pr-auto-triage-r5" x="1451.8" y="556.8" textLength="12.2"
clip-path="url(#breeze-pr-auto-triage [...]
+</text><text class="breeze-pr-auto-triage-r5" x="0" y="581.2"
textLength="12.2" clip-path="url(#breeze-pr-auto-triage-line-23)">│</text><text
class="breeze-pr-auto-triage-r6" x="329.4" y="581.2" textLength="902.8"
clip-path="url(#breeze-pr-auto-triage-line-23)">provider:apache-hive | provider:apache-iceberg | provider:apache-impala | </text><text
class="breeze-pr-auto-triage-r5" x="1451.8" y="581.2" textLength="12.2"
clip-path="url(#breeze-pr-auto-triage-lin [...]
+</text><text class="breeze-pr-auto-triage-r5" x="0" y="605.6"
textLength="12.2" clip-path="url(#breeze-pr-auto-triage-line-24)">│</text><text
class="breeze-pr-auto-triage-r6" x="329.4" y="605.6" textLength="1110.2"
clip-path="url(#breeze-pr-auto-triage-line-24)">provider:apache-kafka | provider:apache-kylin | provider:apache-livy | provider:apache-pig </text><text
class="breeze-pr-auto-triage-r5" x="1451.8" y="605.6" textLength="12.2"
clip-path="url(#br [...]
+</text><text class="breeze-pr-auto-triage-r5" x="0" y="630" textLength="12.2"
clip-path="url(#breeze-pr-auto-triage-line-25)">│</text><text
class="breeze-pr-auto-triage-r6" x="329.4" y="630" textLength="951.6"
clip-path="url(#breeze-pr-auto-triage-line-25)">| provider:apache-pinot | provider:apache-spark | provider:apache-tinkerpop | </text><text
class="breeze-pr-auto-triage-r5" x="1451.8" y="630" textLength="12.2"
clip-path="url(#breeze-pr-auto-triage- [...]
+</text><text class="breeze-pr-auto-triage-r5" x="0" y="654.4"
textLength="12.2" clip-path="url(#breeze-pr-auto-triage-line-26)">│</text><text
class="breeze-pr-auto-triage-r6" x="329.4" y="654.4" textLength="1000.4"
clip-path="url(#breeze-pr-auto-triage-line-26)">provider:apprise | provider:arangodb | provider:asana | provider:atlassian-jira | </text><text
class="breeze-pr-auto-triage-r5" x="1451.8" y="654.4" textLength="12.2"
clip-path="url(#breeze [...]
+</text><text class="breeze-pr-auto-triage-r5" x="0" y="678.8"
textLength="12.2" clip-path="url(#breeze-pr-auto-triage-line-27)">│</text><text
class="breeze-pr-auto-triage-r6" x="329.4" y="678.8" textLength="1012.6"
clip-path="url(#breeze-pr-auto-triage-line-27)">provider:celery | provider:cloudant | provider:cncf-kubernetes | provider:cohere | </text><text
class="breeze-pr-auto-triage-r5" x="1451.8" y="678.8" textLength="12.2"
clip-path="url(#breez [...]
+</text><text class="breeze-pr-auto-triage-r5" x="0" y="703.2"
textLength="12.2" clip-path="url(#breeze-pr-auto-triage-line-28)">│</text><text
class="breeze-pr-auto-triage-r6" x="329.4" y="703.2" textLength="817.4"
clip-path="url(#breeze-pr-auto-triage-line-28)">provider:common-ai | provider:common-compat | provider:common-io | </text><text
class="breeze-pr-auto-triage-r5" x="1451.8" y="703.2" textLength="12.2"
clip-path="url(#breeze-pr-auto-triage-line-28)"> [...]
+</text><text class="breeze-pr-auto-triage-r5" x="0" y="727.6"
textLength="12.2" clip-path="url(#breeze-pr-auto-triage-line-29)">│</text><text
class="breeze-pr-auto-triage-r6" x="329.4" y="727.6" textLength="1110.2"
clip-path="url(#breeze-pr-auto-triage-line-29)">provider:common-messaging | provider:common-sql | provider:databricks | provider:datadog | </text><text
class="breeze-pr-auto-triage-r5" x="1451.8" y="727.6" textLength="12.2"
clip-path="ur [...]
+</text><text class="breeze-pr-auto-triage-r5" x="0" y="752" textLength="12.2"
clip-path="url(#breeze-pr-auto-triage-line-30)">│</text><text
class="breeze-pr-auto-triage-r6" x="329.4" y="752" textLength="1110.2"
clip-path="url(#breeze-pr-auto-triage-line-30)">provider:dbt-cloud | provider:dingding | provider:discord | provider:docker | provider:edge</text><text
class="breeze-pr-auto-triage-r5" x="1451.8" y="752" textLength="12.2"
clip-path="url(#bre [...]
+</text><text class="breeze-pr-auto-triage-r5" x="0" y="776.4"
textLength="12.2" clip-path="url(#breeze-pr-auto-triage-line-31)">│</text><text
class="breeze-pr-auto-triage-r6" x="329.4" y="776.4" textLength="976"
clip-path="url(#breeze-pr-auto-triage-line-31)">| provider:elasticsearch | provider:exasol | provider:fab | provider:facebook | </text><text
class="breeze-pr-auto-triage-r5" x="1451.8" y="776.4" textLength="12.2"
clip-path="url(#breeze [...]
+</text><text class="breeze-pr-auto-triage-r5" x="0" y="800.8"
textLength="12.2" clip-path="url(#breeze-pr-auto-triage-line-32)">│</text><text
class="breeze-pr-auto-triage-r6" x="329.4" y="800.8" textLength="1000.4"
clip-path="url(#breeze-pr-auto-triage-line-32)">provider:ftp | provider:git | provider:github | provider:google | provider:grpc | </text><text
class="breeze-pr-auto-triage-r5" x="1451.8" y="800.8" textLength="12.2"
clip-path="u [...]
+</text><text class="breeze-pr-auto-triage-r5" x="0" y="825.2"
textLength="12.2" clip-path="url(#breeze-pr-auto-triage-line-33)">│</text><text
class="breeze-pr-auto-triage-r6" x="329.4" y="825.2" textLength="890.6"
clip-path="url(#breeze-pr-auto-triage-line-33)">provider:hashicorp | provider:http | provider:imap | provider:influxdb | </text><text
class="breeze-pr-auto-triage-r5" x="1451.8" y="825.2" textLength="12.2"
clip-path="url(#breeze-pr-auto-t [...]
+</text><text class="breeze-pr-auto-triage-r5" x="0" y="849.6"
textLength="12.2" clip-path="url(#breeze-pr-auto-triage-line-34)">│</text><text
class="breeze-pr-auto-triage-r6" x="329.4" y="849.6" textLength="951.6"
clip-path="url(#breeze-pr-auto-triage-line-34)">provider:informatica | provider:jdbc | provider:jenkins | provider:keycloak | </text><text
class="breeze-pr-auto-triage-r5" x="1451.8" y="849.6" textLength="12.2"
clip-path="url(#breeze-pr-a [...]
+</text><text class="breeze-pr-auto-triage-r5" x="0" y="874" textLength="12.2"
clip-path="url(#breeze-pr-auto-triage-line-35)">│</text><text
class="breeze-pr-auto-triage-r6" x="329.4" y="874" textLength="976"
clip-path="url(#breeze-pr-auto-triage-line-35)">provider:microsoft-azure | provider:microsoft-mssql | provider:microsoft-psrp | </text><text
class="breeze-pr-auto-triage-r5" x="1451.8" y="874" textLength="12.2"
clip-path="url(#breeze-pr-auto-triage-line- [...]
+</text><text class="breeze-pr-auto-triage-r5" x="0" y="898.4"
textLength="12.2" clip-path="url(#breeze-pr-auto-triage-line-36)">│</text><text
class="breeze-pr-auto-triage-r6" x="329.4" y="898.4" textLength="1110.2"
clip-path="url(#breeze-pr-auto-triage-line-36)">provider:microsoft-winrm | provider:mongo | provider:mysql | provider:neo4j | provider:odbc</text><text
class="breeze-pr-auto-triage-r5" x="1451.8" y="898.4" textLength="12.2"
clip-path="ur [...]
+</text><text class="breeze-pr-auto-triage-r5" x="0" y="922.8"
textLength="12.2" clip-path="url(#breeze-pr-auto-triage-line-37)">│</text><text
class="breeze-pr-auto-triage-r6" x="329.4" y="922.8" textLength="1037"
clip-path="url(#breeze-pr-auto-triage-line-37)">| provider:openai | provider:openfaas | provider:openlineage | provider:opensearch | </text><text
class="breeze-pr-auto-triage-r5" x="1451.8" y="922.8" textLength="12.2"
clip-path="url(# [...]
+</text><text class="breeze-pr-auto-triage-r5" x="0" y="947.2"
textLength="12.2" clip-path="url(#breeze-pr-auto-triage-line-38)">│</text><text
class="breeze-pr-auto-triage-r6" x="329.4" y="947.2" textLength="976"
clip-path="url(#breeze-pr-auto-triage-line-38)">provider:opsgenie | provider:oracle | provider:pagerduty | provider:papermill | </text><text
class="breeze-pr-auto-triage-r5" x="1451.8" y="947.2" textLength="12.2"
clip-path="url(#breeze-pr-a [...]
+</text><text class="breeze-pr-auto-triage-r5" x="0" y="971.6"
textLength="12.2" clip-path="url(#breeze-pr-auto-triage-line-39)">│</text><text
class="breeze-pr-auto-triage-r6" x="329.4" y="971.6" textLength="951.6"
clip-path="url(#breeze-pr-auto-triage-line-39)">provider:pgvector | provider:pinecone | provider:postgres | provider:presto | </text><text
class="breeze-pr-auto-triage-r5" x="1451.8" y="971.6" textLength="12.2"
clip-path="url(#breeze-pr-a [...]
+</text><text class="breeze-pr-auto-triage-r5" x="0" y="996" textLength="12.2"
clip-path="url(#breeze-pr-auto-triage-line-40)">│</text><text
class="breeze-pr-auto-triage-r6" x="329.4" y="996" textLength="1110.2"
clip-path="url(#breeze-pr-auto-triage-line-40)">provider:qdrant | provider:redis | provider:salesforce | provider:samba | provider:segment </text><text
class="breeze-pr-auto-triage-r5" x="1451.8" y="996" textLength="12.2"
clip-path="url [...]
+</text><text class="breeze-pr-auto-triage-r5" x="0" y="1020.4"
textLength="12.2" clip-path="url(#breeze-pr-auto-triage-line-41)">│</text><text
class="breeze-pr-auto-triage-r6" x="329.4" y="1020.4" textLength="1110.2"
clip-path="url(#breeze-pr-auto-triage-line-41)">| provider:sendgrid | provider:sftp | provider:singularity | provider:slack | provider:smtp</text><text
class="breeze-pr-auto-triage-r5" x="1451.8" y="1020.4" textLength="12.2" clip-
[...]
+</text><text class="breeze-pr-auto-triage-r5" x="0" y="1044.8"
textLength="12.2" clip-path="url(#breeze-pr-auto-triage-line-42)">│</text><text
class="breeze-pr-auto-triage-r6" x="329.4" y="1044.8" textLength="927.2"
clip-path="url(#breeze-pr-auto-triage-line-42)">| provider:snowflake | provider:sqlite | provider:ssh | provider:standard | </text><text
class="breeze-pr-auto-triage-r5" x="1451.8" y="1044.8" textLength="12.2"
clip-path="url(#breez [...]
+</text><text class="breeze-pr-auto-triage-r5" x="0" y="1069.2"
textLength="12.2" clip-path="url(#breeze-pr-auto-triage-line-43)">│</text><text
class="breeze-pr-auto-triage-r6" x="329.4" y="1069.2" textLength="927.2"
clip-path="url(#breeze-pr-auto-triage-line-43)">provider:tableau | provider:telegram | provider:teradata | provider:trino | </text><text
class="breeze-pr-auto-triage-r5" x="1451.8" y="1069.2" textLength="12.2"
clip-path="url(#breeze-pr- [...]
+</text><text class="breeze-pr-auto-triage-r5" x="0" y="1093.6"
textLength="12.2" clip-path="url(#breeze-pr-auto-triage-line-44)">│</text><text
class="breeze-pr-auto-triage-r6" x="329.4" y="1093.6" textLength="1110.2"
clip-path="url(#breeze-pr-auto-triage-line-44)">provider:vertica | provider:weaviate | provider:yandex | provider:ydb | provider:zendesk | </text><text
class="breeze-pr-auto-triage-r5" x="1451.8" y="1093.6" textLength="12.2" [...]
+</text><text class="breeze-pr-auto-triage-r5" x="0" y="1118" textLength="12.2"
clip-path="url(#breeze-pr-auto-triage-line-45)">│</text><text
class="breeze-pr-auto-triage-r6" x="329.4" y="1118" textLength="1098"
clip-path="url(#breeze-pr-auto-triage-line-45)">translation:ar | translation:ca | translation:de | translation:default | translation:el | </text><text
class="breeze-pr-auto-triage-r5" x="1451.8" y="1118" textLength="12.2"
clip-path [...]
+</text><text class="breeze-pr-auto-triage-r5" x="0" y="1142.4"
textLength="12.2" clip-path="url(#breeze-pr-auto-triage-line-46)">│</text><text
class="breeze-pr-auto-triage-r6" x="329.4" y="1142.4" textLength="1037"
clip-path="url(#breeze-pr-auto-triage-line-46)">translation:es | translation:fr | translation:he | translation:hi | translation:hu | </text><text
class="breeze-pr-auto-triage-r5" x="1451.8" y="1142.4" textLength="12.2"
clip-pat [...]
+</text><text class="breeze-pr-auto-triage-r5" x="0" y="1166.8"
textLength="12.2" clip-path="url(#breeze-pr-auto-triage-line-47)">│</text><text
class="breeze-pr-auto-triage-r6" x="329.4" y="1166.8" textLength="1037"
clip-path="url(#breeze-pr-auto-triage-line-47)">translation:it | translation:ja | translation:ko | translation:nl | translation:pl | </text><text
class="breeze-pr-auto-triage-r5" x="1451.8" y="1166.8" textLength="12.2"
clip-pat [...]
+</text><text class="breeze-pr-auto-triage-r5" x="0" y="1191.2"
textLength="12.2" clip-path="url(#breeze-pr-auto-triage-line-48)">│</text><text
class="breeze-pr-auto-triage-r6" x="329.4" y="1191.2" textLength="1085.8"
clip-path="url(#breeze-pr-auto-triage-line-48)">translation:pt | translation:th | translation:tr | translation:zh-CN | translation:zh-TW)</text><text
class="breeze-pr-auto-triage-r5" x="1451.8" y="1191.2" textLength="12.2"
clip-path="u [...]
+</text><text class="breeze-pr-auto-triage-r5" x="0" y="1215.6"
textLength="12.2" clip-path="url(#breeze-pr-auto-triage-line-49)">│</text><text
class="breeze-pr-auto-triage-r4" x="24.4" y="1215.6" textLength="280.6"
clip-path="url(#breeze-pr-auto-triage-line-49)">--exclude-label        </text><text
class="breeze-pr-auto-triage-r1" x="329.4" y="1215.6" textLength="805.2"
clip-path="url(#breeze-pr-auto-triage-line-49)">Exclude PRs with 
[...]
+</text><text class="breeze-pr-auto-triage-r5" x="0" y="1240" textLength="12.2"
clip-path="url(#breeze-pr-auto-triage-line-50)">│</text><text
class="breeze-pr-auto-triage-r4" x="24.4" y="1240" textLength="280.6"
clip-path="url(#breeze-pr-auto-triage-line-50)">--author               </text><text
class="breeze-pr-auto-triage-r1" x="329.4" y="1240" textLength="402.6"
clip-path="url(#breeze-pr-auto-triage-line-50)">Fil [...]
+</text><text class="breeze-pr-auto-triage-r5" x="0" y="1264.4"
textLength="12.2" clip-path="url(#breeze-pr-auto-triage-line-51)">│</text><text
class="breeze-pr-auto-triage-r4" x="24.4" y="1264.4" textLength="280.6"
clip-path="url(#breeze-pr-auto-triage-line-51)">--created-after        </text><text
class="breeze-pr-auto-triage-r1" x="329.4" y="1264.4" textLength="646.6"
clip-path="url(#breeze-pr-auto-triage-line-51)">Only PRs created 
[...]
+</text><text class="breeze-pr-auto-triage-r5" x="0" y="1288.8"
textLength="12.2" clip-path="url(#breeze-pr-auto-triage-line-52)">│</text><text
class="breeze-pr-auto-triage-r4" x="24.4" y="1288.8" textLength="280.6"
clip-path="url(#breeze-pr-auto-triage-line-52)">--created-before       </text><text
class="breeze-pr-auto-triage-r1" x="329.4" y="1288.8" textLength="658.8"
clip-path="url(#breeze-pr-auto-triage-line-52)">Only PRs created on
[...]
+</text><text class="breeze-pr-auto-triage-r5" x="0" y="1313.2"
textLength="12.2" clip-path="url(#breeze-pr-auto-triage-line-53)">│</text><text
class="breeze-pr-auto-triage-r4" x="24.4" y="1313.2" textLength="280.6"
clip-path="url(#breeze-pr-auto-triage-line-53)">--updated-after        </text><text
class="breeze-pr-auto-triage-r1" x="329.4" y="1313.2" textLength="646.6"
clip-path="url(#breeze-pr-auto-triage-line-53)">Only PRs updated 
[...]
+</text><text class="breeze-pr-auto-triage-r5" x="0" y="1337.6"
textLength="12.2" clip-path="url(#breeze-pr-auto-triage-line-54)">│</text><text
class="breeze-pr-auto-triage-r4" x="24.4" y="1337.6" textLength="280.6"
clip-path="url(#breeze-pr-auto-triage-line-54)">--updated-before       </text><text
class="breeze-pr-auto-triage-r1" x="329.4" y="1337.6" textLength="658.8"
clip-path="url(#breeze-pr-auto-triage-line-54)">Only PRs updated on
[...]
+</text><text class="breeze-pr-auto-triage-r5" x="0" y="1362" textLength="12.2"
clip-path="url(#breeze-pr-auto-triage-line-55)">│</text><text
class="breeze-pr-auto-triage-r4" x="24.4" y="1362" textLength="280.6"
clip-path="url(#breeze-pr-auto-triage-line-55)">--include-collaborators</text><text
class="breeze-pr-auto-triage-r1" x="329.4" y="1362" textLength="793"
clip-path="url(#breeze-pr-auto-triage-line-55)">Include PRs from collaborators/members/owners (normally 
[...]
+</text><text class="breeze-pr-auto-triage-r5" x="0" y="1386.4"
textLength="12.2" clip-path="url(#breeze-pr-auto-triage-line-56)">│</text><text
class="breeze-pr-auto-triage-r4" x="24.4" y="1386.4" textLength="280.6"
clip-path="url(#breeze-pr-auto-triage-line-56)">--pending-approval-only</text><text
class="breeze-pr-auto-triage-r1" x="329.4" y="1386.4" textLength="622.2"
clip-path="url(#breeze-pr-auto-triage-line-56)">Only show PRs with workflow runs awaiting&
[...]
+</text><text class="breeze-pr-auto-triage-r5" x="0" y="1410.8"
textLength="12.2" clip-path="url(#breeze-pr-auto-triage-line-57)">│</text><text
class="breeze-pr-auto-triage-r4" x="24.4" y="1410.8" textLength="280.6"
clip-path="url(#breeze-pr-auto-triage-line-57)">--checks-state         </text><text
class="breeze-pr-auto-triage-r1" x="329.4" y="1410.8" textLength="524.6"
clip-path="url(#breeze-pr-auto-triage-line-57)">Only assess PRs&#
[...]
+</text><text class="breeze-pr-auto-triage-r5" x="0" y="1435.2"
textLength="12.2" clip-path="url(#breeze-pr-auto-triage-line-58)">│</text><text
class="breeze-pr-auto-triage-r4" x="24.4" y="1435.2" textLength="280.6"
clip-path="url(#breeze-pr-auto-triage-line-58)">--min-commits-behind   </text><text
class="breeze-pr-auto-triage-r1" x="329.4" y="1435.2" textLength="878.4"
clip-path="url(#breeze-pr-auto-triage-line-58)">Only assess PRs that are at 
[...]
+</text><text class="breeze-pr-auto-triage-r5" x="0" y="1459.6"
textLength="12.2" clip-path="url(#breeze-pr-auto-triage-line-59)">│</text><text
class="breeze-pr-auto-triage-r6" x="329.4" y="1459.6" textLength="109.8"
clip-path="url(#breeze-pr-auto-triage-line-59)">(INTEGER)</text><text
class="breeze-pr-auto-triage-r5" x="1451.8" y="1459.6" textLength="12.2"
clip-path="url(#breeze-pr-auto-triage-line-59)">│</text><text
class="breeze-pr-auto-triage-r1" x="1464" y="1459.6" textLength="12.2" [...]
+</text><text class="breeze-pr-auto-triage-r5" x="0" y="1484" textLength="1464"
clip-path="url(#breeze-pr-auto-triage-line-60)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text
class="breeze-pr-auto-triage-r1" x="1464" y="1484" textLength="12.2"
clip-path="url(#breeze-pr-auto-triage-line-60)">
+</text><text class="breeze-pr-auto-triage-r5" x="0" y="1508.4"
textLength="24.4"
clip-path="url(#breeze-pr-auto-triage-line-61)">╭─</text><text
class="breeze-pr-auto-triage-r5" x="24.4" y="1508.4" textLength="292.8"
clip-path="url(#breeze-pr-auto-triage-line-61)"> Pagination and sorting </text><text
class="breeze-pr-auto-triage-r5" x="317.2" y="1508.4" textLength="1122.4"
clip-path="url(#breeze-pr-auto-triage-line-61)">─────────────────────────────────────────────────
[...]
+</text><text class="breeze-pr-auto-triage-r5" x="0" y="1532.8"
textLength="12.2" clip-path="url(#breeze-pr-auto-triage-line-62)">│</text><text
class="breeze-pr-auto-triage-r4" x="24.4" y="1532.8" textLength="146.4"
clip-path="url(#breeze-pr-auto-triage-line-62)">--batch-size</text><text
class="breeze-pr-auto-triage-r1" x="195.2" y="1532.8" textLength="500.2"
clip-path="url(#breeze-pr-auto-triage-line-62)">Number of PRs to fetch per GraphQL page. </
[...]
+</text><text class="breeze-pr-auto-triage-r5" x="0" y="1557.2"
textLength="12.2" clip-path="url(#breeze-pr-auto-triage-line-63)">│</text><text
class="breeze-pr-auto-triage-r4" x="24.4" y="1557.2" textLength="146.4"
clip-path="url(#breeze-pr-auto-triage-line-63)">--max-num   </text><text
class="breeze-pr-auto-triage-r1" x="195.2" y="1557.2" textLength="793"
clip-path="url(#breeze-pr-auto-triage-line-63)">Maximum number of non-collaborator PRs to
[...]
+</text><text class="breeze-pr-auto-triage-r5" x="0" y="1581.6"
textLength="12.2" clip-path="url(#breeze-pr-auto-triage-line-64)">│</text><text
class="breeze-pr-auto-triage-r4" x="24.4" y="1581.6" textLength="146.4"
clip-path="url(#breeze-pr-auto-triage-line-64)">--sort      </text><text
class="breeze-pr-auto-triage-r1" x="195.2" y="1581.6" textLength="414.8"
clip-path="url(#breeze-pr-auto-triage-line-64)">Sort order for PR search res
[...]
+</text><text class="breeze-pr-auto-triage-r5" x="0" y="1606" textLength="12.2"
clip-path="url(#breeze-pr-auto-triage-line-65)">│</text><text
class="breeze-pr-auto-triage-r6" x="195.2" y="1606" textLength="622.2"
clip-path="url(#breeze-pr-auto-triage-line-65)">(created-asc|created-desc|updated-asc|updated-desc)</text><text
class="breeze-pr-auto-triage-r5" x="1451.8" y="1606" textLength="12.2"
clip-path="url(#breeze-pr-auto-triage-line-65)">│</text><text
class="breeze-pr-auto-triage-r1" x= [...]
+</text><text class="breeze-pr-auto-triage-r5" x="0" y="1630.4"
textLength="1464"
clip-path="url(#breeze-pr-auto-triage-line-66)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text
class="breeze-pr-auto-triage-r1" x="1464" y="1630.4" textLength="12.2"
clip-path="url(#breeze-pr-auto-triage-line-66)">
+</text><text class="breeze-pr-auto-triage-r5" x="0" y="1654.8"
textLength="24.4"
clip-path="url(#breeze-pr-auto-triage-line-67)">╭─</text><text
class="breeze-pr-auto-triage-r5" x="24.4" y="1654.8" textLength="244"
clip-path="url(#breeze-pr-auto-triage-line-67)"> Assessment options </text><text
class="breeze-pr-auto-triage-r5" x="268.4" y="1654.8" textLength="1171.2"
clip-path="url(#breeze-pr-auto-triage-line-67)">────────────────────────────────────────────────────────────
[...]
+</text><text class="breeze-pr-auto-triage-r5" x="0" y="1679.2"
textLength="12.2" clip-path="url(#breeze-pr-auto-triage-line-68)">│</text><text
class="breeze-pr-auto-triage-r4" x="24.4" y="1679.2" textLength="207.4"
clip-path="url(#breeze-pr-auto-triage-line-68)">--check-mode     </text><text
class="breeze-pr-auto-triage-r1" x="256.2" y="1679.2" textLength="1037"
clip-path="url(#breeze-pr-auto-triage-line-68)">Which checks to run: 'both&#x
[...]
+</text><text class="breeze-pr-auto-triage-r5" x="0" y="1703.6"
textLength="12.2" clip-path="url(#breeze-pr-auto-triage-line-69)">│</text><text
class="breeze-pr-auto-triage-r5" x="256.2" y="1703.6" textLength="61"
clip-path="url(#breeze-pr-auto-triage-line-69)">both]</text><text
class="breeze-pr-auto-triage-r6" x="329.4" y="1703.6" textLength="158.6"
clip-path="url(#breeze-pr-auto-triage-line-69)">(both|ci|llm)</text><text
class="breeze-pr-auto-triage-r5" x="1451.8" y="1703.6" textLength= [...]
+</text><text class="breeze-pr-auto-triage-r5" x="0" y="1728" textLength="12.2"
clip-path="url(#breeze-pr-auto-triage-line-70)">│</text><text
class="breeze-pr-auto-triage-r4" x="24.4" y="1728" textLength="207.4"
clip-path="url(#breeze-pr-auto-triage-line-70)">--llm-model      </text><text
class="breeze-pr-auto-triage-r1" x="256.2" y="1728" textLength="1183.4"
clip-path="url(#breeze-pr-auto-triage-line-70)">LLM model for assessment (format:
[...]
+</text><text class="breeze-pr-auto-triage-r5" x="0" y="1752.4"
textLength="12.2" clip-path="url(#breeze-pr-auto-triage-line-71)">│</text><text
class="breeze-pr-auto-triage-r1" x="256.2" y="1752.4" textLength="268.4"
clip-path="url(#breeze-pr-auto-triage-line-71)">for OpenAI Codex CLI. </text><text
class="breeze-pr-auto-triage-r5" x="524.6" y="1752.4" textLength="427"
clip-path="url(#breeze-pr-auto-triage-line-71)">[default: claude/claude-sonnet-4-6]</text><text
c [...]
+</text><text class="breeze-pr-auto-triage-r5" x="0" y="1776.8"
textLength="12.2" clip-path="url(#breeze-pr-auto-triage-line-72)">│</text><text
class="breeze-pr-auto-triage-r6" x="256.2" y="1776.8" textLength="1159"
clip-path="url(#breeze-pr-auto-triage-line-72)">>claude/claude-sonnet-4-6< | claude/claude-opus-4-20250514 | claude/claude-sonnet-4-20250514 | </text><text
class="breeze-pr-auto-triage-r5" x="1451.8" y="1776.8" textLength="12.2"
clip-path="u [...]
+</text><text class="breeze-pr-auto-triage-r5" x="0" y="1801.2"
textLength="12.2" clip-path="url(#breeze-pr-auto-triage-line-73)">│</text><text
class="breeze-pr-auto-triage-r6" x="256.2" y="1801.2" textLength="976"
clip-path="url(#breeze-pr-auto-triage-line-73)">claude/claude-haiku-4-5-20251001 | claude/sonnet | claude/opus | claude/haiku | </text><text
class="breeze-pr-auto-triage-r5" x="1451.8" y="1801.2" textLength="12.2"
clip-path="url(#breeze-p [...]
+</text><text class="breeze-pr-auto-triage-r5" x="0" y="1825.6"
textLength="12.2" clip-path="url(#breeze-pr-auto-triage-line-74)">│</text><text
class="breeze-pr-auto-triage-r6" x="256.2" y="1825.6" textLength="1146.8"
clip-path="url(#breeze-pr-auto-triage-line-74)">codex/gpt-5.3-codex | codex/gpt-5.3-codex-spark | codex/gpt-5.2-codex | codex/gpt-5.1-codex | </text><text
class="breeze-pr-auto-triage-r5" x="1451.8" y="1825.6" textLength="12.2"
clip-pa [...]
+</text><text class="breeze-pr-auto-triage-r5" x="0" y="1850" textLength="12.2"
clip-path="url(#breeze-pr-auto-triage-line-75)">│</text><text
class="breeze-pr-auto-triage-r6" x="256.2" y="1850" textLength="695.4"
clip-path="url(#breeze-pr-auto-triage-line-75)">codex/gpt-5-codex | codex/gpt-5-codex-mini | codex/gpt-5)</text><text
class="breeze-pr-auto-triage-r5" x="1451.8" y="1850" textLength="12.2"
clip-path="url(#breeze-pr-auto-triage-line-75)">│</text><text class="br [...]
+</text><text class="breeze-pr-auto-triage-r5" x="0" y="1874.4"
textLength="12.2" clip-path="url(#breeze-pr-auto-triage-line-76)">│</text><text
class="breeze-pr-auto-triage-r4" x="24.4" y="1874.4" textLength="207.4"
clip-path="url(#breeze-pr-auto-triage-line-76)">--llm-concurrency</text><text
class="breeze-pr-auto-triage-r1" x="256.2" y="1874.4" textLength="524.6"
clip-path="url(#breeze-pr-auto-triage-line-76)">Number of concurrent LLM assessment calls. </tex
[...]
+</text><text class="breeze-pr-auto-triage-r5" x="0" y="1898.8"
textLength="1464"
clip-path="url(#breeze-pr-auto-triage-line-77)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text
class="breeze-pr-auto-triage-r1" x="1464" y="1898.8" textLength="12.2"
clip-path="url(#breeze-pr-auto-triage-line-77)">
+</text><text class="breeze-pr-auto-triage-r5" x="0" y="1923.2"
textLength="24.4"
clip-path="url(#breeze-pr-auto-triage-line-78)">╭─</text><text
class="breeze-pr-auto-triage-r5" x="24.4" y="1923.2" textLength="195.2"
clip-path="url(#breeze-pr-auto-triage-line-78)"> Action options </text><text
class="breeze-pr-auto-triage-r5" x="219.6" y="1923.2" textLength="1220"
clip-path="url(#breeze-pr-auto-triage-line-78)">────────────────────────────────────────────────────────────────
[...]
+</text><text class="breeze-pr-auto-triage-r5" x="0" y="1947.6"
textLength="12.2" clip-path="url(#breeze-pr-auto-triage-line-79)">│</text><text
class="breeze-pr-auto-triage-r4" x="24.4" y="1947.6" textLength="183"
clip-path="url(#breeze-pr-auto-triage-line-79)">--answer-triage</text><text
class="breeze-pr-auto-triage-r1" x="231.8" y="1947.6" textLength="1207.8"
clip-path="url(#breeze-pr-auto-triage-line-79)">Force answer to triage prompts: [d]raft, [c]lose,&#
[...]
+</text><text class="breeze-pr-auto-triage-r5" x="0" y="1972" textLength="12.2"
clip-path="url(#breeze-pr-auto-triage-line-80)">│</text><text
class="breeze-pr-auto-triage-r6" x="231.8" y="1972" textLength="183"
clip-path="url(#breeze-pr-auto-triage-line-80)">(d|c|r|s|q|y|n)</text><text
class="breeze-pr-auto-triage-r5" x="1451.8" y="1972" textLength="12.2"
clip-path="url(#breeze-pr-auto-triage-line-80)">│</text><text
class="breeze-pr-auto-triage-r1" x="1464" y="1972" textLength="12.2" clip [...]
+</text><text class="breeze-pr-auto-triage-r5" x="0" y="1996.4"
textLength="1464"
clip-path="url(#breeze-pr-auto-triage-line-81)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text
class="breeze-pr-auto-triage-r1" x="1464" y="1996.4" textLength="12.2"
clip-path="url(#breeze-pr-auto-triage-line-81)">
+</text><text class="breeze-pr-auto-triage-r5" x="0" y="2020.8"
textLength="24.4"
clip-path="url(#breeze-pr-auto-triage-line-82)">╭─</text><text
class="breeze-pr-auto-triage-r5" x="24.4" y="2020.8" textLength="195.2"
clip-path="url(#breeze-pr-auto-triage-line-82)"> Common options </text><text
class="breeze-pr-auto-triage-r5" x="219.6" y="2020.8" textLength="1220"
clip-path="url(#breeze-pr-auto-triage-line-82)">────────────────────────────────────────────────────────────────
[...]
+</text><text class="breeze-pr-auto-triage-r5" x="0" y="2045.2"
textLength="12.2" clip-path="url(#breeze-pr-auto-triage-line-83)">│</text><text
class="breeze-pr-auto-triage-r4" x="24.4" y="2045.2" textLength="109.8"
clip-path="url(#breeze-pr-auto-triage-line-83)">--dry-run</text><text
class="breeze-pr-auto-triage-r7" x="158.6" y="2045.2" textLength="24.4"
clip-path="url(#breeze-pr-auto-triage-line-83)">-D</text><text
class="breeze-pr-auto-triage-r1" x="207.4" y="2045.2" textLength="719.8" [...]
+</text><text class="breeze-pr-auto-triage-r5" x="0" y="2069.6"
textLength="12.2" clip-path="url(#breeze-pr-auto-triage-line-84)">│</text><text
class="breeze-pr-auto-triage-r4" x="24.4" y="2069.6" textLength="109.8"
clip-path="url(#breeze-pr-auto-triage-line-84)">--verbose</text><text
class="breeze-pr-auto-triage-r7" x="158.6" y="2069.6" textLength="24.4"
clip-path="url(#breeze-pr-auto-triage-line-84)">-v</text><text
class="breeze-pr-auto-triage-r1" x="207.4" y="2069.6" textLength="585.6" [...]
+</text><text class="breeze-pr-auto-triage-r5" x="0" y="2094" textLength="12.2"
clip-path="url(#breeze-pr-auto-triage-line-85)">│</text><text
class="breeze-pr-auto-triage-r4" x="24.4" y="2094" textLength="109.8"
clip-path="url(#breeze-pr-auto-triage-line-85)">--help   </text><text
class="breeze-pr-auto-triage-r7" x="158.6" y="2094" textLength="24.4"
clip-path="url(#breeze-pr-auto-triage-line-85)">-h</text><text
class="breeze-pr-auto-triage-r1" x="207.4" y="2094" textLength= [...]
+</text><text class="breeze-pr-auto-triage-r5" x="0" y="2118.4"
textLength="1464"
clip-path="url(#breeze-pr-auto-triage-line-86)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text
class="breeze-pr-auto-triage-r1" x="1464" y="2118.4" textLength="12.2"
clip-path="url(#breeze-pr-auto-triage-line-86)">
</text>
</g>
</g>
diff --git a/dev/breeze/doc/images/output_pr_auto-triage.txt
b/dev/breeze/doc/images/output_pr_auto-triage.txt
index e8fccbe20ab..f2d3002dbd2 100644
--- a/dev/breeze/doc/images/output_pr_auto-triage.txt
+++ b/dev/breeze/doc/images/output_pr_auto-triage.txt
@@ -1 +1 @@
-25763a408c0f0ab52c95d4e816184b53
+f32e601513ba3cce3b3f42b5beeae0e5
diff --git a/dev/breeze/src/airflow_breeze/commands/pr_commands.py
b/dev/breeze/src/airflow_breeze/commands/pr_commands.py
index 6ee27349bad..e41c38ab10c 100644
--- a/dev/breeze/src/airflow_breeze/commands/pr_commands.py
+++ b/dev/breeze/src/airflow_breeze/commands/pr_commands.py
@@ -600,9 +600,14 @@ def _fetch_prs_graphql(
token: str,
github_repository: str,
labels: tuple[str, ...],
+ exclude_labels: tuple[str, ...],
filter_user: str | None,
sort: str,
batch_size: int,
+ created_after: str | None = None,
+ created_before: str | None = None,
+ updated_after: str | None = None,
+ updated_before: str | None = None,
) -> list[PRData]:
"""Fetch a single batch of matching PRs via GraphQL."""
query_parts = [f"repo:{github_repository}", "type:pr", "is:open",
"draft:false"]
@@ -610,6 +615,21 @@ def _fetch_prs_graphql(
query_parts.append(f"author:{filter_user}")
for label in labels:
query_parts.append(f'label:"{label}"')
+ for label in exclude_labels:
+ query_parts.append(f'-label:"{label}"')
+ # Date range filters — GitHub search supports created: and updated:
qualifiers
+ if created_after and created_before:
+ query_parts.append(f"created:{created_after}..{created_before}")
+ elif created_after:
+ query_parts.append(f"created:>={created_after}")
+ elif created_before:
+ query_parts.append(f"created:<={created_before}")
+ if updated_after and updated_before:
+ query_parts.append(f"updated:{updated_after}..{updated_before}")
+ elif updated_after:
+ query_parts.append(f"updated:>={updated_after}")
+ elif updated_before:
+ query_parts.append(f"updated:<={updated_before}")
search_query = " ".join(query_parts)
sort_field, sort_direction = sort.rsplit("-", 1)
@@ -1237,6 +1257,7 @@ def _approve_workflow_runs(token: str, github_repository:
str, pending_runs: lis
)
@option_github_token
@option_github_repository
+# --- Target selection ---
@click.option(
"--pr",
"pr_number",
@@ -1244,13 +1265,74 @@ def _approve_workflow_runs(token: str,
github_repository: str, pending_runs: lis
default=None,
help="Triage a specific PR by number instead of searching.",
)
+# --- Filter options ---
@click.option(
"--label",
"labels",
type=NotVerifiedBetterChoice(_load_labels_from_boring_cyborg()),
multiple=True,
- help="Filter PRs by label (can be repeated).",
+ help="Filter PRs by label. Supports wildcards (e.g. 'area:*',
'provider:amazon*'). Can be repeated.",
)
[email protected](
+ "--exclude-label",
+ "exclude_labels",
+ type=str,
+ multiple=True,
+ help="Exclude PRs with this label. Supports wildcards. Can be repeated.",
+)
[email protected](
+ "--author",
+ "filter_user",
+ default=None,
+ help="Filter PRs to a specific author.",
+)
[email protected](
+ "--created-after",
+ default=None,
+ help="Only PRs created on or after this date (YYYY-MM-DD).",
+)
[email protected](
+ "--created-before",
+ default=None,
+ help="Only PRs created on or before this date (YYYY-MM-DD).",
+)
[email protected](
+ "--updated-after",
+ default=None,
+ help="Only PRs updated on or after this date (YYYY-MM-DD).",
+)
[email protected](
+ "--updated-before",
+ default=None,
+ help="Only PRs updated on or before this date (YYYY-MM-DD).",
+)
[email protected](
+ "--include-collaborators",
+ is_flag=True,
+ default=False,
+ help="Include PRs from collaborators/members/owners (normally skipped).",
+)
[email protected](
+ "--pending-approval-only",
+ is_flag=True,
+ default=False,
+ help="Only show PRs with workflow runs awaiting approval.",
+)
[email protected](
+ "--checks-state",
+ type=click.Choice(["failure", "success", "pending", "any"]),
+ default="any",
+ show_default=True,
+ help="Only assess PRs with this CI checks state.",
+)
[email protected](
+ "--min-commits-behind",
+ type=int,
+ default=0,
+ show_default=True,
+ help="Only assess PRs that are at least this many commits behind base
branch.",
+)
+# --- Pagination and sorting ---
@click.option(
"--batch-size",
type=int,
@@ -1272,12 +1354,7 @@ def _approve_workflow_runs(token: str,
github_repository: str, pending_runs: lis
show_default=True,
help="Sort order for PR search results.",
)
[email protected](
- "--author",
- "filter_user",
- default=None,
- help="Filter PRs to a specific author.",
-)
+# --- Assessment options ---
@click.option(
"--check-mode",
type=click.Choice(["both", "ci", "llm"]),
@@ -1293,6 +1370,7 @@ def _approve_workflow_runs(token: str, github_repository:
str, pending_runs: lis
help="Number of concurrent LLM assessment calls.",
)
@option_llm_model
+# --- Action options ---
@click.option(
"--answer-triage",
type=click.Choice(["d", "c", "r", "s", "q", "y", "n"],
case_sensitive=False),
@@ -1306,10 +1384,19 @@ def auto_triage(
github_repository: str,
pr_number: int | None,
labels: tuple[str, ...],
+ exclude_labels: tuple[str, ...],
batch_size: int,
max_num: int,
sort: str,
filter_user: str | None,
+ created_after: str | None,
+ created_before: str | None,
+ updated_after: str | None,
+ updated_before: str | None,
+ include_collaborators: bool,
+ pending_approval_only: bool,
+ checks_state: str,
+ min_commits_behind: int,
check_mode: str,
llm_concurrency: int,
llm_model: str,
@@ -1345,13 +1432,45 @@ def auto_triage(
dry_run = get_dry_run()
+ # Split labels into exact (for GitHub search) and wildcard (for
client-side filtering)
+ from fnmatch import fnmatch
+
+ exact_labels = tuple(lbl for lbl in labels if "*" not in lbl and "?" not
in lbl)
+ wildcard_labels = [lbl for lbl in labels if "*" in lbl or "?" in lbl]
+ exact_exclude_labels = tuple(lbl for lbl in exclude_labels if "*" not in
lbl and "?" not in lbl)
+ wildcard_exclude_labels = [lbl for lbl in exclude_labels if "*" in lbl or
"?" in lbl]
+
# Phase 1: Lightweight fetch of PRs via GraphQL (no check contexts — fast)
if pr_number:
get_console().print(f"[info]Fetching PR #{pr_number} via
GraphQL...[/]")
all_prs = [_fetch_single_pr_graphql(token, github_repository,
pr_number)]
else:
get_console().print("[info]Fetching PRs via GraphQL...[/]")
- all_prs = _fetch_prs_graphql(token, github_repository, labels,
filter_user, sort, batch_size)
+ all_prs = _fetch_prs_graphql(
+ token,
+ github_repository,
+ labels=exact_labels,
+ exclude_labels=exact_exclude_labels,
+ filter_user=filter_user,
+ sort=sort,
+ batch_size=batch_size,
+ created_after=created_after,
+ created_before=created_before,
+ updated_after=updated_after,
+ updated_before=updated_before,
+ )
+
+ # Apply wildcard label filters client-side
+ if wildcard_labels:
+ all_prs = [
+ pr for pr in all_prs if any(fnmatch(lbl, pat) for pat in
wildcard_labels for lbl in pr.labels)
+ ]
+ if wildcard_exclude_labels:
+ all_prs = [
+ pr
+ for pr in all_prs
+ if not any(fnmatch(lbl, pat) for pat in wildcard_exclude_labels
for lbl in pr.labels)
+ ]
# Resolve how far behind base branch each PR is (chunked GraphQL)
get_console().print("[info]Checking how far behind base branch each PR
is...[/]")
@@ -1411,14 +1530,16 @@ def auto_triage(
get_console().print(pr_table)
get_console().print()
- # Phase 2: Filter out collaborators, bots, and ready-for-review PRs, then
apply --max-num
+ # Phase 2: Filter out collaborators, bots, and ready-for-review PRs, then
apply post-fetch filters
candidate_prs: list[PRData] = []
total_skipped_collaborator = 0
total_skipped_bot = 0
total_skipped_accepted = 0
+ total_skipped_checks_state = 0
+ total_skipped_commits_behind = 0
verbose = get_verbose()
for pr in all_prs:
- if pr.author_association in _COLLABORATOR_ASSOCIATIONS:
+ if not include_collaborators and pr.author_association in
_COLLABORATOR_ASSOCIATIONS:
total_skipped_collaborator += 1
if verbose:
get_console().print(
@@ -1435,22 +1556,43 @@ def auto_triage(
get_console().print(
f" [dim]Skipping PR {_pr_link(pr)} — already has
'{_READY_FOR_REVIEW_LABEL}' label[/]"
)
+ elif checks_state != "any" and pr.checks_state.lower() != checks_state:
+ total_skipped_checks_state += 1
+ if verbose:
+ get_console().print(
+ f" [dim]Skipping PR {_pr_link(pr)} — checks state
{pr.checks_state} != {checks_state}[/]"
+ )
+ elif min_commits_behind > 0 and pr.commits_behind < min_commits_behind:
+ total_skipped_commits_behind += 1
+ if verbose:
+ get_console().print(
+ f" [dim]Skipping PR {_pr_link(pr)} — only "
+ f"{pr.commits_behind} commits behind (min:
{min_commits_behind})[/]"
+ )
else:
candidate_prs.append(pr)
if max_num and len(candidate_prs) > max_num:
candidate_prs = candidate_prs[:max_num]
- skipped_parts = [
- f"{total_skipped_collaborator} {'collaborators' if
total_skipped_collaborator != 1 else 'collaborator'}"
- ]
+ skipped_parts: list[str] = []
+ if total_skipped_collaborator:
+ skipped_parts.append(
+ f"{total_skipped_collaborator} "
+ f"{'collaborators' if total_skipped_collaborator != 1 else
'collaborator'}"
+ )
if total_skipped_bot:
skipped_parts.append(f"{total_skipped_bot} {'bots' if
total_skipped_bot != 1 else 'bot'}")
if total_skipped_accepted:
skipped_parts.append(f"{total_skipped_accepted} ready-for-review")
+ if total_skipped_checks_state:
+ skipped_parts.append(f"{total_skipped_checks_state} checks-state
mismatch")
+ if total_skipped_commits_behind:
+ skipped_parts.append(f"{total_skipped_commits_behind} below
min-commits-behind")
+ skipped_text = f"skipped {', '.join(skipped_parts)}, " if skipped_parts
else ""
get_console().print(
f"\n[info]Fetched {len(all_prs)} {'PRs' if len(all_prs) != 1 else
'PR'}, "
- f"skipped {', '.join(skipped_parts)}, "
+ f"{skipped_text}"
f"assessing {len(candidate_prs)} {'PRs' if len(candidate_prs) != 1
else 'PR'}"
f"{f' (capped at {max_num})' if max_num else ''}...[/]\n"
)
@@ -1524,6 +1666,19 @@ def auto_triage(
else:
llm_candidates.append(pr)
+ # If --pending-approval-only, discard all assessment results and only keep
pending_approval
+ if pending_approval_only:
+ assessments = {}
+ llm_candidates = []
+ total_deterministic_flags = 0
+ if not pending_approval:
+ get_console().print("[success]No PRs with pending workflow
approvals found.[/]")
+ sys.exit(0)
+ get_console().print(
+ f"[info]--pending-approval-only: found {len(pending_approval)} "
+ f"{'PRs' if len(pending_approval) != 1 else 'PR'} awaiting
workflow approval.[/]\n"
+ )
+
# Phase 4: Run LLM assessments concurrently for PRs without CI failures
total_llm_errors = 0
diff --git a/dev/breeze/src/airflow_breeze/commands/pr_commands_config.py
b/dev/breeze/src/airflow_breeze/commands/pr_commands_config.py
index 049ccaf9412..31532e59f23 100644
--- a/dev/breeze/src/airflow_breeze/commands/pr_commands_config.py
+++ b/dev/breeze/src/airflow_breeze/commands/pr_commands_config.py
@@ -27,20 +27,41 @@ PR_PARAMETERS: dict[str, list[dict[str, str | list[str]]]]
= {
"name": "GitHub parameters",
"options": ["--github-token", "--github-repository"],
},
+ {
+ "name": "Target selection",
+ "options": ["--pr"],
+ },
{
"name": "Filter options",
- "options": ["--pr", "--label", "--author", "--sort"],
+ "options": [
+ "--label",
+ "--exclude-label",
+ "--author",
+ "--created-after",
+ "--created-before",
+ "--updated-after",
+ "--updated-before",
+ "--include-collaborators",
+ "--pending-approval-only",
+ "--checks-state",
+ "--min-commits-behind",
+ ],
},
{
- "name": "Processing options",
+ "name": "Pagination and sorting",
+ "options": ["--batch-size", "--max-num", "--sort"],
+ },
+ {
+ "name": "Assessment options",
"options": [
- "--batch-size",
- "--max-num",
"--check-mode",
"--llm-model",
"--llm-concurrency",
- "--answer-triage",
],
},
+ {
+ "name": "Action options",
+ "options": ["--answer-triage"],
+ },
],
}