| name | code-review |
| description | Review a diff or PR against my conventions — Result not throw, vertical slices, AItError codes, node:test, Biome, entity normalisation, a11y. Findings are triaged by severity (correctness → conventions → polish), not piled in a flat list. Use when reviewing a diff, reviewing a PR before merge, self-reviewing before opening a PR, or when user says "review this", "review the diff", "code review", or invokes `/code-review`. |
Code review
If it doesn't hold up in production, it doesn't make the cut.
Flat review piles — twelve nits next to one architectural break, all the same bullet weight — waste my time. Worse, agents review by aesthetics: rename suggestions, comment polish, "consider extracting" — while a throw in business logic or a cross-feature internal import sails through.
This skill is a review pass anchored on my other skills. It triages findings by severity, grounds them in CONTEXT.md and docs/adr/, and refuses to flag style when correctness is broken.
This is a review skill, not a teaching skill. It assumes you've read the rest of my engineering skills; it tells you when to invoke which.
When this skill is active
You are about to:
- Review an open PR (mine or someone else's)
- Self-review a diff before opening a PR
- Audit a recent change (
git diff <base>..HEAD, gh pr diff, staged changes)
- Respond to "review this", "review the diff", "what do you think of this change?"
This is not the skill for whole-repo architectural review — that's improve-codebase-arch. This is for a bounded set of changes.
Phase 1 — Ground yourself
Don't review the diff in isolation. Spend two minutes on context first.
Phase 2 — Triage by severity
Findings land in one of three buckets. Report them in this order, never flat.
1. Correctness (must-fix)
The change is wrong, will break, or will silently corrupt state.
2. Convention drift (should-fix, anchored on my skills)
The change works but breaks a house rule. Each finding cites the skill it violates.
3. Polish (nits, optional)
Style, naming, redundant comments, dead code, doc gaps. Group them under a single "nits" heading. Never let polish drown out the first two buckets.
If the change is correct and convention-clean, polish is the whole review — and a short one. If correctness or conventions are broken, polish waits for the follow-up.
Phase 3 — Report
Output shape:
## Review
**Verdict:** approve / request changes / blocked on decision
### Correctness
- [file:line] One sentence on what's wrong and why it matters.
### Convention drift
- [file:line] What rule, which skill. `result-not-throw`: business logic must return `Result<T, E>`.
### Nits
- [file:line] One-liner. Group them tight.
### Questions
- Anything you couldn't answer from the diff alone. One question per ambiguity.
Rules:
- Cite line numbers so I can navigate.
file_path:line_number.
- Cite the skill for every convention finding. Don't restate the rule — link it.
- No essays. One sentence per finding. If a finding needs a paragraph, it's an ADR, not a review comment.
- Verdict goes first. I want the headline before the body.
Anti-patterns
- Flat bullet list with no severity. Twelve nits next to one architectural break, all weighted equally. Triage or don't bother.
- Reviewing by aesthetics. "Consider renaming," "this could be more idiomatic," "maybe extract a helper." If there's no failure mode, it's not a finding.
- Restating what the code does. I can read the diff. Tell me what's wrong, not what's there.
- Flagging style when correctness is broken. Lead with the throw in the service layer, not the import order.
- Inventing house rules. Every convention finding cites an existing skill or ADR. If you can't cite, it's a personal preference and belongs in nits — or nowhere.
- Reviewing the diff without reading the PR description. Re-asking what the description answered is noise.
- Auto-suggesting a fix for a judgment call. Surface the tradeoff, let me pick. Auto-fix the deterministic stuff (typos, missing
await).
- Bundling unrelated fixes into the review. A11y debt found during a backend review goes on the follow-up list, not into the PR.
When you find a structural problem mid-review
Stop the review. Surface it as "blocked on decision" with a verdict at the top, and call out which skill or ADR it conflicts with. Don't keep listing nits underneath — the design decision swallows them. If it warrants a new ADR, say so.
Cross-references