agile-context-engineering 0.3.0 → 0.5.1
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/marketplace.json +18 -0
- package/.claude-plugin/plugin.json +10 -0
- package/CHANGELOG.md +7 -1
- package/LICENSE +51 -51
- package/README.md +330 -318
- package/agents/ace-code-discovery-analyst.md +245 -245
- package/agents/ace-code-integration-analyst.md +248 -248
- package/agents/ace-code-reviewer.md +375 -375
- package/agents/ace-product-owner.md +365 -361
- package/agents/ace-project-researcher.md +606 -606
- package/agents/ace-research-synthesizer.md +228 -228
- package/agents/ace-technical-application-architect.md +315 -315
- package/agents/ace-wiki-mapper.md +449 -445
- package/bin/install.js +605 -195
- package/hooks/ace-check-update.js +71 -62
- package/hooks/ace-statusline.js +107 -89
- package/hooks/hooks.json +14 -0
- package/package.json +7 -5
- package/shared/lib/ace-core.js +361 -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/questioning.xml +110 -110
- package/{agile-context-engineering → shared}/utils/ui-formatting.md +299 -299
- package/{commands/ace/execute-story.md → skills/execute-story/SKILL.md} +116 -138
- package/skills/execute-story/script.js +291 -0
- package/skills/execute-story/script.test.js +261 -0
- package/{agile-context-engineering/templates/product/story.xml → skills/execute-story/story-template.xml} +451 -451
- package/skills/execute-story/walkthrough-template.xml +255 -0
- package/{agile-context-engineering/workflows/execute-story.xml → skills/execute-story/workflow.xml} +1221 -1219
- package/skills/help/SKILL.md +71 -0
- package/skills/help/script.js +315 -0
- package/skills/help/script.test.js +183 -0
- package/{agile-context-engineering/workflows/help.xml → skills/help/workflow.xml} +544 -533
- package/{commands/ace/init-coding-standards.md → skills/init-coding-standards/SKILL.md} +91 -83
- package/{agile-context-engineering/templates/wiki/coding-standards.xml → skills/init-coding-standards/coding-standards-template.xml} +531 -531
- package/skills/init-coding-standards/script.js +50 -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} +381 -386
- package/skills/map-cross-cutting/SKILL.md +126 -0
- package/{agile-context-engineering/templates/wiki → skills/map-cross-cutting}/system-cross-cutting.xml +197 -197
- package/skills/map-cross-cutting/workflow.xml +330 -0
- package/skills/map-guide/SKILL.md +126 -0
- package/{agile-context-engineering/templates/wiki → skills/map-guide}/guide.xml +137 -137
- package/skills/map-guide/workflow.xml +320 -0
- package/skills/map-pattern/SKILL.md +125 -0
- package/{agile-context-engineering/templates/wiki → skills/map-pattern}/pattern.xml +159 -159
- package/skills/map-pattern/workflow.xml +331 -0
- package/{commands/ace/map-story.md → skills/map-story/SKILL.md} +180 -165
- package/{agile-context-engineering/templates/wiki → skills/map-story/templates}/decizions.xml +115 -115
- 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/{agile-context-engineering/templates/wiki → skills/map-story/templates}/system.xml +381 -381
- package/{agile-context-engineering/templates/wiki → skills/map-story/templates}/tech-debt-index.xml +125 -125
- package/{agile-context-engineering/templates/wiki → skills/map-story/templates}/walkthrough.xml +255 -255
- package/{agile-context-engineering/workflows/map-story.xml → skills/map-story/workflow.xml} +1046 -1046
- package/{commands/ace/map-subsystem.md → skills/map-subsystem/SKILL.md} +155 -140
- package/skills/map-subsystem/script.js +51 -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 +174 -174
- package/skills/map-subsystem/templates/pattern.xml +159 -0
- package/{agile-context-engineering/templates/wiki → skills/map-subsystem/templates}/subsystem-architecture.xml +343 -343
- package/{agile-context-engineering/templates/wiki → skills/map-subsystem/templates}/subsystem-structure.xml +234 -234
- 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} +1173 -1178
- package/skills/map-sys-doc/SKILL.md +125 -0
- package/skills/map-sys-doc/system.xml +381 -0
- package/skills/map-sys-doc/workflow.xml +336 -0
- package/{commands/ace/map-system.md → skills/map-system/SKILL.md} +103 -92
- package/skills/map-system/script.js +75 -0
- package/skills/map-system/script.test.js +73 -0
- package/{agile-context-engineering/templates/wiki → skills/map-system/templates}/system-architecture.xml +254 -254
- package/{agile-context-engineering/templates/wiki → skills/map-system/templates}/system-structure.xml +177 -177
- package/{agile-context-engineering/templates/wiki → skills/map-system/templates}/testing-framework.xml +283 -283
- package/{agile-context-engineering/templates/wiki → skills/map-system/templates}/wiki-readme.xml +296 -296
- package/{agile-context-engineering/workflows/map-system.xml → skills/map-system/workflow.xml} +667 -672
- package/{commands/ace/map-walkthrough.md → skills/map-walkthrough/SKILL.md} +140 -127
- package/skills/map-walkthrough/walkthrough.xml +255 -0
- package/{agile-context-engineering/workflows/map-walkthrough.xml → skills/map-walkthrough/workflow.xml} +457 -457
- package/{commands/ace/plan-backlog.md → skills/plan-backlog/SKILL.md} +93 -83
- package/{agile-context-engineering/templates/product/product-backlog.xml → skills/plan-backlog/product-backlog-template.xml} +231 -231
- package/skills/plan-backlog/script.js +121 -0
- package/skills/plan-backlog/script.test.js +83 -0
- package/{agile-context-engineering/workflows/plan-backlog.xml → skills/plan-backlog/workflow.xml} +1348 -1356
- package/{commands/ace/plan-feature.md → skills/plan-feature/SKILL.md} +99 -89
- package/{agile-context-engineering/templates/product/feature.xml → skills/plan-feature/feature-template.xml} +361 -361
- package/skills/plan-feature/script.js +131 -0
- package/skills/plan-feature/script.test.js +80 -0
- package/{agile-context-engineering/workflows/plan-feature.xml → skills/plan-feature/workflow.xml} +1487 -1495
- package/{commands/ace/plan-product-vision.md → skills/plan-product-vision/SKILL.md} +91 -81
- package/{agile-context-engineering/templates/product/product-vision.xml → skills/plan-product-vision/product-vision-template.xml} +227 -227
- package/skills/plan-product-vision/script.js +51 -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} +337 -342
- package/{commands/ace/plan-story.md → skills/plan-story/SKILL.md} +139 -159
- package/skills/plan-story/script.js +295 -0
- package/skills/plan-story/script.test.js +240 -0
- package/skills/plan-story/story-template.xml +458 -0
- package/{agile-context-engineering/workflows/plan-story.xml → skills/plan-story/workflow.xml} +1301 -944
- package/{commands/ace/research-external-solution.md → skills/research-external-solution/SKILL.md} +120 -138
- package/{agile-context-engineering/templates/product/external-solution.xml → skills/research-external-solution/external-solution-template.xml} +832 -832
- package/skills/research-external-solution/script.js +229 -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} +657 -659
- package/{commands/ace/research-integration-solution.md → skills/research-integration-solution/SKILL.md} +121 -135
- package/{agile-context-engineering/templates/product/story-integration-solution.xml → skills/research-integration-solution/integration-solution-template.xml} +1015 -1015
- package/skills/research-integration-solution/script.js +223 -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} +711 -713
- package/{commands/ace/research-story-wiki.md → skills/research-story-wiki/SKILL.md} +101 -116
- package/skills/research-story-wiki/script.js +223 -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} +194 -194
- package/{agile-context-engineering/workflows/research-story-wiki.xml → skills/research-story-wiki/workflow.xml} +473 -475
- package/{commands/ace/research-technical-solution.md → skills/research-technical-solution/SKILL.md} +131 -147
- package/skills/research-technical-solution/script.js +223 -0
- package/skills/research-technical-solution/script.test.js +134 -0
- package/{agile-context-engineering/templates/product/story-technical-solution.xml → skills/research-technical-solution/technical-solution-template.xml} +1025 -1025
- package/{agile-context-engineering/workflows/research-technical-solution.xml → skills/research-technical-solution/workflow.xml} +761 -763
- package/{commands/ace/review-story.md → skills/review-story/SKILL.md} +99 -109
- package/skills/review-story/script.js +249 -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} +279 -281
- package/{commands/ace/update.md → skills/update/SKILL.md} +65 -56
- package/{agile-context-engineering/workflows/update.xml → skills/update/workflow.xml} +33 -18
- 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/commands/ace/help.md +0 -93
|
@@ -1,140 +1,155 @@
|
|
|
1
|
-
---
|
|
2
|
-
name:
|
|
3
|
-
description: Map a subsystem's structure, architecture, and knowledge docs into .docs/wiki/subsystems/[name]/
|
|
4
|
-
argument-hint: "subsystem='src/api' (or subsystem name) existing-docs=comma separated paths | directory"
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
<
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
-
|
|
93
|
-
|
|
94
|
-
-
|
|
95
|
-
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
</
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
1
|
+
---
|
|
2
|
+
name: map-subsystem
|
|
3
|
+
description: Map a subsystem's structure, architecture, and knowledge docs into .docs/wiki/subsystems/[name]/
|
|
4
|
+
argument-hint: "subsystem='src/api' (or subsystem name) existing-docs=comma separated paths | directory"
|
|
5
|
+
disable-model-invocation: true
|
|
6
|
+
allowed-tools: Read, Bash, Glob, Grep, Write, Task, AskUserQuestion
|
|
7
|
+
model: opus
|
|
8
|
+
effort: max
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
## Environment Context (preprocessed)
|
|
12
|
+
|
|
13
|
+
!`node "${CLAUDE_SKILL_DIR}/script.js" init 2>/dev/null`
|
|
14
|
+
|
|
15
|
+
## Supporting Resources (auto-loaded)
|
|
16
|
+
|
|
17
|
+
!`cat "${CLAUDE_SKILL_DIR}/workflow.xml"`
|
|
18
|
+
|
|
19
|
+
!`cat "${CLAUDE_SKILL_DIR}/templates/subsystem-structure.xml"`
|
|
20
|
+
|
|
21
|
+
!`cat "${CLAUDE_SKILL_DIR}/templates/subsystem-architecture.xml"`
|
|
22
|
+
|
|
23
|
+
!`cat "${CLAUDE_SKILL_DIR}/templates/module-discovery.xml"`
|
|
24
|
+
|
|
25
|
+
!`cat "${CLAUDE_SKILL_DIR}/templates/system.xml"`
|
|
26
|
+
|
|
27
|
+
!`cat "${CLAUDE_SKILL_DIR}/templates/system-cross-cutting.xml"`
|
|
28
|
+
|
|
29
|
+
!`cat "${CLAUDE_SKILL_DIR}/templates/pattern.xml"`
|
|
30
|
+
|
|
31
|
+
!`cat "${CLAUDE_SKILL_DIR}/templates/guide.xml"`
|
|
32
|
+
|
|
33
|
+
!`cat "${CLAUDE_SKILL_DIR}/templates/walkthrough.xml"`
|
|
34
|
+
|
|
35
|
+
!`cat "${CLAUDE_SKILL_DIR}/templates/decizions.xml"`
|
|
36
|
+
|
|
37
|
+
!`cat "${CLAUDE_SKILL_DIR}/../../shared/utils/questioning.xml"`
|
|
38
|
+
|
|
39
|
+
!`cat "${CLAUDE_SKILL_DIR}/../../shared/utils/ui-formatting.md"`
|
|
40
|
+
|
|
41
|
+
```xml
|
|
42
|
+
<command>
|
|
43
|
+
|
|
44
|
+
<execution-time>
|
|
45
|
+
<runs-after>
|
|
46
|
+
<trigger>After /ace:map-system — drill into individual subsystems</trigger>
|
|
47
|
+
<trigger>Anytime to refresh an existing subsystem's wiki documents</trigger>
|
|
48
|
+
<trigger>When a new subsystem is added and needs to be documented</trigger>
|
|
49
|
+
</runs-after>
|
|
50
|
+
<use-when>
|
|
51
|
+
<condition>A subsystem has not yet been documented in `.docs/wiki/subsystems/`</condition>
|
|
52
|
+
<condition>An existing subsystem's docs are stale after a significant refactor</condition>
|
|
53
|
+
<condition>You want a deep-dive view of a specific subsystem's internals (components, flows, data)</condition>
|
|
54
|
+
</use-when>
|
|
55
|
+
</execution-time>
|
|
56
|
+
|
|
57
|
+
<input>
|
|
58
|
+
<flags>
|
|
59
|
+
</flags>
|
|
60
|
+
|
|
61
|
+
<parameters>
|
|
62
|
+
<required>
|
|
63
|
+
<param name="subsystem" type="path | text">
|
|
64
|
+
Path to the subsystem (e.g., `src/api`) or its name.
|
|
65
|
+
If not provided, pause execution and ask the user for it.
|
|
66
|
+
If provided but ambiguous, or not found in the codebase, ask clarifying questions.
|
|
67
|
+
</param>
|
|
68
|
+
</required>
|
|
69
|
+
|
|
70
|
+
<optional>
|
|
71
|
+
<param name="existing-docs" type="comma-separated paths or directories">
|
|
72
|
+
Pre-existing documentation relevant to this subsystem. Accepts file paths,
|
|
73
|
+
directory paths, or a mix of both. When a directory is provided, recursively
|
|
74
|
+
discover all files within it (including nested subdirectories).
|
|
75
|
+
All resolved file paths are passed through to every map-story invocation
|
|
76
|
+
(file mode) alongside any per-module docs discovered during module-discovery.
|
|
77
|
+
Use this when the caller already knows about documentation that should
|
|
78
|
+
inform knowledge-doc generation.
|
|
79
|
+
</param>
|
|
80
|
+
</optional>
|
|
81
|
+
</parameters>
|
|
82
|
+
</input>
|
|
83
|
+
|
|
84
|
+
<execution-context>
|
|
85
|
+
<!-- All supporting files are auto-loaded in the Supporting Resources section above.
|
|
86
|
+
The model does NOT need to Read these files — they are already in context. -->
|
|
87
|
+
</execution-context>
|
|
88
|
+
|
|
89
|
+
<output>
|
|
90
|
+
<objective>
|
|
91
|
+
Resolve the target subsystem, load system-wide wiki context, and determine whether
|
|
92
|
+
to create, update, or recreate per-subsystem wiki documents. Then:
|
|
93
|
+
|
|
94
|
+
1. Spawn ace-wiki-mapper agents to produce structure and architecture documents.
|
|
95
|
+
2. Update system-structure.md if this subsystem was not previously listed there.
|
|
96
|
+
3. Update the subsystem responsibility matrix in system-architecture.md if missing.
|
|
97
|
+
4. Run module discovery — trace E2E flows, identify patterns, find cross-cutting
|
|
98
|
+
concerns by reading actual source code. Produce module-discovery.md artifact.
|
|
99
|
+
5. For EACH discovered module, run map-story in file mode to create or update
|
|
100
|
+
knowledge documentation (systems/, patterns/, cross-cutting/, guides/, walkthroughs/, decisions/).
|
|
101
|
+
</objective>
|
|
102
|
+
|
|
103
|
+
<artifacts>
|
|
104
|
+
- .docs/wiki/subsystems/[subsystem-name]/structure.md
|
|
105
|
+
- .docs/wiki/subsystems/[subsystem-name]/architecture.md
|
|
106
|
+
- .docs/wiki/subsystems/[subsystem-name]/systems/*.md (created/updated by map-story)
|
|
107
|
+
- .docs/wiki/subsystems/[subsystem-name]/patterns/*.md (created/updated by map-story)
|
|
108
|
+
- .docs/wiki/subsystems/[subsystem-name]/cross-cutting/*.md (created/updated by map-story)
|
|
109
|
+
- .docs/wiki/subsystems/[subsystem-name]/guides/*.md (created/updated by map-story)
|
|
110
|
+
- .docs/wiki/subsystems/[subsystem-name]/walkthroughs/*.md (created/updated by map-story)
|
|
111
|
+
- .docs/wiki/subsystems/[subsystem-name]/decisions/*.md (created/updated by map-story)
|
|
112
|
+
- .ace/artifacts/subsystems/[subsystem-name]/module-discovery/module-discovery.md
|
|
113
|
+
- .ace/artifacts/subsystems/[subsystem-name]/module-discovery/existing-docs-inventory.md (if existing-docs directory provided)
|
|
114
|
+
- .docs/wiki/system-wide/system-structure.md (subsystem entry added if new)
|
|
115
|
+
- .docs/wiki/system-wide/system-architecture.md (subsystem responsibility matrix updated if missing)
|
|
116
|
+
</artifacts>
|
|
117
|
+
</output>
|
|
118
|
+
|
|
119
|
+
<process>
|
|
120
|
+
Execute the map-subsystem workflow from
|
|
121
|
+
`workflow.xml` end-to-end.
|
|
122
|
+
Preserve all workflow gates (validation, user questions, commits).
|
|
123
|
+
|
|
124
|
+
The workflow has 13 steps:
|
|
125
|
+
1-5: Setup, context loading, subsystem resolution, document triage, directory creation
|
|
126
|
+
6-8: Structure + architecture agents (parallel) + collect results
|
|
127
|
+
9: Update system-wide docs (system-structure.md, system-architecture.md)
|
|
128
|
+
10: Module discovery (3 parallel discovery agents + 1 synthesis agent)
|
|
129
|
+
11: Knowledge documentation — run map-story for EACH discovered module (sequential)
|
|
130
|
+
12: Verify and commit all documents
|
|
131
|
+
13: Completion report
|
|
132
|
+
|
|
133
|
+
Steps 10-11 are CRITICAL — they produce the knowledge docs (systems/, patterns/,
|
|
134
|
+
cross-cutting/, guides/, walkthroughs/, decisions/) that AI agents need for future implementations.
|
|
135
|
+
Do NOT skip them.
|
|
136
|
+
</process>
|
|
137
|
+
|
|
138
|
+
<next-steps>
|
|
139
|
+
**After this command, `/clear` first for a fresh context window, then:**
|
|
140
|
+
|
|
141
|
+
For each subsystem found and defined in the Subsystem Responsibility Matrix,
|
|
142
|
+
suggest a `/ace:map-subsystem` command. Example:
|
|
143
|
+
- `/ace:map-subsystem subsystem="src/api"` — Map the API subsystem
|
|
144
|
+
- `/ace:map-subsystem subsystem="src/auth"` — Map the Auth subsystem
|
|
145
|
+
- `/ace:map-subsystem subsystem="src/db"` — Map the DB subsystem
|
|
146
|
+
(list one per subsystem discovered during this command's execution)
|
|
147
|
+
|
|
148
|
+
Also suggest:
|
|
149
|
+
- `/ace:init-coding-standards` — Define prescriptive coding standards
|
|
150
|
+
- `/ace:help` — Check project initialization status and next steps
|
|
151
|
+
- Review and edit files in `.docs/wiki/system-wide/` anytime
|
|
152
|
+
</next-steps>
|
|
153
|
+
|
|
154
|
+
</command>
|
|
155
|
+
```
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* map-subsystem skill script — Entry point for ace-tools operations
|
|
5
|
+
* needed by the map-subsystem skill.
|
|
6
|
+
*
|
|
7
|
+
* Subcommands:
|
|
8
|
+
* init [args] Environment detection for map-subsystem workflow
|
|
9
|
+
*
|
|
10
|
+
* Usage: node script.js <subcommand> [args] [--raw]
|
|
11
|
+
*/
|
|
12
|
+
|
|
13
|
+
const {
|
|
14
|
+
loadConfig, pathExists, resolveModel,
|
|
15
|
+
detectBrownfieldStatus, output, error, runSkillScript,
|
|
16
|
+
} = require('../../shared/lib/ace-core');
|
|
17
|
+
|
|
18
|
+
// ─── CLI Dispatch ────────────────────────────────────────────────────────────
|
|
19
|
+
|
|
20
|
+
runSkillScript({
|
|
21
|
+
init: cmdInit,
|
|
22
|
+
});
|
|
23
|
+
|
|
24
|
+
// ─── Init: Map Subsystem ────────────────────────────────────────────────────
|
|
25
|
+
|
|
26
|
+
function cmdInit(cwd, raw, args, parsed) {
|
|
27
|
+
const config = loadConfig(cwd);
|
|
28
|
+
const brownfield = detectBrownfieldStatus(cwd);
|
|
29
|
+
|
|
30
|
+
const wikiDir = '.docs/wiki/subsystems';
|
|
31
|
+
const wikiDirExists = pathExists(cwd, wikiDir);
|
|
32
|
+
|
|
33
|
+
const result = {
|
|
34
|
+
// Models
|
|
35
|
+
mapper_model: resolveModel(cwd, 'ace-wiki-mapper'),
|
|
36
|
+
|
|
37
|
+
// Config
|
|
38
|
+
commit_docs: config.commit_docs,
|
|
39
|
+
|
|
40
|
+
// Brownfield detection
|
|
41
|
+
...brownfield,
|
|
42
|
+
|
|
43
|
+
// Wiki directory state
|
|
44
|
+
wiki_dir_exists: wikiDirExists,
|
|
45
|
+
|
|
46
|
+
// Git state
|
|
47
|
+
has_git: pathExists(cwd, '.git'),
|
|
48
|
+
};
|
|
49
|
+
|
|
50
|
+
output(result, raw);
|
|
51
|
+
}
|
|
@@ -0,0 +1,68 @@
|
|
|
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('map-subsystem 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.mapper_model, 'should have mapper_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.wiki_dir_exists, 'boolean');
|
|
59
|
+
});
|
|
60
|
+
|
|
61
|
+
it('returns brownfield detection fields', () => {
|
|
62
|
+
const result = JSON.parse(runScript('init', '', tmpDir));
|
|
63
|
+
assert.strictEqual(typeof result.is_brownfield, 'boolean');
|
|
64
|
+
assert.strictEqual(typeof result.is_greenfield, 'boolean');
|
|
65
|
+
assert.strictEqual(result.is_brownfield, !result.is_greenfield);
|
|
66
|
+
});
|
|
67
|
+
});
|
|
68
|
+
});
|
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
<decisions>
|
|
2
|
+
<purpose>
|
|
3
|
+
Template for `.docs/wiki/subsystems/[subsystem-name]/decisions/<decision-name>.md` — an
|
|
4
|
+
Architecture Decision Record (ADR) capturing WHY a significant choice was made.
|
|
5
|
+
Answers "Why did we choose X over Y?"
|
|
6
|
+
|
|
7
|
+
Each decision doc captures one significant technical decision with its context and
|
|
8
|
+
trade-offs. It is the document an AI agent reads to understand WHY things are built
|
|
9
|
+
a certain way, preventing it from making the wrong choice.
|
|
10
|
+
|
|
11
|
+
Create an ADR ONLY when a significant "why" decision was made:
|
|
12
|
+
- Choosing one approach over another with meaningful trade-offs
|
|
13
|
+
- Deviating from an established pattern for a specific reason
|
|
14
|
+
- Adopting a new technology, pattern, or architectural approach
|
|
15
|
+
- Rejecting a seemingly obvious solution for non-obvious reasons
|
|
16
|
+
|
|
17
|
+
Do NOT create ADRs for trivial or obvious decisions.
|
|
18
|
+
|
|
19
|
+
Complements:
|
|
20
|
+
- systems/ docs (WHAT exists — systems reference decisions that shaped them)
|
|
21
|
+
- patterns/ docs (HOW things work — patterns reference decisions that defined them)
|
|
22
|
+
- cross-cutting/ docs (shared infrastructure shaped by architectural decisions)
|
|
23
|
+
</purpose>
|
|
24
|
+
|
|
25
|
+
<template>
|
|
26
|
+
<decision-record>
|
|
27
|
+
# ADR-NNN: [Decision Title]
|
|
28
|
+
|
|
29
|
+
**Status**: Accepted | Superseded by [ADR-MMM](./ADR-MMM-slug.md)
|
|
30
|
+
**Date**: YYYY-MM-DD
|
|
31
|
+
**Story**: [story reference, if applicable]
|
|
32
|
+
|
|
33
|
+
## Context
|
|
34
|
+
What situation prompted this decision. 2-3 sentences max.
|
|
35
|
+
|
|
36
|
+
## Decision
|
|
37
|
+
What was decided. 2-3 sentences max.
|
|
38
|
+
|
|
39
|
+
## Alternatives Considered
|
|
40
|
+
- **[Alternative A]**: [Why rejected — 1 sentence]
|
|
41
|
+
- **[Alternative B]**: [Why rejected — 1 sentence]
|
|
42
|
+
|
|
43
|
+
## Consequences
|
|
44
|
+
- Pro: [positive outcome]
|
|
45
|
+
- Pro: [positive outcome]
|
|
46
|
+
- Con: [trade-off accepted]
|
|
47
|
+
</decision-record>
|
|
48
|
+
</template>
|
|
49
|
+
|
|
50
|
+
<guidelines>
|
|
51
|
+
|
|
52
|
+
**Documentation Style:**
|
|
53
|
+
- EXTREMELY SUCCINCT — each ADR should be under 30 lines
|
|
54
|
+
- NO FLUFF — every sentence must convey a decision, reason, or consequence
|
|
55
|
+
- Bullet points for alternatives and consequences
|
|
56
|
+
- Code references as `file-path:ClassName` only when the decision is about specific code
|
|
57
|
+
|
|
58
|
+
**ADR Numbering:**
|
|
59
|
+
- Sequential within the subsystem: ADR-001, ADR-002, etc.
|
|
60
|
+
- Filename format: `ADR-NNN-kebab-case-slug.md`
|
|
61
|
+
- To find the next number, read existing ADRs in the decisions/ directory.
|
|
62
|
+
|
|
63
|
+
**Status:**
|
|
64
|
+
- `Accepted` — the decision is in effect
|
|
65
|
+
- `Superseded by ADR-MMM` — replaced by a later decision (link to it)
|
|
66
|
+
- ADRs are IMMUTABLE — never edit an accepted ADR. Create a new one that supersedes it.
|
|
67
|
+
|
|
68
|
+
**Context:**
|
|
69
|
+
- 2-3 sentences. What problem or situation forced a choice.
|
|
70
|
+
- Reference the system or pattern this decision affects.
|
|
71
|
+
|
|
72
|
+
**Decision:**
|
|
73
|
+
- 2-3 sentences. What was chosen and at what scope.
|
|
74
|
+
- Be specific — "We use X for Y" not "We decided to improve things."
|
|
75
|
+
|
|
76
|
+
**Alternatives Considered:**
|
|
77
|
+
- List each rejected alternative with ONE sentence explaining why.
|
|
78
|
+
- If there were no meaningful alternatives, omit this section.
|
|
79
|
+
|
|
80
|
+
**Consequences:**
|
|
81
|
+
- Bullet list of pros and cons.
|
|
82
|
+
- Be honest about trade-offs — future agents need to know the downsides.
|
|
83
|
+
- Include migration/compatibility consequences if applicable.
|
|
84
|
+
|
|
85
|
+
**What does NOT belong here:**
|
|
86
|
+
- Implementation details (that's in systems/ and patterns/ docs)
|
|
87
|
+
- Step-by-step instructions (that's in guides/)
|
|
88
|
+
- Full analysis or research documents (those are in .ace/artifacts/)
|
|
89
|
+
- Revision history or meeting notes
|
|
90
|
+
|
|
91
|
+
</guidelines>
|
|
92
|
+
|
|
93
|
+
<evolution>
|
|
94
|
+
|
|
95
|
+
ADRs are IMMUTABLE once accepted. They are historical records.
|
|
96
|
+
|
|
97
|
+
**When to create a new ADR:**
|
|
98
|
+
- A significant architectural or pattern choice is made during a story
|
|
99
|
+
- An existing decision is reversed or significantly modified (supersede the old one)
|
|
100
|
+
- A new technology, pattern, or approach is adopted
|
|
101
|
+
|
|
102
|
+
**When NOT to create an ADR:**
|
|
103
|
+
- Routine implementation following existing patterns
|
|
104
|
+
- Bug fixes or refactoring that don't change architectural direction
|
|
105
|
+
- Trivial decisions with no meaningful trade-offs
|
|
106
|
+
- Decisions already captured in an existing ADR
|
|
107
|
+
|
|
108
|
+
**Superseding:**
|
|
109
|
+
- Create the new ADR with its own number
|
|
110
|
+
- Update the old ADR's Status to: `Superseded by [ADR-MMM](./ADR-MMM-slug.md)`
|
|
111
|
+
- This is the ONLY edit allowed on an accepted ADR
|
|
112
|
+
|
|
113
|
+
</evolution>
|
|
114
|
+
|
|
115
|
+
</decisions>
|