From bbe8b1da29a8a862eabe397e15fe0c68fe773881 Mon Sep 17 00:00:00 2001 From: Markus Neusinger <2921697+MarkusNeusinger@users.noreply.github.com> Date: Thu, 3 Sep 2026 23:37:20 +0200 Subject: [PATCH 1/3] docs(agents): one Copilot review per PR, not one per push MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Review-on-push was turned off in the "Automated Copilot Code Review" ruleset of both repositories on 2026-09-03 (owner), so the bot runs once when a PR opens or leaves draft and a push triggers nothing. CLAUDE.md's PR follow-through step 3 now says that, and says not to re-request one per push: each request is a full re-read of the whole diff, and the bot then surfaces "previously missed" findings in files the push never touched — which draws another push, and another request. A fresh review is requested only after a substantive rework, and a PR that is green with no open threads needs none. agentic/commands/pull_request.md gains the same note at its own step 7, whose follow-up commit is exactly the push that used to look like a reason to re-request. The rule is not mirrored into .github/copilot-instructions.md: that file has no PR-follow-through block, and this is agent workflow rather than one of the rules the two guides share. Co-Authored-By: Claude Fable 5.1 Claude-Session: https://claude.ai/code/session_01UEScQMZFvxxNNyNJYryfa3 --- CHANGELOG.md | 10 ++++++++++ CLAUDE.md | 2 +- agentic/commands/pull_request.md | 4 ++++ 3 files changed, 15 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 0475c20e96..f1c03b7d15 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -222,6 +222,16 @@ aggregate instead: an italic *Catalog* line at the end of the version section an ### Changed +- **The agent instructions say what the Copilot review ruleset now does: one review per PR, not + one per push** — review-on-push was turned off in the "Automated Copilot Code Review" ruleset of + both repositories on 2026-09-03, so the bot runs once when a PR opens or leaves draft and a push + triggers nothing. `CLAUDE.md`'s PR follow-through and `agentic/commands/pull_request.md` now say + so, and say not to re-request one per push: each request is a full re-read of the whole diff, and + the bot then surfaces "previously missed" findings in files the push never touched — which draws + another push, and another request (the sibling repo's PR #406 collected ~15 in a day over a + one-line docstring fix). A fresh review is requested only after a substantive rework, and a PR + that is green with no open threads needs no further round. (#PRNUM) + - **The frontend deploys through a candidate revision instead of straight onto live traffic** — `app/cloudbuild.yaml` now follows the same candidate-rollout pattern as `api/cloudbuild.yaml`: deploy with `--no-traffic --tag=candidate diff --git a/CLAUDE.md b/CLAUDE.md index 4eb079957d..f6ee0938dc 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -37,7 +37,7 @@ After opening a PR, the work is **not** complete. Stay with the PR until both th 1. **Watch the pipeline.** Poll `gh pr checks ` (and Cloud Build for triggered deploys) until every required check has finished. Use a background bash poll so other work can continue. Default: poll every 20 s, up to ~10 min per check. 2. **Fix CI failures.** If any check fails, read the relevant log (`gh run view --log-failed`, `gcloud builds log `), push a fix commit to the same branch, then keep watching. Repeat until green. -3. **Wait for the Copilot PR Reviewer bot** (and any other auto-review bots active on this repo). Typically lands within ~2 min of PR open. Fetch with `gh pr view --comments`, plus the three GitHub APIs that surface different comment types — `gh api` resolves `{owner}/{repo}` from the current git remote so these are copy/paste-portable: +3. **Wait for the Copilot PR Reviewer bot — ONE review per PR, not one per push.** Review-on-push is off in the "Automated Copilot Code Review" ruleset (owner, 2026-09-03): the bot runs once when the PR opens or leaves draft, and a push triggers nothing. Don't re-request a review after every push. Each request is a full re-read of the whole diff, and the bot then surfaces "previously missed" findings in files the push never touched — which draws another push, which draws another request (the sibling repo's PR #406 collected ~15 requests in a day over a one-line docstring fix). Request a fresh review explicitly only after a SUBSTANTIVE rework (new behaviour, a reworked mechanism), and stop once a round yields no new inline comments but only carried-over items: the field is grazed. A PR that is green with no open threads needs no further round — say so and let the owner merge. The first review typically lands within ~2 min of PR open. Fetch with `gh pr view --comments`, plus the three GitHub APIs that surface different comment types — `gh api` resolves `{owner}/{repo}` from the current git remote so these are copy/paste-portable: - `gh api repos/{owner}/{repo}/pulls//reviews` — top-level review summaries (Copilot's overall comment lives here) - `gh api repos/{owner}/{repo}/pulls//comments` — inline review comments tied to file/line - `gh api repos/{owner}/{repo}/issues//comments` — generic PR conversation comments (codecov, deployment bots, humans) diff --git a/agentic/commands/pull_request.md b/agentic/commands/pull_request.md index ce2b808a4a..17aed08779 100644 --- a/agentic/commands/pull_request.md +++ b/agentic/commands/pull_request.md @@ -55,6 +55,10 @@ EOF 7. If step 4 added changelog entries without a PR reference, append the new PR number to those bullets (e.g. `(#1234)`) and push the follow-up commit. +8. **The Copilot review runs ONCE**, when the PR opens (or leaves draft) — review-on-push is off in + the "Automated Copilot Code Review" ruleset (owner, 2026-09-03), so step 7's follow-up commit and + every later push trigger nothing. Do not re-request a review per push; the rule and its one + exception (a substantive rework) are in `CLAUDE.md` § "PR Follow-Through", step 3. ## Report From a7bacb0ed3c47a2e5dd1d977b3bcc97101b299e0 Mon Sep 17 00:00:00 2001 From: Markus Neusinger <2921697+MarkusNeusinger@users.noreply.github.com> Date: Thu, 3 Sep 2026 23:38:03 +0200 Subject: [PATCH 2/3] docs(changelog): PR reference Co-Authored-By: Claude Fable 5.1 Claude-Session: https://claude.ai/code/session_01UEScQMZFvxxNNyNJYryfa3 --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index f1c03b7d15..84527cd895 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -230,7 +230,7 @@ aggregate instead: an italic *Catalog* line at the end of the version section an the bot then surfaces "previously missed" findings in files the push never touched — which draws another push, and another request (the sibling repo's PR #406 collected ~15 in a day over a one-line docstring fix). A fresh review is requested only after a substantive rework, and a PR - that is green with no open threads needs no further round. (#PRNUM) + that is green with no open threads needs no further round. (#11216) - **The frontend deploys through a candidate revision instead of straight onto live traffic** — `app/cloudbuild.yaml` now follows the same candidate-rollout pattern as From f880381278c0adbe59c74589c5251bdbe4d057ca Mon Sep 17 00:00:00 2001 From: Markus Neusinger <2921697+MarkusNeusinger@users.noreply.github.com> Date: Thu, 3 Sep 2026 23:51:41 +0200 Subject: [PATCH 3/3] docs(agents): qualify the cross-repo PR reference Copilot: a bare #406 resolves to this repository's own issue 406, not the sibling PR the evidence lives in. Both mentions are now full links to MarkusNeusinger/kurrentschrift#406. Co-Authored-By: Claude Fable 5.1 Claude-Session: https://claude.ai/code/session_01UEScQMZFvxxNNyNJYryfa3 --- CHANGELOG.md | 6 ++++-- CLAUDE.md | 2 +- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 84527cd895..b52de75908 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -228,8 +228,10 @@ aggregate instead: an italic *Catalog* line at the end of the version section an triggers nothing. `CLAUDE.md`'s PR follow-through and `agentic/commands/pull_request.md` now say so, and say not to re-request one per push: each request is a full re-read of the whole diff, and the bot then surfaces "previously missed" findings in files the push never touched — which draws - another push, and another request (the sibling repo's PR #406 collected ~15 in a day over a - one-line docstring fix). A fresh review is requested only after a substantive rework, and a PR + another push, and another request (the sibling repo's + [kurrentschrift#406](https://github.com/MarkusNeusinger/kurrentschrift/pull/406) collected ~15 in + a day over a one-line docstring fix). A fresh review is requested only after a substantive + rework, and a PR that is green with no open threads needs no further round. (#11216) - **The frontend deploys through a candidate revision instead of straight onto live diff --git a/CLAUDE.md b/CLAUDE.md index f6ee0938dc..d25a40578b 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -37,7 +37,7 @@ After opening a PR, the work is **not** complete. Stay with the PR until both th 1. **Watch the pipeline.** Poll `gh pr checks ` (and Cloud Build for triggered deploys) until every required check has finished. Use a background bash poll so other work can continue. Default: poll every 20 s, up to ~10 min per check. 2. **Fix CI failures.** If any check fails, read the relevant log (`gh run view --log-failed`, `gcloud builds log `), push a fix commit to the same branch, then keep watching. Repeat until green. -3. **Wait for the Copilot PR Reviewer bot — ONE review per PR, not one per push.** Review-on-push is off in the "Automated Copilot Code Review" ruleset (owner, 2026-09-03): the bot runs once when the PR opens or leaves draft, and a push triggers nothing. Don't re-request a review after every push. Each request is a full re-read of the whole diff, and the bot then surfaces "previously missed" findings in files the push never touched — which draws another push, which draws another request (the sibling repo's PR #406 collected ~15 requests in a day over a one-line docstring fix). Request a fresh review explicitly only after a SUBSTANTIVE rework (new behaviour, a reworked mechanism), and stop once a round yields no new inline comments but only carried-over items: the field is grazed. A PR that is green with no open threads needs no further round — say so and let the owner merge. The first review typically lands within ~2 min of PR open. Fetch with `gh pr view --comments`, plus the three GitHub APIs that surface different comment types — `gh api` resolves `{owner}/{repo}` from the current git remote so these are copy/paste-portable: +3. **Wait for the Copilot PR Reviewer bot — ONE review per PR, not one per push.** Review-on-push is off in the "Automated Copilot Code Review" ruleset (owner, 2026-09-03): the bot runs once when the PR opens or leaves draft, and a push triggers nothing. Don't re-request a review after every push. Each request is a full re-read of the whole diff, and the bot then surfaces "previously missed" findings in files the push never touched — which draws another push, which draws another request (the sibling repo's [kurrentschrift#406](https://github.com/MarkusNeusinger/kurrentschrift/pull/406) collected ~15 requests in a day over a one-line docstring fix). Request a fresh review explicitly only after a SUBSTANTIVE rework (new behaviour, a reworked mechanism), and stop once a round yields no new inline comments but only carried-over items: the field is grazed. A PR that is green with no open threads needs no further round — say so and let the owner merge. The first review typically lands within ~2 min of PR open. Fetch with `gh pr view --comments`, plus the three GitHub APIs that surface different comment types — `gh api` resolves `{owner}/{repo}` from the current git remote so these are copy/paste-portable: - `gh api repos/{owner}/{repo}/pulls//reviews` — top-level review summaries (Copilot's overall comment lives here) - `gh api repos/{owner}/{repo}/pulls//comments` — inline review comments tied to file/line - `gh api repos/{owner}/{repo}/issues//comments` — generic PR conversation comments (codecov, deployment bots, humans)