edit | blame | history | raw

Phase 3.8 Lease Spike

日期:2026-06-26

用户目标

用户要求进入 Phase 3.8:document lease / App write API spike。

已完成事项

  • 新增 Phase 3.8 spike 目录:02-P/Round01-mindraw-defstart/spikes/002-document-lease-app-write-api/
  • 新增可运行脚本:validate-document-lease.mjs,在临时目录生成测试 .mindraw 包,验证 document lease / App write API 状态机。
  • 新增 spike README,记录 Given / When / Then、覆盖项、发现和 verdict。
  • 新增主项目契约文档:02-P/功能任务/document-lease-app-write-api-spike.md
  • 新增 QA 记录:02-P/qa/mindraw-phase38-document-lease-spike-check.md
  • 同步更新 02-P/plan-progress.markdownINDEX.md

关键决策

  • App 打开同一 .mindraw 包时,外部工具直接写 package 必须继续返回 APP_LEASE_REQUIRED
  • Phase 3.8 的正确方向是 App-mediated write:App 作为唯一写入方,外部工具只能基于 App live context / workingRevision 提交受控 mutation。
  • 必须区分 diskRevisionworkingRevision;dirty 文档不能用磁盘 revision 作为写入凭证。
  • dirty 文档不是天然 No-Go;如果外部工具读取的是 App live working snapshot,并且 commit 时 workingRevision 未变化,App 可以合并 result Frame 并保存。
  • lease 必须短 TTL、独占、绑定 writePlanId / expectedWorkingRevision,并在 commit 时重新校验。

文件变更

  • 02-P/Round01-mindraw-defstart/spikes/002-document-lease-app-write-api/README.md
  • 02-P/Round01-mindraw-defstart/spikes/002-document-lease-app-write-api/validate-document-lease.mjs
  • 02-P/功能任务/document-lease-app-write-api-spike.md
  • 02-P/qa/mindraw-phase38-document-lease-spike-check.md
  • 02-P/plan-progress.markdown
  • INDEX.md
  • .codex-sessionhistory/2026-06-26-Phase38LeaseSpike.md

验证

  • node 02-P/Round01-mindraw-defstart/spikes/002-document-lease-app-write-api/validate-document-lease.mjs:PASS。
  • node --check 02-P/Round01-mindraw-defstart/spikes/002-document-lease-app-write-api/validate-document-lease.mjs:PASS。
  • git diff --check 覆盖本轮相关文件:PASS。

覆盖项:

  • direct-file-write-open-package-rejected:PASS / APP_LEASE_REQUIRED
  • app-api-dirty-live-context-commit:PASS
  • disk-revision-cannot-write-dirty-working-copy:PASS / WORKING_REVISION_MISMATCH
  • user-edit-after-lease-rejected:PASS / WORKING_REVISION_MISMATCH
  • concurrent-lease-rejected:PASS / LEASE_ALREADY_HELD
  • expired-lease-rejected:PASS / LEASE_EXPIRED
  • closed-document-app-api-rejected:PASS / APP_DOCUMENT_NOT_OPEN

未决问题

  • 未实现生产 Tauri command。
  • 未接真实 Excalidraw editor API。
  • 未验证多窗口、多 tab、App 后台启动、焦点切换和 UI 错误反馈。
  • 未实现正式 MCP server 或真实用户 .mindraw 写回。
  • Phase 4 .assets 权威资产治理仍未完成。

后续建议

下一步如果继续主项目实现,应进入 Phase 3.8 production design:

  1. 只读 App state / live frame context API。
  2. Lease manager:acquire / release / expiry / concurrency。
  3. 受控 createAiResultFrame mutation,并复用现有保存路径。
  4. 真实 App QA:dirty、revision mismatch、expired lease、concurrent lease、save failed。