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
@@ -0,0 +1,131 @@
1
+ # Operate note checklist
2
+
3
+ Check a written Operate note line by line before returning it. Each item names the diagnostic
4
+ code `openplanr operate validate-note` reports for the same problem. Fix what you can; report each
5
+ item that stays unresolved as a structural issue, with its code.
6
+
7
+ This checklist is the check. Never run `npx`, install or download anything, or search the
8
+ filesystem for a validator or the CLI. Run `openplanr operate validate-note <note> --profile
9
+ <profile> --contract-version 2.0.0` only if `command -v openplanr` succeeds, and treat its
10
+ diagnostics the same way.
11
+
12
+ Profiles: `advisor` (CEO, CTO, CPO, CMO and COO reviews), `challenger`, `chair` and
13
+ `board-report`. Notes written now use contract 2.0.0.
14
+
15
+ ## Every profile
16
+
17
+ - [ ] The profile is one of the four above (`E_OPERATE_REVIEW_PROFILE_INVALID`).
18
+ - [ ] The preamble, before the first `##` heading, holds at most one contract line, written
19
+ `> **Contract:** …` or `- **Contract:** …`
20
+ (`E_OPERATE_REVIEW_CONTRACT_DECLARATION_DUPLICATE`). A note with no contract line passes.
21
+ Only a contract line that is present is checked: its value must be exactly
22
+ `operate-review-quality-contract@2.0.0` (`E_OPERATE_REVIEW_CONTRACT_DECLARATION_INVALID`
23
+ for an unsupported kind or version, `E_OPERATE_REVIEW_CONTRACT_VERSION_INVALID`,
24
+ `E_OPERATE_REVIEW_CONTRACT_VERSION_MISMATCH`).
25
+ - [ ] The note has exactly one level-one `#` title (`E_OPERATE_REVIEW_TITLE_MISSING`,
26
+ `E_OPERATE_REVIEW_TITLE_DUPLICATE`).
27
+ - [ ] The note fits its size limit in UTF-8 bytes: advisor 16 KiB, challenger 12 KiB, chair and
28
+ board-report 24 KiB (`E_OPERATE_REVIEW_SIZE_LIMIT`).
29
+ - [ ] Every required `##` section for the profile is present (`E_OPERATE_REVIEW_SECTION_MISSING`)
30
+ and appears once (`E_OPERATE_REVIEW_SECTION_DUPLICATE`); there is no other `##` section
31
+ (`E_OPERATE_REVIEW_SECTION_UNEXPECTED`); and the sections follow the order listed below
32
+ (`E_OPERATE_REVIEW_SECTION_ORDER`).
33
+ - [ ] Check section items, section fields and item fields only in sections that are present. A
34
+ missing section is reported once, as `E_OPERATE_REVIEW_SECTION_MISSING`, and yields no
35
+ field or item code for what it would have held. The preamble fields are always checked.
36
+ - [ ] Each required field is written as `- **Name:** value` or `> **Name:** value`, appears once
37
+ in its scope (`E_OPERATE_REVIEW_FIELD_DUPLICATE`), and holds a real value, not empty, `...`,
38
+ `TBD`, `TODO` or a `<placeholder>` (`E_OPERATE_REVIEW_FIELD_MISSING`).
39
+ - [ ] A field with a fixed value list uses one of the listed values exactly
40
+ (`E_OPERATE_REVIEW_FIELD_VALUE_INVALID`).
41
+ - [ ] The item section holds at least one item or its exact empty-state sentence
42
+ (`E_OPERATE_REVIEW_ITEM_OR_EMPTY_STATE_MISSING`), at most five items
43
+ (`E_OPERATE_REVIEW_ITEM_LIMIT`), headed `### <prefix><n> — <title>` and numbered 1, 2, 3
44
+ with no gaps or repeats (`E_OPERATE_REVIEW_ITEM_SEQUENCE`).
45
+ - [ ] `Decision-changing gaps` is `None.` or a list within its limit (advisor and challenger 3,
46
+ chair and board-report 5) counted as `- ` lines (`E_OPERATE_REVIEW_SECTION_ITEM_LIMIT`).
47
+
48
+ ## advisor
49
+
50
+ - [ ] Preamble fields: `Signal` (`action`, `watch` or `insufficient context`) and `Bottom line`.
51
+ - [ ] Sections: `Findings`, `Recommended next move`, `Decision-changing gaps`,
52
+ `Sources consulted`.
53
+ - [ ] Items `F1`…`F5` under `Findings`, or `No decision-relevant finding was established.` Each
54
+ has `Priority` (`P0`, `P1`, `P2` or `unranked`), `Status` (`observed` or `inferred`),
55
+ `Why it matters`, `Sources`, `Confidence` and `Decision impact`.
56
+ - [ ] `Recommended next move` is exactly `No recommendation from current context.` or has
57
+ `Recommendation`, `Suggested owner`, `First step`, `Expected result`, `Check` and
58
+ `Revisit when`.
59
+
60
+ ## challenger
61
+
62
+ - [ ] Preamble fields: `Verdict` (`holds`, `holds with exceptions` or `not decision-ready`) and
63
+ `Bottom line`.
64
+ - [ ] Sections: `Material exceptions`, `Decisions that still hold`, `Risks and dissent`,
65
+ `Decision-changing gaps`.
66
+ - [ ] Items `X1`…`X5` under `Material exceptions`, or `No material exception found.` Each has
67
+ `Target`, `Type` (`unsupported`, `contradicted`, `correlated reasoning`,
68
+ `missing alternative`, `unpriced downside` or `overconfident`), `Decision impact`,
69
+ `Challenge`, `Sources` and `Resolution`.
70
+ - [ ] `Risks and dissent` has `Dissent` and `Resolution condition`.
71
+
72
+ ## chair
73
+
74
+ - [ ] Preamble fields: `Overall signal` (`act now`, `decide next`, `watch` or
75
+ `insufficient context`) and `Executive call`.
76
+ - [ ] Sections: `Decision queue`, `Action plan`, `Risks and dissent`, `Decision-changing gaps`,
77
+ `Review coverage`.
78
+ - [ ] The decision queue and action plan items below.
79
+
80
+ ## board-report
81
+
82
+ - [ ] No preamble fields are required.
83
+ - [ ] Sections: `Scope`, `Executive summary`, `Decision queue`, `Action plan`,
84
+ `Risks and dissent`, `Decision-changing gaps`, `Review coverage`, `Issues`.
85
+ - [ ] `Scope` has `Subject`, `Window`, `Requested decision` and `Custody`.
86
+ - [ ] `Executive summary` is not empty (`E_OPERATE_REVIEW_SUMMARY_MISSING`); a missing
87
+ `Executive summary` section is reported both as `E_OPERATE_REVIEW_SECTION_MISSING` and as
88
+ `E_OPERATE_REVIEW_SUMMARY_MISSING`.
89
+ - [ ] Exceptions to "a missing section yields no other code": with at least one decision, a
90
+ missing `Action plan` (chair or board-report) also yields
91
+ `E_OPERATE_REVIEW_ACTION_PLAN_INVALID`; in a contract 1.0.0 note, a missing `Executive call`
92
+ also yields `E_OPERATE_REVIEW_EXECUTIVE_CALL_MISSING` and a missing `Human gate` also yields
93
+ `E_OPERATE_REVIEW_HUMAN_GATE_INCOMPLETE`.
94
+ - [ ] The decision queue and action plan items below.
95
+
96
+ ## Decision queue and action plan (chair and board-report)
97
+
98
+ - [ ] Items `D1`…`D5` under `Decision queue`, or `No decision-ready proposal was established.`
99
+ - [ ] Each heading carries a priority: `### D1 — [P0] <title>`, with `P0`, `P1`, `P2` or
100
+ `unranked` (`E_OPERATE_REVIEW_ITEM_HEADING_INVALID`).
101
+ - [ ] Each decision has `Recommendation`, `Why now`, `Suggested owner`, `Confidence`,
102
+ `Alternative`, `First step`, `Expected result`, `Check`, `Dependencies`, `Revisit when`,
103
+ `Sources` and `Dissent`.
104
+ - [ ] With at least one decision, `Action plan` has the table header
105
+ `| ID | Priority | Action | Suggested owner | First step | Success measure | Check | Depends on |`
106
+ and at least one `A<n>` row (`E_OPERATE_REVIEW_ACTION_PLAN_INVALID`).
107
+ - [ ] The action plan has at most seven rows (`E_OPERATE_REVIEW_ACTION_LIMIT`), and every row
108
+ has exactly eight columns, none empty or a placeholder from the field list above (`...`,
109
+ `TBD`, `TODO`, `<placeholder>`); `—` is accepted, for example in `Depends on`
110
+ (`E_OPERATE_REVIEW_ACTION_ROW_INVALID`).
111
+
112
+ ## Older notes (contract 1.0.0)
113
+
114
+ Only for reading a note that declares `operate-human-review-contract@1.0.0`; never write one.
115
+ Its sections and fields differ from the lists above. A 1.0.0 board report also needs:
116
+
117
+ - [ ] A non-empty `Executive call` section (`E_OPERATE_REVIEW_EXECUTIVE_CALL_MISSING`).
118
+ - [ ] A `Human gate` with one statement per decision naming adopt, reject, defer, the decision's
119
+ owner and a reason; with no decision, it offers close, supply evidence, and re-run for any
120
+ absent review seat (`E_OPERATE_REVIEW_HUMAN_GATE_INCOMPLETE`), and never offers adopt,
121
+ reject or defer (`E_OPERATE_REVIEW_HUMAN_GATE_CONTRADICTORY`).
122
+
123
+ A caller that requires a conforming note fails it as a whole when any item above is unresolved
124
+ (`E_OPERATE_REVIEW_NOTE_INVALID`); that whole-note code is never listed on the `CODES:` line.
125
+
126
+ ## Report format
127
+
128
+ End the reply with exactly one line: `CODES: ` followed by every distinct code from the items
129
+ above, each written in full, sorted alphabetically and comma-separated; write
130
+ `CODES: none` when every item passes. Each code appears once however many times the problem
131
+ occurs.
@@ -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.
@@ -5,9 +5,7 @@ alwaysApply: false
5
5
 
