仓库路径只有放在所属机器上才有意义。笔记本和服务器都可能有一个叫 demo 的目录,但打开其中一个,不应悄悄选中另一个。2026 年 11 月 9 日合入 Genesis main 分支的更新,将 Projects 页面的最近项目追踪替换为数据库支持的项目登记册,并让项目激活经过当前选中的节点。Projects 集成提交

重新打开项目,身份仍然保留
Virtual Context Tree(VCT,虚拟上下文树)将操作系统中的绝对路径映射到 vct:///projects/demo 这样的规范点位。Mount 就是这份映射,记录点位、路径、显示名称和最后打开时间。它为导航提供稳定身份,无须移动仓库,也不会建立文件系统挂载。登记册实现
再次登记同一规范化路径,只会刷新时间戳并保留原点位。不同路径的目录同名时,会按需增加后缀,生成不同点位。如果旧记录中的路径已不存在,新路径的显示名称和点位末级名称又与之匹配,就可以复用原点位。这是一条具体的迁址规则,而非根据文件夹名称相似就认定它们是同一项目。身份规则
持久化现由任务存储中的 SQLite vct_mounts 表承担。运行中的 VCT 进程保留读取缓存;修改先原子写入整张表,再改变缓存。持久化失败会返回错误,原状态保持不变。成功修改后发送带节点信息的通知,将持久保存的项目身份与界面刷新连接起来。
登记册有容量边界:默认保留最新的 100 个挂载,超过限制时淘汰最旧项。它是一份工作导航记录,不应被当成所有历史仓库的无限档案。存储与容量
项目搜索与打开,使用同一份记录
Projects 页面和项目选择面板现在都使用已登记的挂载。打开或创建项目时,会调用面向节点的 mount_project 接口,然后重新加载列表。路径建议先对已登记路径做不区分大小写的文本匹配,再补充文件系统前缀建议并去重。因此,输入熟悉路径中的一段,就可能找到已登记项目,无须从父目录重新逐级浏览。导航变化
当前项目显示的 VCT 点位从已加载挂载中查找,不会仅为了渲染标签就登记一个新项目。忘记项目会移除登记项,而不会删除仓库文件。这些区别让导航操作与工作本身的修改保持清楚的边界。
选择了远程主机,就沿远程节点处理
设想开发者在本地和 SSH 服务器各有一份 demo。选择远程主机后,界面加载该主机的项目列表。远程连接尚未就绪时,列表保持为空,不会把本地项目展示成远程候选项;激活操作也会等待连接就绪,避免原本发往服务器的请求落到仍处于本地的节点。远程优先加载与激活
远程路径按选中主机的规则解释,包括支持的 POSIX 与 Windows 绝对路径。远程激活异步执行,目录检查与登记不会阻塞 LiveView 界面。后续修复还正确解包了远程挂载结果,使项目能够取得对应 VCT 点位。远程挂载修复
这个场景中的检查可以很具体:重新连接服务器,搜索其已登记路径,打开项目,并确认所选主机和显示的项目点位;再对本地仓库重复操作。相近的目录名称,不应让本地登记册填进尚未就绪的远程视图。
有步骤地接续旧项目记录
对于包含这些改动的开发构建,数据库迁移会从可用的旧 projects 行生成 VCT 挂载,保留非空显示名称,并处理目录同名冲突,最终保留最新 100 项。空路径或相对路径会被记录并跳过。如果旧表无法读取,迁移会中止并回滚,保留旧表及其数据,而不是把读取失败当作空项目列表。迁移保护与上游测试覆盖
在现有工作空间上尝试此类构建前,先备份各相关主机的应用数据。启动后检查已知项目是否出现在正确主机、重新打开是否保留相同点位,以及重启后列表是否仍在。若启动报告迁移错误,应保留数据库和诊断输出用于排查,不要靠删除存储换取一个空列表。
这组更新让开发者在选择工作位置时,就能看清项目边界。关于多仓库之间如何保持代码历史独立,可继续阅读 Genesis 多仓库工作:一个目标,各自的历史。