loops-l3.md 2.16 KB

L3 · Human Feedback Loop

最外层。接收人类的新需求 / 反馈 / 否决,把它合并进 PRD,再让 Architect 重算 SDD diff,仅对增量 Unit 触发 L1 + L2。

状态机

触发渠道

① REST

POST /api/devloop/projects/:pid/requirement
JSON body 走 CLAUDE.md 推荐的 -d @/tmp/req.json 方式。

② Web UI

DevLoopDashboard 右上角 + NEW REQUIREMENT,弹出 textarea。

③ 自动信号

L1 blocked 或 L2 exhausted 时,LoopController 主动发 SSE,由前端弹「请补充信息」对话框。

增量 Unit 算法

Architect 对比新旧 units.json,标记三种变化:

变化类型 判断 处置
added 新 unit.id 不在旧 list status = pending,加入 L1 队列
changed 同 id,contract_hash 变化 status 回退到 pending,加入 L1 队列(旧代码归档到 history/)
removed 旧 id 不在新 list 整个 unit 目录归档到 history/removed/,从 DAG 摘除
unchanged id 在且 hash 不变 保持 passed,无须重跑。这是增量化的关键

PRD 增量合并示例

PM Agent 不重写整个 PRD,只追加 ,并维护 doc 级 data-rev 自增。这样人类能直观看到「这一轮反馈引入了什么」。

prd.html · rev 2 prd.html · rev 3 (after feedback)




    用户名密码登录,会话 7 天有效




    个人主页:显示用户名 / 邮箱




...


...



    + 新增:支持 GitHub OAuth 登录
    + NFR:3rd-party token 刷新 ≤ 5s


什么时候算「项目结束」

L3 没有自动退出条件。结束信号来自人类的显式动作:

  • 显式 sign-off:POST /api/devloop/projects/:pid/sign-off → 项目 status 置 shipped-final,停止接收新需求。
  • 归档:30 天无人类反馈,自动归档但保留所有产物。
  • 放弃:POST .../abandon,整个项目目录加 .abandoned 标记,从 Dashboard 列表移除。