Files
ElyOffice/tasks/reviews/C06.4-r1.md
T

2.1 KiB
Raw Blame History

FAIL

crates/ely-files/src/policy.rs:102 — 保存完成只接收 ok: bool,成功时无条件清除最新编辑的计时,丢失保存期间新增修订的自动保存任务。复现:已有路径的 Mark 文件在 t=100 编辑 revision 1,t=101 返回 SaveDue 并取得保存票据;t=101.2 编辑 revision 2;随后 revision 1 落盘,Session::finish_save 正确保留 Dirty,但 PolicyEngine::save_finished(true) 清空计时,t=102.2 及之后持续返回 Nothing,磁盘停留在 revision 1。临时测试结合 Session 与 save_atomic 实测失败,违反 §6.2 的停输入 1 秒自动保存要求。修复方向:保存完成关联提交时的修订或编辑代次,仅清除该任务已经持久化的编辑;保留较新编辑的截止时间,并加入保存期间继续输入的回归测试。

crates/ely-files/src/policy.rs:64 — 无路径期间的编辑被直接丢弃,首次保存成功后 set_has_path() 也没有恢复待保存编辑的计时。复现:新建 Mark 文件,revision 1 开始首次显式保存;保存期间输入 revision 2,edit() 因 has_path=false 跳过记录;revision 1 落盘后设置路径,此时会话仍为 Dirty,后续 tick() 永远返回 Nothing。临时落盘测试实测失败;即使上一项修复为保留较新的计时,此处仍没有可保留的记录。修复方向:无路径期间也记录最新编辑和修订,仅阻止自动提交;首次保存取得路径后,为尚未持久化的编辑继续调度,并覆盖首次保存期间输入的测试。

crates/ely-files/src/policy.rs:74 — 防抖使用可回拨的 SystemTime,且把负时间差静默替换为零,导致 Mark 的 1 秒自动保存被系统校时推迟。复现:edit(UNIX_EPOCH + 100s) 后系统时钟回拨 60 秒,实际已经停止输入 1 秒时调用 tick(UNIX_EPOCH + 41s),实测返回 Nothing;直到墙上时间追到 101 秒才返回 SaveDue,实际等待约 61 秒。修复方向:用 Instant 或可注入的单调时钟计算防抖期限,移除吞掉时间错误的默认值,并增加校时场景的回归覆盖。