6
6
  # OpenPlanr Operate
7
7
 
8
- Run one useful operating review, not a ceremony. Build shared context once, fan out the five
9
- executive advisors, use the Challenger to test material claims, and let the Chair synthesize the
10
- result. Return a clean board report with decisions, actions, risks, gaps, and any real issues.
8
+ Run one useful operating review, not a ceremony. By default one agent applies all seven lenses in one pass and writes one report with decisions, actions, risks, gaps, and any real issues.
11
9
 
12
10
  ## Scope the review
13
11
 
@@ -19,58 +17,69 @@ Infer these values from the request and repository when they are clear:
19
17
  - **Roster** — all seven lenses unless the user selects fewer.
20
18
 
21
19
  Use the current repository, current snapshot, periodic review, and all seven lenses as sensible
22
- defaults. When ownership is useful, a recommendation may suggest a person, a role, or
23
- `unassigned`.
20
+ defaults. A recommendation may suggest a person, a role, or `unassigned`.
24
21
 
25
22
  Ask only when an unresolved choice would materially change the sources inspected or the decision
26
23
  being answered. Use the host's native structured-question UI when available, offering a
27
24
  recommended choice and short alternatives. Otherwise ask one concise chat question at a time.
28
25
  Never present the scope fields as a prose questionnaire.
