prd-personas.html 9.68 KB
<!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>&lt;section data-rev="N"&gt;</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 &lt; 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>