# 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.markdown`、`CODEGRAPH.md`、`INDEX.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。