From dd8bb6cf77217b6b5ac4d00ac77ae9b561ec4fb5 Mon Sep 17 00:00:00 2001 From: Danyang Chen Date: Sat, 7 Nov 2026 06:16:55 +0800 Subject: [PATCH] Document that a second pull request from outside the tree is external MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Two readings collided on #1081: #1216 carried our Bot names and a Fixes line from a fork, while #1215 was the work we actually ran. AGENTS.md now says a second open pull request on one issue whose branch is a fork and which has no card on our board is external — shepherded, never counted as our implementation, and never a reason to stop our own work on that issue. docs/autonomous-dev.md points at the same wording. Fixes #1218 Docs-not-needed: this commit is the documentation change itself (AGENTS.md and docs/autonomous-dev.md); no docs/subsystems/ page owns either file. --- AGENTS.md | 2 ++ docs/autonomous-dev.md | 3 +++ 2 files changed, 5 insertions(+) diff --git a/AGENTS.md b/AGENTS.md index a893b4c6d..61ea84bd9 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -65,6 +65,8 @@ Such a PR needs `tests-ok` green at the tip **and** a test that fails when the s **One PR per issue.** When an issue already has a pull request, keep working in that one: re-base its branch, use `update-branch`, or push a new commit to its head, and add the tests there too. Never open a second PR and close the first — that is what produced a trail of superseded PRs. A contributor's fork is treated the same way while it allows maintainer edits. The only exception is a branch that cannot be pushed (maintainer edits off, or the author is gone and the branch is unusable): then a new PR is allowed **and the reason goes on the issue** — never a silent swap. +**A second pull request from outside the tree is external, not ours (#1218).** A second open pull request on one issue whose branch is not in this repository (it comes from a fork) and which has no card on this team's board is an **external pull request**. The team shepherds it — reads it, comments on it, says what it would need — and never counts it as our implementation, never reads its `Owner:` / `Written-by:` lines as a member's work, and never stops our own implementation of that issue because of it. It is the other face of the fork exemption in [Merge gates](#merge-gates): that one says we cannot push to its branch, this one says it cannot move our judgement. Only a pull request on a branch this repository owns, or one the team has a card for, is ours under the rule above. + Anything else is not opened, not queued and not reviewed: pure UX polish, new configuration keys, design proposals. Leave them in `needs-human`, or close them with the reason written down, and report them in one batch instead of one at a time. **Still report to the Chief first** (who asks the owner): a vague scope, a change on the security surface (secrets, permissions, sharing), or a policy change the owner can feel. The routines keep their own bottom lines: no production deploy without consent, no touching the owner's own machine, never print a secret, never open an issue on someone else's upstream, never remove a PR the owner put in the merge queue. diff --git a/docs/autonomous-dev.md b/docs/autonomous-dev.md index 075d43e24..5bc9637b1 100644 --- a/docs/autonomous-dev.md +++ b/docs/autonomous-dev.md @@ -21,6 +21,9 @@ Decisions by the maintainer, and what follows from them: mergeable and it conforms to the design rules, with no PASS. **T2 and T3** need a PASS at the tip from the Reviewer Bot and green CI, and then the agent that gated the PR enqueues it itself — **T2 and T3 need no maintainer approve** (user decision 2026-10-22; [`AGENTS.md` → Merge gates](../AGENTS.md#merge-gates)). A self-PASS counts only across Bots: the account is shared, and the implementer never reviews its own pull request. The gate is the review: green `tests-ok` at the tip, a PASS at that same tip, and a test that fails when the change is reverted. Work that meets neither the defect nor the routine-need bar gets no PR at all (AGENTS.md). An issue that already has a pull request keeps it: update that branch (re-base, `update-branch`, or a commit on its head) rather than opening a second PR; a branch that cannot be pushed is the only exception, and the reason goes on the issue. + A second open pull request on that issue whose branch is a fork and which has no card on our board is an **external** + pull request: shepherded, never counted as our implementation, and never a reason to stop our own work there + ([`AGENTS.md` → One PR per issue](../AGENTS.md#owner-decision-the-bot-gates-and-merges-its-own-prs-2026-10-21-owner-authorized)). 5. Budget is not set. Every cost cap will live in one config file (open PRs, attempts per PR, PRs per day, minutes per attempt) so it can be changed without code.