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.
@@ -14,14 +14,11 @@ automatically.
14
14
 
15
15
  ## Resolve context directly
16
16
 
17
- Read the strongest available inputs:
18
-
19
- 1. the request and selected specification;
20
- 2. repository instructions (`AGENTS.md`, `CLAUDE.md`, or equivalents), ADRs,
21
- planning rules, and active stack files named by the repository;
22
- 3. relevant implementation code, tests, package scripts, and CI configuration;
23
- 4. design inputs and design specifications when a browser surface is involved;
24
- 5. the database schema or persistence code when data behavior is involved.
17
+ Read the request, the selected specification and the files either names, plus
18
+ `AGENTS.md` and `CLAUDE.md` when tracked, in one batch. Expand only for a missing
19
+ contract, a dependency or a contradiction, and stop when each claim has evidence
20
+ or a named gap. Read design inputs when a browser surface is involved and the
21
+ schema or persistence code when data behavior is involved.
25
22
 
26
23
  Use repository-local conventions first. Missing legacy `input/` or `.planr/`
27
24
  paths do not block a clear request. State what was unavailable and continue when
@@ -93,11 +90,10 @@ Read [the artifact contract](references/artifact-contract.md) before writing.
93
90
  Write stories and tasks directly in the repository's active planning mode.
94
91
 
95
92
  - Allocate project-global monotonic `US-NNN` and `T-NNN` IDs. Never reuse a
96
- deleted ID. The packaged [planning ID helper](scripts/planning-ids.mjs) may
97
- inspect or reserve IDs; it never generates content. Pass `--root` with the
98
- `specs` folder under the project's configured planning path (`.planr/specs`
99
- by default). It exits non-zero when that folder is missing or is not the one
100
- `.planr/config.json` configures; never fall back to `US-001` or `T-001`.
93
+ deleted ID. Follow [the planning ID procedure](references/planning-ids.md)
94
+ immediately before writing: it reads the stored sequence and the existing
95
+ files, never overwrites an artifact, and never falls back to `US-001` or
96
+ `T-001`.
101
97
  - Give each story stable acceptance IDs starting at `AC-001`.
102
98
  - Split each story into tasks that are coherent and independently verifiable.
103
99
  Separate by ownership first: UI work is a `UI` task for the frontend role and
@@ -116,9 +112,12 @@ Write stories and tasks directly in the repository's active planning mode.
116
112
  - Name concrete files and repository-grounded checks. Preserve established
117
113
  repository headings when they carry additional information.
118
114
 
119
- Validate all frontmatter and acceptance coverage before finishing. If a helper
120
- is unavailable, inspect existing IDs and validate the same invariants directly;
121
- do not route semantic work to a CLI fallback.
115
+ Before finishing, check directly that every story and task frontmatter is
116
+ valid, every acceptance ID is mapped through `acceptanceRefs` and named under
117
+ `## Test Requirements`, and no ID repeats an existing one. When
118
+ `command -v openplanr` succeeds and a `SPEC-NNN` exists,
119
+ `openplanr spec sync <SPEC-ID> --dry-run` adds an orphan and schema-drift check
120
+ and writes nothing. Do not route semantic work to a CLI fallback.
122
121
 
123
122
  For approved design input, author the complete story and task bytes before
124
123
  touching target paths, then commit those bytes and the sibling
@@ -142,7 +141,7 @@ instead of repeating every path in chat.
142
141
  (Codex/ChatGPT) or the `planr-ship` rule (Cursor).
143
142
 
144
143
  Mention the planning layout or consulted lenses only when they explain a material
145
- choice. Different summary wording never requires another planning run.
144
+ choice. Follow [the shared return rules](references/return-contract.md).
146
145
 
147
146
  When the OpenPlanr dashboard is running, the planned graph is browsable at
148
147
  `#/board`; open one story at `#/detail/<US-###>`.
@@ -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.
@@ -6,9 +6,11 @@ license: MIT
6
6
 
7
7
  # OpenPlanr Plan Review
8
8
 
9
- Give the plan a senior, practical review. Read the plan, its repository context,
10
- and the decisions it depends on. Use only the review lenses relevant to the
11
- work; do not manufacture a fixed committee.
9
+ Give the plan a senior, practical review. Read the plan and the files it names,
10
+ plus `AGENTS.md` and `CLAUDE.md` when tracked, in one batch. Expand only for a
11
+ missing contract, a dependency or a contradiction, and stop when each claim has
12
+ evidence or a named gap. Use only the review lenses relevant to the work; do not
13
+ manufacture a fixed committee.
12
14
 
