# Pr Review

> SECONDARY review-it mode — the PR-review PROCESS wrapper. Produces severity-tiered (BLOCKER/MAJOR/MINOR/NIT), evidence-cited (file:line) findings with a blocking-vs-advisory split, loading the consumer project's checklist from .claude/review-config.md (works with zero config via a generic checklist). It does not duplicate /code-review — it may invoke code-review-style passes as executors and wraps them in process: scope, checklist, severity, evidence, verdict. Invoked by /review-it when the target is a PR ref/branch/diff, or standalone when the user says "review this PR", "review the diff", "pre-merge review".

- Skill: `devotts/pr-review` (Agent Skill)
- Install (CLI): `npx skillmds@latest add devotts/pr-review`
- Raw SKILL.md: https://api.skillmd.com/api/skills/devotts/pr-review/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Coding & Dev Tools
- License: MIT
- Author: devotts (https://skillmd.com/u/devotts)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/devotts/pr-review

---


# /pr-review — the review process wrapper

You are a *process*, not another linter: scope the diff, load the project's checklist, tier every finding by severity with a `file:line` citation, split blocking from advisory, and emit a verdict. Finding bugs line-by-line is the executor's job — `/code-review` (or an equivalent reviewer pass) runs under you; you own what it runs against and how its output becomes a decision (FR3.3, CB-3).

Gates applied here: **R6 narration≠evidence** (executor findings are re-read at the cited lines before they tier), **R9 environment-identity** (review the PR's head, not a stale local), **R11 oracle-provenance** (the PR description/linked issue is the AUTHORED oracle for "does this do what it claims") — specs in `references/gate-catalog.md`.

## Step 1 — Scope (FR3.1)

- Resolve the diff surface: base…head, files touched, tests touched, migrations, config/CI edits. Review `origin/<head>` — never a possibly-stale local checkout (R9).
- Read the PR description + linked issue: that text is the authored oracle for intent (R11) — a PR that does something other than it claims is a finding even if the code is clean.

## Step 2 — Load the checklist config (FR3.2)

- Look for **`.claude/review-config.md`** in the consumer repo — the convention for project-scoped review checklists (first instance: Engine-Core's absorbed `review-pr` checklist).
- No config ⇒ run with the generic checklist: security (secrets, injection, authz, input validation) · correctness (edge cases, error handling) · tests (new surface covered, existing green, no self-grading mocks per `references/authoring-standards.md`) · migrations/data safety (CB-8 ladder) · naming/dead code · docs/breaking-change notes. Zero config is never a reason to refuse.
- Config sections marked blocking-vs-advisory are honored; unmarked sections default to: security + data-safety = blocking, style/docs = advisory.

## Step 3 — Execute review passes

Run the reviewer executor(s) over the scoped diff against the loaded checklist — invoke `/code-review` where available rather than re-implementing line-review logic. Executor findings are narration until you re-read the cited lines yourself (R6): confirm the code at `file:line` actually shows what the finding claims before it tiers.

## Step 4 — Tier + cite (FR3.1)

Every surviving finding gets exactly:
- **Severity:** `BLOCKER` (must fix before merge: security holes, data loss, broken contract) · `MAJOR` (should fix: correctness risk, missing tests on new surface) · `MINOR` (worth fixing: smells, small gaps) · `NIT` (style/preference).
- **Evidence:** a `file:line` citation + one-line quote of the offending code. A finding without a citation does not ship.
- **Checklist ref:** which config/generic item it violates.

## Step 5 — Verdict

- **Blocking set** = BLOCKERs + any MAJOR from a config-marked blocking section. Blocking set empty ⇒ `APPROVE (advisories attached)`; else ⇒ `REQUEST-CHANGES` listing exactly what gates the merge.
- Advisories never gate; they ship as a separate list.
- Report per `references/report-format.md` (findings replace verdict rows; preflight, ledger and R10 debrief stay).

## What NOT to do

- Do not duplicate `/code-review` logic — invoke it as the executor (FR3.3, CB-3).
- Do not tier a finding you have not re-read at the cited line (R6).
- Do not emit findings without `file:line` evidence.
- Do not let advisories block, or blockers hide as advisories, to make the verdict friendlier.
- Do not review a stale local checkout (R9).

---
_Authored by [DevOtts](https://github.com/DevOtts)._

