openplanr 1.4.3 → 1.5.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/README.md +256 -250
- package/dist/cli/commands/init.d.ts.map +1 -1
- package/dist/cli/commands/init.js +14 -1
- package/dist/cli/commands/init.js.map +1 -1
- package/dist/cli/commands/rules.d.ts.map +1 -1
- package/dist/cli/commands/rules.js +10 -1
- package/dist/cli/commands/rules.js.map +1 -1
- package/dist/generators/base-generator.d.ts +15 -1
- package/dist/generators/base-generator.d.ts.map +1 -1
- package/dist/generators/base-generator.js +21 -0
- package/dist/generators/base-generator.js.map +1 -1
- package/dist/generators/claude-generator.d.ts.map +1 -1
- package/dist/generators/claude-generator.js +25 -8
- package/dist/generators/claude-generator.js.map +1 -1
- package/dist/generators/codex-generator.d.ts.map +1 -1
- package/dist/generators/codex-generator.js +17 -2
- package/dist/generators/codex-generator.js.map +1 -1
- package/dist/generators/cursor-generator.d.ts +4 -0
- package/dist/generators/cursor-generator.d.ts.map +1 -1
- package/dist/generators/cursor-generator.js +67 -8
- package/dist/generators/cursor-generator.js.map +1 -1
- package/dist/models/types.d.ts +11 -0
- package/dist/models/types.d.ts.map +1 -1
- package/dist/templates/rules/claude/CLAUDE.md.hbs +14 -0
- package/dist/templates/rules/claude/openplanr-pipeline.md.hbs +68 -0
- package/dist/templates/rules/codex/_pipeline-section.md.hbs +150 -0
- package/dist/templates/rules/cursor/agents/backend-agent.md +299 -0
- package/dist/templates/rules/cursor/agents/db-agent.md +163 -0
- package/dist/templates/rules/cursor/agents/designer-agent.md +219 -0
- package/dist/templates/rules/cursor/agents/devops-agent.md +197 -0
- package/dist/templates/rules/cursor/agents/doc-gen-agent.md +203 -0
- package/dist/templates/rules/cursor/agents/frontend-agent.md +220 -0
- package/dist/templates/rules/cursor/agents/qa-agent.md +170 -0
- package/dist/templates/rules/cursor/agents/specification-agent.md +282 -0
- package/dist/templates/rules/cursor/openplanr-pipeline-plan.mdc.hbs +194 -0
- package/dist/templates/rules/cursor/openplanr-pipeline-ship.mdc.hbs +242 -0
- package/dist/templates/rules/cursor/openplanr-pipeline.mdc.hbs +134 -0
- package/dist/utils/constants.d.ts +21 -0
- package/dist/utils/constants.d.ts.map +1 -1
- package/dist/utils/constants.js +21 -0
- package/dist/utils/constants.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,194 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: "OpenPlanr Pipeline — PO Phase orchestration (plan {feature}). Decomposes a spec into User Stories + Tasks. STOPS at the human-review gate."
|
|
3
|
+
globs: []
|
|
4
|
+
alwaysApply: false
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# /plan {feature} — PO Phase orchestration (Cursor)
|
|
8
|
+
|
|
9
|
+
When the user says **"plan {feature}"** (or "decompose {feature}", or
|
|
10
|
+
similar), follow this rule end-to-end. The argument `{feature}` is the
|
|
11
|
+
feature slug (no `feat-` or `spec-` prefix).
|
|
12
|
+
|
|
13
|
+
**Hard rule R1: this command STOPS after writing US/Task files.** The user
|
|
14
|
+
must review and explicitly say "ship {feature}" before any DEV-Phase work.
|
|
15
|
+
|
|
16
|
+
---
|
|
17
|
+
|
|
18
|
+
## Step 1 — Mode detection + input validation
|
|
19
|
+
|
|
20
|
+
### 1a — Detect planr spec mode
|
|
21
|
+
|
|
22
|
+
Before any other checks, look for `.planr/config.json` at the project root:
|
|
23
|
+
|
|
24
|
+
1. If `.planr/config.json` exists AND its `idPrefix.spec` field is set,
|
|
25
|
+
assume **spec-driven mode**.
|
|
26
|
+
2. In spec-driven mode, scan `.planr/specs/` for a directory matching
|
|
27
|
+
`^[A-Z]+-\d{3}-{feature}$`. The first match resolves to
|
|
28
|
+
`SPEC_DIR = .planr/specs/<that-dir>` (e.g.,
|
|
29
|
+
`.planr/specs/SPEC-001-auth-flow/` for `feature=auth-flow`).
|
|
30
|
+
3. Otherwise, fall through to **default mode**
|
|
31
|
+
(`output/feats/feat-{feature}/`).
|
|
32
|
+
|
|
33
|
+
For the rest of this rule, internally maintain `MODE = "spec-driven"` or
|
|
34
|
+
`"default"`.
|
|
35
|
+
|
|
36
|
+
### 1b — Validate required inputs
|
|
37
|
+
|
|
38
|
+
Required (default mode):
|
|
39
|
+
- `input/specs/spec-{feature}.md` — fail with: "spec-{feature}.md not found.
|
|
40
|
+
Create it (or use spec-driven mode by adding `idPrefix.spec` to
|
|
41
|
+
`.planr/config.json` and re-running)."
|
|
42
|
+
- `input/tech/stack.md` — fail with: "input/tech/stack.md not found. Create
|
|
43
|
+
it from `{{cursorRulesRoot}}/templates/stack.md.tpl`."
|
|
44
|
+
|
|
45
|
+
Required (spec-driven mode):
|
|
46
|
+
- `<SPEC_DIR>/SPEC-NNN-{feature}.md` — if missing, **auto-scaffold** (see below).
|
|
47
|
+
- `input/tech/stack.md` — see **Self-healing** below.
|
|
48
|
+
|
|
49
|
+
### Auto-scaffolding the spec shell
|
|
50
|
+
|
|
51
|
+
When `<SPEC_DIR>/SPEC-NNN-{feature}.md` is missing, scaffold instead of aborting:
|
|
52
|
+
|
|
53
|
+
1. Ensure `.planr/config.json` exists. If absent, write:
|
|
54
|
+
```json
|
|
55
|
+
{
|
|
56
|
+
"projectName": "<derive from package.json name or repo dir>",
|
|
57
|
+
"outputPaths": { "agile": ".planr" },
|
|
58
|
+
"idPrefix": { "spec": "SPEC" }
|
|
59
|
+
}
|
|
60
|
+
```
|
|
61
|
+
2. Ensure `.planr/specs/` exists.
|
|
62
|
+
3. Determine the next SPEC ID. Scan `.planr/specs/` for `SPEC-NNN-*/` dirs,
|
|
63
|
+
take the highest NNN, increment. Three-digit format (`SPEC-001`).
|
|
64
|
+
4. Create `.planr/specs/SPEC-NNN-{feature}/{stories,tasks,design}/`.
|
|
65
|
+
5. Read `{{cursorRulesRoot}}/templates/spec-driven.md.tpl` (if present;
|
|
66
|
+
otherwise inline a minimal v1.0.0 spec template). Substitute `{{SPEC_ID}}`,
|
|
67
|
+
`{{TITLE}}`, `{{SLUG}}`, `{{DATE}}`. Write to
|
|
68
|
+
`<SPEC_DIR>/SPEC-NNN-{feature}.md`.
|
|
69
|
+
6. Print and abort:
|
|
70
|
+
```
|
|
71
|
+
✓ Scaffolded SPEC-NNN-{feature} at .planr/specs/SPEC-NNN-{feature}/
|
|
72
|
+
Edit the spec body, then re-run: plan {feature}
|
|
73
|
+
```
|
|
74
|
+
7. **Do not invoke any role.** Decomposition runs only on the second
|
|
75
|
+
invocation, after the user has filled in the body.
|
|
76
|
+
|
|
77
|
+
If the spec body exists but contains only placeholder text (detect via
|
|
78
|
+
`_Describe the problem this feature solves` or any `_…_` template hint),
|
|
79
|
+
apply the same abort.
|
|
80
|
+
|
|
81
|
+
### Self-healing in spec mode
|
|
82
|
+
|
|
83
|
+
In spec-driven mode, when `input/tech/stack.md` is missing:
|
|
84
|
+
|
|
85
|
+
1. Read `{{cursorRulesRoot}}/templates/stack.md.tpl` (or inline the template
|
|
86
|
+
if absent) and write it verbatim to `input/tech/stack.md`. Create
|
|
87
|
+
`input/tech/` if absent.
|
|
88
|
+
2. Print:
|
|
89
|
+
```
|
|
90
|
+
✓ Created input/tech/stack.md from template (Cursor pipeline self-heal)
|
|
91
|
+
Next: edit input/tech/stack.md to declare your real stack:
|
|
92
|
+
- AppName, Language, Framework, ORM (or DatabaseType if no ORM)
|
|
93
|
+
- BuildCommand, TestCommand (used by the 3-iteration correction loop)
|
|
94
|
+
Then re-run: plan {feature}
|
|
95
|
+
```
|
|
96
|
+
3. Abort gracefully — exit Step 1 here.
|
|
97
|
+
|
|
98
|
+
In default mode, missing `stack.md` aborts with the same template guidance
|
|
99
|
+
(no auto-create — default mode missing stack typically means missing the
|
|
100
|
+
entire scaffolding).
|
|
101
|
+
|
|
102
|
+
### Conditional inputs
|
|
103
|
+
|
|
104
|
+
- **Default mode:** `input/ui/feat-{feature}/*.png` OR PNGs listed in spec's
|
|
105
|
+
`UIFiles:` block → triggers designer role.
|
|
106
|
+
- **Spec mode:** PNGs in `<SPEC_DIR>/design/*.png` → triggers designer role.
|
|
107
|
+
- `input/tech/stack.md` has non-empty `DatabaseType` AND DB env vars present →
|
|
108
|
+
triggers db role.
|
|
109
|
+
- `output/db/schema.json` already up to date → skip db role.
|
|
110
|
+
|
|
111
|
+
---
|
|
112
|
+
|
|
113
|
+
## Step 2 — Dispatch roles in dependency order
|
|
114
|
+
|
|
115
|
+
Run roles **sequentially as Composer subagents**. Each role's output feeds
|
|
116
|
+
the next.
|
|
117
|
+
|
|
118
|
+
### 2.1 — db role (conditional)
|
|
119
|
+
|
|
120
|
+
- **Skip** if `output/db/schema.json` exists AND was generated within the
|
|
121
|
+
last 24h.
|
|
122
|
+
- **Skip** if no `DatabaseType` in `stack.md`.
|
|
123
|
+
- Otherwise: dispatch the **db** subagent with system prompt
|
|
124
|
+
`{{cursorRulesRoot}}/agents/db-agent.md`. Pass MODE, feature, stack.md.
|
|
125
|
+
- Output: `output/db/schema.json`.
|
|
126
|
+
|
|
127
|
+
### 2.2 — designer role (conditional)
|
|
128
|
+
|
|
129
|
+
- PNG resolution depends on MODE:
|
|
130
|
+
- **Default mode:** PNGs from `UIFiles:` in spec → `input/ui/feat-{feature}/*.png` → `input/ui/*.png`.
|
|
131
|
+
- **Spec-driven mode:** PNGs from `<SPEC_DIR>/design/*.png`.
|
|
132
|
+
- **Skip silently** if zero PNGs resolve.
|
|
133
|
+
- Otherwise: dispatch the **designer** subagent with system prompt
|
|
134
|
+
`{{cursorRulesRoot}}/agents/designer-agent.md`. Pass MODE, feature, SPEC_DIR.
|
|
135
|
+
- Output:
|
|
136
|
+
- **Default:** `output/feats/feat-{feature}/design-spec.md`
|
|
137
|
+
- **Spec-driven:** `<SPEC_DIR>/design/design-spec.md`
|
|
138
|
+
|
|
139
|
+
### 2.3 — specification role (always, with skip optimization)
|
|
140
|
+
|
|
141
|
+
- **Spec-driven mode optimization:** if `<SPEC_DIR>/stories/` is non-empty
|
|
142
|
+
(the user already ran `planr spec decompose`), skip role invocation. Print:
|
|
143
|
+
"Decomposition already exists; skipping specification-agent."
|
|
144
|
+
- Otherwise: dispatch the **specification** subagent with system prompt
|
|
145
|
+
`{{cursorRulesRoot}}/agents/specification-agent.md`. Pass MODE, feature,
|
|
146
|
+
SPEC_DIR, plus reads of:
|
|
147
|
+
- **Default:** `input/specs/spec-{feature}.md`, `input/tech/stack.md`,
|
|
148
|
+
optional `output/feats/feat-{feature}/design-spec.md`, optional
|
|
149
|
+
`output/db/schema.json`
|
|
150
|
+
- **Spec-driven:** `<SPEC_DIR>/SPEC-NNN-{feature}.md`,
|
|
151
|
+
`input/tech/stack.md`, optional `<SPEC_DIR>/design/design-spec.md`,
|
|
152
|
+
optional `output/db/schema.json`
|
|
153
|
+
- Output:
|
|
154
|
+
- **Default:** `output/feats/feat-{feature}/us-{N}/us-{N}.md` and
|
|
155
|
+
`tasks/task-{M}.md`
|
|
156
|
+
- **Spec-driven:** `<SPEC_DIR>/stories/US-NNN-{slug}.md` and
|
|
157
|
+
`<SPEC_DIR>/tasks/T-NNN-{slug}.md`
|
|
158
|
+
|
|
159
|
+
---
|
|
160
|
+
|
|
161
|
+
## Step 3 — STOP
|
|
162
|
+
|
|
163
|
+
After the specification role completes, **STOP**. Do NOT invoke any DEV role.
|
|
164
|
+
|
|
165
|
+
Print a summary:
|
|
166
|
+
|
|
167
|
+
```
|
|
168
|
+
✓ PO Phase complete for {feature}
|
|
169
|
+
Mode: <default | spec-driven>
|
|
170
|
+
Output dir: <output/feats/feat-{feature}/ | .planr/specs/SPEC-NNN-{feature}/>
|
|
171
|
+
Design spec: <created | skipped (no PNGs) | reused>
|
|
172
|
+
DB schema: <created | reused | skipped>
|
|
173
|
+
US created: N
|
|
174
|
+
Tasks: M
|
|
175
|
+
Next step: review the generated US/task files, then say "ship {feature}".
|
|
176
|
+
```
|
|
177
|
+
|
|
178
|
+
The user must explicitly say "ship {feature}" to proceed. Do not auto-chain.
|
|
179
|
+
|
|
180
|
+
---
|
|
181
|
+
|
|
182
|
+
## Failure modes
|
|
183
|
+
|
|
184
|
+
| Condition | Action |
|
|
185
|
+
|---|---|
|
|
186
|
+
| Spec missing (default) | Abort, suggest creating `input/specs/spec-{feature}.md` or switching to spec-driven mode |
|
|
187
|
+
| stack.md missing (default) | Abort, suggest copying from `{{cursorRulesRoot}}/templates/stack.md.tpl` |
|
|
188
|
+
| db role fails (connection) | Continue without schema, flag in summary |
|
|
189
|
+
| designer role fails (corrupt PNG) | Continue without design-spec, flag in summary |
|
|
190
|
+
| specification role fails | Abort, surface the role's error verbatim |
|
|
191
|
+
|
|
192
|
+
---
|
|
193
|
+
|
|
194
|
+
*Generated by `planr rules generate --target cursor --scope pipeline`. Pairs with `openplanr-pipeline-ship.mdc` for the DEV phase.*
|
|
@@ -0,0 +1,242 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: "OpenPlanr Pipeline — DEV Phase orchestration (ship {feature}). Frontend ‖ backend → qa → devops ‖ doc-gen → snapshot → marker."
|
|
3
|
+
globs: []
|
|
4
|
+
alwaysApply: false
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# /ship {feature} — DEV Phase orchestration (Cursor)
|
|
8
|
+
|
|
9
|
+
When the user says **"ship {feature}"** (or "implement {feature}", "build
|
|
10
|
+
{feature}"), follow this rule end-to-end. The argument `{feature}` is the
|
|
11
|
+
feature slug.
|
|
12
|
+
|
|
13
|
+
**Per R1, this command MUST NOT be auto-chained from "plan {feature}".**
|
|
14
|
+
The user must explicitly invoke it after reviewing the PO-phase output.
|
|
15
|
+
|
|
16
|
+
---
|
|
17
|
+
|
|
18
|
+
## Step 0 — Snapshot sentinel
|
|
19
|
+
|
|
20
|
+
Cursor has no Stop hook (unlike Claude Code). To approximate the same
|
|
21
|
+
"reminder if /ship aborts before snapshot" guarantee, write
|
|
22
|
+
`.cursor/.snapshot-pending` (empty file) at the start of this rule. If a
|
|
23
|
+
later run encounters this sentinel, surface a one-line reminder to refresh
|
|
24
|
+
`CLAUDE.md` (Step 5) before proceeding.
|
|
25
|
+
|
|
26
|
+
---
|
|
27
|
+
|
|
28
|
+
## Step 1 — Mode detection + input validation
|
|
29
|
+
|
|
30
|
+
### 1a — Detect planr spec mode
|
|
31
|
+
|
|
32
|
+
Same as `openplanr-pipeline-plan.mdc` Step 1a:
|
|
33
|
+
|
|
34
|
+
1. If `.planr/config.json` has `idPrefix.spec` set, **spec-driven mode**.
|
|
35
|
+
2. `SPEC_DIR = .planr/specs/<SPEC-NNN-{feature}>/`.
|
|
36
|
+
3. Otherwise, **default mode** (`output/feats/feat-{feature}/`).
|
|
37
|
+
|
|
38
|
+
| Concept | Default | Spec-driven |
|
|
39
|
+
|---|---|---|
|
|
40
|
+
| Feature root | `output/feats/feat-{feature}/` | `<SPEC_DIR>/` |
|
|
41
|
+
| US files | `output/feats/feat-{feature}/us-*/us-*.md` | `<SPEC_DIR>/stories/US-*.md` |
|
|
42
|
+
| Task files | `output/feats/feat-{feature}/us-*/tasks/task-*.md` | `<SPEC_DIR>/tasks/T-*.md` |
|
|
43
|
+
| Error report | `output/feats/feat-{feature}/us-{N}/tasks/error-report.md` | `<SPEC_DIR>/tasks/error-report.md` |
|
|
44
|
+
| QA report | `output/feats/feat-{feature}/qa-report.md` | `<SPEC_DIR>/qa-report.md` |
|
|
45
|
+
|
|
46
|
+
### 1b — Validate required inputs
|
|
47
|
+
|
|
48
|
+
Verify these exist (mode-appropriate). Abort with clear errors if missing.
|
|
49
|
+
|
|
50
|
+
Required (default mode):
|
|
51
|
+
- `output/feats/feat-{feature}/` — fail: "feat-{feature}/ not found. Run plan {feature} first."
|
|
52
|
+
- ≥1 `output/feats/feat-{feature}/us-*/us-*.md`
|
|
53
|
+
- ≥1 `output/feats/feat-{feature}/us-*/tasks/task-*.md`
|
|
54
|
+
- `input/tech/stack.md`
|
|
55
|
+
|
|
56
|
+
Required (spec-driven mode):
|
|
57
|
+
- `<SPEC_DIR>/` — fail: "Spec for slug '{feature}' not found under .planr/specs/. Run plan {feature} first."
|
|
58
|
+
- ≥1 `<SPEC_DIR>/stories/US-*.md`
|
|
59
|
+
- ≥1 `<SPEC_DIR>/tasks/T-*.md`
|
|
60
|
+
- `input/tech/stack.md` — see self-heal below.
|
|
61
|
+
|
|
62
|
+
### Self-healing in spec mode
|
|
63
|
+
|
|
64
|
+
When MODE=spec-driven AND `input/tech/stack.md` is missing:
|
|
65
|
+
|
|
66
|
+
1. Read `{{cursorRulesRoot}}/templates/stack.md.tpl` and write to `input/tech/stack.md`.
|
|
67
|
+
2. Print "edit and re-run" message.
|
|
68
|
+
3. Abort gracefully. Do NOT invoke any role.
|
|
69
|
+
|
|
70
|
+
In default mode, missing `stack.md` aborts with the same template guidance.
|
|
71
|
+
|
|
72
|
+
---
|
|
73
|
+
|
|
74
|
+
## Step 2 — Iterate User Stories in topological order
|
|
75
|
+
|
|
76
|
+
In default mode, iterate each `us-{N}` directory under
|
|
77
|
+
`output/feats/feat-{feature}/` (sorted by US number). In spec-driven mode,
|
|
78
|
+
iterate each `<SPEC_DIR>/stories/US-*.md` (sorted by ID); tasks live in the
|
|
79
|
+
**flat** `<SPEC_DIR>/tasks/` directory and link to their parent story via
|
|
80
|
+
the `storyId` frontmatter field.
|
|
81
|
+
|
|
82
|
+
For each story, run its tasks:
|
|
83
|
+
|
|
84
|
+
1. Read the US file to identify which tasks belong to it.
|
|
85
|
+
2. For each task:
|
|
86
|
+
- Read frontmatter `Type` field.
|
|
87
|
+
- If `Type: UI` → dispatch the **frontend** subagent
|
|
88
|
+
(`{{cursorRulesRoot}}/agents/frontend-agent.md`).
|
|
89
|
+
- If `Type: Tech` → dispatch the **backend** subagent
|
|
90
|
+
(`{{cursorRulesRoot}}/agents/backend-agent.md`).
|
|
91
|
+
- frontend and backend tasks within the SAME US may run in parallel
|
|
92
|
+
(Cursor's Composer supports parallel subagent dispatch — use it).
|
|
93
|
+
3. Each subagent applies the **3-iteration correction loop** (R6):
|
|
94
|
+
- Iteration 1: direct fix on build/test failure.
|
|
95
|
+
- Iteration 2: re-read task spec + design-spec/schema, fix holistically.
|
|
96
|
+
- Iteration 3: minimal safe fix, flag remaining issues.
|
|
97
|
+
- On 3rd failure: write `error-report.md` (default mode:
|
|
98
|
+
`output/feats/feat-{feature}/us-{N}/tasks/error-report.md`; spec mode:
|
|
99
|
+
`<SPEC_DIR>/tasks/error-report.md`). Then STOP that task.
|
|
100
|
+
4. If a task fails after 3 iterations, ship continues with other independent
|
|
101
|
+
tasks but flags the failed task in the final summary.
|
|
102
|
+
|
|
103
|
+
---
|
|
104
|
+
|
|
105
|
+
## Step 3 — QA Gate
|
|
106
|
+
|
|
107
|
+
After all US tasks complete (or fail with error-reports), dispatch the
|
|
108
|
+
**qa** subagent (`{{cursorRulesRoot}}/agents/qa-agent.md`).
|
|
109
|
+
|
|
110
|
+
The qa subagent verifies, for each task:
|
|
111
|
+
- All "Create" files exist
|
|
112
|
+
- All "Modify" files were updated (and only as described)
|
|
113
|
+
- All "Preserve" files are unchanged (`git diff` vs base)
|
|
114
|
+
- Tests pass (`BuildCommand` + `TestCommand` from `stack.md`)
|
|
115
|
+
- DoD checklist items satisfied
|
|
116
|
+
|
|
117
|
+
If QA fails: flag in summary; **still proceed to Step 5 snapshot** so state
|
|
118
|
+
is recorded; skip Step 4 (devops + doc-gen) until the underlying task is fixed.
|
|
119
|
+
|
|
120
|
+
---
|
|
121
|
+
|
|
122
|
+
## Step 4 — devops + doc-gen subagents (parallel, optional)
|
|
123
|
+
|
|
124
|
+
Run only if QA passes.
|
|
125
|
+
|
|
126
|
+
- Dispatch **devops** subagent
|
|
127
|
+
(`{{cursorRulesRoot}}/agents/devops-agent.md`) — generates
|
|
128
|
+
`docker-compose.yml`, `.env.example`, Dockerfiles, CI workflow stubs.
|
|
129
|
+
**No `Bash` whatsoever** (prompt-level enforcement on Cursor).
|
|
130
|
+
- Dispatch **doc-gen** subagent
|
|
131
|
+
(`{{cursorRulesRoot}}/agents/doc-gen-agent.md`) — writes
|
|
132
|
+
`Docs/feat-{feature}/` from US, tasks, generated source code.
|
|
133
|
+
|
|
134
|
+
---
|
|
135
|
+
|
|
136
|
+
## Step 5 — Snapshot
|
|
137
|
+
|
|
138
|
+
Refresh `CLAUDE.md` at the project root. Read
|
|
139
|
+
`{{cursorRulesRoot}}/templates/CLAUDE.md.tpl` and write a populated copy.
|
|
140
|
+
|
|
141
|
+
Capture in this order:
|
|
142
|
+
|
|
143
|
+
1. **Project Identity** — `AppName`, `Version`, `DatabaseType`, `Framework`,
|
|
144
|
+
`Language` from `input/tech/stack.md`. Include ISO 8601 UTC timestamp.
|
|
145
|
+
2. **Phase Status** — scan filesystem to determine actual state.
|
|
146
|
+
3. **Feature Registry** — for each feature folder.
|
|
147
|
+
4. **Active Roles** — list the 8 roles with their model tier.
|
|
148
|
+
5. **Build Log** — append latest build/test outcomes (append-only — never truncate).
|
|
149
|
+
6. **Known Issues** — scan all `error-report.md` files.
|
|
150
|
+
7. **Stack Summary** — embed `input/tech/stack.md` content.
|
|
151
|
+
|
|
152
|
+
### Snapshot integrity rules
|
|
153
|
+
|
|
154
|
+
- ✅ Always write a complete, valid `CLAUDE.md` — never partial.
|
|
155
|
+
- ✅ Always include the generation timestamp.
|
|
156
|
+
- ✅ Preserve existing build log entries (append only).
|
|
157
|
+
- ✅ If a scan section fails, write `[scan error]` rather than empty.
|
|
158
|
+
- ❌ Never delete `CLAUDE.md`.
|
|
159
|
+
- ❌ Never leave `CLAUDE.md` partially written.
|
|
160
|
+
|
|
161
|
+
### Coexistence with planr-managed CLAUDE.md
|
|
162
|
+
|
|
163
|
+
If the existing `CLAUDE.md` opens with `> Generated by OpenPlanr` or contains
|
|
164
|
+
`## Context-Gathering Protocol`, do **not** overwrite. Print:
|
|
165
|
+
*"CLAUDE.md is planr-managed; pipeline state recorded via .pipeline-shipped
|
|
166
|
+
marker (Step 5.5) and qa-report.md."* Continue to Step 5.5.
|
|
167
|
+
|
|
168
|
+
After writing (or skipping), remove `.cursor/.snapshot-pending`.
|
|
169
|
+
|
|
170
|
+
---
|
|
171
|
+
|
|
172
|
+
## Step 5.5 — Write the `.pipeline-shipped` marker
|
|
173
|
+
|
|
174
|
+
After Step 5 succeeds, write a marker file recording the pipeline run.
|
|
175
|
+
|
|
176
|
+
**Default mode:** `output/feats/feat-{feature}/.pipeline-shipped`
|
|
177
|
+
**Spec-driven mode:** `<SPEC_DIR>/.pipeline-shipped`
|
|
178
|
+
|
|
179
|
+
YAML contents:
|
|
180
|
+
|
|
181
|
+
```yaml
|
|
182
|
+
shipped_at: "<ISO 8601 UTC timestamp>"
|
|
183
|
+
pipeline_version: "<runtime adapter writes its own version, e.g. 0.6.0>"
|
|
184
|
+
protocol_version: "{{protocolVersion}}"
|
|
185
|
+
runtime: "cursor"
|
|
186
|
+
mode: "<default | spec-driven>"
|
|
187
|
+
feature: "{feature}"
|
|
188
|
+
tasks_executed: <integer>
|
|
189
|
+
tasks_failed: <integer>
|
|
190
|
+
qa_gate_status: "<passed | failed | skipped>"
|
|
191
|
+
duration_seconds: <integer>
|
|
192
|
+
agents_invoked:
|
|
193
|
+
- frontend-agent # only list roles that actually ran
|
|
194
|
+
- backend-agent
|
|
195
|
+
- qa-agent
|
|
196
|
+
- devops-agent
|
|
197
|
+
- doc-gen-agent
|
|
198
|
+
devops_status: "<generated | skipped>"
|
|
199
|
+
docs_status: "<generated | skipped>"
|
|
200
|
+
snapshot_status: "<refreshed | skipped>"
|
|
201
|
+
error_reports: # paths to any error-report.md files; [] if none
|
|
202
|
+
- <path>
|
|
203
|
+
```
|
|
204
|
+
|
|
205
|
+
If Step 5 (snapshot) was skipped due to planr-managed CLAUDE.md, set
|
|
206
|
+
`snapshot_status: skipped` so the partial-success state is recorded.
|
|
207
|
+
|
|
208
|
+
---
|
|
209
|
+
|
|
210
|
+
## Step 6 — Print summary
|
|
211
|
+
|
|
212
|
+
```
|
|
213
|
+
✓ DEV Phase complete for {feature}
|
|
214
|
+
Runtime: cursor
|
|
215
|
+
Mode: <default | spec-driven>
|
|
216
|
+
Output dir: <output/feats/feat-{feature}/ | .planr/specs/SPEC-NNN-{feature}/>
|
|
217
|
+
Tasks succeeded: X / Y
|
|
218
|
+
Tasks failed: Z (see error-report.md files)
|
|
219
|
+
QA gate: <passed | failed>
|
|
220
|
+
DevOps config: <generated | skipped>
|
|
221
|
+
Docs: <generated | skipped>
|
|
222
|
+
CLAUDE.md: <refreshed | skipped (planr-managed)>
|
|
223
|
+
Marker: <SPEC_DIR>/.pipeline-shipped
|
|
224
|
+
```
|
|
225
|
+
|
|
226
|
+
If any task failed, list paths to error-report.md files.
|
|
227
|
+
|
|
228
|
+
---
|
|
229
|
+
|
|
230
|
+
## Failure modes
|
|
231
|
+
|
|
232
|
+
| Condition | Action |
|
|
233
|
+
|---|---|
|
|
234
|
+
| feat folder / spec dir missing | Abort, suggest plan {feature} first |
|
|
235
|
+
| No tasks | Abort, suggest re-running plan |
|
|
236
|
+
| Single task fails 3x | Continue with other tasks, surface in summary |
|
|
237
|
+
| All tasks fail | Skip QA + DevOps + Doc-Gen; still run snapshot |
|
|
238
|
+
| QA gate fails | Skip DevOps + Doc-Gen; still run snapshot |
|
|
239
|
+
|
|
240
|
+
---
|
|
241
|
+
|
|
242
|
+
*Generated by `planr rules generate --target cursor --scope pipeline`. Pairs with `openplanr-pipeline-plan.mdc` for the PO phase.*
|
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: "OpenPlanr Pipeline orchestration — PO/DEV phase rules, R1 human gate, mode detection, runtime parity for {{projectName}}"
|
|
3
|
+
globs: [".planr/specs/**", "input/specs/**", "output/feats/**"]
|
|
4
|
+
alwaysApply: false
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# OpenPlanr Pipeline (Cursor edition — Protocol v{{protocolVersion}})
|
|
8
|
+
|
|
9
|
+
You are operating inside an OpenPlanr-pipeline-aware project on **Cursor**.
|
|
10
|
+
The pipeline is a two-phase factory:
|
|
11
|
+
|
|
12
|
+
```
|
|
13
|
+
PO Phase (planning) → HUMAN REVIEW → DEV Phase (implementation)
|
|
14
|
+
```
|
|
15
|
+
|
|
16
|
+
**Hard rule R1: NEVER auto-chain PO Phase to DEV Phase.** A human review step
|
|
17
|
+
gates them. Two distinct user invocations are required: "plan {feature}" and
|
|
18
|
+
"ship {feature}".
|
|
19
|
+
|
|
20
|
+
---
|
|
21
|
+
|
|
22
|
+
## Mode detection
|
|
23
|
+
|
|
24
|
+
Before doing anything, decide the project mode:
|
|
25
|
+
|
|
26
|
+
1. If `.planr/config.json` exists AND its `idPrefix.spec` field is set,
|
|
27
|
+
the project is in **spec-driven mode**. Spec dir lives at
|
|
28
|
+
`.planr/specs/SPEC-NNN-{slug}/`.
|
|
29
|
+
2. Otherwise, **default mode**: `output/feats/feat-{name}/`.
|
|
30
|
+
|
|
31
|
+
| Concept | Default mode | Spec-driven mode |
|
|
32
|
+
|---|---|---|
|
|
33
|
+
| Spec source | `input/specs/spec-{name}.md` | `.planr/specs/SPEC-NNN-{slug}/SPEC-NNN-{slug}.md` |
|
|
34
|
+
| Design spec | `output/feats/feat-{name}/design-spec.md` | `<SPEC_DIR>/design/design-spec.md` |
|
|
35
|
+
| US output | `output/feats/feat-{name}/us-{N}/us-{N}.md` | `<SPEC_DIR>/stories/US-NNN-{slug}.md` |
|
|
36
|
+
| Task output | `output/feats/feat-{name}/us-{N}/tasks/task-{M}.md` | `<SPEC_DIR>/tasks/T-NNN-{slug}.md` |
|
|
37
|
+
|
|
38
|
+
---
|
|
39
|
+
|
|
40
|
+
## Routing
|
|
41
|
+
|
|
42
|
+
When the user says **"plan {feature}"** (or "decompose {feature}", "spec {feature}"):
|
|
43
|
+
follow `.cursor/rules/openplanr-pipeline-plan.mdc`.
|
|
44
|
+
|
|
45
|
+
When the user says **"ship {feature}"** (or "implement {feature}", "build {feature}"):
|
|
46
|
+
follow `.cursor/rules/openplanr-pipeline-ship.mdc`.
|
|
47
|
+
|
|
48
|
+
---
|
|
49
|
+
|
|
50
|
+
## Subagents (8 named roles)
|
|
51
|
+
|
|
52
|
+
The pipeline ships 8 specialised role prompts. On Cursor, dispatch each as a
|
|
53
|
+
**Composer subagent** with the role's body as the system prompt. The bodies
|
|
54
|
+
live in `{{cursorRulesRoot}}/agents/{role}.md`:
|
|
55
|
+
|
|
56
|
+
{{#each agentNames}}
|
|
57
|
+
- `{{this}}` — see `{{../cursorRulesRoot}}/agents/{{this}}.md`
|
|
58
|
+
{{/each}}
|
|
59
|
+
|
|
60
|
+
When invoking a role, prefix the dispatch with the project context:
|
|
61
|
+
`MODE: {default|spec-driven}`, `SPEC_DIR` (if spec mode), `feature/slug`.
|
|
62
|
+
|
|
63
|
+
---
|
|
64
|
+
|
|
65
|
+
## Tool restrictions (Cursor parity)
|
|
66
|
+
|
|
67
|
+
The Claude Code plugin enforces tool restrictions at the manifest layer
|
|
68
|
+
(`tools: Read, Glob, Grep, Edit, Write, Bash(npm:*)` etc.). Cursor uses a
|
|
69
|
+
different permission model — these restrictions are **prompt-level only**
|
|
70
|
+
on Cursor and must be respected by you, the model, voluntarily:
|
|
71
|
+
|
|
72
|
+
- **db-agent** — read-only DB introspection. Never write SQL DDL/DML. Output
|
|
73
|
+
goes to `output/db/schema.json` only.
|
|
74
|
+
- **designer-agent** — `Read`, `Glob`, `Write` only. No shell access.
|
|
75
|
+
Output: `<SPEC_DIR>/design/design-spec.md` (spec mode) or
|
|
76
|
+
`output/feats/feat-{name}/design-spec.md` (default).
|
|
77
|
+
- **specification-agent** — `Read`, `Glob`, `Grep`, `Write`. Decomposes the
|
|
78
|
+
spec into US + Task files. No shell.
|
|
79
|
+
- **frontend-agent** — `Read`, `Edit`, `Write`, `Bash(npm:*)` family. Writes
|
|
80
|
+
UI files only (`src/features/{name}/` UI layer, components, pages, styles).
|
|
81
|
+
Never touches services, controllers, DTOs, entities.
|
|
82
|
+
- **backend-agent** — same shell tools as frontend, but writes services,
|
|
83
|
+
DTOs, entities, controllers, DB queries. Never touches UI files.
|
|
84
|
+
- **qa-agent** — read-only on `src/`. Runs build + test commands. Writes only
|
|
85
|
+
`qa-report.md`.
|
|
86
|
+
- **devops-agent** — `Read`, `Glob`, `Write`, `Edit`. **No `Bash` whatsoever.**
|
|
87
|
+
Generates `docker-compose.yml`, Dockerfiles, CI workflow stubs. Never deploys.
|
|
88
|
+
- **doc-gen-agent** — `Read`, `Glob`, `Grep`, `Write`. Writes `Docs/feat-{name}/`.
|
|
89
|
+
|
|
90
|
+
If you, as the model, violate these restrictions on Cursor, the conformance
|
|
91
|
+
test will catch it via the post-ship `git diff` check on each task's "Preserve"
|
|
92
|
+
list. **Treat the restrictions as binding.**
|
|
93
|
+
|
|
94
|
+
---
|
|
95
|
+
|
|
96
|
+
## Hard rules (cross-runtime)
|
|
97
|
+
|
|
98
|
+
- **R1** — Never auto-chain PO → DEV. Two user invocations required.
|
|
99
|
+
- **R2** — Max 2 tasks per US (1 if no PNG, 2 if PNG present).
|
|
100
|
+
- **R3** — Model assignments: roles using `Sonnet 4.6` are analysis/decomposition;
|
|
101
|
+
roles using `Opus 4.7` are codegen. On Cursor, use the runtime's tier
|
|
102
|
+
selector (Cursor's "Composer model" setting) and pick the equivalent.
|
|
103
|
+
- **R5** — Files in any task's `Preserve:` list MUST NOT be touched.
|
|
104
|
+
- **R6** — Max 3 correction iterations per task. After 3, write
|
|
105
|
+
`error-report.md` and stop that task.
|
|
106
|
+
- **R7** — Refresh CLAUDE.md (or coexist with planr-managed CLAUDE.md) at end
|
|
107
|
+
of `/ship`. Cursor has no Stop hook — see `openplanr-pipeline-ship.mdc`
|
|
108
|
+
Step 5 for the alternative.
|
|
109
|
+
- **R8** — db-agent role is read-only. Never DDL/DML.
|
|
110
|
+
- **R9** — frontend role only writes UI files; backend role only writes
|
|
111
|
+
services/DTOs/entities. No crossover.
|
|
112
|
+
|
|
113
|
+
---
|
|
114
|
+
|
|
115
|
+
## Conformance proof
|
|
116
|
+
|
|
117
|
+
On a successful `/ship` run, write the `.pipeline-shipped` YAML marker file
|
|
118
|
+
(see `openplanr-pipeline-ship.mdc` Step 5.5). The marker is the audit-grade
|
|
119
|
+
proof that the pipeline executed; the conformance test harness (in the
|
|
120
|
+
`openplanr-pipeline` repo at `conformance/runner.mjs`) verifies it.
|
|
121
|
+
|
|
122
|
+
---
|
|
123
|
+
|
|
124
|
+
## Compatibility matrix
|
|
125
|
+
|
|
126
|
+
This rule represents the **Cursor adapter** to the OpenPlanr Protocol v1.0.0.
|
|
127
|
+
Other supported runtimes:
|
|
128
|
+
|
|
129
|
+
- **Claude Code** — install the `openplanr-pipeline` plugin (canonical surface)
|
|
130
|
+
- **Codex** — see the AGENTS.md generated by `planr rules generate --target codex --scope pipeline`
|
|
131
|
+
|
|
132
|
+
Full parity table: `openplanr-pipeline/docs/compatibility-matrix.md`.
|
|
133
|
+
|
|
134
|
+
*Generated by `planr rules generate --target cursor --scope pipeline`.*
|
|
@@ -2,6 +2,27 @@ import type { ArtifactType } from '../models/types.js';
|
|
|
2
2
|
export declare const CONFIG_FILENAME = ".planr/config.json";
|
|
3
3
|
export declare const DEFAULT_AGILE_DIR = ".planr";
|
|
4
4
|
export declare const DEFAULT_CURSOR_RULES_DIR = ".cursor/rules";
|
|
5
|
+
/**
|
|
6
|
+
* OpenPlanr Protocol version that the `--scope pipeline` rule generators
|
|
7
|
+
* conform to. The protocol is the runtime-agnostic contract for spec-driven
|
|
8
|
+
* mode artifacts (SPEC, US, Task schemas; PLAN/SHIP command contracts; agent
|
|
9
|
+
* roles). Bumps RARELY — only on artifact-schema breaks or workflow
|
|
10
|
+
* contract changes, NOT on pipeline plugin patches.
|
|
11
|
+
*
|
|
12
|
+
* NOT to be confused with the openplanr-pipeline plugin version (which moves
|
|
13
|
+
* fast and is tracked in the marketplace pin file, not here). Generated rule
|
|
14
|
+
* files reference the protocol contract; the runtime adapter (Claude Code
|
|
15
|
+
* plugin / Cursor MDC / Codex AGENTS.md) writes its own actual version into
|
|
16
|
+
* the `.pipeline-shipped` marker at execution time.
|
|
17
|
+
*
|
|
18
|
+
* Read by:
|
|
19
|
+
* - CursorGenerator (renders into Cursor MDC headers)
|
|
20
|
+
* - ClaudeGenerator (renders into the sibling `openplanr-pipeline.md` reference card)
|
|
21
|
+
* - CodexGenerator (renders into the AGENTS.md pipeline section)
|
|
22
|
+
*
|
|
23
|
+
* See `openplanr-pipeline/docs/protocol/` for the full protocol spec.
|
|
24
|
+
*/
|
|
25
|
+
export declare const OPENPLANR_PROTOCOL_VERSION = "1.0.0";
|
|
5
26
|
export declare const ARTIFACT_DIRS: {
|
|
6
27
|
readonly epics: "epics";
|
|
7
28
|
readonly features: "features";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../src/utils/constants.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAKvD,eAAO,MAAM,eAAe,uBAAuB,CAAC;AAEpD,eAAO,MAAM,iBAAiB,WAAW,CAAC;AAC1C,eAAO,MAAM,wBAAwB,kBAAkB,CAAC;AAExD,eAAO,MAAM,aAAa;;;;;;;;;;CAUhB,CAAC;AAEX,eAAO,MAAM,WAAW;;;;;;;;;CASd,CAAC;AAEX,eAAO,MAAM,cAAc,EAAE,OAAO,CAAC,MAAM,CAAC,YAAY,EAAE,SAAS,MAAM,EAAE,CAAC,CAQ3E,CAAC;AAEF;;;;;;;;;;;;GAYG;AACH,eAAO,MAAM,mBAAmB,2GAQtB,CAAC;AAEX,MAAM,MAAM,UAAU,GAAG,CAAC,OAAO,mBAAmB,CAAC,CAAC,MAAM,CAAC,CAAC;AAE9D,wEAAwE;AACxE,eAAO,MAAM,yBAAyB,yDAA0D,CAAC;AACjG,eAAO,MAAM,wBAAwB,wDAAyD,CAAC;AAE/F,wBAAgB,eAAe,IAAI,MAAM,CAExC"}
|
|
1
|
+
{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../src/utils/constants.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAKvD,eAAO,MAAM,eAAe,uBAAuB,CAAC;AAEpD,eAAO,MAAM,iBAAiB,WAAW,CAAC;AAC1C,eAAO,MAAM,wBAAwB,kBAAkB,CAAC;AAExD;;;;;;;;;;;;;;;;;;;GAmBG;AACH,eAAO,MAAM,0BAA0B,UAAU,CAAC;AAElD,eAAO,MAAM,aAAa;;;;;;;;;;CAUhB,CAAC;AAEX,eAAO,MAAM,WAAW;;;;;;;;;CASd,CAAC;AAEX,eAAO,MAAM,cAAc,EAAE,OAAO,CAAC,MAAM,CAAC,YAAY,EAAE,SAAS,MAAM,EAAE,CAAC,CAQ3E,CAAC;AAEF;;;;;;;;;;;;GAYG;AACH,eAAO,MAAM,mBAAmB,2GAQtB,CAAC;AAEX,MAAM,MAAM,UAAU,GAAG,CAAC,OAAO,mBAAmB,CAAC,CAAC,MAAM,CAAC,CAAC;AAE9D,wEAAwE;AACxE,eAAO,MAAM,yBAAyB,yDAA0D,CAAC;AACjG,eAAO,MAAM,wBAAwB,wDAAyD,CAAC;AAE/F,wBAAgB,eAAe,IAAI,MAAM,CAExC"}
|
package/dist/utils/constants.js
CHANGED
|
@@ -5,6 +5,27 @@ const __dirname = path.dirname(__filename);
|
|
|
5
5
|
export const CONFIG_FILENAME = '.planr/config.json';
|
|
6
6
|
export const DEFAULT_AGILE_DIR = '.planr';
|
|
7
7
|
export const DEFAULT_CURSOR_RULES_DIR = '.cursor/rules';
|
|
8
|
+
/**
|
|
9
|
+
* OpenPlanr Protocol version that the `--scope pipeline` rule generators
|
|
10
|
+
* conform to. The protocol is the runtime-agnostic contract for spec-driven
|
|
11
|
+
* mode artifacts (SPEC, US, Task schemas; PLAN/SHIP command contracts; agent
|
|
12
|
+
* roles). Bumps RARELY — only on artifact-schema breaks or workflow
|
|
13
|
+
* contract changes, NOT on pipeline plugin patches.
|
|
14
|
+
*
|
|
15
|
+
* NOT to be confused with the openplanr-pipeline plugin version (which moves
|
|
16
|
+
* fast and is tracked in the marketplace pin file, not here). Generated rule
|
|
17
|
+
* files reference the protocol contract; the runtime adapter (Claude Code
|
|
18
|
+
* plugin / Cursor MDC / Codex AGENTS.md) writes its own actual version into
|
|
19
|
+
* the `.pipeline-shipped` marker at execution time.
|
|
20
|
+
*
|
|
21
|
+
* Read by:
|
|
22
|
+
* - CursorGenerator (renders into Cursor MDC headers)
|
|
23
|
+
* - ClaudeGenerator (renders into the sibling `openplanr-pipeline.md` reference card)
|
|
24
|
+
* - CodexGenerator (renders into the AGENTS.md pipeline section)
|
|
25
|
+
*
|
|
26
|
+
* See `openplanr-pipeline/docs/protocol/` for the full protocol spec.
|
|
27
|
+
*/
|
|
28
|
+
export const OPENPLANR_PROTOCOL_VERSION = '1.0.0';
|
|
8
29
|
export const ARTIFACT_DIRS = {
|
|
9
30
|
epics: 'epics',
|
|
10
31
|
features: 'features',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../../src/utils/constants.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAGzC,MAAM,UAAU,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAClD,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;AAE3C,MAAM,CAAC,MAAM,eAAe,GAAG,oBAAoB,CAAC;AAEpD,MAAM,CAAC,MAAM,iBAAiB,GAAG,QAAQ,CAAC;AAC1C,MAAM,CAAC,MAAM,wBAAwB,GAAG,eAAe,CAAC;AAExD,MAAM,CAAC,MAAM,aAAa,GAAG;IAC3B,KAAK,EAAE,OAAO;IACd,QAAQ,EAAE,UAAU;IACpB,OAAO,EAAE,SAAS;IAClB,KAAK,EAAE,OAAO;IACd,KAAK,EAAE,OAAO;IACd,OAAO,EAAE,SAAS;IAClB,OAAO,EAAE,SAAS;IAClB,IAAI,EAAE,MAAM;IACZ,UAAU,EAAE,YAAY;CAChB,CAAC;AAEX,MAAM,CAAC,MAAM,WAAW,GAAG;IACzB,IAAI,EAAE,MAAM;IACZ,OAAO,EAAE,MAAM;IACf,KAAK,EAAE,IAAI;IACX,IAAI,EAAE,MAAM;IACZ,KAAK,EAAE,IAAI;IACX,OAAO,EAAE,IAAI;IACb,MAAM,EAAE,QAAQ;IAChB,GAAG,EAAE,KAAK;CACF,CAAC;AAEX,MAAM,CAAC,MAAM,cAAc,GAAqD;IAC9E,IAAI,EAAE,CAAC,UAAU,EAAE,aAAa,EAAE,MAAM,CAAC;IACzC,OAAO,EAAE,CAAC,UAAU,EAAE,aAAa,EAAE,MAAM,CAAC;IAC5C,KAAK,EAAE,CAAC,UAAU,EAAE,aAAa,EAAE,MAAM,CAAC;IAC1C,IAAI,EAAE,CAAC,SAAS,EAAE,aAAa,EAAE,MAAM,CAAC;IACxC,KAAK,EAAE,CAAC,SAAS,EAAE,aAAa,EAAE,MAAM,CAAC;IACzC,OAAO,EAAE,CAAC,MAAM,EAAE,QAAQ,EAAE,UAAU,CAAC;IACvC,MAAM,EAAE,CAAC,UAAU,EAAE,QAAQ,EAAE,WAAW,CAAC;CAC5C,CAAC;AAEF;;;;;;;;;;;;GAYG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAG;IACjC,SAAS;IACT,SAAS;IACT,aAAa;IACb,YAAY;IACZ,oBAAoB;IACpB,aAAa;IACb,MAAM;CACE,CAAC;AAIX,wEAAwE;AACxE,MAAM,CAAC,MAAM,yBAAyB,GAAG,CAAC,SAAS,EAAE,cAAc,EAAE,MAAM,EAAE,SAAS,CAAU,CAAC;AACjG,MAAM,CAAC,MAAM,wBAAwB,GAAG,CAAC,SAAS,EAAE,aAAa,EAAE,MAAM,EAAE,SAAS,CAAU,CAAC;AAE/F,MAAM,UAAU,eAAe;IAC7B,OAAO,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,IAAI,EAAE,WAAW,CAAC,CAAC;AACpD,CAAC"}
|
|
1
|
+
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../../src/utils/constants.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAGzC,MAAM,UAAU,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAClD,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;AAE3C,MAAM,CAAC,MAAM,eAAe,GAAG,oBAAoB,CAAC;AAEpD,MAAM,CAAC,MAAM,iBAAiB,GAAG,QAAQ,CAAC;AAC1C,MAAM,CAAC,MAAM,wBAAwB,GAAG,eAAe,CAAC;AAExD;;;;;;;;;;;;;;;;;;;GAmBG;AACH,MAAM,CAAC,MAAM,0BAA0B,GAAG,OAAO,CAAC;AAElD,MAAM,CAAC,MAAM,aAAa,GAAG;IAC3B,KAAK,EAAE,OAAO;IACd,QAAQ,EAAE,UAAU;IACpB,OAAO,EAAE,SAAS;IAClB,KAAK,EAAE,OAAO;IACd,KAAK,EAAE,OAAO;IACd,OAAO,EAAE,SAAS;IAClB,OAAO,EAAE,SAAS;IAClB,IAAI,EAAE,MAAM;IACZ,UAAU,EAAE,YAAY;CAChB,CAAC;AAEX,MAAM,CAAC,MAAM,WAAW,GAAG;IACzB,IAAI,EAAE,MAAM;IACZ,OAAO,EAAE,MAAM;IACf,KAAK,EAAE,IAAI;IACX,IAAI,EAAE,MAAM;IACZ,KAAK,EAAE,IAAI;IACX,OAAO,EAAE,IAAI;IACb,MAAM,EAAE,QAAQ;IAChB,GAAG,EAAE,KAAK;CACF,CAAC;AAEX,MAAM,CAAC,MAAM,cAAc,GAAqD;IAC9E,IAAI,EAAE,CAAC,UAAU,EAAE,aAAa,EAAE,MAAM,CAAC;IACzC,OAAO,EAAE,CAAC,UAAU,EAAE,aAAa,EAAE,MAAM,CAAC;IAC5C,KAAK,EAAE,CAAC,UAAU,EAAE,aAAa,EAAE,MAAM,CAAC;IAC1C,IAAI,EAAE,CAAC,SAAS,EAAE,aAAa,EAAE,MAAM,CAAC;IACxC,KAAK,EAAE,CAAC,SAAS,EAAE,aAAa,EAAE,MAAM,CAAC;IACzC,OAAO,EAAE,CAAC,MAAM,EAAE,QAAQ,EAAE,UAAU,CAAC;IACvC,MAAM,EAAE,CAAC,UAAU,EAAE,QAAQ,EAAE,WAAW,CAAC;CAC5C,CAAC;AAEF;;;;;;;;;;;;GAYG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAG;IACjC,SAAS;IACT,SAAS;IACT,aAAa;IACb,YAAY;IACZ,oBAAoB;IACpB,aAAa;IACb,MAAM;CACE,CAAC;AAIX,wEAAwE;AACxE,MAAM,CAAC,MAAM,yBAAyB,GAAG,CAAC,SAAS,EAAE,cAAc,EAAE,MAAM,EAAE,SAAS,CAAU,CAAC;AACjG,MAAM,CAAC,MAAM,wBAAwB,GAAG,CAAC,SAAS,EAAE,aAAa,EAAE,MAAM,EAAE,SAAS,CAAU,CAAC;AAE/F,MAAM,UAAU,eAAe;IAC7B,OAAO,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,IAAI,EAAE,WAAW,CAAC,CAAC;AACpD,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "openplanr",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.5.0",
|
|
4
4
|
"description": "AI-powered planning CLI — backlog, sprints, task templates, estimation, GitHub and Linear sync, and AI agent rules for Cursor, Claude Code, and Codex",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/cli/index.js",
|