openplanr 3.5.0 → 3.6.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 (217) hide show
  1. package/CHANGELOG.md +31 -0
  2. package/dist/cli/commands/backlog-commands.d.ts +3 -0
  3. package/dist/cli/commands/backlog-commands.d.ts.map +1 -0
  4. package/dist/cli/commands/backlog-commands.js +60 -0
  5. package/dist/cli/commands/backlog-commands.js.map +1 -0
  6. package/dist/cli/commands/company.d.ts.map +1 -1
  7. package/dist/cli/commands/company.js +17 -0
  8. package/dist/cli/commands/company.js.map +1 -1
  9. package/dist/cli/commands/planning-artifacts.d.ts.map +1 -1
  10. package/dist/cli/commands/planning-artifacts.js +13 -5
  11. package/dist/cli/commands/planning-artifacts.js.map +1 -1
  12. package/dist/dashboard/.vite/manifest.json +1 -1
  13. package/dist/dashboard/assets/{index-B-l_941W.js → index-C_OquZVk.js} +2 -2
  14. package/dist/dashboard/assets/{index-B-l_941W.js.map → index-C_OquZVk.js.map} +1 -1
  15. package/dist/dashboard/dashboard-manifest.json +8 -8
  16. package/dist/dashboard/index.html +1 -1
  17. package/dist/services/artifact-service.d.ts.map +1 -1
  18. package/dist/services/artifact-service.js +13 -6
  19. package/dist/services/artifact-service.js.map +1 -1
  20. package/dist/services/company-export-service.d.ts +41 -0
  21. package/dist/services/company-export-service.d.ts.map +1 -0
  22. package/dist/services/company-export-service.js +429 -0
  23. package/dist/services/company-export-service.js.map +1 -0
  24. package/dist/services/company-sync-service.d.ts +24 -1
  25. package/dist/services/company-sync-service.d.ts.map +1 -1
  26. package/dist/services/company-sync-service.js +36 -19
  27. package/dist/services/company-sync-service.js.map +1 -1
  28. package/docs/CLI.md +97 -1
  29. package/lib/backlog-item.d.mts +45 -1
  30. package/lib/backlog-item.mjs +302 -34
  31. package/lib/host-packages/adapter-registry.json +4 -4
  32. package/lib/host-packages/capability-map.json +1 -1
  33. package/lib/host-packages/claude/.claude-plugin/marketplace.json +2 -2
  34. package/lib/host-packages/claude/openplanr/.claude-plugin/icon.png +0 -0
  35. package/lib/host-packages/claude/openplanr/.claude-plugin/plugin.json +1 -1
  36. package/lib/host-packages/claude/openplanr/.openplanr-content.json +77 -77
  37. package/lib/host-packages/claude/openplanr/README.md +1 -1
  38. package/lib/host-packages/claude/openplanr/skills/ceo-review/references/note-checklist.md +131 -0
  39. package/lib/host-packages/claude/openplanr/skills/ceo-review/references/operate-advisor-contract.md +2 -7
  40. package/lib/host-packages/claude/openplanr/skills/chair-review/SKILL.md +2 -7
  41. package/lib/host-packages/claude/openplanr/skills/chair-review/references/note-checklist.md +131 -0
  42. package/lib/host-packages/claude/openplanr/skills/challenger-review/SKILL.md +3 -7
  43. package/lib/host-packages/claude/openplanr/skills/challenger-review/references/note-checklist.md +131 -0
  44. package/lib/host-packages/claude/openplanr/skills/cmo-review/references/note-checklist.md +131 -0
  45. package/lib/host-packages/claude/openplanr/skills/cmo-review/references/operate-advisor-contract.md +2 -7
  46. package/lib/host-packages/claude/openplanr/skills/coo-review/references/note-checklist.md +131 -0
  47. package/lib/host-packages/claude/openplanr/skills/coo-review/references/operate-advisor-contract.md +2 -7
  48. package/lib/host-packages/claude/openplanr/skills/cpo-review/references/note-checklist.md +131 -0
  49. package/lib/host-packages/claude/openplanr/skills/cpo-review/references/operate-advisor-contract.md +2 -7
  50. package/lib/host-packages/claude/openplanr/skills/cto-review/references/note-checklist.md +131 -0
  51. package/lib/host-packages/claude/openplanr/skills/cto-review/references/operate-advisor-contract.md +2 -7
  52. package/lib/host-packages/claude/openplanr/skills/investigate/SKILL.md +2 -3
  53. package/lib/host-packages/claude/openplanr/skills/investigate/references/backlog-filing.md +102 -0
  54. package/lib/host-packages/claude/openplanr/skills/investigate/references/findings.md +8 -16
  55. package/lib/host-packages/claude/openplanr/skills/operate/SKILL.md +73 -84
  56. package/lib/host-packages/claude/openplanr/skills/operate/references/note-checklist.md +131 -0
  57. package/lib/host-packages/claude/openplanr/skills/operate/references/return-contract.md +10 -0
  58. package/lib/host-packages/claude/openplanr/skills/plan/SKILL.md +16 -17
  59. package/lib/host-packages/claude/openplanr/skills/plan/references/planning-ids.md +53 -0
  60. package/lib/host-packages/claude/openplanr/skills/plan/references/return-contract.md +10 -0
  61. package/lib/host-packages/claude/openplanr/skills/plan-review/SKILL.md +6 -6
  62. package/lib/host-packages/claude/openplanr/skills/plan-review/references/return-contract.md +10 -0
  63. package/lib/host-packages/claude/openplanr/skills/release/SKILL.md +40 -139
  64. package/lib/host-packages/claude/openplanr/skills/release/references/cadence.md +10 -0
  65. package/lib/host-packages/claude/openplanr/skills/release/references/release-notes.md +1 -1
  66. package/lib/host-packages/claude/openplanr/skills/release/references/return-contract.md +10 -0
  67. package/lib/host-packages/claude/openplanr/skills/release/references/schemes.md +4 -2
  68. package/lib/host-packages/claude/openplanr/skills/ship/SKILL.md +37 -24
  69. package/lib/host-packages/claude/openplanr/skills/ship/references/backlog-filing.md +102 -0
  70. package/lib/host-packages/claude/openplanr/skills/ship/references/findings.md +8 -16
  71. package/lib/host-packages/claude/openplanr/skills/ship/references/return-contract.md +10 -0
  72. package/lib/host-packages/claude/openplanr/skills/spec/SKILL.md +9 -9
  73. package/lib/host-packages/claude/openplanr/skills/spec/references/return-contract.md +10 -0
  74. package/lib/host-packages/cursor/openplanr/.openplanr-content.json +74 -74
  75. package/lib/host-packages/cursor/openplanr/manifest.json +1 -1
  76. package/lib/host-packages/cursor/openplanr/rules/planr-ceo-review/references/note-checklist.md +131 -0
  77. package/lib/host-packages/cursor/openplanr/rules/planr-ceo-review/references/operate-advisor-contract.md +2 -7
  78. package/lib/host-packages/cursor/openplanr/rules/planr-chair-review/references/note-checklist.md +131 -0
  79. package/lib/host-packages/cursor/openplanr/rules/planr-chair-review.mdc +2 -7
  80. package/lib/host-packages/cursor/openplanr/rules/planr-challenger-review/references/note-checklist.md +131 -0
  81. package/lib/host-packages/cursor/openplanr/rules/planr-challenger-review.mdc +3 -7
  82. package/lib/host-packages/cursor/openplanr/rules/planr-cmo-review/references/note-checklist.md +131 -0
  83. package/lib/host-packages/cursor/openplanr/rules/planr-cmo-review/references/operate-advisor-contract.md +2 -7
  84. package/lib/host-packages/cursor/openplanr/rules/planr-coo-review/references/note-checklist.md +131 -0
  85. package/lib/host-packages/cursor/openplanr/rules/planr-coo-review/references/operate-advisor-contract.md +2 -7
  86. package/lib/host-packages/cursor/openplanr/rules/planr-cpo-review/references/note-checklist.md +131 -0
  87. package/lib/host-packages/cursor/openplanr/rules/planr-cpo-review/references/operate-advisor-contract.md +2 -7
  88. package/lib/host-packages/cursor/openplanr/rules/planr-cto-review/references/note-checklist.md +131 -0
  89. package/lib/host-packages/cursor/openplanr/rules/planr-cto-review/references/operate-advisor-contract.md +2 -7
  90. package/lib/host-packages/cursor/openplanr/rules/planr-investigate/references/backlog-filing.md +102 -0
  91. package/lib/host-packages/cursor/openplanr/rules/planr-investigate/references/findings.md +8 -16
  92. package/lib/host-packages/cursor/openplanr/rules/planr-investigate.mdc +2 -3
  93. package/lib/host-packages/cursor/openplanr/rules/planr-operate/references/note-checklist.md +131 -0
  94. package/lib/host-packages/cursor/openplanr/rules/planr-operate/references/return-contract.md +10 -0
  95. package/lib/host-packages/cursor/openplanr/rules/planr-operate.mdc +73 -84
  96. package/lib/host-packages/cursor/openplanr/rules/planr-plan/references/planning-ids.md +53 -0
  97. package/lib/host-packages/cursor/openplanr/rules/planr-plan/references/return-contract.md +10 -0
  98. package/lib/host-packages/cursor/openplanr/rules/planr-plan-review/references/return-contract.md +10 -0
  99. package/lib/host-packages/cursor/openplanr/rules/planr-plan-review.mdc +6 -6
  100. package/lib/host-packages/cursor/openplanr/rules/planr-plan.mdc +16 -17
  101. package/lib/host-packages/cursor/openplanr/rules/planr-release/references/cadence.md +10 -0
  102. package/lib/host-packages/cursor/openplanr/rules/planr-release/references/release-notes.md +1 -1
  103. package/lib/host-packages/cursor/openplanr/rules/planr-release/references/return-contract.md +10 -0
  104. package/lib/host-packages/cursor/openplanr/rules/planr-release/references/schemes.md +4 -2
  105. package/lib/host-packages/cursor/openplanr/rules/planr-release.mdc +40 -139
  106. package/lib/host-packages/cursor/openplanr/rules/planr-ship/references/backlog-filing.md +102 -0
  107. package/lib/host-packages/cursor/openplanr/rules/planr-ship/references/findings.md +8 -16
  108. package/lib/host-packages/cursor/openplanr/rules/planr-ship/references/return-contract.md +10 -0
  109. package/lib/host-packages/cursor/openplanr/rules/planr-ship.mdc +37 -24
  110. package/lib/host-packages/cursor/openplanr/rules/planr-spec/references/return-contract.md +10 -0
  111. package/lib/host-packages/cursor/openplanr/rules/planr-spec.mdc +9 -9
  112. package/lib/host-packages/openai/.claude-plugin/marketplace.json +2 -2
  113. package/lib/host-packages/openai/openplanr/.codex-plugin/plugin.json +1 -1
  114. package/lib/host-packages/openai/openplanr/.openplanr-content.json +89 -89
  115. package/lib/host-packages/openai/openplanr/skills/ceo-review/openplanr.skill.json +4 -4
  116. package/lib/host-packages/openai/openplanr/skills/ceo-review/references/note-checklist.md +131 -0
  117. package/lib/host-packages/openai/openplanr/skills/ceo-review/references/operate-advisor-contract.md +2 -7
  118. package/lib/host-packages/openai/openplanr/skills/chair-review/SKILL.md +2 -7
  119. package/lib/host-packages/openai/openplanr/skills/chair-review/openplanr.skill.json +4 -4
  120. package/lib/host-packages/openai/openplanr/skills/chair-review/references/note-checklist.md +131 -0
  121. package/lib/host-packages/openai/openplanr/skills/challenger-review/SKILL.md +3 -7
  122. package/lib/host-packages/openai/openplanr/skills/challenger-review/openplanr.skill.json +4 -4
  123. package/lib/host-packages/openai/openplanr/skills/challenger-review/references/note-checklist.md +131 -0
  124. package/lib/host-packages/openai/openplanr/skills/cmo-review/openplanr.skill.json +4 -4
  125. package/lib/host-packages/openai/openplanr/skills/cmo-review/references/note-checklist.md +131 -0
  126. package/lib/host-packages/openai/openplanr/skills/cmo-review/references/operate-advisor-contract.md +2 -7
  127. package/lib/host-packages/openai/openplanr/skills/coo-review/openplanr.skill.json +4 -4
  128. package/lib/host-packages/openai/openplanr/skills/coo-review/references/note-checklist.md +131 -0
  129. package/lib/host-packages/openai/openplanr/skills/coo-review/references/operate-advisor-contract.md +2 -7
  130. package/lib/host-packages/openai/openplanr/skills/cpo-review/openplanr.skill.json +4 -4
  131. package/lib/host-packages/openai/openplanr/skills/cpo-review/references/note-checklist.md +131 -0
  132. package/lib/host-packages/openai/openplanr/skills/cpo-review/references/operate-advisor-contract.md +2 -7
  133. package/lib/host-packages/openai/openplanr/skills/cto-review/openplanr.skill.json +4 -4
  134. package/lib/host-packages/openai/openplanr/skills/cto-review/references/note-checklist.md +131 -0
  135. package/lib/host-packages/openai/openplanr/skills/cto-review/references/operate-advisor-contract.md +2 -7
  136. package/lib/host-packages/openai/openplanr/skills/investigate/SKILL.md +2 -3
  137. package/lib/host-packages/openai/openplanr/skills/investigate/openplanr.skill.json +4 -4
  138. package/lib/host-packages/openai/openplanr/skills/investigate/references/backlog-filing.md +102 -0
  139. package/lib/host-packages/openai/openplanr/skills/investigate/references/findings.md +8 -16
  140. package/lib/host-packages/openai/openplanr/skills/operate/SKILL.md +73 -84
  141. package/lib/host-packages/openai/openplanr/skills/operate/openplanr.skill.json +15 -4
  142. package/lib/host-packages/openai/openplanr/skills/operate/references/note-checklist.md +131 -0
  143. package/lib/host-packages/openai/openplanr/skills/operate/references/return-contract.md +10 -0
  144. package/lib/host-packages/openai/openplanr/skills/plan/SKILL.md +16 -17
  145. package/lib/host-packages/openai/openplanr/skills/plan/openplanr.skill.json +15 -4
  146. package/lib/host-packages/openai/openplanr/skills/plan/references/planning-ids.md +53 -0
  147. package/lib/host-packages/openai/openplanr/skills/plan/references/return-contract.md +10 -0
  148. package/lib/host-packages/openai/openplanr/skills/plan-review/SKILL.md +6 -6
  149. package/lib/host-packages/openai/openplanr/skills/plan-review/openplanr.skill.json +12 -1
  150. package/lib/host-packages/openai/openplanr/skills/plan-review/references/return-contract.md +10 -0
  151. package/lib/host-packages/openai/openplanr/skills/release/SKILL.md +40 -139
  152. package/lib/host-packages/openai/openplanr/skills/release/openplanr.skill.json +4 -4
  153. package/lib/host-packages/openai/openplanr/skills/release/references/cadence.md +10 -0
  154. package/lib/host-packages/openai/openplanr/skills/release/references/release-notes.md +1 -1
  155. package/lib/host-packages/openai/openplanr/skills/release/references/return-contract.md +10 -0
  156. package/lib/host-packages/openai/openplanr/skills/release/references/schemes.md +4 -2
  157. package/lib/host-packages/openai/openplanr/skills/ship/SKILL.md +37 -24
  158. package/lib/host-packages/openai/openplanr/skills/ship/openplanr.skill.json +9 -9
  159. package/lib/host-packages/openai/openplanr/skills/ship/references/backlog-filing.md +102 -0
  160. package/lib/host-packages/openai/openplanr/skills/ship/references/findings.md +8 -16
  161. package/lib/host-packages/openai/openplanr/skills/ship/references/return-contract.md +10 -0
  162. package/lib/host-packages/openai/openplanr/skills/spec/SKILL.md +9 -9
  163. package/lib/host-packages/openai/openplanr/skills/spec/openplanr.skill.json +12 -1
  164. package/lib/host-packages/openai/openplanr/skills/spec/references/return-contract.md +10 -0
  165. package/package.json +1 -1
  166. package/lib/host-packages/claude/openplanr/.claude-plugin/icon.svg +0 -11
  167. package/lib/host-packages/claude/openplanr/runtime/operate/scripts/errors.mjs +0 -8
  168. package/lib/host-packages/claude/openplanr/runtime/operate/scripts/operate-review-contract.mjs +0 -428
  169. package/lib/host-packages/claude/openplanr/runtime/operate/scripts/operate-review-note.mjs +0 -686
  170. package/lib/host-packages/claude/openplanr/runtime/operate/scripts/validate-note.mjs +0 -39
  171. package/lib/host-packages/claude/openplanr/skills/ceo-review/scripts/validate-note.mjs +0 -12
  172. package/lib/host-packages/claude/openplanr/skills/chair-review/scripts/validate-note.mjs +0 -12
  173. package/lib/host-packages/claude/openplanr/skills/challenger-review/scripts/validate-note.mjs +0 -12
  174. package/lib/host-packages/claude/openplanr/skills/cmo-review/scripts/validate-note.mjs +0 -12
  175. package/lib/host-packages/claude/openplanr/skills/coo-review/scripts/validate-note.mjs +0 -12
  176. package/lib/host-packages/claude/openplanr/skills/cpo-review/scripts/validate-note.mjs +0 -12
  177. package/lib/host-packages/claude/openplanr/skills/cto-review/scripts/validate-note.mjs +0 -12
  178. package/lib/host-packages/claude/openplanr/skills/investigate/scripts/backlog-item.mjs +0 -339
  179. package/lib/host-packages/claude/openplanr/skills/operate/scripts/validate-note.mjs +0 -12
  180. package/lib/host-packages/claude/openplanr/skills/plan/scripts/planning-ids.mjs +0 -166
  181. package/lib/host-packages/claude/openplanr/skills/release/scripts/collect_changes.sh +0 -85
  182. package/lib/host-packages/claude/openplanr/skills/ship/scripts/backlog-item.mjs +0 -339
  183. package/lib/host-packages/claude/openplanr/skills/ship/scripts/discover-verification.mjs +0 -108
  184. package/lib/host-packages/cursor/openplanr/rules/planr-ceo-review/scripts/validate-note.mjs +0 -12
  185. package/lib/host-packages/cursor/openplanr/rules/planr-chair-review/scripts/validate-note.mjs +0 -12
  186. package/lib/host-packages/cursor/openplanr/rules/planr-challenger-review/scripts/validate-note.mjs +0 -12
  187. package/lib/host-packages/cursor/openplanr/rules/planr-cmo-review/scripts/validate-note.mjs +0 -12
  188. package/lib/host-packages/cursor/openplanr/rules/planr-coo-review/scripts/validate-note.mjs +0 -12
  189. package/lib/host-packages/cursor/openplanr/rules/planr-cpo-review/scripts/validate-note.mjs +0 -12
  190. package/lib/host-packages/cursor/openplanr/rules/planr-cto-review/scripts/validate-note.mjs +0 -12
  191. package/lib/host-packages/cursor/openplanr/rules/planr-investigate/scripts/backlog-item.mjs +0 -339
  192. package/lib/host-packages/cursor/openplanr/rules/planr-operate/scripts/validate-note.mjs +0 -12
  193. package/lib/host-packages/cursor/openplanr/rules/planr-plan/scripts/planning-ids.mjs +0 -166
  194. package/lib/host-packages/cursor/openplanr/rules/planr-release/scripts/collect_changes.sh +0 -85
  195. package/lib/host-packages/cursor/openplanr/rules/planr-ship/scripts/backlog-item.mjs +0 -339
  196. package/lib/host-packages/cursor/openplanr/rules/planr-ship/scripts/discover-verification.mjs +0 -108
  197. package/lib/host-packages/cursor/openplanr/runtime/operate/scripts/errors.mjs +0 -8
  198. package/lib/host-packages/cursor/openplanr/runtime/operate/scripts/operate-review-contract.mjs +0 -428
  199. package/lib/host-packages/cursor/openplanr/runtime/operate/scripts/operate-review-note.mjs +0 -686
  200. package/lib/host-packages/cursor/openplanr/runtime/operate/scripts/validate-note.mjs +0 -39
  201. package/lib/host-packages/openai/openplanr/runtime/operate/scripts/errors.mjs +0 -8
  202. package/lib/host-packages/openai/openplanr/runtime/operate/scripts/operate-review-contract.mjs +0 -428
  203. package/lib/host-packages/openai/openplanr/runtime/operate/scripts/operate-review-note.mjs +0 -686
  204. package/lib/host-packages/openai/openplanr/runtime/operate/scripts/validate-note.mjs +0 -39
  205. package/lib/host-packages/openai/openplanr/skills/ceo-review/scripts/validate-note.mjs +0 -12
  206. package/lib/host-packages/openai/openplanr/skills/chair-review/scripts/validate-note.mjs +0 -12
  207. package/lib/host-packages/openai/openplanr/skills/challenger-review/scripts/validate-note.mjs +0 -12
  208. package/lib/host-packages/openai/openplanr/skills/cmo-review/scripts/validate-note.mjs +0 -12
  209. package/lib/host-packages/openai/openplanr/skills/coo-review/scripts/validate-note.mjs +0 -12
  210. package/lib/host-packages/openai/openplanr/skills/cpo-review/scripts/validate-note.mjs +0 -12
  211. package/lib/host-packages/openai/openplanr/skills/cto-review/scripts/validate-note.mjs +0 -12
  212. package/lib/host-packages/openai/openplanr/skills/investigate/scripts/backlog-item.mjs +0 -339
  213. package/lib/host-packages/openai/openplanr/skills/operate/scripts/validate-note.mjs +0 -12
  214. package/lib/host-packages/openai/openplanr/skills/plan/scripts/planning-ids.mjs +0 -166
  215. package/lib/host-packages/openai/openplanr/skills/release/scripts/collect_changes.sh +0 -85
  216. package/lib/host-packages/openai/openplanr/skills/ship/scripts/backlog-item.mjs +0 -339
  217. package/lib/host-packages/openai/openplanr/skills/ship/scripts/discover-verification.mjs +0 -108
