@openprd/cli 0.1.9 → 0.1.11

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (138) hide show
  1. package/.openprd/benchmarks/index.md +16 -0
  2. package/.openprd/benchmarks/sources.yaml +53 -1
  3. package/.openprd/config.yaml +10 -0
  4. package/.openprd/design/README.md +47 -0
  5. package/.openprd/design/README_EN.md +25 -0
  6. package/.openprd/design/active/asset-spec.md +15 -0
  7. package/.openprd/design/active/direction-plan.md +7 -0
  8. package/.openprd/design/active/facts-sheet.md +13 -0
  9. package/.openprd/design/active/image-preflight.md +9 -0
  10. package/.openprd/design/active/selected-direction.md +11 -0
  11. package/.openprd/design/anti-slop.md +16 -0
  12. package/.openprd/design/assets/dark-mesh.svg +14 -0
  13. package/.openprd/design/assets/paper-grid.svg +14 -0
  14. package/.openprd/design/assets/surface-presets.md +21 -0
  15. package/.openprd/design/assets/workbench-grid.svg +16 -0
  16. package/.openprd/design/checklists/ui-quality-gate.md +22 -0
  17. package/.openprd/design/components/component-catalog.md +42 -0
  18. package/.openprd/design/layouts/layout-catalog.json +45 -0
  19. package/.openprd/design/lenses/frontend-lenses.md +31 -0
  20. package/.openprd/design/recipes/content-experience.md +26 -0
  21. package/.openprd/design/recipes/operational-tool.md +25 -0
  22. package/.openprd/design/recipes/product-launch.md +26 -0
  23. package/.openprd/design/templates/README.md +36 -0
  24. package/.openprd/design/templates/README_EN.md +31 -0
  25. package/.openprd/design/templates/content-home.html +415 -0
  26. package/.openprd/design/templates/ops-dashboard.html +340 -0
  27. package/.openprd/design/templates/product-launch.html +360 -0
  28. package/.openprd/design/themes/theme-catalog.json +77 -0
  29. package/.openprd/engagements/active/prd.md +111 -100
  30. package/.openprd/schema/prd.schema.yaml +25 -0
  31. package/.openprd/templates/base/intake.md +17 -0
  32. package/.openprd/templates/base/prd.md +31 -6
  33. package/AGENTS.md +10 -7
  34. package/README.md +26 -28
  35. package/README_EN.md +3 -3
  36. package/package.json +41 -2
  37. package/scripts/openprd-codex-isolated-worker.mjs +799 -0
  38. package/skills/openprd-benchmark-router/SKILL.md +5 -0
  39. package/skills/openprd-frontend-design/SKILL.md +161 -0
  40. package/skills/openprd-frontend-design/references/design-asset-contract.md +34 -0
  41. package/skills/openprd-frontend-design/references/direction-engine.md +46 -0
  42. package/skills/openprd-harness/SKILL.md +37 -20
  43. package/skills/openprd-learning-review/SKILL.md +2 -1
  44. package/skills/openprd-learning-review/references/style-packs/xianxia-cultivation.prompt.md +1 -1
  45. package/skills/openprd-quality/SKILL.md +5 -3
  46. package/skills/openprd-requirement-intake/SKILL.md +27 -5
  47. package/skills/openprd-requirement-intake/references/prd-template-lenses.md +6 -3
  48. package/skills/openprd-requirement-intake/references/routing-rubric.md +9 -5
  49. package/skills/openprd-requirement-intake/references/startup-validation-lens.md +108 -0
  50. package/skills/openprd-router/SKILL.md +13 -5
  51. package/skills/openprd-shared/SKILL.md +38 -25
  52. package/src/agent-integration.js +120 -69
  53. package/src/brainstorm-artifacts.js +1805 -0
  54. package/src/brainstorm-presentation.js +233 -0
  55. package/src/brainstorm.js +766 -0
  56. package/src/cli/args.js +51 -3
  57. package/src/cli/doctor-print.js +34 -8
  58. package/src/cli/print.js +6 -0
  59. package/src/cli/quality-print.js +79 -3
  60. package/src/cli/run-print.js +43 -1
  61. package/src/cli/shared-print.js +33 -2
  62. package/src/cli/workflow-print.js +21 -0
  63. package/src/codex-hook-runner-template.mjs +838 -58
  64. package/src/design-starter-support.js +462 -0
  65. package/src/design-starter.js +1207 -0
  66. package/src/diagram-core.js +384 -151
  67. package/src/html-artifacts.js +403 -50
  68. package/src/knowledge.js +291 -32
  69. package/src/learning-review.js +3 -3
  70. package/src/loop.js +839 -101
  71. package/src/openprd.js +86 -1
  72. package/src/openspec/change-validate.js +1 -0
  73. package/src/prd-core.js +119 -2
  74. package/src/quality-html-artifact.js +30 -5
  75. package/src/quality-learning.js +50 -6
  76. package/src/quality.js +22 -12
  77. package/src/run-harness.js +191 -29
  78. package/src/self-update.js +301 -4
  79. package/src/standards.js +46 -5
  80. package/src/visual-prepare.js +940 -0
  81. package/src/workspace-core.js +175 -0
  82. package/src/workspace-workflow.js +307 -7
  83. package/.openprd/benchmarks/evidence/milvus-io-ai-code-review-gets-better-when-models-debate-claude-vs-gemini-vs-code.md +0 -14
  84. package/.openprd/benchmarks/evidence/nolanlawson-com-using-ai-to-write-better-code-more-slowly.md +0 -14
  85. package/.openprd/discovery/config.json +0 -35
  86. package/.openprd/engagements/active/flows.md +0 -35
  87. package/.openprd/engagements/active/handoff.md +0 -16
  88. package/.openprd/engagements/active/review.html +0 -61
  89. package/.openprd/engagements/active/roles.md +0 -22
  90. package/.openprd/engagements/work-units/wu-20260524015648-6d33ded7.json +0 -23
  91. package/.openprd/engagements/work-units/wu-20260602113956-a99b5b88.json +0 -18
  92. package/.openprd/engagements/work-units/wu-20260602122244-78656aaf.json +0 -18
  93. package/.openprd/engagements/work-units/wu-20260602122442-e96489e2.json +0 -18
  94. package/.openprd/engagements/work-units/wu-20260602132835-695429e8.json +0 -18
  95. package/.openprd/exports/.gitkeep +0 -0
  96. package/.openprd/knowledge/candidates/candidate-turn-1780116203372-5f266a79e968c758/candidate.json +0 -78
  97. package/.openprd/knowledge/candidates/candidate-turn-1780116203372-5f266a79e968c758/diagnostic-report.json +0 -129
  98. package/.openprd/knowledge/candidates/candidate-turn-1780116203372-5f266a79e968c758/root-cause-candidates.json +0 -41
  99. package/.openprd/knowledge/candidates/candidate-turn-1780116203372-5f266a79e968c758/timeline.json +0 -14
  100. package/.openprd/knowledge/drafts/openprd-experience-diagnostic-candidate-turn-1780116203372-5f266a79e968c758/SKILL.md +0 -49
  101. package/.openprd/knowledge/index.json +0 -47
  102. package/.openprd/reviews/v0001.html +0 -1322
  103. package/.openprd/reviews/v0002.html +0 -1150
  104. package/.openprd/reviews/v0003.html +0 -1150
  105. package/.openprd/reviews/v0004.html +0 -1150
  106. package/.openprd/reviews/v0005.html +0 -1150
  107. package/.openprd/sessions/.gitkeep +0 -0
  108. package/.openprd/state/changes.json +0 -27
  109. package/.openprd/state/current.json +0 -505
  110. package/.openprd/state/release-ledger.json +0 -387
  111. package/.openprd/state/version-index.json +0 -67
  112. package/.openprd/state/versions/.gitkeep +0 -0
  113. package/.openprd/state/versions/v0001.json +0 -121
  114. package/.openprd/state/versions/v0001.md +0 -161
  115. package/.openprd/state/versions/v0002.json +0 -264
  116. package/.openprd/state/versions/v0002.md +0 -183
  117. package/.openprd/state/versions/v0003.json +0 -269
  118. package/.openprd/state/versions/v0003.md +0 -188
  119. package/.openprd/state/versions/v0004.json +0 -274
  120. package/.openprd/state/versions/v0004.md +0 -193
  121. package/.openprd/state/versions/v0005.json +0 -299
  122. package/.openprd/state/versions/v0005.md +0 -189
  123. package/docs/assets/openprd-capability-overview-en.png +0 -0
  124. package/docs/assets/openprd-capability-overview-zh.png +0 -0
  125. package/docs/assets/openprd-learning-html.png +0 -0
  126. package/docs/assets/openprd-quality-html.png +0 -0
  127. package/docs/assets/openprd-requirement-routing-en.png +0 -0
  128. package/docs/assets/openprd-requirement-routing-en.svg +0 -102
  129. package/docs/assets/openprd-requirement-routing-zh-refined.png +0 -0
  130. package/docs/assets/openprd-requirement-routing-zh.png +0 -0
  131. package/docs/assets/openprd-requirement-routing-zh.svg +0 -102
  132. package/docs/assets/openprd-review-html.png +0 -0
  133. package/docs/assets/openprd-scenario-overview.png +0 -0
  134. package/docs/assets/openprd-scenario-overview.svg +0 -114
  135. package/docs/assets/openprd-self-evolving-mechanisms-en.png +0 -0
  136. package/docs/assets/openprd-self-evolving-mechanisms-zh.png +0 -0
  137. package/docs/assets/openprd-visual-compare-case-study-en.png +0 -0
  138. package/docs/assets/openprd-visual-compare-case-study-zh.png +0 -0
