This is an automated email from the ASF dual-hosted git repository.
shahar1 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 1a51ed1b1f5 Account for the open pull request limit in the PR triage
process (#73742)
1a51ed1b1f5 is described below
commit 1a51ed1b1f557852ca6b2b54aee67030234fc597
Author: Jarek Potiuk <[email protected]>
AuthorDate: Sat Sep 26 09:06:05 2026 +0200
Account for the open pull request limit in the PR triage process (#73742)
The one-time closure that introduces the open pull request limit labels PRs
that contributors are expected to reopen once they have prioritised. Without
guidance, the triage skill could read that label as a quality signal against
a reopened PR, or propose closing PRs of authors at the limit - duplicating
a
job GitHub and the closure script already do. Maintainers and contributors
reading the triage and PR guidelines also need to find the new closure case
next to the existing ones, so the appeal path covers it too.
Generated-by: Claude Opus 5
---
.apache-magpie-overrides/pr-management-config.md | 25 ++++++++++++++++++++++++
contributing-docs/05_pull_requests.rst | 7 +++++++
contributing-docs/25_maintainer_pr_triage.md | 4 ++++
3 files changed, 36 insertions(+)
diff --git a/.apache-magpie-overrides/pr-management-config.md
b/.apache-magpie-overrides/pr-management-config.md
index 1cc199daade..6596cc99872 100644
--- a/.apache-magpie-overrides/pr-management-config.md
+++ b/.apache-magpie-overrides/pr-management-config.md
@@ -24,6 +24,7 @@
- [Apache Airflow — pr-management-triage
configuration](#apache-airflow--pr-management-triage-configuration)
- [Identifiers](#identifiers)
- [Project-specific labels](#project-specific-labels)
+ - [Open PR limit](#open-pr-limit)
- [Grace windows](#grace-windows)
- [Feedback delivery](#feedback-delivery)
@@ -61,6 +62,30 @@ and the skill will skip that row of decision-table actions.
| `quality_violations_close` | `closed because of multiple quality violations`
| Applied when a PR is closed for failing the project's PR quality criteria
after multiple opportunities to fix. |
| `suspicious_changes` | `suspicious changes detected` | Applied to
first-time-contributor workflow approvals where the diff looks suspicious
(binary blobs, unrelated CI changes, etc.). |
| `work_in_progress` | | Airflow does not use a dedicated WIP label; the skill
relies on draft status instead. |
+| `open_pr_limit_close` | `closed because of open PR limit` |
Airflow-specific. Applied only by `dev/close_prs_over_open_pr_limit.py` during
the one-time closure that introduced the [open PR limit](#open-pr-limit) — the
triage skill never applies it. A PR carrying it that the author has reopened is
a deliberate prioritisation choice: triage it like any other PR and do not
treat the label as a quality signal. |
+
+## Open PR limit
+
+`.asf.yaml` enables GitHub's pull request creation cap: an author
+without write access can have at most **5** open PRs at a time.
+Drafts do not count yet (GitHub does not support counting them).
+The contributor-facing explanation is
+[`32_open_pull_request_limit.rst`](https://github.com/apache/airflow/blob/main/contributing-docs/32_open_pull_request_limit.rst).
+
+| Key | Value | Notes |
+|---|---|---|
+| `max_open_prs_without_write_access` | `5` | Keep in sync with
`github.pull_requests.creation_cap.max_open_pull_requests` in `.asf.yaml`. |
+| `open_pr_limit_url` |
`https://github.com/apache/airflow/blob/main/contributing-docs/32_open_pull_request_limit.rst`
| Link it from any triage comment that asks an author to focus on fewer PRs
(e.g. the `Multiple flagged PRs` violation). |
+
+Triage implications:
+
+- Closing a PR or converting it to draft frees one of the author's
+ slots. Mention that in `close` comments so the author knows the
+ PR can be reopened once they have capacity.
+- Do not propose closing PRs **only** because an author is at or
+ above the limit — GitHub enforces the cap for new PRs, and the
+ one-time closure of pre-existing PRs is done with the script, not
+ the triage skill.
## Grace windows
diff --git a/contributing-docs/05_pull_requests.rst
b/contributing-docs/05_pull_requests.rst
index 26af851b0cd..e7c3eab2ea0 100644
--- a/contributing-docs/05_pull_requests.rst
+++ b/contributing-docs/05_pull_requests.rst
@@ -223,6 +223,13 @@ maliciously, or inject harmful code), **all open PRs by
the same author** will b
and labeled ``suspicious changes detected``. A comment is posted on each PR
explaining that
the closure was triggered by suspicious changes found in the flagged PR.
+**What happens when a PR is closed because of the open PR limit?**
+
+When the `limit on open PRs <32_open_pull_request_limit.rst>`__ was
introduced, maintainers ran a
+one-time closure of the PRs of contributors who had more than 5 open PRs,
except PRs where a
+maintainer had already engaged. Those PRs are labeled ``closed because of open
PR limit`` and can be
+reopened once you have a free slot.
+
If a contributor believes any closure described above was applied in error,
the appeal channel
is the PMC private list — see the
`Community escalation process <../COMMUNITY_ESCALATION.md>`_ for how to email
diff --git a/contributing-docs/25_maintainer_pr_triage.md
b/contributing-docs/25_maintainer_pr_triage.md
index 9fbede197b3..046a1b20fa2 100644
--- a/contributing-docs/25_maintainer_pr_triage.md
+++ b/contributing-docs/25_maintainer_pr_triage.md
@@ -240,6 +240,7 @@ The triage workflow uses the following labels and states:
| `ready for maintainer review` | PR has passed Stage 1 and is queued for
human review. Applied only after the skill has verified that no workflow runs
are awaiting approval. |
| `closed because of multiple quality violations` | PR was closed because the
author has multiple open PRs with quality issues. |
| `suspicious changes detected` | PR (and all open PRs by the same author) was
closed because the diff contained suspicious patterns (secret exfiltration,
malicious CI modifications, etc.). |
+| `closed because of open PR limit` | PR was closed in the one-time closure
that introduced the [open PR limit](32_open_pull_request_limit.rst). Applied by
`dev/close_prs_over_open_pr_limit.py`, never by the triage skill. If the author
reopens the PR, triage it like any other. |
| **Draft status** | PR was converted to draft because it does not meet
quality criteria. The contributor is asked to fix the listed issues and mark
the PR as "Ready for review" once done. |
## For contributors
@@ -268,3 +269,6 @@ Tips for getting through Stage 1 quickly:
why the suggestion doesn't apply — click "Resolve conversation" yourself.
6. **Disclose Gen-AI usage.** If you used Gen-AI tools, include the disclosure
block
from the [Gen-AI
guidelines](05_pull_requests.rst#gen-ai-assisted-contributions).
+7. **Focus on a few PRs at a time.** Contributors without write access can
have at most
+ 5 open PRs at a time — see [Limit on open Pull
Requests](32_open_pull_request_limit.rst).
+ Getting your open PRs through both stages is what frees up a slot for the
next one.