@@ -31,9 +31,8 @@ Merge duplicates within the run. Sort by severity, highest first, and number fro
31
31
 
32
32
  ## Check what is already tracked
33
33
 
34
- Before showing findings, list open backlog items with the backlog helper
35
- linked from SKILL.md, resolved relative to that file: `node <helper> list
36
- --project <repository-root> --open`. A finding about the same problem as an open item,
34
+ Before showing findings, list open backlog items as
35
+ [backlog filing](backlog-filing.md) describes. A finding about the same problem as an open item,
37
36
  normally the same evidence file and an equivalent title, is `tracked`. Never file
38
37
  it again and never edit the existing item.
39
38
 
@@ -52,26 +51,19 @@ rule that applies. File only what it allows.
52
51
  example a print or exec mode), another skill or a delegate runner started this
53
52
  run, or the user said not to ask. Read `findings.unattended` in
54
53
  `.planr/config.json`. Only `file` files every untracked finding. With
55
- `report`, or no setting, do not run `add` at all: mark the findings `reported`.
54
+ `report`, or no setting, do not file at all: mark the findings `reported`.
56
55
 
57
56
  Never ask per finding, never ask mid-run, and never file or drop a finding
58
57
  silently.
59
58
 
60
59
  ## File
61
60
 
62
- Send each item as one JSON object (`title`, `priority`, `tags`, `description`)
63
- on stdin. Never pass `acceptanceCriteria`.
61
+ File each item from its `title`, `priority`, `tags` and `description` as
62
+ [backlog filing](backlog-filing.md) describes. Never add acceptance criteria.
63
+ When the `openplanr` command files it and the result says
64
+ `templateOverrideIgnored`, say the default format was used.
64
65
 
