openplanr 2.2640.9 → 2.2641.1

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 (443) hide show
  1. package/CHANGELOG.md +19 -0
  2. package/README.md +14 -14
  3. package/bin/openplanr.js +13 -0
  4. package/bin/planr.js +5 -11
  5. package/dist/cli/commands/artifact.d.ts.map +1 -1
  6. package/dist/cli/commands/artifact.js +5 -4
  7. package/dist/cli/commands/artifact.js.map +1 -1
  8. package/dist/cli/commands/checklist.d.ts.map +1 -1
  9. package/dist/cli/commands/checklist.js +4 -3
  10. package/dist/cli/commands/checklist.js.map +1 -1
  11. package/dist/cli/commands/company.d.ts.map +1 -1
  12. package/dist/cli/commands/company.js +3 -2
  13. package/dist/cli/commands/company.js.map +1 -1
  14. package/dist/cli/commands/context.d.ts +1 -1
  15. package/dist/cli/commands/context.js +1 -1
  16. package/dist/cli/commands/doctor.d.ts.map +1 -1
  17. package/dist/cli/commands/doctor.js +11 -5
  18. package/dist/cli/commands/doctor.js.map +1 -1
  19. package/dist/cli/commands/export.d.ts +1 -1
  20. package/dist/cli/commands/export.js +1 -1
  21. package/dist/cli/commands/github.d.ts +1 -1
  22. package/dist/cli/commands/github.d.ts.map +1 -1
  23. package/dist/cli/commands/github.js +9 -8
  24. package/dist/cli/commands/github.js.map +1 -1
  25. package/dist/cli/commands/init-deterministic.d.ts.map +1 -1
  26. package/dist/cli/commands/init-deterministic.js +2 -1
  27. package/dist/cli/commands/init-deterministic.js.map +1 -1
  28. package/dist/cli/commands/linear.d.ts +2 -2
  29. package/dist/cli/commands/linear.d.ts.map +1 -1
  30. package/dist/cli/commands/linear.js +28 -27
  31. package/dist/cli/commands/linear.js.map +1 -1
  32. package/dist/cli/commands/operate/registrars/index.d.ts +1 -1
  33. package/dist/cli/commands/operate/registrars/index.d.ts.map +1 -1
  34. package/dist/cli/commands/operate/registrars/index.js +1 -1
  35. package/dist/cli/commands/operate/registrars/index.js.map +1 -1
  36. package/dist/cli/commands/operate/render.d.ts.map +1 -1
  37. package/dist/cli/commands/operate/render.js +2 -1
  38. package/dist/cli/commands/operate/render.js.map +1 -1
  39. package/dist/cli/commands/operate.d.ts.map +1 -1
  40. package/dist/cli/commands/operate.js +2 -1
  41. package/dist/cli/commands/operate.js.map +1 -1
  42. package/dist/cli/commands/planning-artifacts.d.ts.map +1 -1
  43. package/dist/cli/commands/planning-artifacts.js +2 -1
  44. package/dist/cli/commands/planning-artifacts.js.map +1 -1
  45. package/dist/cli/commands/quick/interaction.d.ts +1 -1
  46. package/dist/cli/commands/quick/interaction.d.ts.map +1 -1
  47. package/dist/cli/commands/quick/interaction.js +1 -1
  48. package/dist/cli/commands/quick/interaction.js.map +1 -1
  49. package/dist/cli/commands/quick/project.d.ts +1 -1
  50. package/dist/cli/commands/quick/project.d.ts.map +1 -1
  51. package/dist/cli/commands/quick/project.js +1 -1
  52. package/dist/cli/commands/quick/project.js.map +1 -1
  53. package/dist/cli/commands/report-linter.d.ts +1 -1
  54. package/dist/cli/commands/report-linter.js +1 -1
  55. package/dist/cli/commands/report.d.ts +1 -1
  56. package/dist/cli/commands/report.d.ts.map +1 -1
  57. package/dist/cli/commands/report.js +5 -4
  58. package/dist/cli/commands/report.js.map +1 -1
  59. package/dist/cli/commands/setup.d.ts.map +1 -1
  60. package/dist/cli/commands/setup.js +5 -4
  61. package/dist/cli/commands/setup.js.map +1 -1
  62. package/dist/cli/commands/spec.d.ts +11 -11
  63. package/dist/cli/commands/spec.d.ts.map +1 -1
  64. package/dist/cli/commands/spec.js +34 -33
  65. package/dist/cli/commands/spec.js.map +1 -1
  66. package/dist/cli/commands/sprint-refinement.d.ts.map +1 -1
  67. package/dist/cli/commands/sprint-refinement.js +2 -1
  68. package/dist/cli/commands/sprint-refinement.js.map +1 -1
  69. package/dist/cli/commands/status.d.ts.map +1 -1
  70. package/dist/cli/commands/status.js +2 -1
  71. package/dist/cli/commands/status.js.map +1 -1
  72. package/dist/cli/commands/story/interaction.d.ts +1 -1
  73. package/dist/cli/commands/story/interaction.d.ts.map +1 -1
  74. package/dist/cli/commands/story/interaction.js +1 -1
  75. package/dist/cli/commands/story/interaction.js.map +1 -1
  76. package/dist/cli/commands/story/project.d.ts +1 -1
  77. package/dist/cli/commands/story/project.d.ts.map +1 -1
  78. package/dist/cli/commands/story/project.js +1 -1
  79. package/dist/cli/commands/story/project.js.map +1 -1
  80. package/dist/cli/commands/sync.d.ts +1 -1
  81. package/dist/cli/commands/sync.d.ts.map +1 -1
  82. package/dist/cli/commands/sync.js +3 -2
  83. package/dist/cli/commands/sync.js.map +1 -1
  84. package/dist/cli/commands/template.d.ts +1 -1
  85. package/dist/cli/commands/template.js +10 -10
  86. package/dist/cli/commands/template.js.map +1 -1
  87. package/dist/cli/commands/update.d.ts +1 -1
  88. package/dist/cli/commands/update.js +1 -1
  89. package/dist/cli/commands/upgrade.d.ts +1 -1
  90. package/dist/cli/commands/upgrade.d.ts.map +1 -1
  91. package/dist/cli/commands/upgrade.js +3 -2
  92. package/dist/cli/commands/upgrade.js.map +1 -1
  93. package/dist/cli/commands/voice.d.ts +1 -1
  94. package/dist/cli/commands/voice.js +1 -1
  95. package/dist/cli/index.js +6 -3
  96. package/dist/cli/index.js.map +1 -1
  97. package/dist/dashboard/.vite/manifest.json +1 -1
  98. package/dist/dashboard/assets/{index-D7R6tnlX.js → index-DGyC7RDz.js} +115 -115
  99. package/dist/dashboard/assets/index-DGyC7RDz.js.map +1 -0
  100. package/dist/dashboard/dashboard-manifest.json +10 -10
  101. package/dist/dashboard/index.html +1 -1
  102. package/dist/generators/cursor-generator.js +1 -1
  103. package/dist/generators/cursor-generator.js.map +1 -1
  104. package/dist/models/schema.d.ts.map +1 -1
  105. package/dist/models/schema.js +2 -1
  106. package/dist/models/schema.js.map +1 -1
  107. package/dist/models/types.d.ts +12 -12
  108. package/dist/models/types.d.ts.map +1 -1
  109. package/dist/services/artifact-service.d.ts +1 -1
  110. package/dist/services/artifact-service.js +2 -2
  111. package/dist/services/artifact-service.js.map +1 -1
  112. package/dist/services/audit-log-service.d.ts.map +1 -1
  113. package/dist/services/audit-log-service.js +2 -1
  114. package/dist/services/audit-log-service.js.map +1 -1
  115. package/dist/services/claude-plugin-service.d.ts +3 -1
  116. package/dist/services/claude-plugin-service.d.ts.map +1 -1
  117. package/dist/services/claude-plugin-service.js +9 -5
  118. package/dist/services/claude-plugin-service.js.map +1 -1
  119. package/dist/services/codex-plugin-service.d.ts.map +1 -1
  120. package/dist/services/codex-plugin-service.js +3 -2
  121. package/dist/services/codex-plugin-service.js.map +1 -1
  122. package/dist/services/company-auth-service.d.ts.map +1 -1
  123. package/dist/services/company-auth-service.js +2 -1
  124. package/dist/services/company-auth-service.js.map +1 -1
  125. package/dist/services/company-sync-service.d.ts.map +1 -1
  126. package/dist/services/company-sync-service.js +9 -8
  127. package/dist/services/company-sync-service.js.map +1 -1
  128. package/dist/services/config-service.d.ts +6 -1
  129. package/dist/services/config-service.d.ts.map +1 -1
  130. package/dist/services/config-service.js +19 -4
  131. package/dist/services/config-service.js.map +1 -1
  132. package/dist/services/connectors/checkpoint-custody.d.ts.map +1 -1
  133. package/dist/services/connectors/checkpoint-custody.js +4 -1
  134. package/dist/services/connectors/checkpoint-custody.js.map +1 -1
  135. package/dist/services/credentials-service.js +1 -1
  136. package/dist/services/credentials-service.js.map +1 -1
  137. package/dist/services/delivery-status-service.d.ts +1 -1
  138. package/dist/services/delivery-status-service.d.ts.map +1 -1
  139. package/dist/services/delivery-status-service.js +3 -2
  140. package/dist/services/delivery-status-service.js.map +1 -1
  141. package/dist/services/diagram-authoring-service.d.ts.map +1 -1
  142. package/dist/services/diagram-authoring-service.js +2 -1
  143. package/dist/services/diagram-authoring-service.js.map +1 -1
  144. package/dist/services/diagram-pipeline-service.d.ts.map +1 -1
  145. package/dist/services/diagram-pipeline-service.js +6 -5
  146. package/dist/services/diagram-pipeline-service.js.map +1 -1
  147. package/dist/services/distribution-service.d.ts.map +1 -1
  148. package/dist/services/distribution-service.js +4 -3
  149. package/dist/services/distribution-service.js.map +1 -1
  150. package/dist/services/github-service.d.ts +1 -1
  151. package/dist/services/github-service.d.ts.map +1 -1
  152. package/dist/services/github-service.js +7 -6
  153. package/dist/services/github-service.js.map +1 -1
  154. package/dist/services/graph-integrity.d.ts +1 -1
  155. package/dist/services/graph-integrity.js +1 -1
  156. package/dist/services/landing/landing-service.d.ts.map +1 -1
  157. package/dist/services/landing/landing-service.js +4 -1
  158. package/dist/services/landing/landing-service.js.map +1 -1
  159. package/dist/services/landing/receipt-custody.d.ts.map +1 -1
  160. package/dist/services/landing/receipt-custody.js +3 -2
  161. package/dist/services/landing/receipt-custody.js.map +1 -1
  162. package/dist/services/linear/errors.d.ts.map +1 -1
  163. package/dist/services/linear/errors.js +2 -1
  164. package/dist/services/linear/errors.js.map +1 -1
  165. package/dist/services/linear/plan-builders.d.ts +3 -3
  166. package/dist/services/linear/plan-builders.d.ts.map +1 -1
  167. package/dist/services/linear/plan-builders.js +2 -2
  168. package/dist/services/linear/strategy-context.d.ts.map +1 -1
  169. package/dist/services/linear/strategy-context.js +6 -5
  170. package/dist/services/linear/strategy-context.js.map +1 -1
  171. package/dist/services/linear-mapping-service.d.ts +1 -1
  172. package/dist/services/linear-mapping-service.d.ts.map +1 -1
  173. package/dist/services/linear-mapping-service.js +3 -2
  174. package/dist/services/linear-mapping-service.js.map +1 -1
  175. package/dist/services/linear-pull-service.d.ts +1 -1
  176. package/dist/services/linear-pull-service.d.ts.map +1 -1
  177. package/dist/services/linear-pull-service.js +10 -9
  178. package/dist/services/linear-pull-service.js.map +1 -1
  179. package/dist/services/linear-push-service.d.ts +2 -2
  180. package/dist/services/linear-push-service.d.ts.map +1 -1
  181. package/dist/services/linear-push-service.js +17 -16
  182. package/dist/services/linear-push-service.js.map +1 -1
  183. package/dist/services/linear-service.d.ts +2 -2
  184. package/dist/services/linear-service.js +2 -2
  185. package/dist/services/linear-team-service.d.ts.map +1 -1
  186. package/dist/services/linear-team-service.js +2 -1
  187. package/dist/services/linear-team-service.js.map +1 -1
  188. package/dist/services/operate/assignment-packet-service.d.ts.map +1 -1
  189. package/dist/services/operate/assignment-packet-service.js +2 -1
  190. package/dist/services/operate/assignment-packet-service.js.map +1 -1
  191. package/dist/services/operate/delivery-evidence.d.ts.map +1 -1
  192. package/dist/services/operate/delivery-evidence.js +2 -1
  193. package/dist/services/operate/delivery-evidence.js.map +1 -1
  194. package/dist/services/operate/measurement-schedule-service.d.ts.map +1 -1
  195. package/dist/services/operate/measurement-schedule-service.js +2 -1
  196. package/dist/services/operate/measurement-schedule-service.js.map +1 -1
  197. package/dist/services/operate/path-custody.d.ts.map +1 -1
  198. package/dist/services/operate/path-custody.js +2 -1
  199. package/dist/services/operate/path-custody.js.map +1 -1
  200. package/dist/services/operate/pinned-legacy-replay-runner.d.ts.map +1 -1
  201. package/dist/services/operate/pinned-legacy-replay-runner.js +3 -2
  202. package/dist/services/operate/pinned-legacy-replay-runner.js.map +1 -1
  203. package/dist/services/operate/planning-handoff-service.d.ts.map +1 -1
  204. package/dist/services/operate/planning-handoff-service.js +3 -2
  205. package/dist/services/operate/planning-handoff-service.js.map +1 -1
  206. package/dist/services/operate/project-transaction-lock.d.ts.map +1 -1
  207. package/dist/services/operate/project-transaction-lock.js +2 -1
  208. package/dist/services/operate/project-transaction-lock.js.map +1 -1
  209. package/dist/services/operate/repository-read-service.d.ts.map +1 -1
  210. package/dist/services/operate/repository-read-service.js +5 -4
  211. package/dist/services/operate/repository-read-service.js.map +1 -1
  212. package/dist/services/operate/screened-evidence-service.d.ts.map +1 -1
  213. package/dist/services/operate/screened-evidence-service.js +5 -4
  214. package/dist/services/operate/screened-evidence-service.js.map +1 -1
  215. package/dist/services/operate/storage-layout.d.ts.map +1 -1
  216. package/dist/services/operate/storage-layout.js +8 -7
  217. package/dist/services/operate/storage-layout.js.map +1 -1
  218. package/dist/services/operate/store.d.ts.map +1 -1
  219. package/dist/services/operate/store.js +7 -6
  220. package/dist/services/operate/store.js.map +1 -1
  221. package/dist/services/pipeline-package-service.js +1 -1
  222. package/dist/services/pipeline-package-service.js.map +1 -1
  223. package/dist/services/provenance-service.d.ts.map +1 -1
  224. package/dist/services/provenance-service.js +2 -1
  225. package/dist/services/provenance-service.js.map +1 -1
  226. package/dist/services/report-linter-service.js +1 -1
  227. package/dist/services/report-linter-service.js.map +1 -1
  228. package/dist/services/revise-cache-service.d.ts.map +1 -1
  229. package/dist/services/revise-cache-service.js +2 -1
  230. package/dist/services/revise-cache-service.js.map +1 -1
  231. package/dist/services/runtime-manager/doctor.d.ts +13 -0
  232. package/dist/services/runtime-manager/doctor.d.ts.map +1 -1
  233. package/dist/services/runtime-manager/doctor.js +50 -3
  234. package/dist/services/runtime-manager/doctor.js.map +1 -1
  235. package/dist/services/runtime-manager/inventory.d.ts +1 -0
  236. package/dist/services/runtime-manager/inventory.d.ts.map +1 -1
  237. package/dist/services/runtime-manager/inventory.js +3 -1
  238. package/dist/services/runtime-manager/inventory.js.map +1 -1
  239. package/dist/services/runtime-manager-service.d.ts +4 -2
  240. package/dist/services/runtime-manager-service.d.ts.map +1 -1
  241. package/dist/services/runtime-manager-service.js +52 -33
  242. package/dist/services/runtime-manager-service.js.map +1 -1
  243. package/dist/services/server-lifecycle-service.d.ts.map +1 -1
  244. package/dist/services/server-lifecycle-service.js +14 -9
  245. package/dist/services/server-lifecycle-service.js.map +1 -1
  246. package/dist/services/spec-service.d.ts +4 -4
  247. package/dist/services/spec-service.d.ts.map +1 -1
  248. package/dist/services/spec-service.js +9 -8
  249. package/dist/services/spec-service.js.map +1 -1
  250. package/dist/services/sprint-refinement-service.d.ts +6 -6
  251. package/dist/services/sprint-refinement-service.d.ts.map +1 -1
  252. package/dist/services/sprint-refinement-service.js +16 -16
  253. package/dist/services/sprint-refinement-service.js.map +1 -1
  254. package/dist/services/template-service.d.ts.map +1 -1
  255. package/dist/services/template-service.js +3 -1
  256. package/dist/services/template-service.js.map +1 -1
  257. package/dist/services/upgrade-offer-service.d.ts +2 -2
  258. package/dist/services/upgrade-offer-service.d.ts.map +1 -1
  259. package/dist/services/upgrade-offer-service.js +4 -3
  260. package/dist/services/upgrade-offer-service.js.map +1 -1
  261. package/dist/services/upgrade-report.d.ts +1 -1
  262. package/dist/services/upgrade-report.d.ts.map +1 -1
  263. package/dist/services/upgrade-report.js +5 -4
  264. package/dist/services/upgrade-report.js.map +1 -1
  265. package/dist/services/upgrade-service.d.ts +5 -5
  266. package/dist/services/upgrade-service.d.ts.map +1 -1
  267. package/dist/services/upgrade-service.js +14 -13
  268. package/dist/services/upgrade-service.js.map +1 -1
  269. package/dist/templates/backlog/backlog-item.md.hbs +1 -1
  270. package/dist/templates/checklists/agile-checklist.md.hbs +6 -6
  271. package/dist/templates/epics/epic.md.hbs +1 -1
  272. package/dist/templates/export/planning-report.html.hbs +1 -1
  273. package/dist/templates/export/planning-report.md.hbs +1 -1
  274. package/dist/templates/features/feature.md.hbs +1 -1
  275. package/dist/templates/guides/estimation.md.hbs +3 -12
  276. package/dist/templates/quick/quick-task.md.hbs +1 -1
  277. package/dist/templates/rules/cursor/create-epic.mdc.hbs +1 -1
  278. package/dist/templates/rules/cursor/create-features.mdc.hbs +1 -1
  279. package/dist/templates/rules/cursor/create-user-story.mdc.hbs +1 -1
  280. package/dist/templates/rules/cursor/openplanr.mdc.hbs +1 -1
  281. package/dist/templates/rules/shared/host-native-guidance.md.hbs +1 -1
  282. package/dist/templates/spec/spec-shaped.md.hbs +1 -1
  283. package/dist/templates/spec/spec.md.hbs +1 -1
  284. package/dist/templates/sprints/sprint-tasks.md.hbs +1 -1
  285. package/dist/templates/sprints/sprint.md.hbs +1 -1
  286. package/dist/templates/stories/user-story.md.hbs +1 -1
  287. package/dist/utils/constants.d.ts +8 -4
  288. package/dist/utils/constants.d.ts.map +1 -1
  289. package/dist/utils/constants.js +10 -4
  290. package/dist/utils/constants.js.map +1 -1
  291. package/docs/ARTIFACT_REVIEW.md +13 -13
  292. package/docs/CLI.md +249 -249
  293. package/docs/CROSS_RUNTIME_SETUP.md +33 -33
  294. package/docs/TROUBLESHOOTING.md +28 -28
  295. package/install.ps1 +2 -2
  296. package/install.sh +3 -3
  297. package/lib/host-packages/adapter-registry.json +5 -5
  298. package/lib/host-packages/capability-map.json +2 -2
  299. package/lib/host-packages/claude/.claude-plugin/marketplace.json +2 -2
  300. package/lib/host-packages/claude/openplanr/.claude-plugin/plugin.json +1 -1
  301. package/lib/host-packages/claude/openplanr/.openplanr-content.json +49 -45
  302. package/lib/host-packages/claude/openplanr/README.md +7 -7
  303. package/lib/host-packages/claude/openplanr/references/agents/shared/modes/spec-driven/designer.md +2 -2
  304. package/lib/host-packages/claude/openplanr/runtime/design/scripts/design-owner-custody.mjs +8 -0
  305. package/lib/host-packages/claude/openplanr/runtime/design/scripts/design-review.mjs +81 -46
  306. package/lib/host-packages/claude/openplanr/runtime/design/scripts/design-share.mjs +9 -4
  307. package/lib/host-packages/claude/openplanr/runtime/design/scripts/runtime/packages/artifact/lib/artifact/ui/studio-shell.css +1 -1
  308. package/lib/host-packages/claude/openplanr/runtime/design/scripts/runtime/packages/design/package.json +3 -3
  309. package/lib/host-packages/claude/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.css +3 -3
  310. package/lib/host-packages/claude/openplanr/runtime/design/scripts/runtime/packages/protocol/package.json +9 -1
  311. package/lib/host-packages/claude/openplanr/runtime/plan/scripts/design.mjs +10 -3
  312. package/lib/host-packages/claude/openplanr/runtime/plan/scripts/runtime/packages/protocol/package.json +9 -1
  313. package/lib/host-packages/claude/openplanr/skills/artifact/SKILL.md +12 -12
  314. package/lib/host-packages/claude/openplanr/skills/artifact/references/company-review.md +9 -9
  315. package/lib/host-packages/claude/openplanr/skills/artifact/references/design-sharing.md +1 -1
  316. package/lib/host-packages/claude/openplanr/skills/artifact/references/diagram-sharing.md +3 -3
  317. package/lib/host-packages/claude/openplanr/skills/dashboard/SKILL.md +1 -1
  318. package/lib/host-packages/claude/openplanr/skills/delegate/references/operator-guide.md +1 -1
  319. package/lib/host-packages/claude/openplanr/skills/design/SKILL.md +1 -1
  320. package/lib/host-packages/claude/openplanr/skills/design/references/team-review.md +1 -1
  321. package/lib/host-packages/claude/openplanr/skills/design/references/utilities.md +4 -4
  322. package/lib/host-packages/claude/openplanr/skills/design-loop/SKILL.md +1 -1
  323. package/lib/host-packages/claude/openplanr/skills/design-loop/references/team-review.md +1 -1
  324. package/lib/host-packages/claude/openplanr/skills/design-loop/references/utilities.md +4 -4
  325. package/lib/host-packages/claude/openplanr/skills/design-review/SKILL.md +1 -1
  326. package/lib/host-packages/claude/openplanr/skills/design-review/references/team-review.md +1 -1
  327. package/lib/host-packages/claude/openplanr/skills/design-review/references/utilities.md +4 -4
  328. package/lib/host-packages/claude/openplanr/skills/diagram/SKILL.md +15 -15
  329. package/lib/host-packages/claude/openplanr/skills/diagram/references/diagram-document.md +1 -1
  330. package/lib/host-packages/claude/openplanr/skills/diagram/references/diagram-intent-to-ir.md +1 -1
  331. package/lib/host-packages/claude/openplanr/skills/diagram/references/diagram-sharing.md +3 -3
  332. package/lib/host-packages/claude/openplanr/skills/doctor/SKILL.md +9 -9
  333. package/lib/host-packages/claude/openplanr/skills/doctor/references/upgrade.md +18 -16
  334. package/lib/host-packages/claude/openplanr/skills/land/SKILL.md +2 -2
  335. package/lib/host-packages/claude/openplanr/skills/plan/references/artifact-contract.md +5 -0
  336. package/lib/host-packages/claude/openplanr/skills/spec/references/specification-contract.md +5 -0
  337. package/lib/host-packages/claude/openplanr/skills/sprint/SKILL.md +12 -12
  338. package/lib/host-packages/claude/openplanr/skills/sprint/references/refinement-contract.md +5 -5
  339. package/lib/host-packages/claude/openplanr/skills/sprint/references/sprint-formats.md +8 -8
  340. package/lib/host-packages/claude/openplanr/skills/sprint/schemas/refinement.schema.json +3 -3
  341. package/lib/host-packages/claude/openplanr/skills/status/SKILL.md +1 -1
  342. package/lib/host-packages/claude/openplanr/skills/sync/SKILL.md +6 -6
  343. package/lib/host-packages/claude/openplanr/skills/sync/scripts/names.mjs +8 -0
  344. package/lib/host-packages/claude/openplanr/skills/sync/scripts/sync.mjs +3 -2
  345. package/lib/host-packages/cursor/openplanr/.openplanr-content.json +47 -43
  346. package/lib/host-packages/cursor/openplanr/manifest.json +1 -1
  347. package/lib/host-packages/cursor/openplanr/rules/planr-artifact/references/company-review.md +9 -9
  348. package/lib/host-packages/cursor/openplanr/rules/planr-artifact/references/design-sharing.md +1 -1
  349. package/lib/host-packages/cursor/openplanr/rules/planr-artifact/references/diagram-sharing.md +3 -3
  350. package/lib/host-packages/cursor/openplanr/rules/planr-artifact.mdc +12 -12
  351. package/lib/host-packages/cursor/openplanr/rules/planr-dashboard.mdc +1 -1
  352. package/lib/host-packages/cursor/openplanr/rules/planr-delegate/references/operator-guide.md +1 -1
  353. package/lib/host-packages/cursor/openplanr/rules/planr-design/references/team-review.md +1 -1
  354. package/lib/host-packages/cursor/openplanr/rules/planr-design/references/utilities.md +4 -4
  355. package/lib/host-packages/cursor/openplanr/rules/planr-design-loop/references/team-review.md +1 -1
  356. package/lib/host-packages/cursor/openplanr/rules/planr-design-loop/references/utilities.md +4 -4
  357. package/lib/host-packages/cursor/openplanr/rules/planr-design-loop.mdc +1 -1
  358. package/lib/host-packages/cursor/openplanr/rules/planr-design-review/references/team-review.md +1 -1
  359. package/lib/host-packages/cursor/openplanr/rules/planr-design-review/references/utilities.md +4 -4
  360. package/lib/host-packages/cursor/openplanr/rules/planr-design-review.mdc +1 -1
  361. package/lib/host-packages/cursor/openplanr/rules/planr-design.mdc +1 -1
  362. package/lib/host-packages/cursor/openplanr/rules/planr-diagram/references/diagram-document.md +1 -1
  363. package/lib/host-packages/cursor/openplanr/rules/planr-diagram/references/diagram-intent-to-ir.md +1 -1
  364. package/lib/host-packages/cursor/openplanr/rules/planr-diagram/references/diagram-sharing.md +3 -3
  365. package/lib/host-packages/cursor/openplanr/rules/planr-diagram.mdc +15 -15
  366. package/lib/host-packages/cursor/openplanr/rules/planr-doctor/references/upgrade.md +18 -16
  367. package/lib/host-packages/cursor/openplanr/rules/planr-doctor.mdc +9 -9
  368. package/lib/host-packages/cursor/openplanr/rules/planr-land.mdc +2 -2
  369. package/lib/host-packages/cursor/openplanr/rules/planr-plan/references/artifact-contract.md +5 -0
  370. package/lib/host-packages/cursor/openplanr/rules/planr-spec/references/specification-contract.md +5 -0
  371. package/lib/host-packages/cursor/openplanr/rules/planr-sprint/references/refinement-contract.md +5 -5
  372. package/lib/host-packages/cursor/openplanr/rules/planr-sprint/references/sprint-formats.md +8 -8
  373. package/lib/host-packages/cursor/openplanr/rules/planr-sprint/schemas/refinement.schema.json +3 -3
  374. package/lib/host-packages/cursor/openplanr/rules/planr-sprint.mdc +12 -12
  375. package/lib/host-packages/cursor/openplanr/rules/planr-status.mdc +1 -1
  376. package/lib/host-packages/cursor/openplanr/rules/planr-sync/scripts/names.mjs +8 -0
  377. package/lib/host-packages/cursor/openplanr/rules/planr-sync/scripts/sync.mjs +3 -2
  378. package/lib/host-packages/cursor/openplanr/rules/planr-sync.mdc +6 -6
  379. package/lib/host-packages/cursor/openplanr/runtime/design/scripts/design-owner-custody.mjs +8 -0
  380. package/lib/host-packages/cursor/openplanr/runtime/design/scripts/design-review.mjs +81 -46
  381. package/lib/host-packages/cursor/openplanr/runtime/design/scripts/design-share.mjs +9 -4
  382. package/lib/host-packages/cursor/openplanr/runtime/design/scripts/runtime/packages/artifact/lib/artifact/ui/studio-shell.css +1 -1
  383. package/lib/host-packages/cursor/openplanr/runtime/design/scripts/runtime/packages/design/package.json +3 -3
  384. package/lib/host-packages/cursor/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.css +3 -3
  385. package/lib/host-packages/cursor/openplanr/runtime/design/scripts/runtime/packages/protocol/package.json +9 -1
  386. package/lib/host-packages/cursor/openplanr/runtime/plan/scripts/design.mjs +10 -3
  387. package/lib/host-packages/cursor/openplanr/runtime/plan/scripts/runtime/packages/protocol/package.json +9 -1
  388. package/lib/host-packages/openai/.claude-plugin/marketplace.json +2 -2
  389. package/lib/host-packages/openai/openplanr/.codex-plugin/plugin.json +1 -1
  390. package/lib/host-packages/openai/openplanr/.openplanr-content.json +48 -44
  391. package/lib/host-packages/openai/openplanr/runtime/design/scripts/design-owner-custody.mjs +8 -0
  392. package/lib/host-packages/openai/openplanr/runtime/design/scripts/design-review.mjs +81 -46
  393. package/lib/host-packages/openai/openplanr/runtime/design/scripts/design-share.mjs +9 -4
  394. package/lib/host-packages/openai/openplanr/runtime/design/scripts/runtime/packages/artifact/lib/artifact/ui/studio-shell.css +1 -1
  395. package/lib/host-packages/openai/openplanr/runtime/design/scripts/runtime/packages/design/package.json +3 -3
  396. package/lib/host-packages/openai/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.css +3 -3
  397. package/lib/host-packages/openai/openplanr/runtime/design/scripts/runtime/packages/protocol/package.json +9 -1
  398. package/lib/host-packages/openai/openplanr/runtime/plan/scripts/design.mjs +10 -3
  399. package/lib/host-packages/openai/openplanr/runtime/plan/scripts/runtime/packages/protocol/package.json +9 -1
  400. package/lib/host-packages/openai/openplanr/skills/artifact/SKILL.md +12 -12
  401. package/lib/host-packages/openai/openplanr/skills/artifact/references/company-review.md +9 -9
  402. package/lib/host-packages/openai/openplanr/skills/artifact/references/design-sharing.md +1 -1
  403. package/lib/host-packages/openai/openplanr/skills/artifact/references/diagram-sharing.md +3 -3
  404. package/lib/host-packages/openai/openplanr/skills/dashboard/SKILL.md +1 -1
  405. package/lib/host-packages/openai/openplanr/skills/delegate/references/operator-guide.md +1 -1
  406. package/lib/host-packages/openai/openplanr/skills/design/SKILL.md +1 -1
  407. package/lib/host-packages/openai/openplanr/skills/design/references/team-review.md +1 -1
  408. package/lib/host-packages/openai/openplanr/skills/design/references/utilities.md +4 -4
  409. package/lib/host-packages/openai/openplanr/skills/design-loop/SKILL.md +1 -1
  410. package/lib/host-packages/openai/openplanr/skills/design-loop/references/team-review.md +1 -1
  411. package/lib/host-packages/openai/openplanr/skills/design-loop/references/utilities.md +4 -4
  412. package/lib/host-packages/openai/openplanr/skills/design-review/SKILL.md +1 -1
  413. package/lib/host-packages/openai/openplanr/skills/design-review/references/team-review.md +1 -1
  414. package/lib/host-packages/openai/openplanr/skills/design-review/references/utilities.md +4 -4
  415. package/lib/host-packages/openai/openplanr/skills/diagram/SKILL.md +15 -15
  416. package/lib/host-packages/openai/openplanr/skills/diagram/references/diagram-document.md +1 -1
  417. package/lib/host-packages/openai/openplanr/skills/diagram/references/diagram-intent-to-ir.md +1 -1
  418. package/lib/host-packages/openai/openplanr/skills/diagram/references/diagram-sharing.md +3 -3
  419. package/lib/host-packages/openai/openplanr/skills/doctor/SKILL.md +9 -9
  420. package/lib/host-packages/openai/openplanr/skills/doctor/references/upgrade.md +18 -16
  421. package/lib/host-packages/openai/openplanr/skills/land/SKILL.md +2 -2
  422. package/lib/host-packages/openai/openplanr/skills/plan/references/artifact-contract.md +5 -0
  423. package/lib/host-packages/openai/openplanr/skills/spec/references/specification-contract.md +5 -0
  424. package/lib/host-packages/openai/openplanr/skills/sprint/SKILL.md +12 -12
  425. package/lib/host-packages/openai/openplanr/skills/sprint/references/refinement-contract.md +5 -5
  426. package/lib/host-packages/openai/openplanr/skills/sprint/references/sprint-formats.md +8 -8
  427. package/lib/host-packages/openai/openplanr/skills/sprint/schemas/refinement.schema.json +3 -3
  428. package/lib/host-packages/openai/openplanr/skills/status/SKILL.md +1 -1
  429. package/lib/host-packages/openai/openplanr/skills/sync/SKILL.md +6 -6
  430. package/lib/host-packages/openai/openplanr/skills/sync/openplanr.skill.json +11 -0
  431. package/lib/host-packages/openai/openplanr/skills/sync/scripts/names.mjs +8 -0
  432. package/lib/host-packages/openai/openplanr/skills/sync/scripts/sync.mjs +3 -2
  433. package/lib/integrations.mjs +3 -2
  434. package/lib/names.d.mts +4 -0
  435. package/lib/names.mjs +8 -0
  436. package/lib/planning-folder.d.mts +14 -0
  437. package/lib/planning-folder.mjs +40 -0
  438. package/package.json +5 -5
  439. package/dist/dashboard/assets/index-D7R6tnlX.js.map +0 -1
  440. package/dist/templates/voice/standup.md.hbs +0 -20
  441. /package/lib/host-packages/claude/openplanr/runtime/design/scripts/{design-runtime-support-5cb7531bede8.mjs → design-runtime-support-336900df0d39.mjs} +0 -0
  442. /package/lib/host-packages/cursor/openplanr/runtime/design/scripts/{design-runtime-support-5cb7531bede8.mjs → design-runtime-support-336900df0d39.mjs} +0 -0
  443. /package/lib/host-packages/openai/openplanr/runtime/design/scripts/{design-runtime-support-5cb7531bede8.mjs → design-runtime-support-336900df0d39.mjs} +0 -0
