Parent research epic: #39
背景
当前 worktree API 能记录 base_revision,但 lower tree 仍主要通过 path 查询当前服务端视图。系统无法证明绑定 revision 与实际可见文件树一致,也无法可靠地让 revision A 和 revision B 同时挂载。
目标
将 Dicfuse lower 的身份从:
升级为:
(repository_id, root_tree_oid, base_path, storage_schema_version)
revision 名称只用于解析,真正的数据身份必须落到不可变 commit/tree OID。
Proposed API
#[derive(Clone, Eq, Hash)]
pub struct SnapshotId {
pub repository_id: String,
pub revision_oid: String,
pub root_tree_oid: String,
pub base_path: String,
}
#[async_trait]
pub trait RevisionBackend {
async fn resolve_revision(
&self,
repository: &str,
revision: &str,
) -> Result<SnapshotId>;
async fn list_tree(
&self,
tree_oid: &str,
) -> Result<Vec<TreeEntry>>;
async fn get_blob(
&self,
blob_oid: &str,
) -> Result<Bytes>;
}
优先按 tree OID 遍历,不依赖会随 branch 移动的 path-only API。
Tasks
Acceptance Criteria
Paper Correctness Test
创建 revision A/B,其中同一路径内容不同。挂载 A 后移动 branch,再并发创建 B。验证:
workspace-A always reads A
workspace-B always reads B
shared equal blobs are physically stored once after Issue 4
Relevant Files
src/dicfuse/manager.rs
src/dicfuse/store.rs
src/dicfuse/mod.rs
src/daemon/antares.rs
docs/worktree-api.md
docs/worktree-state-transitions.md
Dependencies
Issue 1 用于观测;Issue 2 用于 correctness/performance harness。
Parent research epic: #39
背景
当前 worktree API 能记录
base_revision,但 lower tree 仍主要通过 path 查询当前服务端视图。系统无法证明绑定 revision 与实际可见文件树一致,也无法可靠地让 revision A 和 revision B 同时挂载。目标
将 Dicfuse lower 的身份从:
升级为:
revision 名称只用于解析,真正的数据身份必须落到不可变 commit/tree OID。
Proposed API
优先按 tree OID 遍历,不依赖会随 branch 移动的 path-only API。
Tasks
SnapshotId和RevisionBackend;DicfuseManagercache key 纳入SnapshotId;mutable/latestcompatibility mode,但不能用于论文主路径;snapshot.v1;Acceptance Criteria
(repository, tree_oid, base_path)返回同一个共享 lower identity;Paper Correctness Test
创建 revision A/B,其中同一路径内容不同。挂载 A 后移动 branch,再并发创建 B。验证:
Relevant Files
Dependencies
Issue 1 用于观测;Issue 2 用于 correctness/performance harness。