@openprd/cli 0.1.11 → 0.1.19

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 (147) hide show
  1. package/.openprd/changes/adaptive-project-framing/.openprd.yaml +2 -0
  2. package/.openprd/changes/adaptive-project-framing/design.md +47 -0
  3. package/.openprd/changes/adaptive-project-framing/proposal.md +35 -0
  4. package/.openprd/changes/adaptive-project-framing/specs/agent-requirements/spec.md +16 -0
  5. package/.openprd/changes/adaptive-project-framing/task-events.jsonl +20 -0
  6. package/.openprd/changes/adaptive-project-framing/tasks.md +340 -0
  7. package/.openprd/changes/docs-anti-pollution-and-design-direction-review/.openprd.yaml +2 -0
  8. package/.openprd/changes/docs-anti-pollution-and-design-direction-review/design.md +34 -0
  9. package/.openprd/changes/docs-anti-pollution-and-design-direction-review/proposal.md +23 -0
  10. package/.openprd/changes/docs-anti-pollution-and-design-direction-review/specs/agent-requirements/spec.md +16 -0
  11. package/.openprd/changes/docs-anti-pollution-and-design-direction-review/task-events.jsonl +14 -0
  12. package/.openprd/changes/docs-anti-pollution-and-design-direction-review/tasks.md +238 -0
  13. package/.openprd/changes/loop-isolated-worktree-commit/.openprd.yaml +2 -0
  14. package/.openprd/changes/loop-isolated-worktree-commit/design.md +53 -0
  15. package/.openprd/changes/loop-isolated-worktree-commit/proposal.md +38 -0
  16. package/.openprd/changes/loop-isolated-worktree-commit/specs/agent-requirements/spec.md +16 -0
  17. package/.openprd/changes/loop-isolated-worktree-commit/task-events.jsonl +22 -0
  18. package/.openprd/changes/loop-isolated-worktree-commit/tasks.md +357 -0
  19. package/.openprd/changes/openprd/.openprd.yaml +2 -0
  20. package/.openprd/changes/openprd/design.md +46 -0
  21. package/.openprd/changes/openprd/proposal.md +36 -0
  22. package/.openprd/changes/openprd/specs/agent-requirements/spec.md +16 -0
  23. package/.openprd/changes/openprd/task-events.jsonl +23 -0
  24. package/.openprd/changes/openprd/tasks.md +242 -0
  25. package/.openprd/changes/openprd-generated-change/.openprd.yaml +2 -0
  26. package/.openprd/changes/openprd-generated-change/design.md +50 -0
  27. package/.openprd/changes/openprd-generated-change/proposal.md +37 -0
  28. package/.openprd/changes/openprd-generated-change/specs/agent-requirements/spec.md +16 -0
  29. package/.openprd/changes/openprd-generated-change/task-events.jsonl +21 -0
  30. package/.openprd/changes/openprd-generated-change/tasks.md +357 -0
  31. package/.openprd/changes/pm-human-in-the-loop/.openprd.yaml +2 -0
  32. package/.openprd/changes/pm-human-in-the-loop/design.md +38 -0
  33. package/.openprd/changes/pm-human-in-the-loop/proposal.md +29 -0
  34. package/.openprd/changes/pm-human-in-the-loop/specs/agent-requirements/spec.md +16 -0
  35. package/.openprd/changes/pm-human-in-the-loop/task-events.jsonl +18 -0
  36. package/.openprd/changes/pm-human-in-the-loop/tasks.md +306 -0
  37. package/.openprd/changes/test-strategy-router/.openprd.yaml +2 -0
  38. package/.openprd/changes/test-strategy-router/design.md +65 -0
  39. package/.openprd/changes/test-strategy-router/proposal.md +45 -0
  40. package/.openprd/changes/test-strategy-router/specs/agent-requirements/spec.md +16 -0
  41. package/.openprd/changes/test-strategy-router/task-events.jsonl +1 -0
  42. package/.openprd/changes/test-strategy-router/tasks.md +132 -0
  43. package/.openprd/changes/verify-boundaries-and-historical-refresh/.openprd.yaml +2 -0
  44. package/.openprd/changes/verify-boundaries-and-historical-refresh/design.md +28 -0
  45. package/.openprd/changes/verify-boundaries-and-historical-refresh/proposal.md +23 -0
  46. package/.openprd/changes/verify-boundaries-and-historical-refresh/specs/agent-requirements/spec.md +16 -0
  47. package/.openprd/changes/verify-boundaries-and-historical-refresh/task-events.jsonl +11 -0
  48. package/.openprd/changes/verify-boundaries-and-historical-refresh/tasks.md +66 -0
  49. package/.openprd/changes/vibe-coding-dev-check/.openprd.yaml +2 -0
  50. package/.openprd/changes/vibe-coding-dev-check/design.md +37 -0
  51. package/.openprd/changes/vibe-coding-dev-check/proposal.md +28 -0
  52. package/.openprd/changes/vibe-coding-dev-check/specs/agent-requirements/spec.md +16 -0
  53. package/.openprd/changes/vibe-coding-dev-check/task-events.jsonl +18 -0
  54. package/.openprd/changes/vibe-coding-dev-check/tasks.md +306 -0
  55. package/.openprd/design/README.md +11 -6
  56. package/.openprd/design/README_EN.md +4 -1
  57. package/.openprd/design/active/asset-spec.md +6 -0
  58. package/.openprd/design/active/direction-plan.md +5 -5
  59. package/.openprd/design/active/selected-direction.md +2 -0
  60. package/.openprd/design/anti-slop.md +26 -1
  61. package/.openprd/design/assets/surface-presets.md +6 -0
  62. package/.openprd/design/checklists/ui-quality-gate.md +7 -0
  63. package/.openprd/design/lenses/frontend-lenses.md +28 -0
  64. package/.openprd/design/recipes/content-experience.md +8 -1
  65. package/.openprd/design/recipes/operational-tool.md +7 -0
  66. package/.openprd/design/recipes/product-launch.md +8 -1
  67. package/.openprd/design/templates/README.md +6 -3
  68. package/.openprd/design/templates/README_EN.md +6 -3
  69. package/.openprd/design/templates/ops-dashboard.html +8 -1
  70. package/.openprd/design/templates/product-launch.html +2 -1
  71. package/.openprd/design/themes/theme-catalog.json +23 -5
  72. package/.openprd/engagements/active/prd.md +137 -112
  73. package/.openprd/standards/config.json +7 -1
  74. package/AGENTS.md +13 -3
  75. package/README.md +127 -14
  76. package/README_EN.md +156 -13
  77. package/package.json +1 -1
  78. package/scripts/dev-check-wrapup-copy.mjs +46 -21
  79. package/skills/openprd-diagram-review/SKILL.md +27 -2
  80. package/skills/openprd-diagram-review/references/explanation-svg-patterns.md +131 -0
  81. package/skills/openprd-discovery-loop/SKILL.md +2 -2
  82. package/skills/openprd-frontend-design/SKILL.md +44 -20
  83. package/skills/openprd-frontend-design/references/design-asset-contract.md +6 -0
  84. package/skills/openprd-frontend-design/references/direction-engine.md +29 -4
  85. package/skills/openprd-harness/SKILL.md +22 -16
  86. package/skills/openprd-quality/SKILL.md +10 -8
  87. package/skills/openprd-requirement-intake/SKILL.md +2 -0
  88. package/skills/openprd-router/SKILL.md +2 -1
  89. package/skills/openprd-shared/SKILL.md +26 -16
  90. package/skills/openprd-standards/SKILL.md +4 -2
  91. package/src/agent-canonical-content.js +810 -0
  92. package/src/agent-integration.js +258 -777
  93. package/src/canvas-app-client-app.js +838 -0
  94. package/src/canvas-app-client-helpers.js +1138 -0
  95. package/src/canvas-app-styles.js +898 -0
  96. package/src/canvas-app.html.js +135 -0
  97. package/src/canvas-binding.js +414 -0
  98. package/src/canvas-codex-relay.js +430 -0
  99. package/src/canvas-i18n.js +282 -0
  100. package/src/canvas-scene.js +377 -0
  101. package/src/canvas-session-store.js +148 -0
  102. package/src/canvas-workspace.js +1264 -0
  103. package/src/cli/args.js +72 -4
  104. package/src/cli/basic-print.js +3 -0
  105. package/src/cli/canvas-print.js +106 -0
  106. package/src/cli/doctor-print.js +20 -0
  107. package/src/cli/print.js +2 -0
  108. package/src/cli/quality-commands.js +222 -0
  109. package/src/cli/quality-print.js +28 -2
  110. package/src/cli/run-print.js +5 -0
  111. package/src/cli/workflow-print.js +3 -0
  112. package/src/codex-app-server-relay.js +251 -0
  113. package/src/codex-hook-runner-template.mjs +978 -58
  114. package/src/design-starter-support.js +2 -2
  115. package/src/design-starter.js +39 -3
  116. package/src/dev-standards.js +125 -10
  117. package/src/diagram-core.js +6 -20
  118. package/src/discovery.js +2 -8
  119. package/src/docs-compact.js +125 -0
  120. package/src/execution-strategy.js +1 -1
  121. package/src/fleet.js +9 -3
  122. package/src/guide.js +227 -0
  123. package/src/html-artifacts.js +428 -7
  124. package/src/knowledge.js +45 -11
  125. package/src/language-policy.js +63 -3
  126. package/src/learning-review.js +1 -1
  127. package/src/loop.js +1 -1
  128. package/src/openprd.js +68 -131
  129. package/src/openspec/change-validate.js +2 -2
  130. package/src/openspec/constants.js +6 -7
  131. package/src/openspec/execute.js +2 -2
  132. package/src/openspec/generate.js +318 -102
  133. package/src/openspec/migration.js +168 -0
  134. package/src/openspec/paths.js +1 -22
  135. package/src/prd-core.js +1 -1
  136. package/src/quality-visual-review.js +257 -14
  137. package/src/quality.js +46 -8
  138. package/src/review-presentation.js +60 -0
  139. package/src/run-harness.js +41 -3
  140. package/src/session-evidence.js +363 -0
  141. package/src/standards.js +64 -0
  142. package/src/test-strategy.js +7 -4
  143. package/src/visual-compare-centering.js +622 -0
  144. package/src/visual-compare-core.js +1123 -0
  145. package/src/visual-compare.js +620 -698
  146. package/src/workspace-core.js +94 -4
  147. package/src/workspace-workflow.js +46 -1
