Review Change
Quality gate: run every applicable review and skip the rest, then synthesize and
classify one report. Findings only; never edit or refactor.
Turn contract
Load and verify the canonical Turn contract (11 boxes) before ending every turn. Skill-specific additions (receipt closeout, isolation rule, applicability) live here and in REVIEW_PROCESS.md. Missing reference → STOP.
For a final PR review, the turn is incomplete until this additional box passes:
text
✓ Decision: REVIEW-PASS + PR exists → `gh pr comment <N> --body-file <path>` RUN;
then `gh pr view <N> --json comments` RUN and the newest exact-HEAD
`review-change:pass` marker is confirmed before printing `→ Next:`
The receipt closeout is a precondition of the report, not a follow-up: do not
print the fixed report block until the comment is current. A clean report
without that current receipt must not recommend
.
For
or
, list every open finding ID in the closing
recommendation, joined with
; the review must never hand off only the first
finding.
Consume the internal
verification contract;
the reviewer checks the same frozen
blob as the executor before
mapping candidate evidence.
When to use
- Mandatory before every merge. Review in a context that did not implement
the change; if it did, stop and hand off to a fresh one. may
also recommend optional checkpoints at layer boundary, accumulation or
sensitivity ().
- Use when you need applicable reviews without irrelevant passes.
Scope
Default target is the current change (branch diff vs the default branch);
accept a path/glob to widen or narrow. State the scope at the top of the report.
Step 0 — Discover the project & the change (always first)
Per Workflow conventions + documentation map, decide axes from:
- Project nature: UI (), web/mobile/CLI/library/backend,
and optional recorded platform skills (extras only).
- Footprint: what the diff touches (UI, API, infra, domain). An axis applies
only when both project and footprint support it.
Applicability matrix (default; the project's docs refine it)
Every axis maps to a skill of the workflow's
own internal review pack
(
— installed with the workflow, so none can be missing):
| Axis — internal pack skill | Web | Mobile | Console/CLI | Lib/SDK | Backend/Infra |
|---|
| (correctness, simplification, dead code, duplication, arch) | ✓ | ✓ | ✓ | ✓ | ✓ |
| ✓ | ✓ | ✓ | ✓ | ✓ |
| (run it, confirm real behavior, tests) | ✓ | ✓ | ✓ | ✓ | ✓ |
| (UI/UX) | ✓ | ✓ | TUI only | ✗ | ✗ |
| ✓ | ✓ | rare | ✗ | ✗ |
| (voice/copy) | ✓ | ✓ | output text | ✗ | ✗ |
| ✓ | ✓ | ✓ | ✓ | ✓ |
| ✓ | ✗ | ✗ | ✗ | ✗ |
| API ergonomics / usage docs (inline pass) | if API | if API | flags/help | ✓✓ | ✓ |
(the single classifier over the synthesized table —
process step 7) and
(the debt transform over the classified
table — process step 8) are not axis finders: they run once per review, not
per axis.
Isolation rule (default — every pass, not only adversarial)
Each applicable pass, the classifier (step 7), and debt transform (step 8) runs
isolated/context-clean and returns only its fixed findings table plus
—never diff or prose. Spawn one fresh subagent/headless run per
pass; without those, use a fresh conversation. Pass only scope, its checklist,
and Step 0 docs; cap full non-diff reads at 10 (targeted ≤50-line reads/greps
excluded). The orchestrator retains tables, not sources, and fuses them in step
6. Inline fallback is sequential table reduction. A pass runs at its own tier or
stronger, never weaker.
Progressive loading — choose one review route
After applicability and isolation are established:
The reference allowlist is exactly the seven linked paths below. Never invent or
read another
path.
| Invocation route | LOAD in this order | SKIP |
|---|
| Default review | review process → adversarial recommendation → persist and decide → output and guardrails | synthesis, portability, adversarial setup |
| review process → adversarial setup before reviewers → adversarial synthesis before fusion → persist/decide → output/guardrails | portability |
| review process → adversarial synthesis plus the supplied reviewer tables → persist/decide → output/guardrails | adversarial setup, portability |
| legacy | print the fixed migration refusal below and stop — zero git/forge mutation | everything |
Legacy is removed — not an alias. Calling
prints this fixed
migration refusal and stops
before any git or forge mutation command runs:
migration: --merge is removed. Table fusion is --synthesize: pass the fixed
reviewer tables the same way and the synthesis contract fuses them. No
repository merge is performed by this skill.
Active review paths use only
/fusion language. Add
portability only when contexts, parallelism, slash
commands or tier controls are unavailable.
docs/workflow/REPOSITORY_STATE.md
is evidence for output/guardrails, not a skill reference; that route owns NRS and
Architectural invariants rules.
Resources are one hop from this file. Fixed reviewer/synthesis/output contracts are
literal. Missing required resource → stop; never approximate a review contract.
Portability
Keep reviewer contexts isolated. Use portability for
sequential/headless fallbacks; never collapse independent adversarial passes.
Relationship to other skills
Orchestrates internal finders (
,
,
,
,
,
,
,
), then
one
classifier and
transform, isolated by
default; installed platform packs are optional.
is user-invoked
only for independent proposals (D3). It is Stage 4: checkpoint reviews are
optional, the end review is mandatory and fresh.
folds in-unit,
adds user-confirmed phases, and independent work becomes
proposals.
consumes only the verified PR-comment receipt, never the
chat report;
is the periodic sweep;
may run this skill fresh and route FAIL to
.
Done when
- One synthesized/classified table covers every applicable axis, lists skipped
axes with reasons, and includes manual checks. Every finding has a destination:
fold, confirmed replan phase, surfaced decision, or user-routed proposal; none
is silently lost and review creates no backlog (D3). Print the closing
block (clean → ; recurring drift → ) and
change no code.