@openprd/cli 0.1.18 → 0.1.21

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 (118) hide show
  1. package/.openprd/changes/openprd-control-plane-v020/.openprd.yaml +2 -0
  2. package/.openprd/changes/openprd-control-plane-v020/design.md +78 -0
  3. package/.openprd/changes/openprd-control-plane-v020/proposal.md +54 -0
  4. package/.openprd/changes/openprd-control-plane-v020/specs/agent-requirements/spec.md +16 -0
  5. package/.openprd/changes/openprd-control-plane-v020/task-events.jsonl +27 -0
  6. package/.openprd/changes/openprd-control-plane-v020/tasks-002.md +35 -0
  7. package/.openprd/changes/openprd-control-plane-v020/tasks.md +427 -0
  8. package/.openprd/changes/openprd-generated-change/.openprd.yaml +2 -0
  9. package/.openprd/changes/openprd-generated-change/design.md +50 -0
  10. package/.openprd/changes/openprd-generated-change/proposal.md +37 -0
  11. package/.openprd/changes/openprd-generated-change/specs/agent-requirements/spec.md +16 -0
  12. package/.openprd/changes/openprd-generated-change/task-events.jsonl +21 -0
  13. package/.openprd/changes/openprd-generated-change/tasks.md +357 -0
  14. package/.openprd/changes/remove-session-tracking-humane-approval/.openprd.yaml +2 -0
  15. package/.openprd/changes/remove-session-tracking-humane-approval/design.md +52 -0
  16. package/.openprd/changes/remove-session-tracking-humane-approval/proposal.md +35 -0
  17. package/.openprd/changes/remove-session-tracking-humane-approval/specs/agent-requirements/spec.md +16 -0
  18. package/.openprd/changes/remove-session-tracking-humane-approval/task-events.jsonl +1 -0
  19. package/.openprd/changes/remove-session-tracking-humane-approval/tasks.md +170 -0
  20. package/.openprd/design/active/asset-spec.md +19 -14
  21. package/.openprd/design/active/direction-plan.md +19 -3
  22. package/.openprd/design/active/facts-sheet.md +16 -7
  23. package/.openprd/design/active/image-preflight.md +6 -5
  24. package/.openprd/design/active/review-studio-v020-directions/compare-plan.json +34 -0
  25. package/.openprd/design/active/review-studio-v020-directions/contact-sheet.jpg +0 -0
  26. package/.openprd/design/active/review-studio-v020-directions/crops/01.png +0 -0
  27. package/.openprd/design/active/review-studio-v020-directions/crops/02.png +0 -0
  28. package/.openprd/design/active/review-studio-v020-directions/crops/03.png +0 -0
  29. package/.openprd/design/active/review-studio-v020-directions/focus-board.template.json +69 -0
  30. package/.openprd/design/active/review-studio-v020-directions/parallel-board.template.json +45 -0
  31. package/.openprd/design/active/review-studio-v020-directions/reference-set.json +143 -0
  32. package/.openprd/design/active/review-studio-v020-directions/source.png +0 -0
  33. package/.openprd/design/active/selected-direction.md +23 -9
  34. package/.openprd/engagements/active/control-plane-architecture.json +203 -0
  35. package/.openprd/engagements/active/control-plane-intake.json +418 -0
  36. package/.openprd/engagements/active/prd.md +186 -100
  37. package/.openprd/engagements/active/review-presentation-v0018.json +176 -0
  38. package/.openprd/i18n-config.json +12 -0
  39. package/.openprd/ledger/events.jsonl +6 -0
  40. package/.openprd/ledger/heads/ebea1a71a9daa566f1c91b53.json +10 -0
  41. package/.openprd/manifest.json +21 -0
  42. package/AGENTS.md +1 -0
  43. package/README.md +22 -0
  44. package/README_EN.md +27 -0
  45. package/package.json +1 -1
  46. package/skills/openprd-frontend-design/SKILL.md +16 -0
  47. package/skills/openprd-harness/SKILL.md +1 -1
  48. package/skills/openprd-quality/SKILL.md +1 -1
  49. package/skills/openprd-requirement-intake/SKILL.md +1 -1
  50. package/skills/openprd-shared/SKILL.md +1 -1
  51. package/src/adapters/adapter-spi.js +193 -0
  52. package/src/adapters/capability-envelope.js +98 -0
  53. package/src/adapters/event-normalizer.js +55 -0
  54. package/src/adapters/index.js +4 -0
  55. package/src/adapters/install-safety.js +249 -0
  56. package/src/agent-canonical-content.js +6 -2
  57. package/src/agent-integration.js +147 -42
  58. package/src/canvas-app-client-app.js +838 -0
  59. package/src/canvas-app-client-helpers.js +1138 -0
  60. package/src/canvas-app-styles.js +898 -0
  61. package/src/canvas-app.html.js +6 -2781
  62. package/src/canvas-binding.js +414 -0
  63. package/src/canvas-codex-relay.js +430 -0
  64. package/src/canvas-i18n.js +8 -0
  65. package/src/canvas-scene.js +377 -0
  66. package/src/canvas-session-store.js +148 -0
  67. package/src/canvas-workspace.js +59 -1066
  68. package/src/cli/args.js +63 -4
  69. package/src/cli/gate-print.js +17 -0
  70. package/src/cli/quality-commands.js +18 -0
  71. package/src/cli/quality-print.js +10 -0
  72. package/src/cli/runtime-print.js +24 -0
  73. package/src/codex-hook-runner-template.mjs +87 -77
  74. package/src/codex-runtime.js +48 -5
  75. package/src/context/cache.js +245 -0
  76. package/src/context/compiler.js +438 -0
  77. package/src/context/constants.js +30 -0
  78. package/src/context/index.js +39 -0
  79. package/src/context/redaction.js +84 -0
  80. package/src/context/stable.js +69 -0
  81. package/src/context/telemetry.js +42 -0
  82. package/src/dev-standards.js +57 -0
  83. package/src/fleet.js +112 -95
  84. package/src/gates/index.js +2 -0
  85. package/src/gates/scoped-gates.js +256 -0
  86. package/src/gates/store.js +126 -0
  87. package/src/gates/workspace.js +41 -0
  88. package/src/html-artifacts.js +725 -28
  89. package/src/kernel/atomic-store.js +299 -0
  90. package/src/kernel/event-envelope.js +166 -0
  91. package/src/kernel/index.js +4 -0
  92. package/src/kernel/project-ledger.js +467 -0
  93. package/src/kernel/project-manifest.js +205 -0
  94. package/src/knowledge-v3/index.js +1 -0
  95. package/src/knowledge-v3/lifecycle.js +290 -0
  96. package/src/knowledge.js +14 -7
  97. package/src/openprd.js +71 -2
  98. package/src/review-model.js +413 -0
  99. package/src/review-presentation.js +1 -1
  100. package/src/run-harness.js +431 -37
  101. package/src/runtime/cli_runtime_README.md +28 -0
  102. package/src/runtime/errors.js +66 -0
  103. package/src/runtime/index.js +44 -0
  104. package/src/runtime/lane-schema.js +141 -0
  105. package/src/runtime/lane-store.js +279 -0
  106. package/src/runtime/task-runtime.js +449 -0
  107. package/src/runtime/workspace.js +179 -0
  108. package/src/runtime/write-set.js +206 -0
  109. package/src/session-binding.js +16 -3
  110. package/src/session-registry.js +59 -1
  111. package/src/upgrade/fleet-mutation.js +166 -0
  112. package/src/upgrade/fleet-transaction.js +398 -0
  113. package/src/upgrade/transaction-store.js +416 -0
  114. package/src/visual-compare-core.js +66 -27
  115. package/src/visual-compare.js +18 -12
  116. package/src/workspace-core.js +109 -7
  117. package/src/workspace-registry.js +39 -1
  118. package/src/workspace-workflow.js +18 -15
