# 第 5 课练习：超时后该显示什么？

[English](README.en.md)

你的任务是为每个请求写清楚“现在知道什么、用户看到什么、下一步是什么”，避免用户靠反复点击试探结果。打开 [events.csv](events.csv)，按 `scenario_id` 分组、按 `event_order` 阅读。八条记录是五个独立的合成情景，不是八次真实故障，也不是北辰原始日志或实验环境的运行输出。它们只讨论**建议与保存草稿**，不包含采购提交、停机或设备操作。

## 读懂字段

| 字段 | 含义 |
| --- | --- |
| `event_id` / `scenario_id` | 事件编号 / 独立情景编号 |
| `event_order` / `event_type` | 情景内顺序 / 事件类型 |
| `request_id` / `idempotency_key` | 原请求编号 / 幂等键，用于对账，不应随意换新键 |
| `record_id` | 权威查询取得的草稿编号；空值不证明没有草稿 |
| `outcome` | 已观察状态：`pending` 等待、`unknown` 未知、`draft_exists` 草稿存在、`not_created` 确认未创建 |
| `inputs_valid` | 输入是否仍有效 |
| `authorization_valid` | 当前授权是否仍有效 |
| `api_retry_allowed` | 接口约定是否允许重试 |

后三列用 `true` / `false`；空值表示本条未提供证据，不能当作 `false` 或默认成立。`authoritative_prewrite_rejection` 是本练习明确给出的“写入前已拒绝且没有创建记录”证据；普通错误或超时不具备这个保证。

## 逐步走查

1. 在 T02 暂停阅读后续记录，写一条提示，例如：“未收到保存结果，草稿状态未知。请查证原请求，暂勿重复保存。”显示原请求、查询入口和人工接手方式。
2. 再读 T03：正式记录存在 `D-18`。更新提示为“草稿已保存，尚未提交申请”，提供查看与按现有审批流程继续的入口；不再创建另一份草稿。
3. 对其余四个情景分别填“是否已确认未创建、输入有效、授权有效、接口允许重试”。只有 `confirmed_not_created` 的四个条件同时有证据支持。它可以按接口约定考虑重试，不表示需要立即重试或获得了新的动作授权。
4. 为输入失效、授权失效、接口禁止重试分别写下一步：修正并重新核对输入、转给有权处理的人、按接口规定查询或接手。不要给所有情况同一个“重试”按钮。
5. 再设计一次查询不可用的情况：保持未知、暂停重复动作并升级给负责人。设备现场工作由具备资格的人依既有专业流程处理，不等待助手给出设备指令。

## 自检与判断边界

参考结果：T02 只能确认响应超时；T03 才能确认草稿存在。T05 可以考虑受约束的重试；T06–T08 各缺一个必要前提。幂等键只是记录字段，不能证明真实接口支持相同键去重、参数变化拒绝或跨系统对账，仍需查约定并测试。

这组记录可检查你的状态说明和下一步是否自洽，不能证明生产系统可靠。独学时把“拟议处理”与“已验证行为”分开；如有同伴，可请对方只看提示说出下一步。没有实际测试就记为待验证，不编造用户反馈。

带着状态表和一个尚未验证的前提进入 第 6 课练习，判断应先补哪项证据。
