Files
.pouch/skills/specifier/templates/prd.template.html
T
2026-10-11 17:56:38 +08:00

53 lines
3.7 KiB
HTML

<!doctype html>
<html lang="zh-CN">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>{{feature_title}} · PRD {{revision}}</title>
<style>
:root { color-scheme: light; --ink:#18212f; --muted:#64748b; --line:#dbe3ed; --soft:#f5f8fb; --accent:#2457a6; --warn:#9a5b00; }
* { box-sizing:border-box; }
body { margin:0; color:var(--ink); background:#eef2f6; font:16px/1.65 system-ui,-apple-system,"Segoe UI",sans-serif; }
main { max-width:1120px; margin:0 auto; padding:32px 22px 72px; }
article { background:#fff; border:1px solid var(--line); border-radius:14px; padding:42px clamp(24px,5vw,72px); box-shadow:0 8px 28px #18212f0d; }
h1,h2,h3 { line-height:1.25; color:#101827; }
h1 { font-size:clamp(2rem,5vw,3.5rem); margin:0 0 16px; }
h2 { margin-top:42px; padding-top:18px; border-top:1px solid var(--line); }
a { color:var(--accent); }
.meta { display:flex; flex-wrap:wrap; gap:8px; margin:20px 0 34px; }
.badge { padding:4px 10px; border:1px solid var(--line); border-radius:999px; background:var(--soft); font-size:.9rem; }
.status { border-color:#e7c487; color:var(--warn); background:#fff8e8; }
.callout { padding:16px 18px; border-left:4px solid var(--accent); background:var(--soft); }
table { width:100%; border-collapse:collapse; display:block; overflow-x:auto; }
th,td { min-width:140px; padding:10px 12px; border:1px solid var(--line); text-align:left; vertical-align:top; }
th { background:var(--soft); }
code,pre { font-family:ui-monospace,SFMono-Regular,Menlo,monospace; }
pre { overflow:auto; padding:16px; background:#111827; color:#e5edf8; border-radius:8px; }
@media print { body { background:#fff; } main { padding:0; } article { border:0; box-shadow:none; padding:0; } .page-break { break-before:page; } }
</style>
</head>
<body>
<main>
<article>
<header>
<p class="meta"><span class="badge">Feature: {{feature_id}}</span><span class="badge">PRD: {{revision}}</span><span class="badge status">状态:{{status}}</span></p>
<h1>{{feature_title}}</h1>
<p>{{one_sentence_summary}}</p>
<p class="muted">生成时间:{{generated_at}} · 基于版本:{{changed_from}}</p>
</header>
<section id="summary"><h2>1. 摘要</h2><p>{{problem_and_success}}</p></section>
<section id="scope"><h2>2. 范围</h2><h3>目标</h3><ul><li>{{goal}}</li></ul><h3>非目标</h3><ul><li>{{non_goal}}</li></ul></section>
<section id="scenarios"><h2>3. 场景与流程</h2><p>{{user_scenarios}}</p></section>
<section id="options"><h2>4. 方案与决策</h2><p>{{recommended_option}}</p><table><thead><tr><th>方案</th><th>收益</th><th>代价/风险</th><th>结论</th></tr></thead><tbody><tr><td>{{option}}</td><td>{{benefit}}</td><td>{{tradeoff}}</td><td>{{decision}}</td></tr></tbody></table></section>
<section id="design"><h2>5. 设计</h2><p>{{interaction_domain_api_data}}</p></section>
<section id="nonfunctional"><h2>6. 非功能要求</h2><ul><li>{{security_performance_observability}}</li></ul></section>
<section id="tasks"><h2>7. 任务预览</h2><table><thead><tr><th>ID</th><th>切片</th><th>依赖</th><th>Expected</th><th>Verification</th></tr></thead><tbody><tr><td>{{task_id}}</td><td>{{task_title}}</td><td>{{depends_on}}</td><td>{{expected}}</td><td>{{verification}}</td></tr></tbody></table></section>
<section id="acceptance"><h2>8. 验收标准</h2><ol><li>{{observable_signal}}</li></ol></section>
<section id="risks"><h2>9. 风险与未决问题</h2><div class="callout">{{unresolved_questions}}</div></section>
<section id="changes"><h2>10. 本轮变更</h2><ul><li>{{change_summary}}</li></ul></section>
</article>
</main>
</body>
</html>