13
15
  ## Review
14
16
 
@@ -42,6 +44,4 @@ the plan materially changes.
42
44
 
43
45
  Link the reviewed plan and locate each actionable finding. State what was
44
46
  inspected and any material evidence gap; a source review is not a passing test
45
- run. Omit empty categories and raw agent transcripts. Expand findings when their
46
- impact needs explanation, without requiring a fixed chat layout or a corrective
47
- review just for wording.
47
+ run. Follow [the shared return rules](references/return-contract.md).
@@ -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.
@@ -6,49 +6,39 @@ license: MIT
6
6
 
7
7
  # OpenPlanr Release
8
8
 
9
- Two jobs: pick the right version number, and tell users what changed in language they care about. Both fall out of correctly classifying what shipped, so classification comes first and everything else follows from it.
9
+ Classify what shipped by what users must do or expect differently, then say so in their language. This skill owns versioning and release communication after implementation; use `planr-land` for merge readiness and `planr-ship` for code.
10
10
 
11
- The failure mode this skill exists to prevent: version numbers chosen by gut feeling or diff size, and changelogs that read like a git log. Both make releases untrustworthy to the people downstream of them.
11
+ ## Do only the verb
12
12
 
13
- This skill owns versioning and release communication after implementation. Use
14
- `planr-land` for merge readiness and landing order, and `planr-ship` for code
15
- implementation. Do not turn a release request into a new implementation pass.
13
+ | The user asks for | Do | Never, unless also asked |
14
+ |---|---|---|
15
+ | Release notes, a summary of what changed, or a proposed version | Steps 0 to 4 (Step 0 only reads). Return the notes and the proposed version in chat. | Write `CHANGELOG.md` or `.release/profile.md`, bump a version, run tests, tag |
16
+ | Prepare or cut a release | Steps 0 to 5 | Push, tag, publish, deploy |
17
+ | A tag, a publication or an announcement | That one external effect, after Step 5 is done | Anything else external |
16
18
 
17
- ## Step 0: Load the release profile
19
+ A request for release notes or a proposed version changes no file, bumps no version and runs no tests, and never writes the profile.
18
20
 
19
- Look for `.release/profile.md` at the repo root. It records the scheme, cadence, public surface and voice already chosen for this product.
21
+ ## Step 0: Load the release profile
20
22
 
21
- If it exists, read it and follow it. Do not re-argue the scheme on every release. Re-deciding is how version histories become incoherent, and the whole value of a version number is that it means the same thing this month as it did last month.
23
+ Read `.release/profile.md`, plus `AGENTS.md` and `CLAUDE.md` when tracked, in one batch. Expand only for a missing contract, a dependency or a contradiction, and stop when each claim has evidence or a named gap.
22
24
 
23
- If it does not exist, this is first-time setup. Work through Step 3, propose a profile, get the user's agreement, then write it using the [release profile template](assets/profile-template.md). Every later release starts from that file instead of from scratch.
25
+ When the profile exists, follow it; do not re-argue the scheme. When it does not, propose a scheme and the bump in your answer from the recent tags and the public surface, and say the profile is missing; do not write it for a notes-only request. Choose a scheme and write a profile only on first-time setup, when the user asks to set one up, or when preparing the first release: read [the versioning schemes guide](references/schemes.md), get the user's agreement, then write it with the [release profile template](assets/profile-template.md).
24
26
 
25
27
  ## Step 1: Gather what shipped
26
28
 
27
- Establish the window first. Default is "since the last release":
28
-
29
- ```bash
30
- git describe --tags --abbrev=0 # last tag
31
- git log $(git describe --tags --abbrev=0)..HEAD --oneline --no-merges
32
- ```
33
-
34
- If the user names a period instead ("this week", "since the 1st"), use the
35
- matching date window. The [change collector](scripts/collect_changes.sh) gathers local Git evidence in
36
- one pass. Pass `--include-prs` only when remote pull-request context is useful
37
- and available.
29
+ These steps only read. Treat the output as evidence to classify, not as release notes. Run each git command on its own and check its exit status. A failure other than "no tag found" stops collection: report the command and its error text, and never read it as an empty window.
38
30
 