@@ -52,6 +52,10 @@ import {
52
52
  readJson,
53
53
  reviewDigest
54
54
  } from "./design-shared-artifact-support-dependencies-design-support-protocol-contracts-3d9b1a86.mjs";
55
+ import {
56
+ CLI_COMMAND,
57
+ PLANNING_FOLDER
58
+ } from "./design-owner-custody.mjs";
55
59
  import {
56
60
  planrHome
57
61
  } from "./design-runtime-home.mjs";
@@ -410,8 +414,8 @@ ${fence}`;
410
414
  var { createDesignReviewExport, serializeDesignReviewExport } = reviewExportTools();
411
415
 
412
416
  // packages/design/lib/design/review.mjs
413
- import { existsSync as existsSync4, readFileSync as readFileSync4 } from "node:fs";
414
- import { dirname as dirname4, join as join4, relative, resolve as resolve3 } from "node:path";
417
+ import { existsSync as existsSync5, readFileSync as readFileSync4 } from "node:fs";
418
+ import { dirname as dirname4, join as join5, relative, resolve as resolve3 } from "node:path";
415
419
 
416
420
  // packages/artifact/lib/artifact/review-server.mjs
417
421
  import { existsSync, lstatSync, readdirSync, readFileSync, rmSync } from "node:fs";
@@ -1456,7 +1460,7 @@ function readReviewServerState(path) {
1456
1460
  throw artifactError(
1457
1461
  ARTIFACT_ERROR_CODES.LOOPBACK_STATE,
1458
1462
  "Local Studio owner state is unsafe or malformed. The original record was preserved.",
1459
- "Run planr doctor and recover the owner record before starting or stopping this service."
1463
+ `Run ${CLI_COMMAND} doctor and recover the owner record before starting or stopping this service.`
1460
1464
  );
1461
1465
  }
1462
1466
  }
@@ -1533,6 +1537,34 @@ async function stopArtifactReviewServer(instanceId, { env = process.env, fetchIm
1533
1537
  return controlRequest({ state }, "/internal/v1/shutdown", { method: "POST", fetchImpl });
1534
1538
  }
1535
1539
 
1540
+ // packages/protocol/src/planning-folder.mjs
1541
+ import { existsSync as existsSync2, readdirSync as readdirSync2, statSync } from "node:fs";
1542
+ import { join as join2 } from "node:path";
1543
+ var FOREIGN_FILES = Object.freeze(["planr.config.json", "board.html"]);
1544
+ var GOAL_DIRECTORIES = Object.freeze(["tasks", "plans"]);
1545
+ var isDirectory = (path) => existsSync2(path) && statSync(path).isDirectory();
1546
+ function foreignPlanningFolderSigns(projectRoot2) {
1547
+ const folder = join2(projectRoot2, PLANNING_FOLDER);
1548
+ if (!isDirectory(folder) || existsSync2(join2(folder, "config.json"))) return [];
1549
+ const signs = FOREIGN_FILES.filter((name) => existsSync2(join2(folder, name)));
1550
+ for (const name of GOAL_DIRECTORIES) {
1551
+ const directory = join2(folder, name);
1552
+ if (isDirectory(directory) && readdirSync2(directory).some((entry) => entry.endsWith("-goal.md")))
1553
+ signs.push(`*-goal.md files in ${name}`);
1554
+ }
1555
+ return signs;
1556
+ }
1557
+ function planningFolderConflict(projectRoot2) {
1558
+ const signs = foreignPlanningFolderSigns(projectRoot2);
1559
+ if (signs.length === 0) return null;
1560
+ return Object.freeze({
1561
+ code: "E_PLANNING_FOLDER_FOREIGN",
1562
+ problem: `The ${PLANNING_FOLDER} folder in this project wasn't created by OpenPlanr: it has ${signs.join(", ")} and no OpenPlanr config.json. OpenPlanr wrote nothing there.`,
1563
+ fix: `Move or rename that folder, or use ${CLI_COMMAND} in a project without it, then retry.`,
1564
+ signs: Object.freeze(signs)
1565
+ });
1566
+ }
1567
+
1536
1568
  // packages/design/lib/design/design-plan-handoff.mjs
