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
@@ -5,49 +5,39 @@ alwaysApply: false
5
5
 
6
6
  # OpenPlanr Release
7
7
 
8
- 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.
8
+ 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.
9
9
 
10
- 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.
10
+ ## Do only the verb
11
11
 
12
- This skill owns versioning and release communication after implementation. Use
13
- `planr-land` for merge readiness and landing order, and `planr-ship` for code
14
- implementation. Do not turn a release request into a new implementation pass.
12
+ | The user asks for | Do | Never, unless also asked |
13
+ |---|---|---|
14
+ | 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 |
15
+ | Prepare or cut a release | Steps 0 to 5 | Push, tag, publish, deploy |
16
+ | A tag, a publication or an announcement | That one external effect, after Step 5 is done | Anything else external |
15
17
 
16
- ## Step 0: Load the release profile
18
+ A request for release notes or a proposed version changes no file, bumps no version and runs no tests, and never writes the profile.
17
19
 
18
- Look for `.release/profile.md` at the repo root. It records the scheme, cadence, public surface and voice already chosen for this product.
20
+ ## Step 0: Load the release profile
19
21
 
20
- 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.
22
+ 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.
21
23
 
22
- 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](planr-release/assets/profile-template.md). Every later release starts from that file instead of from scratch.
24
+ 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](planr-release/references/schemes.md), get the user's agreement, then write it with the [release profile template](planr-release/assets/profile-template.md).
23
25
 
24
26
  ## Step 1: Gather what shipped
25
27
 
26
- Establish the window first. Default is "since the last release":
27
-
28
- ```bash
29
- git describe --tags --abbrev=0 # last tag
30
- git log $(git describe --tags --abbrev=0)..HEAD --oneline --no-merges
31
- ```
32
-
33
- If the user names a period instead ("this week", "since the 1st"), use the
34
- matching date window. The [change collector](planr-release/scripts/collect_changes.sh) gathers local Git evidence in
35
- one pass. Pass `--include-prs` only when remote pull-request context is useful
36
- and available.
28
+ 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.
37
29
 
38
- Pull from all three sources, since each catches things the others miss:
39
-
40
- 1. **Commits and tags.** The complete record of code change, and the noisiest.
41
- 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.
42
- 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.
43
-
44
- Use any product summary already present in the request or repository. If material
45
- non-Git changes could alter the release notes, ask one concise question about
46
- what Git missed before finalizing.
30
+ 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.
31
+ 2. **Recent tags.** Run `git tag --list --sort=-creatordate` and keep the first five. Match their format when you tag.
32
+ 3. **Commits.** Run `git log <range> --no-merges --pretty=format:'%h %s'`.
33
+ 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.
34
+ 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.
35
+ 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.
36
+ 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.
47
37
 
48
38
  ## Step 2: Classify each change
49
39
 
50
- 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.
40
+ 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.
51
41
 
52
42
  | Class | Test | Notes |
53
43
  |---|---|---|
@@ -59,129 +49,40 @@ For every unit of work, ask one question: **does a user have to do, know, or exp
59
49
  | Deprecation | Still works, will be removed | Must state the removal target |
60
50
  | Internal | Refactor, tests, CI, dep bumps, formatting | Affects the bump only if behavior moved |
61
51
 
62
- Internal work is real work and still does not belong in user-facing notes. Keep it out. Empty sections beat padded ones.
63
-
64
- ## Step 3: Choose the scheme (first time only)
65
-
66
- Pick per product and state the reasoning in one or two sentences. Read the [versioning schemes guide](planr-release/references/schemes.md) for the full decision guide, edge cases and the multi-line setup. The short version:
67
-
68
- - **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.
69
- - **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.
70
- - **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.
71
- - **Internal tool** to CalVer. Low ceremony, and the deploy date is the thing people actually ask about.
72
-
73
- 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.
74
-
75
- ## Step 4: Decide the bump
76
-
77
- Work the classification against the scheme.
78
-
79
- **SemVer**, where MAJOR/MINOR/PATCH map to compatibility:
80
-
81
- - 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.
82
- - MINOR: new capability, backward compatible. Also the release that first ships a deprecation warning.
83
- - PATCH: fixes, performance, copy, visual polish, dependency updates with no behavior change.
84
-
85
- 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.
86
-
87
- **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.
52
+ Keep Internal work out of user-facing notes.
88
53
 
