openplanr 2.2641.1 → 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 (245) hide show
  1. package/CHANGELOG.md +21 -0
  2. package/README.md +1 -1
  3. package/dist/cli/commands/artifact.js +1 -1
  4. package/dist/cli/commands/artifact.js.map +1 -1
  5. package/dist/cli/commands/github.d.ts.map +1 -1
  6. package/dist/cli/commands/github.js +7 -10
  7. package/dist/cli/commands/github.js.map +1 -1
  8. package/dist/cli/commands/linear.js +1 -1
  9. package/dist/cli/commands/linear.js.map +1 -1
  10. package/dist/cli/commands/report.d.ts.map +1 -1
  11. package/dist/cli/commands/report.js +28 -32
  12. package/dist/cli/commands/report.js.map +1 -1
  13. package/dist/dashboard/.vite/manifest.json +1 -1
  14. package/dist/dashboard/assets/{index-DGyC7RDz.js → index-DI_TKz9J.js} +2 -2
  15. package/dist/dashboard/assets/{index-DGyC7RDz.js.map → index-DI_TKz9J.js.map} +1 -1
  16. package/dist/dashboard/dashboard-manifest.json +8 -8
  17. package/dist/dashboard/index.html +1 -1
  18. package/dist/models/schema.d.ts +0 -4
  19. package/dist/models/schema.d.ts.map +1 -1
  20. package/dist/models/schema.js +0 -2
  21. package/dist/models/schema.js.map +1 -1
  22. package/dist/models/types.d.ts +1 -4
  23. package/dist/models/types.d.ts.map +1 -1
  24. package/dist/services/credentials-service.js +1 -1
  25. package/dist/services/credentials-service.js.map +1 -1
  26. package/dist/services/distribution-service.d.ts +1 -4
  27. package/dist/services/distribution-service.d.ts.map +1 -1
  28. package/dist/services/distribution-service.js +1 -60
  29. package/dist/services/distribution-service.js.map +1 -1
  30. package/dist/services/github-service.d.ts +7 -4
  31. package/dist/services/github-service.d.ts.map +1 -1
  32. package/dist/services/github-service.js +16 -15
  33. package/dist/services/github-service.js.map +1 -1
  34. package/dist/services/linear-push-service.d.ts +3 -4
  35. package/dist/services/linear-push-service.d.ts.map +1 -1
  36. package/dist/services/linear-push-service.js +5 -6
  37. package/dist/services/linear-push-service.js.map +1 -1
  38. package/dist/services/spec-service.d.ts.map +1 -1
  39. package/dist/services/spec-service.js +34 -69
  40. package/dist/services/spec-service.js.map +1 -1
  41. package/dist/templates/rules/shared/capability-map.md.hbs +1 -1
  42. package/docs/CLI.md +10 -14
  43. package/lib/host-packages/adapter-registry.json +5 -5
  44. package/lib/host-packages/capability-map.json +8 -8
  45. package/lib/host-packages/claude/.claude-plugin/marketplace.json +2 -2
  46. package/lib/host-packages/claude/openplanr/.claude-plugin/plugin.json +1 -1
  47. package/lib/host-packages/claude/openplanr/.openplanr-content.json +80 -64
  48. package/lib/host-packages/claude/openplanr/README.md +8 -12
  49. package/lib/host-packages/claude/openplanr/agents/planr-backend.md +49 -55
  50. package/lib/host-packages/claude/openplanr/agents/planr-database.md +56 -92
  51. package/lib/host-packages/claude/openplanr/agents/planr-designer.md +35 -51
  52. package/lib/host-packages/claude/openplanr/agents/planr-devops.md +37 -51
  53. package/lib/host-packages/claude/openplanr/agents/planr-documentation.md +29 -52
  54. package/lib/host-packages/claude/openplanr/agents/planr-entity-scaffold.md +24 -23
  55. package/lib/host-packages/claude/openplanr/agents/planr-frontend.md +46 -58
  56. package/lib/host-packages/claude/openplanr/agents/planr-qa.md +4 -2
  57. package/lib/host-packages/claude/openplanr/agents/planr-specification.md +54 -51
  58. package/lib/host-packages/claude/openplanr/references/agents/shared/modes/default/backend.md +21 -65
  59. package/lib/host-packages/claude/openplanr/references/agents/shared/modes/default/designer.md +5 -6
  60. package/lib/host-packages/claude/openplanr/references/agents/shared/modes/default/devops.md +2 -3
  61. package/lib/host-packages/claude/openplanr/references/agents/shared/modes/default/doc-gen.md +3 -4
  62. package/lib/host-packages/claude/openplanr/references/agents/shared/modes/default/frontend.md +19 -64
  63. package/lib/host-packages/claude/openplanr/references/agents/shared/modes/default/specification.md +10 -12
  64. package/lib/host-packages/claude/openplanr/references/agents/shared/modes/spec-driven/backend.md +19 -62
  65. package/lib/host-packages/claude/openplanr/references/agents/shared/modes/spec-driven/designer.md +3 -4
  66. package/lib/host-packages/claude/openplanr/references/agents/shared/modes/spec-driven/devops.md +2 -3
  67. package/lib/host-packages/claude/openplanr/references/agents/shared/modes/spec-driven/doc-gen.md +2 -3
  68. package/lib/host-packages/claude/openplanr/references/agents/shared/modes/spec-driven/frontend.md +16 -59
  69. package/lib/host-packages/claude/openplanr/references/agents/shared/modes/spec-driven/specification.md +9 -11
  70. package/lib/host-packages/claude/openplanr/references/pipeline/stacks/database/mongodb.md +4 -4
  71. package/lib/host-packages/claude/openplanr/runtime/design/scripts/design-review.mjs +24 -9
  72. package/lib/host-packages/claude/openplanr/runtime/design/scripts/design-share.mjs +3 -3
  73. package/lib/host-packages/claude/openplanr/runtime/design/scripts/runtime/packages/design/package.json +3 -3
  74. package/lib/host-packages/claude/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/share.js +1 -1
  75. package/lib/host-packages/claude/openplanr/runtime/design/scripts/runtime/packages/protocol/package.json +1 -1
  76. package/lib/host-packages/claude/openplanr/runtime/plan/scripts/design.mjs +1 -1
  77. package/lib/host-packages/claude/openplanr/runtime/plan/scripts/runtime/packages/protocol/package.json +1 -1
  78. package/lib/host-packages/claude/openplanr/skills/artifact/SKILL.md +2 -2
  79. package/lib/host-packages/claude/openplanr/skills/artifact/references/diagram-sharing.md +1 -1
  80. package/lib/host-packages/claude/openplanr/skills/ceo-review/SKILL.md +0 -1
  81. package/lib/host-packages/claude/openplanr/skills/ceo-review/references/operate-advisor-contract.md +25 -4
  82. package/lib/host-packages/claude/openplanr/skills/chair-review/SKILL.md +6 -2
  83. package/lib/host-packages/claude/openplanr/skills/challenger-review/SKILL.md +6 -2
  84. package/lib/host-packages/claude/openplanr/skills/cmo-review/SKILL.md +0 -1
  85. package/lib/host-packages/claude/openplanr/skills/cmo-review/references/operate-advisor-contract.md +25 -4
  86. package/lib/host-packages/claude/openplanr/skills/coo-review/SKILL.md +0 -1
  87. package/lib/host-packages/claude/openplanr/skills/coo-review/references/operate-advisor-contract.md +25 -4
  88. package/lib/host-packages/claude/openplanr/skills/cpo-review/SKILL.md +0 -1
  89. package/lib/host-packages/claude/openplanr/skills/cpo-review/references/operate-advisor-contract.md +25 -4
  90. package/lib/host-packages/claude/openplanr/skills/cto-review/SKILL.md +0 -1
  91. package/lib/host-packages/claude/openplanr/skills/cto-review/references/operate-advisor-contract.md +25 -4
  92. package/lib/host-packages/claude/openplanr/skills/delegate/SKILL.md +7 -0
  93. package/lib/host-packages/claude/openplanr/skills/delegate/references/capsule-contract.md +16 -1
  94. package/lib/host-packages/claude/openplanr/skills/delegate/references/operator-guide.md +7 -5
  95. package/lib/host-packages/claude/openplanr/skills/delegate/scripts/adapters/claude.mjs +11 -4
  96. package/lib/host-packages/claude/openplanr/skills/delegate/scripts/adapters/native.mjs +1 -1
  97. package/lib/host-packages/claude/openplanr/skills/delegate/scripts/backend-diagnostics.mjs +14 -48
  98. package/lib/host-packages/claude/openplanr/skills/delegate/scripts/context.mjs +84 -22
  99. package/lib/host-packages/claude/openplanr/skills/delegate/scripts/credentials.mjs +167 -0
  100. package/lib/host-packages/claude/openplanr/skills/delegate/scripts/presentation.mjs +3 -2
  101. package/lib/host-packages/claude/openplanr/skills/delegate/scripts/run-contract.mjs +5 -7
  102. package/lib/host-packages/claude/openplanr/skills/delegate/scripts/run-preparation.mjs +2 -0
  103. package/lib/host-packages/claude/openplanr/skills/delegate/scripts/run-record.mjs +2 -3
  104. package/lib/host-packages/claude/openplanr/skills/diagram/references/diagram-sharing.md +1 -1
  105. package/lib/host-packages/claude/openplanr/skills/operate/SKILL.md +5 -3
  106. package/lib/host-packages/claude/openplanr/skills/plan/SKILL.md +8 -2
  107. package/lib/host-packages/claude/openplanr/skills/sprint/SKILL.md +5 -4
  108. package/lib/host-packages/claude/openplanr/skills/sprint/references/tracker-connections.md +70 -0
  109. package/lib/host-packages/claude/openplanr/skills/status/SKILL.md +4 -3
  110. package/lib/host-packages/claude/openplanr/skills/status/references/tracker-connections.md +70 -0
  111. package/lib/host-packages/claude/openplanr/skills/sync/SKILL.md +11 -20
  112. package/lib/host-packages/claude/openplanr/skills/sync/references/tracker-connections.md +70 -0
  113. package/lib/host-packages/claude/openplanr/skills/sync/scripts/sync.mjs +2 -2
  114. package/lib/host-packages/cursor/openplanr/.openplanr-content.json +52 -36
  115. package/lib/host-packages/cursor/openplanr/manifest.json +1 -1
  116. package/lib/host-packages/cursor/openplanr/rules/planr-artifact/references/diagram-sharing.md +1 -1
  117. package/lib/host-packages/cursor/openplanr/rules/planr-artifact.mdc +2 -2
  118. package/lib/host-packages/cursor/openplanr/rules/planr-ceo-review/references/operate-advisor-contract.md +25 -4
  119. package/lib/host-packages/cursor/openplanr/rules/planr-chair-review.mdc +6 -1
  120. package/lib/host-packages/cursor/openplanr/rules/planr-challenger-review.mdc +6 -1
  121. package/lib/host-packages/cursor/openplanr/rules/planr-cmo-review/references/operate-advisor-contract.md +25 -4
  122. package/lib/host-packages/cursor/openplanr/rules/planr-coo-review/references/operate-advisor-contract.md +25 -4
  123. package/lib/host-packages/cursor/openplanr/rules/planr-cpo-review/references/operate-advisor-contract.md +25 -4
  124. package/lib/host-packages/cursor/openplanr/rules/planr-cto-review/references/operate-advisor-contract.md +25 -4
  125. package/lib/host-packages/cursor/openplanr/rules/planr-delegate/references/capsule-contract.md +16 -1
  126. package/lib/host-packages/cursor/openplanr/rules/planr-delegate/references/operator-guide.md +7 -5
  127. package/lib/host-packages/cursor/openplanr/rules/planr-delegate/scripts/adapters/claude.mjs +11 -4
  128. package/lib/host-packages/cursor/openplanr/rules/planr-delegate/scripts/adapters/native.mjs +1 -1
  129. package/lib/host-packages/cursor/openplanr/rules/planr-delegate/scripts/backend-diagnostics.mjs +14 -48
  130. package/lib/host-packages/cursor/openplanr/rules/planr-delegate/scripts/context.mjs +84 -22
  131. package/lib/host-packages/cursor/openplanr/rules/planr-delegate/scripts/credentials.mjs +167 -0
  132. package/lib/host-packages/cursor/openplanr/rules/planr-delegate/scripts/presentation.mjs +3 -2
  133. package/lib/host-packages/cursor/openplanr/rules/planr-delegate/scripts/run-contract.mjs +5 -7
  134. package/lib/host-packages/cursor/openplanr/rules/planr-delegate/scripts/run-preparation.mjs +2 -0
  135. package/lib/host-packages/cursor/openplanr/rules/planr-delegate/scripts/run-record.mjs +2 -3
  136. package/lib/host-packages/cursor/openplanr/rules/planr-delegate.mdc +7 -0
  137. package/lib/host-packages/cursor/openplanr/rules/planr-diagram/references/diagram-sharing.md +1 -1
  138. package/lib/host-packages/cursor/openplanr/rules/planr-operate.mdc +5 -3
  139. package/lib/host-packages/cursor/openplanr/rules/planr-plan.mdc +8 -2
  140. package/lib/host-packages/cursor/openplanr/rules/planr-sprint/references/tracker-connections.md +70 -0
  141. package/lib/host-packages/cursor/openplanr/rules/planr-sprint.mdc +5 -4
  142. package/lib/host-packages/cursor/openplanr/rules/planr-status/references/tracker-connections.md +70 -0
  143. package/lib/host-packages/cursor/openplanr/rules/planr-status.mdc +4 -3
  144. package/lib/host-packages/cursor/openplanr/rules/planr-sync/references/tracker-connections.md +70 -0
  145. package/lib/host-packages/cursor/openplanr/rules/planr-sync/scripts/sync.mjs +2 -2
  146. package/lib/host-packages/cursor/openplanr/rules/planr-sync.mdc +11 -20
  147. package/lib/host-packages/cursor/openplanr/runtime/design/scripts/design-review.mjs +24 -9
  148. package/lib/host-packages/cursor/openplanr/runtime/design/scripts/design-share.mjs +3 -3
  149. package/lib/host-packages/cursor/openplanr/runtime/design/scripts/runtime/packages/design/package.json +3 -3
  150. package/lib/host-packages/cursor/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/share.js +1 -1
  151. package/lib/host-packages/cursor/openplanr/runtime/design/scripts/runtime/packages/protocol/package.json +1 -1
  152. package/lib/host-packages/cursor/openplanr/runtime/plan/scripts/design.mjs +1 -1
  153. package/lib/host-packages/cursor/openplanr/runtime/plan/scripts/runtime/packages/protocol/package.json +1 -1
  154. package/lib/host-packages/openai/.claude-plugin/marketplace.json +2 -2
  155. package/lib/host-packages/openai/openplanr/.codex-plugin/plugin.json +1 -1
  156. package/lib/host-packages/openai/openplanr/.openplanr-content.json +61 -45
  157. package/lib/host-packages/openai/openplanr/runtime/design/scripts/design-review.mjs +24 -9
  158. package/lib/host-packages/openai/openplanr/runtime/design/scripts/design-share.mjs +3 -3
  159. package/lib/host-packages/openai/openplanr/runtime/design/scripts/runtime/packages/design/package.json +3 -3
  160. package/lib/host-packages/openai/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/share.js +1 -1
  161. package/lib/host-packages/openai/openplanr/runtime/design/scripts/runtime/packages/protocol/package.json +1 -1
  162. package/lib/host-packages/openai/openplanr/runtime/plan/scripts/design.mjs +1 -1
  163. package/lib/host-packages/openai/openplanr/runtime/plan/scripts/runtime/packages/protocol/package.json +1 -1
  164. package/lib/host-packages/openai/openplanr/skills/artifact/SKILL.md +2 -2
  165. package/lib/host-packages/openai/openplanr/skills/artifact/references/diagram-sharing.md +1 -1
  166. package/lib/host-packages/openai/openplanr/skills/ceo-review/SKILL.md +0 -1
  167. package/lib/host-packages/openai/openplanr/skills/ceo-review/references/operate-advisor-contract.md +25 -4
  168. package/lib/host-packages/openai/openplanr/skills/chair-review/SKILL.md +6 -2
  169. package/lib/host-packages/openai/openplanr/skills/challenger-review/SKILL.md +6 -2
  170. package/lib/host-packages/openai/openplanr/skills/cmo-review/SKILL.md +0 -1
  171. package/lib/host-packages/openai/openplanr/skills/cmo-review/references/operate-advisor-contract.md +25 -4
  172. package/lib/host-packages/openai/openplanr/skills/coo-review/SKILL.md +0 -1
  173. package/lib/host-packages/openai/openplanr/skills/coo-review/references/operate-advisor-contract.md +25 -4
  174. package/lib/host-packages/openai/openplanr/skills/cpo-review/SKILL.md +0 -1
  175. package/lib/host-packages/openai/openplanr/skills/cpo-review/references/operate-advisor-contract.md +25 -4
  176. package/lib/host-packages/openai/openplanr/skills/cto-review/SKILL.md +0 -1
  177. package/lib/host-packages/openai/openplanr/skills/cto-review/references/operate-advisor-contract.md +25 -4
  178. package/lib/host-packages/openai/openplanr/skills/delegate/SKILL.md +7 -0
  179. package/lib/host-packages/openai/openplanr/skills/delegate/openplanr.skill.json +11 -0
  180. package/lib/host-packages/openai/openplanr/skills/delegate/references/capsule-contract.md +16 -1
  181. package/lib/host-packages/openai/openplanr/skills/delegate/references/operator-guide.md +7 -5
  182. package/lib/host-packages/openai/openplanr/skills/delegate/scripts/adapters/claude.mjs +11 -4
  183. package/lib/host-packages/openai/openplanr/skills/delegate/scripts/adapters/native.mjs +1 -1
  184. package/lib/host-packages/openai/openplanr/skills/delegate/scripts/backend-diagnostics.mjs +14 -48
  185. package/lib/host-packages/openai/openplanr/skills/delegate/scripts/context.mjs +84 -22
  186. package/lib/host-packages/openai/openplanr/skills/delegate/scripts/credentials.mjs +167 -0
  187. package/lib/host-packages/openai/openplanr/skills/delegate/scripts/presentation.mjs +3 -2
  188. package/lib/host-packages/openai/openplanr/skills/delegate/scripts/run-contract.mjs +5 -7
  189. package/lib/host-packages/openai/openplanr/skills/delegate/scripts/run-preparation.mjs +2 -0
  190. package/lib/host-packages/openai/openplanr/skills/delegate/scripts/run-record.mjs +2 -3
  191. package/lib/host-packages/openai/openplanr/skills/diagram/references/diagram-sharing.md +1 -1
  192. package/lib/host-packages/openai/openplanr/skills/operate/SKILL.md +5 -3
  193. package/lib/host-packages/openai/openplanr/skills/plan/SKILL.md +8 -2
  194. package/lib/host-packages/openai/openplanr/skills/sprint/SKILL.md +5 -4
  195. package/lib/host-packages/openai/openplanr/skills/sprint/openplanr.skill.json +11 -0
  196. package/lib/host-packages/openai/openplanr/skills/sprint/references/tracker-connections.md +70 -0
  197. package/lib/host-packages/openai/openplanr/skills/status/SKILL.md +4 -3
  198. package/lib/host-packages/openai/openplanr/skills/status/openplanr.skill.json +11 -0
  199. package/lib/host-packages/openai/openplanr/skills/status/references/tracker-connections.md +70 -0
  200. package/lib/host-packages/openai/openplanr/skills/sync/SKILL.md +11 -20
  201. package/lib/host-packages/openai/openplanr/skills/sync/openplanr.skill.json +11 -0
  202. package/lib/host-packages/openai/openplanr/skills/sync/references/tracker-connections.md +70 -0
  203. package/lib/host-packages/openai/openplanr/skills/sync/scripts/sync.mjs +2 -2
  204. package/lib/integrations.mjs +2 -2
  205. package/package.json +2 -2
  206. package/dist/services/connectors/adapters/business-metrics.d.ts +0 -5
  207. package/dist/services/connectors/adapters/business-metrics.d.ts.map +0 -1
  208. package/dist/services/connectors/adapters/business-metrics.js +0 -41
  209. package/dist/services/connectors/adapters/business-metrics.js.map +0 -1
  210. package/dist/services/connectors/adapters/deployment-health.d.ts +0 -18
  211. package/dist/services/connectors/adapters/deployment-health.d.ts.map +0 -1
  212. package/dist/services/connectors/adapters/deployment-health.js +0 -67
  213. package/dist/services/connectors/adapters/deployment-health.js.map +0 -1
  214. package/dist/services/connectors/adapters/github.d.ts +0 -5
  215. package/dist/services/connectors/adapters/github.d.ts.map +0 -1
  216. package/dist/services/connectors/adapters/github.js +0 -31
  217. package/dist/services/connectors/adapters/github.js.map +0 -1
  218. package/dist/services/connectors/adapters/linear-jira.d.ts +0 -5
  219. package/dist/services/connectors/adapters/linear-jira.d.ts.map +0 -1
  220. package/dist/services/connectors/adapters/linear-jira.js +0 -26
  221. package/dist/services/connectors/adapters/linear-jira.js.map +0 -1
  222. package/dist/services/connectors/adapters/posthog.d.ts +0 -5
  223. package/dist/services/connectors/adapters/posthog.d.ts.map +0 -1
  224. package/dist/services/connectors/adapters/posthog.js +0 -31
  225. package/dist/services/connectors/adapters/posthog.js.map +0 -1
  226. package/dist/services/connectors/adapters/sentry.d.ts +0 -5
  227. package/dist/services/connectors/adapters/sentry.d.ts.map +0 -1
  228. package/dist/services/connectors/adapters/sentry.js +0 -31
  229. package/dist/services/connectors/adapters/sentry.js.map +0 -1
  230. package/dist/services/connectors/checkpoint-custody.d.ts +0 -45
  231. package/dist/services/connectors/checkpoint-custody.d.ts.map +0 -1
  232. package/dist/services/connectors/checkpoint-custody.js +0 -499
  233. package/dist/services/connectors/checkpoint-custody.js.map +0 -1
  234. package/dist/services/connectors/connector-registry.d.ts +0 -144
  235. package/dist/services/connectors/connector-registry.d.ts.map +0 -1
  236. package/dist/services/connectors/connector-registry.js +0 -423
  237. package/dist/services/connectors/connector-registry.js.map +0 -1
  238. package/dist/services/connectors/connector-runtime.d.ts +0 -208
  239. package/dist/services/connectors/connector-runtime.d.ts.map +0 -1
  240. package/dist/services/connectors/connector-runtime.js +0 -1305
  241. package/dist/services/connectors/connector-runtime.js.map +0 -1
  242. package/dist/services/connectors/credential-custody.d.ts +0 -96
  243. package/dist/services/connectors/credential-custody.d.ts.map +0 -1
  244. package/dist/services/connectors/credential-custody.js +0 -390
  245. package/dist/services/connectors/credential-custody.js.map +0 -1
