6be989dc feat(ai-review): run auto review as a cron sweep
A fork's `pull_request` event gets no repo secrets, so the auto review
job could never start on the PRs that most need it — it failed with
"missing AI_REVIEW_TOKEN or XAI_API_KEY" before reaching the agent.
Replace the `pull_request` trigger with a 30-minute schedule. The sweep
lists open PRs, drops the ones the existing auto-mode skip rules reject
(draft, bot author, roster maintainer, machine-user head commit, head
SHA already reviewed), and reviews up to `AI_REVIEW_SWEEP_LIMIT` of the
rest, most recently updated first. Each PR head goes into its own
worktree, reviewed and removed. One failed review does not stop the
others; the run still exits non-zero.
`workflow_dispatch` and the `/ai-review` comment still work unchanged.
The `ai-review` label trigger is gone — it rode on `pull_request`, so it
was already dead for forks and duplicated the comment command.
Closes #1325
Claude-Session: https://claude.ai/code/session_019iwZLMpwXbUa4JWikfqQgn 6be989dc feat(ai-review): run auto review as a cron sweep
A fork's `pull_request` event gets no repo secrets, so the auto review
job could never start on the PRs that most need it — it failed with
"missing AI_REVIEW_TOKEN or XAI_API_KEY" before reaching the agent.
Replace the `pull_request` trigger with a 30-minute schedule. The sweep
lists open PRs, drops the ones the existing auto-mode skip rules reject
(draft, bot author, roster maintainer, machine-user head commit, head
SHA already reviewed), and reviews up to `AI_REVIEW_SWEEP_LIMIT` of the
rest, most recently updated first. Each PR head goes into its own
worktree, reviewed and removed. One failed review does not stop the
others; the run still exits non-zero.
`workflow_dispatch` and the `/ai-review` comment still work unchanged.
The `ai-review` label trigger is gone — it rode on `pull_request`, so it
was already dead for forks and duplicated the comment command.
Closes #1325
Claude-Session: https://claude.ai/code/session_019iwZLMpwXbUa4JWikfqQgn