adversarial-code-reviewerlisted
Install: claude install-skill findscripter/everything-skills
## 何时使用
打破「自评审同质化」——当评审者与作者共享同一套心智模型时,容易给出「看起来没问题」的虚假通过。本技能通过强制切换为三类敌对角色,逼出盲点。
适用:
- 合并任意 PR 前,尤其是无人评审的自写 PR
- 长时间编码后(疲劳产生盲点)
- 当 Claude/评审给出轻易的「looks good / LGTM」,需要第二意见
- 安全敏感代码:鉴权、支付、数据访问、API 端点
- 「直觉觉得哪里不对」时
不该用(负边界):
- 没有任何 diff / 文件可评审(直接报「无可评审内容」)
- 只想要正向确认或鼓励,而非挑错
- 仅需纯格式化 / 风格 lint(本技能要求「实质优先于风格」)
- 需要深度专项安全分析时,应转 `senior-security`
## 步骤
### 第 1 步 收集改动
按调用方式确定评审范围:
- 无参数:`git diff`(未暂存)+ `git diff --cached`(已暂存);若都为空则 `git diff HEAD~1`(最近一次提交)。
- `--diff <ref>`:执行 `git diff <ref>`(如 `--diff HEAD~3`、`--diff main...HEAD`)。
- `--file <path>`:读取整个文件,针对全文评审而非仅改动行。
若找不到任何改动,停止并报告「无可评审内容」。
### 第 2 步 读全上下文
对 diff 中每个文件:
1. 读**整个文件**,而非仅改动行——bug 藏在新代码与既有代码的交互处。
2. 判断改动**目的**:缺陷修复 / 新特性 / 重构 / 配置变更 / 测试。
3. 记录**项目约定**:CLAUDE.md、.editorconfig、lint 配置���既有模式。
### 第 3 步 依次跑完三个角色
每个角色**必须**至少产出一条发现。若某角色「没找到问题」,说明看得不够仔细——回去重看。
### 第 4 步 去重与合成
1. 合并重复发现(多角色命中同一问题)。
2. 被 **2 个及以上角色**命中的发现,严重级**升一级**(NOTE→WARNING→CRITICAL)。
3. 输出最终结构化报告与裁决。
## 指令
硬约束:
- 不得软化、不得对冲。要么是问题,要么不是。禁止「这也许还行,但是……」。
- 直接断言后果,例如:「当 `user` 为 undefined 时这里会抛 NullPointerException」,而非「可能有点小隐患」。
- 新增代码缺测试 = 一条发现,永远成立,测试非可选。
- 自评审破局:自底向上读(从最后��个函数倒着读);读函数体前先陈述其契约,再核对函数体是否相符;默认每个变量可能为 null/undefined,每个外部调用都会失败;自问「若整段改动删掉会坏什么?答案是『什么都不坏』则改动可能多余」。
三个角色:
角色 1 破坏者(The Saboteur)——「我要在生产环境搞垮这段代码」。盯:未校验的输入、可能变得不一致的状态、无同步的并发访问、吞异常或返回误导结果的错误路径、对数据格式/大小/可用性的脆弱假设、off-by-one / 整数溢出 / 空指针解引用、资源泄漏(文件句柄、连接、订阅、监听器)。四问:最坏的输入是什么?外部调用失败/超时/返回垃圾会怎样?这段状态变更跑两次/并发/从不跑会怎样?两个分支都不对会怎样?
角色 2 新人(The New Hire)——「我半年后要在零上下文下读懂并改这段代码」。盯