# 代码审查执行 Checklist v4.0

**用途**: 每次代码审查前执行，确保工具证据先于文档断言  
**原则**: 零信任文档 — 所有状态通过命令验证，不接受自述

---

## 🔧 阶段一：自动化验证（5分钟，PR 门禁）

### 后端验证序列

```powershell
# Windows PowerShell - 逐条执行，观察退出码

# [1] 构建验证
Set-Location d:\usersystem
go build ./cmd/server
Write-Host "BUILD Exit: $LASTEXITCODE"

# [2] 静态分析
go vet ./...
Write-Host "VET Exit: $LASTEXITCODE"

# [3] 全量测试（带竞态检测）
go test ./... -count=1 -race -timeout=5m
Write-Host "TEST Exit: $LASTEXITCODE"

# [4] 覆盖率检查
go test ./... -coverprofile=coverage.out -count=1
go tool cover -func=coverage.out | Select-String "total:"
# 期望: total: ... >= 60%

# [5] 安全扫描
govulncheck ./...
Write-Host "VULN Exit: $LASTEXITCODE"
# 期望: "No vulnerabilities found"

# [6] staticcheck（死代码/风格）
staticcheck ./...
# 观察 U1000 数量变化
```

### 前端验证序列

```powershell
Set-Location d:\usersystem\frontend\admin

# [7] Lint
npm.cmd run lint
Write-Host "LINT Exit: $LASTEXITCODE"

# [8] 构建（关键：必须无 TypeScript 错误）
npm.cmd run build
Write-Host "FE BUILD Exit: $LASTEXITCODE"
# 期望: vite build 成功，无 TS 编译错误

# [9] 单元测试
npm.cmd test -- --run
Write-Host "FE TEST Exit: $LASTEXITCODE"

# [10] 安全审计
npm.cmd audit --audit-level=high
# 期望: found 0 vulnerabilities（high及以上）
```

### 结果记录表

```
日期: ___________  PR: ___________  审查者: ___________

[1] go build         ✅/❌ _____________
[2] go vet           ✅/❌ _____________
[3] go test -race    ✅/❌ _____________
[4] 覆盖率           ___% (要求≥60%)
[5] govulncheck      ✅/❌ _____________
[6] staticcheck      ___ 个问题
[7] npm lint         ✅/❌ _____________
[8] npm build        ✅/❌ _____________
[9] npm test         ✅/❌ _____________
[10] npm audit       ✅/❌ _____________
```

---

## 🔒 阶段二：安全审查（10分钟）

### 2.1 新增 API 端点检查

```
对每个新增 API 端点，逐一确认：
□ 有 middleware 鉴权（RequireAuth / RequireAdmin）
□ 有权限校验（RBAC）
□ 输入有 struct binding + validate tag
□ 有响应格式统一处理
□ 错误响应不泄露内部堆栈
□ 有 swagger 注释（@Summary @Tags @Param @Success @Failure）
```

### 2.2 数据库操作检查

```powershell
# 搜索潜在 SQL 注入（fmt.Sprintf 拼接 SQL）
Select-String -Path "internal\**\*.go" -Pattern "fmt\.Sprintf.*SELECT|fmt\.Sprintf.*WHERE|fmt\.Sprintf.*INSERT" -Recurse
# 期望: 无结果

# 搜索裸 context.Background（请求链路中不应出现）
Select-String -Path "internal\api\**\*.go","internal\service\**\*.go" -Pattern "context\.Background\(\)" -Recurse
# 期望: 每处均有注释说明理由
```

### 2.3 密钥/凭证检查

```powershell
# 搜索硬编码密钥（非 oauth clientID 类）
Select-String -Path "internal\**\*.go" -Pattern "secret\s*=\s*[`"'][^`"']{8,}" -Recurse
Select-String -Path "configs\**\*.yaml" -Pattern "secret:\s*\S{8,}" -Recurse
# 期望: 无硬编码密钥（OAuth ClientID 是公开配置，可排除）
```

### 2.4 文件上传安全（如有相关改动）

```powershell
# 确认 magic bytes 校验存在
Select-String -Path "internal\api\handler\avatar_handler.go" -Pattern "DetectContentType"
# 期望: 有结果，表示已实现

# 确认扩展名校验 + MIME 双重校验
Select-String -Path "internal\api\handler\avatar_handler.go" -Pattern "allowedMIME|allowedExts"
```

---

## 🔗 阶段三：前后端集成验证（10分钟）

### 3.1 API 路径一致性

```powershell
# 提取后端所有路由
Select-String -Path "cmd\server\main.go","internal\api\**\*.go" -Pattern 'router\.(GET|POST|PUT|DELETE|PATCH)\s*\(' -Recurse

# 提取前端所有 API 调用
Select-String -Path "frontend\admin\src\**\*.ts","frontend\admin\src\**\*.tsx" -Pattern "fetch\(|client\." -Recurse
# 人工对比：路径是否一致
```

### 3.2 响应类型一致性检查

```powershell
# 检查前端类型定义
Get-ChildItem -Path "frontend\admin\src\types" -Filter "*.ts" | ForEach-Object { $_.Name }