@@ -1,12 +1,11 @@
1
- <!-- ${CLAUDE_PLUGIN_ROOT}/references/agents/shared/modes/spec-driven/backend.md: spec-driven-mode-only content for backend-agent (DEV Tech tasks only). Loaded by agents/backend-agent.md when MODE=spec-driven. -->
1
+ <!-- Spec-driven paths for planr-backend. Loaded when the caller passes MODE=spec-driven and SPEC_DIR. -->
2
2
 
3
- > **Mode:** spec-driven
4
- > **Loaded by:** `agents/backend-agent.md` when the orchestrator passes `MODE=spec-driven` and `SPEC_DIR`.
3
+ > **Mode:** spec-driven (`SPEC_DIR` supplied).
5
4
 
6
5
  ## Path Resolution
7
6
 
8
- The orchestrator (`/ship`) passes the absolute task file path,
9
- `MODE=spec-driven`, and `SPEC_DIR`. Use that exact task path first.
7
+ Ship passes the absolute task file path, `MODE=spec-driven`, and `SPEC_DIR`.
8
+ Use that exact task path first.
10
9
 
11
10
  - Spec directory: `.planr/specs/SPEC-NNN-{slug}/`.
12
11
  - Task: `<SPEC_DIR>/tasks/T-NNN-{slug}.md`.
