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
@@ -0,0 +1,518 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "$id": "https://openplanr.dev/schemas/v1.11.0/design-implementation-handoff.schema.json",
4
+ "x-openplanr-contract": {
5
+ "id": "design-implementation-handoff",
6
+ "version": "1.11.0"
7
+ },
8
+ "type": "object",
9
+ "additionalProperties": false,
10
+ "properties": {
11
+ "kind": {
12
+ "const": "openplanr-design-implementation-handoff"
13
+ },
14
+ "schemaVersion": {
15
+ "const": "1.0.0"
16
+ },
17
+ "id": {
18
+ "type": "string",
19
+ "minLength": 1,
20
+ "maxLength": 160,
21
+ "pattern": "^[A-Za-z0-9][A-Za-z0-9._:-]*$"
22
+ },
23
+ "version": {
24
+ "type": "integer",
25
+ "minimum": 1
26
+ },
27
+ "status": {
28
+ "enum": [
29
+ "draft",
30
+ "approved",
31
+ "superseded",
32
+ "revoked"
33
+ ]
34
+ },
35
+ "authority": {
36
+ "const": "prepare-plan"
37
+ },
38
+ "title": {
39
+ "type": "string",
40
+ "minLength": 1,
41
+ "maxLength": 240
42
+ },
43
+ "basis": {
44
+ "type": "object",
45
+ "additionalProperties": false,
46
+ "properties": {
47
+ "designId": {
48
+ "type": "string",
49
+ "minLength": 1,
50
+ "maxLength": 160,
51
+ "pattern": "^[A-Za-z0-9][A-Za-z0-9._:-]*$"
52
+ },
53
+ "sourceRevision": {
54
+ "type": "string",
55
+ "pattern": "^sha256:[a-f0-9]{64}$"
56
+ },
57
+ "selectedVariant": {
58
+ "type": "string",
59
+ "minLength": 1,
60
+ "maxLength": 160,
61
+ "pattern": "^[A-Za-z0-9][A-Za-z0-9._:-]*$"
62
+ },
63
+ "readiness": {
64
+ "type": "object",
65
+ "additionalProperties": false,
66
+ "properties": {
67
+ "status": {
68
+ "enum": [
69
+ "ready",
70
+ "attention",
71
+ "blocked",
72
+ "stale"
73
+ ]
74
+ },
75
+ "digest": {
76
+ "type": "string",
77
+ "pattern": "^sha256:[a-f0-9]{64}$"
78
+ }
79
+ },
80
+ "required": [
81
+ "status",
82
+ "digest"
83
+ ]
84
+ },
85
+ "reviewHandoff": {
86
+ "type": "object",
87
+ "additionalProperties": false,
88
+ "properties": {
89
+ "version": {
90
+ "type": "integer",
91
+ "minimum": 1
92
+ },
93
+ "contentDigest": {
94
+ "type": "string",
95
+ "pattern": "^sha256:[a-f0-9]{64}$"
96
+ }
97
+ },
98
+ "required": [
99
+ "version",
100
+ "contentDigest"
101
+ ]
102
+ }
103
+ },
104
+ "required": [
105
+ "designId",
106
+ "sourceRevision",
107
+ "selectedVariant",
108
+ "readiness",
109
+ "reviewHandoff"
110
+ ]
111
+ },
112
+ "sources": {
113
+ "type": "array",
114
+ "items": {
115
+ "type": "object",
116
+ "additionalProperties": false,
117
+ "properties": {
118
+ "id": {
119
+ "type": "string",
120
+ "minLength": 1,
121
+ "maxLength": 160,
122
+ "pattern": "^[A-Za-z0-9][A-Za-z0-9._:-]*$"
123
+ },
124
+ "kind": {
125
+ "enum": [
126
+ "design-revision",
127
+ "selected-direction",
128
+ "design-specification",
129
+ "rendered-verification",
130
+ "review-context",
131
+ "review-feedback",
132
+ "review-metadata",
133
+ "review-handoff",
134
+ "screen",
135
+ "frame",
136
+ "component",
137
+ "state",
138
+ "flow",
139
+ "token",
140
+ "review-decision",
141
+ "element-anchor"
142
+ ]
143
+ },
144
+ "path": {
145
+ "type": "string",
146
+ "minLength": 1,
147
+ "maxLength": 4096
148
+ },
149
+ "revision": {
150
+ "type": "string",
151
+ "pattern": "^sha256:[a-f0-9]{64}$"
152
+ },
153
+ "digest": {
154
+ "type": "string",
155
+ "pattern": "^sha256:[a-f0-9]{64}$"
156
+ },
157
+ "anchor": {
158
+ "oneOf": [
159
+ {
160
+ "type": "object",
161
+ "additionalProperties": false,
162
+ "properties": {
163
+ "section": {
164
+ "type": "string",
165
+ "minLength": 1,
166
+ "maxLength": 160,
167
+ "pattern": "^[A-Za-z0-9][A-Za-z0-9._:-]*$"
168
+ }
169
+ },
170
+ "required": [
171
+ "section"
172
+ ]
173
+ },
174
+ {
175
+ "type": "object",
176
+ "additionalProperties": false,
177
+ "properties": {
178
+ "screenId": {
179
+ "type": "string",
180
+ "minLength": 1,
181
+ "maxLength": 160,
182
+ "pattern": "^[A-Za-z0-9][A-Za-z0-9._:-]*$"
183
+ }
184
+ },
185
+ "required": [
186
+ "screenId"
187
+ ]
188
+ },
189
+ {
190
+ "type": "object",
191
+ "additionalProperties": false,
192
+ "properties": {
193
+ "screenId": {
194
+ "type": "string",
195
+ "minLength": 1,
196
+ "maxLength": 160,
197
+ "pattern": "^[A-Za-z0-9][A-Za-z0-9._:-]*$"
198
+ },
199
+ "elementId": {
200
+ "type": "string",
201
+ "minLength": 1,
202
+ "maxLength": 160,
203
+ "pattern": "^[A-Za-z0-9][A-Za-z0-9._:-]*$"
204
+ }
205
+ },
206
+ "required": [
207
+ "screenId",
208
+ "elementId"
209
+ ]
210
+ },
211
+ {
212
+ "type": "object",
213
+ "additionalProperties": false,
214
+ "properties": {
215
+ "reviewId": {
216
+ "type": "string",
217
+ "minLength": 1,
218
+ "maxLength": 160,
219
+ "pattern": "^[A-Za-z0-9][A-Za-z0-9._:-]*$"
220
+ },
221
+ "pinId": {
222
+ "type": "string",
223
+ "minLength": 1,
224
+ "maxLength": 160,
225
+ "pattern": "^[A-Za-z0-9][A-Za-z0-9._:-]*$"
226
+ }
227
+ },
228
+ "required": [
229
+ "reviewId",
230
+ "pinId"
231
+ ]
232
+ }
233
+ ]
234
+ }
235
+ },
236
+ "required": [
237
+ "id",
238
+ "kind",
239
+ "path"
240
+ ]
241
+ },
242
+ "maxItems": 10000
243
+ },
244
+ "requirements": {
245
+ "type": "array",
246
+ "items": {
247
+ "type": "object",
248
+ "additionalProperties": false,
249
+ "properties": {
250
+ "id": {
251
+ "type": "string",
252
+ "pattern": "^REQ-[0-9]{3,}$"
253
+ },
254
+ "kind": {
255
+ "enum": [
256
+ "behavior",
257
+ "visual-state",
258
+ "responsive",
259
+ "accessibility",
260
+ "content-data-assumption",
261
+ "constraint",
262
+ "verification-intent"
263
+ ]
264
+ },
265
+ "statement": {
266
+ "type": "string",
267
+ "minLength": 1,
268
+ "maxLength": 16384
269
+ },
270
+ "sourceRefs": {
271
+ "type": "array",
272
+ "items": {
273
+ "type": "string",
274
+ "minLength": 1,
275
+ "maxLength": 160,
276
+ "pattern": "^[A-Za-z0-9][A-Za-z0-9._:-]*$"
277
+ },
278
+ "maxItems": 256,
279
+ "minItems": 1
280
+ },
281
+ "verification": {
282
+ "type": "array",
283
+ "items": {
284
+ "type": "string",
285
+ "minLength": 1,
286
+ "maxLength": 16384
287
+ },
288
+ "maxItems": 256,
289
+ "minItems": 1
290
+ }
291
+ },
292
+ "required": [
293
+ "id",
294
+ "kind",
295
+ "statement",
296
+ "sourceRefs",
297
+ "verification"
298
+ ]
299
+ },
300
+ "maxItems": 10000,
301
+ "minItems": 1
302
+ },
303
+ "contentDigest": {
304
+ "type": "string",
305
+ "pattern": "^sha256:[a-f0-9]{64}$"
306
+ },
307
+ "markdown": {
308
+ "type": "string",
309
+ "maxLength": 2097152
310
+ },
311
+ "approval": {
312
+ "type": "object",
313
+ "additionalProperties": false,
314
+ "properties": {
315
+ "actorId": {
316
+ "type": "string",
317
+ "minLength": 1,
318
+ "maxLength": 160,
319
+ "pattern": "^[A-Za-z0-9][A-Za-z0-9._:-]*$"
320
+ },
321
+ "approvedAt": {
322
+ "type": "string",
323
+ "format": "date-time"
324
+ },
325
+ "contentDigest": {
326
+ "type": "string",
327
+ "pattern": "^sha256:[a-f0-9]{64}$"
328
+ },
329
+ "authority": {
330
+ "const": "prepare-plan"
331
+ }
332
+ },
333
+ "required": [
334
+ "actorId",
335
+ "approvedAt",
336
+ "contentDigest",
337
+ "authority"
338
+ ]
339
+ },
340
+ "supersededBy": {
341
+ "type": "object",
342
+ "additionalProperties": false,
343
+ "properties": {
344
+ "id": {
345
+ "type": "string",
346
+ "minLength": 1,
347
+ "maxLength": 160,
348
+ "pattern": "^[A-Za-z0-9][A-Za-z0-9._:-]*$"
349
+ },
350
+ "version": {
351
+ "type": "integer",
352
+ "minimum": 1
353
+ },
354
+ "contentDigest": {
355
+ "type": "string",
356
+ "pattern": "^sha256:[a-f0-9]{64}$"
357
+ }
358
+ },
359
+ "required": [
360
+ "id",
361
+ "version",
362
+ "contentDigest"
363
+ ]
364
+ },
365
+ "revocation": {
366
+ "type": "object",
367
+ "additionalProperties": false,
368
+ "properties": {
369
+ "actorId": {
370
+ "type": "string",
371
+ "minLength": 1,
372
+ "maxLength": 160,
373
+ "pattern": "^[A-Za-z0-9][A-Za-z0-9._:-]*$"
374
+ },
375
+ "revokedAt": {
376
+ "type": "string",
377
+ "format": "date-time"
378
+ },
379
+ "reason": {
380
+ "type": "string",
381
+ "minLength": 1,
382
+ "maxLength": 16384
383
+ }
384
+ },
385
+ "required": [
386
+ "actorId",
387
+ "revokedAt",
388
+ "reason"
389
+ ]
390
+ }
391
+ },
392
+ "required": [
393
+ "kind",
394
+ "schemaVersion",
395
+ "id",
396
+ "version",
397
+ "status",
398
+ "authority",
399
+ "title",
400
+ "basis",
401
+ "sources",
402
+ "requirements",
403
+ "contentDigest",
404
+ "markdown"
405
+ ],
406
+ "allOf": [
407
+ {
408
+ "if": {
409
+ "properties": {
410
+ "status": {
411
+ "const": "approved"
412
+ }
413
+ },
414
+ "required": [
415
+ "status"
416
+ ]
417
+ },
418
+ "then": {
419
+ "required": [
420
+ "approval"
421
+ ],
422
+ "not": {
423
+ "anyOf": [
424
+ {
425
+ "required": [
426
+ "supersededBy"
427
+ ]
428
+ },
429
+ {
430
+ "required": [
431
+ "revocation"
432
+ ]
433
+ }
434
+ ]
435
+ }
436
+ }
437
+ },
438
+ {
439
+ "if": {
440
+ "properties": {
441
+ "status": {
442
+ "const": "superseded"
443
+ }
444
+ },
445
+ "required": [
446
+ "status"
447
+ ]
448
+ },
449
+ "then": {
450
+ "required": [
451
+ "approval",
452
+ "supersededBy"
453
+ ],
454
+ "not": {
455
+ "required": [
456
+ "revocation"
457
+ ]
458
+ }
459
+ }
460
+ },
461
+ {
462
+ "if": {
463
+ "properties": {
464
+ "status": {
465
+ "const": "revoked"
466
+ }
467
+ },
468
+ "required": [
469
+ "status"
470
+ ]
471
+ },
472
+ "then": {
473
+ "required": [
474
+ "approval",
475
+ "revocation"
476
+ ],
477
+ "not": {
478
+ "required": [
479
+ "supersededBy"
480
+ ]
481
+ }
482
+ }
483
+ },
484
+ {
485
+ "if": {
486
+ "properties": {
487
+ "status": {
488
+ "const": "draft"
489
+ }
490
+ },
491
+ "required": [
492
+ "status"
493
+ ]
494
+ },
495
+ "then": {
496
+ "not": {
497
+ "anyOf": [
498
+ {
499
+ "required": [
500
+ "approval"
501
+ ]
502
+ },
503
+ {
504
+ "required": [
505
+ "supersededBy"
506
+ ]
507
+ },
508
+ {
509
+ "required": [
510
+ "revocation"
511
+ ]
512
+ }
513
+ ]
514
+ }
515
+ }
516
+ }
517
+ ]
518
+ }
@@ -0,0 +1,106 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "$id": "https://openplanr.dev/schemas/v1.11.0/design-planning-lineage.schema.json",
4
+ "x-openplanr-contract": {
5
+ "id": "design-planning-lineage",
6
+ "version": "1.11.0"
7
+ },
8
+ "type": "object",
9
+ "additionalProperties": false,
10
+ "properties": {
11
+ "kind": {
12
+ "const": "openplanr-design-planning-lineage"
13
+ },
14
+ "schemaVersion": {
15
+ "const": "1.0.0"
16
+ },
17
+ "handoff": {
18
+ "type": "object",
19
+ "additionalProperties": false,
20
+ "properties": {
21
+ "id": {
22
+ "type": "string",
23
+ "minLength": 1,
24
+ "maxLength": 160,
25
+ "pattern": "^[A-Za-z0-9][A-Za-z0-9._:-]*$"
26
+ },
27
+ "version": {
28
+ "type": "integer",
29
+ "minimum": 1
30
+ },
31
+ "contentDigest": {
32
+ "type": "string",
33
+ "pattern": "^sha256:[a-f0-9]{64}$"
34
+ }
35
+ },
36
+ "required": [
37
+ "id",
38
+ "version",
39
+ "contentDigest"
40
+ ]
41
+ },
42
+ "specId": {
43
+ "type": "string",
44
+ "pattern": "^SPEC-[0-9]{3,}$"
45
+ },
46
+ "mappings": {
47
+ "type": "array",
48
+ "items": {
49
+ "type": "object",
50
+ "additionalProperties": false,
51
+ "properties": {
52
+ "requirementId": {
53
+ "type": "string",
54
+ "pattern": "^REQ-[0-9]{3,}$"
55
+ },
56
+ "acceptanceRefs": {
57
+ "type": "array",
58
+ "items": {
59
+ "type": "object",
60
+ "additionalProperties": false,
61
+ "properties": {
62
+ "storyId": {
63
+ "type": "string",
64
+ "pattern": "^US-[0-9]{3,}$"
65
+ },
66
+ "acceptanceId": {
67
+ "type": "string",
68
+ "pattern": "^AC-[0-9]{3,}$"
69
+ }
70
+ },
71
+ "required": [
72
+ "storyId",
73
+ "acceptanceId"
74
+ ]
75
+ },
76
+ "maxItems": 256,
77
+ "minItems": 1
78
+ },
79
+ "taskIds": {
80
+ "type": "array",
81
+ "items": {
82
+ "type": "string",
83
+ "pattern": "^T-[0-9]{3,}$"
84
+ },
85
+ "maxItems": 256,
86
+ "minItems": 1
87
+ }
88
+ },
89
+ "required": [
90
+ "requirementId",
91
+ "acceptanceRefs",
92
+ "taskIds"
93
+ ]
94
+ },
95
+ "maxItems": 10000,
96
+ "minItems": 1
97
+ }
98
+ },
99
+ "required": [
100
+ "kind",
101
+ "schemaVersion",
102
+ "handoff",
103
+ "specId",
104
+ "mappings"
105
+ ]
106
+ }
@@ -29,6 +29,12 @@ question UI. Write one digestless Protocol 1.6 diagram draft from the bundled
29
29
  contract, then run the command below. The CLI validates it and adds the
