Repository navigation
Closed
Labels
P1高优先级 bug高优先级 bugarchitecture架构 deepening 候选(来自架构评审)架构 deepening 候选(来自架构评审)needs-infoWaiting on reporter for more informationWaiting on reporter for more informationrefactor重构(非行为变更)重构(非行为变更)
Description
Parent
Blocked by
- Flow Diagram:明确外部写入一致性保证并消除 compare→rename 覆盖窗口 #239:先明确外部写入一致性保证与版本契约。
阻塞解除后,将本票从 needs-info 调整为 ready-for-agent。
来源
2026-07-28 对 #200 落地代码的 Spec review。
当前缺口
FlowDiagramDocumentStore 的公开接口当前只有 saveDocument()。其余一致性职责仍散落:
flow-diagram-service.ts直接持有FlowDiagramRevisionStore,自行执行record / peekLatest / consumeLatest;- service 直接调用多个低层原子写 helper,编排 edit 失败恢复与 rollback;
- read/get/export 仍各自读取文件;
- 变更通知由 store 与 service 分别触发;
- 三个原子写函数重复临时文件创建、写入和清理逻辑。
这不满足 #200 的核心验收:“文档存储是 .excalidraw 一致性规则的唯一拥有者;service 只保留动作解析与结果适配”。下一个 revision / rollback / publish bug 仍需要跨 Store 和 service 修改。
目标设计
建立窄而完整的主进程 Store 接口。最终签名以 #239 的版本契约为准,但能力至少覆盖:
- 读取文档内容及一致性版本;
- 创建文档;
- 基于预期版本保存完整文档;
- 基于预期版本执行 Agent 增量 edit,并在成功发布前记录 revision;
- rollback 到最近一次适用 revision;
- 为 export 提供一致的当前文档快照;
- 在成功发布后统一发送文件变更通知。
revision store 可以保留为内部实现文件,但不得继续由 flow-diagram-service.ts 直接编排。
实现范围
Store
- 吸收 revision record / consume / latest 检查和失败恢复。
- 吸收 create/edit/rollback 所需的文件读取、场景校验、发布和删除逻辑。
- 统一成功发布后的通知时机,失败或冲突不发送成功通知。
- 将临时文件创建、权限、写入、
fsync、close、清理抽为单一内部原语;各操作只保留不同的条件发布策略。 - 路径限域与场景校验保持在 Store 写边界。
Service
保留:
manage_flow_diagramaction 参数解析;- edit operation 到候选 scene 的领域变换;
- 澄清/错误结果映射;
- artifact / export 展示数据编排。
删除:
- 对 revision store 的直接依赖;
- 对低层原子文件 helper 的直接调用;
- 重复的冲突恢复与通知编排。
测试迁移
主测试面移到 Store,使用真实临时目录,至少覆盖:
- create 不覆盖已有文件;
- edit 成功记录 revision;
- edit 发布失败时 revision 不残留,原文档保持;
- rollback 只应用于匹配的最新 Agent revision;
- rollback 失败恢复原状态;
- export/read 取得一致快照;
- 成功时恰好一次通知,失败/冲突零通知;
- 写入失败无临时文件残留;
- Flow Diagram:明确外部写入一致性保证并消除 compare→rename 覆盖窗口 #239 规定的一致性场景。
Service 测试只保留 action → Store 调用与公开结果/错误码契约,不重复测试存储内部步骤。
验收标准
-
flow-diagram-service.ts不再导入 revision store 或低层原子写 helper。 - revision、rollback、版本校验和通知只有 Store 一个拥有者。
- 三份临时文件写入样板收敛为一个内部原语。
-
manage_flow_diagram动作、参数、结果和错误码保持兼容。 - ADR-0071 / ADR-0072 的隔离历史行为不变。
- flow-diagram 全簇测试、
pnpm run typecheck、pnpm run build通过。
非目标
- 不修改 renderer 状态机;renderer 迁移由后续子 Issue 完成。
- 不增加版本浏览器或手动 rollback UI。
- 不改变 Excalidraw 格式或 export 渲染桥。
- 不将其他文件类型迁入该 Store。
Metadata
Metadata
Assignees
Labels
P1高优先级 bug高优先级 bugarchitecture架构 deepening 候选(来自架构评审)架构 deepening 候选(来自架构评审)needs-infoWaiting on reporter for more informationWaiting on reporter for more informationrefactor重构(非行为变更)重构(非行为变更)
Activity
suntianc commentedon Jul 29, 2026
已在 #245 完成实现并推送;Ubuntu、macOS、Windows CI 均通过。