fix: align local markdown conflict and title behavior
This commit is contained in:
@@ -0,0 +1,49 @@
|
||||
我手动测试,以下bug仍然存在:
|
||||
1.我的空间:向文件树中的md文件中拖动文件进行上传文件,能正常在主编辑 md 中显示,点击也能正常打开,但是见 /mnt/Data1T/mnote/tmp/image copy
|
||||
65.png,文件是和主文件夹同级(应该在我的文件夹下级)。
|
||||
2.上传文件后,弹出文件冲突:/mnt/Data1T/mnote/tmp/image copy 76.png,重新新建页面(冲突信息被带到新页面,
|
||||
刷新后消失),文件冲突依然存在。冲突信息:/mnt/Data1T/mnote/tmp/image copy 77.png;另外一个例子:/mnt/Data1T/mnote/tmp/image copy 85.png,新建的页面直接向文件树拖入文件就提示冲突。
|
||||
|
||||
处理记录(2026-05-24):
|
||||
- 归类:`05-editor-mainline`,本质是本地 Markdown working copy 冲突合同缺失,不是单个上传入口问题。
|
||||
- 参考设计:`design/05-editor-mainline/process/5-27-local-markdown-working-copy-conflict-contract-v1.md`。
|
||||
- Sidex/VSCode 对照结论:正文冲突只应属于同一个 Markdown resource;同 root 下的附件、拖入资源、目录级 watcher 事件不能升级成当前 working copy 冲突。
|
||||
- 根因 1:前端本地文件夹 document event channel 只按 `rootUri` 共享,且 SSE 请求没有携带当前 `documentId`,后端无法按 Markdown 正文路径过滤。
|
||||
- 根因 2:上传附件/文件树拖入等非 Markdown 资源事件的 `documentId` 为空,前端仍继续设置 `externalChangePending`,导致误报文件冲突。
|
||||
- 根因 3:冲突面板是手动插入 `.document-pane` 的 DOM,页面切换时没有随 editor view unmount 清理,因此旧页面冲突 UI 会短暂残留到新页面。
|
||||
- 修复:
|
||||
- `rust/crates/mnote-web/src/routes/web_shell.rs`:document event channel key 从 `rootUri` 收窄为 `rootUri#documentId`,订阅 `/api/local-folder/events` 时携带 `documentId`。
|
||||
- `rust/crates/mnote-web/src/routes/web_shell.rs`:收到空 `documentId` 的资源事件直接忽略,不进入正文冲突链路。
|
||||
- `rust/crates/mnote-web/src/routes/web_shell.rs`:`unmountEditorViewBinding` 清理旧 session 冲突面板,避免跨页面残留。
|
||||
- `rust/crates/mnote-web/src/routes/local_folder_events.rs`:补充 document event filter 测试,确保资源路径不会匹配 Markdown 正文路径。
|
||||
- `scripts/task479-local-folder-markdown-resource-lifecycle-smoke.js`:上传附件和文件树拖入后增加 no-conflict 断言。
|
||||
- 验证:
|
||||
- `cargo test --manifest-path rust/Cargo.toml -p mnote-web document_event_filter_rejects_resource_only_changes -- --nocapture` 通过。
|
||||
- `cargo test --manifest-path rust/Cargo.toml -p mnote-web document_shell_renders_local_markdown_with_same_sidebar_surfaces -- --nocapture` 通过。
|
||||
- `cargo fmt --manifest-path rust/Cargo.toml --all --check` 通过。
|
||||
- `node scripts/task451-local-markdown-conflict-resolution-ui-smoke.js` 通过,说明真实冲突路径仍可用。
|
||||
- `node scripts/task479-local-folder-markdown-resource-lifecycle-smoke.js` 中上传附件 no-conflict 与文件树拖入 no-conflict 通过;后续 broken-link 检查 timeout 属于第 2 条以外的资源缺失解析问题,需单独处理。
|
||||
- Worker 对比:
|
||||
- Reasonix coding 正确定位空 `documentId` 污染,但漏掉 DOM 生命周期与按 `documentId` 隔离 channel。
|
||||
- Claude Code coding 额外定位 DOM 生命周期问题,但清理位置偏晚,仍需主控调整到 editor view unmount。
|
||||
- Claude Code browser 证据更完整,覆盖 no-conflict 与真实冲突;Reasonix browser 只适合作为部分 UI 证据,因为其 result/handoff 状态不一致且误判 SSE 500 为真实冲突阻塞。
|
||||
3.隐藏本地markdown标题,我去除勾选后,新建页面刷新又恢复默认了,应该维持我的选择的状态。另外应该针对我的空间和其它本地文件夹进行区分,我的空间(包括别人分享给我的我的空间,即所有我的空间)中默认显示本地markdown标题,其它的本地文件夹,默认隐藏markdown标题。
|
||||
|
||||
处理记录(2026-05-24):
|
||||
- 归类:`05-editor-mainline`,本质是本地 Markdown page options 默认值与持久化合同不完整。
|
||||
- 根因:`resolve_local_markdown_page_aggregate` 在页面没有持久化 `hideTitleHeader` 时无条件设为 `true`,导致所有本地 Markdown 都默认隐藏标题,没有区分托管工作区(我的空间)与普通本地文件夹。用户取消勾选后只对当前页面写入 `.mnote/page-options.json`,新建页面仍因无记录回到错误默认值。
|
||||
- 修复:
|
||||
- `rust/crates/mnote-web/src/routes/local_folder_source.rs`:无持久化值时检查当前 root 是否存在托管工作区清单;托管工作区默认 `hide_title_header=false`,普通本地文件夹默认 `true`。已有持久化值继续优先,避免覆盖用户选择。
|
||||
- `rust/crates/mnote-web/src/routes/local_folder_source.rs`:更新托管工作区标题测试,并新增普通本地文件夹默认隐藏标题测试。
|
||||
- `scripts/task479-local-folder-markdown-resource-lifecycle-smoke.js`:Check 6 调整为托管工作区默认显示标题;先勾选隐藏并验证持久化,再取消勾选显示并验证刷新后仍显示。
|
||||
- 验证:
|
||||
- `cargo test --manifest-path rust/Cargo.toml -p mnote-web local_markdown_page_title_comes_from_file_name_not_body_heading -- --nocapture` 通过。
|
||||
- `cargo test --manifest-path rust/Cargo.toml -p mnote-web local_markdown_non_managed_folder_default_hides_title_header -- --nocapture` 通过。
|
||||
- `cargo test --manifest-path rust/Cargo.toml -p mnote-web local_folder_documents_save_title_and_options_write_to_disk -- --nocapture` 通过。
|
||||
- `cargo fmt --manifest-path rust/Cargo.toml --all --check` 通过。
|
||||
- `node --check scripts/task479-local-folder-markdown-resource-lifecycle-smoke.js` 通过。
|
||||
- Worker 对比:
|
||||
- Reasonix coding 在隔离 worktree `mnote-wt-0524c-reasonix-title` 完成可用修复,范围控制在 `local_folder_source.rs` 与 `task479`,主控复核后采纳。
|
||||
- Claude Code coding 本轮 Hindsight 注入成功,但因 `--max-budget-usd 1.20` 超预算退出,只停留在代码探索阶段,未产生 diff;这说明 Claude Code full-mode 对编码任务成本较高,需要更小任务切片或更高预算。
|
||||
4.CTRL+Z/CTRL+Y对于删除链接不可用,不能恢复删除的链接。(你应该系统看看还有没有其它ctrl+z/CTRL+Y(撤销/恢复)不能用的场景)
|
||||
5,md文件上传后刷新前面的黑色方块会变成灰色:/mnt/Data1T/mnote/tmp/image copy 80.png;/mnt/Data1T/mnote/tmp/image copy 81.png
|
||||
Reference in New Issue
Block a user