openplanr 2.2641.0 → 2.2641.2

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 (583) hide show
  1. package/CHANGELOG.md +34 -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 +6 -5
  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 +16 -18
  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 +29 -28
  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 +32 -35
  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-DI_TKz9J.js} +115 -115
  99. package/dist/dashboard/assets/index-DI_TKz9J.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 +0 -4
  105. package/dist/models/schema.d.ts.map +1 -1
  106. package/dist/models/schema.js +2 -3
  107. package/dist/models/schema.js.map +1 -1
  108. package/dist/models/types.d.ts +13 -16
  109. package/dist/models/types.d.ts.map +1 -1
  110. package/dist/services/artifact-service.d.ts +1 -1
  111. package/dist/services/artifact-service.js +2 -2
  112. package/dist/services/artifact-service.js.map +1 -1
  113. package/dist/services/audit-log-service.d.ts.map +1 -1
  114. package/dist/services/audit-log-service.js +2 -1
  115. package/dist/services/audit-log-service.js.map +1 -1
  116. package/dist/services/claude-plugin-service.d.ts +3 -1
  117. package/dist/services/claude-plugin-service.d.ts.map +1 -1
  118. package/dist/services/claude-plugin-service.js +9 -5
  119. package/dist/services/claude-plugin-service.js.map +1 -1
  120. package/dist/services/codex-plugin-service.d.ts.map +1 -1
  121. package/dist/services/codex-plugin-service.js +3 -2
  122. package/dist/services/codex-plugin-service.js.map +1 -1
  123. package/dist/services/company-auth-service.d.ts.map +1 -1
  124. package/dist/services/company-auth-service.js +2 -1
  125. package/dist/services/company-auth-service.js.map +1 -1
  126. package/dist/services/company-sync-service.d.ts.map +1 -1
  127. package/dist/services/company-sync-service.js +9 -8
  128. package/dist/services/company-sync-service.js.map +1 -1
  129. package/dist/services/config-service.d.ts +6 -1
  130. package/dist/services/config-service.d.ts.map +1 -1
  131. package/dist/services/config-service.js +19 -4
  132. package/dist/services/config-service.js.map +1 -1
  133. package/dist/services/credentials-service.js +2 -2
  134. package/dist/services/credentials-service.js.map +1 -1
  135. package/dist/services/delivery-status-service.d.ts +1 -1
  136. package/dist/services/delivery-status-service.d.ts.map +1 -1
  137. package/dist/services/delivery-status-service.js +3 -2
  138. package/dist/services/delivery-status-service.js.map +1 -1
  139. package/dist/services/diagram-authoring-service.d.ts.map +1 -1
  140. package/dist/services/diagram-authoring-service.js +2 -1
  141. package/dist/services/diagram-authoring-service.js.map +1 -1
  142. package/dist/services/diagram-pipeline-service.d.ts.map +1 -1
  143. package/dist/services/diagram-pipeline-service.js +6 -5
  144. package/dist/services/diagram-pipeline-service.js.map +1 -1
  145. package/dist/services/distribution-service.d.ts +1 -4
  146. package/dist/services/distribution-service.d.ts.map +1 -1
  147. package/dist/services/distribution-service.js +3 -61
  148. package/dist/services/distribution-service.js.map +1 -1
  149. package/dist/services/github-service.d.ts +8 -5
  150. package/dist/services/github-service.d.ts.map +1 -1
  151. package/dist/services/github-service.js +23 -21
  152. package/dist/services/github-service.js.map +1 -1
  153. package/dist/services/graph-integrity.d.ts +1 -1
  154. package/dist/services/graph-integrity.js +1 -1
  155. package/dist/services/landing/landing-service.d.ts.map +1 -1
  156. package/dist/services/landing/landing-service.js +4 -1
  157. package/dist/services/landing/landing-service.js.map +1 -1
  158. package/dist/services/landing/receipt-custody.d.ts.map +1 -1
  159. package/dist/services/landing/receipt-custody.js +3 -2
  160. package/dist/services/landing/receipt-custody.js.map +1 -1
  161. package/dist/services/linear/errors.d.ts.map +1 -1
  162. package/dist/services/linear/errors.js +2 -1
  163. package/dist/services/linear/errors.js.map +1 -1
  164. package/dist/services/linear/plan-builders.d.ts +3 -3
  165. package/dist/services/linear/plan-builders.d.ts.map +1 -1
  166. package/dist/services/linear/plan-builders.js +2 -2
  167. package/dist/services/linear/strategy-context.d.ts.map +1 -1
  168. package/dist/services/linear/strategy-context.js +6 -5
  169. package/dist/services/linear/strategy-context.js.map +1 -1
  170. package/dist/services/linear-mapping-service.d.ts +1 -1
  171. package/dist/services/linear-mapping-service.d.ts.map +1 -1
  172. package/dist/services/linear-mapping-service.js +3 -2
  173. package/dist/services/linear-mapping-service.js.map +1 -1
  174. package/dist/services/linear-pull-service.d.ts +1 -1
  175. package/dist/services/linear-pull-service.d.ts.map +1 -1
  176. package/dist/services/linear-pull-service.js +10 -9
  177. package/dist/services/linear-pull-service.js.map +1 -1
  178. package/dist/services/linear-push-service.d.ts +5 -6
  179. package/dist/services/linear-push-service.d.ts.map +1 -1
  180. package/dist/services/linear-push-service.js +22 -22
  181. package/dist/services/linear-push-service.js.map +1 -1
  182. package/dist/services/linear-service.d.ts +2 -2
  183. package/dist/services/linear-service.js +2 -2
  184. package/dist/services/linear-team-service.d.ts.map +1 -1
  185. package/dist/services/linear-team-service.js +2 -1
  186. package/dist/services/linear-team-service.js.map +1 -1
  187. package/dist/services/operate/assignment-packet-service.d.ts.map +1 -1
  188. package/dist/services/operate/assignment-packet-service.js +2 -1
  189. package/dist/services/operate/assignment-packet-service.js.map +1 -1
  190. package/dist/services/operate/delivery-evidence.d.ts.map +1 -1
  191. package/dist/services/operate/delivery-evidence.js +2 -1
  192. package/dist/services/operate/delivery-evidence.js.map +1 -1
  193. package/dist/services/operate/measurement-schedule-service.d.ts.map +1 -1
  194. package/dist/services/operate/measurement-schedule-service.js +2 -1
  195. package/dist/services/operate/measurement-schedule-service.js.map +1 -1
  196. package/dist/services/operate/path-custody.d.ts.map +1 -1
  197. package/dist/services/operate/path-custody.js +2 -1
  198. package/dist/services/operate/path-custody.js.map +1 -1
  199. package/dist/services/operate/pinned-legacy-replay-runner.d.ts.map +1 -1
  200. package/dist/services/operate/pinned-legacy-replay-runner.js +3 -2
  201. package/dist/services/operate/pinned-legacy-replay-runner.js.map +1 -1
  202. package/dist/services/operate/planning-handoff-service.d.ts.map +1 -1
  203. package/dist/services/operate/planning-handoff-service.js +3 -2
  204. package/dist/services/operate/planning-handoff-service.js.map +1 -1
  205. package/dist/services/operate/project-transaction-lock.d.ts.map +1 -1
  206. package/dist/services/operate/project-transaction-lock.js +2 -1
  207. package/dist/services/operate/project-transaction-lock.js.map +1 -1
  208. package/dist/services/operate/repository-read-service.d.ts.map +1 -1
  209. package/dist/services/operate/repository-read-service.js +5 -4
  210. package/dist/services/operate/repository-read-service.js.map +1 -1
  211. package/dist/services/operate/screened-evidence-service.d.ts.map +1 -1
  212. package/dist/services/operate/screened-evidence-service.js +5 -4
  213. package/dist/services/operate/screened-evidence-service.js.map +1 -1
  214. package/dist/services/operate/storage-layout.d.ts.map +1 -1
  215. package/dist/services/operate/storage-layout.js +8 -7
  216. package/dist/services/operate/storage-layout.js.map +1 -1
  217. package/dist/services/operate/store.d.ts.map +1 -1
  218. package/dist/services/operate/store.js +7 -6
  219. package/dist/services/operate/store.js.map +1 -1
  220. package/dist/services/pipeline-package-service.js +1 -1
  221. package/dist/services/pipeline-package-service.js.map +1 -1
  222. package/dist/services/provenance-service.d.ts.map +1 -1
  223. package/dist/services/provenance-service.js +2 -1
  224. package/dist/services/provenance-service.js.map +1 -1
  225. package/dist/services/report-linter-service.js +1 -1
  226. package/dist/services/report-linter-service.js.map +1 -1
  227. package/dist/services/revise-cache-service.d.ts.map +1 -1
  228. package/dist/services/revise-cache-service.js +2 -1
  229. package/dist/services/revise-cache-service.js.map +1 -1
  230. package/dist/services/runtime-manager/doctor.d.ts +13 -0
  231. package/dist/services/runtime-manager/doctor.d.ts.map +1 -1
  232. package/dist/services/runtime-manager/doctor.js +50 -3
  233. package/dist/services/runtime-manager/doctor.js.map +1 -1
  234. package/dist/services/runtime-manager/inventory.d.ts +1 -0
  235. package/dist/services/runtime-manager/inventory.d.ts.map +1 -1
  236. package/dist/services/runtime-manager/inventory.js +3 -1
  237. package/dist/services/runtime-manager/inventory.js.map +1 -1
  238. package/dist/services/runtime-manager-service.d.ts +4 -2
  239. package/dist/services/runtime-manager-service.d.ts.map +1 -1
  240. package/dist/services/runtime-manager-service.js +52 -33
  241. package/dist/services/runtime-manager-service.js.map +1 -1
  242. package/dist/services/server-lifecycle-service.d.ts.map +1 -1
  243. package/dist/services/server-lifecycle-service.js +14 -9
  244. package/dist/services/server-lifecycle-service.js.map +1 -1
  245. package/dist/services/spec-service.d.ts +4 -4
  246. package/dist/services/spec-service.d.ts.map +1 -1
  247. package/dist/services/spec-service.js +43 -77
  248. package/dist/services/spec-service.js.map +1 -1
  249. package/dist/services/sprint-refinement-service.d.ts +6 -6
  250. package/dist/services/sprint-refinement-service.d.ts.map +1 -1
  251. package/dist/services/sprint-refinement-service.js +16 -16
  252. package/dist/services/sprint-refinement-service.js.map +1 -1
  253. package/dist/services/template-service.d.ts.map +1 -1
  254. package/dist/services/template-service.js +3 -1
  255. package/dist/services/template-service.js.map +1 -1
  256. package/dist/services/upgrade-offer-service.d.ts +2 -2
  257. package/dist/services/upgrade-offer-service.d.ts.map +1 -1
  258. package/dist/services/upgrade-offer-service.js +4 -3
  259. package/dist/services/upgrade-offer-service.js.map +1 -1
  260. package/dist/services/upgrade-report.d.ts +1 -1
  261. package/dist/services/upgrade-report.d.ts.map +1 -1
  262. package/dist/services/upgrade-report.js +5 -4
  263. package/dist/services/upgrade-report.js.map +1 -1
  264. package/dist/services/upgrade-service.d.ts +5 -5
  265. package/dist/services/upgrade-service.d.ts.map +1 -1
  266. package/dist/services/upgrade-service.js +14 -13
  267. package/dist/services/upgrade-service.js.map +1 -1
  268. package/dist/templates/backlog/backlog-item.md.hbs +1 -1
  269. package/dist/templates/checklists/agile-checklist.md.hbs +6 -6
  270. package/dist/templates/epics/epic.md.hbs +1 -1
  271. package/dist/templates/export/planning-report.html.hbs +1 -1
  272. package/dist/templates/export/planning-report.md.hbs +1 -1
  273. package/dist/templates/features/feature.md.hbs +1 -1
  274. package/dist/templates/guides/estimation.md.hbs +3 -12
  275. package/dist/templates/quick/quick-task.md.hbs +1 -1
  276. package/dist/templates/rules/cursor/create-epic.mdc.hbs +1 -1
  277. package/dist/templates/rules/cursor/create-features.mdc.hbs +1 -1
  278. package/dist/templates/rules/cursor/create-user-story.mdc.hbs +1 -1
  279. package/dist/templates/rules/cursor/openplanr.mdc.hbs +1 -1
  280. package/dist/templates/rules/shared/capability-map.md.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 +258 -262
  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 +9 -9
  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 +109 -89
  302. package/lib/host-packages/claude/openplanr/README.md +13 -17
  303. package/lib/host-packages/claude/openplanr/agents/planr-backend.md +49 -55
  304. package/lib/host-packages/claude/openplanr/agents/planr-database.md +56 -92
  305. package/lib/host-packages/claude/openplanr/agents/planr-designer.md +35 -51
  306. package/lib/host-packages/claude/openplanr/agents/planr-devops.md +37 -51
  307. package/lib/host-packages/claude/openplanr/agents/planr-documentation.md +29 -52
  308. package/lib/host-packages/claude/openplanr/agents/planr-entity-scaffold.md +24 -23
  309. package/lib/host-packages/claude/openplanr/agents/planr-frontend.md +46 -58
  310. package/lib/host-packages/claude/openplanr/agents/planr-qa.md +4 -2
  311. package/lib/host-packages/claude/openplanr/agents/planr-specification.md +54 -51
  312. package/lib/host-packages/claude/openplanr/references/agents/shared/modes/default/backend.md +21 -65
  313. package/lib/host-packages/claude/openplanr/references/agents/shared/modes/default/designer.md +5 -6
  314. package/lib/host-packages/claude/openplanr/references/agents/shared/modes/default/devops.md +2 -3
  315. package/lib/host-packages/claude/openplanr/references/agents/shared/modes/default/doc-gen.md +3 -4
  316. package/lib/host-packages/claude/openplanr/references/agents/shared/modes/default/frontend.md +19 -64
  317. package/lib/host-packages/claude/openplanr/references/agents/shared/modes/default/specification.md +10 -12
  318. package/lib/host-packages/claude/openplanr/references/agents/shared/modes/spec-driven/backend.md +19 -62
  319. package/lib/host-packages/claude/openplanr/references/agents/shared/modes/spec-driven/designer.md +5 -6
  320. package/lib/host-packages/claude/openplanr/references/agents/shared/modes/spec-driven/devops.md +2 -3
  321. package/lib/host-packages/claude/openplanr/references/agents/shared/modes/spec-driven/doc-gen.md +2 -3
  322. package/lib/host-packages/claude/openplanr/references/agents/shared/modes/spec-driven/frontend.md +16 -59
  323. package/lib/host-packages/claude/openplanr/references/agents/shared/modes/spec-driven/specification.md +9 -11
  324. package/lib/host-packages/claude/openplanr/references/pipeline/stacks/database/mongodb.md +4 -4
  325. package/lib/host-packages/claude/openplanr/runtime/design/scripts/design-owner-custody.mjs +8 -0
  326. package/lib/host-packages/claude/openplanr/runtime/design/scripts/design-review.mjs +105 -55
  327. package/lib/host-packages/claude/openplanr/runtime/design/scripts/design-share.mjs +12 -7
  328. package/lib/host-packages/claude/openplanr/runtime/design/scripts/runtime/packages/design/package.json +3 -3
  329. package/lib/host-packages/claude/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/share.js +1 -1
  330. package/lib/host-packages/claude/openplanr/runtime/design/scripts/runtime/packages/protocol/package.json +9 -1
  331. package/lib/host-packages/claude/openplanr/runtime/plan/scripts/design.mjs +11 -4
  332. package/lib/host-packages/claude/openplanr/runtime/plan/scripts/runtime/packages/protocol/package.json +9 -1
  333. package/lib/host-packages/claude/openplanr/skills/artifact/SKILL.md +14 -14
  334. package/lib/host-packages/claude/openplanr/skills/artifact/references/company-review.md +9 -9
  335. package/lib/host-packages/claude/openplanr/skills/artifact/references/design-sharing.md +1 -1
  336. package/lib/host-packages/claude/openplanr/skills/artifact/references/diagram-sharing.md +4 -4
  337. package/lib/host-packages/claude/openplanr/skills/ceo-review/SKILL.md +0 -1
  338. package/lib/host-packages/claude/openplanr/skills/ceo-review/references/operate-advisor-contract.md +25 -4
  339. package/lib/host-packages/claude/openplanr/skills/chair-review/SKILL.md +6 -2
  340. package/lib/host-packages/claude/openplanr/skills/challenger-review/SKILL.md +6 -2
  341. package/lib/host-packages/claude/openplanr/skills/cmo-review/SKILL.md +0 -1
  342. package/lib/host-packages/claude/openplanr/skills/cmo-review/references/operate-advisor-contract.md +25 -4
  343. package/lib/host-packages/claude/openplanr/skills/coo-review/SKILL.md +0 -1
  344. package/lib/host-packages/claude/openplanr/skills/coo-review/references/operate-advisor-contract.md +25 -4
  345. package/lib/host-packages/claude/openplanr/skills/cpo-review/SKILL.md +0 -1
  346. package/lib/host-packages/claude/openplanr/skills/cpo-review/references/operate-advisor-contract.md +25 -4
  347. package/lib/host-packages/claude/openplanr/skills/cto-review/SKILL.md +0 -1
  348. package/lib/host-packages/claude/openplanr/skills/cto-review/references/operate-advisor-contract.md +25 -4
  349. package/lib/host-packages/claude/openplanr/skills/dashboard/SKILL.md +1 -1
  350. package/lib/host-packages/claude/openplanr/skills/delegate/SKILL.md +7 -0
  351. package/lib/host-packages/claude/openplanr/skills/delegate/references/capsule-contract.md +16 -1
  352. package/lib/host-packages/claude/openplanr/skills/delegate/references/operator-guide.md +8 -6
  353. package/lib/host-packages/claude/openplanr/skills/delegate/scripts/adapters/claude.mjs +11 -4
  354. package/lib/host-packages/claude/openplanr/skills/delegate/scripts/adapters/native.mjs +1 -1
  355. package/lib/host-packages/claude/openplanr/skills/delegate/scripts/backend-diagnostics.mjs +14 -48
  356. package/lib/host-packages/claude/openplanr/skills/delegate/scripts/context.mjs +84 -22
  357. package/lib/host-packages/claude/openplanr/skills/delegate/scripts/credentials.mjs +167 -0
  358. package/lib/host-packages/claude/openplanr/skills/delegate/scripts/presentation.mjs +3 -2
  359. package/lib/host-packages/claude/openplanr/skills/delegate/scripts/run-contract.mjs +5 -7
  360. package/lib/host-packages/claude/openplanr/skills/delegate/scripts/run-preparation.mjs +2 -0
  361. package/lib/host-packages/claude/openplanr/skills/delegate/scripts/run-record.mjs +2 -3
  362. package/lib/host-packages/claude/openplanr/skills/design/SKILL.md +1 -1
  363. package/lib/host-packages/claude/openplanr/skills/design/references/team-review.md +1 -1
  364. package/lib/host-packages/claude/openplanr/skills/design/references/utilities.md +4 -4
  365. package/lib/host-packages/claude/openplanr/skills/design-loop/SKILL.md +1 -1
  366. package/lib/host-packages/claude/openplanr/skills/design-loop/references/team-review.md +1 -1
  367. package/lib/host-packages/claude/openplanr/skills/design-loop/references/utilities.md +4 -4
  368. package/lib/host-packages/claude/openplanr/skills/design-review/SKILL.md +1 -1
  369. package/lib/host-packages/claude/openplanr/skills/design-review/references/team-review.md +1 -1
  370. package/lib/host-packages/claude/openplanr/skills/design-review/references/utilities.md +4 -4
  371. package/lib/host-packages/claude/openplanr/skills/diagram/SKILL.md +15 -15
  372. package/lib/host-packages/claude/openplanr/skills/diagram/references/diagram-document.md +1 -1
  373. package/lib/host-packages/claude/openplanr/skills/diagram/references/diagram-intent-to-ir.md +1 -1
  374. package/lib/host-packages/claude/openplanr/skills/diagram/references/diagram-sharing.md +4 -4
  375. package/lib/host-packages/claude/openplanr/skills/doctor/SKILL.md +9 -9
  376. package/lib/host-packages/claude/openplanr/skills/doctor/references/upgrade.md +18 -16
  377. package/lib/host-packages/claude/openplanr/skills/land/SKILL.md +2 -2
  378. package/lib/host-packages/claude/openplanr/skills/operate/SKILL.md +5 -3
  379. package/lib/host-packages/claude/openplanr/skills/plan/SKILL.md +8 -2
  380. package/lib/host-packages/claude/openplanr/skills/plan/references/artifact-contract.md +5 -0
  381. package/lib/host-packages/claude/openplanr/skills/spec/references/specification-contract.md +5 -0
  382. package/lib/host-packages/claude/openplanr/skills/sprint/SKILL.md +16 -15
  383. package/lib/host-packages/claude/openplanr/skills/sprint/references/refinement-contract.md +5 -5
  384. package/lib/host-packages/claude/openplanr/skills/sprint/references/sprint-formats.md +8 -8
  385. package/lib/host-packages/claude/openplanr/skills/sprint/references/tracker-connections.md +70 -0
  386. package/lib/host-packages/claude/openplanr/skills/sprint/schemas/refinement.schema.json +3 -3
  387. package/lib/host-packages/claude/openplanr/skills/status/SKILL.md +5 -4
  388. package/lib/host-packages/claude/openplanr/skills/status/references/tracker-connections.md +70 -0
  389. package/lib/host-packages/claude/openplanr/skills/sync/SKILL.md +11 -20
  390. package/lib/host-packages/claude/openplanr/skills/sync/references/tracker-connections.md +70 -0
  391. package/lib/host-packages/claude/openplanr/skills/sync/scripts/names.mjs +8 -0
  392. package/lib/host-packages/claude/openplanr/skills/sync/scripts/sync.mjs +3 -2
  393. package/lib/host-packages/cursor/openplanr/.openplanr-content.json +81 -61
  394. package/lib/host-packages/cursor/openplanr/manifest.json +1 -1
  395. package/lib/host-packages/cursor/openplanr/rules/planr-artifact/references/company-review.md +9 -9
  396. package/lib/host-packages/cursor/openplanr/rules/planr-artifact/references/design-sharing.md +1 -1
  397. package/lib/host-packages/cursor/openplanr/rules/planr-artifact/references/diagram-sharing.md +4 -4
  398. package/lib/host-packages/cursor/openplanr/rules/planr-artifact.mdc +14 -14
  399. package/lib/host-packages/cursor/openplanr/rules/planr-ceo-review/references/operate-advisor-contract.md +25 -4
  400. package/lib/host-packages/cursor/openplanr/rules/planr-chair-review.mdc +6 -1
  401. package/lib/host-packages/cursor/openplanr/rules/planr-challenger-review.mdc +6 -1
  402. package/lib/host-packages/cursor/openplanr/rules/planr-cmo-review/references/operate-advisor-contract.md +25 -4
  403. package/lib/host-packages/cursor/openplanr/rules/planr-coo-review/references/operate-advisor-contract.md +25 -4
  404. package/lib/host-packages/cursor/openplanr/rules/planr-cpo-review/references/operate-advisor-contract.md +25 -4
  405. package/lib/host-packages/cursor/openplanr/rules/planr-cto-review/references/operate-advisor-contract.md +25 -4
  406. package/lib/host-packages/cursor/openplanr/rules/planr-dashboard.mdc +1 -1
  407. package/lib/host-packages/cursor/openplanr/rules/planr-delegate/references/capsule-contract.md +16 -1
  408. package/lib/host-packages/cursor/openplanr/rules/planr-delegate/references/operator-guide.md +8 -6
  409. package/lib/host-packages/cursor/openplanr/rules/planr-delegate/scripts/adapters/claude.mjs +11 -4
  410. package/lib/host-packages/cursor/openplanr/rules/planr-delegate/scripts/adapters/native.mjs +1 -1
  411. package/lib/host-packages/cursor/openplanr/rules/planr-delegate/scripts/backend-diagnostics.mjs +14 -48
  412. package/lib/host-packages/cursor/openplanr/rules/planr-delegate/scripts/context.mjs +84 -22
  413. package/lib/host-packages/cursor/openplanr/rules/planr-delegate/scripts/credentials.mjs +167 -0
  414. package/lib/host-packages/cursor/openplanr/rules/planr-delegate/scripts/presentation.mjs +3 -2
  415. package/lib/host-packages/cursor/openplanr/rules/planr-delegate/scripts/run-contract.mjs +5 -7
  416. package/lib/host-packages/cursor/openplanr/rules/planr-delegate/scripts/run-preparation.mjs +2 -0
  417. package/lib/host-packages/cursor/openplanr/rules/planr-delegate/scripts/run-record.mjs +2 -3
  418. package/lib/host-packages/cursor/openplanr/rules/planr-delegate.mdc +7 -0
  419. package/lib/host-packages/cursor/openplanr/rules/planr-design/references/team-review.md +1 -1
  420. package/lib/host-packages/cursor/openplanr/rules/planr-design/references/utilities.md +4 -4
  421. package/lib/host-packages/cursor/openplanr/rules/planr-design-loop/references/team-review.md +1 -1
  422. package/lib/host-packages/cursor/openplanr/rules/planr-design-loop/references/utilities.md +4 -4
  423. package/lib/host-packages/cursor/openplanr/rules/planr-design-loop.mdc +1 -1
  424. package/lib/host-packages/cursor/openplanr/rules/planr-design-review/references/team-review.md +1 -1
  425. package/lib/host-packages/cursor/openplanr/rules/planr-design-review/references/utilities.md +4 -4
  426. package/lib/host-packages/cursor/openplanr/rules/planr-design-review.mdc +1 -1
  427. package/lib/host-packages/cursor/openplanr/rules/planr-design.mdc +1 -1
  428. package/lib/host-packages/cursor/openplanr/rules/planr-diagram/references/diagram-document.md +1 -1
  429. package/lib/host-packages/cursor/openplanr/rules/planr-diagram/references/diagram-intent-to-ir.md +1 -1
  430. package/lib/host-packages/cursor/openplanr/rules/planr-diagram/references/diagram-sharing.md +4 -4
  431. package/lib/host-packages/cursor/openplanr/rules/planr-diagram.mdc +15 -15
  432. package/lib/host-packages/cursor/openplanr/rules/planr-doctor/references/upgrade.md +18 -16
  433. package/lib/host-packages/cursor/openplanr/rules/planr-doctor.mdc +9 -9
  434. package/lib/host-packages/cursor/openplanr/rules/planr-land.mdc +2 -2
  435. package/lib/host-packages/cursor/openplanr/rules/planr-operate.mdc +5 -3
  436. package/lib/host-packages/cursor/openplanr/rules/planr-plan/references/artifact-contract.md +5 -0
  437. package/lib/host-packages/cursor/openplanr/rules/planr-plan.mdc +8 -2
  438. package/lib/host-packages/cursor/openplanr/rules/planr-spec/references/specification-contract.md +5 -0
  439. package/lib/host-packages/cursor/openplanr/rules/planr-sprint/references/refinement-contract.md +5 -5
  440. package/lib/host-packages/cursor/openplanr/rules/planr-sprint/references/sprint-formats.md +8 -8
  441. package/lib/host-packages/cursor/openplanr/rules/planr-sprint/references/tracker-connections.md +70 -0
  442. package/lib/host-packages/cursor/openplanr/rules/planr-sprint/schemas/refinement.schema.json +3 -3
  443. package/lib/host-packages/cursor/openplanr/rules/planr-sprint.mdc +16 -15
  444. package/lib/host-packages/cursor/openplanr/rules/planr-status/references/tracker-connections.md +70 -0
  445. package/lib/host-packages/cursor/openplanr/rules/planr-status.mdc +5 -4
  446. package/lib/host-packages/cursor/openplanr/rules/planr-sync/references/tracker-connections.md +70 -0
  447. package/lib/host-packages/cursor/openplanr/rules/planr-sync/scripts/names.mjs +8 -0
  448. package/lib/host-packages/cursor/openplanr/rules/planr-sync/scripts/sync.mjs +3 -2
  449. package/lib/host-packages/cursor/openplanr/rules/planr-sync.mdc +11 -20
  450. package/lib/host-packages/cursor/openplanr/runtime/design/scripts/design-owner-custody.mjs +8 -0
  451. package/lib/host-packages/cursor/openplanr/runtime/design/scripts/design-review.mjs +105 -55
  452. package/lib/host-packages/cursor/openplanr/runtime/design/scripts/design-share.mjs +12 -7
  453. package/lib/host-packages/cursor/openplanr/runtime/design/scripts/runtime/packages/design/package.json +3 -3
  454. package/lib/host-packages/cursor/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/share.js +1 -1
  455. package/lib/host-packages/cursor/openplanr/runtime/design/scripts/runtime/packages/protocol/package.json +9 -1
  456. package/lib/host-packages/cursor/openplanr/runtime/plan/scripts/design.mjs +11 -4
  457. package/lib/host-packages/cursor/openplanr/runtime/plan/scripts/runtime/packages/protocol/package.json +9 -1
  458. package/lib/host-packages/openai/.claude-plugin/marketplace.json +2 -2
  459. package/lib/host-packages/openai/openplanr/.codex-plugin/plugin.json +1 -1
  460. package/lib/host-packages/openai/openplanr/.openplanr-content.json +90 -70
  461. package/lib/host-packages/openai/openplanr/runtime/design/scripts/design-owner-custody.mjs +8 -0
  462. package/lib/host-packages/openai/openplanr/runtime/design/scripts/design-review.mjs +105 -55
  463. package/lib/host-packages/openai/openplanr/runtime/design/scripts/design-share.mjs +12 -7
  464. package/lib/host-packages/openai/openplanr/runtime/design/scripts/runtime/packages/design/package.json +3 -3
  465. package/lib/host-packages/openai/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/share.js +1 -1
  466. package/lib/host-packages/openai/openplanr/runtime/design/scripts/runtime/packages/protocol/package.json +9 -1
  467. package/lib/host-packages/openai/openplanr/runtime/plan/scripts/design.mjs +11 -4
  468. package/lib/host-packages/openai/openplanr/runtime/plan/scripts/runtime/packages/protocol/package.json +9 -1
  469. package/lib/host-packages/openai/openplanr/skills/artifact/SKILL.md +14 -14
  470. package/lib/host-packages/openai/openplanr/skills/artifact/references/company-review.md +9 -9
  471. package/lib/host-packages/openai/openplanr/skills/artifact/references/design-sharing.md +1 -1
  472. package/lib/host-packages/openai/openplanr/skills/artifact/references/diagram-sharing.md +4 -4
  473. package/lib/host-packages/openai/openplanr/skills/ceo-review/SKILL.md +0 -1
  474. package/lib/host-packages/openai/openplanr/skills/ceo-review/references/operate-advisor-contract.md +25 -4
  475. package/lib/host-packages/openai/openplanr/skills/chair-review/SKILL.md +6 -2
  476. package/lib/host-packages/openai/openplanr/skills/challenger-review/SKILL.md +6 -2
  477. package/lib/host-packages/openai/openplanr/skills/cmo-review/SKILL.md +0 -1
  478. package/lib/host-packages/openai/openplanr/skills/cmo-review/references/operate-advisor-contract.md +25 -4
  479. package/lib/host-packages/openai/openplanr/skills/coo-review/SKILL.md +0 -1
  480. package/lib/host-packages/openai/openplanr/skills/coo-review/references/operate-advisor-contract.md +25 -4
  481. package/lib/host-packages/openai/openplanr/skills/cpo-review/SKILL.md +0 -1
  482. package/lib/host-packages/openai/openplanr/skills/cpo-review/references/operate-advisor-contract.md +25 -4
  483. package/lib/host-packages/openai/openplanr/skills/cto-review/SKILL.md +0 -1
  484. package/lib/host-packages/openai/openplanr/skills/cto-review/references/operate-advisor-contract.md +25 -4
  485. package/lib/host-packages/openai/openplanr/skills/dashboard/SKILL.md +1 -1
  486. package/lib/host-packages/openai/openplanr/skills/delegate/SKILL.md +7 -0
  487. package/lib/host-packages/openai/openplanr/skills/delegate/openplanr.skill.json +11 -0
  488. package/lib/host-packages/openai/openplanr/skills/delegate/references/capsule-contract.md +16 -1
  489. package/lib/host-packages/openai/openplanr/skills/delegate/references/operator-guide.md +8 -6
  490. package/lib/host-packages/openai/openplanr/skills/delegate/scripts/adapters/claude.mjs +11 -4
  491. package/lib/host-packages/openai/openplanr/skills/delegate/scripts/adapters/native.mjs +1 -1
  492. package/lib/host-packages/openai/openplanr/skills/delegate/scripts/backend-diagnostics.mjs +14 -48
  493. package/lib/host-packages/openai/openplanr/skills/delegate/scripts/context.mjs +84 -22
  494. package/lib/host-packages/openai/openplanr/skills/delegate/scripts/credentials.mjs +167 -0
  495. package/lib/host-packages/openai/openplanr/skills/delegate/scripts/presentation.mjs +3 -2
  496. package/lib/host-packages/openai/openplanr/skills/delegate/scripts/run-contract.mjs +5 -7
  497. package/lib/host-packages/openai/openplanr/skills/delegate/scripts/run-preparation.mjs +2 -0
  498. package/lib/host-packages/openai/openplanr/skills/delegate/scripts/run-record.mjs +2 -3
  499. package/lib/host-packages/openai/openplanr/skills/design/SKILL.md +1 -1
  500. package/lib/host-packages/openai/openplanr/skills/design/references/team-review.md +1 -1
  501. package/lib/host-packages/openai/openplanr/skills/design/references/utilities.md +4 -4
  502. package/lib/host-packages/openai/openplanr/skills/design-loop/SKILL.md +1 -1
  503. package/lib/host-packages/openai/openplanr/skills/design-loop/references/team-review.md +1 -1
  504. package/lib/host-packages/openai/openplanr/skills/design-loop/references/utilities.md +4 -4
  505. package/lib/host-packages/openai/openplanr/skills/design-review/SKILL.md +1 -1
  506. package/lib/host-packages/openai/openplanr/skills/design-review/references/team-review.md +1 -1
  507. package/lib/host-packages/openai/openplanr/skills/design-review/references/utilities.md +4 -4
  508. package/lib/host-packages/openai/openplanr/skills/diagram/SKILL.md +15 -15
  509. package/lib/host-packages/openai/openplanr/skills/diagram/references/diagram-document.md +1 -1
  510. package/lib/host-packages/openai/openplanr/skills/diagram/references/diagram-intent-to-ir.md +1 -1
  511. package/lib/host-packages/openai/openplanr/skills/diagram/references/diagram-sharing.md +4 -4
  512. package/lib/host-packages/openai/openplanr/skills/doctor/SKILL.md +9 -9
  513. package/lib/host-packages/openai/openplanr/skills/doctor/references/upgrade.md +18 -16
  514. package/lib/host-packages/openai/openplanr/skills/land/SKILL.md +2 -2
  515. package/lib/host-packages/openai/openplanr/skills/operate/SKILL.md +5 -3
  516. package/lib/host-packages/openai/openplanr/skills/plan/SKILL.md +8 -2
  517. package/lib/host-packages/openai/openplanr/skills/plan/references/artifact-contract.md +5 -0
  518. package/lib/host-packages/openai/openplanr/skills/spec/references/specification-contract.md +5 -0
  519. package/lib/host-packages/openai/openplanr/skills/sprint/SKILL.md +16 -15
  520. package/lib/host-packages/openai/openplanr/skills/sprint/openplanr.skill.json +11 -0
  521. package/lib/host-packages/openai/openplanr/skills/sprint/references/refinement-contract.md +5 -5
  522. package/lib/host-packages/openai/openplanr/skills/sprint/references/sprint-formats.md +8 -8
  523. package/lib/host-packages/openai/openplanr/skills/sprint/references/tracker-connections.md +70 -0
  524. package/lib/host-packages/openai/openplanr/skills/sprint/schemas/refinement.schema.json +3 -3
  525. package/lib/host-packages/openai/openplanr/skills/status/SKILL.md +5 -4
  526. package/lib/host-packages/openai/openplanr/skills/status/openplanr.skill.json +11 -0
  527. package/lib/host-packages/openai/openplanr/skills/status/references/tracker-connections.md +70 -0
  528. package/lib/host-packages/openai/openplanr/skills/sync/SKILL.md +11 -20
  529. package/lib/host-packages/openai/openplanr/skills/sync/openplanr.skill.json +22 -0
  530. package/lib/host-packages/openai/openplanr/skills/sync/references/tracker-connections.md +70 -0
  531. package/lib/host-packages/openai/openplanr/skills/sync/scripts/names.mjs +8 -0
  532. package/lib/host-packages/openai/openplanr/skills/sync/scripts/sync.mjs +3 -2
  533. package/lib/integrations.mjs +3 -2
  534. package/lib/names.d.mts +4 -0
  535. package/lib/names.mjs +8 -0
  536. package/lib/planning-folder.d.mts +14 -0
  537. package/lib/planning-folder.mjs +40 -0
  538. package/package.json +5 -5
  539. package/dist/dashboard/assets/index-D7R6tnlX.js.map +0 -1
  540. package/dist/services/connectors/adapters/business-metrics.d.ts +0 -5
  541. package/dist/services/connectors/adapters/business-metrics.d.ts.map +0 -1
  542. package/dist/services/connectors/adapters/business-metrics.js +0 -41
  543. package/dist/services/connectors/adapters/business-metrics.js.map +0 -1
  544. package/dist/services/connectors/adapters/deployment-health.d.ts +0 -18
  545. package/dist/services/connectors/adapters/deployment-health.d.ts.map +0 -1
  546. package/dist/services/connectors/adapters/deployment-health.js +0 -67
  547. package/dist/services/connectors/adapters/deployment-health.js.map +0 -1
  548. package/dist/services/connectors/adapters/github.d.ts +0 -5
  549. package/dist/services/connectors/adapters/github.d.ts.map +0 -1
  550. package/dist/services/connectors/adapters/github.js +0 -31
  551. package/dist/services/connectors/adapters/github.js.map +0 -1
  552. package/dist/services/connectors/adapters/linear-jira.d.ts +0 -5
  553. package/dist/services/connectors/adapters/linear-jira.d.ts.map +0 -1
  554. package/dist/services/connectors/adapters/linear-jira.js +0 -26
  555. package/dist/services/connectors/adapters/linear-jira.js.map +0 -1
  556. package/dist/services/connectors/adapters/posthog.d.ts +0 -5
  557. package/dist/services/connectors/adapters/posthog.d.ts.map +0 -1
  558. package/dist/services/connectors/adapters/posthog.js +0 -31
  559. package/dist/services/connectors/adapters/posthog.js.map +0 -1
  560. package/dist/services/connectors/adapters/sentry.d.ts +0 -5
  561. package/dist/services/connectors/adapters/sentry.d.ts.map +0 -1
  562. package/dist/services/connectors/adapters/sentry.js +0 -31
  563. package/dist/services/connectors/adapters/sentry.js.map +0 -1
  564. package/dist/services/connectors/checkpoint-custody.d.ts +0 -45
  565. package/dist/services/connectors/checkpoint-custody.d.ts.map +0 -1
  566. package/dist/services/connectors/checkpoint-custody.js +0 -496
  567. package/dist/services/connectors/checkpoint-custody.js.map +0 -1
  568. package/dist/services/connectors/connector-registry.d.ts +0 -144
  569. package/dist/services/connectors/connector-registry.d.ts.map +0 -1
  570. package/dist/services/connectors/connector-registry.js +0 -423
  571. package/dist/services/connectors/connector-registry.js.map +0 -1
  572. package/dist/services/connectors/connector-runtime.d.ts +0 -208
  573. package/dist/services/connectors/connector-runtime.d.ts.map +0 -1
  574. package/dist/services/connectors/connector-runtime.js +0 -1305
  575. package/dist/services/connectors/connector-runtime.js.map +0 -1
  576. package/dist/services/connectors/credential-custody.d.ts +0 -96
  577. package/dist/services/connectors/credential-custody.d.ts.map +0 -1
  578. package/dist/services/connectors/credential-custody.js +0 -390
  579. package/dist/services/connectors/credential-custody.js.map +0 -1
  580. package/dist/templates/voice/standup.md.hbs +0 -20
  581. /package/lib/host-packages/claude/openplanr/runtime/design/scripts/{design-runtime-support-5cb7531bede8.mjs → design-runtime-support-336900df0d39.mjs} +0 -0
  582. /package/lib/host-packages/cursor/openplanr/runtime/design/scripts/{design-runtime-support-5cb7531bede8.mjs → design-runtime-support-336900df0d39.mjs} +0 -0
  583. /package/lib/host-packages/openai/openplanr/runtime/design/scripts/{design-runtime-support-5cb7531bede8.mjs → design-runtime-support-336900df0d39.mjs} +0 -0
