Skip to content

Flow Diagram:让 DocumentStore 统一拥有读写、revision、rollback 与通知 #240

Closed

Description

@suntianc

Parent

Blocked by

阻塞解除后,将本票从 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_diagram action 参数解析;
  • edit operation 到候选 scene 的领域变换;
  • 澄清/错误结果映射;
  • artifact / export 展示数据编排。

删除:

  • 对 revision store 的直接依赖;
  • 对低层原子文件 helper 的直接调用;
  • 重复的冲突恢复与通知编排。

测试迁移

主测试面移到 Store,使用真实临时目录,至少覆盖:

  1. create 不覆盖已有文件;
  2. edit 成功记录 revision;
  3. edit 发布失败时 revision 不残留,原文档保持;
  4. rollback 只应用于匹配的最新 Agent revision;
  5. rollback 失败恢复原状态;
  6. export/read 取得一致快照;
  7. 成功时恰好一次通知,失败/冲突零通知;
  8. 写入失败无临时文件残留;
  9. 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。

Activity

  1. added
    architecture架构 deepening 候选(来自架构评审)
    needs-infoWaiting on reporter for more information
    P1高优先级 bug
    refactor重构(非行为变更)
    on Jul 28, 2026
  2. suntianc commented on Jul 29, 2026

    @suntianc
    OwnerAuthor

    已在 #245 完成实现并推送;Ubuntu、macOS、Windows CI 均通过。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    P1高优先级 bugarchitecture架构 deepening 候选(来自架构评审)needs-infoWaiting on reporter for more informationrefactor重构(非行为变更)

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions