GitHub: the Otto Review check
Whenever Otto starts a fresh review of a PR’s head commit, it adds an Otto Review check to that commit. A fresh review happens when a PR is opened, a commit is pushed, a review is requested, or someone comments/otto re-review. Replies to comments don’t touch the check.
The check says whether Otto is still reviewing. It never reflects Otto’s verdict, which lives in the review itself.
GitHub treats success and neutral as passing, so a finished or failed Otto review never blocks a merge. Comment
/otto re-review to retry after a neutral result.
Require it
In the repository’s branch protection rule or ruleset, under Require status checks to pass, addOtto Review.
The Otto Approval check
GitHub doesn’t count approvals from apps like Otto toward a branch’s required reviews, and rulesets can’t express “one human approval or Otto’s approval”. The Otto Approval check puts that OR into a single check, so a repository can require the check instead of a human review. Turn it on in Settings → Reviews → Otto Approval check (owners and admins). It’s off by default and applies only to GitHub pull requests.- Either approval is enough. A human approval passes the check even if Otto requested changes on the same commit.
- Approvals are per commit. Only approvals of the PR’s latest commit count. A reviewer’s later request for changes, or a dismissed review, removes their approval. The PR author and bots never count.
- Otto’s latest decisive verdict counts. If Otto approves in a follow-up reply (for example, after you fix or refute its findings), the check turns green; a later request for changes turns it red. A comment-only reply doesn’t change it.
- It fails closed. If Otto can’t review a commit, the check fails rather than passing, so an outage never lets a PR merge unreviewed. Push a fix, comment
/otto re-review, or get a maintainer’s approval. - Your
otto.ymlapproval policy applies. Withapprove_up_to: none, Otto never approves, so a human approval is always needed.
Require it
In the repository’s ruleset or branch protection rule:- Set Required approvals to
0. - Under Require status checks to pass, add
Otto Approvaland select Otto’s GitHub App as the expected source.
What changes when it’s on
- Otto reviews every push to an open, non-draft PR in the repositories it covers, not only PRs it has already commented on, so every commit gets a check. This uses more review credits.
- Pushes from bots (other than allowlisted ones such as Dependabot and Renovate) aren’t reviewed. Their commits get a failing check that a maintainer approval clears.
- Repositories Otto doesn’t review, or every repository while PR reviews are paused, get a failing check that a maintainer approval clears.
- PRs that were already open get the check on their next push, re-review, or human review.
Azure Repos: the otto/review status
Whenever Otto starts a fresh review, it posts anotto/review status on the PR iteration it’s reviewing. A fresh review happens when a PR is created, when commits are pushed (if your reviewer listens to PR updates), or when someone comments /otto review. Replies to comments don’t touch the status.
The status says whether Otto is still reviewing. It never reflects Otto’s verdict, which Otto records as its reviewer vote.
A required status policy treats “not applicable” as not applying to the PR, so a finished or failed Otto review never blocks completion. Comment
/otto review to retry.
