blast-radius
调查变更在 diff 之外会破坏什么, 用真实代码证明关键安全事实.
- License 许可
- MIT
- 最近更新
- 2026-11-15
- Stars
- ★ 3
- Forks
- 0
01 前言 Front Matter
- name
- blast-radius
- description
- 调查变更在 diff 之外会破坏什么, 用真实代码证明关键安全事实.
- disable-model-invocation
- true
02 资源文件 5
- 参考文档agents/openai.yaml43 B
- 许可证LICENSE1.0 KB
- 参考文档reference/multimodel.md2.2 KB
- 参考文档reference/PROVENANCE.md10.2 KB
- 参考文档reference/report-style-zh.md1.1 KB
03 SKILL.md 正文
变更影响调查
你调查变更在 diff 外的破坏, 合入前找出风险. 触发说法: "这个变更的影响范围", "这改动可能弄坏什么". 没把握的小 diff 也可调查.
你负责调查并运行证明. 若调用方另安排独立产品验证, 本技能的调查不替代成品验证, 应派未参与实现的验证者按已确认标准实跑. 是否接受交付仍由我决定. 大变更的多模型同题调查可以委派.
只列调用者不算完成. 你要找出 grep 看不见的破坏.
1. 读变更并定位历史
读 diff 中新增, 修改与删除的符号, 以及行为差异. 同样检查 diff 外的注册时机, 导入顺序与运行环境.
需要解释某行来源时, 运行历史定位:
git log --oneline -20 # 近期提交, 找到本次变更的邻居
git show <变更提交> # diff 与提交消息
git blame -L <起始行>,<结束行> -- <文件> # 这行由哪个提交引入
git log --follow -p -- <文件> # 跨重命名的文件历史
git log --all --oneline -S"<符号>" # 找到增删该符号的提交
从提交消息取分支或 PR 编号. 用可用托管入口读正文与讨论, 如 gh pr view <编号> --comments. 取不到材料就写来源限制, 不编造 PR 或历史.
完成标准: 每个变更符号与行为差异都有提交或材料位置. 历史来源可复核, 缺失材料已说明限制.
2. 找出关键安全事实
找出变更安全所依赖的一两个关键事实. 例如 "这个调用只丢失效缓存项, 不做别的". 验证它能排除大部分风险, 比罗列可能情况更有效.
读取以下事实, 不停在 grep 命中:
- 库源码, 固定版本与本地补丁.
- 运行时机: 注册, 异步, 卸载与生命周期.
- JSON 返回, 数据库列与线格式.
- 跨语言读同一批字节的路径.
- feature flag 与三跳之后的下游.
给出真实 file:line 或库源码位置.
完成标准: 已指名一两个关键安全事实, 逐条说明其安全作用. 不罗列所有看似相关的位置.
3. 给每个事实标证据级别
每个关键事实都尽量取得下一级证据, 说明停在哪一级:
- 你直接断言事实成立. 单独没有价值.
- 指到真实 file:line, 或库自己的源码.
- 逐步走查失败路径, 证明坏情况到不了.
- 实际跑过: 调用真实代码, 判断错就失败的脚本或测试.
- 在运行中的应用里复现.
级别 4 与 5 属当前观察; 级别 1 到 3 属推断, 结论记未验证; 没跑过的按未运行记, 不抬高级别.
完成标准: 每个关键事实都标了级别并说明停下的理由. 不把低级别材料说成应用实跑.
4. 写可失败的证明脚本
第 4 级通常用小脚本证明. 导入应用实际使用的同款库与固定版本, 调用目标函数. 判断错时以非零退出码失败. 运行后贴原始输出, 不只转述结论.
- 先断言库版本与运行环境, 确保测的是应用实际代码.
- 用 assert 或显式非零退出判断, 不只打印结果.
- 临时脚本放仓库外的临时目录, 或在报告附全文. 产品源码与测试保持原样. 只读调查不需额外授权. 写仓库或运行有副作用的应用前, 按第 5 节开头的 SAFETY 指针获批.
- 交接保留脚本全文与输出, 让别人能重跑.
无法证明就标未证实, 写明所缺数据, 入口, 环境或权限. 不猜测或静默略过.
完成标准: 每条要取第 4 级的关键事实都有实跑脚本与原始输出, 判断错会失败; 停在第 4 级以下的事实按第 3 节标级别与理由, 并记未证实.
5. 一次性实验的边界
关键事实没有正式测试时, 可做本地一次性实验. 动工前的获批与结束后的清理依据 verification-contract/SAFETY.md 的 写入与授权 与 原始数据 两节; 本节只补实验特有范围. 实验是调查手段, 不是新正式用例.
- 记录标明 "非正式 TC", 写授权范围与实验覆盖.
- 只在批准的独立脚本与临时目录操作. 不改产品源码, 既有测试或项目配置. 配置包括构建与运行配置.
- 临时数据放仓库外临时目录, 或在记录附全文.
- 按批准范围清理临时文件与后台进程, 清理结果写进交接.
- 实验只证明内部函数在给定输入下的行为. 成品真实入口未跑, 对应产品场景仍记未运行. 不用内部结果顶替成品通过.
- 只能改冻结目标才能得出可信结论时, 停下报缺口. 例如加计数代码. 冻结目标不改, 计数代码不进产品.
- 需要新正式测试才能观察时, 停下. 交回既有用例确认流程. 不自行新增未经确认的用例.
- 接缝怎么设计由实现者决定; 调查本身不得改动冻结目标与产品源码.
完成标准: 交接有非正式 TC 标记与批准范围. 清理结果与未运行场景齐全. 需改冻结目标或加正式接缝时已报告交回, 未改产品.
6. 风险与已排除项
风险与已排除项分开写. 让读者分清可能出错与已查无事的位置.
- 风险: 写破坏方式, 真实 file:line, 概率与代价, 再给运行与观察方法. 概率和代价须有依据. 如数据分布, 调用频率, 能否重试或失败是否静默.
- 已排除项: 写查了什么, 以及排除证据或证据级别. 不靠看起来没事下结论.
- 检索无结果也是答案. 报实际命令, 路径, 符号与排除目录. 说明未找到调用者, 以及结论覆盖不到的范围. 不编造调用者, API 或文件填报告.
完成标准: 每条风险都能按写下的方法独立检查. 已排除项里没有混入未检查的猜测. 检索空结果写明了范围与边界.
7. 大或宽变更用多模型同题调查
按实际影响判断, 不按 diff 行数. 以下任一成立就算大或宽, 即使只改几十行:
- 跨多个模块或仓库.
- 改了下游会读的共享线格式, 数据库列或公共接口.
大或宽变更须做不同模型同题调查并合并. 多模型调查, 单路选择或能力缺口, 都须读 reference/multimodel.md 并按其执行. 合并与单路规则只在该文件维护. 完成标准: 大或宽的判断有依据. 多路有会话与合并记录. 单路或能力缺口已按参考文件写入交接.
8. 交接
按五部分交付. 哪部分缺就写明缺, 不用别的部分顶替:
- 做了什么: 读到的变更与历史, 查过的位置, 跑过的命令. 还要写没有覆盖到的范围.
- 关键安全事实与证据级别. 每条一句话陈述, 加级别与停下的理由. 再加证明脚本与原始输出, 或未证实的缺口.
- 风险: 位置, 概率, 代价, 检查方法.
- 已排除项: 查过并确认没事的地方.
- 合并前最便宜的复现: 一条能真跑的命令或最小脚本. 它抓住最要紧的问题, 脚本全文一起给.
只交接材料, 不自动提交或合并, 不创建 PR. 对外发出前脱敏. 成文前必须按 reference/report-style-zh.md 整理中文. 完成标准: 五部分均已列出, 缺失内容已明示. 关键事实已有证明或标未证实. 中文整理保留了证据与风险边界.
回复: 这份交接.