## 当前判断
**Condition：** v2 于 14:00:00–14:00:20 UTC 完成发布。主机时钟快 90 秒，故 14:02:10 主机时间的首异常日志校正为 **14:00:40 UTC**，即发布完成后 20 秒；UTC 告警时间 14:01:00，晚于校正后的首异常 20 秒。该先后关系支持调查 v2 发布后的机制，但不单独证明某个发票的错误由某一条日志触发。现有请求/关联 ID 未提供，无法逐请求关联。队列暂停是唯一已执行措施；UI 未修复，且没有修改或重放授权。

## 时间线与机制判别（本地复现）
在工作目录执行 `python3 incident_repro.py`；输出保存在 `incident_repro.txt`。脚本按 90 秒偏差用时间算术校正日志，并运行所给读代码：旧记录 `{amount_cents:1999}` 在 v1、v2 下均为 19.99；新记录 `{amount:"19.99",currency:"USD"}` 在 v2 下计算为 0.1999、显示 0.20，在 v1 下读取为 0。这里的显示值是复现所算数值格式化结果，不是对生产 UI 的观察。

最早能解释已知金额错误的机制是 v2 读新格式时将字符串“19.99”作为金额再除以 100，产生 0.1999；这是发布引入的触发机制。混用旧/新记录格式是促成兼容风险；0.20 是下游显示症状。全量回滚不是安全的默认恢复：v1 对新格式返回 0，可能造成另一种错误。当前材料不能证明所有发票都受影响、所有数据丢失，或未核验金额正确。替代解释须用同一批记录、日志及账单核验：先确认三笔已确认错误各自的写入格式、请求/关联 ID 与金额计算，再检查 58 笔未核验发票及队列重试是否对应重复处理。单凭 96 次重试不能推断 96 笔不同发票。

## PagerDuty 风格指挥交接
**Actions（提议，未执行）：** IC 指派结算 SME 与队列/账单负责人。先保持队列暂停、保留日志和重试/发票映射证据；不要全量切回 v1，也不要重放。准备兼容双读补丁：旧格式按 `amount_cents / 100`，新格式按 `float(amount)` 直接作为货币单位；保留 v2 写入格式，避免回滚写入者制造新旧格式不兼容。该逻辑仍需代码审查与测试，不代表已经修复。

1. **授权门槛：** IC 明确批准补丁、部署范围及回退方案；在此之前不改生产、不重放。Owner：拟由 IC 指派。若补丁不能安全读取两种格式，停止并重新评估，而非切 v1。
2. **验证候选版本：** 用旧、新样本及边界/无效值测试读写；检查目标账本/导出值与预期一致，并确认服务错误、队列状态和重复处理指标无恶化。任一失败则中止发布，保持暂停并保留证据。
3. **小范围部署及观察：** 先对有限范围部署兼容读逻辑、维持 v2 写入；验证旧、新记录读取及账单金额，再按 IC 批准扩大。健康信号不符则停止扩大并回退到已验证的兼容版本；不可退到会把新格式读成零的 v1。
4. **分开恢复服务与修复存量：** 服务验证通过后，IC 批准再逐步恢复队列；按稳定发票 ID 去重，先 dry-run 对账、记录已处理 ID，再小批重放。暂停止住新的队列处理，不会自动修好已有错误。逐笔核对导出/客户账单和账本，明确更正或补偿流程及授权；只有对账验证完成，才可称相关金额已恢复。Owner：拟由账单/数据负责人承担。

**Needs：** IC 的变更与重放批准；SME 提供兼容补丁及测试证据；取得 61 个发票 ID 对应的重试明细、请求/关联 ID、写入格式、导出账单和账本；确定更正/客户处理权限。恢复估时目前无依据，不承诺时间。

## 事实行与客户更新草稿
| 事项 | 依据 | 当前状态 |
|---|---|---|
| 金额错误 | 记录称已核验 3 个金额错；材料未给逐笔金额 | 已确认，尚无已执行修复记录 |
| 未核验范围 | 96 次重试对应 61 个发票 ID；其中 58 个未核验 | 范围待核验；重试次数不是独立发票数 |
| 运行措施 | 记录称生产队列已暂停；UI 未修 | 暂停已执行；UI 仍未修，其他措施未获授权 |
| 本地诊断 | `incident_repro.py` 及其输出 | 仅复现所给代码，不是生产调查、修复或账单核验 |

**客户草稿（需授权后发送；未发送）：** 我们已确认 3 张发票的结算金额错误。生产队列已暂停；目前没有已确认的 UI 修复或存量账单恢复。另有 58 张发票尚未核验，我们下一步将核对其金额及相关账单，并在获批后实施兼容修复与受控恢复。该表述只报告已确认影响与实际措施，不把提议写成已执行，也不声称数据完整或已恢复。

**复发跟进：** 增加新旧格式混合的读写兼容测试；部署告警关联请求 ID 与发布版本；重试按发票 ID 去重并支持 dry-run；建立账单对账及更正授权检查表。