ask-matt
Free询问哪个技能或流程适合你的情况。本仓库内技能的路由器。
The English summary is being prepared. Showing the original description.
针对棘手 bug 和性能回归的诊断循环。当用户说"诊断"/"调试这个",或报告某处崩溃/报错/不正常/缓慢时使用。
The English summary is being prepared. Showing the original description.
See how to installReview the instructions the agent will receive before you install.
针对棘手 bug 的一条纪律:只有显式说明正当理由时才能跳过某个阶段。
在探索代码库时,读取 GLOSSARY.md(如果存在)以获得相关模块的清晰心智模型,并查看你所触及区域的 ADR。
本技能会让你展示命令、输出和捕获的产物。先脱敏所有秘密:用 <REDACTED> 替换。针对环境变量构建循环,这样凭证留在环境中而不是出现在你展示的内容里。捕获的产物可能携带认证头:只引用携带信号的若干行。
如果脱敏后的输出不足以诊断 bug,要明确说明,并请用户提供更多材料。
这才是这个技能本身。 其它一切都只是机械动作。如果你对这个 bug 有一条紧密的通过/失败信号(一条会针对_这个_ bug 变红的信号),你就能找到根因;二分、假设检验、插桩都只是这条信号的消费者。如果你没有这条信号,盯着代码看到天荒地老也救不了你。
在这一步投入不成比例的精力。要激进。要有创意。绝不放弃。
git bisect run。scripts/hitl-loop.template.sh 来驱动_他们_,这样循环仍是结构化的。捕获到的输出再反馈给你。把反馈循环做对了,bug 已经解决了 90%。
把循环当作产品。一旦你有了_一条_循环,就收紧它:
30 秒的 flaky 循环只比没有循环强一点点;2 秒、确定性的循环才是真正紧凑的——是调试的超能力。
目标不是干净的复现,而是更高的复现率。把触发条件循环跑 100 轮,并行化、增加压力、收紧时窗、注入 sleep。一个 50% 复现率的 flaky bug 是可调试的;1% 不行,所以持续把复现率抬到可调试为止。
停下来,并明确说出来。列出你尝试过的所有办法。请用户提供:(a) 能复现该 bug 的环境的访问权限,(b) 一份脱敏后的捕获产物(HAR 文件、日志 dump、core dump、带时间戳的录屏),或 (c) 允许你在生产环境加临时插桩的授权。不要在没有循环的情况下进入空谈理论。
Phase 1 完成的标志是循环紧凑且能变红:你能点出一条命令(脚本路径、一次测试调用、一条 curl),并至少已经实际跑过一次(给出调用与已脱敏的输出),并且它满足:
scripts/hitl-loop.template.sh 时才在环里放一个人。如果你在写出这条命令之前就已经开始读代码、构建理论,停下:跳过假设直接行动正是本技能要防止的失败模式。 没有能变红的命令,就没有 Phase 2。
跑循环。看着它因 bug 出现而变红。
确认:
一旦它变红,就把复现例子收缩到仍然会变红的最小场景。逐个裁剪输入、调用者、配置、数据和步骤,每次裁剪后重新跑循环,只保留对失败承重的部分。
为什么要做:最小化的复现例子压缩了 Phase 3 的假设空间(剩下来需要怀疑的活动部件更少),同时在 Phase 5 中又成为干净的回归测试。
完成的标志是剩下的每个元素都承重:移除任何一项都会让循环变绿。
在复现并最小化都完成之前,不要进入下一阶段。
在测试任何假设之前,生成3–5 个排序后的假设。只生成单个假设会锚定在第一个看似合理的想法上。
每个假设必须可证伪:明确陈述它做出的预测。
格式:"如果 <X> 是原因,那么 <改变 Y> 会让 bug 消失 / <改变 Z> 会让它更严重。"
如果说不清预测,那这只是 vibe:丢掉或重新打磨它。
在测试之前把排序后的列表展示给用户。 他们经常拥有些能瞬间重新排序的领域知识("我们刚部署了一个改动到 #3"),或者知道他们已经排除掉的假设。这是个廉价的检查点,但能省下大量时间。别阻塞在用户身上;如果用户 AFK,就按你自己的排序继续推进。
每一次探测都必须对应 Phase 3 中某个具体的预测。一次只改一个变量。
工具偏好:
为每条调试日志打上唯一前缀,例如 [DEBUG-a4f2]。最后的清理就变成一次 grep。不带前缀的日志会活下来,带前缀的会死掉。
性能分支。 对性能回归,日志通常不合适。改为:先建立基线测量(计时 harness、performance.now()、profiler、查询计划),再做二分。先测,再修。
把回归测试写在修复之前,但前提是存在正确的 seam。
正确的 seam 是指测试能在调用现场触发的位置真实复现 bug 模式。如果唯一可用的 seam 太浅(单调用方测试,但 bug 需要多个调用方;unit 测试无法复现触发 bug 的整条链路),那里的回归测试只会带来虚假信心。
如果不存在正确的 seam,这就是发现本身。 记下来。代码库架构正在阻止 bug 被锁定。把这标记到下一阶段。
如果存在正确的 seam:
diff,确认修改确实生效后再相信测试结果。宣布完成前必须做的事项:
[DEBUG-...] 插桩已移除(grep 该前缀)No reviews yet. Tell others what you thought.
No login needed. Share how it worked for you, ask a question, or note where it did not run.
No comments yet. Be the first to write one.
询问哪个技能或流程适合你的情况。本仓库内技能的路由器。
The English summary is being prepared. Showing the original description.
在单次长会话中协调子智能体并安排日程,持续推进一项长期目标。
The English summary is being prepared. Showing the original description.
把当前对话交接给一个全新的后台 agent,让它立刻接手工作。
The English summary is being prepared. Showing the original description.
从固定点(commit、branch、tag 或 merge-base)开始,沿两条轴线审查变更——规范(代码是否遵循仓库文档化的编码规范?)和规格(代码是否与原始 issue/PRD 的要求一致?)。两条审查线在并行子 agent 中运行,并以并排方式报告结果。当用户想审查一个分支、PR、进行中的变更,或要求"从 X 开始审查"时使用。
The English summary is being prepared. Showing the original description.
设计深度模块的共享词汇。当用户想要设计或改进模块的接口、寻找深化机会、决定 seam 的位置、让代码更可测试或更易被 AI 导航,或者其他 skill 需要深度模块词汇时使用。
The English summary is being prepared. Showing the original description.
构建和完善项目的领域模型。当讨论代码库术语、编写或编辑 GLOSSARY.md,或记录或编辑 ADR 时使用。
The English summary is being prepared. Showing the original description.