ci: rescue iOS kit runs from main pool watcher

Merged
TE
7d ago
+73-6

The main-branch rescue rejects iOS kit runs, leaving the kit picker unable to recover a stalled owned-Mac job. Recognize kit pull-request, push, and dispatch runs and account for their owned-pool markers in the queue janitor. Kit watches cap the configured stall budget at 180 seconds.

For an open kit PR, the existing guarded failover now applies: when the picker has finished and the test is the only unfinished job on a pool that runs nothing, cancel the unstarted job and rerun that job alone. Preserve finished job results and refuse cancellation when a job is running or assigned. Other iOS E2E PRs keep their existing exclusion.

This is the main-branch prerequisite for #28145. No capture: CI workflow and picker only.

Validation: the new end-to-end regression fails before the open-head fix and passes after it. Focused tests cover the budget with queue rounds, preserving running/assigned tests, unchanged E2E exclusions, event recognition, and fork rejection. The full focused Linux rescue, janitor, and source-coverage suites run at this head: https://github.com/manaflow-ai/cmux/actions/runs/41096022154.

Risk: expands rescue eligibility for one workflow; existing bounded watches, idle-pool checks, head checks, and cancellation guards remain in force. No new timer or polling process.

Agent session: agent session