04 · ARCHITECTURE/运行时工作流

运行时工作流

一次端到端的执行序列。横向是参与者,纵向是时间。第 1-4 步是 L3 初始化,第 5-9 步是 L1,第 10-13 步是 L2,第 14-15 步回到 L3。

端到端时序图

Human DevLoop API PM Architect LoopController Coder + Tester Integrator ① POST /devloop/requirement ② invoke PM ③ prd.html v1 → Architect ④ sdd.html + units.json L1 · per Unit (parallel) ⑤ spawn coder(unit) ⑥ code commit ⑦ spawn tester(unit) ⑧ test fail → retry coder ⑨ test pass → unit passed L2 · gate: all passed ⑩ run integration ⑪ fail + failure-report ⑫ patch sdd.html ⑬ reset affected units → loop L1 ⑭ notify human · request next feedback (L3) ⑮ new requirement / sign-off

同一时刻三个 Loop 的并发关系

L1 内部允许并行(多 Unit),但 L2 始终串行(一个项目同时只能有一个 Integrator 跑)。L3 触发会等待当前 L2 跑完再合并 PRD。

场景处理
L1 跑了一半,L3 新需求到达当前 L1 跑完再合并(保证状态一致),合并后增量 reset
L2 跑了一半,L3 新需求到达L2 跑完再合并;若 L2 失败也照常合并(人类可能本来就是为了改这个)
L2 跑了一半,又收到一个 L3 反馈队列化,按时间序处理
多项目并行每项目独立 LoopController 实例,互不干扰

SSE 事件清单

Dashboard 通过 GET /api/devloop/projects/:pid/stream 订阅。事件类型:

event触发时机payload 关键字段
prd.updatedPM 写 PRD 完成rev, changeSummary
sdd.updatedArchitect 写 SDD 完成rev, mode (generate/patch)
unit.stateUnitRegistry 状态转换unit_id, from, to, retries
agent.streamAgent stdout/stderr 流式agent, unit_id, chunk
integration.resultIntegrator 返回ok, failures[]
triage.resultBugTriager 返回category, confidence, affected_units
human_intervention_neededconfidence < 0.5 或 blockedreason, suggestion
project.shippedL2 通过final_rev
project.exhaustedL2 修复预算耗尽last_triage

错误与中止

LoopController 顶层 try/catch:

  • Agent 调用超时(> 10min):kill 进程,retry 一次,再失败置 Unit blocked。
  • DocStore 写失败(磁盘满 / 权限):整个项目挂起,SSE 告警人类。
  • 未捕获异常:记录到 stream.log,发 fatal 事件,不自动重启(避免雪崩)。