89
- Two rules that hold under any scheme:
54
+ ## Step 3: Decide the bump
90
55
 
91
- - 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.
92
- - Never bundle a breaking change with unrelated work. It ships alone so the notes and the rollback are both about one thing.
56
+ 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](planr-release/references/schemes.md) has the edge cases.
93
57
 
94
- ## Step 5: Cadence
58
+ 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`).
95
59
 
96
- 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.
60
+ ## Step 4: Write the release notes
97
61
 
98
- 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.
62
+ Read [the release notes guide](planr-release/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.
99
63
 
100
- Default rhythm for a daily-to-weekly product:
64
+ ## Step 5: Prepare the local release
101
65
 
102
- - Fixes that unblock users: cut immediately as a patch. Do not make people wait for Friday.
103
- - Features and improvements: accumulate into the regular cut, weekly or twice weekly.
104
- - Breaking changes: announced ahead, shipped alone, on a date users were told about.
105
-
106
- See the [release cadence guide](planr-release/references/cadence.md) for the hotfix path, release freezes, and what to do when a release goes out wrong.
107
-
108
- ## Step 6: Write the release notes
109
-
110
- Read the [release notes guide](planr-release/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.
111
-
112
- The shape, following Keep a Changelog:
113
-
114
- ```markdown
115
- ## [1.4.0] - 2026-09-08
116
-
117
- ### Removed
118
- - Entry, with the migration step inline.
119
-
120
- ### Added
121
- - Entry.
122
-
123
- ### Changed
124
- - Entry.
125
-
126
- ### Fixed
127
- - Entry.
128
- ```
129
-
130
- 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.
131
-
132
- Core rules, expanded in the reference:
133
-
134
- - Lead with what the user can now do, not with what was built.
135
- - Name features exactly as they appear in the product UI.
136
- - Describe fixes by the symptom users saw, not the cause in code.
137
- - One line per entry. If it needs a paragraph, it needs a linked doc.
138
- - No em dashes, no filler openers, no "we're excited to announce".
139
-
140
- ## Step 7: Prepare the local release
66
+ Only when the user asks to prepare or cut a release.
141
67
 
142
68
  1. Prepend the new section to `CHANGELOG.md` and open a fresh `## [Unreleased]`.
143
- 2. Bump version numbers with the repository's existing release tool, never by
144
- hand-editing duplicated numbers. Keep the operation local and untagged unless
145
- the user requested a tag. For npm, use `npm version --no-git-tag-version`;
146
- for independent JavaScript packages, prefer the repository's Changesets flow.
147
- 3. Inspect recent tags and preserve the established tag format. A repository
148
- tagged `v1.2.0` must not suddenly get `1.3.0`.
149
- 4. Run the repository's release checks. Confirm every release-note entry maps to
150
- shipped behavior and every user-visible change in the selected window is
151
- represented.
152
- 5. Push tags, publish packages, create hosted releases, post announcements, or
153
- deploy only when the user explicitly requests that external effect.
69
+ 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.
70
+ 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.
71
+ 4. Push tags, publish packages, create hosted releases, post announcements, or deploy only when the user explicitly requests that external effect.
154
72
 
155
73
  ## Return
156
74
 
157
- Lead with what was prepared locally or actually released. Preparing notes or
158
- versions is not publication. Link the durable notes, summarize checks actually
159
- performed, and name any incomplete step with its impact and recovery action.
75
+ Lead with what was prepared locally or actually released; preparing notes or versions is not publication. Follow [the shared return rules](planr-release/references/return-contract.md).
160
76
 
161
- - **Version:** current and proposed versions, scheme, and bump rationale.
77
+ - **Version:** current and proposed versions, scheme, bump rationale, and the base and head revisions.
162
78
  - **Included:** user-visible changes in the release window.
