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.
@@ -122,13 +122,8 @@ findings, use `No recommendation from current context.`, and list only decision-
122
122
 
123
123
  ## Optional quality check and return
124
124
 
125
- When available, the following command can report structural issues:
126
-
127
- ```sh
128
- node "<skill-root>/scripts/validate-note.mjs" "<absolute-output-path>" --profile advisor --contract-version 2.0.0
129
- ```
130
-
131
- Treat its diagnostics as editing guidance and report any unresolved structural issue.
125
+ Check the note against the advisor profile in [the note checklist](note-checklist.md). Treat
126
+ unchecked items as editing guidance and report any unresolved structural issue.
132
127
 
133
128
  Lead the chat return with the grounded signal and principal recommendation. Link
134
129
  the output note, summarize the finding count, and state the evidence reviewed and
@@ -28,9 +28,8 @@ Prove the regression test with [fail-first](references/fail-first.md).
28
28
 
29
29
  Report other defects you notice as [findings](references/findings.md), and never
30
30
  fix them in this change unless they block the requested fix. The established cause
31
- is never a finding. The packaged [backlog helper](scripts/backlog-item.mjs) lists
32
- and files backlog items when no CLI is installed; resolve it relative to this
33
- `SKILL.md`.
31
+ is never a finding. [Backlog filing](references/backlog-filing.md) lists and files
32
+ backlog items with your own file tools.
34
33
 
35
34
  ## Return
36
35
 
@@ -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
@@ -6,9 +6,7 @@ license: MIT
6
6
 
7
7
  # OpenPlanr Operate
8
8
 
9
- Run one useful operating review, not a ceremony. Build shared context once, fan out the five
10
- executive advisors, use the Challenger to test material claims, and let the Chair synthesize the
11
- result. Return a clean board report with decisions, actions, risks, gaps, and any real issues.
9
+ Run one useful operating review, not a ceremony. By default one agent applies all seven lenses in one pass and writes one report with decisions, actions, risks, gaps, and any real issues.
12
10
 
13
11
  ## Scope the review
14
12
 
@@ -20,58 +18,69 @@ Infer these values from the request and repository when they are clear:
20
18
  - **Roster** — all seven lenses unless the user selects fewer.
21
19
 
22
20
  Use the current repository, current snapshot, periodic review, and all seven lenses as sensible
23
- defaults. When ownership is useful, a recommendation may suggest a person, a role, or
24
- `unassigned`.
21
+ defaults. A recommendation may suggest a person, a role, or `unassigned`.
25
22
 
26
23
  Ask only when an unresolved choice would materially change the sources inspected or the decision
27
24
  being answered. Use the host's native structured-question UI when available, offering a
28
25
  recommended choice and short alternatives. Otherwise ask one concise chat question at a time.
29
26
  Never present the scope fields as a prose questionnaire.
30
27
 
31
- Preserve the user's wording in `cycle.md`, followed by the effective scope used by the lenses.
32
- Do not claim a trend from a current snapshot; describe current state and name any missing baseline.
28
+ Record the user's wording and the effective scope in the report's Scope section. Do not claim a
29
+ trend from a current snapshot; describe current state and name any missing baseline.
33
30
 
34
- ## Create the cycle workspace
31
+ ## Choose the mode
35
32
 
36
- Use a short subject slug and today's ISO date. Choose the first unused path;
37
- when the base path exists, append `-02`, `-03`, and so on. Reuse an existing
38
- cycle only when the user explicitly asks to resume it and its recorded scope
39
- matches. Never overwrite a prior cycle implicitly.
33
+ Default: this agent applies the lenses itself. Use subagents only when the user names a roster or
34
+ asks for independent reviewers; then follow Fan out.
40
35
 
41
- ```text
42
- .planr/operate/<date>-<slug>/
43
- cycle.md
44
- brief.md
45
- <selected-lens-notes>.md
46
- board-report.md
47
- ```
36
+ Where the report goes: with no `.planr/` in the repository, answer in chat, or write one file where
37
+ the repository already keeps such documents. With `.planr/`, write `board-report.md` in a cycle
38
+ directory (below). `cycle.md`, `brief.md` and per-lens notes only when subagents run or the user asks to persist the cycle; a persisted cycle without fan-out writes `cycle.md` and `brief.md` with the contents defined under Fan out.
39
+
40
+ ## Read the sources
41
+
42
+ Read the files the request names, plus `AGENTS.md` and `CLAUDE.md` when tracked, in one batch.
43
+ Expand only for a missing contract, a dependency or a contradiction, and stop when each claim has
44
+ evidence or a named gap. Keep observations separate from interpretation.
45
+
46
+ ## Apply the lenses
47
+
48
+ Work through each selected lens in one pass:
48
49
 
