关于 impact-check
impact-check 是一款代码库分析技能,用于在修改函数、类、变量或配置键前梳理依赖。它会报告直接和间接引用、单独列出测试引用,并标记未修改代码的未文档化符号。
主要功能
- 01搜索导入、调用及其他引用
- 02将依赖分为直接和间接
- 03单独列出测试引用
- 04记录文件路径与行号
- 05标记 Wiki 中未记录的符号
- 06只读分析并输出报告草稿
适用场景
- 01修改共享工具前评估调用方
- 02重命名或删除符号前追踪依赖
- 03找出变更后需要更新的测试
- 04在审查中发现未文档化符号
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ rheinmir/ setup --skill impact-check安装后在 Claude Code 中输入/impact-check确认已加载。
详细介绍
技能:impact-check
内容
目的与背景
- 目的: 修改任何符号(函数、类、变量、配置键)之前,梳理所有依赖项,避免调用方措手不及。
- 触发条件(何时使用):
- 修改共享工具函数、基类或被广泛导入的模块之前
- 重命名或删除任何内容之前
- 作为
safe-change或propose的第一步
- 非目标: 不修改代码(仅输出);不为尚未记录的符号创建 wiki 页面(仅记录缺口)。
思维模型
符号 → 所有引用(导入 · 调用 · 读取输出)→ 直接 / 间接 → 单独列出测试引用 → 报告 + wiki 缺口。
输入和输出约定
| 字段 | 必需? | 含义 | |
|---|---|---|---|
| 输入 | 要更改的符号 | 是 | 函数、类、变量、配置键 |
| 输出 | 引用列表 | 是 | 文件路径、行号、用法、直接/间接标签;若文件外没有引用,需明确说明 |
| 输出 | 测试引用 | 如有则必需 | 单独列出 |
| 输出 | wiki 缺口 | 如有 | wiki/ 中尚未记录的符号 |
| 输出 | 输出报告草稿 | 是(0 个产物时除外) | llmwiki/wiki/sources/draft/DDMMYY-<ten>.md |
规则与能力
- RULE-01(必须):执行此技能期间不得修改任何内容——仅输出。
- RULE-02(必须):如果代码库较大,按符号名称和文件模式搜索(例如所有
*.ts文件)。 - RULE-03(必须):不能因为没有直接调用方就认定符号未使用——也要检查间接依赖项。
- 能力:读取/搜索整个代码库(文本搜索或代码图);写入草稿报告以及 wiki 索引/日志。
失败边界
- 符号不明确(有多个同名定义)→ 澄清具体符号。
- 文件外引用数为零 → 成功,明确说明“文件外引用数为 0”。
- 未能完成搜索(代码库过大、搜索出错)→ 部分完成,记录已扫描范围。
操作方式
主工作流
| 步骤 | 类型 | 输入 | 操作 | 输出/退出 | 失败/后续 |
|---|---|---|---|---|---|
| W01 | 判断 | 修改请求 | 确定准确的符号 | 符号列表 | 不明确 → 澄清 |
| W02 | 确定性 | 符号 | 在整个代码库中查找所有导入/调用/引用 | 命中项 | 代码库较大 → 按名称 + 文件模式搜索 |
| W03 | 确定性 | 命中项 | 记录文件路径、行号、用法 | 引用表 | — |
| W04 | 判断 | 引用表 | 分类为直接/间接 | 已标注的引用 | — |
| W05 | 确定性 | 引用 | 完整报告,单独列出测试引用,并明确说明零引用的情况 | 报告 | — |
| W06 | 确定性 | wiki/ | 如果符号尚未记录,则记录缺口(不创建条目) | 缺口备注 | — |
| W07 | 影响 | 结果 | 输出报告草稿 | 草稿 + 索引 + 日志 | 0 个产物 → 跳过 |
各步骤详情(W01–W07 的事实依据):
- 确定要更改的准确符号。
- 在整个代码库中搜索对每个符号的所有导入、调用和引用。
- 对每个引用,记录文件路径、行号以及符号的用法。
- 对每个引用进行分类:
- 直接 — 调用或导入符号本身
- 间接 — 依赖符号产生的行为(例如读取其输出)
- 报告完整列表。如果文件外未找到任何引用,需明确说明。
- 将测试文件中的引用单独标出——这些引用必须更新,否则会造成错误信心。
- 如果符号尚未记录在
wiki/中,将其标记为缺口——此时不要创建条目。只有代码提交后才编写 wiki 条目(参见verify-before-commit)。
分支
| ID | 类型 | 条件 | 行为 | 跳过/失败 | 汇合 |
|---|---|---|---|---|---|
| B01 | 必要条件分支 | 代码库较大 | 按符号名称和文件模式搜索(RULE-02) | — | W03 |
| B02 | 必要条件分支 | 测试文件中有引用 | 单独列出,并警告必须更新 | 没有 → 跳过 | W06 |
验证与停止
所有命中项都记录了路径、行号和直接/间接标签后即可停止。不能仅因缺少直接调用方就断定“未使用”(RULE-03)。不得修改任何代码文件。
示例
- **正向:**修改
src/utils/date.ts中的formatDate(d)签名 → 12 个直接引用(导入)+ 2 个间接引用(读取输出字符串以进行解析)+ 3 个单独列出的测试引用 → 生成报告 + 草稿DDMMYY-impact-format-date.md。 - **边界/失败:**配置键
retry_limit没有直接调用方,但通过动态方式config[key]读取 → 归类为间接引用,绝不要报告“未使用”;如果扫描不完整,则报告部分结果并注明范围。
交付 — 输出报告
完成所有主要技能任务后,将提案草稿写入 Wiki。
步骤
1. 构建文件名:
- 格式:
DDMMYY-<ten>.md DDMMYY= 今天的日期(例如,2026 年 6 月 2 日为020626)<ten>= 用 2–4 个 kebab-case 单词概括所做的工作(例如,landing-page-coteccons、brand-kit-fintech、ingest-auth-spec)
2. 写入 llmwiki/wiki/sources/draft/DDMMYY-<ten>.md:
---
type: draft
title: "DDMMYY-<ten>"
status: proposed
tags: [<skill-name>, output-report]
timestamp: YYYY-MM-DD
---
# DDMMYY-<ten>
**Type:** draft
**Status:** proposed
**Tags:** <skill-name>, output-report
**Proposed:** YYYY-MM-DD
## What
<One sentence — what this skill invocation produced or decided>
## Output
<Key artefacts, files created/modified, or decisions made>
## Files
| File | Action |
|------|--------|
| `path/to/file` | created / modified |
## Notes
- Invoked via: `/<skill-name>` skill
## Origin
- **Draft:** `wiki/sources/draft/DDMMYY-<ten>.md`
- **Commit:** _(filled by verify-before-commit)_
- **Date promoted:** _(filled by verify-before-commit)_
3. 更新 Wiki 索引和日志:
llmwiki/wiki/index.md— 追加一行:| [DDMMYY-<ten>](sources/draft/DDMMYY-<ten>.md) | draft | YYYY-MM-DD |llmwiki/wiki/log.md— 追加:## YYYY-MM-DD — <skill-name> — <ten>
仅当该技能没有生成任何产物且没有产生任何决策时才跳过(例如,纯展示模式,如
/caveman-stats)。
评论
支持 Markdown