# 检查后端响应结构
Select-String -Path "internal\api\handler\**\*.go" -Pattern "c\.JSON\(" -Recurse | Select-Object -First 20
```

### 3.3 前端关键防线验证

```powershell
# 检查是否有 window.alert/confirm（违禁）
Select-String -Path "frontend\admin\src\**\*.tsx","frontend\admin\src\**\*.ts" -Pattern "window\.alert|window\.confirm|window\.prompt" -Recurse
# 期望: 无结果

# 检查 access_token 存储方式（应在内存，非 localStorage）
Select-String -Path "frontend\admin\src\lib\auth-session.ts" -Pattern "localStorage.*token|sessionStorage.*token"
# 期望: access_token 不在 localStorage（refresh_token 可以在）
```

---

## ⚙️ 阶段四：业务逻辑验证（15分钟）

### 4.1 认证流程完整性

```powershell
# CSRF 保护
Select-String -Path "internal\api\middleware\**\*.go" -Pattern "csrf" -Recurse

# 速率限制（登录端点）
Select-String -Path "internal\api\middleware\**\*.go","cmd\server\main.go" -Pattern "ratelimit|RateLimit" -Recurse

# Token 黑名单（退出登录有效性）
Select-String -Path "internal\service\**\*.go" -Pattern "Blacklist|blacklist|RevokeToken" -Recurse
```

### 4.2 权限模型验证

```powershell
# 角色继承循环检测
Select-String -Path "internal\service\**\*.go","internal\repository\**\*.go" -Pattern "circular|cycle|loop" -Recurse

# 权限汇总逻辑
Select-String -Path "internal\api\middleware\**\*.go" -Pattern "GetEffectivePermissions|HasPermission" -Recurse
```

### 4.3 错误处理完整性

```powershell
# 检查 handleError 或统一错误处理
Select-String -Path "internal\api\handler\**\*.go" -Pattern "handleError\|respondError\|handleErr" -Recurse | Measure-Object | Select-Object Count
# 观察是否有统一处理

# 检查 goroutine 中是否有 gin context 使用（已知缺陷）
Select-String -Path "internal\**\*.go" -Pattern "go func" -Recurse | Select-Object -First 10
```

---

## 📊 阶段五：覆盖率深度分析（5分钟）

```powershell
# 生成详细覆盖率报告
go test ./... -coverprofile=coverage.out -count=1
go tool cover -func=coverage.out | Sort-Object { [double]($_.Split()[-1].TrimEnd('%')) }

# 关键路径覆盖率检查
go tool cover -func=coverage.out | Select-String "auth|middleware|service|repository"

# HTML 可视化（可选，用浏览器打开）
go tool cover -html=coverage.out -o coverage.html
```

### 覆盖率评估标准

| 包 | 目标 | 不合格条件 |
|----|------|-----------|
| api/middleware/auth | ≥ 70% | < 30% 为 P1 |
| api/middleware/rbac | ≥ 70% | < 30% 为 P1 |
| service/* | ≥ 65% | < 40% 为 P2 |
| repository/* | ≥ 60% | < 40% 为 P2 |
| auth/* | ≥ 75% | < 50% 为 P1 |
| pkg/pagination | ≥ 60% | 0% 为 P2 |

---

## 📋 阶段六：运维检查（5分钟）

```powershell
# Docker 健康检查
Select-String -Path "Dockerfile","docker-compose.yml" -Pattern "healthcheck" -Recurse

# 资源限制
Select-String -Path "docker-compose.yml" -Pattern "mem_limit|cpus|memory|cpu_shares"

# .env.example 完整性
Get-Content ".env.example" | Where-Object { $_ -notmatch "^#" -and $_ -ne "" }

# Runbook 存在性
Get-ChildItem -Path "docs\runbooks" -Filter "*.md" | ForEach-Object { $_.Name }
```

---

## ✅ 最终审查结论模板

```markdown
## PR 审查结论

**审查日期**: 2026-XX-XX
**PR 标题**: [标题]
**审查者**: [名字]

### 自动化门禁
| 检查项 | 结果 |
|--------|------|
| go build | ✅/❌ |
| go vet | ✅/❌ |
| go test -race | ✅/❌ |
| 覆盖率 | __% |
| govulncheck | ✅/❌ |
| npm build | ✅/❌ |
| npm test | ✅/❌ |

### 人工审查结果

**安全维度**: X.X/10
**API 契约**: X.X/10
**前后端集成**: X.X/10
**业务逻辑**: X.X/10
**测试质量**: X.X/10

### 发现的问题

🔴 P0（共 X 个）：[列表]
🟠 P1（共 X 个）：[列表]
🟡 P2（共 X 个）：[列表]

### 结论

[ ] ✅ 批准合并（所有 P0/P1 已修复）
[ ] 🔴 拒绝合并（存在未修复的 P0/P1）
[ ] 🟡 条件合并（P2 已有修复计划）

**修复后请 @我 复审**
```

---

*Checklist 版本: v4.0*  
*生效日期: 2026-04-12*