30
30
  canonical digest; the skill must not calculate that digest itself.
31
31
 
32
+ For "who does what, and when" between actors, use a lane grammar (`swimlane`
33
+ or `process`): one lane per actor with its `members`, `left-right` so lanes
34
+ read as rows, and relations for the handoffs. For a board (`kanban`,
35
+ `story-map`), use `top-down` so lanes read as columns and leave `relations`
36
+ empty; members stack in declared order.
37
+
32
38
  ```sh
33
39
  planr diagram render <file>.planr-diagram.json --json
34
40
  ```
@@ -52,6 +58,12 @@ a source branch of an existing generated set; rerender its manifest with
52
58
 
53
59
  ## Look before you hand over
54
60
 
61
+ Every manifest result carries a `quality` object — `status`, `failedChecks`,
62
+ `warningChecks`. Treat anything other than `pass` as unfinished work. An
63
+ `invalid` set returns no `nextAction`: restructure and render again rather than
64
+ opening the studio. A missing `quality` object means the report could not be
65
+ read, which `warnings` explains; that set is unverified, not verified.
66
+
55
67
  A `pass` quality status is necessary, not sufficient. After every render, open
56
68
  the PNG or SVG the command lists and check four signatures: a label that reads as
57
69
  another node's caption, rectangles that overlap, a connector crossing the whole
