Code Review — A&M standard
Checklist applicable to any PR. Goal: catch real problems before production without turning review into style theater.
Priority order (most important first)
- Correctness — Does the code do what it says? Any bug?
- Security — Any risk of SQL injection, XSS, data leak, wrong permission?
- Performance — Any query in a loop, N+1, expensive operation in a hot path?
- Readability — Will a colleague understand this code in 6 months?
- Tests — Does a critical change have a test? Do existing tests still hold?
- Consistency — Does it follow project standards (AGENTS.md, local skills)?
- Style — Only if documented; linter handles the rest.
Focusing heavily on 5-7 before 1-4 is a bad review smell.
Questions by category
Correctness
- Does the code actually fix the bug / implement the feature described in the PR?
- Are the most obvious edge cases handled? (empty list, null input, unauthenticated user)
- Any behavior that only changes in production (race condition, ordering)?
Security
- Do user inputs reach SQL/HTML without escaping?
- Does a new endpoint have the correct auth/role guard?
- Are secrets (tokens, passwords) in env vars, not hardcoded?
- Do logs/errors avoid leaking sensitive data?
- Are CORS, CSP, rate limits affected?
Performance
- Any
SELECT * on a large table?
- Loop calling an internal endpoint N times (N+1)?
await in series when Promise.all would do?
- Did the frontend bundle blow up because of an unnecessary lib?
Readability
- Do variable and function names explain the purpose without a comment?
- Do functions have 1 clear responsibility?
- Does complex logic have a comment explaining the why (not the what)?
- Does the file have reasonable size, or has it become a "god file"?
Tests
- Does a behavior change have a test that would fail if the logic were removed?
- Does the test use fixtures/mocks consistent with the rest of the project?
- No flaky tests (time-dependent, order-dependent, network-dependent)?
Consistency
- Does it follow standards documented in
CLAUDE.md / AGENTS.md / project skills?
- Does it use the primitives the project already defined (e.g.,
apiFetch instead of raw fetch)?
- No new library introduced when there's already a similar one in the project?
Leaving comments
Use these prefixes to make severity clear:
| Prefix |
Meaning |
nit: |
Detail, optional, can ignore |
suggestion: |
Improvement that may or may not be accepted |
question: |
Needs clarification before approval |
issue: |
Real problem — must change before merge |
blocker: |
Cannot merge as-is |
Examples:
nit: could use an f-string here
suggestion: extracting this logic into a helper reduces duplication
issue: this endpoint is missing an auth check — any user can hit it
blocker: credentials hardcoded in the code, must move to an env var before merge
Self-review before asking a colleague
Before marking the PR as "ready for review":
Approving or requesting changes
- Approve — if the code is correct, secure, readable, and tested. Standalone
nit: comments should not block approval.
- Comment — to leave feedback without approving or blocking. Use when you have open questions.
- Request changes — when there are
issue: or blocker: items to resolve. Objectively explain what needs to change.
Receiving feedback
- Every comment deserves a reply, even if it's "yes, will change" or "I disagree because X"
- Only resolve threads once you applied the change or reached consensus
- If you disagree, argue with data — not just "I prefer it this way"
Reviewer antipatterns
- Asking for a full rewrite instead of targeted suggestions
- Only commenting on style/tabs/semicolons (the linter should catch those)
- "I wouldn't do it this way" with no reasoning
- Rubber-stamp approve without reading
Author antipatterns
- Giant 2000+ line PR mixing 5 features
- Merge commit from main in the middle of the PR
- "I'll fix it in the next PR" for security/correctness comments
- Ignoring a red CI
References
Source: vgguerra/Travel-Agent — distributed by TomeVault.
1---2name: code-review-1713description: Team code review checklist and standard. Use this when reviewing a colleague's PR or self-reviewing before opening a PR. Use when this capability is needed.4---56# Code Review — A&M standard78Checklist applicable to any PR. Goal: catch real problems before production without turning review into style theater.910---1112## Priority order (most important first)13141. **Correctness** — Does the code do what it says? Any bug?152. **Security** — Any risk of SQL injection, XSS, data leak, wrong permission?163. **Performance** — Any query in a loop, N+1, expensive operation in a hot path?174. **Readability** — Will a colleague understand this code in 6 months?185. **Tests** — Does a critical change have a test? Do existing tests still hold?196. **Consistency** — Does it follow project standards (AGENTS.md, local skills)?207. **Style** — Only if documented; linter handles the rest.2122Focusing heavily on 5-7 before 1-4 is a bad review smell.2324---2526## Questions by category2728### Correctness29- Does the code actually fix the bug / implement the feature described in the PR?30- Are the most obvious edge cases handled? (empty list, null input, unauthenticated user)31- Any behavior that only changes in production (race condition, ordering)?3233### Security34- Do user inputs reach SQL/HTML without escaping?35- Does a new endpoint have the correct auth/role guard?36- Are secrets (tokens, passwords) in env vars, not hardcoded?37- Do logs/errors avoid leaking sensitive data?38- Are CORS, CSP, rate limits affected?3940### Performance41- Any `SELECT *` on a large table?42- Loop calling an internal endpoint N times (N+1)?43- `await` in series when `Promise.all` would do?44- Did the frontend bundle blow up because of an unnecessary lib?4546### Readability47- Do variable and function names explain the purpose without a comment?48- Do functions have 1 clear responsibility?49- Does complex logic have a comment explaining the **why** (not the **what**)?50- Does the file have reasonable size, or has it become a "god file"?5152### Tests53- Does a behavior change have a test that would fail if the logic were removed?54- Does the test use fixtures/mocks consistent with the rest of the project?55- No flaky tests (time-dependent, order-dependent, network-dependent)?5657### Consistency58- Does it follow standards documented in `CLAUDE.md` / `AGENTS.md` / project skills?59- Does it use the primitives the project already defined (e.g., `apiFetch` instead of raw `fetch`)?60- No new library introduced when there's already a similar one in the project?6162---6364## Leaving comments6566Use these prefixes to make severity clear:6768| Prefix | Meaning |69|--------|---------|70| `nit:` | Detail, optional, can ignore |71| `suggestion:` | Improvement that may or may not be accepted |72| `question:` | Needs clarification before approval |73| `issue:` | Real problem — must change before merge |74| `blocker:` | Cannot merge as-is |7576Examples:77```78nit: could use an f-string here79suggestion: extracting this logic into a helper reduces duplication80issue: this endpoint is missing an auth check — any user can hit it81blocker: credentials hardcoded in the code, must move to an env var before merge82```8384---8586## Self-review before asking a colleague8788Before marking the PR as "ready for review":8990- [ ] I read my own diff from top to bottom91- [ ] I ran tests locally (`pytest` / `npm test` / `tsc --noEmit`)92- [ ] I ran the feature in practice (not just reading code)93- [ ] PR description explains **what** changes and **why**94- [ ] Screenshots/GIFs if there was a visual change95- [ ] Test checklist if the feature has a complex flow96- [ ] CI is green9798---99100## Approving or requesting changes101102- **Approve** — if the code is correct, secure, readable, and tested. Standalone `nit:` comments should not block approval.103- **Comment** — to leave feedback without approving or blocking. Use when you have open questions.104- **Request changes** — when there are `issue:` or `blocker:` items to resolve. Objectively explain what needs to change.105106---107108## Receiving feedback109110- Every comment deserves a reply, even if it's "yes, will change" or "I disagree because X"111- Only resolve threads once you applied the change or reached consensus112- If you disagree, argue with data — not just "I prefer it this way"113114---115116## Reviewer antipatterns117118- Asking for a full rewrite instead of targeted suggestions119- Only commenting on style/tabs/semicolons (the linter should catch those)120- "I wouldn't do it this way" with no reasoning121- Rubber-stamp approve without reading122123## Author antipatterns124125- Giant 2000+ line PR mixing 5 features126- Merge commit from main in the middle of the PR127- "I'll fix it in the next PR" for security/correctness comments128- Ignoring a red CI129130---131132## References133134- Conventional Commits (used on commits inside the PR): [../conventional-commits](../conventional-commits/SKILL.md)135- Google eng-practices: https://google.github.io/eng-practices/review/136137---138> Source: [vgguerra/Travel-Agent](https://github.com/vgguerra/Travel-Agent) — distributed by [TomeVault](https://tomevault.io).139<!-- tomevault:4.0:skill_md:2026-05-22 -->