problem-handling · v1.0.2 · 2026-09-22 · sha256 cf33dba11efbadb3
problem-handling v1.0.2A
Immutable. This exact content never changes and is served at /api/v1/blob/cf33dba11efbadb3.
--- name: problem-handling description: >- Problem handling: one evidence-driven pipeline from a reported symptom to a shipped fix — evidence-first intake, root-cause tracing (5 Whys plus RCA tools, falsifiable experiments), cognitive-bias defenses, dual-channel research, severity grading with a P0/P1 restore-first fast path, classify and scope, workaround-vs-permanent-fix decision, TDD fix, verification, and a blameless close with known-error capture plus a 3-strikes design escalation. Use when a problem, bug, error, UX complaint, or behavior gap is reported, before jumping to a fix. NOT for: a pure code bug whose root cause is all you need — reproduce, isolate, fix. slug: problem-handling version: 1.0.2 displayName: problem-handling --- # 问题处理(Problem Handling) > 单链四阶段:**诊断 A → 分级与决策 B → 修复与验证 C → 收尾 D**。 > 铁律:**每个修复可追溯到证据**(没定位不修);**同一症状修三次就停下问设计**。 > **诊断阶段不直接修**;进入修复先分级(P0/P1 先恢复服务)。 ## 触发时机 用户反馈问题时**立即进入本流程**(不直接动手改): - 「体验完毕/体验终止」+ 反馈;「有问题/报错/卡住/失败/异常/不太对」 - 「先看看日志/记录」「分析一下」「怎么回事」「根因是什么」 - 任何 bug / UX 投诉 / 行为偏差——**先诊断、再分级、后修复** ## 核心原则 1. **证据 > 印象**——先看日志/记录/trace 还原现场,不凭印象猜 2. **根因 > 症状**——现象→根因→根因的根因(为什么×N),假设须实测证伪 3. **通用 > 特判**——不兜底/白名单穷举,找通用机制(修环境不修命令、修配置不修单例) 4. **调研 > 直觉**——多源交叉验证(≥2 独立渠道 + 官方文档 + 源码 + 实测) 5. **语境 > 抽象**——方案放当前项目/环境语境检验(多项目并行/宿主隔离/环境统一) 6. **小步 > 大改**——决策清单 → 一个一个来 7. **闭环 > 发散**——改完盘点「还剩下什么没解决」 8. **定位 > 修复**——`No fix without location`:说不清哪个组件哪步失败,就别修 9. **恢复 > 追责**——P0/P1 先恢复服务(回滚/flag/降级),根因调查可延后;复盘**无责**(追责杀死教训) 10. **不修症状**——同一症状修 3 次 → 停止,升级到设计/系统层(含环境/流程/工具的多因素) ## 阶段 A · 诊断(不直接修) **A1 现场还原(证据先行)**:先读日志/记录还原现场。证据形态按可观测性成熟度取用:结构化日志(`tail <log> | jq`)→ 关联 trace/span(按链读,不只 grep 单点)→ metrics(基线对比)→ 复现路径。**按时间顺序完整读**,找全问题(不只是眼前这一点)。 **A2 根因深挖**:现象→根因→根因的根因,每层问「为什么」;同时问**直接诱因与潜伏条件**(环境/流程/工具层)。可选 RCA 工具按复杂度取用:5 Whys(线性)→ 鱼骨图 Ishikawa(多因素)→ 故障树 FTA(条件组合)→ Kepner-Tregoe IS/IS NOT(划边界)。**实测证伪不猜**:把根因变**可证伪预期**,跑实验(倾向推翻假设的实验,Popper);二分/最小化(delta debugging)而非穷举。 - A2 是**迭代循环**:假设清单 → 逐条证伪 → 不收敛回 A2(假设被推翻 = 进展)。 - **证据不足分支**:无日志/无法复现 → 显式标 `unverified` + 向用户索取复现路径/环境;拿不到证据就不给根因结论(「无法复现」是有效结论,继续分析=编造)。 **A3 方案求真**:拒绝特判找通用机制;**双渠道尽调**(≥2 互不依赖来源一致才定);项目语境检验;完整性审视(记录?复用?单源?——解决即沉淀,KCS 视角)。 ## 阶段 B · 分级与决策 **B1 严重度分级(先分级!)** | 级 | 含义 | 响应 | |----|------|------| | **P0** | 阻断全部用户 / 数据损坏 / 安全事件 | 立即处理;**先恢复服务再深挖**;修复+验证+复盘 | | **P1** | 主要路径不可用 | 尽快;workaround 恢复优先,永久修复跟进 | | **P2** | 次要功能受损 / 体验明显劣化 | 常规,按计划修 | | **P3** | 小瑕疵 / 边缘场景 | 可排队 | - 影响面判断基于**证据**(日志/复现/报告量),不凭感觉;影响面扩大 → **升级严重度并告知相关方**。 - **Incident vs Problem(ITIL)**:P0/P1 是**事件**——先恢复(回滚/flag/降级),根因调查可延后;根因治理是**问题**——**恢复 ≠ 结束**,问题条目须继续到永久修复或裁决。 **B2 分类与范围**:类型 = 单点 / 逻辑错 / 交互 UX / 设计架构;范围 = 行 / 函数 / 模块 / 项目 → 决定修复深度(**范围纪律**:单点 bug 就一行修,不顺手重构)。 **B3 先自己想(Draft before research)**:研究用于验证/证伪,不替代思考。UX/交互类问题**必须**调研(同类产品行为 + 用户日志),不能只读代码。 **B4 workaround vs 永久修复(决策表)** | 情形 | 决策 | |------|------| | P0/P1、根因未明 | 先 workaround 恢复(回滚/flag/降级),根因调查继续 | | 根因已知但修复风险高 | workaround + 永久修复排期(**跟踪项必建**) | | 根因已知、修复小且可测 | 直接永久修复(TDD) | | 同一症状第 3 次 workaround | 停止 workaround → 升级为设计/系统问题(3 strikes) | > **workaround 是状态不是出口**:恢复服务后,永久修复保留跟踪项(ticket/audit item)直到上线验证。 ## 阶段 C · 修复与验证 - **C1 TDD**:先写**失败测试**(复现缺陷),再最小改动。 - **C2 最小改动**:按 B2 范围,不加戏。 - **C3 验证**:跑 verifier(产生 pass/fail 的检查);**全量回归保持绿**(见 `verification-before-completion`)。 - **放行控制**:修复合入前过 C3;**发布/放行是独立决策**——变更前确认**回滚预案**(改了什么可回退、回退命令)。 ## 阶段 D · 收尾 - **D1 无责复盘**:一行教训进 handoff/decision-log(追责杀死教训)。 - **D2 known-error 沉淀**:复发症状 → 建跟踪问题 + known-error 备注(下次可复用的知识)。 - **D3 回填**:ticket / handoff delta / `audit-item`(永久修复跟踪项入账,供门禁枚举)。 - **D4 3 strikes 升级**:同症状第 3 次 → 上移一层(单点→模块→设计)。 - **D5 持续盘点**:「还剩下什么没解决」——按严重度列表,用户选下一步。 ## 认知偏差防御(贯穿 A2–A3) | 偏差 | 防御 | |------|------| | 确认偏差 | 每个根因假设列**可证伪预期** + 至少一条 non-confirmatory 证据;主动找反例 | | 锚定 | A1 完整顺序读后再下结论;IS/IS NOT 划边界防过早锚定 | | 可得性 | 候选原因按**证据强度**排序,不按「刚见过」排序 | ## 输出形式 | 阶段 | 产出 | |------|------| | A | 分析汇报(现象/证据/根因/方案对比 + 反例清单)——**不修**,等确认 | | B | 分级 + 决策清单(编号 + 现象/根因/候选方案 + 推荐优先级) | | C | 失败测试 → 最小修复 → verifier/回归结果 | | D | 未解决问题盘点表(已解决 ✓ / 未解决 按严重度)+ 一行无责教训 | ## 反模式 - 收到反馈直接动手改(跳过诊断) - 只看局部不完整读记录(漏问题);停在表面症状 - 用特判/白名单穷举;单源调研当结论;假设只找支持证据 - 方案不检验项目语境;一次改一堆 - 没定位就修;改超范围;无回归检查就收尾 - workaround 无跟踪项;恢复服务就当结束(event closed, problem open) - 发布无回滚预案;复盘追责;复发不沉淀 known-error ## 与相邻技能边界 | 技能 | 边界 | |------|------| | `problem-handling`(本技能) | 端到端:诊断 → 分级 → 处置 → 收尾 | | `systematic-debugging` | **代码缺陷**路径的根因调查协议(复现→假设→验证)——本技能 A2 在代码路径内调用它 | | `verification-before-completion` | C3 验证协议——完成前验证 | | `audit-item` | D3 永久修复/跟进项入账(被 stage-gate 枚举)| | `decision-log` | D1 无责教训/语义裁定留痕 | ## 完成标准 - [ ] 已定位(组件 + 失败环节)且根因有证据(不是猜测) - [ ] 严重度已分级;P0/P1 走了恢复优先路径 - [ ] workaround(若有)有跟踪项;永久修复上线并验证 - [ ] 修复带失败测试;全量回归绿 - [ ] 收尾:无责教训一行 + 回填(ticket/handoff/audit-item)+ 剩余问题盘点 ## 方法论来源(2026-08 调研) - 证据驱动调试:Zeller delta debugging(二分最小失败输入,TSE 2002);Why Programs Fail(假设→预测→实验) - RCA 工具谱系:丰田 5 Whys、Ishikawa 鱼骨图、FTA、Kepner-Tregoe IS/IS NOT - 事故调查:James Reason Swiss Cheese;HFACS 人因分层;David Woods「root cause is a myth」;Hollnagel ETTO - SRE/ITIL:Google SRE blameless postmortem(detect→respond→remediate→recover→learn);ITIL 4 incident vs problem - 严重度:行业 P0-P3 惯例;IEEE 1044 缺陷严重度/优先级矩阵;Boehm 缺陷成本定律 - 可观测性:OpenTelemetry(logs/metrics/traces 统一与 span 关联);Honeycomb high-cardinality 调试 - 认知偏差:软件工程 confirmation bias/anchoring/availability 实证(arXiv 2508.11278) - 修复质量:修复引入回归缺陷实证(arXiv 2207.01942) - 知识沉淀:KCS(Knowledge-Centered Service)Solve/Evolve——解决即沉淀