openplanr 2.2641.0 → 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 (437) hide show
  1. package/CHANGELOG.md +13 -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 +47 -43
  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/design/package.json +3 -3
  308. package/lib/host-packages/claude/openplanr/runtime/design/scripts/runtime/packages/protocol/package.json +9 -1
  309. package/lib/host-packages/claude/openplanr/runtime/plan/scripts/design.mjs +10 -3
  310. package/lib/host-packages/claude/openplanr/runtime/plan/scripts/runtime/packages/protocol/package.json +9 -1
  311. package/lib/host-packages/claude/openplanr/skills/artifact/SKILL.md +12 -12
  312. package/lib/host-packages/claude/openplanr/skills/artifact/references/company-review.md +9 -9
  313. package/lib/host-packages/claude/openplanr/skills/artifact/references/design-sharing.md +1 -1
  314. package/lib/host-packages/claude/openplanr/skills/artifact/references/diagram-sharing.md +3 -3
  315. package/lib/host-packages/claude/openplanr/skills/dashboard/SKILL.md +1 -1
  316. package/lib/host-packages/claude/openplanr/skills/delegate/references/operator-guide.md +1 -1
  317. package/lib/host-packages/claude/openplanr/skills/design/SKILL.md +1 -1
  318. package/lib/host-packages/claude/openplanr/skills/design/references/team-review.md +1 -1
  319. package/lib/host-packages/claude/openplanr/skills/design/references/utilities.md +4 -4
  320. package/lib/host-packages/claude/openplanr/skills/design-loop/SKILL.md +1 -1
  321. package/lib/host-packages/claude/openplanr/skills/design-loop/references/team-review.md +1 -1
  322. package/lib/host-packages/claude/openplanr/skills/design-loop/references/utilities.md +4 -4
  323. package/lib/host-packages/claude/openplanr/skills/design-review/SKILL.md +1 -1
  324. package/lib/host-packages/claude/openplanr/skills/design-review/references/team-review.md +1 -1
  325. package/lib/host-packages/claude/openplanr/skills/design-review/references/utilities.md +4 -4
  326. package/lib/host-packages/claude/openplanr/skills/diagram/SKILL.md +15 -15
  327. package/lib/host-packages/claude/openplanr/skills/diagram/references/diagram-document.md +1 -1
  328. package/lib/host-packages/claude/openplanr/skills/diagram/references/diagram-intent-to-ir.md +1 -1
  329. package/lib/host-packages/claude/openplanr/skills/diagram/references/diagram-sharing.md +3 -3
  330. package/lib/host-packages/claude/openplanr/skills/doctor/SKILL.md +9 -9
  331. package/lib/host-packages/claude/openplanr/skills/doctor/references/upgrade.md +18 -16
  332. package/lib/host-packages/claude/openplanr/skills/land/SKILL.md +2 -2
  333. package/lib/host-packages/claude/openplanr/skills/plan/references/artifact-contract.md +5 -0
  334. package/lib/host-packages/claude/openplanr/skills/spec/references/specification-contract.md +5 -0
  335. package/lib/host-packages/claude/openplanr/skills/sprint/SKILL.md +12 -12
  336. package/lib/host-packages/claude/openplanr/skills/sprint/references/refinement-contract.md +5 -5
  337. package/lib/host-packages/claude/openplanr/skills/sprint/references/sprint-formats.md +8 -8
  338. package/lib/host-packages/claude/openplanr/skills/sprint/schemas/refinement.schema.json +3 -3
  339. package/lib/host-packages/claude/openplanr/skills/status/SKILL.md +1 -1
  340. package/lib/host-packages/claude/openplanr/skills/sync/SKILL.md +6 -6
  341. package/lib/host-packages/claude/openplanr/skills/sync/scripts/names.mjs +8 -0
  342. package/lib/host-packages/claude/openplanr/skills/sync/scripts/sync.mjs +3 -2
  343. package/lib/host-packages/cursor/openplanr/.openplanr-content.json +45 -41
  344. package/lib/host-packages/cursor/openplanr/manifest.json +1 -1
  345. package/lib/host-packages/cursor/openplanr/rules/planr-artifact/references/company-review.md +9 -9
  346. package/lib/host-packages/cursor/openplanr/rules/planr-artifact/references/design-sharing.md +1 -1
  347. package/lib/host-packages/cursor/openplanr/rules/planr-artifact/references/diagram-sharing.md +3 -3
  348. package/lib/host-packages/cursor/openplanr/rules/planr-artifact.mdc +12 -12
  349. package/lib/host-packages/cursor/openplanr/rules/planr-dashboard.mdc +1 -1
  350. package/lib/host-packages/cursor/openplanr/rules/planr-delegate/references/operator-guide.md +1 -1
  351. package/lib/host-packages/cursor/openplanr/rules/planr-design/references/team-review.md +1 -1
  352. package/lib/host-packages/cursor/openplanr/rules/planr-design/references/utilities.md +4 -4
  353. package/lib/host-packages/cursor/openplanr/rules/planr-design-loop/references/team-review.md +1 -1
  354. package/lib/host-packages/cursor/openplanr/rules/planr-design-loop/references/utilities.md +4 -4
  355. package/lib/host-packages/cursor/openplanr/rules/planr-design-loop.mdc +1 -1
  356. package/lib/host-packages/cursor/openplanr/rules/planr-design-review/references/team-review.md +1 -1
  357. package/lib/host-packages/cursor/openplanr/rules/planr-design-review/references/utilities.md +4 -4
  358. package/lib/host-packages/cursor/openplanr/rules/planr-design-review.mdc +1 -1
  359. package/lib/host-packages/cursor/openplanr/rules/planr-design.mdc +1 -1
  360. package/lib/host-packages/cursor/openplanr/rules/planr-diagram/references/diagram-document.md +1 -1
  361. package/lib/host-packages/cursor/openplanr/rules/planr-diagram/references/diagram-intent-to-ir.md +1 -1
  362. package/lib/host-packages/cursor/openplanr/rules/planr-diagram/references/diagram-sharing.md +3 -3
  363. package/lib/host-packages/cursor/openplanr/rules/planr-diagram.mdc +15 -15
  364. package/lib/host-packages/cursor/openplanr/rules/planr-doctor/references/upgrade.md +18 -16
  365. package/lib/host-packages/cursor/openplanr/rules/planr-doctor.mdc +9 -9
  366. package/lib/host-packages/cursor/openplanr/rules/planr-land.mdc +2 -2
  367. package/lib/host-packages/cursor/openplanr/rules/planr-plan/references/artifact-contract.md +5 -0
  368. package/lib/host-packages/cursor/openplanr/rules/planr-spec/references/specification-contract.md +5 -0
  369. package/lib/host-packages/cursor/openplanr/rules/planr-sprint/references/refinement-contract.md +5 -5
  370. package/lib/host-packages/cursor/openplanr/rules/planr-sprint/references/sprint-formats.md +8 -8
  371. package/lib/host-packages/cursor/openplanr/rules/planr-sprint/schemas/refinement.schema.json +3 -3
  372. package/lib/host-packages/cursor/openplanr/rules/planr-sprint.mdc +12 -12
  373. package/lib/host-packages/cursor/openplanr/rules/planr-status.mdc +1 -1
  374. package/lib/host-packages/cursor/openplanr/rules/planr-sync/scripts/names.mjs +8 -0
  375. package/lib/host-packages/cursor/openplanr/rules/planr-sync/scripts/sync.mjs +3 -2
  376. package/lib/host-packages/cursor/openplanr/rules/planr-sync.mdc +6 -6
  377. package/lib/host-packages/cursor/openplanr/runtime/design/scripts/design-owner-custody.mjs +8 -0
  378. package/lib/host-packages/cursor/openplanr/runtime/design/scripts/design-review.mjs +81 -46
  379. package/lib/host-packages/cursor/openplanr/runtime/design/scripts/design-share.mjs +9 -4
  380. package/lib/host-packages/cursor/openplanr/runtime/design/scripts/runtime/packages/design/package.json +3 -3
  381. package/lib/host-packages/cursor/openplanr/runtime/design/scripts/runtime/packages/protocol/package.json +9 -1
  382. package/lib/host-packages/cursor/openplanr/runtime/plan/scripts/design.mjs +10 -3
  383. package/lib/host-packages/cursor/openplanr/runtime/plan/scripts/runtime/packages/protocol/package.json +9 -1
  384. package/lib/host-packages/openai/.claude-plugin/marketplace.json +2 -2
  385. package/lib/host-packages/openai/openplanr/.codex-plugin/plugin.json +1 -1
  386. package/lib/host-packages/openai/openplanr/.openplanr-content.json +46 -42
  387. package/lib/host-packages/openai/openplanr/runtime/design/scripts/design-owner-custody.mjs +8 -0
  388. package/lib/host-packages/openai/openplanr/runtime/design/scripts/design-review.mjs +81 -46
  389. package/lib/host-packages/openai/openplanr/runtime/design/scripts/design-share.mjs +9 -4
  390. package/lib/host-packages/openai/openplanr/runtime/design/scripts/runtime/packages/design/package.json +3 -3
  391. package/lib/host-packages/openai/openplanr/runtime/design/scripts/runtime/packages/protocol/package.json +9 -1
  392. package/lib/host-packages/openai/openplanr/runtime/plan/scripts/design.mjs +10 -3
  393. package/lib/host-packages/openai/openplanr/runtime/plan/scripts/runtime/packages/protocol/package.json +9 -1
  394. package/lib/host-packages/openai/openplanr/skills/artifact/SKILL.md +12 -12
  395. package/lib/host-packages/openai/openplanr/skills/artifact/references/company-review.md +9 -9
  396. package/lib/host-packages/openai/openplanr/skills/artifact/references/design-sharing.md +1 -1
  397. package/lib/host-packages/openai/openplanr/skills/artifact/references/diagram-sharing.md +3 -3
  398. package/lib/host-packages/openai/openplanr/skills/dashboard/SKILL.md +1 -1
  399. package/lib/host-packages/openai/openplanr/skills/delegate/references/operator-guide.md +1 -1
  400. package/lib/host-packages/openai/openplanr/skills/design/SKILL.md +1 -1
  401. package/lib/host-packages/openai/openplanr/skills/design/references/team-review.md +1 -1
  402. package/lib/host-packages/openai/openplanr/skills/design/references/utilities.md +4 -4
  403. package/lib/host-packages/openai/openplanr/skills/design-loop/SKILL.md +1 -1
  404. package/lib/host-packages/openai/openplanr/skills/design-loop/references/team-review.md +1 -1
  405. package/lib/host-packages/openai/openplanr/skills/design-loop/references/utilities.md +4 -4
  406. package/lib/host-packages/openai/openplanr/skills/design-review/SKILL.md +1 -1
  407. package/lib/host-packages/openai/openplanr/skills/design-review/references/team-review.md +1 -1
  408. package/lib/host-packages/openai/openplanr/skills/design-review/references/utilities.md +4 -4
  409. package/lib/host-packages/openai/openplanr/skills/diagram/SKILL.md +15 -15
  410. package/lib/host-packages/openai/openplanr/skills/diagram/references/diagram-document.md +1 -1
  411. package/lib/host-packages/openai/openplanr/skills/diagram/references/diagram-intent-to-ir.md +1 -1
  412. package/lib/host-packages/openai/openplanr/skills/diagram/references/diagram-sharing.md +3 -3
  413. package/lib/host-packages/openai/openplanr/skills/doctor/SKILL.md +9 -9
  414. package/lib/host-packages/openai/openplanr/skills/doctor/references/upgrade.md +18 -16
  415. package/lib/host-packages/openai/openplanr/skills/land/SKILL.md +2 -2
  416. package/lib/host-packages/openai/openplanr/skills/plan/references/artifact-contract.md +5 -0
  417. package/lib/host-packages/openai/openplanr/skills/spec/references/specification-contract.md +5 -0
  418. package/lib/host-packages/openai/openplanr/skills/sprint/SKILL.md +12 -12
  419. package/lib/host-packages/openai/openplanr/skills/sprint/references/refinement-contract.md +5 -5
  420. package/lib/host-packages/openai/openplanr/skills/sprint/references/sprint-formats.md +8 -8
  421. package/lib/host-packages/openai/openplanr/skills/sprint/schemas/refinement.schema.json +3 -3
  422. package/lib/host-packages/openai/openplanr/skills/status/SKILL.md +1 -1
  423. package/lib/host-packages/openai/openplanr/skills/sync/SKILL.md +6 -6
  424. package/lib/host-packages/openai/openplanr/skills/sync/openplanr.skill.json +11 -0
  425. package/lib/host-packages/openai/openplanr/skills/sync/scripts/names.mjs +8 -0
  426. package/lib/host-packages/openai/openplanr/skills/sync/scripts/sync.mjs +3 -2
  427. package/lib/integrations.mjs +3 -2
  428. package/lib/names.d.mts +4 -0
  429. package/lib/names.mjs +8 -0
  430. package/lib/planning-folder.d.mts +14 -0
  431. package/lib/planning-folder.mjs +40 -0
  432. package/package.json +5 -5
  433. package/dist/dashboard/assets/index-D7R6tnlX.js.map +0 -1
  434. package/dist/templates/voice/standup.md.hbs +0 -20
  435. /package/lib/host-packages/claude/openplanr/runtime/design/scripts/{design-runtime-support-5cb7531bede8.mjs → design-runtime-support-336900df0d39.mjs} +0 -0
  436. /package/lib/host-packages/cursor/openplanr/runtime/design/scripts/{design-runtime-support-5cb7531bede8.mjs → design-runtime-support-336900df0d39.mjs} +0 -0
  437. /package/lib/host-packages/openai/openplanr/runtime/design/scripts/{design-runtime-support-5cb7531bede8.mjs → design-runtime-support-336900df0d39.mjs} +0 -0
