日期:2026-06-26
用户询问 Phase 3.8 最小生产切片如何实现,并要求保存会话。
.mindraw 包时,外部工具不能直接改目录包,必须继续返回 APP_LEASE_REQUIRED。diskRevision 与 workingRevision:diskRevision 代表磁盘 scene。workingRevision 代表 App 当前 editor snapshot。workingRevision 获取 lease 并 commit,App 可以安全合并 result Frame。改动重点:
src/store/useStore.tsgetOpenDocumentState(documentId | packagePath)。getLiveFrameContext(documentId, sourceFrameId)。flushActiveEditorSnapshot()。workingRevision = sha256(active editor snapshot content)。src/components/ExcalidrawEditor.tsx
setActiveEditorSnapshotProvider()。完成标准:
.mindraw 时能返回 documentId、packagePath、isOpen、isDirty、activeTabId、workingRevision。APP_DOCUMENT_NOT_OPEN。workingRevision 能反映未保存编辑。建议新增:
src/lib/documentLease.ts职责:
acquireWriteLease(input)getActiveLease(documentId)releaseWriteLease(leaseId)expireLeases(now)assertLeaseCanCommit(leaseId, expectedWorkingRevision)必须覆盖错误码:
LEASE_ALREADY_HELDLEASE_EXPIREDLEASE_NOT_FOUNDWORKING_REVISION_MISMATCH建议新增:
src/lib/aiResultFrameMutation.ts职责:
customData.m4c。src/store/useStore.ts 新增 action:
commitAiResultFrameWithLease(input)内部流程:
flushActiveEditorSnapshot().mindrawworkingRevisionexpectedWorkingRevisionaiResultFrameMutationupdateActiveTabContent(newContent, true)saveTab(activeTabId, newContent)SAVE_FAILED,保留 dirty.assets 权威资产治理仍未完成。下一步应按垂直切片实现:
documentLease.ts 纯逻辑和测试。aiResultFrameMutation.ts 纯逻辑和测试。useStore action。真实验收时,由用户在 App 中打开 .mindraw 并输入未保存文字,Codex 运行外部写入命令,双方共同确认 result Frame 出现且未保存文字不丢。