Draft PRs (opened as draft, or converted to draft after being opened) waste CI/review-pipeline resources in three concrete ways:
.github/workflows/selfhost.yml's build-boot job (Postgres + 2 Docker builds, 20min timeout) has no draft guard, unlike ci.yml's heaviest jobs which already check github.event.pull_request.draft != true.
.github/workflows/ui-preview.yml's build job (full UI build) has no draft guard either.
- Converting an already-open PR to draft (
converted_to_draft) doesn't cancel any in-flight CI runs — nothing reacts to that webhook action today.
- The engine's own AI-review call (
skip_drafts) is opt-in per repo; flipping the default to on (repos can still opt back in with an explicit skip_drafts: false) stops wasted AI-review spend on drafts fleet-wide.
Note: gate evaluation and check-run creation must keep running on draft PRs regardless of skip_drafts — that's a deliberate anti-gaming invariant (#3698, processors.ts's autoReviewSkipReason gating), not part of this fix's scope.
Draft PRs (opened as draft, or converted to draft after being opened) waste CI/review-pipeline resources in three concrete ways:
.github/workflows/selfhost.yml'sbuild-bootjob (Postgres + 2 Docker builds, 20min timeout) has no draft guard, unlikeci.yml's heaviest jobs which already checkgithub.event.pull_request.draft != true..github/workflows/ui-preview.yml'sbuildjob (full UI build) has no draft guard either.converted_to_draft) doesn't cancel any in-flight CI runs — nothing reacts to that webhook action today.skip_drafts) is opt-in per repo; flipping the default to on (repos can still opt back in with an explicitskip_drafts: false) stops wasted AI-review spend on drafts fleet-wide.Note: gate evaluation and check-run creation must keep running on draft PRs regardless of
skip_drafts— that's a deliberate anti-gaming invariant (#3698, processors.ts's autoReviewSkipReason gating), not part of this fix's scope.