--- name: think-evidence description: 思维模型:用确定性证据说话。每个结论带证据或标签:量过的、推出的、猜的;证据要真的检验了它声称检验的东西,缓存命中、替身、被跳过的步骤和自己或子代理的自述都不算;证真交给证明,证伪交给测试,新测试先看它变红,完成只认 spec 的验收标准。准备说「做完了」「通过了」「是这个原因」、读子代理的交回、写验收或回看结论时加载;人说「证据呢」「先看它变红」「别信自述」,或点名 /think-evidence 时也加载。只是复述人刚给的事实不加载。 --- # 用确定性证据说话 回答的问题:怎么知道它是真的。确定性证据是「换一个人照着做,会得到同样结论」的东西,例如一条命令、它的退出码和输出尾部。自述不是,例如子代理说「测试都过了」。结论只和它的证据一样可靠。 ## 三句动作 1. **每个结论带证据或标签:量过的、推出的、猜的。** 量过的贴命令与输出;推出的写前提;猜的写成猜,并写怎样验证它。 2. **证据要真的检验了它声称检验的东西。** 缓存命中、替身、被跳过的步骤、自己或子代理的自述,都不算。先看那一步这次有没有真的执行。 3. **证真交给证明,证伪交给测试。** 测试只能发现缺陷,不能承诺没有缺陷;证明能在它的前提与上界内承诺。新测试先看它变红。完成只认 spec 的验收标准。 证据不够时,结论写成「未验证」,不写成「通过」。 ## 各类工作里怎么用 | 这类工作 | 证据是什么 | 不算证据的 | 展开 | | --- | --- | --- | --- | | 验收一个切片 | spec 验收标准逐条的命令、输出尾部、文件 | 「测试都绿了」一句话;被测实现自己报的结果 | [验收与交回](acceptance.md) | | 读子代理的交回 | 分支头、提交、自己复跑的命令与输出 | 交回里的结论与摘要 | [验收与交回](acceptance.md) | | 写一条新测试 | 它在改坏的代码上变红,还原后变绿 | 第一次跑就绿 | [测试与证明](tests-and-proofs.md) | | 形式化 | 模型在故意破坏的变体上报错;性质、前提与上界分开写 | 证明工具正常退出 | [测试与证明](tests-and-proofs.md) | | 定位问题 | 只差一个量的两次运行 | 「上次是好的」「构建能过」 | [什么算证据](what-counts.md) | | 性能结论 | 同一台机器、同一负载下的测量,带次数与波动 | 一次运行;缓存命中的运行 | [什么算证据](what-counts.md) | ## 写在哪 不新开文档。证据写在本来就要写的产出里:收口清单的「证据」一列、交回的原始结果、形式化建议单的「能失败的证据」、回看记录的信号。没有产出的小活,在回复里每个结论后标「量过」「推出」或「猜」。 ## 什么时候必须重做 - 准备写「通过」,手里只有一个退出码 0。 - 证据来自被测实现自己报的结果。 - 一个结论只有子代理的自述。 - 新测试第一次跑就是绿的。 - 那一步这次其实没执行:命中缓存、被跳过、跑的是替身。 ## 相邻的模型 `think-ought-vs-is`:这件事的工作到底是什么。`think-orthogonal`:这个问题的空间怎么拆。`think-model-first`:代码该长成什么形状。`think-right-then-well`:按什么顺序建,怎样算好。`think-closed-loop`:这件事该由谁做,一次做多大,多久看一次;转出去的结果怎么验,归本模型。