edit | blame | history | raw

2026-06-25 Mindraw 拖放

用户目标

继续推进 .mindraw Phase 2:验证并补齐 Tauri 目录包相关的选择、打开、保存、watch、拖放、路径校验和失败态,不进入全局链接 runtime 或 macOS package 注册。

已完成事项

  • 补齐 Finder/Tauri drop 的文档路径分流:拖放路径中如果包含顶层 .mindraw 包或 .excalidraw 文件,先按文档打开;同批图片路径不再继续导入。
  • 空画布状态也挂载 drop root,使没有 active file 时具备接收文档 drop 的前端路径。
  • 增加自动化覆盖:
  • getSupportedDroppedDocumentPaths() 保留顶层 .mindraw / .excalidraw,拒绝 .mindraw/drawing.excalidraw 内部路径并去重。
  • openDroppedDocuments() 打开 .mindraw 包,且不会触发图片导入。
  • 非文档路径返回 false,不调用 Tauri。
  • 补强 Save As 失败态后端测试:
  • 目标 .mindraw 已在其他 dirty tab 打开时拒绝覆盖。
  • 无效 scene content 另存为 .mindraw 时不留下半包目录。
  • 补齐 .mindraw 核心打开失败态文案:
  • manifest 损坏提示 manifest missing/damaged/invalid。
  • scene/hash 异常提示 scene damaged 或 hash mismatch。
  • 非法资产路径提示 unsafe asset path。
  • 保留后端 Details,失败时不切换当前 active tab。
  • 重建本地 QA debug .app
  • 尝试真实 Finder 拖放 smoke:使用 /tmp/mindraw-phase2-drag-check、debug bundle、Finder reveal、cliclick 和 Computer Use 多次尝试;多屏坐标和工具 drag 接口未能稳定形成可被 Tauri 接收的 Finder 文件 drop 事件,因此该项未签 PASS。
  • 完成原生 folder picker smoke:
  • 直接输入 .mindraw 包路径会进入包目录内部,不能作为包路径返回。
  • 回到父目录后选中 PickBoard.mindrawOpen 仍禁用,不能直接选择普通目录包。
  • 选择父目录后,App 文件树显示 PickBoard,点击节点可成功打开 .mindraw tab。
  • Picker smoke 清理时曾并行删除偏好备份导致自动恢复失败;随后已按 smoke 前可观察状态把 last_directory 修复为 /Users/ar/Desktop,并移除临时 recent 项。
  • 完成 macOS 菜单结构修复:
  • 发现 Tauri 自定义菜单首个 submenu 被 macOS 当作应用菜单,导致 Open DirectorySaveSave As... 误挂到 Mindraw 应用菜单下,菜单栏缺少独立 File
  • src-tauri/src/menu.rs 新增标准 macOS app menu,把 File 放回独立菜单;macOS Quit 回到应用菜单。
  • 验证 osascript 返回菜单栏 Apple, Mindraw, File, Edit, View, Window, HelpFile 菜单含 Open DirectoryNew FileSaveSave As...Export as Obsidian Excalidraw...Recent Directories
  • 完成 Save As 原生面板 smoke:
  • File > Save As... 可打开系统 Save sheet。
  • Cmd+Shift+S 在 Computer Use smoke 中未打开 sheet,需后续真实键盘或更稳定自动化复测。
  • Save sheet 中 SaveCopy.mindraw 保持 Save disabled,SaveCopy.excalidraw 可启用 Save;当前 .add_filter("Mindraw", ["mindraw"]) 不足以让用户通过原生 save panel 直接创建 .mindraw 包。

关键决策

  • 不把自动化通过等同于真实 Finder 拖放 PASS;QA 报告中明确写为“真实 Finder 拖放 smoke 未可靠完成”。
  • 不改变此前“不注册 macOS package、不提前 Phase 3.5”的边界;Finder / open -a 直接打开普通 .mindraw 目录包仍记录为 Phase 2 边界/后续 package 或 deep link 问题。

文件变更

  • src/lib/imageDrop.ts
  • src/lib/imageDrop.test.ts
  • src/hooks/useMenuHandler.ts
  • src/hooks/useMenuHandler.test.ts
  • src/components/ExcalidrawEditor.tsx
  • src-tauri/src/menu.rs
  • 02-P/qa/mindraw-phase2-runtime-check.md
  • 02-P/plan-progress.markdown
  • CODEGRAPH.md

验证结果

  • npm run test:run -- src/lib/imageDrop.test.ts src/hooks/useMenuHandler.test.ts src/lib/documentFormat.test.ts src/store/useStore.test.ts:PASS,4 个测试文件,64 个测试通过。
  • cargo test --locked --manifest-path src-tauri/Cargo.toml mindraw_package_tests:PASS,17 个测试通过。
  • cargo check --manifest-path src-tauri/Cargo.toml:PASS。
  • npm run build:PASS。
  • npm run tauri -- build --debug --bundles app:PASS,生成本地 QA debug .app;菜单修复后已重新运行。
  • macOS 菜单结构 smoke:PASS,File 菜单恢复独立。
  • Save As 原生面板 smoke:PARTIAL / FAIL,菜单项能打开 sheet,但 .mindraw 文件名不能启用 Save;Cmd+Shift+S 仍待复测。
  • git diff --check:PASS。
  • cargo fmt --manifest-path src-tauri/Cargo.toml:未执行成功,当前 stable toolchain 未安装 cargo-fmt / rustfmt

未决问题

  • 真实 Finder 拖放 .mindraw 到 App 仍需人工或更稳定 UI 自动化复测。
  • 原生 Save As 直接创建 .mindraw 包已实测未达标,需要后续专门入口、默认保存策略或文件选择器方案。
  • Cmd+Shift+S Save As 快捷键在本轮自动化 smoke 中未触发,需要真实键盘或更稳定自动化复测。
  • 真实 Finder 拖放 smoke 和更完整失败态人工矩阵仍未完成。
  • 原生 folder picker 直接选择 .mindraw 包已实测失败;后续若要直接选包,需要 macOS package 注册、deep link 或专门“Open Mindraw Package”入口。
  • Finder / open -a 直接打开普通 .mindraw 目录包仍受“不注册 macOS package”的 MVP 边界限制。

后续建议

  • 下一步优先收口 Phase 2 剩余可验证项:Save As .mindraw 原生面板方案、Cmd+Shift+S 复测、真实 Finder 拖放、失败态文案矩阵。
  • 如果继续卡在真实 Finder 拖放自动化,应让人工手测补证据,或先建立可稳定触发 Tauri onDragDropEvent 的 UI 自动化方案。