写代码最怕什么?不是写不出,是改一行,炸一片——改了个 DTO 字段名,三个服务同时崩溃;删了个枚举值,线上 switch 全部走 default。
我写了一个 Claude Code 插件,每次 git commit 前自动扫描变更影响范围,有 P0 破坏性变更直接拦下来。开源免费,装完即用。

一个真实的拦截记录

上周我在改订单状态机,加了一个新枚举值 REFUND_PARTIAL

改动就一行:

public enum OrderStatus {
    PENDING, PAID, SHIPPED, DELIVERED, CANCELLED,
-    REFUNDED
+    REFUNDED, REFUND_PARTIAL  // ← 就加了这一个
}

CR 扫了一眼说"行"。测试也过了。

但 Commit Guard 拦住了。

弹出的报告里写着:

匹配模式:枚举值新增
影响范围:switch 语句中未覆盖新枚举值,会抛 IllegalArgumentException
受影响方:

  • RefundService.java:88 — switch 未覆盖 REFUND_PARTIAL
  • OrderQueryService.java:42 — 同上
  • PaymentGateway.java:15 — 同上

如果没被拦住,这三个 switch 会在线上同时炸。

这个场景,比我预想的频繁得多。传统 Code Review 靠人眼扫,枚举加值这种"肉眼看不出来"的破坏性变更,CR 基本漏光。


它到底能抓到什么

我整理了最近一段时间它实际拦截过的案例:

1. DTO 字段删除

UserDTO 里删了 mobile 字段
     ↓
PaymentService.java       getMobile()       → 编译失败
payment_service.py        user['mobile']    → 运行时异常
user_handler.go           user.Mobile       → 编译失败
notification.module.ts    userDTO.mobile    → 编译失败
UserProfile.vue           user.mobile       → 数据不一致

一个字段的删除,6 个文件受影响。其中 4 个是编译失败级,1 个是运行时异常。

2. API 路径变更

@RequestMapping("/api/order") → "/api/v2/order"
     ↓
调用方全部 404,直到手动排查到所有引用点

这属于改了不会报错、但流量一过来就崩的类型——没有 Commit Guard 的话,只能等监控告警。

3. 配置项删除

order.yml 里删了 timeout: 30000
     ↓
服务静默回退到默认 timeout(可能偏小),表现为偶发超时

这种最坑——因为不是报错,是行为变化,可能上线几天后才在告警里发现。

4. DDL 变更

ALTER TABLE user DROP COLUMN mobile
     ↓
存量数据需要迁移,旧查询走偏

报告会自动标记"需要数据迁移",并给出迁移建议方案。


报告长什么样

生成的 conflict-report.md 包含几个部分:

变更明细表——每个文件的风险等级 + 业务影响说明:

| Risk | Type | File | Business Impact |
|:---:|:----:|------|----------------|
| 🔴 P0 | 🔴 Data layer | UserDTO.java | 用户 API 不再返回 mobile |
| 🔴 P0 | 🟡 API layer | OrderController.java | 路径变了,调用方全 404 |
| 🟡 P1 | 🟡 Config | order.yml | 配置删除,服务行为变化 |

多语言引用分析——一个字段改动在 Java/Python/Go/TS/Vue 中的影响全部标出:

| Impact | Lang | File | Reference |
|--------|:----:|------|-----------|
| 🔴 编译失败 | Java | PaymentService.java | user.getMobile() |
| 🔴 运行时异常 | Python | payment_service.py | user['mobile'] |
| 🔴 编译失败 | Go | user_handler.go | user.Mobile |
| 🔴 编译失败 | TS | notification.module.ts | userDTO.mobile |
| 🟡 字段映射 | Vue | UserProfile.vue | 期望 user.mobile |

Mermaid 影响链路图——谁影响了谁,一目了然:

在这里插入图片描述

风险评级与建议:

等级 含义 建议
🔴 P0 破坏性变更 需业务方确认后方可执行
🟡 P1 兼容性变更 需通知相关方
🟢 P2 内部重构 文档通知即可

决策选项——报告最后给出三条路:

[1] 采纳 — 自动修复所有受影响引用方
[2] 拒绝 — 回滚变更
[3] 修改建议 — 调整方案

选 1 的话,AI 会逐个修复受影响的文件然后提交。选 2 就自动 git revert


自动化到什么程度

不需要手动触发。Claude 检测到以下场景时会主动运行分析:

  • DTO/VO 字段增删改
  • Feign/RPC 接口签名变化
  • ALTER TABLE / DROP COLUMN
  • 枚举值新增或废弃
  • Vue 组件 props/emits 变化
  • JSP taglib/include 变化
  • 消息体结构变化
  • 配置项增删

不需要说"帮我分析一下影响"。AI 自己知道什么时候该做。

这套机制和 AI 代码生成是互补关系——AI 写代码快,但改了什么需要另一套逻辑去验证。这个 Skill 做的就是给 AI 生成的代码加一道自动化审查,相当于把 Code Review 的部分环节前置到提交前。


还有一道物理防线

纯 SKILL.md 方案的问题是:AI 只建议不阻止。

所以我加了一个 PreToolUse hook——每次 git commit 时,自动跑一遍完整分析。有 P0 变更直接阻断提交、出完整报告、等你决策。没有 P0 就放行。分析 crash 了也不阻塞开发(fail-open 原则)。

装这个 hook 是可选的——skill 本身没有它也能正常工作。


快速装一个试试

claude add skill https://github.com/GoBeyondYang/skills/raw/main/skills/business-conflict-analyzer/SKILL.md

执行完这条命令,脚本会在 Claude Code 下一次需要时自动下载。不需要 git clone

然后在你的项目里改个 DTO 字段试试——Claude 会直接弹出分析结果。


开源 & 反馈

Apache 2.0 协议,地址:
👉 github.com/GoBeyondYang/skills

如果你也遇到过"改了一行炸了一片",欢迎提 Issue 或 PR。下一个版本可能会因为你的一句话而改进。


直接用这个命令安装:

claude add skill https://github.com/GoBeyondYang/skills/raw/main/skills/business-conflict-analyzer/SKILL.md

如果觉得有用,去 GitHub 点个 ⭐ 吧——你的认可就是我更新的动力! 👉 github.com/GoBeyondYang/skills


评论区说说:你遇到过最坑的"改一行炸一片"的 case 是什么? 哪个让你修到凌晨三点?

持续改进中。你的反馈直接进 roadmap。

Logo

欢迎加入DeepSeek 技术社区。在这里,你可以找到志同道合的朋友,共同探索AI技术的奥秘。

更多推荐