@@ -0,0 +1,242 @@
1
+ # 任务
2
+
3
+ - [x] T001.01 评审生成的 spec 覆盖
4
+ - type: governance
5
+ - done: 生成的 agent-requirements spec 符合 PRD 意图
6
+ - verify: openprd change . --validate --change openprd
7
+ - test-layer: manual
8
+ - test-size: manual
9
+ - test-scope: governance
10
+ - evidence-plan: openprd change . --validate --change openprd
11
+ - upgrade-reason: 治理任务以结构校验、评审确认和变更状态证据为主
12
+
13
+ - [x] T001.02 接通界面入口、导航与页面挂载
14
+ - type: implementation
15
+ - deps: T001.01
16
+ - done: 用户可以从正确入口进入对应界面,页面挂载与状态收尾已经接通。 涉及: 需要兼容现有 loop、handoff、review-presentation 和 html-artifacts 的调用契约 等 3 项。
17
+ - verify: openprd tasks . --change openprd --item T001.02 --evidence-required
18
+ - test-layer: integration, e2e
19
+ - test-size: large
20
+ - test-scope: user-flow
21
+ - evidence-plan: 主流程自动化、截图或 visual-compare 证据 + 本任务 verify 命令
22
+ - upgrade-reason: 触达用户可见路径,需要端到端或视觉级证据
23
+
24
+ - [x] T001.03 对齐共享契约与 Host API 调用边界
25
+ - type: implementation
26
+ - deps: T001.02
27
+ - done: 共享契约、Host API 和上下游调用边界已经对齐,后续功能可以直接接线。 涉及: 需要兼容现有 loop、handoff、review-presentation 和 html-artifacts 的调用契约。
28
+ - verify: openprd tasks . --change openprd --item T001.03 --evidence-required
29
+ - test-layer: unit, integration
30
+ - test-size: medium
31
+ - test-scope: api-contract
32
+ - evidence-plan: 单元测试锁定规则 + 集成或命令行契约验证
33
+ - upgrade-reason: 触达 CLI/API/Agent 契约或生成物,需要中间层验证
34
+
35
+ - [x] T001.04 实现OpenPrd 提供可选的项目级 release/version ledger,支持记录 current version、版本状态和版本内变化项
36
+ - type: implementation
37
+ - deps: T001.03
38
+ - done: 已完成:OpenPrd 提供可选的项目级 release/version ledger,支持记录 current version、版本状态和版本内变化项
39
+ - verify: openprd tasks . --change openprd --item T001.04 --evidence-required
40
+ - test-layer: unit, integration
41
+ - test-size: medium
42
+ - test-scope: cli-contract
43
+ - evidence-plan: 单元测试锁定规则 + 集成或命令行契约验证
44
+ - upgrade-reason: 触达 CLI/API/Agent 契约或生成物,需要中间层验证
45
+
46
+ - [x] T001.05 实现现有共享变化摘要规则支持把新增、修复、优化、调整、移除等条目关联到具体项目版本
47
+ - type: implementation
48
+ - deps: T001.04
49
+ - done: 已完成:现有共享变化摘要规则支持把新增、修复、优化、调整、移除等条目关联到具体项目版本
50
+ - verify: openprd tasks . --change openprd --item T001.05 --evidence-required
51
+ - test-layer: unit, integration
52
+ - test-size: medium
53
+ - test-scope: cli-contract
54
+ - evidence-plan: 单元测试锁定规则 + 集成或命令行契约验证
55
+ - upgrade-reason: 触达 CLI/API/Agent 契约或生成物,需要中间层验证
56
+
57
+ - [x] T001.06 实现handoff 与 release notes 导出优先从项目版本轨道读取对应版本的变化条目
58
+ - type: implementation
59
+ - deps: T001.05
60
+ - done: 已完成:handoff 与 release notes 导出优先从项目版本轨道读取对应版本的变化条目
61
+ - verify: openprd tasks . --change openprd --item T001.06 --evidence-required
62
+ - test-layer: unit, integration
63
+ - test-size: medium
64
+ - test-scope: cli-contract
65
+ - evidence-plan: 单元测试锁定规则 + 集成或命令行契约验证
66
+ - upgrade-reason: 触达 CLI/API/Agent 契约或生成物,需要中间层验证
67
+
68
+ - [x] T001.07 实现当版本轨道已启用且用户通过 OpenPrd 显式执行 commit 时,commit 流可以读取当前版本号并辅助创建或更新本地版本 tag
69
+ - type: implementation
70
+ - deps: T001.06
71
+ - done: 已完成:当版本轨道已启用且用户通过 OpenPrd 显式执行 commit 时,commit 流可以读取当前版本号并辅助创建或更新本地版本 tag
72
+ - verify: openprd tasks . --change openprd --item T001.07 --evidence-required
73
+ - test-layer: unit, integration
74
+ - test-size: medium
75
+ - test-scope: cli-contract
76
+ - evidence-plan: 单元测试锁定规则 + 集成或命令行契约验证
77
+ - upgrade-reason: 触达 CLI/API/Agent 契约或生成物,需要中间层验证
78
+
79
+ - [x] T001.08 实现当用户未更新版本号时,后续变化默认继续累计到当前版本;当用户显式更新版本号后,新的变化进入下一个版本
80
+ - type: implementation
81
+ - deps: T001.07
82
+ - done: 已完成:当用户未更新版本号时,后续变化默认继续累计到当前版本;当用户显式更新版本号后,新的变化进入下一个版本
83
+ - verify: openprd tasks . --change openprd --item T001.08 --evidence-required
84
+ - test-layer: unit, integration
85
+ - test-size: medium
86
+ - test-scope: cli-contract
87
+ - evidence-plan: 单元测试锁定规则 + 集成或命令行契约验证
88
+ - upgrade-reason: 触达 CLI/API/Agent 契约或生成物,需要中间层验证
89
+
90
+ - [x] T001.09 打通主流程闭环:用户在项目里启用版本轨道后,OpenPrd 记录当前版本号,例如 0.1.23,并把后续变化条目累计到该版本下 等 4 项
91
+ - type: implementation
92
+ - deps: T001.08
93
+ - done: 主流程关键节点已经打通,用户可以按预期从入口走到结果收尾。涉及: 用户在项目里启用版本轨道后,OpenPrd 记录当前版本号,例如 0.1.23,并把后续变化条目累计到该版本下 等 4 项。
94
+ - verify: openprd tasks . --change openprd --item T001.09 --evidence-required
95
+ - test-layer: integration, e2e
96
+ - test-size: large
97
+ - test-scope: user-flow
98
+ - evidence-plan: 主流程自动化、截图或 visual-compare 证据 + 本任务 verify 命令
99
+ - upgrade-reason: 触达用户可见路径,需要端到端或视觉级证据
100
+
101
+ - [x] T001.10 验证新增项目级 release/version ledger,支持 current version、版本状态和版本内变化项存储
102
+ - type: verification
103
+ - deps: T001.09
104
+ - done: 已验证:新增项目级 release/version ledger,支持 current version、版本状态和版本内变化项存储
105
+ - verify: openprd tasks . --change openprd --item T001.10 --evidence-required
106
+ - test-layer: unit, integration
107
+ - test-size: medium
108
+ - test-scope: cli-contract
109
+ - evidence-plan: 单元测试锁定规则 + 集成或命令行契约验证
110
+ - upgrade-reason: 触达 CLI/API/Agent 契约或生成物,需要中间层验证
111
+
112
+ - [x] T001.11 验证现有变化摘要层继续复用新增、修复、优化、调整、移除等短文案动作词,并能挂到具体项目版本下
113
+ - type: verification
114
+ - deps: T001.10
115
+ - done: 已验证:现有变化摘要层继续复用新增、修复、优化、调整、移除等短文案动作词,并能挂到具体项目版本下
116
+ - verify: openprd tasks . --change openprd --item T001.11 --evidence-required
117
+ - test-layer: unit, integration
118
+ - test-size: medium
119
+ - test-scope: cli-contract
120
+ - evidence-plan: 单元测试锁定规则 + 集成或命令行契约验证
121
+ - upgrade-reason: 触达 CLI/API/Agent 契约或生成物,需要中间层验证
122
+
123
+ - [x] T001.12 验证commit 流在启用版本轨道且用户明确执行时,可以读取当前版本并辅助创建或更新本地版本 tag;同版本多次提交时 tag 可移动到最新 commit
124
+ - type: verification
125
+ - deps: T001.11
126
+ - done: 已验证:commit 流在启用版本轨道且用户明确执行时,可以读取当前版本并辅助创建或更新本地版本 tag;同版本多次提交时 tag 可移动到最新 commit
127
+ - verify: openprd tasks . --change openprd --item T001.12 --evidence-required
128
+ - test-layer: unit, integration
129
+ - test-size: medium
130
+ - test-scope: cli-contract
131
+ - evidence-plan: 单元测试锁定规则 + 集成或命令行契约验证
132
+ - upgrade-reason: 触达 CLI/API/Agent 契约或生成物,需要中间层验证
133
+
134
+ - [x] T001.13 验证README、skills、handoff/release 导出和测试同步说明版本轨道与 tag 协同规则
135
+ - type: verification
136
+ - deps: T001.12
137
+ - done: 已验证:README、skills、handoff/release 导出和测试同步说明版本轨道与 tag 协同规则
138
+ - verify: openprd tasks . --change openprd --item T001.13 --evidence-required
139
+ - test-layer: manual
140
+ - test-size: manual
141
+ - test-scope: docs
142
+ - evidence-plan: openprd tasks . --change openprd --item T001.13 --evidence-required
143
+ - upgrade-reason: 文档任务以标准校验和人工审查证据为主
144
+
145
+ - [x] T001.14 回归非功能约束:版本轨道是可选辅助信息,不应破坏现有没有版本管理习惯的项目流程 等 2 项
146
+ - type: verification
147
+ - deps: T001.13
148
+ - done: 非功能约束已经回归确认。涉及: 版本轨道是可选辅助信息,不应破坏现有没有版本管理习惯的项目流程 等 2 项。
149
+ - verify: openprd tasks . --change openprd --item T001.14 --evidence-required
150
+ - test-layer: unit, integration
151
+ - test-size: medium
152
+ - test-scope: cli-contract
153
+ - evidence-plan: 单元测试锁定规则 + 集成或命令行契约验证
154
+ - upgrade-reason: 触达 CLI/API/Agent 契约或生成物,需要中间层验证
155
+
156
+ - [x] T001.15 回归非功能约束:现有显式 commit message、自定义 handoff 内容和已有版本体系优先级不能被新能力静默覆盖 等 2 项
157
+ - type: verification
158
+ - deps: T001.14
159
+ - done: 非功能约束已经回归确认。涉及: 现有显式 commit message、自定义 handoff 内容和已有版本体系优先级不能被新能力静默覆盖 等 2 项。
160
+ - verify: openprd tasks . --change openprd --item T001.15 --evidence-required
161
+ - test-layer: unit, integration
162
+ - test-size: medium
163
+ - test-scope: cli-contract
164
+ - evidence-plan: 单元测试锁定规则 + 集成或命令行契约验证
165
+ - upgrade-reason: 触达 CLI/API/Agent 契约或生成物,需要中间层验证
166
+
167
+ - [x] T001.16 回归边界条件与失败处理:边界情况:项目可能已经有自己的一套版本号规则,OpenPrd 需要允许手动修正当前版本号,而不是强推默认策略 等 8 项
168
+ - type: verification
169
+ - deps: T001.15
170
+ - done: 边界条件与失败处理已经回归确认。涉及: 边界情况:项目可能已经有自己的一套版本号规则,OpenPrd 需要允许手动修正当前版本号,而不是强推默认策略 等 8 项。
171
+ - verify: openprd tasks . --change openprd --item T001.16 --evidence-required
172
+ - test-layer: unit, integration
173
+ - test-size: medium
174
+ - test-scope: cli-contract
175
+ - evidence-plan: 单元测试锁定规则 + 集成或命令行契约验证
176
+ - upgrade-reason: 触达 CLI/API/Agent 契约或生成物,需要中间层验证
177
+
178
+ - [x] T001.17 验证成本与额度护栏
179
+ - type: verification
180
+ - deps: T001.16
181
+ - done: 已验证免费、试用或低权限用户不能绕过额度、并发、频率或总量限制
182
+ - verify: openprd tasks . --change openprd --item T001.17 --evidence-required
183
+ - test-layer: integration, security
184
+ - test-size: medium
185
+ - test-scope: security
186
+ - evidence-plan: 正向路径 + 越权、额度、并发或敏感信息负向验证
187
+ - upgrade-reason: 触达权限、安全、成本或滥用边界,需要至少集成级证据
188
+
189
+ - [x] T001.18 验证滥用与越权路径
190
+ - type: verification
191
+ - deps: T001.17
192
+ - done: 已覆盖重复请求、并发请求、越权身份和异常恢复等负向场景
193
+ - verify: openprd tasks . --change openprd --item T001.18 --evidence-required
194
+ - test-layer: integration, security
195
+ - test-size: medium
196
+ - test-scope: security
197
+ - evidence-plan: 正向路径 + 越权、额度、并发或敏感信息负向验证
198
+ - upgrade-reason: 触达权限、安全、成本或滥用边界,需要至少集成级证据
199
+
200
+ - [x] T001.19 验证成本监控、报警和止损
201
+ - type: verification
202
+ - deps: T001.18
203
+ - done: 已确认用量或成本信号、报警阈值和人工/自动止损动作可执行
204
+ - verify: openprd tasks . --change openprd --item T001.19 --evidence-required
205
+ - test-layer: integration, security
206
+ - test-size: medium
207
+ - test-scope: security
208
+ - evidence-plan: 正向路径 + 越权、额度、并发或敏感信息负向验证
209
+ - upgrade-reason: 触达权限、安全、成本或滥用边界,需要至少集成级证据
210
+
211
+ - [x] T001.20 维护 docs/basic 项目基础文档
212
+ - type: documentation
213
+ - deps: T001.19
214
+ - done: 已检查 docs/basic 是否缺失或因本次需求、流程、结构、依赖、产品行为变化而过期;若涉及后端、脚本、Agent 或工具链变更,已同步评估 CLI 与 API 接入面,并在 backend-structure.md 中记录事实或不适用原因;需要更新的基础文档已同步
215
+ - verify: openprd standards . --verify
216
+ - test-layer: manual
217
+ - test-size: manual
218
+ - test-scope: docs
219
+ - evidence-plan: openprd standards . --verify
220
+ - upgrade-reason: 文档任务以标准校验和人工审查证据为主
221
+
222
+ - [x] T001.21 更新文件说明书和文件夹 README
223
+ - type: documentation
224
+ - deps: T001.20
225
+ - done: 本次变更涉及的文件说明书和文件夹 README 已检查;缺失的已补齐,过期的已更新
226
+ - verify: openprd standards . --verify
227
+ - test-layer: manual
228
+ - test-size: manual
229
+ - test-scope: docs
230
+ - evidence-plan: openprd standards . --verify
231
+ - upgrade-reason: 文档任务以标准校验和人工审查证据为主
232
+
233
+ - [x] T001.22 运行 OpenPrd spec 校验
234
+ - type: governance
235
+ - deps: T001.21
236
+ - done: 生成的 change 通过 OpenPrd 校验
237
+ - verify: openprd change . --validate --change openprd
238
+ - test-layer: manual
239
+ - test-size: manual
240
+ - test-scope: governance
241
+ - evidence-plan: openprd change . --validate --change openprd
242
+ - upgrade-reason: 治理任务以结构校验、评审确认和变更状态证据为主
@@ -0,0 +1,2 @@
1
+ schema: openprd.change.v1
2
+ generatedFrom: v0014
@@ -0,0 +1,50 @@
1
+ # 设计
2
+
3
+ ## 背景
4
+
5
+ 对标 Cowart 已验证“标注改图闭环 + 画布双向结构化工具 + 生图尺寸契约 + 具名 skill 唤起”四件能力能显著降低人机视觉协同成本;OpenPrd 0.1.18 刚落地生图路由,正好把尺寸契约与路由串起来。
6
+
7
+ ## 目标
8
+
9
+ - 用户在画布上标注后,一句话就能让 Agent 读懂标注并生成修订图放回原图旁
10
+ - Agent 能结构化读取画布选区并把图片锚定回填
11
+ - 生图请求自动携带占位卡尺寸契约
12
+ - 用户能用自然语言稳定唤起画布协同
13
+
14
+ ## 范围
15
+
16
+ - canvas-workspace.js 新增选区状态持久化与查询 API
17
+ - canvas-workspace.js 新增锚定插图 API(anchorShapeId/placement/replaceHolder)
18
+ - canvas-app.html.js 标注修改请求导出(带元数据)与选区上报
19
+ - 生图占位卡尺寸契约写入 handoff 与生图指引
20
+ - codex-hook-runner-template.mjs 画布协同意图识别与引导注入
21
+ - agent-canonical-content.js 画布协同指引
22
+ - docs/basic 与 README 同步
23
+
24
+ ## 约束
25
+
26
+ - 沿用 Excalidraw embed 与现有 canvas-sessions 文件存储
27
+ - Node 内置测试框架
28
+ - 不新增外部依赖
29
+ - 不写入敏感信息
30
+ - 画布数据留在本地项目目录
31
+ - 依赖 openprd canvas 本地服务
32
+ - 依赖 0.1.18 生图路由协议
33
+
34
+ ## 业务护栏
35
+
36
+ - 成本来源: 主要成本是生图调用次数与画布服务本地资源
37
+ - 额度限制: 首版按单画布会话协同,不开放批量自动改图
38
+ - 滥用防护: insert-image 校验锚点与文件存在性,避免脏写
39
+ - 滥用防护: API 仅本地回环访问
40
+ - 监控信号: ops.json handoff 记录数、回填成功率、API 错误率
41
+ - 报警阈值: 回填连续失败时提示用户检查画布服务状态
42
+ - 止损动作: 异常时停止自动回填,保留原画布快照并回退到手动流程
43
+
44
+ ## 风险与开放问题
45
+
46
+ - 假设: 用户接受标注截图作为修改指令载体
47
+ - 假设: Excalidraw selection 数据足以表达锚定需求
48
+ - 风险: Excalidraw 与 tldraw 数据模型差异导致锚定语义需要适配
49
+ - 风险: 标注文字识别依赖 Agent 视觉能力
50
+ - 问题: 后续是否把画布协同扩展为独立 MCP server 另行评估
@@ -0,0 +1,37 @@
1
+ # 画布协同闭环:标注改图、双向结构化工具、尺寸契约与唤起机制
2
+
3
+ ## 背景与原因
4
+
5
+ OpenPrd 画布目前只有单向的“发送给 Codex”整体交接:Agent 不能结构化读取用户在画布上的选区与标注,不能把生成图片精准放回画布锚点旁,标注修改意图靠用户口述或手动截图传递,协同链路断在“人标注完之后”这一步。
6
+
7
+ ## 变更内容
8
+
9
+ - canvas-workspace.js 新增选区状态持久化与查询 API
10
+ - canvas-workspace.js 新增锚定插图 API(anchorShapeId/placement/replaceHolder)
11
+ - canvas-app.html.js 标注修改请求导出(带元数据)与选区上报
12
+ - 生图占位卡尺寸契约写入 handoff 与生图指引
13
+ - codex-hook-runner-template.mjs 画布协同意图识别与引导注入
14
+ - agent-canonical-content.js 画布协同指引
15
+ - docs/basic 与 README 同步
16
+ - 选区状态随画布保存并可查询
17
+ - 插图 API 支持 left/right/below 摆放与 holder 替换
18
+ - 标注导出携带 annotationEdit 与源图形 ID 元数据
19
+ - 生图占位卡 handoff 记录携带宽高与比例契约
20
+ - hook 识别画布协同意图并注入闭环指引
21
+ - canvas 服务新增 GET /api/selection 与 POST /api/insert-image 且测试通过
22
+ - 标注导出带 annotationEdit 元数据并能被 hook 指引消费
23
+ - hook 对画布协同意图注入引导语
24
+
25
+ ## 能力范围
26
+
27
+ - `agent-requirements`: 画布协同闭环:标注改图、双向结构化工具、尺寸契约与唤起机制 需求。
28
+
29
+ ## 影响范围
30
+
31
+ - 主要用户: 使用 OpenPrd 画布做视觉协同的开发者与产品设计协作者
32
+ - 成本来源: 主要成本是生图调用次数与画布服务本地资源
33
+ - 额度限制: 首版按单画布会话协同,不开放批量自动改图
34
+ - 依赖: 依赖 openprd canvas 本地服务
35
+ - 依赖: 依赖 0.1.18 生图路由协议
36
+ - 风险: Excalidraw 与 tldraw 数据模型差异导致锚定语义需要适配
37
+ - 风险: 标注文字识别依赖 Agent 视觉能力
@@ -0,0 +1,16 @@
1
+ ## 新增需求
2
+
3
+ ### 需求:画布协同闭环:标注改图、双向结构化工具、尺寸契约与唤起机制
4
+ OpenPrd 画布目前只有单向的“发送给 Codex”整体交接:Agent 不能结构化读取用户在画布上的选区与标注,不能把生成图片精准放回画布锚点旁,标注修改意图靠用户口述或手动截图传递,协同链路断在“人标注完之后”这一步。
5
+
6
+ #### 场景:主流程成功
7
+ - **当** 用户在画布圈选原图并批注,点“标注修改请求”,Agent 读标注生成修订图并放回原图右侧
8
+ - **则** canvas 服务新增 GET /api/selection 与 POST /api/insert-image 且测试通过
9
+
10
+ #### 场景:边界情况保持可见
11
+ - **当** 无选区时 selection API 返回空且 Agent 收到明确提示
12
+ - **则** 产品应保持该情况明确可见,以支持实现和验证
13
+
14
+ #### 场景:失败模式得到处理
15
+ - **当** 画布服务未启动时 API 调用失败要提示先运行 openprd canvas
16
+ - **则** 产品应提供有边界且可评审的结果
@@ -0,0 +1,21 @@
1
+ {"version":1,"at":"2026-07-07 00:09:23","changeId":"openprd-generated-change","action":"advance","taskId":"T001.01","taskTitle":"评审生成的 spec 覆盖","ok":true,"verify":null,"evidence":".openprd/harness/test-reports/canvas-collaboration-annotation-loop-20260707.md","notes":"spec 覆盖已评审,change --validate 通过"}
2
+ {"version":1,"at":"2026-07-07 00:09:33","changeId":"openprd-generated-change","action":"advance","taskId":"T001.02","taskTitle":"对齐共享契约与 Host API 调用边界","ok":true,"verify":null,"evidence":".openprd/harness/test-reports/canvas-collaboration-annotation-loop-20260707.md","notes":"画布协同实现与回归完成,详见任务级测试报告"}
3
+ {"version":1,"at":"2026-07-07 00:09:33","changeId":"openprd-generated-change","action":"advance","taskId":"T001.03","taskTitle":"接通界面入口、导航与页面挂载","ok":true,"verify":null,"evidence":".openprd/harness/test-reports/canvas-collaboration-annotation-loop-20260707.md","notes":"画布协同实现与回归完成,详见任务级测试报告"}
4
+ {"version":1,"at":"2026-07-07 00:09:33","changeId":"openprd-generated-change","action":"advance","taskId":"T001.04","taskTitle":"实现选区状态随画布保存并可查询","ok":true,"verify":null,"evidence":".openprd/harness/test-reports/canvas-collaboration-annotation-loop-20260707.md","notes":"画布协同实现与回归完成,详见任务级测试报告"}
5
+ {"version":1,"at":"2026-07-07 00:09:33","changeId":"openprd-generated-change","action":"advance","taskId":"T001.05","taskTitle":"实现插图 API 支持 left/right/below 摆放与 holder 替换","ok":true,"verify":null,"evidence":".openprd/harness/test-reports/canvas-collaboration-annotation-loop-20260707.md","notes":"画布协同实现与回归完成,详见任务级测试报告"}
6
+ {"version":1,"at":"2026-07-07 00:09:34","changeId":"openprd-generated-change","action":"advance","taskId":"T001.06","taskTitle":"实现标注导出携带 annotationEdit 与源图形 ID 元数据","ok":true,"verify":null,"evidence":".openprd/harness/test-reports/canvas-collaboration-annotation-loop-20260707.md","notes":"画布协同实现与回归完成,详见任务级测试报告"}
7
+ {"version":1,"at":"2026-07-07 00:09:34","changeId":"openprd-generated-change","action":"advance","taskId":"T001.07","taskTitle":"实现生图占位卡 handoff 记录携带宽高与比例契约","ok":true,"verify":null,"evidence":".openprd/harness/test-reports/canvas-collaboration-annotation-loop-20260707.md","notes":"画布协同实现与回归完成,详见任务级测试报告"}
8
+ {"version":1,"at":"2026-07-07 00:09:34","changeId":"openprd-generated-change","action":"advance","taskId":"T001.08","taskTitle":"实现hook 识别画布协同意图并注入闭环指引","ok":true,"verify":null,"evidence":".openprd/harness/test-reports/canvas-collaboration-annotation-loop-20260707.md","notes":"画布协同实现与回归完成,详见任务级测试报告"}
9
+ {"version":1,"at":"2026-07-07 00:09:34","changeId":"openprd-generated-change","action":"advance","taskId":"T001.09","taskTitle":"打通主流程闭环:用户在画布圈选原图并批注,点“标注修改请求”,Agent 读标注生成修订图并放回原图右侧 等 4 项","ok":true,"verify":null,"evidence":".openprd/harness/test-reports/canvas-collaboration-annotation-loop-20260707.md","notes":"画布协同实现与回归完成,详见任务级测试报告"}
10
+ {"version":1,"at":"2026-07-07 00:09:34","changeId":"openprd-generated-change","action":"advance","taskId":"T001.10","taskTitle":"验证canvas 服务新增 GET /api/selection 与 POST /api/insert-image 且测试通过","ok":true,"verify":null,"evidence":".openprd/harness/test-reports/canvas-collaboration-annotation-loop-20260707.md","notes":"画布协同实现与回归完成,详见任务级测试报告"}
11
+ {"version":1,"at":"2026-07-07 00:09:34","changeId":"openprd-generated-change","action":"advance","taskId":"T001.11","taskTitle":"验证标注导出带 annotationEdit 元数据并能被 hook 指引消费","ok":true,"verify":null,"evidence":".openprd/harness/test-reports/canvas-collaboration-annotation-loop-20260707.md","notes":"画布协同实现与回归完成,详见任务级测试报告"}
12
+ {"version":1,"at":"2026-07-07 00:09:34","changeId":"openprd-generated-change","action":"advance","taskId":"T001.12","taskTitle":"验证hook 对画布协同意图注入引导语","ok":true,"verify":null,"evidence":".openprd/harness/test-reports/canvas-collaboration-annotation-loop-20260707.md","notes":"画布协同实现与回归完成,详见任务级测试报告"}
13
+ {"version":1,"at":"2026-07-07 00:09:35","changeId":"openprd-generated-change","action":"advance","taskId":"T001.13","taskTitle":"回归非功能约束:界面文案面向普通用户 / API 只监听本地回环地址","ok":true,"verify":null,"evidence":".openprd/harness/test-reports/canvas-collaboration-annotation-loop-20260707.md","notes":"画布协同实现与回归完成,详见任务级测试报告"}
14
+ {"version":1,"at":"2026-07-07 00:09:35","changeId":"openprd-generated-change","action":"advance","taskId":"T001.14","taskTitle":"回归非功能约束:新增代码有集成测试覆盖","ok":true,"verify":null,"evidence":".openprd/harness/test-reports/canvas-collaboration-annotation-loop-20260707.md","notes":"画布协同实现与回归完成,详见任务级测试报告"}
15
+ {"version":1,"at":"2026-07-07 00:09:35","changeId":"openprd-generated-change","action":"advance","taskId":"T001.15","taskTitle":"回归边界条件与失败处理:边界情况:无选区时 selection API 返回空且 Agent 收到明确提示 等 5 项","ok":true,"verify":null,"evidence":".openprd/harness/test-reports/canvas-collaboration-annotation-loop-20260707.md","notes":"画布协同实现与回归完成,详见任务级测试报告"}
16
+ {"version":1,"at":"2026-07-07 00:09:35","changeId":"openprd-generated-change","action":"advance","taskId":"T001.16","taskTitle":"验证成本与额度护栏","ok":true,"verify":null,"evidence":".openprd/harness/test-reports/canvas-collaboration-annotation-loop-20260707.md","notes":"画布协同实现与回归完成,详见任务级测试报告"}
17
+ {"version":1,"at":"2026-07-07 00:09:35","changeId":"openprd-generated-change","action":"advance","taskId":"T001.17","taskTitle":"验证滥用与越权路径","ok":true,"verify":null,"evidence":".openprd/harness/test-reports/canvas-collaboration-annotation-loop-20260707.md","notes":"画布协同实现与回归完成,详见任务级测试报告"}
18
+ {"version":1,"at":"2026-07-07 00:09:35","changeId":"openprd-generated-change","action":"advance","taskId":"T001.18","taskTitle":"验证成本监控、报警和止损","ok":true,"verify":null,"evidence":".openprd/harness/test-reports/canvas-collaboration-annotation-loop-20260707.md","notes":"画布协同实现与回归完成,详见任务级测试报告"}
19
+ {"version":1,"at":"2026-07-07 00:09:35","changeId":"openprd-generated-change","action":"advance","taskId":"T001.19","taskTitle":"维护 docs/basic 项目基础文档","ok":true,"verify":null,"evidence":".openprd/harness/test-reports/canvas-collaboration-annotation-loop-20260707.md","notes":"画布协同实现与回归完成,详见任务级测试报告"}
20
+ {"version":1,"at":"2026-07-07 00:09:36","changeId":"openprd-generated-change","action":"advance","taskId":"T001.20","taskTitle":"更新文件说明书和文件夹 README","ok":true,"verify":null,"evidence":".openprd/harness/test-reports/canvas-collaboration-annotation-loop-20260707.md","notes":"画布协同实现与回归完成,详见任务级测试报告"}
21
+ {"version":1,"at":"2026-07-07 00:09:36","changeId":"openprd-generated-change","action":"advance","taskId":"T001.21","taskTitle":"运行 OpenPrd spec 校验","ok":true,"verify":null,"evidence":".openprd/harness/test-reports/canvas-collaboration-annotation-loop-20260707.md","notes":"画布协同实现与回归完成,详见任务级测试报告"}