mcpField
B
backprop

backprop

github.com/juliusbrussee测试与质量1.2k2.6k 次安装11 周前更新
代码仓库

关于 backprop

backprop 是一项将缺陷或验证失败转化为代码修复及规范变更的技能。它引导开发者追查根因,并在适用时补充不变量和测试,验证修复后将相关变更一并提交。

主要功能

  1. 01追查失败的根本原因
  2. 02在规范中记录 §B 条目
  3. 03按需补充行为不变量
  4. 04为新增不变量编写测试
  5. 05验证修复及完整测试套件
  6. 06一并提交规范、测试和代码

适用场景

  1. 01修复用户报告的缺陷
  2. 02处理构建验证失败
  3. 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 都会产出:

  1. §B 条目(始终需要)。
  2. §V 条目(通常需要)。
  3. 测试文件(添加 §V 时)。
  4. 代码修复。
  5. 一次提交。

不要仪表板。不要日志文件。SPEC.md 和 git 就是完整历史。

评论

支持 Markdown