29
26
 
30
- Preserve the user's wording in `cycle.md`, followed by the effective scope used by the lenses.
31
- Do not claim a trend from a current snapshot; describe current state and name any missing baseline.
27
+ Record the user's wording and the effective scope in the report's Scope section. Do not claim a
28
+ trend from a current snapshot; describe current state and name any missing baseline.
32
29
 
33
- ## Create the cycle workspace
30
+ ## Choose the mode
34
31
 
35
- Use a short subject slug and today's ISO date. Choose the first unused path;
36
- when the base path exists, append `-02`, `-03`, and so on. Reuse an existing
37
- cycle only when the user explicitly asks to resume it and its recorded scope
38
- matches. Never overwrite a prior cycle implicitly.
32
+ Default: this agent applies the lenses itself. Use subagents only when the user names a roster or
33
+ asks for independent reviewers; then follow Fan out.
39
34
 
40
- ```text
41
- .planr/operate/<date>-<slug>/
42
- cycle.md
43
- brief.md
44
- <selected-lens-notes>.md
45
- board-report.md
46
- ```
35
+ Where the report goes: with no `.planr/` in the repository, answer in chat, or write one file where
36
+ the repository already keeps such documents. With `.planr/`, write `board-report.md` in a cycle
37
+ directory (below). `cycle.md`, `brief.md` and per-lens notes only when subagents run or the user asks to persist the cycle; a persisted cycle without fan-out writes `cycle.md` and `brief.md` with the contents defined under Fan out.
38
+
39
+ ## Read the sources
40
+
41
+ Read the files the request names, plus `AGENTS.md` and `CLAUDE.md` when tracked, in one batch.
42
+ Expand only for a missing contract, a dependency or a contradiction, and stop when each claim has
43
+ evidence or a named gap. Keep observations separate from interpretation.
44
+
45
+ ## Apply the lenses
46
+
47
+ Work through each selected lens in one pass:
47
48
 
