chore: establish development baseline

This commit is contained in:
2026-06-28 01:27:09 +08:00
commit dd53e3054e
131 changed files with 19327 additions and 0 deletions
@@ -0,0 +1,78 @@
# ADR 0001: Rust 引擎与 Go 应用层边界
**状态**:已接受
**日期**2026-06-28
**关联计划**`../../../PROJECT_PLAN.md`
---
## 背景
BlueArchiveToolkit 的最终目标覆盖资源同步、CAS、AssetBundle 解析、文本提取、翻译、Patch、CLI、API Server、Web 和 SDK。项目天然包含二进制解析、文件完整性、网络同步、任务编排、数据库、用户界面等不同类型的问题。
如果所有能力都堆在一种语言或一个模块里,后续会出现以下问题:
1. 性能敏感和安全敏感代码难以隔离测试。
2. CLI/API/Web 编排逻辑容易污染底层解析器。
3. FFI 和 SDK 边界无法稳定。
4. 插件系统没有清晰接入点。
---
## 决策
采用明确的语言和层次边界:
1. **Rust 引擎层**
- 负责 CAS、AssetBundle、Patch、二进制格式解析、Hash、完整性校验。
- 只暴露粗粒度、可测试、稳定的 API。
- 不承担 CLI 命令解析、HTTP 路由、AI Provider 编排或 Web 状态管理。
2. **Rust 领域/适配层**
- `core` 保存领域模型、仓储接口和领域错误。
- `adapters` 保存 Unity、Manifest、Client 等适配器接口和注册机制。
- `infrastructure` 将引擎实现适配到领域仓储接口。
3. **Go 应用层**
- 负责 CLI、资源同步、下载器、API Server、任务调度、配置、日志、Provider 编排。
- 通过 FFI、进程边界或稳定 SDK 调用 Rust 引擎能力。
- 不重复实现 AssetBundle 解析、Patch 算法或 CAS 对象存储核心逻辑。
4. **Web 层**
- 通过 REST API 访问服务端能力。
- 不直接读取本地 CAS 或游戏资源文件。
---
## 约束
1. Rust 引擎 API 必须保持业务无关,不出现 CLI 命令、HTTP 状态码、Web 页面状态。
2. Go 应用层不得复制 Rust 引擎中的 Hash、Patch、AssetBundle 核心算法。
3. FFI 边界必须避免暴露大量细粒度内部结构,优先暴露批量和事务语义。
4. 所有跨语言错误必须能映射到统一错误码和可读诊断信息。
---
## 后果
正面影响:
1. 核心引擎可以独立测试和基准测试。
2. CLI/API/Web 可以复用同一套底层能力。
3. 后续新增 Provider、Parser、Storage backend 时边界更清晰。
代价:
1. 需要维护 FFI 或 SDK 边界。
2. 错误类型、数据结构和版本兼容性需要更早设计。
3. 集成测试必须覆盖跨语言调用,而不能只看单 crate 单元测试。
---
## 当前执行要求
近期实现 CAS 时必须遵守:
1. `crates/bat-cas-engine` 是 CAS 核心实现位置。
2. `infrastructure` 不再复制 CAS 存储算法,只做 `bat-core::repositories::CasRepository` 适配。
3. Go CLI 后续通过稳定边界调用 CAS,不直接操作 CAS 内部目录结构。
@@ -0,0 +1,76 @@
# ADR 0002: CAS V1 设计边界
**状态**:已接受
**日期**2026-06-28
**关联缺口**`../../reports/CURRENT_GAPS.md`
---
## 背景
当前代码中存在两处 CAS 相关实现:
1. `crates/bat-cas-engine/src/storage.rs`
2. `infrastructure/src/cas/filesystem.rs`
两者都触及文件系统对象存储。随着引用计数、GC、并发安全、元数据和 FFI 接入推进,如果继续保留双实现,会导致行为不一致和维护成本上升。
---
## 决策
CAS V1 采用以下边界:
1. `bat-cas-engine` 是唯一 CAS 核心引擎。
2. `infrastructure` 只负责把 CAS 引擎适配到 `bat-core` 定义的仓储接口。
3. CAS 对象地址使用 BLAKE3 内容 Hash。
4. 文件系统后端采用分片目录结构,避免单目录文件过多。
5. 元数据后端必须抽象,初期可以使用 SQLite,本地 CLI 不直接依赖 PostgreSQL。
6. 服务端 Resource/Translation 等业务数据使用 PostgreSQL,不和 CAS 对象元数据混在一起。
---
## CAS V1 必须支持
1. 内容写入和去重。
2. 内容读取和 Hash 校验。
3. 对象存在性检查。
4. 对象大小和统计信息。
5. 引用计数增加、减少、查询。
6. GC dry-run 和执行模式。
7. 原子写入:临时文件、flush、fsync、rename。
8. 并发写入同一对象不会产生损坏文件。
9. 损坏对象读取时返回 Hash mismatch。
---
## CAS V1 暂不支持
1. 分布式对象存储。
2. 远端 CAS 后端。
3. 加密对象存储。
4. 跨机器 GC 协议。
这些能力以后通过 storage backend trait 扩展。
---
## 验收标准
CAS V1 不以“能通过简单 put/get 测试”为完成标准。必须满足:
1. 单元测试覆盖 put/get/exists/delete/list/stats。
2. 引用计数有持久化测试。
3. GC 不删除仍被引用对象。
4. 并发写入相同内容测试通过。
5. 损坏对象读取返回明确错误。
6. 权限或路径错误有清晰错误类型。
7. `cargo test --workspace``cargo clippy --workspace -- -D warnings` 通过。
---
## 后续迁移要求
1.`infrastructure/src/cas/filesystem.rs` 中的直接文件写入逻辑迁移为调用 `bat-cas-engine`
2. 移除固定返回值的引用计数和 GC 占位逻辑。
3.`docs/reports/CURRENT_GAPS.md` 中逐项关闭 G-002、G-003、G-004。