@openprd/cli 0.1.0 → 0.1.8
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.
- package/.openprd/README.md +43 -69
- package/.openprd/README_EN.md +84 -0
- package/.openprd/benchmarks/index.md +7 -0
- package/.openprd/benchmarks/sources.yaml +25 -3
- package/.openprd/discovery/config.json +16 -2
- package/.openprd/engagements/active/flows.md +19 -14
- package/.openprd/engagements/active/handoff.md +11 -4
- package/.openprd/engagements/active/prd.md +99 -71
- package/.openprd/engagements/active/review.html +4 -4
- package/.openprd/engagements/active/roles.md +9 -8
- package/.openprd/engagements/work-units/wu-20260524015648-6d33ded7.json +4 -4
- package/.openprd/engagements/work-units/wu-20260602113956-a99b5b88.json +18 -0
- package/.openprd/engagements/work-units/wu-20260602122244-78656aaf.json +18 -0
- package/.openprd/engagements/work-units/wu-20260602122442-e96489e2.json +18 -0
- package/.openprd/engagements/work-units/wu-20260602132835-695429e8.json +18 -0
- package/.openprd/knowledge/candidates/candidate-turn-1780116203372-5f266a79e968c758/candidate.json +78 -0
- package/.openprd/knowledge/candidates/candidate-turn-1780116203372-5f266a79e968c758/diagnostic-report.json +129 -0
- package/.openprd/knowledge/candidates/candidate-turn-1780116203372-5f266a79e968c758/root-cause-candidates.json +41 -0
- package/.openprd/knowledge/candidates/candidate-turn-1780116203372-5f266a79e968c758/timeline.json +14 -0
- package/.openprd/knowledge/drafts/openprd-experience-diagnostic-candidate-turn-1780116203372-5f266a79e968c758/SKILL.md +49 -0
- package/.openprd/knowledge/index.json +44 -4
- package/.openprd/reviews/v0001.html +195 -129
- package/.openprd/reviews/v0002.html +1150 -0
- package/.openprd/reviews/v0003.html +1150 -0
- package/.openprd/reviews/v0004.html +1150 -0
- package/.openprd/reviews/v0005.html +1150 -0
- package/.openprd/standards/config.json +12 -9
- package/.openprd/state/changes.json +17 -2
- package/.openprd/state/current.json +399 -63
- package/.openprd/state/release-ledger.json +344 -0
- package/.openprd/state/version-index.json +52 -0
- package/.openprd/state/versions/v0002.json +264 -0
- package/.openprd/state/versions/v0002.md +183 -0
- package/.openprd/state/versions/v0003.json +269 -0
- package/.openprd/state/versions/v0003.md +188 -0
- package/.openprd/state/versions/v0004.json +274 -0
- package/.openprd/state/versions/v0004.md +193 -0
- package/.openprd/state/versions/v0005.json +299 -0
- package/.openprd/state/versions/v0005.md +189 -0
- package/.openprd/templates/agent/intake.md +5 -4
- package/.openprd/templates/b2b/intake.md +5 -4
- package/.openprd/templates/base/intake.md +10 -4
- package/.openprd/templates/company/README.md +9 -7
- package/.openprd/templates/company/README_EN.md +12 -0
- package/.openprd/templates/consumer/intake.md +5 -4
- package/.openprd/templates/industry/README.md +12 -10
- package/.openprd/templates/industry/README_EN.md +18 -0
- package/.openprd/templates/project/README.md +11 -9
- package/.openprd/templates/project/README_EN.md +16 -0
- package/.openprd/templates/session/README.md +11 -9
- package/.openprd/templates/session/README_EN.md +16 -0
- package/AGENTS.md +12 -8
- package/README.md +402 -441
- package/README_CN.md +4 -578
- package/README_EN.md +850 -0
- package/docs/assets/openprd-requirement-routing-en.png +0 -0
- package/docs/assets/openprd-requirement-routing-en.svg +102 -0
- package/docs/assets/openprd-requirement-routing-zh-refined.png +0 -0
- package/docs/assets/openprd-requirement-routing-zh.png +0 -0
- package/docs/assets/openprd-requirement-routing-zh.svg +102 -0
- package/package.json +6 -2
- package/scripts/dev-check-wrapup-copy.mjs +110 -0
- package/scripts/openprd-github-release-notes.mjs +99 -0
- package/scripts/quality-perf-check.mjs +203 -0
- package/skills/openprd-benchmark-router/SKILL.md +1 -0
- package/skills/openprd-benchmark-router/references/benchmark-sources.md +1 -0
- package/skills/openprd-benchmark-router/references/source-policy.md +2 -0
- package/skills/openprd-discovery-loop/SKILL.md +2 -2
- package/skills/openprd-harness/SKILL.md +46 -24
- package/skills/openprd-harness/references/workflow-gates.md +15 -0
- package/skills/openprd-quality/SKILL.md +10 -4
- package/skills/openprd-requirement-intake/SKILL.md +39 -23
- package/skills/openprd-requirement-intake/references/prd-template-lenses.md +6 -6
- package/skills/openprd-requirement-intake/references/routing-rubric.md +22 -8
- package/skills/openprd-router/SKILL.md +2 -2
- package/skills/openprd-shared/SKILL.md +51 -23
- package/skills/openprd-standards/SKILL.md +2 -1
- package/src/agent-integration.js +265 -65
- package/src/benchmark/constants.js +107 -0
- package/src/benchmark/operations.js +235 -0
- package/src/benchmark/registry.js +64 -0
- package/src/benchmark/render.js +115 -0
- package/src/benchmark/source.js +617 -0
- package/src/benchmark/storage.js +121 -0
- package/src/benchmark/verify.js +235 -0
- package/src/benchmark.js +50 -851
- package/src/change-summary.js +339 -0
- package/src/cli/args.js +67 -6
- package/src/cli/basic-print.js +365 -0
- package/src/cli/benchmark-print.js +91 -0
- package/src/cli/change-print.js +221 -0
- package/src/cli/doctor-print.js +268 -0
- package/src/cli/growth-print.js +176 -0
- package/src/cli/print.js +73 -1384
- package/src/cli/quality-print.js +284 -0
- package/src/cli/run-print.js +297 -0
- package/src/cli/shared-print.js +127 -0
- package/src/cli/workflow-print.js +195 -0
- package/src/codex-hook-runner-template.mjs +639 -117
- package/src/codex-runtime.js +324 -0
- package/src/dev-standards.js +178 -5
- package/src/diagram-core.js +5 -5
- package/src/discovery.js +2 -1
- package/src/execution-strategy.js +369 -0
- package/src/fleet.js +4 -0
- package/src/github-release.js +156 -0
- package/src/growth.js +311 -13
- package/src/html-artifact-utils.js +25 -0
- package/src/html-artifacts.js +157 -1596
- package/src/knowledge.js +1176 -75
- package/src/language-policy.js +2 -112
- package/src/learning-html-artifact.js +1031 -0
- package/src/learning-review.js +3 -2
- package/src/loop.js +280 -9
- package/src/openprd.js +341 -38
- package/src/openspec/change-validate.js +0 -9
- package/src/openspec/execute.js +79 -3
- package/src/openspec/generate.js +33 -20
- package/src/openspec/tasks.js +33 -2
- package/src/prd-core.js +10 -9
- package/src/product-type-copy.js +69 -0
- package/src/quality-html-artifact.js +108 -9
- package/src/quality-learning.js +30 -0
- package/src/quality-visual-review.js +237 -0
- package/src/quality.js +329 -43
- package/src/registry-hygiene.js +54 -0
- package/src/release-ledger.js +413 -0
- package/src/review-presentation.js +12 -6
- package/src/run-harness.js +722 -48
- package/src/self-update.js +1 -1
- package/src/session-binding.js +40 -3
- package/src/session-registry.js +159 -0
- package/src/standards.js +5 -3
- package/src/test-strategy.js +386 -0
- package/src/visual-compare.js +915 -34
- package/src/work-unit-migration.js +5 -1
- package/src/workspace-core.js +343 -19
- package/src/workspace-workflow.js +538 -134
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
"version": 1,
|
|
3
3
|
"status": "synthesized",
|
|
4
4
|
"activeEngagement": "active",
|
|
5
|
-
"prdVersion":
|
|
5
|
+
"prdVersion": 5,
|
|
6
6
|
"productType": "agent",
|
|
7
7
|
"templatePack": "agent",
|
|
8
8
|
"projectRoot": ".",
|
|
@@ -25,145 +25,481 @@
|
|
|
25
25
|
"captureMeta": {
|
|
26
26
|
"meta.productType": {
|
|
27
27
|
"source": "user-confirmed",
|
|
28
|
-
"capturedAt": "2026-
|
|
28
|
+
"capturedAt": "2026-06-02 11:39:56"
|
|
29
29
|
},
|
|
30
30
|
"problem.problemStatement": {
|
|
31
31
|
"source": "user-confirmed",
|
|
32
|
-
"capturedAt": "2026-
|
|
32
|
+
"capturedAt": "2026-06-02 13:28:35"
|
|
33
33
|
},
|
|
34
34
|
"problem.whyNow": {
|
|
35
35
|
"source": "user-confirmed",
|
|
36
|
-
"capturedAt": "2026-
|
|
36
|
+
"capturedAt": "2026-06-02 13:28:35"
|
|
37
37
|
},
|
|
38
38
|
"users.primaryUsers": {
|
|
39
39
|
"source": "user-confirmed",
|
|
40
|
-
"capturedAt": "2026-
|
|
40
|
+
"capturedAt": "2026-06-02 13:28:21"
|
|
41
41
|
},
|
|
42
42
|
"goals.goals": {
|
|
43
43
|
"source": "user-confirmed",
|
|
44
|
-
"capturedAt": "2026-
|
|
44
|
+
"capturedAt": "2026-06-02 13:28:21"
|
|
45
45
|
},
|
|
46
46
|
"goals.successMetrics": {
|
|
47
47
|
"source": "user-confirmed",
|
|
48
|
-
"capturedAt": "2026-
|
|
48
|
+
"capturedAt": "2026-06-02 13:28:21"
|
|
49
49
|
},
|
|
50
50
|
"scope.inScope": {
|
|
51
51
|
"source": "user-confirmed",
|
|
52
|
-
"capturedAt": "2026-
|
|
52
|
+
"capturedAt": "2026-06-02 13:28:21"
|
|
53
53
|
},
|
|
54
54
|
"scope.outOfScope": {
|
|
55
55
|
"source": "user-confirmed",
|
|
56
|
-
"capturedAt": "2026-
|
|
56
|
+
"capturedAt": "2026-06-02 13:28:21"
|
|
57
57
|
},
|
|
58
58
|
"scenarios.primaryFlows": {
|
|
59
59
|
"source": "user-confirmed",
|
|
60
|
-
"capturedAt": "2026-
|
|
60
|
+
"capturedAt": "2026-06-02 13:28:21"
|
|
61
61
|
},
|
|
62
62
|
"goals.acceptanceGoals": {
|
|
63
63
|
"source": "user-confirmed",
|
|
64
|
-
"capturedAt": "2026-
|
|
64
|
+
"capturedAt": "2026-06-02 13:28:21"
|
|
65
65
|
},
|
|
66
66
|
"scenarios.failureModes": {
|
|
67
67
|
"source": "user-confirmed",
|
|
68
|
-
"capturedAt": "2026-
|
|
68
|
+
"capturedAt": "2026-06-02 13:28:21"
|
|
69
69
|
},
|
|
70
70
|
"risks.openQuestions": {
|
|
71
71
|
"source": "user-confirmed",
|
|
72
|
-
"capturedAt": "2026-
|
|
72
|
+
"capturedAt": "2026-06-02 13:28:21"
|
|
73
73
|
},
|
|
74
74
|
"typeSpecific.fields.humanAgentContract": {
|
|
75
75
|
"source": "user-confirmed",
|
|
76
|
-
"capturedAt": "2026-
|
|
76
|
+
"capturedAt": "2026-06-02 13:28:21"
|
|
77
77
|
},
|
|
78
78
|
"typeSpecific.fields.autonomyBoundary": {
|
|
79
79
|
"source": "user-confirmed",
|
|
80
|
-
"capturedAt": "2026-
|
|
80
|
+
"capturedAt": "2026-06-02 13:28:21"
|
|
81
81
|
},
|
|
82
82
|
"typeSpecific.fields.toolBoundary": {
|
|
83
83
|
"source": "user-confirmed",
|
|
84
|
-
"capturedAt": "2026-
|
|
84
|
+
"capturedAt": "2026-06-02 13:28:21"
|
|
85
85
|
},
|
|
86
86
|
"typeSpecific.fields.stateModel": {
|
|
87
87
|
"source": "user-confirmed",
|
|
88
|
-
"capturedAt": "2026-
|
|
88
|
+
"capturedAt": "2026-06-02 13:28:21"
|
|
89
89
|
},
|
|
90
90
|
"typeSpecific.fields.evalPlan": {
|
|
91
91
|
"source": "user-confirmed",
|
|
92
|
-
"capturedAt": "2026-
|
|
92
|
+
"capturedAt": "2026-06-02 13:28:21"
|
|
93
93
|
},
|
|
94
94
|
"meta.title": {
|
|
95
95
|
"source": "user-confirmed",
|
|
96
|
-
"capturedAt": "2026-
|
|
96
|
+
"capturedAt": "2026-06-02 13:28:35"
|
|
97
97
|
},
|
|
98
98
|
"meta.owner": {
|
|
99
99
|
"source": "user-confirmed",
|
|
100
|
-
"capturedAt": "2026-
|
|
100
|
+
"capturedAt": "2026-06-02 13:28:35"
|
|
101
|
+
},
|
|
102
|
+
"users.stakeholders": {
|
|
103
|
+
"source": "user-confirmed",
|
|
104
|
+
"capturedAt": "2026-06-02 13:28:21"
|
|
105
|
+
},
|
|
106
|
+
"scenarios.edgeCases": {
|
|
107
|
+
"source": "user-confirmed",
|
|
108
|
+
"capturedAt": "2026-06-02 13:28:21"
|
|
109
|
+
},
|
|
110
|
+
"requirements.functional": {
|
|
111
|
+
"source": "user-confirmed",
|
|
112
|
+
"capturedAt": "2026-06-02 13:28:21"
|
|
113
|
+
},
|
|
114
|
+
"requirements.nonFunctional": {
|
|
115
|
+
"source": "user-confirmed",
|
|
116
|
+
"capturedAt": "2026-06-02 13:28:21"
|
|
117
|
+
},
|
|
118
|
+
"requirements.businessRules": {
|
|
119
|
+
"source": "user-confirmed",
|
|
120
|
+
"capturedAt": "2026-06-02 13:28:21"
|
|
121
|
+
},
|
|
122
|
+
"constraints.technical": {
|
|
123
|
+
"source": "user-confirmed",
|
|
124
|
+
"capturedAt": "2026-06-02 13:28:21"
|
|
125
|
+
},
|
|
126
|
+
"constraints.dependencies": {
|
|
127
|
+
"source": "user-confirmed",
|
|
128
|
+
"capturedAt": "2026-06-02 13:28:21"
|
|
129
|
+
},
|
|
130
|
+
"risks.assumptions": {
|
|
131
|
+
"source": "user-confirmed",
|
|
132
|
+
"capturedAt": "2026-06-02 13:28:21"
|
|
133
|
+
},
|
|
134
|
+
"risks.risks": {
|
|
135
|
+
"source": "user-confirmed",
|
|
136
|
+
"capturedAt": "2026-06-02 13:28:21"
|
|
137
|
+
},
|
|
138
|
+
"handoff.owner": {
|
|
139
|
+
"source": "user-confirmed",
|
|
140
|
+
"capturedAt": "2026-06-02 13:28:21"
|
|
141
|
+
},
|
|
142
|
+
"handoff.nextStep": {
|
|
143
|
+
"source": "user-confirmed",
|
|
144
|
+
"capturedAt": "2026-06-02 13:28:21"
|
|
145
|
+
},
|
|
146
|
+
"handoff.targetSystem": {
|
|
147
|
+
"source": "user-confirmed",
|
|
148
|
+
"capturedAt": "2026-06-02 13:28:21"
|
|
149
|
+
},
|
|
150
|
+
"businessGuardrails.costDrivers": {
|
|
151
|
+
"source": "user-confirmed",
|
|
152
|
+
"capturedAt": "2026-06-02 13:28:21"
|
|
153
|
+
},
|
|
154
|
+
"businessGuardrails.usageLimits": {
|
|
155
|
+
"source": "user-confirmed",
|
|
156
|
+
"capturedAt": "2026-06-02 13:28:21"
|
|
157
|
+
},
|
|
158
|
+
"businessGuardrails.abusePrevention": {
|
|
159
|
+
"source": "user-confirmed",
|
|
160
|
+
"capturedAt": "2026-06-02 13:28:21"
|
|
161
|
+
},
|
|
162
|
+
"businessGuardrails.monitoringSignals": {
|
|
163
|
+
"source": "user-confirmed",
|
|
164
|
+
"capturedAt": "2026-06-02 13:28:21"
|
|
165
|
+
},
|
|
166
|
+
"businessGuardrails.alertThresholds": {
|
|
167
|
+
"source": "user-confirmed",
|
|
168
|
+
"capturedAt": "2026-06-02 13:28:21"
|
|
169
|
+
},
|
|
170
|
+
"businessGuardrails.stopLossActions": {
|
|
171
|
+
"source": "user-confirmed",
|
|
172
|
+
"capturedAt": "2026-06-02 13:28:21"
|
|
173
|
+
},
|
|
174
|
+
"problem.evidence": {
|
|
175
|
+
"source": "user-confirmed",
|
|
176
|
+
"capturedAt": "2026-06-02 13:28:28"
|
|
177
|
+
},
|
|
178
|
+
"constraints.compliance": {
|
|
179
|
+
"source": "user-confirmed",
|
|
180
|
+
"capturedAt": "2026-06-02 13:28:28"
|
|
101
181
|
}
|
|
102
182
|
},
|
|
103
|
-
"classifiedAt": "2026-
|
|
104
|
-
"problemStatement": "
|
|
105
|
-
"lastCapturedAt": "2026-
|
|
106
|
-
"whyNow": "
|
|
183
|
+
"classifiedAt": "2026-06-02 11:39:56",
|
|
184
|
+
"problemStatement": "OpenPrd 在用户第一次提需求时虽然已经有 consumer / b2b / agent 分流、clarify 和后续 review/change/tasks 流程,但缺少一个项目级的首轮画像层。结果是 Agent 容易直接围绕局部需求推进,而没有先确认用户群体、产品形态、第一版切片、先不做什么、不能破坏什么,以及是否命中技术和业务风险。",
|
|
185
|
+
"lastCapturedAt": "2026-06-02 13:28:28",
|
|
186
|
+
"whyNow": "用户明确指出 Vibe Coding 场景下的首轮需求往往模糊:如果不先建立整体轮廓,后续容易返工;如果一上来就强制填写重问卷,又会压垮首轮体验。因此需要把初始化改成轻量项目画像加条件追问。",
|
|
107
187
|
"primaryUsers": [
|
|
108
|
-
"
|
|
109
|
-
"
|
|
188
|
+
"第一次用 OpenPrd 梳理产品想法的产品经理、独立开发者与 Vibe Coding 用户",
|
|
189
|
+
"需要在模糊需求下帮助用户收敛方向并继续落地的 Agent 协作者"
|
|
110
190
|
],
|
|
111
191
|
"goals": [
|
|
112
|
-
"
|
|
113
|
-
"
|
|
192
|
+
"在第一次提需时先形成一页轻量项目画像,而不是直接跳进局部需求修改",
|
|
193
|
+
"让系统优先归纳 to C / to B / agent、目标用户、产品形态、第一版切片、非目标和保护项,再请用户确认",
|
|
194
|
+
"当信息不足时,用条件追问或候选原型方向补齐,而不是要求用户一开始回答完整技术和商业问卷"
|
|
114
195
|
],
|
|
115
196
|
"successMetrics": [
|
|
116
|
-
"
|
|
117
|
-
"
|
|
118
|
-
"
|
|
197
|
+
"首轮 clarify 能输出结构化的项目画像摘要,并包含用户群体、产品形态、第一版先做、先不做和不能破坏项",
|
|
198
|
+
"复杂或模糊需求会触发技术/风险追问,简单明确需求仍保持轻量",
|
|
199
|
+
"默认 clarify 仍在对话内完成,不新增新的 clarify HTML",
|
|
200
|
+
"用户能够更快确认方向,后续 PRD 和实现阶段减少返工与错题"
|
|
119
201
|
],
|
|
120
202
|
"inScope": [
|
|
121
|
-
"
|
|
122
|
-
"
|
|
123
|
-
"
|
|
203
|
+
"在 clarify、intake-reflection 和 interview 中加入首轮项目画像层",
|
|
204
|
+
"让系统先推断 consumer / b2b / agent 与项目形态,再结合第一版切片、非目标、保护项组织追问",
|
|
205
|
+
"命中技术和业务风险信号时再展开前后端、数据、账号、AI、外部服务、收费等边界问题",
|
|
206
|
+
"同步更新模板、技能说明、基础文档、CLI 输出和相关测试"
|
|
124
207
|
],
|
|
125
208
|
"outOfScope": [
|
|
126
|
-
"
|
|
127
|
-
"
|
|
128
|
-
"
|
|
209
|
+
"不把首次提需改成一份重型强制问卷",
|
|
210
|
+
"不把商业模式或技术架构变成所有场景的硬必填 schema",
|
|
211
|
+
"不新增默认 clarify HTML 或额外前端评审页面",
|
|
212
|
+
"不让局部小修进入完整项目画像重流程"
|
|
129
213
|
],
|
|
130
214
|
"primaryFlows": [
|
|
131
|
-
"
|
|
215
|
+
"用户第一次提需求时,OpenPrd 先输出一页项目画像:用户群体、产品形态、第一版先做、先不做、不能破坏、技术落点和风险探针",
|
|
216
|
+
"如果用户表达已经足够清楚,Agent 直接用系统归纳的画像摘要请用户确认",
|
|
217
|
+
"如果用户表达模糊,Agent 先追问少量高价值问题,必要时给 2 到 3 个方向或行业原型供用户选择",
|
|
218
|
+
"画像确认后再进入后续 PRD、review、change 和 tasks 流程"
|
|
132
219
|
],
|
|
133
220
|
"acceptanceGoals": [
|
|
134
|
-
"
|
|
135
|
-
"
|
|
136
|
-
"
|
|
221
|
+
"workspace-workflow 能生成首轮项目画像、风险探针和更贴近用户语言的确认问题",
|
|
222
|
+
"workspace-core 的冷启动 kickoff 问题升级为画像导向问题",
|
|
223
|
+
"intake 模板、skills、docs、CLI 文本输出和测试与新流程保持一致"
|
|
137
224
|
],
|
|
138
225
|
"failureModes": [
|
|
139
|
-
"
|
|
140
|
-
"
|
|
141
|
-
"
|
|
226
|
+
"入口过重,导致 Vibe Coding 用户在第一次提需时无法回答",
|
|
227
|
+
"入口过轻,导致 Agent 没有先确认项目边界就直接落地",
|
|
228
|
+
"错误复用旧 active change 或旧 PRD 上下文,导致实现偏题"
|
|
142
229
|
],
|
|
143
230
|
"openQuestions": [
|
|
144
|
-
"
|
|
145
|
-
],
|
|
146
|
-
"humanAgentContract": "Agent
|
|
147
|
-
"autonomyBoundary": "Agent
|
|
148
|
-
"toolBoundary": "
|
|
149
|
-
"stateModel": "
|
|
150
|
-
"evalPlan": "
|
|
151
|
-
"latestVersionId": "v0001",
|
|
152
|
-
"latestVersionDigest": "dc988d7a94c07d2a8070968a71ddacffb374eaeee12aa85eb93231e06dd7b077",
|
|
153
|
-
"activeWorkUnitId": "wu-20260524015648-6d33ded7",
|
|
231
|
+
"后续是否需要单独的 profile review artifact 或 diagram,用于更复杂的多系统场景"
|
|
232
|
+
],
|
|
233
|
+
"humanAgentContract": "Agent 先归纳用户群体、产品形态、第一版切片、边界与风险,再请求用户确认;如果信息不足,只能提出候选方向,不能把猜测当成定论。",
|
|
234
|
+
"autonomyBoundary": "Agent 可以根据当前需求和已有工作区状态推断首轮项目画像,但在用户确认前不得把推断直接写成最终需求事实或越过需求入口去改实现。",
|
|
235
|
+
"toolBoundary": "仅使用本地 OpenPrd workflow、模板、测试和文档完成这次改动,不依赖新的外部运行时。",
|
|
236
|
+
"stateModel": "新需求进入时先形成 project framing,再进入 requirement clarification、review/change/tasks 与实现。",
|
|
237
|
+
"evalPlan": "通过 workspace flow、requirement gate、CLI 输出和模板相关测试验证新流程,同时运行 dev-check、standards、quality 与 run verify。",
|
|
154
238
|
"targetRoot": "/Users/chaojifeng/Projects/harness-engineer/openprd",
|
|
155
239
|
"reviewStatus": {
|
|
156
|
-
"versionId": "
|
|
157
|
-
"workUnitId": "wu-
|
|
240
|
+
"versionId": "v0005",
|
|
241
|
+
"workUnitId": "wu-20260602132835-695429e8",
|
|
158
242
|
"status": "confirmed",
|
|
243
|
+
"reviewPath": "/Users/chaojifeng/Projects/harness-engineer/openprd/.openprd/reviews/v0005.html",
|
|
244
|
+
"entryPath": "/Users/chaojifeng/Projects/harness-engineer/openprd/.openprd/engagements/active/review.html",
|
|
159
245
|
"artifact": "/Users/chaojifeng/Projects/harness-engineer/openprd/.openprd/engagements/active/review.html",
|
|
160
|
-
"stableArtifact": "/Users/chaojifeng/Projects/harness-engineer/openprd/.openprd/reviews/
|
|
161
|
-
"updatedAt": "2026-
|
|
162
|
-
"notes":
|
|
163
|
-
"reviewPath": "/Users/chaojifeng/Projects/harness-engineer/openprd/.openprd/reviews/v0001.html",
|
|
164
|
-
"entryPath": "/Users/chaojifeng/Projects/harness-engineer/openprd/.openprd/engagements/active/review.html"
|
|
246
|
+
"stableArtifact": "/Users/chaojifeng/Projects/harness-engineer/openprd/.openprd/reviews/v0005.html",
|
|
247
|
+
"updatedAt": "2026-06-02 13:29:01",
|
|
248
|
+
"notes": null
|
|
165
249
|
},
|
|
166
|
-
"title": "
|
|
250
|
+
"title": "OpenPrd 首轮项目画像与自适应需求初始化",
|
|
167
251
|
"owner": "Codex",
|
|
168
|
-
"synthesizedAt": "2026-
|
|
252
|
+
"synthesizedAt": "2026-06-02 13:28:35",
|
|
253
|
+
"stakeholders": [
|
|
254
|
+
"维护 OpenPrd requirement-intake、workflow 和模板的开发者",
|
|
255
|
+
"后续需要基于已确认上下文继续实现的多轮 Agent 会话"
|
|
256
|
+
],
|
|
257
|
+
"edgeCases": [
|
|
258
|
+
"用户一开始只有一句模糊想法,需要先给候选方向而不是硬追问技术细节",
|
|
259
|
+
"已有项目上下文时应优先沿用已知事实,而不是把所有画像问题重问一遍",
|
|
260
|
+
"局部 copy、样式或小交互修正不应被错误升级成重画像流程"
|
|
261
|
+
],
|
|
262
|
+
"functional": [
|
|
263
|
+
"clarify 生成的 intake-reflection 应包含首轮项目画像和风险探针",
|
|
264
|
+
"inline clarification 应显式展示适用对象、产品形态、第一版先做、先不做、不能破坏和技术落点",
|
|
265
|
+
"冷启动 kickoff 问题改成画像导向问题,而不是抽象的通用提问",
|
|
266
|
+
"类型专项 intake 模板改成更贴近产品与业务语言的提问方式"
|
|
267
|
+
],
|
|
268
|
+
"nonFunctional": [
|
|
269
|
+
"默认澄清仍要保持对话内、轻量、可扫读",
|
|
270
|
+
"对已有 schema 和生成流程的侵入应尽量小",
|
|
271
|
+
"输出语言优先面向产品和业务用户,而不是工程内部黑话"
|
|
272
|
+
],
|
|
273
|
+
"businessRules": [
|
|
274
|
+
"优先由系统归纳后请用户确认,而不是一开始把所有字段抛给用户",
|
|
275
|
+
"只有命中风险信号时才展开技术、账号、数据、外部服务或成本相关追问",
|
|
276
|
+
"consumer / b2b / agent 优先由系统推断,必要时再请用户确认",
|
|
277
|
+
"clarify 阶段默认不生成 HTML,正式可视化仍留给 review 或 diagram 阶段"
|
|
278
|
+
],
|
|
279
|
+
"technical": [
|
|
280
|
+
"主要修改 src/workspace-workflow.js、src/workspace-core.js、CLI 文本输出、.openprd intake 模板、skills/docs 和测试",
|
|
281
|
+
"避免新增新的硬性必填 schema 字段,优先通过 intake 和 clarification 层完成增强"
|
|
282
|
+
],
|
|
283
|
+
"dependencies": [
|
|
284
|
+
"依赖现有 requirement-intake gate、clarify/capture/synthesize/review/change/tasks 工作流",
|
|
285
|
+
"依赖现有 base / consumer / b2b / agent 模板与评审产物体系"
|
|
286
|
+
],
|
|
287
|
+
"assumptions": [
|
|
288
|
+
"Vibe Coding 用户更愿意确认系统总结,而不是先填写长问卷",
|
|
289
|
+
"现有 lens 分类能力可保留,只需要前移到项目画像语境里"
|
|
290
|
+
],
|
|
291
|
+
"risks": [
|
|
292
|
+
"如果问题过多,会损伤首次提需体验",
|
|
293
|
+
"如果画像层和现有 capture/analysis 脱节,会造成重复提问",
|
|
294
|
+
"如果没有处理旧上下文切换,hook 可能继续把代码修改指向错误 change"
|
|
295
|
+
],
|
|
296
|
+
"handoffOwner": "Codex",
|
|
297
|
+
"nextStep": "生成新的 change 和 tasks,并按首轮项目画像流程修改 workflow、模板、文档和测试。",
|
|
298
|
+
"targetSystem": "OpenPrd",
|
|
299
|
+
"costDrivers": [
|
|
300
|
+
"本次没有新增第三方付费调用;成本主要来自不准确需求初始化带来的返工和错题"
|
|
301
|
+
],
|
|
302
|
+
"usageLimits": [
|
|
303
|
+
"不应让每个首次提需都退化成长问卷;默认只问最少必要问题"
|
|
304
|
+
],
|
|
305
|
+
"abusePrevention": [
|
|
306
|
+
"系统不能把未确认的推断当作最终需求事实",
|
|
307
|
+
"命中账号、数据、外部服务、AI 或收费信号时,必须显式提醒边界与风险"
|
|
308
|
+
],
|
|
309
|
+
"monitoringSignals": [
|
|
310
|
+
"观察首轮 clarify 是否仍然过长、是否反复追问同一类信息、是否错误复用旧 change 上下文"
|
|
311
|
+
],
|
|
312
|
+
"alertThresholds": [
|
|
313
|
+
"如果简单需求被连续升级成深度追问,或复杂需求仍缺少画像摘要,应在测试中显式暴露"
|
|
314
|
+
],
|
|
315
|
+
"stopLossActions": [
|
|
316
|
+
"当系统无法准确归纳时,退回到少量高价值确认问题,不假装已经清楚",
|
|
317
|
+
"当当前工作区上下文明显与本轮需求不匹配时,先刷新到新的 change/task 再实现"
|
|
318
|
+
],
|
|
319
|
+
"previousLatestVersionId": null,
|
|
320
|
+
"previousLatestVersionDigest": null,
|
|
321
|
+
"previousActiveWorkUnitId": null,
|
|
322
|
+
"evidence": [
|
|
323
|
+
"本轮用户明确指出第一次提需缺少 to C / to B / agent、用户群体、商业模式、功能架构和技术边界的前置梳理。",
|
|
324
|
+
"本地代码检查显示现有 base intake 只覆盖问题、用户、成功、范围与成本信号,缺少独立的首轮项目画像层。",
|
|
325
|
+
"外部调研表明 Vibe Coding 更适合轻量画像加条件追问,而不是重型初始化问卷。"
|
|
326
|
+
],
|
|
327
|
+
"compliance": [
|
|
328
|
+
"继续遵守现有 requirement gate、review gate 和 hook 安全边界,不绕过已确认的需求流程。",
|
|
329
|
+
"新增提示和用户可见文案应保持面向产品与业务语言,不直接暴露内部技术细节。"
|
|
330
|
+
],
|
|
331
|
+
"latestVersionId": "v0005",
|
|
332
|
+
"latestVersionDigest": "7f0e2d2730982a2ae96647d2377f6204e54f8adadf1b18b05f4bc7167046c575",
|
|
333
|
+
"activeWorkUnitId": "wu-20260602132835-695429e8",
|
|
334
|
+
"versionId": "v0005",
|
|
335
|
+
"versionNumber": 5,
|
|
336
|
+
"workUnitId": "wu-20260602132835-695429e8",
|
|
337
|
+
"sections": {
|
|
338
|
+
"meta": {
|
|
339
|
+
"title": "OpenPrd 首轮项目画像与自适应需求初始化",
|
|
340
|
+
"owner": "Codex",
|
|
341
|
+
"status": "clarifying",
|
|
342
|
+
"version": "v0005",
|
|
343
|
+
"productType": "agent",
|
|
344
|
+
"date": "2026-06-02"
|
|
345
|
+
},
|
|
346
|
+
"problem": {
|
|
347
|
+
"problemStatement": "OpenPrd 在用户第一次提需求时虽然已经有 consumer / b2b / agent 分流、clarify 和后续 review/change/tasks 流程,但缺少一个项目级的首轮画像层。结果是 Agent 容易直接围绕局部需求推进,而没有先确认用户群体、产品形态、第一版切片、先不做什么、不能破坏什么,以及是否命中技术和业务风险。",
|
|
348
|
+
"whyNow": "用户明确指出 Vibe Coding 场景下的首轮需求往往模糊:如果不先建立整体轮廓,后续容易返工;如果一上来就强制填写重问卷,又会压垮首轮体验。因此需要把初始化改成轻量项目画像加条件追问。",
|
|
349
|
+
"evidence": [
|
|
350
|
+
"本轮用户明确指出第一次提需缺少 to C / to B / agent、用户群体、商业模式、功能架构和技术边界的前置梳理。",
|
|
351
|
+
"本地代码检查显示现有 base intake 只覆盖问题、用户、成功、范围与成本信号,缺少独立的首轮项目画像层。",
|
|
352
|
+
"外部调研表明 Vibe Coding 更适合轻量画像加条件追问,而不是重型初始化问卷。"
|
|
353
|
+
]
|
|
354
|
+
},
|
|
355
|
+
"users": {
|
|
356
|
+
"primaryUsers": [
|
|
357
|
+
"第一次用 OpenPrd 梳理产品想法的产品经理、独立开发者与 Vibe Coding 用户",
|
|
358
|
+
"需要在模糊需求下帮助用户收敛方向并继续落地的 Agent 协作者"
|
|
359
|
+
],
|
|
360
|
+
"secondaryUsers": [],
|
|
361
|
+
"stakeholders": [
|
|
362
|
+
"维护 OpenPrd requirement-intake、workflow 和模板的开发者",
|
|
363
|
+
"后续需要基于已确认上下文继续实现的多轮 Agent 会话"
|
|
364
|
+
]
|
|
365
|
+
},
|
|
366
|
+
"goals": {
|
|
367
|
+
"goals": [
|
|
368
|
+
"在第一次提需时先形成一页轻量项目画像,而不是直接跳进局部需求修改",
|
|
369
|
+
"让系统优先归纳 to C / to B / agent、目标用户、产品形态、第一版切片、非目标和保护项,再请用户确认",
|
|
370
|
+
"当信息不足时,用条件追问或候选原型方向补齐,而不是要求用户一开始回答完整技术和商业问卷"
|
|
371
|
+
],
|
|
372
|
+
"successMetrics": [
|
|
373
|
+
"首轮 clarify 能输出结构化的项目画像摘要,并包含用户群体、产品形态、第一版先做、先不做和不能破坏项",
|
|
374
|
+
"复杂或模糊需求会触发技术/风险追问,简单明确需求仍保持轻量",
|
|
375
|
+
"默认 clarify 仍在对话内完成,不新增新的 clarify HTML",
|
|
376
|
+
"用户能够更快确认方向,后续 PRD 和实现阶段减少返工与错题"
|
|
377
|
+
],
|
|
378
|
+
"acceptanceGoals": [
|
|
379
|
+
"workspace-workflow 能生成首轮项目画像、风险探针和更贴近用户语言的确认问题",
|
|
380
|
+
"workspace-core 的冷启动 kickoff 问题升级为画像导向问题",
|
|
381
|
+
"intake 模板、skills、docs、CLI 文本输出和测试与新流程保持一致"
|
|
382
|
+
]
|
|
383
|
+
},
|
|
384
|
+
"scope": {
|
|
385
|
+
"inScope": [
|
|
386
|
+
"在 clarify、intake-reflection 和 interview 中加入首轮项目画像层",
|
|
387
|
+
"让系统先推断 consumer / b2b / agent 与项目形态,再结合第一版切片、非目标、保护项组织追问",
|
|
388
|
+
"命中技术和业务风险信号时再展开前后端、数据、账号、AI、外部服务、收费等边界问题",
|
|
389
|
+
"同步更新模板、技能说明、基础文档、CLI 输出和相关测试"
|
|
390
|
+
],
|
|
391
|
+
"outOfScope": [
|
|
392
|
+
"不把首次提需改成一份重型强制问卷",
|
|
393
|
+
"不把商业模式或技术架构变成所有场景的硬必填 schema",
|
|
394
|
+
"不新增默认 clarify HTML 或额外前端评审页面",
|
|
395
|
+
"不让局部小修进入完整项目画像重流程"
|
|
396
|
+
]
|
|
397
|
+
},
|
|
398
|
+
"scenarios": {
|
|
399
|
+
"primaryFlows": [
|
|
400
|
+
"用户第一次提需求时,OpenPrd 先输出一页项目画像:用户群体、产品形态、第一版先做、先不做、不能破坏、技术落点和风险探针",
|
|
401
|
+
"如果用户表达已经足够清楚,Agent 直接用系统归纳的画像摘要请用户确认",
|
|
402
|
+
"如果用户表达模糊,Agent 先追问少量高价值问题,必要时给 2 到 3 个方向或行业原型供用户选择",
|
|
403
|
+
"画像确认后再进入后续 PRD、review、change 和 tasks 流程"
|
|
404
|
+
],
|
|
405
|
+
"edgeCases": [
|
|
406
|
+
"用户一开始只有一句模糊想法,需要先给候选方向而不是硬追问技术细节",
|
|
407
|
+
"已有项目上下文时应优先沿用已知事实,而不是把所有画像问题重问一遍",
|
|
408
|
+
"局部 copy、样式或小交互修正不应被错误升级成重画像流程"
|
|
409
|
+
],
|
|
410
|
+
"failureModes": [
|
|
411
|
+
"入口过重,导致 Vibe Coding 用户在第一次提需时无法回答",
|
|
412
|
+
"入口过轻,导致 Agent 没有先确认项目边界就直接落地",
|
|
413
|
+
"错误复用旧 active change 或旧 PRD 上下文,导致实现偏题"
|
|
414
|
+
]
|
|
415
|
+
},
|
|
416
|
+
"requirements": {
|
|
417
|
+
"functional": [
|
|
418
|
+
"clarify 生成的 intake-reflection 应包含首轮项目画像和风险探针",
|
|
419
|
+
"inline clarification 应显式展示适用对象、产品形态、第一版先做、先不做、不能破坏和技术落点",
|
|
420
|
+
"冷启动 kickoff 问题改成画像导向问题,而不是抽象的通用提问",
|
|
421
|
+
"类型专项 intake 模板改成更贴近产品与业务语言的提问方式"
|
|
422
|
+
],
|
|
423
|
+
"nonFunctional": [
|
|
424
|
+
"默认澄清仍要保持对话内、轻量、可扫读",
|
|
425
|
+
"对已有 schema 和生成流程的侵入应尽量小",
|
|
426
|
+
"输出语言优先面向产品和业务用户,而不是工程内部黑话"
|
|
427
|
+
],
|
|
428
|
+
"businessRules": [
|
|
429
|
+
"优先由系统归纳后请用户确认,而不是一开始把所有字段抛给用户",
|
|
430
|
+
"只有命中风险信号时才展开技术、账号、数据、外部服务或成本相关追问",
|
|
431
|
+
"consumer / b2b / agent 优先由系统推断,必要时再请用户确认",
|
|
432
|
+
"clarify 阶段默认不生成 HTML,正式可视化仍留给 review 或 diagram 阶段"
|
|
433
|
+
]
|
|
434
|
+
},
|
|
435
|
+
"businessGuardrails": {
|
|
436
|
+
"costDrivers": [
|
|
437
|
+
"本次没有新增第三方付费调用;成本主要来自不准确需求初始化带来的返工和错题"
|
|
438
|
+
],
|
|
439
|
+
"usageLimits": [
|
|
440
|
+
"不应让每个首次提需都退化成长问卷;默认只问最少必要问题"
|
|
441
|
+
],
|
|
442
|
+
"abusePrevention": [
|
|
443
|
+
"系统不能把未确认的推断当作最终需求事实",
|
|
444
|
+
"命中账号、数据、外部服务、AI 或收费信号时,必须显式提醒边界与风险"
|
|
445
|
+
],
|
|
446
|
+
"monitoringSignals": [
|
|
447
|
+
"观察首轮 clarify 是否仍然过长、是否反复追问同一类信息、是否错误复用旧 change 上下文"
|
|
448
|
+
],
|
|
449
|
+
"alertThresholds": [
|
|
450
|
+
"如果简单需求被连续升级成深度追问,或复杂需求仍缺少画像摘要,应在测试中显式暴露"
|
|
451
|
+
],
|
|
452
|
+
"stopLossActions": [
|
|
453
|
+
"当系统无法准确归纳时,退回到少量高价值确认问题,不假装已经清楚",
|
|
454
|
+
"当当前工作区上下文明显与本轮需求不匹配时,先刷新到新的 change/task 再实现"
|
|
455
|
+
]
|
|
456
|
+
},
|
|
457
|
+
"constraints": {
|
|
458
|
+
"technical": [
|
|
459
|
+
"主要修改 src/workspace-workflow.js、src/workspace-core.js、CLI 文本输出、.openprd intake 模板、skills/docs 和测试",
|
|
460
|
+
"避免新增新的硬性必填 schema 字段,优先通过 intake 和 clarification 层完成增强"
|
|
461
|
+
],
|
|
462
|
+
"compliance": [
|
|
463
|
+
"继续遵守现有 requirement gate、review gate 和 hook 安全边界,不绕过已确认的需求流程。",
|
|
464
|
+
"新增提示和用户可见文案应保持面向产品与业务语言,不直接暴露内部技术细节。"
|
|
465
|
+
],
|
|
466
|
+
"dependencies": [
|
|
467
|
+
"依赖现有 requirement-intake gate、clarify/capture/synthesize/review/change/tasks 工作流",
|
|
468
|
+
"依赖现有 base / consumer / b2b / agent 模板与评审产物体系"
|
|
469
|
+
]
|
|
470
|
+
},
|
|
471
|
+
"risks": {
|
|
472
|
+
"assumptions": [
|
|
473
|
+
"Vibe Coding 用户更愿意确认系统总结,而不是先填写长问卷",
|
|
474
|
+
"现有 lens 分类能力可保留,只需要前移到项目画像语境里"
|
|
475
|
+
],
|
|
476
|
+
"risks": [
|
|
477
|
+
"如果问题过多,会损伤首次提需体验",
|
|
478
|
+
"如果画像层和现有 capture/analysis 脱节,会造成重复提问",
|
|
479
|
+
"如果没有处理旧上下文切换,hook 可能继续把代码修改指向错误 change"
|
|
480
|
+
],
|
|
481
|
+
"openQuestions": [
|
|
482
|
+
"后续是否需要单独的 profile review artifact 或 diagram,用于更复杂的多系统场景"
|
|
483
|
+
]
|
|
484
|
+
},
|
|
485
|
+
"handoff": {
|
|
486
|
+
"owner": "Codex",
|
|
487
|
+
"nextStep": "生成新的 change 和 tasks,并按首轮项目画像流程修改 workflow、模板、文档和测试。",
|
|
488
|
+
"targetSystem": "OpenPrd"
|
|
489
|
+
},
|
|
490
|
+
"typeSpecific": {
|
|
491
|
+
"kind": "agent",
|
|
492
|
+
"title": "Agent 专项",
|
|
493
|
+
"fields": {
|
|
494
|
+
"humanAgentContract": "Agent 先归纳用户群体、产品形态、第一版切片、边界与风险,再请求用户确认;如果信息不足,只能提出候选方向,不能把猜测当成定论。",
|
|
495
|
+
"autonomyBoundary": "Agent 可以根据当前需求和已有工作区状态推断首轮项目画像,但在用户确认前不得把推断直接写成最终需求事实或越过需求入口去改实现。",
|
|
496
|
+
"toolBoundary": "仅使用本地 OpenPrd workflow、模板、测试和文档完成这次改动,不依赖新的外部运行时。",
|
|
497
|
+
"stateModel": "新需求进入时先形成 project framing,再进入 requirement clarification、review/change/tasks 与实现。",
|
|
498
|
+
"evalPlan": "通过 workspace flow、requirement gate、CLI 输出和模板相关测试验证新流程,同时运行 dev-check、standards、quality 与 run verify。"
|
|
499
|
+
}
|
|
500
|
+
}
|
|
501
|
+
},
|
|
502
|
+
"content": "# OpenPrd 首轮项目画像与自适应需求初始化\n> 语言规则:默认用简体中文生成 PRD、spec、tasks 和用户可见说明;除 PRD、OpenPrd、OpenSpec、API、SDK、CLI、TypeScript、JSON、HTTP、WebSocket、字段 key、命令名、品牌名、产品名和协议名等必要专有名词外,其余内容优先写成简体中文。\n- 版本: v0005\n- 负责人: Codex\n- 产品类型: agent\n- 模板包: agent\n- 状态: synthesized\n- 生成时间: 2026-06-02 13:28:35\n## 元信息\n\n- 标题: OpenPrd 首轮项目画像与自适应需求初始化\n- 负责人: Codex\n- 状态: clarifying\n- 版本: v0005\n- 产品类型: agent\n- 日期: 2026-06-02\n\n## 问题\n\n- 问题陈述: OpenPrd 在用户第一次提需求时虽然已经有 consumer / b2b / agent 分流、clarify 和后续 review/change/tasks 流程,但缺少一个项目级的首轮画像层。结果是 Agent 容易直接围绕局部需求推进,而没有先确认用户群体、产品形态、第一版切片、先不做什么、不能破坏什么,以及是否命中技术和业务风险。\n- 为什么是现在: 用户明确指出 Vibe Coding 场景下的首轮需求往往模糊:如果不先建立整体轮廓,后续容易返工;如果一上来就强制填写重问卷,又会压垮首轮体验。因此需要把初始化改成轻量项目画像加条件追问。\n- 证据:\n - 本轮用户明确指出第一次提需缺少 to C / to B / agent、用户群体、商业模式、功能架构和技术边界的前置梳理。\n - 本地代码检查显示现有 base intake 只覆盖问题、用户、成功、范围与成本信号,缺少独立的首轮项目画像层。\n - 外部调研表明 Vibe Coding 更适合轻量画像加条件追问,而不是重型初始化问卷。\n\n## 用户与相关方\n\n- 主要用户:\n - 第一次用 OpenPrd 梳理产品想法的产品经理、独立开发者与 Vibe Coding 用户\n - 需要在模糊需求下帮助用户收敛方向并继续落地的 Agent 协作者\n- 次要用户:\n - 待补充\n- 相关方:\n - 维护 OpenPrd requirement-intake、workflow 和模板的开发者\n - 后续需要基于已确认上下文继续实现的多轮 Agent 会话\n\n## 目标与成功标准\n\n- 目标:\n - 在第一次提需时先形成一页轻量项目画像,而不是直接跳进局部需求修改\n - 让系统优先归纳 to C / to B / agent、目标用户、产品形态、第一版切片、非目标和保护项,再请用户确认\n - 当信息不足时,用条件追问或候选原型方向补齐,而不是要求用户一开始回答完整技术和商业问卷\n- 成功指标:\n - 首轮 clarify 能输出结构化的项目画像摘要,并包含用户群体、产品形态、第一版先做、先不做和不能破坏项\n - 复杂或模糊需求会触发技术/风险追问,简单明确需求仍保持轻量\n - 默认 clarify 仍在对话内完成,不新增新的 clarify HTML\n - 用户能够更快确认方向,后续 PRD 和实现阶段减少返工与错题\n- 验收目标:\n - workspace-workflow 能生成首轮项目画像、风险探针和更贴近用户语言的确认问题\n - workspace-core 的冷启动 kickoff 问题升级为画像导向问题\n - intake 模板、skills、docs、CLI 文本输出和测试与新流程保持一致\n\n## 范围与非目标\n\n- 范围内:\n - 在 clarify、intake-reflection 和 interview 中加入首轮项目画像层\n - 让系统先推断 consumer / b2b / agent 与项目形态,再结合第一版切片、非目标、保护项组织追问\n - 命中技术和业务风险信号时再展开前后端、数据、账号、AI、外部服务、收费等边界问题\n - 同步更新模板、技能说明、基础文档、CLI 输出和相关测试\n- 范围外:\n - 不把首次提需改成一份重型强制问卷\n - 不把商业模式或技术架构变成所有场景的硬必填 schema\n - 不新增默认 clarify HTML 或额外前端评审页面\n - 不让局部小修进入完整项目画像重流程\n\n## 场景与流程\n\n- 主流程:\n - 用户第一次提需求时,OpenPrd 先输出一页项目画像:用户群体、产品形态、第一版先做、先不做、不能破坏、技术落点和风险探针\n - 如果用户表达已经足够清楚,Agent 直接用系统归纳的画像摘要请用户确认\n - 如果用户表达模糊,Agent 先追问少量高价值问题,必要时给 2 到 3 个方向或行业原型供用户选择\n - 画像确认后再进入后续 PRD、review、change 和 tasks 流程\n- 边界情况:\n - 用户一开始只有一句模糊想法,需要先给候选方向而不是硬追问技术细节\n - 已有项目上下文时应优先沿用已知事实,而不是把所有画像问题重问一遍\n - 局部 copy、样式或小交互修正不应被错误升级成重画像流程\n- 失败模式:\n - 入口过重,导致 Vibe Coding 用户在第一次提需时无法回答\n - 入口过轻,导致 Agent 没有先确认项目边界就直接落地\n - 错误复用旧 active change 或旧 PRD 上下文,导致实现偏题\n\n## 可视化图表\n\n### 产品流程\n\n```mermaid\nflowchart LR\n entry[\"入口触发<br/>用户第一次提需求时,OpenPrd 先输出一页项目画像:用户群体、产品形态、第一版先做、先不做、不能破坏、技术落点和风险探针\"]\n experience[\"产品内步骤<br/>如果用户表达已经足够清楚,Agent 直接用系统归纳的画像摘要请用户确认\"]\n decision{\"决策点<br/>用户一开始只有一句模糊想法,需要先给候选方向而不是硬追问技术细节\"}\n success([\"成功结果<br/>首轮 clarify 能输出结构化的项目画像摘要,并包含用户群体、产品形态、第一版先做、先不做和不能破坏项\"])\n failure[[\"失败与恢复<br/>入口过重,导致 Vibe Coding 用户在第一次提需时无法回答\"]]\n entry -->|\"用户第一次提需求时,OpenPrd 先输出一页项目画像:用户群体、产品形态、第一版…\"| experience\n experience -->|\"如果用户表达已经足够清楚,Agent 直接用系统归纳的画像摘要请用户确认\"| decision\n decision -->|\"在第一次提需时先形成一页轻量项目画像,而不是直接跳进局部需求修改\"| success\n decision -.->|\"入口过重,导致 Vibe Coding 用户在第一次提需时无法回答\"| failure\n```\n\n### 架构\n\n```mermaid\nflowchart LR\n users[\"主要用户<br/>第一次用 OpenPrd 梳理产品想法的产品经理、独立开发者与 Vibe Coding 用户 · 需要在模糊需求下帮助用户收敛…\"]\n subgraph solution[\"方案边界\"]\n experience[\"Agent 运行层<br/>用户第一次提需求时,OpenPrd 先输出一页项目画像:用户群体、产品形态、第一版先做、先不做、不能破坏、技术落点和风险探针 …\"]\n core[\"核心产品逻辑<br/>OpenPrd 在用户第一次提需求时虽然已经有 consumer / b2b / agent 分流、clarify 和后续 r…\"]\n integrations[\"依赖与集成<br/>依赖现有 requirement-intake gate、clarify/capture/synthesize/review/…\"]\n governance[[\"约束与可靠性<br/>继续遵守现有 requirement gate、review gate 和 hook 安全边界,不绕过已确认的需求流程。 · …\"]]\n delivery[\"验证与交接<br/>首轮 clarify 能输出结构化的项目画像摘要,并包含用户群体、产品形态、第一版先做、先不做和不能破坏项 · 复杂或模糊需求…\"]\n end\n users -->|\"用户第一次提需求时,OpenPrd 先输出一页项目画像:用户群体、产品形态、第…\"| experience\n experience -->|\"产品动作与编排\"| core\n core -->|\"依赖与外部服务\"| integrations\n core -.->|\"策略、可靠性与合规\"| governance\n core -->|\"成功标准与交接\"| delivery\n integrations -->|\"运营就绪\"| delivery\n governance -.->|\"评审与确认\"| delivery\n```\n\n## 需求\n\n- 功能需求:\n - clarify 生成的 intake-reflection 应包含首轮项目画像和风险探针\n - inline clarification 应显式展示适用对象、产品形态、第一版先做、先不做、不能破坏和技术落点\n - 冷启动 kickoff 问题改成画像导向问题,而不是抽象的通用提问\n - 类型专项 intake 模板改成更贴近产品与业务语言的提问方式\n- 非功能需求:\n - 默认澄清仍要保持对话内、轻量、可扫读\n - 对已有 schema 和生成流程的侵入应尽量小\n - 输出语言优先面向产品和业务用户,而不是工程内部黑话\n- 业务规则:\n - 优先由系统归纳后请用户确认,而不是一开始把所有字段抛给用户\n - 只有命中风险信号时才展开技术、账号、数据、外部服务或成本相关追问\n - consumer / b2b / agent 优先由系统推断,必要时再请用户确认\n - clarify 阶段默认不生成 HTML,正式可视化仍留给 review 或 diagram 阶段\n\n## 业务护栏\n\n- 成本来源:\n - 本次没有新增第三方付费调用;成本主要来自不准确需求初始化带来的返工和错题\n- 额度与限制:\n - 不应让每个首次提需都退化成长问卷;默认只问最少必要问题\n- 滥用防护:\n - 系统不能把未确认的推断当作最终需求事实\n - 命中账号、数据、外部服务、AI 或收费信号时,必须显式提醒边界与风险\n- 监控信号:\n - 观察首轮 clarify 是否仍然过长、是否反复追问同一类信息、是否错误复用旧 change 上下文\n- 报警阈值:\n - 如果简单需求被连续升级成深度追问,或复杂需求仍缺少画像摘要,应在测试中显式暴露\n- 止损动作:\n - 当系统无法准确归纳时,退回到少量高价值确认问题,不假装已经清楚\n - 当当前工作区上下文明显与本轮需求不匹配时,先刷新到新的 change/task 再实现\n\n## 约束、依赖与风险\n\n- 技术约束:\n - 主要修改 src/workspace-workflow.js、src/workspace-core.js、CLI 文本输出、.openprd intake 模板、skills/docs 和测试\n - 避免新增新的硬性必填 schema 字段,优先通过 intake 和 clarification 层完成增强\n- 合规要求:\n - 继续遵守现有 requirement gate、review gate 和 hook 安全边界,不绕过已确认的需求流程。\n - 新增提示和用户可见文案应保持面向产品与业务语言,不直接暴露内部技术细节。\n- 依赖:\n - 依赖现有 requirement-intake gate、clarify/capture/synthesize/review/change/tasks 工作流\n - 依赖现有 base / consumer / b2b / agent 模板与评审产物体系\n- 假设:\n - Vibe Coding 用户更愿意确认系统总结,而不是先填写长问卷\n - 现有 lens 分类能力可保留,只需要前移到项目画像语境里\n- 风险:\n - 如果问题过多,会损伤首次提需体验\n - 如果画像层和现有 capture/analysis 脱节,会造成重复提问\n - 如果没有处理旧上下文切换,hook 可能继续把代码修改指向错误 change\n- 开放问题:\n - 后续是否需要单独的 profile review artifact 或 diagram,用于更复杂的多系统场景\n\n## 类型专项模块\n\n- 类型: Agent 专项\n- humanAgentContract: Agent 先归纳用户群体、产品形态、第一版切片、边界与风险,再请求用户确认;如果信息不足,只能提出候选方向,不能把猜测当成定论。\n- autonomyBoundary: Agent 可以根据当前需求和已有工作区状态推断首轮项目画像,但在用户确认前不得把推断直接写成最终需求事实或越过需求入口去改实现。\n- toolBoundary: 仅使用本地 OpenPrd workflow、模板、测试和文档完成这次改动,不依赖新的外部运行时。\n- stateModel: 新需求进入时先形成 project framing,再进入 requirement clarification、review/change/tasks 与实现。\n- evalPlan: 通过 workspace flow、requirement gate、CLI 输出和模板相关测试验证新流程,同时运行 dev-check、standards、quality 与 run verify。\n\n## 交接\n\n- 负责人: Codex\n- 下一步: 生成新的 change 和 tasks,并按首轮项目画像流程修改 workflow、模板、文档和测试。\n- 目标系统: OpenPrd\n",
|
|
503
|
+
"digest": "7f0e2d2730982a2ae96647d2377f6204e54f8adadf1b18b05f4bc7167046c575",
|
|
504
|
+
"reviewPresentationMeta": null
|
|
169
505
|
}
|