# Code Review — [Feature Name]

> **This is a template.** Copy to `docs/reviews/[feature]-[YYYY-MM-DD].md` and fill in. Delete this intro section before publishing.

- **Date**: YYYY-MM-DD
- **Reviewer**: code-reviewer ([model name])
- **Branch**: [branch + commit hash]
- **PRD**: `docs/prd/[feature]-[date].md`
- **Files reviewed**: 列出本次变更涉及的所有文件路径

## Summary

- 总体评价：Approve / Approve with comments / Request changes / Block
- 一句话理由

## Findings

### Severity 定义

- **Critical** — 上线前必须修，阻断合并（安全漏洞、数据丢失风险、生产 bug）
- **Major** — 强烈建议修，可不阻断但需工单跟进（性能问题、错误处理缺失、架构偏离）
- **Minor** — nice-to-have（命名、注释、小重构）
- **Nit** — 风格层面，可自行决定是否采纳

### Critical / Major / Minor / Nit 列表

| ID | Severity | File:Line | Issue | Recommendation |
|---|---|---|---|---|
| F-1 | Critical | backend/app/api/auth.py:42 | SQL 字符串拼接，存在注入风险 | 改用 SQLAlchemy ORM 或参数化查询 |
| F-2 | Major | backend/app/services/user.py:88 | 异常被 `except Exception: pass` 静默吞掉 | 至少打 structured log，必要时 re-raise |
| F-3 | Minor | frontend/src/Login.tsx:120 | 重复条件判断可抽函数 | 抽 `isValidEmail` |

## Security Checklist (per `.claude/standards/security.md`)

逐条核对，标 ✅ / ❌ / N/A：

- [ ] SQL 查询使用参数化或 ORM
- [ ] 输出编码 / CSP headers 配置
- [ ] shell 命令无未清理输入
- [ ] 受保护端点有认证/授权
- [ ] 无硬编码密钥
- [ ] 敏感数据不入日志
- [ ] 系统边界做输入验证
- [ ] 公共端点配置限流
- [ ] CORS 白名单正确
- [ ] 依赖无 critical CVE

## Equivalent-Bypass Check (per `security.md`)

- [ ] 检查代码是否绕过 hook 限制（如用 `shutil.rmtree` 替代 `rm -rf`、`metadata.drop_all()` 替代 `DROP TABLE`）

## SIT Audit

> v2.0.0+ 流程：dev 在 code-review 前已按 skill `agf-running-sit-tests` 自跑 SIT，证据 append 到 `progress/<role>.md` 的 `**SIT 证据**` 段。本节是 reviewer 对该证据的独立 audit（不重跑 SIT）。

### 4 项检查（参见 `.claude/agents/code-reviewer.md` "SIT Audit" 节）

- [ ] **progress 完整性**：`progress/<role>.md` 是否含本次 task 的完整 SIT 证据段（标题 `**SIT 证据**`，按 AC 列出条目）
- [ ] **AC 覆盖**：SIT 证据是否覆盖 PRD 全部 AC 在 integration 层的体现
- [ ] **证据可信度**：命令、输入、输出是否真实可重放（非伪造截图 / 非 mock 替身）
- [ ] **否定结果完整性**：fail 用例是否详写（pass 可简写）

### Verdict（3 档之一）

- ✅ **Pass** — 4 项全部通过
- ⚠️ **Pass with concerns** — progress 完整 + AC 覆盖通过，但证据可信度或否定结果有 minor gap（列出但不阻断）
- ❌ **Redo SIT** — 任一项 fail（证据缺失 / AC 漏覆盖 / 证据不可信 / 虚假 pass）

## Hand-off

- 代码 verdict Pass + SIT Audit ✅/⚠️ → SendMessage product-lead 进入 **E2E**
- 代码 Block 或 SIT Audit ❌ Redo SIT → SendMessage product-lead 列 critical 项 + Redo SIT 要求，由 product-lead 一并打包派回 dev