1537
1569
  var clone = (value) => JSON.parse(canonicalizeJson(value));
1538
1570
  function prepareDesignPlanHandoff(handoff, { subject } = {}) {
@@ -1571,7 +1603,7 @@ function prepareDesignPlanHandoff(handoff, { subject } = {}) {
1571
1603
  // packages/design/lib/design/implementation-handoff.mjs
1572
1604
  import { createHash, randomUUID } from "node:crypto";
1573
1605
  import {
1574
- existsSync as existsSync2,
1606
+ existsSync as existsSync3,
1575
1607
  mkdirSync,
1576
1608
  readFileSync as readFileSync2,
1577
1609
  realpathSync,
@@ -1579,7 +1611,7 @@ import {
1579
1611
  rmSync as rmSync2,
1580
1612
  writeFileSync
1581
1613
  } from "node:fs";
1582
- import { dirname as dirname2, join as join2, resolve as resolve2, sep } from "node:path";
1614
+ import { dirname as dirname2, join as join3, resolve as resolve2, sep } from "node:path";
1583
1615
 
1584
1616
  // packages/design/lib/design/implementation-handoff-markdown.mjs
1585
1617
  var line = (value) => String(value).replaceAll("\r\n", "\n").replaceAll("\r", "\n").trim().replaceAll("\n", " ").replace(/([\\`*_[\]<>#|])/gu, "\\$1");
@@ -1832,19 +1864,19 @@ function createRepositorySourceResolver(root) {
1832
1864
  };
1833
1865
  }
1834
1866
  function implementationHandoffPaths(root) {
1835
- const directory = join2(resolve2(root), "implementation-handoff");
1867
+ const directory = join3(resolve2(root), "implementation-handoff");
1836
1868
  return Object.freeze({
1837
1869
  directory,
1838
- draftJson: join2(directory, "draft.json"),
1839
- draftMarkdown: join2(directory, "draft.md"),
1840
- journal: join2(directory, "draft-publication.json"),
1841
- current: join2(directory, "current.json"),
1842
- history: join2(directory, "versions")
1870
+ draftJson: join3(directory, "draft.json"),
1871
+ draftMarkdown: join3(directory, "draft.md"),
1872
+ journal: join3(directory, "draft-publication.json"),
1873
+ current: join3(directory, "current.json"),
1874
+ history: join3(directory, "versions")
1843
1875
  });
1844
1876
  }
1845
1877
  function recoverImplementationHandoffDraft(root) {
1846
1878
  const paths = implementationHandoffPaths(root);
1847
- if (!existsSync2(paths.journal)) return false;
1879
+ if (!existsSync3(paths.journal)) return false;
1848
1880
  const journal = JSON.parse(readFileSync2(paths.journal, "utf8"));
1849
1881
  const value = assertImplementationHandoffProjection(journal.package);
1850
1882
  if (journal.markdown !== value.markdown)
@@ -1857,14 +1889,14 @@ function recoverImplementationHandoffDraft(root) {
1857
1889
  function readImplementationHandoffDraft(root, { allowMissing = true } = {}) {
1858
1890
  const paths = implementationHandoffPaths(root);
1859
1891
  recoverImplementationHandoffDraft(root);
1860
- if (!existsSync2(paths.draftJson)) {
1892
+ if (!existsSync3(paths.draftJson)) {
1861
1893
  if (allowMissing) return null;
1862
1894
  throw new Error("No implementation handoff draft exists.");
1863
1895
  }
1864
1896
  const value = assertImplementationHandoffProjection(
1865
1897
  JSON.parse(readFileSync2(paths.draftJson, "utf8"))
1866
1898
  );
1867
- if (!existsSync2(paths.draftMarkdown))
1899
+ if (!existsSync3(paths.draftMarkdown))
1868
1900
  throw new Error("Implementation handoff Markdown is missing.");
1869
1901
  if (readFileSync2(paths.draftMarkdown, "utf8") !== value.markdown)
1870
1902
  throw new Error("Implementation handoff JSON and Markdown projections differ.");
@@ -1899,15 +1931,15 @@ function importImplementationHandoffPackage(input, { resolveSource } = {}) {
1899
1931
  // packages/design/lib/design/implementation-handoff-approval.mjs
1900
1932
  import { createHash as createHash2, randomUUID as randomUUID2 } from "node:crypto";
1901
1933
  import {
1902
- existsSync as existsSync3,
1934
+ existsSync as existsSync4,
1903
1935
  mkdirSync as mkdirSync2,
1904
- readdirSync as readdirSync2,
1936
+ readdirSync as readdirSync3,
1905
1937
  readFileSync as readFileSync3,
1906
1938
  renameSync as renameSync2,
1907
1939
  rmSync as rmSync3,
1908
1940
  writeFileSync as writeFileSync2
1909
1941
  } from "node:fs";
1910
- import { dirname as dirname3, join as join3 } from "node:path";
1942
+ import { dirname as dirname3, join as join4 } from "node:path";
1911
1943
  var DIGEST2 = /^sha256:[a-f0-9]{64}$/u;
1912
1944
  var ID = /^[A-Za-z0-9][A-Za-z0-9._:-]*$/u;
1913
1945
  var APPROVE_CAPABILITY = "design:implementation-handoff:approve";
@@ -1996,20 +2028,20 @@ function implementationHandoffApprovalPaths(root) {
1996
2028
  const base = implementationHandoffPaths(root);
1997
2029
  return Object.freeze({
1998
2030
  ...base,
1999
- events: join3(base.directory, "events"),
2000
- journal: join3(base.directory, "lifecycle-publication.json")
2031
+ events: join4(base.directory, "events"),
2032
+ journal: join4(base.directory, "lifecycle-publication.json")
2001
2033
  });
2002
2034
  }
2003
2035
  function archivePaths(root, value) {
2004
- const directory = join3(implementationHandoffPaths(root).history, packageKey(value));
2036
+ const directory = join4(implementationHandoffPaths(root).history, packageKey(value));
2005
2037
  return {
2006
2038
  directory,
2007
- json: join3(directory, "handoff.json"),
2008
- markdown: join3(directory, "handoff.md")
2039
+ json: join4(directory, "handoff.json"),
2040
+ markdown: join4(directory, "handoff.md")
2009
2041
  };
2010
2042
  }
2011
2043
  function eventPath(root, requestId) {
2012
- return join3(implementationHandoffApprovalPaths(root).events, `${requestKey(requestId)}.json`);
2044
+ return join4(implementationHandoffApprovalPaths(root).events, `${requestKey(requestId)}.json`);
2013
2045
  }
2014
2046
  function readJson2(path, fallback = void 0) {
2015
2047
  try {
@@ -2043,13 +2075,13 @@ function pointerFor(value, status, eventId, extra = {}) {
2043
2075
  }
2044
2076
  function writeLifecycleJournal(root, journal) {
2045
2077
  const paths = implementationHandoffApprovalPaths(root);
2046
- if (existsSync3(paths.journal)) recoverImplementationHandoffApproval(root);
2078
+ if (existsSync4(paths.journal)) recoverImplementationHandoffApproval(root);
2047
2079
  atomicText2(paths.journal, jsonBytes2(journal));
2048
2080
  return recoverImplementationHandoffApproval(root);
2049
2081
  }
2050
2082
  function recoverImplementationHandoffApproval(root) {
2051
2083
  const paths = implementationHandoffApprovalPaths(root);
2052
- if (!existsSync3(paths.journal)) return false;
2084
+ if (!existsSync4(paths.journal)) return false;
2053
2085
  const journal = readJson2(paths.journal);
2054
2086
  if (journal.kind !== "openplanr-design-implementation-handoff-lifecycle-publication" || journal.schemaVersion !== "1.0.0")
2055
2087
  throw new TypeError("The implementation handoff lifecycle journal is invalid.");
@@ -2080,16 +2112,16 @@ function readImplementationHandoffVersion(root, identity) {
2080
2112
  function listImplementationHandoffHistory(root) {
2081
2113
  recoverImplementationHandoffApproval(root);
2082
2114
  const directory = implementationHandoffPaths(root).history;
2083
- if (!existsSync3(directory)) return [];
2084
- return readdirSync2(directory, { withFileTypes: true }).filter((entry) => entry.isDirectory()).map(
2085
- (entry) => assertImplementationHandoffProjection(readJson2(join3(directory, entry.name, "handoff.json")))
2115
+ if (!existsSync4(directory)) return [];
2116
+ return readdirSync3(directory, { withFileTypes: true }).filter((entry) => entry.isDirectory()).map(
2117
+ (entry) => assertImplementationHandoffProjection(readJson2(join4(directory, entry.name, "handoff.json")))
2086
2118
  ).sort((left, right) => left.version - right.version || left.id.localeCompare(right.id));
2087
2119
  }
2088
2120
  function readImplementationHandoffLifecycle(root) {
2089
2121
  recoverImplementationHandoffApproval(root);
2090
2122
  const paths = implementationHandoffApprovalPaths(root);
2091
2123
  const current = readJson2(paths.current, null);
2092
- const events = existsSync3(paths.events) ? readdirSync2(paths.events).filter((name) => name.endsWith(".json")).map((name) => readJson2(join3(paths.events, name))).sort(
2124
+ const events = existsSync4(paths.events) ? readdirSync3(paths.events).filter((name) => name.endsWith(".json")).map((name) => readJson2(join4(paths.events, name))).sort(
2093
2125
  (left, right) => left.at.localeCompare(right.at) || left.eventId.localeCompare(right.eventId)
2094
2126
  ) : [];
2095
2127
  return Object.freeze({ current, history: listImplementationHandoffHistory(root), events });
@@ -2561,7 +2593,7 @@ function validateState(value, current) {
2561
2593
  function projectRoot(root) {
2562
2594
  let candidate = root;
2563
2595
  while (true) {
2564
- if (existsSync4(join4(candidate, ".planr")) || existsSync4(join4(candidate, ".git")))
2596
+ if (existsSync5(join5(candidate, PLANNING_FOLDER)) || existsSync5(join5(candidate, ".git")))
2565
2597
  return candidate;
2566
2598
  const parent = dirname4(candidate);
2567
2599
  if (parent === candidate) return root;
@@ -2606,7 +2638,7 @@ function proposeImplementationPackage(file, env) {
2606
2638
  designSpecPath(current.root),
2607
2639
  ...(current.sourceFiles ?? []).map((path) => resolve3(current.root, path))
2608
2640
  ])
2609
- ].filter((path) => existsSync4(path));
2641
+ ].filter((path) => existsSync5(path));
2610
2642
  const sources = paths.map((path, index) => {
2611
2643
  const logicalPath = relative(repository, path).replaceAll("\\", "/");
2612
2644
  const extension = logicalPath.split(".").pop()?.toLowerCase();
@@ -2652,7 +2684,10 @@ function proposeImplementationPackage(file, env) {
2652
2684
  };
2653
2685
  }
2654
2686
  async function persistDesignTaste(current, state) {
2655
- const path = join4(projectRoot(current.root), ".planr/design-system/taste.json");
2687
+ const root = projectRoot(current.root);
2688
+ const conflict = planningFolderConflict(root);
2689
+ if (conflict) throw new PipelineError(conflict.code, conflict.problem, conflict.fix);
2690
+ const path = join5(root, `${PLANNING_FOLDER}/design-system/taste.json`);
2656
2691
  const release = await acquireStartLock(`${path}.lock`);
2657
2692
  try {
2658
2693
  const taste = readJson(path, { designs: {} });
@@ -2693,7 +2728,7 @@ async function saveDesignState(file, { state, revision, stateVersion }) {
2693
2728
  throw Object.assign(new Error("The design changed. Reload before saving feedback."), {
2694
2729
  statusCode: 409
2695
2730
  });
2696
- const path = join4(current.root, ".design/studio-state.json");
2731
+ const path = join5(current.root, ".design/studio-state.json");
2697
2732
  const release = await acquireStartLock(`${path}.lock`);
2698
2733
  try {
2699
2734
  current = currentDesign(file);
@@ -2731,7 +2766,7 @@ var readBody = async (req) => JSON.parse(await readRequestBody(req, { maxBytes:
2731
2766
  var readImplementationBody = async (req) => JSON.parse(await readRequestBody(req, { maxBytes: 5 * 1024 * 1024, encoding: "utf8" }));
2732
2767
  async function startDesignReview(file, options = {}) {
2733
2768
  const { root } = currentDesign(file);
2734
- const release = await acquireStartLock(join4(root, ".design/start.lock"));
2769
+ const release = await acquireStartLock(join5(root, ".design/start.lock"));
2735
2770
  try {
2736
2771
  return await startDesignReviewUnlocked(file, options);
2737
2772
  } finally {
@@ -2752,7 +2787,7 @@ async function startDesignReviewUnlocked(file, {
2752
2787
  let current = currentDesign(file);
2753
2788
  const applyInitialView = async () => {
2754
2789
  if (view === void 0) return;
2755
- const saved = readJson(join4(current.root, ".design/studio-state.json"), {
2790
+ const saved = readJson(join5(current.root, ".design/studio-state.json"), {
2756
2791
  state: {},
2757
2792
  stateVersion: 0
2758
2793
  });
@@ -2762,7 +2797,7 @@ async function startDesignReviewUnlocked(file, {
2762
2797
  state: { ...saved.state, view }
2763
2798
  });
2764
2799
  };
2765
- const stateFile = join4(current.root, ".design/server.json");
2800
+ const stateFile = join5(current.root, ".design/server.json");
2766
2801
  const old = readJson(stateFile, null);
2767
2802
  const services = (await listArtifactReviewServers({ env, fetchImpl })).filter(
2768
2803
  (service) => service.kind === "design" && service.projectRoot === current.root
@@ -2839,7 +2874,7 @@ async function startDesignReviewUnlocked(file, {
2839
2874
  session.designRevision = current.revision;
2840
2875
  },
2841
2876
  renderDocument({ model, base }) {
2842
- const state = readJson(join4(current.root, ".design/studio-state.json"), {
2877
+ const state = readJson(join5(current.root, ".design/studio-state.json"), {
2843
2878
  state: {}
2844
2879
  }).state;
2845
2880
  const stalePins = readDesignFeedback(file, env).pins.filter((pin) => pin.stale);
@@ -2892,7 +2927,7 @@ ${renderArtifactParentRuntime({ ...options, adapterRuntimeUrl: `${base}api/desig
2892
2927
  respond(res, 200, readDesignHandoff(file, { env }));
2893
2928
  } else if (route === "design-implementation-handoff" && req.method === "GET") {
2894
2929
  const design = currentDesign(file);
2895
- const unlock = await acquireStartLock(join4(design.root, ".design/render.lock"));
2930
+ const unlock = await acquireStartLock(join5(design.root, ".design/render.lock"));
2896
2931
  try {
2897
2932
  const root = dirname4(designSpecPath(design.root));
2898
2933
  let proposal = null;
@@ -2938,7 +2973,7 @@ ${renderArtifactParentRuntime({ ...options, adapterRuntimeUrl: `${base}api/desig
2938
2973
  ].includes(input.action))
2939
2974
  throw new Error("Unknown implementation package action.");
2940
2975
  const initial = currentDesign(file);
2941
- const unlock = await acquireStartLock(join4(initial.root, ".design/render.lock"));
2976
+ const unlock = await acquireStartLock(join5(initial.root, ".design/render.lock"));
2942
2977
  try {
2943
2978
  const design = currentDesign(file);
2944
2979
  const root = dirname4(designSpecPath(design.root));
@@ -3103,7 +3138,7 @@ ${renderArtifactParentRuntime({ ...options, adapterRuntimeUrl: `${base}api/desig
3103
3138
  else if (action === "recovery")
3104
3139
  result = await exportDesignShareRecovery(file, {
3105
3140
  ...options,
3106
- output: join4(
3141
+ output: join5(
3107
3142
  env.HOME ?? process.env.HOME,
3108
3143
  "Downloads",
3109
3144
  `openplanr-design-recovery-${Date.now()}.json`
@@ -3112,7 +3147,7 @@ ${renderArtifactParentRuntime({ ...options, adapterRuntimeUrl: `${base}api/desig
3112
3147
  else result = await manageDesignShare(file, action, options);
3113
3148
  respond(res, 200, result);
3114
3149
  } else if (route === "design-status" && req.method === "GET") {
3115
- const ready = readJson(join4(current.root, ".design/browser-ready.json"), null);
3150
+ const ready = readJson(join5(current.root, ".design/browser-ready.json"), null);
3116
3151
  respond(res, 200, {
3117
3152
  ok: true,
3118
3153
  documentId: current.document.id,
@@ -3123,7 +3158,7 @@ ${renderArtifactParentRuntime({ ...options, adapterRuntimeUrl: `${base}api/desig
3123
3158
  });
3124
3159
  } else if (route === "design-state" && req.method === "GET") {
3125
3160
  respond(res, 200, {
3126
- ...readJson(join4(current.root, ".design/studio-state.json"), {
3161
+ ...readJson(join5(current.root, ".design/studio-state.json"), {
3127
3162
  state: {},
3128
3163
  stateVersion: 0
3129
3164
  }),
@@ -3136,7 +3171,7 @@ ${renderArtifactParentRuntime({ ...options, adapterRuntimeUrl: `${base}api/desig
3136
3171
  const loadedArtifacts = new Set(Array.isArray(value?.artifacts) ? value.artifacts : []);
3137
3172
  if (value.revision !== current.revision || value.status !== "ready" || !Array.isArray(value.artifacts) || value.artifacts.length === 0 || loadedArtifacts.size !== value.artifacts.length || value.artifacts.some((id) => !current.entries.some((entry) => entry.artifactId === id)))
3138
3173
  throw new Error("Browser readiness must identify loaded design artboards.");
3139
- atomicJson(join4(current.root, ".design/browser-ready.json"), {
3174
+ atomicJson(join5(current.root, ".design/browser-ready.json"), {
3140
3175
  status: "ready",
3141
3176
  revision: current.revision,
3142
3177
  artifacts: value.artifacts,
@@ -3145,7 +3180,7 @@ ${renderArtifactParentRuntime({ ...options, adapterRuntimeUrl: `${base}api/desig
3145
3180
  });
3146
3181
  respond(res, 200, { ok: true });
3147
3182
  } else if (route === "design-export" && req.method === "GET") {
3148
- const state = readJson(join4(current.root, ".design/studio-state.json"), {
3183
+ const state = readJson(join5(current.root, ".design/studio-state.json"), {
3149
3184
  state: {}
3150
3185
  }).state;
3151
3186
  res.writeHead(200, {
@@ -3269,8 +3304,8 @@ async function resolveDesignPins(file, { pinIds, summary, env = process.env }) {
3269
3304
  "One or more requested pins do not exist."
3270
3305
  );
3271
3306
  writeArtifactReviewState(path, createReviewLedger({ ...ledger, reviews: revisions }));
3272
- const history = readJson(join4(current.root, ".design/review-history.json"), []);
3273
- atomicJson(join4(current.root, ".design/review-history.json"), [
3307
+ const history = readJson(join5(current.root, ".design/review-history.json"), []);
3308
+ atomicJson(join5(current.root, ".design/review-history.json"), [
3274
3309
  ...history,
3275
3310
  {
3276
3311
  revision: current.revision,
@@ -20,6 +20,7 @@ import {
20
20
  createChunkedWorkspaceClient
21
21
  } from "./design-chunked-workspace-client.mjs";
22
22
  import {
23
+ PLANNING_FOLDER,
23
24
  ensurePrivateDirectory,
24
25
  readCustody,
25
26
  writeCustody
@@ -80,7 +81,7 @@ function custodyLocation(file, options = {}, { allowMissing = false } = {}) {
80
81
  const root = resolve(options.custodyRoot ?? join(planrHome(env), "design-shares"));
81
82
  let project = current.root;
82
83
  for (let candidate = current.root; dirname(candidate) !== candidate; candidate = dirname(candidate)) {
83
- if (existsSync(join(candidate, ".git")) || existsSync(join(candidate, ".planr"))) {
84
+ if (existsSync(join(candidate, ".git")) || existsSync(join(candidate, PLANNING_FOLDER))) {
84
85
  project = candidate;
85
86
  break;
86
87
  }
@@ -684,7 +685,7 @@ function inside(base, candidate) {
684
685
  return rel === "" || !rel.startsWith("..") && !isAbsolute2(rel);
685
686
  }
686
687
  function parseablePlanrConfig(root) {
687
- const path = join2(root, ".planr", "config.json");
688
+ const path = join2(root, PLANNING_FOLDER, "config.json");
688
689
  if (!existsSync3(path)) return false;
689
690
  try {
690
691
  if (lstatSync2(path).isSymbolicLink()) return false;
@@ -813,7 +814,11 @@ function resolveArtifactReviewDestination({
813
814
  }
814
815
  const projectRoot = findArtifactProjectRoot(cwd, { env });
815
816
  if (projectRoot) {
816
- const directory2 = assertSafeDestination(projectRoot, [".planr", "artifacts", artifactId]);
817
+ const directory2 = assertSafeDestination(projectRoot, [
818
+ PLANNING_FOLDER,
819
+ "artifacts",
820
+ artifactId
821
+ ]);
817
822
  return Object.freeze({
818
823
  kind: "project",
819
824
  artifactId,
@@ -1799,7 +1804,7 @@ async function importDesignShareRecovery(file, { input, ...options } = {}) {
1799
1804
  const pending = custody.pendingCreate ?? custody.pendingMutation.body;
1800
1805
  const destination = join3(root, "uploads", custody.id, pending.operationId);
1801
1806
  if (existsSync4(destination)) {
1802
- const { spoolChunkReader: spoolChunkReader2 } = await import("./design-runtime-support-5cb7531bede8.mjs");
1807
+ const { spoolChunkReader: spoolChunkReader2 } = await import("./design-runtime-support-336900df0d39.mjs");
1803
1808
  const reader = spoolChunkReader2(destination, pending);
1804
1809
  for (const part of pending.manifest.chunks) await reader(part.index);
1805
1810
  } else await copyUploadSpool(custody, destination);
@@ -1,2 +1,2 @@
1
1
  /* generated by scripts/typescript/compile-sources.mjs from studio-shell.source.css */
2
- .studio-toolbar{min-width:0;min-height:54px;gap:12px;font:400 13px / 1.4 var(--planr-font-body, "DM Sans", sans-serif);box-sizing:border-box;display:flex;align-items:center;flex-wrap:nowrap;padding:0 16px;width:100%}.studio-toolbar .planr-brand{display:flex;align-items:center;gap:8px;min-width:0;flex:1}.studio-toolbar .planr-mark{display:inline-flex;flex:none;width:28px;height:28px;color:var(--planr-color-primary)}.studio-toolbar .planr-mark svg{display:block;width:100%;height:100%}.studio-toolbar .design-wordmark{font-weight:500;white-space:nowrap;font-size:13px;color:var(--planr-color-text)}.studio-toolbar .design-wordmark>span{font-weight:600;color:var(--planr-color-primary)}.studio-toolbar .planr-title-block{display:flex;align-items:center;gap:7px;min-width:0}.studio-chrome-mount,.studio-panel-mount{display:contents}.studio-toolbar-leading,.studio-toolbar-trailing{min-width:0;display:flex;align-items:center;gap:8px}.studio-toolbar-leading{flex:1}.studio-toolbar-trailing{justify-content:flex-end}.studio-identity{min-width:0}.studio-toolbar .planr-title-block strong{max-width:min(25vw,300px)}.studio-subtitle,.studio-hierarchy{display:block;overflow:hidden;color:var(--planr-color-text-muted);font-size:10px;text-overflow:ellipsis;white-space:nowrap}.studio-hierarchy a{color:inherit}.studio-type-badge{display:inline-flex;flex:none;align-items:center;padding:2px 5px;border:1px solid var(--planr-color-rule);border-radius:var(--planr-radius-small, 5px);color:var(--planr-color-text-muted);font:500 10px / 1.2 var(--planr-font-body);white-space:nowrap}.studio-button,.studio-menu-content,.studio-tooltip,.studio-panel-dialog{border:1px solid var(--planr-color-rule);background:var(--planr-color-panel);color:var(--planr-color-text)}.studio-button{min-height:32px;display:inline-flex;justify-content:center;align-items:center;gap:6px;border-radius:var(--planr-radius-medium, 8px);padding:0 9px;font:500 13px / 1 var(--planr-font-body);cursor:pointer}.studio-button-ghost{background:transparent;border-color:transparent}.studio-button-primary{background:var(--planr-color-primary);border-color:var(--planr-color-primary);color:var(--planr-color-background)}.studio-button:not(:disabled):hover,.studio-button[aria-pressed=true],.studio-button[aria-expanded=true]{background:var(--planr-color-raised);color:var(--planr-color-primary)}.studio-button:disabled,.studio-menu-item[data-disabled]{opacity:0.45;cursor:not-allowed}.studio-button:focus-visible,.studio-menu-item:focus-visible{outline:2px solid var(--planr-color-primary);outline-offset:2px}.studio-menu{display:inline-flex}.studio-menu-content{min-width:180px;max-width:min(320px,calc(100vw - 16px));max-height:var(--radix-dropdown-menu-content-available-height);overflow-y:auto;padding:5px;z-index:160;border-radius:var(--planr-radius-medium, 8px);box-shadow:0 12px 30px color-mix(in srgb,var(--planr-color-background) 60%,transparent)}.studio-menu-item{width:100%;min-height:34px;padding:8px 10px;display:flex;align-items:center;text-align:left;border:0;border-radius:var(--planr-radius-small, 5px);background:transparent;color:inherit;font:500 13px / 1.3 var(--planr-font-body);cursor:pointer}.studio-menu-item[data-highlighted]{background:var(--planr-color-raised);outline:none;color:var(--planr-color-primary)}.studio-menu-group-start{border-top:1px solid var(--planr-color-rule);border-radius:0}.studio-tooltip{z-index:180;padding:6px 8px;border-radius:var(--planr-radius-small, 5px);font:12px / 1.4 var(--planr-font-body)}.studio-status{min-width:0;display:inline-flex;align-items:center;gap:4px;color:var(--planr-color-text-muted);font:10px / 1.3 var(--planr-font-body)}.studio-status[data-tone=error]{color:var(--planr-color-danger)}.studio-status .studio-button{width:24px;min-height:24px;padding:0}.studio-panel-overlay{position:absolute;inset:0;z-index:170;background:color-mix(in srgb,var(--planr-color-background) 72%,transparent)}.studio-panel-dialog{position:absolute;top:env(safe-area-inset-top,0px);bottom:env(safe-area-inset-bottom,0px);z-index:180;width:min(350px,calc(100% - 32px));box-shadow:0 8px 30px color-mix(in srgb,var(--planr-color-background) 50%,transparent)}.studio-panel-left{left:0}.studio-panel-right{right:0}.studio-panel-close{position:absolute;right:8px;top:8px;z-index:2;width:32px}.studio-panel-content{height:100%;min-height:0}.studio-panel-dialog .design-navigator,.studio-panel-dialog .planr-review-rail,.studio-panel-dialog .diagram-outline{position:static!important;width:100%!important;height:100%!important;max-height:100%!important;transform:none!important;overflow-y:auto;padding-top:42px;border:0}@media(max-width:680px){.studio-toolbar{gap:6px;padding-inline:8px}.studio-toolbar .planr-title-block strong{max-width:30vw}.studio-toolbar .design-wordmark{display:none}.studio-toolbar .design-button-label{display:none}.studio-toolbar .studio-status{max-width:90px}.studio-button{min-height:36px;padding-inline:8px}}.planr-shell[data-studio-framework=react]{--planr-toolbar-height: 60px;grid-template-rows:auto minmax(0,1fr)}.planr-shell[data-studio-framework=react] :is(.design-toolbar,.diagram-toolbar){display:flex;grid-template-columns:none;flex-wrap:wrap;min-height:var(--planr-toolbar-height);height:auto;padding-block:4px;overflow:visible}.planr-shell[data-studio-framework=react] .planr-brand{display:flex;gap:8px;max-width:none;min-width:min-content}.planr-shell[data-studio-framework=react] .studio-toolbar-leading{flex:1;min-width:min-content}.planr-shell[data-studio-framework=react] .studio-toolbar-trailing{flex:0 0 auto;flex-wrap:wrap;max-width:100%}.planr-shell[data-studio-framework=react] .design-toolbar .design-view-picker{display:inline-flex;width:auto;margin:0;border:0}.planr-shell[data-studio-framework=react] .design-export>button{display:inline-flex;width:auto;padding:0 9px}.planr-shell[data-studio-framework=react] .studio-menu-content{position:relative}.planr-shell[data-studio-framework=react] .planr-title-block{display:flex}.planr-shell[data-studio-framework=react]>.planr-workspace{position:relative}@media(max-width:680px){.planr-shell[data-studio-framework=react] .studio-toolbar.planr-toolbar{gap:2px;padding-inline:4px}.planr-shell[data-studio-framework=react] .studio-toolbar-leading,.planr-shell[data-studio-framework=react] .studio-toolbar-trailing{gap:2px}.planr-shell[data-studio-framework=react] .planr-brand{overflow:hidden}.planr-shell[data-studio-framework=react] .studio-identity{display:block;overflow:hidden}.planr-shell[data-studio-framework=react] .planr-mark{width:22px;height:22px}.planr-shell[data-studio-framework=react] .design-view-picker{height:52px;gap:0}.planr-shell[data-studio-framework=react] .design-view-picker button{width:44px;height:100%;padding:0}.planr-shell[data-studio-framework=react] .studio-button{min-width:44px;min-height:44px}.planr-shell[data-studio-framework=react] :is(.design-save-state,.design-preview-state){display:none}.planr-shell[data-studio-framework=react] :is(.design-export,.diagram-export)>button{font-size:0;width:44px;padding:0}.planr-shell[data-studio-framework=react] :is(.design-export,.diagram-export)>button span{font-size:16px}}@media(max-width:960px){.planr-shell[data-studio-framework=react] .design-wordmark{display:none}.planr-shell[data-studio-framework=react] .planr-workspace>:is(.design-navigator,.planr-review-rail){top:0;max-height:100%}}@media(max-width:1240px){.planr-shell[data-studio-framework=react] .planr-title-block{flex-direction:column;align-items:flex-start;gap:1px}.planr-shell[data-studio-framework=react] .planr-title-block strong{max-width:100%;line-height:1.1}.planr-shell[data-studio-framework=react] .design-preview-state{max-width:48px;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}}.planr-diagram-editor[data-studio-framework=react]{--de-bar-height: 60px;grid-template-rows:auto minmax(0,1fr)}.planr-diagram-editor[data-studio-framework=react] .de-bar{display:block;padding:0;height:auto;overflow:visible;border-bottom:0}.planr-diagram-editor[data-studio-framework=react] .studio-toolbar{min-height:60px;height:auto;flex-wrap:wrap;padding:4px 16px;border:0;border-bottom:1px solid var(--de-rule);background:var(--de-panel)}.planr-diagram-editor[data-studio-framework=react] .studio-toolbar-leading{flex:1;min-width:min-content}.planr-diagram-editor[data-studio-framework=react] .studio-toolbar :is(.de-command-group,.studio-toolbar-trailing){flex:none}.planr-diagram-editor[data-studio-framework=react] .planr-brand{min-width:min-content;overflow:hidden}.planr-diagram-editor[data-studio-framework=react] .de-title{max-width:25vw;line-height:1.35}.planr-diagram-editor[data-studio-framework=react] .studio-subtitle .de-subtitle{line-height:1.3}.planr-diagram-editor[data-studio-framework=react] .de-alert{grid-row:2;top:var(--de-space-3)}.planr-diagram-editor[data-studio-framework=react][data-layout~=drawer] .design-wordmark,.planr-diagram-editor[data-studio-framework=react][data-layout~=drawer] .studio-subtitle{display:none}.planr-diagram-editor[data-studio-framework=react][data-layout~=drawer] .planr-title-block{flex-direction:column;align-items:flex-start;gap:1px}.planr-diagram-editor[data-studio-framework=react][data-layout~=compact] .studio-toolbar{padding:4px 8px;gap:8px}.planr-diagram-editor[data-studio-framework=react][data-layout~=compact] .studio-toolbar-trailing{gap:4px}.planr-diagram-editor[data-studio-framework=react][data-layout~=compact] .studio-menu:has([data-studio-palette-menu]){display:none}.planr-diagram-editor[data-studio-framework=react][data-layout~=compact] .de-more-menu{top:calc(100% + var(--de-space-2))}[data-studio-framework=react]{position:relative}[data-studio-framework=react] .studio-toolbar .studio-type-badge{display:inline-flex}[data-studio-framework=react] .studio-identity{flex:1;min-width:min-content}[data-studio-framework=react] .studio-toolbar .planr-title-block strong{contain:inline-size;display:block;align-self:stretch;width:auto;min-width:0;flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}[data-studio-framework=react] .studio-subtitle{contain:inline-size}[data-studio-framework=react]:has(.studio-panel-dialog) [data-planr-close-feedback],[data-studio-framework=react]:has(.studio-panel-dialog) .planr-review-rail [data-planr-close-feedback]{display:none}.studio-panel-dialog .design-nav-close,.studio-panel-dialog .studio-panel-content .planr-review-rail [data-planr-close-feedback]{display:none}.studio-preserved-control{display:contents}.studio-toolbar fieldset.planr-segment{margin:0;padding:0;min-inline-size:0}.diagram-shell[data-present=true] .studio-toolbar-trailing>:not([data-action=present]):not(.studio-menu){display:none}.diagram-shell[data-studio-framework=react] .diagram-presentation-nav button{color:var(--planr-color-text);background:var(--planr-color-panel)}.diagram-shell[data-studio-framework=react] .diagram-presentation-nav button:enabled:hover{background:var(--planr-color-raised)}@media(max-width:680px){.studio-panel-close{width:44px;min-height:44px}}@media(max-width:700px){.diagram-shell[data-present=true] .studio-toolbar-leading{flex:none}.diagram-shell[data-present=true] .diagram-presentation-nav{min-width:0;flex:1;gap:4px}.diagram-shell[data-present=true] .diagram-presentation-nav>div{min-width:0}}@media(min-width:681px)and (max-width:960px){.diagram-shell[data-studio-framework=react] .studio-toolbar-trailing{gap:4px}}@media(max-width:480px){.studio-toolbar .planr-mark{display:none}}
2
+ .studio-toolbar{min-width:0;min-height:54px;gap:12px;font:400 13px / 1.4 var(--planr-font-body, "DM Sans", sans-serif);box-sizing:border-box;display:flex;align-items:center;flex-wrap:nowrap;padding:0 16px;width:100%}.studio-toolbar .planr-brand{display:flex;align-items:center;gap:8px;min-width:0;flex:1}.studio-toolbar .planr-mark{display:inline-flex;flex:none;width:28px;height:28px;color:var(--planr-color-primary)}.studio-toolbar .planr-mark svg{display:block;width:100%;height:100%}.studio-toolbar .design-wordmark{font-weight:500;white-space:nowrap;font-size:13px;color:var(--planr-color-text)}.studio-toolbar .design-wordmark>span{font-weight:600;color:var(--planr-color-primary)}.studio-toolbar .planr-title-block{display:flex;align-items:center;gap:7px;min-width:0}.studio-chrome-mount,.studio-panel-mount{display:contents}.studio-toolbar-leading,.studio-toolbar-trailing{min-width:0;display:flex;align-items:center;gap:8px}.studio-toolbar-leading{flex:1}.studio-toolbar-trailing{justify-content:flex-end}.studio-identity{min-width:0}.studio-toolbar .planr-title-block strong{max-width:min(25vw,300px)}.studio-subtitle,.studio-hierarchy{display:block;overflow:hidden;color:var(--planr-color-text-muted);font-size:10px;text-overflow:ellipsis;white-space:nowrap}.studio-hierarchy a{color:inherit}.studio-type-badge{display:inline-flex;flex:none;align-items:center;padding:2px 5px;border:1px solid var(--planr-color-rule);border-radius:var(--planr-radius-small, 5px);color:var(--planr-color-text-muted);font:500 10px / 1.2 var(--planr-font-body);white-space:nowrap}.studio-button,.studio-menu-content,.studio-tooltip,.studio-panel-dialog{border:1px solid var(--planr-color-rule);background:var(--planr-color-panel);color:var(--planr-color-text)}.studio-button{min-height:32px;display:inline-flex;justify-content:center;align-items:center;gap:6px;border-radius:var(--planr-radius-medium, 8px);padding:0 9px;font:500 13px / 1 var(--planr-font-body);cursor:pointer}.studio-button-ghost{background:transparent;border-color:transparent}.studio-button-primary{background:var(--planr-color-primary);border-color:var(--planr-color-primary);color:var(--planr-color-background)}.studio-button:not(:disabled):hover,.studio-button[aria-pressed=true],.studio-button[aria-expanded=true]{background:var(--planr-color-raised);color:var(--planr-color-primary)}.studio-button:disabled,.studio-menu-item[data-disabled]{opacity:0.45;cursor:not-allowed}.studio-button:focus-visible,.studio-menu-item:focus-visible{outline:2px solid var(--planr-color-primary);outline-offset:2px}.studio-menu{display:inline-flex}.studio-menu-content{min-width:180px;max-width:min(320px,calc(100vw - 16px));max-height:var(--radix-dropdown-menu-content-available-height);overflow-y:auto;padding:5px;z-index:160;border-radius:var(--planr-radius-medium, 8px);box-shadow:0 12px 30px color-mix(in srgb,var(--planr-color-background) 60%,transparent)}.studio-menu-item{width:100%;min-height:34px;padding:8px 10px;display:flex;align-items:center;text-align:left;border:0;border-radius:var(--planr-radius-small, 5px);background:transparent;color:inherit;font:500 13px / 1.3 var(--planr-font-body);cursor:pointer}.studio-menu-item[data-highlighted]{background:var(--planr-color-raised);outline:none;color:var(--planr-color-primary)}.studio-menu-group-start{border-top:1px solid var(--planr-color-rule);border-radius:0}.studio-tooltip{z-index:180;padding:6px 8px;border-radius:var(--planr-radius-small, 5px);font:12px / 1.4 var(--planr-font-body)}.studio-status{min-width:0;display:inline-flex;align-items:center;gap:4px;color:var(--planr-color-text-muted);font:10px / 1.3 var(--planr-font-body)}.studio-status[data-tone=error]{color:var(--planr-color-danger)}.studio-status .studio-button{width:24px;min-height:24px;padding:0}.studio-panel-overlay{position:absolute;inset:0;z-index:170;background:color-mix(in srgb,var(--planr-color-background) 72%,transparent)}.studio-panel-dialog{position:absolute;top:env(safe-area-inset-top,0px);bottom:env(safe-area-inset-bottom,0px);z-index:180;width:min(350px,calc(100% - 32px));box-shadow:0 8px 30px color-mix(in srgb,var(--planr-color-background) 50%,transparent)}.studio-panel-left{left:0}.studio-panel-right{right:0}.studio-panel-close{position:absolute;right:8px;top:8px;z-index:2;width:32px}.studio-panel-content{height:100%;min-height:0}.studio-panel-dialog .design-navigator,.studio-panel-dialog .planr-review-rail,.studio-panel-dialog .diagram-outline{position:static!important;width:100%!important;height:100%!important;max-height:100%!important;transform:none!important;overflow-y:auto;padding-top:42px;border:0}@media(max-width:680px){.studio-toolbar{gap:6px;padding-inline:8px}.studio-toolbar .planr-title-block strong{max-width:30vw}.studio-toolbar .design-wordmark{display:none}.studio-toolbar .design-button-label{display:none}.studio-toolbar .studio-status{max-width:90px}.studio-button{min-height:36px;padding-inline:8px}}.planr-shell[data-studio-framework=react]{--planr-toolbar-height: 60px;grid-template-rows:auto minmax(0,1fr)}.planr-shell[data-studio-framework=react] :is(.design-toolbar,.diagram-toolbar){display:flex;grid-template-columns:none;flex-wrap:wrap;min-height:var(--planr-toolbar-height);height:auto;padding-block:4px;overflow:visible}.planr-shell[data-studio-framework=react] .planr-brand{display:flex;gap:8px;max-width:none;min-width:min-content}.planr-shell[data-studio-framework=react] .studio-toolbar-leading{flex:1;min-width:min-content}.planr-shell[data-studio-framework=react] .studio-toolbar-trailing{flex:0 0 auto;flex-wrap:wrap;max-width:100%}.planr-shell[data-studio-framework=react] .design-toolbar .design-view-picker{display:inline-flex;width:auto;margin:0;border:0}.planr-shell[data-studio-framework=react] .design-export>button{display:inline-flex;width:auto;padding:0 9px}.planr-shell[data-studio-framework=react] .studio-menu-content{position:relative}.planr-shell[data-studio-framework=react] .planr-title-block{display:flex}.planr-shell[data-studio-framework=react]>.planr-workspace{position:relative}@media(max-width:680px){.planr-shell[data-studio-framework=react] .studio-toolbar.planr-toolbar{gap:2px;padding-inline:4px}.planr-shell[data-studio-framework=react] .studio-toolbar-leading,.planr-shell[data-studio-framework=react] .studio-toolbar-trailing{gap:2px}.planr-shell[data-studio-framework=react] .planr-brand{overflow:hidden}.planr-shell[data-studio-framework=react] .studio-identity{display:block;overflow:hidden}.planr-shell[data-studio-framework=react] .planr-mark{width:22px;height:22px}.planr-shell[data-studio-framework=react] .design-view-picker{height:44px;gap:0}.planr-shell[data-studio-framework=react] .design-view-picker button{width:44px;height:100%;padding:0}.planr-shell[data-studio-framework=react] .studio-button{min-width:44px;min-height:44px}.planr-shell[data-studio-framework=react] :is(.design-save-state,.design-preview-state){display:none}.planr-shell[data-studio-framework=react] :is(.design-export,.diagram-export)>button{font-size:0;width:44px;padding:0}.planr-shell[data-studio-framework=react] :is(.design-export,.diagram-export)>button span{font-size:16px}}@media(max-width:960px){.planr-shell[data-studio-framework=react] .design-wordmark{display:none}.planr-shell[data-studio-framework=react] .planr-workspace>:is(.design-navigator,.planr-review-rail){top:0;max-height:100%}}@media(max-width:1240px){.planr-shell[data-studio-framework=react] .planr-title-block{flex-direction:column;align-items:flex-start;gap:1px}.planr-shell[data-studio-framework=react] .planr-title-block strong{max-width:100%;line-height:1.1}.planr-shell[data-studio-framework=react] .design-preview-state{max-width:48px;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}}.planr-diagram-editor[data-studio-framework=react]{--de-bar-height: 60px;grid-template-rows:auto minmax(0,1fr)}.planr-diagram-editor[data-studio-framework=react] .de-bar{display:block;padding:0;height:auto;overflow:visible;border-bottom:0}.planr-diagram-editor[data-studio-framework=react] .studio-toolbar{min-height:60px;height:auto;flex-wrap:wrap;padding:4px 16px;border:0;border-bottom:1px solid var(--de-rule);background:var(--de-panel)}.planr-diagram-editor[data-studio-framework=react] .studio-toolbar-leading{flex:1;min-width:min-content}.planr-diagram-editor[data-studio-framework=react] .studio-toolbar :is(.de-command-group,.studio-toolbar-trailing){flex:none}.planr-diagram-editor[data-studio-framework=react] .planr-brand{min-width:min-content;overflow:hidden}.planr-diagram-editor[data-studio-framework=react] .de-title{max-width:25vw;line-height:1.35}.planr-diagram-editor[data-studio-framework=react] .studio-subtitle .de-subtitle{line-height:1.3}.planr-diagram-editor[data-studio-framework=react] .de-alert{grid-row:2;top:var(--de-space-3)}.planr-diagram-editor[data-studio-framework=react][data-layout~=drawer] .design-wordmark,.planr-diagram-editor[data-studio-framework=react][data-layout~=drawer] .studio-subtitle{display:none}.planr-diagram-editor[data-studio-framework=react][data-layout~=drawer] .planr-title-block{flex-direction:column;align-items:flex-start;gap:1px}.planr-diagram-editor[data-studio-framework=react][data-layout~=compact] .studio-toolbar{padding:4px 8px;gap:8px}.planr-diagram-editor[data-studio-framework=react][data-layout~=compact] .studio-toolbar-trailing{gap:4px}.planr-diagram-editor[data-studio-framework=react][data-layout~=compact] .studio-menu:has([data-studio-palette-menu]){display:none}.planr-diagram-editor[data-studio-framework=react][data-layout~=compact] .de-more-menu{top:calc(100% + var(--de-space-2))}[data-studio-framework=react]{position:relative}[data-studio-framework=react] .studio-toolbar .studio-type-badge{display:inline-flex}[data-studio-framework=react] .studio-identity{flex:1;min-width:min-content}[data-studio-framework=react] .studio-toolbar .planr-title-block strong{contain:inline-size;display:block;align-self:stretch;width:auto;min-width:0;flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}[data-studio-framework=react] .studio-subtitle{contain:inline-size}[data-studio-framework=react]:has(.studio-panel-dialog) [data-planr-close-feedback],[data-studio-framework=react]:has(.studio-panel-dialog) .planr-review-rail [data-planr-close-feedback]{display:none}.studio-panel-dialog .design-nav-close,.studio-panel-dialog .studio-panel-content .planr-review-rail [data-planr-close-feedback]{display:none}.studio-preserved-control{display:contents}.studio-toolbar fieldset.planr-segment{margin:0;padding:0;min-inline-size:0}.diagram-shell[data-present=true] .studio-toolbar-trailing>:not([data-action=present]):not(.studio-menu){display:none}.diagram-shell[data-studio-framework=react] .diagram-presentation-nav button{color:var(--planr-color-text);background:var(--planr-color-panel)}.diagram-shell[data-studio-framework=react] .diagram-presentation-nav button:enabled:hover{background:var(--planr-color-raised)}@media(max-width:680px){.studio-panel-close{width:44px;min-height:44px}}@media(max-width:700px){.diagram-shell[data-present=true] .studio-toolbar-leading{flex:none}.diagram-shell[data-present=true] .diagram-presentation-nav{min-width:0;flex:1;gap:4px}.diagram-shell[data-present=true] .diagram-presentation-nav>div{min-width:0}}@media(min-width:681px)and (max-width:960px){.diagram-shell[data-studio-framework=react] .studio-toolbar-trailing{gap:4px}}@media(max-width:480px){.studio-toolbar .planr-mark{display:none}}
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@openplanr/design",
3
- "version": "0.4.2",
3
+ "version": "0.4.4",
4
4
  "private": true,
5
5
  "type": "module",
6
6
  "description": "Canonical OpenPlanr design helpers and design-loop engine",
@@ -46,8 +46,8 @@
46
46
  "node": ">=20.19.0"
47
47
  },
48
48
  "dependencies": {
49
- "@openplanr/artifact": "0.6.2",
50
- "@openplanr/protocol": "0.10.1"
49
+ "@openplanr/artifact": "0.6.4",
50
+ "@openplanr/protocol": "0.10.2"
51
51
  },
52
52
  "scripts": {
53
53
  "test": "node --test --test-concurrency=2 tests/*.test.mjs",
@@ -62,14 +62,14 @@
62
62
  background: var(--planr-color-raised); color:var(--planr-color-primary);
63
63
  }
64
64
  .design-view-picker {
65
- align-self:stretch; height:auto; gap:8px; padding:0; border:0; border-radius:0; background:transparent;
65
+ align-self:center; height:32px; gap:8px; padding:0; border:0; border-radius:0; background:transparent;
66
66
  }
67
67
  .design-view-picker button {
68
- position:relative; display:flex; align-items:center; gap:7px; height:100%; padding:0 10px; border-radius:0;
68
+ position:relative; display:flex; align-items:center; gap:7px; height:100%; padding:0 10px; border-radius:6px;
69
69
  font-size:12px; font-weight:550;
70
70
  }
71
71
  .design-view-picker button[aria-pressed="true"], .design-view-picker button:not(:disabled):hover {
72
- background:transparent; color:var(--planr-color-text);
72
+ background:var(--planr-color-raised); color:var(--planr-color-text);
73
73
  }
74
74
  .design-view-picker button[aria-pressed="true"]::after {
75
75
  content:""; position:absolute; bottom:0; left:10px; right:10px; height:2px; background:var(--planr-color-primary);
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@openplanr/protocol",
3
- "version": "0.10.1",
3
+ "version": "0.10.2",
4
4
  "type": "module",
5
5
  "description": "Canonical OpenPlanr schemas, registries, typed errors, and portable contract validation",
6
6
  "license": "MIT",
@@ -27,6 +27,14 @@
27
27
  "types": "./src/semver.d.mts",
28
28
  "import": "./src/semver.mjs"
29
29
  },
30
+ "./names": {
31
+ "types": "./src/names.d.mts",
32
+ "import": "./src/names.mjs"
33
+ },
34
+ "./planning-folder": {
35
+ "types": "./src/planning-folder.d.mts",
36
+ "import": "./src/planning-folder.mjs"
37
+ },
30
38
  "./contracts": {
31
39
  "types": "./src/contracts.d.mts",
32
40
  "import": "./src/contracts.mjs"
@@ -1671,6 +1671,9 @@ import {
1671
1671
  import { homedir as homedir2 } from "node:os";
1672
1672
  import { dirname as dirname3, isAbsolute, join as join4, relative, resolve as resolve3 } from "node:path";
1673
1673
 
1674
+ // packages/protocol/src/names.mjs
1675
+ var PLANNING_FOLDER = ".planr";
1676
+
1674
1677
  // packages/artifact/lib/artifact/internal/feedback.mjs
1675
1678
  var FEEDBACK_FILE = "feedback.json";
1676
1679
 
@@ -1839,7 +1842,7 @@ function inside(base, candidate) {
1839
1842
  return rel === "" || !rel.startsWith("..") && !isAbsolute(rel);
1840
1843
  }
1841
1844
  function parseablePlanrConfig(root) {
1842
- const path = join4(root, ".planr", "config.json");
1845
+ const path = join4(root, PLANNING_FOLDER, "config.json");
1843
1846
  if (!existsSync2(path)) return false;
1844
1847
  try {
1845
1848
  if (lstatSync3(path).isSymbolicLink()) return false;
@@ -1968,7 +1971,11 @@ function resolveArtifactReviewDestination({
1968
1971
  }
1969
1972
  const projectRoot = findArtifactProjectRoot(cwd, { env });
1970
1973
  if (projectRoot) {
1971
- const directory2 = assertSafeDestination(projectRoot, [".planr", "artifacts", artifactId]);
1974
+ const directory2 = assertSafeDestination(projectRoot, [
1975
+ PLANNING_FOLDER,
1976
+ "artifacts",
1977
+ artifactId
1978
+ ]);
1972
1979
  return Object.freeze({
1973
1980
  kind: "project",
1974
1981
  artifactId,
@@ -2533,7 +2540,7 @@ function custodyLocation(file, options = {}, { allowMissing = false } = {}) {
2533
2540
  const root = resolve5(options.custodyRoot ?? join7(planrHome(env), "design-shares"));
2534
2541
  let project = current.root;
2535
2542
  for (let candidate = current.root; dirname5(candidate) !== candidate; candidate = dirname5(candidate)) {
2536
- if (existsSync4(join7(candidate, ".git")) || existsSync4(join7(candidate, ".planr"))) {
2543
+ if (existsSync4(join7(candidate, ".git")) || existsSync4(join7(candidate, PLANNING_FOLDER))) {
2537
2544
  project = candidate;
2538
2545
  break;
2539
2546
  }
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@openplanr/protocol",
3
- "version": "0.10.1",
3
+ "version": "0.10.2",
4
4
  "type": "module",
5
5
  "description": "Canonical OpenPlanr schemas, registries, typed errors, and portable contract validation",
6
6
  "license": "MIT",
@@ -27,6 +27,14 @@
27
27
  "types": "./src/semver.d.mts",
28
28
  "import": "./src/semver.mjs"
29
29
  },
30
+ "./names": {
31
+ "types": "./src/names.d.mts",
32
+ "import": "./src/names.mjs"
33
+ },
34
+ "./planning-folder": {
35
+ "types": "./src/planning-folder.d.mts",
36
+ "import": "./src/planning-folder.mjs"
37
+ },
30
38
  "./contracts": {
31
39
  "types": "./src/contracts.d.mts",
32
40
  "import": "./src/contracts.mjs"
@@ -6,23 +6,23 @@ license: MIT
6
6
 
7
7
  # OpenPlanr Artifact
8
8
 
9
- Use the deterministic `planr artifact` utility when it is installed. Never
9
+ Use the deterministic `openplanr artifact` utility when it is installed. Never
10
10
  relaunch the active coding agent from inside this skill.
11
11
 
12
- 1. For local review, run `planr artifact <file>` or
13
- `planr artifact open <file>`. Use `--no-open --json` in headless sessions.
12
+ 1. For local review, run `openplanr artifact <file>` or
13
+ `openplanr artifact open <file>`. Use `--no-open --json` in headless sessions.
14
14
  Generic artifacts default to the edge-to-edge `document` presentation. Use
15
15
  `--presentation canvas` only for an explicitly spatial or zoomable review,
16
16
  or `--presentation document` to force the reading surface.
17
17
  2. For a diagram manifest or authored bundle, read
18
- [diagram-sharing.md](references/diagram-sharing.md). `planr artifact share
18
+ [diagram-sharing.md](references/diagram-sharing.md). `openplanr artifact share
19
19
  <manifest-or-bundle>` creates a native permanent encrypted review with a stable
20
20
  URL and a separately entered access token. Use the local **Share diagram**
21
- dialog to copy it. Publish only an explicitly requested update with `planr
22
- artifact publish <manifest-or-bundle>`; synchronize feedback with `planr
21
+ dialog to copy it. Publish only an explicitly requested update with `openplanr
22
+ artifact publish <manifest-or-bundle>`; synchronize feedback with `openplanr
23
23
  artifact sync <manifest-or-bundle>`. Verify the actual shared native canvas,
24
24
  fonts and source revision before describing the hosted result as verified.
25
- Sharing is always explicit. Run `planr artifact share <file>` only after the
25
+ Sharing is always explicit. Run `openplanr artifact share <file>` only after the
26
26
  user asks to share. Before sharing or publishing a design document, read
27
27
  [design-sharing.md](references/design-sharing.md) and author or refresh its
28
28
  sibling `review-context.json` in this active host session. Ground the welcome
@@ -33,20 +33,20 @@ relaunch the active coding agent from inside this skill.
33
33
  token. Owner credentials save privately outside the project; copy the reviewer
34
34
  token through the studio's Share dialog, never put it in a URL or ordinary
35
35
  command output. Publish an explicitly requested update with
36
- `planr artifact publish <design-document.json>`; synchronize reviewer feedback
37
- with `planr artifact sync <design-document.json>`. Hosted sharing requires the
36
+ `openplanr artifact publish <design-document.json>`; synchronize reviewer feedback
37
+ with `openplanr artifact sync <design-document.json>`. Hosted sharing requires the
38
38
  configured compatible service. An unavailable service must be reported, not
39
39
  described as a successful share. Generic HTML retains its existing expiring
40
40
  live-room and `--snapshot` fragment/short-link behavior; reviewer, owner-verdict,
41
41
  and management authority remain separate.
42
- 3. For returned feedback, run `planr artifact import <review-url>`. Do not add
42
+ 3. For returned feedback, run `openplanr artifact import <review-url>`. Do not add
43
43
  `--allow-stale` by default. Show the stale-review preview and, when the user
44
44
  has not already chosen, use the host's native question UI to offer import or
45
45
  skip.
46
46
  4. Export a completed local session with
47
- `planr artifact export <session-id> --format json|markdown`.
47
+ `openplanr artifact export <session-id> --format json|markdown`.
48
48
  5. If the pipeline package is unavailable, report the exact corrective command
49
- printed by `planr`; do not bypass the runtime lock or managed state.
49
+ printed by `openplanr`; do not bypass the runtime lock or managed state.
50
50
 
51
51
  Local review is loopback-only. Opening, approving, finishing, or importing an
52
52
  artifact never publishes it automatically.