# ③ 证据链与回放格式

> 提案草稿 · 未提交 · 未经外部评审

## 要解决的问题

监管方、审计方、争议对方要核一个结论,今天只能**读系统的自述**:
系统导出一份报告,说自己当时是这么判的。

这不成立。**当事人写的笔录不能当证据**,再详细也不行。

需要的是:拿走一份文件,**在自己机器上把结论重新算一遍**。

## 提案:命令溯源的案卷 + 离线重放

### 案卷是命令流,不是状态快照

一份案卷 = **被接受的写操作,一行一条,全序**。

不是最终状态的导出。理由:

- 状态是命令流的**派生物**,反过来不成立;
- 导出状态时,导出方有机会"整理"一下;导出命令流没有这个空间;
- 有了命令流,任何一个中间时刻都能重建 —— 而状态快照只有一个时刻。

**推论(实践中最要紧的一条)**:备份要备命令流。
只备份当前状态、不备命令流,等于丢掉了全部可核查性。

### 重放必须用同一套裁决

关键约束:重放方跑的是**与生产同一套裁决逻辑**,不是一个"重放器"。

如果重放器是另写的一套,它验的是"两套实现是否一致",不是"结论对不对"。
**同一套逻辑 + 同一份输入 → 必须得出同一个结论;不一致就是生产错了。**

### 最小信封

```json
{ "case": "<案卷标识>", "ops": [ /* 一行一条被接受的写 */ ] }
```

时间用**行内记录的时刻**,重放时**不读系统时钟** ——
否则同一份案卷今天和明天重放会得出不同结果,那就不叫可核查。

## 实现指向

已跑通并且**已经可以拿到**:六份真跑出来的案卷 + 一条重放命令,
合计几百 KB,数据全合成。

其中最值得看的是一组对照:一单缺材料 → 系统如实报缺并**在教学文本里做出承诺**
(「材料到位后自动重放」)→ 补料单就是那句承诺的兑现:
结论由否翻是、验收版本号从 #1 升到 #2,而**当初缺过料的记录仍在同一份卷宗里**。

> 纠错的门开着,改过的痕迹抹不掉。
> **监管场景里,后半句通常比前半句更要紧。**

## 诚实边界

- **重放验的是"算得对不对",不验"当初喂进去的材料是不是真的"。**
  后者是档位与受信通道的事(提案 ①),回放替不了;
- **本提案不规定防篡改存储。**案卷落盘之后怎么防改,是存证设施的事;
  我们只规定「案卷长什么样、怎么重放」;
- **案卷会包含业务数据**,跨组织给之前得脱敏 —— 而脱敏本身会影响可重放性
  (改了输入,结论当然可能变)。这个矛盾我们没有好答案,
  目前的做法是**样例一律用合成数据**:一份需要脱敏的样例,永远会让人怀疑脱干净了没有。