163
- - **Notes:** the release-note text or changed changelog path.
164
- - **Checks:** release verification performed and results.
79
+ - **Notes:** the release-note text, or the changed changelog path when one was written.
80
+ - **Checks:** release verification performed and results, or `not run` for a notes-only request.
165
81
  - **Next:** the one remaining local or external release action, or `none`.
166
82
 
167
- Keep the complete release window in the notes rather than repeating its commit
168
- inventory. Omit empty sections in the human summary; different wording does not
169
- require a second version bump or release action.
170
-
171
- ## Long-term health
172
-
173
- Every few months, or when the user asks whether versioning is working:
174
-
175
- - **Drift check.** Do the tag, the manifest and what is deployed agree.
176
- - **Deprecation hygiene.** Every deprecation announced needs a stated removal target and eventual follow-through. Deprecations that never get removed teach users to ignore them.
177
- - **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.
178
- - **Scheme fit.** A product that grew an API since the profile was written probably needs a second version line now.
179
-
180
- ## Reference files
83
+ ## References
181
84
 
182
- - [Versioning schemes](planr-release/references/schemes.md): full scheme selection guide, multi-line versioning, monorepo handling
183
- - [Release notes](planr-release/references/release-notes.md): voice rules, worked rewrites, per-channel formats
184
- - [Release cadence](planr-release/references/cadence.md): release rhythms, hotfixes, freezes, bad releases
185
- - [Release profile template](planr-release/assets/profile-template.md): the `.release/profile.md` written during setup
186
- - [Changelog template](planr-release/assets/changelog-template.md): starting `CHANGELOG.md`
187
- - [Change collector](planr-release/scripts/collect_changes.sh): gathers commits, optional merged PRs, and tag information for a window
85
+ - [Versioning schemes](planr-release/references/schemes.md): read on first setup or when asked to choose a scheme.
86
+ - [Release cadence and health](planr-release/references/cadence.md): read for cadence, hotfixes, freezes, a bad release or a versioning health check.
87
+ - [Release notes](planr-release/references/release-notes.md): voice rules and worked rewrites, read before writing notes.
88
+ - [Release profile template](planr-release/assets/profile-template.md) and [changelog template](planr-release/assets/changelog-template.md): read when writing either file.
@@ -0,0 +1,102 @@
1
+ # Backlog filing
2
+
3
+ List and file backlog items with your own file tools. If `openplanr` is already on
4
+ `PATH`, you may instead send each item as one JSON object on stdin to
5
+ `openplanr --project-dir <repository-root> backlog add --data - --json`.
6
+
7
+ ## Where items live
8
+
9
+ 1. Read `.planr/config.json` at the repository root. If it is missing or is not
10
+ valid JSON, stop and report that the project has no OpenPlanr configuration.
11
+ 2. The backlog folder is `<outputPaths.agile>/backlog`, with `outputPaths.agile`
12
+ defaulting to `.planr`. The ID prefix is `idPrefix.backlog`, default `BL`.
13
+ 3. Issued IDs are empty marker files in `<backlog folder>/.issued-ids/`.
14
+
15
+ ## List open items
16
+
17
+ List the files named `<PREFIX>-NNN-<slug>.md` in the backlog folder and read each
18
+ frontmatter's `id`, `title` and `status`. An item is open unless its `status` is
19
+ `closed` or `done`; a missing `status` counts as open.
20
+
21
+ ## Take an ID
22
+
23
+ Do this immediately before writing each item, never earlier in the run:
24
+
25
+ 1. List the backlog folder and `.issued-ids/` again; create `.issued-ids/` if it is
26
+ missing.
27
+ 2. Find the highest `<PREFIX>-NNN` number among the file names in both. The new
28
+ number is that plus 1, or 1 when there is none, padded to at least 3 digits
29
+ (`BL-007`, `BL-1000`).
30
+ 3. Claim it by creating the empty file `.issued-ids/<ID>`. In a POSIX shell use a
31
+ no-clobber create, `(set -C; : > '<backlog folder>/.issued-ids/<ID>')`, or
32
+ elsewhere any create that fails when the file already exists, and treat a
33
+ failure as the ID being taken.
34
+ 4. If the marker already existed or any `<ID>-*.md` file exists, take the next
35
+ number and repeat step 3.
36
+
37
+ Never overwrite or edit an existing backlog file or marker. A marker outlives its
38
+ item, so the ID of a deleted item is never issued again.
39
+
40
+ ## Write the item
41
+
42
+ Name the file `<ID>-<slug>.md` in the backlog folder. The slug is the title in
43
+ lowercase with every character other than ASCII letters, digits, `_`, `-` and
44
+ whitespace removed, runs of whitespace, `_` and `-` turned into one `-`, and
45
+ leading or trailing `-` removed. When it is longer than 80 characters, cut it at 80, then back to the last
46
+ `-`.
47
+
48
+ The frontmatter needs every field below. Scalar values are double-quoted JSON strings;
49
+ arrays use the flow form shown in the example:
50
+
51
+ - `id`: the claimed ID.
52
+ - `title`: one line.
53
+ - `priority`: `critical`, `high`, `medium` or `low`.
54
+ - `tags`: a list of quoted strings, `[]` when there are none.
55
+ - `status`: `"open"`.
56
+ - `created` and `updated`: today's date as `YYYY-MM-DD`.
57
+ - `when`: `next-unit:<ref>`, `sprint:<SPRINT-NNN or next>`, `trigger:<event>`, or
58
+ `declined:<reason>`. Use a PR number, task ID, backlog ID, or branch for `<ref>`.
59
+ Never store `now`; it is a triage outcome. Trigger forms include
60
+ `date:YYYY-MM-DD`, `closed:<BL-NNN>`, `merged:#<PR>`, `merged:<branch>`, and
61
+ `release:<pkg>@<semver>`; other non-empty event text is allowed.
62
+ - `files`: a list of quoted repo-relative paths, such as `["src/routes/import.ts"]`.
63
+ Omit line numbers, absolute paths and `..` segments. Use distinct paths from
64
+ the evidence, or `[]` when there are none.
65
+
66
+ Older items may omit `when` and `files`. When listing them, derive files from
67
+ body evidence such as `src/routes/import.ts:41` only if `files` is absent.
68
+
69
+ The body is `# <ID>: <title>`, then `## Tags` with one `- <tag>` line per tag
70
+ (omitted when there are none), then the description. A description that starts
71
+ with its own `##` sections stands as written; otherwise it goes under
72
+ `## Description`. End with a `---` line and the close line.
73
+
74
+ ```markdown
75
+ ---
76
+ id: "BL-007"
77
+ title: "Import endpoint has no rate limit"
78
+ priority: "medium"
79
+ tags: ["security", "api"]
80
+ status: "open"
81
+ created: "2026-11-08"
82
+ updated: "2026-11-08"
83
+ when: "next-unit:#612"
84
+ files: ["src/routes/import.ts"]
85
+ ---
86
+
87
+ # BL-007: Import endpoint has no rate limit
88
+
89
+ ## Tags
90
+
91
+ - security
92
+ - api
93
+
94
+ ## Problem
95
+
96
+ `/import` accepts unlimited requests (`src/routes/import.ts:41`).
97
+
98
+ ---
99
+ _Close when done: `openplanr backlog update BL-007 --status closed`_
100
+ ```
101
+
102
+ Report the ID and the repo-relative path of each filed item.
@@ -31,9 +31,8 @@ Merge duplicates within the run. Sort by severity, highest first, and number fro
31
31
 