48
- `cycle.md` records the effective scope, roster, repository revision when relevant, and the outcome
49
- of each lens. An advisor lens run on its own creates the same layout with a one-lens roster and an
50
- unsynthesized `board-report.md`, so every review the dashboard lists has one shape.
51
- If the directory is ignored by Git, continue locally and mention that in the report; do not ask the
52
- user to change ignore rules. Report an exact filesystem error only when the cycle workspace cannot be
53
- created or written.
49
+ | Lens | Focus |
50
+ |---|---|
51
+ | CEO | strategy and finance: direction, runway, margin, cost of delay |
52
+ | CTO | technology and delivery risk: architecture, reliability, security, execution risk |
53
+ | CPO | product and activation: customer value, activation, prioritization, adoption |
54
+ | CMO | growth and market: acquisition, positioning, demand, retention, measurement |
55
+ | COO | operations and customer health: process, support, incidents, capacity |
56
+ | Challenger | for each material claim: the strongest alternative, the downside, and the confidence |
57
+ | Chair | the decision queue and action plan, from the findings above |
54
58
 
55
- ## Build shared context once
59
+ Name each Review coverage row `CEO`, `CTO`, `CPO`, `CMO`, `COO`, `Challenger` or `Chair`; the dashboard matches on those names.
56
60
 
57
- Write `brief.md` as a compact orientation aid, not a conclusion. Include:
61
+ Every recommendation cites a source: a project path, command output, or a named gap. Do not
62
+ fabricate a lens with no evidence; record it as `no material finding` or `unavailable` in review
63
+ coverage with the smallest next action. Then assemble the report below.
58
64
 
59
- - effective subject, window, requested decision, and roster;
60
- - current revision and working-tree state when relevant;
61
- - the requested range and a short change summary when the review is historical;
62
- - paths to relevant planning, product, customer, financial, operational, delivery, architecture,
63
- incident, and metric sources;
64
- - important context that was searched for but not found.
65
+ ## Cycle directory
65
66
 
66
- Open enough of the repository to make these pointers useful. Keep observations separate from
67
- interpretation so every lens can reach its own conclusion. The brief is a starting point; lenses
68
- may inspect other relevant project sources.
67
+ Use a short subject slug and today's ISO date: `.planr/operate/<date>-<slug>/`. Choose the first
68
+ unused path; when the base path exists, append `-02`, `-03`, and so on. Reuse an existing cycle
69
+ only when the user explicitly asks to resume it and its recorded scope matches. Never overwrite a
70
+ prior cycle implicitly. If the directory is ignored by Git, continue locally and mention that in the
71
+ report; do not ask the user to change ignore rules. Report an exact filesystem error only when the
72
+ directory cannot be created or written.
69
73
 
70
- ## Run the selected lenses (seven by default)
74
+ ## Fan out
75
+
76
+ When the user names a roster or asks for independent reviewers, create the cycle directory with
77
+ `cycle.md` (effective scope, roster, revision when relevant, outcome of each lens) and `brief.md`
78
+ (scope, revision, source paths, context searched for but not found), then one note per selected lens. An advisor lens run on its own creates the same layout with a one-lens
79
+ roster and an unsynthesized `board-report.md`.
71
80
 
72
81
  Dispatch only the selected independent advisors, in parallel when subagents are
73
- available:
82
+ available, giving each the brief path, its output path and the effective scope:
74
83
 
75
84
  | Lens | Skill | Output |
76
85
  |---|---|---|
@@ -80,21 +89,17 @@ available:
80
89
  | Growth and market | `planr-cmo-review` | `cmo.md` |
81
90
  | Operations and customer health | `planr-coo-review` | `coo.md` |
82
91
 
83
- Give each selected advisor the brief path, its output path, and the effective
84
- scope. Do not invoke or create note files for advisor lenses omitted by the
85
- roster. After the selected advisor work finishes:
92
+ Do not create note files for omitted lenses. After the advisor work finishes:
86
93
 
