# /review-code — Code Review chỉ-đọc

**CẢNH BÁO: READ-ONLY. Chỉ report, KHÔNG sửa.**

## Gate
{{include:steps/gate.md}}

*Lưu ý: Với lệnh này, target ở Bước 1 là một UC-ID, file path, hoặc tên branch hiện tại. Bỏ qua sang nạp context ngay sau khi phân giải target.*

## Context
{{include:steps/context-loader.md}}

---

## Pre-Review Scan

*(Tách khỏi CHECKPOINT của Gate — phần này liệt kê file và scenario thực tế trong scope.)*

Quét tìm file implementation và scenario, rồi hiện:

```
Review Scope — {UC-ID}
──────────────────────────────────────
UC        : {UC-ID}
Files     : {danh sách file gắn tag @trace.implements={UC-ID}}
Scenarios : {N} scenario trong file .feature

Tiếp tục review? (Y/N)
```

Chờ "Y" rõ ràng trước khi tiếp tục.

---

## Review Dimensions

### 1. Traceability
- [ ] Mỗi controller endpoint có tag `@trace.implements`?
- [ ] Mỗi test file có tag `@trace.verifies`?
- [ ] Không có tag `@trace` ở sai layer?
- [ ] `{paths.trace_dir}/{domain}/{prd-slug}/{UC-ID}-{platform}.tsv` cập nhật chưa? (nếu stale → chạy `/validate-traces {UC-ID}` trước, rồi chạy lại review này)

### 2. Layer Architecture (từ CLAUDE.md §2)
- [ ] Mỗi class ở đúng layer?
- [ ] Phụ thuộc giữa layer đi đúng chiều?
- [ ] Không layer nào bị bypass?

### 3. Coding Standards (từ CLAUDE.md §3)
- [ ] Tuân theo naming convention?
- [ ] Response wrapper dùng nhất quán?
- [ ] Exception được throw (không bị nuốt)?
- [ ] Không magic number, không dữ liệu nhạy cảm trong log?
- [ ] Annotation transaction đúng?

### 4. Spec Compliance
- [ ] Mỗi scenario trong .feature có implementation?
- [ ] Không có endpoint không tài liệu (code không có spec backing)?

## Output

{{include:steps/report-footer.md}}

```
/review-code Report — {UC-ID}
Critical: {X} | Major: {Y} | Minor: {Z}

### Critical
| # | File | Line | Issue | Suggested Fix |

### Major
| # | File | Line | Issue | Suggested Fix |

### Minor
| # | File | Line | Issue | Suggested Fix |

Output Artifacts: none (read-only)

Verdict: APPROVED ✅ | NEEDS_FIX ❌

Nếu APPROVED ✅:
  Next: /dev-gen-test {UC-ID}

Nếu NEEDS_FIX ❌:
  - Fix nhỏ (1–3 dòng, không đổi logic) → fix inline → chạy lại /review-code {UC-ID}
  - Vấn đề logic / kiến trúc              → /fix-bug {TICKET_ID}
  - Spec mismatch (code ≠ scenario)       → /generate-code {feature-file}  (gen lại UC bị ảnh hưởng)
```

---

## Đề xuất ghi Lessons (tuỳ chọn)

Với mỗi finding **Critical/Major** thể hiện một **lỗi AI lặp lại** trong quá trình sinh code
(một vi phạm kiến trúc/standards mà AI có khả năng làm lại — KHÔNG phải typo một lần hay nguyên nhân bên ngoài), hỏi:

```
Finding "{issue}" trông như một lỗi lặp lại.
Ghi nó thành project lesson để /generate-code không lặp lại? (Y/N)
```

Nếu `Y` → chạy quy trình capture bên dưới với `category=code-gen`, `source=/review-code {UC-ID}`,
`scope` = domain hoặc file glob bị ảnh hưởng.

{{include:steps/capture-lesson.md}}