32
32
  ## Check what is already tracked
33
33
 
34
- Before showing findings, list open backlog items with the backlog helper
35
- linked from SKILL.md, resolved relative to that file: `node <helper> list
36
- --project <repository-root> --open`. A finding about the same problem as an open item,
34
+ Before showing findings, list open backlog items as
35
+ [backlog filing](backlog-filing.md) describes. A finding about the same problem as an open item,
37
36
  normally the same evidence file and an equivalent title, is `tracked`. Never file
38
37
  it again and never edit the existing item.
39
38
 
@@ -52,26 +51,19 @@ rule that applies. File only what it allows.
52
51
  example a print or exec mode), another skill or a delegate runner started this
53
52
  run, or the user said not to ask. Read `findings.unattended` in
54
53
  `.planr/config.json`. Only `file` files every untracked finding. With
55
- `report`, or no setting, do not run `add` at all: mark the findings `reported`.
54
+ `report`, or no setting, do not file at all: mark the findings `reported`.
56
55
 
57
56
  Never ask per finding, never ask mid-run, and never file or drop a finding
58
57
  silently.
59
58
 
60
59
  ## File
61
60
 
62
- Send each item as one JSON object (`title`, `priority`, `tags`, `description`)
63
- on stdin. Never pass `acceptanceCriteria`.
61
+ File each item from its `title`, `priority`, `tags` and `description` as
62
+ [backlog filing](backlog-filing.md) describes. Never add acceptance criteria.
63
+ When the `openplanr` command files it and the result says
64
+ `templateOverrideIgnored`, say the default format was used.
64
65
 
