diagnosing-bugs
面向棘手缺陷和性能回退的诊断闭环。适用于用户要求“诊断”“排查”“debug”,或报告功能损坏、抛出异常、运行失败、响应缓慢时。
التثبيت باستخدام Codex أو Claude انسخ هذا Prompt والصقه في Codex أو Claude أو مساعد آخر ليراجع صفحة Skill ويثبّتها لك.
القائمة
面向棘手缺陷和性能回退的诊断闭环。适用于用户要求“诊断”“排查”“debug”,或报告功能损坏、抛出异常、运行失败、响应缓慢时。
التثبيت باستخدام Codex أو Claude انسخ هذا Prompt والصقه في Codex أو Claude أو مساعد آخر ليراجع صفحة Skill ويثبّتها لك.
استنادا إلى تصنيف SOC المهني
使用并行 sub-agents 为一个 module 生成多套差异显著的 interface 设计。适用于用户希望设计 API、探索 interface 选项、比较 module 形态,或提到“design it twice”的场景。
运行交互式 QA session:用户通过对话报告 bugs 或 issues,agent 随后创建 GitHub issues;同时在后台探索 codebase,获取上下文和 domain language。适用于用户希望报告 bugs、开展 QA、通过对话创建 issues,或提到“QA session”的场景。
通过用户访谈创建一份由微小 commits 组成的详细 refactor plan,并将其提交为 GitHub issue。适用于用户希望规划 refactor、创建 refactoring RFC,或将 refactor 拆分为安全的增量步骤。
从当前对话中提取一份 DDD 风格的 ubiquitous language glossary,标出歧义并提出规范术语,保存到 UBIQUITOUS_LANGUAGE.md。适用于用户希望定义 domain terms、建立 glossary、收紧术语、创建 ubiquitous language,或提到“domain model”或“DDD”的场景。
询问当前情境适合使用哪个 Skill 或工作流。本 Skill 是仓库内其他 Skills 的路由入口。
从用户指定的固定点(commit、branch、tag 或 merge-base)开始,从两个维度审查代码变更:Standards 检查代码是否遵守仓库记录的编码规范,Spec 检查实现是否符合原始 Issue、PRD 或规格。两个审查由并行子 Agent 分别完成,再并列汇报。适用于用户希望审查分支、PR、开发中的改动,或要求“审查自 X 以来的变更”时。
| name | diagnosing-bugs |
| description | 面向棘手缺陷和性能回退的诊断闭环。适用于用户要求“诊断”“排查”“debug”,或报告功能损坏、抛出异常、运行失败、响应缓慢时。 |
这是一套处理棘手缺陷的纪律。只有在明确说明理由时,才可以跳过某个阶段。
探索代码库时,先读取 CONTEXT.md(如果存在),建立对相关模块的清晰认识;同时检查所涉及区域的 ADR。
这一步就是整个 Skill 的核心。 其余工作都只是机械执行。只要拥有一个针对当前缺陷的紧密通过/失败信号,并且这个信号会在当前缺陷上变红,就一定能够找到原因;二分定位、假设检验和插桩都只是利用这个信号。没有这样的信号,盯着代码看再久也无济于事。
在这一阶段投入远高于其他阶段的精力。积极尝试,发挥创造力,不要放弃。
git bisect run。scripts/hitl-loop.template.sh 引导人执行,使闭环仍保持结构化。捕获到的输出应回传给你。建立正确的反馈闭环后,缺陷已经解决了九成。
把闭环当作一个产品。建立出一个闭环后,继续将它收紧:
一个需要 30 秒且结果不稳定的闭环,几乎和没有闭环一样;一个 2 秒即可稳定给出结论的闭环才足够紧密,这会成为调试中的强大能力。
这里追求更高的复现率,无需等待一次完全干净的复现。循环触发 100 次、并行执行、增加压力、缩窄时序窗口、注入 sleep。复现率达到 50% 的偶发问题可以调试,只有 1% 时则很难。持续提高复现率,直到它能够支撑调试。
停止,并明确说明当前情况。列出已经尝试的方法。向用户请求以下任一项:(a) 能够复现问题的环境访问权限;(b) 已捕获的产物,例如 HAR 文件、日志转储、core dump、带时间戳的录屏;(c) 在生产环境中加入临时插桩的许可。没有闭环时,不得进入假设阶段。
阶段 1 的完成条件是:闭环足够紧密且具备变红能力(red-capable)。你能够指出一条命令,例如脚本路径、测试命令或 curl;已经至少亲自运行过一次,并贴出命令和输出;同时满足以下条件:
scripts/hitl-loop.template.sh 完成。如果在这条命令存在之前,你已经开始阅读代码并构建理论,立即停止。直接跳到假设,正是本 Skill 要防止的失败。 没有能够变红的命令,就不能进入阶段 2。
运行闭环,观察它变红,也就是让缺陷出现。
确认:
闭环变红后,将复现场景缩减成仍然会变红的最小场景。逐项削减输入、调用方、配置、数据和步骤;每次只删一项,随后重新运行闭环。最终只保留对失败不可或缺的部分。
最小复现会缩小阶段 3 的假设空间,减少需要怀疑的活动部件;它还会在阶段 5 中成为干净的回归测试。
完成条件是:所有剩余元素都不可或缺,删除其中任意一项都会让闭环变绿。
在完成复现和最小化前,不得继续。
在验证任何假设前,先生成 3~5 个按可能性排序的假设。只提出一个假设会让判断锚定在最早出现的合理想法上。
每个假设必须可以证伪,并明确写出它作出的预测。
格式:“如果 是原因,那么改变 会让缺陷消失,或改变 会让缺陷更加严重。”
无法写出预测的想法只是一种感觉;删除它,或把它打磨成可验证假设。
开始验证前,把排序后的列表展示给用户。 用户通常掌握能够立即改变排序的领域信息,例如“我们刚部署了与第 3 项有关的改动”,也可能知道哪些假设已经排除。这是成本很低、节省时间很多的检查点。不要因此阻塞执行;用户暂时离开时,继续按照你的排序推进。
每次探测都必须对应阶段 3 中的一项具体预测。每次只改变一个变量。
工具优先级:
为每条调试日志添加唯一前缀,例如 [DEBUG-a4f2]。结束时只需一次 grep 即可清理。没有标签的日志容易残留;带标签的日志必须删除。
性能分支。 对性能回退而言,日志通常不是正确工具。应先建立基线测量,例如计时支架、performance.now()、profiler 或查询计划,然后再进行二分。先测量,再修复。
在修复前编写回归测试,但前提是存在正确的 seam。
正确 seam 应让测试按照调用现场中的真实形态触发缺陷。唯一可用的 seam 过浅时,例如缺陷依赖多个调用方,而测试只能覆盖单个调用方;或单元测试无法重现触发问题的调用链,在那里编写回归测试只会制造虚假信心。
如果不存在正确 seam,这本身就是调查结论。 记录下来。代码库架构正在阻止你锁定该缺陷,并应在下一阶段明确标记。
存在正确 seam 时:
宣布完成前,必须满足:
[DEBUG-...] 插桩均已删除,并通过 grep 检查前缀随后追问:怎样才能从源头避免这个缺陷? 如果答案涉及架构变化,例如缺少良好测试 seam、调用关系纠缠或存在隐性耦合,应带着具体发现把后续工作交给 /improve-codebase-architecture Skill。必须在修复完成后再提出这项建议;此时掌握的信息远多于刚开始时。