openplanr 3.1.0 → 3.2.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 (375) hide show
  1. package/CHANGELOG.md +56 -0
  2. package/README.md +1 -1
  3. package/dist/cli/commands/doctor.d.ts.map +1 -1
  4. package/dist/cli/commands/doctor.js +24 -1
  5. package/dist/cli/commands/doctor.js.map +1 -1
  6. package/dist/cli/commands/groups/delivery.d.ts.map +1 -1
  7. package/dist/cli/commands/groups/delivery.js +2 -0
  8. package/dist/cli/commands/groups/delivery.js.map +1 -1
  9. package/dist/cli/commands/planning-artifacts.d.ts.map +1 -1
  10. package/dist/cli/commands/planning-artifacts.js +22 -12
  11. package/dist/cli/commands/planning-artifacts.js.map +1 -1
  12. package/dist/cli/commands/ship.d.ts +3 -0
  13. package/dist/cli/commands/ship.d.ts.map +1 -0
  14. package/dist/cli/commands/ship.js +65 -0
  15. package/dist/cli/commands/ship.js.map +1 -0
  16. package/dist/dashboard/.vite/manifest.json +1 -1
  17. package/dist/dashboard/assets/{index-G7ygVDGg.js → index-L8qtwqv6.js} +2 -2
  18. package/dist/dashboard/assets/{index-G7ygVDGg.js.map → index-L8qtwqv6.js.map} +1 -1
  19. package/dist/dashboard/dashboard-manifest.json +8 -8
  20. package/dist/dashboard/index.html +1 -1
  21. package/dist/models/schema.d.ts +39 -23
  22. package/dist/models/schema.d.ts.map +1 -1
  23. package/dist/models/schema.js +19 -12
  24. package/dist/models/schema.js.map +1 -1
  25. package/dist/models/types.d.ts +6 -0
  26. package/dist/models/types.d.ts.map +1 -1
  27. package/dist/services/global-install-service.d.ts +24 -0
  28. package/dist/services/global-install-service.d.ts.map +1 -0
  29. package/dist/services/global-install-service.js +68 -0
  30. package/dist/services/global-install-service.js.map +1 -0
  31. package/dist/services/id-service.d.ts +1 -5
  32. package/dist/services/id-service.d.ts.map +1 -1
  33. package/dist/services/id-service.js +1 -34
  34. package/dist/services/id-service.js.map +1 -1
  35. package/dist/services/ship-checks/changes.d.ts +24 -0
  36. package/dist/services/ship-checks/changes.d.ts.map +1 -0
  37. package/dist/services/ship-checks/changes.js +135 -0
  38. package/dist/services/ship-checks/changes.js.map +1 -0
  39. package/dist/services/ship-checks/contract.d.ts +81 -0
  40. package/dist/services/ship-checks/contract.d.ts.map +1 -0
  41. package/dist/services/ship-checks/contract.js +7 -0
  42. package/dist/services/ship-checks/contract.js.map +1 -0
  43. package/dist/services/ship-checks/discover.d.ts +10 -0
  44. package/dist/services/ship-checks/discover.d.ts.map +1 -0
  45. package/dist/services/ship-checks/discover.js +250 -0
  46. package/dist/services/ship-checks/discover.js.map +1 -0
  47. package/dist/services/ship-checks/glob.d.ts +5 -0
  48. package/dist/services/ship-checks/glob.d.ts.map +1 -0
  49. package/dist/services/ship-checks/glob.js +39 -0
  50. package/dist/services/ship-checks/glob.js.map +1 -0
  51. package/dist/services/ship-checks/hooks.d.ts +7 -0
  52. package/dist/services/ship-checks/hooks.d.ts.map +1 -0
  53. package/dist/services/ship-checks/hooks.js +65 -0
  54. package/dist/services/ship-checks/hooks.js.map +1 -0
  55. package/dist/services/ship-checks/packages.d.ts +29 -0
  56. package/dist/services/ship-checks/packages.d.ts.map +1 -0
  57. package/dist/services/ship-checks/packages.js +197 -0
  58. package/dist/services/ship-checks/packages.js.map +1 -0
  59. package/dist/services/ship-checks/related-tests.d.ts +13 -0
  60. package/dist/services/ship-checks/related-tests.d.ts.map +1 -0
  61. package/dist/services/ship-checks/related-tests.js +73 -0
  62. package/dist/services/ship-checks/related-tests.js.map +1 -0
  63. package/dist/services/ship-checks/scope.d.ts +8 -0
  64. package/dist/services/ship-checks/scope.d.ts.map +1 -0
  65. package/dist/services/ship-checks/scope.js +66 -0
  66. package/dist/services/ship-checks/scope.js.map +1 -0
  67. package/dist/services/ship-checks/task-requirements.d.ts +14 -0
  68. package/dist/services/ship-checks/task-requirements.d.ts.map +1 -0
  69. package/dist/services/ship-checks/task-requirements.js +145 -0
  70. package/dist/services/ship-checks/task-requirements.js.map +1 -0
  71. package/dist/services/ship-checks/workflows.d.ts +21 -0
  72. package/dist/services/ship-checks/workflows.d.ts.map +1 -0
  73. package/dist/services/ship-checks/workflows.js +208 -0
  74. package/dist/services/ship-checks/workflows.js.map +1 -0
  75. package/dist/services/template-service.d.ts +2 -0
  76. package/dist/services/template-service.d.ts.map +1 -1
  77. package/dist/services/template-service.js +4 -0
  78. package/dist/services/template-service.js.map +1 -1
  79. package/dist/services/upgrade-service.d.ts +15 -1
  80. package/dist/services/upgrade-service.d.ts.map +1 -1
  81. package/dist/services/upgrade-service.js +102 -13
  82. package/dist/services/upgrade-service.js.map +1 -1
  83. package/dist/utils/slugify.d.ts +1 -8
  84. package/dist/utils/slugify.d.ts.map +1 -1
  85. package/dist/utils/slugify.js +1 -25
  86. package/dist/utils/slugify.js.map +1 -1
  87. package/docs/CLI.md +48 -1
  88. package/lib/backlog-item.d.mts +49 -0
  89. package/lib/backlog-item.mjs +339 -0
  90. package/lib/host-packages/adapter-registry.json +5 -5
  91. package/lib/host-packages/capability-map.json +1 -1
  92. package/lib/host-packages/claude/.claude-plugin/marketplace.json +2 -2
  93. package/lib/host-packages/claude/openplanr/.claude-plugin/plugin.json +1 -1
  94. package/lib/host-packages/claude/openplanr/.openplanr-content.json +126 -90
  95. package/lib/host-packages/claude/openplanr/CONNECTORS.md +4 -6
  96. package/lib/host-packages/claude/openplanr/README.md +1 -1
  97. package/lib/host-packages/claude/openplanr/runtime/design/scripts/design-artifact-shell.mjs +1 -1
  98. package/lib/host-packages/claude/openplanr/runtime/design/scripts/design-chunked-workspace-client.mjs +1 -1
  99. package/lib/host-packages/claude/openplanr/runtime/design/scripts/design-document.mjs +385 -79
  100. package/lib/host-packages/claude/openplanr/runtime/design/scripts/design-handoff.mjs +1 -1
  101. package/lib/host-packages/claude/openplanr/runtime/design/scripts/design-resource-pack.mjs +1 -1
  102. package/lib/host-packages/claude/openplanr/runtime/design/scripts/design-review.mjs +45 -4
  103. package/lib/host-packages/{cursor/openplanr/runtime/design/scripts/design-runtime-support-e34c388a8e59.mjs → claude/openplanr/runtime/design/scripts/design-runtime-support-6774fd3d5d02.mjs} +1 -1
  104. package/lib/host-packages/claude/openplanr/runtime/design/scripts/design-share.mjs +8 -5
  105. package/lib/host-packages/claude/openplanr/runtime/design/scripts/design-shared-artifact-support-dependencies-design-support-protocol-contracts-3d9b1a86.mjs +40 -7
  106. package/lib/host-packages/claude/openplanr/runtime/design/scripts/design-shared-artifact-support-protocol-contracts-ea2cd15e.mjs +1 -1
  107. package/lib/host-packages/claude/openplanr/runtime/design/scripts/{design-shared-protocol-contracts-31a760fc.mjs → design-shared-protocol-contracts-b5f28f94.mjs} +284 -45
  108. package/lib/host-packages/claude/openplanr/runtime/design/scripts/design-upload-spool.mjs +1 -1
  109. package/lib/host-packages/claude/openplanr/runtime/design/scripts/design.mjs +215 -55
  110. package/lib/host-packages/claude/openplanr/runtime/design/scripts/runtime/packages/artifact/templates/artifact-review-stage.js.sources/02-artifact-review-ui.js +23 -23
  111. package/lib/host-packages/claude/openplanr/runtime/design/scripts/runtime/packages/artifact/templates/artifact-review-stage.js.sources/03-protocol-contracts.js +246 -45
  112. package/lib/host-packages/claude/openplanr/runtime/design/scripts/runtime/packages/artifact/templates/artifact-review-stage.js.sources/06-artifact-review-ui.js +12 -12
  113. package/lib/host-packages/claude/openplanr/runtime/design/scripts/runtime/packages/artifact/templates/artifact-review-stage.js.sources/08-artifact-review-ui.js +47 -14
  114. package/lib/host-packages/claude/openplanr/runtime/design/scripts/runtime/packages/artifact/templates/artifact-review-stage.js.sources.json +11 -10
  115. package/lib/host-packages/claude/openplanr/runtime/design/scripts/runtime/packages/design/package.json +4 -3
  116. package/lib/host-packages/claude/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.css +16 -11
  117. package/lib/host-packages/claude/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/01-module-runtime.js +7 -11
  118. package/lib/host-packages/claude/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/02-react.js +163 -274
  119. package/lib/host-packages/claude/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/03-react-dom-client-fiber-foundations.js +494 -967
  120. package/lib/host-packages/claude/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/04-react-dom-client-reconciliation-hooks.js +346 -678
  121. package/lib/host-packages/claude/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/05-react-dom-client-render-phases.js +382 -810
  122. package/lib/host-packages/claude/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/06-react-dom-client-commit-effects.js +406 -730
  123. package/lib/host-packages/claude/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/07-react-dom-client-work-loop-scheduling.js +259 -522
  124. package/lib/host-packages/claude/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/08-react-dom-client-dom-events-properties-hydration.js +585 -937
  125. package/lib/host-packages/claude/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/09-react-dom-client-public-roots.js +115 -240
  126. package/lib/host-packages/claude/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/10-react.js +7 -17
  127. package/lib/host-packages/claude/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/11-artifact-review-ui.js +3 -4
  128. package/lib/host-packages/claude/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/12-protocol-contracts.js +215 -0
  129. package/lib/host-packages/claude/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/13-design-review-experience.js +2766 -0
  130. package/lib/host-packages/claude/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/14-studio-shell.js +134 -0
  131. package/lib/host-packages/claude/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/15-canvas-engine.js +2170 -0
  132. package/lib/host-packages/claude/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/16-design-review-experience.js +16 -0
  133. package/lib/host-packages/claude/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/17-studio-shell.js +8 -0
  134. package/lib/host-packages/claude/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/18-interface-primitives.js +3883 -0
  135. package/lib/host-packages/claude/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/19-interface-primitives.js +966 -0
  136. package/lib/host-packages/claude/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/{16-studio-shell.js → 20-studio-shell.js} +122 -227
  137. package/lib/host-packages/claude/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/21-design-studio.js +1583 -0
  138. package/lib/host-packages/claude/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources.json +101 -47
  139. package/lib/host-packages/claude/openplanr/runtime/design/scripts/runtime/packages/protocol/package.json +5 -1
  140. package/lib/host-packages/{openai/openplanr/runtime/design/scripts/runtime/packages/protocol/schemas/v1.9.0 → claude/openplanr/runtime/design/scripts/runtime/packages/protocol/schemas/v1.20.0}/design-document.schema.json +78 -5
  141. package/lib/host-packages/claude/openplanr/runtime/plan/scripts/design-protocol-contracts.mjs +247 -45
  142. package/lib/host-packages/claude/openplanr/runtime/plan/scripts/design.mjs +45 -12
  143. package/lib/host-packages/claude/openplanr/runtime/plan/scripts/runtime/packages/protocol/package.json +5 -1
  144. package/lib/host-packages/claude/openplanr/skills/connect/references/connectors.md +4 -6
  145. package/lib/host-packages/claude/openplanr/skills/design/SKILL.md +12 -0
  146. package/lib/host-packages/claude/openplanr/skills/design/references/craft.md +14 -3
  147. package/lib/host-packages/claude/openplanr/skills/design/references/design-system.md +33 -1
  148. package/lib/host-packages/claude/openplanr/skills/design/references/discovery.md +18 -4
  149. package/lib/host-packages/claude/openplanr/skills/design/references/generation.md +74 -1
  150. package/lib/host-packages/claude/openplanr/skills/design/references/hosted-canvas.md +62 -0
  151. package/lib/host-packages/claude/openplanr/skills/design/references/review.md +46 -1
  152. package/lib/host-packages/claude/openplanr/skills/design/references/utilities.md +6 -0
  153. package/lib/host-packages/claude/openplanr/skills/design/schemas/design-document.schema.json +78 -5
  154. package/lib/host-packages/claude/openplanr/skills/design-loop/references/craft.md +14 -3
  155. package/lib/host-packages/claude/openplanr/skills/design-loop/references/design-system.md +33 -1
  156. package/lib/host-packages/claude/openplanr/skills/design-loop/references/discovery.md +18 -4
  157. package/lib/host-packages/claude/openplanr/skills/design-loop/references/generation.md +74 -1
  158. package/lib/host-packages/claude/openplanr/skills/design-loop/references/review.md +46 -1
  159. package/lib/host-packages/claude/openplanr/skills/design-loop/references/utilities.md +6 -0
  160. package/lib/host-packages/claude/openplanr/skills/design-loop/schemas/design-document.schema.json +78 -5
  161. package/lib/host-packages/claude/openplanr/skills/design-review/references/craft.md +14 -3
  162. package/lib/host-packages/claude/openplanr/skills/design-review/references/design-system.md +33 -1
  163. package/lib/host-packages/claude/openplanr/skills/design-review/references/discovery.md +18 -4
  164. package/lib/host-packages/claude/openplanr/skills/design-review/references/generation.md +74 -1
  165. package/lib/host-packages/claude/openplanr/skills/design-review/references/review.md +46 -1
  166. package/lib/host-packages/claude/openplanr/skills/design-review/references/utilities.md +6 -0
  167. package/lib/host-packages/claude/openplanr/skills/design-review/schemas/design-document.schema.json +78 -5
  168. package/lib/host-packages/claude/openplanr/skills/investigate/SKILL.md +10 -1
  169. package/lib/host-packages/claude/openplanr/skills/investigate/references/findings.md +92 -0
  170. package/lib/host-packages/claude/openplanr/skills/investigate/scripts/backlog-item.mjs +339 -0
  171. package/lib/host-packages/claude/openplanr/skills/plan/SKILL.md +3 -0
  172. package/lib/host-packages/claude/openplanr/skills/plan/schemas/design-document.schema.json +78 -5
  173. package/lib/host-packages/claude/openplanr/skills/share/references/connectors.md +4 -6
  174. package/lib/host-packages/claude/openplanr/skills/ship/SKILL.md +15 -4
  175. package/lib/host-packages/claude/openplanr/skills/ship/references/findings.md +92 -0
  176. package/lib/host-packages/claude/openplanr/skills/ship/references/result-contract.md +3 -1
  177. package/lib/host-packages/claude/openplanr/skills/ship/scripts/backlog-item.mjs +339 -0
  178. package/lib/host-packages/claude/openplanr/skills/sprint/references/connectors.md +4 -6
  179. package/lib/host-packages/claude/openplanr/skills/status/references/connectors.md +4 -6
  180. package/lib/host-packages/claude/openplanr/skills/sync/references/connectors.md +4 -6
  181. package/lib/host-packages/cursor/openplanr/.openplanr-content.json +125 -89
  182. package/lib/host-packages/cursor/openplanr/CONNECTORS.md +4 -6
  183. package/lib/host-packages/cursor/openplanr/manifest.json +1 -1
  184. package/lib/host-packages/cursor/openplanr/rules/planr-connect/references/connectors.md +4 -6
  185. package/lib/host-packages/cursor/openplanr/rules/planr-design/references/craft.md +14 -3
  186. package/lib/host-packages/cursor/openplanr/rules/planr-design/references/design-system.md +33 -1
  187. package/lib/host-packages/cursor/openplanr/rules/planr-design/references/discovery.md +18 -4
  188. package/lib/host-packages/cursor/openplanr/rules/planr-design/references/generation.md +74 -1
  189. package/lib/host-packages/cursor/openplanr/rules/planr-design/references/hosted-canvas.md +62 -0
  190. package/lib/host-packages/cursor/openplanr/rules/planr-design/references/review.md +46 -1
  191. package/lib/host-packages/cursor/openplanr/rules/planr-design/references/utilities.md +6 -0
  192. package/lib/host-packages/cursor/openplanr/rules/planr-design/schemas/design-document.schema.json +78 -5
  193. package/lib/host-packages/cursor/openplanr/rules/planr-design-loop/references/craft.md +14 -3
  194. package/lib/host-packages/cursor/openplanr/rules/planr-design-loop/references/design-system.md +33 -1
  195. package/lib/host-packages/cursor/openplanr/rules/planr-design-loop/references/discovery.md +18 -4
  196. package/lib/host-packages/cursor/openplanr/rules/planr-design-loop/references/generation.md +74 -1
  197. package/lib/host-packages/cursor/openplanr/rules/planr-design-loop/references/review.md +46 -1
  198. package/lib/host-packages/cursor/openplanr/rules/planr-design-loop/references/utilities.md +6 -0
  199. package/lib/host-packages/cursor/openplanr/rules/planr-design-loop/schemas/design-document.schema.json +78 -5
  200. package/lib/host-packages/cursor/openplanr/rules/planr-design-review/references/craft.md +14 -3
  201. package/lib/host-packages/cursor/openplanr/rules/planr-design-review/references/design-system.md +33 -1
  202. package/lib/host-packages/cursor/openplanr/rules/planr-design-review/references/discovery.md +18 -4
  203. package/lib/host-packages/cursor/openplanr/rules/planr-design-review/references/generation.md +74 -1
  204. package/lib/host-packages/cursor/openplanr/rules/planr-design-review/references/review.md +46 -1
  205. package/lib/host-packages/cursor/openplanr/rules/planr-design-review/references/utilities.md +6 -0
  206. package/lib/host-packages/cursor/openplanr/rules/planr-design-review/schemas/design-document.schema.json +78 -5
  207. package/lib/host-packages/cursor/openplanr/rules/planr-design.mdc +12 -0
  208. package/lib/host-packages/cursor/openplanr/rules/planr-investigate/references/findings.md +92 -0
  209. package/lib/host-packages/cursor/openplanr/rules/planr-investigate/scripts/backlog-item.mjs +339 -0
  210. package/lib/host-packages/cursor/openplanr/rules/planr-investigate.mdc +10 -1
  211. package/lib/host-packages/cursor/openplanr/rules/planr-plan/schemas/design-document.schema.json +78 -5
  212. package/lib/host-packages/cursor/openplanr/rules/planr-plan.mdc +3 -0
  213. package/lib/host-packages/cursor/openplanr/rules/planr-share/references/connectors.md +4 -6
  214. package/lib/host-packages/cursor/openplanr/rules/planr-ship/references/findings.md +92 -0
  215. package/lib/host-packages/cursor/openplanr/rules/planr-ship/references/result-contract.md +3 -1
  216. package/lib/host-packages/cursor/openplanr/rules/planr-ship/scripts/backlog-item.mjs +339 -0
  217. package/lib/host-packages/cursor/openplanr/rules/planr-ship.mdc +15 -4
  218. package/lib/host-packages/cursor/openplanr/rules/planr-sprint/references/connectors.md +4 -6
  219. package/lib/host-packages/cursor/openplanr/rules/planr-status/references/connectors.md +4 -6
  220. package/lib/host-packages/cursor/openplanr/rules/planr-sync/references/connectors.md +4 -6
  221. package/lib/host-packages/cursor/openplanr/runtime/design/scripts/design-artifact-shell.mjs +1 -1
  222. package/lib/host-packages/cursor/openplanr/runtime/design/scripts/design-chunked-workspace-client.mjs +1 -1
  223. package/lib/host-packages/cursor/openplanr/runtime/design/scripts/design-document.mjs +385 -79
  224. package/lib/host-packages/cursor/openplanr/runtime/design/scripts/design-handoff.mjs +1 -1
  225. package/lib/host-packages/cursor/openplanr/runtime/design/scripts/design-resource-pack.mjs +1 -1
  226. package/lib/host-packages/cursor/openplanr/runtime/design/scripts/design-review.mjs +45 -4
  227. package/lib/host-packages/{openai/openplanr/runtime/design/scripts/design-runtime-support-e34c388a8e59.mjs → cursor/openplanr/runtime/design/scripts/design-runtime-support-6774fd3d5d02.mjs} +1 -1
  228. package/lib/host-packages/cursor/openplanr/runtime/design/scripts/design-share.mjs +8 -5
  229. package/lib/host-packages/cursor/openplanr/runtime/design/scripts/design-shared-artifact-support-dependencies-design-support-protocol-contracts-3d9b1a86.mjs +40 -7
  230. package/lib/host-packages/cursor/openplanr/runtime/design/scripts/design-shared-artifact-support-protocol-contracts-ea2cd15e.mjs +1 -1
  231. package/lib/host-packages/{openai/openplanr/runtime/design/scripts/design-shared-protocol-contracts-31a760fc.mjs → cursor/openplanr/runtime/design/scripts/design-shared-protocol-contracts-b5f28f94.mjs} +284 -45
  232. package/lib/host-packages/cursor/openplanr/runtime/design/scripts/design-upload-spool.mjs +1 -1
  233. package/lib/host-packages/cursor/openplanr/runtime/design/scripts/design.mjs +215 -55
  234. package/lib/host-packages/cursor/openplanr/runtime/design/scripts/runtime/packages/artifact/templates/artifact-review-stage.js.sources/02-artifact-review-ui.js +23 -23
  235. package/lib/host-packages/cursor/openplanr/runtime/design/scripts/runtime/packages/artifact/templates/artifact-review-stage.js.sources/03-protocol-contracts.js +246 -45
  236. package/lib/host-packages/cursor/openplanr/runtime/design/scripts/runtime/packages/artifact/templates/artifact-review-stage.js.sources/06-artifact-review-ui.js +12 -12
  237. package/lib/host-packages/cursor/openplanr/runtime/design/scripts/runtime/packages/artifact/templates/artifact-review-stage.js.sources/08-artifact-review-ui.js +47 -14
  238. package/lib/host-packages/cursor/openplanr/runtime/design/scripts/runtime/packages/artifact/templates/artifact-review-stage.js.sources.json +11 -10
  239. package/lib/host-packages/cursor/openplanr/runtime/design/scripts/runtime/packages/design/package.json +4 -3
  240. package/lib/host-packages/cursor/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.css +16 -11
  241. package/lib/host-packages/cursor/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/01-module-runtime.js +7 -11
  242. package/lib/host-packages/cursor/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/02-react.js +163 -274
  243. package/lib/host-packages/cursor/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/03-react-dom-client-fiber-foundations.js +494 -967
  244. package/lib/host-packages/cursor/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/04-react-dom-client-reconciliation-hooks.js +346 -678
  245. package/lib/host-packages/cursor/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/05-react-dom-client-render-phases.js +382 -810
  246. package/lib/host-packages/cursor/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/06-react-dom-client-commit-effects.js +406 -730
  247. package/lib/host-packages/cursor/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/07-react-dom-client-work-loop-scheduling.js +259 -522
  248. package/lib/host-packages/cursor/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/08-react-dom-client-dom-events-properties-hydration.js +585 -937
  249. package/lib/host-packages/cursor/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/09-react-dom-client-public-roots.js +115 -240
  250. package/lib/host-packages/cursor/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/10-react.js +7 -17
  251. package/lib/host-packages/cursor/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/11-artifact-review-ui.js +3 -4
  252. package/lib/host-packages/cursor/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/12-protocol-contracts.js +215 -0
  253. package/lib/host-packages/cursor/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/13-design-review-experience.js +2766 -0
  254. package/lib/host-packages/cursor/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/14-studio-shell.js +134 -0
  255. package/lib/host-packages/cursor/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/15-canvas-engine.js +2170 -0
  256. package/lib/host-packages/cursor/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/16-design-review-experience.js +16 -0
  257. package/lib/host-packages/cursor/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/17-studio-shell.js +8 -0
  258. package/lib/host-packages/cursor/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/18-interface-primitives.js +3883 -0
  259. package/lib/host-packages/cursor/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/19-interface-primitives.js +966 -0
  260. package/lib/host-packages/cursor/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/{16-studio-shell.js → 20-studio-shell.js} +122 -227
  261. package/lib/host-packages/cursor/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/21-design-studio.js +1583 -0
  262. package/lib/host-packages/cursor/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources.json +101 -47
  263. package/lib/host-packages/cursor/openplanr/runtime/design/scripts/runtime/packages/protocol/package.json +5 -1
  264. package/lib/host-packages/{claude/openplanr/runtime/design/scripts/runtime/packages/protocol/schemas/v1.9.0 → cursor/openplanr/runtime/design/scripts/runtime/packages/protocol/schemas/v1.20.0}/design-document.schema.json +78 -5
  265. package/lib/host-packages/cursor/openplanr/runtime/plan/scripts/design-protocol-contracts.mjs +247 -45
  266. package/lib/host-packages/cursor/openplanr/runtime/plan/scripts/design.mjs +45 -12
  267. package/lib/host-packages/cursor/openplanr/runtime/plan/scripts/runtime/packages/protocol/package.json +5 -1
  268. package/lib/host-packages/openai/.claude-plugin/marketplace.json +2 -2
  269. package/lib/host-packages/openai/openplanr/.codex-plugin/plugin.json +1 -1
  270. package/lib/host-packages/openai/openplanr/.openplanr-content.json +128 -92
  271. package/lib/host-packages/openai/openplanr/CONNECTORS.md +4 -6
  272. package/lib/host-packages/openai/openplanr/runtime/design/scripts/design-artifact-shell.mjs +1 -1
  273. package/lib/host-packages/openai/openplanr/runtime/design/scripts/design-chunked-workspace-client.mjs +1 -1
  274. package/lib/host-packages/openai/openplanr/runtime/design/scripts/design-document.mjs +385 -79
  275. package/lib/host-packages/openai/openplanr/runtime/design/scripts/design-handoff.mjs +1 -1
  276. package/lib/host-packages/openai/openplanr/runtime/design/scripts/design-resource-pack.mjs +1 -1
  277. package/lib/host-packages/openai/openplanr/runtime/design/scripts/design-review.mjs +45 -4
  278. package/lib/host-packages/{claude/openplanr/runtime/design/scripts/design-runtime-support-e34c388a8e59.mjs → openai/openplanr/runtime/design/scripts/design-runtime-support-6774fd3d5d02.mjs} +1 -1
  279. package/lib/host-packages/openai/openplanr/runtime/design/scripts/design-share.mjs +8 -5
  280. package/lib/host-packages/openai/openplanr/runtime/design/scripts/design-shared-artifact-support-dependencies-design-support-protocol-contracts-3d9b1a86.mjs +40 -7
  281. package/lib/host-packages/openai/openplanr/runtime/design/scripts/design-shared-artifact-support-protocol-contracts-ea2cd15e.mjs +1 -1
  282. package/lib/host-packages/{cursor/openplanr/runtime/design/scripts/design-shared-protocol-contracts-31a760fc.mjs → openai/openplanr/runtime/design/scripts/design-shared-protocol-contracts-b5f28f94.mjs} +284 -45
  283. package/lib/host-packages/openai/openplanr/runtime/design/scripts/design-upload-spool.mjs +1 -1
  284. package/lib/host-packages/openai/openplanr/runtime/design/scripts/design.mjs +215 -55
  285. package/lib/host-packages/openai/openplanr/runtime/design/scripts/runtime/packages/artifact/templates/artifact-review-stage.js.sources/02-artifact-review-ui.js +23 -23
  286. package/lib/host-packages/openai/openplanr/runtime/design/scripts/runtime/packages/artifact/templates/artifact-review-stage.js.sources/03-protocol-contracts.js +246 -45
  287. package/lib/host-packages/openai/openplanr/runtime/design/scripts/runtime/packages/artifact/templates/artifact-review-stage.js.sources/06-artifact-review-ui.js +12 -12
  288. package/lib/host-packages/openai/openplanr/runtime/design/scripts/runtime/packages/artifact/templates/artifact-review-stage.js.sources/08-artifact-review-ui.js +47 -14
  289. package/lib/host-packages/openai/openplanr/runtime/design/scripts/runtime/packages/artifact/templates/artifact-review-stage.js.sources.json +11 -10
  290. package/lib/host-packages/openai/openplanr/runtime/design/scripts/runtime/packages/design/package.json +4 -3
  291. package/lib/host-packages/openai/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.css +16 -11
  292. package/lib/host-packages/openai/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/01-module-runtime.js +7 -11
  293. package/lib/host-packages/openai/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/02-react.js +163 -274
  294. package/lib/host-packages/openai/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/03-react-dom-client-fiber-foundations.js +494 -967
  295. package/lib/host-packages/openai/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/04-react-dom-client-reconciliation-hooks.js +346 -678
  296. package/lib/host-packages/openai/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/05-react-dom-client-render-phases.js +382 -810
  297. package/lib/host-packages/openai/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/06-react-dom-client-commit-effects.js +406 -730
  298. package/lib/host-packages/openai/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/07-react-dom-client-work-loop-scheduling.js +259 -522
  299. package/lib/host-packages/openai/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/08-react-dom-client-dom-events-properties-hydration.js +585 -937
  300. package/lib/host-packages/openai/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/09-react-dom-client-public-roots.js +115 -240
  301. package/lib/host-packages/openai/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/10-react.js +7 -17
  302. package/lib/host-packages/openai/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/11-artifact-review-ui.js +3 -4
  303. package/lib/host-packages/openai/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/12-protocol-contracts.js +215 -0
  304. package/lib/host-packages/openai/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/13-design-review-experience.js +2766 -0
  305. package/lib/host-packages/openai/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/14-studio-shell.js +134 -0
  306. package/lib/host-packages/openai/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/15-canvas-engine.js +2170 -0
  307. package/lib/host-packages/openai/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/16-design-review-experience.js +16 -0
  308. package/lib/host-packages/openai/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/17-studio-shell.js +8 -0
  309. package/lib/host-packages/openai/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/18-interface-primitives.js +3883 -0
  310. package/lib/host-packages/openai/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/19-interface-primitives.js +966 -0
  311. package/lib/host-packages/openai/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/{16-studio-shell.js → 20-studio-shell.js} +122 -227
  312. package/lib/host-packages/openai/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/21-design-studio.js +1583 -0
  313. package/lib/host-packages/openai/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources.json +101 -47
  314. package/lib/host-packages/openai/openplanr/runtime/design/scripts/runtime/packages/protocol/package.json +5 -1
  315. package/lib/host-packages/{cursor/openplanr/runtime/design/scripts/runtime/packages/protocol/schemas/v1.9.0 → openai/openplanr/runtime/design/scripts/runtime/packages/protocol/schemas/v1.20.0}/design-document.schema.json +78 -5
  316. package/lib/host-packages/openai/openplanr/runtime/plan/scripts/design-protocol-contracts.mjs +247 -45
  317. package/lib/host-packages/openai/openplanr/runtime/plan/scripts/design.mjs +45 -12
  318. package/lib/host-packages/openai/openplanr/runtime/plan/scripts/runtime/packages/protocol/package.json +5 -1
  319. package/lib/host-packages/openai/openplanr/skills/connect/references/connectors.md +4 -6
  320. package/lib/host-packages/openai/openplanr/skills/design/SKILL.md +12 -0
  321. package/lib/host-packages/openai/openplanr/skills/design/openplanr.skill.json +11 -0
  322. package/lib/host-packages/openai/openplanr/skills/design/references/craft.md +14 -3
  323. package/lib/host-packages/openai/openplanr/skills/design/references/design-system.md +33 -1
  324. package/lib/host-packages/openai/openplanr/skills/design/references/discovery.md +18 -4
  325. package/lib/host-packages/openai/openplanr/skills/design/references/generation.md +74 -1
  326. package/lib/host-packages/openai/openplanr/skills/design/references/hosted-canvas.md +62 -0
  327. package/lib/host-packages/openai/openplanr/skills/design/references/review.md +46 -1
  328. package/lib/host-packages/openai/openplanr/skills/design/references/utilities.md +6 -0
  329. package/lib/host-packages/openai/openplanr/skills/design/schemas/design-document.schema.json +78 -5
  330. package/lib/host-packages/openai/openplanr/skills/design-loop/references/craft.md +14 -3
  331. package/lib/host-packages/openai/openplanr/skills/design-loop/references/design-system.md +33 -1
  332. package/lib/host-packages/openai/openplanr/skills/design-loop/references/discovery.md +18 -4
  333. package/lib/host-packages/openai/openplanr/skills/design-loop/references/generation.md +74 -1
  334. package/lib/host-packages/openai/openplanr/skills/design-loop/references/review.md +46 -1
  335. package/lib/host-packages/openai/openplanr/skills/design-loop/references/utilities.md +6 -0
  336. package/lib/host-packages/openai/openplanr/skills/design-loop/schemas/design-document.schema.json +78 -5
  337. package/lib/host-packages/openai/openplanr/skills/design-review/references/craft.md +14 -3
  338. package/lib/host-packages/openai/openplanr/skills/design-review/references/design-system.md +33 -1
  339. package/lib/host-packages/openai/openplanr/skills/design-review/references/discovery.md +18 -4
  340. package/lib/host-packages/openai/openplanr/skills/design-review/references/generation.md +74 -1
  341. package/lib/host-packages/openai/openplanr/skills/design-review/references/review.md +46 -1
  342. package/lib/host-packages/openai/openplanr/skills/design-review/references/utilities.md +6 -0
  343. package/lib/host-packages/openai/openplanr/skills/design-review/schemas/design-document.schema.json +78 -5
  344. package/lib/host-packages/openai/openplanr/skills/investigate/SKILL.md +10 -1
  345. package/lib/host-packages/openai/openplanr/skills/investigate/openplanr.skill.json +22 -0
  346. package/lib/host-packages/openai/openplanr/skills/investigate/references/findings.md +92 -0
  347. package/lib/host-packages/openai/openplanr/skills/investigate/scripts/backlog-item.mjs +339 -0
  348. package/lib/host-packages/openai/openplanr/skills/plan/SKILL.md +3 -0
  349. package/lib/host-packages/openai/openplanr/skills/plan/schemas/design-document.schema.json +78 -5
  350. package/lib/host-packages/openai/openplanr/skills/share/references/connectors.md +4 -6
  351. package/lib/host-packages/openai/openplanr/skills/ship/SKILL.md +15 -4
  352. package/lib/host-packages/openai/openplanr/skills/ship/openplanr.skill.json +22 -0
  353. package/lib/host-packages/openai/openplanr/skills/ship/references/findings.md +92 -0
  354. package/lib/host-packages/openai/openplanr/skills/ship/references/result-contract.md +3 -1
  355. package/lib/host-packages/openai/openplanr/skills/ship/scripts/backlog-item.mjs +339 -0
  356. package/lib/host-packages/openai/openplanr/skills/sprint/references/connectors.md +4 -6
  357. package/lib/host-packages/openai/openplanr/skills/status/references/connectors.md +4 -6
  358. package/lib/host-packages/openai/openplanr/skills/sync/references/connectors.md +4 -6
  359. package/package.json +3 -3
  360. package/dist/templates/backlog/backlog-item.md.hbs +0 -40
  361. package/lib/host-packages/claude/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/12-design-review-experience.js +0 -3589
  362. package/lib/host-packages/claude/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/13-studio-shell.js +0 -184
  363. package/lib/host-packages/claude/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/14-interface-primitives.js +0 -5229
  364. package/lib/host-packages/claude/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/15-interface-primitives.js +0 -1733
  365. package/lib/host-packages/claude/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/17-design-studio.js +0 -1844
  366. package/lib/host-packages/cursor/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/12-design-review-experience.js +0 -3589
  367. package/lib/host-packages/cursor/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/13-studio-shell.js +0 -184
  368. package/lib/host-packages/cursor/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/14-interface-primitives.js +0 -5229
  369. package/lib/host-packages/cursor/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/15-interface-primitives.js +0 -1733
  370. package/lib/host-packages/cursor/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/17-design-studio.js +0 -1844
  371. package/lib/host-packages/openai/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/12-design-review-experience.js +0 -3589
  372. package/lib/host-packages/openai/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/13-studio-shell.js +0 -184
  373. package/lib/host-packages/openai/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/14-interface-primitives.js +0 -5229
  374. package/lib/host-packages/openai/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/15-interface-primitives.js +0 -1733
  375. package/lib/host-packages/openai/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/17-design-studio.js +0 -1844
