edit | blame | history | raw

2026-06-25 Mindraw 导出互通

用户目标

继续推进 .mindraw 基本可用,当前阶段补 Phase 3:.mindraw 导出标准 .excalidraw 和 Obsidian .excalidraw.md,不提前做 mindraw:// 全局链接 runtime。

已完成事项

  • 新增 File > Export as Excalidraw... 菜单项。
  • 新增前端 exportCurrentFileAsExcalidraw(),从当前 active Tab flush 后的 Excalidraw 内容导出标准 .excalidraw,导出后不接管当前 Tab。
  • 新增后端 Tauri command export_excalidraw_file,校验 Excalidraw JSON,保存面板只使用 .excalidraw filter,并把输出路径归一为 .excalidraw
  • 修正 Obsidian 导出文件名:Board.mindraw 建议导出为 Board.excalidraw.md
  • 补充前端和 Rust 测试,覆盖 .mindraw 当前 Tab 导出 .excalidraw / .excalidraw.md、active Tab 不变、路径归一和建议名净化。
  • 新增 QA 记录 02-P/qa/mindraw-phase3-export-check.md
  • 更新 02-P/plan-progress.markdownCODEGRAPH.mdINDEX.md

关键决策

  • Phase 3 的 .excalidraw 导出不复用 save_file_as,因为 save_file_as 会接管当前 Tab 路径;导出互通应写出一份外部文件,同时用户仍停留在原 .mindraw 包中继续编辑。
  • 本轮只做导出互通,不做 .assets 外置资产权威化,不做 Obsidian 插件版本锁定,不做 mindraw:// 全局链接 runtime。
  • debug .app 只作为本地 QA 构建,不生成 DMG,不做版本号 / build 号 / tag / changelog 发布动作。

文件变更

  • src/hooks/useMenuHandler.ts
  • src/hooks/useMenuHandler.test.ts
  • src/lib/obsidianExcalidraw.ts
  • src/lib/obsidianExcalidraw.test.ts
  • src-tauri/src/lib.rs
  • src-tauri/src/menu.rs
  • 02-P/qa/mindraw-phase3-export-check.md
  • 02-P/plan-progress.markdown
  • CODEGRAPH.md
  • INDEX.md

验证结果

  • npm run test:run -- src/hooks/useMenuHandler.test.ts src/lib/obsidianExcalidraw.test.ts:PASS,2 个测试文件,30 个测试通过。
  • npm run test:run -- src/lib/imageDrop.test.ts src/hooks/useMenuHandler.test.ts src/hooks/useKeyboardShortcuts.test.tsx src/lib/documentFormat.test.ts src/lib/obsidianExcalidraw.test.ts src/store/useStore.test.ts:PASS,6 个测试文件,81 个测试通过。
  • cargo test --locked --manifest-path src-tauri/Cargo.toml obsidian_export_tests:PASS,5 个测试通过。
  • cargo test --locked --manifest-path src-tauri/Cargo.toml mindraw_package_tests:PASS,19 个测试通过。
  • cargo test --locked --manifest-path src-tauri/Cargo.toml:PASS,26 个测试通过。
  • cargo check --manifest-path src-tauri/Cargo.toml:PASS。
  • npm run build:PASS,仍有既有字体、Tauri dialog import 和 chunk size warning。
  • npm run tauri -- build --debug --bundles app:PASS,生成本地 QA debug .app
  • git diff --check:PASS。
  • 真实 debug 菜单 smoke:按裸 debug 二进制 pid 读取 File 菜单,确认包含 Export as Excalidraw...Export as Obsidian Excalidraw...

未决问题

  • 完整“打开 .mindraw 后通过系统保存面板导出文件”的真实 GUI smoke 未签 PASS。本机 /Applications/Mindraw.app 与 debug app 共用 bundle id com.mindraw.desktop,按应用名自动化会被解析到安装版,导致菜单和文件树行为混入旧构建。
  • GUI smoke 期间误触发新建 /Users/ar/Desktop/26.0625.1718-.excalidraw,已删除;偏好文件已从备份恢复,所有 Mindraw 进程已停止。

后续建议

  • Phase 3 下一步:用唯一 bundle id 的 QA build,或临时移开安装版后,补完整保存面板导出 .excalidraw / .excalidraw.md 的真实 smoke。
  • Phase 3.5 仍按原计划后置:再进入 mindraw:// 系统 scheme、本机打开包和对象定位 spike。