openplanr 2.2639.4 → 2.2640.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (204) hide show
  1. package/CHANGELOG.md +15 -0
  2. package/dist/cli/commands/github.d.ts.map +1 -1
  3. package/dist/cli/commands/github.js +4 -3
  4. package/dist/cli/commands/github.js.map +1 -1
  5. package/dist/dashboard/.vite/manifest.json +1 -1
  6. package/dist/dashboard/assets/{index-p83hrHZD.js → index-9DLb9EO5.js} +2 -2
  7. package/dist/dashboard/assets/{index-p83hrHZD.js.map → index-9DLb9EO5.js.map} +1 -1
  8. package/dist/dashboard/dashboard-manifest.json +13 -13
  9. package/dist/dashboard/index.html +1 -1
  10. package/dist/models/schema.d.ts.map +1 -1
  11. package/dist/models/schema.js +24 -1
  12. package/dist/models/schema.js.map +1 -1
  13. package/dist/services/artifact-service.js +2 -2
  14. package/dist/services/artifact-service.js.map +1 -1
  15. package/dist/services/github-service.d.ts +6 -4
  16. package/dist/services/github-service.d.ts.map +1 -1
  17. package/dist/services/github-service.js +7 -2
  18. package/dist/services/github-service.js.map +1 -1
  19. package/dist/services/id-service.d.ts +4 -1
  20. package/dist/services/id-service.d.ts.map +1 -1
  21. package/dist/services/id-service.js +28 -15
  22. package/dist/services/id-service.js.map +1 -1
  23. package/dist/services/landing/receipt-custody.d.ts.map +1 -1
  24. package/dist/services/landing/receipt-custody.js +2 -0
  25. package/dist/services/landing/receipt-custody.js.map +1 -1
  26. package/dist/services/report-linter-service.d.ts.map +1 -1
  27. package/dist/services/report-linter-service.js +2 -4
  28. package/dist/services/report-linter-service.js.map +1 -1
  29. package/docs/CLI.md +2 -0
  30. package/lib/host-packages/adapter-registry.json +5 -5
  31. package/lib/host-packages/capability-map.json +1 -1
  32. package/lib/host-packages/claude/.claude-plugin/marketplace.json +2 -2
  33. package/lib/host-packages/claude/openplanr/.claude-plugin/icon.svg +11 -0
  34. package/lib/host-packages/claude/openplanr/.claude-plugin/plugin.json +8 -3
  35. package/lib/host-packages/claude/openplanr/.openplanr-content.json +160 -28
  36. package/lib/host-packages/claude/openplanr/README.md +4 -3
  37. package/lib/host-packages/claude/openplanr/skills/ceo-review/SKILL.md +1 -1
  38. package/lib/host-packages/claude/openplanr/skills/chair-review/SKILL.md +1 -1
  39. package/lib/host-packages/claude/openplanr/skills/challenger-review/SKILL.md +1 -1
  40. package/lib/host-packages/claude/openplanr/skills/cmo-review/SKILL.md +1 -1
  41. package/lib/host-packages/claude/openplanr/skills/coo-review/SKILL.md +1 -1
  42. package/lib/host-packages/claude/openplanr/skills/cpo-review/SKILL.md +1 -1
  43. package/lib/host-packages/claude/openplanr/skills/cto-review/SKILL.md +1 -1
  44. package/lib/host-packages/claude/openplanr/skills/design/openplanr.skill.json +88 -0
  45. package/lib/host-packages/claude/openplanr/skills/design/scripts/design-artifact-shell.mjs +2506 -0
  46. package/lib/host-packages/claude/openplanr/skills/design/scripts/design-document.mjs +3674 -0
  47. package/lib/host-packages/claude/openplanr/skills/design/scripts/design-entities.mjs +489 -0
  48. package/lib/host-packages/claude/openplanr/skills/design/scripts/design-parse5-parser.mjs +3970 -0
  49. package/lib/host-packages/claude/openplanr/skills/design/scripts/design-parse5-tokenizer.mjs +3501 -0
  50. package/lib/host-packages/claude/openplanr/skills/design/scripts/design-review-handoff.mjs +4408 -0
  51. package/lib/host-packages/claude/openplanr/skills/design/scripts/design-sandbox-guards.mjs +1073 -0
  52. package/lib/host-packages/claude/openplanr/skills/design/scripts/design-share.mjs +2127 -0
  53. package/lib/host-packages/claude/openplanr/skills/design/scripts/design.mjs +83 -21459
  54. package/lib/host-packages/claude/openplanr/skills/design/scripts/runtime/packages/design/templates/studio/studio.js +1 -0
  55. package/lib/host-packages/claude/openplanr/skills/design/scripts/runtime/packages/protocol/package.json +1 -1
  56. package/lib/host-packages/claude/openplanr/skills/design-loop/openplanr.skill.json +88 -0
  57. package/lib/host-packages/claude/openplanr/skills/design-loop/scripts/design-artifact-shell.mjs +2506 -0
  58. package/lib/host-packages/claude/openplanr/skills/design-loop/scripts/design-document.mjs +3674 -0
  59. package/lib/host-packages/claude/openplanr/skills/design-loop/scripts/design-entities.mjs +489 -0
  60. package/lib/host-packages/claude/openplanr/skills/design-loop/scripts/design-parse5-parser.mjs +3970 -0
  61. package/lib/host-packages/claude/openplanr/skills/design-loop/scripts/design-parse5-tokenizer.mjs +3501 -0
  62. package/lib/host-packages/claude/openplanr/skills/design-loop/scripts/design-review-handoff.mjs +4408 -0
  63. package/lib/host-packages/claude/openplanr/skills/design-loop/scripts/design-sandbox-guards.mjs +1073 -0
  64. package/lib/host-packages/claude/openplanr/skills/design-loop/scripts/design-share.mjs +2127 -0
  65. package/lib/host-packages/claude/openplanr/skills/design-loop/scripts/design.mjs +83 -21459
  66. package/lib/host-packages/claude/openplanr/skills/design-loop/scripts/runtime/packages/design/templates/studio/studio.js +1 -0
  67. package/lib/host-packages/claude/openplanr/skills/design-loop/scripts/runtime/packages/protocol/package.json +1 -1
  68. package/lib/host-packages/claude/openplanr/skills/design-review/openplanr.skill.json +88 -0
  69. package/lib/host-packages/claude/openplanr/skills/design-review/scripts/design-artifact-shell.mjs +2506 -0
  70. package/lib/host-packages/claude/openplanr/skills/design-review/scripts/design-document.mjs +3674 -0
  71. package/lib/host-packages/claude/openplanr/skills/design-review/scripts/design-entities.mjs +489 -0
  72. package/lib/host-packages/claude/openplanr/skills/design-review/scripts/design-parse5-parser.mjs +3970 -0
  73. package/lib/host-packages/claude/openplanr/skills/design-review/scripts/design-parse5-tokenizer.mjs +3501 -0
  74. package/lib/host-packages/claude/openplanr/skills/design-review/scripts/design-review-handoff.mjs +4408 -0
  75. package/lib/host-packages/claude/openplanr/skills/design-review/scripts/design-sandbox-guards.mjs +1073 -0
  76. package/lib/host-packages/claude/openplanr/skills/design-review/scripts/design-share.mjs +2127 -0
  77. package/lib/host-packages/claude/openplanr/skills/design-review/scripts/design.mjs +83 -21459
  78. package/lib/host-packages/claude/openplanr/skills/design-review/scripts/runtime/packages/design/templates/studio/studio.js +1 -0
  79. package/lib/host-packages/claude/openplanr/skills/design-review/scripts/runtime/packages/protocol/package.json +1 -1
  80. package/lib/host-packages/claude/openplanr/skills/plan/openplanr.skill.json +88 -0
  81. package/lib/host-packages/claude/openplanr/skills/plan/scripts/design-artifact-shell.mjs +2506 -0
  82. package/lib/host-packages/claude/openplanr/skills/plan/scripts/design-document.mjs +3674 -0
  83. package/lib/host-packages/claude/openplanr/skills/plan/scripts/design-entities.mjs +489 -0
  84. package/lib/host-packages/claude/openplanr/skills/plan/scripts/design-parse5-parser.mjs +3970 -0
  85. package/lib/host-packages/claude/openplanr/skills/plan/scripts/design-parse5-tokenizer.mjs +3501 -0
  86. package/lib/host-packages/claude/openplanr/skills/plan/scripts/design-review-handoff.mjs +4408 -0
  87. package/lib/host-packages/claude/openplanr/skills/plan/scripts/design-sandbox-guards.mjs +1073 -0
  88. package/lib/host-packages/claude/openplanr/skills/plan/scripts/design-share.mjs +2127 -0
  89. package/lib/host-packages/claude/openplanr/skills/plan/scripts/design.mjs +83 -21459
  90. package/lib/host-packages/claude/openplanr/skills/plan/scripts/runtime/packages/design/templates/studio/studio.js +1 -0
  91. package/lib/host-packages/claude/openplanr/skills/plan/scripts/runtime/packages/protocol/package.json +1 -1
  92. package/lib/host-packages/claude/openplanr/skills/sync/SKILL.md +17 -6
  93. package/lib/host-packages/claude/openplanr/skills/sync/scripts/sync.mjs +7 -104
  94. package/lib/host-packages/cursor/openplanr/.openplanr-content.json +144 -16
  95. package/lib/host-packages/cursor/openplanr/manifest.json +1 -1
  96. package/lib/host-packages/cursor/openplanr/rules/planr-design/scripts/design-artifact-shell.mjs +2506 -0
  97. package/lib/host-packages/cursor/openplanr/rules/planr-design/scripts/design-document.mjs +3674 -0
  98. package/lib/host-packages/cursor/openplanr/rules/planr-design/scripts/design-entities.mjs +489 -0
  99. package/lib/host-packages/cursor/openplanr/rules/planr-design/scripts/design-parse5-parser.mjs +3970 -0
  100. package/lib/host-packages/cursor/openplanr/rules/planr-design/scripts/design-parse5-tokenizer.mjs +3501 -0
  101. package/lib/host-packages/cursor/openplanr/rules/planr-design/scripts/design-review-handoff.mjs +4408 -0
  102. package/lib/host-packages/cursor/openplanr/rules/planr-design/scripts/design-sandbox-guards.mjs +1073 -0
  103. package/lib/host-packages/cursor/openplanr/rules/planr-design/scripts/design-share.mjs +2127 -0
  104. package/lib/host-packages/cursor/openplanr/rules/planr-design/scripts/design.mjs +83 -21459
  105. package/lib/host-packages/cursor/openplanr/rules/planr-design/scripts/runtime/packages/design/templates/studio/studio.js +1 -0
  106. package/lib/host-packages/cursor/openplanr/rules/planr-design/scripts/runtime/packages/protocol/package.json +1 -1
  107. package/lib/host-packages/cursor/openplanr/rules/planr-design-loop/scripts/design-artifact-shell.mjs +2506 -0
  108. package/lib/host-packages/cursor/openplanr/rules/planr-design-loop/scripts/design-document.mjs +3674 -0
  109. package/lib/host-packages/cursor/openplanr/rules/planr-design-loop/scripts/design-entities.mjs +489 -0
  110. package/lib/host-packages/cursor/openplanr/rules/planr-design-loop/scripts/design-parse5-parser.mjs +3970 -0
  111. package/lib/host-packages/cursor/openplanr/rules/planr-design-loop/scripts/design-parse5-tokenizer.mjs +3501 -0
  112. package/lib/host-packages/cursor/openplanr/rules/planr-design-loop/scripts/design-review-handoff.mjs +4408 -0
  113. package/lib/host-packages/cursor/openplanr/rules/planr-design-loop/scripts/design-sandbox-guards.mjs +1073 -0
  114. package/lib/host-packages/cursor/openplanr/rules/planr-design-loop/scripts/design-share.mjs +2127 -0
  115. package/lib/host-packages/cursor/openplanr/rules/planr-design-loop/scripts/design.mjs +83 -21459
  116. package/lib/host-packages/cursor/openplanr/rules/planr-design-loop/scripts/runtime/packages/design/templates/studio/studio.js +1 -0
  117. package/lib/host-packages/cursor/openplanr/rules/planr-design-loop/scripts/runtime/packages/protocol/package.json +1 -1
  118. package/lib/host-packages/cursor/openplanr/rules/planr-design-review/scripts/design-artifact-shell.mjs +2506 -0
  119. package/lib/host-packages/cursor/openplanr/rules/planr-design-review/scripts/design-document.mjs +3674 -0
  120. package/lib/host-packages/cursor/openplanr/rules/planr-design-review/scripts/design-entities.mjs +489 -0
  121. package/lib/host-packages/cursor/openplanr/rules/planr-design-review/scripts/design-parse5-parser.mjs +3970 -0
  122. package/lib/host-packages/cursor/openplanr/rules/planr-design-review/scripts/design-parse5-tokenizer.mjs +3501 -0
  123. package/lib/host-packages/cursor/openplanr/rules/planr-design-review/scripts/design-review-handoff.mjs +4408 -0
  124. package/lib/host-packages/cursor/openplanr/rules/planr-design-review/scripts/design-sandbox-guards.mjs +1073 -0
  125. package/lib/host-packages/cursor/openplanr/rules/planr-design-review/scripts/design-share.mjs +2127 -0
  126. package/lib/host-packages/cursor/openplanr/rules/planr-design-review/scripts/design.mjs +83 -21459
  127. package/lib/host-packages/cursor/openplanr/rules/planr-design-review/scripts/runtime/packages/design/templates/studio/studio.js +1 -0
  128. package/lib/host-packages/cursor/openplanr/rules/planr-design-review/scripts/runtime/packages/protocol/package.json +1 -1
  129. package/lib/host-packages/cursor/openplanr/rules/planr-plan/scripts/design-artifact-shell.mjs +2506 -0
  130. package/lib/host-packages/cursor/openplanr/rules/planr-plan/scripts/design-document.mjs +3674 -0
  131. package/lib/host-packages/cursor/openplanr/rules/planr-plan/scripts/design-entities.mjs +489 -0
  132. package/lib/host-packages/cursor/openplanr/rules/planr-plan/scripts/design-parse5-parser.mjs +3970 -0
  133. package/lib/host-packages/cursor/openplanr/rules/planr-plan/scripts/design-parse5-tokenizer.mjs +3501 -0
  134. package/lib/host-packages/cursor/openplanr/rules/planr-plan/scripts/design-review-handoff.mjs +4408 -0
  135. package/lib/host-packages/cursor/openplanr/rules/planr-plan/scripts/design-sandbox-guards.mjs +1073 -0
  136. package/lib/host-packages/cursor/openplanr/rules/planr-plan/scripts/design-share.mjs +2127 -0
  137. package/lib/host-packages/cursor/openplanr/rules/planr-plan/scripts/design.mjs +83 -21459
  138. package/lib/host-packages/cursor/openplanr/rules/planr-plan/scripts/runtime/packages/design/templates/studio/studio.js +1 -0
  139. package/lib/host-packages/cursor/openplanr/rules/planr-plan/scripts/runtime/packages/protocol/package.json +1 -1
  140. package/lib/host-packages/cursor/openplanr/rules/planr-sync/scripts/sync.mjs +7 -104
  141. package/lib/host-packages/cursor/openplanr/rules/planr-sync.mdc +17 -6
  142. package/lib/host-packages/openai/.claude-plugin/marketplace.json +2 -2
  143. package/lib/host-packages/openai/openplanr/.codex-plugin/plugin.json +3 -2
  144. package/lib/host-packages/openai/openplanr/.openplanr-content.json +155 -27
  145. package/lib/host-packages/openai/openplanr/skills/ceo-review/SKILL.md +1 -1
  146. package/lib/host-packages/openai/openplanr/skills/chair-review/SKILL.md +1 -1
  147. package/lib/host-packages/openai/openplanr/skills/challenger-review/SKILL.md +1 -1
  148. package/lib/host-packages/openai/openplanr/skills/cmo-review/SKILL.md +1 -1
  149. package/lib/host-packages/openai/openplanr/skills/coo-review/SKILL.md +1 -1
  150. package/lib/host-packages/openai/openplanr/skills/cpo-review/SKILL.md +1 -1
  151. package/lib/host-packages/openai/openplanr/skills/cto-review/SKILL.md +1 -1
  152. package/lib/host-packages/openai/openplanr/skills/design/openplanr.skill.json +88 -0
  153. package/lib/host-packages/openai/openplanr/skills/design/scripts/design-artifact-shell.mjs +2506 -0
  154. package/lib/host-packages/openai/openplanr/skills/design/scripts/design-document.mjs +3674 -0
  155. package/lib/host-packages/openai/openplanr/skills/design/scripts/design-entities.mjs +489 -0
  156. package/lib/host-packages/openai/openplanr/skills/design/scripts/design-parse5-parser.mjs +3970 -0
  157. package/lib/host-packages/openai/openplanr/skills/design/scripts/design-parse5-tokenizer.mjs +3501 -0
  158. package/lib/host-packages/openai/openplanr/skills/design/scripts/design-review-handoff.mjs +4408 -0
  159. package/lib/host-packages/openai/openplanr/skills/design/scripts/design-sandbox-guards.mjs +1073 -0
  160. package/lib/host-packages/openai/openplanr/skills/design/scripts/design-share.mjs +2127 -0
  161. package/lib/host-packages/openai/openplanr/skills/design/scripts/design.mjs +83 -21459
  162. package/lib/host-packages/openai/openplanr/skills/design/scripts/runtime/packages/design/templates/studio/studio.js +1 -0
  163. package/lib/host-packages/openai/openplanr/skills/design/scripts/runtime/packages/protocol/package.json +1 -1
  164. package/lib/host-packages/openai/openplanr/skills/design-loop/openplanr.skill.json +88 -0
  165. package/lib/host-packages/openai/openplanr/skills/design-loop/scripts/design-artifact-shell.mjs +2506 -0
  166. package/lib/host-packages/openai/openplanr/skills/design-loop/scripts/design-document.mjs +3674 -0
  167. package/lib/host-packages/openai/openplanr/skills/design-loop/scripts/design-entities.mjs +489 -0
  168. package/lib/host-packages/openai/openplanr/skills/design-loop/scripts/design-parse5-parser.mjs +3970 -0
  169. package/lib/host-packages/openai/openplanr/skills/design-loop/scripts/design-parse5-tokenizer.mjs +3501 -0
  170. package/lib/host-packages/openai/openplanr/skills/design-loop/scripts/design-review-handoff.mjs +4408 -0
  171. package/lib/host-packages/openai/openplanr/skills/design-loop/scripts/design-sandbox-guards.mjs +1073 -0
  172. package/lib/host-packages/openai/openplanr/skills/design-loop/scripts/design-share.mjs +2127 -0
  173. package/lib/host-packages/openai/openplanr/skills/design-loop/scripts/design.mjs +83 -21459
  174. package/lib/host-packages/openai/openplanr/skills/design-loop/scripts/runtime/packages/design/templates/studio/studio.js +1 -0
  175. package/lib/host-packages/openai/openplanr/skills/design-loop/scripts/runtime/packages/protocol/package.json +1 -1
  176. package/lib/host-packages/openai/openplanr/skills/design-review/openplanr.skill.json +88 -0
  177. package/lib/host-packages/openai/openplanr/skills/design-review/scripts/design-artifact-shell.mjs +2506 -0
  178. package/lib/host-packages/openai/openplanr/skills/design-review/scripts/design-document.mjs +3674 -0
  179. package/lib/host-packages/openai/openplanr/skills/design-review/scripts/design-entities.mjs +489 -0
  180. package/lib/host-packages/openai/openplanr/skills/design-review/scripts/design-parse5-parser.mjs +3970 -0
  181. package/lib/host-packages/openai/openplanr/skills/design-review/scripts/design-parse5-tokenizer.mjs +3501 -0
  182. package/lib/host-packages/openai/openplanr/skills/design-review/scripts/design-review-handoff.mjs +4408 -0
  183. package/lib/host-packages/openai/openplanr/skills/design-review/scripts/design-sandbox-guards.mjs +1073 -0
  184. package/lib/host-packages/openai/openplanr/skills/design-review/scripts/design-share.mjs +2127 -0
  185. package/lib/host-packages/openai/openplanr/skills/design-review/scripts/design.mjs +83 -21459
  186. package/lib/host-packages/openai/openplanr/skills/design-review/scripts/runtime/packages/design/templates/studio/studio.js +1 -0
  187. package/lib/host-packages/openai/openplanr/skills/design-review/scripts/runtime/packages/protocol/package.json +1 -1
  188. package/lib/host-packages/openai/openplanr/skills/plan/openplanr.skill.json +88 -0
  189. package/lib/host-packages/openai/openplanr/skills/plan/scripts/design-artifact-shell.mjs +2506 -0
  190. package/lib/host-packages/openai/openplanr/skills/plan/scripts/design-document.mjs +3674 -0
  191. package/lib/host-packages/openai/openplanr/skills/plan/scripts/design-entities.mjs +489 -0
  192. package/lib/host-packages/openai/openplanr/skills/plan/scripts/design-parse5-parser.mjs +3970 -0
  193. package/lib/host-packages/openai/openplanr/skills/plan/scripts/design-parse5-tokenizer.mjs +3501 -0
  194. package/lib/host-packages/openai/openplanr/skills/plan/scripts/design-review-handoff.mjs +4408 -0
  195. package/lib/host-packages/openai/openplanr/skills/plan/scripts/design-sandbox-guards.mjs +1073 -0
  196. package/lib/host-packages/openai/openplanr/skills/plan/scripts/design-share.mjs +2127 -0
  197. package/lib/host-packages/openai/openplanr/skills/plan/scripts/design.mjs +83 -21459
  198. package/lib/host-packages/openai/openplanr/skills/plan/scripts/runtime/packages/design/templates/studio/studio.js +1 -0
  199. package/lib/host-packages/openai/openplanr/skills/plan/scripts/runtime/packages/protocol/package.json +1 -1
  200. package/lib/host-packages/openai/openplanr/skills/sync/SKILL.md +17 -6
  201. package/lib/host-packages/openai/openplanr/skills/sync/scripts/sync.mjs +7 -104
  202. package/lib/integrations.d.mts +0 -10
  203. package/lib/integrations.mjs +7 -104
  204. package/package.json +2 -2
