home / skills / penkzhou / swiss-army-knife-plugin / pr-review-analysis

pr-review-analysis skill

/swiss-army-knife/skills/pr-review-analysis

npx playbooks add skill penkzhou/swiss-army-knife-plugin --skill pr-review-analysis

Review the files below or copy the command above to add this skill to your agents.

Files (1)
SKILL.md
8.0 KB
---
name: pr-review-analysis
description: PR Code Review 评论分析知识库,包含置信度评估、优先级分类、技术栈识别和常见评论模式
---

# PR Review 分析 Skill

本 Skill 提供 PR Code Review 评论分析的知识库,用于支持 `/fix-pr-review` 工作流。

## 1. 置信度评估体系

### 1.1 评分因素

置信度表示评论的"可操作性",分数范围 0-100。

| 因素 | 权重 | 说明 |
|------|------|------|
| 明确性 (clarity) | 40% | 评论是否清晰指出问题和位置 |
| 具体性 (specificity) | 30% | 是否有具体示例或测试场景 |
| 上下文 (context) | 20% | 是否理解代码上下文和影响 |
| 可复现 (reproducibility) | 10% | 是否有复现步骤 |

### 1.2 评分指标

#### 明确性 (Clarity) - 权重 40%

| 指标 | 分值 | 示例 |
|------|------|------|
| 有具体文件位置 | +30 | "src/auth.py:42" |
| 有行号 | +10 | "第 42 行" |
| 有期望行为描述 | +30 | "应该返回 401" |
| 有代码示例 | +20 | ``` `if token.expired:` ``` |
| 评论长度 > 50 字 | +10 | 详细描述 |

#### 具体性 (Specificity) - 权重 30%

| 指标 | 分值 | 示例 |
|------|------|------|
| 有测试建议 | +40 | "添加测试用例验证..." |
| 有具体值/示例 | +30 | "返回 `{"error": "expired"}`" |
| 有对比说明 | +30 | "应该用 X 而不是 Y" |

#### 上下文 (Context) - 权重 20%

| 指标 | 分值 | 示例 |
|------|------|------|
| 引用其他代码位置 | +25 | "这会影响 `UserService`" |
| 讨论影响范围 | +25 | "可能导致数据不一致" |
| 基础分 | 50 | - |

#### 可复现 (Reproducibility) - 权重 10%

| 指标 | 分值 | 示例 |
|------|------|------|
| 有步骤描述 | +30 | "1. 登录 2. 访问 /api" |
| 有输入输出描述 | +20 | "当 token 过期时..." |
| 基础分 | 50 | - |

### 1.3 置信度等级

| 分数范围 | 等级 | 处理方式 |
|---------|------|---------|
| 80-100 | 高 (high) | 自动处理 |
| 60-79 | 中 (medium) | 询问用户后处理 |
| 40-59 | 低 (low) | 标记需澄清 |
| 0-39 | 极低 (very_low) | 跳过,回复 reviewer |

---

## 2. 优先级分类体系

### 2.1 优先级定义

| 优先级 | 名称 | 描述 | 处理要求 |
|--------|------|------|---------|
| P0 | Blocker | 阻塞上线的安全/数据问题 | 必须立即处理 |
| P1 | Critical | 核心功能缺陷 | 当前 PR 必须修复 |
| P2 | Major | 重要改进 | 建议本 PR 修复 |
| P3 | Minor | 建议/风格问题 | 可选处理 |

### 2.2 分类关键词

#### P0 (Blocker) 关键词

**安全相关**(自动升级 2 个优先级):

- `security`, `vulnerability`, `injection`
- `XSS`, `CSRF`, `leak`, `exposed`
- `sensitive`, `password`, `token`, `secret`
- `安全`, `漏洞`, `泄露`, `暴露`

**关键缺陷**:

- `crash`, `data loss`, `downtime`
- `blocker`, `production`, `urgent`
- `崩溃`, `数据丢失`, `紧急`, `阻塞`

#### P1 (Critical) 关键词

- `bug`, `broken`, `fail`, `error`
- `incorrect`, `doesn't work`, `not working`
- `wrong`, `invalid`, `missing`
- `错误`, `失败`, `不正确`, `缺失`

#### P2 (Major) 关键词

- `should`, `better`, `improve`
- `optimize`, `refactor`, `performance`
- `cleanup`, `simplify`
- `应该`, `改进`, `优化`, `重构`

#### P3 (Minor) 关键词

- `consider`, `maybe`, `could`
- `nit`, `style`, `minor`, `typo`
- `nitpick`, `suggestion`
- `建议`, `风格`, `小问题`

### 2.3 优先级提升规则

| 条件 | 提升 |
|------|------|
| 包含安全关键词 | +2 级 |
| 包含数据相关关键词 | +1 级 |
| 文件在核心路径 (auth, payment) | +1 级 |

---

## 3. 技术栈识别

### 3.1 路径模式匹配

#### Backend

```yaml
patterns:
  - "src/api/**"
  - "src/models/**"
  - "src/services/**"
  - "app/**"
  - "tests/backend/**"
  - "tests/unit/**"
  - "**/*.py"
```

#### Frontend

```yaml
patterns:
  - "src/components/**"
  - "src/pages/**"
  - "src/hooks/**"
  - "src/stores/**"
  - "tests/frontend/**"
  - "**/*.tsx"
  - "**/*.jsx"
```