@@ -0,0 +1,70 @@
1
+ # GitHub and Linear connections
2
+
3
+ These skills store and read no GitHub or Linear credentials. Remote steps run through a
4
+ connection the host already has; the planning files stay the source of truth.
5
+
6
+ ## Use the host's connection
7
+
8
+ - **Linear:** the host's Linear connection, whose tools read, create and update issues.
9
+ - **GitHub:** the host's GitHub connection, or the GitHub CLI when
10
+ `gh auth status --hostname github.com` succeeds.
11
+
12
+ Never ask the user for a token, read one from the environment or a file, or put one in a
13
+ command, URL or file.
14
+
15
+ ## When a connection is missing
16
+
17
+ Finish the local work first. Then report the remote step as not run and give the one
18
+ line for the current host:
19
+
20
+ | Host | Linear | GitHub |
21
+ | --- | --- | --- |
22
+ | Claude Code | Run `/plugin install linear@claude-plugins-official`, then sign in to Linear from `/mcp`. | Install the GitHub CLI (cli.github.com) and run `gh auth login`. |
23
+ | Codex | Run `codex mcp add linear --url https://mcp.linear.app/mcp`, then `codex mcp login linear`. | Install the GitHub plugin from `/plugins`, or run `gh auth login`. |
24
+ | Cursor | Add Linear from the Cursor Marketplace and sign in to Linear. | Install the GitHub CLI (cli.github.com) and run `gh auth login`. |
25
+
26
+ Ask the user to try again once connected; never retry the remote step on your own.
27
+
28
+ ## Status mapping
29
+
30
+ | Local status | Linear workflow state | GitHub issue |
31
+ | --- | --- | --- |
32
+ | `planning`, `pending` | Unstarted (for example Todo) | open |
33
+ | `in-progress` | Started (for example In Progress) | open |
34
+ | `done` | Completed (for example Done) | closed |
35
+ | Backlog `open` | Backlog, else Unstarted | open |
36
+ | Backlog `closed` | Completed | closed |
37
+ | Backlog `promoted` | Leave as it is | Leave as it is |
38
+
39
+ When reading state back, write only a status the item's type allows. A backlog item takes
40
+ `open` or `closed` and keeps `promoted`.
41
+
42
+ - Linear Completed or Canceled sets `done`, or `closed` for a backlog item. Started sets
43
+ `in-progress`, and Triage, Backlog or Unstarted sets `planning` for features and stories
44
+ and `pending` for quick tasks; a backlog item takes `open` from any of these. Epics and
45
+ task files keep their status.
46
+ - A closed GitHub issue sets `done`, or `closed` for a backlog item. An open issue sets
47
+ `in-progress` for a `done` item and `open` for a `closed` backlog item; other statuses
48
+ stay as they are.
49
+
50
+ ## Links
51
+
52
+ A linked item records its tracker identity in frontmatter. Update a linked item through
53
+ that identity instead of creating another, and record the identity of everything you
54
+ create.
55
+
56
+ - **GitHub:** each item is one issue, recorded as `githubIssue`.
57
+ - **Linear:** use the shapes the OpenPlanr CLI uses, so its later pushes reuse what you
58
+ create:
59
+ - An epic is a Linear project (`linearProjectId`, `linearProjectIdentifier`,
60
+ `linearProjectUrl`). When its `linearMappingStrategy` is `milestone-of` or `label-on`,
61
+ it is a milestone in an existing project (`linearMilestoneId`) or a team label
62
+ (`linearLabelId`) instead, and every issue under it carries that milestone
63
+ (`linearProjectMilestoneId`) or label (`linearLabelIds`).
64
+ - A feature, quick task or backlog item is one issue (`linearIssueId`,
65
+ `linearIssueIdentifier`, `linearIssueUrl`). A story is a sub-issue of its feature's
66
+ issue (`linearParentIssueId`).
67
+ - All task files of one feature share one task-list issue: a sub-issue of the feature's
68
+ issue whose checklist merges every task file, recorded in each task file. Its state is
69
+ Completed when every task file is `done`, Unstarted when every one is `pending`, and
70
+ Started otherwise.
@@ -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 { 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 the host's Linear connection.",
150
151
  );
