## 容灾演练任务清单跟踪 {.case data-case-id="072"}

| 字段 | 值 |
| --- | --- |
| 案例编号 | `072` |
| 行业 / 部门 | 金融 / 运维 |
| 角色 | SRE 负责人 |
| 难度 | `复杂` |
| 调用来源 | `manual`（演练计划确认后由 SRE 负责人发起一次手动调用，带入演练清单） |

<!-- slot: 目标 -->
容灾演练动辄几十个步骤，切换、验证、回切分属不同团队，靠群里刷屏接龙跟踪，谁做到哪一步、回切有没有完成全靠人盯。目标：演练计划确认后，由 SRE 负责人发起一次手动调用，带入演练清单，工作流逐项跟踪各步骤（切换/验证/回切）的完成情况，逐步发回执留时间戳与执行人，证据留痕；有卡点时通知步骤 Owner 与 SRE 负责人跟进。设一条最高优先级红线：演练结束前回切未确认，一律禁止宣告演练完成，强制人工确认收尾。指标：演练步骤回执 100% 带执行人与时间戳；回切未确认而被宣告完成的为 0 例。

<!-- slot: 边界 -->
- **覆盖**：逐项跟踪演练步骤完成、逐步发回执留时间戳与执行人、卡点通知步骤 Owner 与 SRE 负责人、回切未确认强制收尾确认、全部完成后发演练报告回执。
- **不覆盖**：自动执行切换/验证/回切等演练动作（执行由 SRE 在对应系统完成，工作流只编排跟踪与通知）、演练计划制定、演练环境准备。
- **假设**：演练清单由 App/Extension 在调用源头白名单化为步骤代号、类别（切换/验证/回切）、步骤 Owner 内部标识（受控令牌：权限受控且 Agent 无法反查原值；展示名仅由下游授权 App 发送时回填）与每步骤截止时间，并签发不可由 Agent 修改的 `checklist_ref` 与预期步骤集合；集合非空、step_code 唯一且至少含一个回切步骤。演练环境与系统名在源头即被伪名化为代号，代号映射由平台侧持有，不进入本工作流。

<!-- slot: 提示词 -->
把下面这段发给 Loop，它会在后台帮你创建这个 Workflow：

```text
帮我创建一个 Workflow：演练计划确认后由 SRE 负责人发起一次手动调用，App/Extension 先在源头把演练清单白名单化——只放行步骤代号、类别（切换/验证/回切）、步骤 Owner 内部标识（受控令牌：权限受控且 Agent 无法反查原值；展示名仅由下游授权 App 发送时回填）、每步骤截止时间与超时阈值，演练环境与真实系统名在源头即被伪名化为代号（代号映射由平台侧持有，不进入本工作流），逐项跟踪各演练步骤的完成情况并回传（步骤代号、状态、执行人内部标识（同为受控令牌）、完成时间戳），不外带真实环境信息。
跟踪 Agent 回传 JSON：{drill_ref: 演练批次代号（取自调用输入，不由 Agent 生成）, checklist_ref: App/Extension 签发的可信清单引用（原样回传）, steps: [{step_code: 步骤代号, category: 枚举(切换|验证|回切), status: 枚举(完成|卡点|未开始), owner_ref: Owner 令牌, executor_ref: 执行人令牌|缺失, finished_at: 时间戳|缺失}], checklist_complete: 布尔, fields_missing: [枚举(步骤清单|Owner|类别|回切步骤)], audit_ts: 时间戳}。状态矩阵：drill_ref、checklist_ref、checklist_complete、audit_ts 始终必填且两个引用必须与调用输入一致；checklist_complete=false 当且仅当 fields_missing 非空，此时 steps 禁止出现，可信清单为空、step_code 重复、缺 Owner/类别、或没有任何回切步骤时分别列出实际缺项；checklist_complete=true 当且仅当 fields_missing 为空，此时 steps 必须非空、step_code 唯一、集合与 checklist_ref 对应的可信预期清单完全相等并至少含一个 category=回切，逐元素 step_code、category、status、owner_ref 必填。status=完成时 executor_ref 与 finished_at 必填，status=未开始时两者禁止出现，status=卡点时 finished_at 禁止出现而 executor_ref 可有可无。空数组、重复、漏项、多项、类别漂移或无回切都不得进入完整态。仅接受这些组合；其余 callback 一律拒绝，原 Effect 保持 awaiting。
触发：手动发起一次调用，不监听任何事件；调用时带入可信演练批次代号 drill_ref、App/Extension 签发的 checklist_ref 与预期步骤集合、回执频道与值班频道（值班频道作为调用输入提供，用于失败升级）。
结果分流（按优先级从高到低依次判断，先判红线再判其余）：
  回切未完成（红线）：演练清单中的回切步骤未全部确认——一律禁止宣告演练完成，强制进入 SRE 负责人人工确认收尾，并留审计时间戳；这是最高优先级，命中即短路，其余步骤全完成也不例外，回切红线显式阻断完成宣告路径。
  有卡点：某步骤超过调用输入提供的截止时间或超时阈值未完成、或验证不通过，通知该步骤 Owner（Owner 仅用清单字段，缺失标"待确认"，不猜测）与 SRE 负责人，附步骤代号与当前状态，留审计时间戳；Owner 补齐后按更新后的清单继续跟踪。
  步骤完成：逐步发回执留时间戳与执行人标识，证据留痕，不静默跳过。
审批：宣告演练完成前必须经 SRE 负责人确认，审批为二值确认或驳回，不设自动超时，无默认通过/否决；回切未确认时无论谁确认都不得宣告完成（红线显式阻断），先收尾回切再确认。驳回则本次失败结束并留审计，不自动改判。
异常：清单不完整（可信清单为空、步骤重复、缺 Owner/类别、或没有回切步骤）告警留审计时间戳，通知调用方补全后新开一次调用，不重试、不猜测；跟踪 Agent 回传未唯一覆盖 checklist_ref 的预期集合或不合结构就停在等待点等它重新提交，不自动重跑；通知发送失败按重试上限重试，仍失败则升级到值班频道（作为调用输入提供）并保留待发内容供人工补发。
完成：全部步骤（含回切）完成并经确认后，发演练报告回执（逐步骤时间戳与执行人）并留审计时间戳后结束。
```

