关于 backprop
backprop 是一项将缺陷或验证失败转化为代码修复及规范变更的技能。它引导开发者追查根因,并在适用时补充不变量和测试,验证修复后将相关变更一并提交。
主要功能
- 01追查失败的根本原因
- 02在规范中记录 §B 条目
- 03按需补充行为不变量
- 04为新增不变量编写测试
- 05验证修复及完整测试套件
- 06一并提交规范、测试和代码
适用场景
- 01修复用户报告的缺陷
- 02处理构建验证失败
- 03记录生产事故的经验
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ juliusbrussee/ cavekit --skill backprop安装后在 Claude Code 中输入/backprop确认已加载。
详细介绍
backprop — 从 bug 到规范
先计划后执行可以修复代码,却会忘记问题。 SDD 不仅修复代码,还会编辑规范,让问题不可能再次发生。 这种编辑就是 backprop。
何时执行 backprop
- 在
/build验证中测试失败。 - 用户报告 bug。
- 生产事故后的复盘。
/check标记为 VIOLATE,且已找到根因。
六个步骤
1. 追踪
阅读失败输出或 bug 报告。 找到行为错误的确切文件和行号。 用一句极简的话说明根因。
2. 分析
提出三个问题:
- 新增 §V 不变量能否捕获此类 bug?(最常见的情况:能)
- §I 是否有误——规范声称的形态是否是代码无法实现的?(有时)
- §T 是否有误——我们是否构建了错误的东西?(少见,但确实会发生)
3. 提议
起草规范变更。绝不跳过 §B;是否修改 §V/§I/§T 视具体情况而定。
模板:
§B row: B<next>|<date>|<root cause>|V<N>
§V line: V<next>: <testable rule that would have caught it>
示例:
§B row: B3|2026-04-20|refund job ran twice on retry|V7
§V line: V7: ∀ refund → idempotency key check before charge reversal
4. 生成测试
新增不变量却没有测试,就等于说谎。先添加失败测试。
测试命名应引用不变量:TestV7_RefundIdempotent。
5. 验证
修复代码。运行测试。必须通过。运行完整测试套件。不得引入回归。
6. 记录
将规范编辑、测试和代码修复一起提交。
提交信息:backprop §B.<n> + §V.<N>: <one-line cause>。
优质不变量的特征
- 可通过代码测试(可 grep 或断言)。
- 针对某种行为,而不是某个文件。
- 尽可能采用肯定表述(
! hold优于⊥ forbid)。 - 引用适用的 §I 表面。
不佳:V8:代码应当正确。 良好:V8:∀ pg_query ! params interpolated via driver, ⊥ string concat。
何时不添加 §V
- Bug 纯粹是机械性拼写错误,不属于任何一类(例如,在一次性代码中把
i++写成了i--)。 - 修复只是一次性迁移。
- 根因是外部依赖(应改为升级依赖,并在 §C 中注明)。
仍须追加 §B 条目,记录已考虑过这种失败模式。将来遇到类似迹象的 bug 时,搜索 §B 即可查看先例。
输出形式
每次 backprop 都会产出:
- §B 条目(始终需要)。
- §V 条目(通常需要)。
- 测试文件(添加 §V 时)。
- 代码修复。
- 一次提交。
不要仪表板。不要日志文件。SPEC.md 和 git 就是完整历史。
评论
支持 Markdown