# MD-EDC-06-IMPL 新建文档默认行为实现 日期:2026-07-10 项目:Mindraw 任务:`MD-EDC-06-IMPL` / Assignment `MD-EDC-06-IMPL-20260710` 目标 worktree:`/Users/ar/Projects/Mindraw-worktrees/md-main-better-exp1` 目标分支:`codex/md-main-better-exp1` HEAD:`0e329860f39577bdc0ab8236f5bf442fc163a22b` ## 用户目标 PMO 派工要求在独立 worktree `/Users/ar/Projects/Mindraw-worktrees/md-main-better-exp1` 实现 App 新建文档默认行为: - Finder 前台窗口不算“当前文件夹”。 - Codex project canvas 使用项目根下 `MindrawCanvas/`。 - 无 current folder 时弹出选择位置,不静默 Desktop。 - 新 `.mindraw` 文件名采用 `YY.MMDD-NN.mindraw`。 - 旧 `.excalidraw` 另存保持显式选择,不默认推荐 `.mindraw`。 - App 内部入口允许 active document / currentDirectory fallback;外部 App API / Codex sidebar 未传目录时 fail closed 或要求 `targetDirectory` / `projectRoot`。 ## 已完成事项 - 开始修改前核对目标 worktree 与主线 MEXP15 差异:目标分支缺少主线 MEXP15 的 `documentFormat`、`mindrawProjectCanvasApi`、HTTP App API transport、AssetStore、preview 等能力。 - 采用“目标 worktree 内等效最小实现”,未 rebase / merge 主线,避免扩大风险。 - 前端新增 `src/lib/newDocument.ts`,封装默认文件名、文档类型识别和新建目标目录解析。 - 前端将快捷键、菜单、Sidebar 按钮统一接到 `createNewFile()`,默认创建 `.mindraw` package;无可用目录时调用 `select_directory`。 - 后端新增 `.mindraw` package 基础读写、列表、树展示、重命名、删除,以及 `create_blank_mindraw_package` Tauri command。 - 新增 Review Gate 请求:`02-P/MEXP15-SignedNotarizedDMG/review/md-edc-06-impl-review-request-crg-7d105de89062.md`,状态 `needs-code-review`。 ## 关键决策 - 未完整移植主线 MEXP15 App API / AssetStore / preview 栈;本轮只做目标 worktree 内可验证的 App 新建默认行为和最小外部 command 合约。 - 保留旧 `.excalidraw` 单文件兼容:打开、保存、另存、重命名、删除仍可走旧路径。 - `create_new_file` 继续供 App 内部 UI 调用;`create_blank_mindraw_package` 作为外部 App API / Codex sidebar 后续集成入口。 - 未修改 m4c plugin;若 sidebar 要调用新能力,需要 PMO 另拆 `M4C-*`。 ## 核心事实 / 变更快照 - 变更对象:Mindraw App 新建文档默认行为与最小 `.mindraw` package 支持。 - 事实来源:目标 worktree 当前未提交 diff,HEAD `0e329860f39577bdc0ab8236f5bf442fc163a22b`;Review Gate ID `crg-7d105de89062`。 - 变更前:前端快捷键 / 菜单 / Sidebar 新建默认使用 `Untitled-${Date.now()}.excalidraw`;后端只识别 `.excalidraw` 单文件。 - 变更后:默认文件名为 `YY.MMDD-NN.mindraw`;后端创建 package 结构 `manifest.json`、`drawing.excalidraw`、`.assets/`;同目录冲突递增 `NN`;文件树把 `.mindraw` 目录作为文档节点而不展开内部文件。 - 映射 / 兼容:旧 `.excalidraw` 保留单文件兼容;`.mindraw` package 的实际 Excalidraw JSON 位于 `drawing.excalidraw`。 - 范围边界:本轮只影响目标 worktree App/Tauri 代码;不修改主工作区源码,不修改 m4c plugin,不生成发布包,不声明 QA PASS。 - 验证证据:Vitest 12 tests、Tauri Rust 4 tests、`cargo check`、`npm run build`、`git diff --check` 均通过。 ## 文件变更 目标 worktree 源码 / 测试变更: - `/Users/ar/Projects/Mindraw-worktrees/md-main-better-exp1/src/lib/newDocument.ts` - `/Users/ar/Projects/Mindraw-worktrees/md-main-better-exp1/src/lib/newDocument.test.ts` - `/Users/ar/Projects/Mindraw-worktrees/md-main-better-exp1/src/types/index.ts` - `/Users/ar/Projects/Mindraw-worktrees/md-main-better-exp1/src/store/useStore.ts` - `/Users/ar/Projects/Mindraw-worktrees/md-main-better-exp1/src/hooks/useKeyboardShortcuts.ts` - `/Users/ar/Projects/Mindraw-worktrees/md-main-better-exp1/src/hooks/useMenuHandler.ts` - `/Users/ar/Projects/Mindraw-worktrees/md-main-better-exp1/src/components/Sidebar.tsx` - `/Users/ar/Projects/Mindraw-worktrees/md-main-better-exp1/src/components/TreeView.tsx` - `/Users/ar/Projects/Mindraw-worktrees/md-main-better-exp1/src/components/ExcalidrawEditor.tsx` - `/Users/ar/Projects/Mindraw-worktrees/md-main-better-exp1/src-tauri/src/lib.rs` - `/Users/ar/Projects/Mindraw-worktrees/md-main-better-exp1/src-tauri/src/menu.rs` 主项目治理 / 记忆文件变更: - `/Users/ar/Projects/Mindraw/02-P/MEXP15-SignedNotarizedDMG/review/md-edc-06-impl-review-request-crg-7d105de89062.md` - `/Users/ar/Projects/Mindraw/.codex-sessionhistory/2026-07-10-MD-EDC-06-IMPL.md` - `/Users/ar/Projects/Mindraw/.codex-sessionhistory/COMMANDS.md` ## 未决问题 - 需要代码复审消费 Review Gate `crg-7d105de89062`,当前状态 `needs-code-review`。 - 需要 QA 另拆或续接 GUI smoke,覆盖 File menu、快捷键、Sidebar 新建、无目录弹框、active document fallback、`MindrawCanvas/` projectRoot、旧 `.excalidraw` 打开 / 保存 / 另存。 - 如果 m4c / Codex sidebar 要接入新建能力,需要另拆 `M4C-*`,传入 `targetDirectory` 或 `projectRoot`。 - 目标 worktree 缺少 `CODEGRAPH.md`;本轮未补建或同步工程地图,需 PMO 判断是否另拆文档任务。 ## 可复用命令 / Runbook 用途:复跑 `MD-EDC-06-IMPL` 的源码测试、构建、后端验证和 diff 卫生检查。 前置条件:在 `/Users/ar/Projects/Mindraw-worktrees/md-main-better-exp1`,分支 `codex/md-main-better-exp1`,已安装 npm 依赖;若未安装,可先执行 `npm install --package-lock=false`。 设置命令: ```bash cd /Users/ar/Projects/Mindraw-worktrees/md-main-better-exp1 npm install --package-lock=false npm run test:run npm run build cargo check --manifest-path src-tauri/Cargo.toml cargo test --manifest-path src-tauri/Cargo.toml git diff --check git diff -- src src-tauri | rg -n "(SECRET|TOKEN|PASSWORD|PRIVATE_KEY|BEGIN RSA|AWS_|AKIA|sk-|xoxb-|ghp_|-----BEGIN)" ``` 验证步骤: - `npm run test:run` 应显示 2 files / 12 tests passed。 - `cargo test --manifest-path src-tauri/Cargo.toml` 应显示 4 tests passed。 - `git diff --check` 无输出且退出码为 0。 - 敏感信息扫描命令无输出;`rg` 无命中时退出码为 1,属于通过。 清理 / 恢复命令: ```bash cd /Users/ar/Projects/Mindraw-worktrees/md-main-better-exp1 rm -rf node_modules dist ``` 搜索关键词:`MD-EDC-06-IMPL`、`crg-7d105de89062`、`YY.MMDD-NN.mindraw`、`MindrawCanvas`、`create_blank_mindraw_package`、`TARGET_DIRECTORY_REQUIRED` ## 后续建议 - PMO 先派代码复审消费 review request,再派 QA 执行 GUI smoke。 - m4c 集成应只在另一个 `M4C-*` 任务中处理,避免把 App 侧实现和 plugin 接入混在同一个交付面里。