65
- - When an `openplanr` CLI resolves (the project's `node_modules/.bin`, then
66
- `PATH`; never `npx`): `openplanr --project-dir <repository-root> backlog add
67
- --data - --json`.
68
- - Otherwise: `node <helper> add --project <repository-root> --data -`. Its
69
- result can carry `cliHint`; end the result with that line, word for word,
70
- once. Install only if the user says yes then, by running exactly the command in
71
- the line. If the result says `templateOverrideIgnored`, say the default format
72
- was used.
73
-
74
- If filing fails, report the command and its error, and leave the finding
66
+ If filing fails, report the step and its error, and leave the finding
75
67
  `reported`.
76
68
 
77
69
  ## Report
@@ -0,0 +1,10 @@
1
+ # Return rules
2
+
3
+ Shared by Spec, Plan, Plan Review, Ship, Operate and Release. Each skill lists its own fields.
4
+
5
+ - Lead with the outcome: what is ready, prepared or released, then what is partial or blocked.
6
+ - Link durable artifacts by purpose. Keep inventories, command output and transcripts in their files.
7
+ - Report only checks you ran, with their result. Name each check you could not run and what stays unverified.
8
+ - Omit empty fields. Give each open issue its impact and the smallest recovery action.
9
+ - The summary is a human view, not a schema. Different wording never calls for a rerun or a correction pass.
10
+ - Keep any machine-readable field a skill defines unchanged.
@@ -12,10 +12,10 @@ another model process.
12
12
 
