Review
Overview
Pressure-check the work product against what was agreed — before the next task or before commit-and-push. The reviewable object is not always a code diff: a spec (write-spec), a plan (write-plan), or a structure decision (solid) each gets its own review with its own falsification method.
Core principle: review the artifact, not your remembered intentions.
Announce: "Using review to review a <spec|plan|solid|code> …"
When to Use
- After each plan task (when executing a write-plan)
- After a major feature slice
- Before opening/updating a PR/MR
- When a spec / plan / structure decision is finished and you want it pressure-checked before downstream work locks onto it
- When stuck (fresh pass over assumptions)
When NOT to use: empty diff; user waived review explicitly.
The Iron Law
1. Critical and Important findings BLOCK progress until fixed or explicitly deferred by the human with reason.
2. EVERY review carries a 推演表 (claim→case table) — the design-level analog of a test suite. No 推演表, no LGTM.
3. EVERY review checks the artifact against its DIRECT upstream (child must faithfully narrow the parent).
4. NEVER claim "LGTM" without reading the actual artifact (diff, tests, spec text, plan tasks, boundary decisions).
5. Findings are written in the user's conversational language, plain words, no metaphor-for-decoration; each finding says the scene, what someone hits, and where in the artifact.
Dispatch
Identify the review object, open its reference, and run only that rubric.
| Review object |
When |
Reference |
推演表 built from |
| code |
A diff / implementation slice |
references/code.md |
claims in the diff (behavior + test expectations) |
| spec |
A design/spec doc (write-spec output) |
references/spec.md |
claims in the spec (scenarios, In/Out, mechanisms, acceptance) |
| plan |
An implementation plan (write-plan output) |
references/plan.md |
claims in the plan (per-task testability, traceability) |
| solid |
A structure/boundary decision |
references/solid.md |
structural claims (unit purpose, dependency arrows, no theater) |
Mixed object (e.g. a PR that ships a spec + its first implementation)? Run the reference for each object, one 推演表 per object, one report.
Workflow
- Gather context (not session vibes):
- Identify the object type → open the matching reference
- The artifact itself + its direct upstream (spec when reviewing plan, plan when reviewing code, grill decisions when reviewing spec, spec boundaries when reviewing solid)
- For code:
git diff / BASE...HEAD
- Run the reference rubric — 推演表 is mandatory output (see below). Prefer a fresh subagent/reviewer when available; otherwise self-review with the same rubric.
- Report by severity: Critical / Important / Minor — every finding in plain language, three-part (scene → what someone hits → where in the artifact).
- Act: fix Critical + Important; note Minor; push back on wrong findings with evidence.
- Re-verify — if fixes landed, re-run the relevant part of the 推演表; for code re-run tests (debug verification gate / tdd).
- Hand off to commit-and-push when shipping.
The 推演表 (mandatory)
A claim that is not falsified is not reviewed. Like a test suite, the 推演表 makes each falsifiable claim in the artifact a row, injects scenarios, and assigns a verdict.
For each row:
- Claim: one falsifiable assertion from the artifact (a spec acceptance item, a plan task's "the test verifies Z", a solid "domain does not depend on IO", a code behavior).
- Scenarios injected (minimum two; add more until the row stops surprising you):
- happy path
- at least one boundary (empty, zero, max, just-out-of-range, first/last element, deadline, quota…)
- at least one extreme (100× load, missing upstream, permission denied, network drop, corrupt input, angry user, midnight rollover…)
- a real case if you have one — a past incident, a user complaint, a regression that already happened. Inject the real case verbatim; the artifact must survive it.
- Verdict: PASS / WATCH / BLOCK.
- PASS — holds under injected scenarios.
- WATCH — holds on happy path but a boundary/extreme/real scenario is unaddressed, unstated, or ambiguous.
- BLOCK — a scenario directly contradicts the artifact (silent scope add, untraceable task, boundary no one owns, acceptance not demoable).
Output shape — a fixed section in every report:
### 推演表
| Claim | Scenarios injected | Verdict |
|-------|--------------------|---------|
| … | happy; boundary; extreme; real case | PASS/WATCH/BLOCK |
Full table for a small artifact; for a large one, write every WATCH/BLOCK row + one line "remaining rows swept, no anomalies" — never drop a row without an explicit sweep note.
Real-case injection: when a real case exists (you have the incident text, a failing repro, a user's exact words), it takes priority over invented scenarios — the artifact must be run through it first.
Report shape
## Review
**Object:** spec | plan | solid | code (BASE...HEAD or paths)
**Upstream checked:** <path or "none — WATCH noted">
**Verdict:** proceed | blocked
### Strengths
- …
### Critical
- …
### Important
- …
### Minor
- …
### 推演表
| Claim | Scenarios injected | Verdict |
|-------|--------------------|---------|
Rationalization Table
| Excuse |
Reality |
| "It's a small change" |
Small changes break prod too. Run the rubric anyway. |
| "Tests pass = good" |
Tests can be theater. Check the 推演表 covers the claims. |
| "It's just a plan/spec, nothing to test" |
Plans/specs have falsifiable claims — that is what the 推演表 is for. |
| "The user is technical, no need for plain words" |
Findings must survive being read by the next person who was NOT in the room. Plain words are for them. |
| "I'll review in the PR UI later" |
Catch now; later compounds. |
| "Reviewer is wrong so ignore" |
Push back with evidence — don't ghost Critical. |
Red Flags
- Shipping without opening the artifact (diff, spec text, plan tasks, boundary decisions)
- "LGTM" with no 推演表 pass
- Proceeding with open Critical/Important
- Reviewing only the object, never its direct upstream
- Findings written in jargon only, with no scene / no "who gets hit"
Checklist
Hand-off
- Code findings → debug / tdd
- Structure issues → solid
- Spec/plan product ambiguity re-opened → grill
- Ship → commit-and-push
1---2name: review3description: Use when finishing a task or task slice, before a merge or PR, or after a major change — and when reviewing a spec, plan, or structure/boundary decision as its own object. Routes each review object to a dedicated rubric reference.4---56# Review78## Overview910Pressure-check the work product against what was agreed — before the next task or before **commit-and-push**. The reviewable object is not always a code diff: a **spec** (`write-spec`), a **plan** (`write-plan`), or a **structure decision** (`solid`) each gets its own review with its own falsification method.1112**Core principle: review the artifact, not your remembered intentions.**1314**Announce:** "Using review to review a <spec|plan|solid|code> …"1516## When to Use1718- After each plan task (when executing a **write-plan**)19- After a major feature slice20- Before opening/updating a PR/MR21- When a spec / plan / structure decision is finished and you want it pressure-checked before downstream work locks onto it22- When stuck (fresh pass over assumptions)2324**When NOT to use:** empty diff; user waived review explicitly.2526## The Iron Law2728```291. Critical and Important findings BLOCK progress until fixed or explicitly deferred by the human with reason.302. EVERY review carries a 推演表 (claim→case table) — the design-level analog of a test suite. No 推演表, no LGTM.313. EVERY review checks the artifact against its DIRECT upstream (child must faithfully narrow the parent).324. NEVER claim "LGTM" without reading the actual artifact (diff, tests, spec text, plan tasks, boundary decisions).335. Findings are written in the user's conversational language, plain words, no metaphor-for-decoration; each finding says the scene, what someone hits, and where in the artifact.34```3536## Dispatch3738Identify the review object, open its reference, and run only that rubric.3940| Review object | When | Reference | 推演表 built from |41|---------------|------|-----------|--------------------|42| **code** | A diff / implementation slice | `references/code.md` | claims in the diff (behavior + test expectations) |43| **spec** | A design/spec doc (`write-spec` output) | `references/spec.md` | claims in the spec (scenarios, In/Out, mechanisms, acceptance) |44| **plan** | An implementation plan (`write-plan` output) | `references/plan.md` | claims in the plan (per-task testability, traceability) |45| **solid** | A structure/boundary decision | `references/solid.md` | structural claims (unit purpose, dependency arrows, no theater) |4647Mixed object (e.g. a PR that ships a spec + its first implementation)? Run the reference for each object, one 推演表 per object, one report.4849## Workflow50511. **Gather context** (not session vibes):52 - Identify the object type → open the matching reference53 - The artifact itself + its **direct upstream** (spec when reviewing plan, plan when reviewing code, grill decisions when reviewing spec, spec boundaries when reviewing solid)54 - For code: `git diff` / `BASE...HEAD`552. **Run the reference rubric** — 推演表 is mandatory output (see below). Prefer a fresh subagent/reviewer when available; otherwise self-review with the same rubric.563. **Report** by severity: Critical / Important / Minor — every finding in plain language, three-part (scene → what someone hits → where in the artifact).574. **Act**: fix Critical + Important; note Minor; push back on wrong findings with evidence.585. **Re-verify** — if fixes landed, re-run the relevant part of the 推演表; for code re-run tests (**debug** verification gate / **tdd**).596. **Hand off** to **commit-and-push** when shipping.6061## The 推演表 (mandatory)6263**A claim that is not falsified is not reviewed.** Like a test suite, the 推演表 makes each falsifiable claim in the artifact a row, injects scenarios, and assigns a verdict.6465For each row:6667- **Claim:** one falsifiable assertion from the artifact (a spec acceptance item, a plan task's "the test verifies Z", a solid "domain does not depend on IO", a code behavior).68- **Scenarios injected** (minimum two; add more until the row stops surprising you):69 - happy path70 - at least one **boundary** (empty, zero, max, just-out-of-range, first/last element, deadline, quota…)71 - at least one **extreme** (100× load, missing upstream, permission denied, network drop, corrupt input, angry user, midnight rollover…)72 - a **real case** if you have one — a past incident, a user complaint, a regression that already happened. Inject the real case verbatim; the artifact must survive it.73- **Verdict:** PASS / WATCH / BLOCK.74 - PASS — holds under injected scenarios.75 - WATCH — holds on happy path but a boundary/extreme/real scenario is unaddressed, unstated, or ambiguous.76 - BLOCK — a scenario directly contradicts the artifact (silent scope add, untraceable task, boundary no one owns, acceptance not demoable).7778**Output shape — a fixed section in every report:**7980```markdown81### 推演表82| Claim | Scenarios injected | Verdict |83|-------|--------------------|---------|84| … | happy; boundary; extreme; real case | PASS/WATCH/BLOCK |85```8687Full table for a small artifact; for a large one, write every WATCH/BLOCK row + one line "remaining rows swept, no anomalies" — never drop a row without an explicit sweep note.8889**Real-case injection:** when a real case exists (you have the incident text, a failing repro, a user's exact words), it takes priority over invented scenarios — the artifact must be run through it first.9091## Report shape9293```markdown94## Review95**Object:** spec | plan | solid | code (BASE...HEAD or paths)96**Upstream checked:** <path or "none — WATCH noted">97**Verdict:** proceed | blocked9899### Strengths100- …101102### Critical103- …104105### Important106- …107108### Minor109- …110111### 推演表112| Claim | Scenarios injected | Verdict |113|-------|--------------------|---------|114```115116## Rationalization Table117118| Excuse | Reality |119|--------|---------|120| "It's a small change" | Small changes break prod too. Run the rubric anyway. |121| "Tests pass = good" | Tests can be theater. Check the 推演表 covers the claims. |122| "It's just a plan/spec, nothing to test" | Plans/specs have falsifiable claims — that is what the 推演表 is for. |123| "The user is technical, no need for plain words" | Findings must survive being read by the next person who was NOT in the room. Plain words are for them. |124| "I'll review in the PR UI later" | Catch now; later compounds. |125| "Reviewer is wrong so ignore" | Push back with evidence — don't ghost Critical. |126127## Red Flags128129- Shipping without opening the artifact (diff, spec text, plan tasks, boundary decisions)130- "LGTM" with no 推演表 pass131- Proceeding with open Critical/Important132- Reviewing only the object, never its direct upstream133- Findings written in jargon only, with no scene / no "who gets hit"134135## Checklist136137- [ ] Object identified; matching reference open138- [ ] Artifact + direct upstream in hand (upstream missing → WATCH finding)139- [ ] 推演表 filled; every claim falsified or swept140- [ ] Findings plain-word three-part (scene → what someone hits → where); no decorative metaphor141- [ ] Severities assigned; blockers fixed or waived by human142- [ ] Verification re-run if fixes landed143- [ ] Ready for commit-and-push when shipping144145## Hand-off146147- Code findings → **debug** / **tdd**148- Structure issues → **solid**149- Spec/plan product ambiguity re-opened → **grill**150- Ship → **commit-and-push**