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.

Reply via email to