Binary DB v0:Git 互操作记录
展开可选的 Git 仓库、generation、身份、commit、文件、ref、Tag 与 checkpoint 映射布局。
适用人群: Git 互操作实现者
Git 记录在 AIT 内容之外构成一个可选的导入/导出映射权威;它们不取代主工作流权威或内容权威。这些 layout 在指定之处保留确切的源字节,遇到不支持的对象或身份表示时失败拒绝。
本地 Git 导入/导出记录#
Git 互操作是一个可选的本地逃生舱权威。它的定长记录保留已 land 的 git-identity-map/v1 与 git-interop-checkpoint/v1 语义,同时不让 Git 成为 AIT 的主权威。v0 中每个 Git Object ID 字段都恰好是 20 个原始 SHA-1 字节。 其他 Git 对象格式会在任何 AIT 或 Git ref 变更之前失败;在 layout_id = 1 下, 写入方不得加宽这些字段。
GIT_REPOSITORY_RECORD_SIZE = 28
GitRepositoryRecord — git_repository.bin:
u8 repository_meta
u8 object_format_kind
u16 reserved0
u32 identity_len
u64 identity_offset
u8 fingerprint96[12]fingerprint96 以 12 个原始字节存放当前 GSR-*、GTR-* 或 ASR-* 仓库指纹 的 24 位十六进制数字。前缀由 repository_meta 重建。带类型的 identity payload 存放用于计算该指纹的同一个规范源身份、目标路径或 AIT 仓库身份。
GIT_GENERATION_RECORD_SIZE = 20
GitGenerationRecord — git_generation.bin:
u8 generation_meta
u8 reserved0
u16 reserved1
u32 source_repository_index
u32 target_repository_index_plus1
u8 generation_hash64[8]generation_hash64 以八个原始字节存放 GIT-IMP-* 或 GIT-EXP-* 的 16 位 十六进制数字。导入有一个 Git 源仓库,且不存储目标仓库。导出有一个 AIT 源仓库 和一个 Git 目标仓库。generation 不可变;它把由同一份导入源状态、或同一份 确定性导出计划所产生的映射归为一组。这个内容 generation 不是 Binary DB 的 事务 generation 或激活 generation。
GIT_IDENTITY_RECORD_SIZE = 24
GitIdentityRecord — git_identity.bin:
u8 identity_meta
u8 reserved0
i16 timezone_offset_minutes
u32 payload_len
u64 payload_offset
i64 timestamp_sidentity 记录保留当前的 raw、name、email、timestamp 和 timezone 字段。timestamp_s 是有符号的 Git identity 时间戳;timezone_offset_minutes 是解析出的数值偏移。原始 identity 字节仍然可用,作为无损的导入对象证据。
GIT_COMMIT_MAPPING_RECORD_SIZE = 96
GitCommitMappingRecord — git_commit_mapping.bin:
u8 mapping_meta
u8 reserved0
u16 parent_count
u32 generation_index
u32 snapshot_index
u32 author_identity_index
u32 committer_identity_index
u32 first_parent_mapping_index_plus1
u32 first_file_mapping_index_plus1
u32 file_count
u32 payload_len
u64 payload_offset
u8 git_object_id[20]
u8 git_tree_object_id[20]
u32 lfs_pointer_count
u64 created_at_s被引用的 Snapshot 提供 AIT 根 Tree 定位符和文本形式的 Snapshot 身份;两者都不 在此处重复存放。parent_count 受 Snapshot 的 1,024 上限约束。parent 与 file 的映射区间是连续的;当且仅当对应的计数为零时,它们的 first_*_index_plus1 字段才为零。commit 映射记录不可变,且只追加。
GIT_COMMIT_PARENT_RECORD_SIZE = 28
GitCommitParentRecord — git_commit_parent.bin:
u32 commit_mapping_index
u32 snapshot_parent_edge_index
u8 parent_git_object_id[20]被引用的 Snapshot parent edge 拥有 parent_ordinal 和 AIT 的父 Snapshot 索引。 它指向的子节点必须与所属 commit 映射的 snapshot_index 相同。parent 映射区间 的顺序必须等于 edge 的 ordinal 顺序,因此 Git commit 的父顺序与 Snapshot DAG 的顺序不会分歧。
GIT_FILE_MAPPING_RECORD_SIZE = 52
GitFileMappingRecord — git_file_mapping.bin:
u8 git_object_type_kind
u8 reserved0
u16 reserved1
u32 commit_mapping_index
u32 entry_ordinal
u32 tree_entry_index
u32 git_mode
u32 path_len
u64 path_offset
u8 git_object_id[20]Tree entry 拥有 AIT mode、目标 Tree/Blob 索引和内容身份;这些值不重复存放。 git_mode、Git 对象类型与 Object ID,以及确切的 Git 路径字节,保留了 Git 一侧 的 tree 映射。entry ordinal 在同一个 commit 映射区间内是连续的。
GIT_REF_MAPPING_RECORD_SIZE = 80
GitRefMappingRecord — git_ref_mapping.bin:
u8 ref_meta
u8 git_object_type_kind
u16 reserved0
u32 generation_index
u32 snapshot_index_plus1
u32 target_index_plus1
u32 symbolic_target_ref_mapping_index_plus1
u32 ref_name_len
u64 ref_name_offset
u8 git_object_id[20]
u8 expected_previous_git_object_id[20]
u64 created_at_sbranch 映射把 target_index_plus1 用作数值 line_index + 1;Tag 映射把它用作 tag_index + 1。它们绝不存放 AIT Line ID、Line 名称、Tag 名称、ait_kind、 ait_name 或 ait_identity。符号式 HEAD 记录以数值方式引用被映射的目标 ref 记录,而不是重复存一个 Line 名称。只有当 expected_previous_git_object_id 的 meta 位置位时它才有意义,此时它记录导出的 compare-and-swap 证据;否则全部 20 字节为零。
GIT_TAG_MAPPING_RECORD_SIZE = 48
GitTagMappingRecord — git_tag_mapping.bin:
u8 tag_mapping_meta
u8 reserved0
u16 reserved1
u32 git_ref_mapping_index
u32 payload_len
u64 payload_offset
u8 peeled_commit_git_object_id[20]
u64 created_at_s被引用的 Git ref 映射提供 Git ref 名称、Git 对象 ID/类型、Snapshot 索引和数值 形式的 AIT Tag 索引。轻量 Tag 的 Git 对象类型是 commit,原始 Tag 字节为空。 附注 Tag 的对象类型是 tag,并在带类型的 payload 中保留它的消息和完整的原始 Tag 对象。
GIT_OPERATION_CHECKPOINT_RECORD_SIZE = 44
GitOperationCheckpointRecord — git_operation_checkpoint.bin:
u8 checkpoint_meta
u8 reserved0
u16 reserved1
u32 generation_index
u8 operation_hash64[8]
u8 plan_hash96[12]
u32 next_commit_index
u32 next_ref_index
u64 updated_at_soperation_hash64 存放 GIO-IMPORT-* 或 GIO-EXPORT-* 的 16 位十六进制 数字;plan_hash96 存放 GIP-* 或 GEP-* 的 24 位十六进制数字。两个 next 索引是可续跑的计划游标。checkpoint 就地更新,checkpoint_meta 最后写入,作为 状态提交标记。已完成的操作结果由它的 generation 和不可变映射行确定性地重建; 没有任何不透明的结果 JSON 具有权威性。
映射的 contract、文本 record_id、文本形式的 AIT ID、Base64 包装,以及重复 的 JSON 数组 parent_*_ids 和 file_modes 都不存储。公开的 GIM-* 记录身份 仍由已 land 的 git-identity-map/v1 逻辑规范化推导,排除 created_at 和记录 ID 本身。commit、ref 和 Tag 映射的物理 ordinal 就是它们确切的追加顺序;不持久 化任何由 AIT 生成的亚秒级排序时间戳。有符号的 GitIdentityRecord.timestamp_s 和时区单独保留,因为它们是确切的 Git identity 数据。identity_source、 published_remote_name 以及新增的 planning-state 字段都不属于 Git 互操作。 Git 导入不会伪造任何 Task 或策略沿革;现有的 TaskRecord.task_meta planned 位 仍然是完整的二进制 planning 状态。