Review as JSON
Run /review on this change and follow it exactly.
Emit the result as a single JSON object instead of a prose report:
{
"verdict": "approve | changes_needed | hold",
"summary": "One or two sentences on the change overall.",
"findings": [
{
"severity": "critical | warning | info",
"type": "issue | suggestion | question",
"category": "mission | architecture | implementation | craft | security | performance",
"title": "Short imperative, e.g. 'Sanitize user input before query'",
"description": "What it is, why it matters, and the consequence.",
"file": "path/to/file.ts",
"line": 42,
"suggestedFix": "Optional concrete fix."
}
],
"passes": {
"mission": "met | missing | different | unclear",
"architecture": "ok | concern | blocking",
"implementation": "ok | concern | blocking",
"craft": "ok | concern | blocking",
"security": "ok | concern | blocking",
"performance": "ok | concern | blocking"
},
"sectionSummaries": {
"mustFix": "1-2 sentences on the critical findings, if any.",
"shouldFix": "1-2 sentences on the warnings, if any.",
"questions": "1-2 sentences on the questions, if any.",
"suggestions": "1-2 sentences on the suggestions, if any."
}
}
Rules for the output:
- Emit only the JSON object. No preamble, no commentary, no markdown fences around it.
- Severity.
critical blocks merge (bugs, security holes, data loss). warning should be addressed but isn't a blocker. info is a note.
- Summary. Never restate the verdict ("This PR is approved", "Changes requested") — the presentation layer renders it. The summary answers why.
- sectionSummaries. Explain the underlying theme ("Missing input validation across the new endpoints"), never just count findings.
- Type.
question is something you need answered rather than a defect. suggestion is an optional improvement. Everything else is an issue.
- Category. Every finding's
category is the pass that found it — this is how the passes show up in CI output.
- Verify before you flag still applies. Every finding needs a concrete file, line, and consequence. If you can't verify it, make it a
question.
- If there are no findings, emit an empty
findings array and an approve verdict.
1---2name: review-as-json3description: Runs `/review` and emits the result as a single structured JSON object. Used by CI; use `/review` directly for human-facing reviews.4license: MIT5---67# Review as JSON89Run `/review` on this change and follow it exactly.1011Emit the result as a single JSON object instead of a prose report:1213```json14{15 "verdict": "approve | changes_needed | hold",16 "summary": "One or two sentences on the change overall.",17 "findings": [18 {19 "severity": "critical | warning | info",20 "type": "issue | suggestion | question",21 "category": "mission | architecture | implementation | craft | security | performance",22 "title": "Short imperative, e.g. 'Sanitize user input before query'",23 "description": "What it is, why it matters, and the consequence.",24 "file": "path/to/file.ts",25 "line": 42,26 "suggestedFix": "Optional concrete fix."27 }28 ],29 "passes": {30 "mission": "met | missing | different | unclear",31 "architecture": "ok | concern | blocking",32 "implementation": "ok | concern | blocking",33 "craft": "ok | concern | blocking",34 "security": "ok | concern | blocking",35 "performance": "ok | concern | blocking"36 },37 "sectionSummaries": {38 "mustFix": "1-2 sentences on the critical findings, if any.",39 "shouldFix": "1-2 sentences on the warnings, if any.",40 "questions": "1-2 sentences on the questions, if any.",41 "suggestions": "1-2 sentences on the suggestions, if any."42 }43}44```4546Rules for the output:4748- Emit **only** the JSON object. No preamble, no commentary, no markdown fences around it.49- **Severity.** `critical` blocks merge (bugs, security holes, data loss). `warning` should be addressed but isn't a blocker. `info` is a note.50- **Summary.** Never restate the verdict ("This PR is approved", "Changes requested") — the presentation layer renders it. The summary answers *why*.51- **sectionSummaries.** Explain the underlying theme ("Missing input validation across the new endpoints"), never just count findings.52- **Type.** `question` is something you need answered rather than a defect. `suggestion` is an optional improvement. Everything else is an `issue`.53- **Category.** Every finding's `category` is the pass that found it — this is how the passes show up in CI output.54- **Verify before you flag** still applies. Every finding needs a concrete file, line, and consequence. If you can't verify it, make it a `question`.55- If there are no findings, emit an empty `findings` array and an `approve` verdict.