@@ -0,0 +1,427 @@
1
+ # 任务
2
+
3
+ - [x] T001.01 评审生成的 spec 覆盖
4
+ - type: governance
5
+ - done: 生成的 agent-requirements spec 符合 PRD 意图
6
+ - verify: openprd change . --validate --change openprd-control-plane-v020
7
+ - test-layer: manual
8
+ - test-size: manual
9
+ - test-scope: governance
10
+ - evidence-plan: openprd change . --validate --change openprd-control-plane-v020
11
+ - upgrade-reason: 治理任务以结构校验、评审确认和变更状态证据为主
12
+ - execution-mode: serial
13
+ - parallel-group: governance
14
+ - write-scope: .openprd/changes/**, .openprd/**
15
+ - owner-role: main-agent
16
+ - local-verify: openprd change . --validate --change openprd-control-plane-v020
17
+ - integration-owner: main-agent
18
+
19
+ - [x] T001.02 对齐共享契约与 Host API 调用边界
20
+ - type: implementation
21
+ - deps: T001.01
22
+ - done: 共享契约、Host API 和上下游调用边界已经对齐,后续功能可以直接接线。 涉及: 现有 OpenPrd CLI、skills、hooks、workspace schema、review renderer、quality/sta 等 2 项。
23
+ - verify: openprd tasks . --change openprd-control-plane-v020 --item T001.02 --evidence-required
24
+ - test-layer: integration, e2e
25
+ - test-size: large
26
+ - test-scope: visual-flow
27
+ - evidence-plan: 主流程自动化、截图或 visual-compare 证据 + 本任务 verify 命令;轻量 UI 可视优化也需要 before/after、verification-board 或 alignment-board 证据,同构卡片/列表要覆盖内部内容槽位
28
+ - upgrade-reason: 触达用户可见路径,需要端到端或视觉级证据;轻量 UI 可视优化不能只用构建或 dev-check 收口
29
+ - execution-mode: parallel-workers
30
+ - parallel-group: contracts
31
+ - write-scope: src/**, test/**, docs/basic/backend-structure.md
32
+ - owner-role: worker
33
+ - local-verify: openprd tasks . --change openprd-control-plane-v020 --item T001.02 --evidence-required
34
+ - integration-owner: main-agent
35
+
36
+ - [x] T001.03 接通界面入口、导航与页面挂载
37
+ - type: implementation
38
+ - deps: T001.02
39
+ - done: 用户可以从正确入口进入对应界面,页面挂载与状态收尾已经接通。 涉及: Review Studio 改动必须复用现有视觉系统并提供前后、焦点、验证与对齐证据 等 2 项。
40
+ - verify: openprd tasks . --change openprd-control-plane-v020 --item T001.03 --evidence-required
41
+ - test-layer: integration, e2e
42
+ - test-size: large
43
+ - test-scope: visual-flow
44
+ - evidence-plan: 主流程自动化、截图或 visual-compare 证据 + 本任务 verify 命令;轻量 UI 可视优化也需要 before/after、verification-board 或 alignment-board 证据,同构卡片/列表要覆盖内部内容槽位
45
+ - upgrade-reason: 触达用户可见路径,需要端到端或视觉级证据;轻量 UI 可视优化不能只用构建或 dev-check 收口
46
+ - execution-mode: parallel-workers
47
+ - parallel-group: verification
48
+ - write-scope: test/**, .openprd/harness/test-reports/**
49
+ - owner-role: worker
50
+ - local-verify: openprd tasks . --change openprd-control-plane-v020 --item T001.03 --evidence-required
51
+ - integration-owner: main-agent
52
+
53
+ - [x] T001.04 提供 project manifest、ledger append/read/head/verify/rebuild、projection replay API
54
+ - type: implementation
55
+ - deps: T001.03
56
+ - done: 已完成:提供 project manifest、ledger append/read/head/verify/rebuild、projection replay API
57
+ - verify: openprd tasks . --change openprd-control-plane-v020 --item T001.04 --evidence-required
58
+ - test-layer: unit, integration
59
+ - test-size: medium
60
+ - test-scope: api-contract
61
+ - evidence-plan: 单元测试锁定规则 + 集成或命令行契约验证
62
+ - upgrade-reason: 触达 CLI/API/Agent 契约或生成物,需要中间层验证
63
+ - execution-mode: parallel-workers
64
+ - parallel-group: verification
65
+ - write-scope: test/**, .openprd/harness/test-reports/**
66
+ - owner-role: worker
67
+ - local-verify: openprd tasks . --change openprd-control-plane-v020 --item T001.04 --evidence-required
68
+ - integration-owner: main-agent
69
+
70
+ - [x] T001.05 提供 task claim/heartbeat/release、lease recovery、write-set conflict、lane binding API 与 CLI
71
+ - type: implementation
72
+ - deps: T001.04
73
+ - done: 已完成:提供 task claim/heartbeat/release、lease recovery、write-set conflict、lane binding API 与 CLI
74
+ - verify: openprd tasks . --change openprd-control-plane-v020 --item T001.05 --evidence-required
75
+ - test-layer: unit, integration
76
+ - test-size: medium
77
+ - test-scope: api-contract
78
+ - evidence-plan: 单元测试锁定规则 + 集成或命令行契约验证
79
+ - upgrade-reason: 触达 CLI/API/Agent 契约或生成物,需要中间层验证
80
+ - execution-mode: parallel-workers
81
+ - parallel-group: contracts
82
+ - write-scope: src/**, test/**, docs/basic/backend-structure.md
83
+ - owner-role: worker
84
+ - local-verify: openprd tasks . --change openprd-control-plane-v020 --item T001.05 --evidence-required
85
+ - integration-owner: main-agent
86
+
87
+ - [x] T001.06 提供 context compile/diff/cache/render/reference API,保持 run --context 兼容入口
88
+ - type: implementation
89
+ - deps: T001.05
90
+ - done: 已完成:提供 context compile/diff/cache/render/reference API,保持 run --context 兼容入口
91
+ - verify: openprd tasks . --change openprd-control-plane-v020 --item T001.06 --evidence-required
92
+ - test-layer: unit, integration
93
+ - test-size: medium
94
+ - test-scope: api-contract
95
+ - evidence-plan: 单元测试锁定规则 + 集成或命令行契约验证
96
+ - upgrade-reason: 触达 CLI/API/Agent 契约或生成物,需要中间层验证
97
+ - execution-mode: parallel-workers
98
+ - parallel-group: contracts
99
+ - write-scope: src/**, test/**, docs/basic/backend-structure.md
100
+ - owner-role: worker
101
+ - local-verify: openprd tasks . --change openprd-control-plane-v020 --item T001.06 --evidence-required
102
+ - integration-owner: main-agent
103
+
104
+ - [x] T001.07 提供 scoped gate/evidence evaluation 与明确 approval ID 绑定
105
+ - type: implementation
106
+ - deps: T001.06
107
+ - done: 已完成:提供 scoped gate/evidence evaluation 与明确 approval ID 绑定
108
+ - verify: openprd tasks . --change openprd-control-plane-v020 --item T001.07 --evidence-required
109
+ - test-layer: unit, integration
110
+ - test-size: medium
111
+ - test-scope: cli-contract
112
+ - evidence-plan: 单元测试锁定规则 + 集成或命令行契约验证
113
+ - upgrade-reason: 触达 CLI/API/Agent 契约或生成物,需要中间层验证
114
+ - execution-mode: parallel-workers
115
+ - parallel-group: implementation
116
+ - write-scope: src/**, test/**
117
+ - owner-role: worker
118
+ - local-verify: openprd tasks . --change openprd-control-plane-v020 --item T001.07 --evidence-required
119
+ - integration-owner: main-agent
120
+
121
+ - [x] T001.08 提供 ReviewModel 业务/工程投影与稳定确认合同
122
+ - type: implementation
123
+ - deps: T001.07
124
+ - done: 已完成:提供 ReviewModel 业务/工程投影与稳定确认合同
125
+ - verify: openprd tasks . --change openprd-control-plane-v020 --item T001.08 --evidence-required
126
+ - test-layer: unit, integration
127
+ - test-size: medium
128
+ - test-scope: cli-contract
129
+ - evidence-plan: 单元测试锁定规则 + 集成或命令行契约验证
130
+ - upgrade-reason: 触达 CLI/API/Agent 契约或生成物,需要中间层验证
131
+ - execution-mode: parallel-workers
132
+ - parallel-group: surface
133
+ - write-scope: src/cli/**, src/**, test/**
134
+ - owner-role: worker
135
+ - local-verify: openprd tasks . --change openprd-control-plane-v020 --item T001.08 --evidence-required
136
+ - integration-owner: main-agent
137
+
138
+ - [x] T001.09 提供 adapter detect/capabilities/install/normalize/render/handoff SPI
139
+ - type: implementation
140
+ - deps: T001.08
141
+ - done: 已完成:提供 adapter detect/capabilities/install/normalize/render/handoff SPI
142
+ - verify: openprd tasks . --change openprd-control-plane-v020 --item T001.09 --evidence-required
143
+ - test-layer: unit, integration
144
+ - test-size: medium
145
+ - test-scope: cli-contract
146
+ - evidence-plan: 单元测试锁定规则 + 集成或命令行契约验证
147
+ - upgrade-reason: 触达 CLI/API/Agent 契约或生成物,需要中间层验证
148
+ - execution-mode: parallel-workers
149
+ - parallel-group: contracts
150
+ - write-scope: src/**, test/**, docs/basic/backend-structure.md
151
+ - owner-role: worker
152
+ - local-verify: openprd tasks . --change openprd-control-plane-v020 --item T001.09 --evidence-required
153
+ - integration-owner: main-agent
154
+
155
+ - [x] T001.10 提供 Knowledge v3 validate/promote/deprecate/supersede/query 生命周期
156
+ - type: implementation
157
+ - deps: T001.09
158
+ - done: 已完成:提供 Knowledge v3 validate/promote/deprecate/supersede/query 生命周期
159
+ - verify: openprd tasks . --change openprd-control-plane-v020 --item T001.10 --evidence-required
160
+ - test-layer: unit, integration
161
+ - test-size: medium
162
+ - test-scope: cli-contract
163
+ - evidence-plan: 单元测试锁定规则 + 集成或命令行契约验证
164
+ - upgrade-reason: 触达 CLI/API/Agent 契约或生成物,需要中间层验证
165
+ - execution-mode: parallel-workers
166
+ - parallel-group: implementation
167
+ - write-scope: src/**, test/**
168
+ - owner-role: worker
169
+ - local-verify: openprd tasks . --change openprd-control-plane-v020 --item T001.10 --evidence-required
170
+ - integration-owner: main-agent
171
+
172
+ - [x] T001.11 提供 upgrade plan/dry-run/backup/atomic apply/restore 与 fleet 安全批处理
173
+ - type: implementation
174
+ - deps: T001.10
175
+ - done: 已完成:提供 upgrade plan/dry-run/backup/atomic apply/restore 与 fleet 安全批处理
176
+ - verify: openprd tasks . --change openprd-control-plane-v020 --item T001.11 --evidence-required
177
+ - test-layer: integration, security
178
+ - test-size: medium
179
+ - test-scope: security
180
+ - evidence-plan: 正向路径 + 越权、额度、并发或敏感信息负向验证
181
+ - upgrade-reason: 触达权限、安全、成本或滥用边界,需要至少集成级证据
182
+ - execution-mode: parallel-workers
183
+ - parallel-group: implementation
184
+ - write-scope: src/**, test/**
185
+ - owner-role: worker
186
+ - local-verify: openprd tasks . --change openprd-control-plane-v020 --item T001.11 --evidence-required
187
+ - integration-owner: main-agent
188
+
189
+ - [x] T001.12 提供 registry prune/compact 与测试环境 OPENPRD_HOME 隔离
190
+ - type: implementation
191
+ - deps: T001.11
192
+ - done: 已完成:提供 registry prune/compact 与测试环境 OPENPRD_HOME 隔离
193
+ - verify: openprd tasks . --change openprd-control-plane-v020 --item T001.12 --evidence-required
194
+ - test-layer: unit, integration
195
+ - test-size: medium
196
+ - test-scope: cli-contract
197
+ - evidence-plan: 单元测试锁定规则 + 集成或命令行契约验证
198
+ - upgrade-reason: 触达 CLI/API/Agent 契约或生成物,需要中间层验证
199
+ - execution-mode: parallel-workers
200
+ - parallel-group: verification
201
+ - write-scope: test/**, .openprd/harness/test-reports/**
202
+ - owner-role: worker
203
+ - local-verify: openprd tasks . --change openprd-control-plane-v020 --item T001.12 --evidence-required
204
+ - integration-owner: main-agent
205
+
206
+ - [x] T001.13 打通主流程闭环:Agent 进入已有项目,Adapter 识别运行环境,Context Compiler 基于 lane/tas 等 6 项
207
+ - type: implementation
208
+ - deps: T001.12
209
+ - done: 主流程关键节点已经打通,用户可以按预期从入口走到结果收尾。 涉及: Agent 进入已有项目,Adapter 识别运行环境,Context Compiler 基于 lane/task/revision 在预算内生 等 6 项。
210
+ - verify: openprd tasks . --change openprd-control-plane-v020 --item T001.13 --evidence-required
211
+ - test-layer: integration, e2e
212
+ - test-size: large
213
+ - test-scope: user-flow
214
+ - evidence-plan: 主流程自动化、截图或 visual-compare 证据 + 本任务 verify 命令;轻量 UI 可视优化也需要 before/after、verification-board 或 alignment-board 证据,同构卡片/列表要覆盖内部内容槽位
215
+ - upgrade-reason: 触达用户可见路径,需要端到端或视觉级证据;轻量 UI 可视优化不能只用构建或 dev-check 收口
216
+ - execution-mode: serial
217
+ - parallel-group: integration
218
+ - write-scope: src/**, test/**, docs/basic/**
219
+ - owner-role: main-agent
220
+ - local-verify: openprd tasks . --change openprd-control-plane-v020 --item T001.13 --evidence-required
221
+ - integration-owner: main-agent
222
+
223
+ - [x] T001.14 验证全量单元、集成、并发、迁移、回滚、性能和三平台契约测试通过
224
+ - type: verification
225
+ - deps: T001.13
226
+ - done: 已验证:全量单元、集成、并发、迁移、回滚、性能和三平台契约测试通过
227
+ - verify: openprd tasks . --change openprd-control-plane-v020 --item T001.14 --evidence-required
228
+ - test-layer: integration, performance
229
+ - test-size: large
230
+ - test-scope: performance
231
+ - evidence-plan: 性能基线、压力数据或 benchmark 报告 + 本任务 verify 命令
232
+ - upgrade-reason: 触达性能或容量边界,需要专项验证证据
233
+ - execution-mode: parallel-workers
234
+ - parallel-group: verification
235
+ - write-scope: test/**, .openprd/harness/test-reports/**
236
+ - owner-role: worker
237
+ - local-verify: openprd tasks . --change openprd-control-plane-v020 --item T001.14 --evidence-required
238
+ - integration-owner: main-agent
239
+
240
+ - [x] T001.15 验证最新 Markdown/HTML 测试报告、质量报告、架构与视觉证据可追溯
241
+ - type: verification
242
+ - deps: T001.14
243
+ - done: 已验证:最新 Markdown/HTML 测试报告、质量报告、架构与视觉证据可追溯
244
+ - verify: openprd tasks . --change openprd-control-plane-v020 --item T001.15 --evidence-required
245
+ - test-layer: integration, e2e
246
+ - test-size: large
247
+ - test-scope: visual-flow
248
+ - evidence-plan: 主流程自动化、截图或 visual-compare 证据 + 本任务 verify 命令;轻量 UI 可视优化也需要 before/after、verification-board 或 alignment-board 证据,同构卡片/列表要覆盖内部内容槽位
249
+ - upgrade-reason: 触达用户可见路径,需要端到端或视觉级证据;轻量 UI 可视优化不能只用构建或 dev-check 收口
250
+ - execution-mode: parallel-workers
251
+ - parallel-group: verification
252
+ - write-scope: test/**, .openprd/harness/test-reports/**
253
+ - owner-role: worker
254
+ - local-verify: openprd tasks . --change openprd-control-plane-v020 --item T001.15 --evidence-required
255
+ - integration-owner: main-agent
256
+
257
+ - [x] T001.16 验证standards、quality、run verify 与 doctor 在发布/刷新前全部健康
258
+ - type: verification
259
+ - deps: T001.15
260
+ - done: 已验证:standards、quality、run verify 与 doctor 在发布/刷新前全部健康
261
+ - verify: openprd tasks . --change openprd-control-plane-v020 --item T001.16 --evidence-required
262
+ - test-layer: unit, integration
263
+ - test-size: medium
264
+ - test-scope: cli-contract
265
+ - evidence-plan: 单元测试锁定规则 + 集成或命令行契约验证
266
+ - upgrade-reason: 触达 CLI/API/Agent 契约或生成物,需要中间层验证
267
+ - execution-mode: parallel-workers
268
+ - parallel-group: verification
269
+ - write-scope: test/**, .openprd/harness/test-reports/**
270
+ - owner-role: worker
271
+ - local-verify: openprd tasks . --change openprd-control-plane-v020 --item T001.16 --evidence-required
272
+ - integration-owner: main-agent
273
+
274
+ - [x] T001.17 验证所有真实项目刷新报告包含版本、checksum、备份、迁移结果和失败回滚状态
275
+ - type: verification
276
+ - deps: T001.16
277
+ - done: 已验证:所有真实项目刷新报告包含版本、checksum、备份、迁移结果和失败回滚状态
278
+ - verify: openprd tasks . --change openprd-control-plane-v020 --item T001.17 --evidence-required
279
+ - test-layer: integration, e2e
280
+ - test-size: large
281
+ - test-scope: visual-flow
282
+ - evidence-plan: 主流程自动化、截图或 visual-compare 证据 + 本任务 verify 命令;轻量 UI 可视优化也需要 before/after、verification-board 或 alignment-board 证据,同构卡片/列表要覆盖内部内容槽位
283
+ - upgrade-reason: 触达用户可见路径,需要端到端或视觉级证据;轻量 UI 可视优化不能只用构建或 dev-check 收口
284
+ - execution-mode: parallel-workers
285
+ - parallel-group: verification
286
+ - write-scope: test/**, .openprd/harness/test-reports/**
287
+ - owner-role: worker
288
+ - local-verify: openprd tasks . --change openprd-control-plane-v020 --item T001.17 --evidence-required
289
+ - integration-owner: main-agent
290
+
291
+ - [x] T001.18 回归非功能约束:Node.js 20.19+,优先零新增运行时依赖,复用现有 YAML 与 Sharp 等 2 项
292
+ - type: verification
293
+ - deps: T001.17
294
+ - done: 非功能约束已经回归确认。 涉及: Node.js 20.19+,优先零新增运行时依赖,复用现有 YAML 与 Sharp 等 2 项。
295
+ - verify: openprd tasks . --change openprd-control-plane-v020 --item T001.18 --evidence-required
296
+ - test-layer: unit, integration
297
+ - test-size: medium
298
+ - test-scope: cli-contract
299
+ - evidence-plan: 单元测试锁定规则 + 集成或命令行契约验证
300
+ - upgrade-reason: 触达 CLI/API/Agent 契约或生成物,需要中间层验证
301
+ - execution-mode: parallel-workers
302
+ - parallel-group: verification
303
+ - write-scope: test/**, .openprd/harness/test-reports/**
304
+ - owner-role: worker
305
+ - local-verify: openprd tasks . --change openprd-control-plane-v020 --item T001.18 --evidence-required
306
+ - integration-owner: main-agent
307
+
308
+ - [x] T001.19 回归非功能约束:读取路径默认无业务状态写入;telemetry 与事实真相分离 等 2 项
309
+ - type: verification
310
+ - deps: T001.18
311
+ - done: 非功能约束已经回归确认。 涉及: 读取路径默认无业务状态写入;telemetry 与事实真相分离 / 面向普通用户的默认文案使用简体中文、结果导向且不暴露内部实现术语。
312
+ - verify: openprd tasks . --change openprd-control-plane-v020 --item T001.19 --evidence-required
313
+ - test-layer: integration, e2e
314
+ - test-size: large
315
+ - test-scope: visual-flow
316
+ - evidence-plan: 主流程自动化、截图或 visual-compare 证据 + 本任务 verify 命令;轻量 UI 可视优化也需要 before/after、verification-board 或 alignment-board 证据,同构卡片/列表要覆盖内部内容槽位
317
+ - upgrade-reason: 触达用户可见路径,需要端到端或视觉级证据;轻量 UI 可视优化不能只用构建或 dev-check 收口
318
+ - execution-mode: parallel-workers
319
+ - parallel-group: verification
320
+ - write-scope: test/**, .openprd/harness/test-reports/**
321
+ - owner-role: worker
322
+ - local-verify: openprd tasks . --change openprd-control-plane-v020 --item T001.19 --evidence-required
323
+ - integration-owner: main-agent
324
+
325
+ - [x] T001.20 回归非功能约束:新旧 CLI 在一个兼容周期内保持字段与退出码兼容,并标注 deprecated 字段 等 2 项
326
+ - type: verification
327
+ - deps: T001.19
328
+ - done: 非功能约束已经回归确认。 涉及: 新旧 CLI 在一个兼容周期内保持字段与退出码兼容,并标注 deprecated 字段 / 每个迁移步骤可重复执行、可审计、可单项目回滚。
329
+ - verify: openprd tasks . --change openprd-control-plane-v020 --item T001.20 --evidence-required
330
+ - test-layer: unit, integration
331
+ - test-size: medium
332
+ - test-scope: cli-contract
333
+ - evidence-plan: 单元测试锁定规则 + 集成或命令行契约验证
334
+ - upgrade-reason: 触达 CLI/API/Agent 契约或生成物,需要中间层验证
335
+ - execution-mode: parallel-workers
336
+ - parallel-group: verification
337
+ - write-scope: test/**, .openprd/harness/test-reports/**
338
+ - owner-role: worker
339
+ - local-verify: openprd tasks . --change openprd-control-plane-v020 --item T001.20 --evidence-required
340
+ - integration-owner: main-agent
341
+
342
+ - [x] T001.21 回归边界条件与失败处理:边界情况:同一 session ID 在多个工作区有线索时不语义猜测,返回候选和安全阻断 等 12 项
343
+ - type: verification
344
+ - deps: T001.20
345
+ - done: 边界条件与失败处理已经回归确认。 涉及: 边界情况:同一 session ID 在多个工作区有线索时不语义猜测,返回候选和安全阻断 等 12 项。
346
+ - verify: openprd tasks . --change openprd-control-plane-v020 --item T001.21 --evidence-required
347
+ - test-layer: integration, security
348
+ - test-size: medium
349
+ - test-scope: security
350
+ - evidence-plan: 正向路径 + 越权、额度、并发或敏感信息负向验证
351
+ - upgrade-reason: 触达权限、安全、成本或滥用边界,需要至少集成级证据
352
+ - execution-mode: parallel-workers
353
+ - parallel-group: verification
354
+ - write-scope: test/**, .openprd/harness/test-reports/**
355
+ - owner-role: worker
356
+ - local-verify: openprd tasks . --change openprd-control-plane-v020 --item T001.21 --evidence-required
357
+ - integration-owner: main-agent
358
+
359
+ - [x] T001.22 验证成本与额度护栏
360
+ - type: verification
361
+ - deps: T001.21
362
+ - done: 已验证免费、试用或低权限用户不能绕过额度、并发、频率或总量限制
363
+ - verify: openprd tasks . --change openprd-control-plane-v020 --item T001.22 --evidence-required
364
+ - test-layer: integration, security
365
+ - test-size: medium
366
+ - test-scope: security
367
+ - evidence-plan: 正向路径 + 越权、额度、并发或敏感信息负向验证
368
+ - upgrade-reason: 触达权限、安全、成本或滥用边界,需要至少集成级证据
369
+ - execution-mode: parallel-workers
370
+ - parallel-group: verification
371
+ - write-scope: test/**, .openprd/harness/test-reports/**
372
+ - owner-role: worker
373
+ - local-verify: openprd tasks . --change openprd-control-plane-v020 --item T001.22 --evidence-required
374
+ - integration-owner: main-agent
375
+
376
+ - [x] T001.23 验证滥用与越权路径
377
+ - type: verification
378
+ - deps: T001.22
379
+ - done: 已覆盖重复请求、并发请求、越权身份和异常恢复等负向场景
380
+ - verify: openprd tasks . --change openprd-control-plane-v020 --item T001.23 --evidence-required
381
+ - test-layer: integration, security
382
+ - test-size: medium
383
+ - test-scope: security
384
+ - evidence-plan: 正向路径 + 越权、额度、并发或敏感信息负向验证
385
+ - upgrade-reason: 触达权限、安全、成本或滥用边界,需要至少集成级证据
386
+ - execution-mode: parallel-workers
387
+ - parallel-group: verification
388
+ - write-scope: test/**, .openprd/harness/test-reports/**
389
+ - owner-role: worker
390
+ - local-verify: openprd tasks . --change openprd-control-plane-v020 --item T001.23 --evidence-required
391
+ - integration-owner: main-agent
392
+
393
+ - [x] T001.24 验证成本监控、报警和止损
394
+ - type: verification
395
+ - deps: T001.23
396
+ - done: 已确认用量或成本信号、报警阈值和人工/自动止损动作可执行
397
+ - verify: openprd tasks . --change openprd-control-plane-v020 --item T001.24 --evidence-required
398
+ - test-layer: integration, security
399
+ - test-size: medium
400
+ - test-scope: security
401
+ - evidence-plan: 正向路径 + 越权、额度、并发或敏感信息负向验证
402
+ - upgrade-reason: 触达权限、安全、成本或滥用边界,需要至少集成级证据
403
+ - execution-mode: parallel-workers
404
+ - parallel-group: verification
405
+ - write-scope: test/**, .openprd/harness/test-reports/**
406
+ - owner-role: worker
407
+ - local-verify: openprd tasks . --change openprd-control-plane-v020 --item T001.24 --evidence-required
408
+ - integration-owner: main-agent
409
+
410
+ - [x] T001.25 维护 docs/basic 项目基础文档
411
+ - type: documentation
412
+ - deps: T001.24
413
+ - done: 已检查 docs/basic 是否缺失或因本次需求、流程、结构、依赖、产品行为变化而过期;若涉及后端、脚本、Agent 或工具链变更,已同步评估 CLI 与 API 接入面,并在 backend-structure.md 中记录事实或不适用原因;需要更新的基础文档已同步
414
+ - verify: openprd standards . --verify
415
+ - test-layer: manual
416
+ - test-size: manual
417
+ - test-scope: docs
418
+ - evidence-plan: openprd standards . --verify
419
+ - upgrade-reason: 文档任务以标准校验和人工审查证据为主
420
+ - execution-mode: parallel-workers
421
+ - parallel-group: docs
422
+ - write-scope: docs/basic/**, README*.md
423
+ - owner-role: worker
424
+ - local-verify: openprd standards . --verify
425
+ - integration-owner: main-agent
426
+
427
+ - [x] Continue with `tasks-002.md` after completing this file.
@@ -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":"画布协同实现与回归完成,详见任务级测试报告"}