用途
find-mismatch 是一个系统化代码审查技能,目标是找出会在运行时导致失败的缺陷。它明确排除风格、格式、性能建议、文档/测试以及“考虑使用 X”这类建议,只关注真正会破坏运行的问题。
主要能力
审查清单分为七类:
- 跨边界契约:RPC、HTTP、IPC、事件名/主题是否与接收方匹配;参数名与类型(userId 与 user_id、string 与 number、扁平与包装);返回类型字段访问是否与签名一致。
- 序列化与反序列化:DB/后端 snake_case 与 JSON/前端 camelCase 的大小写差异;接收方期望但生产方为可选的字段;枚举/判别字段(type、kind)与变体是否匹配;Base64 双重编码。
- 逻辑错误:循环/分支内外重复计数;索引与分页边界差一错误(page <= total 与 page < total);冗余/死标志、不可达语句、变量遮蔽。
- 属性与方法访问:未做 null/长度检查就调用方法或访问数组索引(items[0].name);可选链过早停止(user?.address.street 在 address 为 null 时仍会崩溃);类中回调的 this 绑定。
- 异步与并发:共享可变状态、并行文件系统访问缺乏协调导致的竞态;遗漏 await 导致 Promise 被忽略、错误静默;错误路径中文件/数据库/网络连接未关闭。
- CSS 与样式:Tailwind v4 中原始 HSL 分量(0 0% 100%)而非函数格式(hsl(0 0% 100%))会失败(与 v3 不同);内联主题的循环引用、选择器不匹配(class 与 data-theme)。
- 占位与桩代码:未使用的声明/文件/依赖、TODO 注释、空 catch 块。
语言特定陷阱
- Python:幻觉库方法(pandas、numpy、requests)、同步/异步混淆、可变默认参数(def f(x=[]))、静默缩进丢失。
- JS/TS:后端(Node)与前端(浏览器)API 混用、any 滥用、仅类型导入不匹配、桶文件误报(已导出但生产未使用、测试/库中使用)。
- C++:裸指针与智能指针混用、缺少标准库头文件 #include、未初始化变量、缓冲区溢出。
- Rust:借用检查器生命周期过度复杂化、对 None/Err 使用 unwrap()、跨 .await 让步点持锁。
- Java / .NET:幻觉注解/特性、LINQ N+1 查询、Entity Framework 模型快照漂移/缺少迁移(对照 Entities/ 下模型变更与 Migrations/)。
- Go:WaitGroup/Channel 死锁、JSON 中未导出结构体字段、循环中 defer、map 并发访问。
- PHP:松散类型比较(== 与 ===)、数组与对象访问、键未定义。
使用方式
流程为:JS/TS 预检查 → 审查清单 → 报告。
JS/TS 预检查:运行静态分析。检查是否安装:fallow --version。缺失时全局安装:npm install -g fallow。执行审计:fallow audit --format json --quiet。按 git 状态过滤发现:git diff --staged --name-only。若已暂存:自动应用安全修复,重新运行审计验证。若未暂存:仅报告,不修改。
随后对所有变更应用审查清单,并按指定模板格式化发现。
Fallow 发现映射与修复:unused_exports 归入占位与桩,自动修复为移除导出(若本地使用)或整个声明;unused_files 归入占位与桩,自动修复为删除文件(先检查动态导入);unused_dependencies 归入占位与桩,自动修复为从 package.json 移除依赖;circular_dependencies 归入跨边界,交由人工审查(会导致初始化缺陷);complexity/duplication 归入逻辑错误,交由人工审查。
输出格式
仅 JS/TS 项目包含 ## Review Summary 头部:
Review Summary
- Manual review bugs found: N
- Fallow auto-fixed: N findings (staged files only)
- Fallow non-auto-fixable: N findings
- Fallow verdict: pass / fail
逐条发现格式(fallow 来源的缺陷加 [fallow] 标签):
Bug #1
- File: <path>:<line>
- Category: <category>
- What's wrong: <description>
- Runtime effect: <effect>
- Fix: <code>
适用场景
适合在代码提交前或审查阶段,对变更进行聚焦运行时缺陷的检查,尤其适合 JS/TS 项目结合 fallow 静态分析自动处理未使用导出、文件与依赖。
限制
该技能明确不报告风格、格式、性能建议、文档/测试或“考虑使用 X”类建议。自动修复仅对已暂存文件生效,未暂存时仅报告。循环依赖与复杂度/重复问题不自动修复,需人工审查。其他语言仅提供陷阱清单,未提供自动化工具流程。