2.1 KiB
FAIL
crates/ely-files/src/session.rs:263 — 保存任务身份仅由 generation 与 revision 组成,同一修订的两次保存会得到相同身份。隔离测试先保存到 first.md,随后保持修订号启动另存为 second.md;第一项任务的重复完成回调实际返回 Ok(()),将状态提前改为 Saved 并释放第二项任务的槽位。second.md 写入成功后的真实完成回调返回 StaleTicket,会话路径仍停留在 first.md,后续保存会继续指向旧文件。上一轮跨 reload 的重复回调场景已通过,同一 generation/revision 的重叠场景仍失败。修复方向:每次保存分配独立任务身份,完成回调按任务身份核对槽位,保留修订号与加载代次的内容有效性检查;补充同修订连续另存为及旧回调重放的回归。
crates/ely-files/src/session.rs:296 — fail_save() 缺少票据参数,仍无条件清空当前保存槽位,成功回调新增的身份守卫未覆盖失败回调。隔离测试执行“任务 A 开始、A 失败、继续编辑、任务 B 开始、A 的失败回调重复到达、B 写入成功并完成”,重复失败回调将状态改为 SaveFailed,B 的 finish_save() 返回 StaleTicket;B 进行期间的并发保存守卫也被解除。修复方向:失败回调携带独立任务身份,仅由匹配任务释放槽位并更新状态;补充旧失败回调与新任务重叠的回归。
crates/ely-files/src/session.rs:436 — 已找到需要聚焦的会话后仍继续查询其他登记路径,后续无关路径的权限错误会阻断同文件聚焦,违反 §6.1。macOS 隔离测试依次打开 first.md 为 Fresh(0)、restricted/second.md 为 Fresh(1),撤销 restricted 目录访问权限,再打开可正常访问的 first.md;is_open(first.md) 返回 Ok(true),open(first.md, false) 却返回 PermissionDenied。上一轮只读打开失败后保持登记与编号不变的回归已通过。修复方向:普通重复打开确认匹配后立即返回 Focus;新建登记继续保持失败时无副作用,并增加已匹配文件后存在无关权限错误条目的聚焦回归。