87
- 1. If Challenger is selected, run `planr-challenger-review` over the available
88
- advisor notes to surface only material exceptions, alternatives, and downside.
89
- 2. If Chair is selected, run `planr-chair-review` over the available selected
90
- notes to produce the decision queue and action plan.
91
- 3. If Challenger or Chair is omitted, record `omitted by scope` in review
92
- coverage. Assemble the board report from the available selected notes without
93
- inventing the omitted lens; when Chair is absent, clearly label the result as
94
- an unsynthesized lens summary rather than a Chair recommendation.
94
+ 1. If Challenger is selected, run `planr-challenger-review` over the available advisor notes to
95
+ surface only material exceptions, alternatives, and downside.
96
+ 2. If Chair is selected, run `planr-chair-review` over the available notes to produce the decision
97
+ queue and action plan.
98
+ 3. If Challenger or Chair is omitted, record `omitted by scope` in review coverage and label the
99
+ result an unsynthesized lens summary, not a Chair recommendation.
95
100
 
96
- Missing or malformed lens output is an issue, not a reason to fabricate that lens or discard all
97
- other useful work. Record the problem, its effect on confidence, and the smallest next action.
101
+ Missing or malformed lens output is an issue, not a reason to fabricate that lens or discard the
102
+ other work. Record the problem, its effect on confidence, and the smallest next action.
98
103
 
99
104
  ## Assemble `board-report.md`
100
105
 
@@ -143,47 +148,31 @@ Use these sections in this order:
143
148
  ## Review coverage
144
149
  | Lens | Outcome | Note | Informed |
145
150
  |---|---|---|---|
146
- | ... | reported / no material finding / unavailable / omitted by scope | `file.md` or `—` | D1 / watch / none |
151
+ | CEO | reported / no material finding / unavailable / omitted by scope | `file.md` or `—` | D1 / watch / none |
147
152
 
148
153
  ## Issues
149
154
  - **I1 — <problem>:** <impact and practical next action>
150
155
  <or `None.`>
