mirror of
https://github.com/Yuyi-Oak/BlueArchiveToolkit.git
synced 2026-09-18 06:34:54 +08:00
2.5 KiB
2.5 KiB
ADR 0004: Rust bat 与 Go bat-api 当前资源控制面边界
状态:已接受
日期:2026-09-04
关联文档:../../../CURRENT_STATUS.md、../../../docs/reports/GO_STATUS.md
背景
项目同时包含 Rust 资源引擎和 Go HTTP 服务。历史设计曾把资源同步、下载器
和任务调度归入 Go 应用层,但当前实现已经由 Rust bat 统一持有这些长期状态。
如果继续沿用旧职责描述,会让 Go、Web 或其他入口重复实现资源状态机。
决策
-
Rust
bat是官方资源生产者和状态拥有者:- 负责官方 metadata 发现、下载、校验、staging、release 发布和
current切换; - 负责 watch/daemon、
bat.sockJSON-RPC、任务、日志、版本状态、解析、 翻译 worker 和 localized release 状态; - 负责 CAS、AssetBundle 解析、Patch 核心算法及其文件安全边界。
- 负责官方 metadata 发现、下载、校验、staging、release 发布和
-
Go
bat-api是资源读侧和管理入口:- 通过
bat.sockRPC 发现 Rust 已发布的resource_root、snapshot、manifest 和状态; - 提供资源 bootstrap、server-info 改写、只读 CDN path、readiness、OpenAPI 以及鉴权后的白名单管理转发;翻译任务和 TM 管理面只转发 Rust RPC;
- 不下载官方资源、不写 staging、不维护 version-state,不复制 CAS、解析器、 Patch 核心算法或同步状态机。
- 通过
-
Go
cmd/bat和bat-ffi不是主集成边界:cmd/bat只保留试验 CLI;bat-ffi只保留无状态、粗粒度、一次调用一次输入输出的兼容 helper;- 新的跨语言控制和查询能力优先增加 Rust RPC contract,再由
internal/backendrpc消费。
-
完整游戏业务 API、完整 Web 协作后台、Glossary 和 Provider 扩展体系仍是后续目标; Translation Memory V1 已由 Rust
bat持有,不能从目标架构图推断 Go 侧拥有第二份状态。
后果
- 资源同步只有一个长期状态拥有者,
bat-api可以安全地横向扩展为只读服务。 - Rust RPC、release layout、manifest 和
status/status_code成为跨语言稳定契约。 - Go 侧新增控制接口必须经过白名单和 RPC schema 复核。
- 完整业务 API 和协作后台未来落地时,仍需遵守 Rust
bat对资源状态的所有权。
当前验证依据
infrastructure/src/bin/bat/infrastructure/src/official_update.rsinternal/backendrpc/cmd/bat-api/docs/reference/rpc-backend-api.mdinternal/api/testdata/contract/