Verdicts and posting to GitHub

What the verdict means, when Limn posts the review for you, and when it approves.

On this page

Every review ends with a verdict: Approve, Comment or Request changes. In Limn it is a suggestion. On GitHub it becomes your review, posted under your account. This page explains when Limn posts, what it posts, and the rules it follows before it approves or asks for changes for you.

#When Limn posts

How the review startedIs it posted?
You pressed Review onlyNo. You post it yourself with Post to GitHub.
You pressed Review and postYes, when it finishes, under the rules on this page.
Auto reviewYes, unless the workspace says Keep it in Limn.

Merged, closed and draft pull requests are never posted on automatically, nor pull requests opened by bots. By default, automatic reviews post only on your own pull requests and on ones you are asked to review or have reviewed or commented on. A review request to a GitHub team does not count, because Limn does not know which teams you are in.

#What is posted

One review per run. In Settings → AI review, What to post chooses the kinds of comment. By default:

  • Posted: blockers, warnings, questions (on the line they ask about where possible), CI failure reasons in one pull request comment, SonarCloud issues in one pull request comment, and story gaps on the pull request they belong to.
  • Not posted: nits, and work the story did not ask for.

Nothing is posted twice: a comment already on the pull request from any earlier review is left out, and so is anything you ignored. Each posted comment starts with its severity in bold, for example Warning.

#How the verdict is chosen

With Approve or request changes for me on (the default), an automatic post, or a Review and post run, takes its verdict from these rules, in order:

  1. Any blocker still open, new or from an earlier review: Request changes.
  2. Any warning still open, new or earlier: Comment.
  3. The model did not approve (for Claude + Codex, both, unless the workspace is set to relaxed): Comment. A single model that only commented while nothing at all is open counts as an approval.
  4. Open nits or questions that Approve with open findings does not allow: Comment.
  5. Otherwise Approve, unless a gate below holds it.

The gates

  • Your own pull request. GitHub never lets an author approve or request changes, so it posts a comment.
  • Your own standing review. If you approved or requested changes by hand, Limn never overrides you.
  • Impact. Approve by impact can allow approval at High, Medium and Low impact (all ticked by default). An unticked level gets a comment instead. A pull request whose impact Limn could not measure counts as High. Requesting changes is never limited by impact. See Blast radius.
  • GitHub refuses the verdict. The same review goes once more as a plain comment.

Approve with open findings has three choices: Only when nothing is left open, When only nits are left and When only nits and questions are left (the default). Open blockers or warnings always stop an approval. Turn Approve or request changes for me off and every automatic post is a comment.

#Why "Not approved" lines appear

Illustration: When Limn does not approve, the review ends with one line that says why.

When the verdict is not an approval, the review ends with one line that says why. The first match wins:

SituationLine
Blockers or warnings openNot approved: 2 warnings are still open.
Earlier points of the other model, after its half failedNot approved: 2 earlier Codex points are still open.
A model asked for changesNot approved: Codex asked for changes. …
A model only commented, something still openNot approved: Claude did not approve. A nit is still open.
Claude + Codex, neither approvedNot approved: neither Claude nor Codex approved. No findings are open.
Leftovers not allowedNot approved: a question is still open.
A gateNot approved: High impact. (or: your own pull request.)

The reasons about your own pull request, your own standing review, an unreadable GitHub and a refusal show in Limn only. If a review has nothing else to post, the line goes out alone as one short comment, at most once per pull request and commit, and never while you still have an open review request on it.

#When Limn takes its approval back

  • A push alone never makes Limn withdraw anything. The repository's own branch rule decides whether GitHub dismisses an approval after a push.
  • When a later automatic run, or a Review and post run, does not approve, Limn first dismisses its own earlier automatic approval, once, with a message such as "Limn withdrew its approval: 2 warnings found at 951c4aa." This happens even with Keep it in Limn.
  • A Review only run never writes. An approval you gave by hand, or sent with the Post button, is never touched.
  • A withdrawn approval is never lost from view. Where this PR stands and Reviews on this PR both show it as "Approve (withdrawn)".

Your own Limn's earlier Request changes is lifted by your next run that finds no blocker. Lifting a teammate's needs both of you to agree; see Reviewing as a team.

#When a post fails

Every automatic post is recorded before Limn writes to GitHub, and it is never retried, so nothing is posted twice. If a post fails, the AI Review tab says so and the Post button stays, so you can post it yourself.