ElyMark: keys typed before an outside write survive; same text adopts the file; autosave resumes (M-01)

This commit is contained in:
ZacharyZhang-NY committed 2026-10-09 14:39:58 -04:00
1 parent c9bfccc91c
commit 6bf5d6c7e6
10 files changed
+215 -11

No files matched your search

+1 -1
View File
@@ -55,7 +55,7 @@
- [ ] D-06 导航栏大纲点击按当前列表取下标,后台重读后可能越界
- [ ] D-07 导航栏隐藏时仍随每次光标移动重读大纲与书签
- [ ] D-08 Linux、Windows 上“打印…”可用,导出 PDF 后才报“此平台未构建”
- [ ] M-01 键入期间外部以相同内容重写文件,丢掉上次停顿之后键入的全部文字
- [x] M-01 键入期间外部以相同内容重写文件,丢掉上次停顿之后键入的全部文字 — 先等页面送出未送的键;同文只接过文件与字节、标签为已保存;磁盘回到上次保存的文字时保留编辑并恢复自动保存;R1–R4 字节、自动保存、在途写入、已保存基线;R5 PASS
- [ ] M-02 `refresh` 归零版本计数却不换代,在途的一键让标签一直“未落定”
- [ ] M-03 干净标签接过磁盘文字后关闭仍问“是否保存”
- [ ] M-04 第二次打印或导出 PDF 悄悄取消第一次,没有文件也没有错误
+5
View File
@@ -0,0 +1,5 @@
FAIL
apps/ely-mark/src/outside.rs:231(adopt_disk:294):相同文本分支采用新指纹,却保留旧的 doc.source,后续保存使用旧 BOM、换行格式及原始字节,违反 PRD §14.3。真窗口复现两次:打开字节为 b"alpha\n\nbeta\n" 的文件,外部替换为 b"\xef\xbb\xbfalpha\r\n\r\nbeta\r\n",等待 changed outside; unsaved false,再按 Cmd+S;磁盘恢复为原来的 LF 文件,BOM 消失。证据:/tmp/ely-m01-probe-rerun.log 的 bytes expected/actual。修复方向:相同文本采用磁盘版本时同步 doc.source,保持编辑器实例及待处理输入。
apps/ely-mark/src/outside.rs:271(keep_edits:278):磁盘恢复上次保存文本后,只 rebase 会话并清除提示,先前冲突停止的 PolicyEngine 持续处于 stopped 状态;后续键入也无法恢复默认自动保存,违反 PRD §6.2,并撤下了处理该状态的入口。真窗口复现两次:打开 alpha/beta 文档,键入 X,外部写入 external 触发冲突,再把磁盘恢复为原始文本;等待 local edits stay 后键入 Y、停手三秒,磁盘仍是原文,autosaves=0;手动 Cmd+S 才写出 b"XYalpha\n\nbeta\n"。证据:/tmp/ely-m01-probe-rerun.log 及 /tmp/ely-m01-restart.log。修复方向:解除冲突时同步恢复自动保存策略,并为保留的未保存编辑安排停手保存。
+5
View File
@@ -0,0 +1,5 @@
FAIL
apps/ely-mark/src/outside.rs:234(keep_edits:267):保留本地编辑的分支只接过磁盘指纹,丢弃读到的 Source,后续保存仍使用旧 doc.source 的 BOM、换行格式和原始字节,违反 PRD §14.3。真窗口独立复现三次:打开 b"alpha\n\nbeta\n",在开头键入 X,停手保存前外部写入 b"\xef\xbb\xbfalpha\r\n\r\nbeta\r\n";日志出现 local edits stay,自动保存却写出 b"Xalpha\n\nbeta\n"。删掉 X 后再次保存也写回旧 LF 字节。证据:/tmp/ely-m01-r2-probe-results.log、/tmp/ely-m01-r2-stable-1-results.log、/tmp/ely-m01-r2-stable-2-results.log。修复方向:keep_edits 接收并采用本次磁盘 Source,保留编辑器、当前文字与编辑历史;回归覆盖存在未保存输入时的 BOM/CRLF 基线重写。
apps/ely-mark/src/outside.rs:273(autosave.rs:56):重建保存策略时保留了失败自动保存的 extra.writing,save_after_pause 安排的任务随后被 writing.is_some() 阻挡,保留的编辑持续未保存,违反 PRD §6.2。真窗口碰撞探针连续复现两次:打开 alpha/beta 文档并键入 X,在 autosaves tab 日志出现后立即以原文重写文件;保存指纹检查报告 meets an external change,随后 rebase 报 local edits stay。停手四秒,autosaves 仍只有首次失败的一次,磁盘仍为 b"alpha\n\nbeta\n";手动 Cmd+S 才写出 b"Xalpha\n\nbeta\n"。证据:/tmp/ely-m01-r2-collision-2-results.log、/tmp/ely-m01-r2-collision-3-results.log 及对应 save-collision.log。修复方向:恢复策略时结清旧自动保存的 writing 状态与修订归属,再安排保留编辑的保存;回归覆盖自动保存撞上同内容外部重写后,持续停手即可完成保存。
+3
View File
@@ -0,0 +1,3 @@
FAIL
apps/ely-mark/src/outside.rs:300(同文本分支:231;autosave.rs:20):adopt_disk 重建保存策略时保留失败自动保存的 extra.writing,下一轮编辑把旧修订结算到新策略,导致该轮自动保存被跳过,违反 PRD §6.2。真窗口独立复现两次:打开 b"alpha\n\nbeta\n",在开头键入 X,首次 autosaves tab 日志出现时外部写入 b"Xalpha\n\nbeta\n",保存指纹检查报告 meets an external change,同文本分支接过磁盘;随后键入 Y 并停手三秒,磁盘仍为 b"Xalpha\n\nbeta\n",autosaves 仍只有一次;再键入 Z 才自动保存 b"XYZalpha\n\nbeta\n"。原因是 autosave 将旧 writing=1 作为成功保存结算,新策略的 persisted 变成 1,随后 Y 的 edit 也得到 revision=1,tick 因两者相等跳过保存。证据:/tmp/ely-m01-r3-native-results.log、/tmp/ely-m01-r3-collision-current-1.log、/tmp/ely-m01-r3-collision-current-2.log。修复方向:adopt_disk 重建策略时同步清除旧 extra.writing,并覆盖同文本碰撞后首轮编辑停手即可保存的回归场景。
+3
View File
@@ -0,0 +1,3 @@
FAIL
apps/ely-mark/src/outside.rs:239(adopt_disk:302-309):同文本接管更新会话、Source 和保存策略时,保留了旧的 MarkView.saved 与 tab.modified;当前内容已全部写在磁盘上,标签仍参与未保存冲突判定,违反 PRD §14.4、FILE-02。真窗口独立复现三次:打开 b"alpha\n\nbeta\n",在开头键入 X,自动保存前外部写入 b"Xalpha\n\nbeta\n";等待 session: reloaded 并停手三秒,再由外部追加 b"\ngamma\n"。应用记录 changed outside; unsaved true、停止自动保存,AX 树显示 “t.md changed on disk; your unsaved text is kept” 和 Compare… 按钮;按 §14.4 此时应作为干净文件接收外部更新。证据:/tmp/ely-m01-r4-adopt-clean-1.log、/tmp/ely-m01-r4-adopt-clean-2.log、/tmp/ely-m01-r4-adopt-ax-native.log、/tmp/ely-m01-r4-adopt-ax.log。修复方向:同文本接管时同步视图的已保存基线与标签修改状态,保留页面及编辑历史;回归覆盖“外部写入当前编辑文本,随后再次外部修改”的状态转换。
+1
View File
@@ -0,0 +1 @@
PASS