@@ -4410,7 +4410,22 @@ var freeze = (value) => {
4410
4410
  }
4411
4411
  return value;
4412
4412
  };
4413
- var DESIGN_DOCUMENT_SCHEMA = freeze({
4413
+ var FRAME_SCHEMA = {
4414
+ type: "array",
4415
+ minItems: 1,
4416
+ items: {
4417
+ type: "object",
4418
+ additionalProperties: false,
4419
+ required: ["id", "label", "width", "height"],
4420
+ properties: {
4421
+ id: { $ref: "#/$defs/id" },
4422
+ label: { $ref: "#/$defs/text" },
4423
+ width: { type: "integer", minimum: 1, maximum: 16384 },
4424
+ height: { type: "integer", minimum: 1, maximum: 16384 }
4425
+ }
4426
+ }
4427
+ };
4428
+ var DESIGN_DOCUMENT_V1_SCHEMA = freeze({
4414
4429
  $schema: "https://json-schema.org/draft/2020-12/schema",
4415
4430
  $id: "https://openplanr.dev/schemas/v1.9.0/design-document.schema.json",
4416
4431
  "x-openplanr-contract": { id: "design-document", version: "1.9.0" },
@@ -4461,21 +4476,7 @@ var DESIGN_DOCUMENT_SCHEMA = freeze({
4461
4476
  }
4462
4477
  },
4463
4478
  assets: { $ref: "#/$defs/paths" },
4464
- frames: {
4465
- type: "array",
4466
- minItems: 1,
4467
- items: {
4468
- type: "object",
4469
- additionalProperties: false,
4470
- required: ["id", "label", "width", "height"],
4471
- properties: {
4472
- id: { $ref: "#/$defs/id" },
4473
- label: { $ref: "#/$defs/text" },
4474
- width: { type: "integer", minimum: 1, maximum: 16384 },
4475
- height: { type: "integer", minimum: 1, maximum: 16384 }
4476
- }
4477
- }
4478
- },
4479
+ frames: FRAME_SCHEMA,
4479
4480
  screens: {
4480
4481
  type: "array",
4481
4482
  minItems: 1,
@@ -4551,6 +4552,65 @@ var DESIGN_DOCUMENT_SCHEMA = freeze({
4551
4552
  }
4552
4553
  }
4553
4554
  });
4555
+ var DESIGN_DOCUMENT_SCHEMA = freeze({
4556
+ ...DESIGN_DOCUMENT_V1_SCHEMA,
4557
+ $id: "https://openplanr.dev/schemas/v1.20.0/design-document.schema.json",
4558
+ "x-openplanr-contract": { id: "design-document", version: "1.20.0" },
4559
+ properties: {
4560
+ .../** @type {Record<string, unknown>} */
4561
+ DESIGN_DOCUMENT_V1_SCHEMA.properties,
4562
+ frames: {
4563
+ ...FRAME_SCHEMA,
4564
+ items: {
4565
+ ...FRAME_SCHEMA.items,
4566
+ properties: {
4567
+ ...FRAME_SCHEMA.items.properties,
4568
+ height: { anyOf: [{ type: "integer", minimum: 1, maximum: 16384 }, { const: "auto" }] }
4569
+ }
4570
+ }
4571
+ },
4572
+ layout: {
4573
+ type: "object",
4574
+ additionalProperties: false,
4575
+ properties: {
4576
+ boards: {
4577
+ type: "object",
4578
+ description: "Keys are screenId, screenId/frameId or screenId/frameId/variantId; each ID must exist in the document.",
4579
+ additionalProperties: {
4580
+ type: "object",
4581
+ additionalProperties: false,
4582
+ required: ["x", "y"],
4583
+ properties: {
4584
+ x: { $ref: "#/$defs/coordinate" },
4585
+ y: { $ref: "#/$defs/coordinate" },
4586
+ title: { $ref: "#/$defs/text" }
4587
+ }
4588
+ }
4589
+ },
4590
+ sections: {
4591
+ type: "array",
4592
+ items: {
4593
+ type: "object",
4594
+ additionalProperties: false,
4595
+ required: ["id", "x", "y", "text"],
4596
+ properties: {
4597
+ id: { $ref: "#/$defs/id" },
4598
+ x: { $ref: "#/$defs/coordinate" },
4599
+ y: { $ref: "#/$defs/coordinate" },
4600
+ text: { $ref: "#/$defs/text" },
4601
+ maxW: { type: "integer", minimum: 1, maximum: 16384 }
4602
+ }
4603
+ }
4604
+ }
4605
+ }
4606
+ }
4607
+ },
4608
+ $defs: {
4609
+ .../** @type {Record<string, unknown>} */
4610
+ DESIGN_DOCUMENT_V1_SCHEMA.$defs,
4611
+ coordinate: { type: "number", minimum: -1e7, maximum: 1e7 }
4612
+ }
4613
+ });
4554
4614
 
4555
4615
  // packages/protocol/src/workspace-contracts.mjs
4556
4616
  var DESIGN_WORKSPACE_VERSION = "1.0.0";
@@ -4635,7 +4695,7 @@ var DESIGN_WORKSPACE_SCHEMA = schema4("design-review-workspace", {
4635
4695
  });
4636
4696
  var designProperties = (
4637
4697
  /** @type {Record<string, { items: { properties: Record<string, unknown>; required: string[] } }>} */
4638
- structuredClone(DESIGN_DOCUMENT_SCHEMA.properties)
4698
+ structuredClone(DESIGN_DOCUMENT_V1_SCHEMA.properties)
4639
4699
  );
4640
4700
  for (const key of ["kind", "schemaVersion", "brief", "assets", "designSystem"])
4641
4701
  delete designProperties[key];
@@ -4707,7 +4767,7 @@ var DESIGN_REVIEW_BUNDLE_SCHEMA = {
4707
4767
  },
4708
4768
  ["kind", "schemaVersion", "design", "envelope", "entries", "revision"]
4709
4769
  ),
4710
- $defs: structuredClone(DESIGN_DOCUMENT_SCHEMA.$defs)
4770
+ $defs: structuredClone(DESIGN_DOCUMENT_V1_SCHEMA.$defs)
4711
4771
  };
4712
4772
  var DESIGN_WORKSPACE_SCHEMAS = Object.freeze({
4713
4773
  "design-review-workspace": DESIGN_WORKSPACE_SCHEMA,
@@ -4821,6 +4881,86 @@ var DIAGRAM_REVIEW_SCHEMAS = Object.freeze({
4821
4881
  "diagram-workspace-event": DIAGRAM_WORKSPACE_EVENT_SCHEMA
4822
4882
  });
4823
4883
 
4884
+ // packages/protocol/src/shape-library-contracts.mjs
4885
+ var closed5 = (properties) => ({
4886
+ type: "object",
4887
+ additionalProperties: false,
4888
+ required: Object.keys(properties),
4889
+ properties
4890
+ });
4891
+ var unit = { type: "number", minimum: 0, maximum: 1 };
4892
+ var extent = { type: "number", exclusiveMinimum: 0, maximum: 1 };
4893
+ var point2 = closed5({ x: unit, y: unit });
4894
+ var identifier = { type: "string", pattern: "^[a-z][a-z0-9]*(?:-[a-z0-9]+)*$", maxLength: 128 };
4895
+ var version = { type: "string", pattern: "^[0-9]+\\.[0-9]+\\.[0-9]+$", maxLength: 32 };
4896
+ var digest6 = { type: "string", pattern: "^sha256:[a-f0-9]{64}$" };
4897
+ var rect = {
4898
+ type: { const: "rect" },
4899
+ x: unit,
4900
+ y: unit,
4901
+ width: extent,
4902
+ height: extent,
4903
+ radius: unit
4904
+ };
4905
+ var ellipse = { type: { const: "ellipse" }, cx: unit, cy: unit, rx: extent, ry: extent };
4906
+ var polygon = {
4907
+ type: { const: "polygon" },
4908
+ points: { type: "array", minItems: 3, maxItems: 32, items: point2 }
4909
+ };
4910
+ var paint = { fill: { enum: ["fill", "none"] }, stroke: { enum: ["stroke", "none"] } };
4911
+ var pixels = { type: "number", minimum: 1, maximum: 1e4 };
4912
+ var SHAPE_REFERENCE_SCHEMA = closed5({
4913
+ packId: identifier,
4914
+ packVersion: version,
4915
+ shapeId: identifier,
4916
+ definitionDigest: digest6
4917
+ });
4918
+ var SHAPE_DEFINITION_SCHEMA = {
4919
+ $schema: "https://json-schema.org/draft/2020-12/schema",
4920
+ $id: "https://openplanr.dev/schemas/v1.21.0/diagram-shape-definition.schema.json",
4921
+ "x-openplanr-contract": { id: "diagram-shape-definition", version: "1.21.0" },
4922
+ ...closed5({
4923
+ ...SHAPE_REFERENCE_SCHEMA.properties,
4924
+ name: { type: "string", minLength: 1, maxLength: 128 },
4925
+ description: { type: "string", maxLength: 1024 },
4926
+ tags: {
4927
+ type: "array",
4928
+ maxItems: 16,
4929
+ uniqueItems: true,
4930
+ items: { type: "string", minLength: 1, maxLength: 64 }
4931
+ },
4932
+ primitives: {
4933
+ type: "array",
4934
+ minItems: 1,
4935
+ maxItems: 32,
4936
+ items: {
4937
+ oneOf: [
4938
+ closed5({ ...rect, ...paint }),
4939
+ closed5({ ...ellipse, ...paint }),
4940
+ closed5({ ...polygon, ...paint }),
4941
+ closed5({
4942
+ type: { const: "line" },
4943
+ x1: unit,
4944
+ y1: unit,
4945
+ x2: unit,
4946
+ y2: unit,
4947
+ stroke: paint.stroke
4948
+ })
4949
+ ]
4950
+ }
4951
+ },
4952
+ attachment: { oneOf: [closed5(rect), closed5(ellipse), closed5(polygon)] },
4953
+ textRegion: closed5({ x: unit, y: unit, width: extent, height: extent }),
4954
+ sizing: closed5({ width: pixels, height: pixels, minWidth: pixels, minHeight: pixels })
4955
+ })
4956
+ };
4957
+ var SHAPE_LIBRARY_SCHEMA = {
4958
+ type: "array",
4959
+ maxItems: 512,
4960
+ items: SHAPE_DEFINITION_SCHEMA
4961
+ };
4962
+ var GEOMETRY_ROUNDOFF = Number.EPSILON * 32;
4963
+
4824
4964
  // packages/protocol/src/studio-presentation-contracts.mjs
4825
4965
  var DIAGRAM_PRESENTATION_SCHEMA = {
4826
4966
  $schema: "https://json-schema.org/draft/2020-12/schema",
@@ -4885,14 +5025,75 @@ DIAGRAM_REVIEW_BUNDLE_V11_SCHEMA.properties.authored = {
4885
5025
  DIAGRAM_AUTHORING_BUNDLE_V11_SCHEMA
4886
5026
  ]
4887
5027
  };
5028
+ function withShapeReferences(schema6) {
5029
+ const copy = structuredClone(schema6);
5030
+ function visit(value) {
5031
+ if (!value || typeof value !== "object") return;
5032
+ if (value.properties?.shape && value.properties?.strokeWidth && value.properties?.fontSize)
5033
+ value.properties.shapeRef = SHAPE_REFERENCE_SCHEMA;
5034
+ for (const child of Object.values(value)) visit(child);
5035
+ }
5036
+ visit(copy);
5037
+ return copy;
5038
+ }
5039
+ function versionSchema(schema6, name) {
5040
+ return {
5041
+ ...schema6,
5042
+ $id: `https://openplanr.dev/schemas/v1.21.0/${name}.schema.json`,
5043
+ "x-openplanr-contract": { id: name, version: "1.21.0" }
5044
+ };
5045
+ }
5046
+ var DIAGRAM_AUTHORING_BUNDLE_V12_SCHEMA = versionSchema(
5047
+ withShapeReferences(DIAGRAM_AUTHORING_BUNDLE_V11_SCHEMA),
5048
+ "diagram-authoring-bundle"
5049
+ );
5050
+ Object.assign(DIAGRAM_AUTHORING_BUNDLE_V12_SCHEMA.properties, {
5051
+ schemaVersion: { const: "1.2.0" },
5052
+ protocolVersion: { const: "1.21.0" },
5053
+ shapeLibrary: SHAPE_LIBRARY_SCHEMA
5054
+ });
5055
+ DIAGRAM_AUTHORING_BUNDLE_V12_SCHEMA.required = DIAGRAM_AUTHORING_BUNDLE_V12_SCHEMA.required.filter((key) => key !== "studioPresentation").concat("shapeLibrary");
5056
+ var DIAGRAM_EDIT_TRANSACTION_V12_SCHEMA = versionSchema(
5057
+ withShapeReferences(DIAGRAM_EDIT_TRANSACTION_V11_SCHEMA),
5058
+ "diagram-edit-transaction"
5059
+ );
5060
+ Object.assign(DIAGRAM_EDIT_TRANSACTION_V12_SCHEMA.properties, {
5061
+ schemaVersion: { const: "1.2.0" },
5062
+ protocolVersion: { const: "1.21.0" }
5063
+ });
5064
+ DIAGRAM_EDIT_TRANSACTION_V12_SCHEMA.properties.operations.items.oneOf.push({
5065
+ type: "object",
5066
+ additionalProperties: false,
5067
+ required: ["type", "before", "after"],
5068
+ properties: {
5069
+ type: { const: "set-shape-library" },
5070
+ before: { anyOf: [SHAPE_LIBRARY_SCHEMA, { type: "null" }] },
5071
+ after: { anyOf: [SHAPE_LIBRARY_SCHEMA, { type: "null" }] }
5072
+ }
5073
+ });
5074
+ var DIAGRAM_REVIEW_BUNDLE_V12_SCHEMA = versionSchema(
5075
+ structuredClone(DIAGRAM_REVIEW_BUNDLE_SCHEMA),
5076
+ "diagram-review-bundle"
5077
+ );
5078
+ Object.assign(DIAGRAM_REVIEW_BUNDLE_V12_SCHEMA.properties, {
5079
+ schemaVersion: { const: "1.2.0" },
5080
+ presentation: DIAGRAM_PRESENTATION_SCHEMA,
5081
+ authored: {
5082
+ oneOf: [
5083
+ DIAGRAM_AUTHORING_SCHEMAS["diagram-authoring-bundle"],
5084
+ DIAGRAM_AUTHORING_BUNDLE_V11_SCHEMA,
5085
+ DIAGRAM_AUTHORING_BUNDLE_V12_SCHEMA
5086
+ ]
5087
+ }
5088
+ });
4888
5089
 
4889
5090
  // packages/protocol/src/large-object-contracts.mjs
4890
5091
  var LARGE_OBJECT_VERSION = "2.0.0";
4891
5092
  var id6 = { type: "string", pattern: "^[A-Za-z0-9_-]{22,64}$" };
4892
- var digest6 = { type: "string", pattern: "^[a-f0-9]{64}$" };
5093
+ var digest7 = { type: "string", pattern: "^[a-f0-9]{64}$" };
4893
5094
  var signature3 = { type: "string", pattern: "^[A-Za-z0-9_-]{86}$" };
4894
5095
  var integer2 = (max, min = 0) => ({ type: "integer", minimum: min, maximum: max });
4895
- var closed5 = (properties, required = Object.keys(properties)) => ({
5096
+ var closed6 = (properties, required = Object.keys(properties)) => ({
4896
5097
  type: "object",
4897
5098
  additionalProperties: false,
4898
5099
  properties,
@@ -4900,23 +5101,23 @@ var closed5 = (properties, required = Object.keys(properties)) => ({
4900
5101
  });
4901
5102
  var iso2 = { type: "string", format: "date-time", maxLength: 40 };
4902
5103
  var codec = { enum: ["identity", "deflate-raw"] };
4903
- var publicKey2 = closed5({
5104
+ var publicKey2 = closed6({
4904
5105
  kty: { const: "EC" },
4905
5106
  crv: { const: "P-256" },
4906
5107
  x: { type: "string", pattern: "^[A-Za-z0-9_-]{43}$" },
4907
5108
  y: { type: "string", pattern: "^[A-Za-z0-9_-]{43}$" }
4908
5109
  });
4909
- var keyring = closed5({
5110
+ var keyring = closed6({
4910
5111
  iv: { type: "string", pattern: "^[A-Za-z0-9_-]{16}$" },
4911
5112
  ciphertext: { type: "string", pattern: "^[A-Za-z0-9_-]+$", maxLength: 65536 }
4912
5113
  });
4913
- var chunk = closed5({
5114
+ var chunk = closed6({
4914
5115
  index: integer2(128),
4915
5116
  byteLength: integer2(LARGE_OBJECT_LIMITS.chunkBytes, 17),
4916
5117
  iv: { type: "string", pattern: "^[A-Za-z0-9_-]{16}$" },
4917
- sha256: digest6
5118
+ sha256: digest7
4918
5119
  });
4919
- var catalogSpan = closed5({
5120
+ var catalogSpan = closed6({
4920
5121
  offset: integer2(LARGE_OBJECT_LIMITS.decodedBytes),
4921
5122
  encodedBytes: integer2(LARGE_OBJECT_LIMITS.catalogBytes, 1),
4922
5123
  decodedBytes: integer2(LARGE_OBJECT_LIMITS.catalogBytes, 1),
@@ -4926,7 +5127,7 @@ var schema5 = (name, properties, required) => ({
4926
5127
  $schema: "https://json-schema.org/draft/2020-12/schema",
4927
5128
  $id: `https://openplanr.dev/schemas/v1.17.0/${name}.schema.json`,
4928
5129
  "x-openplanr-contract": { id: name, version: "1.17.0" },
4929
- ...closed5(properties, required)
5130
+ ...closed6(properties, required)
4930
5131
  });
4931
5132
  var ENCRYPTED_RESOURCE_MANIFEST_SCHEMA = schema5("encrypted-resource-manifest", {
4932
5133
  schemaVersion: { const: LARGE_OBJECT_VERSION },
@@ -4948,8 +5149,8 @@ var ENCRYPTED_UPLOAD_PREPARE_SCHEMA = schema5("encrypted-upload-prepare", {
4948
5149
  expectedVersion: integer2(Number.MAX_SAFE_INTEGER),
4949
5150
  epoch: integer2(Number.MAX_SAFE_INTEGER, 1),
4950
5151
  ownerPublicKey: publicKey2,
4951
- ownerAuthHash: digest6,
4952
- reviewerAuthHash: digest6,
5152
+ ownerAuthHash: digest7,
5153
+ reviewerAuthHash: digest7,
4953
5154
  keyring,
4954
5155
  manifest: ENCRYPTED_RESOURCE_MANIFEST_SCHEMA,
4955
5156
  signature: signature3
@@ -4958,7 +5159,7 @@ var ENCRYPTED_UPLOAD_COMMIT_SCHEMA = schema5("encrypted-upload-commit", {
4958
5159
  schemaVersion: { const: LARGE_OBJECT_VERSION },
4959
5160
  workspaceId: id6,
4960
5161
  operationId: id6,
4961
- manifestSha256: digest6,
5162
+ manifestSha256: digest7,
4962
5163
  signature: signature3
4963
5164
  });
4964
5165
  var ENCRYPTED_UPLOAD_RECEIPT_SCHEMA = schema5("encrypted-upload-receipt", {
@@ -4966,7 +5167,7 @@ var ENCRYPTED_UPLOAD_RECEIPT_SCHEMA = schema5("encrypted-upload-receipt", {
4966
5167
  workspaceId: id6,
4967
5168
  operationId: id6,
4968
5169
  revisionId: id6,
4969
- manifestSha256: digest6,
5170
+ manifestSha256: digest7,
4970
5171
  status: { const: "committed" },
4971
5172
  version: integer2(Number.MAX_SAFE_INTEGER, 1),
4972
5173
  committedAt: iso2
@@ -4978,14 +5179,14 @@ var ENCRYPTED_UPLOAD_STATUS_SCHEMA = schema5(
4978
5179
  workspaceId: id6,
4979
5180
  operationId: id6,
4980
5181
  revisionId: id6,
4981
- manifestSha256: digest6,
5182
+ manifestSha256: digest7,
4982
5183
  status: { enum: ["prepared", "committed"] },
4983
5184
  receivedChunks: {
4984
5185
  type: "array",
4985
5186
  maxItems: LARGE_OBJECT_LIMITS.chunks,
4986
- items: closed5({
5187
+ items: closed6({
4987
5188
  index: integer2(128),
4988
- sha256: digest6,
5189
+ sha256: digest7,
4989
5190
  byteLength: integer2(LARGE_OBJECT_LIMITS.chunkBytes, 17)
4990
5191
  })
4991
5192
  },
@@ -5025,14 +5226,14 @@ var ENCRYPTED_WORKSPACE_EVENT_V2_SCHEMA = schema5("encrypted-workspace-event-v2"
5025
5226
  authorPublicKey: publicKey2,
5026
5227
  signature: signature3
5027
5228
  });
5028
- var resource = closed5({
5229
+ var resource = closed6({
5029
5230
  id: { type: "string", pattern: "^r[0-9]{1,4}$" },
5030
5231
  type: { enum: ["html-segments", "shared-block", "asset"] },
5031
5232
  offset: integer2(LARGE_OBJECT_LIMITS.decodedBytes),
5032
5233
  encodedBytes: integer2(LARGE_OBJECT_LIMITS.decodedBytes, 1),
5033
5234
  decodedBytes: integer2(LARGE_OBJECT_LIMITS.decodedBytes, 1),
5034
5235
  codec,
5035
- sha256: digest6
5236
+ sha256: digest7
5036
5237
  });
5037
5238
  var RESOURCE_CATALOG_SCHEMA = schema5("resource-catalog", {
5038
5239
  schemaVersion: { const: "1.0.0" },
@@ -5050,11 +5251,11 @@ var RESOURCE_CATALOG_SCHEMA = schema5("resource-catalog", {
5050
5251
  type: "array",
5051
5252
  minItems: 1,
5052
5253
  maxItems: LARGE_OBJECT_LIMITS.sources,
5053
- items: closed5({
5254
+ items: closed6({
5054
5255
  id: { type: "string", minLength: 1, maxLength: 128 },
5055
5256
  resourceId: resource.properties.id,
5056
5257
  htmlBytes: integer2(LARGE_OBJECT_LIMITS.uniqueHtmlBytes, 1),
5057
- sha256: digest6
5258
+ sha256: digest7
5058
5259
  })
5059
5260
  },
5060
5261
  viewSources: {
@@ -5063,7 +5264,7 @@ var RESOURCE_CATALOG_SCHEMA = schema5("resource-catalog", {
5063
5264
  additionalProperties: { type: "string", minLength: 1, maxLength: 128 }
5064
5265
  }
5065
5266
  });
5066
- RESOURCE_CATALOG_SCHEMA.properties.reviewOf = digest6;
5267
+ RESOURCE_CATALOG_SCHEMA.properties.reviewOf = digest7;
5067
5268
  var companyId = { type: "string", pattern: "^[A-Za-z0-9][A-Za-z0-9._:-]{0,127}$" };
5068
5269
  var companyScope = { organizationId: companyId, projectId: companyId, artifactId: companyId };
5069
5270
  var COMPANY_RESOURCE_MANIFEST_SCHEMA = schema5("company-resource-manifest", {
@@ -5080,10 +5281,10 @@ var COMPANY_RESOURCE_MANIFEST_SCHEMA = schema5("company-resource-manifest", {
5080
5281
  type: "array",
5081
5282
  minItems: 1,
5082
5283
  maxItems: 128,
5083
- items: closed5({
5284
+ items: closed6({
5084
5285
  index: integer2(127),
5085
5286
  byteLength: integer2(LARGE_OBJECT_LIMITS.chunkBytes, 1),
5086
- sha256: digest6
5287
+ sha256: digest7
5087
5288
  })
5088
5289
  }
5089
5290
  });
@@ -5098,7 +5299,7 @@ var COMPANY_RESOURCE_UPLOAD_RECEIPT_SCHEMA = schema5("company-resource-upload-re
5098
5299
  ...companyScope,
5099
5300
  operationId: id6,
5100
5301
  revisionId: id6,
5101
- manifestSha256: digest6,
5302
+ manifestSha256: digest7,
5102
5303
  contentDigest: { type: "string", pattern: "^sha256:[a-f0-9]{64}$" },
5103
5304
  status: { const: "committed" },
5104
5305
  committedAt: iso2
@@ -5112,9 +5313,9 @@ var COMPANY_RESOURCE_UPLOAD_STATUS_SCHEMA = schema5(
5112
5313
  receivedChunks: {
5113
5314
  type: "array",
5114
5315
  maxItems: 128,
5115
- items: closed5({
5316
+ items: closed6({
5116
5317
  index: integer2(127),
5117
- sha256: digest6,
5318
+ sha256: digest7,
5118
5319
  byteLength: integer2(LARGE_OBJECT_LIMITS.chunkBytes, 1)
5119
5320
  })
5120
5321
  },
@@ -5138,7 +5339,7 @@ Object.assign(ENTERPRISE_ARTIFACT_REVISION_V11_SCHEMA.properties, {
5138
5339
  protocolVersion: { const: "1.17.0" },
5139
5340
  contentDigest: { type: "string", pattern: "^sha256:[a-f0-9]{64}$" },
5140
5341
  byteLength: integer2(LARGE_OBJECT_LIMITS.decodedBytes, 1),
5141
- contentReference: closed5({ transport: { const: "resources-v2" }, manifestSha256: digest6 })
5342
+ contentReference: closed6({ transport: { const: "resources-v2" }, manifestSha256: digest7 })
5142
5343
  });
5143
5344
  ENTERPRISE_ARTIFACT_REVISION_V11_SCHEMA.required.push("contentReference", "protocolVersion");
5144
5345
  var WORKSPACE_MANAGEMENT_V2_SCHEMA = schema5("workspace-management-v2", {
@@ -5152,7 +5353,7 @@ var WORKSPACE_ROTATION_V2_SCHEMA = schema5("workspace-rotation-v2", {
5152
5353
  operationId: id6,
5153
5354
  expectedVersion: integer2(Number.MAX_SAFE_INTEGER, 1),
5154
5355
  epoch: integer2(Number.MAX_SAFE_INTEGER, 2),
5155
- reviewerAuthHash: digest6,
5356
+ reviewerAuthHash: digest7,
5156
5357
  keyring,
5157
5358
  signature: signature3
5158
5359
  });
@@ -5184,6 +5385,7 @@ export {
5184
5385
  canonicalizeJson,
5185
5386
  assertPlainData,
5186
5387
  validateJson,
5388
+ DESIGN_DOCUMENT_SCHEMA,
5187
5389
  DESIGN_REVIEW_BUNDLE_SCHEMA,
5188
5390
  LARGE_OBJECT_LIMITS
5189
5391
  };
@@ -1,5 +1,6 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
+ DESIGN_DOCUMENT_SCHEMA,
3
4
  DESIGN_REVIEW_BUNDLE_SCHEMA,
4
5
  LARGE_OBJECT_LIMITS,
5
6
  assertPlainData,
@@ -361,6 +362,33 @@ Object.assign(bundleV12.properties, {
361
362
  },
362
363
  fingerprints: list(DESIGN_FINGERPRINT_SCHEMA, 4096)
363
364
  });
365
+ var bundleCurrent = (
366
+ /** @type {MutableSchema} */
367
+ structuredClone(bundleV12)
368
+ );
369
+ bundleCurrent.$id = "https://openplanr.dev/schemas/v1.20.0/design-review-bundle.schema.json";
370
+ bundleCurrent["x-openplanr-contract"] = { id: "design-review-bundle", version: "1.20.0" };
371
+ bundleCurrent.properties.schemaVersion = { enum: ["1.1.0", "1.2.0"] };
372
+ bundleCurrent.properties.envelope = bundleV11.properties.envelope;
373
+ bundleCurrent.allOf = [
374
+ {
375
+ if: { properties: { schemaVersion: { const: "1.2.0" } } },
376
+ then: { properties: { envelope: bundleV12.properties.envelope } }
377
+ }
378
+ ];
379
+ var currentDesign = (
380
+ /** @type {MutableSchema} */
381
+ bundleCurrent.properties.design
382
+ );
383
+ for (const key of ["frames", "layout"])
384
+ currentDesign.properties[key] = /** @type {Record<string, unknown>} */
385
+ DESIGN_DOCUMENT_SCHEMA.properties[key];
386
+ bundleCurrent.$defs = structuredClone(DESIGN_DOCUMENT_SCHEMA.$defs);
387
+ var currentEntries = (
388
+ /** @type {{ items: { properties: Record<string, unknown> } }} */
389
+ bundleCurrent.properties.entries
390
+ );
391
+ currentEntries.items.properties.height = { const: "auto" };
364
392
  var item = closed(
365
393
  {
366
394
  pinId: id,
@@ -1522,6 +1550,7 @@ function emptyReviewContext(document) {
1522
1550
  // packages/design/lib/design/document-state.mjs
1523
1551
  import { createHash as createHash3, randomUUID } from "node:crypto";
1524
1552
  import {
1553
+ chmodSync,
1525
1554
  closeSync,
1526
1555
  lstatSync,
1527
1556
  mkdirSync,
@@ -1557,14 +1586,15 @@ function readJson(path, fallback = void 0) {
1557
1586
  throw error;
1558
1587
  }
1559
1588
  }
1560
- function atomicJson(path, value) {
1561
- atomicBytes(path, json(value));
1589
+ function atomicJson(path, value, { mode } = {}) {
1590
+ atomicBytes(path, json(value), mode);
1562
1591
  }
1563
- function atomicBytes(path, bytes) {
1592
+ function atomicBytes(path, bytes, mode) {
1564
1593
  mkdirSync(dirname2(path), { recursive: true });
1565
1594
  const temporary = `${path}.${randomUUID()}.tmp`;
1566
1595
  try {
1567
1596
  writeFileSync(temporary, bytes, { mode: 384, flag: "wx" });
1597
+ if (mode !== void 0) chmodSync(temporary, mode);
1568
1598
  renameSync(temporary, path);
1569
1599
  } finally {
1570
1600
  rmSync(temporary, { force: true });
@@ -1620,7 +1650,7 @@ function recoverDesignPublication(root, { ownsRenderLock = false } = {}) {
1620
1650
  function designSpecPath(root) {
1621
1651
  return /(?:^|\/)output\/feats\/feat-[^/]+\/design$/u.test(root.replaceAll("\\", "/")) ? join2(dirname2(root), "design-spec.md") : join2(root, "design-spec.md");
1622
1652
  }
1623
- function currentDesign(file, { recoverPublication = true } = {}) {
1653
+ function currentDesign2(file, { recoverPublication = true } = {}) {
1624
1654
  const root = realpathSync(dirname2(resolve(file)));
1625
1655
  if (recoverPublication) recoverDesignPublication(root);
1626
1656
  else {
@@ -1998,7 +2028,7 @@ function resolveArtifactReviewDestination({
1998
2028
  // packages/design/lib/design/feedback-reader.mjs
1999
2029
  var designReviewKey = (document) => `design-${hash(document.id).slice(0, 24)}`;
2000
2030
  function designReviewPath(file, env = process.env, options = {}) {
2001
- const { root, document } = currentDesign(file, options);
2031
+ const { root, document } = currentDesign2(file, options);
2002
2032
  return resolveArtifactReviewDestination({
2003
2033
  cwd: root,
2004
2034
  env,
@@ -2006,7 +2036,7 @@ function designReviewPath(file, env = process.env, options = {}) {
2006
2036
  }).path;
2007
2037
  }
2008
2038
  function readDesignFeedback(file, env = process.env, options = {}) {
2009
- const current = currentDesign(file, options);
2039
+ const current = currentDesign2(file, options);
2010
2040
  const ledger = readArtifactReviewState(designReviewPath(file, env, options), {
2011
2041
  allowMissing: true
2012
2042
  });
@@ -2433,7 +2463,7 @@ import { dirname as dirname5, isAbsolute as isAbsolute3, join as join7, relative
2433
2463
 
2434
2464
  // packages/artifact/lib/artifact/owner-custody.mjs
2435
2465
  import {
2436
- chmodSync,
2466
+ chmodSync as chmodSync2,
2437
2467
  closeSync as closeSync2,
2438
2468
  existsSync as existsSync3,
2439
2469
  fsyncSync,
@@ -2535,7 +2565,7 @@ var workspaceReviewUrl = (access) => `${address.workspaceReviewUrl(access)}${acc
2535
2565
  // packages/design/lib/design/share-status.mjs
2536
2566
  var FORMAT = "openplanr-design-owner-custody";
2537
2567
  function custodyLocation(file, options = {}, { allowMissing = false } = {}) {
2538
- const current = currentDesign(file, options);
2568
+ const current = currentDesign2(file, options);
2539
2569
  const env = options.env ?? process.env;
2540
2570
  const root = resolve5(options.custodyRoot ?? join7(planrHome(env), "design-shares"));
2541
2571
  let project = current.root;
@@ -2556,13 +2586,13 @@ ${current.document.id}`);
2556
2586
  const legacyPath = !options.custodyRoot && !configuredPlanrHome(env) ? join7(realpathSync4(env.HOME || homedir3()), ".openplanr", "design-shares", `${key}.json`) : null;
2557
2587
  return { root, path, current, legacyPath };
2558
2588
  }
2559
- function presentationFingerprint(current) {
2589
+ function presentationFingerprint(current, { legacy = false } = {}) {
2560
2590
  const state = readJson(join7(current.root, ".design/studio-state.json"), { state: {} }).state;
2561
2591
  return hash(
2562
2592
  JSON.stringify({
2563
2593
  revision: current.revision,
2564
2594
  selectedVariant: state.selectedVariant ?? current.document.selectedVariant,
2565
- positions: state.positions ?? {},
2595
+ ...legacy ? { positions: state.positions ?? {} } : {},
2566
2596
  verification: current.verification.status
2567
2597
  })
2568
2598
  );
@@ -2578,7 +2608,10 @@ var safeStatus = (record, current) => ({
2578
2608
  url: workspaceReviewUrl(record.custody),
2579
2609
  revision: record.custody.currentRevision ?? record.publishedRevision ?? null,
2580
2610
  publishedRevision: record.publishedRevision ?? null,
2581
- hasUpdate: record.publishedRevision !== current.revision || record.publishedPresentation !== presentationFingerprint(current),
2611
+ hasUpdate: record.publishedRevision !== current.revision || ![
2612
+ presentationFingerprint(current),
2613
+ presentationFingerprint(current, { legacy: true })
2614
+ ].includes(record.publishedPresentation),
2582
2615
  epoch: record.custody.epoch,
2583
2616
  commentsPaused: Boolean(record.custody.commentsPaused ?? record.commentsPaused),
2584
2617
  revoked: Boolean(record.revoked),
@@ -2663,7 +2696,7 @@ function resolutionFor(value, shareStatus) {
2663
2696
  });
2664
2697
  }
2665
2698
  function snapshot(file, env, shareOptions = {}) {
2666
- const current = currentDesign(file, shareOptions), feedback = readDesignFeedback(file, env, shareOptions), meta = metadata(current, feedback);
2699
+ const current = currentDesign2(file, shareOptions), feedback = readDesignFeedback(file, env, shareOptions), meta = metadata(current, feedback);
2667
2700
  const reviewContext = current.reviewContext ?? emptyReviewContext(current.document);
2668
2701
  const basis = {
2669
2702
  designId: current.document.id,
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@openplanr/protocol",
3
- "version": "0.13.0",
3
+ "version": "0.14.0",
4
4
  "type": "module",
5
5
  "description": "Canonical OpenPlanr schemas, registries, typed errors, and portable contract validation",
6
6
  "license": "MIT",
@@ -119,6 +119,10 @@
119
119
  "./enterprise-journey-contracts": {
120
120
  "types": "./src/enterprise-journey-contracts.d.mts",
121
121
  "import": "./src/enterprise-journey-contracts.mjs"
122
+ },
123
+ "./shape-library-contracts": {
124
+ "types": "./src/shape-library-contracts.d.mts",
125
+ "import": "./src/shape-library-contracts.mjs"
122
126
  }
123
127
  },
124
128
  "files": [
@@ -4,14 +4,14 @@
4
4
  "name": "OpenPlanr"
5
5
  },
6
6
  "metadata": {
7
- "version": "3.1.0",
7
+ "version": "3.2.0",
8
8
  "description": "Generated local OpenPlanr package."
9
9
  },
10
10
  "plugins": [
11
11
  {
12
12
  "name": "planr",
13
13
  "source": "./openplanr",
14
- "version": "3.1.0",
14
+ "version": "3.2.0",
15
15
  "description": "Close the loop from intent to delivery. Plan, design, build, review, and operate from durable context in your repository.",
16
16
  "strict": true
17
17
  }
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "planr",
3
- "version": "3.1.0",
3
+ "version": "3.2.0",
4
4
  "description": "Close the loop from intent to delivery. Plan, design, build, review, and operate from durable context in your repository.",
5
5
  "author": {
6
6
  "name": "OpenPlanr",