# 2026-06-25 Mindraw选择 ## 用户目标 继续向 Phase 3.5 前的完整 `.mindraw` 格式推进;本轮聚焦 Phase 2 剩余的目录包选择、系统打开边界和失败态状态保护。 ## 已完成事项 - 新增 `openDirectoryOrDocument()` store 入口: - 普通目录继续执行 `loadDirectory()`。 - `.mindraw` 路径按文档打开,调用 `read_mindraw_package`,随后加载父目录,避免浏览包内部。 - 菜单 `Open Directory`、快捷键 `Cmd/Ctrl+O`、侧边栏目录选择按钮均接入 `openDirectoryOrDocument()`。 - 侧边栏空目录提示从 “No .excalidraw files found” 改为 “No Mindraw documents found”。 - 新增自动化测试: - 普通目录选择仍加载目录。 - `.mindraw` 目录包选择会打开包文档且不对包内部执行 `get_file_tree`。 - damaged `.mindraw` 打开失败时保持当前 tab / active file 不变,并弹出失败提示。 - 本地 debug app smoke: - `.excalidraw` 文件可通过 `open -n -a .../Mindraw.app Legacy.excalidraw` 进入 opened-files 链路并打开。 - `.mindraw` 普通目录包通过同一 `open -a` 方式未进入 Tauri `Opened` 文档事件,符合当前“不注册 macOS package”的 MVP 边界。 ## 关键决策 / 边界 - 本轮不注册 macOS package,不修改 `tauri.conf.json` 的 `.mindraw` file association。 - Finder / `open -a` 直接打开普通 `.mindraw` 目录包目前不能视为完成;该体验需要后续 macOS package 注册或 Phase 3.5 deep link 方案继续验证。 - 目录选择器返回 `.mindraw` 的路径已在应用层补齐,属于 Phase 2 可推进范围。 ## 文件变更 - `src/store/useStore.ts` - `src/store/useStore.test.ts` - `src/components/Sidebar.tsx` - `src/hooks/useMenuHandler.ts` - `src/hooks/useKeyboardShortcuts.ts` - `02-P/qa/mindraw-phase2-runtime-check.md` - `02-P/plan-progress.markdown` - `CODEGRAPH.md` ## 验证结果 - `npm run test:run -- src/lib/documentFormat.test.ts src/store/useStore.test.ts`:PASS,36 个测试通过。 - `npm run test:run -- src/hooks/useMenuHandler.test.ts src/lib/documentFormat.test.ts src/store/useStore.test.ts`:PASS,51 个测试通过。 - `npm run tauri -- build --debug --bundles app`:PASS,生成本地 QA debug `.app`。 - `git diff --check`:PASS。 - 本轮 debug app 验证后已停止 App、恢复 preferences、删除临时验证目录。 ## 未决问题 - 仍需真实原生 folder picker 点击选择 `.mindraw` 包的人工验证;自动化已覆盖同一结果路径。 - Finder 直接打开 `.mindraw` 普通目录包未完成,需后续 package 注册或 deep link spike。 - Finder 拖放 `.mindraw` 到 App、完整 damaged manifest / hash mismatch / illegal asset path UI 文案矩阵仍未完成。 ## 后续建议 继续 Phase 2:补 Save As 弹窗过滤器人工验证、Finder 拖放行为、失败态人工矩阵。Phase 2 结论收口后再进入 Phase 3 导出互通;Phase 3.5 全局链接仍保持后置。