Files
new-markdown/docs/14-acceptance-fix-report.md
Muse 9bd3f3de97 fix(acceptance): 首轮 Windows 验收 7 项缺陷回修(docs/14)
P0 快捷键让行判定补 recoveryDismissed,点过「稍后再说」不再全失效;
P1 冲突重载加 force 绕过防竞态守卫;路径分隔符 joinPath 原生化 +
samePath 归一化比较;.source-cm 补文档字色;
P2 turndown 启用 GFM 插件(HTML 导入不再丢表格);任务复选框去掉
click preventDefault(浏览器激活撤销覆盖视觉同步);
P3 新增 syncEditorContent:干净标签的挂载/卸载序列化回写同步基线,
切标签不再误标未保存。vitest 74 通过 + 2 跳过。
2026-11-14 11:08:46 +08:00

50 lines
4.7 KiB
Markdown
Raw Permalink 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.
# 验收缺陷回修报告(对应 docs/13 首轮 Windows 验收,2026-11-14)
用户真机验收结论「未通过」,报回 7 项缺陷(P0×1、P1×3、P2×2、P3×1),全部已修。
验证:`npx tsc -b` 0 错误;`npx vitest run` **74 通过 + 2 跳过**(新增回归 3 例:tabs 基线同步、复选框点击同步、HTML 表格导入);`npm run build` 通过。本地未推送,待复验。
## P0 全局快捷键全失效(恢复弹窗点过「稍后再说」后)
- 根因:审计修复时给全局快捷键加的「任一弹窗打开时让行」判定用了 `recoveryOffer.length > 0`,没算「已点稍后再说」的状态——草稿记录还在库里,offer 就一直在,判定恒真,Ctrl+N/O/S/F/W 全部被让行。
- 修复:判定改为 `recoveryOffer.length > 0 && !recoveryDismissed`,与渲染条件一致。
## P1 B3 冲突「重新加载磁盘版本」无效
- 根因:审计 A3 的防竞态守卫(脏标签不许自动重载)把冲突弹窗这条「用户主动丢弃本地修改」的路径也挡了——弹窗关了、正文没换。
- 修复:reloadTabFromDisk 增加 `force` 参数;自动轮询走守卫路径,冲突弹窗的「重新加载」传 force 绕过守卫(卸载回写闸门仍生效,不会被旧编辑器盖回)。
## P1 D3/B12 路径分隔符不一致
- 根因:`joinPath` 恒用 `/` 拼在 Windows 反斜杠目录后面,造出 `...\ws/d3-new.md`,与 Rust/对话框返回的 `...\ws\d3-new.md` 字符串比较对不上:重命名后已开标签不跟随、删除后标签不关(进而又触发「已被外部删除」的误报提示,盖掉删除成功的提示;B12 本身已进回收站)。
- 修复:双管——`joinPath` 按父目录既有分隔符拼接(Windows 生成原生反斜杠路径);同时新增 `samePath` 归一化比较,用在打开去重、重命名查标签、恢复查标签、删除关标签(含子路径前缀判定)全部路径比较点。
## P1 E2 源码模式浅纸浅字
- 根因:`.source-cm` 没设文字色,继承了 UI 的 `--text`(深色 UI 下近白色),而纸面是文档主题的浅色(Notion #fbfbfa),浅字压浅纸。
- 修复:按建议 `.source-cm { color: var(--doc-ink); caret-color: var(--doc-ink) }`,源码明暗此前已按 paperTone 选过 CodeMirror 主题,这次把容器继承色也对齐到文档字色。
## P2 E6 HTML 导入丢表格
- 根因:turndown 未启用 GFM 插件,表格整段丢失(标题/列表正常)。
- 修复:新增依赖 turndown-plugin-gfm@1.0.2(MIT),htmlToMarkdown 启用 `gfm`(表格/删除线/任务列表一并补齐),附本地类型声明。回归测试:HTML 表格导入后生成标准 GFM 表格。
## P2 C3 任务复选框视觉不同步
- 根因:click 处理里 `e.preventDefault()`——浏览器对 checkbox 的激活语义是「点击先翻转、事件被取消则退回原值」,退回动作发生在事件结束后,正好把 NodeView update() 刚同步好的 `input.checked` 又退回去;`data-checked` 是普通属性不受影响,症状正是「数据变了、勾没变」。
- 修复:click 不再 preventDefault(原生翻转与文档翻转方向一致,update 再按文档值对齐);取不到节点时手工把视觉退回文档值。回归测试:真实 click 后 `input.checked` 与序列化结果一致。
## P3 切标签后旧文档偶发误标未保存
- 根因:编辑器挂载/卸载的序列化回写与磁盘原文存在规范化差异(表格对齐冒号、欢迎页内容最典型),回写经普通 updateContent 落地后 content≠savedContent,干净文档被标脏,进而触发自动保存与恢复记录。
- 修复:新增 reducer 动作 `syncEditorContent`——标签原本干净时,正文与基线一起对齐(规范化不算编辑);已脏时与普通更新无异。只走两条通道:挂载完成后的首次序列化对齐(EditorPane onSyncInitial)、卸载最终回写(onFinalMarkdown,含原有的重载闸门)。实时输入仍走 updateContent,脏标记语义不变。回归测试已加。
## 复验建议(对应 docs/13 条目)
P0 复验:留一份草稿 → 点「稍后再说」→ Ctrl+N 应能新建。
B3 复验:按原步骤点「重新加载」应换成磁盘版本且标签变干净。
D3/B12 复验:工作区里新建的文档重命名/删除,已开标签应跟随/关闭,提示不再被「已被外部删除」覆盖。
E2 复验:深色 UI + Notion 切源码模式,文字应为深色(rgb 55,53,47 量级)。
E6 复验:导含表格的 HTML,表格应以 GFM 表格出现。
C3 复验:点任务复选框,勾选视觉立即跟随。
P3 复验:打开欢迎页/含表格的文档来回切标签,不应出现未保存圆点。