65
- - When an `openplanr` CLI resolves (the project's `node_modules/.bin`, then
66
- `PATH`; never `npx`): `openplanr --project-dir <repository-root> backlog add
67
- --data - --json`.
68
- - Otherwise: `node <helper> add --project <repository-root> --data -`. Its
69
- result can carry `cliHint`; end the result with that line, word for word,
70
- once. Install only if the user says yes then, by running exactly the command in
71
- the line. If the result says `templateOverrideIgnored`, say the default format
72
- was used.
73
-
74
- If filing fails, report the command and its error, and leave the finding
66
+ If filing fails, report the step and its error, and leave the finding
75
67
  `reported`.
76
68
 
77
69
  ## Report
@@ -0,0 +1,10 @@
1
+ # Return rules
2
+
3
+ Shared by Spec, Plan, Plan Review, Ship, Operate and Release. Each skill lists its own fields.
4
+
5
+ - Lead with the outcome: what is ready, prepared or released, then what is partial or blocked.
6
+ - Link durable artifacts by purpose. Keep inventories, command output and transcripts in their files.
7
+ - Report only checks you ran, with their result. Name each check you could not run and what stays unverified.
8
+ - Omit empty fields. Give each open issue its impact and the smallest recovery action.
9
+ - The summary is a human view, not a schema. Different wording never calls for a rerun or a correction pass.
10
+ - Keep any machine-readable field a skill defines unchanged.
@@ -16,10 +16,11 @@ plain Ship never launches its helper. Keep the work local; do not publish or dep
16
16
 
17
17
  For a selector, locate exactly one task and read it completely. Then follow its
18
18
  `storyId` and `specId` to the parent story, acceptance criteria, Gherkin file
19
- when present, and specification. Also read repository instructions, ADRs,
20
- planning rules, applicable stack guidance, relevant design/database context,
21
- implementation code, tests, and interfaces produced by declared dependencies. Read any
22
- `.planr/conventions/<area>.md`, indexed from AGENTS.md, for the areas this task touches.
19
+ when present, and specification. Read the files the task names, plus `AGENTS.md` and
20
+ `CLAUDE.md` when tracked, in one batch, and any `.planr/conventions/<area>.md` indexed
21
+ from AGENTS.md for the areas this task touches. Expand only for a missing contract, a
22
+ dependency's interface or a contradiction, and stop when each claim has evidence or a
23
+ named gap.
23
24
 
24
25
  Read [the design lineage contract](planr-ship/references/design-lineage.md). If the selected
25
26
  planning root contains `design-lineage.json`, load only the selected task's mapped
@@ -77,29 +78,43 @@ its `changed` list with `git diff --name-only` plus untracked files; report any
77
78
 
78
79
  ## Discover and run verification
79
80
 
80
- Discover checks in this order:
81
+ Inspect these sources directly, in this order:
81
82
 
