# 崩溃安全模型

## 保证

在调用方按顺序追加完整编码记录，并且只把 `valid_bytes` 以内数据视为可信的前提下：

1. 断电造成的任意尾部截断不会产生一条伪造的完整记录。
2. 单比特破坏会被魔数、CRC32C 或序列校验识别。
3. 没有 `Commit` 的事务不会产生重放动作。
4. `Abort` 事务不会产生重放动作。
5. 检查点以前的动作不会重复重放。
6. 相同输入在所有受支持后端产生相同恢复计划。

`sweep_crash_cuts` 会在每个字节后切断日志，验证可信前缀和提交关系；
`sweep_single_bit_corruption` 会逐一翻转每个比特，验证损坏检测。这两项是可执行
测试，不是文档中的假设。

## 调用方责任

- `Commit` 对外可见前必须保证其记录已经达到所需持久化等级。
- 多写入者需要在库外分配唯一、严格递增的序列号。
- 截断物理文件前应保存原始副本或记录诊断信息。
- CRC32C 用于意外损坏检测，不提供抗恶意篡改能力。
- 检查点只能声明真正已经持久化到主存储的序列号。

## 非目标

本库不是共识协议、复制协议、加密日志或文件系统。它不承诺在底层存储违反顺序写
语义时恢复写入顺序，也不替代操作系统或设备的持久化屏障。
