Skip to content
Back to skills

Review Pr

ASecurity

Use when reviewing a pull request — a first read, a re-check after the author pushes, or deciding whether it is ready to merge.

  • 47 stars
  • 0 votes
  • 0 copies
  • 0 views
  • Added November 11, 2026
ai-agentsrustgocode-reviewgitsecurity

Works with

  • cli

Security analysis

A100/100

Scanned November 11, 2026

npx -y skills add enes-alatas/spool --skill review-pr --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Review Pr?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Review Pr
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/enes-alatas-review-pr/badge)](https://www.skillsdirectory.com/skills/enes-alatas-review-pr)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: review-pr
description: >-
  Use when reviewing a pull request — a first read, a re-check after the
  author pushes, or deciding whether it is ready to merge.
metadata:
  author: Spool maintainers
---

# /review-pr — reviewing a pull request

A review answers one question: can this PR land as it stands, and if not,
what exactly must change. This skill is the procedure. The project's rules
(commit shape, what needs a test, a decision record or a doc update, who may
ask for the merge) live in its conventions; read them first and review
against them. This skill states the review policy; it doesn't set it.

## What to look for

Read the code against `code-review-and-quality` (`.claude/skills/`, vendored
verbatim): its five axes, its tests-first order, and its severity labels.
This skill is the procedure around that read: which rounds, which gates,
where the findings go, and when to approve. Where the two disagree, the end
of this skill says which wins.

## Why this exists

Each failure below was a real approval that should not have been. The diff
looked right every time; the defect was in the PR around it, in a file it
never opened, or in a claim nobody ran.

## 1. Gate on CI first

Read every check, not a filtered list: a required check that never ran
looks the same as a green one in a summary. List each row that isn't a pass
and account for it (skipped by design, pending, red). A red check gets a
request for changes before anything else. A failure that looks unrelated is
a flake only once you have shown it: the same tree passed elsewhere, or a
re-run passes, and you say which on the PR.

## 2. Review the PR, not just the diff

Re-read all of this on every round, not just the first:

- **The body.** Is the closing reference the right issue? Closing keywords
  ignore negation ("does not fix #12" closes #12), so read what the platform
  says the PR will close, not just the words. Does the evidence the body
  links (a run, a screenshot, a log) belong to the current head?
- **The issue.** Read its newest comments. A decision taken there, or in a
  comment, may already change what the PR should do. Find each of its
  acceptance scenarios in the PR, with the test or check it names; one
  with neither is a finding.
- **The commits.** One logical change each, a subject that says what changed,
  and no "address review" commits if the project folds feedback into the
  commit it fixes.
- **The deletions.** On a refactor or a consolidation the defect hides in the
  minus lines: a guard, an ordering, an isolation or a dependency that the
  old code had and the new code silently drops. List the properties the
  removed code held and find each one in the new code.

## 3. Verify every claim yourself

An author's "fixed in all three places" or "this can't happen" is a claim.

- **Grep the unchanged tree.** When a PR renames something, flips a policy or
  corrects a premise, search the whole repository for the old name or the
  old sentence. Stale text hides in files the PR never touched, including
  comments that now describe something untrue.
- **Run it** when reading can't settle it. Check the head out in a
  throwaway worktree, never a checkout someone else is using, and ask what
  the run actually exercised: a green run that took an early exit proved
  nothing.
  Never for a `community` PR: its code runs only in CI, after the
  operator approves the run (ADR-0069 item 5). Read its diff instead.
- **Open the screenshots and recordings.** Look at them; don't trust the
  description. If you can't open them, say so on the PR rather than passing
  them.
- **Read the code a claim depends on** before you assert a race, an ordering
  or a library behaviour. If you can't prove it, ask; don't block on it.
- **Cite only what you read.** Every file:line, ID and link in the review
  must come from something you opened in this review.

## 4. Write the review where the author works

- **Anchor each finding to its line** as an inline comment: what is wrong,
  the concrete case that breaks, and the rule or decision it violates.
- **The verdict body is a summary**: what you checked, the findings by
  severity, and one closing word. That word is either "approved at `<sha>`"
  or "changes needed". Never both, and never "approved with some fixes
  please".
- Label each finding's severity as `code-review-and-quality` does
  (**Critical:**, no prefix for required, **Optional:**, **Nit:**,
  **FYI**). The author can decline an optional one or a nit on the PR or
  fold it in, and either way you have the last word.
- Name the head SHA you reviewed. A new push voids the approval, and the
  re-check starts from the interdiff since that SHA.

## 5. Approve only what can land

Approve without reservation only when all of these hold:

- CI is green at the head you reviewed.
- The head can merge: on current main, or queued so it will be tested there.
  Check this from the platform's merge state, not by reading the base SHA.
- No operator decision is pending, and no required security pass is missing.
- Docs, tests and any decision record the change needs are in the same PR.

When everything holds except a decision only the operator can make, approve
it pending: say the code is done and name the open question. Don't send the
merge ask until the question is answered.

## 6. Send the merge ask with the approval

The reviewer asks for the merge, in the same message as the final approval,
with the PR link. The author never asks. Keep the chat message short, with
the substance on the PR. If the PR is still unmerged hours later, send one
short nudge with the link.

## Re-checking after a push

1. Diff the new head against the SHA you approved, not against main.
2. Read only that interdiff, plus the body and the thread again (step 2).
3. Re-run step 1, because the new head's CI is a new run.
4. Re-approve at the new SHA, or say what is still open.

## Where this differs from code-review-and-quality

- **Security has its own reviewer.** Note what you see on the security
  axis, but a PR that changes the security posture waits for the security
  reviewer's pass at the current head, and theirs is the verdict on it.
  Read their findings before you approve.
- **Size alone doesn't block.** Upstream says to split a change near 1000
  changed lines. Here a PR closes one scoped issue, and the commits are the
  unit of review: ask for a split when a commit mixes changes, or when the
  PR covers more than its issue, not for line count. This overrides only
  the changed-lines threshold: upstream's file-size signal still holds, so
  a file nearing 1000 lines is decomposed before it grows.
- **Approval has two halves.** Upstream approves a change that improves
  the code's health. That is the first half; steps 1 and 5 above are the
  second. Both must hold for the approval that carries the merge ask; an
  approval pending an operator decision says which half is still open.
- **Folding beats filing.** Upstream asks for a bug filed for cleanup the
  change can't hold. Do that only for work outside the PR's issue; a fix
  inside it folds into the commit it belongs to.

## In this repository

These rules from `docs/CONVENTIONS.md` apply; this section is what to strip
before publishing the skill elsewhere.

- Approve by a `--comment` review signed `— Name · Role`. The loops share
  one GitHub identity, so `--approve` fails, and no `@name` goes in a
  GitHub body.
- An approved PR gets the `queue` label, and the merge ask is "turn on
  auto-merge". Any push takes it out of the queue.
- A live `Operator decision pending:` line blocks the merge ask, and so does
  a `needs-security-review` label until the security reviewer has commented
  at the head.
- A `feat` touching only one of `internal/` and `web/` names its other half;
  engine behaviour needs a tier-2 test in `itest/`; prompts live only in
  `internal/loop/prompt.go`; an accepted ADR changes only per `/amend-adr`.

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

View all in ai-agents →

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.