82
83
  1. task Test Requirements;
83
84
  2. repository instructions;
84
85
  3. package and task-runner scripts;
85
- 4. applicable CI and pre-commit configuration.
86
-
87
- Run `openplanr ship checks --json --task <task-path>` (omit `--task` for a direct
88
- request; add `--tier story` or `--tier push` before pushing) and run its `checks`
89
- from each `cwd`. The command never executes checks or writes files. When
86
+ 4. applicable CI configuration, the pre-commit hook (for example lint-staged) and the
87
+ pre-push hook, when present, whatever the change touches.
88
+
89
+ List each candidate check with its `cwd` and the source that named it. Discovery
90
+ only reads sources: never build, install or execute a check while discovering;
91
+ running checks is a later step. Then run the candidates from each `cwd`. Let the change pick checks: when it touches a build input (a
92
+ `tsconfig*.json`, a bundler config, or a package's `main`, `exports`, `bin` or
93
+ `build` scripts), include the build CI runs; prefer tests related to the changed
94
+ files. Before pushing, include every CI job whose triggers and path filters fire
95
+ for the changed paths, and for a published package that gains non-code files, a
96
+ dry-run pack that confirms they are packed. When a workflow selects jobs at
97
+ runtime (a `changes` or paths-filter job whose outputs gate other jobs), list every job it
98
+ gates and mark each conditional. Run a conditional job when a local equivalent command
99
+ exists; otherwise report it as "conditional, not run". Never drop one silently or by
100
+ reading the paths yourself. Read every workflow file whose triggers fire for the
101
+ change, not only the main one: dedicated browser, end-to-end and sandbox workflows are sources too. List a git hook as
102
+ its own command and, when it delegates to a script, also each check that script runs.
103
+ Discovery lists what the sources define whatever the size or kind of the change, a
104
+ documentation-only change included; the change picks only which listed checks you run.
105
+ Missing commands are diagnostics, not a reason to invent or
106
+ skip all verification.
107
+
108
+ If `openplanr` is already on `PATH`, `openplanr ship checks --json --task <task-path>`
109
+ (omit `--task` for a direct request; add `--tier story` or `--tier push` before
110
+ pushing) adds `complete` and diagnostics. The command never executes checks or writes files. When
90
111
  `complete` is `false`, report its error diagnostics and treat the check set as
91
112
  incomplete: a pass is not CI-equivalent. Act on warning diagnostics too; each names
92
113
  the files or checks it affects. A diagnostic that a check could not run, such as
93
114
  `TYPESCRIPT_UNAVAILABLE`, is not a pass: name that check in `checks` and verify its
94
115
  concern yourself where you can (for a new test file, confirm some tsconfig includes
95
116
  it). For a `package-contents` check, account for every `expectFiles` entry in the
96
- tarball's `files`: packed or deliberately left out. Without
97
- the CLI, the packaged read-only [verification discovery helper](planr-ship/scripts/discover-verification.mjs)
98
- may list candidates. Resolve it relative to this `SKILL.md` and run
99
- `node <helper> --project <repository-root> --task <task-path>`; omit `--task` for a
100
- direct request. It never executes checks or writes files. If both are unavailable,
101
- inspect those four sources directly. Missing commands are diagnostics, not a
102
- reason to invent or skip all verification.
117
+ tarball's `files`: packed or deliberately left out.
103
118
 
104
119
  Run the strongest applicable focused checks while working, then the relevant
105
120
  regression checks. Run each check on its own or under `set -o pipefail`, and judge
@@ -110,9 +125,9 @@ For an acceptance check written or changed for this task, follow
110
125
  Read [the result contract](planr-ship/references/result-contract.md) before reporting.
111
126
 
112
127
  Report defects you notice outside the task as [findings](planr-ship/references/findings.md),
113
- and never fix them in this change unless they block it. The packaged
114
- [backlog helper](planr-ship/scripts/backlog-item.mjs) lists and files backlog items when no
115
- CLI is installed; resolve it relative to this `SKILL.md`.
128
+ and never fix them in this change unless they block it.
129
+ [Backlog filing](planr-ship/references/backlog-filing.md) lists and files backlog items with
130
+ your own file tools.
116
131
 
