@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.
Files changed (138) hide show
  1. package/.openprd/README.md +43 -69
  2. package/.openprd/README_EN.md +84 -0
  3. package/.openprd/benchmarks/index.md +7 -0
  4. package/.openprd/benchmarks/sources.yaml +25 -3
  5. package/.openprd/discovery/config.json +16 -2
  6. package/.openprd/engagements/active/flows.md +19 -14
  7. package/.openprd/engagements/active/handoff.md +11 -4
  8. package/.openprd/engagements/active/prd.md +99 -71
  9. package/.openprd/engagements/active/review.html +4 -4
  10. package/.openprd/engagements/active/roles.md +9 -8
  11. package/.openprd/engagements/work-units/wu-20260524015648-6d33ded7.json +4 -4
  12. package/.openprd/engagements/work-units/wu-20260602113956-a99b5b88.json +18 -0
  13. package/.openprd/engagements/work-units/wu-20260602122244-78656aaf.json +18 -0
  14. package/.openprd/engagements/work-units/wu-20260602122442-e96489e2.json +18 -0
  15. package/.openprd/engagements/work-units/wu-20260602132835-695429e8.json +18 -0
  16. package/.openprd/knowledge/candidates/candidate-turn-1780116203372-5f266a79e968c758/candidate.json +78 -0
  17. package/.openprd/knowledge/candidates/candidate-turn-1780116203372-5f266a79e968c758/diagnostic-report.json +129 -0
  18. package/.openprd/knowledge/candidates/candidate-turn-1780116203372-5f266a79e968c758/root-cause-candidates.json +41 -0
  19. package/.openprd/knowledge/candidates/candidate-turn-1780116203372-5f266a79e968c758/timeline.json +14 -0
  20. package/.openprd/knowledge/drafts/openprd-experience-diagnostic-candidate-turn-1780116203372-5f266a79e968c758/SKILL.md +49 -0
  21. package/.openprd/knowledge/index.json +44 -4
  22. package/.openprd/reviews/v0001.html +195 -129
  23. package/.openprd/reviews/v0002.html +1150 -0
  24. package/.openprd/reviews/v0003.html +1150 -0
  25. package/.openprd/reviews/v0004.html +1150 -0
  26. package/.openprd/reviews/v0005.html +1150 -0
  27. package/.openprd/standards/config.json +12 -9
  28. package/.openprd/state/changes.json +17 -2
  29. package/.openprd/state/current.json +399 -63
  30. package/.openprd/state/release-ledger.json +344 -0
  31. package/.openprd/state/version-index.json +52 -0
  32. package/.openprd/state/versions/v0002.json +264 -0
  33. package/.openprd/state/versions/v0002.md +183 -0
  34. package/.openprd/state/versions/v0003.json +269 -0
  35. package/.openprd/state/versions/v0003.md +188 -0
  36. package/.openprd/state/versions/v0004.json +274 -0
  37. package/.openprd/state/versions/v0004.md +193 -0
  38. package/.openprd/state/versions/v0005.json +299 -0
  39. package/.openprd/state/versions/v0005.md +189 -0
  40. package/.openprd/templates/agent/intake.md +5 -4
  41. package/.openprd/templates/b2b/intake.md +5 -4
  42. package/.openprd/templates/base/intake.md +10 -4
  43. package/.openprd/templates/company/README.md +9 -7
  44. package/.openprd/templates/company/README_EN.md +12 -0
  45. package/.openprd/templates/consumer/intake.md +5 -4
  46. package/.openprd/templates/industry/README.md +12 -10
  47. package/.openprd/templates/industry/README_EN.md +18 -0
  48. package/.openprd/templates/project/README.md +11 -9
  49. package/.openprd/templates/project/README_EN.md +16 -0
  50. package/.openprd/templates/session/README.md +11 -9
  51. package/.openprd/templates/session/README_EN.md +16 -0
  52. package/AGENTS.md +12 -8
  53. package/README.md +402 -441
  54. package/README_CN.md +4 -578
  55. package/README_EN.md +850 -0
  56. package/docs/assets/openprd-requirement-routing-en.png +0 -0
  57. package/docs/assets/openprd-requirement-routing-en.svg +102 -0
  58. package/docs/assets/openprd-requirement-routing-zh-refined.png +0 -0
  59. package/docs/assets/openprd-requirement-routing-zh.png +0 -0
  60. package/docs/assets/openprd-requirement-routing-zh.svg +102 -0
  61. package/package.json +6 -2
  62. package/scripts/dev-check-wrapup-copy.mjs +110 -0
  63. package/scripts/openprd-github-release-notes.mjs +99 -0
  64. package/scripts/quality-perf-check.mjs +203 -0
  65. package/skills/openprd-benchmark-router/SKILL.md +1 -0
  66. package/skills/openprd-benchmark-router/references/benchmark-sources.md +1 -0
  67. package/skills/openprd-benchmark-router/references/source-policy.md +2 -0
  68. package/skills/openprd-discovery-loop/SKILL.md +2 -2
  69. package/skills/openprd-harness/SKILL.md +46 -24
  70. package/skills/openprd-harness/references/workflow-gates.md +15 -0
  71. package/skills/openprd-quality/SKILL.md +10 -4
  72. package/skills/openprd-requirement-intake/SKILL.md +39 -23
  73. package/skills/openprd-requirement-intake/references/prd-template-lenses.md +6 -6
  74. package/skills/openprd-requirement-intake/references/routing-rubric.md +22 -8
  75. package/skills/openprd-router/SKILL.md +2 -2
  76. package/skills/openprd-shared/SKILL.md +51 -23
  77. package/skills/openprd-standards/SKILL.md +2 -1
  78. package/src/agent-integration.js +265 -65
  79. package/src/benchmark/constants.js +107 -0
  80. package/src/benchmark/operations.js +235 -0
  81. package/src/benchmark/registry.js +64 -0
  82. package/src/benchmark/render.js +115 -0
  83. package/src/benchmark/source.js +617 -0
  84. package/src/benchmark/storage.js +121 -0
  85. package/src/benchmark/verify.js +235 -0
  86. package/src/benchmark.js +50 -851
  87. package/src/change-summary.js +339 -0
  88. package/src/cli/args.js +67 -6
  89. package/src/cli/basic-print.js +365 -0
  90. package/src/cli/benchmark-print.js +91 -0
  91. package/src/cli/change-print.js +221 -0
  92. package/src/cli/doctor-print.js +268 -0
  93. package/src/cli/growth-print.js +176 -0
  94. package/src/cli/print.js +73 -1384
  95. package/src/cli/quality-print.js +284 -0
  96. package/src/cli/run-print.js +297 -0
  97. package/src/cli/shared-print.js +127 -0
  98. package/src/cli/workflow-print.js +195 -0
  99. package/src/codex-hook-runner-template.mjs +639 -117
  100. package/src/codex-runtime.js +324 -0
  101. package/src/dev-standards.js +178 -5
  102. package/src/diagram-core.js +5 -5
  103. package/src/discovery.js +2 -1
  104. package/src/execution-strategy.js +369 -0
  105. package/src/fleet.js +4 -0
  106. package/src/github-release.js +156 -0
  107. package/src/growth.js +311 -13
  108. package/src/html-artifact-utils.js +25 -0
  109. package/src/html-artifacts.js +157 -1596
  110. package/src/knowledge.js +1176 -75
  111. package/src/language-policy.js +2 -112
  112. package/src/learning-html-artifact.js +1031 -0
  113. package/src/learning-review.js +3 -2
  114. package/src/loop.js +280 -9
  115. package/src/openprd.js +341 -38
  116. package/src/openspec/change-validate.js +0 -9
  117. package/src/openspec/execute.js +79 -3
  118. package/src/openspec/generate.js +33 -20
  119. package/src/openspec/tasks.js +33 -2
  120. package/src/prd-core.js +10 -9
  121. package/src/product-type-copy.js +69 -0
  122. package/src/quality-html-artifact.js +108 -9
  123. package/src/quality-learning.js +30 -0
  124. package/src/quality-visual-review.js +237 -0
  125. package/src/quality.js +329 -43
  126. package/src/registry-hygiene.js +54 -0
  127. package/src/release-ledger.js +413 -0
  128. package/src/review-presentation.js +12 -6
  129. package/src/run-harness.js +722 -48
  130. package/src/self-update.js +1 -1
  131. package/src/session-binding.js +40 -3
  132. package/src/session-registry.js +159 -0
  133. package/src/standards.js +5 -3
  134. package/src/test-strategy.js +386 -0
  135. package/src/visual-compare.js +915 -34
  136. package/src/work-unit-migration.js +5 -1
  137. package/src/workspace-core.js +343 -19
  138. package/src/workspace-workflow.js +538 -134
