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 列表移除。