117
132
  Do not write progress into an approved design package. The studio derives
118
133
  approved, planned, implementing, and verified state from canonical planning and
@@ -134,10 +149,8 @@ results instead of reproducing them in chat.
134
149
  - **Issues:** blockers with problem, impact, and next action, or `none`; then
135
150
  findings outside the task, each with its disposition.
136
151
 
137
- Keep the five machine fields unchanged. A human summary may omit empty or unavailable fields,
138
- but must make partial, blocked or unverified work clear and give the smallest
139
- recovery action. Preserve native transcripts; never require another execution
140
- or correction just to change summary wording.
152
+ Keep the five machine fields unchanged. Follow [the shared return rules](planr-ship/references/return-contract.md);
153
+ the summary must make partial, blocked or unverified work clear.
141
154
 
142
155
  Suggest `planr-land` only when a landing step remains in the requested workflow.
143
156
  Do not add a next action when the requested scope is fulfilled. This guidance
@@ -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.
@@ -11,10 +11,10 @@ another model process.
11
11
 
12
12
  ## Ground the specification
13
13
 
14
- Read the request, repository instructions, ADRs, product documentation,
15
- existing planning artifacts, relevant implementation code and tests, stack
16
- configuration, design inputs, database context, and current behavior. Infer
17
- facts the repository already answers.
14
+ Read the files the request names, plus `AGENTS.md` and `CLAUDE.md` when tracked,
15
+ in one batch. Expand only for a missing contract, a dependency or a contradiction,
16
+ and stop when each claim has evidence or a named gap. Infer facts the repository
17
+ already answers.
18
18
 
19
19
  When a missing decision materially changes scope or observable behavior, use
20
20
  the host's structured question interface. Ask no more than three short,
@@ -44,9 +44,10 @@ out-of-scope boundaries. Record concrete repository paths and verification
44
44
  signals when they are known. Keep unresolved questions out of the saved
45
45
  contract when a repository-backed default exists.
46
46
 
47
- Validate the completed artifact before returning. If a helper is unavailable,
48
- perform the same deterministic checks directly; never fall back to a
49
- model-backed CLI.
47
+ Validate the completed artifact before returning: run `openplanr spec validate <SPEC-ID>`
48
+ when `command -v openplanr` succeeds, otherwise check the path, frontmatter,
49
+ headings and acceptance IDs against the specification contract directly. Never
50
+ fall back to a model-backed CLI.
50
51
 
51
52
  ## Return
52
53
 
@@ -61,5 +62,4 @@ If the specification is partial or blocked, name the missing decision and its im
61
62
  none remains.
62
63
  - **Next:** a copy-ready host-native `planr-plan` invocation for the saved spec.
63
64
 
64
- The summary is a human view of the specification, not another schema or a reason
65
- to rerun a completed operation for different wording.
65
+ Follow [the shared return rules](planr-spec/references/return-contract.md).
@@ -4,14 +4,14 @@
4
4
  "name": "OpenPlanr"
5
5
  },
6
6
  "metadata": {
7
- "version": "3.5.0",
7
+ "version": "3.6.0",
8
8
  "description": "Generated local OpenPlanr package."
9
9
  },
10
10
  "plugins": [
11
11
  {
12
12
  "name": "planr",
13
13
  "source": "./openplanr",
14
- "version": "3.5.0",
14
+ "version": "3.6.0",
15
15
  "description": "Close the loop from intent to delivery. Plans as files in your repo, checks before you merge, and a record of what shipped, in Claude Code, Codex and Cursor.",
16
16
  "strict": true
17
17
  }
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "planr",
3
- "version": "3.5.0",
3
+ "version": "3.6.0",
4
4
  "description": "Close the loop from intent to delivery. Plans as files in your repo, checks before you merge, and a record of what shipped, in Claude Code, Codex and Cursor.",
5
5
  "author": {
6
6
  "name": "OpenPlanr",