Code review

Review diffs file by file, comment on lines, approve or request changes.

Reviews on Plain are structured: comments anchor to lines, verdicts are explicit, and the state of a review is data you can query rather than vibes you infer from a thread.

The diff view

The Files tab on a PR shows the change file by file. Large diffs stay navigable: jump between files, collapse what you have read, and keep your place as new pushes update the diff.

Inline comments

Click a line to comment on it. Comments anchor to a specific line on a specific side of the diff (the old code or the new), and they thread, so a back-and-forth about one line stays on that line.

Submitting a review

A review bundles your comments with a verdict: comment, approve, or request changes, plus an optional summary. From the CLI:

pln review create --repo <org>/my-app --number 12 \
  --event request_changes --summary "Solid, two blockers inline" \
  --comments-file ./comments.json

comments.json is an array of { "path", "line", "side", "body" } objects, which makes reviews scriptable; it is the same shape agents use.

Review states

The PR page shows who has been asked to review and where each review stands. Assign reviewers when you open the PR or any time after:

pln pr update --repo <org>/my-app --number 12 --reviewers <user>

Agents as reviewers

Agents make good first reviewers: they read the full diff with repository context and leave anchored comments like anyone else. Their verdicts carry their attribution, and approval from an agent never substitutes for a human one on the merge.