@@ -25,57 +24,21 @@ directory and use it only when unique. Follow
25
24
  `${CLAUDE_PLUGIN_ROOT}/references/agents/shared/modes/shared/task-context-resolution.md` after resolving
26
25
  the file.
27
26
 
28
- **Step 0.2 entity scaffold** (`output/db/schema.json` → `output/src/`): use **`agents/entity-scaffold-agent.md`** — not this file.
27
+ ## Mode inputs
29
28
 
30
- ---
29
+ - The parent story, its optional Gherkin sidecar, and the enclosing
30
+ specification.
31
+ - `input/tech/stack.md` when present, with every `ActiveStackFiles` entry
32
+ resolved through the installed stack root and the project-local
33
+ `.planr/stacks` overlay.
34
+ - Each declared predecessor's output contract when `dependsOn` is non-empty.
35
+ - `output/db/schema.json` when the project keeps that snapshot and the task
36
+ references persistence; otherwise the repository's migrations or ORM models.
37
+ Validate table and column names before implementing them.
31
38
 
32
- ## Inputs (Dev Mode — Step 3)
33
-
34
- | Input | Source | Required |
35
- |-------|--------|----------|
36
- | `<SPEC_DIR>/tasks/T-NNN-{slug}.md` (Type=Tech) | Specification Agent | Yes |
37
- | `input/tech/stack.md` | Tech Lead | Yes |
38
- | `output/db/schema.json` | DB Agent | When referencing the DB |
39
- | Existing codebase (read context) | Dev environment | Read-only |
40
-
41
- ---
42
-
43
- ## Outputs (Dev Mode — Step 3)
44
-
45
- All files listed under `### Create` and `### Modify` in the task file (`<SPEC_DIR>/tasks/T-NNN-{slug}.md`).
46
-
47
- ---
48
-
49
- ## Implementation guidance
50
-
51
- ```
52
- 1. Load `<SPEC_DIR>/tasks/T-NNN-{slug}.md` and extract frontmatter,
53
- Create/Modify/Preserve, Objective, Implementation or Technical Spec,
54
- Verification, and Done When. Follow `storyId` to the story, load its optional
55
- Gherkin sidecar when present, then load the enclosing specification.
56
- 2. Load `input/tech/stack.md`. Resolve every `ActiveStackFiles` entry through the
57
- installed stack root and the project-local `.planr/stacks` overlay as
58
- defined by the shared task-context guidance.
59
- 3. Read each declared predecessor's output contract when `dependsOn` is non-empty.
60
- Load `output/db/schema.json` when the task references persistence, and validate
61
- table and column names before implementing them.
62
- 4. Read the listed files and enough connected source to understand established
63
- interfaces and project patterns.
64
- 5. Implement the requested backend behavior completely using established project
65
- patterns. Add meaningful unit and integration coverage where it improves
66
- confidence.
67
- 6. Treat Create/Modify as expected scope. A directly required companion test,
68
- declaration, migration, fixture, generated file, or configuration change is
69
- valid when it serves acceptance criteria, stays within backend ownership, and
70
- remains outside Preserve. Disclose it in the result.
71
- 7. Keep Preserve paths unchanged. If the requested outcome conflicts with one,
72
- find a safe in-scope alternative or report the conflict clearly.
73
- 8. Apply `${CLAUDE_PLUGIN_ROOT}/references/agents/shared/modes/shared/verification-and-recovery-backend.md` for
74
- adaptive verification and recovery.
75
- 9. Return the shared implementation-result format.
76
- ```
77
-
78
- ---
39
+ Apply `${CLAUDE_PLUGIN_ROOT}/references/agents/shared/modes/shared/verification-and-recovery-backend.md`
40
+ for adaptive verification and recovery, and return the shared
41
+ implementation-result format.
79
42
 
