# 0.11：可移植恢复写出规划核心

## 职责和使用

format4/5认证恢复续作调用链为 `paged-restore.mjs → cmd/storage → core/restore_writer.mbt`。MoonBit `RestoreWriter` 接收声明大小、实际暂存长度、认证检查点、已完成/已发布状态、可选稀疏区间；逐块计算必须核对的既有字节数、允许写入的区间、下一逻辑长度与是否应落检查点，结束时验证流长。Node不再自行重复计算这些写出范围，也无备用算法掩盖核心拒绝。

```sh
npm run build
moon run examples/core --target native
node --test tests/restore-writer-migration.test.mjs tests/paged-restore-v10.test.mjs
npm run validate
node scripts/language-audit.mjs
```

编译入口要求moonc≥0.10.16；本轮私有SDK0.10.18不修改全局环境。Mooncakes核心 API 不是桌面安装器，也不包含 Node 系统层；公开发布状态见 [发布记录](PUBLICATION.md)。

首次正常构建同步依赖；安装验证后可显式 `node scripts/build.mjs --frozen`，便携打包也采用冻结构建，避免为已锁定依赖再次刷新远端索引。缺依赖、版本过低或编译失败仍拒绝，不关闭TLS校验或忽略更新错误。

## 核心决策不替代真实IO证明

- 已写长度可以落在认证检查点之后：崩溃留下的未记账尾部必须逐字节比较，不能盲目信任、回绕或覆盖。
- 每块须为1..1MiB，文件≤64GiB；稀疏范围≤4096、正长度、顺序不重叠且不得越界；使用Int64减法上界检查，拒绝溢出。
- 已完成文件必须长度完整；已发布文件不能再申请写入。缺块、超长、零块、非法范围或不确定发布拒绝。
- 文件身份/链接数、归属和MAC、内容与整树独立读回、实际短写、fsync和排他目录发布仍由受控系统层执行。计划成功不代表IO完成。
- 规划器只管理本次重放进度；IO错误后关闭并从实际证据重建，不持久化未经验证的规划状态。关闭操作同时释放散列、分块、账本和写出会话；桥接最多16个写出会话。

无变化：不覆盖陌生目标；原生权限仍需同平台与明确授权；portable仍明确损失；不承诺全部元数据保真、所有崩溃边界自动恢复或真实硬件断电耐久。

## 验证与剩余语言风险

新增四目标纯核心用例和逐前缀/稀疏/空文件差分矩阵，既有真实子进程退出、短写/错误、日志和身份篡改、元数据、硬链接、加密与旧格式回归全部保留。执行结果见 [维护记录](QUALITY_REPORT.md)，不将历史CI算作本轮通过。

MoonBit领域核心得到扩充，但Node仍承担较多分页作业、持久化及系统编排；源字节统计中JavaScript明显更多，**不能据此承诺“主要实现语言”已被主办方认可**。语言统计脚本同时列全源码与运行目录，口径公开、未修改Linguist。下一步仍需迁移分页备份/巡检/回收的流式状态机和可移植应用编排，而不是制造语言占比。

Apache-2.0、NOTICE与第三方许可保留；无新增npm运行依赖。没有真实云/独立主机/管理员VSS测试环境，这些缺口按原有文档保留。私人备份、申报书、密钥、原始报告和本机配置不公开；本轮不公开运行包。
