Files
ElyOffice/tasks/reviews/C14.6-r2.md
T

12 lines
4.4 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
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`。修复方向:为既有会话格式迁移新增列字段,保留已有标签、正文、模式、行号和滚动位置,并加入第一轮会话文件的启动回归。