From a4ec9f6942d1f4a31bbf85f455f5ad49ed9c3475 Mon Sep 17 00:00:00 2001 From: core-be Date: Wed, 10 Jun 2026 17:06:43 +0000 Subject: [PATCH] fix(merge-queue): silent skip for non-main base PRs (stop the per-tick comment flood) The base!=main skip posted a comment EVERY conductor tick for EVERY stacked PR (~74), generating ~28k skip comments + measurable operator load on 2026-06-10. Match the sibling draft/opt-out skips: emit a ::notice:: and return, no comment. A no-op observation must not write. --- .gitea/scripts/gitea-merge-queue.py | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/.gitea/scripts/gitea-merge-queue.py b/.gitea/scripts/gitea-merge-queue.py index a26f4f35c..186596f7b 100644 --- a/.gitea/scripts/gitea-merge-queue.py +++ b/.gitea/scripts/gitea-merge-queue.py @@ -1185,7 +1185,12 @@ def _evaluate_candidate( print(f"::notice::PR #{pr_number} is a draft; skipping") return None, ctx if pr.get("base", {}).get("ref") != WATCH_BRANCH: - post_comment(pr_number, f"merge-queue: skipped; base branch is not `{WATCH_BRANCH}`.", dry_run=dry_run) + # SILENT skip (matches the draft/opt-out skips above): a stacked PR + # whose base is not main is re-evaluated EVERY conductor tick; posting + # a comment each time floods the PR (2026-06-10: ~74 stacked PRs -> + # ~28k skip comments + measurable operator load). A no-op observation + # must not write. The PR is auto-considered once its base becomes main. + print(f"::notice::PR #{pr_number} base is not `{WATCH_BRANCH}`; skipping (silent)") return None, ctx if pr.get("head", {}).get("repo_id") != pr.get("base", {}).get("repo_id"): post_comment(pr_number, "merge-queue: skipped; fork PRs are not supported by the serialized queue.", dry_run=dry_run) -- 2.52.0