151
156
  ```
152
157
 
153
- When Chair is selected, copy decisions and actions from `chair.md`; do not create a new executive
154
- opinion during assembly. When Chair is omitted, summarize only the available selected notes,
155
- label the report as an unsynthesized lens summary, and use `No decision-ready proposal was
156
- established.` plus `No proposed actions.` unless those notes already state a directly supported
157
- proposal. Never present that result as Chair synthesis. Keep at most five decisions, seven actions,
158
- and five decision-changing gaps. When no decision is ready, say so plainly and retain the strongest
159
- watch items and the context needed to improve the next review.
160
-
161
- ## Optional quality check
158
+ In fan out with Chair, copy decisions and actions from `chair.md` without adding a new executive
159
+ opinion. Without Chair, summarize only the available notes, label the report an unsynthesized lens
160
+ summary, and use `No decision-ready proposal was established.` plus `No proposed actions.` unless
161
+ those notes already state a supported proposal. Keep at most five decisions, seven actions, and five
162
+ decision-changing gaps. When no decision is ready, say so and keep the strongest watch items.
162
163
 
163
- The packaged [note validator](planr-operate/scripts/validate-note.mjs) can identify missing sections, fields, or limits:
164
+ ## Quality check
164
165
 
165
- ```sh
166
- node "<skill-root>/scripts/validate-note.mjs" "<absolute-advisor-output>" --profile advisor --contract-version 2.0.0
167
- node "<skill-root>/scripts/validate-note.mjs" "<absolute-challenger-output>" --profile challenger --contract-version 2.0.0
168
- node "<skill-root>/scripts/validate-note.mjs" "<absolute-chair-output>" --profile chair --contract-version 2.0.0
169
- node "<skill-root>/scripts/validate-note.mjs" "<absolute-board-report-path>" --profile board-report --contract-version 2.0.0
170
- ```
171
-
172
- Use their diagnostics as editing help. Include unresolved structural problems under `Issues` with
173
- their impact and next action while preserving the useful parts of the report.
166
+ Before returning, check the report (and any lens note) against [the note checklist](planr-operate/references/note-checklist.md), which runs the CLI's `validate-note` when `command -v openplanr` succeeds and is the check otherwise. Put unresolved structural problems under `Issues` with their impact and next action.
174
167
 
175
168
  ## Return
176
169
 
177
- Lead with the grounded overall signal and most consequential decision or missing
178
- evidence. Link `board-report.md`, summarize decision/action counts and the review
179
- coverage actually completed, and name any unavailable or unsynthesized lens.
180
- Keep the full decision queue, source inventories and diagnostic output in their
181
- existing artifacts. Include unresolved issues with their impact and next action,
182
- omitting empty chat sections. Preserve the durable report contract; different
183
- summary wording never requires another review or corrective run.
184
-
185
- When the OpenPlanr dashboard is running, the operating cycle is browsable at
186
- `#/operate/cycles/<id>`, the completed review index at `#/operate/cycles`, and the latest
187
- completed review at `#/operate/today`. The standalone dashboard presents these local reports
188
- read-only and refreshes them automatically. Inbox, actions, evidence, outcomes, recovery, and
189
- all mutations require an actor-bound governed Operate session.
170
+ Lead with the grounded overall signal and most consequential decision or missing evidence.
171
+ Link `board-report.md` when one was written, summarize decision and action counts and the review
172
+ coverage completed, and name any unavailable or unsynthesized lens. Follow
173
+ [the shared return rules](planr-operate/references/return-contract.md).
174
+
175
+ When the OpenPlanr dashboard is running, the cycle is browsable at `#/operate/cycles/<id>`, the
176
+ review index at `#/operate/cycles`, and the latest review at `#/operate/today`, read-only.
177
+ Inbox, actions, evidence, outcomes, recovery, and all mutations require an actor-bound governed
178
+ Operate session.
@@ -0,0 +1,53 @@
1
+ # Allocate planning IDs
2
+
3
+ `SPEC-NNN`, `US-NNN` and `T-NNN` are project-global and monotonic. Allocate them
4
+ with your own file tools; never reuse a deleted ID and never fall back to
5
+ `US-001` or `T-001` because the sequence looked empty.
6
+
7
+ 1. **Find the specs root.** Read `.planr/config.json` and take
8
+ `outputPaths.agile` (default `.planr`). The specs root is
9
+ `<agile>/specs`. Stop and report when the config is missing or not valid
10
+ JSON, or when the specs root does not exist or is not a directory; do not
11
+ create it.
12
+ 2. **Respect the CLI's lock.** If `<specs root>/.id-sequence.lock` exists, an
13
+ `openplanr` command is reserving IDs. Wait about five seconds and check
14
+ again. If it is still there, stop and tell the user that
15
+ `.id-sequence.lock` is held and to retry when the `openplanr` command
16
+ finishes; delete the lock only if they confirm no `openplanr` command is
17
+ running. Never write while the lock exists.
18
+ 3. **Read the stored sequence.** If `<specs root>/.id-sequence.json` exists, it
19
+ must have `kind: "planning-id-sequence"`, `protocolVersion: "1.7.0"` and a
20
+ positive integer `next.SPEC`, `next.US` and `next.T`. Stop and report when it
21
+ does not; never repair or replace it silently. A missing file means every
22
+ stored `next` is 1.
23
+ 4. **Scan existing IDs.** List the specs root recursively, skipping directories
24
+ whose names start with `.`. For each file or directory name that starts with
25
+ `SPEC-`, `US-` or `T-` followed by three or more digits, keep the highest
26
+ number per kind.
27
+ 5. **Choose the first ID.** For each kind, `next = max(stored next, highest + 1)`.
28
+ Number the new artifacts upward from `next`, padded to at least three digits
29
+ (`US-015`, `T-120`).
30
+ 6. **Never overwrite.** Immediately before writing each artifact, confirm no file
31
+ or directory with that ID exists anywhere under the specs root. If one does,
32
+ take the next number and check again.
33
+ 7. **Advance the sequence.** After writing, check the lock again (step 2),
34
+ then write `.id-sequence.json` in the specs root with two-space
35
+ indentation and a final newline. Each `next` is one past the highest ID you
36
+ wrote, or the value from step 5 for a kind you did not use. Never lower a
37
+ value. After writing `US-015` and `T-041`, for example:
38
+
39
+ ```json
40
+ {
41
+ "kind": "planning-id-sequence",
42
+ "schemaVersion": "1.0.0",
43
+ "protocolVersion": "1.7.0",
44
+ "next": {
45
+ "SPEC": 4,
46
+ "US": 16,
47
+ "T": 42
48
+ }
49
+ }
50
+ ```
51
+
52
+ Re-run steps 2–5 right before writing rather than reusing numbers from earlier in
53
+ the session: another writer may have added artifacts since.
@@ -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.
@@ -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.
@@ -5,9 +5,11 @@ alwaysApply: false
5
5
 