49
- `cycle.md` records the effective scope, roster, repository revision when relevant, and the outcome
50
- of each lens. An advisor lens run on its own creates the same layout with a one-lens roster and an
51
- unsynthesized `board-report.md`, so every review the dashboard lists has one shape.
52
- If the directory is ignored by Git, continue locally and mention that in the report; do not ask the
53
- user to change ignore rules. Report an exact filesystem error only when the cycle workspace cannot be
54
- created or written.
50
+ | Lens | Focus |
51
+ |---|---|
52
+ | CEO | strategy and finance: direction, runway, margin, cost of delay |
53
+ | CTO | technology and delivery risk: architecture, reliability, security, execution risk |
54
+ | CPO | product and activation: customer value, activation, prioritization, adoption |
55
+ | CMO | growth and market: acquisition, positioning, demand, retention, measurement |
56
+ | COO | operations and customer health: process, support, incidents, capacity |
57
+ | Challenger | for each material claim: the strongest alternative, the downside, and the confidence |
58
+ | Chair | the decision queue and action plan, from the findings above |
55
59
 
56
- ## Build shared context once
60
+ Name each Review coverage row `CEO`, `CTO`, `CPO`, `CMO`, `COO`, `Challenger` or `Chair`; the dashboard matches on those names.
57
61
 
58
- Write `brief.md` as a compact orientation aid, not a conclusion. Include:
62
+ Every recommendation cites a source: a project path, command output, or a named gap. Do not
63
+ fabricate a lens with no evidence; record it as `no material finding` or `unavailable` in review
64
+ coverage with the smallest next action. Then assemble the report below.
59
65
 
60
- - effective subject, window, requested decision, and roster;
61
- - current revision and working-tree state when relevant;
62
- - the requested range and a short change summary when the review is historical;
63
- - paths to relevant planning, product, customer, financial, operational, delivery, architecture,
64
- incident, and metric sources;
65
- - important context that was searched for but not found.
66
+ ## Cycle directory
66
67
 
67
- Open enough of the repository to make these pointers useful. Keep observations separate from
68
- interpretation so every lens can reach its own conclusion. The brief is a starting point; lenses
69
- may inspect other relevant project sources.
68
+ Use a short subject slug and today's ISO date: `.planr/operate/<date>-<slug>/`. Choose the first
69
+ unused path; when the base path exists, append `-02`, `-03`, and so on. Reuse an existing cycle
70
+ only when the user explicitly asks to resume it and its recorded scope matches. Never overwrite a
71
+ prior cycle implicitly. If the directory is ignored by Git, continue locally and mention that in the
72
+ report; do not ask the user to change ignore rules. Report an exact filesystem error only when the
73
+ directory cannot be created or written.
70
74
 
71
- ## Run the selected lenses (seven by default)
75
+ ## Fan out
76
+
77
+ When the user names a roster or asks for independent reviewers, create the cycle directory with
78
+ `cycle.md` (effective scope, roster, revision when relevant, outcome of each lens) and `brief.md`
79
+ (scope, revision, source paths, context searched for but not found), then one note per selected lens. An advisor lens run on its own creates the same layout with a one-lens
80
+ roster and an unsynthesized `board-report.md`.
72
81
 
73
82
  Dispatch only the selected independent advisors, in parallel when subagents are
74
- available:
83
+ available, giving each the brief path, its output path and the effective scope:
75
84
 
76
85
  | Lens | Skill | Output |
77
86
  |---|---|---|
@@ -81,21 +90,17 @@ available:
81
90
  | Growth and market | `planr-cmo-review` | `cmo.md` |
82
91
  | Operations and customer health | `planr-coo-review` | `coo.md` |
83
92
 
84
- Give each selected advisor the brief path, its output path, and the effective
85
- scope. Do not invoke or create note files for advisor lenses omitted by the
86
- roster. After the selected advisor work finishes:
93
+ Do not create note files for omitted lenses. After the advisor work finishes:
87
94
 
88
- 1. If Challenger is selected, run `planr-challenger-review` over the available
89
- advisor notes to surface only material exceptions, alternatives, and downside.
90
- 2. If Chair is selected, run `planr-chair-review` over the available selected
91
- notes to produce the decision queue and action plan.
92
- 3. If Challenger or Chair is omitted, record `omitted by scope` in review
93
- coverage. Assemble the board report from the available selected notes without
94
- inventing the omitted lens; when Chair is absent, clearly label the result as
95
- an unsynthesized lens summary rather than a Chair recommendation.
95
+ 1. If Challenger is selected, run `planr-challenger-review` over the available advisor notes to
96
+ surface only material exceptions, alternatives, and downside.
97
+ 2. If Chair is selected, run `planr-chair-review` over the available notes to produce the decision
98
+ queue and action plan.
99
+ 3. If Challenger or Chair is omitted, record `omitted by scope` in review coverage and label the
100
+ result an unsynthesized lens summary, not a Chair recommendation.
96
101
 
