scope.html
5.45 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
<!doctype html>
<html lang="zh-CN">
<head>
<meta charset="utf-8" /><meta name="viewport" content="width=device-width,initial-scale=1" />
<title>立意与范围 · LemonBoss PRD</title>
<link rel="preconnect" href="https://fonts.googleapis.com" />
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin />
<link href="https://fonts.googleapis.com/css2?family=Fraunces:opsz,wght@9..144,300;9..144,500;9..144,700&family=Inter:wght@400;500;600;700&family=JetBrains+Mono:wght@400;500;700&display=swap" rel="stylesheet" />
<link rel="stylesheet" href="assets/shell.css" />
</head>
<body data-page="scope.html">
<div class="shell">
<aside id="sidebar"></aside>
<main class="page">
<header class="page-head">
<div class="crumb"><span class="pill">01 · OVERVIEW</span><span class="sep">/</span><span>立意与范围</span></div>
<h1>立意与范围</h1>
<p class="deck">把 LemonBoss 现有 Master / Orchestrator / Pipeline / EvolutionLoop 的能力,收口为一个三层嵌套 Loop。本页定义目标、边界和三条不可妥协的设计原则。</p>
</header>
<article class="body">
<section>
<h2>目标</h2>
<p class="dropcap">目标不是「再造一个 Devin」,而是把当前散落在 <code>server/src/core/</code>、<code>packages/evolution/</code>、<code>routes/pipeline*</code> 的能力,组装成一个有名字、有状态、可观测的 LoopController。新代码总量控制在 1500 行以内,最大化复用已有抽象。</p>
<table>
<thead><tr><th>系统能力</th><th>当前状态</th><th>本次改造后</th></tr></thead>
<tbody>
<tr><td>多 Agent 调度</td><td>master-session + orchestrator(散)</td><td>统一由 LoopController 入口</td></tr>
<tr><td>需求 → 代码</td><td>无端到端链路</td><td>PM → Architect → Coder → Tester → Integrator 闭环</td></tr>
<tr><td>失败修复</td><td>EvolutionLoop(只对 Skill)</td><td>抽出 retryWithReflection 共享给 L1</td></tr>
<tr><td>文档化输出</td><td>仅 Skill 训练 digest</td><td>PRD / SDD 双 HTML,每 rev 归档</td></tr>
</tbody>
</table>
</section>
<section>
<h2>三条设计原则</h2>
<div class="grid-3">
<div class="card">
<span class="tag REUSE">REUSE</span>
<h3>最大化复用</h3>
<p>Master / Orchestrate / SessionPool / EvolutionLoop / Scheduler / Pipeline 全部沿用。新增组件不超过 5 个文件,新增模板 6 个。</p>
</div>
<div class="card">
<span class="tag NEW">NEW</span>
<h3>文档即状态</h3>
<p>PRD / SDD / units.json 是流程的<b>唯一真源</b>。Agent 之间通过文档交接,而不是共享内存或 RPC payload。文档版本即流程游标。</p>
</div>
<div class="card">
<span class="tag PATCH">PATCH</span>
<h3>失败先修文档</h3>
<p>L2 集成失败时,<b>默认先回写 SDD</b> 再重跑 L1。不允许 Coder Agent 直接 patch 别的 Unit 的代码以「绕过」契约。</p>
<p style="margin-top:8px;font-size:13px"><b>例外:</b>BugTriager 输出 <code>category=impl_bug</code> 时<b>不</b>改 SDD,只 reset 该 Unit — 因为是代码没遵守 SDD,改的是代码不是契约。</p>
</div>
</div>
</section>
<section>
<h2>不在范围内</h2>
<table class="dense">
<thead><tr><th>能力</th><th>原因</th><th>留给后续</th></tr></thead>
<tbody>
<tr><td>真实浏览器 E2E 测试 (Playwright headed)</td><td>初版用 vitest + 后端集成测试足够覆盖</td><td>P5 后续</td></tr>
<tr><td>生产环境部署管线(CI/CD)</td><td>聚焦在「跑通」而非「上线」</td><td>独立 PRD</td></tr>
<tr><td>GitHub PR 自动开</td><td>需要外部 token、权限边界复杂</td><td>P5 后续</td></tr>
<tr><td>外部 IDE 插件</td><td>看板已能展示,编辑器集成性价比低</td><td>—</td></tr>
<tr><td>多语言 / 跨语言项目</td><td>P1~P4 仅证明 JS/TS 全栈链路</td><td>P6+</td></tr>
</tbody>
</table>
</section>
<section>
<h2>本 PRD 包含的信息类型(HTML 8 元素)</h2>
<p>用户明确要求 PRD HTML 必须装入 8 类信息:</p>
<div class="grid-4">
<div class="card"><h4>① Tables</h4><p class="sig">规格 / 映射 / 阶段</p></div>
<div class="card"><h4>② Design</h4><p class="sig">色板 / 字号 / 排版语言</p></div>
<div class="card"><h4>③ Illustrations</h4><p class="sig">嵌套环 / 状态机 SVG</p></div>
<div class="card"><h4>④ Code</h4><p class="sig">JSON / curl / JS 骨架</p></div>
<div class="card"><h4>⑤ Interaction</h4><p class="sig">Tabs · 折叠 · 侧栏</p></div>
<div class="card"><h4>⑥ Workflows</h4><p class="sig">跨泳道时序图</p></div>
<div class="card"><h4>⑦ Spatial</h4><p class="sig">目录树 / 组件方框</p></div>
<div class="card"><h4>⑧ Images</h4><p class="sig">UI wireframe SVG</p></div>
</div>
</section>
</article>
<nav class="prev-next"></nav>
<footer class="site"><div><b>Section</b>01 · Overview</div><div><b>Page</b>scope.html</div></footer>
</main>
</div>
<script src="assets/shell.js"></script>
</body>
</html>