code-change-check 是面向 AI 生成代码的变更审查 Skill。它不要求逐行阅读全部实现,而是把迭代范围、需求、业务契约、Java 语义证据、调用链和 baseline/target 差异集中到一份可追溯报告中。
当前版本只对 Java 提供深度语义分析。
- AI 把内部服务调用改成了外部地址,或把内外部寻址规则混在一起。
- 第三方接口少传、错传字段,或把参数顺序、字段来源理解错。
- 新代码绕过了旧的
Client、Service、Helper、Adapter约定。 - 租户字段、状态字段、权限线索在改动中丢失。
- 响应字段映射发生细微变化,例如
fireEvent.count.value从一个 getter 变成另一个 getter。 - 新增逻辑影响了旧调用链,但受影响入口、调用方和测试范围不清楚。
- 需求、设计、任务列表和实际提交对不上。
- 你使用 AI 写了大量代码,但不想逐行读完所有改动。
- 一次迭代包含多次提交,需要选择本次真正要审计的提交范围。
- 项目既有 Git,也可能有 SVN,或者只能提供改动前后的目录快照。
- 需求来自 OpenSpec、spec-kit、superpowers、普通 Markdown 或用户自己的任务清单。
- 业务里存在隐式规则,例如内部寻址、租户隔离、状态流转、第三方参数契约。
- 你希望把旧代码里已有的调用形态先提取成候选契约,再人工确认是否作为本次审计标准。
- Java 项目依赖不完整,仍希望用 Spoon 的
NOCLASSPATH模式做 AST 级审查。
- 支持 Git、SVN、目录快照和当前工作区。
- 交互选择本次迭代包含的提交或 SVN revision,支持方向键、空格多选、回车提交。
- 兼容 OpenSpec、spec-kit、superpowers、普通 Markdown 需求、设计和任务列表。
- 业务契约可来自指定文件、迭代前旧代码、两者同时使用或不使用。
- Spoon 在
NOCLASSPATH模式下提取字段映射、调用参数、配置来源、HTTP 地址、数据库写入、权限条件和状态条件。 - CodeGraph 提取调用者、被调方法、影响范围和受影响测试。
- 自动比较 baseline/target,优先暴露“语法正确、运行不报错,但业务值来源或参数理解错误”的变化。
- 审计覆盖质量闸门明确区分
success、partial和blocked。
仓库根目录本身就是可安装 Skill,必须保留根目录的 SKILL.md。
将项目目录放入 Claude Code 的 Skill 目录,或使用 CC Switch:下载仓库 ZIP 后直接通过 CC Switch 导入安装 Skill。
将项目目录放入 Codex Skills 目录,确保根目录 SKILL.md 可被发现。
使用 adapters/cline/code-change-check.md 或 .clinerules/code-change-check.md 作为规则入口。
建议每次审查前新开一个 Claude Code 或 Codex 对话。独立上下文可以降低“自己开发、自己审查”的上下文偏差,也不会分散原开发会话的注意力。
- Python 3.10+。根目录启动器会检测 Python,缺失时给出明确提示。
- Java 17+。优先使用系统 Java;Windows 缺失时会自动下载并缓存固定版本运行时。
- 用户不需要安装 Maven、Gradle、Node.js、npm 或 CodeGraph。
- 首次下载运行时需要网络;使用
--offline可禁止联网。
Windows:
run-code-change-check.cmd --project . --output code-change-check-outputmacOS/Linux:
sh run-code-change-check.sh --project . --output code-change-check-output在真实终端且未显式指定范围时,工具会进入交互流程。CI 或 AI 工具无 TTY 环境应先在聊天中确认范围和契约来源,再使用 --no-interactive。
常用命令:
# Git 范围
run-code-change-check.cmd --project . --base-ref main --target-ref HEAD --no-interactive
# SVN 范围
run-code-change-check.cmd --project . --svn-revision 100:120 --no-interactive
# 目录快照
run-code-change-check.cmd --project after --baseline before --no-interactive
# Java 分析必须成功
run-code-change-check.cmd --project . --scan-all --java-analysis required --no-interactive
# 离线运行
run-code-change-check.cmd --project . --scan-all --offline --no-interactiveJava 分析参数:
--java-analysis auto|required|off--tool-cache <目录>--offline
flowchart TD
A["预检项目与版本控制根目录"] --> B["用户确认迭代范围"]
B --> C["用户确认需求与业务契约来源"]
C --> D["物化 baseline 与 target"]
D --> E["Spoon 提取 Java 业务语义证据"]
E --> F["CodeGraph 提取调用链与影响范围"]
F --> G["比较 baseline/target 语义差异"]
G --> H["执行业务契约检查"]
H --> I["计算审计覆盖质量闸门"]
I --> J["生成 JSON 证据包和 HTML 报告"]
J --> K["AI 基于证据解读高风险项"]
| 名词 | 含义 |
|---|---|
| 迭代范围 | 本次审查包含的提交、revision、未提交改动或目录快照范围。 |
| baseline | 迭代开始前的代码状态,用于判断问题是否由本次改动引入。 |
| target | 本次迭代完成后的目标代码状态。 |
| 业务契约 | 字段含义、值来源、调用参数、寻址方式、权限条件、状态条件等必须保持的业务约束。 |
| 证据 | 支持审查结论的可追溯信息,包括文件、行号、语义槽位、值来源、调用链和差异。 |
| Spoon | 内置 Java AST 分析器,目标项目无需编译或解析完整依赖。 |
| CodeGraph | 调用链和影响范围辅助分析器,由 Skill 自动下载和管理。 |
| 覆盖质量闸门 | 判断分析证据是否足够支持结论。核心 Java 分析失败时为 blocked,部分能力缺失时为 partial。 |
默认生成:
code-change-check-output/
├── evidence.json
└── report.html
报告重点包含:
- 顶部可交付评分矩阵,按需求、任务和业务契约展示多维度达标情况。
- Java 文件解析覆盖率与失败原因。
- 字段映射、参数、寻址、权限、状态和数据库写入差异。
- 调用链、影响范围和受影响测试。
- 业务契约检查结果。
- 必须人工核验的证据缺口。
python -m unittest discover -s tests -p "test_*.py"
cd tools/java-analyzer && mvn test package
python scripts/build_release.py