openplanr 2.3.0 → 2.5.0

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 (127) hide show
  1. package/CHANGELOG.md +17 -0
  2. package/dist/dashboard/.vite/manifest.json +1 -1
  3. package/dist/dashboard/assets/{index-B74ddyXA.js → index-BaARCc1f.js} +2 -2
  4. package/dist/dashboard/assets/{index-B74ddyXA.js.map → index-BaARCc1f.js.map} +1 -1
  5. package/dist/dashboard/dashboard-manifest.json +8 -8
  6. package/dist/dashboard/index.html +1 -1
  7. package/dist/services/diagram-pipeline-service.d.ts +6 -0
  8. package/dist/services/diagram-pipeline-service.d.ts.map +1 -1
  9. package/dist/services/diagram-pipeline-service.js +45 -2
  10. package/dist/services/diagram-pipeline-service.js.map +1 -1
  11. package/lib/host-packages/adapter-registry.json +5 -5
  12. package/lib/host-packages/capability-map.json +1 -1
  13. package/lib/host-packages/claude/.claude-plugin/marketplace.json +2 -2
  14. package/lib/host-packages/claude/openplanr/.claude-plugin/plugin.json +1 -1
  15. package/lib/host-packages/claude/openplanr/.openplanr-content.json +81 -25
  16. package/lib/host-packages/claude/openplanr/skills/design/SKILL.md +3 -0
  17. package/lib/host-packages/claude/openplanr/skills/design/openplanr.skill.json +34 -1
  18. package/lib/host-packages/claude/openplanr/skills/design/references/handoff.md +35 -0
  19. package/lib/host-packages/claude/openplanr/skills/design/scripts/design.mjs +2227 -336
  20. package/lib/host-packages/claude/openplanr/skills/design/scripts/runtime/packages/protocol/package.json +5 -1
  21. package/lib/host-packages/claude/openplanr/skills/design/scripts/runtime/packages/protocol/schemas/v1.11.0/design-handoff-readiness.schema.json +398 -0
  22. package/lib/host-packages/claude/openplanr/skills/design/scripts/runtime/packages/protocol/schemas/v1.11.0/design-implementation-handoff.schema.json +518 -0
  23. package/lib/host-packages/claude/openplanr/skills/design/scripts/runtime/packages/protocol/schemas/v1.11.0/design-planning-lineage.schema.json +106 -0
  24. package/lib/host-packages/claude/openplanr/skills/design-loop/openplanr.skill.json +33 -0
  25. package/lib/host-packages/claude/openplanr/skills/design-loop/references/handoff.md +35 -0
  26. package/lib/host-packages/claude/openplanr/skills/design-loop/scripts/design.mjs +2227 -336
  27. package/lib/host-packages/claude/openplanr/skills/design-loop/scripts/runtime/packages/protocol/package.json +5 -1
  28. package/lib/host-packages/claude/openplanr/skills/design-loop/scripts/runtime/packages/protocol/schemas/v1.11.0/design-handoff-readiness.schema.json +398 -0
  29. package/lib/host-packages/claude/openplanr/skills/design-loop/scripts/runtime/packages/protocol/schemas/v1.11.0/design-implementation-handoff.schema.json +518 -0
  30. package/lib/host-packages/claude/openplanr/skills/design-loop/scripts/runtime/packages/protocol/schemas/v1.11.0/design-planning-lineage.schema.json +106 -0
  31. package/lib/host-packages/claude/openplanr/skills/design-review/SKILL.md +3 -0
  32. package/lib/host-packages/claude/openplanr/skills/design-review/openplanr.skill.json +34 -1
  33. package/lib/host-packages/claude/openplanr/skills/design-review/references/handoff.md +35 -0
  34. package/lib/host-packages/claude/openplanr/skills/design-review/scripts/design.mjs +2227 -336
  35. package/lib/host-packages/claude/openplanr/skills/design-review/scripts/runtime/packages/protocol/package.json +5 -1
  36. package/lib/host-packages/claude/openplanr/skills/design-review/scripts/runtime/packages/protocol/schemas/v1.11.0/design-handoff-readiness.schema.json +398 -0
  37. package/lib/host-packages/claude/openplanr/skills/design-review/scripts/runtime/packages/protocol/schemas/v1.11.0/design-implementation-handoff.schema.json +518 -0
  38. package/lib/host-packages/claude/openplanr/skills/design-review/scripts/runtime/packages/protocol/schemas/v1.11.0/design-planning-lineage.schema.json +106 -0
  39. package/lib/host-packages/claude/openplanr/skills/diagram/SKILL.md +12 -0
  40. package/lib/host-packages/claude/openplanr/skills/diagram/references/diagram-document.md +4 -0
  41. package/lib/host-packages/claude/openplanr/skills/diagram/references/diagram-intent-to-ir.md +4 -0
  42. package/lib/host-packages/claude/openplanr/skills/plan/SKILL.md +12 -0
  43. package/lib/host-packages/claude/openplanr/skills/plan/openplanr.skill.json +45 -1
  44. package/lib/host-packages/claude/openplanr/skills/plan/references/design-handoff.md +33 -0
  45. package/lib/host-packages/claude/openplanr/skills/plan/scripts/design.mjs +2227 -336
  46. package/lib/host-packages/claude/openplanr/skills/plan/scripts/runtime/packages/protocol/package.json +5 -1
  47. package/lib/host-packages/claude/openplanr/skills/plan/scripts/runtime/packages/protocol/schemas/v1.11.0/design-handoff-readiness.schema.json +398 -0
  48. package/lib/host-packages/claude/openplanr/skills/plan/scripts/runtime/packages/protocol/schemas/v1.11.0/design-implementation-handoff.schema.json +518 -0
  49. package/lib/host-packages/claude/openplanr/skills/plan/scripts/runtime/packages/protocol/schemas/v1.11.0/design-planning-lineage.schema.json +106 -0
  50. package/lib/host-packages/claude/openplanr/skills/ship/SKILL.md +9 -0
  51. package/lib/host-packages/claude/openplanr/skills/ship/openplanr.skill.json +12 -1
  52. package/lib/host-packages/claude/openplanr/skills/ship/references/design-lineage.md +26 -0
  53. package/lib/host-packages/cursor/openplanr/.openplanr-content.json +76 -20
  54. package/lib/host-packages/cursor/openplanr/manifest.json +1 -1
  55. package/lib/host-packages/cursor/openplanr/rules/planr-design/references/handoff.md +35 -0
  56. package/lib/host-packages/cursor/openplanr/rules/planr-design/scripts/design.mjs +2227 -336
  57. package/lib/host-packages/cursor/openplanr/rules/planr-design/scripts/runtime/packages/protocol/package.json +5 -1
  58. package/lib/host-packages/cursor/openplanr/rules/planr-design/scripts/runtime/packages/protocol/schemas/v1.11.0/design-handoff-readiness.schema.json +398 -0
  59. package/lib/host-packages/cursor/openplanr/rules/planr-design/scripts/runtime/packages/protocol/schemas/v1.11.0/design-implementation-handoff.schema.json +518 -0
  60. package/lib/host-packages/cursor/openplanr/rules/planr-design/scripts/runtime/packages/protocol/schemas/v1.11.0/design-planning-lineage.schema.json +106 -0
  61. package/lib/host-packages/cursor/openplanr/rules/planr-design-loop/references/handoff.md +35 -0
  62. package/lib/host-packages/cursor/openplanr/rules/planr-design-loop/scripts/design.mjs +2227 -336
  63. package/lib/host-packages/cursor/openplanr/rules/planr-design-loop/scripts/runtime/packages/protocol/package.json +5 -1
  64. package/lib/host-packages/cursor/openplanr/rules/planr-design-loop/scripts/runtime/packages/protocol/schemas/v1.11.0/design-handoff-readiness.schema.json +398 -0
  65. package/lib/host-packages/cursor/openplanr/rules/planr-design-loop/scripts/runtime/packages/protocol/schemas/v1.11.0/design-implementation-handoff.schema.json +518 -0
  66. package/lib/host-packages/cursor/openplanr/rules/planr-design-loop/scripts/runtime/packages/protocol/schemas/v1.11.0/design-planning-lineage.schema.json +106 -0
  67. package/lib/host-packages/cursor/openplanr/rules/planr-design-review/references/handoff.md +35 -0
  68. package/lib/host-packages/cursor/openplanr/rules/planr-design-review/scripts/design.mjs +2227 -336
  69. package/lib/host-packages/cursor/openplanr/rules/planr-design-review/scripts/runtime/packages/protocol/package.json +5 -1
  70. package/lib/host-packages/cursor/openplanr/rules/planr-design-review/scripts/runtime/packages/protocol/schemas/v1.11.0/design-handoff-readiness.schema.json +398 -0
  71. package/lib/host-packages/cursor/openplanr/rules/planr-design-review/scripts/runtime/packages/protocol/schemas/v1.11.0/design-implementation-handoff.schema.json +518 -0
  72. package/lib/host-packages/cursor/openplanr/rules/planr-design-review/scripts/runtime/packages/protocol/schemas/v1.11.0/design-planning-lineage.schema.json +106 -0
  73. package/lib/host-packages/cursor/openplanr/rules/planr-design-review.mdc +3 -0
  74. package/lib/host-packages/cursor/openplanr/rules/planr-design.mdc +3 -0
  75. package/lib/host-packages/cursor/openplanr/rules/planr-diagram/references/diagram-document.md +4 -0
  76. package/lib/host-packages/cursor/openplanr/rules/planr-diagram/references/diagram-intent-to-ir.md +4 -0
  77. package/lib/host-packages/cursor/openplanr/rules/planr-diagram.mdc +12 -0
  78. package/lib/host-packages/cursor/openplanr/rules/planr-plan/references/design-handoff.md +33 -0
  79. package/lib/host-packages/cursor/openplanr/rules/planr-plan/scripts/design.mjs +2227 -336
  80. package/lib/host-packages/cursor/openplanr/rules/planr-plan/scripts/runtime/packages/protocol/package.json +5 -1
  81. package/lib/host-packages/cursor/openplanr/rules/planr-plan/scripts/runtime/packages/protocol/schemas/v1.11.0/design-handoff-readiness.schema.json +398 -0
  82. package/lib/host-packages/cursor/openplanr/rules/planr-plan/scripts/runtime/packages/protocol/schemas/v1.11.0/design-implementation-handoff.schema.json +518 -0
  83. package/lib/host-packages/cursor/openplanr/rules/planr-plan/scripts/runtime/packages/protocol/schemas/v1.11.0/design-planning-lineage.schema.json +106 -0
  84. package/lib/host-packages/cursor/openplanr/rules/planr-plan.mdc +12 -0
  85. package/lib/host-packages/cursor/openplanr/rules/planr-ship/references/design-lineage.md +26 -0
  86. package/lib/host-packages/cursor/openplanr/rules/planr-ship.mdc +9 -0
  87. package/lib/host-packages/openai/.claude-plugin/marketplace.json +2 -2
  88. package/lib/host-packages/openai/openplanr/.codex-plugin/plugin.json +1 -1
  89. package/lib/host-packages/openai/openplanr/.openplanr-content.json +81 -25
  90. package/lib/host-packages/openai/openplanr/skills/design/SKILL.md +3 -0
  91. package/lib/host-packages/openai/openplanr/skills/design/openplanr.skill.json +34 -1
  92. package/lib/host-packages/openai/openplanr/skills/design/references/handoff.md +35 -0
  93. package/lib/host-packages/openai/openplanr/skills/design/scripts/design.mjs +2227 -336
  94. package/lib/host-packages/openai/openplanr/skills/design/scripts/runtime/packages/protocol/package.json +5 -1
  95. package/lib/host-packages/openai/openplanr/skills/design/scripts/runtime/packages/protocol/schemas/v1.11.0/design-handoff-readiness.schema.json +398 -0
  96. package/lib/host-packages/openai/openplanr/skills/design/scripts/runtime/packages/protocol/schemas/v1.11.0/design-implementation-handoff.schema.json +518 -0
  97. package/lib/host-packages/openai/openplanr/skills/design/scripts/runtime/packages/protocol/schemas/v1.11.0/design-planning-lineage.schema.json +106 -0
  98. package/lib/host-packages/openai/openplanr/skills/design-loop/openplanr.skill.json +33 -0
  99. package/lib/host-packages/openai/openplanr/skills/design-loop/references/handoff.md +35 -0
  100. package/lib/host-packages/openai/openplanr/skills/design-loop/scripts/design.mjs +2227 -336
  101. package/lib/host-packages/openai/openplanr/skills/design-loop/scripts/runtime/packages/protocol/package.json +5 -1
  102. package/lib/host-packages/openai/openplanr/skills/design-loop/scripts/runtime/packages/protocol/schemas/v1.11.0/design-handoff-readiness.schema.json +398 -0
  103. package/lib/host-packages/openai/openplanr/skills/design-loop/scripts/runtime/packages/protocol/schemas/v1.11.0/design-implementation-handoff.schema.json +518 -0
  104. package/lib/host-packages/openai/openplanr/skills/design-loop/scripts/runtime/packages/protocol/schemas/v1.11.0/design-planning-lineage.schema.json +106 -0
  105. package/lib/host-packages/openai/openplanr/skills/design-review/SKILL.md +3 -0
  106. package/lib/host-packages/openai/openplanr/skills/design-review/openplanr.skill.json +34 -1
  107. package/lib/host-packages/openai/openplanr/skills/design-review/references/handoff.md +35 -0
  108. package/lib/host-packages/openai/openplanr/skills/design-review/scripts/design.mjs +2227 -336
  109. package/lib/host-packages/openai/openplanr/skills/design-review/scripts/runtime/packages/protocol/package.json +5 -1
  110. package/lib/host-packages/openai/openplanr/skills/design-review/scripts/runtime/packages/protocol/schemas/v1.11.0/design-handoff-readiness.schema.json +398 -0
  111. package/lib/host-packages/openai/openplanr/skills/design-review/scripts/runtime/packages/protocol/schemas/v1.11.0/design-implementation-handoff.schema.json +518 -0
  112. package/lib/host-packages/openai/openplanr/skills/design-review/scripts/runtime/packages/protocol/schemas/v1.11.0/design-planning-lineage.schema.json +106 -0
  113. package/lib/host-packages/openai/openplanr/skills/diagram/SKILL.md +12 -0
  114. package/lib/host-packages/openai/openplanr/skills/diagram/references/diagram-document.md +4 -0
  115. package/lib/host-packages/openai/openplanr/skills/diagram/references/diagram-intent-to-ir.md +4 -0
  116. package/lib/host-packages/openai/openplanr/skills/plan/SKILL.md +12 -0
  117. package/lib/host-packages/openai/openplanr/skills/plan/openplanr.skill.json +45 -1
  118. package/lib/host-packages/openai/openplanr/skills/plan/references/design-handoff.md +33 -0
  119. package/lib/host-packages/openai/openplanr/skills/plan/scripts/design.mjs +2227 -336
  120. package/lib/host-packages/openai/openplanr/skills/plan/scripts/runtime/packages/protocol/package.json +5 -1
  121. package/lib/host-packages/openai/openplanr/skills/plan/scripts/runtime/packages/protocol/schemas/v1.11.0/design-handoff-readiness.schema.json +398 -0
  122. package/lib/host-packages/openai/openplanr/skills/plan/scripts/runtime/packages/protocol/schemas/v1.11.0/design-implementation-handoff.schema.json +518 -0
  123. package/lib/host-packages/openai/openplanr/skills/plan/scripts/runtime/packages/protocol/schemas/v1.11.0/design-planning-lineage.schema.json +106 -0
  124. package/lib/host-packages/openai/openplanr/skills/ship/SKILL.md +9 -0
  125. package/lib/host-packages/openai/openplanr/skills/ship/openplanr.skill.json +12 -1
  126. package/lib/host-packages/openai/openplanr/skills/ship/references/design-lineage.md +26 -0
  127. package/package.json +2 -2
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@openplanr/protocol",
3
- "version": "0.4.0",
3
+ "version": "0.5.0",
4
4
  "type": "module",
