> ## Documentation Index
> Fetch the complete documentation index at: https://docs.fullotto.app/llms.txt
> Use this file to discover all available pages before exploring further.

# Approval policy

> Control the most severe finding Otto may still approve a pull request with.

```yaml otto.yml theme={null}
version: 1
reviews:
  approval:
    approve_up_to: P2
```

| Value | Otto approves when the review has |
| - | - |
| `P3` | No findings, or only P3 nitpicks. This is the default. |
| `P2` | No P0 or P1 findings. P2 and P3 findings are posted as non-blocking comments with the approval. |
| `none` | Never. Otto comments or requests changes instead, and a human approves. |

See [Severity](/reviews/how-reviews-work#severity) for what each level means.

## How it's enforced

Otto enforces the policy when it posts the review, not only in its instructions. If a review would approve with a finding above the limit, it's posted as a comment instead. A finding without a severity counts as above the limit.

## Choosing a value

* **`P3`** (default) suits most repositories: Otto approves clean PRs and blocks on real issues.
* **`P2`** suits fast-moving or low-risk repositories where you'd rather fix medium issues in a follow-up than block the PR.
* **`none`** suits repositories where every merge needs a human sign-off, such as infrastructure or compliance-sensitive code. Otto still reviews and requests changes for serious findings.

<Note>
  With the [Otto Approval check](/setup/merge-gates#the-otto-approval-check)
  required, `approve_up_to: none` means every PR needs a human approval to
  merge.
</Note>


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.