97
- Missing or malformed lens output is an issue, not a reason to fabricate that lens or discard all
98
- other useful work. Record the problem, its effect on confidence, and the smallest next action.
102
+ Missing or malformed lens output is an issue, not a reason to fabricate that lens or discard the
103
+ other work. Record the problem, its effect on confidence, and the smallest next action.
99
104
 
100
105
  ## Assemble `board-report.md`
101
106
 
@@ -144,47 +149,31 @@ Use these sections in this order:
144
149
  ## Review coverage
145
150
  | Lens | Outcome | Note | Informed |
146
151
  |---|---|---|---|
147
- | ... | reported / no material finding / unavailable / omitted by scope | `file.md` or `—` | D1 / watch / none |
152
+ | CEO | reported / no material finding / unavailable / omitted by scope | `file.md` or `—` | D1 / watch / none |
148
153
 
149
154
  ## Issues
150
155
  - **I1 — <problem>:** <impact and practical next action>
151
156
  <or `None.`>
152
157
  ```
153
158
 
154
- When Chair is selected, copy decisions and actions from `chair.md`; do not create a new executive
155
- opinion during assembly. When Chair is omitted, summarize only the available selected notes,
156
- label the report as an unsynthesized lens summary, and use `No decision-ready proposal was
157
- established.` plus `No proposed actions.` unless those notes already state a directly supported
158
- proposal. Never present that result as Chair synthesis. Keep at most five decisions, seven actions,
159
- and five decision-changing gaps. When no decision is ready, say so plainly and retain the strongest
160
- watch items and the context needed to improve the next review.
161
-
162
- ## Optional quality check
159
+ In fan out with Chair, copy decisions and actions from `chair.md` without adding a new executive
160
+ opinion. Without Chair, summarize only the available notes, label the report an unsynthesized lens
161
+ summary, and use `No decision-ready proposal was established.` plus `No proposed actions.` unless
162
+ those notes already state a supported proposal. Keep at most five decisions, seven actions, and five
163
+ decision-changing gaps. When no decision is ready, say so and keep the strongest watch items.
163
164
 
164
- The packaged [note validator](scripts/validate-note.mjs) can identify missing sections, fields, or limits:
165
+ ## Quality check
165
166
 
166
- ```sh
167
- node "<skill-root>/scripts/validate-note.mjs" "<absolute-advisor-output>" --profile advisor --contract-version 2.0.0
168
- node "<skill-root>/scripts/validate-note.mjs" "<absolute-challenger-output>" --profile challenger --contract-version 2.0.0
169
- node "<skill-root>/scripts/validate-note.mjs" "<absolute-chair-output>" --profile chair --contract-version 2.0.0
170
- node "<skill-root>/scripts/validate-note.mjs" "<absolute-board-report-path>" --profile board-report --contract-version 2.0.0
171
- ```
172
-
173
- Use their diagnostics as editing help. Include unresolved structural problems under `Issues` with
174
- their impact and next action while preserving the useful parts of the report.
167
+ Before returning, check the report (and any lens note) against [the note checklist](references/note-checklist.md), which runs the CLI's `validate-note` when `command -v openplanr` succeeds and is the check otherwise. Put unresolved structural problems under `Issues` with their impact and next action.
175
168
 
176
169
  ## Return
177
170
 
178
- Lead with the grounded overall signal and most consequential decision or missing
179
- evidence. Link `board-report.md`, summarize decision/action counts and the review
180
- coverage actually completed, and name any unavailable or unsynthesized lens.
181
- Keep the full decision queue, source inventories and diagnostic output in their
182
- existing artifacts. Include unresolved issues with their impact and next action,
183
- omitting empty chat sections. Preserve the durable report contract; different
184
- summary wording never requires another review or corrective run.
185
-
186
- When the OpenPlanr dashboard is running, the operating cycle is browsable at
187
- `#/operate/cycles/<id>`, the completed review index at `#/operate/cycles`, and the latest
188
- completed review at `#/operate/today`. The standalone dashboard presents these local reports
189
- read-only and refreshes them automatically. Inbox, actions, evidence, outcomes, recovery, and
190
- all mutations require an actor-bound governed Operate session.
171
+ Lead with the grounded overall signal and most consequential decision or missing evidence.
172
+ Link `board-report.md` when one was written, summarize decision and action counts and the review
173
+ coverage completed, and name any unavailable or unsynthesized lens. Follow
174
+ [the shared return rules](references/return-contract.md).
175
+
176
+ When the OpenPlanr dashboard is running, the cycle is browsable at `#/operate/cycles/<id>`, the
177
+ review index at `#/operate/cycles`, and the latest review at `#/operate/today`, read-only.
178
+ Inbox, actions, evidence, outcomes, recovery, and all mutations require an actor-bound governed
179
+ Operate session.