计划执行与检查节点
executing-plans
按既定实施计划完成工作,保持过程检查和反馈。
incident-postmortem【效率与协作】撰写结构化的故障复盘或事后回顾。当被要求写故障复盘、故障报告、P1 / P2 回顾、宕机报告或根因分析(RCA)时使用。产出不指责个人的复盘文档:时间线、根本原因、促成因素、影响摘要和行动项。项目或活动的复盘请使用 cn-fupan。
独立 GitHub 快照 · 自动分类 · 以原作者文档为准
incident-postmortem 的简体中文翻译,英文版本为规范版本。
这个技能按行业标准格式,产出一份完整、不指责个人的故障复盘文档。产出始终坚持不指责的框架(关注系统缺口而不是个人失误),并推动形成具体、可关闭的行动项,而不是含糊的流程承诺。
行动项不必只停留在纸面上:把它们交给 action-runner,它会先预览(试运行、标注风险),只通过已连接的操作类 MCP 执行你批准的内容,并把做过的事记回大脑。典型做法:为每个行动项建一个跟进任务(🟡),分配给负责人并设截止日期。这个技能只提议;由 action-runner 把关并执行,绝不悄悄进行。
故障响应主线的第三步:/slo-error-budget(框定)→ /debugging-log-analyser → incident-postmortem → /oncall-runbook。它从 /debugging-log-analyser 接收根因诊断(读它,而不是重新诊断),并把促成因素和按优先级排列的行动项交给 /oncall-runbook;/slo-error-budget 的错误预算决定这些行动有多紧急。不指责、根本原因与促成因素和行动项统一定义在 docs/craft/incident-response.md;不指责是承重的规则。
复盘一旦开始指责,就失败了:真实的数据会枯竭,以后的每次故障都会被少报。第一阶段确立这个框架;其余一切都依赖它。
/oncall-runbook 无需重新分析故障就能把发现和缓解的经验写成条目。如未提供,请向用户询问:
如果存在 professional-brain(brain/),先用它再提问:
entities/ 文件,以及相关的以往 decisions/ 或历史故障(反复出现的根本原因是最需要指出的)。decisions/,把根因经验记入 knowledge/:测量得到的原因标为 [data],怀疑的原因标为 [hunch],绝不反过来。references/root-cause-digging.md:正确使用五个为什么(停在一个可以改变的系统属性上,分成原因、发现、响应三条链)、需要逐项排查的促成因素分类,以及把指责式语言改写为系统性语言的示例。写根本原因部分时使用,也用来改写带有指责的输入笔记。templates/review-meeting-agenda.md:45 分钟、以文档为先的复盘评审会议程,附基本规则和行动项质量关卡。与完成的复盘一起提供。故障编号: [编号] 严重级别: [P1/P2/P3] 日期: [日期] 持续时间: [开始时间 → 解决时间,总时长] 状态: [已解决 / 观察中 / 进行中] 作者: [留空由用户填写] 最后更新: [日期]
[3 到 5 句。描述发生了什么、谁受到影响、做了什么来解决。写给非技术的干系人。不用术语。不指责。]
| 维度 | 详情 |
|---|---|
| 受影响用户 | [数量或百分比] |
| 降级的服务 | [列出受影响的服务] |
| 业务影响 | [收入、违反 SLA、客服工单等,如知道] |
| 持续时间 | [从首次发现到完全解决的总时间] |
按时间顺序列出事件。每条:[HH:MM UTC]:[发生了什么。谁做了什么。什么发生了变化。]
时间线条目的规则:
画出来的时间线:同时用 Mermaid 甘特图画出故障时间线,让间隔(例如发现 → 升级)一目了然(它在 Playground 中实时渲染,并可导出为 PNG)。用故障阶段作为条形;保持不指责、以系统为中心:
gantt
title Incident timeline (UTC)
dateFormat HH:mm
axisFormat %H:%M
section Phases
Undetected impact :22:00, 18m
Detection :milestone, 22:18, 0m
Investigation :22:18, 22m
Mitigation :22:40, 15m
Resolved :milestone, 22:55, 0m
主要根本原因: [一句清楚的话。技术性但通俗。"一个配置错误的部署配置导致了……"]
促成因素:
为什么现有的防护没能阻止它? [诚实的一段话,解释为什么监控、测试或流程没有更早发现。这是不指责分析最重要的地方:关注系统缺口,而不是个人失误。]
是什么修复了它? [对实际修复的清楚描述,一段] 为什么有效? [简短的技术解释] 完全解决之前有临时缓解措施吗? [是 / 否,如是请描述]
| # | 行动 | 负责人 | 截止日期 | 优先级 |
|---|---|---|---|---|
| 1 | [具体、可验证的行动] | [团队或个人] | [日期] | P1/P2/P3 |
行动项的规则:
[关于响应的 3 到 5 条真诚观察。包括:快速协作、用上了好的运维手册、有效的升级、清楚的沟通。这一部分建立团队信心,强化好习惯。]
[这次故障中值得分享给本团队以外的 3 到 5 条关键洞察。写成可迁移的经验,例如"我们的数据库故障切换手册没有考虑只读副本延迟。所有涉及数据库故障切换的手册都应复查。"]
[可选:列出已发出的对外沟通:状态页更新、客户邮件、客服回复。附时间戳。]
交付前给这个技能的任何产出打分;32 分以上才算可以交付。
| 维度 | 0 | 5 | 10 |
|---|---|---|---|
| 不指责且真实 | 点名批评,或粉饰到故事消失 | 措辞不指责,但个人的行为被模糊了 | 在系统框架内如实写出个人的行为:既诚实又安全 |
| 根因深度 | 停在症状或"人为失误" | 点出了系统缺口,但只问了一层"为什么" | 根本原因加促成因素,解释了系统为什么允许它发生,而不只是什么坏了 |
| 时间线的取证质量 | 稀疏、无序,或缺少从发现到解决的关键节点 | 完整但没有时间戳或决策点 | 有时间戳,包括发现延迟、决策点和实际排查过的死胡同 |
| 行动项问责 | 含糊的改进,没有负责人 | 分配了负责人,但事项无法建任务或没有日期 | 每个事项都可以建任务,有负责人和截止日期,并对应到一个根本原因或促成因素 |