@@ -0,0 +1,344 @@
1
+ {
2
+ "version": 1,
3
+ "enabled": true,
4
+ "strategy": "semver",
5
+ "currentVersion": "0.1.8",
6
+ "versions": [
7
+ {
8
+ "version": "0.1.2",
9
+ "status": "released",
10
+ "createdAt": "2026-06-02 21:28:04",
11
+ "updatedAt": "2026-06-03 01:00:00",
12
+ "notes": null,
13
+ "items": [
14
+ {
15
+ "type": "新增",
16
+ "summary": "新增",
17
+ "detail": "首轮项目画像,让冷启动工作区先形成项目画像和需求入口自省",
18
+ "sentence": "新增:首轮项目画像,让冷启动工作区先形成项目画像和需求入口自省",
19
+ "recordedAt": "2026-06-02 21:28:22",
20
+ "source": {
21
+ "kind": "manual-note",
22
+ "manualId": "manual-note-1780406902463"
23
+ }
24
+ },
25
+ {
26
+ "type": "新增",
27
+ "summary": "新增",
28
+ "detail": "review-presentation 门禁,评审页文案必须先通过展示契约校验",
29
+ "sentence": "新增:review-presentation 门禁,评审页文案必须先通过展示契约校验",
30
+ "recordedAt": "2026-06-02 21:28:22",
31
+ "source": {
32
+ "kind": "manual-note",
33
+ "manualId": "manual-note-1780406902656"
34
+ }
35
+ },
36
+ {
37
+ "type": "新增",
38
+ "summary": "新增",
39
+ "detail": "测试策略与执行策略联动,让任务可以直接携带 worker 合同和证据计划",
40
+ "sentence": "新增:测试策略与执行策略联动,让任务可以直接携带 worker 合同和证据计划",
41
+ "recordedAt": "2026-06-02 21:28:22",
42
+ "source": {
43
+ "kind": "manual-note",
44
+ "manualId": "manual-note-1780406902835"
45
+ }
46
+ },
47
+ {
48
+ "type": "优化",
49
+ "summary": "优化",
50
+ "detail": "历史会话续接,先通过全局 session registry 恢复真实 workspace",
51
+ "sentence": "优化:历史会话续接,先通过全局 session registry 恢复真实 workspace",
52
+ "recordedAt": "2026-06-02 21:28:23",
53
+ "source": {
54
+ "kind": "manual-note",
55
+ "manualId": "manual-note-1780406903019"
56
+ }
57
+ },
58
+ {
59
+ "type": "新增",
60
+ "summary": "新增",
61
+ "detail": "benchmark observe、knowledge draft skill 和 Codex repair 等成长闭环",
62
+ "sentence": "新增:benchmark observe、knowledge draft skill 和 Codex repair 等成长闭环",
63
+ "recordedAt": "2026-06-02 21:28:23",
64
+ "source": {
65
+ "kind": "manual-note",
66
+ "manualId": "manual-note-1780406903180"
67
+ }
68
+ },
69
+ {
70
+ "type": "新增",
71
+ "summary": "新增",
72
+ "detail": "visual-compare 的 before/after 自检,方便无参考图界面改动做视觉回归",
73
+ "sentence": "新增:visual-compare 的 before/after 自检,方便无参考图界面改动做视觉回归",
74
+ "recordedAt": "2026-06-02 21:28:23",
75
+ "source": {
76
+ "kind": "manual-note",
77
+ "manualId": "manual-note-1780406903337"
78
+ }
79
+ }
80
+ ],
81
+ "tag": null
82
+ },
83
+ {
84
+ "version": "0.1.3",
85
+ "status": "released",
86
+ "createdAt": "2026-06-03 01:00:00",
87
+ "updatedAt": "2026-06-03 12:53:20",
88
+ "notes": null,
89
+ "items": [
90
+ {
91
+ "type": "修复",
92
+ "summary": "修复",
93
+ "detail": "Windows 下带空格路径的 Codex hook command quoting,避免 hook 调用失败",
94
+ "sentence": "修复:Windows 下带空格路径的 Codex hook command quoting,避免 hook 调用失败",
95
+ "recordedAt": "2026-06-03 01:00:00",
96
+ "source": {
97
+ "kind": "manual-note",
98
+ "manualId": "manual-note-20260603-win-hook-quoting"
99
+ }
100
+ },
101
+ {
102
+ "type": "优化",
103
+ "summary": "优化",
104
+ "detail": "Windows 全局安装排查说明,并提供 npx 启动兜底路径",
105
+ "sentence": "优化:Windows 全局安装排查说明,并提供 npx 启动兜底路径",
106
+ "recordedAt": "2026-06-03 01:00:00",
107
+ "source": {
108
+ "kind": "manual-note",
109
+ "manualId": "manual-note-20260603-win-install-docs"
110
+ }
111
+ }
112
+ ],
113
+ "tag": null
114
+ },
115
+ {
116
+ "version": "0.1.4",
117
+ "status": "released",
118
+ "createdAt": "2026-06-03 12:53:20",
119
+ "updatedAt": "2026-06-05 09:02:25",
120
+ "notes": null,
121
+ "items": [
122
+ {
123
+ "type": "优化",
124
+ "summary": "优化",
125
+ "detail": "run verify 在 taskReady 与 workspaceReady 之间做明确拆分",
126
+ "sentence": "优化:run verify 在 taskReady 与 workspaceReady 之间做明确拆分",
127
+ "recordedAt": "2026-06-03 12:53:20",
128
+ "source": {
129
+ "kind": "manual-note",
130
+ "manualId": "manual-note-1780462400734"
131
+ }
132
+ },
133
+ {
134
+ "type": "优化",
135
+ "summary": "优化",
136
+ "detail": "feature-coverage 待补时改为任务账本或覆盖证据未收口,不再把本次实现说成失败",
137
+ "sentence": "优化:feature-coverage 待补时改为任务账本或覆盖证据未收口,不再把本次实现说成失败",
138
+ "recordedAt": "2026-06-03 12:53:20",
139
+ "source": {
140
+ "kind": "manual-note",
141
+ "manualId": "manual-note-1780462400854"
142
+ }
143
+ },
144
+ {
145
+ "type": "优化",
146
+ "summary": "优化",
147
+ "detail": "高风险 hook、AGENTS、skills 与 command catalog 复用同一套 workspace debt 话术",
148
+ "sentence": "优化:高风险 hook、AGENTS、skills 与 command catalog 复用同一套 workspace debt 话术",
149
+ "recordedAt": "2026-06-03 12:53:20",
150
+ "source": {
151
+ "kind": "manual-note",
152
+ "manualId": "manual-note-1780462400978"
153
+ }
154
+ }
155
+ ],
156
+ "tag": null
157
+ },
158
+ {
159
+ "version": "0.1.5",
160
+ "status": "released",
161
+ "createdAt": "2026-06-05 09:02:25",
162
+ "updatedAt": "2026-06-05 12:35:25",
163
+ "notes": null,
164
+ "items": [
165
+ {
166
+ "type": "优化",
167
+ "summary": "优化",
168
+ "detail": "新需求默认先走需求分流,只有继续既有优化或恢复指定会话时才优先续接历史上下文",
169
+ "sentence": "优化:新需求默认先走需求分流,只有继续既有优化或恢复指定会话时才优先续接历史上下文",
170
+ "recordedAt": "2026-06-05 09:02:25",
171
+ "source": {
172
+ "kind": "manual-note",
173
+ "manualId": "manual-note-1780621345707"
174
+ }
175
+ },
176
+ {
177
+ "type": "修复",
178
+ "summary": "修复",
179
+ "detail": "同一条需求已确认后,后续承接直接继续执行,不再重复索要确认",
180
+ "sentence": "修复:同一条需求已确认后,后续承接直接继续执行,不再重复索要确认",
181
+ "recordedAt": "2026-06-05 09:02:25",
182
+ "source": {
183
+ "kind": "manual-note",
184
+ "manualId": "manual-note-1780621345801"
185
+ }
186
+ },
187
+ {
188
+ "type": "优化",
189
+ "summary": "优化",
190
+ "detail": "历史会话恢复优先按显式 session id 和全局 session registry 找到真实工作区",
191
+ "sentence": "优化:历史会话恢复优先按显式 session id 和全局 session registry 找到真实工作区",
192
+ "recordedAt": "2026-06-05 09:02:25",
193
+ "source": {
194
+ "kind": "manual-note",
195
+ "manualId": "manual-note-1780621345896"
196
+ }
197
+ },
198
+ {
199
+ "type": "修复",
200
+ "summary": "修复",
201
+ "detail": "fleet 批量更新会补齐 active flows roles handoff,并忽略旧项目 docs basic 与 source manual 假失败",
202
+ "sentence": "修复:fleet 批量更新会补齐 active flows roles handoff,并忽略旧项目 docs basic 与 source manual 假失败",
203
+ "recordedAt": "2026-06-05 09:02:25",
204
+ "source": {
205
+ "kind": "manual-note",
206
+ "manualId": "manual-note-1780621345979"
207
+ }
208
+ }
209
+ ],
210
+ "tag": null
211
+ },
212
+ {
213
+ "version": "0.1.6",
214
+ "status": "released",
215
+ "createdAt": "2026-06-05 12:35:24",
216
+ "updatedAt": "2026-06-05 17:33:02",
217
+ "notes": null,
218
+ "items": [
219
+ {
220
+ "type": "优化",
221
+ "summary": "优化",
222
+ "detail": "需求入口按快速修正、现有功能优化、新功能/新流程方案分流,L0/L1 默认不再走完整 PRD/change/tasks 流程",
223
+ "sentence": "优化:需求入口按快速修正、现有功能优化、新功能/新流程方案分流,L0/L1 默认不再走完整 PRD/change/tasks 流程",
224
+ "recordedAt": "2026-06-05 12:35:25",
225
+ "source": {
226
+ "kind": "manual-note",
227
+ "manualId": "manual-note-1780634125121"
228
+ }
229
+ },
230
+ {
231
+ "type": "优化",
232
+ "summary": "优化",
233
+ "detail": "clarify 默认先用业务和产品语言复述需求,并按 consumer、b2b、agent 视角聚焦场景、收益和风险",
234
+ "sentence": "优化:clarify 默认先用业务和产品语言复述需求,并按 consumer、b2b、agent 视角聚焦场景、收益和风险",
235
+ "recordedAt": "2026-06-05 12:35:25",
236
+ "source": {
237
+ "kind": "manual-note",
238
+ "manualId": "manual-note-1780634125234"
239
+ }
240
+ },
241
+ {
242
+ "type": "优化",
243
+ "summary": "优化",
244
+ "detail": "README 默认简体中文入口,新增中英文需求分流示意图,帮助非技术用户更快理解怎么提需求",
245
+ "sentence": "优化:README 默认简体中文入口,新增中英文需求分流示意图,帮助非技术用户更快理解怎么提需求",
246
+ "recordedAt": "2026-06-05 12:35:25",
247
+ "source": {
248
+ "kind": "manual-note",
249
+ "manualId": "manual-note-1780634125370"
250
+ }
251
+ },
252
+ {
253
+ "type": "修复",
254
+ "summary": "修复",
255
+ "detail": "Codex requirement gate 对局部修正和低风险优化更保守放行,只把高风险新流程和跨系统需求升级到完整 intake",
256
+ "sentence": "修复:Codex requirement gate 对局部修正和低风险优化更保守放行,只把高风险新流程和跨系统需求升级到完整 intake",
257
+ "recordedAt": "2026-06-05 12:35:25",
258
+ "source": {
259
+ "kind": "manual-note",
260
+ "manualId": "manual-note-1780634125494"
261
+ }
262
+ }
263
+ ],
264
+ "tag": null
265
+ },
266
+ {
267
+ "version": "0.1.7",
268
+ "status": "released",
269
+ "createdAt": "2026-06-05 17:33:02",
270
+ "updatedAt": "2026-06-06 14:06:15",
271
+ "notes": null,
272
+ "items": [
273
+ {
274
+ "type": "调整",
275
+ "summary": "调整",
276
+ "detail": "更新 README 需求分流图为 AI 生成的 PNG 版本,默认展示正式中英文路由图",
277
+ "sentence": "调整:更新 README 需求分流图为 AI 生成的 PNG 版本,默认展示正式中英文路由图",
278
+ "recordedAt": "2026-06-05 17:33:16",
279
+ "source": {
280
+ "kind": "manual-note",
281
+ "manualId": "manual-note-1780651996954"
282
+ }
283
+ }
284
+ ],
285
+ "tag": null
286
+ },
287
+ {
288
+ "version": "0.1.8",
289
+ "status": "current",
290
+ "createdAt": "2026-06-06 14:06:15",
291
+ "updatedAt": "2026-06-06 14:06:53",
292
+ "notes": null,
293
+ "items": [
294
+ {
295
+ "type": "新增",
296
+ "summary": "新增",
297
+ "detail": "命中的项目经验会自动进入运行上下文和执行引导,减少重复补充规则",
298
+ "sentence": "新增:命中的项目经验会自动进入运行上下文和执行引导,减少重复补充规则",
299
+ "recordedAt": "2026-06-06 14:06:26",
300
+ "source": {
301
+ "kind": "manual-note",
302
+ "manualId": "manual-note-1780725986925"
303
+ }
304
+ },
305
+ {
306
+ "type": "修复",
307
+ "summary": "修复",
308
+ "detail": "用户已经认可后,后续默认直接继续推进,不再重复追问同一轮确认",
309
+ "sentence": "修复:用户已经认可后,后续默认直接继续推进,不再重复追问同一轮确认",
310
+ "recordedAt": "2026-06-06 14:06:27",
311
+ "source": {
312
+ "kind": "manual-note",
313
+ "manualId": "manual-note-1780725987012"
314
+ }
315
+ },
316
+ {
317
+ "type": "优化",
318
+ "summary": "优化",
319
+ "detail": "对外文案统一改成更好懂的表达,减少内部术语直接暴露给用户",
320
+ "sentence": "优化:对外文案统一改成更好懂的表达,减少内部术语直接暴露给用户",
321
+ "recordedAt": "2026-06-06 14:06:27",
322
+ "source": {
323
+ "kind": "manual-note",
324
+ "manualId": "manual-note-1780725987036"
325
+ }
326
+ },
327
+ {
328
+ "type": "新增",
329
+ "summary": "新增",
330
+ "detail": "项目经验命中、引用和注入会留下采用记录,方便判断自我成长有没有真的生效",
331
+ "sentence": "新增:项目经验命中、引用和注入会留下采用记录,方便判断自我成长有没有真的生效",
332
+ "recordedAt": "2026-06-06 14:06:53",
333
+ "source": {
334
+ "kind": "manual-note",
335
+ "manualId": "manual-note-1780726013537"
336
+ }
337
+ }
338
+ ],
339
+ "tag": null
340
+ }
341
+ ],
342
+ "createdAt": "2026-06-02 21:28:04",
343
+ "updatedAt": "2026-06-06 14:06:53"
344
+ }
@@ -11,5 +11,57 @@
11
11
  "digest": "dc988d7a94c07d2a8070968a71ddacffb374eaeee12aa85eb93231e06dd7b077",