@@ -76,6 +76,10 @@ messages, and events as named phases. After participant IDs, interleave phase
76
76
  event IDs and message relation IDs in `accessibility.readingOrder`. That order
77
77
  is the canonical timeline used by the renderer and editable projections.
78
78
 
79
+ For a lane grammar, add a `lanes` collection of `{ "id", "label", "members" }`
80
+ entries whose `members` list node IDs. Every member must exist, and the
81
+ renderer draws each lane as a titled band holding those nodes.
82
+
79
83
  Write the draft to `<slug>.planr-diagram.json`, then run:
80
84
 
81
85
  ```sh
@@ -37,6 +37,10 @@ reads at a glance.
37
37
  and `flowchart` a back edge pushes its target to the bottom of the canvas.
38
38
  - Use groups sparingly, at most one level, and never for the whole graph. Use
39
39
  at most one annotation; more than that draws connectors across the canvas.
40
+ - Lanes are bands perpendicular to the flow: rows under `left-right`, columns
41
+ under `top-down`. Put every node in exactly one lane; a node outside all
42
+ lanes renders in an unbanded strip after the last lane. A step's position
43
+ along the flow is its relation rank, so a handoff lines up across lanes.
40
44
 
41
45
  Ask a question only if selecting a different answer would change the grammar,
42
46
  meaning, or audience. Infer presentation details from context and let the
@@ -50,6 +50,11 @@ report the changed inputs and obtain the missing decision only when it affects t
50
50
  requested plan. Never silently substitute a newer draft for an approved snapshot.
51
51
  A missing review handoff does not block ordinary planning from a clear specification.
52
52
 
53
+ When the request carries an approved implementation package, read
54
+ [the design handoff contract](references/design-handoff.md). Validate that the
55
+ package is still the current approved version before treating its numbered
56
+ requirements as scope. A missing package leaves ordinary Plan unchanged.
57
+
53
58
  For a consequential unresolved choice, use the host's structured question
54
59
  interface. Ask at most three short, mutually exclusive questions at once. If the
55
60
  host has no structured question interface, ask one concise chat question.
@@ -89,6 +94,13 @@ Validate all frontmatter and acceptance coverage before finishing. If a helper
89
94
  is unavailable, inspect existing IDs and validate the same invariants directly;
90
95
  do not route semantic work to a CLI fallback.
91
96
 
97
+ For approved design input, author the complete story and task bytes before
98
+ touching target paths, then commit those bytes and the sibling
99
+ `design-lineage.json` through the public atomic planning-lineage helper described
100
+ in the reference. A failed requirement-to-acceptance-to-task mapping writes
101
+ nothing. This deterministic commit validates content; it does not generate the
102
+ plan or invoke another phase.
103
+
92
104
  ## Return
93
105
 
94
106
  - **Outcome:** what is implementation-ready.