2.1 KiB
FAIL
crates/ely-files/src/session.rs:262 — 旧票据在身份校验前无条件清空 saving,能够释放另一个正在运行的保存任务。上一轮的单次旧回调释放场景已通过;隔离测试继续执行“旧任务开始、reload、旧任务完成被拒绝、新任务开始、旧完成回调重复到达、新任务写盘并完成”,实际新任务的 finish_save() 返回 StaleTicket,state() 持续为 Saving;重复旧回调之后也已解除并发保存守卫。现有回归仅检查空闲时重复完成,遗漏新任务进行中的重复回调。修复方向:记录可核对的进行中任务身份,仅由对应任务释放槽位;过期内容确认继续拒绝,并覆盖旧回调与新任务重叠的测试。
crates/ely-files/src/session.rs:307 — reload() 成功后遗漏更新新增的 loaded 标志,加载失败后的恢复仍持续拒绝保存。隔离测试执行 Session::loading(path)、fail_load(),成功读取文件并调用 reload(),得到 Saved;随后 edit() 得到 Dirty,begin_save() 却返回 LoadFailed。重新加载成功的会话因此无法通过保存流程持久化后续编辑,显示状态与保存能力冲突。上一轮“加载失败后外部变更仍拒绝覆盖”已通过,测试遗漏成功重载后的恢复。修复方向:成功重载同步更新加载生命周期与内容可用性,失败时保持原状态,并补充加载失败、成功重载、编辑及保存的回归。
crates/ely-files/src/session.rs:443 — 身份查询错误在登记新会话之后传播,open() 返回失败时遗留虚假登记。上一轮权限错误暴露测试已通过;macOS 隔离测试依次打开 first.md 为 Fresh(0)、restricted/second.md 为 Fresh(1),撤销 restricted 的访问权限,再执行 open(first.md, true),得到 PermissionDenied。恢复权限并关闭会话 0 后,is_open(first.md) 仍为 true,再次打开得到 Focus(2),该会话从未成功创建,无法聚焦有效窗口。修复方向:全部可能失败的身份查询在提交登记前完成,失败时保持登记与编号原状;补充已匹配文件后仍有权限失败条目的只读打开回归。