13
13
  ## Ground the specification
14
14
 
15
- Read the request, repository instructions, ADRs, product documentation,
16
- existing planning artifacts, relevant implementation code and tests, stack
17
- configuration, design inputs, database context, and current behavior. Infer
18
- facts the repository already answers.
15
+ Read the files the request names, plus `AGENTS.md` and `CLAUDE.md` when tracked,
16
+ in one batch. Expand only for a missing contract, a dependency or a contradiction,
17
+ and stop when each claim has evidence or a named gap. Infer facts the repository
18
+ already answers.
19
19
 
20
20
  When a missing decision materially changes scope or observable behavior, use
21
21
  the host's structured question interface. Ask no more than three short,
@@ -45,9 +45,10 @@ out-of-scope boundaries. Record concrete repository paths and verification
45
45
  signals when they are known. Keep unresolved questions out of the saved
46
46
  contract when a repository-backed default exists.
47
47
 
48
- Validate the completed artifact before returning. If a helper is unavailable,
49
- perform the same deterministic checks directly; never fall back to a
50
- model-backed CLI.
48
+ Validate the completed artifact before returning: run `openplanr spec validate <SPEC-ID>`
49
+ when `command -v openplanr` succeeds, otherwise check the path, frontmatter,
50
+ headings and acceptance IDs against the specification contract directly. Never
51
+ fall back to a model-backed CLI.
51
52
 
