| name | debug-audit-on-second-miss |
| description | Bug 修复 / 排查场景,连续 2 次假设或 patch 没命中根因时强制停手出 audit。Use when 同一 bug 已经试过 ≥2 次修复、症状仍在或换了形态再现、即将动「第 3 刀」时;触发关键词:「还是有这个问题」「又出现了」「同样的报错」「再试一次」「这次应该」。不适用于一次就 reproduce + 一次修好的场景。 |
| provenance | user-authored |
Debug Audit on Second Miss
When to Use
- 同一 bug / 症状,已经动过 ≥2 次修复(patch / 配置改 / 逻辑改),症状仍在或换了形态再现
- 即将下「第 3 刀」之前
- 用户出现「还是 / 又 / 还是不行 / 同样的报错 / 这次应该」等信号
- 自己心里冒出「再试一次说不定就中了」「应该是 X」但没有新证据时
不适用:第一次 reproduce + 一次修好;不同 bug 的连续修复;用户明确说「先继续打补丁,等下再回头看」。
强制动作
第 2 次 patch 没命中那一刻立即停手,不要起第 3 个修改。改为输出 audit:
## Bug Audit
- 症状(当前观察到的、可重现的):
- 已试假设 1 → patch → 结果(哪里没命中):
- 已试假设 2 → patch → 结果:
- 已排除的方向(基于上面两次结果可以确定不是的):
- 当前怀疑面(≤3 个,按可能性排序):
- 下一步建议(每个怀疑面对应的诊断动作,不是修复动作):
发完 audit 等用户拍方向,再动第 3 刀。诊断动作(加日志 / 打断点 / 复现脚本 / 读源码)≠ 修复动作(改代码)。
触发器自检
每次准备改代码修 bug 前问自己:
- 这是同一个 bug 的第几次尝试?
- 上一次假设错在哪?我有新证据,还是又在猜?
- 如果只剩下 1 次 patch 机会,我会下这刀吗?
第 1、2 个问题答不上来 → 已经在猜 → 走 audit。
Gotchas
- audit 不是「装作严肃」的形式——空着「已排除方向」直接列「当前怀疑面」是无效 audit。每次失败必须回填「这次排除了什么」,否则下次又在同一片区猜
- 「换个角度试试」「这次应该」「我感觉是 X」全是猜的语言信号,出现就停
- 用户主动喊停(「我们一直在猜的样子」「先停一下」)= audit 触发器已迟到一步,立即出 audit 不要再辩
- 别把 audit 写成「我做了什么」流水账。要写「假设 → 验证结果 → 排除/保留」