#### E2E

```yaml
patterns:
  - "tests/e2e/**"
  - "e2e/**"
  - "playwright/**"
  - "cypress/**"
```

### 3.2 文件扩展名推断

| 扩展名 | 技术栈 |
|--------|--------|
| `.py` | Backend |
| `.tsx`, `.ts`, `.jsx`, `.js` | Frontend |
| `.spec.ts`, `.test.ts` (在 e2e 目录) | E2E |

---

## 4. 常见评论模式

### 4.1 Backend 常见评论

#### 数据库相关

| 模式 | 置信度加成 | 优先级 |
|------|-----------|--------|
| "事务/transaction" | +15 | P1 |
| "N+1 查询" | +20 | P1 |
| "索引/index" | +10 | P2 |
| "死锁/deadlock" | +20 | P0 |

#### API 相关

| 模式 | 置信度加成 | 优先级 |
|------|-----------|--------|
| "状态码错误" | +15 | P1 |
| "响应格式" | +10 | P2 |
| "参数验证" | +15 | P1 |
| "错误处理" | +15 | P1 |

#### 认证相关

| 模式 | 置信度加成 | 优先级 |
|------|-----------|--------|
| "token 过期" | +20 | P0 |
| "权限检查" | +20 | P0 |
| "会话管理" | +15 | P1 |

### 4.2 Frontend 常见评论

#### React 相关

| 模式 | 置信度加成 | 优先级 |
|------|-----------|--------|
| "useEffect 依赖" | +15 | P1 |
| "状态管理" | +10 | P2 |
| "memo/useMemo" | +10 | P2 |
| "key 属性" | +15 | P1 |

#### 测试相关

| 模式 | 置信度加成 | 优先级 |
|------|-----------|--------|
| "mock 冲突" | +20 | P1 |
| "异步测试" | +15 | P1 |
| "测试覆盖" | +10 | P2 |

### 4.3 E2E 常见评论

| 模式 | 置信度加成 | 优先级 |
|------|-----------|--------|
| "选择器不稳定" | +15 | P1 |
| "超时问题" | +15 | P1 |
| "等待条件" | +15 | P1 |
| "断言不准确" | +10 | P2 |

---

## 5. 回复最佳实践

### 5.1 回复原则

1. **感谢 Reviewer**:始终表示感谢
2. **说明行动**:清楚描述做了什么
3. **提供证据**:链接到修复代码/测试
4. **开放沟通**:邀请进一步讨论

### 5.2 回复模板

#### 已修复

```markdown
✅ 已修复

感谢指出!已在 `{commit}` 中完成修复。

**变更**:
- {变更描述}

**测试**:
- ✅ {测试名称} 通过
```

#### 需要澄清

```markdown
⏸️ 需要更多信息

感谢建议!为了更好地理解,能否提供:
1. {问题 1}
2. {问题 2}
```

#### 不采纳(有理由)

```markdown
ℹ️ 暂不修改

感谢建议!经过分析,当前实现是预期行为,原因:
- {原因}

如果您有不同看法,欢迎继续讨论。
```

### 5.3 避免的回复

- ❌ "你的建议不对"
- ❌ "代码已经这样写了"
- ❌ 不提供任何解释的 "已修复"
- ❌ 防御性语气

---

## 6. 时间窗口过滤

### 6.1 过滤规则

**有效评论条件**:

- 评论创建时间 > 最后 commit 时间
- 或评论更新时间 > 最后 commit 时间(有新回复)

### 6.2 时区处理

- 所有时间使用 UTC
- GitHub API 返回的时间已是 UTC
- 比较前确保时区一致

### 6.3 边界情况

| 情况 | 处理 |
|------|------|
| 评论与 commit 同时 | 保守保留 |
| 更新时间 > 创建时间 | 检查更新内容 |
| 评论在 commit 前但有新回复 | 保留 |

---

## 7. TDD 集成

### 7.1 修复流程

所有 PR Review 修复必须遵循 TDD:

1. **RED**:编写能复现评论问题的测试
2. **GREEN**:最小实现使测试通过
3. **REFACTOR**:优化代码

### 7.2 测试命名

```python
# 格式: test_{功能}_{评论描述}
def test_token_validation_returns_401_when_expired():
    """
    PR Review: rc_123456
    Reviewer: @alice_dev
    """
    pass
```

### 7.3 覆盖率要求

- 新增代码:100% 覆盖
- 修改代码:不低于原覆盖率
- 总体覆盖:>= 90%

---

## 8. 知识沉淀

### 8.1 何时沉淀

- P0/P1 评论的修复
- 置信度 >= 85 的评论
- 新发现的问题模式

### 8.2 沉淀内容

```markdown
## {问题模式名称}

**频率**: ★★★☆☆
**技术栈**: Backend/Frontend/E2E
**关键词**: token, expire, validation

### 问题描述
{描述}

### 解决方案
{TDD 修复代码示例}

### 检查清单
- [ ] 检查项 1
- [ ] 检查项 2
```

### 8.3 沉淀位置

- 通用模式:`docs/best-practices/pr-review-patterns.md`
- 技术栈特定:`docs/best-practices/{stack}/*.md`