# 附录 C 故障证据与安全处置卡 {.unnumbered}

排障的第一目标不是尽快重试，而是确认“哪一份已发布语义、哪一次调用、哪个等待点和哪个外部结果”。
下面的清单用于 Run 失败、长期等待、结果不明、重复通知疑虑或外部部分成功。

## C.1 先保全的身份 {.unnumbered}

- Workflow、Plan 与精确 PlanVersion。
- Invocation、Run、调用来源和执行所有者。
- 若来自 Schedule：Binding 与精确 BindingRevision。
- 全分页的 Activation、Effect 与事件时间线，以及稳定错误码；不要把界面当前加载的行数当作总量。
- `send_message` 的目标 Scope、冻结 responder、消息与 receipt。
- `request_approval` 的 assignee、决定与时间。
- callback 的 Effect、冻结 responder、提交结果和冲突信息。
- 外部完整意图身份、对象安全引用、回执与最后一次权威读取时间。

不要把 token、密钥、完整外部响应、无关消息正文或个人敏感数据复制进故障卡。

## C.2 现象到证据 {.unnumbered}

| 现象 | 先看什么 | 不要做什么 |
| --- | --- | --- |
| Run 长期 `waiting` | 当前 Activation / Effect、审批或 callback 的冻结身份、最后事件 | 不把等待当成失败后新开一次 Run |
| 消息似乎没发出 | Effect、稳定消息身份、MessageID 与 receipt | 不因页面没刷新就重复发送 |
| callback 被拒绝 | Schema、端口、输出、错误码、`workScope` 与 responder | 不重做外部业务，只修正终态回调 |
| 审批迟到或冲突 | 冻结 assignee、首个终态决定和对象版本 | 不把旧批准套到新草稿或新对象 |
| Run 失败 | 失败 Activation、稳定错误码、已完成 Effect | 不假设此前外部动作已回滚 |
| Run 被停止 | 停止前已发生的消息、审批、callback 与外部结果 | 不宣称 Agent 已停止或外部影响已撤销 |
| 外部结果不明 | 完整意图身份、提供方权威状态、请求是否仍可能生效 | 不用新请求 ID 或新 Run 盲目重放 |
| 怀疑重复动作 | 两次意图身份、外部对象历史和回执 | 不只比较聊天消息或本地请求编号 |

## C.3 结果不明的三路判断 {.unnumbered}

1. **权威状态已经是期望值**：记录成功证据，不再写入。
2. **权威证据证明原请求未执行且不会再生效**：修正原因，生成新的行动卡并重新确认；只有动作契约明确保证同一意图可安全重放时才做有界重试。
3. **证据不足**：保持结果不明，转人工或提供方核验。

补偿是新的高影响动作。先展示对象、影响、权限、恢复限制和确认人，再提交一次。补偿不会删除已经产生的通知、审计或下游处理。

## C.4 故障证据卡 {.unnumbered}

```text
报告时间 / 时区：
报告人：
业务影响：
Workflow / PlanVersion：
Invocation / Run：
调用来源：
当前 Run 状态：
当前 Activation / Effect：
最后事件：
审批 / callback 身份：

外部意图身份：
外部对象安全引用：
已确认的权威状态：
结果判断：成功 / 明确未执行 / 结果不明
是否仍可能生效：

已经执行的动作：
明确未执行的动作：
禁止重放的动作：
人工接管 Owner：
下一次核验时间：
需要的补偿行动卡：
敏感数据处理说明：
关闭证据：
```

## C.5 关闭条件 {.unnumbered}

故障只能在以下条件同时满足时关闭：

- Run 终态或继续等待的业务决定已经明确。
- 外部结果有权威证据，或结果不明已移交具体 Owner 和期限。
- 已发生的通知、权限、付款或其他副作用均已列出。
- 补偿若存在，有自己的批准、执行与结果证据。
- 原因、受影响版本和防止复发的改动已经关联。
- 敏感数据处置与必要删除已由数据 Owner 核验。
- 运营例会或事件复盘已决定是否保持、限制、改版或退役。

“重新运行后成功”不是原故障的关闭证据，除非团队已经证明原意图不会迟到生效、重放契约安全，并对两次外部结果完成对账。
