4.4 KiB
FAIL
apps/ely-mark/src/compare.rs:106 — Keep Yours 在异步导出完成后调用无条件覆盖的 keep_mine,比较指纹仅在点击时核对,第一轮的并行写入缺陷仍有窗口,违反 FILE-05、§14.4、QA-22。复现:基线为 base\n\nend\n,本地插入 X,外部追加 tailA;Compare → Keep Yours 后、导出完成前,外部写入 tailB。在隔离副本中仅给后台导出加入 750 毫秒延迟,最终磁盘为 Xbase\n\nend\n,新写入的 tailB 丢失。证据:/tmp/c146r2-slowmine-result.log。将比较指纹设为受检保存的基线并走普通保存后,同一探针保留 tailB,见 /tmp/c146r2-slowmine-repair-result.log。修复方向:把选定快照的指纹带到导出完成后的实际写入检查,遇到后续变化重新比较;Keep Yours 也须走该受检路径。
apps/ely-mark/src/restore.rs:184 — 所有无路径恢复项都匹配任意无路径标签,且 Desk::observed 在每次 Reported 后调用 restore_shown;一个标签会连续消耗多份恢复文本,违反 MARK-12、§6.3。真窗口复现:两个合法恢复槽分别含 FIRST\n 和 SECOND\n,重启时日志连续两次记录 restores tab 1 as source;第二份正文覆盖第一份,另一标签为空。等待 10 秒后,清单只引用第二个恢复槽和一个新的空标签槽,FIRST 的旧槽被 sweep 删除。证据:/tmp/c146r2-multirestore3-result.log、/tmp/c146r2-multirestore3-1.log。隔离副本限制每个标签只恢复一次后,两份正文均保留,见 /tmp/c146r2-multirestore-fullrepair-result.log。现有 mark-outside.sh 仅统计恢复提示数量,此场景仍能满足两条提示。修复方向:创建恢复标签时绑定恢复槽与唯一标签 ID,按该身份消费一次,并逐份断言重启后的正文及所属标签。
crates/ely-office/src/dialogs.rs:109 — 未保存询问的 Save 分支继续关闭流程;后续系统保存面板取消时,save.rs:187 仅写日志,close_cancelled 没有被调用,ElyMark 的 keeping.leaving 持续为 true,第一轮的清单冻结缺陷仍存在,违反 MARK-12。真窗口复现:新建并输入 first,Cmd+Q,按 AXButton 角色定位询问中的 Save,取消系统保存面板;再新建并输入 second,等待 12 秒。AX 有两个标签、两份恢复点已写入,session.json 仍只记录 Untitled 1;终止并重启仅恢复第一份。证据:/tmp/c146r2-savecancel-button-result.log、/tmp/c146r2-savecancelbutton-2.log。保存面板取消时调用关闭取消钩子后,清单记录两个标签,见 /tmp/c146r2-savecancel-button-repair-result.log。修复方向:关闭流程所有后续取消与失败出口统一结束关闭状态,并恢复会话清单更新;增加 Save → 系统面板 Cancel 的重启回归。
apps/ely-mark/src/desk.rs:75 — 取消退出只解除 leaving 标记,已放弃标签的清单记录与恢复槽仍等到下一次十秒定时任务才删除,违反 §6.2 的显式放弃契约,也违背 TASKS.md 的“随即删去”声明。真窗口复现:恢复含 FIRST 的 Untitled 1,再新建含 SECOND 的 Untitled 2;Cmd+Q,对第一个标签选 Don't Save,对第二个选 Cancel,立即终止应用。此时清单与恢复目录仍保留第一个标签;重启显示 Untitled 1 的恢复提示,已放弃内容再次返回。证据:/tmp/c146r2-discarded2-result.log。隔离副本在取消关闭时立即同步实际标签与恢复槽,同一探针只恢复 Untitled 2,见 /tmp/c146r2-discarded2-repair-result.log。修复方向:完成放弃或关闭时立即持久化结果并清理对应恢复槽,处理在途恢复任务,保证随后崩溃也遵守放弃结果。
apps/ely-mark/src/view.rs:28 — 新增 column 为必填反序列化字段,第一轮已写出的合法 {line, scroll} 光标记录会导致整个应用启动失败,违反 MARK-12。复现:session.json 保留有效文件路径、source 模式和 place: {"line": 1, "scroll": 0},运行当前已构建的 ElyMark;进程退出码为 1,报 missing field column,标签和正文均未打开。证据:/tmp/c146r2-oldplace.log。在隔离副本兼容旧记录的缺列字段后,同一格式恢复为 source,原件字节保持 abc\n,见 /tmp/c146r2-oldplace-repair-result.log。修复方向:为既有会话格式迁移新增列字段,保留已有标签、正文、模式、行号和滚动位置,并加入第一轮会话文件的启动回归。