Skip to content

目标

实现单进程 broker + Issue 持久化层,解决并发写入冲突和状态一致性。

实现要点

  1. Broker (src/plugin/broker.ts)

    typescript
    class FlowBroker {
      enqueue(parentIssueNumber: number, op: () => Promise<FlowRun>): Promise<FlowRun>
    }
    • 内部使用 Map<number, Mutex> 按 parentIssueNumber 隔离
    • writeFlowRunWithLock():先读当前 FlowRun → 比较 revision → 写回
    • 检测到外部 revision 变化:返回 PERSIST_CONFLICT,暂停 FlowRun
    • 所有 FlowRun/Task/Evidence 写入必须经过 broker
  2. GitHub Issue 持久化 (src/flowrun/github.ts)

    • readFlowRunFromIssue(owner, repo, issueNumber): FlowRunReadResult
    • writeFlowRunToIssue(owner, repo, issueNumber, flowRun, expectedRevision): WriteResult
    • 使用 gh issue view/edit(或 GitHub API)读写 Issue body
    • JSON 数据放在 <!-- flowrun:json {...} --> 注释中
  3. 冲突处理

    • 检测到外部 revision 变化 → 暂停 FlowRun(status=paused-conflict
    • 不自动覆盖或合并
    • 记录冲突详情供人工恢复

验收标准

  • [ ] 并行 Subagent 写入测试:两 Task 并行 update,均持久化成功
  • [ ] 冲突检测测试:模拟外部修改 → broker 暂停 FlowRun
  • [ ] Issue 读写往返测试:写入 Issue body → 读取解析一致
  • [ ] keyed mutex 正确隔离不同 Parent Issue

Worktree

  • 路径: .worktree/tdd-c3-broker/
  • 分支: feat/tdd-c3-broker