feat(resource): 增加历史 release 与 CAS 复用
bat-rust / Build and test Rust (push) Canceled after 0s
bat-rust / Build and test Go API (push) Canceled after 0s

Closes #47
This commit is contained in:
2026-09-02 01:26:53 +08:00
parent fdd4075e7e
commit bd1e1a06f2
14 changed files with 1235 additions and 59 deletions
@@ -37,6 +37,7 @@
crowdin-textunit-queue.json # Crowdin worker 离线输入队列
official-sync-snapshot.json # 常在 active root / current 下
official-launcher-bootstrap.json # 官方 launcher 引导链版本化产物
official-cas-reuse-references.json # 当前 release 获取的 CAS 引用
prod-clientpatch.bluearchiveyostar.com/
<root_token>/
TableBundles/
@@ -90,6 +91,17 @@
| 发布完成 | rename 到 `versions/<id>`,再切换 `current` |
| 生产读取 / bat-api | RPC 给出的 `version.resource_root`;通常等价于 `current` 解析后的 versioned 目录 |
每个 release 的 `official-download-manifest.json` 是历史复用的索引。新 staging
按规范化 destination 查找候选,并重新验证 manifest 中的 size、BLAKE3 和 ZIP
结构;URL、CDN 根或 release ID 变化本身不构成失效条件。复用文件先尝试硬链接,
跨文件系统时复制到 staging 内的临时文件并原子 rename,旧 `versions/<id>` 目录
保持不可变。
从 CAS 物化资源时,`official-cas-reuse-references.json` 记录每个获取的对象引用,
文件带版本字段且允许重复 object ID。孤儿 staging 或显式 release 清理必须先按
清单减少 CAS 引用,再删除目录;CAS 对象损坏、缺失或元数据不一致时只产生诊断,
回退网络下载,不发布未经校验的文件。
---
## 3. URL → 磁盘映射(核心不变量)