<!-- slot: 流程 -->
![案例 072 容灾演练任务清单跟踪：演练计划确认后由 SRE 负责人手动发起一次调用，App/Extension 签发 checklist_ref 与非空、唯一且至少含一个回切步骤的可信预期集合；Agent 的 steps 必须唯一并完整覆盖该集合。步骤完成逐步发回执，有卡点通知 Owner 与 SRE 负责人，回切未完成禁止宣告完成；清单为空、重复、漏项或无回切均按不完整处理，回传不合结构停在原等待点；全部完成经确认发演练报告回执，驳回失败结束](../../../media/cases/fig-case-072-01-flow.svg){#fig-case-072-01 width=92%}

如上图所示，正常路径、人工决策与异常同时可见：

1. **手动触发**：演练计划确认后，SRE 负责人发起一次调用，App/Extension 在源头白名单化清单并签发 `checklist_ref` 与预期步骤集合；集合必须非空、step_code 唯一且至少有一个回切步骤，连同回执频道带入。
2. **逐项跟踪**：跟踪 Agent 按清单逐项跟踪切换/验证/回切并回传；完整态 `steps` 必须非空、唯一、与可信预期集合完全相等且含回切。空数组、重复、漏项、多项、类别漂移或无回切都不能进入完整态；回传不合结构停在原等待点。
3. **分流（先判红线）**：
   - **回切未完成（红线）**：回切步骤未全部确认，一律禁止宣告演练完成（红线显式阻断完成路径），强制进入 SRE 负责人人工确认收尾，留审计时间戳。
   - **步骤完成**：逐步发回执留时间戳与执行人标识，证据留痕，不静默跳过。
   - **有卡点**：步骤超过截止时间或超时阈值未完成、或验证不通过，通知步骤 Owner（缺失标"待确认"）与 SRE 负责人，附步骤代号与当前状态，留审计时间戳。
   - **清单不完整**：可信清单为空、步骤重复、缺 Owner/类别或没有回切步骤，告警留审计时间戳，通知调用方补全后新开一次调用，不重试。
4. **完成**：全部步骤（含回切）完成并经 SRE 负责人确认后，发演练报告回执（逐步骤时间戳与执行人标识）并留审计时间戳；确认被驳回则失败结束。

<!-- slot: 配置 -->
你不需要手写代码或配置。把上面的提示词发给 Loop，AI 会理解意图、在后台画出这个"手动调用 + 逐项跟踪 + 红线收尾确认"流程——它知道"逐项跟踪"需要一个发消息并等待回调的 Agent 环节、"先判回切红线再分流"需要一个条件路由且红线优先级最高、"宣告完成前确认"需要一个审批环节、"卡点通知与报告回执"各需要一个发消息环节，并把它们连起来。AI 还会在后台校验流程结构是否完整，你不必关心这些技术细节。

<!-- slot: 异常 -->
- **回切未完成就宣告演练成功**：这是最危险的漏判。靠红线兜底——演练结束前回切未确认，一律禁止宣告演练完成，强制 SRE 负责人人工确认收尾，其余步骤全完成也不例外。
- **演练清单不完整**：可信清单为空、step_code 重复、缺 Owner/类别或没有回切步骤时告警留审计时间戳，通知调用方补全后新开一次调用；不重试、不猜测、不把缺失或漏掉的步骤当作已确认。
- **完整态漏步骤或漏回切**：运行时按 `checklist_ref` 比对非空、唯一、全量覆盖和至少一项回切；任何漏项、多项、重复、类别漂移或空数组都拒绝 callback，原 Effect 保持 awaiting。
- **步骤 Owner 缺失**：跟踪 Agent 不从历史记录或群里猜 Owner，通知中该字段标"待确认"，由 SRE 负责人补全或指定。
- **SRE 负责人驳回完成宣告**：本次失败结束并留审计；要宣告完成就再发起一次确认，没有"AI 自动改判"。
- **通知发送失败**：按重试上限重试投递；超过上限则升级到值班频道，并保留待发内容供人工补发。
- **跟踪 Agent 回传不合结构**：本次完成请求被拒绝，停在等待点等其修正后重新提交，不自动重跑。
- **长时间无人审批**：审批本身不设自动超时，流程停在等待状态。演练若有时限要求，由另一条定时检查的 Workflow（或值班人员）扫出超时项并通知 SRE 负责人。
- **演练步骤被执行方跳过**：没有回执的步骤不会被视为完成，收尾确认时逐项可见；被跳过的步骤按卡点处理并留审计。

<!-- slot: 审批 -->
宣告演练完成前必须经 SRE 负责人确认。确认时负责人能看到逐步骤回执（含时间戳与执行人标识）与回切状态，所以是"有依据的快速决策"而非盲目拍板。审批只有确认或驳回两种结果，不设自动超时、无默认通过/否决，驳回即本次失败结束并留审计，没有"AI 自动改判"。回切未确认是前置红线：无论谁确认都不得宣告完成（红线显式阻断完成路径），先收尾回切再确认。若要更严（如核心系统演练须变更经理会签），在提示词里写明，AI 会在流程里多加一个审批环节。

<!-- slot: 外部系统 -->
本工作流对演练清单的逐项跟踪由获授权跟踪 Agent 通过 App/Extension 完成，工作流本身不直接调用外部系统。App/Extension 在源头签发 `checklist_ref` 与可信预期步骤集合，Agent 只能原样引用；完整态必须非空、唯一、全量覆盖且至少含一个回切步骤。进入 Agent 消息、Run/Activation/Effect 记录与 App/Extension 工具日志仅记录白名单/令牌化字段（原值不进入以上任何一层），可回溯个人或敏感资产的字段在源头即被令牌化/伪名化，并按 10% 抽查四层实际记录——演练环境与真实系统名伪名化为代号，映射由平台侧持有。回执频道与值班频道作为调用输入提供；演练相关系统的访问凭据用 `<token>` 占位，由 Agent 运行时从密钥引用。切换、验证、回切等演练动作由 SRE 在对应系统执行，工作流只编排确认、通知与跟踪，不直接执行任何演练或恢复动作。

<!-- slot: 验收 -->
- **回放集与基准**：取最近 2 次演练的清单快照（含全部完成、卡点、回切未完成、清单缺失样本）回放，人工基准答案为按清单判出的最终状态；跟踪判定与基准一致率 ≥ 95%。
- **红线防线**：基准为回切未确认的运行中，被宣告演练完成的为 0 例，100% 进入人工确认收尾。
- **证据留痕**：演练步骤回执 100% 带执行人标识与完成时间戳；Owner 缺失时 100% 标"待确认"，不出现猜测的 Owner。
- **输入与覆盖**：可信清单为空、重复、缺 Owner/类别或无回切的调用 100% 走不完整告警；完整态 steps 非空、step_code 唯一、覆盖 checklist_ref 预期集合且至少一个回切的一致率 100%，空数组、漏项、多项、重复、类别漂移或无回切被当作正常完成的 0 例。
- **源头脱敏**：进入 Agent 消息、Run/Activation/Effect 记录与 App/Extension 工具日志的字段 100% 在白名单内（原值不进入以上任何一层），并按 10% 抽查四层实际记录；回执内容 100% 用演练环境与系统代号。
- **结果可见**：步骤回执、卡点通知、收尾确认、报告回执、输入告警五类结果 100% 各有可见回执，不出现静默成功。
- **分母与口径**：一致率分母为回放清单步骤总数；每次运行记录跟踪与确认时间戳。

### 复用与变体
- **同构迁移**：生产发布步骤清单跟踪、数据迁移演练跟踪、灾备切换预案核查、监管现场检查准备清单。
- **分级路由**：核心系统演练的收尾确认须变更经理与 SRE 负责人双签，普通演练单签即可。
- **写回系统**：演练报告归档后再加一个 Agent 环节，由它通过 App/Extension 把报告写入演练管理系统存档；写回须是获授权 Agent 经 App/Extension 的幂等动作（业务键=可信调用输入的演练批次代号+平台在报告登记时签发的版本令牌+期望变化（归档演练报告）+目标系统），Agent 只能原样回传版本令牌，不能自造版本；响应未知先查后写、按重试上限有限重试、失败升级值班并置"待处理"保留补偿，全程留审计。

<!-- slot: 媒体槽位 -->
<!-- media: fig-case-072-01-flow.svg -->
