Binary DB v0:格式与权威
查看 Binary DB v0 的文件格式、整数与偏移规则,以及存储根边界。
适用人群: 内核实现者、集成方与运维
本章是完整的活动 Binary DB v0 技术 schema 的入口。它说明每一条固定记录、 payload 和索引是如何寻址的,以及归哪个存储根所有。
未指定的行为一律保留并失败拒绝:实现不得自行发明扩展句柄编码,不得悄悄加宽 某个字段,也不得在已声明的 layout 转换之外选用新的规范 payload 编码。
全局文件格式#
每个持久化的 Binary DB .bin 文件、以及每个可重建的 .idx 文件,都以一个 四字节头部开始:
BIN_HEADER_SIZE = 4
INDEX_HEADER_SIZE = 4
BinHeader / IndexHeader:
u32 layout_id = 1 # little-endian文件路径决定记录种类、命名空间、权威作用域,以及该文件属于权威存储、payload 存储、对象数据还是可选缓存。头部不含 magic、记录数、校验和、权威名称、 generation 令牌,也不重复记录文件种类。
对于定长记录文件:
record_count = (file_size - BIN_HEADER_SIZE) / record_size
record_offset = BIN_HEADER_SIZE + record_index * record_sizefile_size 至少为四字节,且记录区必须能被所选记录大小整除。同一个文件绝不能 混放来自不同 layout 的记录。记录编解码器使用声明的字节偏移,不依赖 Rust 结构体布局、宿主对齐或隐式填充。
payload 偏移是 u64 文件地址,从所属 payload 文件的第 0 字节起算。第一个 payload 通常从偏移 BIN_HEADER_SIZE 开始。payload 与定长记录的整数字段使用 仓库固定的字节序。保留位和保留字段一律写零。
除非某字段是单独声明的有符号 Git identity 时间戳,否则每个活动的定长记录 *_at_s 字段都是小端无符号 u64,表示自 Unix 纪元起的整秒数。早于纪元的输入 失败拒绝。零保持该字段声明的"缺失"或"未知"这一确切含义。不得从时间戳精度 推断任何顺序或唯一性。
*_index_plus1 = 0 表示缺失;非零值编码 index + 1,因为记录索引零是合法的。 不带 plus1 后缀的索引字段存的是直接的记录索引,合法地可以为零。
权威作用域#
当权威根不同时,同一个文件名可能使用不同的记录 layout:
- 本地工作流权威拥有本地 Task、Change、Line、 Tag、Stash、Land、Land-target-Line、task-snapshot-link 和 Plan 状态。
- 一个
ait-server仓库权威拥有远端 Task、Change、Line、Land、 Land-target-Line、task-snapshot-link、Plan、Patchset、Worker Job 及其 ready/state 索引,以及 Attestation、Actor、Review、Policy 和 Waiver 状态。 - 一次
ait-server安装拥有一个独立的服务端全局运行权威根,且仅用于 Repository 注册表及其命名空间查找索引。repository_index指向该根的repository.bin,并路由到某一个服务端 Repository 权威。Worker Job 的身份 只有作为(repository_index, worker_job_index)才有意义;第二个分量是被 路由到的那个 Repository 权威本地的永久物理记录索引。 - 共享内容权威拥有内容 Snapshot、有序 Snapshot-parent、Tree、归一化的 Tree-entry-range、Blob 以及 object-pack 元数据。
- 可选的本地 Git 互操作权威拥有 Git 导入/导出的仓库身份、generation、 不可变映射和可续跑的 checkpoint。它是一个逃生舱式的映射权威,不是 AIT 的主工作流权威或内容权威。
- 一个 task worktree 拥有可丢弃的
.ait-worktree/cursor.bin状态。 - 可选的本地内容缓存拥有 manifest/file 查找加速。
- 可选的本地 remote-mirror 根可以镜像服务端的 snapshot link,同时保留服务端 索引。
不同权威根中数值相同的索引不是同一个身份。本地写入方绝不分配服务端索引。