52
53
  ## Return
53
54
 
@@ -62,5 +63,4 @@ If the specification is partial or blocked, name the missing decision and its im
62
63
  none remains.
63
64
  - **Next:** a copy-ready host-native `planr-plan` invocation for the saved spec.
64
65
 
65
- The summary is a human view of the specification, not another schema or a reason
66
- to rerun a completed operation for different wording.
66
+ Follow [the shared return rules](references/return-contract.md).
@@ -3,7 +3,7 @@
3
3
  "schemaVersion": "1.0.0",
4
4
  "protocolVersion": "1.8.0",
5
5
  "skillId": "planr-spec",
6
- "skillVersion": "1.0.2",
6
+ "skillVersion": "1.1.0",
7
7
  "entrypoint": "SKILL.md",
8
8
  "hosts": [
9
9
  "claude-code",
@@ -32,6 +32,17 @@
32
32
  "cursor"
33
33
  ],
34
34
  "executable": false
35
+ },
36
+ {
37
+ "path": "references/return-contract.md",
38
+ "kind": "reference",
39
+ "hosts": [
40
+ "claude-code",
41
+ "codex",
42
+ "chatgpt",
43
+ "cursor"
44
+ ],
45
+ "executable": false
35
46
  }
36
47
  ]
37
48
  }
