edit | blame | history | raw

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 的 documentFormatmindrawProjectCanvasApi、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.jsondrawing.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 checknpm run buildgit 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-*,传入 targetDirectoryprojectRoot
  • 目标 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

设置命令:

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,属于通过。

清理 / 恢复命令:

cd /Users/ar/Projects/Mindraw-worktrees/md-main-better-exp1
rm -rf node_modules dist

搜索关键词:MD-EDC-06-IMPLcrg-7d105de89062YY.MMDD-NN.mindrawMindrawCanvascreate_blank_mindraw_packageTARGET_DIRECTORY_REQUIRED

后续建议

  • PMO 先派代码复审消费 review request,再派 QA 执行 GUI smoke。
  • m4c 集成应只在另一个 M4C-* 任务中处理,避免把 App 侧实现和 plugin 接入混在同一个交付面里。