prd-personas.html
9.68 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
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
<!doctype html>
<html lang="zh-CN">
<head>
<meta charset="utf-8" /><meta name="viewport" content="width=device-width,initial-scale=1" />
<title>角色与 User Stories · 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="prd-personas.html">
<div class="shell">
<aside id="sidebar"></aside>
<main class="page">
<header class="page-head">
<div class="crumb"><span class="pill">01 · PRD</span><span class="sep">/</span><span>角色 · User Stories</span></div>
<h1>角色与用户故事</h1>
<p class="deck">三类人 + 两类 Agent。每个故事卡都带:<b>Who / When / What / Acceptance</b>。Acceptance 字段会被 Tester Agent 直接转成 vitest 用例。</p>
</header>
<article class="body">
<section>
<h2>三类人类角色</h2>
<div class="grid-3">
<div class="card l3">
<h4>P1 · Founder / Tech Lead</h4>
<h3>Yibo</h3>
<p>下需求 + 决策 + 验收。每天 1-3 次用 DevLoop。要求快、要求 PRD 与代码同步、不接受 chat-only。</p>
<p class="sig">主要触达:L3 反馈、Sign-off、Sidebar 全部 8 个 Section</p>
</div>
<div class="card l3">
<h4>P2 · Reviewer</h4>
<h3>同事 / 投资人</h3>
<p>偶尔进来看进度和最终产物。不写代码,只读 PRD + Dashboard。要求一目了然。</p>
<p class="sig">主要触达:Dashboard 头部、PRD diff、L2 集成结果</p>
</div>
<div class="card l3">
<h4>P3 · Future Maintainer</h4>
<h3>3 个月后的自己</h3>
<p>回过头改某个 Unit 时,得能从 PRD / SDD 反推为什么这么设计。</p>
<p class="sig">主要触达:PRD history、SDD section 级 diff、coder.log</p>
</div>
</div>
</section>
<section>
<h2>两类 Agent 「角色」</h2>
<p>Agent 不是用户,但它们消费这套文档,列出来便于把约束写在该写的位置。</p>
<div class="grid-2">
<div class="card l1">
<span class="tag L1">A1</span>
<h3>本项目内的六个 Agent</h3>
<p>消费 PRD/SDD/units.json/contract.json。详见 <a href="agents-overview.html">六个 Agent</a>。</p>
</div>
<div class="card l2">
<span class="tag L2">A2</span>
<h3>外部 Claude Code Session</h3>
<p>从零拉起一份本仓库后,<b>只读本套文档</b>就能复现整个 DevLoop 系统。详见 <a href="plan-reproducibility.html">复现指南</a>。</p>
</div>
</div>
</section>
<section>
<h2>核心 User Stories</h2>
<details class="acc" open>
<summary>US-01 · Founder 启动新项目<span class="role">L3</span></summary>
<div class="inner">
<p><b>As</b> Yibo,<b>I want</b> 用一句中文描述需求就启动一个 DevLoop 项目,<b>so that</b> 我不用先想清楚再下达指令。</p>
<table class="dense">
<thead><tr><th>字段</th><th>内容</th></tr></thead>
<tbody>
<tr><td><b>Trigger</b></td><td>POST /api/devloop/projects 或 Dashboard 「+ NEW PROJECT」</td></tr>
<tr><td><b>Inputs</b></td><td><code>{ company_id, name, requirement: string }</code></td></tr>
<tr><td><b>Acceptance</b></td><td>
<ul style="padding-left:18px;margin:0">
<li>30 秒内 prd.html v1 落盘</li>
<li>60 秒内 sdd.html v1 + units.json 落盘</li>
<li>SSE 立即推 <code>prd.updated</code> 事件</li>
</ul>
</td></tr>
</tbody>
</table>
</div>
</details>
<details class="acc">
<summary>US-02 · Founder 追加新需求<span class="role">L3</span></summary>
<div class="inner">
<p><b>As</b> Yibo,<b>I want</b> 在项目跑到一半时插话「再加 OAuth 登录」,<b>so that</b> 系统能识别这是增量而不是从头重做。</p>
<table class="dense">
<tbody>
<tr><td><b>Trigger</b></td><td>POST /api/devloop/projects/:pid/requirement</td></tr>
<tr><td><b>Acceptance</b></td><td>
<ul style="padding-left:18px;margin:0">
<li>PRD 新增 <code><section data-rev="N"></code>,不重写旧 section</li>
<li>units.json diff 输出 <code>{added, changed, removed}</code> 三类</li>
<li>已 passed 且 contract_hash 不变的 Unit <b>不</b>被 reset</li>
</ul>
</td></tr>
</tbody>
</table>
</div>
</details>
<details class="acc">
<summary>US-03 · Reviewer 查看实时进度<span class="role">L3</span></summary>
<div class="inner">
<p><b>As</b> Reviewer,<b>I want</b> 打开 Dashboard 就看到「现在卡在哪一步」,<b>so that</b> 不必去翻日志。</p>
<table class="dense">
<tbody>
<tr><td><b>Trigger</b></td><td>GET /devloop/:pid(前端)</td></tr>
<tr><td><b>Acceptance</b></td><td>
<ul style="padding-left:18px;margin:0">
<li>顶部 3 张 Loop 状态卡 5 秒内更新</li>
<li>DAG 节点颜色对应 unit.status</li>
<li>失败 Unit 红色 + 显示 retry 次数</li>
</ul>
</td></tr>
</tbody>
</table>
</div>
</details>
<details class="acc">
<summary>US-04 · 系统自愈集成失败<span class="role">L2</span></summary>
<div class="inner">
<p><b>As</b> Yibo,<b>I want</b> 集成失败时系统先尝试自己修,不要每次都来问我,<b>so that</b> 我专注高价值决策。</p>
<table class="dense">
<tbody>
<tr><td><b>Trigger</b></td><td>Integrator 返回 ok=false</td></tr>
<tr><td><b>Acceptance</b></td><td>
<ul style="padding-left:18px;margin:0">
<li>BugTriager 5 分钟内产 triage.json</li>
<li>confidence ≥ 0.5 → 自动 patch SDD + reset Unit</li>
<li>confidence < 0.5 → 发 SSE <code>human_intervention_needed</code></li>
<li>同项目每 PRD rev 最多自愈 3 轮</li>
</ul>
</td></tr>
</tbody>
</table>
</div>
</details>
<details class="acc">
<summary>US-05 · Future Maintainer 反推决策<span class="role">L3</span></summary>
<div class="inner">
<p><b>As</b> 3 个月后的 Yibo,<b>I want</b> 看到 SDD 某个 Unit 的「为什么这么设计」,<b>so that</b> 不会重复犯老错。</p>
<table class="dense">
<tbody>
<tr><td><b>Trigger</b></td><td>在 Dashboard 点开某 Unit 卡片</td></tr>
<tr><td><b>Acceptance</b></td><td>
<ul style="padding-left:18px;margin:0">
<li>能看到该 Unit 在哪个 PRD rev 引入</li>
<li>能看到所有 retry 时的 coder.log + tester.hint</li>
<li>能看到所有相关 triage.json(如果被 reset 过)</li>
</ul>
</td></tr>
</tbody>
</table>
</div>
</details>
<details class="acc">
<summary>US-06 · 外部 Claude Code 复现项目<span class="role">A2</span></summary>
<div class="inner">
<p><b>As</b> 一个全新的 Claude Code session,<b>I want</b> 拿到本套 PRD + SDD HTML 就能从空仓库重建整套 DevLoop 代码,<b>so that</b> 系统具备真正的「文档驱动」性质。</p>
<table class="dense">
<tbody>
<tr><td><b>Trigger</b></td><td>执行 <a href="plan-reproducibility.html">复现 prompt</a></td></tr>
<tr><td><b>Acceptance</b></td><td>
<ul style="padding-left:18px;margin:0">
<li>5 个新 JS + 6 Agent 模板 + 1 Vue 全部生成</li>
<li>SDD MVCP 四象限 100% 抽取覆盖</li>
<li>单测自动通过率 ≥ 80%</li>
</ul>
</td></tr>
</tbody>
</table>
</div>
</details>
</section>
<section>
<h2>故事优先级</h2>
<table class="dense">
<thead><tr><th>P</th><th>Story</th><th>阶段</th></tr></thead>
<tbody>
<tr><td><b>P0</b></td><td>US-01 · US-04</td><td>P1 + P3 必须</td></tr>
<tr><td><b>P1</b></td><td>US-02 · US-03</td><td>P3 / P4 必须</td></tr>
<tr><td><b>P2</b></td><td>US-05</td><td>P4 应有</td></tr>
<tr><td><b>P3</b></td><td>US-06</td><td>P4 后续验证</td></tr>
</tbody>
</table>
</section>
</article>
<nav class="prev-next"></nav>
<footer class="site"><div><b>Section</b>01 · PRD</div><div><b>Page</b>prd-personas.html</div></footer>
</main>
</div>
<script src="assets/shell.js"></script>
</body>
</html>