openplanr 1.0.0 → 1.1.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 +9 -7
- package/dist/ai/validation/index.d.ts +0 -1
- package/dist/ai/validation/index.d.ts.map +1 -1
- package/dist/ai/validation/index.js +0 -1
- package/dist/ai/validation/index.js.map +1 -1
- package/dist/ai/validation/task-validator.d.ts +3 -3
- package/dist/ai/validation/task-validator.d.ts.map +1 -1
- package/dist/ai/validation/task-validator.js +3 -11
- package/dist/ai/validation/task-validator.js.map +1 -1
- package/dist/cli/commands/checklist.d.ts.map +1 -1
- package/dist/cli/commands/checklist.js +34 -17
- package/dist/cli/commands/checklist.js.map +1 -1
- package/dist/cli/commands/epic.d.ts.map +1 -1
- package/dist/cli/commands/epic.js +3 -0
- package/dist/cli/commands/epic.js.map +1 -1
- package/dist/cli/commands/feature.d.ts.map +1 -1
- package/dist/cli/commands/feature.js +3 -0
- package/dist/cli/commands/feature.js.map +1 -1
- package/dist/cli/commands/init.d.ts.map +1 -1
- package/dist/cli/commands/init.js +21 -2
- package/dist/cli/commands/init.js.map +1 -1
- package/dist/cli/commands/plan.d.ts.map +1 -1
- package/dist/cli/commands/plan.js +123 -0
- package/dist/cli/commands/plan.js.map +1 -1
- package/dist/cli/commands/story.d.ts.map +1 -1
- package/dist/cli/commands/story.js +3 -0
- package/dist/cli/commands/story.js.map +1 -1
- package/dist/cli/commands/task.d.ts.map +1 -1
- package/dist/cli/commands/task.js +4 -0
- package/dist/cli/commands/task.js.map +1 -1
- package/dist/cli/helpers/task-creation.d.ts.map +1 -1
- package/dist/cli/helpers/task-creation.js +2 -3
- package/dist/cli/helpers/task-creation.js.map +1 -1
- package/dist/cli/index.js +13 -2
- package/dist/cli/index.js.map +1 -1
- package/dist/generators/cursor-generator.js +6 -6
- package/dist/generators/cursor-generator.js.map +1 -1
- package/dist/models/schema.js +1 -1
- package/dist/models/schema.js.map +1 -1
- package/dist/services/checklist-service.d.ts +5 -0
- package/dist/services/checklist-service.d.ts.map +1 -1
- package/dist/services/checklist-service.js +16 -0
- package/dist/services/checklist-service.js.map +1 -1
- package/dist/services/config-service.d.ts +3 -0
- package/dist/services/config-service.d.ts.map +1 -1
- package/dist/services/config-service.js +8 -2
- package/dist/services/config-service.js.map +1 -1
- package/dist/templates/adrs/adr-general.md.hbs +9 -0
- package/dist/templates/backlog/backlog-item.md.hbs +1 -0
- package/dist/templates/checklists/agile-checklist.md.hbs +24 -24
- package/dist/templates/epics/epic.md.hbs +3 -0
- package/dist/templates/export/planning-report.md.hbs +11 -7
- package/dist/templates/features/feature.md.hbs +2 -0
- package/dist/templates/guides/estimation.md.hbs +14 -14
- package/dist/templates/quick/quick-task.md.hbs +1 -0
- package/dist/templates/rules/claude/CLAUDE.md.hbs +11 -0
- package/dist/templates/rules/codex/AGENTS.md.hbs +9 -0
- package/dist/templates/rules/cursor/{2001-agile-create-epic.mdc.hbs → create-epic.mdc.hbs} +6 -0
- package/dist/templates/rules/cursor/{2002-agile-create-features.mdc.hbs → create-features.mdc.hbs} +6 -0
- package/dist/templates/rules/cursor/{2100-create-task-list.mdc.hbs → create-task-list.mdc.hbs} +7 -0
- package/dist/templates/rules/cursor/{2003-agile-create-user-story.mdc.hbs → create-user-story.mdc.hbs} +6 -0
- package/dist/templates/rules/cursor/{2101-implement-task-list.mdc.hbs → implement-task-list.mdc.hbs} +7 -0
- package/dist/templates/sprints/sprint.md.hbs +3 -0
- package/dist/templates/tasks/task-list.md.hbs +3 -0
- package/dist/utils/constants.d.ts +2 -2
- package/dist/utils/constants.d.ts.map +1 -1
- package/dist/utils/constants.js +2 -2
- package/dist/utils/constants.js.map +1 -1
- package/package.json +4 -4
- package/dist/ai/validation/dependency-chains.d.ts +0 -21
- package/dist/ai/validation/dependency-chains.d.ts.map +0 -1
- package/dist/ai/validation/dependency-chains.js +0 -114
- package/dist/ai/validation/dependency-chains.js.map +0 -1
- /package/dist/templates/rules/cursor/{2000-agile-checklist.mdc.hbs → agile-checklist.mdc.hbs} +0 -0
|
@@ -9,6 +9,7 @@ export async function createChecklist(projectDir, config) {
|
|
|
9
9
|
const filePath = getChecklistPath(projectDir, config);
|
|
10
10
|
const content = await renderTemplate('checklists/agile-checklist.md.hbs', {
|
|
11
11
|
projectName: config.projectName,
|
|
12
|
+
agilePath: config.outputPaths.agile,
|
|
12
13
|
date: new Date().toISOString().split('T')[0],
|
|
13
14
|
}, config.templateOverrides);
|
|
14
15
|
await writeFile(filePath, content);
|
|
@@ -58,6 +59,21 @@ export function toggleChecklistItems(content, toggleIndices, items) {
|
|
|
58
59
|
}
|
|
59
60
|
return lines.join('\n');
|
|
60
61
|
}
|
|
62
|
+
/**
|
|
63
|
+
* Mark a checklist item as done by its index number.
|
|
64
|
+
* No-op if the checklist doesn't exist or the item is already checked.
|
|
65
|
+
*/
|
|
66
|
+
export async function checkItem(projectDir, config, itemIndex) {
|
|
67
|
+
const content = await readChecklist(projectDir, config);
|
|
68
|
+
if (!content)
|
|
69
|
+
return;
|
|
70
|
+
const items = parseChecklistItems(content);
|
|
71
|
+
const item = items.find((i) => i.index === itemIndex);
|
|
72
|
+
if (!item || item.done)
|
|
73
|
+
return;
|
|
74
|
+
const updated = toggleChecklistItems(content, new Set([itemIndex]), items);
|
|
75
|
+
await writeFile(getChecklistPath(projectDir, config), updated);
|
|
76
|
+
}
|
|
61
77
|
/**
|
|
62
78
|
* Get checklist completion progress.
|
|
63
79
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"checklist-service.js","sourceRoot":"","sources":["../../src/services/checklist-service.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"checklist-service.js","sourceRoot":"","sources":["../../src/services/checklist-service.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,7 @@
|
|
|
1
1
|
import type { OpenPlanrConfig } from '../models/types.js';
|
|
2
|
+
export declare class ConfigNotFoundError extends Error {
|
|
3
|
+
constructor(projectDir: string);
|
|
4
|
+
}
|
|
2
5
|
export declare function loadConfig(projectDir: string): Promise<OpenPlanrConfig>;
|
|
3
6
|
export declare function saveConfig(projectDir: string, config: OpenPlanrConfig): Promise<void>;
|
|
4
7
|
export declare function createDefaultConfig(projectName: string): OpenPlanrConfig;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config-service.d.ts","sourceRoot":"","sources":["../../src/services/config-service.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAI1D,wBAAsB,UAAU,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC,CAS7E;AAED,wBAAsB,UAAU,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC,CAG3F;AAED,wBAAgB,mBAAmB,CAAC,WAAW,EAAE,MAAM,GAAG,eAAe,CAqBxE"}
|
|
1
|
+
{"version":3,"file":"config-service.d.ts","sourceRoot":"","sources":["../../src/services/config-service.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAI1D,qBAAa,mBAAoB,SAAQ,KAAK;gBAChC,UAAU,EAAE,MAAM;CAI/B;AAED,wBAAsB,UAAU,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC,CAS7E;AAED,wBAAsB,UAAU,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC,CAG3F;AAED,wBAAgB,mBAAmB,CAAC,WAAW,EAAE,MAAM,GAAG,eAAe,CAqBxE"}
|
|
@@ -2,11 +2,17 @@ import path from 'node:path';
|
|
|
2
2
|
import { configSchema } from '../models/schema.js';
|
|
3
3
|
import { CONFIG_FILENAME } from '../utils/constants.js';
|
|
4
4
|
import { fileExists, readFile, writeFile } from '../utils/fs.js';
|
|
5
|
+
export class ConfigNotFoundError extends Error {
|
|
6
|
+
constructor(projectDir) {
|
|
7
|
+
super(`No ${CONFIG_FILENAME} found in ${projectDir}.`);
|
|
8
|
+
this.name = 'ConfigNotFoundError';
|
|
9
|
+
}
|
|
10
|
+
}
|
|
5
11
|
export async function loadConfig(projectDir) {
|
|
6
12
|
const configPath = path.join(projectDir, CONFIG_FILENAME);
|
|
7
13
|
const exists = await fileExists(configPath);
|
|
8
14
|
if (!exists) {
|
|
9
|
-
throw new
|
|
15
|
+
throw new ConfigNotFoundError(projectDir);
|
|
10
16
|
}
|
|
11
17
|
const raw = await readFile(configPath);
|
|
12
18
|
const parsed = JSON.parse(raw);
|
|
@@ -21,7 +27,7 @@ export function createDefaultConfig(projectName) {
|
|
|
21
27
|
projectName,
|
|
22
28
|
targets: ['cursor', 'claude', 'codex'],
|
|
23
29
|
outputPaths: {
|
|
24
|
-
agile: '
|
|
30
|
+
agile: '.planr',
|
|
25
31
|
cursorRules: '.cursor/rules',
|
|
26
32
|
claudeConfig: '.',
|
|
27
33
|
codexConfig: '.',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config-service.js","sourceRoot":"","sources":["../../src/services/config-service.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAEnD,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAEjE,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,UAAkB;IACjD,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,eAAe,CAAC,CAAC;IAC1D,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,UAAU,CAAC,CAAC;IAC5C,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,MAAM,IAAI,
|
|
1
|
+
{"version":3,"file":"config-service.js","sourceRoot":"","sources":["../../src/services/config-service.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAEnD,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAEjE,MAAM,OAAO,mBAAoB,SAAQ,KAAK;IAC5C,YAAY,UAAkB;QAC5B,KAAK,CAAC,MAAM,eAAe,aAAa,UAAU,GAAG,CAAC,CAAC;QACvD,IAAI,CAAC,IAAI,GAAG,qBAAqB,CAAC;IACpC,CAAC;CACF;AAED,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,UAAkB;IACjD,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,eAAe,CAAC,CAAC;IAC1D,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,UAAU,CAAC,CAAC;IAC5C,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,MAAM,IAAI,mBAAmB,CAAC,UAAU,CAAC,CAAC;IAC5C,CAAC;IACD,MAAM,GAAG,GAAG,MAAM,QAAQ,CAAC,UAAU,CAAC,CAAC;IACvC,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAC/B,OAAO,YAAY,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;AACpC,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,UAAkB,EAAE,MAAuB;IAC1E,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,eAAe,CAAC,CAAC;IAC1D,MAAM,SAAS,CAAC,UAAU,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;AACtE,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,WAAmB;IACrD,OAAO;QACL,WAAW;QACX,OAAO,EAAE,CAAC,QAAQ,EAAE,QAAQ,EAAE,OAAO,CAAC;QACtC,WAAW,EAAE;YACX,KAAK,EAAE,QAAQ;YACf,WAAW,EAAE,eAAe;YAC5B,YAAY,EAAE,GAAG;YACjB,WAAW,EAAE,GAAG;SACjB;QACD,QAAQ,EAAE;YACR,IAAI,EAAE,MAAM;YACZ,OAAO,EAAE,MAAM;YACf,KAAK,EAAE,IAAI;YACX,IAAI,EAAE,MAAM;YACZ,KAAK,EAAE,IAAI;YACX,OAAO,EAAE,IAAI;YACb,MAAM,EAAE,QAAQ;SACjB;QACD,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;KAClD,CAAC;AACJ,CAAC"}
|
|
@@ -11,36 +11,45 @@ status: "proposed"
|
|
|
11
11
|
{{context}}
|
|
12
12
|
|
|
13
13
|
## Decision Drivers
|
|
14
|
+
|
|
14
15
|
{{#each decisionDrivers}}
|
|
15
16
|
- {{this}}
|
|
16
17
|
{{/each}}
|
|
17
18
|
|
|
18
19
|
## Considered Options
|
|
20
|
+
|
|
19
21
|
{{#each options}}
|
|
20
22
|
### Option {{@index}}: {{this.name}}
|
|
23
|
+
|
|
21
24
|
{{this.description}}
|
|
22
25
|
|
|
23
26
|
**Pros:**
|
|
27
|
+
|
|
24
28
|
{{#each this.pros}}
|
|
25
29
|
- {{this}}
|
|
26
30
|
{{/each}}
|
|
27
31
|
|
|
28
32
|
**Cons:**
|
|
33
|
+
|
|
29
34
|
{{#each this.cons}}
|
|
30
35
|
- {{this}}
|
|
31
36
|
{{/each}}
|
|
32
37
|
{{/each}}
|
|
33
38
|
|
|
34
39
|
## Decision
|
|
40
|
+
|
|
35
41
|
{{decision}}
|
|
36
42
|
|
|
37
43
|
## Consequences
|
|
44
|
+
|
|
38
45
|
### Positive
|
|
46
|
+
|
|
39
47
|
{{#each positiveConsequences}}
|
|
40
48
|
- {{this}}
|
|
41
49
|
{{/each}}
|
|
42
50
|
|
|
43
51
|
### Negative
|
|
52
|
+
|
|
44
53
|
{{#each negativeConsequences}}
|
|
45
54
|
- {{this}}
|
|
46
55
|
{{/each}}
|
|
@@ -4,42 +4,42 @@
|
|
|
4
4
|
|
|
5
5
|
## Phase 1: Requirements Analysis
|
|
6
6
|
|
|
7
|
-
| #
|
|
8
|
-
|
|
9
|
-
| 1
|
|
10
|
-
| 2
|
|
11
|
-
| 3
|
|
7
|
+
| # | Activity | Command | Status |
|
|
8
|
+
| --- | --------------------------------- | ------------------------------------ | ------ |
|
|
9
|
+
| 1 | Create Epic | `planr epic create` | [ ] |
|
|
10
|
+
| 2 | Create Features from Epic | `planr feature create --epic <ID>` | [ ] |
|
|
11
|
+
| 3 | Create User Stories from Features | `planr story create --feature <ID>` | [ ] |
|
|
12
12
|
|
|
13
13
|
## Phase 2: Technical Design
|
|
14
14
|
|
|
15
|
-
| #
|
|
16
|
-
|
|
17
|
-
| 4
|
|
18
|
-
| 5
|
|
15
|
+
| # | Activity | Artifact | Status |
|
|
16
|
+
| --- | ------------------------ | --------------------------- | ------ |
|
|
17
|
+
| 4 | UML Sequence Diagrams | `{{agilePath}}/diagrams/` | [ ] |
|
|
18
|
+
| 5 | C4 Architecture Diagrams | `{{agilePath}}/diagrams/` | [ ] |
|
|
19
19
|
|
|
20
20
|
## Phase 3: Architecture Decision Records
|
|
21
21
|
|
|
22
|
-
| #
|
|
23
|
-
|
|
24
|
-
| 6
|
|
25
|
-
| 7
|
|
26
|
-
| 8
|
|
27
|
-
| 9
|
|
22
|
+
| # | Activity | Command | Status |
|
|
23
|
+
| --- | ---------------------------------- | ----------------------- | ------ |
|
|
24
|
+
| 6 | Functional Requirements ADR (CLI) | `{{agilePath}}/adrs/` | [ ] |
|
|
25
|
+
| 7 | Functional Requirements ADR (REST) | `{{agilePath}}/adrs/` | [ ] |
|
|
26
|
+
| 8 | Acceptance Testing Strategy ADR | `{{agilePath}}/adrs/` | [ ] |
|
|
27
|
+
| 9 | Non-Functional Requirements ADR | `{{agilePath}}/adrs/` | [ ] |
|
|
28
28
|
|
|
29
29
|
## Phase 4: Solution Planning
|
|
30
30
|
|
|
31
|
-
| #
|
|
32
|
-
|
|
33
|
-
| 10
|
|
34
|
-
| 11
|
|
35
|
-
| 12
|
|
31
|
+
| # | Activity | Command | Status |
|
|
32
|
+
| ---- | ------------------------- | -------------------------------------- | ------ |
|
|
33
|
+
| 10 | Create Task Lists | `planr task create --story <ID>` | [ ] |
|
|
34
|
+
| 11 | Implement Tasks | Use coding agent with generated rules | [ ] |
|
|
35
|
+
| 12 | Create Definition of Done | `{{agilePath}}/checklists/` | [ ] |
|
|
36
36
|
|
|
37
37
|
## Phase 5: Solution Review
|
|
38
38
|
|
|
39
|
-
| #
|
|
40
|
-
|
|
41
|
-
| 13
|
|
42
|
-
| 14
|
|
39
|
+
| # | Activity | Artifact | Status |
|
|
40
|
+
| ---- | -------------------- | --------------------------- | ------ |
|
|
41
|
+
| 13 | UML Class Diagrams | `{{agilePath}}/diagrams/` | [ ] |
|
|
42
|
+
| 14 | Review & Refactoring | Code review | [ ] |
|
|
43
43
|
|
|
44
44
|
## Best Practices
|
|
45
45
|
|
|
@@ -23,6 +23,7 @@ project: "{{projectName}}"
|
|
|
23
23
|
{{solutionOverview}}
|
|
24
24
|
|
|
25
25
|
## Success Criteria
|
|
26
|
+
|
|
26
27
|
{{#if successCriteriaList}}
|
|
27
28
|
{{#each successCriteriaList}}
|
|
28
29
|
- {{this}}
|
|
@@ -32,6 +33,7 @@ project: "{{projectName}}"
|
|
|
32
33
|
{{/if}}
|
|
33
34
|
|
|
34
35
|
## Key Features
|
|
36
|
+
|
|
35
37
|
{{#each keyFeatures}}
|
|
36
38
|
- {{this}}
|
|
37
39
|
{{/each}}
|
|
@@ -43,6 +45,7 @@ project: "{{projectName}}"
|
|
|
43
45
|
{{risks}}
|
|
44
46
|
|
|
45
47
|
## Features
|
|
48
|
+
|
|
46
49
|
{{#if featureIds}}
|
|
47
50
|
{{#each featureIds}}
|
|
48
51
|
- [{{this.id}}](../features/{{this.filename}}.md)
|
|
@@ -6,13 +6,13 @@
|
|
|
6
6
|
|
|
7
7
|
## Summary
|
|
8
8
|
|
|
9
|
-
| Type
|
|
10
|
-
|
|
11
|
-
| Epics
|
|
12
|
-
| Features
|
|
13
|
-
| Stories
|
|
14
|
-
| Tasks
|
|
15
|
-
| Quick Tasks | {{counts.quick}}
|
|
9
|
+
| Type | Count |
|
|
10
|
+
| ----------- | ------------------ |
|
|
11
|
+
| Epics | {{counts.epics}} |
|
|
12
|
+
| Features | {{counts.features}} |
|
|
13
|
+
| Stories | {{counts.stories}} |
|
|
14
|
+
| Tasks | {{counts.tasks}} |
|
|
15
|
+
| Quick Tasks | {{counts.quick}} |
|
|
16
16
|
|
|
17
17
|
---
|
|
18
18
|
|
|
@@ -74,6 +74,7 @@
|
|
|
74
74
|
{{/each}}
|
|
75
75
|
{{/if}}
|
|
76
76
|
{{#if orphanFeatures.length}}
|
|
77
|
+
|
|
77
78
|
## Unlinked Features
|
|
78
79
|
|
|
79
80
|
{{#each orphanFeatures}}
|
|
@@ -96,6 +97,7 @@
|
|
|
96
97
|
{{/each}}
|
|
97
98
|
{{/if}}
|
|
98
99
|
{{#if orphanStories.length}}
|
|
100
|
+
|
|
99
101
|
## Unlinked Stories
|
|
100
102
|
|
|
101
103
|
{{#each orphanStories}}
|
|
@@ -108,6 +110,7 @@
|
|
|
108
110
|
{{/each}}
|
|
109
111
|
{{/if}}
|
|
110
112
|
{{#if orphanTasks.length}}
|
|
113
|
+
|
|
111
114
|
## Unlinked Tasks
|
|
112
115
|
|
|
113
116
|
{{#each orphanTasks}}
|
|
@@ -120,6 +123,7 @@
|
|
|
120
123
|
{{/each}}
|
|
121
124
|
{{/if}}
|
|
122
125
|
{{#if quickTasks.length}}
|
|
126
|
+
|
|
123
127
|
## Quick Tasks
|
|
124
128
|
|
|
125
129
|
{{#each quickTasks}}
|
|
@@ -16,11 +16,13 @@ status: "planning"
|
|
|
16
16
|
{{overview}}
|
|
17
17
|
|
|
18
18
|
## Functional Requirements
|
|
19
|
+
|
|
19
20
|
{{#each functionalRequirements}}
|
|
20
21
|
- {{this}}
|
|
21
22
|
{{/each}}
|
|
22
23
|
|
|
23
24
|
## User Stories
|
|
25
|
+
|
|
24
26
|
{{#if storyIds}}
|
|
25
27
|
{{#each storyIds}}
|
|
26
28
|
- [{{this.id}}](../stories/{{this.filename}}.md)
|
|
@@ -6,15 +6,15 @@ This guide defines how story points, complexity, and effort hours are used in th
|
|
|
6
6
|
|
|
7
7
|
Story points measure **relative complexity**, not calendar time. Use the Fibonacci sequence to force clear distinctions between small and large work.
|
|
8
8
|
|
|
9
|
-
| Points | Label
|
|
10
|
-
|
|
11
|
-
| **1**
|
|
12
|
-
| **2**
|
|
13
|
-
| **3**
|
|
14
|
-
| **5**
|
|
15
|
-
| **8**
|
|
16
|
-
| **13** | Very Large
|
|
17
|
-
| **21** | Epic-scale
|
|
9
|
+
| Points | Label | Description | Typical Scope |
|
|
10
|
+
| ------ | -------------- | ----------------------------------- | ------------------------------- |
|
|
11
|
+
| **1** | Trivial | Config change, typo fix, one-liner | Minutes to 1 hour |
|
|
12
|
+
| **2** | Small | Single-file change, well-understood | 1-3 hours |
|
|
13
|
+
| **3** | Moderate | A few files, clear approach | Half a day |
|
|
14
|
+
| **5** | Medium | Multiple files, some unknowns | 1-2 days |
|
|
15
|
+
| **8** | Large | Cross-cutting change, needs design | 2-4 days |
|
|
16
|
+
| **13** | Very Large | Multi-system, significant unknowns | 1-2 weeks |
|
|
17
|
+
| **21** | Epic-scale | Major feature or rewrite, high risk | 2+ weeks (consider splitting) |
|
|
18
18
|
|
|
19
19
|
### Rules of Thumb
|
|
20
20
|
|
|
@@ -25,11 +25,11 @@ Story points measure **relative complexity**, not calendar time. Use the Fibonac
|
|
|
25
25
|
|
|
26
26
|
## Complexity Levels
|
|
27
27
|
|
|
28
|
-
| Level
|
|
29
|
-
|
|
30
|
-
| **Low**
|
|
31
|
-
| **Medium** | Some unknowns, may need research or new patterns, moderate integration
|
|
32
|
-
| **High**
|
|
28
|
+
| Level | Meaning |
|
|
29
|
+
| ---------- | ----------------------------------------------------------------------------------------- |
|
|
30
|
+
| **Low** | Well-understood domain, clear requirements, existing patterns to follow |
|
|
31
|
+
| **Medium** | Some unknowns, may need research or new patterns, moderate integration |
|
|
32
|
+
| **High** | Significant unknowns, new technology, cross-system impact, security/performance-critical |
|
|
33
33
|
|
|
34
34
|
## Risk Factors
|
|
35
35
|
|
|
@@ -9,12 +9,14 @@ This project uses OpenPlanr for agile planning. All artifacts are in `{{agilePat
|
|
|
9
9
|
Before implementing ANY task or subtask, you MUST gather full planning context by reading the artifact hierarchy. Follow this exact sequence:
|
|
10
10
|
|
|
11
11
|
### Step 1: Read the Task List
|
|
12
|
+
|
|
12
13
|
- Open the task file from `{{agilePath}}/tasks/` (e.g., `TASK-001-*.md`) or quick task from `{{agilePath}}/quick/`
|
|
13
14
|
- Parse the frontmatter to find `storyId` or `featureId`
|
|
14
15
|
- Identify the target subtask (first unchecked `- [ ]` item)
|
|
15
16
|
- Read ALL subtasks to understand the full scope and dependencies
|
|
16
17
|
|
|
17
18
|
### Step 2: Read the Parent Chain (MANDATORY)
|
|
19
|
+
|
|
18
20
|
Follow the artifact hierarchy upward — each level adds critical context:
|
|
19
21
|
|
|
20
22
|
1. **User Story** → `{{agilePath}}/stories/US-XXX-*.md`
|
|
@@ -31,10 +33,12 @@ Follow the artifact hierarchy upward — each level adds critical context:
|
|
|
31
33
|
- This provides the WHY behind the work
|
|
32
34
|
|
|
33
35
|
### Step 3: Read Architecture Context
|
|
36
|
+
|
|
34
37
|
- Read ALL ADRs in `{{agilePath}}/adrs/` — these are binding technical decisions
|
|
35
38
|
- Check `{{agilePath}}/checklists/AGILE-DEVELOPMENT-GUIDE.md` for current progress
|
|
36
39
|
|
|
37
40
|
### Step 4: Scan the Codebase
|
|
41
|
+
|
|
38
42
|
Before writing code, understand what exists:
|
|
39
43
|
|
|
40
44
|
1. **Identify the tech stack** — Read `package.json`, `tsconfig.json`, or equivalent
|
|
@@ -65,6 +69,7 @@ Before writing code, understand what exists:
|
|
|
65
69
|
5. **Solution Review** — Review against acceptance criteria and refactor
|
|
66
70
|
|
|
67
71
|
## Artifact Locations
|
|
72
|
+
|
|
68
73
|
- Task lists: `{{agilePath}}/tasks/`
|
|
69
74
|
- User stories: `{{agilePath}}/stories/`
|
|
70
75
|
- Gherkin acceptance criteria: `{{agilePath}}/stories/*-gherkin.feature`
|
|
@@ -77,7 +82,9 @@ Before writing code, understand what exists:
|
|
|
77
82
|
- Checklist: `{{agilePath}}/checklists/AGILE-DEVELOPMENT-GUIDE.md`
|
|
78
83
|
|
|
79
84
|
## Frontmatter Cross-References
|
|
85
|
+
|
|
80
86
|
Artifacts link to their parents via frontmatter fields:
|
|
87
|
+
|
|
81
88
|
- Tasks → `storyId: "US-XXX"` or `featureId: "FEAT-XXX"`
|
|
82
89
|
- Stories → `featureId: "FEAT-XXX"`
|
|
83
90
|
- Features → `epicId: "EPIC-XXX"`
|
|
@@ -85,7 +92,9 @@ Artifacts link to their parents via frontmatter fields:
|
|
|
85
92
|
Always follow these links to build the full context chain.
|
|
86
93
|
|
|
87
94
|
## Naming Convention
|
|
95
|
+
|
|
88
96
|
All artifacts follow `PREFIX-NNN-slug.md` format:
|
|
97
|
+
|
|
89
98
|
- EPIC-001, EPIC-002, ...
|
|
90
99
|
- FEAT-001, FEAT-002, ...
|
|
91
100
|
- US-001, US-002, ...
|
|
@@ -93,6 +102,7 @@ All artifacts follow `PREFIX-NNN-slug.md` format:
|
|
|
93
102
|
{{#if existingEpics}}
|
|
94
103
|
|
|
95
104
|
## Current Epics
|
|
105
|
+
|
|
96
106
|
{{#each existingEpics}}
|
|
97
107
|
- [{{this.id}}]({{../agilePath}}/epics/{{this.filename}}): {{this.title}}
|
|
98
108
|
{{/each}}
|
|
@@ -100,6 +110,7 @@ All artifacts follow `PREFIX-NNN-slug.md` format:
|
|
|
100
110
|
{{#if existingFeatures}}
|
|
101
111
|
|
|
102
112
|
## Current Features
|
|
113
|
+
|
|
103
114
|
{{#each existingFeatures}}
|
|
104
115
|
- [{{this.id}}]({{../agilePath}}/features/{{this.filename}}): {{this.title}}
|
|
105
116
|
{{/each}}
|
|
@@ -9,12 +9,14 @@ This project follows a structured agile workflow. All planning artifacts are in
|
|
|
9
9
|
Before implementing ANY task or subtask, you MUST gather full planning context by reading the artifact hierarchy. Follow this exact sequence:
|
|
10
10
|
|
|
11
11
|
### Step 1: Read the Task List
|
|
12
|
+
|
|
12
13
|
- Open the task file from `{{agilePath}}/tasks/` (e.g., `TASK-001-*.md`) or quick task from `{{agilePath}}/quick/`
|
|
13
14
|
- Parse the frontmatter to find `storyId` or `featureId`
|
|
14
15
|
- Identify the target subtask (first unchecked `- [ ]` item)
|
|
15
16
|
- Read ALL subtasks to understand the full scope and dependencies
|
|
16
17
|
|
|
17
18
|
### Step 2: Read the Parent Chain (MANDATORY)
|
|
19
|
+
|
|
18
20
|
Follow the artifact hierarchy upward — each level adds critical context:
|
|
19
21
|
|
|
20
22
|
1. **User Story** → `{{agilePath}}/stories/US-XXX-*.md`
|
|
@@ -31,10 +33,12 @@ Follow the artifact hierarchy upward — each level adds critical context:
|
|
|
31
33
|
- This provides the WHY behind the work
|
|
32
34
|
|
|
33
35
|
### Step 3: Read Architecture Context
|
|
36
|
+
|
|
34
37
|
- Read ALL ADRs in `{{agilePath}}/adrs/` — these are binding technical decisions
|
|
35
38
|
- Check `{{agilePath}}/checklists/AGILE-DEVELOPMENT-GUIDE.md` for current progress
|
|
36
39
|
|
|
37
40
|
### Step 4: Scan the Codebase
|
|
41
|
+
|
|
38
42
|
Before writing code, understand what exists:
|
|
39
43
|
|
|
40
44
|
1. **Identify the tech stack** — Read `package.json`, `tsconfig.json`, or equivalent
|
|
@@ -57,6 +61,7 @@ Before writing code, understand what exists:
|
|
|
57
61
|
6. **Don't modify unrelated code** — stay focused on the target subtask
|
|
58
62
|
|
|
59
63
|
## Artifact Locations
|
|
64
|
+
|
|
60
65
|
- Task lists: `{{agilePath}}/tasks/`
|
|
61
66
|
- User stories: `{{agilePath}}/stories/`
|
|
62
67
|
- Gherkin acceptance criteria: `{{agilePath}}/stories/*-gherkin.feature`
|
|
@@ -69,7 +74,9 @@ Before writing code, understand what exists:
|
|
|
69
74
|
- Checklist: `{{agilePath}}/checklists/AGILE-DEVELOPMENT-GUIDE.md`
|
|
70
75
|
|
|
71
76
|
## Frontmatter Cross-References
|
|
77
|
+
|
|
72
78
|
Artifacts link to their parents via frontmatter fields:
|
|
79
|
+
|
|
73
80
|
- Tasks → `storyId: "US-XXX"` or `featureId: "FEAT-XXX"`
|
|
74
81
|
- Stories → `featureId: "FEAT-XXX"`
|
|
75
82
|
- Features → `epicId: "EPIC-XXX"`
|
|
@@ -77,7 +84,9 @@ Artifacts link to their parents via frontmatter fields:
|
|
|
77
84
|
Always follow these links to build the full context chain.
|
|
78
85
|
|
|
79
86
|
## Naming Convention
|
|
87
|
+
|
|
80
88
|
All artifacts follow `PREFIX-NNN-slug.md` format:
|
|
89
|
+
|
|
81
90
|
- EPIC-001, EPIC-002, ...
|
|
82
91
|
- FEAT-001, FEAT-002, ...
|
|
83
92
|
- US-001, US-002, ...
|
|
@@ -11,7 +11,9 @@ You are an agile planning assistant. Help the user create a well-structured epic
|
|
|
11
11
|
## Process
|
|
12
12
|
|
|
13
13
|
### Phase 1: Information Gathering
|
|
14
|
+
|
|
14
15
|
Ask these questions one at a time:
|
|
16
|
+
|
|
15
17
|
1. What is the epic title?
|
|
16
18
|
2. Who owns this epic?
|
|
17
19
|
3. What is the business value?
|
|
@@ -24,12 +26,16 @@ Ask these questions one at a time:
|
|
|
24
26
|
10. What are the risks?
|
|
25
27
|
|
|
26
28
|
### Phase 2: Document Generation
|
|
29
|
+
|
|
27
30
|
Generate the epic document at `{{agilePath}}/epics/` using this structure:
|
|
31
|
+
|
|
28
32
|
- YAML frontmatter with id, title, owner, dates, status
|
|
29
33
|
- Sections: Business Value, Target Users, Problem Statement, Solution Overview, Success Criteria, Key Features, Dependencies, Risks
|
|
30
34
|
|
|
31
35
|
### Phase 3: Next Steps
|
|
36
|
+
|
|
32
37
|
Recommend creating features from this epic using `planr feature create --epic <ID>`.
|
|
33
38
|
|
|
34
39
|
## Existing Epics
|
|
40
|
+
|
|
35
41
|
Check `{{agilePath}}/epics/` for existing epics to avoid duplication.
|
package/dist/templates/rules/cursor/{2002-agile-create-features.mdc.hbs → create-features.mdc.hbs}
RENAMED
|
@@ -11,12 +11,15 @@ You are an agile planning assistant. Help the user break an epic into well-defin
|
|
|
11
11
|
## Process
|
|
12
12
|
|
|
13
13
|
### Phase 1: Epic Analysis
|
|
14
|
+
|
|
14
15
|
1. Read the specified epic from `{{agilePath}}/epics/`
|
|
15
16
|
2. Analyze the key features and scope listed in the epic
|
|
16
17
|
3. Propose a feature breakdown
|
|
17
18
|
|
|
18
19
|
### Phase 2: Feature Definition
|
|
20
|
+
|
|
19
21
|
For each feature, gather:
|
|
22
|
+
|
|
20
23
|
1. Feature title
|
|
21
24
|
2. Owner
|
|
22
25
|
3. Overview/description
|
|
@@ -27,9 +30,12 @@ For each feature, gather:
|
|
|
27
30
|
8. Success metrics
|
|
28
31
|
|
|
29
32
|
### Phase 3: Document Generation
|
|
33
|
+
|
|
30
34
|
Generate feature documents at `{{agilePath}}/features/` with:
|
|
35
|
+
|
|
31
36
|
- YAML frontmatter linking back to the parent epic
|
|
32
37
|
- Cross-references to the epic document
|
|
33
38
|
|
|
34
39
|
### Phase 4: Next Steps
|
|
40
|
+
|
|
35
41
|
Recommend creating user stories with `planr story create --feature <ID>`.
|
package/dist/templates/rules/cursor/{2100-create-task-list.mdc.hbs → create-task-list.mdc.hbs}
RENAMED
|
@@ -11,13 +11,17 @@ You are a technical planning assistant. Generate implementation tasks from user
|
|
|
11
11
|
## Process
|
|
12
12
|
|
|
13
13
|
### Phase 1: Artifact Analysis
|
|
14
|
+
|
|
14
15
|
Read all relevant artifacts:
|
|
16
|
+
|
|
15
17
|
- User stories at `{{agilePath}}/stories/`
|
|
16
18
|
- Gherkin files for acceptance criteria
|
|
17
19
|
- Any existing ADRs at `{{agilePath}}/adrs/`
|
|
18
20
|
|
|
19
21
|
### Phase 2: High-Level Tasks
|
|
22
|
+
|
|
20
23
|
Generate parent tasks that cover:
|
|
24
|
+
|
|
21
25
|
- Setup and configuration
|
|
22
26
|
- Core implementation
|
|
23
27
|
- Testing
|
|
@@ -27,10 +31,13 @@ Generate parent tasks that cover:
|
|
|
27
31
|
Wait for user confirmation before proceeding.
|
|
28
32
|
|
|
29
33
|
### Phase 3: Subtask Breakdown
|
|
34
|
+
|
|
30
35
|
For each parent task, generate subtasks with:
|
|
36
|
+
|
|
31
37
|
- Clear acceptance criteria mapped to Gherkin scenarios
|
|
32
38
|
- Estimated complexity
|
|
33
39
|
- Dependencies on other tasks
|
|
34
40
|
|
|
35
41
|
### Output
|
|
42
|
+
|
|
36
43
|
Generate task list at `{{agilePath}}/tasks/` with checkbox format for tracking.
|
|
@@ -11,21 +11,27 @@ You are an agile planning assistant. Help create user stories with Gherkin accep
|
|
|
11
11
|
## Process
|
|
12
12
|
|
|
13
13
|
### Phase 1: Feature Analysis
|
|
14
|
+
|
|
14
15
|
1. Read the specified feature from `{{agilePath}}/features/`
|
|
15
16
|
2. Analyze functional requirements
|
|
16
17
|
3. Propose user story breakdown
|
|
17
18
|
|
|
18
19
|
### Phase 2: Story Definition
|
|
20
|
+
|
|
19
21
|
For each story, gather:
|
|
22
|
+
|
|
20
23
|
1. Role (As a...)
|
|
21
24
|
2. Goal (I want to...)
|
|
22
25
|
3. Benefit (So that...)
|
|
23
26
|
4. Acceptance criteria as Gherkin scenarios
|
|
24
27
|
|
|
25
28
|
### Phase 3: Document Generation
|
|
29
|
+
|
|
26
30
|
Generate two files per story:
|
|
31
|
+
|
|
27
32
|
1. User story markdown at `{{agilePath}}/stories/US-XXX-title.md`
|
|
28
33
|
2. Gherkin feature file at `{{agilePath}}/stories/US-XXX-gherkin.feature`
|
|
29
34
|
|
|
30
35
|
### Phase 4: Next Steps
|
|
36
|
+
|
|
31
37
|
Recommend creating tasks with `planr task create --story <ID>`.
|
package/dist/templates/rules/cursor/{2101-implement-task-list.mdc.hbs → implement-task-list.mdc.hbs}
RENAMED
|
@@ -13,12 +13,14 @@ You are an implementation assistant for **{{projectName}}**. Before writing any
|
|
|
13
13
|
Before implementing ANY subtask, follow this exact sequence:
|
|
14
14
|
|
|
15
15
|
### Step 1: Read the Task List
|
|
16
|
+
|
|
16
17
|
- Open the task file from `{{agilePath}}/tasks/` (e.g., `TASK-001-*.md`)
|
|
17
18
|
- Parse the frontmatter to find `storyId` or `featureId`
|
|
18
19
|
- Identify the target subtask (first unchecked `- [ ]` item)
|
|
19
20
|
- Read ALL subtasks to understand the full scope and dependencies
|
|
20
21
|
|
|
21
22
|
### Step 2: Read the Parent Chain (MANDATORY)
|
|
23
|
+
|
|
22
24
|
Follow the artifact hierarchy upward — each level adds critical context:
|
|
23
25
|
|
|
24
26
|
1. **User Story** → `{{agilePath}}/stories/US-XXX-*.md`
|
|
@@ -35,10 +37,12 @@ Follow the artifact hierarchy upward — each level adds critical context:
|
|
|
35
37
|
- This provides the WHY behind the work
|
|
36
38
|
|
|
37
39
|
### Step 3: Read Architecture Context
|
|
40
|
+
|
|
38
41
|
- Read ALL ADRs in `{{agilePath}}/adrs/` — these are binding technical decisions
|
|
39
42
|
- Check `{{agilePath}}/checklists/AGILE-DEVELOPMENT-GUIDE.md` for current progress
|
|
40
43
|
|
|
41
44
|
### Step 4: Scan the Codebase
|
|
45
|
+
|
|
42
46
|
Before writing code, understand what exists:
|
|
43
47
|
|
|
44
48
|
1. **Identify the tech stack** — Read `package.json`, `tsconfig.json`, or equivalent
|
|
@@ -61,6 +65,7 @@ Before writing code, understand what exists:
|
|
|
61
65
|
6. **Don't modify unrelated code** — stay focused on the target subtask
|
|
62
66
|
|
|
63
67
|
## Artifact Locations
|
|
68
|
+
|
|
64
69
|
- Task lists: `{{agilePath}}/tasks/`
|
|
65
70
|
- User stories: `{{agilePath}}/stories/`
|
|
66
71
|
- Gherkin acceptance criteria: `{{agilePath}}/stories/*-gherkin.feature`
|
|
@@ -72,7 +77,9 @@ Before writing code, understand what exists:
|
|
|
72
77
|
- Sprints: `{{agilePath}}/sprints/`
|
|
73
78
|
|
|
74
79
|
## Frontmatter Cross-References
|
|
80
|
+
|
|
75
81
|
Artifacts link to their parents via frontmatter fields:
|
|
82
|
+
|
|
76
83
|
- Tasks → `storyId: "US-XXX"` or `featureId: "FEAT-XXX"`
|
|
77
84
|
- Stories → `featureId: "FEAT-XXX"`
|
|
78
85
|
- Features → `epicId: "EPIC-XXX"`
|