Requesting Code Review: Catch Issues Before They Cascade

Introduction: The Review You Skip Is the Bug You Ship

Every engineer has lived this scene: you finish a feature, squint at the diff yourself, shrug “looks fine,” merge — and three commits later the flaw you waved past detonates something you didn’t touch. The Superpowers requesting code review skill exists to make that scene rarer, not by writing better code, but by formalizing the moment you ask someone — or something — else to look at your work while it is still cheap to fix.

Under Superpowers, that “someone else” is usually a dispatched reviewer subagent with one job: evaluate the work product against the requirements and report findings. The skill defines what goes into the review request, when to make one, and what to do with the answer. It is the review side of a discipline that runs through the whole series: verify early, verify often, and never let one agent grade its own homework.

What the Requesting Code Review Skill Actually Does

The skill is one paragraph of principle wrapped in a working procedure. The principle: review early, review often. The procedure: dispatch a code reviewer subagent with precisely crafted context — never your session’s history — get structured findings back, and act on them by severity.

The two halves matter equally. The dispatch catches issues before they cascade into downstream work. The context discipline is what makes the review good. A reviewer handed your entire conversation inherits your blind spots, your sunk-cost attachment to the approach, and a context window full of everything except a fresh pair of eyes. A reviewer handed a tight brief — what you built, what it should do, and exactly which commits changed — evaluates the work product, not your thought process. That distinction is the whole design.

The skill lives in software-development/superpowers-requesting-code-review, and its SKILL.md states the core principle up front: the reviewer gets precisely crafted context for evaluation — never your session’s history.

When to Request Review

The skill splits review triggers into mandatory and optional-but-valuable, and the split is worth adopting verbatim:

TriggerStatus
After each task in subagent-driven developmentMandatory
After completing a major featureMandatory
Before merge to mainMandatory
Each complex change or risky refactorStrongly recommended
After fixing a complex bugOptional but valuable
When stuck (fresh perspective)Optional but valuable
Before refactoring (baseline check)Optional but valuable

Notice the cadence: this is not a pre-release gate. In the subagent-driven-development workflow, every single task gets reviewed the moment it completes — the unit of review is the task, not the release. The economics justify the frequency: a finding on task two costs a ten-minute fix; the same finding discovered after task eight is a rewrite, because tasks three through seven were quietly built on top of it. Review is cheap early and ruinous late, which is exactly the curve you want to be exploiting.

The Anatomy of a Review Request

This is where the skill earns its keep. A review request is not “take a look.” It is a structured brief built from four placeholders in a reviewer template, and behind them sit three things every good request includes: changes made, tests run, and edge cases considered.

1. Changes made — pinned to SHAs. The reviewer needs to know exactly what to look at, expressed in the only language git speaks:

BASE_SHA=$(git rev-parse HEAD~1)   # or: git merge-base origin/main HEAD
HEAD_SHA=$(git rev-parse HEAD)

Two SHAs make the review scope mathematical: git diff BASE_SHA..HEAD_SHA is the work, nothing more, nothing less. “The recent changes” is a scavenger hunt; a commit range is a spec.

2. What it should do — the requirements, not the narrative. The template’s {PLAN_OR_REQUIREMENTS} slot takes the acceptance criteria — a task from the plan file, a ticket, a spec section. This is what the reviewer grades against. Omit it and you get an opinion; include it and you get a verdict.

3. Evidence — tests run and edge cases considered. The request states which tests were executed and what they covered, and names the edge cases you thought about (and the ones you didn’t). This is the part most humans skip and most reviewers prize: it lets the reviewer spend effort where your confidence ran out instead of rediscovering your happy path.

The dispatch then fills the template and hands it to a general-purpose subagent:

DESCRIPTION:            What you built, in two sentences
PLAN_OR_REQUIREMENTS:   What it should do (plan task, spec, ticket)
BASE_SHA:               Starting commit
HEAD_SHA:               Ending commit

Only the findings come back to the coordinator. The diff, the test output, and the evaluation all live in the reviewer’s context — which is precisely the point, as the skill’s table of common rationalizations spells out:

