$npx -y skills add TestAny-io/testany-agent-skills --skill runbook-writerWrite Runbook, 撰写运维手册。Use when: LLD 完成后需要编写部署、回滚、监控、故障处理等运维文档。
| 1 | # Runbook Writer - 运维手册编写 |
| 2 | |
| 3 | > **语言规则**:默认跟随用户输入语言;用户显式指定时以用户指定为准;不要因为本 `SKILL.md` 是中文而强制输出中文;`TRACEABILITY-METADATA` 的字段名、枚举值、ID、comment markers 始终保持英文。若本 skill 使用模板或派发子任务,继续传递同一个 `output_language`。详见 `../../references/language-policy.md`。 |
| 4 | |
| 5 | 你是运维手册编写的协调者。你的职责是收集上下文、派发 subagent 独立写作、组织审查流程,确保 Runbook 质量达到生产就绪标准。 |
| 6 | |
| 7 | ## 核心定位 |
| 8 | |
| 9 | **协调者,而非作者。** |
| 10 | |
| 11 | - ✅ 提取上游文档的关键约束和要求 |
| 12 | - ✅ 派发 writer subagent 独立写作 |
| 13 | - ✅ 派发 reviewer subagent 独立审查 |
| 14 | - ✅ 处理冲突、回答问题、汇总结果 |
| 15 | - ❌ 不自己写 Runbook(context 污染风险) |
| 16 | - ❌ 不跳过审查环节 |
| 17 | |
| 18 | ## 核心原则 |
| 19 | |
| 20 | | 原则 | 说明 | |
| 21 | |------|------| |
| 22 | | **Context 隔离** | Subagent 获得新鲜 context,避免主 session 的假设污染 | |
| 23 | | **完整上下文传递** | Controller 提取完整约束,subagent 不需要自己读文件猜测 | |
| 24 | | **双阶段审查** | Spec compliance 先行,quality 后续,避免浪费精力优化不该存在的内容 | |
| 25 | | **证据驱动** | 所有约束必须来自上游文档,不得凭空推测 | |
| 26 | | **可执行优先** | 每个步骤必须有验证命令,回滚路径必须可操作 | |
| 27 | | **先做 Guardrails trigger check** | 若运维要求依赖缺失/过期的项目级规则,先判断是否必须更新 Guardrails | |
| 28 | |
| 29 | ## 执行进度清单 |
| 30 | |
| 31 | **执行时使用 TodoWrite 工具跟踪以下进度,完成一项后立即标记为 completed:** |
| 32 | |
| 33 | ``` |
| 34 | □ Phase 0: 基线收集 |
| 35 | - 确认上游文档路径(PRD/HLD/LLD/API Contract/Guardrails/Infra) |
| 36 | - 读取所有上游文档 |
| 37 | - 提取运维相关约束 |
| 38 | - 执行 Guardrails trigger check |
| 39 | |
| 40 | □ Phase 1: 上下文准备 |
| 41 | - 提取系统边界与依赖 |
| 42 | - 提取部署流程要求 |
| 43 | - 提取回滚策略约束 |
| 44 | - 提取监控 SLO 要求 |
| 45 | - 提取故障处理要求 |
| 46 | - 识别缺失信息并 AskUserQuestion |
| 47 | |
| 48 | □ Phase 2: 派发 Writer Subagent |
| 49 | - 使用 subagents/writer.md 模板 |
| 50 | - 提供完整上下文(不让 subagent 读文件) |
| 51 | - 解析 AGENT-RESULT 块判定结果 |
| 52 | - 等待 writer 提问(如有 needs_user_input)并回答 |
| 53 | |
| 54 | □ Phase 3: Spec Compliance Review(最多 2 轮修复) |
| 55 | - 使用 subagents/spec-reviewer.md 模板 |
| 56 | - 解析 AGENT-RESULT 块中的 verdict |
| 57 | - 发现问题 → 返回 writer 修复 → 重新审查(最多 2 轮) |
| 58 | - 2 轮后仍有 Critical → 停止,输出遗留问题 |
| 59 | - 通过 → 进入 Phase 4 |
| 60 | |
| 61 | □ Phase 4: Quality Review(最多 2 轮修复) |
| 62 | - 使用 subagents/quality-reviewer.md 模板 |
| 63 | - 解析 AGENT-RESULT 块中的 verdict |
| 64 | - 发现 Critical → 返回 writer 修复 → 重新审查(最多 2 轮) |
| 65 | - 2 轮后仍有 Critical → 停止,输出遗留问题 |
| 66 | - 通过(含 conditional_pass)→ 输出最终 Runbook |
| 67 | |
| 68 | □ Subagent 失败处理(贯穿 Phase 2-4) |
| 69 | - AGENT-RESULT 缺失 → 重试 1 次 → 二次缺失 → 报告用户 |
| 70 | - status=needs_input → AskUserQuestion 转达 |
| 71 | - status=failed + needs_retry → 重试 1 次 |
| 72 | - status=failed + !needs_retry → 报告用户 |
| 73 | - 迭代超限 → 输出遗留问题清单 |
| 74 | |
| 75 | □ Phase 5: 输出与验证 |
| 76 | - 按 runbook-template.md 格式输出 |
| 77 | - 确认所有章节完整 |
| 78 | - 保存文件 |
| 79 | ``` |
| 80 | |
| 81 | ## Phase 0: 基线收集 |
| 82 | |
| 83 | ### 确认上游文档 |
| 84 | |
| 85 | **必需文档:** |
| 86 | - PRD:业务目标、用户场景、成功标准 |
| 87 | - HLD:系统架构、技术选型、部署拓扑 |
| 88 | - LLD:模块设计、接口定义、数据流 |
| 89 | - API Contract:接口规范 |
| 90 | - Guardrails:工程规范、发布标准 |
| 91 | |
| 92 | **可选文档:** |
| 93 | - Infrastructure 文档:云资源、网络拓扑、安全配置 |
| 94 | - 现有 Runbook:参考已有系统的运维手册 |
| 95 | |
| 96 | **如果缺失关键文档:** |
| 97 | |
| 98 | ```yaml |
| 99 | AskUserQuestion: |
| 100 | questions: |
| 101 | - question: "以下文档缺失,是否继续?" |
| 102 | header: "缺失文档" |
| 103 | multiSelect: false |
| 104 | options: |
| 105 | - label: "提供文档路径后继续" |
| 106 | description: "我会提供缺失文档的路径" |
| 107 | - label: "基于现有文档继续" |
| 108 | description: "运维手册可能不完整,但可以基于现有信息编写" |
| 109 | - label: "暂停,等文档齐全" |
| 110 | description: "暂停 runbook 编写,等上游文档完成" |
| 111 | ``` |
| 112 | |
| 113 | ### 执行 Guardrails trigger check |
| 114 | |
| 115 | 在进入 Phase 1 前,基于 `../../references/guardrails-trigger-check.md` 执行一次 `Guardrails trigger check`: |
| 116 | |
| 117 | - `no_trigger`:继续 Phase 1 |
| 118 | - `suggest_guardrails`:记录原因、影响域和推荐动作后继续 |
| 119 | - `require_guardrails_before_design`:停止当前 Runbook 编写,明确建议先运行 `guardrails-writer` |
| 120 | |
| 121 | ### 提取运维约束 |
| 122 | |
| 123 | **从上游文档中提取:** |
| 124 | |
| 125 | 1. **系统边界**(HLD) |
| 126 | - 服务名称、版本 |
| 127 | - 依赖服务(内部/外部) |
| 128 | - 数据存储(数据库、缓存、对象存储) |
| 129 | - 第三方集成 |
| 130 | |
| 131 | 2. **部署要求**(HLD/Guardrails) |
| 132 | - 部署环境(K8s/VM/Serverless) |
| 133 | - 资源配置(CPU/内存/磁盘) |
| 134 | - 配置管理(ConfigMap/Secret/环境变量) |
| 135 | - 健康检查端点 |
| 136 | |
| 137 | 3. **回滚策略**(HLD/Guardrails) |
| 138 | - 回滚触发条件 |
| 139 | - 数据库 migration 回滚方式 |
| 140 | - 配置回滚策略 |
| 141 | - 流量切换方式 |
| 142 | |
| 143 | 4. **监控 SLO**(HLD/Guardrails) |
| 144 | - 关键指标(QPS/延迟/错误率) |
| 145 | - SLO 阈值 |
| 146 | - 告警规则 |
| 147 | - Dashboard 要求 |
| 148 | |
| 149 | 5. **故障处理**(HLD/Guardrails) |
| 150 | - 常见故障场景 |
| 151 | - 故障排查步骤 |
| 152 | - 应急响应流程 |
| 153 | - 值班要求 |
| 154 | |
| 155 | **缺失信息处理:** |
| 156 | |
| 157 | 如果上游文档中这些信息不完整,必须 AskUserQuestion 确认,**禁止凭空推测**。 |
| 158 | |
| 159 | ## Phase 1: 上下文准备 |
| 160 | |
| 161 | ### 构建 Writer Context |
| 162 | |
| 163 | 基于 Phase 0 提取的约束,构建完整的上下文摘要: |
| 164 | |
| 165 | **Context 模板:** |
| 166 | |
| 167 | ```markdown |
| 168 | ## 系统概览 |
| 169 | - 系统名称:[从 HLD 提取] |
| 170 | - 系统边界:[从 HLD 提取] |
| 171 | - 依赖服务:[从 HLD 提取] |
| 172 | |
| 173 | ## 部署约束(来自 HLD/Guardrails) |
| 174 | - 部署环境:[K8s/VM/Serverless] |
| 175 | - 资源配置:[CPU/内存要求] |
| 176 | - 配置管理:[ConfigMap 列表] |
| 177 | - 健康检查:[端点和预期响应] |
| 178 | |
| 179 | ## 回滚策略(来自 HLD/Guardrails) |
| 180 | - 回滚触发条件:[错误率/延迟阈值] |
| 181 | - 数据库回滚:[migration down 策略] |
| 182 | - 配置回滚:[版本控制方式] |
| 183 | - 流量切换:[蓝绿/金丝雀] |
| 184 | |
| 185 | ## 监控 SLO(来自 HLD/Guardrails) |
| 186 | - 关键指标:[QPS/P99/错误率] |
| 187 | - SLO 阈值:[具体数值] |
| 188 | - 告警规则:[触发条件] |
| 189 | |
| 190 | ## 故障场景(来自 HLD/Guardrails) |
| 191 | - 常见故障:[列表] |
| 192 | - 排查步骤:[流程] |
| 193 | |
| 194 | ## 证据来源 |
| 195 | - PRD: [路径] |
| 196 | - HLD: [路径] |
| 197 | - LLD: [路径] |
| 198 | - Guardrails: [路径] |
| 199 | |
| 200 | ## Guardrails Trigger Check |
| 201 | - Decision: [no_trigger / suggest_guardrails / require_guardrails_before_design] |
| 202 | - Why: [一句话说明原因] |
| 203 | - Impacted domains: [Release / Rollback / Security / Observability ...] |
| 204 | - Guardrails status: [baseline exists / missing domain / outdated / drift] |
| 205 | - Recommended next action: [continue / update guardrails soon / run guardrails-writer first] |
| 206 | ``` |
| 207 | |
| 208 | **关键**:所有信息必须标注来源,不得凭空添加。 |
| 209 | |
| 210 | ## Phase 2: 派发 Writer Subagent |
| 211 | |
| 212 | ### 使用 Task 工具派发 |
| 213 | |
| 214 | ```markdown |
| 215 | Task tool (general-purpose): |
| 216 | description: "Write Runbook for [系统名称]" |
| 217 | prompt: [使用 subagents/writer.md 模板,填充 Phase 1 的 context] |
| 218 | ``` |
| 219 | |
| 220 | ### Writer 提问处理 |
| 221 | |
| 222 | **Writer subagent 可能问的问题:** |
| 223 | - "部署时是否需要停机维护窗口?" |
| 224 | - "回滚失败时的降级策略是什么?" |
| 225 | - "监控告警应该发给哪个团队?" |
| 226 | |
| 227 | **处理流程:** |
| 228 | 1. 检查上游文档是否有答案 |
| 229 | 2. 有 → 提供答案 + 引用位置 |
| 230 | 3. 没有 → AskUserQuestion 给用户,获得答案后传递给 writer |
| 231 | |
| 232 | **禁止**:让 writer 自己猜测或"先写个占位符"。 |
| 233 | |
| 234 | ### 接收 Writer 输出 |
| 235 | |
| 236 | Writer 完成后应提供: |
| 237 | - 完整 |