80
43
  ## Error Handling (mode-specific paths)
81
44
 
@@ -84,13 +47,7 @@ All files listed under `### Create` and `### Modify` in the task file (`<SPEC_DI
84
47
  | SPEC_DIR or Ship task path missing/ambiguous | Report the selector, searched directory, and candidates; do not guess |
85
48
  | Parent story or spec missing | Continue from the task and source when sufficient; list the missing path under Issues |
86
49
  | Active stack file missing | Report the logical path and both lookup locations; use the installed default when available |
87
- | schema.json missing for DB work | Identify the affected requirement and avoid inventing tables or columns; continue unaffected work |
88
- | DB table or column absent from schema | Report the exact reference and the smallest schema or task correction needed |
50
+ | No schema source for DB work | Identify the affected requirement and avoid inventing tables or columns; continue unaffected work |
51
+ | DB table or column absent from the schema source | Report the exact reference and the smallest schema or task correction needed |
89
52
  | `dependsOn` output unavailable | Name the dependency and required interface; continue independent work and report the blocked portion |
90
53
  | Preserve path changed | Restore it, use another implementation approach, and report a conflict only if no safe approach remains |
91
-
92
- ---
93
-
94
- *Reads: task · spec/story/Gherkin · dependency outputs · stack overlays · schema · source*
95
- *Writes: backend layer files only*
96
- *Runs in parallel with: Frontend Agent (UI task)*
@@ -1,7 +1,6 @@
1
- <!-- ${CLAUDE_PLUGIN_ROOT}/references/agents/shared/modes/spec-driven/designer.md: spec-driven-mode-only content for designer-agent. Loaded by agents/designer-agent.md when MODE=spec-driven. T-002 of SPEC-002. -->
1
+ <!-- Spec-driven paths for planr-designer. Loaded when the caller passes MODE=spec-driven and SPEC_DIR. -->
2
2
 
3
- > **Mode:** spec-driven
4
- > **Loaded by:** `agents/designer-agent.md` when the orchestrator passes `MODE=spec-driven` and `SPEC_DIR`.
3
+ > **Mode:** spec-driven (`SPEC_DIR` supplied).
5
4
 
6
5
  ## Path Resolution
7
6
 
@@ -80,4 +79,4 @@ If all sources are empty: skip silently (do not write design-spec.md, do not err
80
79
 
81
80
  *Reads: `<SPEC_DIR>/design/*.png` · `input/tech/stack.md`*
82
81
  *Writes: `<SPEC_DIR>/design/design-spec.md`*
83
- *Chained to: specification-agent*
82
+ *Read by: planr-specification*
@@ -1,7 +1,6 @@
1
- <!-- ${CLAUDE_PLUGIN_ROOT}/references/agents/shared/modes/spec-driven/devops.md: spec-driven-mode-only content for devops-agent. Loaded by agents/devops-agent.md when MODE=spec-driven. T-002 of SPEC-002. -->
1
+ <!-- Spec-driven context for planr-devops. Loaded when the caller passes MODE=spec-driven and SPEC_DIR. -->
2
2
 
3
- > **Mode:** spec-driven
4
- > **Loaded by:** `agents/devops-agent.md` when the orchestrator passes `MODE=spec-driven` and `SPEC_DIR`.
3
+ > **Mode:** spec-driven (`SPEC_DIR` supplied).
5
4
 
6
5
  ## Context locations
7
6
 
@@ -1,7 +1,6 @@
1
- <!-- ${CLAUDE_PLUGIN_ROOT}/references/agents/shared/modes/spec-driven/doc-gen.md: spec-driven-mode-only content for doc-gen-agent. Loaded by agents/doc-gen-agent.md when MODE=spec-driven. T-002 of SPEC-002. -->
1
+ <!-- Spec-driven context for planr-documentation. Loaded when the caller passes MODE=spec-driven and SPEC_DIR. -->
2
2
 
3
- > **Mode:** spec-driven
4
- > **Loaded by:** `agents/doc-gen-agent.md` when the orchestrator passes `MODE=spec-driven` and `SPEC_DIR`.
3
+ > **Mode:** spec-driven (`SPEC_DIR` supplied).
5
4
 
6
5
  ## Path Resolution
7
6
 
@@ -1,12 +1,11 @@
1
- <!-- ${CLAUDE_PLUGIN_ROOT}/references/agents/shared/modes/spec-driven/frontend.md: spec-driven-mode-only content for frontend-agent. Loaded by agents/frontend-agent.md when MODE=spec-driven. T-002 of SPEC-002. -->
1
+ <!-- Spec-driven paths for planr-frontend. Loaded when the caller passes MODE=spec-driven and SPEC_DIR. -->
2
2
 
3
- > **Mode:** spec-driven
4
- > **Loaded by:** `agents/frontend-agent.md` when the orchestrator passes `MODE=spec-driven` and `SPEC_DIR`.
3
+ > **Mode:** spec-driven (`SPEC_DIR` supplied).
5
4
 
6
5
  ## Path Resolution
7
6
 
8
- The orchestrator (`/ship`) passes the absolute task file path,
9
- `MODE=spec-driven`, and `SPEC_DIR`. Use that exact task path first.
7
+ Ship passes the absolute task file path, `MODE=spec-driven`, and `SPEC_DIR`.
8
+ Use that exact task path first.
10
9
 
11
10
  - Spec directory: `.planr/specs/SPEC-NNN-{slug}/`.
12
11
  - Task: `<SPEC_DIR>/tasks/T-NNN-{slug}.md`.
@@ -26,56 +25,20 @@ directory and use it only when unique. Follow
26
25
  `${CLAUDE_PLUGIN_ROOT}/references/agents/shared/modes/shared/task-context-resolution.md` after resolving
27
26
  the file. Task content is schema-identical in both modes; only paths differ.
28
27
 
29
- ---
28
+ ## Mode inputs
30
29
 
31
- ## Inputs
30
+ - The parent story, its optional Gherkin sidecar, and the enclosing
31
+ specification.
32
+ - `<SPEC_DIR>/design/design-spec.md` when it exists, plus the reusable UI and
33
+ design-system implementation already in the repository.
34
+ - `input/tech/stack.md` when present, with every `ActiveStackFiles` entry
35
+ resolved through the installed stack root and the project-local
36
+ `.planr/stacks` overlay.
37
+ - Each declared predecessor's output contract when `dependsOn` is non-empty.
32
38
 
33
- | Input | Source | Required |
34
- |-------|--------|----------|
35
- | `<SPEC_DIR>/tasks/T-NNN-{slug}.md` (Type=UI) | Specification Agent | Yes |
36
- | `<SPEC_DIR>/design/design-spec.md` | Designer Agent | If exists |
37
- | `input/tech/stack.md` | Tech Lead | Yes |
38
- | Existing codebase files (for context) | Dev environment | Read-only for context |
39
-
40
- ---
41
-
42
- ## Outputs
43
-
44
- All files listed under `### Create` and `### Modify` in the task file (`<SPEC_DIR>/tasks/T-NNN-{slug}.md`).
45
-
46
- ---
47
-
48
- ## Implementation guidance
49
-
50
- ```
51
- 1. Load `<SPEC_DIR>/tasks/T-NNN-{slug}.md` and extract frontmatter,
52
- Create/Modify/Preserve, Objective, Implementation or Technical Spec,
53
- Verification, and Done When. Follow `storyId` to the story, load its optional
54
- Gherkin sidecar when present, then load the enclosing specification.
55
- 2. Load `input/tech/stack.md`. Resolve every `ActiveStackFiles` entry through the
56
- installed stack root and the project-local `.planr/stacks` overlay as
57
- defined by the shared task-context guidance.
58
- 3. Read each declared predecessor's output contract when `dependsOn` is non-empty.
59
- Load `<SPEC_DIR>/design/design-spec.md` when it exists.
60
- 4. Read the listed files, reusable UI, design-system implementation, and enough
61
- connected source to understand established interfaces and patterns.
62
- 5. Implement the requested UI behavior completely using established project and
63
- design-system patterns. Cover material loading, empty, error, success, and
64
- accessibility behavior.
65
- 6. Add meaningful component, interaction, and browser coverage where it improves
66
- confidence.
67
- 7. Treat Create/Modify as expected scope. A directly required companion test,
68
- story, fixture, route registration, generated file, or configuration change is
69
- valid when it serves acceptance criteria, stays within frontend ownership, and
70
- remains outside Preserve. Disclose it in the result.
71
- 8. Keep Preserve paths unchanged. If the requested outcome conflicts with one,
72
- find a safe in-scope alternative or report the conflict clearly.
73
- 9. Apply `${CLAUDE_PLUGIN_ROOT}/references/agents/shared/modes/shared/verification-and-recovery-frontend.md` for
74
- adaptive verification and recovery.
75
- 10. Return the shared implementation-result format.
76
- ```
77
-
78
- ---
39
+ Apply `${CLAUDE_PLUGIN_ROOT}/references/agents/shared/modes/shared/verification-and-recovery-frontend.md`
40
+ for adaptive verification and recovery, and return the shared
41
+ implementation-result format.
79
42
 
80
43
  ## Error Handling (mode-specific paths)
81
44
 
@@ -88,9 +51,3 @@ All files listed under `### Create` and `### Modify` in the task file (`<SPEC_DI
88
51
  | Component library unavailable | Report the import/package and affected UI; use an established project alternative when one exists |
89
52
  | `dependsOn` output unavailable | Name the dependency and required interface; continue independent work and report the blocked portion |
90
53
  | Preserve path changed | Restore it, use another implementation approach, and report a conflict only if no safe approach remains |
91
-
92
- ---
93
-
94
- *Reads: task · spec/story/Gherkin · dependency outputs · stack overlays · design · source*
95
- *Writes: UI layer files only*
96
- *Runs in parallel with: Backend Agent (Tech task)*
@@ -1,7 +1,6 @@
1
- <!-- ${CLAUDE_PLUGIN_ROOT}/references/agents/shared/modes/spec-driven/specification.md: spec-driven-mode-only content for specification-agent. Loaded by agents/specification-agent.md when MODE=spec-driven. T-002 of SPEC-002. -->
1
+ <!-- Spec-driven paths for planr-specification. Loaded when the caller passes MODE=spec-driven and SPEC_DIR. -->
2
2
 
3
- > **Mode:** spec-driven
4
- > **Loaded by:** `agents/specification-agent.md` when the orchestrator passes `MODE=spec-driven` and `SPEC_DIR`.
3
+ > **Mode:** spec-driven (`SPEC_DIR` supplied).
5
4
 
6
5
  ## Path Resolution
7
6
 
@@ -69,14 +68,13 @@ The flat `tasks/` directory is intentional — `storyId` frontmatter on each tas
69
68
  5. Decompose the source into independently valuable User Stories and write each
70
69
  story to `<SPEC_DIR>/stories/US-NNN-{slug}.md`. Use `specId: "SPEC-NNN"` and
71
70
  allocate story IDs from the project-global sequence.
72
- 6. Apply R2 to each story while assigning the next task IDs under the flat
73
- `<SPEC_DIR>/tasks/` directory:
74
- a. `has_design = true`: write one `type: "UI"` /
75
- `agent: "frontend-agent"` task and one `type: "Tech"` /
76
- `agent: "backend-agent"` task;
77
- b. `has_design = false`: write one `type: "Tech"` /
78
- `agent: "backend-agent"` task;
79
- c. never write a third task for the story.
71
+ 6. Apply R2 to each story (coherent, independently verifiable tasks split by
72
+ ownership) while assigning the next task IDs under the flat
73
+ `<SPEC_DIR>/tasks/` directory: UI work is a `type: "UI"` /
74
+ `agent: "frontend-agent"` task and server or data work is a `type: "Tech"` /
75
+ `agent: "backend-agent"` task. Most stories get one Tech task, plus one UI
76
+ task when `has_design = true`; add a task only for a real output dependency,
77
+ a distinct verification surface, or reviewable size.
80
78
  7. Populate every task with its required schema fields, `storyId`, mode parent
81
79
  `specId`, 1–3 sentence `rationale`, concrete Create/Modify paths,
82
80
  verification, and `preserve` block maps with exact `repositoryKey` and `path`
@@ -36,12 +36,12 @@ DB_HOST: "${MONGO_HOST}" # e.g. cluster0.mongodb.net or localhost
36
36
  DB_PORT: "${MONGO_PORT}" # 27017 default
37
37
  DB_NAME: "${MONGO_DB}"
38
38
  DB_USER: "${MONGO_USER}"
39
- DB_PASSWORD: "${MONGO_PASSWORD}"
40
-
41
- # Connection string assembled by the application:
42
- # mongodb+srv://USER:PASS@HOST/DB?retryWrites=true&w=majority
43
39
  ```
44
40
 
41
+ The application reads its full connection string from its own runtime environment
42
+ (`DATABASE_URL`), as the Prisma variant below does. Generated code never assembles,
43
+ logs or commits credentials.
44
+
45
45
  ---
46
46
 
47
47
  ## Naming Conventions
@@ -424,8 +424,12 @@ import { dirname, isAbsolute, join, resolve } from "node:path";
424
424
  import { fileURLToPath } from "node:url";
425
425
  var here = dirname(fileURLToPath(new URL("./runtime/packages/artifact/lib/artifact/review-server.mjs", import.meta.url).href));
426
426
  var STAGE_RUNTIME_PATH = join(here, "..", "..", "templates", "artifact-review-stage.js");
427
- var ARTIFACT_REVIEW_SERVER_VERSION = 2;
427
+ var ARTIFACT_REVIEW_SERVER_VERSION = 3;
428
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]);
429
433
  var CONTROL_WINDOW_BYTES = 64 * 1024 * 1024;
430
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;
431
435
  var ARTIFACT_REVIEW_MAX_STATE_BYTES2 = ARTIFACT_REVIEW_MAX_STATE_BYTES;
@@ -481,6 +485,12 @@ var PERMISSIONS_POLICY = [
481
485
  function artifactError(code, message, fix = "", details) {
482
486
  return new PipelineError(code, message, fix, details);
483
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
+ }
484
494
  function reviewStateDir(env = process.env) {
485
495
  return join(planrHome(env), "artifact-daemon");
486
496
  }
@@ -563,9 +573,9 @@ function parseRequestPath(rawUrl) {
563
573
  });
564
574
  return { segments, trailingSlash };
565
575
  }
566
- function bearerToken(req) {
567
- const value = req.headers?.authorization;
568
- 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 : "";
569
579
  }
570
580
  function cloneAndValidateEnvelope(envelope) {
571
581
  let cloned;
@@ -875,7 +885,7 @@ function createArtifactReviewServer({
875
885
  return;
876
886
  }
877
887
  if (internal) {
878
- if (!timingSafeTokenEqual(bearerToken(req), controlToken)) {
888
+ if (!timingSafeTokenEqual(presentedControlToken(req), controlToken)) {
879
889
  sendJson(res, 403, { ok: false, error: "forbidden" });
880
890
  return;
881
891
  }
@@ -1449,7 +1459,7 @@ function createArtifactReviewServer({
1449
1459
  return controller;
1450
1460
  }
1451
1461
  function validState(value, requestedPort, { allowLegacy = false } = {}) {
1452
- 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 });
1453
1463
  }
1454
1464
  function readReviewServerState(path) {
1455
1465
  try {
@@ -1473,7 +1483,7 @@ async function controlRequest(descriptor, path, { method, body, fetchImpl } = {}
1473
1483
  const response = await fetchImpl(`http://${LOOPBACK_HOST}:${descriptor.state.port}${path}`, {
1474
1484
  method,
1475
1485
  headers: {
1476
- authorization: `Bearer ${descriptor.state.controlToken}`,
1486
+ ...stateControlHeaders(descriptor.state),
1477
1487
  ...body === void 0 ? {} : { "content-type": "application/json" }
1478
1488
  },
1479
1489
  ...body === void 0 ? {} : { body: JSON.stringify(body) },
@@ -2852,7 +2862,12 @@ async function startDesignReviewUnlocked(file, {
2852
2862
  server = createArtifactReviewServer({
2853
2863
  env,
2854
2864
  serverMetadata: { kind: "design", projectRoot: current.root },
2855
- 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
+ }),
2856
2871
  async refreshSession(session) {
2857
2872
  current = currentDesign(file);
2858
2873
  if (session.designRevision === current.revision) return;
@@ -3214,7 +3229,7 @@ ${renderArtifactParentRuntime({ ...options, adapterRuntimeUrl: `${base}api/desig
3214
3229
  const registered = await fetchImpl(`${origin}/internal/v1/sessions`, {
3215
3230
  method: "POST",
3216
3231
  headers: {
3217
- authorization: `Bearer ${server.controlToken}`,
3232
+ ...artifactReviewControlHeaders(server.controlToken),
3218
3233
  "content-type": "application/json"
3219
3234
  },
3220
3235
  body: JSON.stringify({
@@ -92,7 +92,7 @@ ${current.document.id}`);
92
92
  const within = relative(project, root);
93
93
  if ((!allowMissing || existsSync(path)) && (within === "" || !within.startsWith(`..${process.platform === "win32" ? "\\" : "/"}`) && within !== ".." && !isAbsolute(within)))
94
94
  throw new Error(
95
- "Design owner credentials must be stored outside the project. Set PLANR_HOME to a private user-level directory."
95
+ "Design owner keys must be stored outside the project. Set PLANR_HOME to a private user-level directory."
96
96
  );
97
97
  const legacyPath = !options.custodyRoot && !configuredPlanrHome(env) ? join(realpathSync(env.HOME || homedir()), ".openplanr", "design-shares", `${key}.json`) : null;
98
98
  return { root, path, current, legacyPath };
@@ -1785,10 +1785,10 @@ async function importDesignShareRecovery(file, { input, ...options } = {}) {
1785
1785
  throw new Error("Recovery belongs to a different design.");
1786
1786
  if (record && (record.custody.id !== custody.id || JSON.stringify(record.custody.ownerPublicKey) !== JSON.stringify(custody.ownerPublicKey)))
1787
1787
  throw new Error(
1788
- "This design already has different owner credentials. Recovery will not overwrite them."
1788
+ "This design already has different owner keys. Recovery will not overwrite them."
1789
1789
  );
1790
1790
  if (record && record.custody.version > custody.version)
1791
- throw new Error("This recovery file is older than the locally saved owner credentials.");
1791
+ throw new Error("This recovery file is older than the locally saved owner keys.");
1792
1792
  if (!custody.pendingCreate && !recovered.deleted && !recovered.revoked) {
1793
1793
  await getWorkspace(custody, { fetchImpl: options.fetchImpl });
1794
1794
  const bundle = await decryptWorkspaceRevision(custody, custody.currentRevision, {
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@openplanr/design",
3
- "version": "0.4.4",
3
+ "version": "0.4.5",
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.4",
50
- "@openplanr/protocol": "0.10.2"
49
+ "@openplanr/artifact": "0.6.5",
50
+ "@openplanr/protocol": "0.10.3"
51
51
  },
52
52
  "scripts": {
53
53
  "test": "node --test --test-concurrency=2 tests/*.test.mjs",
@@ -1,4 +1,4 @@
1
- /* Trusted local adapter. Owner credentials never enter this runtime. */
1
+ /* Trusted local adapter. Owner keys never enter this runtime. */
2
2
  (() => {
3
3
  'use strict';
4
4
  const options = globalThis.__OPENPLANR_DESIGN_STUDIO_OPTIONS__ || {};
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@openplanr/protocol",
3
- "version": "0.10.2",
3
+ "version": "0.10.3",
4
4
  "type": "module",
5
5
  "description": "Canonical OpenPlanr schemas, registries, typed errors, and portable contract validation",
6
6
  "license": "MIT",
@@ -2551,7 +2551,7 @@ ${current.document.id}`);
2551
2551
  const within = relative3(project, root);
2552
2552
  if ((!allowMissing || existsSync4(path)) && (within === "" || !within.startsWith(`..${process.platform === "win32" ? "\\" : "/"}`) && within !== ".." && !isAbsolute3(within)))
2553
2553
  throw new Error(
2554
- "Design owner credentials must be stored outside the project. Set PLANR_HOME to a private user-level directory."
2554
+ "Design owner keys must be stored outside the project. Set PLANR_HOME to a private user-level directory."
2555
2555
  );
2556
2556
  const legacyPath = !options.custodyRoot && !configuredPlanrHome(env) ? join7(realpathSync4(env.HOME || homedir3()), ".openplanr", "design-shares", `${key}.json`) : null;
2557
2557
  return { root, path, current, legacyPath };
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@openplanr/protocol",
3
- "version": "0.10.2",
3
+ "version": "0.10.3",
4
4
  "type": "module",
5
5
  "description": "Canonical OpenPlanr schemas, registries, typed errors, and portable contract validation",
6
6
  "license": "MIT",
@@ -30,7 +30,7 @@ relaunch the active coding agent from inside this skill.
30
30
  preserve existing guidance and never invent requirements. Render and inspect
31
31
  the updated context before sharing. For a design document this creates a permanent encrypted
32
32
  design review with a stable URL and a separately entered generated access
33
- token. Owner credentials save privately outside the project; copy the reviewer
33
+ token. Owner keys save privately outside the project; copy the reviewer
34
34
  token through the studio's Share dialog, never put it in a URL or ordinary
35
35
  command output. Publish an explicitly requested update with
36
36
  `openplanr artifact publish <design-document.json>`; synchronize reviewer feedback
@@ -67,7 +67,7 @@ separate permissions and storage from encrypted token shares.
67
67
 
68
68
  Lead with what was opened, shared, imported or exported and the confirmed revision
69
69
  or session. Link the actual review URL or exported file; never print capability
70
- tokens or private owner credentials. Distinguish successful service operations
70
+ tokens or private owner keys. Distinguish successful service operations
71
71
  from preparation and browser verification from validation alone. For partial or
72
72
  blocked work, name the remaining step and exact retry or recovery action, retaining
73
73
  the useful local result. Keep detailed diagnostics in their existing records;
@@ -13,7 +13,7 @@ review. Preview the exact diagram title, source revision, elements, connections,
13
13
  destination and retention before creating it. Use `--yes` only when the user has
14
14
  already authorized that publication. The stable URL and generated access token
15
15
  are separate; copy the token through the local studio's **Share diagram** dialog,
16
- never into a URL, prompt, ordinary output or repository file. Owner credentials
16
+ never into a URL, prompt, ordinary output or repository file. Owner keys
17
17
  are saved privately outside the project. The review remains available until the
18
18
  owner revokes or deletes it and works while the local studio is stopped.
19
19
 
@@ -2,7 +2,6 @@
2
2
  name: ceo-review
3
3
  description: "Produce a grounded strategy and finance review for an Operate cycle. Use when direction, runway, margin, investment, or cost of delay needs a CEO lens."
4
4
  license: MIT
5
- allowed-tools: "Read, Grep, Glob, Edit(./.planr/operate/**)"
6
5
  ---
7
6
 
8
7
  # OpenPlanr CEO Review
@@ -1,8 +1,8 @@
1
1
  # Shared Operate advisor contract
2
2
 
3
- This contract supplies the common context method and output shape for the five executive advisor
4
- skills. The invoking skill supplies the lens, review questions, useful sources, and decision
5
- standard. Follow both.
3
+ This contract supplies the common context method and output shape for the executive advisor
4
+ skills (CEO, CTO, CPO, CMO, and COO). The invoking skill supplies the lens, review questions,
5
+ useful sources, and decision standard. Follow both.
6
6
 
7
7
  ## Outcome
8
8
 
@@ -21,7 +21,28 @@ not the whole context boundary. Inspect relevant original repository and Git sou
21
21
  drawing conclusions. If an input is unavailable, report the exact problem and continue when the
22
22
  remaining context still supports a useful note.
23
23
 
24
- Write the review only to `<output-path>`.
24
+ Write the review only to `<output-path>`. Writes follow the host's normal permission rules; this
25
+ skill pre-approves nothing.
26
+
27
+ ### Running without `planr-operate`
28
+
29
+ When no `<output-path>` was supplied, this lens creates the cycle itself, in the layout
30
+ `planr-operate` uses, under the repository root:
31
+
32
+ ```text
33
+ .planr/operate/<YYYY-MM-DD>-<subject-slug>/
34
+ cycle.md the request wording, the effective scope, and a one-lens roster
35
+ brief.md compact orientation for this lens only, including what was searched for and not found
36
+ <lens>.md this note: ceo.md, cto.md, cpo.md, cmo.md, or coo.md
37
+ board-report.md an unsynthesized lens summary
38
+ ```
39
+
40
+ Take the subject, window, and requested decision from the request. Use the first unused directory
41
+ name; append `-02`, `-03`, and so on when the base name exists. In `board-report.md`, use the
42
+ `planr-operate` report sections, mark this lens `reported` and every other lens `omitted by scope`
43
+ under Review coverage, and write `No decision-ready proposal was established.` and
44
+ `No proposed actions.` unless this note states a directly supported proposal. Write nothing outside
45
+ that cycle directory. The dashboard lists a cycle only when `board-report.md` exists.
25
46
 
26
47
  ## Grounding
27
48
 
@@ -2,7 +2,6 @@
2
2
  name: chair-review
3
3
  description: "Synthesize an Operate cycle into a prioritized decision queue and action plan. Use after specialist reviews when leadership needs one coherent brief."
4
4
  license: MIT
5
- allowed-tools: "Read, Grep, Glob, Edit(./.planr/operate/**)"
6
5
  ---
7
6
 
8
7
  # OpenPlanr Chair Review
@@ -18,7 +17,12 @@ and its decision impact; continue when the remaining notes still support useful
18
17
  selected roster from the scope or brief and label an intentionally unselected lens `omitted by
19
18
  scope`; do not turn that omission into an issue or decision-changing gap.
20
19
 
21
- Write only `<output-path>`.
20
+ Write only `<output-path>`. Writes follow the host's normal permission rules; this skill
21
+ pre-approves nothing.
22
+
23
+ Invoked without `<cycle-dir>`, offer the most recent cycle under `.planr/operate/` that holds
24
+ advisor notes and use its `chair.md` as the output path. When there is none, say so and point to
25
+ `planr-operate`; never create an empty cycle.
22
26
 
23
27
  ## Synthesis standard
24
28
 
@@ -2,7 +2,6 @@
2
2
  name: challenger-review
3
3
  description: "Challenge an Operate cycle's claims, alternatives, downside, and confidence. Use when assumptions or executive consensus need an independent stress test."
4
4
  license: MIT
5
- allowed-tools: "Read, Grep, Glob, Edit(./.planr/operate/**)"
6
5
  ---
7
6
 
8
7
  # OpenPlanr Challenger Review
@@ -18,7 +17,12 @@ Use `<cycle-dir>`, `<brief-path>`, `<output-path>`, and `<scope>`. Inspect the a
18
17
  is `omitted by scope`, not unavailable, and creates no gap by itself. If a selected advisor note is
19
18
  unavailable, record the decision impact rather than reconstructing that lens.
20
19
 
21
- Write only `<output-path>`.
20
+ Write only `<output-path>`. Writes follow the host's normal permission rules; this skill
21
+ pre-approves nothing.
22
+
23
+ Invoked without `<cycle-dir>`, offer the most recent cycle under `.planr/operate/` that holds
24
+ advisor notes and use its `challenger.md` as the output path. When there is none, say so and point
25
+ to `planr-operate`; never create an empty cycle.
22
26
 
23
27
  ## Material exceptions
24
28
 
@@ -2,7 +2,6 @@
2
2
  name: cmo-review
3
3
  description: "Produce a grounded market and growth review for an Operate cycle. Use when acquisition, positioning, demand, retention, or missing measurement needs a CMO lens."
4
4
  license: MIT
5
- allowed-tools: "Read, Grep, Glob, Edit(./.planr/operate/**)"
6
5
  ---
7
6
 
8
7
  # OpenPlanr CMO Review
@@ -1,8 +1,8 @@
1
1
  # Shared Operate advisor contract
2
2
 
3
- This contract supplies the common context method and output shape for the five executive advisor
4
- skills. The invoking skill supplies the lens, review questions, useful sources, and decision
5
- standard. Follow both.
3
+ This contract supplies the common context method and output shape for the executive advisor
4
+ skills (CEO, CTO, CPO, CMO, and COO). The invoking skill supplies the lens, review questions,
5
+ useful sources, and decision standard. Follow both.
6
6
 
7
7
  ## Outcome
8
8
 
@@ -21,7 +21,28 @@ not the whole context boundary. Inspect relevant original repository and Git sou
21
21
  drawing conclusions. If an input is unavailable, report the exact problem and continue when the
22
22
  remaining context still supports a useful note.
23
23
 
24
- Write the review only to `<output-path>`.
24
+ Write the review only to `<output-path>`. Writes follow the host's normal permission rules; this
25
+ skill pre-approves nothing.
26
+
27
+ ### Running without `planr-operate`
28
+
29
+ When no `<output-path>` was supplied, this lens creates the cycle itself, in the layout
30
+ `planr-operate` uses, under the repository root:
31
+
32
+ ```text
33
+ .planr/operate/<YYYY-MM-DD>-<subject-slug>/
34
+ cycle.md the request wording, the effective scope, and a one-lens roster
35
+ brief.md compact orientation for this lens only, including what was searched for and not found
36
+ <lens>.md this note: ceo.md, cto.md, cpo.md, cmo.md, or coo.md
37
+ board-report.md an unsynthesized lens summary
38
+ ```
39
+
40
+ Take the subject, window, and requested decision from the request. Use the first unused directory
41
+ name; append `-02`, `-03`, and so on when the base name exists. In `board-report.md`, use the
42
+ `planr-operate` report sections, mark this lens `reported` and every other lens `omitted by scope`
43
+ under Review coverage, and write `No decision-ready proposal was established.` and
44
+ `No proposed actions.` unless this note states a directly supported proposal. Write nothing outside
45
+ that cycle directory. The dashboard lists a cycle only when `board-report.md` exists.
25
46
 
26
47
  ## Grounding
27
48