# 功能树 > 把 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 项目生命周期 | 5 | 5 | be × 5 | | F2 文档管理 | 5 | 5 | be × 5 | | F3 Unit 状态机 | 4 | 4 | be × 4 | | F4 Loop 编排 | 7 | 7 | be × 7 | | F5 Agent 模板 | 6 | 6 | config × 6(Agent prompt + 注册) | | F6 SSE | 3 | 3 | be × 3 | | F7 前端 | 9 | 9 | fe × 9 | | F8 复现 | 3 | 1 | tool × 1 | | **合计** | **42** | **34** | be × 24 / fe × 9 / tool × 1 | ## 依赖拓扑(粗) 箭头 = 「下游 Unit 需要上游 contract」。LoopController.scheduler 据此分波并行。 > _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 拆解策略](agents-architect.html): | 前缀 | 层 | 预计 cwd | | --- | --- | --- | | `devloop-be-*` | F1 | server/routes/devloop.js · server/services/ | | `docstore-*` | F2 | server/services/doc-store.js | | `registry-*` | F3 | server/services/unit-registry.js | | `loop-*` | F4 | server/src/core/loop-controller.js | | `agent-*` | F5 | system/agents/devloop-*/prompt.md | | `sse-*` | F6 | server/services/sse-broker.js | | `fe-*` | F7 | web/src/views/ · web/src/components/devloop/ | | `tool-*` | F8 | scripts/ |