full-review · git:20260901.dca22e5 · 2026-09-01 · sha256 1d8030933df2cd08

full-review git:20260901.dca22e5A

Immutable. This exact content is served forever at /api/v1/blob/1d8030933df2cd08.

---
name: full-review
description: Run every review skill at once — build-check, then design-check, code-audit, security-audit, a11y-audit and perf-audit fanned out across parallel agents — and merge them into one deduplicated, severity-ranked report. Use when asked for a full/complete review, to review everything before shipping or merging, or to run all the checks.
---

# Full review

Orchestrate all six review skills and merge their output into one report the user
can act on top-down. You are the coordinator: you spawn the agents, then reconcile
what they return. You do not perform the reviews yourself.

## 1. Resolve scope once, up front

Determine the scope per `.claude/review/CONVENTIONS.md` **before** spawning
anything, and pass the identical scope string to every agent. Agents that each
resolve their own scope will drift apart, and their findings then cannot be
compared or deduplicated.

Detect the stack once here too (per `CONVENTIONS.md` §1) and pass it down with
the scope. Five agents independently re-deriving the stack is wasted work, and in
a monorepo they can legitimately land on different answers — which silently
produces five reviews of different things.

Also check now whether a design document exists (`design.md`, `docs/design.md`,
`DESIGN.md`, or the project's own spec convention). If none does, **do not spawn
the design-check agent** — it would halt immediately by design. Note its absence
in the final report instead.

Likewise, if the UI lanes do not apply — a library, a CLI, a backend service with
no interface — skip `a11y-audit` and say so rather than spawning an agent to
report that there is no UI.

## 2. Build check first, on its own

Run `build-check` yourself, synchronously, before the fan-out. It is fast,
objective, and decisive:

- **If it FAILS on a compile or type error:** stop. Report the failure and ask
  whether to fix it first or review anyway. Reasoning-based review of code that
  does not compile is largely wasted — the file is about to change, and half the
  findings will evaporate with the fix.
- **If it fails only on lint:** carry on with the fan-out; fold the lint findings
  into the merged report.
- **If it passes:** carry on, and pass any size/timing output it produced along to
  the perf agent so that lane starts from a measurement instead of a guess.

## 3. Fan out the reasoning reviews

Spawn one `general-purpose` agent per remaining skill, **all in a single message**
so they run concurrently:

| Agent | Skill | Lane |
|---|---|---|
| design | `design-check` | conformance to `design.md` (skip if no spec) |
| code | `code-audit` | correctness, concurrency, types, error handling, contracts |
| security | `security-audit` | exploitable vulnerabilities |
| a11y | `a11y-audit` | WCAG 2.2 AA (skip if there is no UI) |
| perf | `perf-audit` | payload size, data access, caching, compute cost |

Give each agent this prompt shape:

> Invoke the `<name>` skill via the Skill tool and complete the review it
> describes. Scope: `<the exact scope string resolved in step 1>`.
> Stack (already detected, do not re-derive): `<the stack string from step 1>`.
> Follow `.claude/review/CONVENTIONS.md` exactly — especially the false-positive
> gate and the installed-version rule.
> Stay strictly in your lane: `<lane>`. If you notice something outside it, note
> it in one line under "Cross-lane observations" and do not investigate — another
> agent owns it.
> Write your full report to `.claude/reviews/<name>-<stamp>.md` as the conventions
> specify. Return **only**: the verdict, a one-line summary per finding with
> severity and `file:line`, and the report path. Do not return the full report
> text.

The last instruction is what keeps this affordable: full reports live on disk, and
you read the files you need rather than absorbing five reviews through agent
return values.

Agents run in the background and notify you on completion. Wait for all of them.
Do not run any review yourself in the meantime, and never predict or fabricate a
pending agent's findings — if the user asks before results land, say it is still
running.

If an agent fails or returns nothing, say so explicitly in the merged report and
mark that lane `NOT COVERED`. Never let a silent failure read as a clean pass.

## 4. Merge

Read the report files, then reconcile:

**Deduplicate.** The same `file:line` will surface in more than one report — that
is expected, and the lanes overlap by design. Keep the version from the skill that
owns the issue (an unlabeled button is a11y's, not code-audit's) and merge the
others' detail into it. Two lanes independently flagging one line is a **confidence
signal**: mark it corroborated and raise it, rather than listing it twice.

**Re-rank globally.** Each agent ranked within its own lane, so a "Critical" from
perf and a "Critical" from security are not the same thing. Rank the combined set
by real-world consequence: exploitable > data loss > broken for all users >
broken for some users > degraded > maintainability. Security and correctness
issues generally outrank equal-severity findings from other lanes.

**Reconcile conflicts.** Lanes can legitimately disagree — most often
`design-check` reporting the code as conformant while `a11y-audit` reports the
same element as inaccessible, because the spec itself mandated something that
fails WCAG. Do not suppress either. Report both and name the conflict: the code
matches the design, and the design has an accessibility defect. That conflict is
one of the more valuable things this review produces, and it only exists because
the lanes are separate.

**Do not re-litigate.** You did not read the code; the agents did. Trust their
verified findings. The exception is a finding that contradicts another agent's
evidence — read that file yourself and adjudicate.

## 5. Report

Write the merged report to `.claude/reviews/full-review-<stamp>.md` and give the
user a short summary in chat with the top items and the path.

```markdown
# Full review — <scope>

**Verdict:** PASS | PASS WITH NOTES | FAIL
**Stack:** <the stack detected in step 1>
**Ran:** <date> · Scope: <scope>

| Lane | Verdict | C | H | M | L | Report |
|------|---------|---|---|---|---|--------|
| Build | ✅ PASS | | | | | `build-check-<stamp>.md` |
| Design | ⏭️ SKIPPED — no `design.md` | | | | | — |
| Code | ❌ FAIL | 0 | 2 | 3 | 1 | `code-audit-<stamp>.md` |
| Security | ✅ PASS | 0 | 0 | 0 | 2 | `security-audit-<stamp>.md` |
| A11y | ❌ FAIL | 1 | 1 | 0 | 4 | `a11y-audit-<stamp>.md` |
| Perf | ⚠️ NOTES | 0 | 0 | 2 | 1 | `perf-audit-<stamp>.md` |

## Fix before merge
1. **[CRITICAL] <claim>** — `<path>:12` (a11y) — <one line> — <fix>
2. **[HIGH] <claim>** — `<path>:44` (code, corroborated by security) — <one line>

## Worth fixing soon
...

## Notes and polish
<collapsed one-liners>

## Conflicts and judgment calls
- <where lanes disagreed and what you concluded>

## Coverage gaps
- <lanes not run, files not reached, anything needing the app running>
```

The **Fix before merge** list is the point of the whole exercise — keep it to
things that genuinely block, ordered so the top item is the one to do first. If
that list is empty, say so plainly at the top; do not bury a clean result under
process.

## Cost

This spawns up to five agents that each read a good deal of code. For a small
change, `code-audit` alone is usually the right call, and a targeted single skill
beats the full sweep. Use this before a merge, a release, or on a branch that has
accumulated real work.