@@ -10,7 +10,7 @@ item in full and judges it against the default branch and the calendar.
10
10
  **Select** fits the surviving items to the stated capacity and the next release
11
11
  cut, refutes the picks with three independent lenses, and writes the sprint.
12
12
  Perform the reasoning in this session; never delegate it to a model subprocess.
13
- The CLI (`planr sprint …`) stores what this skill decides. It is optional: when
13
+ The CLI (`openplanr sprint …`) stores what this skill decides. It is optional: when
14
14
  it is unavailable, write the same files by hand in the shapes given in
15
15
  [sprint formats](planr-sprint/references/sprint-formats.md).
16
16
 
@@ -33,7 +33,7 @@ capability; it never blocks the run. Name every degraded input in `Issues`.
33
33
  | Git history and the code paths items cite | Evidence lens: stale, already fixed, premise false | Buckets rest on the items' own dates; say "not verified against code" |
34
34
  | Release profile (`.release/profile.md`: cut date, cadence, freezes) | Size the In-progress bucket to the cut; the sprint gets `releaseCut` | Ask once for a horizon; default to a two-week sprint from today |
35
35
  | Capacity (engineers × working days) | Fit the list and name the overflow | Ask once; default 1 engineer × 10 days, stated in the return |
36
- | Previous sprint or refinement note (`.planr/sprints/SPRINT-NNN/refinement.json`) | Carry `leftovers`; `planr sprint diff` is possible | First run, no diff |
36
+ | Previous sprint or refinement note (`.planr/sprints/SPRINT-NNN/refinement.json`) | Carry `leftovers`; `openplanr sprint diff` is possible | First run, no diff |
37
37
  | Last Operate cycle | Rank its unfinished actions alongside | Skipped silently |
