edit | blame | history | raw

2026-06-27 ResultFrame 避让

用户目标

用户确认 M-体验01 视觉验收通过后,进一步要求后续 AI 自动生成的新 Frame 不能与已有 Frame 重叠,必须避开已有 Frame,在右侧空白处生成。

已完成事项

  • 补强 src/lib/mindrawAppWriteMutation.tscreateAiResultFrame 布局策略:从 source Frame 右侧开始放置 result Frame,但会扫描当前 scene 中非 source 的元素 / Frame;若候选位置与已有对象相交,则继续向右移动到下一个空位。
  • 新增回归测试:source 右侧已有 Frame 时,新 result Frame 会落到已有 Frame 的右侧,而不是覆盖它。
  • 更新 CODEGRAPH.md02-P/plan-progress.markdown,把 result Frame 避让规则记录为项目事实。
  • 重新生成本地 debug App:/Users/ar/Projects/ExcalidrawX/src-tauri/target/debug/bundle/macos/Mindraw.app

关键决策

  • 避让逻辑放在 Mindraw App 的受控 mutation 层,而不是让 m4c 自己猜位置;所有通过 commit_write_result(createAiResultFrame) 的外部调用都会复用这条规则。
  • 当前运行中的旧 debug App 进程不会自动热更新;需要关闭重开 debug App 才会加载新代码。

文件变更

  • /Users/ar/Projects/ExcalidrawX/src/lib/mindrawAppWriteMutation.ts
  • /Users/ar/Projects/ExcalidrawX/src/lib/mindrawAppWriteMutation.test.ts
  • /Users/ar/Projects/ExcalidrawX/CODEGRAPH.md
  • /Users/ar/Projects/ExcalidrawX/02-P/plan-progress.markdown

验证记录

  • npm run test:run -- src/lib/mindrawAppWriteMutation.test.ts:1 file / 7 tests PASS。
  • npm run test:run -- src/lib/mindrawAppWriteApi.smoke.test.ts:1 file / 6 tests PASS。
  • npm run test:run -- src/lib/mindrawAppWriteApi.smoke.test.ts src/lib/mindrawAppWriteMutation.test.ts src/lib/mindrawAppWriteLease.test.ts src/lib/mindrawAppReadApi.test.ts src/store/useStore.test.ts src/lib/excalidrawFile.test.ts:6 files / 71 tests PASS。
  • npm run build:PASS。
  • npm run tauri -- build --debug --bundles app:PASS,重新生成 debug App。
  • git diff --check 对相关文件通过。
  • m4c 03-O git status --short 无输出。

未决问题

  • 当前仍有旧 debug Mindraw 进程 PID 32350 运行;若用户立刻继续做真实外部写入,需要先关闭并重新打开 debug App。
  • 该避让策略优先向右寻找空位;尚未做更复杂的二维布局、自动换行或用户可配置摆放策略。