# 十月第二轮开发与审查（2026-10-03）

> 本文保留开发阶段证据。后续发布状态与验证结果见
> [0.1.0 发布记录](RELEASE_0.1.0.md)。

## 【1. 总体评价】

编码、已知擦除恢复与对象目录可组合使用。本轮新增两项：`add_many` 目录原子批量准入，以及 `recoverable_ranges` 可恢复区间。之前调用方循环 `add` 时若后段失败，已写入前段无法自动撤销；单条 API 本身正确，新批量 API 解决组合事务需求，保持失败后的槽位和计数不变。

原材料在 `docs/archive/20261003`，源代码以新模块形式添加。申报资料稿 20 行，参赛者空白。公开远端、最新远端 CI 与 Mooncakes 未完成，本地通过不是赛事验收结论。

## 【2. 算法与性能分析】

- 批量事务采用分离槽表暂存：C 为目录容量，F 为批次帧数，时间 O(C+F)，额外槽表 O(C)，不复制不可变帧载荷。代价是小批次也复制全目录，适合有界对象批次；极大目录可在未来改为稀疏暂存，但必须保留同批和既有槽位重复检测，不宜无测试改写。
- 可恢复区间：逐条带数可用槽位，足 k 片则扩展连续区间，否则结束；时间 O(C)，输出空间 O(R)。最后区间结束于对象总长度，空对象返回空数组。
- 可行性：同条带任意 k 个已准入完好分片可恢复，因而目录存在性可用于规划尝试读取；目录不重新校验帧字节，不能将其当作认证或实际恢复成功证明。
- 相较先恢复整个对象再确认可读范围，扫描不发生 GF 解码，也不分配完整对象。实际范围读取继续复用已有解码器。

## 【3. 具体优化步骤】

1. 添加批次输入数量限制，空批次直接成功而不复制槽表。
2. 在分离目录上复用单帧全部身份、索引、原长度与重复检查。
3. 全部验证成功后一次发布槽表值及计数；同步调用内没有中途可观察状态。
4. 线性扫描可恢复条带并合并连续区间，输出前检查区间预算。
5. 增加失败回滚、尾条带和修复后范围变化测试，接入示例和 CI。

## 【4. 推荐修改后的代码】

实现见 `catalog_transaction.mbt`、`catalog_availability.mbt`，集成见 `examples/maintenance/main.mbt`。

```text
stage = 原槽表的浅拷贝
对 frames 在 stage 上执行 add；失败则不发布
成功后复制回槽表并更新 stored_count
对可恢复区间使用 recover_range(start, length)，不能传 end
```

## 【5. 测试建议与已执行证据】

- 正常：整批入库后恢复数据，分别读两个可用区间。
- 边界：空批次、空对象、预算 0、尾部不足完整条带、区间合并。
- 异常：最后帧身份错误、批内重复、数量/区间超预算，确认旧槽位和计数不变。
- 状态变化：补齐中间条带使范围合并，剔除关键槽位使范围缩短。
- 新增 `catalog_transaction_test.mbt` 5 项；完整四后端各 82 项通过。
- 全后端严格 check/build 通过，新维护示例 wasm-gc 通过。性能建议对固定 F 和递增 C 测量复制开销；本轮不声称极大目录事务最佳。