@@ -0,0 +1,10 @@
1
+ # Return rules
2
+
3
+ Shared by Spec, Plan, Plan Review, Ship, Operate and Release. Each skill lists its own fields.
4
+
5
+ - Lead with the outcome: what is ready, prepared or released, then what is partial or blocked.
6
+ - Link durable artifacts by purpose. Keep inventories, command output and transcripts in their files.
7
+ - Report only checks you ran, with their result. Name each check you could not run and what stays unverified.
8
+ - Omit empty fields. Give each open issue its impact and the smallest recovery action.
9
+ - The summary is a human view, not a schema. Different wording never calls for a rerun or a correction pass.
10
+ - Keep any machine-readable field a skill defines unchanged.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "openplanr",
3
- "version": "3.5.0",
3
+ "version": "3.6.0",
4
4
  "description": "The openplanr CLI: validates plans in your repo, lists the checks a change needs, renders diagrams, installs 25+ skills into Claude Code, Codex and Cursor, and syncs GitHub Issues and Linear. No model calls.",
5
5
  "type": "module",
6
6
  "main": "./dist/cli/index.js",
@@ -1,11 +0,0 @@
1
- <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 160 160" role="img" aria-labelledby="title desc">
2
- <title id="title">OpenPlanr application icon</title>
3
- <desc id="desc">The Open Decision mark on a rounded near-black tile.</desc>
4
- <rect width="160" height="160" rx="35" fill="#08080C"/>
5
- <g transform="translate(24 24) scale(.7)">
6
- <g transform="rotate(-45 80 80)">
7
- <path d="M125 50A52 52 0 1 0 125 110" fill="none" stroke="#5EEAD4" stroke-width="10" stroke-linecap="round" stroke-linejoin="round"/>
8
- <rect x="127" y="71" width="18" height="18" rx="3" fill="#5EEAD4"/>
9
- </g>
10
- </g>
11
- </svg>
@@ -1,8 +0,0 @@
1
- export class SkillRuntimeError extends Error {
2
- constructor(code, message, details = {}) {
3
- super(message);
4
- this.name = 'SkillRuntimeError';
5
- this.code = code;
6
- this.details = details;
7
- }
8
- }
@@ -1,428 +0,0 @@
1
- const deepFreeze = (value) => {
2
- if (value && typeof value === 'object' && !Object.isFrozen(value)) {
3
- for (const child of Object.values(value)) deepFreeze(child);
4
- Object.freeze(value);
5
- }
6
- return value;
7
- };
8
-
9
- /**
10
- * Historical Operate Markdown contract.
11
- *
12
- * This remains available only so notes written by released 1.x guidance can be
13
- * identified and read. Canonical skills must use the current v2 contract below.
14
- */
15
- export const OPERATE_REVIEW_NOTE_PROFILES_V1 = deepFreeze({
16
- advisor: {
17
- maxBytes: 16 * 1024,
18
- sections: [
19
- 'Findings',
20
- 'Recommended next move',
21
- 'Decision-changing gaps',
22
- 'Evidence index',
23
- 'Review coverage',
24
- 'Audit note',
25
- ],
26
- summaryFields: ['Signal', 'Bottom line'],
27
- summaryValues: {
28
- Signal: ['action', 'watch', 'insufficient evidence'],
29
- },
30
- item: {
31
- section: 'Findings',
32
- idPrefix: 'F',
33
- maxItems: 5,
34
- emptyText: 'No decision-relevant finding was established.',
35
- fields: [
36
- 'Priority',
37
- 'Status',
38
- 'Why it matters',
39
- 'Evidence',
40
- 'Confidence',
41
- 'Decision implication',
42
- ],
43
- fieldValues: {
44
- Priority: ['P0', 'P1', 'P2', 'unranked'],
45
- Status: ['observed', 'inferred'],
46
- },
47
- },
48
- sectionFields: {
49
- 'Recommended next move': [
50
- 'Recommendation',
51
- 'Proposed owner',
52
- 'First step',
53
- 'Expected result',
54
- 'Verification',
55
- 'Reversible / revisit when',
56
- 'Evidence',
57
- ],
58
- 'Review coverage': ['Questions answered', 'Questions not established', 'Evidence boundary'],
59
- },
60
- sectionEmptyStates: {
61
- 'Recommended next move': 'No recommendation from current evidence.',
62
- },
63
- sectionItemLimits: {
64
- 'Decision-changing gaps': 3,
65
- },
66
- },
67
- challenger: {
68
- maxBytes: 12 * 1024,
69
- sections: [
70
- 'Material exceptions',
71
- 'Decisions that still hold',
72
- 'Material dissent',
73
- 'Decision-changing gaps',
74
- 'Audit note',
75
- ],
76
- summaryFields: ['Verdict', 'Bottom line'],
77
- summaryValues: {
78
- Verdict: ['holds', 'holds with exceptions', 'not decision-ready'],
79
- },
80
- item: {
81
- section: 'Material exceptions',
82
- idPrefix: 'X',
83
- maxItems: 5,
84
- emptyText: 'No material exception found.',
85
- fields: ['Target', 'Type', 'Decision impact', 'Challenge', 'Evidence', 'Resolution'],
86
- fieldValues: {
87
- Type: [
88
- 'unsupported',
89
- 'contradicted',
90
- 'correlated reasoning',
91
- 'missing alternative',
92
- 'unpriced downside',
93
- 'overconfident',
94
- ],
95
- },
96
- },
97
- sectionFields: {
98
- 'Material dissent': ['Dissent', 'Resolution condition'],
99
- },
100
- sectionItemLimits: {
101
- 'Decision-changing gaps': 3,
102
- },
103
- },
104
- chair: {
105
- maxBytes: 24 * 1024,
106
- sections: [
107
- 'Decision queue',
108
- 'Action plan',
109
- 'Material risks and dissent',
110
- 'Decision-changing gaps',
111
- 'Review trail',
112
- 'Evidence index',
113
- 'Human gate',
114
- ],
115
- summaryFields: ['Overall signal', 'Executive call'],
116
- summaryValues: {
117
- 'Overall signal': ['act now', 'decide next', 'watch', 'insufficient evidence'],
118
- },
119
- item: {
120
- section: 'Decision queue',
121
- idPrefix: 'D',
122
- maxItems: 5,
123
- emptyText: 'No decision-ready proposal was established.',
124
- headingSuffixPattern: /^\[(?:P0|P1|P2|unranked)\]\s+\S/u,
125
- fields: [
126
- 'Recommendation',
127
- 'Why now',
128
- 'Owner',
129
- 'Confidence',
130
- 'Alternative',
131
- 'First step',
132
- 'Expected result',
133
- 'Verification',
134
- 'Dependencies',
135
- 'Reversible / revisit when',
136
- 'Evidence',
137
- 'Dissent',
138
- ],
139
- },
140
- sectionFields: {},
141
- sectionItemLimits: {
142
- 'Decision-changing gaps': 5,
143
- },
144
- },
145
- 'board-report': {
146
- maxBytes: 24 * 1024,
147
- sections: [
148
- 'Scope and custody',
149
- 'Executive call',
150
- 'Decision queue',
151
- 'Action plan',
152
- 'Material risks and dissent',
153
- 'Decision-changing gaps',
154
- 'Review trail',
155
- 'Human gate',
156
- ],
157
- summaryFields: [],
158
- item: {
159
- section: 'Decision queue',
160
- idPrefix: 'D',
161
- maxItems: 5,
162
- emptyText: 'No decision-ready proposal was established.',
163
- headingSuffixPattern: /^\[(?:P0|P1|P2|unranked)\]\s+\S/u,
164
- fields: [
165
- 'Recommendation',
166
- 'Why now',
167
- 'Owner',
168
- 'Confidence',
169
- 'Alternative',
170
- 'First step',
171
- 'Expected result',
172
- 'Verification',
173
- 'Dependencies',
174
- 'Reversible / revisit when',
175
- 'Evidence',
176
- 'Dissent',
177
- ],
178
- },
179
- sectionFields: {
180
- 'Scope and custody': [
181
- 'Subject',
182
- 'Evidence window',
183
- 'Pending decision',
184
- 'Cycle owner',
185
- 'Custody',
186
- ],
187
- },
188
- sectionItemLimits: {
189
- 'Decision-changing gaps': 5,
190
- },
191
- },
192
- });
193
-
194
- export const OPERATE_REVIEW_NOTE_PROFILES = deepFreeze({
195
- advisor: {
196
- maxBytes: 16 * 1024,
197
- sections: ['Findings', 'Recommended next move', 'Decision-changing gaps', 'Sources consulted'],
198
- summaryFields: ['Signal', 'Bottom line'],
199
- summaryValues: {
200
- Signal: ['action', 'watch', 'insufficient context'],
201
- },
202
- item: {
203
- section: 'Findings',
204
- idPrefix: 'F',
205
- maxItems: 5,
206
- emptyText: 'No decision-relevant finding was established.',
207
- fields: ['Priority', 'Status', 'Why it matters', 'Sources', 'Confidence', 'Decision impact'],
208
- fieldValues: {
209
- Priority: ['P0', 'P1', 'P2', 'unranked'],
210
- Status: ['observed', 'inferred'],
211
- },
212
- },
213
- sectionFields: {
214
- 'Recommended next move': [
215
- 'Recommendation',
216
- 'Suggested owner',
217
- 'First step',
218
- 'Expected result',
219
- 'Check',
220
- 'Revisit when',
221
- ],
222
- },
223
- sectionEmptyStates: {
224
- 'Recommended next move': 'No recommendation from current context.',
225
- },
226
- sectionItemLimits: {
227
- 'Decision-changing gaps': 3,
228
- },
229
- },
230
- challenger: {
231
- maxBytes: 12 * 1024,
232
- sections: [
233
- 'Material exceptions',
234
- 'Decisions that still hold',
235
- 'Risks and dissent',
236
- 'Decision-changing gaps',
237
- ],
238
- summaryFields: ['Verdict', 'Bottom line'],
239
- summaryValues: {
240
- Verdict: ['holds', 'holds with exceptions', 'not decision-ready'],
241
- },
242
- item: {
243
- section: 'Material exceptions',
244
- idPrefix: 'X',
245
- maxItems: 5,
246
- emptyText: 'No material exception found.',
247
- fields: ['Target', 'Type', 'Decision impact', 'Challenge', 'Sources', 'Resolution'],
248
- fieldValues: {
249
- Type: [
250
- 'unsupported',
251
- 'contradicted',
252
- 'correlated reasoning',
253
- 'missing alternative',
254
- 'unpriced downside',
255
- 'overconfident',
256
- ],
257
- },
258
- },
259
- sectionFields: {
260
- 'Risks and dissent': ['Dissent', 'Resolution condition'],
261
- },
262
- sectionItemLimits: {
263
- 'Decision-changing gaps': 3,
264
- },
265
- },
266
- chair: {
267
- maxBytes: 24 * 1024,
268
- sections: [
269
- 'Decision queue',
270
- 'Action plan',
271
- 'Risks and dissent',
272
- 'Decision-changing gaps',
273
- 'Review coverage',
274
- ],
275
- summaryFields: ['Overall signal', 'Executive call'],
276
- summaryValues: {
277
- 'Overall signal': ['act now', 'decide next', 'watch', 'insufficient context'],
278
- },
279
- item: {
280
- section: 'Decision queue',
281
- idPrefix: 'D',
282
- maxItems: 5,
283
- emptyText: 'No decision-ready proposal was established.',
284
- headingSuffixPattern: /^\[(?:P0|P1|P2|unranked)\]\s+\S/u,
285
- fields: [
286
- 'Recommendation',
287
- 'Why now',
288
- 'Suggested owner',
289
- 'Confidence',
290
- 'Alternative',
291
- 'First step',
292
- 'Expected result',
293
- 'Check',
294
- 'Dependencies',
295
- 'Revisit when',
296
- 'Sources',
297
- 'Dissent',
298
- ],
299
- },
300
- sectionFields: {},
301
- sectionItemLimits: {
302
- 'Decision-changing gaps': 5,
303
- },
304
- },
305
- 'board-report': {
306
- maxBytes: 24 * 1024,
307
- sections: [
308
- 'Scope',
309
- 'Executive summary',
310
- 'Decision queue',
311
- 'Action plan',
312
- 'Risks and dissent',
313
- 'Decision-changing gaps',
314
- 'Review coverage',
315
- 'Issues',
316
- ],
317
- summaryFields: [],
318
- item: {
319
- section: 'Decision queue',
320
- idPrefix: 'D',
321
- maxItems: 5,
322
- emptyText: 'No decision-ready proposal was established.',
323
- headingSuffixPattern: /^\[(?:P0|P1|P2|unranked)\]\s+\S/u,
324
- fields: [
325
- 'Recommendation',
326
- 'Why now',
327
- 'Suggested owner',
328
- 'Confidence',
329
- 'Alternative',
330
- 'First step',
331
- 'Expected result',
332
- 'Check',
333
- 'Dependencies',
334
- 'Revisit when',
335
- 'Sources',
336
- 'Dissent',
337
- ],
338
- },
339
- sectionFields: {
340
- Scope: ['Subject', 'Window', 'Requested decision', 'Custody'],
341
- },
342
- sectionItemLimits: {
343
- 'Decision-changing gaps': 5,
344
- },
345
- },
346
- });
347
-
348
- export const OPERATE_REVIEW_NOTE_PROFILES_V2 = OPERATE_REVIEW_NOTE_PROFILES;
349
- export const OPERATE_REVIEW_CONTRACT_VERSION = '2.0.0';
350
- export const OPERATE_REVIEW_CONTRACT_VERSIONS = Object.freeze(['1.0.0', '2.0.0']);
351
-
352
- /**
353
- * Additive human-note rubric overlay for Operate's five executive advisors.
354
- *
355
- * The closed Operate 2.0 machine registry remains the runtime contract. These
356
- * questions govern concise Markdown projections produced by canonical skills.
357
- */
358
- export const OPERATE_ADVISOR_REVIEW_RUBRICS = deepFreeze({
359
- 'strategy-finance': {
360
- skillId: 'planr-ceo-review',
361
- requiredQuestions: [
362
- 'What current evidence changes or constrains company direction?',
363
- 'Which objectives appear mis-resourced relative to evidenced expected value?',
364
- 'What runway, margin, or cost consequence is established, and what remains unknown?',
365
- 'Which decisions carry an evidenced cost of delay, and which remain unranked?',
366
- ],
367
- },
368
- 'technology-risk': {
369
- skillId: 'planr-cto-review',
370
- requiredQuestions: [
371
- 'Which technical constraints now block a stated objective?',
372
- 'Which technical risks are decision-relevant, and which remain unranked?',
373
- 'Which architectural decision, if any, is being made implicitly by in-flight work?',
374
- 'How reversible are the evidenced high-impact changes?',
375
- ],
376
- },
377
- 'product-activation': {
378
- skillId: 'planr-cpo-review',
379
- requiredQuestions: [
380
- 'Where does current evidence show users failing to reach value?',
381
- 'Which product bets remain unvalidated, and what bounded next test is supported?',
382
- 'Is committed scope ordered by evidenced value and risk?',
383
- 'Which committed scope, if any, should be cut to protect the activation path?',
384
- 'Are acceptance criteria testable and tied to a customer or product outcome?',
385
- ],
386
- },
387
- 'growth-market': {
388
- skillId: 'planr-cmo-review',
389
- requiredQuestions: [
390
- 'What current evidence changes or constrains demand and positioning?',
391
- 'Which acquisition-channel evidence is strong, weak, or absent?',
392
- 'Which explicit market or positioning claim, if any, is unsupported?',
393
- 'Which growth loop is evidenced as repeatable rather than merely proposed?',
394
- ],
395
- },
396
- 'operations-customer': {
397
- skillId: 'planr-coo-review',
398
- requiredQuestions: [
399
- 'Can the organization deliver current commitments at evidenced capacity?',
400
- 'Where, if anywhere, is customer health degrading, and what operational cause is evidenced?',
401
- 'Which process, if any, is a single point of failure or single-person dependency?',
402
- 'Which operational commitment, if any, should be renegotiated before it is missed?',
403
- ],
404
- },
405
- });
406
-
407
- export const OPERATE_REVIEW_CONTRACT_V1 = deepFreeze({
408
- kind: 'operate-human-review-contract',
409
- schemaVersion: '1.0.0',
410
- protocolBaseline: { id: 'operate', version: '2.0.0' },
411
- profiles: OPERATE_REVIEW_NOTE_PROFILES_V1,
412
- advisorRubrics: OPERATE_ADVISOR_REVIEW_RUBRICS,
413
- });
414
-
415
- export const OPERATE_REVIEW_CONTRACT_V2 = deepFreeze({
416
- kind: 'operate-review-quality-contract',
417
- schemaVersion: '2.0.0',
418
- protocolBaseline: { id: 'operate', version: '2.0.0' },
419
- profiles: OPERATE_REVIEW_NOTE_PROFILES,
420
- advisorRubrics: OPERATE_ADVISOR_REVIEW_RUBRICS,
421
- });
422
-
423
- export const OPERATE_REVIEW_CONTRACTS = deepFreeze({
424
- '1.0.0': OPERATE_REVIEW_CONTRACT_V1,
425
- '2.0.0': OPERATE_REVIEW_CONTRACT_V2,
426
- });
427
-
428
- export const OPERATE_REVIEW_CONTRACT = OPERATE_REVIEW_CONTRACT_V2;