agile-context-engineering 0.2.2 → 0.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/.claude-plugin/plugin.json +10 -0
- package/CHANGELOG.md +82 -0
- package/README.md +27 -18
- package/agents/ace-product-owner.md +1 -1
- package/agents/ace-technical-application-architect.md +28 -0
- package/agents/ace-wiki-mapper.md +144 -29
- package/bin/install.js +67 -63
- package/hooks/ace-check-update.js +17 -9
- package/package.json +7 -5
- package/shared/lib/ace-core.js +308 -0
- package/shared/lib/ace-core.test.js +308 -0
- package/shared/lib/ace-github.js +753 -0
- package/shared/lib/ace-story.js +400 -0
- package/shared/lib/ace-story.test.js +250 -0
- package/{agile-context-engineering → shared}/utils/ui-formatting.md +299 -299
- package/skills/execute-story/SKILL.md +110 -0
- package/skills/execute-story/script.js +305 -0
- package/skills/execute-story/script.test.js +261 -0
- package/skills/execute-story/walkthrough-template.xml +255 -0
- package/{agile-context-engineering/workflows/execute-story.xml → skills/execute-story/workflow.xml} +83 -9
- package/skills/help/SKILL.md +69 -0
- package/skills/help/script.js +318 -0
- package/skills/help/script.test.js +183 -0
- package/{agile-context-engineering/workflows/help.xml → skills/help/workflow.xml} +8 -8
- package/skills/init-coding-standards/SKILL.md +72 -0
- package/{agile-context-engineering/templates/wiki/coding-standards.xml → skills/init-coding-standards/coding-standards-template.xml} +38 -0
- package/skills/init-coding-standards/script.js +59 -0
- package/skills/init-coding-standards/script.test.js +70 -0
- package/{agile-context-engineering/workflows/init-coding-standards.xml → skills/init-coding-standards/workflow.xml} +4 -9
- package/skills/map-cross-cutting/SKILL.md +89 -0
- package/skills/map-cross-cutting/workflow.xml +330 -0
- package/skills/map-guide/SKILL.md +89 -0
- package/skills/map-guide/workflow.xml +320 -0
- package/skills/map-pattern/SKILL.md +89 -0
- package/skills/map-pattern/workflow.xml +331 -0
- package/skills/map-story/SKILL.md +127 -0
- package/skills/map-story/templates/guide.xml +137 -0
- package/skills/map-story/templates/pattern.xml +159 -0
- package/skills/map-story/templates/system-cross-cutting.xml +197 -0
- package/skills/map-story/templates/walkthrough.xml +255 -0
- package/{agile-context-engineering/workflows/map-story.xml → skills/map-story/workflow.xml} +258 -9
- package/skills/map-subsystem/SKILL.md +111 -0
- package/skills/map-subsystem/script.js +60 -0
- package/skills/map-subsystem/script.test.js +68 -0
- package/skills/map-subsystem/templates/decizions.xml +115 -0
- package/skills/map-subsystem/templates/guide.xml +137 -0
- package/{agile-context-engineering/templates/wiki → skills/map-subsystem/templates}/module-discovery.xml +3 -3
- package/skills/map-subsystem/templates/pattern.xml +159 -0
- package/skills/map-subsystem/templates/system-cross-cutting.xml +197 -0
- package/skills/map-subsystem/templates/system.xml +381 -0
- package/skills/map-subsystem/templates/walkthrough.xml +255 -0
- package/{agile-context-engineering/workflows/map-subsystem.xml → skills/map-subsystem/workflow.xml} +17 -21
- package/skills/map-sys-doc/SKILL.md +90 -0
- package/skills/map-sys-doc/system.xml +381 -0
- package/skills/map-sys-doc/workflow.xml +336 -0
- package/skills/map-system/SKILL.md +85 -0
- package/skills/map-system/script.js +84 -0
- package/skills/map-system/script.test.js +73 -0
- package/skills/map-system/templates/wiki-readme.xml +297 -0
- package/{agile-context-engineering/workflows/map-system.xml → skills/map-system/workflow.xml} +11 -16
- package/skills/map-walkthrough/SKILL.md +92 -0
- package/skills/map-walkthrough/walkthrough.xml +255 -0
- package/skills/map-walkthrough/workflow.xml +457 -0
- package/skills/plan-backlog/SKILL.md +75 -0
- package/skills/plan-backlog/script.js +136 -0
- package/skills/plan-backlog/script.test.js +83 -0
- package/{agile-context-engineering/workflows/plan-backlog.xml → skills/plan-backlog/workflow.xml} +13 -21
- package/skills/plan-feature/SKILL.md +76 -0
- package/skills/plan-feature/script.js +148 -0
- package/skills/plan-feature/script.test.js +80 -0
- package/{agile-context-engineering/workflows/plan-feature.xml → skills/plan-feature/workflow.xml} +21 -29
- package/skills/plan-product-vision/SKILL.md +75 -0
- package/skills/plan-product-vision/script.js +60 -0
- package/skills/plan-product-vision/script.test.js +69 -0
- package/{agile-context-engineering/workflows/plan-product-vision.xml → skills/plan-product-vision/workflow.xml} +4 -9
- package/skills/plan-story/SKILL.md +116 -0
- package/skills/plan-story/script.js +326 -0
- package/skills/plan-story/script.test.js +240 -0
- package/skills/plan-story/story-template.xml +451 -0
- package/{agile-context-engineering/workflows/plan-story.xml → skills/plan-story/workflow.xml} +1285 -909
- package/skills/research-external-solution/SKILL.md +107 -0
- package/skills/research-external-solution/script.js +238 -0
- package/skills/research-external-solution/script.test.js +134 -0
- package/{agile-context-engineering/workflows/research-external-solution.xml → skills/research-external-solution/workflow.xml} +4 -6
- package/skills/research-integration-solution/SKILL.md +98 -0
- package/{agile-context-engineering/templates/product/story-integration-solution.xml → skills/research-integration-solution/integration-solution-template.xml} +1 -0
- package/skills/research-integration-solution/script.js +231 -0
- package/skills/research-integration-solution/script.test.js +134 -0
- package/{agile-context-engineering/workflows/research-integration-solution.xml → skills/research-integration-solution/workflow.xml} +4 -5
- package/skills/research-story-wiki/SKILL.md +92 -0
- package/skills/research-story-wiki/script.js +231 -0
- package/skills/research-story-wiki/script.test.js +138 -0
- package/{agile-context-engineering/templates/product/story-wiki.xml → skills/research-story-wiki/story-wiki-template.xml} +4 -0
- package/{agile-context-engineering/workflows/research-story-wiki.xml → skills/research-story-wiki/workflow.xml} +5 -6
- package/skills/research-technical-solution/SKILL.md +103 -0
- package/skills/research-technical-solution/script.js +231 -0
- package/skills/research-technical-solution/script.test.js +134 -0
- package/{agile-context-engineering/workflows/research-technical-solution.xml → skills/research-technical-solution/workflow.xml} +4 -5
- package/skills/review-story/SKILL.md +100 -0
- package/skills/review-story/script.js +257 -0
- package/skills/review-story/script.test.js +169 -0
- package/skills/review-story/story-template.xml +451 -0
- package/{agile-context-engineering/workflows/review-story.xml → skills/review-story/workflow.xml} +1 -3
- package/skills/update/SKILL.md +53 -0
- package/{agile-context-engineering/workflows/update.xml → skills/update/workflow.xml} +237 -207
- package/agile-context-engineering/src/ace-tools.js +0 -2881
- package/agile-context-engineering/src/ace-tools.test.js +0 -1089
- package/agile-context-engineering/templates/_command.md +0 -54
- package/agile-context-engineering/templates/_workflow.xml +0 -17
- package/agile-context-engineering/templates/config.json +0 -0
- package/agile-context-engineering/templates/product/integration-solution.xml +0 -0
- package/agile-context-engineering/templates/wiki/wiki-readme.xml +0 -276
- package/commands/ace/execute-story.md +0 -137
- package/commands/ace/help.md +0 -93
- package/commands/ace/init-coding-standards.md +0 -83
- package/commands/ace/map-story.md +0 -156
- package/commands/ace/map-subsystem.md +0 -138
- package/commands/ace/map-system.md +0 -92
- package/commands/ace/plan-backlog.md +0 -83
- package/commands/ace/plan-feature.md +0 -89
- package/commands/ace/plan-product-vision.md +0 -81
- package/commands/ace/plan-story.md +0 -145
- package/commands/ace/research-external-solution.md +0 -138
- package/commands/ace/research-integration-solution.md +0 -135
- package/commands/ace/research-story-wiki.md +0 -116
- package/commands/ace/research-technical-solution.md +0 -147
- package/commands/ace/review-story.md +0 -109
- package/commands/ace/update.md +0 -54
- /package/{agile-context-engineering → shared}/utils/questioning.xml +0 -0
- /package/{agile-context-engineering/templates/product/story.xml → skills/execute-story/story-template.xml} +0 -0
- /package/{agile-context-engineering/templates/wiki → skills/map-cross-cutting}/system-cross-cutting.xml +0 -0
- /package/{agile-context-engineering/templates/wiki → skills/map-guide}/guide.xml +0 -0
- /package/{agile-context-engineering/templates/wiki → skills/map-pattern}/pattern.xml +0 -0
- /package/{agile-context-engineering/templates/wiki → skills/map-story/templates}/decizions.xml +0 -0
- /package/{agile-context-engineering/templates/wiki → skills/map-story/templates}/system.xml +0 -0
- /package/{agile-context-engineering/templates/wiki → skills/map-story/templates}/tech-debt-index.xml +0 -0
- /package/{agile-context-engineering/templates/wiki → skills/map-subsystem/templates}/subsystem-architecture.xml +0 -0
- /package/{agile-context-engineering/templates/wiki → skills/map-subsystem/templates}/subsystem-structure.xml +0 -0
- /package/{agile-context-engineering/templates/wiki → skills/map-system/templates}/system-architecture.xml +0 -0
- /package/{agile-context-engineering/templates/wiki → skills/map-system/templates}/system-structure.xml +0 -0
- /package/{agile-context-engineering/templates/wiki → skills/map-system/templates}/testing-framework.xml +0 -0
- /package/{agile-context-engineering/templates/product/product-backlog.xml → skills/plan-backlog/product-backlog-template.xml} +0 -0
- /package/{agile-context-engineering/templates/product/feature.xml → skills/plan-feature/feature-template.xml} +0 -0
- /package/{agile-context-engineering/templates/product/product-vision.xml → skills/plan-product-vision/product-vision-template.xml} +0 -0
- /package/{agile-context-engineering/templates/product/external-solution.xml → skills/research-external-solution/external-solution-template.xml} +0 -0
- /package/{agile-context-engineering/templates/product/story-technical-solution.xml → skills/research-technical-solution/technical-solution-template.xml} +0 -0
package/{agile-context-engineering/workflows/plan-feature.xml → skills/plan-feature/workflow.xml}
RENAMED
|
@@ -29,11 +29,9 @@
|
|
|
29
29
|
<step name="setup" order="1">
|
|
30
30
|
**MANDATORY FIRST STEP — Execute environment detection before any user interaction:**
|
|
31
31
|
|
|
32
|
-
|
|
33
|
-
INIT=$(node ~/.claude/agile-context-engineering/src/ace-tools.js init plan-feature)
|
|
34
|
-
```
|
|
32
|
+
INIT is available from the preprocessed Environment Context above — do NOT re-run init.
|
|
35
33
|
|
|
36
|
-
Parse JSON for: `product_owner_model`, `researcher_model`, `commit_docs`,
|
|
34
|
+
Parse INIT JSON for: `product_owner_model`, `researcher_model`, `commit_docs`,
|
|
37
35
|
`has_product_vision`, `has_product_backlog`,
|
|
38
36
|
`has_wiki_analysis`,
|
|
39
37
|
`is_brownfield`, `is_greenfield`,
|
|
@@ -42,10 +40,7 @@
|
|
|
42
40
|
`has_system_structure`, `has_testing_framework`, `has_git`, `has_gh_cli`,
|
|
43
41
|
`github_project` (object: `enabled`, `gh_installed`, `repo`, `project_number`, `owner`).
|
|
44
42
|
|
|
45
|
-
|
|
46
|
-
```bash
|
|
47
|
-
PO_MODEL=$(node ~/.claude/agile-context-engineering/src/ace-tools.js resolve-model ace-product-owner --raw)
|
|
48
|
-
```
|
|
43
|
+
PO_MODEL is available from INIT.product_owner_model — do NOT re-run resolve-model.
|
|
49
44
|
|
|
50
45
|
Display stage banner:
|
|
51
46
|
|
|
@@ -142,8 +137,8 @@
|
|
|
142
137
|
|
|
143
138
|
Using `TARGET_FEATURE` (or user-described new feature), compute:
|
|
144
139
|
```bash
|
|
145
|
-
EPIC_SLUG=$(node
|
|
146
|
-
FEATURE_SLUG=$(node
|
|
140
|
+
EPIC_SLUG=$(node "${CLAUDE_SKILL_DIR}/script.js" generate-slug "{Epic ID}-{Epic Title}" --raw)
|
|
141
|
+
FEATURE_SLUG=$(node "${CLAUDE_SKILL_DIR}/script.js" generate-slug "{Feature ID}-{Feature Title}" --raw)
|
|
147
142
|
```
|
|
148
143
|
|
|
149
144
|
Set `FEATURE_DIR = .ace/artifacts/product/{EPIC_SLUG}/{FEATURE_SLUG}`
|
|
@@ -153,7 +148,7 @@
|
|
|
153
148
|
|
|
154
149
|
Check if `FEATURE_FILE` exists:
|
|
155
150
|
```bash
|
|
156
|
-
EXISTING_FEATURE=$(node
|
|
151
|
+
EXISTING_FEATURE=$(node "${CLAUDE_SKILL_DIR}/script.js" verify-path-exists {FEATURE_FILE} --raw)
|
|
157
152
|
```
|
|
158
153
|
|
|
159
154
|
If exists: set `RUN_MODE = REFINE`
|
|
@@ -293,7 +288,7 @@
|
|
|
293
288
|
|
|
294
289
|
Check if `{FEATURE_DIR}/relevant-wiki.md` exists:
|
|
295
290
|
```bash
|
|
296
|
-
HAS_WIKI_RESEARCH=$(node
|
|
291
|
+
HAS_WIKI_RESEARCH=$(node "${CLAUDE_SKILL_DIR}/script.js" verify-path-exists {FEATURE_DIR}/relevant-wiki.md --raw)
|
|
297
292
|
```
|
|
298
293
|
|
|
299
294
|
If `HAS_WIKI_RESEARCH` is TRUE:
|
|
@@ -446,7 +441,7 @@
|
|
|
446
441
|
|
|
447
442
|
Check if `{FEATURE_DIR}/relevant-code.md` exists:
|
|
448
443
|
```bash
|
|
449
|
-
HAS_CODE_RESEARCH=$(node
|
|
444
|
+
HAS_CODE_RESEARCH=$(node "${CLAUDE_SKILL_DIR}/script.js" verify-path-exists {FEATURE_DIR}/relevant-code.md --raw)
|
|
450
445
|
```
|
|
451
446
|
|
|
452
447
|
If `HAS_CODE_RESEARCH` is TRUE:
|
|
@@ -490,10 +485,7 @@
|
|
|
490
485
|
After the notification arrives, verify the file with `wc -l {FEATURE_DIR}/relevant-code.md`,
|
|
491
486
|
then READ the file directly from disk using the Read tool. That is how you get the results.
|
|
492
487
|
|
|
493
|
-
|
|
494
|
-
```bash
|
|
495
|
-
RESEARCHER_MODEL=$(node ~/.claude/agile-context-engineering/src/ace-tools.js resolve-model ace-project-researcher --raw)
|
|
496
|
-
```
|
|
488
|
+
RESEARCHER_MODEL is available from INIT.researcher_model — do NOT re-run resolve-model.
|
|
497
489
|
|
|
498
490
|
Task tool parameters:
|
|
499
491
|
```
|
|
@@ -505,7 +497,7 @@
|
|
|
505
497
|
|
|
506
498
|
Prompt:
|
|
507
499
|
```
|
|
508
|
-
|
|
500
|
+
You are the ace-project-researcher agent. Follow your agent instructions.
|
|
509
501
|
|
|
510
502
|
**Feature context:**
|
|
511
503
|
- Feature: {Feature ID} — {Feature Title}
|
|
@@ -894,7 +886,7 @@
|
|
|
894
886
|
{paste the context brief here}
|
|
895
887
|
|
|
896
888
|
**Instructions:**
|
|
897
|
-
1. Read the feature template:
|
|
889
|
+
1. Read the feature template: ${CLAUDE_SKILL_DIR}/feature-template.xml
|
|
898
890
|
2. Write `{FEATURE_FILE}` following the template structure exactly
|
|
899
891
|
3. Include ALL sections: Header, Description, Benefit Hypothesis, Scope,
|
|
900
892
|
Acceptance Criteria, [Existing Implementation if brownfield],
|
|
@@ -961,7 +953,7 @@
|
|
|
961
953
|
prompt="You are an Agile Product Owner updating an existing feature specification.
|
|
962
954
|
|
|
963
955
|
**Read the current feature:** `{FEATURE_FILE}`
|
|
964
|
-
**Read the template for reference:**
|
|
956
|
+
**Read the template for reference:** `${CLAUDE_SKILL_DIR}/feature-template.xml`
|
|
965
957
|
|
|
966
958
|
**Changes to apply:**
|
|
967
959
|
{paste the change brief here}
|
|
@@ -1005,7 +997,7 @@
|
|
|
1005
997
|
|
|
1006
998
|
Compute story slugs:
|
|
1007
999
|
```bash
|
|
1008
|
-
STORY_SLUG=$(node
|
|
1000
|
+
STORY_SLUG=$(node "${CLAUDE_SKILL_DIR}/script.js" generate-slug "{Story ID}-{Story Title}" --raw)
|
|
1009
1001
|
```
|
|
1010
1002
|
|
|
1011
1003
|
For each story, check if the file already exists:
|
|
@@ -1025,7 +1017,7 @@
|
|
|
1025
1017
|
|
|
1026
1018
|
File path pattern: `{FEATURE_DIR}/{story_slug}/{story_slug}.md`
|
|
1027
1019
|
where story_slug = generate-slug of '{Story ID}-{Story Title}'
|
|
1028
|
-
(use Bash: `node
|
|
1020
|
+
(use Bash: `node "${CLAUDE_SKILL_DIR}/script.js" generate-slug '{Story ID}-{Story Title}' --raw`)
|
|
1029
1021
|
|
|
1030
1022
|
Each story gets its own subdirectory. Create the directory with `mkdir -p` before writing.
|
|
1031
1023
|
|
|
@@ -1094,7 +1086,7 @@
|
|
|
1094
1086
|
- Insert in the correct epic's detail section, ordered by delivery sequence
|
|
1095
1087
|
- Update the Epic Index table if needed (aggregate status change)
|
|
1096
1088
|
- Maintain table formatting — pad ALL cells so | separators align vertically
|
|
1097
|
-
- Read template for reference:
|
|
1089
|
+
- Read template for reference: ${CLAUDE_SKILL_DIR}/../plan-backlog/product-backlog-template.xml
|
|
1098
1090
|
|
|
1099
1091
|
Use Edit tool to modify in place. Return only a confirmation of what changed.",
|
|
1100
1092
|
subagent_type="ace-product-owner",
|
|
@@ -1161,7 +1153,7 @@
|
|
|
1161
1153
|
{user's requested changes}.
|
|
1162
1154
|
|
|
1163
1155
|
**Rules:**
|
|
1164
|
-
- Read the template for reference:
|
|
1156
|
+
- Read the template for reference: ${CLAUDE_SKILL_DIR}/feature-template.xml
|
|
1165
1157
|
- Maintain all template formatting — especially table column alignment:
|
|
1166
1158
|
pad cells with spaces so | separators align vertically across all rows
|
|
1167
1159
|
- Keep Story IDs stable — do NOT renumber
|
|
@@ -1249,7 +1241,7 @@
|
|
|
1249
1241
|
**Prerequisite — Resolve all field and type IDs (once, before creating any issues):**
|
|
1250
1242
|
|
|
1251
1243
|
```bash
|
|
1252
|
-
GH_FIELDS=$(node
|
|
1244
|
+
GH_FIELDS=$(node "${CLAUDE_SKILL_DIR}/script.js" resolve-fields repo={REPO} owner={OWNER} project={PROJECT_NUMBER})
|
|
1253
1245
|
```
|
|
1254
1246
|
|
|
1255
1247
|
Parse the JSON response. Extract and cache:
|
|
@@ -1269,7 +1261,7 @@
|
|
|
1269
1261
|
- If the parent epic has no GitHub issue (Link = "—"), warn user and skip parent assignment.
|
|
1270
1262
|
|
|
1271
1263
|
```bash
|
|
1272
|
-
FEATURE_RESULT=$(node
|
|
1264
|
+
FEATURE_RESULT=$(node "${CLAUDE_SKILL_DIR}/script.js" create-issue \
|
|
1273
1265
|
type=Feature \
|
|
1274
1266
|
"title={Feature Title}" \
|
|
1275
1267
|
body_file={FEATURE_FILE} \
|
|
@@ -1300,7 +1292,7 @@
|
|
|
1300
1292
|
The feature file IS the body. 100% of `{FEATURE_FILE}` goes to GitHub as-is.
|
|
1301
1293
|
|
|
1302
1294
|
```bash
|
|
1303
|
-
node
|
|
1295
|
+
node "${CLAUDE_SKILL_DIR}/script.js" update-issue \
|
|
1304
1296
|
number={feature_issue_number} \
|
|
1305
1297
|
repo={REPO} \
|
|
1306
1298
|
"title={Feature Title}" \
|
|
@@ -1322,7 +1314,7 @@
|
|
|
1322
1314
|
goes to GitHub as-is. The story stub files were created in step 9c.
|
|
1323
1315
|
|
|
1324
1316
|
```bash
|
|
1325
|
-
STORY_RESULT=$(node
|
|
1317
|
+
STORY_RESULT=$(node "${CLAUDE_SKILL_DIR}/script.js" create-issue \
|
|
1326
1318
|
type=Story \
|
|
1327
1319
|
"title={Story Title}" \
|
|
1328
1320
|
body_file={FEATURE_DIR}/{STORY_SLUG}/{STORY_SLUG}.md \
|
|
@@ -1351,7 +1343,7 @@
|
|
|
1351
1343
|
goes to GitHub as-is.
|
|
1352
1344
|
|
|
1353
1345
|
```bash
|
|
1354
|
-
node
|
|
1346
|
+
node "${CLAUDE_SKILL_DIR}/script.js" update-issue \
|
|
1355
1347
|
number={story_issue_number} \
|
|
1356
1348
|
repo={REPO} \
|
|
1357
1349
|
"title={Story Title}" \
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: plan-product-vision
|
|
3
|
+
description: Create or update the product vision through architecture-aware questioning and guided writing
|
|
4
|
+
argument-hint: "[optional: context='PRD, specs, or notes to build on']"
|
|
5
|
+
disable-model-invocation: true
|
|
6
|
+
allowed-tools: Read, Bash, Write, Task, AskUserQuestion
|
|
7
|
+
model: opus
|
|
8
|
+
effort: high
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
# Plan Product Vision
|
|
12
|
+
|
|
13
|
+
Create or update the product vision through architecture-aware questioning and guided writing.
|
|
14
|
+
|
|
15
|
+
## When to Use
|
|
16
|
+
|
|
17
|
+
- During `/ace:help` — as part of initial project setup
|
|
18
|
+
- After `/ace:map-system` — once codebase is mapped, leverage architecture context
|
|
19
|
+
- Anytime — to create or refresh the product vision for a project
|
|
20
|
+
- Starting a new project and want to define the product vision (greenfield or brownfield)
|
|
21
|
+
- Existing product vision is outdated or missing
|
|
22
|
+
- System architecture has been mapped and you want to align vision with subsystem capabilities
|
|
23
|
+
- Pivoting the product direction and need to rewrite the vision
|
|
24
|
+
|
|
25
|
+
## Input
|
|
26
|
+
|
|
27
|
+
### Optional
|
|
28
|
+
|
|
29
|
+
- **`context`** — Existing PRD, specs, or notes to use as a starting point. Will be refined through the interview process, not used as-is.
|
|
30
|
+
|
|
31
|
+
## Environment Context (preprocessed)
|
|
32
|
+
|
|
33
|
+
!`node "${CLAUDE_SKILL_DIR}/script.js" init "$ARGUMENTS" 2>/dev/null`
|
|
34
|
+
|
|
35
|
+
## Supporting Resources
|
|
36
|
+
|
|
37
|
+
Read ALL of these before starting the workflow:
|
|
38
|
+
|
|
39
|
+
- **Workflow**: Read [workflow.xml](workflow.xml) — complete orchestration process with all steps
|
|
40
|
+
- **Product vision template**: Read [product-vision-template.xml](product-vision-template.xml) — output format for the product vision
|
|
41
|
+
- **Questioning guide**: Read `${CLAUDE_SKILL_DIR}/../../shared/utils/questioning.xml` — deep questioning techniques
|
|
42
|
+
- **UI formatting**: Read `${CLAUDE_SKILL_DIR}/../../shared/utils/ui-formatting.md` — ACE output formatting rules
|
|
43
|
+
|
|
44
|
+
## Process
|
|
45
|
+
|
|
46
|
+
Use the `ace-product-owner` agent for requirements gathering, deep questioning, and vision specification.
|
|
47
|
+
|
|
48
|
+
The Environment Context above contains the preprocessed INIT JSON — use it directly instead of running the init script manually. The workflow's step 1 setup can skip the init bash call since that data is already available.
|
|
49
|
+
|
|
50
|
+
Read all supporting resources listed above, then execute the workflow defined in [workflow.xml](workflow.xml) end-to-end. Preserve all workflow gates (validation, approvals, commits).
|
|
51
|
+
|
|
52
|
+
## Artifacts
|
|
53
|
+
|
|
54
|
+
```
|
|
55
|
+
.docs/product/product-vision.md
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
## Example Usage
|
|
59
|
+
|
|
60
|
+
```
|
|
61
|
+
# Create a new product vision from scratch
|
|
62
|
+
/ace:plan-product-vision
|
|
63
|
+
|
|
64
|
+
# Create vision with existing PRD as seed
|
|
65
|
+
/ace:plan-product-vision context="path/to/existing-prd.md"
|
|
66
|
+
|
|
67
|
+
# Update vision after architecture changes
|
|
68
|
+
/ace:plan-product-vision
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
## Next Steps
|
|
72
|
+
|
|
73
|
+
- `/ace:init-coding-standards` — Establish coding standards for the project
|
|
74
|
+
- `/ace:map-system` — Map codebase structure and architecture
|
|
75
|
+
- `/ace:help` — Check project initialization status and next steps
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* plan-product-vision skill script — Entry point for ace-tools operations
|
|
5
|
+
* needed by the plan-product-vision skill.
|
|
6
|
+
*
|
|
7
|
+
* Subcommands:
|
|
8
|
+
* init [args] Environment detection for plan-product-vision workflow
|
|
9
|
+
*
|
|
10
|
+
* Usage: node script.js <subcommand> [args] [--raw]
|
|
11
|
+
*/
|
|
12
|
+
|
|
13
|
+
const {
|
|
14
|
+
loadConfig, pathExists, resolveModel,
|
|
15
|
+
detectBrownfieldStatus, output, error,
|
|
16
|
+
} = require('../../shared/lib/ace-core');
|
|
17
|
+
|
|
18
|
+
// ─── CLI Dispatch ────────────────────────────────────────────────────────────
|
|
19
|
+
|
|
20
|
+
const cwd = process.cwd();
|
|
21
|
+
const args = process.argv.slice(2);
|
|
22
|
+
const raw = args.includes('--raw');
|
|
23
|
+
const cmd = args[0];
|
|
24
|
+
|
|
25
|
+
switch (cmd) {
|
|
26
|
+
case 'init':
|
|
27
|
+
cmdInit(cwd, raw, args.slice(1).filter(a => a !== '--raw'));
|
|
28
|
+
break;
|
|
29
|
+
default:
|
|
30
|
+
error(`Unknown command: ${cmd}\nAvailable: init`);
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
// ─── Init: Plan Product Vision ──────────────────────────────────────────────
|
|
34
|
+
|
|
35
|
+
function cmdInit(cwd, raw) {
|
|
36
|
+
const config = loadConfig(cwd);
|
|
37
|
+
const brownfield = detectBrownfieldStatus(cwd);
|
|
38
|
+
|
|
39
|
+
const result = {
|
|
40
|
+
// Models
|
|
41
|
+
product_owner_model: resolveModel(cwd, 'ace-product-owner'),
|
|
42
|
+
|
|
43
|
+
// Config
|
|
44
|
+
commit_docs: config.commit_docs,
|
|
45
|
+
|
|
46
|
+
// Existing state
|
|
47
|
+
has_product_vision: pathExists(cwd, '.docs/product/product-vision.md'),
|
|
48
|
+
|
|
49
|
+
// Brownfield detection
|
|
50
|
+
...brownfield,
|
|
51
|
+
|
|
52
|
+
// Architecture context
|
|
53
|
+
has_system_architecture: pathExists(cwd, '.docs/wiki/system-wide/system-architecture.md'),
|
|
54
|
+
|
|
55
|
+
// Git state
|
|
56
|
+
has_git: pathExists(cwd, '.git'),
|
|
57
|
+
};
|
|
58
|
+
|
|
59
|
+
output(result, raw);
|
|
60
|
+
}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
const { describe, it, before, after } = require('node:test');
|
|
2
|
+
const assert = require('node:assert');
|
|
3
|
+
const { execSync } = require('child_process');
|
|
4
|
+
const fs = require('fs');
|
|
5
|
+
const path = require('path');
|
|
6
|
+
const os = require('os');
|
|
7
|
+
|
|
8
|
+
const SCRIPT = path.join(__dirname, 'script.js');
|
|
9
|
+
|
|
10
|
+
function createTestProject() {
|
|
11
|
+
const tmpDir = fs.mkdtempSync(path.join(os.tmpdir(), 'ace-test-'));
|
|
12
|
+
|
|
13
|
+
const aceDir = path.join(tmpDir, '.ace');
|
|
14
|
+
fs.mkdirSync(aceDir, { recursive: true });
|
|
15
|
+
fs.writeFileSync(path.join(aceDir, 'config.json'), JSON.stringify({
|
|
16
|
+
version: '0.1.0',
|
|
17
|
+
projectName: 'test-project',
|
|
18
|
+
model_profile: 'quality',
|
|
19
|
+
commit_docs: true,
|
|
20
|
+
github: { enabled: false },
|
|
21
|
+
}, null, 2));
|
|
22
|
+
|
|
23
|
+
return tmpDir;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
function runScript(subcommand, args, cwd) {
|
|
27
|
+
return execSync(`node "${SCRIPT}" ${subcommand} ${args}`, {
|
|
28
|
+
cwd,
|
|
29
|
+
encoding: 'utf-8',
|
|
30
|
+
timeout: 10000,
|
|
31
|
+
});
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
function cleanup(tmpDir) {
|
|
35
|
+
fs.rmSync(tmpDir, { recursive: true, force: true });
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
describe('plan-product-vision script', () => {
|
|
39
|
+
it('errors on unknown command', () => {
|
|
40
|
+
assert.throws(() => {
|
|
41
|
+
execSync(`node "${SCRIPT}" bogus`, { encoding: 'utf-8', stdio: 'pipe' });
|
|
42
|
+
});
|
|
43
|
+
});
|
|
44
|
+
|
|
45
|
+
describe('init', () => {
|
|
46
|
+
let tmpDir;
|
|
47
|
+
|
|
48
|
+
before(() => { tmpDir = createTestProject(); });
|
|
49
|
+
after(() => { cleanup(tmpDir); });
|
|
50
|
+
|
|
51
|
+
it('init returns valid JSON', () => {
|
|
52
|
+
const result = JSON.parse(runScript('init', '', tmpDir));
|
|
53
|
+
assert.ok(typeof result === 'object');
|
|
54
|
+
assert.ok(result.product_owner_model, 'should have product_owner_model');
|
|
55
|
+
assert.strictEqual(typeof result.commit_docs, 'boolean');
|
|
56
|
+
assert.strictEqual(typeof result.has_git, 'boolean');
|
|
57
|
+
assert.strictEqual(typeof result.is_brownfield, 'boolean');
|
|
58
|
+
assert.strictEqual(typeof result.has_product_vision, 'boolean');
|
|
59
|
+
assert.strictEqual(typeof result.has_system_architecture, 'boolean');
|
|
60
|
+
});
|
|
61
|
+
|
|
62
|
+
it('returns brownfield detection fields', () => {
|
|
63
|
+
const result = JSON.parse(runScript('init', '', tmpDir));
|
|
64
|
+
assert.strictEqual(typeof result.is_brownfield, 'boolean');
|
|
65
|
+
assert.strictEqual(typeof result.is_greenfield, 'boolean');
|
|
66
|
+
assert.strictEqual(result.is_brownfield, !result.is_greenfield);
|
|
67
|
+
});
|
|
68
|
+
});
|
|
69
|
+
});
|
|
@@ -24,18 +24,13 @@
|
|
|
24
24
|
<step name="setup" order="1">
|
|
25
25
|
**MANDATORY FIRST STEP — Execute environment detection before any user interaction:**
|
|
26
26
|
|
|
27
|
-
|
|
28
|
-
INIT=$(node ~/.claude/agile-context-engineering/src/ace-tools.js init product-vision)
|
|
29
|
-
```
|
|
27
|
+
INIT is available from the preprocessed Environment Context above — do NOT re-run init.
|
|
30
28
|
|
|
31
|
-
Parse JSON for: `product_owner_model`, `commit_docs`, `has_product_vision`,
|
|
29
|
+
Parse INIT JSON for: `product_owner_model`, `commit_docs`, `has_product_vision`,
|
|
32
30
|
`is_brownfield`, `is_greenfield`, `has_existing_code`, `has_package_file`,
|
|
33
31
|
`has_system_architecture`, `has_git`.
|
|
34
32
|
|
|
35
|
-
|
|
36
|
-
```bash
|
|
37
|
-
PO_MODEL=$(node ~/.claude/agile-context-engineering/src/ace-tools.js resolve-model ace-product-owner --raw)
|
|
38
|
-
```
|
|
33
|
+
PO_MODEL is available from INIT.product_owner_model — do NOT re-run resolve-model.
|
|
39
34
|
|
|
40
35
|
Display stage banner:
|
|
41
36
|
|
|
@@ -223,7 +218,7 @@
|
|
|
223
218
|
{paste the context brief here}
|
|
224
219
|
|
|
225
220
|
**Instructions:**
|
|
226
|
-
1. Read the product vision template:
|
|
221
|
+
1. Read the product vision template: ${CLAUDE_SKILL_DIR}/product-vision-template.xml
|
|
227
222
|
2. Write `.docs/product/product-vision.md` following the template structure and guidelines
|
|
228
223
|
3. Do not compress — capture everything from the context brief
|
|
229
224
|
4. Write the file using the Write tool
|
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: plan-story
|
|
3
|
+
description: Plan a story through deep questioning to create CRYSTAL-CLEAR acceptance criteria with ZERO assumptions, then dispatch wiki research, external analysis, integration analysis, and technical solution design. Use this whenever the user wants to plan a story, specify a story, create acceptance criteria, refine story requirements, or take a story stub and turn it into a full specification — whether from a feature stub, GitHub issue, inline text, or from scratch.
|
|
4
|
+
argument-hint: "[story=<file-path|github-url>] [text=<inline-description>] [external-codebase=<source-path|github-url>] [external-docs=<weblink|filepath>] [lib-docs=<weblinks-and-filepaths>]"
|
|
5
|
+
disable-model-invocation: true
|
|
6
|
+
allowed-tools: Read, Bash, Write, Edit, AskUserQuestion, Glob, Grep, Agent
|
|
7
|
+
model: opus
|
|
8
|
+
effort: high
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
# Plan Story
|
|
12
|
+
|
|
13
|
+
Orchestrate story specification through deep questioning and multi-pass research.
|
|
14
|
+
|
|
15
|
+
## When to Use
|
|
16
|
+
|
|
17
|
+
- After `/ace:plan-feature` — when a feature's story breakdown exists with stub story files
|
|
18
|
+
- To create or refine a story specification from a description or GitHub issue
|
|
19
|
+
- When a story stub needs formal INVEST-compliant specification
|
|
20
|
+
- When an existing story needs refinement due to scope changes or AC gaps
|
|
21
|
+
- When you have a new story idea (text or no input) and need it placed in the backlog
|
|
22
|
+
|
|
23
|
+
## Input
|
|
24
|
+
|
|
25
|
+
### Optional
|
|
26
|
+
|
|
27
|
+
- **`story`** — Story source:
|
|
28
|
+
- **File path**: Path to a markdown file containing the story seed (typically from plan-feature, or any markdown with a description)
|
|
29
|
+
- **GitHub URL or issue number**: e.g., `story=#95` or `story=https://github.com/owner/repo/issues/95`
|
|
30
|
+
- When omitted, enters "new story" mode and guides the user through backlog placement.
|
|
31
|
+
|
|
32
|
+
- **`text`** — Inline story description to seed the planning session. Used when no story file exists yet — the text becomes the initial description and the workflow asks where in the backlog this story belongs. Ignored if `story` is provided.
|
|
33
|
+
|
|
34
|
+
- **`external-codebase`** — Path or GitHub repo to an external system to analyze. Triggers pass 3 automatically.
|
|
35
|
+
|
|
36
|
+
- **`external-docs`** — Link or filepath to external system documentation. Only used with external-codebase.
|
|
37
|
+
|
|
38
|
+
- **`lib-docs`** — Space-separated weblinks and/or filepaths to library/API documentation. Injected into the Relevant Wiki section after pass 2.
|
|
39
|
+
|
|
40
|
+
## Environment Context (preprocessed)
|
|
41
|
+
|
|
42
|
+
!`node "${CLAUDE_SKILL_DIR}/script.js" init "$ARGUMENTS" 2>/dev/null`
|
|
43
|
+
|
|
44
|
+
## Supporting Resources
|
|
45
|
+
|
|
46
|
+
Read ALL of these before starting the workflow:
|
|
47
|
+
|
|
48
|
+
- **Workflow**: Read [workflow.xml](workflow.xml) — complete orchestration process with all steps
|
|
49
|
+
- **Story template**: Read [story-template.xml](story-template.xml) — output format for the story specification
|
|
50
|
+
- **Questioning guide**: Read `${CLAUDE_SKILL_DIR}/../../shared/utils/questioning.xml` — deep questioning techniques
|
|
51
|
+
- **UI formatting**: Read `${CLAUDE_SKILL_DIR}/../../shared/utils/ui-formatting.md` — ACE output formatting rules
|
|
52
|
+
|
|
53
|
+
## Process
|
|
54
|
+
|
|
55
|
+
Use the `ace-product-owner` agent for requirements gathering, deep questioning, and story specification.
|
|
56
|
+
|
|
57
|
+
The Environment Context above contains the preprocessed INIT JSON — use it directly instead of running the init script manually. The workflow's step 1 setup can skip the init bash call since that data is already available.
|
|
58
|
+
|
|
59
|
+
Read all supporting resources listed above, then execute the workflow defined in [workflow.xml](workflow.xml) end-to-end. Preserve all workflow gates (validation, approvals, commits).
|
|
60
|
+
|
|
61
|
+
**Context Window Protection:**
|
|
62
|
+
Passes 2-5 run as background agents. Each agent writes output directly to files.
|
|
63
|
+
The orchestrator MUST NOT call TaskOutput on any background agent.
|
|
64
|
+
Only track when each pass finishes to start the next one.
|
|
65
|
+
|
|
66
|
+
**Pass execution order:**
|
|
67
|
+
Pass 2 + Pass 3 (if applicable) → wait → Pass 4 → wait → Pass 5 → wait → done
|
|
68
|
+
|
|
69
|
+
## Artifacts
|
|
70
|
+
|
|
71
|
+
```
|
|
72
|
+
.ace/artifacts/product/<epic>/<feature>/<story>/
|
|
73
|
+
├── <story>.md # Story specification (passes 1, 2, 5)
|
|
74
|
+
├── external-analysis.md # OPTIONAL (pass 3)
|
|
75
|
+
└── integration-analysis.md # Integration analysis (pass 4)
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
## Example Usage
|
|
79
|
+
|
|
80
|
+
```
|
|
81
|
+
# New story from inline text — workflow asks for backlog placement
|
|
82
|
+
/ace:plan-story text="User can reset their password via email link"
|
|
83
|
+
|
|
84
|
+
# New story with no input — workflow asks title then placement
|
|
85
|
+
/ace:plan-story
|
|
86
|
+
|
|
87
|
+
# From a plan-feature stub file
|
|
88
|
+
/ace:plan-story story=.ace/artifacts/product/e1-auth/f3-oauth/s1-buttons/s1-buttons.md
|
|
89
|
+
|
|
90
|
+
# From a loose markdown file (no ACE structure yet — triggers placement flow)
|
|
91
|
+
/ace:plan-story story=notes/password-reset-idea.md
|
|
92
|
+
|
|
93
|
+
# From a GitHub issue
|
|
94
|
+
/ace:plan-story story=https://github.com/owner/repo/issues/95
|
|
95
|
+
|
|
96
|
+
# With external system analysis
|
|
97
|
+
/ace:plan-story \
|
|
98
|
+
story=.ace/artifacts/product/e1-charts/f2-rendering/s3-canvas/s3-canvas.md \
|
|
99
|
+
external-codebase=src/external/lightweight-charts/ \
|
|
100
|
+
external-docs=https://tradingview.github.io/lightweight-charts/
|
|
101
|
+
|
|
102
|
+
# With library documentation
|
|
103
|
+
/ace:plan-story \
|
|
104
|
+
story=.ace/artifacts/product/e1-charts/f2-rendering/s3-canvas/s3-canvas.md \
|
|
105
|
+
lib-docs="https://docs.some-lib.io/api src/vendor/some-lib/README.md"
|
|
106
|
+
|
|
107
|
+
# With just an issue number
|
|
108
|
+
/ace:plan-story story=#95
|
|
109
|
+
```
|
|
110
|
+
|
|
111
|
+
## Next Steps
|
|
112
|
+
|
|
113
|
+
- `/ace:execute-story story=...` — Execute the story implementation
|
|
114
|
+
- `/ace:plan-story story=...` — Plan the next story in the feature
|
|
115
|
+
- `/ace:verify-story story=...` — Verify a completed story
|
|
116
|
+
- `/ace:help` — Check project initialization status
|