2fa68b1f23
The external Gitea merge queue only considered PRs that already carried the `merge-queue` label. Agent Gitea tokens lack `write:issue` (labels are issue-scoped), so agents could never self-label a ready PR — the queue stalled waiting on a human to add the label, blocking core-PR autonomy (#2355). Fix: merge-on-criteria, label-optional. The cron now AUTO-DISCOVERS every open same-repo PR and considers any that meets the unchanged merge bar. The `merge-queue` label is now optional metadata, not a gate — this fully removes the write:issue dependency (the cron itself never needs to add a label). SAFETY is preserved as opt-OUT: a PR carrying any opt-out label (`merge-queue-hold`, `do-not-auto-merge`, or `wip`) or marked draft is skipped (never auto-considered, never merged). A human keeps a PR out of autonomous merging by adding one of those labels. `AUTO_DISCOVER=0` restores legacy opt-IN. The merge bar is UNCHANGED: still 2 genuine official approvals on the CURRENT head from {agent-reviewer, agent-researcher, agent-reviewer-cr2}, all branch-protection-required contexts green, mergeable=True (fail-closed on None/False per #2349/#2352), and no open REQUEST_CHANGES. Auto-discovery only changes WHICH PRs are considered, not whether they may merge. - new `do-not-auto-merge` (id 78) + `wip` (id 79) repo labels - `choose_next_candidate_issue` / `list_candidate_issues` for the opt-OUT, draft-skipping selection; legacy `choose_next_queued_issue` retained - defensive opt-out/draft re-check on the live pull payload (stale-listing race) - 15 new §SOP-22 regression tests; existing 26 kept green (41 total) - workflow + runbook updated (AUTO_DISCOVER / OPT_OUT_LABELS documented) Verified live (dry-run): auto-discovery selects unlabeled PR #1519 (the old code never touched it); AUTO_DISCOVER=0 still selects only labeled #2346. Helps #2355 (autonomy expansion). Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>