@@ -1885,6 +1885,7 @@ ${fence}`;
1885
1885
  if (saving || !available()) return;
1886
1886
  saving = true;
1887
1887
  try {
1888
+ await studio.flush();
1888
1889
  for (const [pinId, category] of Object.entries(outbox)) {
1889
1890
  const body = {
1890
1891
  action: "category",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@openplanr/protocol",
3
- "version": "0.7.0",
3
+ "version": "0.7.2",
4
4
  "type": "module",
5
5
  "description": "Canonical OpenPlanr schemas, registries, typed errors, and portable contract validation",
6
6
  "license": "MIT",
@@ -7,7 +7,6 @@ import { fileURLToPath } from 'node:url';
7
7
  import { promisify } from 'node:util';
8
8
 
9
9
  const execFileAsync = promisify(execFile);
10
- const LINEAR_ENDPOINT = 'https://api.linear.app/graphql';
11
10
  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;
12
11
  const LINEAR_IDENTIFIER = /^[A-Z][A-Z0-9]+-\d+$/u;
13
12
 
@@ -102,100 +101,6 @@ export async function executeGitHubOperations(
102
101
  return { provider: 'github', applied: true, results };
103
102
  }
104
103
 
105
- async function linearRequest(query, variables, token, fetchImpl = fetch) {
106
- if (!token)
107
- throw new IntegrationError('E_LINEAR_CREDENTIAL', 'Linear credentials are unavailable.');
108
- let response;
109
- let payload;
110
- try {
111
- response = await fetchImpl(LINEAR_ENDPOINT, {
112
- method: 'POST',
113
- headers: { authorization: token, 'content-type': 'application/json' },
114
- body: JSON.stringify({ query, variables }),
115
- });
116
- payload = await response.json();
117
- } catch (error) {
118
- throw new IntegrationError('E_LINEAR_API', 'Linear synchronization transport failed.', {
119
- cause: String(error?.message ?? error),
120
- });
121
- }
122
- if (!response.ok || !payload || typeof payload !== 'object' || payload.errors?.length) {
123
- throw new IntegrationError('E_LINEAR_API', 'Linear rejected the synchronization request.', {
124
- status: response.status,
125
- errors: payload?.errors,
126
- });
127
- }
128
- return payload.data;
129
- }
130
-
131
- function requireLinearMutationResult(data, field) {
132
- const result = data?.[field];
133
- const issue = result?.issue;
134
- if (
135
- result?.success !== true ||
136
- !issue ||
137
- typeof issue.id !== 'string' ||
138
- typeof issue.identifier !== 'string' ||
139
- typeof issue.url !== 'string'
140
- ) {
141
- throw new IntegrationError(
142
- 'E_LINEAR_API',
143
- `Linear ${field} did not confirm a successful issue mutation.`,
144
- {
145
- field,
146
- success: result?.success ?? null,
147
- },
148
- );
149
- }
150
- return issue;
151
- }
152
-
153
- export async function inspectLinear({ token = process.env.PLANR_LINEAR_TOKEN } = {}) {
154
- const data = await linearRequest('query OpenPlanrViewer { viewer { id name email } }', {}, token);
155
- return { provider: 'linear', viewer: data.viewer };
156
- }
157
-
158
- export async function executeLinearOperations(
159
- operations,
160
- { token = process.env.PLANR_LINEAR_TOKEN, apply = false } = {},
161
- ) {
162
- if (!Array.isArray(operations))
163
- throw new IntegrationError('E_SYNC_INPUT', 'Linear operations must be an array.');
164
- if (!apply) return { provider: 'linear', applied: false, operations };
165
- const results = [];
166
- for (const operation of operations) {
167
- if (operation.action === 'create' && operation.teamId) {
168
- const data = await linearRequest(
169
- 'mutation OpenPlanrCreate($input: IssueCreateInput!) { issueCreate(input: $input) { success issue { id identifier url } } }',
170
- {
171
- input: { teamId: operation.teamId, title: operation.title, description: operation.body },
172
- },
173
- token,
174
- );
175
- results.push({ action: 'create', ...requireLinearMutationResult(data, 'issueCreate') });
176
- continue;
177
- }
178
- if (operation.action === 'update' && isLikelyLinearIssueId(operation.id)) {
179
- const data = await linearRequest(
180
- 'mutation OpenPlanrUpdate($id: String!, $input: IssueUpdateInput!) { issueUpdate(id: $id, input: $input) { success issue { id identifier url } } }',
181
- {
182
- id: operation.id,
183
- input: { title: operation.title, description: operation.body, stateId: operation.state },
184
- },
185
- token,
186
- );
187
- results.push({ action: 'update', ...requireLinearMutationResult(data, 'issueUpdate') });
188
- continue;
189
- }
190
- throw new IntegrationError(
191
- 'E_SYNC_OPERATION',
192
- 'Unsupported Linear synchronization operation.',
193
- { operation },
194
- );
195
- }
196
- return { provider: 'linear', applied: true, results };
197
- }
198
-
199
104
  async function readJsonInput(value, stdin) {
200
105
  if (value) return JSON.parse(await readFile(resolve(value), 'utf8'));
201
106
  let bytes = '';
@@ -226,7 +131,7 @@ function parseArgs(argv) {
226
131
 
227
132
  export async function runPortableSync(
228
133
  argv = process.argv.slice(2),
229
- { cwd = process.cwd(), env = process.env, stdin = process.stdin, stdout = process.stdout } = {},
134
+ { cwd = process.cwd(), stdin = process.stdin, stdout = process.stdout } = {},
230
135
  ) {
231
136
  const args = parseArgs(argv);
232
137
  let result;
@@ -238,17 +143,15 @@ export async function runPortableSync(
238
143
  cwd,
239
144
  apply: args.apply,
240
145
  });
241
- } else if (args.provider === 'linear' && args.action === 'inspect') {
242
- result = await inspectLinear({ token: env.PLANR_LINEAR_TOKEN });
243
- } else if (args.provider === 'linear' && args.action === 'sync') {
244
- result = await executeLinearOperations(await readJsonInput(args.input, stdin), {
245
- token: env.PLANR_LINEAR_TOKEN,
246
- apply: args.apply,
247
- });
146
+ } else if (args.provider === 'linear') {
147
+ throw new IntegrationError(
148
+ 'E_SYNC_USAGE',
149
+ 'Linear synchronization runs through a Linear connector or the planr CLI (planr linear push, planr linear sync).',
150
+ );
248
151
  } else {
249
152
  throw new IntegrationError(
250
153
  'E_SYNC_USAGE',
251
- 'Usage: sync.mjs <local|github|linear> <inspect|sync> [--input path] [--apply]',
154
+ 'Usage: sync.mjs <local|github> <inspect|sync> [--input path] [--apply]',
252
155
  );
253
156
  }
254
157
  stdout.write(`${JSON.stringify(result, null, 2)}\n`);
@@ -6,16 +6,27 @@ alwaysApply: false
6
6
  # Planr 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 transport
10
- may use a host connector or the packaged [sync helper](scripts/sync.mjs). The optional
11
- OpenPlanr CLI is never required by the skill.
9
+ Reason about conflicts in this active session; deterministic mapping and GitHub
10
+ transport may use a host connector or the packaged [sync helper](scripts/sync.mjs).
11
+ Local and GitHub work never require the OpenPlanr CLI.
12
12
 
13
13
  Resolution order:
14
14
 
15
15
  1. use a host-native GitHub or Linear connector when available;
16
- 2. otherwise use the packaged deterministic helper;
17
- 3. optionally use the equivalent `planr github`, `planr linear`, or `planr sync`
18
- terminal utility when the user has installed it.
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.
19
30
 
20
31
  Audit is read-only by default. Apply local changes only when the request asks for
21
32
  reconciliation, and push remote changes only when the request asks for external
@@ -4,14 +4,14 @@
4
4
  "name": "AsemDevs"
5
5
  },
6
6
  "metadata": {
7
- "version": "2.2639.4",
7
+ "version": "2.2640.0",
8
8
  "description": "Generated local OpenPlanr package."
9
9
  },
10
10
  "plugins": [
11
11
  {
12
12
  "name": "planr",
13
13
  "source": "./openplanr",
14
- "version": "2.2639.4",
14
+ "version": "2.2640.0",
15
15
  "description": "Host-native OpenPlanr skills for OpenAI coding agents.",
16
16
  "strict": true
17
17
  }
@@ -1,9 +1,10 @@
1
1
  {
2
2
  "name": "planr",
3
- "version": "2.2639.4",
3
+ "version": "2.2640.0",
4
4
  "description": "Host-native OpenPlanr planning, delivery, review, design, and operating skills.",
5
5
  "author": {
6
- "name": "AsemDevs"
6
+ "name": "OpenPlanr",
7
+ "url": "https://openplanr.dev"
7
8
  },
8
9
  "license": "MIT",
9
10
  "skills": "./skills/"
@@ -8,7 +8,7 @@
8
8
  "files": [
9
9
  {
10
10
  "path": ".codex-plugin/plugin.json",
11
- "digest": "sha256:6ecef12fab9d2d2a90d4ce82c7527a1ee2f6a372bc39ba7f1bcc7d76fcf906f8"
11
+ "digest": "sha256:6fe8da9843f3efb493c6d47ec6b58835ce09c913025008fa4bb0e8eb8f64117f"
12
12
  },
13
13
  {
14
14
  "path": "skills/artifact/agents/openai.yaml",
@@ -72,7 +72,7 @@
72
72
  },
73
73
  {
74
74
  "path": "skills/ceo-review/SKILL.md",
75
- "digest": "sha256:fa0e64563962c9c5232b78693fdb330e87f5474815721427cfdafb11a6fef265"
75
+ "digest": "sha256:9c51ceb66d20f49ca417da1213441d4824cba8206d88f33b2481ed6eea51a399"
76
76
  },
77
77
  {
78
78
  "path": "skills/chair-review/agents/openai.yaml",
@@ -100,7 +100,7 @@
100
100
  },
101
101
  {
102
102
  "path": "skills/chair-review/SKILL.md",
103
- "digest": "sha256:3336fb4b44874e421d57ce42ef49620873289b2ede6fdf7b4431f787c61c3be7"
103
+ "digest": "sha256:fcc1f07dff8de8bd104a0176a4265fb71e380a9a3dbbcbc0c21e4a113f38acfd"
104
104
  },
105
105
  {
106
106
  "path": "skills/challenger-review/agents/openai.yaml",
@@ -128,7 +128,7 @@
128
128
  },
129
129
  {
130
130
  "path": "skills/challenger-review/SKILL.md",
131
- "digest": "sha256:9e2f5356100826c7e526bd57c3a09deca1f303cbd0a31591fd2ab1bfa5a5378b"
131
+ "digest": "sha256:7eb97bc94201cd9aff3751430437ea116b15a8d1347269ce3b0cbbd9cbf0d8c7"
132
132
  },
133
133
  {
134
134
  "path": "skills/cmo-review/agents/openai.yaml",
@@ -160,7 +160,7 @@
160
160
  },
161
161
  {
162
162
  "path": "skills/cmo-review/SKILL.md",
163
- "digest": "sha256:425c71f6fec8a60db7a25017237fa136808a4b66d2f6e19ae259fe943b8467eb"
163
+ "digest": "sha256:31112e8deae357bbde9d51d9707400f63e16563bf08f4774acb52e2f5ccdfa2a"
164
164
  },
165
165
  {
166
166
  "path": "skills/coo-review/agents/openai.yaml",
@@ -192,7 +192,7 @@
192
192
  },
193
193
  {
194
194
  "path": "skills/coo-review/SKILL.md",
195
- "digest": "sha256:48c80085871d3a19825120ba18828587347a8877b16b016ca65cea7cc1a87736"
195
+ "digest": "sha256:8d6b132b39e41d249961602e002035f4748f1ad4299984952f00d6b16485a678"
196
196
  },
197
197
  {
198
198
  "path": "skills/cpo-review/agents/openai.yaml",
@@ -224,7 +224,7 @@
224
224
  },
225
225
  {
226
226
  "path": "skills/cpo-review/SKILL.md",
227
- "digest": "sha256:bf26e686965921029fed599fa7d597686dc42ce44f8000e0a2b36a6d5f5174de"
227
+ "digest": "sha256:77d2f464f9102515ab842fc5afe76feae7a12c9ecde150c2392a599b50186cf4"
228
228
  },
229
229
  {
230
230
  "path": "skills/cto-review/agents/openai.yaml",
@@ -256,7 +256,7 @@
256
256
  },
257
257
  {
258
258
  "path": "skills/cto-review/SKILL.md",
259
- "digest": "sha256:978cb42db8fa3e23a9ca7717806cd5e73cb7df74e4ac56b3d6352602f999f44f"
259
+ "digest": "sha256:7addd0afdd7a17032f24c54c11dfc80beef516f0d7d90dfa11392a9556245b1e"
260
260
  },
261
261
  {
262
262
  "path": "skills/dashboard/agents/openai.yaml",
@@ -276,7 +276,7 @@
276
276
  },
277
277
  {
278
278
  "path": "skills/design-loop/openplanr.skill.json",
279
- "digest": "sha256:56dc09a795ee2a2cfb98b4a2f023f8fe83d044a7e5a4778d906c78116ba78bd5"
279
+ "digest": "sha256:4dc9b54a53a6a1e591f5e31bf68088caaccfbac18d45061e4af2940fcdfbb8e4"
280
280
  },
281
281
  {
282
282
  "path": "skills/design-loop/references/craft.md",
@@ -326,9 +326,41 @@
326
326
  "path": "skills/design-loop/schemas/design-review-handoff.schema.json",
327
327
  "digest": "sha256:402b25238f93f8269b98697bf77fa11dda1fd284f44e41d73cdb813f5244a4e0"
328
328
  },
329
+ {
330
+ "path": "skills/design-loop/scripts/design-artifact-shell.mjs",
331
+ "digest": "sha256:9245a86f8e3f20f6ec4c705d1364d2d6d3e639b34a7d41162769a0f490dd39df"
332
+ },
333
+ {
334
+ "path": "skills/design-loop/scripts/design-document.mjs",
335
+ "digest": "sha256:7e15b9f9e9afd29be2a2558fad9e57b5df85e494a586180d5afe23015cdbcfb7"
336
+ },
337
+ {
338
+ "path": "skills/design-loop/scripts/design-entities.mjs",
339
+ "digest": "sha256:376ec35d0f184deac31b639f2c0918e6b0f165e19984ed1c89ba2cfad6af9b80"
340
+ },
341
+ {
342
+ "path": "skills/design-loop/scripts/design-parse5-parser.mjs",
343
+ "digest": "sha256:a9bfeecae4d31155a6935455c82ea8348da25f8585216b531d00c6599b8196e4"
344
+ },
345
+ {
346
+ "path": "skills/design-loop/scripts/design-parse5-tokenizer.mjs",
347
+ "digest": "sha256:f655474fb8d0bed732f01ace5b67102f849b73cb40831a57f1fb7b61180fbde9"
348
+ },
349
+ {
350
+ "path": "skills/design-loop/scripts/design-review-handoff.mjs",
351
+ "digest": "sha256:1d04e0d821738f3934fb3fbd314b161fb557f4459cf2da2d1921c99d27d7d861"
352
+ },
353
+ {
354
+ "path": "skills/design-loop/scripts/design-sandbox-guards.mjs",
355
+ "digest": "sha256:dcc7aa1971da47018a198bfe7520c05e3e5ba21fe2d9c8fffcaad882ded5bbbb"
356
+ },
357
+ {
358
+ "path": "skills/design-loop/scripts/design-share.mjs",
359
+ "digest": "sha256:b10d7ce9cdb3eb48b9aca803e4d2ecc4f8e477e91f4a0c6a3ae17a1f7985aa06"
360
+ },
329
361
  {
330
362
  "path": "skills/design-loop/scripts/design.mjs",
331
- "digest": "sha256:1fd130d914dd6b84992007fcf300b6083e04ee3983beaf1718cd1866a26b4d7a"
363
+ "digest": "sha256:ab33412cab749120e07359983f85bcb64038026844c06ff9f464c4f371d6d6ca"
332
364
  },
333
365
  {
334
366
  "path": "skills/design-loop/scripts/runtime/notices/entities.txt",
@@ -364,11 +396,11 @@
364
396
  },
365
397
  {
366
398
  "path": "skills/design-loop/scripts/runtime/packages/design/templates/studio/studio.js",
367
- "digest": "sha256:8e0ae7d5ddbb058f4b3f7a0876ce8259dd247358c40ce666763e9001b3bc5338"
399
+ "digest": "sha256:85f8b084457aaa172025fb878b64059782cb976f72451b207c7bc40e8c982bb8"
368
400
  },
369
401
  {
370
402
  "path": "skills/design-loop/scripts/runtime/packages/protocol/package.json",
371
- "digest": "sha256:344e2118724b905e310c4919e9515ff326641f84819202921af871388bd7ea53"
403
+ "digest": "sha256:931a50e413656f4dcd95db2451b5fc63c985b13494b4b01b492d8292529f4fcb"
372
404
  },
373
405
  {
374
406
  "path": "skills/design-loop/scripts/runtime/packages/protocol/registries/artifact-theme.json",
@@ -460,7 +492,7 @@
460
492
  },
461
493
  {
462
494
  "path": "skills/design-review/openplanr.skill.json",
463
- "digest": "sha256:2dbcbfe72ca6092a1eb3adc5782d314b04211f64ac64833aa2191265267d319f"
495
+ "digest": "sha256:5abf56388a0cae2fc5c2135ce01538e46b7131e9c82a1eae479852b92435ea92"
464
496
  },
465
497
  {
466
498
  "path": "skills/design-review/references/craft.md",
@@ -510,9 +542,41 @@
510
542
  "path": "skills/design-review/schemas/design-review-handoff.schema.json",
511
543
  "digest": "sha256:402b25238f93f8269b98697bf77fa11dda1fd284f44e41d73cdb813f5244a4e0"
512
544
  },
545
+ {
546
+ "path": "skills/design-review/scripts/design-artifact-shell.mjs",
547
+ "digest": "sha256:9245a86f8e3f20f6ec4c705d1364d2d6d3e639b34a7d41162769a0f490dd39df"
548
+ },
549
+ {
550
+ "path": "skills/design-review/scripts/design-document.mjs",
551
+ "digest": "sha256:7e15b9f9e9afd29be2a2558fad9e57b5df85e494a586180d5afe23015cdbcfb7"
552
+ },
553
+ {
554
+ "path": "skills/design-review/scripts/design-entities.mjs",
555
+ "digest": "sha256:376ec35d0f184deac31b639f2c0918e6b0f165e19984ed1c89ba2cfad6af9b80"
556
+ },
557
+ {
558
+ "path": "skills/design-review/scripts/design-parse5-parser.mjs",
559
+ "digest": "sha256:a9bfeecae4d31155a6935455c82ea8348da25f8585216b531d00c6599b8196e4"
560
+ },
561
+ {
562
+ "path": "skills/design-review/scripts/design-parse5-tokenizer.mjs",
563
+ "digest": "sha256:f655474fb8d0bed732f01ace5b67102f849b73cb40831a57f1fb7b61180fbde9"
564
+ },
565
+ {
566
+ "path": "skills/design-review/scripts/design-review-handoff.mjs",
567
+ "digest": "sha256:1d04e0d821738f3934fb3fbd314b161fb557f4459cf2da2d1921c99d27d7d861"
568
+ },
569
+ {
570
+ "path": "skills/design-review/scripts/design-sandbox-guards.mjs",
571
+ "digest": "sha256:dcc7aa1971da47018a198bfe7520c05e3e5ba21fe2d9c8fffcaad882ded5bbbb"
572
+ },
573
+ {
574
+ "path": "skills/design-review/scripts/design-share.mjs",
575
+ "digest": "sha256:b10d7ce9cdb3eb48b9aca803e4d2ecc4f8e477e91f4a0c6a3ae17a1f7985aa06"
576
+ },
513
577
  {
514
578
  "path": "skills/design-review/scripts/design.mjs",
515
- "digest": "sha256:1fd130d914dd6b84992007fcf300b6083e04ee3983beaf1718cd1866a26b4d7a"
579
+ "digest": "sha256:ab33412cab749120e07359983f85bcb64038026844c06ff9f464c4f371d6d6ca"
516
580
  },
517
581
  {
518
582
  "path": "skills/design-review/scripts/runtime/notices/entities.txt",
@@ -548,11 +612,11 @@
548
612
  },
549
613
  {
550
614
  "path": "skills/design-review/scripts/runtime/packages/design/templates/studio/studio.js",
551
- "digest": "sha256:8e0ae7d5ddbb058f4b3f7a0876ce8259dd247358c40ce666763e9001b3bc5338"
615
+ "digest": "sha256:85f8b084457aaa172025fb878b64059782cb976f72451b207c7bc40e8c982bb8"
552
616
  },
553
617
  {
554
618
  "path": "skills/design-review/scripts/runtime/packages/protocol/package.json",
555
- "digest": "sha256:344e2118724b905e310c4919e9515ff326641f84819202921af871388bd7ea53"
619
+ "digest": "sha256:931a50e413656f4dcd95db2451b5fc63c985b13494b4b01b492d8292529f4fcb"
556
620
  },
557
621
  {
558
622
  "path": "skills/design-review/scripts/runtime/packages/protocol/registries/artifact-theme.json",
@@ -644,7 +708,7 @@
644
708
  },
645
709
  {
646
710
  "path": "skills/design/openplanr.skill.json",
647
- "digest": "sha256:36772da092a70a0e83f331723926d9dd58fa82d3b81d112179dfb3d7ab60bc1f"
711
+ "digest": "sha256:d44c329b3754caa65cd0209f39fa31327f6ff68257f0de8c6f3ab26c3be9cc6c"
648
712
  },
649
713
  {
650
714
  "path": "skills/design/references/craft.md",
@@ -694,9 +758,41 @@
694
758
  "path": "skills/design/schemas/design-review-handoff.schema.json",
695
759
  "digest": "sha256:402b25238f93f8269b98697bf77fa11dda1fd284f44e41d73cdb813f5244a4e0"
696
760
  },
761
+ {
762
+ "path": "skills/design/scripts/design-artifact-shell.mjs",
763
+ "digest": "sha256:9245a86f8e3f20f6ec4c705d1364d2d6d3e639b34a7d41162769a0f490dd39df"
764
+ },
765
+ {
766
+ "path": "skills/design/scripts/design-document.mjs",
767
+ "digest": "sha256:7e15b9f9e9afd29be2a2558fad9e57b5df85e494a586180d5afe23015cdbcfb7"
768
+ },
769
+ {
770
+ "path": "skills/design/scripts/design-entities.mjs",
771
+ "digest": "sha256:376ec35d0f184deac31b639f2c0918e6b0f165e19984ed1c89ba2cfad6af9b80"
772
+ },
773
+ {
774
+ "path": "skills/design/scripts/design-parse5-parser.mjs",
775
+ "digest": "sha256:a9bfeecae4d31155a6935455c82ea8348da25f8585216b531d00c6599b8196e4"
776
+ },
777
+ {
778
+ "path": "skills/design/scripts/design-parse5-tokenizer.mjs",
779
+ "digest": "sha256:f655474fb8d0bed732f01ace5b67102f849b73cb40831a57f1fb7b61180fbde9"
780
+ },
781
+ {
782
+ "path": "skills/design/scripts/design-review-handoff.mjs",
783
+ "digest": "sha256:1d04e0d821738f3934fb3fbd314b161fb557f4459cf2da2d1921c99d27d7d861"
784
+ },
785
+ {
786
+ "path": "skills/design/scripts/design-sandbox-guards.mjs",
787
+ "digest": "sha256:dcc7aa1971da47018a198bfe7520c05e3e5ba21fe2d9c8fffcaad882ded5bbbb"
788
+ },
789
+ {
790
+ "path": "skills/design/scripts/design-share.mjs",
791
+ "digest": "sha256:b10d7ce9cdb3eb48b9aca803e4d2ecc4f8e477e91f4a0c6a3ae17a1f7985aa06"
792
+ },
697
793
  {
698
794
  "path": "skills/design/scripts/design.mjs",
699
- "digest": "sha256:1fd130d914dd6b84992007fcf300b6083e04ee3983beaf1718cd1866a26b4d7a"
795
+ "digest": "sha256:ab33412cab749120e07359983f85bcb64038026844c06ff9f464c4f371d6d6ca"
700
796
  },
701
797
  {
702
798
  "path": "skills/design/scripts/runtime/notices/entities.txt",
@@ -732,11 +828,11 @@
732
828
  },
733
829
  {
734
830
  "path": "skills/design/scripts/runtime/packages/design/templates/studio/studio.js",
735
- "digest": "sha256:8e0ae7d5ddbb058f4b3f7a0876ce8259dd247358c40ce666763e9001b3bc5338"
831
+ "digest": "sha256:85f8b084457aaa172025fb878b64059782cb976f72451b207c7bc40e8c982bb8"
736
832
  },
737
833
  {
738
834
  "path": "skills/design/scripts/runtime/packages/protocol/package.json",
739
- "digest": "sha256:344e2118724b905e310c4919e9515ff326641f84819202921af871388bd7ea53"
835
+ "digest": "sha256:931a50e413656f4dcd95db2451b5fc63c985b13494b4b01b492d8292529f4fcb"
740
836
  },
741
837
  {
742
838
  "path": "skills/design/scripts/runtime/packages/protocol/registries/artifact-theme.json",
@@ -944,7 +1040,7 @@
944
1040
  },
945
1041
  {
946
1042
  "path": "skills/plan/openplanr.skill.json",
947
- "digest": "sha256:1f83ec18d867ab0e02d687a1b83398c2a527585b9f369fee1c3dc86f16731f05"
1043
+ "digest": "sha256:1feb1a6f4b5e57226f067f4be7f5bb427bbe99c52ef3b192885e07a0afc3f558"
948
1044
  },
949
1045
  {
950
1046
  "path": "skills/plan/references/artifact-contract.md",
@@ -966,9 +1062,41 @@
966
1062
  "path": "skills/plan/schemas/design-review-handoff.schema.json",
967
1063
  "digest": "sha256:402b25238f93f8269b98697bf77fa11dda1fd284f44e41d73cdb813f5244a4e0"
968
1064
  },
1065
+ {
1066
+ "path": "skills/plan/scripts/design-artifact-shell.mjs",
1067
+ "digest": "sha256:9245a86f8e3f20f6ec4c705d1364d2d6d3e639b34a7d41162769a0f490dd39df"
1068
+ },
1069
+ {
1070
+ "path": "skills/plan/scripts/design-document.mjs",
1071
+ "digest": "sha256:7e15b9f9e9afd29be2a2558fad9e57b5df85e494a586180d5afe23015cdbcfb7"
1072
+ },
1073
+ {
1074
+ "path": "skills/plan/scripts/design-entities.mjs",
1075
+ "digest": "sha256:376ec35d0f184deac31b639f2c0918e6b0f165e19984ed1c89ba2cfad6af9b80"
1076
+ },
1077
+ {
1078
+ "path": "skills/plan/scripts/design-parse5-parser.mjs",
1079
+ "digest": "sha256:a9bfeecae4d31155a6935455c82ea8348da25f8585216b531d00c6599b8196e4"
1080
+ },
1081
+ {
1082
+ "path": "skills/plan/scripts/design-parse5-tokenizer.mjs",
1083
+ "digest": "sha256:f655474fb8d0bed732f01ace5b67102f849b73cb40831a57f1fb7b61180fbde9"
1084
+ },
1085
+ {
1086
+ "path": "skills/plan/scripts/design-review-handoff.mjs",
1087
+ "digest": "sha256:1d04e0d821738f3934fb3fbd314b161fb557f4459cf2da2d1921c99d27d7d861"
1088
+ },
1089
+ {
1090
+ "path": "skills/plan/scripts/design-sandbox-guards.mjs",
1091
+ "digest": "sha256:dcc7aa1971da47018a198bfe7520c05e3e5ba21fe2d9c8fffcaad882ded5bbbb"
1092
+ },
1093
+ {
1094
+ "path": "skills/plan/scripts/design-share.mjs",
1095
+ "digest": "sha256:b10d7ce9cdb3eb48b9aca803e4d2ecc4f8e477e91f4a0c6a3ae17a1f7985aa06"
1096
+ },
969
1097
  {
970
1098
  "path": "skills/plan/scripts/design.mjs",
971
- "digest": "sha256:1fd130d914dd6b84992007fcf300b6083e04ee3983beaf1718cd1866a26b4d7a"
1099
+ "digest": "sha256:ab33412cab749120e07359983f85bcb64038026844c06ff9f464c4f371d6d6ca"
972
1100
  },
973
1101
  {
974
1102
  "path": "skills/plan/scripts/planning-ids.mjs",
@@ -1008,11 +1136,11 @@
1008
1136
  },
1009
1137
  {
1010
1138
  "path": "skills/plan/scripts/runtime/packages/design/templates/studio/studio.js",
1011
- "digest": "sha256:8e0ae7d5ddbb058f4b3f7a0876ce8259dd247358c40ce666763e9001b3bc5338"
1139
+ "digest": "sha256:85f8b084457aaa172025fb878b64059782cb976f72451b207c7bc40e8c982bb8"
1012
1140
  },
1013
1141
  {
1014
1142
  "path": "skills/plan/scripts/runtime/packages/protocol/package.json",
1015
- "digest": "sha256:344e2118724b905e310c4919e9515ff326641f84819202921af871388bd7ea53"
1143
+ "digest": "sha256:931a50e413656f4dcd95db2451b5fc63c985b13494b4b01b492d8292529f4fcb"
1016
1144
  },
1017
1145
  {
1018
1146
  "path": "skills/plan/scripts/runtime/packages/protocol/registries/artifact-theme.json",
@@ -1220,12 +1348,12 @@
1220
1348
  },
1221
1349
  {
1222
1350
  "path": "skills/sync/scripts/sync.mjs",
1223
- "digest": "sha256:42fb430add6e96c73a8d1c5ea5df7a6ce0bdffc20b9c375eff9333c6c741b308"
1351
+ "digest": "sha256:005397d703d8df70f346a789d15c665a44329449418b39e807bb0dff927153da"
1224
1352
  },
1225
1353
  {
1226
1354
  "path": "skills/sync/SKILL.md",
1227
- "digest": "sha256:53698324b62f43b672ce8fe1654c526c96fb202e313442f09c6fc1e72268677e"
1355
+ "digest": "sha256:06048f24128098919931db60272e0e14fe51bcbeba4b499db587e3b89d7bb3b9"
1228
1356
  }
1229
1357
  ],
1230
- "contentDigest": "sha256:7fd789cc7582e283022486cbae677023b5dd084e9b07ff67f54b81e65861e2e6"
1358
+ "contentDigest": "sha256:1b8598ef168ceec3a700cd18ac4ab067fecfb45828b9ffd3d338e1b8d35a94fc"
1231
1359
  }
@@ -2,7 +2,7 @@
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, Bash(git log:*), Bash(git show:*), Bash(git diff:*), Write"
5
+ allowed-tools: "Read, Grep, Glob, Bash(git log:*), Bash(git show:*), Bash(git diff:*), Edit(./.planr/operate/**)"
6
6
  ---
7
7
 
8
8
  # CEO review (`strategy-finance`)
@@ -2,7 +2,7 @@
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, Write"
5
+ allowed-tools: "Read, Grep, Glob, Edit(./.planr/operate/**)"
6
6
  ---
7
7
 
8
8
  # Chair synthesis (`chair`)
@@ -2,7 +2,7 @@
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, Bash(git log:*), Bash(git show:*), Bash(git diff:*), Write"
5
+ allowed-tools: "Read, Grep, Glob, Bash(git log:*), Bash(git show:*), Bash(git diff:*), Edit(./.planr/operate/**)"
6
6
  ---
7
7
 
8
8
  # Challenger review (`independent-challenge`)
@@ -2,7 +2,7 @@
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, Bash(git log:*), Bash(git show:*), Bash(git diff:*), Write"
5
+ allowed-tools: "Read, Grep, Glob, Bash(git log:*), Bash(git show:*), Bash(git diff:*), Edit(./.planr/operate/**)"
6
6
  ---
7
7
 
8
8
  # CMO review (`growth-market`)
@@ -2,7 +2,7 @@
2
2
  name: coo-review
3
3
  description: "Produce a grounded operations and customer-health review for an Operate cycle. Use when readiness, service delivery, capacity, or customer health needs a COO lens."
4
4
  license: MIT
5
- allowed-tools: "Read, Grep, Glob, Bash(git log:*), Bash(git show:*), Bash(git diff:*), Write"
5
+ allowed-tools: "Read, Grep, Glob, Bash(git log:*), Bash(git show:*), Bash(git diff:*), Edit(./.planr/operate/**)"
6
6
  ---
7
7
 
8
8
  # COO review (`operations-customer`)
@@ -2,7 +2,7 @@
2
2
  name: cpo-review
3
3
  description: "Produce a grounded product and activation review for an Operate cycle. Use when customer value, activation, prioritization, or adoption needs a CPO lens."
4
4
  license: MIT
5
- allowed-tools: "Read, Grep, Glob, Bash(git log:*), Bash(git show:*), Bash(git diff:*), Write"
5
+ allowed-tools: "Read, Grep, Glob, Bash(git log:*), Bash(git show:*), Bash(git diff:*), Edit(./.planr/operate/**)"
6
6
  ---
7
7
 
8
8
  # CPO review (`product-activation`)
@@ -2,7 +2,7 @@
2
2
  name: cto-review
3
3
  description: "Produce a grounded technology and delivery-risk review for an Operate cycle. Use when architecture, reliability, security, or execution risk needs a CTO lens."
4
4
  license: MIT
5
- allowed-tools: "Read, Grep, Glob, Bash(git log:*), Bash(git show:*), Bash(git diff:*), Write"
5
+ allowed-tools: "Read, Grep, Glob, Bash(git log:*), Bash(git show:*), Bash(git diff:*), Edit(./.planr/operate/**)"
6
6
  ---
7
7
 
8
8
  # CTO review (`technology-risk`)