38
38
  | Linear or GitHub connector | Push statuses on approval, read PR state | Local files only; report the external step as not run |
39
39
 
@@ -89,7 +89,7 @@ the cheapest refutations.
89
89
 
90
90
  Carry the previous Operate cycle's unfinished actions explicitly. Include the
91
91
  release cut itself as work; when it has no artifact yet, file it with
92
- `planr quick create "Release cut <date>"` so the sprint contains only artifact
92
+ `openplanr quick create "Release cut <date>"` so the sprint contains only artifact
93
93
  ids.
94
94
 
95
95
  ## Step 4: Refute the In-progress bucket
@@ -113,9 +113,9 @@ Write the three durable outputs (formats in
113
113
  them.
114
114
 
115
115
  ```bash
116
- planr sprint create --data sprint.json --json # name, releaseCut, capacityDays, startDate
117
- planr sprint refinement SPRINT-NNN --data refinement.json --json # validates, stores the note and JSON, fills the sprint body
118
- planr sprint diff SPRINT-MMM SPRINT-NNN # when a previous run exists
116
+ openplanr sprint create --data sprint.json --json # name, releaseCut, capacityDays, startDate
117
+ openplanr sprint refinement SPRINT-NNN --data refinement.json --json # validates, stores the note and JSON, fills the sprint body
118
+ openplanr sprint diff SPRINT-MMM SPRINT-NNN # when a previous run exists
119
119
  ```
120
120
 
121
121
  `refinement.json` must satisfy [the schema](planr-sprint/schemas/refinement.schema.json); the
@@ -130,16 +130,16 @@ write-back, or leave the proposal as written.
130
130
  ## Step 6: On approval, apply
131
131
 
132
132
  ```bash
133
- planr sprint apply SPRINT-NNN --dry-run # show the status and priority changes
134
- planr sprint apply SPRINT-NNN --yes --commit # one commit: chore(planr): refine backlog for SPRINT-NNN
133
+ openplanr sprint apply SPRINT-NNN --dry-run # show the status and priority changes
134
+ openplanr sprint apply SPRINT-NNN --yes --commit # one commit: chore(planr): refine backlog for SPRINT-NNN
135
135
  ```
136
136
 
137
137
  Where a connector is configured, push each changed item afterwards
138
- (`planr linear push <id>`, `planr github push <id>`) and report the ones that
138
+ (`openplanr linear push <id>`, `openplanr github push <id>`) and report the ones that
139
139
  were not pushed. When the CLI is unavailable, apply the same status changes with
140
140
  the repository's own vocabulary and commit them with the same message.
141
141
 
142
- Close a finished sprint with `planr sprint close SPRINT-NNN`; it records the
142
+ Close a finished sprint with `openplanr sprint close SPRINT-NNN`; it records the
143
143
  leftovers the next run carries.
144
144
 
145
145
  ## Rules from production use
@@ -151,7 +151,7 @@ leftovers the next run carries.
151
151
  the question that unblocks them.
152
152
  - The list must fit the stated capacity; if it does not, say what was cut.
153
153
  - No new migration in a hand deploy unless the sprint says so explicitly.
154
- - Use the repository's own status vocabulary (`planr update --help` lists it);
154
+ - Use the repository's own status vocabulary (`openplanr update --help` lists it);
155
155
  never introduce a second one.
156
156
  - The note and the JSON are the durable output; the chat return is a view of
157
157
  them. That is what keeps the third run from re-arguing the first two.
@@ -178,7 +178,7 @@ and identify incomplete evidence or blocked inputs with their recovery action.
178
178
  The note and JSON remain complete and unchanged in shape. Omit empty chat sections;
179
179
  different summary wording never causes another sprint creation or write-back.
180
180
 
181
- `planr status` shows the active sprint with its cut and progress; the dashboard
181
+ `openplanr status` shows the active sprint with its cut and progress; the dashboard
182
182
  (`planr-dashboard`) renders the sprint from the same frontmatter and checkboxes.
183
183
 
184
184
  ## Reference files
@@ -7,7 +7,7 @@ alwaysApply: false
7
7
 
8
8
  Inspect delivery state read-only in the active session. Read the repository's
9
9
  planning artifacts, task statuses, dependency graph, current branch, and relevant
10
- runtime markers directly. Use the optional deterministic `planr status --json`
10
+ runtime markers directly. Use the optional deterministic `openplanr status --json`
11
11
  utility when available, but do not require it or a semantic subprocess.
12
12
 
13
13
  Add GitHub or Linear lookups only when the user requests live remote state. Keep
@@ -0,0 +1,8 @@
1
+ // @ts-check
2
+ // The planning folder and command names that every package and generated copy reads.
3
+
4
+ /** @type {typeof import('./names.d.mts').PLANNING_FOLDER} */
5
+ export const PLANNING_FOLDER = '.planr';
6
+
7
+ /** @type {typeof import('./names.d.mts').CLI_COMMAND} */
8
+ export const CLI_COMMAND = 'openplanr';
@@ -5,6 +5,7 @@ import { access, readFile } from 'node:fs/promises';
5
5
  import { resolve } from 'node:path';
6
6
  import { fileURLToPath } from 'node:url';
7
7
  import { promisify } from 'node:util';
8
+ import { CLI_COMMAND, PLANNING_FOLDER } from './names.mjs';
8
9
 
9
10
  const execFileAsync = promisify(execFile);
10
11
  const LINEAR_UUID = /^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/iu;
@@ -109,7 +110,7 @@ async function readJsonInput(value, stdin) {
109
110
  }
110
111
 
111
112
  async function inspectLocal(cwd) {
112
- const candidates = ['.planr/config.json', '.openplanr/config.json'];
113
+ const candidates = [`${PLANNING_FOLDER}/config.json`, '.openplanr/config.json'];
113
114
  const roots = [];
114
115
  for (const candidate of candidates) {
115
116
  try {
@@ -146,7 +147,7 @@ export async function runPortableSync(
146
147
  } else if (args.provider === 'linear') {
147
148
  throw new IntegrationError(
148
149
  'E_SYNC_USAGE',
149
- 'Linear synchronization runs through a Linear connector or the planr CLI (planr linear push, planr linear sync).',
150
+ `Linear synchronization runs through a Linear connector or the ${CLI_COMMAND} CLI (${CLI_COMMAND} linear push, ${CLI_COMMAND} linear sync).`,
150
151
  );
151
152
  } else {
152
153
  throw new IntegrationError(
@@ -14,17 +14,17 @@ Resolution order:
14
14
 
15
15
  1. use a host-native GitHub or Linear connector when available;
16
16
  2. otherwise, for GitHub, use the packaged deterministic helper;
17
- 3. otherwise, for Linear, use the `planr linear` terminal utility when the user has
18
- installed it; `planr github` and `planr sync` are optional equivalents for the rest.
17
+ 3. otherwise, for Linear, use the `openplanr linear` terminal utility when the user has
18
+ installed it; `openplanr github` and `openplanr sync` are optional equivalents for the rest.
19
19
 
20
20
  Linear through the CLI:
21
21
 
22
- - the user runs `planr linear init` in a terminal once; it prompts for a personal
22
+ - the user runs `openplanr linear init` in a terminal once; it prompts for a personal
23
23
  access token, which the CLI stores;
24
- - audit with `planr linear sync --dry-run`, which reads Linear without writing;
25
- - before a real `planr linear sync`, ask how conflicts should resolve and pass
24
+ - audit with `openplanr linear sync --dry-run`, which reads Linear without writing;
25
+ - before a real `openplanr linear sync`, ask how conflicts should resolve and pass
26
26
  `--on-conflict local` or `--on-conflict linear`; without a prompt it favors Linear;
27
- - `planr linear push <artifact-id>` creates or updates Linear issues; preview with
27
+ - `openplanr linear push <artifact-id>` creates or updates Linear issues; preview with
28
28
  `--dry-run`. Quick tasks and backlog items need `linear.standaloneProjectId` in the
29
29
  project config when no terminal prompt is available.
30
30
 
@@ -16,6 +16,12 @@ import {
16
16
  writeFileSync
17
17
  } from "node:fs";
18
18
  import { basename, dirname, isAbsolute, join, relative, resolve } from "node:path";
19
+
20
+ // packages/protocol/src/names.mjs
21
+ var PLANNING_FOLDER = ".planr";
22
+ var CLI_COMMAND = "openplanr";
23
+
24
+ // packages/artifact/lib/artifact/owner-custody.mjs
19
25
  function custodyError(message, code = "E_OWNER_CUSTODY_LOCATION") {
20
26
  return Object.assign(new Error(message), { code, status: 400 });
21
27
  }
@@ -115,6 +121,8 @@ function writeCustody(path, record, { label = "Owner" } = {}) {
115
121
  }
116
122
 
117
123
  export {
124
+ PLANNING_FOLDER,
125
+ CLI_COMMAND,
118
126
  ensurePrivateDirectory,
119
127
  readCustody,
120
128
  writeCustody
@@ -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,6 +1,6 @@
1
1
  {
2
2
  "name": "@openplanr/design",
3
- "version": "0.4.3",
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.3",
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",
@@ -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"