5
5
  "description": "Canonical OpenPlanr schemas, registries, typed errors, and portable contract validation",
6
6
  "license": "MIT",
@@ -47,6 +47,10 @@
47
47
  "types": "./src/design-publication-contracts.d.mts",
48
48
  "import": "./src/design-publication-contracts.mjs"
49
49
  },
50
+ "./design-handoff-contracts": {
51
+ "types": "./src/design-handoff-contracts.d.mts",
52
+ "import": "./src/design-handoff-contracts.mjs"
53
+ },
50
54
  "./registries": {
51
55
  "types": "./src/registries.d.mts",
52
56
  "import": "./src/registries.mjs"
@@ -0,0 +1,398 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "$id": "https://openplanr.dev/schemas/v1.11.0/design-handoff-readiness.schema.json",
4
+ "x-openplanr-contract": {
5
+ "id": "design-handoff-readiness",
6
+ "version": "1.11.0"
7
+ },
8
+ "oneOf": [
9
+ {
10
+ "type": "object",
11
+ "additionalProperties": false,
12
+ "properties": {
13
+ "kind": {
14
+ "const": "openplanr-design-handoff-readiness"
15
+ },
16
+ "schemaVersion": {
17
+ "const": "1.0.0"
18
+ },
19
+ "scope": {
20
+ "const": "design-originated"
21
+ },
22
+ "authority": {
23
+ "const": "none"
24
+ },
25
+ "designId": {
26
+ "type": "string",
27
+ "minLength": 1,
28
+ "maxLength": 160,
29
+ "pattern": "^[A-Za-z0-9][A-Za-z0-9._:-]*$"
30
+ },
31
+ "sourceRevision": {
32
+ "anyOf": [
33
+ {
34
+ "type": "string",
35
+ "pattern": "^sha256:[a-f0-9]{64}$"
36
+ },
37
+ {
38
+ "type": "null"
39
+ }
40
+ ]
41
+ },
42
+ "selectedVariant": {
43
+ "anyOf": [
44
+ {
45
+ "type": "string",
46
+ "minLength": 1,
47
+ "maxLength": 160,
48
+ "pattern": "^[A-Za-z0-9][A-Za-z0-9._:-]*$"
49
+ },
50
+ {
51
+ "type": "null"
52
+ }
53
+ ]
54
+ },
55
+ "status": {
56
+ "enum": [
57
+ "ready",
58
+ "attention",
59
+ "blocked",
60
+ "stale"
61
+ ]
62
+ },
63
+ "continuation": {
64
+ "type": "object",
65
+ "additionalProperties": false,
66
+ "properties": {
67
+ "action": {
68
+ "const": "prepare-plan"
69
+ },
70
+ "available": {
71
+ "type": "boolean"
72
+ }
73
+ },
74
+ "required": [
75
+ "action",
76
+ "available"
77
+ ]
78
+ },
79
+ "checks": {
80
+ "type": "array",
81
+ "items": {
82
+ "type": "object",
83
+ "additionalProperties": false,
84
+ "properties": {
85
+ "id": {
86
+ "enum": [
87
+ "current-revision",
88
+ "selected-direction",
89
+ "design-specification",
90
+ "rendered-verification",
91
+ "review-freshness",
92
+ "review-dispositions",
93
+ "unresolved-blockers",
94
+ "approved-review-handoff"
95
+ ]
96
+ },
97
+ "status": {
98
+ "enum": [
99
+ "pass",
100
+ "attention",
101
+ "blocked",
102
+ "stale"
103
+ ]
104
+ },
105
+ "message": {
106
+ "type": "string",
107
+ "minLength": 1,
108
+ "maxLength": 240
109
+ },
110
+ "evidenceRefs": {
111
+ "type": "array",
112
+ "items": {
113
+ "type": "string",
114
+ "minLength": 1,
115
+ "maxLength": 160,
116
+ "pattern": "^[A-Za-z0-9][A-Za-z0-9._:-]*$"
117
+ },
118
+ "maxItems": 64
119
+ },
120
+ "recoveryAction": {
121
+ "type": "object",
122
+ "additionalProperties": false,
123
+ "properties": {
124
+ "id": {
125
+ "type": "string",
126
+ "minLength": 1,
127
+ "maxLength": 160,
128
+ "pattern": "^[A-Za-z0-9][A-Za-z0-9._:-]*$"
129
+ },
130
+ "label": {
131
+ "type": "string",
132
+ "minLength": 1,
133
+ "maxLength": 240
134
+ }
135
+ },
136
+ "required": [
137
+ "id",
138
+ "label"
139
+ ]
140
+ }
141
+ },
142
+ "required": [
143
+ "id",
144
+ "status",
145
+ "message",
146
+ "evidenceRefs"
147
+ ]
148
+ },
149
+ "maxItems": 8
150
+ },
151
+ "evidence": {
152
+ "type": "array",
153
+ "items": {
154
+ "type": "object",
155
+ "additionalProperties": false,
156
+ "properties": {
157
+ "id": {
158
+ "type": "string",
159
+ "minLength": 1,
160
+ "maxLength": 160,
161
+ "pattern": "^[A-Za-z0-9][A-Za-z0-9._:-]*$"
162
+ },
163
+ "kind": {
164
+ "enum": [
165
+ "design-revision",
166
+ "selected-direction",
167
+ "design-specification",
168
+ "rendered-verification",
169
+ "review-context",
170
+ "review-feedback",
171
+ "review-metadata",
172
+ "review-handoff",
173
+ "screen",
174
+ "frame",
175
+ "component",
176
+ "state",
177
+ "flow",
178
+ "token",
179
+ "review-decision",
180
+ "element-anchor"
181
+ ]
182
+ },
183
+ "path": {
184
+ "type": "string",
185
+ "minLength": 1,
186
+ "maxLength": 4096
187
+ },
188
+ "revision": {
189
+ "type": "string",
190
+ "pattern": "^sha256:[a-f0-9]{64}$"
191
+ },
192
+ "digest": {
193
+ "type": "string",
194
+ "pattern": "^sha256:[a-f0-9]{64}$"
195
+ },
196
+ "anchor": {
197
+ "oneOf": [
198
+ {
199
+ "type": "object",
200
+ "additionalProperties": false,
201
+ "properties": {
202
+ "section": {
203
+ "type": "string",
204
+ "minLength": 1,
205
+ "maxLength": 160,
206
+ "pattern": "^[A-Za-z0-9][A-Za-z0-9._:-]*$"
207
+ }
208
+ },
209
+ "required": [
210
+ "section"
211
+ ]
212
+ },
213
+ {
214
+ "type": "object",
215
+ "additionalProperties": false,
216
+ "properties": {
217
+ "screenId": {
218
+ "type": "string",
219
+ "minLength": 1,
220
+ "maxLength": 160,
221
+ "pattern": "^[A-Za-z0-9][A-Za-z0-9._:-]*$"
222
+ }
223
+ },
224
+ "required": [
225
+ "screenId"
226
+ ]
227
+ },
228
+ {
229
+ "type": "object",
230
+ "additionalProperties": false,
231
+ "properties": {
232
+ "screenId": {
233
+ "type": "string",
234
+ "minLength": 1,
235
+ "maxLength": 160,
236
+ "pattern": "^[A-Za-z0-9][A-Za-z0-9._:-]*$"
237
+ },
238
+ "elementId": {
239
+ "type": "string",
240
+ "minLength": 1,
241
+ "maxLength": 160,
242
+ "pattern": "^[A-Za-z0-9][A-Za-z0-9._:-]*$"
243
+ }
244
+ },
245
+ "required": [
246
+ "screenId",
247
+ "elementId"
248
+ ]
249
+ },
250
+ {
251
+ "type": "object",
252
+ "additionalProperties": false,
253
+ "properties": {
254
+ "reviewId": {
255
+ "type": "string",
256
+ "minLength": 1,
257
+ "maxLength": 160,
258
+ "pattern": "^[A-Za-z0-9][A-Za-z0-9._:-]*$"
259
+ },
260
+ "pinId": {
261
+ "type": "string",
262
+ "minLength": 1,
263
+ "maxLength": 160,
264
+ "pattern": "^[A-Za-z0-9][A-Za-z0-9._:-]*$"
265
+ }
266
+ },
267
+ "required": [
268
+ "reviewId",
269
+ "pinId"
270
+ ]
271
+ }
272
+ ]
273
+ }
274
+ },
275
+ "required": [
276
+ "id",
277
+ "kind",
278
+ "path"
279
+ ]
280
+ },
281
+ "maxItems": 10000
282
+ },
283
+ "blockers": {
284
+ "type": "array",
285
+ "items": {
286
+ "enum": [
287
+ "current-revision",
288
+ "selected-direction",
289
+ "design-specification",
290
+ "rendered-verification",
291
+ "review-freshness",
292
+ "review-dispositions",
293
+ "unresolved-blockers",
294
+ "approved-review-handoff"
295
+ ]
296
+ },
297
+ "maxItems": 8
298
+ },
299
+ "nextActions": {
300
+ "type": "array",
301
+ "items": {
302
+ "type": "object",
303
+ "additionalProperties": false,
304
+ "properties": {
305
+ "id": {
306
+ "type": "string",
307
+ "minLength": 1,
308
+ "maxLength": 160,
309
+ "pattern": "^[A-Za-z0-9][A-Za-z0-9._:-]*$"
310
+ },
311
+ "label": {
312
+ "type": "string",
313
+ "minLength": 1,
314
+ "maxLength": 240
315
+ }
316
+ },
317
+ "required": [
318
+ "id",
319
+ "label"
320
+ ]
321
+ },
322
+ "maxItems": 8
323
+ }
324
+ },
325
+ "required": [
326
+ "kind",
327
+ "schemaVersion",
328
+ "scope",
329
+ "authority",
330
+ "designId",
331
+ "sourceRevision",
332
+ "selectedVariant",
333
+ "status",
334
+ "continuation",
335
+ "checks",
336
+ "evidence",
337
+ "blockers",
338
+ "nextActions"
339
+ ]
340
+ },
341
+ {
342
+ "type": "object",
343
+ "additionalProperties": false,
344
+ "properties": {
345
+ "kind": {
346
+ "const": "openplanr-design-handoff-readiness-absence"
347
+ },
348
+ "schemaVersion": {
349
+ "const": "1.0.0"
350
+ },
351
+ "status": {
352
+ "const": "absent"
353
+ },
354
+ "reason": {
355
+ "enum": [
356
+ "not-computed",
357
+ "not-applicable",
358
+ "unavailable"
359
+ ]
360
+ },
361
+ "message": {
362
+ "type": "string",
363
+ "minLength": 1,
364
+ "maxLength": 240
365
+ },
366
+ "nextAction": {
367
+ "type": "object",
368
+ "additionalProperties": false,
369
+ "properties": {
370
+ "id": {
371
+ "type": "string",
372
+ "minLength": 1,
373
+ "maxLength": 160,
374
+ "pattern": "^[A-Za-z0-9][A-Za-z0-9._:-]*$"
375
+ },
376
+ "label": {
377
+ "type": "string",
378
+ "minLength": 1,
379
+ "maxLength": 240
380
+ }
381
+ },
382
+ "required": [
383
+ "id",
384
+ "label"
385
+ ]
386
+ }
387
+ },
388
+ "required": [
389
+ "kind",
390
+ "schemaVersion",
391
+ "status",
392
+ "reason",
393
+ "message",
394
+ "nextAction"
395
+ ]
396
+ }
397
+ ]
398
+ }