@@ -1,102 +0,0 @@
1
- <svg xmlns="http://www.w3.org/2000/svg" width="1600" height="980" viewBox="0 0 1600 980" role="img" aria-labelledby="title desc">
2
- <title id="title">OpenPrd 需求分流节奏</title>
3
- <desc id="desc">一张说明 OpenPrd 如何把用户需求分成快速修正、现有功能优化和新功能新流程方案的流程图。</desc>
4
- <defs>
5
- <linearGradient id="bg" x1="0" y1="0" x2="1" y2="1">
6
- <stop offset="0" stop-color="#fff8f1"/>
7
- <stop offset="0.45" stop-color="#f8fbff"/>
8
- <stop offset="1" stop-color="#f6f2ff"/>
9
- </linearGradient>
10
- <filter id="shadow" x="-20%" y="-20%" width="140%" height="140%">
11
- <feDropShadow dx="0" dy="16" stdDeviation="18" flood-color="#0f172a" flood-opacity="0.12"/>
12
- </filter>
13
- <marker id="arrow" viewBox="0 0 12 12" refX="11" refY="6" markerWidth="10" markerHeight="10" orient="auto">
14
- <path d="M2 2 L10 6 L2 10 Z" fill="#475569"/>
15
- </marker>
16
- <style>
17
- .eyebrow { font: 700 20px Inter, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif; letter-spacing: 2px; fill: #2563eb; }
18
- .title { font: 800 56px Inter, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif; fill: #0f172a; }
19
- .subtitle { font: 500 26px Inter, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif; fill: #334155; }
20
- .card-title { font: 800 28px Inter, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif; fill: #111827; }
21
- .card-body { font: 500 20px Inter, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif; fill: #475569; }
22
- .pill { font: 700 18px Inter, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif; fill: #ffffff; }
23
- .footer-title { font: 700 22px Inter, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif; fill: #0f172a; }
24
- .footer-body { font: 500 18px Inter, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif; fill: #475569; }
25
- .line { fill: none; stroke: #64748b; stroke-width: 4; marker-end: url(#arrow); }
26
- .dash { fill: none; stroke: #94a3b8; stroke-width: 3; stroke-dasharray: 10 10; }
27
- </style>
28
- </defs>
29
-
30
- <rect width="1600" height="980" fill="url(#bg)"/>
31
- <path d="M0 126 H1600 M0 292 H1600 M0 458 H1600 M0 624 H1600 M0 790 H1600 M190 0 V980 M390 0 V980 M590 0 V980 M790 0 V980 M990 0 V980 M1190 0 V980 M1390 0 V980" stroke="#dbeafe" stroke-width="1" opacity="0.65"/>
32
-
33
- <g transform="translate(92 78)">
34
- <text class="eyebrow" x="0" y="0">OPENPRD REQUIREMENT INTAKE</text>
35
- <text class="title" x="0" y="78">一句需求进来,OpenPrd 怎么接住</text>
36
- <text class="subtitle" x="2" y="126">先帮你把目标、场景和风险说清楚,再决定是直接改、先给 mini-plan,还是进入完整方案。</text>
37
- </g>
38
-
39
- <g transform="translate(96 220)" filter="url(#shadow)">
40
- <rect width="420" height="280" rx="22" fill="#ffffff" stroke="#fdba74" stroke-width="2"/>
41
- <rect x="30" y="28" width="104" height="38" rx="19" fill="#f97316"/>
42
- <text class="pill" x="62" y="53">01</text>
43
- <text class="card-title" x="30" y="108">快速修正</text>
44
- <text class="card-body" x="30" y="152">问题已经很明确</text>
45
- <text class="card-body" x="30" y="184">影响小,验收也清楚</text>
46
- <text class="card-body" x="30" y="216">通常直接处理</text>
47
- <text class="card-body" x="30" y="248">做完告诉你改了什么</text>
48
- <text class="card-body" x="30" y="280">以及怎么验证</text>
49
- </g>
50
-
51
- <g transform="translate(590 220)" filter="url(#shadow)">
52
- <rect width="420" height="280" rx="22" fill="#ffffff" stroke="#c4b5fd" stroke-width="2"/>
53
- <rect x="30" y="28" width="104" height="38" rx="19" fill="#7c3aed"/>
54
- <text class="pill" x="62" y="53">02</text>
55
- <text class="card-title" x="30" y="108">现有功能优化</text>
56
- <text class="card-body" x="30" y="152">目标明确</text>
57
- <text class="card-body" x="30" y="184">但会牵动几个页面</text>
58
- <text class="card-body" x="30" y="216">状态或用户动作</text>
59
- <text class="card-body" x="30" y="248">先用人话给 mini-plan</text>
60
- <text class="card-body" x="30" y="280">方向对了再继续</text>
61
- </g>
62
-
63
- <g transform="translate(1084 220)" filter="url(#shadow)">
64
- <rect width="420" height="280" rx="22" fill="#ffffff" stroke="#86efac" stroke-width="2"/>
65
- <rect x="30" y="28" width="104" height="38" rx="19" fill="#16a34a"/>
66
- <text class="pill" x="62" y="53">03</text>
67
- <text class="card-title" x="30" y="108">新功能 / 新流程方案</text>
68
- <text class="card-body" x="30" y="152">范围更大,角色更多</text>
69
- <text class="card-body" x="30" y="184">或业务风险还不清楚</text>
70
- <text class="card-body" x="30" y="216">先讲清用户场景</text>
71
- <text class="card-body" x="30" y="248">第一版、不做什么</text>
72
- <text class="card-body" x="30" y="280">再进入完整方案</text>
73
- </g>
74
-
75
- <path class="line" d="M516 360 H578"/>
76
- <path class="line" d="M1010 360 H1072"/>
77
-
78
- <g transform="translate(220 566)" filter="url(#shadow)">
79
- <rect width="1160" height="156" rx="24" fill="#ffffff" stroke="#dbeafe" stroke-width="2"/>
80
- <text class="footer-title" x="40" y="54">你只需要先说明业务问题</text>
81
- <text class="footer-body" x="40" y="90">谁在什么场景下遇到什么问题,想先解决哪一块。</text>
82
- <path class="dash" d="M420 78 H520"/>
83
- <text class="footer-title" x="560" y="54">OpenPrd 先帮你归纳</text>
84
- <text class="footer-body" x="560" y="90">先讲目标、范围、先不做什么,以及主要风险。</text>
85
- <path class="dash" d="M936 78 H1036"/>
86
- <text class="footer-title" x="1074" y="54">再选合适的推进节奏</text>
87
- <text class="footer-body" x="1074" y="90">避免一上来就重流程,也避免没说清就直接开做。</text>
88
- </g>
89
-
90
- <g transform="translate(120 792)" filter="url(#shadow)">
91
- <rect width="1360" height="110" rx="24" fill="#ffffff" stroke="#dbeafe" stroke-width="2"/>
92
- <circle cx="72" cy="55" r="28" fill="#fb923c"/>
93
- <circle cx="460" cy="55" r="28" fill="#38bdf8"/>
94
- <circle cx="864" cy="55" r="28" fill="#34d399"/>
95
- <text class="footer-title" x="118" y="44">个人用户场景</text>
96
- <text class="footer-body" x="118" y="74">更关注什么时候会用、第一下有没有感受到价值。</text>
97
- <text class="footer-title" x="506" y="44">团队 / 企业流程</text>
98
- <text class="footer-body" x="506" y="74">更关注谁拍板、谁使用、谁要推进上线。</text>
99
- <text class="footer-title" x="910" y="44">Agent 协作</text>
100
- <text class="footer-body" x="910" y="74">更关注哪些能自动做、哪里必须人工兜底。</text>
101
- </g>
102
- </svg>
Binary file
@@ -1,114 +0,0 @@
1
- <svg xmlns="http://www.w3.org/2000/svg" width="1600" height="920" viewBox="0 0 1600 920" role="img" aria-labelledby="title desc">
2
- <title id="title">OpenPrd scenario overview</title>
3
- <desc id="desc">A visual map of OpenPrd usage scenarios from unclear ideas to verified handoff.</desc>
4
- <defs>
5
- <linearGradient id="bg" x1="0" y1="0" x2="1" y2="1">
6
- <stop offset="0" stop-color="#f8fafc"/>
7
- <stop offset="0.45" stop-color="#eef6ff"/>
8
- <stop offset="1" stop-color="#f7f0ff"/>
9
- </linearGradient>
10
- <filter id="shadow" x="-20%" y="-20%" width="140%" height="140%">
11
- <feDropShadow dx="0" dy="16" stdDeviation="18" flood-color="#0f172a" flood-opacity="0.12"/>
12
- </filter>
13
- <marker id="arrow" viewBox="0 0 12 12" refX="11" refY="6" markerWidth="10" markerHeight="10" orient="auto">
14
- <path d="M2 2 L10 6 L2 10 Z" fill="#475569"/>
15
- </marker>
16
- <style>
17
- .small { font: 500 22px Inter, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif; fill: #475569; }
18
- .eyebrow { font: 700 20px Inter, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif; letter-spacing: 2px; fill: #2563eb; }
19
- .title { font: 800 58px Inter, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif; fill: #0f172a; }
20
- .subtitle { font: 500 26px Inter, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif; fill: #334155; }
21
- .card-title { font: 800 28px Inter, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif; fill: #111827; }
22
- .card-body { font: 500 21px Inter, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif; fill: #475569; }
23
- .dark-title { font: 800 28px Inter, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif; fill: #ffffff; }
24
- .dark-body { font: 500 21px Inter, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif; fill: #cbd5e1; }
25
- .pill { font: 700 18px Inter, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif; fill: #ffffff; }
26
- .mono { font: 700 18px ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", monospace; fill: #334155; }
27
- .line { fill: none; stroke: #64748b; stroke-width: 4; marker-end: url(#arrow); }
28
- .dash { fill: none; stroke: #94a3b8; stroke-width: 3; stroke-dasharray: 10 10; }
29
- </style>
30
- </defs>
31
-
32
- <rect width="1600" height="920" rx="0" fill="url(#bg)"/>
33
- <path d="M0 118 H1600 M0 274 H1600 M0 430 H1600 M0 586 H1600 M0 742 H1600 M190 0 V920 M390 0 V920 M590 0 V920 M790 0 V920 M990 0 V920 M1190 0 V920 M1390 0 V920" stroke="#dbeafe" stroke-width="1" opacity="0.7"/>
34
-
35
- <g transform="translate(92 72)">
36
- <text class="eyebrow" x="0" y="0">OPENPRD WORKSPACE</text>
37
- <text class="title" x="0" y="78">From fuzzy intent to verified handoff</text>
38
- <text class="subtitle" x="2" y="125">Use one local PRD workspace to clarify, review, execute, compare visuals, and keep quality evidence visible.</text>
39
- </g>
40
-
41
- <g transform="translate(96 210)" filter="url(#shadow)">
42
- <rect width="392" height="220" rx="18" fill="#ffffff" stroke="#bfdbfe" stroke-width="2"/>
43
- <rect x="28" y="28" width="84" height="34" rx="17" fill="#2563eb"/>
44
- <text class="pill" x="49" y="51">01</text>
45
- <text class="card-title" x="28" y="104">Clarify new ideas</text>
46
- <text class="card-body" x="28" y="145">Turn rough product prompts</text>
47
- <text class="card-body" x="28" y="177">into captured facts, open</text>
48
- <text class="card-body" x="28" y="209">questions, and review scope.</text>
49
- </g>
50
-
51
- <g transform="translate(604 210)" filter="url(#shadow)">
52
- <rect width="392" height="220" rx="18" fill="#ffffff" stroke="#bbf7d0" stroke-width="2"/>
53
- <rect x="28" y="28" width="84" height="34" rx="17" fill="#16a34a"/>
54
- <text class="pill" x="49" y="51">02</text>
55
- <text class="card-title" x="28" y="104">Mine existing projects</text>
56
- <text class="card-body" x="28" y="145">Use discovery to track</text>
57
- <text class="card-body" x="28" y="177">coverage, evidence, tasks,</text>
58
- <text class="card-body" x="28" y="209">and standards drift.</text>
59
- </g>
60
-
61
- <g transform="translate(1112 210)" filter="url(#shadow)">
62
- <rect width="392" height="220" rx="18" fill="#ffffff" stroke="#fed7aa" stroke-width="2"/>
63
- <rect x="28" y="28" width="84" height="34" rx="17" fill="#f97316"/>
64
- <text class="pill" x="49" y="51">03</text>
65
- <text class="card-title" x="28" y="104">Confirm with visuals</text>
66
- <text class="card-body" x="28" y="145">Generate architecture and</text>
67
- <text class="card-body" x="28" y="177">product-flow reviews before</text>
68
- <text class="card-body" x="28" y="209">teams commit to execution.</text>
69
- </g>
70
-
71
- <path class="line" d="M488 320 H592"/>
72
- <path class="line" d="M996 320 H1100"/>
73
-
74
- <g transform="translate(180 542)" filter="url(#shadow)">
75
- <rect width="520" height="230" rx="18" fill="#0f172a" stroke="#334155" stroke-width="2"/>
76
- <rect x="30" y="30" width="128" height="36" rx="18" fill="#a855f7"/>
77
- <text class="pill" x="54" y="54">Agent Loop</text>
78
- <text class="dark-title" x="30" y="113">Execute one task per session</text>
79
- <text class="dark-body" x="30" y="154">Convert confirmed changes into</text>
80
- <text class="dark-body" x="30" y="186">dependency-ready prompts, logs,</text>
81
- <text class="dark-body" x="30" y="218">verification, and optional commits.</text>
82
- </g>
83
-
84
- <g transform="translate(900 542)" filter="url(#shadow)">
85
- <rect width="520" height="230" rx="18" fill="#ffffff" stroke="#fecdd3" stroke-width="2"/>
86
- <rect x="30" y="30" width="150" height="36" rx="18" fill="#e11d48"/>
87
- <text class="pill" x="54" y="54">Quality + UI</text>
88
- <text class="card-title" x="30" y="113">Verify before handoff</text>
89
- <text class="card-body" x="30" y="154">Keep regression reports, cost</text>
90
- <text class="card-body" x="30" y="186">guardrails, smoke evidence, and</text>
91
- <text class="card-body" x="30" y="218">visual compare artifacts together.</text>
92
- </g>
93
-
94
- <path class="line" d="M800 430 V500 C800 530 760 558 712 630"/>
95
- <path class="line" d="M1008 430 V500 C1008 530 942 558 900 630"/>
96
- <path class="dash" d="M700 660 H900"/>
97
-
98
- <g transform="translate(96 822)">
99
- <rect width="1408" height="54" rx="27" fill="#ffffff" stroke="#dbeafe" stroke-width="2"/>
100
- <text class="mono" x="40" y="35">openprd clarify</text>
101
- <text class="small" x="225" y="35">-></text>
102
- <text class="mono" x="266" y="35">capture</text>
103
- <text class="small" x="372" y="35">-></text>
104
- <text class="mono" x="414" y="35">synthesize</text>
105
- <text class="small" x="566" y="35">-></text>
106
- <text class="mono" x="608" y="35">diagram</text>
107
- <text class="small" x="724" y="35">-></text>
108
- <text class="mono" x="766" y="35">change/tasks</text>
109
- <text class="small" x="942" y="35">-></text>
110
- <text class="mono" x="984" y="35">loop</text>
111
- <text class="small" x="1052" y="35">-></text>
112
- <text class="mono" x="1094" y="35">quality + handoff</text>
113
- </g>
114
- </svg>