151
152
  } else {
152
153
  throw new IntegrationError(
@@ -6,31 +6,22 @@ alwaysApply: false
6
6
  # OpenPlanr Sync
7
7
 
8
8
  Reconcile local planning artifacts and, when requested, GitHub or Linear state.
9
- Reason about conflicts in this active session; deterministic mapping and GitHub
10
- transport may use a host connector or the packaged [sync helper](planr-sync/scripts/sync.mjs).
11
- Local and GitHub work never require the OpenPlanr CLI.
9
+ Reason about conflicts in this active session. Local and GitHub work never require
10
+ the OpenPlanr CLI.
12
11
 
13
- Resolution order:
12
+ Remote steps run through the host's own connections, as described in
13
+ [tracker connections](planr-sync/references/tracker-connections.md), which also holds the status
14
+ mapping and what to tell the user when a connection is missing:
14
15
 
15
- 1. use a host-native GitHub or Linear connector when available;
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.
19
-
20
- Linear through the CLI:
21
-
22
- - the user runs `planr linear init` in a terminal once; it prompts for a personal
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
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
28
- `--dry-run`. Quick tasks and backlog items need `linear.standaloneProjectId` in the
29
- project config when no terminal prompt is available.
16
+ - GitHub: the host's GitHub connection, or, when the GitHub CLI is signed in, the
17
+ packaged [sync helper](planr-sync/scripts/sync.mjs), which creates and edits issues through `gh`;
18
+ close or reopen an issue with `gh issue close` or `gh issue reopen`. `openplanr github`
19
+ is an optional equivalent; `openplanr sync` only repairs local cross-references.
20
+ - Linear: the host's Linear connection.
30
21
 
31
22
  Audit is read-only by default. Apply local changes only when the request asks for
32
23
  reconciliation, and push remote changes only when the request asks for external
33
- synchronization. If credentials are unavailable, complete local reconciliation
24
+ synchronization. If a connection is unavailable, complete local reconciliation
34
25
  and report only the external step that could not run.
35
26
 
36
27
  ## Return
@@ -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";
@@ -420,8 +424,12 @@ import { dirname, isAbsolute, join, resolve } from "node:path";
420
424
  import { fileURLToPath } from "node:url";
421
425
  var here = dirname(fileURLToPath(new URL("./runtime/packages/artifact/lib/artifact/review-server.mjs", import.meta.url).href));
422
426
  var STAGE_RUNTIME_PATH = join(here, "..", "..", "templates", "artifact-review-stage.js");
423
- var ARTIFACT_REVIEW_SERVER_VERSION = 2;
427
+ var ARTIFACT_REVIEW_SERVER_VERSION = 3;
424
428
  var ARTIFACT_REVIEW_SERVER_KIND = "artifact-review";
429
+ var CONTROL_HEADER = "x-openplanr-control";
430
+ var CONTROLLABLE_SERVER_VERSIONS = /* @__PURE__ */ new Set([2, ARTIFACT_REVIEW_SERVER_VERSION]);
431
+ var EXPORT_ONLY_SERVER_VERSIONS = /* @__PURE__ */ new Set([1]);
432
+ var AUTHORIZATION_CONTROL_VERSIONS = /* @__PURE__ */ new Set([1, 2]);
425
433
  var CONTROL_WINDOW_BYTES = 64 * 1024 * 1024;
426
434
  var ARTIFACT_REVIEW_MAX_CONTROL_BYTES = Math.ceil((MAX_ARTIFACT_HTML_BYTES * 2 + ARTIFACT_REVIEW_MAX_STATE_BYTES) / CONTROL_WINDOW_BYTES) * CONTROL_WINDOW_BYTES;
427
435
  var ARTIFACT_REVIEW_MAX_STATE_BYTES2 = ARTIFACT_REVIEW_MAX_STATE_BYTES;
@@ -477,6 +485,12 @@ var PERMISSIONS_POLICY = [
477
485
  function artifactError(code, message, fix = "", details) {
478
486
  return new PipelineError(code, message, fix, details);
479
487
  }
488
+ function artifactReviewControlHeaders(controlToken) {
489
+ return { [CONTROL_HEADER]: controlToken };
490
+ }
491
+ function stateControlHeaders(state) {
492
+ return AUTHORIZATION_CONTROL_VERSIONS.has(state.serverVersion) ? { authorization: `Bearer ${state.controlToken}` } : artifactReviewControlHeaders(state.controlToken);
493
+ }
480
494
  function reviewStateDir(env = process.env) {
481
495
  return join(planrHome(env), "artifact-daemon");
482
496
  }
@@ -559,9 +573,9 @@ function parseRequestPath(rawUrl) {
559
573
  });
560
574
  return { segments, trailingSlash };
561
575
  }
562
- function bearerToken(req) {
563
- const value = req.headers?.authorization;
564
- return typeof value === "string" && value.startsWith("Bearer ") ? value.slice(7) : "";
576
+ function presentedControlToken(req) {
577
+ const value = req.headers?.[CONTROL_HEADER];
578
+ return typeof value === "string" ? value : "";
565
579
  }
566
580
  function cloneAndValidateEnvelope(envelope) {
567
581
  let cloned;
@@ -871,7 +885,7 @@ function createArtifactReviewServer({
871
885
  return;
872
886
  }
873
887
  if (internal) {
874
- if (!timingSafeTokenEqual(bearerToken(req), controlToken)) {
888
+ if (!timingSafeTokenEqual(presentedControlToken(req), controlToken)) {
875
889
  sendJson(res, 403, { ok: false, error: "forbidden" });
876
890
  return;
877
891
  }
@@ -1445,7 +1459,7 @@ function createArtifactReviewServer({
1445
1459
  return controller;
1446
1460
  }
1447
1461
  function validState(value, requestedPort, { allowLegacy = false } = {}) {
1448
- return value?.schemaVersion === "1.0.0" && value.kind === ARTIFACT_REVIEW_SERVER_KIND && (value.serverVersion === ARTIFACT_REVIEW_SERVER_VERSION || allowLegacy && value.serverVersion === 1) && Number.isInteger(value.pid) && value.pid > 0 && Number.isInteger(value.port) && value.port > 0 && value.port <= 65535 && (requestedPort === 0 || value.port === requestedPort) && isCapabilityToken(value.instanceId, { bytes: SESSION_ID_BYTES }) && isCapabilityToken(value.controlToken, { bytes: CONTROL_TOKEN_BYTES });
1462
+ return value?.schemaVersion === "1.0.0" && value.kind === ARTIFACT_REVIEW_SERVER_KIND && (CONTROLLABLE_SERVER_VERSIONS.has(value.serverVersion) || allowLegacy && EXPORT_ONLY_SERVER_VERSIONS.has(value.serverVersion)) && Number.isInteger(value.pid) && value.pid > 0 && Number.isInteger(value.port) && value.port > 0 && value.port <= 65535 && (requestedPort === 0 || value.port === requestedPort) && isCapabilityToken(value.instanceId, { bytes: SESSION_ID_BYTES }) && isCapabilityToken(value.controlToken, { bytes: CONTROL_TOKEN_BYTES });
1449
1463
  }
1450
1464
  function readReviewServerState(path) {
1451
1465
  try {
@@ -1456,7 +1470,7 @@ function readReviewServerState(path) {
1456
1470
  throw artifactError(
1457
1471
  ARTIFACT_ERROR_CODES.LOOPBACK_STATE,
1458
1472
  "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."
1473
+ `Run ${CLI_COMMAND} doctor and recover the owner record before starting or stopping this service.`
1460
1474
  );
1461
1475
  }
1462
1476
  }
@@ -1469,7 +1483,7 @@ async function controlRequest(descriptor, path, { method, body, fetchImpl } = {}
1469
1483
  const response = await fetchImpl(`http://${LOOPBACK_HOST}:${descriptor.state.port}${path}`, {
1470
1484
  method,
1471
1485
  headers: {
1472
- authorization: `Bearer ${descriptor.state.controlToken}`,
1486
+ ...stateControlHeaders(descriptor.state),
1473
1487
  ...body === void 0 ? {} : { "content-type": "application/json" }
1474
1488
  },
1475
1489
  ...body === void 0 ? {} : { body: JSON.stringify(body) },
@@ -1533,6 +1547,34 @@ async function stopArtifactReviewServer(instanceId, { env = process.env, fetchIm
1533
1547
  return controlRequest({ state }, "/internal/v1/shutdown", { method: "POST", fetchImpl });
1534
1548
  }
1535
1549
 
1550
+ // packages/protocol/src/planning-folder.mjs
1551
+ import { existsSync as existsSync2, readdirSync as readdirSync2, statSync } from "node:fs";
1552
+ import { join as join2 } from "node:path";
1553
+ var FOREIGN_FILES = Object.freeze(["planr.config.json", "board.html"]);
1554
+ var GOAL_DIRECTORIES = Object.freeze(["tasks", "plans"]);
1555
+ var isDirectory = (path) => existsSync2(path) && statSync(path).isDirectory();
1556
+ function foreignPlanningFolderSigns(projectRoot2) {
1557
+ const folder = join2(projectRoot2, PLANNING_FOLDER);
1558
+ if (!isDirectory(folder) || existsSync2(join2(folder, "config.json"))) return [];
1559
+ const signs = FOREIGN_FILES.filter((name) => existsSync2(join2(folder, name)));
1560
+ for (const name of GOAL_DIRECTORIES) {
1561
+ const directory = join2(folder, name);
1562
+ if (isDirectory(directory) && readdirSync2(directory).some((entry) => entry.endsWith("-goal.md")))
1563
+ signs.push(`*-goal.md files in ${name}`);
1564
+ }
1565
+ return signs;
1566
+ }
1567
+ function planningFolderConflict(projectRoot2) {
1568
+ const signs = foreignPlanningFolderSigns(projectRoot2);
1569
+ if (signs.length === 0) return null;
1570
+ return Object.freeze({
1571
+ code: "E_PLANNING_FOLDER_FOREIGN",
1572
+ 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.`,
1573
+ fix: `Move or rename that folder, or use ${CLI_COMMAND} in a project without it, then retry.`,
1574
+ signs: Object.freeze(signs)
1575
+ });
1576
+ }
1577
+
1536
1578
  // packages/design/lib/design/design-plan-handoff.mjs
1537
1579
  var clone = (value) => JSON.parse(canonicalizeJson(value));
1538
1580
  function prepareDesignPlanHandoff(handoff, { subject } = {}) {
@@ -1571,7 +1613,7 @@ function prepareDesignPlanHandoff(handoff, { subject } = {}) {
1571
1613
  // packages/design/lib/design/implementation-handoff.mjs
1572
1614
  import { createHash, randomUUID } from "node:crypto";
1573
1615
  import {
1574
- existsSync as existsSync2,
1616
+ existsSync as existsSync3,
1575
1617
  mkdirSync,
1576
1618
  readFileSync as readFileSync2,
1577
1619
  realpathSync,
@@ -1579,7 +1621,7 @@ import {
1579
1621
  rmSync as rmSync2,
1580
1622
  writeFileSync
1581
1623
  } from "node:fs";
1582
- import { dirname as dirname2, join as join2, resolve as resolve2, sep } from "node:path";
1624
+ import { dirname as dirname2, join as join3, resolve as resolve2, sep } from "node:path";
1583
1625
 
1584
1626
  // packages/design/lib/design/implementation-handoff-markdown.mjs
1585
1627
  var line = (value) => String(value).replaceAll("\r\n", "\n").replaceAll("\r", "\n").trim().replaceAll("\n", " ").replace(/([\\`*_[\]<>#|])/gu, "\\$1");
@@ -1832,19 +1874,19 @@ function createRepositorySourceResolver(root) {
1832
1874
  };
1833
1875
  }
1834
1876
  function implementationHandoffPaths(root) {
1835
- const directory = join2(resolve2(root), "implementation-handoff");
1877
+ const directory = join3(resolve2(root), "implementation-handoff");
1836
1878
  return Object.freeze({
1837
1879
  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")
1880
+ draftJson: join3(directory, "draft.json"),
1881
+ draftMarkdown: join3(directory, "draft.md"),
1882
+ journal: join3(directory, "draft-publication.json"),
1883
+ current: join3(directory, "current.json"),
1884
+ history: join3(directory, "versions")
1843
1885
  });
1844
1886
  }
1845
1887
  function recoverImplementationHandoffDraft(root) {
1846
1888
  const paths = implementationHandoffPaths(root);
1847
- if (!existsSync2(paths.journal)) return false;
1889
+ if (!existsSync3(paths.journal)) return false;
1848
1890
  const journal = JSON.parse(readFileSync2(paths.journal, "utf8"));
1849
1891
  const value = assertImplementationHandoffProjection(journal.package);
1850
1892
  if (journal.markdown !== value.markdown)
@@ -1857,14 +1899,14 @@ function recoverImplementationHandoffDraft(root) {
1857
1899
  function readImplementationHandoffDraft(root, { allowMissing = true } = {}) {
1858
1900
  const paths = implementationHandoffPaths(root);
1859
1901
  recoverImplementationHandoffDraft(root);
1860
- if (!existsSync2(paths.draftJson)) {
1902
+ if (!existsSync3(paths.draftJson)) {
1861
1903
  if (allowMissing) return null;
1862
1904
  throw new Error("No implementation handoff draft exists.");
1863
1905
  }
1864
1906
  const value = assertImplementationHandoffProjection(
1865
1907
  JSON.parse(readFileSync2(paths.draftJson, "utf8"))
1866
1908
  );
1867
- if (!existsSync2(paths.draftMarkdown))
1909
+ if (!existsSync3(paths.draftMarkdown))
1868
1910
  throw new Error("Implementation handoff Markdown is missing.");
1869
1911
  if (readFileSync2(paths.draftMarkdown, "utf8") !== value.markdown)
1870
1912
  throw new Error("Implementation handoff JSON and Markdown projections differ.");
@@ -1899,15 +1941,15 @@ function importImplementationHandoffPackage(input, { resolveSource } = {}) {
1899
1941
  // packages/design/lib/design/implementation-handoff-approval.mjs
1900
1942
  import { createHash as createHash2, randomUUID as randomUUID2 } from "node:crypto";
1901
1943
  import {
1902
- existsSync as existsSync3,
1944
+ existsSync as existsSync4,
1903
1945
  mkdirSync as mkdirSync2,
1904
- readdirSync as readdirSync2,
1946
+ readdirSync as readdirSync3,
1905
1947
  readFileSync as readFileSync3,
1906
1948
  renameSync as renameSync2,
1907
1949
  rmSync as rmSync3,
1908
1950
  writeFileSync as writeFileSync2
1909
1951
  } from "node:fs";
1910
- import { dirname as dirname3, join as join3 } from "node:path";
1952
+ import { dirname as dirname3, join as join4 } from "node:path";
1911
1953
  var DIGEST2 = /^sha256:[a-f0-9]{64}$/u;
1912
1954
  var ID = /^[A-Za-z0-9][A-Za-z0-9._:-]*$/u;
1913
1955
  var APPROVE_CAPABILITY = "design:implementation-handoff:approve";
@@ -1996,20 +2038,20 @@ function implementationHandoffApprovalPaths(root) {
1996
2038
  const base = implementationHandoffPaths(root);
1997
2039
  return Object.freeze({
1998
2040
  ...base,
1999
- events: join3(base.directory, "events"),
2000
- journal: join3(base.directory, "lifecycle-publication.json")
2041
+ events: join4(base.directory, "events"),
2042
+ journal: join4(base.directory, "lifecycle-publication.json")
2001
2043
  });
2002
2044
  }
2003
2045
  function archivePaths(root, value) {
2004
- const directory = join3(implementationHandoffPaths(root).history, packageKey(value));
2046
+ const directory = join4(implementationHandoffPaths(root).history, packageKey(value));
2005
2047
  return {
2006
2048
  directory,
2007
- json: join3(directory, "handoff.json"),
2008
- markdown: join3(directory, "handoff.md")
2049
+ json: join4(directory, "handoff.json"),
2050
+ markdown: join4(directory, "handoff.md")
2009
2051
  };
2010
2052
  }
2011
2053
  function eventPath(root, requestId) {
2012
- return join3(implementationHandoffApprovalPaths(root).events, `${requestKey(requestId)}.json`);
2054
+ return join4(implementationHandoffApprovalPaths(root).events, `${requestKey(requestId)}.json`);
2013
2055
  }
2014
2056
  function readJson2(path, fallback = void 0) {
2015
2057
  try {
@@ -2043,13 +2085,13 @@ function pointerFor(value, status, eventId, extra = {}) {
2043
2085
  }
2044
2086
  function writeLifecycleJournal(root, journal) {
2045
2087
  const paths = implementationHandoffApprovalPaths(root);
2046
- if (existsSync3(paths.journal)) recoverImplementationHandoffApproval(root);
2088
+ if (existsSync4(paths.journal)) recoverImplementationHandoffApproval(root);
2047
2089
  atomicText2(paths.journal, jsonBytes2(journal));
2048
2090
  return recoverImplementationHandoffApproval(root);
2049
2091
  }
2050
2092
  function recoverImplementationHandoffApproval(root) {
2051
2093
  const paths = implementationHandoffApprovalPaths(root);
2052
- if (!existsSync3(paths.journal)) return false;
2094
+ if (!existsSync4(paths.journal)) return false;
2053
2095
  const journal = readJson2(paths.journal);
2054
2096
  if (journal.kind !== "openplanr-design-implementation-handoff-lifecycle-publication" || journal.schemaVersion !== "1.0.0")
2055
2097
  throw new TypeError("The implementation handoff lifecycle journal is invalid.");
@@ -2080,16 +2122,16 @@ function readImplementationHandoffVersion(root, identity) {
2080
2122
  function listImplementationHandoffHistory(root) {
2081
2123
  recoverImplementationHandoffApproval(root);
2082
2124
  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")))
2125
+ if (!existsSync4(directory)) return [];
2126
+ return readdirSync3(directory, { withFileTypes: true }).filter((entry) => entry.isDirectory()).map(
2127
+ (entry) => assertImplementationHandoffProjection(readJson2(join4(directory, entry.name, "handoff.json")))
2086
2128
  ).sort((left, right) => left.version - right.version || left.id.localeCompare(right.id));
2087
2129
  }
2088
2130
  function readImplementationHandoffLifecycle(root) {
2089
2131
  recoverImplementationHandoffApproval(root);
2090
2132
  const paths = implementationHandoffApprovalPaths(root);
2091
2133
  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(
2134
+ const events = existsSync4(paths.events) ? readdirSync3(paths.events).filter((name) => name.endsWith(".json")).map((name) => readJson2(join4(paths.events, name))).sort(
2093
2135
  (left, right) => left.at.localeCompare(right.at) || left.eventId.localeCompare(right.eventId)
2094
2136
  ) : [];
2095
2137
  return Object.freeze({ current, history: listImplementationHandoffHistory(root), events });
@@ -2561,7 +2603,7 @@ function validateState(value, current) {
2561
2603
  function projectRoot(root) {
2562
2604
  let candidate = root;
2563
2605
  while (true) {
2564
- if (existsSync4(join4(candidate, ".planr")) || existsSync4(join4(candidate, ".git")))
2606
+ if (existsSync5(join5(candidate, PLANNING_FOLDER)) || existsSync5(join5(candidate, ".git")))
2565
2607
  return candidate;
2566
2608
  const parent = dirname4(candidate);
2567
2609
  if (parent === candidate) return root;
@@ -2606,7 +2648,7 @@ function proposeImplementationPackage(file, env) {
2606
2648
  designSpecPath(current.root),
2607
2649
  ...(current.sourceFiles ?? []).map((path) => resolve3(current.root, path))
2608
2650
  ])
2609
- ].filter((path) => existsSync4(path));
2651
+ ].filter((path) => existsSync5(path));
2610
2652
  const sources = paths.map((path, index) => {
2611
2653
  const logicalPath = relative(repository, path).replaceAll("\\", "/");
2612
2654
  const extension = logicalPath.split(".").pop()?.toLowerCase();
@@ -2652,7 +2694,10 @@ function proposeImplementationPackage(file, env) {
2652
2694
  };
2653
2695
  }
2654
2696
  async function persistDesignTaste(current, state) {
2655
- const path = join4(projectRoot(current.root), ".planr/design-system/taste.json");
2697
+ const root = projectRoot(current.root);
2698
+ const conflict = planningFolderConflict(root);
2699
+ if (conflict) throw new PipelineError(conflict.code, conflict.problem, conflict.fix);
2700
+ const path = join5(root, `${PLANNING_FOLDER}/design-system/taste.json`);
2656
2701
  const release = await acquireStartLock(`${path}.lock`);
2657
2702
  try {
2658
2703
  const taste = readJson(path, { designs: {} });
@@ -2693,7 +2738,7 @@ async function saveDesignState(file, { state, revision, stateVersion }) {
2693
2738
  throw Object.assign(new Error("The design changed. Reload before saving feedback."), {
2694
2739
  statusCode: 409
2695
2740
  });
2696
- const path = join4(current.root, ".design/studio-state.json");
2741
+ const path = join5(current.root, ".design/studio-state.json");
2697
2742
  const release = await acquireStartLock(`${path}.lock`);
2698
2743
  try {
2699
2744
  current = currentDesign(file);
@@ -2731,7 +2776,7 @@ var readBody = async (req) => JSON.parse(await readRequestBody(req, { maxBytes:
2731
2776
  var readImplementationBody = async (req) => JSON.parse(await readRequestBody(req, { maxBytes: 5 * 1024 * 1024, encoding: "utf8" }));
2732
2777
  async function startDesignReview(file, options = {}) {
2733
2778
  const { root } = currentDesign(file);
2734
- const release = await acquireStartLock(join4(root, ".design/start.lock"));
2779
+ const release = await acquireStartLock(join5(root, ".design/start.lock"));
2735
2780
  try {
2736
2781
  return await startDesignReviewUnlocked(file, options);
2737
2782
  } finally {
@@ -2752,7 +2797,7 @@ async function startDesignReviewUnlocked(file, {
2752
2797
  let current = currentDesign(file);
2753
2798
  const applyInitialView = async () => {
2754
2799
  if (view === void 0) return;
2755
- const saved = readJson(join4(current.root, ".design/studio-state.json"), {
2800
+ const saved = readJson(join5(current.root, ".design/studio-state.json"), {
2756
2801
  state: {},
2757
2802
  stateVersion: 0
2758
2803
  });
@@ -2762,7 +2807,7 @@ async function startDesignReviewUnlocked(file, {
2762
2807
  state: { ...saved.state, view }
2763
2808
  });
2764
2809
  };
2765
- const stateFile = join4(current.root, ".design/server.json");
2810
+ const stateFile = join5(current.root, ".design/server.json");
2766
2811
  const old = readJson(stateFile, null);
2767
2812
  const services = (await listArtifactReviewServers({ env, fetchImpl })).filter(
2768
2813
  (service) => service.kind === "design" && service.projectRoot === current.root
@@ -2817,7 +2862,12 @@ async function startDesignReviewUnlocked(file, {
2817
2862
  server = createArtifactReviewServer({
2818
2863
  env,
2819
2864
  serverMetadata: { kind: "design", projectRoot: current.root },
2820
- prepareSource: (options) => prepareArtifactDocument({ ...options, allowLocalForms: true }),
2865
+ prepareSource: (options) => prepareArtifactDocument({
2866
+ ...options,
2867
+ allowLocalForms: true,
2868
+ prototypeState: true,
2869
+ screenId: current.entries.find((entry) => entry.artifactId === options.artifactId)?.screenId ?? options.artifactId
2870
+ }),
2821
2871
  async refreshSession(session) {
2822
2872
  current = currentDesign(file);
2823
2873
  if (session.designRevision === current.revision) return;
@@ -2839,7 +2889,7 @@ async function startDesignReviewUnlocked(file, {
2839
2889
  session.designRevision = current.revision;
2840
2890
  },
2841
2891
  renderDocument({ model, base }) {
2842
- const state = readJson(join4(current.root, ".design/studio-state.json"), {
2892
+ const state = readJson(join5(current.root, ".design/studio-state.json"), {
2843
2893
  state: {}
2844
2894
  }).state;
2845
2895
  const stalePins = readDesignFeedback(file, env).pins.filter((pin) => pin.stale);
@@ -2892,7 +2942,7 @@ ${renderArtifactParentRuntime({ ...options, adapterRuntimeUrl: `${base}api/desig
2892
2942
  respond(res, 200, readDesignHandoff(file, { env }));
2893
2943
  } else if (route === "design-implementation-handoff" && req.method === "GET") {
2894
2944
  const design = currentDesign(file);
2895
- const unlock = await acquireStartLock(join4(design.root, ".design/render.lock"));
2945
+ const unlock = await acquireStartLock(join5(design.root, ".design/render.lock"));
2896
2946
  try {
2897
2947
  const root = dirname4(designSpecPath(design.root));
2898
2948
  let proposal = null;
@@ -2938,7 +2988,7 @@ ${renderArtifactParentRuntime({ ...options, adapterRuntimeUrl: `${base}api/desig
2938
2988
  ].includes(input.action))
2939
2989
  throw new Error("Unknown implementation package action.");
2940
2990
  const initial = currentDesign(file);
2941
- const unlock = await acquireStartLock(join4(initial.root, ".design/render.lock"));
2991
+ const unlock = await acquireStartLock(join5(initial.root, ".design/render.lock"));
2942
2992
  try {
2943
2993
  const design = currentDesign(file);
2944
2994
  const root = dirname4(designSpecPath(design.root));
@@ -3103,7 +3153,7 @@ ${renderArtifactParentRuntime({ ...options, adapterRuntimeUrl: `${base}api/desig
3103
3153
  else if (action === "recovery")
3104
3154
  result = await exportDesignShareRecovery(file, {
3105
3155
  ...options,
3106
- output: join4(
3156
+ output: join5(
3107
3157
  env.HOME ?? process.env.HOME,
3108
3158
  "Downloads",
3109
3159
  `openplanr-design-recovery-${Date.now()}.json`
@@ -3112,7 +3162,7 @@ ${renderArtifactParentRuntime({ ...options, adapterRuntimeUrl: `${base}api/desig
3112
3162
  else result = await manageDesignShare(file, action, options);
3113
3163
  respond(res, 200, result);
3114
3164
  } else if (route === "design-status" && req.method === "GET") {
3115
- const ready = readJson(join4(current.root, ".design/browser-ready.json"), null);
3165
+ const ready = readJson(join5(current.root, ".design/browser-ready.json"), null);
3116
3166
  respond(res, 200, {
3117
3167
  ok: true,
3118
3168
  documentId: current.document.id,
@@ -3123,7 +3173,7 @@ ${renderArtifactParentRuntime({ ...options, adapterRuntimeUrl: `${base}api/desig
3123
3173
  });
3124
3174
  } else if (route === "design-state" && req.method === "GET") {
3125
3175
  respond(res, 200, {
3126
- ...readJson(join4(current.root, ".design/studio-state.json"), {
3176
+ ...readJson(join5(current.root, ".design/studio-state.json"), {
3127
3177
  state: {},
3128
3178
  stateVersion: 0
3129
3179
  }),
@@ -3136,7 +3186,7 @@ ${renderArtifactParentRuntime({ ...options, adapterRuntimeUrl: `${base}api/desig
3136
3186
  const loadedArtifacts = new Set(Array.isArray(value?.artifacts) ? value.artifacts : []);
3137
3187
  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
3188
  throw new Error("Browser readiness must identify loaded design artboards.");
3139
- atomicJson(join4(current.root, ".design/browser-ready.json"), {
3189
+ atomicJson(join5(current.root, ".design/browser-ready.json"), {
3140
3190
  status: "ready",
3141
3191
  revision: current.revision,
3142
3192
  artifacts: value.artifacts,
@@ -3145,7 +3195,7 @@ ${renderArtifactParentRuntime({ ...options, adapterRuntimeUrl: `${base}api/desig
3145
3195
  });
3146
3196
  respond(res, 200, { ok: true });
3147
3197
  } else if (route === "design-export" && req.method === "GET") {
3148
- const state = readJson(join4(current.root, ".design/studio-state.json"), {
3198
+ const state = readJson(join5(current.root, ".design/studio-state.json"), {
3149
3199
  state: {}
3150
3200
  }).state;
3151
3201
  res.writeHead(200, {
@@ -3179,7 +3229,7 @@ ${renderArtifactParentRuntime({ ...options, adapterRuntimeUrl: `${base}api/desig
3179
3229
  const registered = await fetchImpl(`${origin}/internal/v1/sessions`, {
3180
3230
  method: "POST",
3181
3231
  headers: {
3182
- authorization: `Bearer ${server.controlToken}`,
3232
+ ...artifactReviewControlHeaders(server.controlToken),
3183
3233
  "content-type": "application/json"
3184
3234
  },
3185
3235
  body: JSON.stringify({
@@ -3269,8 +3319,8 @@ async function resolveDesignPins(file, { pinIds, summary, env = process.env }) {
3269
3319
  "One or more requested pins do not exist."
3270
3320
  );
3271
3321
  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"), [
3322
+ const history = readJson(join5(current.root, ".design/review-history.json"), []);
3323
+ atomicJson(join5(current.root, ".design/review-history.json"), [
3274
3324
  ...history,
3275
3325
  {
3276
3326
  revision: current.revision,