39
- Pull from all three sources, since each catches things the others miss:
40
-
41
- 1. **Commits and tags.** The complete record of code change, and the noisiest.
42
- 2. **Merged PRs and branch names.** Better titles than commits, and they group related commits into one user-visible unit. `gh pr list --state merged --search "merged:>=YYYY-MM-DD"` when the `gh` CLI is available.
43
- 3. **The user's own summary.** Authoritative for anything git cannot see: infra changes, config and feature flags, third-party integrations, work shipped from another repo, and which of the twelve commits behind a feature actually matter to users.
44
-
45
- Use any product summary already present in the request or repository. If material
46
- non-Git changes could alter the release notes, ask one concise question about
47
- what Git missed before finalizing.
31
+ 1. **Base.** If the user names a period ("this week", "since the 1st"), turn it into a date `YYYY-MM-DD` and use `--since=<date>` as the log range. Otherwise find the last tag with `git describe --tags --abbrev=0`, read its date with `git log -1 --format=%cs <tag>`, and use `<tag>..HEAD` as the range. With no tag at all, the window is all history: drop the range from the commands below. Record the base (`git rev-parse <tag>`, or the date) and the head (`git rev-parse HEAD`) in your return.
32
+ 2. **Recent tags.** Run `git tag --list --sort=-creatordate` and keep the first five. Match their format when you tag.
33
+ 3. **Commits.** Run `git log <range> --no-merges --pretty=format:'%h %s'`.
34
+ 4. **Bodies and footers.** Run `git log <range> --no-merges --pretty=format:'--- %h%n%b'` and read every body. A `BREAKING CHANGE:` footer, or `!` after the type, makes the change Breaking whatever its subject says; a `Revert` subject and the change it reverts cancel out.
35
+ 5. **Files touched, by area.** Run `git log <range> --name-only --pretty=format:`, drop blank lines, and reduce each path to its first two segments (`src/cli` for `src/cli/run.ts`; a top-level file stays as it is). Count the paths per area, sort by count, highest first, and keep the top 20.
36
+ 6. **Merged PRs.** Only when pull-request context is useful, `gh` is installed and the window has a date (the user's date or the last tag's), run `gh pr list --state merged --search "merged:>=<date>" --limit 100 --json number,title`. If it fails, say so and suggest `gh auth status`; do not drop the section silently.
37
+ 7. **Gaps.** Before finalizing, check whether this misses config or feature-flag changes, infrastructure, work from other repositories, or other user-visible behavior. Git cannot see these, so use any product summary in the request or repository; if material non-Git changes could alter the notes, ask one concise question.
48
38
 
49
39
  ## Step 2: Classify each change
50
40
 
51
- For every unit of work, ask one question: **does a user have to do, know, or expect something different now?** Not "how much code moved". A 2000 line refactor with identical behavior is invisible. A one line default change can be breaking.
41
+ For every unit of work ask: **does a user have to do, know, or expect something different now?** Code size does not matter; a one line default change can be breaking.
52
42
 
53
43
  | Class | Test | Notes |
54
44
  |---|---|---|
@@ -60,129 +50,40 @@ For every unit of work, ask one question: **does a user have to do, know, or exp
60
50
  | Deprecation | Still works, will be removed | Must state the removal target |
61
51
  | Internal | Refactor, tests, CI, dep bumps, formatting | Affects the bump only if behavior moved |
62
52
 
63
- Internal work is real work and still does not belong in user-facing notes. Keep it out. Empty sections beat padded ones.
64
-
65
- ## Step 3: Choose the scheme (first time only)
66
-
67
- Pick per product and state the reasoning in one or two sentences. Read the [versioning schemes guide](references/schemes.md) for the full decision guide, edge cases and the multi-line setup. The short version:
68
-
69
- - **Library, SDK, CLI or anything others install and pin** to SemVer, strictly. The declared public API is the contract, and consumers automate against the number.
70
- - **Hosted app with no external integrators** to CalVer. Nobody pins a version they cannot choose, so the number's real job is answering "how old is this", which a date does better than a counter.
71
- - **Hosted app that also exposes an API, webhooks or an SDK** to two version lines: SemVer on the API surface, CalVer or SemVer on the app itself. Conflating them forces an app redesign to look like an API break.
72
- - **Internal tool** to CalVer. Low ceremony, and the deploy date is the thing people actually ask about.
73
-
74
- Record the choice, the reasoning and the declared public surface in the profile. "Public surface" is the most important field: it is the list of things a break can happen to, and without it "breaking" has no meaning.
75
-
76
- ## Step 4: Decide the bump
77
-
78
- Work the classification against the scheme.
79
-
80
- **SemVer**, where MAJOR/MINOR/PATCH map to compatibility:
81
-
82
- - MAJOR: anything in the Breaking row above. Removal of a documented feature, changed response shape, changed default that alters outcomes, tightened validation that rejects previously accepted input, renamed config, new required field.
83
- - MINOR: new capability, backward compatible. Also the release that first ships a deprecation warning.
84
- - PATCH: fixes, performance, copy, visual polish, dependency updates with no behavior change.
85
-
86
- For hosted products, SemVer's definition of breaking needs translating, because there is no compilation step to fail. Treat it 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, and pretending otherwise is how "we never make breaking changes" becomes false.
87
-
88
- **CalVer** (`YYYY.MM.PATCH` or `YYYY.MM.DD`), where the number encodes time, not compatibility. The counter carries no compatibility signal, so breaking changes must be carried by the notes instead. Lead with them and never bury them.
53
+ Keep Internal work out of user-facing notes.
89
54
 
