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