@openprd/cli 0.1.1 → 0.1.9
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 +387 -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 +419 -438
- package/README_CN.md +4 -578
- package/README_EN.md +870 -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 +47 -25
- package/skills/openprd-harness/references/workflow-gates.md +15 -0
- package/skills/openprd-quality/SKILL.md +11 -5
- package/skills/openprd-requirement-intake/SKILL.md +31 -20
- package/skills/openprd-requirement-intake/references/prd-template-lenses.md +6 -6
- package/skills/openprd-requirement-intake/references/routing-rubric.md +10 -2
- 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 +271 -71
- 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 +659 -124
- 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 +1321 -76
- 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/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
|
@@ -0,0 +1,274 @@
|
|
|
1
|
+
{
|
|
2
|
+
"versionNumber": 4,
|
|
3
|
+
"versionId": "v0004",
|
|
4
|
+
"createdAt": "2026-06-02 12:24:42",
|
|
5
|
+
"projectRoot": "/Users/chaojifeng/Projects/harness-engineer/openprd",
|
|
6
|
+
"workspaceRoot": "/Users/chaojifeng/Projects/harness-engineer/openprd/.openprd",
|
|
7
|
+
"schema": "prd-core",
|
|
8
|
+
"templatePack": "agent",
|
|
9
|
+
"productType": "agent",
|
|
10
|
+
"title": "OpenPrd 项目级版本轨道与变化摘要",
|
|
11
|
+
"owner": "Codex",
|
|
12
|
+
"status": "synthesized",
|
|
13
|
+
"sections": {
|
|
14
|
+
"meta": {
|
|
15
|
+
"title": "OpenPrd 项目级版本轨道与变化摘要",
|
|
16
|
+
"owner": "Codex",
|
|
17
|
+
"status": "clarifying",
|
|
18
|
+
"version": "v0004",
|
|
19
|
+
"productType": "agent",
|
|
20
|
+
"date": "2026-06-02"
|
|
21
|
+
},
|
|
22
|
+
"problem": {
|
|
23
|
+
"problemStatement": "OpenPrd 现在已经有内部 PRD 版本和用户视角变化摘要,但还没有一个可选的项目级 release/version 轨道来维护当前版本号、版本内更新项,以及与 commit tag 的协同规则。结果是版本号已经在项目里被真实使用,却缺少一个本地真源来累计本版本的需求、Bug、handoff 摘要和最终发布说明。",
|
|
24
|
+
"whyNow": "用户已经确认,希望在现有短文案变化摘要的基础上,再补一个可选的项目级版本轨道:既能维护当前版本和版本内更新内容,也能在 commit 流里利用版本信息辅助打 tag,让 release notes、handoff 和外部同步有稳定来源。",
|
|
25
|
+
"evidence": []
|
|
26
|
+
},
|
|
27
|
+
"users": {
|
|
28
|
+
"primaryUsers": [
|
|
29
|
+
"维护 OpenPrd CLI、skills 和 review 产物的 OpenPrd maintainer",
|
|
30
|
+
"使用 OpenPrd 执行任务并需要生成 commit、handoff 或版本说明的 Agent 使用者"
|
|
31
|
+
],
|
|
32
|
+
"secondaryUsers": [],
|
|
33
|
+
"stakeholders": [
|
|
34
|
+
"阅读交付变更、提交说明和版本说明的项目负责人",
|
|
35
|
+
"需要快速判断这次改动是否值得合入或发布的协作者"
|
|
36
|
+
]
|
|
37
|
+
},
|
|
38
|
+
"goals": {
|
|
39
|
+
"goals": [
|
|
40
|
+
"在 OpenPrd 现有内部 PRD 版本之上,新增一个可选的项目级 release/version 轨道,用来维护当前版本号与版本内更新项。",
|
|
41
|
+
"把现有用户视角短文案摘要和项目版本轨道结合起来,让 commit、handoff、release notes 与外部同步都能复用同一套版本内变化条目。",
|
|
42
|
+
"在用户显式使用 commit 流且版本信息可用时,提供与版本号协同的 tag 辅助能力,但保留高风险 git 行为的安全护栏。"
|
|
43
|
+
],
|
|
44
|
+
"successMetrics": [
|
|
45
|
+
"项目可以显式记录当前版本号,例如 0.1.23,并在需要时由用户主动更新到下一个版本。",
|
|
46
|
+
"同一个版本下的需求、Bug、handoff 摘要和 release notes 候选可以被累计到本地版本条目池,而不是散落在 commit 或外部表格中。",
|
|
47
|
+
"当用户通过 OpenPrd 执行 commit 且当前版本已启用时,系统可以为该版本创建或更新本地 tag 指向最新 commit,帮助快速界定本版本自上一个版本以来的提交范围。",
|
|
48
|
+
"当目标版本 tag 已经在远端存在时,系统不会默认 force 覆盖,而是明确提示当前指向和下一步选择。"
|
|
49
|
+
],
|
|
50
|
+
"acceptanceGoals": [
|
|
51
|
+
"新增项目级 release/version ledger,支持 current version、版本状态和版本内变化项存储。",
|
|
52
|
+
"现有变化摘要层继续复用新增、修复、优化、调整、移除等短文案动作词,并能挂到具体项目版本下。",
|
|
53
|
+
"commit 流在启用版本轨道且用户明确执行时,可以读取当前版本并辅助创建或更新本地版本 tag;同版本多次提交时 tag 可移动到最新 commit。",
|
|
54
|
+
"README、skills、handoff/release 导出和测试同步说明版本轨道与 tag 协同规则。"
|
|
55
|
+
]
|
|
56
|
+
},
|
|
57
|
+
"scope": {
|
|
58
|
+
"inScope": [
|
|
59
|
+
"新增可选的项目级 release/version ledger,用于维护当前版本号、版本状态和版本内更新项。",
|
|
60
|
+
"把现有变化摘要条目挂载到具体项目版本下,支持需求、Bug、handoff 摘要和 release notes 候选的累计。",
|
|
61
|
+
"扩展 commit 流,在版本轨道已启用且用户显式执行 commit 时读取当前版本,并辅助创建或更新本地版本 tag。",
|
|
62
|
+
"扩展 handoff、release notes 与后续外部同步出口,让它们可以从项目版本轨道导出版本内变化内容。",
|
|
63
|
+
"补充 README、skills、文档和测试,并验证项目版本轨道与短文案摘要的协同效果。"
|
|
64
|
+
],
|
|
65
|
+
"outOfScope": [
|
|
66
|
+
"不把内部 PRD 版本 v000x 直接改造成项目发版号。",
|
|
67
|
+
"不强制所有项目都启用版本轨道;没有版本管理习惯的项目可以继续只用现有变化摘要能力。",
|
|
68
|
+
"不默认自动 push、自动发布或自动 force 更新远端 tag。",
|
|
69
|
+
"不要求替代团队已有的外部版本体系,只提供一个本地可维护、可导出的辅助真源。"
|
|
70
|
+
]
|
|
71
|
+
},
|
|
72
|
+
"scenarios": {
|
|
73
|
+
"primaryFlows": [
|
|
74
|
+
"用户在项目里启用版本轨道后,OpenPrd 记录当前版本号,例如 0.1.23,并把后续变化条目累计到该版本下。",
|
|
75
|
+
"用户执行需求开发、Bug 修复、handoff 或版本说明导出时,现有新增、修复、优化、调整、移除等短文案条目会被归入当前版本。",
|
|
76
|
+
"用户通过 OpenPrd 执行 commit 且当前版本可用时,系统使用该版本号辅助创建或更新本地 tag,让同版本多次提交始终能由最新 commit 挂着该版本标签。",
|
|
77
|
+
"用户需要对外同步 Feishu 或生成版本说明时,可以直接导出当前版本下累计的主要更新内容。"
|
|
78
|
+
],
|
|
79
|
+
"edgeCases": [
|
|
80
|
+
"项目可能已经有自己的一套版本号规则,OpenPrd 需要允许手动修正当前版本号,而不是强推默认策略。",
|
|
81
|
+
"如果同一个版本下发生多次 commit,本地 tag 可以移动到最新 commit;但如果对应 tag 已经推到远端,继续移动会变成高风险操作。",
|
|
82
|
+
"有些项目只想维护版本说明,不想碰 git tag;版本轨道与 tag 辅助能力需要可分开启用。",
|
|
83
|
+
"如果用户在没有更新版本号的情况下继续提交,系统应把新变化继续累计到当前版本,而不是猜测用户要自动 bump 版本。"
|
|
84
|
+
],
|
|
85
|
+
"failureModes": [
|
|
86
|
+
"版本轨道和内部 PRD 版本被混用,导致用户误以为 v0003 就是项目发版号。",
|
|
87
|
+
"系统在远端已有同名 tag 的情况下仍默认移动 tag,导致历史版本指向被静默改写。",
|
|
88
|
+
"变化摘要条目没有归到正确版本,导致版本说明、handoff 和外部同步内容失真。",
|
|
89
|
+
"tag 辅助能力和 commit 流耦合过紧,反而让只想写版本说明的项目被迫碰 git 发布动作。"
|
|
90
|
+
]
|
|
91
|
+
},
|
|
92
|
+
"requirements": {
|
|
93
|
+
"functional": [
|
|
94
|
+
"OpenPrd 提供可选的项目级 release/version ledger,支持记录 current version、版本状态和版本内变化项。",
|
|
95
|
+
"现有共享变化摘要规则支持把新增、修复、优化、调整、移除等条目关联到具体项目版本。",
|
|
96
|
+
"handoff 与 release notes 导出优先从项目版本轨道读取对应版本的变化条目。",
|
|
97
|
+
"当版本轨道已启用且用户通过 OpenPrd 显式执行 commit 时,commit 流可以读取当前版本号并辅助创建或更新本地版本 tag。",
|
|
98
|
+
"当用户未更新版本号时,后续变化默认继续累计到当前版本;当用户显式更新版本号后,新的变化进入下一个版本。"
|
|
99
|
+
],
|
|
100
|
+
"nonFunctional": [
|
|
101
|
+
"版本轨道是可选辅助信息,不应破坏现有没有版本管理习惯的项目流程。",
|
|
102
|
+
"tag 辅助能力默认以本地安全为先,不应在无明确授权时自动 force 更新远端 tag。",
|
|
103
|
+
"现有显式 commit message、自定义 handoff 内容和已有版本体系优先级不能被新能力静默覆盖。",
|
|
104
|
+
"版本轨道与变化摘要的输出应继续以用户当前语言为主,避免把内部 git 或实现细节直接写入用户可见文案。"
|
|
105
|
+
],
|
|
106
|
+
"businessRules": [
|
|
107
|
+
"内部 PRD 版本和项目 release 版本必须保持分层,不能共用一个字段。",
|
|
108
|
+
"项目 release 版本默认允许用户手动指定或手动修正;系统只做辅助,不替用户决定版本 bump。",
|
|
109
|
+
"同版本多次 commit 时,本地版本 tag 可以指向最新 commit,帮助界定本版本从上一个版本 tag 之后的提交范围。",
|
|
110
|
+
"如果目标版本 tag 已经存在于远端,系统不得默认覆盖;需要明确提示当前指向并等待用户决定。",
|
|
111
|
+
"版本说明继续优先使用新增、修复、优化、调整、移除等人类可读动作词,而不是直接复述 git 变更细节。"
|
|
112
|
+
]
|
|
113
|
+
},
|
|
114
|
+
"businessGuardrails": {
|
|
115
|
+
"costDrivers": [
|
|
116
|
+
"无新增第三方付费调用成本;变化摘要完全基于本地上下文生成。"
|
|
117
|
+
],
|
|
118
|
+
"usageLimits": [
|
|
119
|
+
"不引入新的用户额度或发布配额限制;沿用现有 commit / handoff 执行门禁。"
|
|
120
|
+
],
|
|
121
|
+
"abusePrevention": [
|
|
122
|
+
"不默认自动 push、自动发布或自动 force 更新远端 tag。",
|
|
123
|
+
"只有在用户显式执行 commit 且版本轨道启用时,才进入版本 tag 辅助路径。",
|
|
124
|
+
"远端已有同名版本 tag 时,系统只提示风险和当前指向,不静默改写历史。"
|
|
125
|
+
],
|
|
126
|
+
"monitoringSignals": [
|
|
127
|
+
"关注生成摘要是否频繁退回技术细节、是否在测试中出现失真或空摘要。"
|
|
128
|
+
],
|
|
129
|
+
"alertThresholds": [
|
|
130
|
+
"如果三处输出中任一处无法生成可信摘要并持续回退,需要在测试中显式暴露。"
|
|
131
|
+
],
|
|
132
|
+
"stopLossActions": [
|
|
133
|
+
"当上下文不足或摘要质量不可信时,回退到现有安全文案,不自动包装。"
|
|
134
|
+
]
|
|
135
|
+
},
|
|
136
|
+
"constraints": {
|
|
137
|
+
"technical": [
|
|
138
|
+
"需要兼容现有 loop、handoff、review-presentation 和 html-artifacts 的调用契约。",
|
|
139
|
+
"需要在 dirty workspace 中做窄改动,避免误伤正在进行的 test-strategy-router 等历史工作。"
|
|
140
|
+
],
|
|
141
|
+
"compliance": [],
|
|
142
|
+
"dependencies": [
|
|
143
|
+
"依赖现有 OpenPrd CLI、review-presentation、html-artifacts、loop 和 handoff 导出流程。"
|
|
144
|
+
]
|
|
145
|
+
},
|
|
146
|
+
"risks": {
|
|
147
|
+
"assumptions": [
|
|
148
|
+
"用户更看重人能快速扫懂的变化摘要,而不是技术完整性优先的底层说明。",
|
|
149
|
+
"三处落点可以共用一套核心 formatter,再按场景做轻量渲染差异。"
|
|
150
|
+
],
|
|
151
|
+
"risks": [
|
|
152
|
+
"如果 formatter 规则过死,可能把一些纯技术任务描述得失真。",
|
|
153
|
+
"如果只改一处而没有共用 contract,后续很快会再次分叉。"
|
|
154
|
+
],
|
|
155
|
+
"openQuestions": [
|
|
156
|
+
"版本轨道是否需要支持 Unreleased 这种未定版态,还是只维护一个明确 current version。",
|
|
157
|
+
"本地 tag 跟最新 commit 的策略是否只在未推远端前自动生效,还是需要更细的项目级配置。",
|
|
158
|
+
"Feishu 等外部同步出口首期是否只导出版本说明,不直接回写外部系统。"
|
|
159
|
+
]
|
|
160
|
+
},
|
|
161
|
+
"handoff": {
|
|
162
|
+
"owner": "Codex",
|
|
163
|
+
"nextStep": "确认新的评审稿后生成 change 和 tasks,并按三处落点实现。",
|
|
164
|
+
"targetSystem": "OpenSpec"
|
|
165
|
+
},
|
|
166
|
+
"typeSpecific": {
|
|
167
|
+
"kind": "agent",
|
|
168
|
+
"title": "Agent 专项",
|
|
169
|
+
"fields": {
|
|
170
|
+
"humanAgentContract": "Agent 可以根据 task、handoff 和 review 上下文生成变化摘要草案,但不能把自动生成的摘要当成发布事实之外的营销文案;高风险提交行为仍遵守现有执行门禁。",
|
|
171
|
+
"autonomyBoundary": "Agent 可以修改 OpenPrd 的 formatter、skills、文档、测试和 worker 验证流程;不得自动推送、改写历史提交,或把 Feature Git Commit 的高风险 git 行为直接并入 OpenPrd 默认流。",
|
|
172
|
+
"toolBoundary": "仅使用本地 OpenPrd 代码、CLI、测试与 worker 会话完成实现和验证;本次不需要额外第三方文档调研。",
|
|
173
|
+
"stateModel": "共享变化摘要 contract 负责统一标题、动作词和描述规则;loop、handoff、review 三个调用面只做各自场景渲染与回退控制。",
|
|
174
|
+
"evalPlan": "先做本地单测和回归,再用 worker 在单独样例项目上跑一个最小任务,检查 commit、handoff 或 review 摘要输出是否符合预期。"
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
},
|
|
178
|
+
"reviewPresentation": {
|
|
179
|
+
"diagram": {
|
|
180
|
+
"type": "map"
|
|
181
|
+
},
|
|
182
|
+
"mapNodes": {
|
|
183
|
+
"problem": {
|
|
184
|
+
"title": "问题定义",
|
|
185
|
+
"text": "缺少项目级版本真源与tag协同"
|
|
186
|
+
},
|
|
187
|
+
"goal": {
|
|
188
|
+
"title": "版本轨道",
|
|
189
|
+
"text": "统一版本号、变化条目和tag"
|
|
190
|
+
},
|
|
191
|
+
"scope": {
|
|
192
|
+
"title": "四处落点",
|
|
193
|
+
"text": "ledger、commit、handoff、同步"
|
|
194
|
+
},
|
|
195
|
+
"flow": {
|
|
196
|
+
"title": "主流程",
|
|
197
|
+
"text": "版本累计变化,commit可挂tag"
|
|
198
|
+
},
|
|
199
|
+
"risk": {
|
|
200
|
+
"title": "主要风险",
|
|
201
|
+
"text": "远端tag覆盖和版本混用"
|
|
202
|
+
}
|
|
203
|
+
},
|
|
204
|
+
"panels": {
|
|
205
|
+
"flow": [
|
|
206
|
+
{
|
|
207
|
+
"summary": "新增轨道",
|
|
208
|
+
"detail": "项目可记录当前版本,并累计该版本内的需求、Bug和摘要。"
|
|
209
|
+
},
|
|
210
|
+
{
|
|
211
|
+
"summary": "关联提交",
|
|
212
|
+
"detail": "启用版本轨道后,commit 可读取当前版本并辅助挂本地 tag。"
|
|
213
|
+
},
|
|
214
|
+
{
|
|
215
|
+
"summary": "导出说明",
|
|
216
|
+
"detail": "handoff、版本说明和外部同步都可复用同一版本条目。"
|
|
217
|
+
}
|
|
218
|
+
],
|
|
219
|
+
"function": [
|
|
220
|
+
{
|
|
221
|
+
"summary": "保留短文案",
|
|
222
|
+
"detail": "新增、修复、优化、调整、移除继续作为版本条目的默认动作词。"
|
|
223
|
+
},
|
|
224
|
+
{
|
|
225
|
+
"summary": "手动修正版",
|
|
226
|
+
"detail": "用户可以随时把当前版本从 0.1.23 调整到下一个版本。"
|
|
227
|
+
},
|
|
228
|
+
{
|
|
229
|
+
"summary": "同版续提",
|
|
230
|
+
"detail": "未切新版本时,后续提交继续累计到当前版本。"
|
|
231
|
+
}
|
|
232
|
+
],
|
|
233
|
+
"guardrail": [
|
|
234
|
+
{
|
|
235
|
+
"summary": "分层版本",
|
|
236
|
+
"detail": "内部 PRD 版本 v000x 不直接等于项目发版号。"
|
|
237
|
+
},
|
|
238
|
+
{
|
|
239
|
+
"summary": "不强推送",
|
|
240
|
+
"detail": "不默认自动 push、发布或 force 更新远端 tag。"
|
|
241
|
+
},
|
|
242
|
+
{
|
|
243
|
+
"summary": "可分开启用",
|
|
244
|
+
"detail": "只想维护版本说明的项目可以不开 tag 辅助。"
|
|
245
|
+
}
|
|
246
|
+
],
|
|
247
|
+
"risk": [
|
|
248
|
+
{
|
|
249
|
+
"summary": "远端冲突",
|
|
250
|
+
"detail": "同名 tag 已推到远端时,继续移动会变成高风险操作。"
|
|
251
|
+
},
|
|
252
|
+
{
|
|
253
|
+
"summary": "版本混用",
|
|
254
|
+
"detail": "若把 PRD 版本当发版号,会让 review 和 release 都变乱。"
|
|
255
|
+
},
|
|
256
|
+
{
|
|
257
|
+
"summary": "事实失真",
|
|
258
|
+
"detail": "变化条目归错版本,会让 handoff 和外部同步失真。"
|
|
259
|
+
}
|
|
260
|
+
]
|
|
261
|
+
}
|
|
262
|
+
},
|
|
263
|
+
"workUnitId": "wu-20260602122442-e96489e2",
|
|
264
|
+
"targetRoot": "/Users/chaojifeng/Projects/harness-engineer/openprd",
|
|
265
|
+
"content": "# OpenPrd 项目级版本轨道与变化摘要\n> 语言规则:默认用简体中文生成 PRD、spec、tasks 和用户可见说明;除 PRD、OpenPrd、OpenSpec、API、SDK、CLI、TypeScript、JSON、HTTP、WebSocket、字段 key、命令名、品牌名、产品名和协议名等必要专有名词外,其余内容优先写成简体中文。\n- 版本: v0004\n- 负责人: Codex\n- 产品类型: agent\n- 模板包: agent\n- 状态: synthesized\n- 生成时间: 2026-06-02 12:24:42\n## 元信息\n\n- 标题: OpenPrd 项目级版本轨道与变化摘要\n- 负责人: Codex\n- 状态: clarifying\n- 版本: v0004\n- 产品类型: agent\n- 日期: 2026-06-02\n\n## 问题\n\n- 问题陈述: OpenPrd 现在已经有内部 PRD 版本和用户视角变化摘要,但还没有一个可选的项目级 release/version 轨道来维护当前版本号、版本内更新项,以及与 commit tag 的协同规则。结果是版本号已经在项目里被真实使用,却缺少一个本地真源来累计本版本的需求、Bug、handoff 摘要和最终发布说明。\n- 为什么是现在: 用户已经确认,希望在现有短文案变化摘要的基础上,再补一个可选的项目级版本轨道:既能维护当前版本和版本内更新内容,也能在 commit 流里利用版本信息辅助打 tag,让 release notes、handoff 和外部同步有稳定来源。\n- 证据:\n - 待补充\n\n## 用户与相关方\n\n- 主要用户:\n - 维护 OpenPrd CLI、skills 和 review 产物的 OpenPrd maintainer\n - 使用 OpenPrd 执行任务并需要生成 commit、handoff 或版本说明的 Agent 使用者\n- 次要用户:\n - 待补充\n- 相关方:\n - 阅读交付变更、提交说明和版本说明的项目负责人\n - 需要快速判断这次改动是否值得合入或发布的协作者\n\n## 目标与成功标准\n\n- 目标:\n - 在 OpenPrd 现有内部 PRD 版本之上,新增一个可选的项目级 release/version 轨道,用来维护当前版本号与版本内更新项。\n - 把现有用户视角短文案摘要和项目版本轨道结合起来,让 commit、handoff、release notes 与外部同步都能复用同一套版本内变化条目。\n - 在用户显式使用 commit 流且版本信息可用时,提供与版本号协同的 tag 辅助能力,但保留高风险 git 行为的安全护栏。\n- 成功指标:\n - 项目可以显式记录当前版本号,例如 0.1.23,并在需要时由用户主动更新到下一个版本。\n - 同一个版本下的需求、Bug、handoff 摘要和 release notes 候选可以被累计到本地版本条目池,而不是散落在 commit 或外部表格中。\n - 当用户通过 OpenPrd 执行 commit 且当前版本已启用时,系统可以为该版本创建或更新本地 tag 指向最新 commit,帮助快速界定本版本自上一个版本以来的提交范围。\n - 当目标版本 tag 已经在远端存在时,系统不会默认 force 覆盖,而是明确提示当前指向和下一步选择。\n- 验收目标:\n - 新增项目级 release/version ledger,支持 current version、版本状态和版本内变化项存储。\n - 现有变化摘要层继续复用新增、修复、优化、调整、移除等短文案动作词,并能挂到具体项目版本下。\n - commit 流在启用版本轨道且用户明确执行时,可以读取当前版本并辅助创建或更新本地版本 tag;同版本多次提交时 tag 可移动到最新 commit。\n - README、skills、handoff/release 导出和测试同步说明版本轨道与 tag 协同规则。\n\n## 范围与非目标\n\n- 范围内:\n - 新增可选的项目级 release/version ledger,用于维护当前版本号、版本状态和版本内更新项。\n - 把现有变化摘要条目挂载到具体项目版本下,支持需求、Bug、handoff 摘要和 release notes 候选的累计。\n - 扩展 commit 流,在版本轨道已启用且用户显式执行 commit 时读取当前版本,并辅助创建或更新本地版本 tag。\n - 扩展 handoff、release notes 与后续外部同步出口,让它们可以从项目版本轨道导出版本内变化内容。\n - 补充 README、skills、文档和测试,并验证项目版本轨道与短文案摘要的协同效果。\n- 范围外:\n - 不把内部 PRD 版本 v000x 直接改造成项目发版号。\n - 不强制所有项目都启用版本轨道;没有版本管理习惯的项目可以继续只用现有变化摘要能力。\n - 不默认自动 push、自动发布或自动 force 更新远端 tag。\n - 不要求替代团队已有的外部版本体系,只提供一个本地可维护、可导出的辅助真源。\n\n## 场景与流程\n\n- 主流程:\n - 用户在项目里启用版本轨道后,OpenPrd 记录当前版本号,例如 0.1.23,并把后续变化条目累计到该版本下。\n - 用户执行需求开发、Bug 修复、handoff 或版本说明导出时,现有新增、修复、优化、调整、移除等短文案条目会被归入当前版本。\n - 用户通过 OpenPrd 执行 commit 且当前版本可用时,系统使用该版本号辅助创建或更新本地 tag,让同版本多次提交始终能由最新 commit 挂着该版本标签。\n - 用户需要对外同步 Feishu 或生成版本说明时,可以直接导出当前版本下累计的主要更新内容。\n- 边界情况:\n - 项目可能已经有自己的一套版本号规则,OpenPrd 需要允许手动修正当前版本号,而不是强推默认策略。\n - 如果同一个版本下发生多次 commit,本地 tag 可以移动到最新 commit;但如果对应 tag 已经推到远端,继续移动会变成高风险操作。\n - 有些项目只想维护版本说明,不想碰 git tag;版本轨道与 tag 辅助能力需要可分开启用。\n - 如果用户在没有更新版本号的情况下继续提交,系统应把新变化继续累计到当前版本,而不是猜测用户要自动 bump 版本。\n- 失败模式:\n - 版本轨道和内部 PRD 版本被混用,导致用户误以为 v0003 就是项目发版号。\n - 系统在远端已有同名 tag 的情况下仍默认移动 tag,导致历史版本指向被静默改写。\n - 变化摘要条目没有归到正确版本,导致版本说明、handoff 和外部同步内容失真。\n - tag 辅助能力和 commit 流耦合过紧,反而让只想写版本说明的项目被迫碰 git 发布动作。\n\n## 可视化图表\n\n### 产品流程\n\n```mermaid\nflowchart LR\n entry[\"入口触发<br/>用户在项目里启用版本轨道后,OpenPrd 记录当前版本号,例如 0.1.23,并把后续变化条目累计到该版本下。\"]\n experience[\"产品内步骤<br/>用户执行需求开发、Bug 修复、handoff 或版本说明导出时,现有新增、修复、优化、调整、移除等短文案条目会被归入当前版本。\"]\n decision{\"决策点<br/>项目可能已经有自己的一套版本号规则,OpenPrd 需要允许手动修正当前版本号,而不是强推默认策略。\"}\n success([\"成功结果<br/>项目可以显式记录当前版本号,例如 0.1.23,并在需要时由用户主动更新到下一个版本。\"])\n failure[[\"失败与恢复<br/>版本轨道和内部 PRD 版本被混用,导致用户误以为 v0003 就是项目发版号。\"]]\n entry -->|\"用户在项目里启用版本轨道后,OpenPrd 记录当前版本号,例如 0.1.23,并…\"| experience\n experience -->|\"用户执行需求开发、Bug 修复、handoff 或版本说明导出时,现有新增、修复、…\"| decision\n decision -->|\"在 OpenPrd 现有内部 PRD 版本之上,新增一个可选的项目级 releas…\"| success\n decision -.->|\"版本轨道和内部 PRD 版本被混用,导致用户误以为 v0003 就是项目发版号。\"| failure\n```\n\n### 架构\n\n```mermaid\nflowchart LR\n users[\"主要用户<br/>维护 OpenPrd CLI、skills 和 review 产物的 OpenPrd maintainer · 使用 Open…\"]\n subgraph solution[\"方案边界\"]\n experience[\"Agent 运行层<br/>用户在项目里启用版本轨道后,OpenPrd 记录当前版本号,例如 0.1.23,并把后续变化条目累计到该版本下。 · 用户执行…\"]\n core[\"核心产品逻辑<br/>OpenPrd 现在已经有内部 PRD 版本和用户视角变化摘要,但还没有一个可选的项目级 release/version 轨道…\"]\n integrations[\"依赖与集成<br/>依赖现有 OpenPrd CLI、review-presentation、html-artifacts、loop 和 hand…\"]\n governance[[\"约束与可靠性<br/>版本轨道是可选辅助信息,不应破坏现有没有版本管理习惯的项目流程。 · tag 辅助能力默认以本地安全为先,不应在无明确授权时自…\"]]\n delivery[\"验证与交接<br/>项目可以显式记录当前版本号,例如 0.1.23,并在需要时由用户主动更新到下一个版本。 · 同一个版本下的需求、Bug、han…\"]\n end\n users -->|\"用户在项目里启用版本轨道后,OpenPrd 记录当前版本号,例如 0.1.23…\"| 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 - OpenPrd 提供可选的项目级 release/version ledger,支持记录 current version、版本状态和版本内变化项。\n - 现有共享变化摘要规则支持把新增、修复、优化、调整、移除等条目关联到具体项目版本。\n - handoff 与 release notes 导出优先从项目版本轨道读取对应版本的变化条目。\n - 当版本轨道已启用且用户通过 OpenPrd 显式执行 commit 时,commit 流可以读取当前版本号并辅助创建或更新本地版本 tag。\n - 当用户未更新版本号时,后续变化默认继续累计到当前版本;当用户显式更新版本号后,新的变化进入下一个版本。\n- 非功能需求:\n - 版本轨道是可选辅助信息,不应破坏现有没有版本管理习惯的项目流程。\n - tag 辅助能力默认以本地安全为先,不应在无明确授权时自动 force 更新远端 tag。\n - 现有显式 commit message、自定义 handoff 内容和已有版本体系优先级不能被新能力静默覆盖。\n - 版本轨道与变化摘要的输出应继续以用户当前语言为主,避免把内部 git 或实现细节直接写入用户可见文案。\n- 业务规则:\n - 内部 PRD 版本和项目 release 版本必须保持分层,不能共用一个字段。\n - 项目 release 版本默认允许用户手动指定或手动修正;系统只做辅助,不替用户决定版本 bump。\n - 同版本多次 commit 时,本地版本 tag 可以指向最新 commit,帮助界定本版本从上一个版本 tag 之后的提交范围。\n - 如果目标版本 tag 已经存在于远端,系统不得默认覆盖;需要明确提示当前指向并等待用户决定。\n - 版本说明继续优先使用新增、修复、优化、调整、移除等人类可读动作词,而不是直接复述 git 变更细节。\n\n## 业务护栏\n\n- 成本来源:\n - 无新增第三方付费调用成本;变化摘要完全基于本地上下文生成。\n- 额度与限制:\n - 不引入新的用户额度或发布配额限制;沿用现有 commit / handoff 执行门禁。\n- 滥用防护:\n - 不默认自动 push、自动发布或自动 force 更新远端 tag。\n - 只有在用户显式执行 commit 且版本轨道启用时,才进入版本 tag 辅助路径。\n - 远端已有同名版本 tag 时,系统只提示风险和当前指向,不静默改写历史。\n- 监控信号:\n - 关注生成摘要是否频繁退回技术细节、是否在测试中出现失真或空摘要。\n- 报警阈值:\n - 如果三处输出中任一处无法生成可信摘要并持续回退,需要在测试中显式暴露。\n- 止损动作:\n - 当上下文不足或摘要质量不可信时,回退到现有安全文案,不自动包装。\n\n## 约束、依赖与风险\n\n- 技术约束:\n - 需要兼容现有 loop、handoff、review-presentation 和 html-artifacts 的调用契约。\n - 需要在 dirty workspace 中做窄改动,避免误伤正在进行的 test-strategy-router 等历史工作。\n- 合规要求:\n - 待补充\n- 依赖:\n - 依赖现有 OpenPrd CLI、review-presentation、html-artifacts、loop 和 handoff 导出流程。\n- 假设:\n - 用户更看重人能快速扫懂的变化摘要,而不是技术完整性优先的底层说明。\n - 三处落点可以共用一套核心 formatter,再按场景做轻量渲染差异。\n- 风险:\n - 如果 formatter 规则过死,可能把一些纯技术任务描述得失真。\n - 如果只改一处而没有共用 contract,后续很快会再次分叉。\n- 开放问题:\n - 版本轨道是否需要支持 Unreleased 这种未定版态,还是只维护一个明确 current version。\n - 本地 tag 跟最新 commit 的策略是否只在未推远端前自动生效,还是需要更细的项目级配置。\n - Feishu 等外部同步出口首期是否只导出版本说明,不直接回写外部系统。\n\n## 类型专项模块\n\n- 类型: Agent 专项\n- humanAgentContract: Agent 可以根据 task、handoff 和 review 上下文生成变化摘要草案,但不能把自动生成的摘要当成发布事实之外的营销文案;高风险提交行为仍遵守现有执行门禁。\n- autonomyBoundary: Agent 可以修改 OpenPrd 的 formatter、skills、文档、测试和 worker 验证流程;不得自动推送、改写历史提交,或把 Feature Git Commit 的高风险 git 行为直接并入 OpenPrd 默认流。\n- toolBoundary: 仅使用本地 OpenPrd 代码、CLI、测试与 worker 会话完成实现和验证;本次不需要额外第三方文档调研。\n- stateModel: 共享变化摘要 contract 负责统一标题、动作词和描述规则;loop、handoff、review 三个调用面只做各自场景渲染与回退控制。\n- evalPlan: 先做本地单测和回归,再用 worker 在单独样例项目上跑一个最小任务,检查 commit、handoff 或 review 摘要输出是否符合预期。\n\n## 交接\n\n- 负责人: Codex\n- 下一步: 确认新的评审稿后生成 change 和 tasks,并按三处落点实现。\n- 目标系统: OpenSpec\n",
|
|
266
|
+
"digest": "0dbead578a9472100fb0c7cf185cd5500acd2d59830794cfa120f4f6976ee3f7",
|
|
267
|
+
"reviewPresentationMeta": {
|
|
268
|
+
"validatedAt": "2026-06-02T04:24:49.669Z",
|
|
269
|
+
"source": "/tmp/openprd-v0003-review-presentation.json",
|
|
270
|
+
"presentationHash": "28234498b5654bffd5a595815c2c91c5930b7ce2a8fe467c8101c9b4658bbc8e",
|
|
271
|
+
"violationsHash": "4f53cda18c2baa0c0354bb5f9a3ecbe5ed12ab4d8e11ba873c2f11161202b945",
|
|
272
|
+
"validator": "openprd review-presentation"
|
|
273
|
+
}
|
|
274
|
+
}
|
|
@@ -0,0 +1,193 @@
|
|
|
1
|
+
# OpenPrd 项目级版本轨道与变化摘要
|
|
2
|
+
> 语言规则:默认用简体中文生成 PRD、spec、tasks 和用户可见说明;除 PRD、OpenPrd、OpenSpec、API、SDK、CLI、TypeScript、JSON、HTTP、WebSocket、字段 key、命令名、品牌名、产品名和协议名等必要专有名词外,其余内容优先写成简体中文。
|
|
3
|
+
- 版本: v0004
|
|
4
|
+
- 负责人: Codex
|
|
5
|
+
- 产品类型: agent
|
|
6
|
+
- 模板包: agent
|
|
7
|
+
- 状态: synthesized
|
|
8
|
+
- 生成时间: 2026-06-02 12:24:42
|
|
9
|
+
## 元信息
|
|
10
|
+
|
|
11
|
+
- 标题: OpenPrd 项目级版本轨道与变化摘要
|
|
12
|
+
- 负责人: Codex
|
|
13
|
+
- 状态: clarifying
|
|
14
|
+
- 版本: v0004
|
|
15
|
+
- 产品类型: agent
|
|
16
|
+
- 日期: 2026-06-02
|
|
17
|
+
|
|
18
|
+
## 问题
|
|
19
|
+
|
|
20
|
+
- 问题陈述: OpenPrd 现在已经有内部 PRD 版本和用户视角变化摘要,但还没有一个可选的项目级 release/version 轨道来维护当前版本号、版本内更新项,以及与 commit tag 的协同规则。结果是版本号已经在项目里被真实使用,却缺少一个本地真源来累计本版本的需求、Bug、handoff 摘要和最终发布说明。
|
|
21
|
+
- 为什么是现在: 用户已经确认,希望在现有短文案变化摘要的基础上,再补一个可选的项目级版本轨道:既能维护当前版本和版本内更新内容,也能在 commit 流里利用版本信息辅助打 tag,让 release notes、handoff 和外部同步有稳定来源。
|
|
22
|
+
- 证据:
|
|
23
|
+
- 待补充
|
|
24
|
+
|
|
25
|
+
## 用户与相关方
|
|
26
|
+
|
|
27
|
+
- 主要用户:
|
|
28
|
+
- 维护 OpenPrd CLI、skills 和 review 产物的 OpenPrd maintainer
|
|
29
|
+
- 使用 OpenPrd 执行任务并需要生成 commit、handoff 或版本说明的 Agent 使用者
|
|
30
|
+
- 次要用户:
|
|
31
|
+
- 待补充
|
|
32
|
+
- 相关方:
|
|
33
|
+
- 阅读交付变更、提交说明和版本说明的项目负责人
|
|
34
|
+
- 需要快速判断这次改动是否值得合入或发布的协作者
|
|
35
|
+
|
|
36
|
+
## 目标与成功标准
|
|
37
|
+
|
|
38
|
+
- 目标:
|
|
39
|
+
- 在 OpenPrd 现有内部 PRD 版本之上,新增一个可选的项目级 release/version 轨道,用来维护当前版本号与版本内更新项。
|
|
40
|
+
- 把现有用户视角短文案摘要和项目版本轨道结合起来,让 commit、handoff、release notes 与外部同步都能复用同一套版本内变化条目。
|
|
41
|
+
- 在用户显式使用 commit 流且版本信息可用时,提供与版本号协同的 tag 辅助能力,但保留高风险 git 行为的安全护栏。
|
|
42
|
+
- 成功指标:
|
|
43
|
+
- 项目可以显式记录当前版本号,例如 0.1.23,并在需要时由用户主动更新到下一个版本。
|
|
44
|
+
- 同一个版本下的需求、Bug、handoff 摘要和 release notes 候选可以被累计到本地版本条目池,而不是散落在 commit 或外部表格中。
|
|
45
|
+
- 当用户通过 OpenPrd 执行 commit 且当前版本已启用时,系统可以为该版本创建或更新本地 tag 指向最新 commit,帮助快速界定本版本自上一个版本以来的提交范围。
|
|
46
|
+
- 当目标版本 tag 已经在远端存在时,系统不会默认 force 覆盖,而是明确提示当前指向和下一步选择。
|
|
47
|
+
- 验收目标:
|
|
48
|
+
- 新增项目级 release/version ledger,支持 current version、版本状态和版本内变化项存储。
|
|
49
|
+
- 现有变化摘要层继续复用新增、修复、优化、调整、移除等短文案动作词,并能挂到具体项目版本下。
|
|
50
|
+
- commit 流在启用版本轨道且用户明确执行时,可以读取当前版本并辅助创建或更新本地版本 tag;同版本多次提交时 tag 可移动到最新 commit。
|
|
51
|
+
- README、skills、handoff/release 导出和测试同步说明版本轨道与 tag 协同规则。
|
|
52
|
+
|
|
53
|
+
## 范围与非目标
|
|
54
|
+
|
|
55
|
+
- 范围内:
|
|
56
|
+
- 新增可选的项目级 release/version ledger,用于维护当前版本号、版本状态和版本内更新项。
|
|
57
|
+
- 把现有变化摘要条目挂载到具体项目版本下,支持需求、Bug、handoff 摘要和 release notes 候选的累计。
|
|
58
|
+
- 扩展 commit 流,在版本轨道已启用且用户显式执行 commit 时读取当前版本,并辅助创建或更新本地版本 tag。
|
|
59
|
+
- 扩展 handoff、release notes 与后续外部同步出口,让它们可以从项目版本轨道导出版本内变化内容。
|
|
60
|
+
- 补充 README、skills、文档和测试,并验证项目版本轨道与短文案摘要的协同效果。
|
|
61
|
+
- 范围外:
|
|
62
|
+
- 不把内部 PRD 版本 v000x 直接改造成项目发版号。
|
|
63
|
+
- 不强制所有项目都启用版本轨道;没有版本管理习惯的项目可以继续只用现有变化摘要能力。
|
|
64
|
+
- 不默认自动 push、自动发布或自动 force 更新远端 tag。
|
|
65
|
+
- 不要求替代团队已有的外部版本体系,只提供一个本地可维护、可导出的辅助真源。
|
|
66
|
+
|
|
67
|
+
## 场景与流程
|
|
68
|
+
|
|
69
|
+
- 主流程:
|
|
70
|
+
- 用户在项目里启用版本轨道后,OpenPrd 记录当前版本号,例如 0.1.23,并把后续变化条目累计到该版本下。
|
|
71
|
+
- 用户执行需求开发、Bug 修复、handoff 或版本说明导出时,现有新增、修复、优化、调整、移除等短文案条目会被归入当前版本。
|
|
72
|
+
- 用户通过 OpenPrd 执行 commit 且当前版本可用时,系统使用该版本号辅助创建或更新本地 tag,让同版本多次提交始终能由最新 commit 挂着该版本标签。
|
|
73
|
+
- 用户需要对外同步 Feishu 或生成版本说明时,可以直接导出当前版本下累计的主要更新内容。
|
|
74
|
+
- 边界情况:
|
|
75
|
+
- 项目可能已经有自己的一套版本号规则,OpenPrd 需要允许手动修正当前版本号,而不是强推默认策略。
|
|
76
|
+
- 如果同一个版本下发生多次 commit,本地 tag 可以移动到最新 commit;但如果对应 tag 已经推到远端,继续移动会变成高风险操作。
|
|
77
|
+
- 有些项目只想维护版本说明,不想碰 git tag;版本轨道与 tag 辅助能力需要可分开启用。
|
|
78
|
+
- 如果用户在没有更新版本号的情况下继续提交,系统应把新变化继续累计到当前版本,而不是猜测用户要自动 bump 版本。
|
|
79
|
+
- 失败模式:
|
|
80
|
+
- 版本轨道和内部 PRD 版本被混用,导致用户误以为 v0003 就是项目发版号。
|
|
81
|
+
- 系统在远端已有同名 tag 的情况下仍默认移动 tag,导致历史版本指向被静默改写。
|
|
82
|
+
- 变化摘要条目没有归到正确版本,导致版本说明、handoff 和外部同步内容失真。
|
|
83
|
+
- tag 辅助能力和 commit 流耦合过紧,反而让只想写版本说明的项目被迫碰 git 发布动作。
|
|
84
|
+
|
|
85
|
+
## 可视化图表
|
|
86
|
+
|
|
87
|
+
### 产品流程
|
|
88
|
+
|
|
89
|
+
```mermaid
|
|
90
|
+
flowchart LR
|
|
91
|
+
entry["入口触发<br/>用户在项目里启用版本轨道后,OpenPrd 记录当前版本号,例如 0.1.23,并把后续变化条目累计到该版本下。"]
|
|
92
|
+
experience["产品内步骤<br/>用户执行需求开发、Bug 修复、handoff 或版本说明导出时,现有新增、修复、优化、调整、移除等短文案条目会被归入当前版本。"]
|
|
93
|
+
decision{"决策点<br/>项目可能已经有自己的一套版本号规则,OpenPrd 需要允许手动修正当前版本号,而不是强推默认策略。"}
|
|
94
|
+
success(["成功结果<br/>项目可以显式记录当前版本号,例如 0.1.23,并在需要时由用户主动更新到下一个版本。"])
|
|
95
|
+
failure[["失败与恢复<br/>版本轨道和内部 PRD 版本被混用,导致用户误以为 v0003 就是项目发版号。"]]
|
|
96
|
+
entry -->|"用户在项目里启用版本轨道后,OpenPrd 记录当前版本号,例如 0.1.23,并…"| experience
|
|
97
|
+
experience -->|"用户执行需求开发、Bug 修复、handoff 或版本说明导出时,现有新增、修复、…"| decision
|
|
98
|
+
decision -->|"在 OpenPrd 现有内部 PRD 版本之上,新增一个可选的项目级 releas…"| success
|
|
99
|
+
decision -.->|"版本轨道和内部 PRD 版本被混用,导致用户误以为 v0003 就是项目发版号。"| failure
|
|
100
|
+
```
|
|
101
|
+
|
|
102
|
+
### 架构
|
|
103
|
+
|
|
104
|
+
```mermaid
|
|
105
|
+
flowchart LR
|
|
106
|
+
users["主要用户<br/>维护 OpenPrd CLI、skills 和 review 产物的 OpenPrd maintainer · 使用 Open…"]
|
|
107
|
+
subgraph solution["方案边界"]
|
|
108
|
+
experience["Agent 运行层<br/>用户在项目里启用版本轨道后,OpenPrd 记录当前版本号,例如 0.1.23,并把后续变化条目累计到该版本下。 · 用户执行…"]
|
|
109
|
+
core["核心产品逻辑<br/>OpenPrd 现在已经有内部 PRD 版本和用户视角变化摘要,但还没有一个可选的项目级 release/version 轨道…"]
|
|
110
|
+
integrations["依赖与集成<br/>依赖现有 OpenPrd CLI、review-presentation、html-artifacts、loop 和 hand…"]
|
|
111
|
+
governance[["约束与可靠性<br/>版本轨道是可选辅助信息,不应破坏现有没有版本管理习惯的项目流程。 · tag 辅助能力默认以本地安全为先,不应在无明确授权时自…"]]
|
|
112
|
+
delivery["验证与交接<br/>项目可以显式记录当前版本号,例如 0.1.23,并在需要时由用户主动更新到下一个版本。 · 同一个版本下的需求、Bug、han…"]
|
|
113
|
+
end
|
|
114
|
+
users -->|"用户在项目里启用版本轨道后,OpenPrd 记录当前版本号,例如 0.1.23…"| experience
|
|
115
|
+
experience -->|"产品动作与编排"| core
|
|
116
|
+
core -->|"依赖与外部服务"| integrations
|
|
117
|
+
core -.->|"策略、可靠性与合规"| governance
|
|
118
|
+
core -->|"成功标准与交接"| delivery
|
|
119
|
+
integrations -->|"运营就绪"| delivery
|
|
120
|
+
governance -.->|"评审与确认"| delivery
|
|
121
|
+
```
|
|
122
|
+
|
|
123
|
+
## 需求
|
|
124
|
+
|
|
125
|
+
- 功能需求:
|
|
126
|
+
- OpenPrd 提供可选的项目级 release/version ledger,支持记录 current version、版本状态和版本内变化项。
|
|
127
|
+
- 现有共享变化摘要规则支持把新增、修复、优化、调整、移除等条目关联到具体项目版本。
|
|
128
|
+
- handoff 与 release notes 导出优先从项目版本轨道读取对应版本的变化条目。
|
|
129
|
+
- 当版本轨道已启用且用户通过 OpenPrd 显式执行 commit 时,commit 流可以读取当前版本号并辅助创建或更新本地版本 tag。
|
|
130
|
+
- 当用户未更新版本号时,后续变化默认继续累计到当前版本;当用户显式更新版本号后,新的变化进入下一个版本。
|
|
131
|
+
- 非功能需求:
|
|
132
|
+
- 版本轨道是可选辅助信息,不应破坏现有没有版本管理习惯的项目流程。
|
|
133
|
+
- tag 辅助能力默认以本地安全为先,不应在无明确授权时自动 force 更新远端 tag。
|
|
134
|
+
- 现有显式 commit message、自定义 handoff 内容和已有版本体系优先级不能被新能力静默覆盖。
|
|
135
|
+
- 版本轨道与变化摘要的输出应继续以用户当前语言为主,避免把内部 git 或实现细节直接写入用户可见文案。
|
|
136
|
+
- 业务规则:
|
|
137
|
+
- 内部 PRD 版本和项目 release 版本必须保持分层,不能共用一个字段。
|
|
138
|
+
- 项目 release 版本默认允许用户手动指定或手动修正;系统只做辅助,不替用户决定版本 bump。
|
|
139
|
+
- 同版本多次 commit 时,本地版本 tag 可以指向最新 commit,帮助界定本版本从上一个版本 tag 之后的提交范围。
|
|
140
|
+
- 如果目标版本 tag 已经存在于远端,系统不得默认覆盖;需要明确提示当前指向并等待用户决定。
|
|
141
|
+
- 版本说明继续优先使用新增、修复、优化、调整、移除等人类可读动作词,而不是直接复述 git 变更细节。
|
|
142
|
+
|
|
143
|
+
## 业务护栏
|
|
144
|
+
|
|
145
|
+
- 成本来源:
|
|
146
|
+
- 无新增第三方付费调用成本;变化摘要完全基于本地上下文生成。
|
|
147
|
+
- 额度与限制:
|
|
148
|
+
- 不引入新的用户额度或发布配额限制;沿用现有 commit / handoff 执行门禁。
|
|
149
|
+
- 滥用防护:
|
|
150
|
+
- 不默认自动 push、自动发布或自动 force 更新远端 tag。
|
|
151
|
+
- 只有在用户显式执行 commit 且版本轨道启用时,才进入版本 tag 辅助路径。
|
|
152
|
+
- 远端已有同名版本 tag 时,系统只提示风险和当前指向,不静默改写历史。
|
|
153
|
+
- 监控信号:
|
|
154
|
+
- 关注生成摘要是否频繁退回技术细节、是否在测试中出现失真或空摘要。
|
|
155
|
+
- 报警阈值:
|
|
156
|
+
- 如果三处输出中任一处无法生成可信摘要并持续回退,需要在测试中显式暴露。
|
|
157
|
+
- 止损动作:
|
|
158
|
+
- 当上下文不足或摘要质量不可信时,回退到现有安全文案,不自动包装。
|
|
159
|
+
|
|
160
|
+
## 约束、依赖与风险
|
|
161
|
+
|
|
162
|
+
- 技术约束:
|
|
163
|
+
- 需要兼容现有 loop、handoff、review-presentation 和 html-artifacts 的调用契约。
|
|
164
|
+
- 需要在 dirty workspace 中做窄改动,避免误伤正在进行的 test-strategy-router 等历史工作。
|
|
165
|
+
- 合规要求:
|
|
166
|
+
- 待补充
|
|
167
|
+
- 依赖:
|
|
168
|
+
- 依赖现有 OpenPrd CLI、review-presentation、html-artifacts、loop 和 handoff 导出流程。
|
|
169
|
+
- 假设:
|
|
170
|
+
- 用户更看重人能快速扫懂的变化摘要,而不是技术完整性优先的底层说明。
|
|
171
|
+
- 三处落点可以共用一套核心 formatter,再按场景做轻量渲染差异。
|
|
172
|
+
- 风险:
|
|
173
|
+
- 如果 formatter 规则过死,可能把一些纯技术任务描述得失真。
|
|
174
|
+
- 如果只改一处而没有共用 contract,后续很快会再次分叉。
|
|
175
|
+
- 开放问题:
|
|
176
|
+
- 版本轨道是否需要支持 Unreleased 这种未定版态,还是只维护一个明确 current version。
|
|
177
|
+
- 本地 tag 跟最新 commit 的策略是否只在未推远端前自动生效,还是需要更细的项目级配置。
|
|
178
|
+
- Feishu 等外部同步出口首期是否只导出版本说明,不直接回写外部系统。
|
|
179
|
+
|
|
180
|
+
## 类型专项模块
|
|
181
|
+
|
|
182
|
+
- 类型: Agent 专项
|
|
183
|
+
- humanAgentContract: Agent 可以根据 task、handoff 和 review 上下文生成变化摘要草案,但不能把自动生成的摘要当成发布事实之外的营销文案;高风险提交行为仍遵守现有执行门禁。
|
|
184
|
+
- autonomyBoundary: Agent 可以修改 OpenPrd 的 formatter、skills、文档、测试和 worker 验证流程;不得自动推送、改写历史提交,或把 Feature Git Commit 的高风险 git 行为直接并入 OpenPrd 默认流。
|
|
185
|
+
- toolBoundary: 仅使用本地 OpenPrd 代码、CLI、测试与 worker 会话完成实现和验证;本次不需要额外第三方文档调研。
|
|
186
|
+
- stateModel: 共享变化摘要 contract 负责统一标题、动作词和描述规则;loop、handoff、review 三个调用面只做各自场景渲染与回退控制。
|
|
187
|
+
- evalPlan: 先做本地单测和回归,再用 worker 在单独样例项目上跑一个最小任务,检查 commit、handoff 或 review 摘要输出是否符合预期。
|
|
188
|
+
|
|
189
|
+
## 交接
|
|
190
|
+
|
|
191
|
+
- 负责人: Codex
|
|
192
|
+
- 下一步: 确认新的评审稿后生成 change 和 tasks,并按三处落点实现。
|
|
193
|
+
- 目标系统: OpenSpec
|