6
6
  # OpenPlanr Plan Review
7
7
 
8
- Give the plan a senior, practical review. Read the plan, its repository context,
9
- and the decisions it depends on. Use only the review lenses relevant to the
10
- work; do not manufacture a fixed committee.
8
+ Give the plan a senior, practical review. Read the plan and the files it names,
9
+ plus `AGENTS.md` and `CLAUDE.md` when tracked, in one batch. Expand only for a
10
+ missing contract, a dependency or a contradiction, and stop when each claim has
11
+ evidence or a named gap. Use only the review lenses relevant to the work; do not
12
+ manufacture a fixed committee.
11
13
 
12
14
  ## Review
13
15
 
@@ -41,6 +43,4 @@ the plan materially changes.
41
43
 
42
44
  Link the reviewed plan and locate each actionable finding. State what was
43
45
  inspected and any material evidence gap; a source review is not a passing test
44
- run. Omit empty categories and raw agent transcripts. Expand findings when their
45
- impact needs explanation, without requiring a fixed chat layout or a corrective
46
- review just for wording.
46
+ run. Follow [the shared return rules](planr-plan-review/references/return-contract.md).
@@ -13,14 +13,11 @@ automatically.
13
13
 
14
14
  ## Resolve context directly
15
15
 
16
- Read the strongest available inputs:
17
-
18
- 1. the request and selected specification;
19
- 2. repository instructions (`AGENTS.md`, `CLAUDE.md`, or equivalents), ADRs,
20
- planning rules, and active stack files named by the repository;
21
- 3. relevant implementation code, tests, package scripts, and CI configuration;
22
- 4. design inputs and design specifications when a browser surface is involved;
23
- 5. the database schema or persistence code when data behavior is involved.
16
+ Read the request, the selected specification and the files either names, plus
17
+ `AGENTS.md` and `CLAUDE.md` when tracked, in one batch. Expand only for a missing
18
+ contract, a dependency or a contradiction, and stop when each claim has evidence
19
+ or a named gap. Read design inputs when a browser surface is involved and the
20
+ schema or persistence code when data behavior is involved.
24
21
 
25
22
  Use repository-local conventions first. Missing legacy `input/` or `.planr/`
26
23
  paths do not block a clear request. State what was unavailable and continue when
@@ -92,11 +89,10 @@ Read [the artifact contract](planr-plan/references/artifact-contract.md) before
92
89
  Write stories and tasks directly in the repository's active planning mode.
93
90
 
94
91
  - Allocate project-global monotonic `US-NNN` and `T-NNN` IDs. Never reuse a
95
- deleted ID. The packaged [planning ID helper](planr-plan/scripts/planning-ids.mjs) may
96
- inspect or reserve IDs; it never generates content. Pass `--root` with the
97
- `specs` folder under the project's configured planning path (`.planr/specs`
98
- by default). It exits non-zero when that folder is missing or is not the one
99
- `.planr/config.json` configures; never fall back to `US-001` or `T-001`.
92
+ deleted ID. Follow [the planning ID procedure](planr-plan/references/planning-ids.md)
93
+ immediately before writing: it reads the stored sequence and the existing
94
+ files, never overwrites an artifact, and never falls back to `US-001` or
95
+ `T-001`.
100
96
  - Give each story stable acceptance IDs starting at `AC-001`.
101
97
  - Split each story into tasks that are coherent and independently verifiable.
102
98
  Separate by ownership first: UI work is a `UI` task for the frontend role and
@@ -115,9 +111,12 @@ Write stories and tasks directly in the repository's active planning mode.
115
111
  - Name concrete files and repository-grounded checks. Preserve established
116
112
  repository headings when they carry additional information.
117
113
 
118
- Validate all frontmatter and acceptance coverage before finishing. If a helper
119
- is unavailable, inspect existing IDs and validate the same invariants directly;
120
- do not route semantic work to a CLI fallback.
114
+ Before finishing, check directly that every story and task frontmatter is
115
+ valid, every acceptance ID is mapped through `acceptanceRefs` and named under
116
+ `## Test Requirements`, and no ID repeats an existing one. When
117
+ `command -v openplanr` succeeds and a `SPEC-NNN` exists,
118
+ `openplanr spec sync <SPEC-ID> --dry-run` adds an orphan and schema-drift check
119
+ and writes nothing. Do not route semantic work to a CLI fallback.
121
120
 
