01 · PRD/功能树

功能树

把 DevLoop 系统所有功能拆成 4 层树。每个叶子节点对应一个或一组 Unit,将被 Architect Agent 翻译成 units.json 的 DAG 节点。这是 Claude Code 复现整个项目时的第一份「清单」。

全景树

DevLoop System
├── F1 · 项目生命周期
│   ├── F1.1 创建项目 (POST /projects)
│   │   └── Unit: devloop-be-projects
│   ├── F1.2 启动 / 续跑 (POST /run)
│   │   └── Unit: devloop-be-run
│   ├── F1.3 查询状态 (GET /state)
│   │   └── Unit: devloop-be-state
│   ├── F1.4 Sign-off / Abandon
│   │   └── Unit: devloop-be-finalize
│   └── F1.5 项目元数据持久化
│       └── Unit: devloop-be-projectmeta
│
├── F2 · 文档管理 (DocStore)
│   ├── F2.1 PRD CRUD + 归档
│   │   └── Unit: docstore-prd
│   ├── F2.2 SDD CRUD + 归档
│   │   └── Unit: docstore-sdd
│   ├── F2.3 units.json schema 校验
│   │   └── Unit: docstore-units-schema
│   ├── F2.4 HTML 解析与校验 (cheerio)
│   │   └── Unit: docstore-html-validator
│   └── F2.5 contract_hash 计算
│       └── Unit: docstore-contract-hash
│
├── F3 · Unit 状态机 (UnitRegistry)
│   ├── F3.1 状态转换合法性
│   │   └── Unit: registry-fsm
│   ├── F3.2 L2 gate 判定
│   │   └── Unit: registry-l2gate
│   ├── F3.3 增量 diff (added/changed/removed)
│   │   └── Unit: registry-diff
│   └── F3.4 retry 预算管理
│       └── Unit: registry-budget
│
├── F4 · 三层 Loop 编排 (LoopController)
│   ├── F4.1 L1 单 Unit 跑通
│   │   └── Unit: loop-l1-runner
│   ├── F4.2 L1 retryWithReflection
│   │   └── Unit: loop-retry
│   ├── F4.3 L1 并行调度 (scheduler 复用)
│   │   └── Unit: loop-parallel
│   ├── F4.4 L2 集成 gate + run
│   │   └── Unit: loop-l2-runner
│   ├── F4.5 L2 修复回写 (triage → patch SDD → reset)
│   │   └── Unit: loop-l2-repair
│   ├── F4.6 L3 增量需求并入
│   │   └── Unit: loop-l3-merge
│   └── F4.7 全局预算 + 终止条件
│       └── Unit: loop-guard
│
├── F5 · Agent 模板 + 调用
│   ├── F5.1 PM Agent
│   │   └── Unit: agent-pm
│   ├── F5.2 Architect Agent (generate + patch 两模式)
│   │   └── Unit: agent-architect
│   ├── F5.3 Coder Agent
│   │   └── Unit: agent-coder
│   ├── F5.4 Tester Agent
│   │   └── Unit: agent-tester
│   ├── F5.5 Integrator Agent
│   │   └── Unit: agent-integrator
│   └── F5.6 BugTriager Agent
│       └── Unit: agent-triager
│
├── F6 · 事件推送 (SSE)
│   ├── F6.1 SSEBroker 订阅 / 退订
│   │   └── Unit: sse-broker
│   ├── F6.2 9 类事件序列化
│   │   └── Unit: sse-events
│   └── F6.3 断线重连 + replay
│       └── Unit: sse-replay
│
├── F7 · 前端 Dashboard
│   ├── F7.1 主页面 DevLoopDashboard.vue
│   │   └── Unit: fe-dashboard
│   ├── F7.2 DashboardHeader (含 + NEW REQUIREMENT)
│   │   └── Unit: fe-header
│   ├── F7.3 LoopStatusBar (3 张状态卡)
│   │   └── Unit: fe-loopbar
│   ├── F7.4 UnitsDAG (复用 PipelineEditor 渲染)
│   │   └── Unit: fe-dag
│   ├── F7.5 LiveAgentStream (终端样式 SSE)
│   │   └── Unit: fe-stream
│   ├── F7.6 PrdDiffPanel (section 级 diff)
│   │   └── Unit: fe-prddiff
│   ├── F7.7 FeedbackModal (反馈输入)
│   │   └── Unit: fe-modal
│   ├── F7.8 UnitDrawer (Unit 详情侧栏)
│   │   └── Unit: fe-drawer
│   └── F7.9 路由 + i18n keys
│       └── Unit: fe-router-i18n
│
└── F8 · 复现 / 可执行性
    ├── F8.1 PRD/SDD data-* 锚点协议
    │   └── (无 Unit,文档约定)
    ├── F8.2 build-manifest 提取脚本
    │   └── Unit: tool-manifest-extract
    └── F8.3 Reproducibility prompt 模板
        └── (无 Unit,prompt 文件)

绿色 = 一个 Unit。共 34 个 Unit。Architect Agent 在 P1 演示时会从这棵树派生 units.json。

按层级统计

L1 功能群L2 功能Unit 数类型构成
F1 项目生命周期55be × 5
F2 文档管理55be × 5
F3 Unit 状态机44be × 4
F4 Loop 编排77be × 7
F5 Agent 模板66config × 6(Agent prompt + 注册)
F6 SSE33be × 3
F7 前端99fe × 9
F8 复现31tool × 1
合计4234be × 24 / fe × 9 / tool × 1

依赖拓扑(粗)

箭头 = 「下游 Unit 需要上游 contract」。LoopController.scheduler 据此分波并行。

F2 DocStore F3 UnitRegistry F5 Agent 模板 F4 LoopController F1 项目生命周期 API F6 SSE Broker F8 manifest tool F7 前端 Dashboard

P1 优先做 F2 + F5 (PM + Architect);P2 加 F3 + F4.1~4.3;P3 加 F4.4~4.7 + F1 + F6;P4 加 F7。

Unit id 命名约定

本树里的 Unit id 全部遵循 Architect 拆解策略:

前缀层预计 cwd
devloop-be-*F1server/routes/devloop.js · server/services/
docstore-*F2server/services/doc-store.js
registry-*F3server/services/unit-registry.js
loop-*F4server/src/core/loop-controller.js
agent-*F5system/agents/devloop-*/prompt.md
sse-*F6server/services/sse-broker.js
fe-*F7web/src/views/ · web/src/components/devloop/
tool-*F8scripts/