90
- Two rules that hold under any scheme:
55
+ ## Step 3: Decide the bump
91
56
 
92
- - One release, one version. At daily or weekly cadence, do not bump per commit or per deploy. A version number that increments forty times a week communicates nothing.
93
- - Never bundle a breaking change with unrelated work. It ships alone so the notes and the rollback are both about one thing.
57
+ Work the classification against the profile's scheme. SemVer: any Breaking change is MAJOR, a new compatible capability is MINOR, everything else PATCH. For hosted products, treat a change as breaking if a user's saved workflow, integration, bookmark or stored data stops working the way it did. CalVer: the number encodes time, so the notes lead with breaking changes. The [schemes guide](references/schemes.md) has the edge cases.
94
58
 
95
- ## Step 5: Cadence
59
+ Under any scheme: one release, one version, never one per commit or deploy; a breaking change ships alone; and keep the existing tag format (a repository tagged `v1.2.0` must not get `1.3.0`).
96
60
 
97
- The mechanism that makes frequent shipping compatible with meaningful versions is separating **deploys** from **releases**. Deploy whenever the work is ready. Cut versions on a rhythm.
61
+ ## Step 4: Write the release notes
98
62
 
99
- Keep a rolling `## [Unreleased]` section at the top of `CHANGELOG.md` and append to it as work merges, while the context is fresh. Cutting a release then means renaming that section to the version and date, and opening a fresh empty one. This is what makes weekly releases take five minutes instead of an hour of git archaeology.
63
+ Read [the release notes guide](references/release-notes.md) before writing; it carries the voice rules and worked rewrites. Follow Keep a Changelog: a `## [version] - date` heading, then `### Removed`, `### Added`, `### Changed` and `### Fixed`, in the order that costs the reader most if missed (Removed and any breaking Changed first). Omit empty sections. One line per entry, led by what the user can now do, with fixes described by the symptom users saw.
100
64
 
101
- Default rhythm for a daily-to-weekly product:
65
+ ## Step 5: Prepare the local release
102
66
 
103
- - Fixes that unblock users: cut immediately as a patch. Do not make people wait for Friday.
104
- - Features and improvements: accumulate into the regular cut, weekly or twice weekly.
105
- - Breaking changes: announced ahead, shipped alone, on a date users were told about.
106
-
107
- See the [release cadence guide](references/cadence.md) for the hotfix path, release freezes, and what to do when a release goes out wrong.
108
-
109
- ## Step 6: Write the release notes
110
-
111
- Read the [release notes guide](references/release-notes.md) before writing. It carries the voice rules and worked rewrites; a summary here would produce notes that read like a commit log, which is the exact thing being avoided.
112
-
113
- The shape, following Keep a Changelog:
114
-
115
- ```markdown
116
- ## [1.4.0] - 2026-09-08
117
-
118
- ### Removed
119
- - Entry, with the migration step inline.
120
-
121
- ### Added
122
- - Entry.
123
-
124
- ### Changed
125
- - Entry.
126
-
127
- ### Fixed
128
- - Entry.
129
- ```
130
-
131
- Order sections by what costs the reader most if missed: Removed and any breaking Changed first, then Added, then the rest. Omit empty sections entirely.
132
-
133
- Core rules, expanded in the reference:
134
-
135
- - Lead with what the user can now do, not with what was built.
136
- - Name features exactly as they appear in the product UI.
137
- - Describe fixes by the symptom users saw, not the cause in code.
138
- - One line per entry. If it needs a paragraph, it needs a linked doc.
139
- - No em dashes, no filler openers, no "we're excited to announce".
140
-
141
- ## Step 7: Prepare the local release
67
+ Only when the user asks to prepare or cut a release.
142
68
 
