Files
ElyOffice/tasks/reviews/C06.1-r4.md
T

2.1 KiB
Raw Blame History

FAIL

crates/ely-files/src/session.rs:249 — 重载后的旧保存回调直接返回 StaleTicket,新增的 saving 标志持续为 true。隔离测试执行 begin_save()、写盘、外部修改、reload()、旧任务 finish_save()、edit();旧回调返回 StaleTicket,随后 state() 为 Dirty,begin_save() 与 begin_save_overwrite() 均持续返回 Saving,已结束的任务永久阻塞后续保存。现有 a_reload_kills_old_tickets 只断言修订与显示状态,遗漏恢复保存。修复方向:独立跟踪进行中的任务身份,在旧任务结束时释放对应槽位,同时继续拒绝其过期内容确认;补充重载、旧任务结束、再次保存的回归测试。

crates/ely-files/src/session.rs:226 — 加载失败限制仍依赖可被外部事件覆盖的显示状态。隔离测试执行 Session::loading(path)、fail_load()、外部写入、external_modified()、begin_save_overwrite(),实际得到 fingerprint=None 与 Ok(SaveTicket { generation: 0, revision: 0 })。文件内容尚未成功加载,覆盖保存已获准,可将空白或残缺的内存内容写回文件;上一轮任务守卫修复仍遗漏失败加载后的变更事件。修复方向:独立保留加载成功与编辑可用性,所有保存入口持续检查该条件,覆盖确认只解除外部冲突;补充加载失败、外部变更、覆盖保存的拒绝测试。

crates/ely-files/src/session.rs:399 — 实时身份匹配将 file_id(have) 的所有错误转换为 false,静默失去同文件去重。macOS 隔离测试先打开 restricted/doc.md 为 Fresh(0),给它建立可访问的 alias.md 硬链接,再撤销 restricted 目录的访问权限;已登记路径的 metadata 返回 PermissionDenied,is_open(alias.md) 却返回 Ok(false),open(alias.md, false) 返回 Ok(Fresh(1))。同一 inode 形成两个可写会话,违反 §6.1,并吞掉实际文件系统错误。修复方向:匹配流程返回可传播的错误,权限等身份查询失败通过 open()/is_open() 暴露且保持登记不变;补充已登记路径失去访问权限后的硬链接回归测试。