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,同時保留服務端 索引。
不同權威根中數值相同的索引不是同一個身份。本地寫入方絕不分配服務端索引。