目标
实现单进程 broker + Issue 持久化层,解决并发写入冲突和状态一致性。
实现要点
Broker (
src/plugin/broker.ts)typescriptclass FlowBroker { enqueue(parentIssueNumber: number, op: () => Promise<FlowRun>): Promise<FlowRun> }- 内部使用
Map<number, Mutex>按 parentIssueNumber 隔离 writeFlowRunWithLock():先读当前 FlowRun → 比较 revision → 写回- 检测到外部 revision 变化:返回
PERSIST_CONFLICT,暂停 FlowRun - 所有 FlowRun/Task/Evidence 写入必须经过 broker
- 内部使用
GitHub Issue 持久化 (
src/flowrun/github.ts)readFlowRunFromIssue(owner, repo, issueNumber): FlowRunReadResultwriteFlowRunToIssue(owner, repo, issueNumber, flowRun, expectedRevision): WriteResult- 使用
gh issue view/edit(或 GitHub API)读写 Issue body - JSON 数据放在
<!-- flowrun:json {...} -->注释中
冲突处理
- 检测到外部 revision 变化 → 暂停 FlowRun(status=
paused-conflict) - 不自动覆盖或合并
- 记录冲突详情供人工恢复
- 检测到外部 revision 变化 → 暂停 FlowRun(status=
验收标准
- [ ] 并行 Subagent 写入测试:两 Task 并行 update,均持久化成功
- [ ] 冲突检测测试:模拟外部修改 → broker 暂停 FlowRun
- [ ] Issue 读写往返测试:写入 Issue body → 读取解析一致
- [ ] keyed mutex 正确隔离不同 Parent Issue
Worktree
- 路径:
.worktree/tdd-c3-broker/ - 分支:
feat/tdd-c3-broker