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.
- package/CHANGELOG.md +31 -0
- package/dist/cli/commands/backlog-commands.d.ts +3 -0
- package/dist/cli/commands/backlog-commands.d.ts.map +1 -0
- package/dist/cli/commands/backlog-commands.js +60 -0
- package/dist/cli/commands/backlog-commands.js.map +1 -0
- package/dist/cli/commands/company.d.ts.map +1 -1
- package/dist/cli/commands/company.js +17 -0
- package/dist/cli/commands/company.js.map +1 -1
- package/dist/cli/commands/planning-artifacts.d.ts.map +1 -1
- package/dist/cli/commands/planning-artifacts.js +13 -5
- package/dist/cli/commands/planning-artifacts.js.map +1 -1
- package/dist/dashboard/.vite/manifest.json +1 -1
- package/dist/dashboard/assets/{index-B-l_941W.js → index-C_OquZVk.js} +2 -2
- package/dist/dashboard/assets/{index-B-l_941W.js.map → index-C_OquZVk.js.map} +1 -1
- package/dist/dashboard/dashboard-manifest.json +8 -8
- package/dist/dashboard/index.html +1 -1
- package/dist/services/artifact-service.d.ts.map +1 -1
- package/dist/services/artifact-service.js +13 -6
- package/dist/services/artifact-service.js.map +1 -1
- package/dist/services/company-export-service.d.ts +41 -0
- package/dist/services/company-export-service.d.ts.map +1 -0
- package/dist/services/company-export-service.js +429 -0
- package/dist/services/company-export-service.js.map +1 -0
- package/dist/services/company-sync-service.d.ts +24 -1
- package/dist/services/company-sync-service.d.ts.map +1 -1
- package/dist/services/company-sync-service.js +36 -19
- package/dist/services/company-sync-service.js.map +1 -1
- package/docs/CLI.md +97 -1
- package/lib/backlog-item.d.mts +45 -1
- package/lib/backlog-item.mjs +302 -34
- package/lib/host-packages/adapter-registry.json +4 -4
- package/lib/host-packages/capability-map.json +1 -1
- package/lib/host-packages/claude/.claude-plugin/marketplace.json +2 -2
- package/lib/host-packages/claude/openplanr/.claude-plugin/icon.png +0 -0
- package/lib/host-packages/claude/openplanr/.claude-plugin/plugin.json +1 -1
- package/lib/host-packages/claude/openplanr/.openplanr-content.json +77 -77
- package/lib/host-packages/claude/openplanr/README.md +1 -1
- package/lib/host-packages/claude/openplanr/skills/ceo-review/references/note-checklist.md +131 -0
- package/lib/host-packages/claude/openplanr/skills/ceo-review/references/operate-advisor-contract.md +2 -7
- package/lib/host-packages/claude/openplanr/skills/chair-review/SKILL.md +2 -7
- package/lib/host-packages/claude/openplanr/skills/chair-review/references/note-checklist.md +131 -0
- package/lib/host-packages/claude/openplanr/skills/challenger-review/SKILL.md +3 -7
- package/lib/host-packages/claude/openplanr/skills/challenger-review/references/note-checklist.md +131 -0
- package/lib/host-packages/claude/openplanr/skills/cmo-review/references/note-checklist.md +131 -0
- package/lib/host-packages/claude/openplanr/skills/cmo-review/references/operate-advisor-contract.md +2 -7
- package/lib/host-packages/claude/openplanr/skills/coo-review/references/note-checklist.md +131 -0
- package/lib/host-packages/claude/openplanr/skills/coo-review/references/operate-advisor-contract.md +2 -7
- package/lib/host-packages/claude/openplanr/skills/cpo-review/references/note-checklist.md +131 -0
- package/lib/host-packages/claude/openplanr/skills/cpo-review/references/operate-advisor-contract.md +2 -7
- package/lib/host-packages/claude/openplanr/skills/cto-review/references/note-checklist.md +131 -0
- package/lib/host-packages/claude/openplanr/skills/cto-review/references/operate-advisor-contract.md +2 -7
- package/lib/host-packages/claude/openplanr/skills/investigate/SKILL.md +2 -3
- package/lib/host-packages/claude/openplanr/skills/investigate/references/backlog-filing.md +102 -0
- package/lib/host-packages/claude/openplanr/skills/investigate/references/findings.md +8 -16
- package/lib/host-packages/claude/openplanr/skills/operate/SKILL.md +73 -84
- package/lib/host-packages/claude/openplanr/skills/operate/references/note-checklist.md +131 -0
- package/lib/host-packages/claude/openplanr/skills/operate/references/return-contract.md +10 -0
- package/lib/host-packages/claude/openplanr/skills/plan/SKILL.md +16 -17
- package/lib/host-packages/claude/openplanr/skills/plan/references/planning-ids.md +53 -0
- package/lib/host-packages/claude/openplanr/skills/plan/references/return-contract.md +10 -0
- package/lib/host-packages/claude/openplanr/skills/plan-review/SKILL.md +6 -6
- package/lib/host-packages/claude/openplanr/skills/plan-review/references/return-contract.md +10 -0
- package/lib/host-packages/claude/openplanr/skills/release/SKILL.md +40 -139
- package/lib/host-packages/claude/openplanr/skills/release/references/cadence.md +10 -0
- package/lib/host-packages/claude/openplanr/skills/release/references/release-notes.md +1 -1
- package/lib/host-packages/claude/openplanr/skills/release/references/return-contract.md +10 -0
- package/lib/host-packages/claude/openplanr/skills/release/references/schemes.md +4 -2
- package/lib/host-packages/claude/openplanr/skills/ship/SKILL.md +37 -24
- package/lib/host-packages/claude/openplanr/skills/ship/references/backlog-filing.md +102 -0
- package/lib/host-packages/claude/openplanr/skills/ship/references/findings.md +8 -16
- package/lib/host-packages/claude/openplanr/skills/ship/references/return-contract.md +10 -0
- package/lib/host-packages/claude/openplanr/skills/spec/SKILL.md +9 -9
- package/lib/host-packages/claude/openplanr/skills/spec/references/return-contract.md +10 -0
- package/lib/host-packages/cursor/openplanr/.openplanr-content.json +74 -74
- package/lib/host-packages/cursor/openplanr/manifest.json +1 -1
- package/lib/host-packages/cursor/openplanr/rules/planr-ceo-review/references/note-checklist.md +131 -0
- package/lib/host-packages/cursor/openplanr/rules/planr-ceo-review/references/operate-advisor-contract.md +2 -7
- package/lib/host-packages/cursor/openplanr/rules/planr-chair-review/references/note-checklist.md +131 -0
- package/lib/host-packages/cursor/openplanr/rules/planr-chair-review.mdc +2 -7
- package/lib/host-packages/cursor/openplanr/rules/planr-challenger-review/references/note-checklist.md +131 -0
- package/lib/host-packages/cursor/openplanr/rules/planr-challenger-review.mdc +3 -7
- package/lib/host-packages/cursor/openplanr/rules/planr-cmo-review/references/note-checklist.md +131 -0
- package/lib/host-packages/cursor/openplanr/rules/planr-cmo-review/references/operate-advisor-contract.md +2 -7
- package/lib/host-packages/cursor/openplanr/rules/planr-coo-review/references/note-checklist.md +131 -0
- package/lib/host-packages/cursor/openplanr/rules/planr-coo-review/references/operate-advisor-contract.md +2 -7
- package/lib/host-packages/cursor/openplanr/rules/planr-cpo-review/references/note-checklist.md +131 -0
- package/lib/host-packages/cursor/openplanr/rules/planr-cpo-review/references/operate-advisor-contract.md +2 -7
- package/lib/host-packages/cursor/openplanr/rules/planr-cto-review/references/note-checklist.md +131 -0
- package/lib/host-packages/cursor/openplanr/rules/planr-cto-review/references/operate-advisor-contract.md +2 -7
- package/lib/host-packages/cursor/openplanr/rules/planr-investigate/references/backlog-filing.md +102 -0
- package/lib/host-packages/cursor/openplanr/rules/planr-investigate/references/findings.md +8 -16
- package/lib/host-packages/cursor/openplanr/rules/planr-investigate.mdc +2 -3
- package/lib/host-packages/cursor/openplanr/rules/planr-operate/references/note-checklist.md +131 -0
- package/lib/host-packages/cursor/openplanr/rules/planr-operate/references/return-contract.md +10 -0
- package/lib/host-packages/cursor/openplanr/rules/planr-operate.mdc +73 -84
- package/lib/host-packages/cursor/openplanr/rules/planr-plan/references/planning-ids.md +53 -0
- package/lib/host-packages/cursor/openplanr/rules/planr-plan/references/return-contract.md +10 -0
- package/lib/host-packages/cursor/openplanr/rules/planr-plan-review/references/return-contract.md +10 -0
- package/lib/host-packages/cursor/openplanr/rules/planr-plan-review.mdc +6 -6
- package/lib/host-packages/cursor/openplanr/rules/planr-plan.mdc +16 -17
- package/lib/host-packages/cursor/openplanr/rules/planr-release/references/cadence.md +10 -0
- package/lib/host-packages/cursor/openplanr/rules/planr-release/references/release-notes.md +1 -1
- package/lib/host-packages/cursor/openplanr/rules/planr-release/references/return-contract.md +10 -0
- package/lib/host-packages/cursor/openplanr/rules/planr-release/references/schemes.md +4 -2
- package/lib/host-packages/cursor/openplanr/rules/planr-release.mdc +40 -139
- package/lib/host-packages/cursor/openplanr/rules/planr-ship/references/backlog-filing.md +102 -0
- package/lib/host-packages/cursor/openplanr/rules/planr-ship/references/findings.md +8 -16
- package/lib/host-packages/cursor/openplanr/rules/planr-ship/references/return-contract.md +10 -0
- package/lib/host-packages/cursor/openplanr/rules/planr-ship.mdc +37 -24
- package/lib/host-packages/cursor/openplanr/rules/planr-spec/references/return-contract.md +10 -0
- package/lib/host-packages/cursor/openplanr/rules/planr-spec.mdc +9 -9
- package/lib/host-packages/openai/.claude-plugin/marketplace.json +2 -2
- package/lib/host-packages/openai/openplanr/.codex-plugin/plugin.json +1 -1
- package/lib/host-packages/openai/openplanr/.openplanr-content.json +89 -89
- package/lib/host-packages/openai/openplanr/skills/ceo-review/openplanr.skill.json +4 -4
- package/lib/host-packages/openai/openplanr/skills/ceo-review/references/note-checklist.md +131 -0
- package/lib/host-packages/openai/openplanr/skills/ceo-review/references/operate-advisor-contract.md +2 -7
- package/lib/host-packages/openai/openplanr/skills/chair-review/SKILL.md +2 -7
- package/lib/host-packages/openai/openplanr/skills/chair-review/openplanr.skill.json +4 -4
- package/lib/host-packages/openai/openplanr/skills/chair-review/references/note-checklist.md +131 -0
- package/lib/host-packages/openai/openplanr/skills/challenger-review/SKILL.md +3 -7
- package/lib/host-packages/openai/openplanr/skills/challenger-review/openplanr.skill.json +4 -4
- package/lib/host-packages/openai/openplanr/skills/challenger-review/references/note-checklist.md +131 -0
- package/lib/host-packages/openai/openplanr/skills/cmo-review/openplanr.skill.json +4 -4
- package/lib/host-packages/openai/openplanr/skills/cmo-review/references/note-checklist.md +131 -0
- package/lib/host-packages/openai/openplanr/skills/cmo-review/references/operate-advisor-contract.md +2 -7
- package/lib/host-packages/openai/openplanr/skills/coo-review/openplanr.skill.json +4 -4
- package/lib/host-packages/openai/openplanr/skills/coo-review/references/note-checklist.md +131 -0
- package/lib/host-packages/openai/openplanr/skills/coo-review/references/operate-advisor-contract.md +2 -7
- package/lib/host-packages/openai/openplanr/skills/cpo-review/openplanr.skill.json +4 -4
- package/lib/host-packages/openai/openplanr/skills/cpo-review/references/note-checklist.md +131 -0
- package/lib/host-packages/openai/openplanr/skills/cpo-review/references/operate-advisor-contract.md +2 -7
- package/lib/host-packages/openai/openplanr/skills/cto-review/openplanr.skill.json +4 -4
- package/lib/host-packages/openai/openplanr/skills/cto-review/references/note-checklist.md +131 -0
- package/lib/host-packages/openai/openplanr/skills/cto-review/references/operate-advisor-contract.md +2 -7
- package/lib/host-packages/openai/openplanr/skills/investigate/SKILL.md +2 -3
- package/lib/host-packages/openai/openplanr/skills/investigate/openplanr.skill.json +4 -4
- package/lib/host-packages/openai/openplanr/skills/investigate/references/backlog-filing.md +102 -0
- package/lib/host-packages/openai/openplanr/skills/investigate/references/findings.md +8 -16
- package/lib/host-packages/openai/openplanr/skills/operate/SKILL.md +73 -84
- package/lib/host-packages/openai/openplanr/skills/operate/openplanr.skill.json +15 -4
- package/lib/host-packages/openai/openplanr/skills/operate/references/note-checklist.md +131 -0
- package/lib/host-packages/openai/openplanr/skills/operate/references/return-contract.md +10 -0
- package/lib/host-packages/openai/openplanr/skills/plan/SKILL.md +16 -17
- package/lib/host-packages/openai/openplanr/skills/plan/openplanr.skill.json +15 -4
- package/lib/host-packages/openai/openplanr/skills/plan/references/planning-ids.md +53 -0
- package/lib/host-packages/openai/openplanr/skills/plan/references/return-contract.md +10 -0
- package/lib/host-packages/openai/openplanr/skills/plan-review/SKILL.md +6 -6
- package/lib/host-packages/openai/openplanr/skills/plan-review/openplanr.skill.json +12 -1
- package/lib/host-packages/openai/openplanr/skills/plan-review/references/return-contract.md +10 -0
- package/lib/host-packages/openai/openplanr/skills/release/SKILL.md +40 -139
- package/lib/host-packages/openai/openplanr/skills/release/openplanr.skill.json +4 -4
- package/lib/host-packages/openai/openplanr/skills/release/references/cadence.md +10 -0
- package/lib/host-packages/openai/openplanr/skills/release/references/release-notes.md +1 -1
- package/lib/host-packages/openai/openplanr/skills/release/references/return-contract.md +10 -0
- package/lib/host-packages/openai/openplanr/skills/release/references/schemes.md +4 -2
- package/lib/host-packages/openai/openplanr/skills/ship/SKILL.md +37 -24
- package/lib/host-packages/openai/openplanr/skills/ship/openplanr.skill.json +9 -9
- package/lib/host-packages/openai/openplanr/skills/ship/references/backlog-filing.md +102 -0
- package/lib/host-packages/openai/openplanr/skills/ship/references/findings.md +8 -16
- package/lib/host-packages/openai/openplanr/skills/ship/references/return-contract.md +10 -0
- package/lib/host-packages/openai/openplanr/skills/spec/SKILL.md +9 -9
- package/lib/host-packages/openai/openplanr/skills/spec/openplanr.skill.json +12 -1
- package/lib/host-packages/openai/openplanr/skills/spec/references/return-contract.md +10 -0
- package/package.json +1 -1
- package/lib/host-packages/claude/openplanr/.claude-plugin/icon.svg +0 -11
- package/lib/host-packages/claude/openplanr/runtime/operate/scripts/errors.mjs +0 -8
- package/lib/host-packages/claude/openplanr/runtime/operate/scripts/operate-review-contract.mjs +0 -428
- package/lib/host-packages/claude/openplanr/runtime/operate/scripts/operate-review-note.mjs +0 -686
- package/lib/host-packages/claude/openplanr/runtime/operate/scripts/validate-note.mjs +0 -39
- package/lib/host-packages/claude/openplanr/skills/ceo-review/scripts/validate-note.mjs +0 -12
- package/lib/host-packages/claude/openplanr/skills/chair-review/scripts/validate-note.mjs +0 -12
- package/lib/host-packages/claude/openplanr/skills/challenger-review/scripts/validate-note.mjs +0 -12
- package/lib/host-packages/claude/openplanr/skills/cmo-review/scripts/validate-note.mjs +0 -12
- package/lib/host-packages/claude/openplanr/skills/coo-review/scripts/validate-note.mjs +0 -12
- package/lib/host-packages/claude/openplanr/skills/cpo-review/scripts/validate-note.mjs +0 -12
- package/lib/host-packages/claude/openplanr/skills/cto-review/scripts/validate-note.mjs +0 -12
- package/lib/host-packages/claude/openplanr/skills/investigate/scripts/backlog-item.mjs +0 -339
- package/lib/host-packages/claude/openplanr/skills/operate/scripts/validate-note.mjs +0 -12
- package/lib/host-packages/claude/openplanr/skills/plan/scripts/planning-ids.mjs +0 -166
- package/lib/host-packages/claude/openplanr/skills/release/scripts/collect_changes.sh +0 -85
- package/lib/host-packages/claude/openplanr/skills/ship/scripts/backlog-item.mjs +0 -339
- package/lib/host-packages/claude/openplanr/skills/ship/scripts/discover-verification.mjs +0 -108
- package/lib/host-packages/cursor/openplanr/rules/planr-ceo-review/scripts/validate-note.mjs +0 -12
- package/lib/host-packages/cursor/openplanr/rules/planr-chair-review/scripts/validate-note.mjs +0 -12
- package/lib/host-packages/cursor/openplanr/rules/planr-challenger-review/scripts/validate-note.mjs +0 -12
- package/lib/host-packages/cursor/openplanr/rules/planr-cmo-review/scripts/validate-note.mjs +0 -12
- package/lib/host-packages/cursor/openplanr/rules/planr-coo-review/scripts/validate-note.mjs +0 -12
- package/lib/host-packages/cursor/openplanr/rules/planr-cpo-review/scripts/validate-note.mjs +0 -12
- package/lib/host-packages/cursor/openplanr/rules/planr-cto-review/scripts/validate-note.mjs +0 -12
- package/lib/host-packages/cursor/openplanr/rules/planr-investigate/scripts/backlog-item.mjs +0 -339
- package/lib/host-packages/cursor/openplanr/rules/planr-operate/scripts/validate-note.mjs +0 -12
- package/lib/host-packages/cursor/openplanr/rules/planr-plan/scripts/planning-ids.mjs +0 -166
- package/lib/host-packages/cursor/openplanr/rules/planr-release/scripts/collect_changes.sh +0 -85
- package/lib/host-packages/cursor/openplanr/rules/planr-ship/scripts/backlog-item.mjs +0 -339
- package/lib/host-packages/cursor/openplanr/rules/planr-ship/scripts/discover-verification.mjs +0 -108
- package/lib/host-packages/cursor/openplanr/runtime/operate/scripts/errors.mjs +0 -8
- package/lib/host-packages/cursor/openplanr/runtime/operate/scripts/operate-review-contract.mjs +0 -428
- package/lib/host-packages/cursor/openplanr/runtime/operate/scripts/operate-review-note.mjs +0 -686
- package/lib/host-packages/cursor/openplanr/runtime/operate/scripts/validate-note.mjs +0 -39
- package/lib/host-packages/openai/openplanr/runtime/operate/scripts/errors.mjs +0 -8
- package/lib/host-packages/openai/openplanr/runtime/operate/scripts/operate-review-contract.mjs +0 -428
- package/lib/host-packages/openai/openplanr/runtime/operate/scripts/operate-review-note.mjs +0 -686
- package/lib/host-packages/openai/openplanr/runtime/operate/scripts/validate-note.mjs +0 -39
- package/lib/host-packages/openai/openplanr/skills/ceo-review/scripts/validate-note.mjs +0 -12
- package/lib/host-packages/openai/openplanr/skills/chair-review/scripts/validate-note.mjs +0 -12
- package/lib/host-packages/openai/openplanr/skills/challenger-review/scripts/validate-note.mjs +0 -12
- package/lib/host-packages/openai/openplanr/skills/cmo-review/scripts/validate-note.mjs +0 -12
- package/lib/host-packages/openai/openplanr/skills/coo-review/scripts/validate-note.mjs +0 -12
- package/lib/host-packages/openai/openplanr/skills/cpo-review/scripts/validate-note.mjs +0 -12
- package/lib/host-packages/openai/openplanr/skills/cto-review/scripts/validate-note.mjs +0 -12
- package/lib/host-packages/openai/openplanr/skills/investigate/scripts/backlog-item.mjs +0 -339
- package/lib/host-packages/openai/openplanr/skills/operate/scripts/validate-note.mjs +0 -12
- package/lib/host-packages/openai/openplanr/skills/plan/scripts/planning-ids.mjs +0 -166
- package/lib/host-packages/openai/openplanr/skills/release/scripts/collect_changes.sh +0 -85
- package/lib/host-packages/openai/openplanr/skills/ship/scripts/backlog-item.mjs +0 -339
- package/lib/host-packages/openai/openplanr/skills/ship/scripts/discover-verification.mjs +0 -108
package/lib/host-packages/cursor/openplanr/rules/planr-coo-review/references/note-checklist.md
ADDED
|
@@ -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
|
-
|
|
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
|
package/lib/host-packages/cursor/openplanr/rules/planr-cpo-review/references/note-checklist.md
ADDED
|
@@ -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
|
-
|
|
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
|
package/lib/host-packages/cursor/openplanr/rules/planr-cto-review/references/note-checklist.md
ADDED
|
@@ -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
|
-
|
|
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
|
package/lib/host-packages/cursor/openplanr/rules/planr-investigate/references/backlog-filing.md
ADDED
|
@@ -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
|
|
35
|
-
|
|
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
|
|
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
|
-
|
|
63
|
-
|
|
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
|
-
|
|
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
|
|
@@ -28,9 +28,8 @@ Prove the regression test with [fail-first](planr-investigate/references/fail-fi
|
|
|
28
28
|
|
|
29
29
|
Report other defects you notice as [findings](planr-investigate/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.
|
|
32
|
-
|
|
33
|
-
`SKILL.md`.
|
|
31
|
+
is never a finding. [Backlog filing](planr-investigate/references/backlog-filing.md) lists and files
|
|
32
|
+
backlog items with your own file tools.
|
|
34
33
|
|
|
35
34
|
## Return
|
|
36
35
|
|