SuperAPI AI 工具集

fable-recover

编程与开发

查看项目

更新于 10-24 19:20

技能介绍

用途

Fable Recover 针对的是智能体最容易变得昂贵且不理性的时刻:同一任务已失败多次、输出与预期矛盾,或编辑似乎毫无效果。它的目标不是“换个方法试试”,而是解释此前尝试为何失败、证伪竞争性原因,并基于新证据给出一次有依据的修复。

何时启用

  • 同一命令/测试/行为在两次实质相似的实现尝试后仍失败;
  • 输出看似陈旧,或对已知源码变更无反应;
  • 测试与运行时结果不一致;
  • 证据与某个承重假设相矛盾;
  • 失败交替出现或依赖时序/环境;
  • 智能体即将在没有新诊断信息的情况下重复某条命令或补丁。

何时不启用

  • 首次失败是当前编辑引入的简单语法/类型错误;
  • 架构本身未知且未发生重复失败(应使用 fable-discover);
  • TDD 中预期的 RED 被正确观察到;
  • 某个狭窄的审查发现已有明显且有界的修复方案。

失败分类

先对证据分类,而非对代码分类。类别包括:测试框架(断言未到达、fixture/mock/setup 错误)、环境(本地/CI/操作系统/环境变量差异)、产物/缓存(源码变更未反映)、执行路径(编辑的代码从未执行)、依赖/版本(意外的 API/运行时语义)、数据/状态(仅部分 fixture/账户/订单失败)、并发/时序(间歇性或顺序敏感)、产品逻辑(框架/路径已证实,断言持续错误)、不变量/设计(局部修复使失败转移)。在更廉价的外部解释被证伪之前,不要跳到产品逻辑。

恢复协议

  1. 冻结变更:在诊断改变前不进行新的生产编辑,保留失败状态并收集精确证据(命令/动作、精确错误/输出、工作区/提交/变更代次、已尝试的尝试及差异、预期观察)。
  2. 最小化复现:找到最小可靠复现。若失败不稳定,捕获种子/顺序/时间/环境,先解决确定性问题。
  3. 建立假设队列:创建 2-5 个可能原因,按解释全部证据的能力、近期变更下的概率、证伪成本/安全性排序。每个假设必须预测一个可区分它的观察。
  4. 走归因阶梯:优先使用最廉价的区分性探针——测试框架、环境/产物、执行路径、数据/依赖、产品逻辑、不变量/设计。阶梯是指导而非仪式,仅当现有证据已证明某层时才跳过。
  5. 观察薄弱时插桩或二分:使用狭窄的临时诊断、二分查找、单变量切换或对比已知良好/不良状态。一次只改变一个诊断维度。
  6. 证伪而非累积猜测:每次探针后拒绝假设、强化假设或修订队列。不要保留已被否定的解释。
  7. 形成修订诊断:有效诊断需解释观察到的失败为何发生、此前尝试为何未修复、什么证据将其与替代方案区分、最小修复应改变什么结果。
  8. 发出一个有界修复:返回 fable-execute 或 fable-tdd,附带一个修复和一个预期证明。若诊断揭示架构不确定性,转向 plan/discover。

决策规则

  • 除非某个具名环境/状态变量已改变,或重跑明确用于测量非确定性,否则绝不重复未改变的失败命令。
  • 在记录证据前不要反射性地删除缓存/构建产物,破坏性清理可能抹去证明陈旧性的线索。
  • 若源码变更对运行时无影响,先证明执行的产物/路径,再编辑逻辑。
  • 若仅 CI 失败,先比较环境/版本/并行度,不要假设 CI 是“随机的”。
  • 若失败是数据特定的,先最小化失败数据/状态,再广泛重构。
  • 若出现依赖/版本假设,将外部语义验证路由到 fable-research。
  • 若局部补丁使失败在组件间转移,怀疑共享不变量/设计,返回 fable-plan。
  • 相似的失败修复计为失败连续;表面语法变更不重置诊断责任。

不变量

  • 在修订诊断存在前,恢复是诊断性/只读的。
  • 每个新探针都用于区分假设。
  • 被否定的假设被移除。
  • 诊断插桩是临时的,修复后清理。
  • 最终修复有界,并绑定到预测的可观察结果。

恢复自身的失败分类

  • 盲目清理:缓存/构建重置使问题消失但根因未知,除非获得因果证据,否则记为未解决。
  • 假设蔓延:一长串可能性却没有区分性探针,排序并测试最廉价的区分器。
  • 诊断期间变更:智能体在仍不确定时编辑产品,使失败状态失效。
  • 确认偏误:只运行支持首个理论的探针,至少为首要假设添加一个证伪器。
  • 非最小复现:庞大套件/系统制造过多混杂因素,先隔离更小路径。

反模式

  • 用相同因果理论进行第三/第四次补丁;
  • “清缓存看看”而不记录前后证据;
  • 反复重跑不稳定命令直到变绿;
  • 未比较环境就归咎环境;
  • 到处添加宽泛日志;
  • 一次改变多个诊断变量;
  • 保留已被证伪的假设;
  • 解决症状却无法解释此前失败。

恢复包

失败/复现、已尝试的尝试、假设队列、探针→观察→假设效果、修订诊断、此前尝试为何失败、有界修复、修复后预期证明、残余不确定性、下一技能。

完成标准

恢复仅在以下条件满足时完成:存在足够可靠的复现或非确定性被明确表征;主要替代原因已用证据证伪;诊断与失败的假设/尝试有实质不同;提议的修复有界并预测具体改变的可观察结果;执行可在无需另一次盲目重试的情况下恢复。

渐进资源

  • 深度指南:references/diagnostic-falsification-playbook.md
  • 现有阶梯:references/attribution-ladder.md
  • 示例:examples/recovering-stale-test-cache.md