143
69
  1. Prepend the new section to `CHANGELOG.md` and open a fresh `## [Unreleased]`.
144
- 2. Bump version numbers with the repository's existing release tool, never by
145
- hand-editing duplicated numbers. Keep the operation local and untagged unless
146
- the user requested a tag. For npm, use `npm version --no-git-tag-version`;
147
- for independent JavaScript packages, prefer the repository's Changesets flow.
148
- 3. Inspect recent tags and preserve the established tag format. A repository
149
- tagged `v1.2.0` must not suddenly get `1.3.0`.
150
- 4. Run the repository's release checks. Confirm every release-note entry maps to
151
- shipped behavior and every user-visible change in the selected window is
152
- represented.
153
- 5. Push tags, publish packages, create hosted releases, post announcements, or
154
- deploy only when the user explicitly requests that external effect.
70
+ 2. Bump version numbers with the repository's existing release tool, never by hand-editing duplicated numbers. Keep the operation local and untagged unless the user requested a tag. For npm, use `npm version --no-git-tag-version`; for independent JavaScript packages, prefer the repository's Changesets flow.
71
+ 3. Run the repository's release checks. Confirm every release-note entry maps to shipped behavior and every user-visible change in the window is represented.
72
+ 4. Push tags, publish packages, create hosted releases, post announcements, or deploy only when the user explicitly requests that external effect.
155
73
 
156
74
  ## Return
157
75
 
158
- Lead with what was prepared locally or actually released. Preparing notes or
159
- versions is not publication. Link the durable notes, summarize checks actually
160
- performed, and name any incomplete step with its impact and recovery action.
76
+ Lead with what was prepared locally or actually released; preparing notes or versions is not publication. Follow [the shared return rules](references/return-contract.md).
161
77
 
162
- - **Version:** current and proposed versions, scheme, and bump rationale.
78
+ - **Version:** current and proposed versions, scheme, bump rationale, and the base and head revisions.
163
79
  - **Included:** user-visible changes in the release window.
164
- - **Notes:** the release-note text or changed changelog path.
165
- - **Checks:** release verification performed and results.
80
+ - **Notes:** the release-note text, or the changed changelog path when one was written.
81
+ - **Checks:** release verification performed and results, or `not run` for a notes-only request.
166
82
  - **Next:** the one remaining local or external release action, or `none`.
167
83
 
168
- Keep the complete release window in the notes rather than repeating its commit
169
- inventory. Omit empty sections in the human summary; different wording does not
170
- require a second version bump or release action.
171
-
172
- ## Long-term health
173
-
174
- Every few months, or when the user asks whether versioning is working:
175
-
176
- - **Drift check.** Do the tag, the manifest and what is deployed agree.
177
- - **Deprecation hygiene.** Every deprecation announced needs a stated removal target and eventual follow-through. Deprecations that never get removed teach users to ignore them.
178
- - **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.
179
- - **Scheme fit.** A product that grew an API since the profile was written probably needs a second version line now.
180
-
181
- ## Reference files
84
+ ## References
182
85
 
183
- - [Versioning schemes](references/schemes.md): full scheme selection guide, multi-line versioning, monorepo handling
184
- - [Release notes](references/release-notes.md): voice rules, worked rewrites, per-channel formats
185
- - [Release cadence](references/cadence.md): release rhythms, hotfixes, freezes, bad releases
186
- - [Release profile template](assets/profile-template.md): the `.release/profile.md` written during setup
187
- - [Changelog template](assets/changelog-template.md): starting `CHANGELOG.md`
188
- - [Change collector](scripts/collect_changes.sh): gathers commits, optional merged PRs, and tag information for a window
86
+ - [Versioning schemes](references/schemes.md): read on first setup or when asked to choose a scheme.
87
+ - [Release cadence and health](references/cadence.md): read for cadence, hotfixes, freezes, a bad release or a versioning health check.
88
+ - [Release notes](references/release-notes.md): voice rules and worked rewrites, read before writing notes.
89
+ - [Release profile template](assets/profile-template.md) and [changelog template](assets/changelog-template.md): read when writing either file.
@@ -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
  ---