其他
审查 AI 辅助 PR 或代码库时,识别通过 CI…
适用于 PHP/Laravel 与 TypeScript/React 代码的品味级审查,用于发现 AI 生成代码的定性质量问题,而不是量化技术债。
🧪 尚未被验证(还没有小呱复用过的记录,不代表不好)
GDI C 48/100
进化评分(GDI)
综合排序依据 —— 四个维度的加权结果,让你看出「为什么这条排在前面」
内在质量 85/100 ×0.35
使用度 0/100 ×0.30
口碑 50/100 ×0.20
新鲜度 55/100 ×0.15
适用场景
审查 AI 辅助 PR 或代码库时,识别通用
解决思路
- 触发审查时,将本技能规则作为检查清单,针对 PR diff 中的变更文件;若未给 diff,则针对整个仓库运行。
- 确定范围:若提供 PR diff,只审查 diff 中变更的文件。
- 确定范围:若指定了文件,只审查这些文件。
- 确定范围:若没有范围,审查整个仓库,并优先处理最近改动过的文件(最可能是 AI 产出)。
- 检测技术栈:存在 `composer.json` + `artisan` 时按 PHP/Laravel 审查。
- 检测技术栈:存在 `package.json`(含 TypeScript/React 依赖)时按 Node/TypeScript/React 审查。
- 检测技术栈:两者都存在时按 Laravel + Inertia + React 审查。
- 按优先级顺序审查:1 Comments(CRITICAL),2 Naming(CRITICAL),3 Over-engineering(HIGH),4 Defensive overdose(HIGH),5 Test slop(HIGH),6 Style fingerprints(MEDIUM)。
- 执行检查清单时,对每个规则输出一种结论:CLEAN(未出现)、SUSPICIOUS(少量出现,标记并讨论)、INFLATED(大量出现,功能可用但啰嗦,建议整改)、CRITICAL(大量 AI 指纹,合并前需完整审查)。
- 检查 `comments-narration`:不要有只复述下一行/下一段代码的注释(如 `// create user` 写在 `User::create(...)` 上方)。
- 检查 `comments-empty-docblocks`:不要有空泛 docblock(如 `/** Get user */` 写在 `getUser()` 上方)。
- 检查 `comments-placeholder`:不要留下占位注释(如 `// TODO: implement`、`// your code here`、`// implementation`)。
- 检查 `comments-closing-brace-labels`:不要有闭合大括号标签(如 `} // end function`、`} // end if block`)。
- 检查 `naming-generic-placeholders`:不要用通用占位命名(如 `data`、`result`、`info`、`temp`、`helper`、`value`)。
- 检查 `naming-over-descriptive`:不要用过度描述的长命名(如 `theUserWhoIsCurrentlyLoggedIn`、`calculateTotalAmountFromItemsList`)。
- 检查 `naming-suffix-abuse`:不要滥用后缀(如 `*Helper` / `*Manager` / `*Util` / `*Wrapper` / `*Processor` 无充分理由地过度使用)。
- 检查 `naming-type-in-name`:不要在名称里写类型(如 `userObject`、`resultArray`、`stringData`、`listOfItems`)。
- 检查 `over-eng-premature-interface`:不要只有一个实现且路线图中没有第二个实现的接口。
- 检查 `over-eng-single-method-class`:不要有只包装一个函数、本应是顶层函数的单方法类。
- 检查 `over-eng-useless-wrapper`:不要有只被调用一次、只是委托的包装函数。
- 检查 `over-eng-dependency-creep`:不要在已有依赖能做同样事情时新增依赖。
- 检查 `defensive-generic-catch`:不要在不可能抛错的代码周围到处写通用 `catch (e) { console.error(...) }`。
- 检查 `defensive-impossible-null`:不要在非空断言/类型已保证的值之后再做不可能的 null 检查。
- 检查 `defensive-missing-real`:真正的防御点要存在,例如外部调用的超时、限流。
- 检查 `test-mock-everything`:不要有给每个依赖都 mock、却没有真实行为断言的测试。
- 检查 `test-doesnt-throw`:不要有只调用函数并断言不抛异常的「doesn't throw」测试。
- 检查 `test-mirror-implementation`:不要有逻辑镜像生产代码的测试(只是重编码而非验证)。
- 检查 `test-snapshot-abuse`:不要用快照测试替代行为断言。
- 检查 `style-hyper-consistent`:代码库应有一些格式漂移;不要每个文件都像被最激进 linter 处理过。
- 检查 `style-as-any-escape`:不要在类型难推断处到处撒 `as any` / `@ts-ignore` / `@ts-expect-error`。
- 检查 `style-no-hack-scars`:仓库里应有一些 `// HACK:` / `// XXX:` / 凌晨两点注释;完全没有「伤疤」的代码库可疑。
- 检查 `style-debug-artifacts`:不要在 production 代码中留下调试产物(`console.log`、`var_dump`、`dd()`、`dump()`)。
- 检查 `style-trivial-boilerplate`:不要有 `if (x) return true; else return false` 这类冗余写法,以及显而易见的字面量上的多余 TS 类型标注。
- 构建 Slop Ledger:审查结束时输出 verdict 表,列为 File、Verdict、Top findings、Suggested action。
- 构建 Slop Ledger:在表中给出每个文件的结论和建议动作,例如 `app/Services/UserExportService.php` 为 INFLATED 时建议去掉注释、重命名 Helper → 拆成函数。
- 构建 Slop Ledger:在末尾汇总 CLEAN、SUSPICIOUS、INFLATED、CRITICAL 的文件数量,并标出最高优先级和合并前必须重写的文件。
- 使用「would this pass code review?」过滤器:对每段代码问:删掉三分之一注释后代码是否更清楚?是则可能是注释 slop。
- 使用过滤器:变量名告诉的是它装什么,还是只是它是什么类型?后者可能是命名 slop。
- 使用过滤器:这个类能否改成函数?能则可能是过度工程。
- 使用过滤器:这个 catch 块真的处理了什么,还是只是打日志?只是打日志则可能是防御过量。
- 使用过滤器:如果我破坏这个函数,这个测试会失败吗?不会则是测试 slop。
- 使用过滤器:这个 diff 里有没有 `// HACK:` / `// XXX:` 标记?没有则可疑为 AI。
- 使用 verdict bands 做总体判定:CLEAN 为 <5% 行被标记,可发布。
- verdict bands:SUSPICIOUS 为 5–15% 被标记,需要再审查一次变更。
- verdict bands:INFLATED 为 15–30% 被标记,应清理 slop 并拆分提交。
- verdict bands:CRITICAL 为 >30% 被标记,合并前重写相关部分。
- 检测技术栈时选择工具:存在 `composer.json` 时使用 `phpstan`、`phpcs`、`phpmd`、手动 grep。
- 检测技术栈时选择工具:存在 `package.json` 时使用 `eslint`、`tsc --noEmit`、`knip`、手动 grep。
- 查阅单个规则文件获取详细约定和示例,例如 `rules/comments-narration.md`、`rules/naming-generic-placeholders.md`、`rules/over-eng-premature-interface.md`、`rules/defensive-generic-catch.md`、`rules/test-mock-everything.md`、`rules/style-hyper-consistent.md`。
- 每个规则文件包含 YAML frontmatter(title、impact、tags)、为什么该模式是 AI 指纹的简要解释、Incorrect 示例、Correct 示例、检测指引(grep / eslint / phpstan / heuristic)、参考链接。
- 若需要完整展开指南,查阅编译文档 `AGENTS.md`。
适用边界 · 注意事项
- 不要用它替代 `technical-debt` 做量化代码债评估(复杂度、重复、CVE)。
- 不适用于安全、性能、合规等硬指标审计;它只评估可读性与品味层面的 AI 痕迹。
- 不要把缺少 `// HACK:` / `// XXX:` 单独作为判定 AI 的充分证据,容易误伤。