mcpField
B
blast-radius

blast-radius

github.com/athola测试与质量34383 次安装4 天前更新
代码仓库

关于 blast-radius

Blast Radius Analysis 用于评估代码改动的影响。有 gauntlet 图谱时使用图谱分析,也可回退到 sem 或手动追踪,并按风险整理受影响节点,包括测试缺口和安全问题。

主要功能

  1. 01使用代码图谱分析改动影响
  2. 02回退到 sem 或手动追踪
  3. 03按风险排列受影响节点
  4. 04识别受影响且缺少测试的函数
  5. 05展示总体风险与建议操作

适用场景

  1. 01合并代码改动前评估影响
  2. 02找出差异影响到的未测试函数
  3. 03优先审查涉及安全的改动

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/athola/claude-night-market --skill blast-radius

安装后在 Claude Code 中输入/blast-radius确认已加载。

详细介绍

影响范围分析

使用代码知识图谱分析当前代码更改的影响。

不要使用的情况

  • 阅读更改的代码以查找缺陷(使用 pensive:bug-review)
  • 代码图谱缺失或已过时(使用 gauntlet:graph-build)

前置条件

此技能需要 gauntlet 插件提供图谱数据。检查该插件是否可用:

GRAPH_QUERY=$(find ~/.claude/plugins -name "graph_query.py" -path "*/gauntlet/*" 2>/dev/null | head -1)

如果未安装 gauntlet(GRAPH_QUERY 为空): 使用 git diff 和 grep 跟踪导入和调用点,改为手动分析影响。跳过图谱步骤,直接进入第 3 步(手动模式)。

如果已安装 gauntlet,但不存在 graph.db: 告知用户:“请先运行 /gauntlet-graph build。”

步骤

  1. 显示当前更改:运行 git diff --stat,向用户展示哪些文件发生了更改。

  2. 运行影响分析(需要 gauntlet):

    python3 "$GRAPH_QUERY" \
        --action impact --base-ref HEAD --depth 2
    

    回退方案 1(有 sem,无 gauntlet): 使用 sem 跨文件追踪依赖关系:

    if command -v sem &>/dev/null; then
      sem impact --json <changed-file>
    fi
    

    这会追踪真实的函数级依赖关系,而不是匹配文件名。检测模式请参阅 leyline:sem-integration。

    回退方案 2(无 sem、无 gauntlet):使用 rg(或 grep)追踪更改函数的调用方:

    # Prefer rg for speed; fall back to grep
    if command -v rg &>/dev/null; then
      git diff --name-only HEAD | while read f; do
        stem="${f%.*}"; stem="${stem##*/}"
        [ -z "$stem" ] && continue  # skip dotfiles (.gitignore etc.)
        rg -l "$stem" . 2>/dev/null
      done | sort -u
    else
      git diff --name-only HEAD | while read f; do
        stem="${f%.*}"; stem="${stem##*/}"
        [ -z "$stem" ] && continue  # skip dotfiles (.gitignore etc.)
        grep -rl "$stem" . 2>/dev/null
      done | sort -u
    fi
    

    注意:此操作会搜索所有文件类型。对于仅包含 Python 的项目,可在 rg 中添加 --type py,或在 grep 中添加 --include="*.py",以减少误报。

  3. 按优先级顺序显示结果:

    将输出格式设为表格:

    Risk  | Node                    | File          | Anchor                          | Reason
    0.85  | auth.py::verify_token   | auth.py:45    | `def verify_token(token):`      | untested, security
    0.62  | db.py::execute_query    | db.py:112     | `cursor.execute(query, params)` | high fan-in
    0.41  | api.py::handle_request  | api.py:78     | `def handle_request(req):`      | flow participant
    

    Anchor 列是所引用行中的原文。审查者无需重新运行工具,即可据此确认结果。

  4. 突出显示未经测试的函数:列出所有缺少测试覆盖(没有 TESTED_BY 边)的受影响函数。

  5. 显示总体风险:根据最高风险评分显示总体风险级别(低/中/高)。

  6. 建议操作:

    • 对于高风险节点:“请考虑在合并前添加测试”
    • 对于安全敏感节点:“请仔细审查身份验证和授权逻辑”
    • 对于高扇入节点:“此处的更改会影响许多调用方;请验证向后兼容性”
验证结果是否有依据(blast-radius:findings-verified)

将结果写入 .review/findings.json,运行引用验证器(Skill(imbue:review-core) 第 5 步),并删除验证器拒绝的结果,或将其标记为 UNVERIFIED。

退出标准

  • 结果表列出每个受影响节点,并包含 File(file:line)和原文 Anchor 列。
  • 显示根据最高风险评分得出的总体风险级别(低/中/高)。
  • 每条报告的结果都包含经 citation_verifier.py 确认的 Location + 原文 Anchor(退出码为 0),否则应删除未验证的结果或将其标记为 UNVERIFIED。

风险评分模型

五个加权因素(总和上限为 1.0):

因素权重含义
测试缺口0.30没有测试覆盖
安全性0.20身份验证/加密/SQL 关键词
流程参与度0.25属于执行流程的一部分
跨模块调用0.15被其他模块调用
调用方数量0.10高扇入函数

评论

支持 Markdown