ExcuseReality
“I’ll just review the diff myself instead of dispatching a reviewer.”You’re the coordinator — burning your context window on the diff costs you the context you need to keep driving. Dispatch the reviewer: the diff and the evaluation live in its context, and only the findings come back.
“The reviewer needs my whole session history to understand the change.”Hand it precisely crafted context, never your history. That keeps the reviewer on the work product, not your thought process.

Acting on the Answer

A review request without a triage contract is decoration. The skill prescribes severity-banded responses: Critical issues get fixed immediately; Important issues get fixed before proceeding to the next task; Minor issues get noted for later. And one rule cuts both ways: push back if the reviewer is wrong — with technical reasoning, code, or tests that prove it, never with annoyance. Arguing with valid feedback is a red flag; so is proceeding with unfixed Important issues because the schedule is tight.

Real Example: Reviewing the Article Series Plan

The series you’re reading is itself a plan executed under Superpowers: docs/superpowers/plans/2026-11-06-article-series.md defines nineteen self-contained HTML articles built from a shared template. That plan ships with a “Review Focus” section — per-article requirements the reviewer grades against: 1,200–2,000 words for deep-dives, a clear “what this skill does / when to use it / real example” structure, a code or command example, SEO head enrichment (meta description, og:image), internal links to related-skill articles, and LF newlines verified at the byte level.

Here is what a requesting-code-review pass looks like on that work, following the skill’s own transcript pattern. Instead of the writing agent re-reading its own articles — reviewing the diff inline would torch the coordinator’s context — it pins the range and dispatches:

BASE_SHA=$(git log --oneline | grep "Task 1" | head -1 | cut -d' ' -f1)
HEAD_SHA=$(git rev-parse HEAD)

DESCRIPTION:            Four deep-dive articles written from the
                        shared template (brainstorming, writing-plans,
                        executing-plans, parallel-agents)
PLAN_OR_REQUIREMENTS:   Review Focus section of
                        docs/superpowers/plans/2026-11-06-article-series.md
BASE_SHA:               a7981ec
HEAD_SHA:               3df7661

The skill’s canonical example has exactly this shape — a review of “Added verifyIndex() and repairIndex() with 4 issue types” against “Task 2 from the deployment plan,” returning: strengths (clean architecture, real tests), one Important issue (missing progress indicators), one Minor (magic number 100), assessment “ready to proceed.” The Important issue gets fixed before task three starts; the magic number goes on the later list. Same loop, same discipline, whether the artifact is an index-repair module or an HTML article: the reviewer checks word count against the constraint, greps the head for the meta description, confirms internal links resolve, and counts carriage returns to catch the one Windows failure mode that would silently break deployment. Findings come back banded by severity; the coordinator fixes and moves on with its context intact.

What Makes a Review Request Good

Three adjectives, and each kills a specific failure mode:

Related Deep Dives in the Series

The requesting-code-review skill is one half of a handshake:

Frequently Asked Questions

Q: Isn’t reviewing after every task wasteful?
It’s the cheapest review you will ever buy. The reviewer subagent runs while the coordinator holds its context, findings on a two-commit diff take minutes to fix, and the alternative — one giant pre-merge review — is the format that reliably finds nothing because nobody can hold 900 files in working memory.

Q: What if the reviewer flags something I know is wrong?
Push back, technically. Show the code or tests that disprove the finding, or ask the reviewer to clarify what it saw. The skill lists “argue with valid technical feedback” as a red flag — the distinction is valid: disagreement with evidence is a review conversation, disagreement with mood is a process failure.

Q: Does this work for non-code artifacts?
Completely. The example above reviewed HTML articles against a plan’s Review Focus section. The method — pinned scope, explicit criteria, evidence attached, severity-banded findings — is artifact-agnostic, which is why the skill also tells you to request review when you’re stuck: a fresh evaluator of prose has the same value as one of Python.

Key Takeaways

Next in this series: receiving code review — what to do when the findings come back and you disagree. Browse the full Skills We Use series index for all nineteen articles.