2.7 KiB
FAIL
crates/ely-files/src/session.rs:277 — 外部变更将 Loading/Saving 直接改成 ExternalModified,导致第 213 行新增的覆盖保存守卫失效。隔离测试中,加载期间收到 external_modified() 后,begin_save_overwrite() 返回成功;已有修订 1 保存任务时收到外部变更、编辑到修订 2,也能启动第二个保存任务。进一步按“修订 2 写盘、修订 1 写盘、修订 1 完成回调、修订 2 完成回调”重放,实际得到 state=Saved、revision=2、saved_revision=2,磁盘内容仍为修订 1,违反 FILE-03。修复方向:独立维护加载与进行中的保存任务,外部冲突事件持续保留任务限制,覆盖确认仅解除冲突限制;补充加载中变更和保存交错完成的回归测试。
crates/ely-files/src/session.rs:389 — 文件身份只在已命中登记后的第 392 行刷新,原子替换后仍可能使用过期 inode 去重。隔离测试打开 doc.md 为 Fresh(0),通过临时文件 rename 完成原子保存并调用 finish_save(),再给新文件建立 alias.md 硬链接;is_open(doc.md) 为 true,is_open(alias.md) 为 false,打开 alias.md 得到 Fresh(1),产生两个可写会话,违反 §6.1。另一测试保留旧文件的硬链接后替换 doc.md,打开旧链接反而得到 Focus(0),聚焦了内容与目标均已不同的会话。修复方向:替换后同步更新登记身份,并在硬链接匹配前核实缓存身份与登记路径的当前文件一致;覆盖替换后的新旧硬链接场景。
crates/ely-files/src/session.rs:187 — 上轮外部冲突修复保住了普通保存守卫,但编辑仍将 ExternalModified 改成 Dirty,隐藏尚未解决的外部修改。隔离测试执行外部写入、external_modified()、edit() 后,begin_save() 返回 ExternalModified,state() 却返回 Dirty;冲突标志为私有字段,显示层无法通过会话状态持续显示外部已修改,违反 FILE-02。现有 tests.rs:159 还将 Dirty 写成预期。修复方向:编辑后继续向显示层暴露未解决的外部修改状态,并让回归测试断言冲突提示持续存在。
crates/ely-files/src/session/tests.rs:265 — 上轮要求的 Windows 硬链接回归仍被 #[cfg(unix)] 排除,新增 Windows 文件身份分支缺少硬链接去重的行为测试。Windows 编译会直接删除 hard_links_share_one_session;若该平台重新退化为按路径去重,同一文件两个硬链接生成两个可写会话的缺陷仍缺少检测。本轮 18 项原有单测及 Windows --tests 编译检查均通过,硬链接行为仅在本机 Unix 执行。修复方向:让现有硬链接回归覆盖 Windows,并在 Windows 上运行该测试验证卷与文件身份去重。