Ultrareview workflow — before vs. after (PR #1569)

Interactive walkthrough of the three bugs in .github/workflows/ultrareview.yml and the patch. Pick a scenario to see how the workflow behaved before and how it behaves now.

Scenario 1 — PR opened, no ultrareview label most common path

Before #1569

Workflow triggers on opened event
Installs Claude Code (~6s CI)
Calls claude ultrareview "origin/main..HEAD"
CLI rejects in 400ms: "is not a branch in this repo"
Empty review.json → fallback writes {"verdict":"skipped"}
Posts a "verdict: skipped · 0s" PR comment
cost: ~15s CI minutes + 1 spam comment per PR

After #1569

Workflow gate: label.name == 'ultrareview' is false
Job skipped immediately — no checkout, no install, no API
cost: ~0 CI minutes, 0 comments

Net impact

Past API spend on auto-runs$0 CLI rejected args before any API call
Past CI minutes wasted~15s × every PR since #1542 merged
Past comment spam1 useless comment per PR
After #1569opt-in only · real reviews when triggered · no spam when skipped
Trigger todayAdd the ultrareview label to any PR