SuperAPI AI 工具集

pr-review-expert

测试与质量

查看项目

更新于 10-14 09:20

技能介绍

用途

PR Review Expert 是一个面向工程团队代码审查场景的技能,用于对 GitHub Pull Request 和 GitLab Merge Request 进行结构化、系统化的审查。其定位是「不止于风格挑刺」,重点放在逻辑、安全与正确性上,帮助评审者形成可复用的审查流程并输出评审者可直接使用的报告。

主要能力

  • 影响范围分析(Blast radius):追踪哪些文件、服务以及下游消费者可能因本次改动而受影响。
  • 安全扫描:覆盖 SQL 注入、XSS、认证绕过、密钥泄露、依赖漏洞等。
  • 测试覆盖率增量:计算新增代码与新增测试之间的比例。
  • 破坏性变更检测:检查 API 契约、数据库模式迁移、配置键的变化。
  • 工单关联:校验 Jira/Linear 工单是否存在,以及是否与改动范围匹配。
  • 性能影响:识别 N+1 查询、包体积回退、内存分配等问题。

适用场景

  • 合并任何涉及共享库、API 或数据库模式的 PR/MR 之前。
  • PR 体量较大(变更超过 200 行)、需要结构化审查时。
  • 新贡献者的 PR 需要给出充分反馈时。
  • 安全敏感代码路径,例如认证、支付、PII 处理。
  • 事故发生后,主动复查类似的 PR。

使用方式

该技能通过命令行工具获取变更内容并进行分析。

获取 Diff(GitHub,使用 gh CLI):

# View diff in terminal
gh pr diff <PR_NUMBER>

# Get PR metadata (title, body, labels, linked issues)
gh pr view <PR_NUMBER> --json title,body,labels,assignees,milestone

# List files changed
gh pr diff <PR_NUMBER> --name-only

# Check CI status
gh pr checks <PR_NUMBER>

# Download diff to file for analysis
gh pr diff <PR_NUMBER> > /tmp/pr-<PR_NUMBER>.diff

获取 Diff(GitLab,使用 glab CLI):

# View MR diff
glab mr diff <MR_IID>

# MR details as JSON
glab mr view <MR_IID> --output json

# List changed files
glab mr diff <MR_IID> --name-only

# Download diff
glab mr diff <MR_IID> > /tmp/mr-<MR_IID>.diff

工作流程分为以下步骤:

Step 1 — 获取上下文:拉取 PR 元信息、变更文件列表,并将 diff 保存到文件。

Step 2 — 影响范围分析:对每个变更文件识别直接依赖方(谁 import 了这个文件)、服务边界(是否跨服务)、共享契约(类型、接口、schema)。影响范围严重程度分为:

  • CRITICAL — 共享库、数据库模型、认证中间件、API 契约
  • HIGH — 被 3 个以上其他服务使用的服务、共享配置、环境变量
  • MEDIUM — 单个服务内部改动、工具函数
  • LOW — UI 组件、测试文件、文档

Step 3 — 安全扫描:使用 grep 对 diff 检测 SQL 注入、硬编码密钥、AWS key 模式、JWT 密钥、XSS 向量、认证绕过、不安全哈希算法(md5/sha1)、eval/exec、原型污染、路径遍历风险等。

Step 4 — 测试覆盖率增量:统计源码文件与测试文件的变更数量,比较新增逻辑行与新增测试行;覆盖率判定规则包括:新增函数无测试则标记、删除测试但未删除代码则标记、覆盖率下降超过 5% 则阻止合并、认证/支付路径要求 100% 覆盖。

Step 5 — 破坏性变更检测:检查 OpenAPI/Swagger 规范变化、REST 路由删除或重命名、GraphQL schema 删除、TypeScript 接口删除;数据库层面的迁移文件、破坏性操作(DROP TABLE、DROP COLUMN、ALTER NOT NULL、TRUNCATE)、索引删除;配置/环境变量的新增与移除。

Step 6 — 性能影响:检测 N+1 查询模式、重量级新依赖、无界循环、缺失 await、大内存分配。

工单关联校验:从 PR 描述中提取工单引用,并校验 Jira/Linear 工单是否存在。文档中特别给出了安全实践说明:凭证通过 stdin 配置(-K -)传给 curl,避免出现在 argv 中;也建议使用 ~/.netrc 并设置 chmod 600。

评审清单:包含 30 多项检查项,分为范围与上下文、影响范围、安全、测试、破坏性变更、性能、代码质量等分组。

输出格式

评审评论建议按如下结构组织:

## PR Review: [PR Title] (#NUMBER)

Blast Radius: HIGH — changes lib/auth used by 5 services
Security: 1 finding (medium severity)
Tests: Coverage delta +2%
Breaking Changes: None detected

--- MUST FIX (Blocking) ---

1. SQL Injection risk in src/db/users.ts:42
   Raw string interpolation in WHERE clause.
   Fix: db.query("SELECT * WHERE id = $1", [userId])

--- SHOULD FIX (Non-blocking) ---

2. Missing auth check on POST /api/admin/reset
   No role verification before destructive operation.

--- SUGGESTIONS ---

3. N+1 pattern in src/services/reports.ts:88
   findUser() called inside results.map() — batch with findManyUsers(ids)

--- LOOKS GOOD ---
- Test coverage for new auth flow is thorough
- DB migration has proper down() rollback method
- Error handling consistent with rest of codebase

常见陷阱与最佳实践

常见陷阱包括:只审风格不审实质、遗漏影响范围、放行未覆盖异常路径的 happy path、忽视迁移风险、间接密钥暴露、跳过过大 PR。

最佳实践包括:先读关联工单再看代码、评审前先看 CI 状态、优先关注影响范围与安全而非风格、对非平凡认证或性能改动在本地复现、对每条评论明确标注「nit:」「must:」「question:」「suggestion:」、一轮评审中批量给出全部评论、以及肯定良好的模式而不只是指出问题。

限制

资料中未提供该技能的具体收费方式、价格、所支持平台范围、安装命令或运行环境要求,也未提供其准确性与检出率的量化效果数据,这些信息暂未提供。