发布前代码审查——执行 lint/类型检查,启动并行审查代理(整洁性、设计、效率、副作用门控)对代码差异进行检查并验证
预释波兰语是一项面向实际任务的技能,主要用于仓库状态 ::.;Base ref 参数( 可选) : $ARGUMENTS.;
使用时应结合输入条件选择合适的执行方式,核对必要参数、依赖环境与输出内容,并按原始要求处理异常情况。该技能适合需要稳定复用相关能力的场景,可作为自动化工作流的一部分,也便于后续检查、调整和扩展。从功能定位来看,该技能强调把分散的操作要求整理成清晰、可复用的处理流程,使用户能够围绕既定目标快速准备输入、选择执行方式并获得结构化结果。
实际使用前应先确认任务范围、数据来源、运行环境、必要权限和关键参数,再依据技能说明逐步执行;若输入条件不完整,应先补齐信息或采用保守配置,避免因错误假设导致结果偏离需求。执行过程中需要关注工具调用是否成功、接口或依赖是否可用、输出格式是否符合预期,并对异常提示、缺失字段和边界情况进行处理;涉及批量任务时,还应保存进度,避免中断后重复操作。
仓库当前状态:
git rev-parse --abbrev-ref HEAD git status --short git diff --stat 2>/dev/null | tail -1
基础 ref 参数(可选):$ARGUMENTS
comments、docstrings 或 type annotationslogger.info、logger.error)与遗留调试语句(console.log、console.debug)运行项目的 lint + 类型检查命令。查阅 CLAUDE.md 获取正确的验证命令(常见如 pnpm check、just check、cargo clippy、uv run ruff check 等)。
若检查失败:
若 CLAUDE.md 中未找到验证命令,请向用户询问应执行的命令。
确定哪些内容发生了变更:
git diff + git diff --cachedgit status --short 中的未跟踪文件(标记为 ??)。将新加入的未跟踪源文件纳入审阅范围。若某次暂存变更引用了未跟踪文件(例如新建模块、基准测试目标或测试用例),该引用本身即为一项发现:若该变更合入而对应文件缺失,将导致全新克隆和 CI 因引用丢失而失败git diff ...HEAD main 分支比对:git diff main...HEAD。若当前待审阅工作已在本会话中提交,应将审阅范围限定为本次会话内的提交,而非整条分支从审阅中排除锁文件与生成文件(Cargo.lock、pnpm-lock.yaml、package-lock.json、*.snap、自动生成的 bindings 等)——它们属于构建产物,而非人工编写的源码。
逐行通读所有变更文件,理解每处修改的作用及其原因。
当某次变更涉及既有代码路径的迁移或重写(如文件移动、处理器拆分为中间件、函数重命名/替换),需打开其原始版本——即移动前的文件,或对已删除/重命名文件使用 git show : —— 并对比行为(而非仅比对行文本)。注意是否遗漏了输入校验、副作用顺序是否改变、防护逻辑(guards)是否被移除;将上述问题传递给各 agent。
将 diff 写入临时草稿文件。使用 Agent 工具,在单条消息中并发启动全部四个 agent。向每个 agent 传入该 diff 文件路径及变更文件列表,确保其拥有完整上下文——切勿将大型 diff 内联至四个 prompt 中。
为每个 agent 的 prompt 补充以下信息:
CLAUDE.md 的相关项目约束(性能假设、日志规范、平台特性等),以确保发现的问题符合领域实际console.log),避免 agent 返回已知误报小 diff 快速路径:若 diff 极小(大致少于 50 行变更),跳过 agent 并行分发,由你本人直接完成下述四项视角的审阅,且须逐行通读全部变更。后续所有阶段仍需执行。
快速、机械、高置信度。聚焦应被移除的冗余内容。
console.log、console.debug、console.warn;临时调试变量;硬编码的测试值。不包括结构化日志调用(logger.info、logger.error、c.var.logger)"// increment counter"、"// return the result")——即使该行代码已在其他类别中标记,也需单独标记每处此类注释;非公开 API 的内部/私有函数上的 JSDoc;简单辅助函数上冗长的 docstring;Claude 留下的(非用户所留)TODO/FIXME/HACK 标记;语言能正确推断类型时不必要的类型注解;代码或注释中的 emoji(除非项目明确使用)rg -n '[x{2010}-x{2015}x{2018}-x{201F}]'0、1、true、HTTP 状态码需超出 diff 范围探索整个代码库。聚焦结构性与设计层面问题。
聚焦运行时性能与资源问题。
r.ok);对外部调用的 Promise 拒绝未作处理;I/O 边界处缺少错误处理封闭范围的正确性检查。用于发现那些在预期闸控检查之前就已执行的高成本或不可逆副作用。它 **不评判业务逻辑是否正确**——那是 /review 的职责。
next() 之前触发副作用的中间件是首要嫌疑对象;本应闸控它的校验逻辑通常位于下游处理器中/review:业务逻辑是否正确、定价计算、算法正确性、任何缺乏明确不变量(invariant)的问题每一项发现均须注明副作用所在行、其所对应的闸控条件(或标注为“无闸控”),以及完整的控制流路径。缺少两个行号引用的发现无效。
在呈现任何结果前,须依据实际代码逐一验证所有 agent 提出的发现项。无法通过验证的发现项应直接丢弃。
对每一项发现:
logger.*、c.var.logger.*)仅通过验证的发现项方可进入最终报告。
将已验证的发现项整合为一份去重后的单一报告。若多个 agent 标记了同一处代码,合并为一项发现。按类别分组:
## 审阅发现
### 正确性(N 项问题)
1. `path/to/file.ts:55` - chargeUser() 在请求体校验前执行(处理器在校验逻辑 :78 处执行,且在 next() 之后);畸形请求将被扣款,随后返回 400 错误
2. ...
### 整洁性(N 项问题)
1. `path/to/file.ts:42` - console.log("debug response")
2. ...
### 设计(N 项问题)
1. `path/to/file.ts:15-18` - 手动拼接路径,应复用 shared/utils 中已有的 `resolveAssetPath`
2. ...
### 效率(N 项问题)
1. `path/to/file.ts:30-45` - 独立 API 调用被顺序 await,应改用 Promise.all
2. ...
### 观察项(非阻塞性)
1. `path/to/file.ts:88` - flock 回退机制捕获了所有锁错误,而不仅限于文件系统不支持的情况——此为行为说明,非缺陷;由你决定是否调整
### 验证后丢弃项
1. `path/to/view.py:12` - 每次 mousemove 都调用 getBoundingClientRect —— 元素为 CSS fixed 定位,因此 rect 已缓存,不会触发布局刷新
**总计:X 个问题,分布于 Y 个类别**
**建议:** 修复正确性 #1、整洁性 #1-2、效率 #1;跳过设计 #2(边际收益低)。
**等待批准后,再执行修复。**
始终将 正确性 类别列于首位(包括 (0 issues) 的情况),因为该数字为零本身即是重要信号——表明已对副作用执行顺序进行了检查。正确性为零时,必须明确说明已追踪的具体副作用及其覆盖的闸控条件,而不仅给出数量统计。该类别绝不可与样式类问题一同批量批准。
观察项 是经验证的行为说明,不属于缺陷——由用户自行判断,永不阻塞流程。验证后丢弃项 列出阶段 4 中被否决的 agent 发现及其原因,用以佐证报告中的统计数字。任一子节为空时可省略。
报告结尾需附上逐项 建议:明确指出你计划修复哪些项、跳过哪些项,以便用户可按编号快速批准。
若未发现任何问题,报告“洁净 —— 未发现任何问题”,并说明正确性为零的具体验证过程(追踪了哪些副作用、为何判定为洁净),同时提供下一步建议——例如:直接提交、或交由用户自行审阅——然后终止流程。
报告末尾必须包含如下语句:“等待批准后,再执行修复。”(或前述“洁净”情形下的对应表述)。在用户明确批准前,不得进入阶段 6。
获得用户批准后:
相关专题
热门下载
相关下载
精品课程
共6课时 | 54.7万人学习
共89课时 | 134.1万人学习
共49课时 | 82.6万人学习