这个 Skill 的作用是 像医生看病一样做 bug 诊断:
experience/ 目录下翻阅以前遇到过的类似 bug, 作为经验记忆参考BUGxx.md 写进案例库,供下次 参考核心价值:让过往踩坑的经验 启发 下次排查的方向,但不替代独立思考。相似症状不一定是同一个 bug,看起来一样的日志背后可能是完全不同的根因。
这是本 Skill 最核心的使用原则。
案例库里的 BUGxx.md 是 老医生的病历本,不是 处方模板。拿到新患者:
场景错误做法正确做法症状匹配度高"这是 BUG01,改 invokeRemoteDeviceOpt 加 x-token-payload""你描述的现象让我想起 BUG01 的一个特征——副本间日志不对称。建议你 先验证:跨副本日志是否真的有'一个有栈一个没栈'?如果是,再顺着这个方向查"部分特征命中"虽然不完全一样,但按 BUG01 的方案应该能修""BUG01 里 有个排查技巧可能适用——连续请求 100 次看成功率是不是约 1/N。先用这个验证一下是不是副本间状态不一致的问题"案例里有具体代码把 BUG01 的修复代码贴给用户让他照抄"BUG01 的修复思路是补齐 header 透传,但具体到你的项目,要先确认:(1) 你的接收端实际依赖哪些 header?(2) 序列化方式是否和入口一致?这些答完才能写代码"
text
bug-pattern-diagnosis/
├── SKILL.md ← 本文件(职责、流程、匹配规则)
└── experience/ ← 案例库
├── BUG01.md ← 每个案例一个文档
├── BUG02.md
└── ...
每个 BUGxx.md 都按固定结构写,方便快速检索:
用户描述下列类型的问题时,优先启用本 Skill:
读取 experience/ 目录下 所有 BUG*.md 文件的" 症状 / 特征速查"章节(每个文件的前 30-50 行通常就够),不要一开始读完整文件。
从用户描述里提取 关键特征,至少覆盖以下维度:
维度例子错误信号NPE / 500 / 403 / 超时 / 数据错 / 死锁复现率100% / 50% / 偶发 / 特定条件环境差异本地不复现?测试复现?生产复现?多实例特征单副本 / 多副本?副本数是几?日志分布集中在一个实例 / 分散在多个实例 / 一个有栈一个没栈触发条件特定用户 / 特定参数 / 特定时段最近改动发版?配置变更?扩容缩容?依赖升级?
把结构化特征和案例库逐个 比对相似度,但 不要 据此下结论。无论相似度多高,案例都只是**"值得参考的既往经验"**,不是"确定的答案"。
相似度处理原则:
不要 以"这是 BUGxx"的口吻下定论。要以"过往有类似案例,以下是 可能的方向和验证方法"的口吻交流。
推荐的响应结构:
text
❌ "根据你描述的症状,这是 BUG01(多副本间歇性 NPE)。
根因是 invokeRemoteDeviceOpt 漏传 x-token-payload。
按以下代码改动即可:[直接贴 BUG01 里的代码]"
text
✅ "你的描述有几个特征值得注意:
1) 间歇性失败,成功率似乎接近 50%
2) 日志似乎是 token 相关但客户端明明带了 token
这让我想起过去排查的 BUG01,那个案例里类似症状的背后是
'多副本内部调用漏传身份 header'。但你的项目未必是同一个
问题,**我建议先验证几个关键假设**:
Q1: 你的服务副本数是几?成功率是否约等于 1/N?
Q2: 能否同时 tail 所有副本日志,看失败请求是否同时在
多个副本留痕、且日志详尽程度不对称?
你先做这两个验证,结果告诉我之后,我们再决定排查路径。"
当出现以下情况时, 主动询问用户 是否把本次排查固化成新案例:
用户同意后,按" 案例文档结构"(下方模板)创建 BUGxx.md(编号按当前最大编号 +1)。
按以下顺序排查陌生 bug:
1/N 或 (N-1)/N?.class 用 javap -c -p 反编译,和本地源码比对如果怀疑上下文传播问题:
getHeaderNames() 验证实际传递的 headermarkdown
# BUGxx: <一句话标题,突出最特征性症状>
## 案例摘要
<一段话,200 字内。点明:现象、复现条件、根因类型、影响范围>
## 症状 / 特征速查(用于匹配)
> 遇到下列特征同时满足 N 条以上时,高概率是本案例
- [ ] 特征 1(具体、可验证)
- [ ] 特征 2
- [ ] 特征 3
- [ ] ...
### 关键日志指纹
<贴出典型的错误日志片段,让后续可以直接 grep 匹配>
### 不会出现的反向特征(排除项)
- 如果出现 <xxx>,则不是本案例
## 详细说明 / 根因链路
<病理机制。用图/表格/代码引用说明数据流、控制流、状态变化>
## 排查方法论
### 使用到的技术
- <方法 1:例如"跨副本日志对照">
- <方法 2:例如"javap 字节码比对")>
- ...
### 诊断步骤(按顺序)
1. ...
2. ...
3. ...
## 修复方案
### 根治
<核心修复点、代码示例、影响面评估>
### 兜底 / 防御
<二线防御措施,防止根治漏掉时仍不崩>
### 加固 / 清理
<长期性改进,代码规约、同类代码扫描>
## 预防清单(Checklist)
开发阶段:
- [ ] ...
部署阶段:
- [ ] ...
Review 阶段:
- [ ] ...
## 同类间歇性 bug 的 Playbook
遇到类似现象时按此顺序走:
1. 定量复现(10 分钟)
2. 查拓扑(5 分钟)
3. 日志对照(30 分钟)
4. ...
## 参考资料
- 相关文件路径
- 相关 PR/commit
- 相关 wiki
BUGxx.md 里的代码片段当成"现成答案"贴给用户。案例代码只是"那个项目的修法",不一定适合当前项目。