12
12
  "workUnitId": "wu-20260524015648-6d33ded7",
13
13
  "targetRoot": "/Users/chaojifeng/Projects/harness-engineer/openprd"
14
+ },
15
+ {
16
+ "versionNumber": 2,
17
+ "versionId": "v0002",
18
+ "createdAt": "2026-06-02 11:39:56",
19
+ "title": "OpenPrd 用户视角变化摘要",
20
+ "owner": "Codex",
21
+ "productType": "agent",
22
+ "templatePack": "agent",
23
+ "status": "synthesized",
24
+ "digest": "e44eccd0d6fe1a7fd962ece31187f920e1a71de76122d15b826fb0a66d934d35",
25
+ "workUnitId": "wu-20260602113956-a99b5b88",
26
+ "targetRoot": "/Users/chaojifeng/Projects/harness-engineer/openprd"
27
+ },
28
+ {
29
+ "versionNumber": 3,
30
+ "versionId": "v0003",
31
+ "createdAt": "2026-06-02 12:22:44",
32
+ "title": "OpenPrd 用户视角变化摘要",
33
+ "owner": "Codex",
34
+ "productType": "agent",
35
+ "templatePack": "agent",
36
+ "status": "synthesized",
37
+ "digest": "f1b18bc47cbd76f784b7682483eafa24eb02230e23189dad29a2202b61544918",
38
+ "workUnitId": "wu-20260602122244-78656aaf",
39
+ "targetRoot": "/Users/chaojifeng/Projects/harness-engineer/openprd"
40
+ },
41
+ {
42
+ "versionNumber": 4,
43
+ "versionId": "v0004",
44
+ "createdAt": "2026-06-02 12:24:42",
45
+ "title": "OpenPrd 项目级版本轨道与变化摘要",
46
+ "owner": "Codex",
47
+ "productType": "agent",
48
+ "templatePack": "agent",
49
+ "status": "synthesized",
50
+ "digest": "0dbead578a9472100fb0c7cf185cd5500acd2d59830794cfa120f4f6976ee3f7",
51
+ "workUnitId": "wu-20260602122442-e96489e2",
52
+ "targetRoot": "/Users/chaojifeng/Projects/harness-engineer/openprd"
53
+ },
54
+ {
55
+ "versionNumber": 5,
56
+ "versionId": "v0005",
57
+ "createdAt": "2026-06-02 13:28:35",
58
+ "title": "OpenPrd 首轮项目画像与自适应需求初始化",
59
+ "owner": "Codex",
60
+ "productType": "agent",
61
+ "templatePack": "agent",
62
+ "status": "synthesized",
63
+ "digest": "7f0e2d2730982a2ae96647d2377f6204e54f8adadf1b18b05f4bc7167046c575",
64
+ "workUnitId": "wu-20260602132835-695429e8",
65
+ "targetRoot": "/Users/chaojifeng/Projects/harness-engineer/openprd"
14
66
  }
15
67
  ]