Five-axis code review framework. Use when reviewing your own changes before merge, or reviewing PR. Evaluates correctness, readability, architecture, security, performance.
Five-axis code review framework. Use when reviewing your own changes before merge, or reviewing PR. Evaluates correctness, readability, architecture, security, performance.
Code Review — Five-Axis Framework
Combined from class-ai-agent/.claude/commands/review.md + superpowers/skills/requesting-code-review. Used for both self-review before opening a PR and reviewing teammates' PRs (anh là default reviewer).
When to use
After finishing a feature task / bug fix, before commit or PR.
Before merging a branch into develop (or develop → deploy for releases).
When stuck — fresh perspective on the code you just wrote.
Before a large refactor — baseline check.
5 evaluation axes
1. Correctness — does the code do the right thing?
✅ Good — highlight what was done well (preserves morale, reinforces good patterns).
Example:
## Code Review: PostRepository### 🔴 Critical-`createPost` doesn't validate `authorId` ≠ null before the query → crash if the user logs out racing with upload. Fix: throw `AppError.unauthenticated()` early.
### 🟡 Important- Field `imageUrl` is stored raw from the client. If the client sends a URL outside Firebase Storage (third-party CDN) → loss of control. Suggest: validate the prefix `gs://meep-prod.appspot.com/` or upload via a Function.
### 🟢 Suggestion- Magic string `'posts'` appears 3 times. Extract `static const _collection = 'posts'`.
### ✅ Good- Tests cover empty caption, max length, server timestamp.
- Clear naming `createPost` instead of `add`.
Anti-patterns in review
Anti-pattern
Problem
"Looks good to me" without reading carefully
Rubber-stamp = no review
Bikeshedding naming when there's an unresolved 🔴
Loses focus on the real issue
Suggesting a rewrite of a whole module in a small PR
Scope creep
Blocking PRs over style preference (if vs ternary)
Going religious, not shipping
Self-review = ship faster
15 minutes of self-review saves:
30 minutes of debugging post-merge.
2 hours of rollback if it breaks prod.
Reputation with the team.
Quick checklist (run fast before commit)
[ ] Tests pass: ran the command, read the output (skill `verification-before-completion`)
[ ] Lint clean: `flutter analyze` / `npm run lint` exit 0
[ ] No commented-out dead code blocks
[ ] No console.log / print debug statements left over
[ ] No TODO without a linked issue
[ ] Diff focused — only changes for this task, no "while I'm here" 5-file edits
[ ] Commit message is conventional + describes WHY