122
121
  For approved design input, author the complete story and task bytes before
123
122
  touching target paths, then commit those bytes and the sibling
@@ -141,7 +140,7 @@ instead of repeating every path in chat.
141
140
  (Codex/ChatGPT) or the `planr-ship` rule (Cursor).
142
141
 
143
142
  Mention the planning layout or consulted lenses only when they explain a material
144
- choice. Different summary wording never requires another planning run.
143
+ choice. Follow [the shared return rules](planr-plan/references/return-contract.md).
145
144
 
146
145
  When the OpenPlanr dashboard is running, the planned graph is browsable at
147
146
  `#/board`; open one story at `#/detail/<US-###>`.
@@ -7,6 +7,7 @@ Contents:
7
7
  4. Hotfixes
8
8
  5. When a release goes out wrong
9
9
  6. Freezes and quiet periods
10
+ 7. Long-term health
10
11
 
11
12
  ---
12
13
 
@@ -90,3 +91,12 @@ Worth declaring in the profile if they apply:
90
91
  - If the product serves businesses with their own peak periods, avoid their peak. A booking product should not ship a breaking change into a salon's Saturday.
91
92
 
92
93
  A freeze is a schedule decision, not a code freeze. Work continues and accumulates in `Unreleased`.
94
+
95
+ ## 7. Long-term health
96
+
97
+ Every few months, or when the user asks whether versioning is working:
98
+
99
+ - **Drift check.** Do the tag, the manifest and what is deployed agree.
100
+ - **Deprecation hygiene.** Every deprecation announced needs a stated removal target and eventual follow-through. Deprecations that never get removed teach users to ignore them.
101
+ - **Stuck at 0.x.** A product with real paying users on `0.x` is signalling instability it does not have. Cutting 1.0 is a decision about the public surface being stable enough to promise, not about feature completeness.
102
+ - **Scheme fit.** A product that grew an API since the profile was written probably needs a second version line now.
@@ -83,7 +83,7 @@ A breaking change entry needs four things in one or two lines: what changed, wha
83
83
 
84
84
  Rules:
85
85
 
86
- - Put it first, before Added. The reader who stops after three lines must have seen it.
86
+ - Put it first, before Added. A Removed entry always carries its migration step inline, in the entry itself, and names features exactly as the product UI does. The reader who stops after three lines must have seen it.
87
87
  - Never bundle it into a list of unrelated improvements. It gets its own section and, where possible, its own release.
88
88
  - A changelog entry is not sufficient notice on its own. Anything with an integration cost also needs an in-product notice or a direct message to affected users, because most people do not read changelogs.
89
89
  - State the date, not "soon".
@@ -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.
@@ -35,10 +35,12 @@ Anything outside the declared surface can change in a patch. This is what makes
35
35
 
36
36
  **Bump rules:**
37
37
 
38
- - MAJOR: remove or rename anything in the surface, change a response or return shape, change a default that alters outcomes, tighten validation to reject formerly valid input, add a required parameter, change error semantics that callers branch on.
39
- - MINOR: add to the surface, add an optional parameter, add a new endpoint or export, ship a deprecation warning.
38
+ - MAJOR: remove or rename anything in the surface, change a response or return shape, change a default that alters outcomes, tighten validation to reject formerly valid input, rename config, add a required field or parameter, change error semantics that callers branch on.
39
+ - MINOR: add to the surface, add an optional parameter, add a new endpoint or export. The release that first ships a deprecation warning is a MINOR; the removal it announces is the MAJOR.
40
40
  - PATCH: fix behavior to match documentation, performance, internal changes, dependency updates with no surface impact.
41
41
 
42
+ **Hosted products.** SemVer's "breaking" needs translating, because there is no compilation step to fail. Treat a change as breaking if a user's saved workflow, integration, bookmark, muscle memory or stored data stops working the way it did. Moving a primary action to a different screen is a change users must relearn.
43
+
42
44
  **The judgement call that comes up most:** a bug fix that changes behavior people depend on. Strictly it is a fix, but if the buggy behavior is load-bearing for existing users, treat it as breaking. The test is whether shipping it silently would generate support tickets.
43
45
 
44
46
  ---