edit | blame | history | raw

2026-06-26 MD-H1-03 租约

用户目标

/Users/ar/Projects/ExcalidrawX/02-P/plan-progress.markdownP-20260626-m4c-handshake-coordination 领取 Mindraw 侧 MD-H1-03,完成 Phase 3.8 External Write API / Document Lease 的 lease manager 垂直切片。

边界:

  • 只做 lease / revision / 并发 / 过期拒绝。
  • 不做任意 JSON patch。
  • 不写文件保存。
  • 不覆盖 source Frame。
  • 不启动 createAiResultFrame mutation。
  • 不领取 PM-*H*

已完成事项

  • 新增 in-memory document lease manager。
  • 支持 mindrawAcquireWriteLease()mindrawReleaseWriteLease()mindrawPeekWriteLease()
  • 覆盖短 TTL、60 秒 TTL clamp、过期清理、单 document 并发拒绝。
  • 绑定 actordocumentIdpackagePathsourceFrameIdwritePlanIdexpectedWorkingRevisionmutationKind
  • 只允许 createAiResultFrame mutation kind 作为 lease intent,不实现 mutation 本体。
  • acquire / peek 基于 mindrawGetOpenDocumentState() 校验 live workingRevision
  • release / peek 覆盖 actor 和 writePlanId guard。
  • 增加 LEASE_NOT_FOUNDLEASE_EXPIREDLEASE_ALREADY_HELDWORKING_REVISION_MISMATCHMUTATION_NOT_ALLOWED 等失败态测试。
  • 回写总台账 Progress Log。
  • 新增 QA 证据报告。

关键决策

  • lease manager 先作为前端内存模块实现,不接 Tauri command / loopback JSON-RPC transport。
  • lease 不持久化;App 重启、多进程跨窗口互斥留给后续 transport / App API 设计。
  • mindrawGetCapabilities() 仍保持 external lease / mutation capability unavailable,因为本轮没有暴露外部 transport。
  • MD-H1-04 mutation 只能等待 PM 派发后再启动。

文件变更

  • src/lib/mindrawAppReadApi.ts
  • src/lib/mindrawAppWriteLease.ts
  • src/lib/mindrawAppWriteLease.test.ts
  • CODEGRAPH.md
  • INDEX.md
  • 02-P/qa/mindraw-phase38-lease-manager-check.md
  • 02-P/plan-progress.markdown
  • .codex-sessionhistory/2026-06-26-MDH103租约.md

验证结果

  • npm run test:run -- src/lib/mindrawAppWriteLease.test.ts
  • Test Files 1 passed
  • Tests 11 passed
  • npm run test:run -- src/lib/mindrawAppWriteLease.test.ts src/lib/mindrawAppReadApi.test.ts src/store/useStore.test.ts src/lib/excalidrawFile.test.ts
  • Test Files 4 passed
  • Tests 58 passed
  • npm run build
  • PASS
  • 仅有既有 Vite font resolve / chunk size warning
  • git diff --check -- ...
  • 无输出,行尾检查通过

未决问题

  • 尚无 loopback JSON-RPC / Tauri command transport。
  • 尚无真实 App external write API discovery。
  • 尚未实现 commit_write_result / createAiResultFrame mutation。
  • 尚未接保存路径。
  • 尚未做 H5 联合 smoke。
  • 多窗口跨进程 lease 互斥仍未实现。

后续建议

  • 等 PM 派发 MD-H1-04 后,再实现受控 createAiResultFrame mutation。
  • MD-H1-04 应复用 mindrawPeekWriteLease() 做 commit 前 guard。
  • PM-H5-GATE 继续等待 Mindraw mutation 证据和 m4c M4C-H5-02 证据齐备后再拆。