用途
diagnose 用于查找并证明缺陷、失败测试或异常行为的根本原因。它面向无法解释的失败场景,包括流水线(pipeline)验证失败。其核心目标是建立一条可被证据支持的因果链:症状 → 机制 → 原因。
该技能明确指出:模式匹配不等于诊断。熟悉的症状只能给出一个假设;只有“证明的产物”(artifact of proof)才能把症状、机制与原因连接起来。当这条链得到支持时,诊断才算完成。如果调查无法建立该链条,则应报告剩余的不确定性以及解决它所需的证据。
主要能力
- 从已观察到的失败证据与相关代码中寻找原因。
- 确认所提供证据是否适用于受影响的版本与条件。
- 复用当前任务中已有的充分证据,无需新的本地复现即可证明原因。
- 在存在未决问题时,仅使用能够消除该不确定性的技术:
- 需要时进行复现,选择能够确认或否定假设的命令、输入与环境,并记录确切命令与输出。
- 对尝试设定边界,在重复探针前设置尝试次数或时间限制;若调用方提供了限制则复用;证据回答问题时或达到限制时停止;重复失败不会重置限制。
- 在有助于区分可能原因或提供可用回归用例时,对输入或环境进行最小化。
- 选择成本最低的区分性探针;当多个原因都符合时,选择结果能够区分它们的探针;证据已确定原因后不再虚构其他可能。
- 当现有证据不足时,补充有针对性的日志、断言或断点;保留失败状态,并考虑其对时序或行为的影响。
- 若探针无法运行或未能复现失败,记录该结果,并继续使用其他可用证据来定位原因。
- 在调查限制内仍存在不确定性时,报告已支持的环节、未决假设以及最小的缺失证据。
使用方式
该技能按以下流程组织工作:
- 建立证据:阅读提供的错误、日志、追踪、值、失败测试结果以及它们指向的代码路径;检查证据是否适用于受影响版本与条件;复用当前任务中足够的证据。已有证据可以无需新的本地复现就证明原因,此时应说明其连接关系,例如:“该追踪就是证明的产物:重试使连接保持打开,从而耗尽了连接池。”
- 解决未决问题:仅使用能解决剩余不确定性的技术(复现、有界尝试、最小化、区分性探针、补充缺失证据的插桩)。
- 修复与验证(在获得授权时):
- 说明该变更如何针对已证明的机制。
- 应用 tdd 将该机制编码为回归测试;观察修复前的预期失败与修复后的通过结果。聚焦的测试可以在不完整复现生产事故的情况下确立机制;可复用已捕获的有效失败测试证据。
- 运行受修复影响的检查并记录结果;若所需验证无法运行,报告限制并保持修复未确认状态。
- 移除诊断期间添加的临时插桩与临时复现,保留回归测试、有用的证据记录以及保护真实不变量的断言。
- 若请求仅为评估,则以诊断与证据结束,不需要实现或新的回归测试。
证据规则
- 在重启进程或清除状态前保留相关证据。
- 每个探针只改变一个变量,以便结果能识别其影响。
- 若多个代码变更都能消除症状,在声称哪个变更修复了原因之前,先隔离它们各自的影响。
- 将不受支持的因果链接标记为未解决;仅凭测试通过或症状消失不足以确立原因。
流水线模式(mode:pipeline)
在流水线模式下,不要暂停等待提问。遵循调用流水线的升级规则以及 shared/references/pr-watch-contracts.md 中的状态词汇。输出结构化结果,字段包括:
- status:fixed-and-pushed | diagnosed-no-fix | flaky-infra | needs-human
- reproduced:布尔值
- root_cause:因果链(症状 → 机制 → 原因)
- evidence:证明的产物
- fix:提交或差异,无修复时为 null
- regression_test:测试名称/路径,或 null
- residuals:数组,每项含 title 与 decision_context
关于 reproduced:仅当本次运行中观察到复现,或由提供给它的已捕获复现证据支持时,才设为 true;否则设为 false。在 evidence 中应区分“无需复现”“无法复现”或“尝试复现但未复现失败”。false 值可以伴随由日志或追踪证明的原因。若原因仍未知,在 root_cause 中说明,并在 residuals 中记录证据缺口。仅当修复已验证且授权推送成功后,才使用 fixed-and-pushed。
适用场景
- 无法解释的失败。
- 失败的测试。
- 异常行为。
- 流水线验证失败。
- 需要证明根因而非仅凭症状猜测的调查。
- 在获得授权时,需要修复并验证缺陷的场景。
限制与边界
- tdd 负责测试执行循环;已理解的失败测试留在该循环中。
- fable-mindset 负责证据姿态;本技能提供诊断技术。
- safe-incremental-coding 保护未测试的现有行为;当该行为异常且需要调查其原因时,应用本方法。
- 若无法建立完整因果链,必须报告剩余不确定性与所需证据,而不是给出未支持的结论。
- 修复仅在请求授权时应用;评估请求以诊断与证据结束。
- 若所需验证无法运行,修复保持未确认状态。
- 关于收费、价格、平台支持等具体信息,资料中暂未提供。