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,235 +1,235 @@
|
|
|
1
|
-
<subsystem-structure>
|
|
2
|
-
<purpose>
|
|
3
|
-
Template for `.docs/wiki/subsystems/[subsystem-name]/structure.md` — the physical file
|
|
4
|
-
organization within a single subsystem. Answers "I'm working in this subsystem, where do I put things?"
|
|
5
|
-
|
|
6
|
-
Complements system-structure.md (which shows the system-wide layout and subsystem index).
|
|
7
|
-
One instance per subsystem — each gets its own structure doc.
|
|
8
|
-
|
|
9
|
-
A "subsystem" is any cohesive code unit with a clear responsibility boundary —
|
|
10
|
-
whether deployed as a microservice, a monolith module, or a library package.
|
|
11
|
-
|
|
12
|
-
**Monoliths have subsystems too.** A monolith with bounded contexts, feature modules,
|
|
13
|
-
or domain packages gets one subsystem-structure doc per module — same as microservices.
|
|
14
|
-
The only difference is deployment topology, not documentation structure.
|
|
15
|
-
</purpose>
|
|
16
|
-
|
|
17
|
-
<template>
|
|
18
|
-
<subsystem-overview>
|
|
19
|
-
## [Subsystem Name]
|
|
20
|
-
|
|
21
|
-
**Root:** `[path from project root]`
|
|
22
|
-
**Responsibility:** [One-line purpose — what this subsystem owns]
|
|
23
|
-
</subsystem-overview>
|
|
24
|
-
|
|
25
|
-
<directory-layout>
|
|
26
|
-
## Directory Layout
|
|
27
|
-
|
|
28
|
-
[ASCII box-drawing tree of ALL directories and files with purpose - use ├── └── │ characters for tree structure only]
|
|
29
|
-
|
|
30
|
-
Complete file tree of this subsystem. List every file and directory — this is the
|
|
31
|
-
full inventory. An agent reading this should know exactly what exists without running `ls`.
|
|
32
|
-
|
|
33
|
-
```
|
|
34
|
-
[subsystem-root]/
|
|
35
|
-
├── [dir]/ # [Purpose]
|
|
36
|
-
│ ├── [subdir]/ # [Purpose]
|
|
37
|
-
│ │ └── [subdir]/ # [Purpose]
|
|
38
|
-
│ └── [subdir]/ # [Purpose]
|
|
39
|
-
├── [dir]/ # [Purpose]
|
|
40
|
-
│ ├── [subdir]/ # [Purpose]
|
|
41
|
-
│ └── [file] # [Purpose]
|
|
42
|
-
├── [dir]/ # [Purpose]
|
|
43
|
-
└── [file] # [Purpose]
|
|
44
|
-
```
|
|
45
|
-
</directory-layout>
|
|
46
|
-
|
|
47
|
-
<directory-purposes>
|
|
48
|
-
## Directory Purposes
|
|
49
|
-
|
|
50
|
-
**[Directory Name]:**
|
|
51
|
-
- Purpose: [What lives here]
|
|
52
|
-
- Contains: [Types of files: e.g., "*.ts source files", "component directories"]
|
|
53
|
-
- Key files: `[important files in this directory]`
|
|
54
|
-
- Subdirectories: [If nested, describe structure]
|
|
55
|
-
|
|
56
|
-
**[Directory Name]:**
|
|
57
|
-
- Purpose: [What lives here]
|
|
58
|
-
- Contains: [Types of files]
|
|
59
|
-
- Key files: `[important files]`
|
|
60
|
-
- Subdirectories: [Structure]
|
|
61
|
-
</directory-purposes>
|
|
62
|
-
|
|
63
|
-
<key-file-locations>
|
|
64
|
-
## Key File Locations
|
|
65
|
-
|
|
66
|
-
**Entry Points:**
|
|
67
|
-
- `[path]`: [Purpose — e.g., "HTTP server startup", "CLI entry point"]
|
|
68
|
-
|
|
69
|
-
**Configuration:**
|
|
70
|
-
- `[path]`: [Purpose — e.g., "Module config", "DI container setup"]
|
|
71
|
-
|
|
72
|
-
**Core Logic:**
|
|
73
|
-
- `[path]`: [Purpose — e.g., "Domain services", "Business rules"]
|
|
74
|
-
- `[path]`: [Purpose — e.g., "Data access", "Repository implementations"]
|
|
75
|
-
|
|
76
|
-
**API Surface:**
|
|
77
|
-
- `[path]`: [Purpose — e.g., "Route definitions", "Controller handlers"]
|
|
78
|
-
- `[path]`: [Purpose — e.g., "DTOs / request-response types"]
|
|
79
|
-
|
|
80
|
-
**Testing:**
|
|
81
|
-
- `[path]`: [Purpose — e.g., "Unit tests"]
|
|
82
|
-
- `[path]`: [Purpose — e.g., "Test fixtures / factories"]
|
|
83
|
-
</key-file-locations>
|
|
84
|
-
|
|
85
|
-
<naming-conventions>
|
|
86
|
-
## Naming Conventions
|
|
87
|
-
|
|
88
|
-
Subsystem-specific patterns. If this subsystem follows system-wide conventions
|
|
89
|
-
without deviation, state: "Follows system-wide conventions — see system-structure.md"
|
|
90
|
-
|
|
91
|
-
**Files:**
|
|
92
|
-
- [Pattern]: [Example — e.g., "kebab-case.ts for modules"]
|
|
93
|
-
- [Pattern]: [Example — e.g., "PascalCase.tsx for React components"]
|
|
94
|
-
- [Pattern]: [Example — e.g., "PascalCase.cs for C# classes"]
|
|
95
|
-
- [Pattern]: [Example — e.g., "*.test.ts co-located with source"]
|
|
96
|
-
|
|
97
|
-
**Directories:**
|
|
98
|
-
- [Pattern]: [Example — e.g., "kebab-case for feature directories"]
|
|
99
|
-
- [Pattern]: [Example — e.g., "plural names for collections"]
|
|
100
|
-
|
|
101
|
-
**Special Patterns:**
|
|
102
|
-
- [Pattern]: [Example — e.g., "index.ts barrel exports per directory"]
|
|
103
|
-
- [Pattern]: [Example — e.g., "__tests__/ for test directories"]
|
|
104
|
-
</naming-conventions>
|
|
105
|
-
|
|
106
|
-
<where-to-add-new-code>
|
|
107
|
-
## Where to Add New Code
|
|
108
|
-
|
|
109
|
-
**New Feature:**
|
|
110
|
-
- Primary code: `[directory path]`
|
|
111
|
-
- Tests: `[directory path]`
|
|
112
|
-
- Config if needed: `[directory path]`
|
|
113
|
-
|
|
114
|
-
**New Component / Module:**
|
|
115
|
-
- Implementation: `[directory path]`
|
|
116
|
-
- Types: `[directory path]`
|
|
117
|
-
- Tests: `[directory path]`
|
|
118
|
-
|
|
119
|
-
**New Route / Endpoint / Command:**
|
|
120
|
-
- Definition: `[directory path]`
|
|
121
|
-
- Handler: `[directory path]`
|
|
122
|
-
- Tests: `[directory path]`
|
|
123
|
-
|
|
124
|
-
**New Domain Entity / Model:**
|
|
125
|
-
- Entity: `[directory path]`
|
|
126
|
-
- Repository: `[directory path]`
|
|
127
|
-
- Tests: `[directory path]`
|
|
128
|
-
|
|
129
|
-
**New Service / Use Case:**
|
|
130
|
-
- Service: `[directory path]`
|
|
131
|
-
- Use case / application logic: `[directory path]`
|
|
132
|
-
- Interface / contract: `[directory path]`
|
|
133
|
-
- Tests: `[directory path]`
|
|
134
|
-
|
|
135
|
-
**New DTO / Request-Response Object:**
|
|
136
|
-
- DTOs: `[directory path]`
|
|
137
|
-
- Validators: `[directory path]`
|
|
138
|
-
|
|
139
|
-
**New Mapper / Transformer:**
|
|
140
|
-
- Mappers: `[directory path]`
|
|
141
|
-
|
|
142
|
-
**New Constants / Enums:**
|
|
143
|
-
- Constants: `[directory path]`
|
|
144
|
-
- Enums: `[directory path]`
|
|
145
|
-
- Magic values / lookup tables: `[directory path]`
|
|
146
|
-
|
|
147
|
-
**New Database Script / Migration:**
|
|
148
|
-
- Migrations: `[directory path]`
|
|
149
|
-
- Seeds / fixtures: `[directory path]`
|
|
150
|
-
- Stored procedures: `[directory path]`
|
|
151
|
-
|
|
152
|
-
**Shared Kernel / Cross-Cutting:**
|
|
153
|
-
- Shared kernel: `[directory path]`
|
|
154
|
-
- Base classes / interfaces: `[directory path]`
|
|
155
|
-
- Common exceptions: `[directory path]`
|
|
156
|
-
- Extension methods / helpers: `[directory path]`
|
|
157
|
-
|
|
158
|
-
**Utilities:**
|
|
159
|
-
- Shared helpers: `[directory path]`
|
|
160
|
-
- Type definitions: `[directory path]`
|
|
161
|
-
</where-to-add-new-code>
|
|
162
|
-
|
|
163
|
-
<special-directories>
|
|
164
|
-
## Special Directories
|
|
165
|
-
|
|
166
|
-
Directories with special meaning within this subsystem.
|
|
167
|
-
|
|
168
|
-
**[Directory]:**
|
|
169
|
-
- Purpose: [e.g., "Generated code", "Build output", "Migrations"]
|
|
170
|
-
- Source: [e.g., "Auto-generated by X", "Manually maintained"]
|
|
171
|
-
- Committed: [Yes/No]
|
|
172
|
-
</special-directories>
|
|
173
|
-
</template>
|
|
174
|
-
|
|
175
|
-
<guidelines>
|
|
176
|
-
|
|
177
|
-
**Subsystem Overview:**
|
|
178
|
-
- Root path must be relative to project root — agents use this to navigate
|
|
179
|
-
- Responsibility is one line. If you need more, it goes in the subsystem architecture doc
|
|
180
|
-
|
|
181
|
-
**Directory Layout:**
|
|
182
|
-
- List EVERY file and directory. This is the complete inventory of the subsystem
|
|
183
|
-
- Every directory gets a `# Purpose` comment
|
|
184
|
-
- Every file gets a `# Purpose` comment
|
|
185
|
-
- Use ASCII box-drawing characters: `├── └── │`
|
|
186
|
-
- Skip node_modules, build output, and other generated dirs (mention in Special Directories)
|
|
187
|
-
|
|
188
|
-
**Directory Purposes:**
|
|
189
|
-
- One entry per directory that has meaningful content
|
|
190
|
-
- "Key files" should list the 2-3 most important files a developer would look at first
|
|
191
|
-
- Skip directories that are obvious from the tree (e.g., don't describe `tests/` if it just has tests)
|
|
192
|
-
|
|
193
|
-
**Key File Locations:**
|
|
194
|
-
- Paths must be relative to subsystem root
|
|
195
|
-
- Group by role, not by directory
|
|
196
|
-
- Every entry needs a purpose — `user.service.ts` tells you nothing; "Core user CRUD operations" does
|
|
197
|
-
- Focus on files a developer touches when working on this subsystem
|
|
198
|
-
|
|
199
|
-
**Where to Add New Code:**
|
|
200
|
-
- This is the most actionable section. An agent reads this when creating new files
|
|
201
|
-
- Be specific — `src/features/[feature-name]/` not "the features directory"
|
|
202
|
-
- Cover the common cases for this subsystem's domain
|
|
203
|
-
|
|
204
|
-
**Naming Conventions:**
|
|
205
|
-
- Only document if this subsystem has patterns different from system-wide conventions
|
|
206
|
-
- If it follows system-wide conventions exactly, say so and link to system-structure.md
|
|
207
|
-
- Show actual examples from the codebase, not theoretical patterns
|
|
208
|
-
|
|
209
|
-
**What does NOT belong here:**
|
|
210
|
-
- Conceptual architecture (that's the subsystem architecture doc)
|
|
211
|
-
- Technology stack (that's system-architecture.md)
|
|
212
|
-
- Code conventions like formatting rules (that's a conventions doc)
|
|
213
|
-
- Other subsystems' structure (each has its own doc)
|
|
214
|
-
|
|
215
|
-
</guidelines>
|
|
216
|
-
|
|
217
|
-
<evolution>
|
|
218
|
-
|
|
219
|
-
Update when the physical layout of this subsystem changes.
|
|
220
|
-
|
|
221
|
-
**Update triggers:**
|
|
222
|
-
- New top-level directory added within subsystem
|
|
223
|
-
- Directory renamed, moved, or removed
|
|
224
|
-
- New entry point or configuration file added
|
|
225
|
-
- Naming convention changed
|
|
226
|
-
- "Where to add new code" guidance no longer accurate
|
|
227
|
-
|
|
228
|
-
**NOT an update trigger:**
|
|
229
|
-
- New files added within existing directories
|
|
230
|
-
- New features that follow existing structure
|
|
231
|
-
- Bug fixes or internal refactoring
|
|
232
|
-
|
|
233
|
-
</evolution>
|
|
234
|
-
|
|
1
|
+
<subsystem-structure>
|
|
2
|
+
<purpose>
|
|
3
|
+
Template for `.docs/wiki/subsystems/[subsystem-name]/structure.md` — the physical file
|
|
4
|
+
organization within a single subsystem. Answers "I'm working in this subsystem, where do I put things?"
|
|
5
|
+
|
|
6
|
+
Complements system-structure.md (which shows the system-wide layout and subsystem index).
|
|
7
|
+
One instance per subsystem — each gets its own structure doc.
|
|
8
|
+
|
|
9
|
+
A "subsystem" is any cohesive code unit with a clear responsibility boundary —
|
|
10
|
+
whether deployed as a microservice, a monolith module, or a library package.
|
|
11
|
+
|
|
12
|
+
**Monoliths have subsystems too.** A monolith with bounded contexts, feature modules,
|
|
13
|
+
or domain packages gets one subsystem-structure doc per module — same as microservices.
|
|
14
|
+
The only difference is deployment topology, not documentation structure.
|
|
15
|
+
</purpose>
|
|
16
|
+
|
|
17
|
+
<template>
|
|
18
|
+
<subsystem-overview>
|
|
19
|
+
## [Subsystem Name]
|
|
20
|
+
|
|
21
|
+
**Root:** `[path from project root]`
|
|
22
|
+
**Responsibility:** [One-line purpose — what this subsystem owns]
|
|
23
|
+
</subsystem-overview>
|
|
24
|
+
|
|
25
|
+
<directory-layout>
|
|
26
|
+
## Directory Layout
|
|
27
|
+
|
|
28
|
+
[ASCII box-drawing tree of ALL directories and files with purpose - use ├── └── │ characters for tree structure only]
|
|
29
|
+
|
|
30
|
+
Complete file tree of this subsystem. List every file and directory — this is the
|
|
31
|
+
full inventory. An agent reading this should know exactly what exists without running `ls`.
|
|
32
|
+
|
|
33
|
+
```
|
|
34
|
+
[subsystem-root]/
|
|
35
|
+
├── [dir]/ # [Purpose]
|
|
36
|
+
│ ├── [subdir]/ # [Purpose]
|
|
37
|
+
│ │ └── [subdir]/ # [Purpose]
|
|
38
|
+
│ └── [subdir]/ # [Purpose]
|
|
39
|
+
├── [dir]/ # [Purpose]
|
|
40
|
+
│ ├── [subdir]/ # [Purpose]
|
|
41
|
+
│ └── [file] # [Purpose]
|
|
42
|
+
├── [dir]/ # [Purpose]
|
|
43
|
+
└── [file] # [Purpose]
|
|
44
|
+
```
|
|
45
|
+
</directory-layout>
|
|
46
|
+
|
|
47
|
+
<directory-purposes>
|
|
48
|
+
## Directory Purposes
|
|
49
|
+
|
|
50
|
+
**[Directory Name]:**
|
|
51
|
+
- Purpose: [What lives here]
|
|
52
|
+
- Contains: [Types of files: e.g., "*.ts source files", "component directories"]
|
|
53
|
+
- Key files: `[important files in this directory]`
|
|
54
|
+
- Subdirectories: [If nested, describe structure]
|
|
55
|
+
|
|
56
|
+
**[Directory Name]:**
|
|
57
|
+
- Purpose: [What lives here]
|
|
58
|
+
- Contains: [Types of files]
|
|
59
|
+
- Key files: `[important files]`
|
|
60
|
+
- Subdirectories: [Structure]
|
|
61
|
+
</directory-purposes>
|
|
62
|
+
|
|
63
|
+
<key-file-locations>
|
|
64
|
+
## Key File Locations
|
|
65
|
+
|
|
66
|
+
**Entry Points:**
|
|
67
|
+
- `[path]`: [Purpose — e.g., "HTTP server startup", "CLI entry point"]
|
|
68
|
+
|
|
69
|
+
**Configuration:**
|
|
70
|
+
- `[path]`: [Purpose — e.g., "Module config", "DI container setup"]
|
|
71
|
+
|
|
72
|
+
**Core Logic:**
|
|
73
|
+
- `[path]`: [Purpose — e.g., "Domain services", "Business rules"]
|
|
74
|
+
- `[path]`: [Purpose — e.g., "Data access", "Repository implementations"]
|
|
75
|
+
|
|
76
|
+
**API Surface:**
|
|
77
|
+
- `[path]`: [Purpose — e.g., "Route definitions", "Controller handlers"]
|
|
78
|
+
- `[path]`: [Purpose — e.g., "DTOs / request-response types"]
|
|
79
|
+
|
|
80
|
+
**Testing:**
|
|
81
|
+
- `[path]`: [Purpose — e.g., "Unit tests"]
|
|
82
|
+
- `[path]`: [Purpose — e.g., "Test fixtures / factories"]
|
|
83
|
+
</key-file-locations>
|
|
84
|
+
|
|
85
|
+
<naming-conventions>
|
|
86
|
+
## Naming Conventions
|
|
87
|
+
|
|
88
|
+
Subsystem-specific patterns. If this subsystem follows system-wide conventions
|
|
89
|
+
without deviation, state: "Follows system-wide conventions — see system-structure.md"
|
|
90
|
+
|
|
91
|
+
**Files:**
|
|
92
|
+
- [Pattern]: [Example — e.g., "kebab-case.ts for modules"]
|
|
93
|
+
- [Pattern]: [Example — e.g., "PascalCase.tsx for React components"]
|
|
94
|
+
- [Pattern]: [Example — e.g., "PascalCase.cs for C# classes"]
|
|
95
|
+
- [Pattern]: [Example — e.g., "*.test.ts co-located with source"]
|
|
96
|
+
|
|
97
|
+
**Directories:**
|
|
98
|
+
- [Pattern]: [Example — e.g., "kebab-case for feature directories"]
|
|
99
|
+
- [Pattern]: [Example — e.g., "plural names for collections"]
|
|
100
|
+
|
|
101
|
+
**Special Patterns:**
|
|
102
|
+
- [Pattern]: [Example — e.g., "index.ts barrel exports per directory"]
|
|
103
|
+
- [Pattern]: [Example — e.g., "__tests__/ for test directories"]
|
|
104
|
+
</naming-conventions>
|
|
105
|
+
|
|
106
|
+
<where-to-add-new-code>
|
|
107
|
+
## Where to Add New Code
|
|
108
|
+
|
|
109
|
+
**New Feature:**
|
|
110
|
+
- Primary code: `[directory path]`
|
|
111
|
+
- Tests: `[directory path]`
|
|
112
|
+
- Config if needed: `[directory path]`
|
|
113
|
+
|
|
114
|
+
**New Component / Module:**
|
|
115
|
+
- Implementation: `[directory path]`
|
|
116
|
+
- Types: `[directory path]`
|
|
117
|
+
- Tests: `[directory path]`
|
|
118
|
+
|
|
119
|
+
**New Route / Endpoint / Command:**
|
|
120
|
+
- Definition: `[directory path]`
|
|
121
|
+
- Handler: `[directory path]`
|
|
122
|
+
- Tests: `[directory path]`
|
|
123
|
+
|
|
124
|
+
**New Domain Entity / Model:**
|
|
125
|
+
- Entity: `[directory path]`
|
|
126
|
+
- Repository: `[directory path]`
|
|
127
|
+
- Tests: `[directory path]`
|
|
128
|
+
|
|
129
|
+
**New Service / Use Case:**
|
|
130
|
+
- Service: `[directory path]`
|
|
131
|
+
- Use case / application logic: `[directory path]`
|
|
132
|
+
- Interface / contract: `[directory path]`
|
|
133
|
+
- Tests: `[directory path]`
|
|
134
|
+
|
|
135
|
+
**New DTO / Request-Response Object:**
|
|
136
|
+
- DTOs: `[directory path]`
|
|
137
|
+
- Validators: `[directory path]`
|
|
138
|
+
|
|
139
|
+
**New Mapper / Transformer:**
|
|
140
|
+
- Mappers: `[directory path]`
|
|
141
|
+
|
|
142
|
+
**New Constants / Enums:**
|
|
143
|
+
- Constants: `[directory path]`
|
|
144
|
+
- Enums: `[directory path]`
|
|
145
|
+
- Magic values / lookup tables: `[directory path]`
|
|
146
|
+
|
|
147
|
+
**New Database Script / Migration:**
|
|
148
|
+
- Migrations: `[directory path]`
|
|
149
|
+
- Seeds / fixtures: `[directory path]`
|
|
150
|
+
- Stored procedures: `[directory path]`
|
|
151
|
+
|
|
152
|
+
**Shared Kernel / Cross-Cutting:**
|
|
153
|
+
- Shared kernel: `[directory path]`
|
|
154
|
+
- Base classes / interfaces: `[directory path]`
|
|
155
|
+
- Common exceptions: `[directory path]`
|
|
156
|
+
- Extension methods / helpers: `[directory path]`
|
|
157
|
+
|
|
158
|
+
**Utilities:**
|
|
159
|
+
- Shared helpers: `[directory path]`
|
|
160
|
+
- Type definitions: `[directory path]`
|
|
161
|
+
</where-to-add-new-code>
|
|
162
|
+
|
|
163
|
+
<special-directories>
|
|
164
|
+
## Special Directories
|
|
165
|
+
|
|
166
|
+
Directories with special meaning within this subsystem.
|
|
167
|
+
|
|
168
|
+
**[Directory]:**
|
|
169
|
+
- Purpose: [e.g., "Generated code", "Build output", "Migrations"]
|
|
170
|
+
- Source: [e.g., "Auto-generated by X", "Manually maintained"]
|
|
171
|
+
- Committed: [Yes/No]
|
|
172
|
+
</special-directories>
|
|
173
|
+
</template>
|
|
174
|
+
|
|
175
|
+
<guidelines>
|
|
176
|
+
|
|
177
|
+
**Subsystem Overview:**
|
|
178
|
+
- Root path must be relative to project root — agents use this to navigate
|
|
179
|
+
- Responsibility is one line. If you need more, it goes in the subsystem architecture doc
|
|
180
|
+
|
|
181
|
+
**Directory Layout:**
|
|
182
|
+
- List EVERY file and directory. This is the complete inventory of the subsystem
|
|
183
|
+
- Every directory gets a `# Purpose` comment
|
|
184
|
+
- Every file gets a `# Purpose` comment
|
|
185
|
+
- Use ASCII box-drawing characters: `├── └── │`
|
|
186
|
+
- Skip node_modules, build output, and other generated dirs (mention in Special Directories)
|
|
187
|
+
|
|
188
|
+
**Directory Purposes:**
|
|
189
|
+
- One entry per directory that has meaningful content
|
|
190
|
+
- "Key files" should list the 2-3 most important files a developer would look at first
|
|
191
|
+
- Skip directories that are obvious from the tree (e.g., don't describe `tests/` if it just has tests)
|
|
192
|
+
|
|
193
|
+
**Key File Locations:**
|
|
194
|
+
- Paths must be relative to subsystem root
|
|
195
|
+
- Group by role, not by directory
|
|
196
|
+
- Every entry needs a purpose — `user.service.ts` tells you nothing; "Core user CRUD operations" does
|
|
197
|
+
- Focus on files a developer touches when working on this subsystem
|
|
198
|
+
|
|
199
|
+
**Where to Add New Code:**
|
|
200
|
+
- This is the most actionable section. An agent reads this when creating new files
|
|
201
|
+
- Be specific — `src/features/[feature-name]/` not "the features directory"
|
|
202
|
+
- Cover the common cases for this subsystem's domain
|
|
203
|
+
|
|
204
|
+
**Naming Conventions:**
|
|
205
|
+
- Only document if this subsystem has patterns different from system-wide conventions
|
|
206
|
+
- If it follows system-wide conventions exactly, say so and link to system-structure.md
|
|
207
|
+
- Show actual examples from the codebase, not theoretical patterns
|
|
208
|
+
|
|
209
|
+
**What does NOT belong here:**
|
|
210
|
+
- Conceptual architecture (that's the subsystem architecture doc)
|
|
211
|
+
- Technology stack (that's system-architecture.md)
|
|
212
|
+
- Code conventions like formatting rules (that's a conventions doc)
|
|
213
|
+
- Other subsystems' structure (each has its own doc)
|
|
214
|
+
|
|
215
|
+
</guidelines>
|
|
216
|
+
|
|
217
|
+
<evolution>
|
|
218
|
+
|
|
219
|
+
Update when the physical layout of this subsystem changes.
|
|
220
|
+
|
|
221
|
+
**Update triggers:**
|
|
222
|
+
- New top-level directory added within subsystem
|
|
223
|
+
- Directory renamed, moved, or removed
|
|
224
|
+
- New entry point or configuration file added
|
|
225
|
+
- Naming convention changed
|
|
226
|
+
- "Where to add new code" guidance no longer accurate
|
|
227
|
+
|
|
228
|
+
**NOT an update trigger:**
|
|
229
|
+
- New files added within existing directories
|
|
230
|
+
- New features that follow existing structure
|
|
231
|
+
- Bug fixes or internal refactoring
|
|
232
|
+
|
|
233
|
+
</evolution>
|
|
234
|
+
|
|
235
235
|
</subsystem-structure>
|
|
@@ -0,0 +1,197 @@
|
|
|
1
|
+
<system-cross-cutting>
|
|
2
|
+
<purpose>
|
|
3
|
+
Template for `.docs/wiki/subsystems/[subsystem-name]/cross-cutting/<concern-name>.md` — a
|
|
4
|
+
concern that spans multiple systems within a codebase subsystem. Answers "How does this
|
|
5
|
+
shared infrastructure/concern work, and how do I plug into it?"
|
|
6
|
+
|
|
7
|
+
Each cross-cutting doc describes shared infrastructure or mechanisms that multiple domain
|
|
8
|
+
systems depend on. It is the document an AI agent reads to understand how to register,
|
|
9
|
+
configure, or interact with shared concerns.
|
|
10
|
+
|
|
11
|
+
Examples of cross-cutting concerns:
|
|
12
|
+
- Dependency injection and container registration
|
|
13
|
+
- Factory/registry registration patterns
|
|
14
|
+
- Event systems, invalidation, pub/sub
|
|
15
|
+
- Serialization/deserialization
|
|
16
|
+
- Error handling and logging infrastructure
|
|
17
|
+
- Authentication/authorization middleware
|
|
18
|
+
- Cache/invalidation infrastructure
|
|
19
|
+
- Shared abstract base classes
|
|
20
|
+
|
|
21
|
+
Complements:
|
|
22
|
+
- systems/ docs (domain systems that USE these cross-cutting concerns)
|
|
23
|
+
- patterns/ docs (reusable structural patterns, not shared infrastructure)
|
|
24
|
+
- guides/ docs (task recipes that reference cross-cutting setup steps)
|
|
25
|
+
</purpose>
|
|
26
|
+
|
|
27
|
+
<template>
|
|
28
|
+
<overview>
|
|
29
|
+
# [Cross-Cutting Concern]
|
|
30
|
+
|
|
31
|
+
## Overview
|
|
32
|
+
What this concern addresses, why it exists. One paragraph.
|
|
33
|
+
</overview>
|
|
34
|
+
|
|
35
|
+
<how-it-works>
|
|
36
|
+
## How It Works
|
|
37
|
+
|
|
38
|
+
The pattern/mechanism used. Reference actual code locations.
|
|
39
|
+
|
|
40
|
+
1. **Step**: Description at `file:ClassName.method`
|
|
41
|
+
2. **Step**: Description at `file:ClassName.method`
|
|
42
|
+
3. **Step**: Description at `file:ClassName.method`
|
|
43
|
+
</how-it-works>
|
|
44
|
+
|
|
45
|
+
<registration-and-setup>
|
|
46
|
+
## Registration / Setup
|
|
47
|
+
|
|
48
|
+
Where and how components register with this concern.
|
|
49
|
+
- **Container**: `file:container.ts:registerServices`
|
|
50
|
+
- **Factory**: `file:DrawingFactory.ts:DrawingFactory`
|
|
51
|
+
- **Registry**: `file:DrawingRegistry.ts:DrawingRegistry`
|
|
52
|
+
</registration-and-setup>
|
|
53
|
+
|
|
54
|
+
<usage>
|
|
55
|
+
## Usage
|
|
56
|
+
|
|
57
|
+
How other systems interact with this concern.
|
|
58
|
+
|
|
59
|
+
```typescript
|
|
60
|
+
// Usage pattern (inline only if non-obvious)
|
|
61
|
+
```
|
|
62
|
+
</usage>
|
|
63
|
+
|
|
64
|
+
<current-registrations>
|
|
65
|
+
## Current Registrations / Implementations
|
|
66
|
+
|
|
67
|
+
What is currently registered/using this concern:
|
|
68
|
+
- `TrendLine` registered at `file:container.ts:registerDrawings`
|
|
69
|
+
- `ParallelChannel` registered at `file:container.ts:registerDrawings`
|
|
70
|
+
- ...
|
|
71
|
+
</current-registrations>
|
|
72
|
+
|
|
73
|
+
<integration-points>
|
|
74
|
+
## Integration Points
|
|
75
|
+
|
|
76
|
+
Where this concern connects to other systems.
|
|
77
|
+
- [System A](../systems/system-a.md) — uses this for [purpose]
|
|
78
|
+
- [System B](../systems/system-b.md) — uses this for [purpose]
|
|
79
|
+
</integration-points>
|
|
80
|
+
|
|
81
|
+
<gotchas>
|
|
82
|
+
## Gotchas
|
|
83
|
+
|
|
84
|
+
Common mistakes when working with this concern.
|
|
85
|
+
- [Common mistake 1]
|
|
86
|
+
- [Common mistake 2]
|
|
87
|
+
</gotchas>
|
|
88
|
+
|
|
89
|
+
<tech-debt>
|
|
90
|
+
## Tech Debt
|
|
91
|
+
|
|
92
|
+
Known quality issues in this cross-cutting concern discovered during story code reviews.
|
|
93
|
+
Items are added by the wiki mapper and removed when fixed by a future story.
|
|
94
|
+
Include ONLY if this concern has known tech debt items. Omit section entirely if clean.
|
|
95
|
+
|
|
96
|
+
### [Short descriptive title of the issue]
|
|
97
|
+
- **Severity:** high | medium | low
|
|
98
|
+
- **File:** `[file-path:SymbolName]`
|
|
99
|
+
- **Description:** What the issue is, why it matters, and what could go wrong
|
|
100
|
+
if left unfixed. For cross-cutting concerns, note which dependent systems are affected.
|
|
101
|
+
- **Discovered during:** [story-id] — [story title]
|
|
102
|
+
|
|
103
|
+
### [Another issue]
|
|
104
|
+
- **Severity:** ...
|
|
105
|
+
- **File:** ...
|
|
106
|
+
- **Description:** ...
|
|
107
|
+
- **Discovered during:** ...
|
|
108
|
+
</tech-debt>
|
|
109
|
+
</template>
|
|
110
|
+
|
|
111
|
+
<guidelines>
|
|
112
|
+
|
|
113
|
+
**Documentation Style:**
|
|
114
|
+
- EXTREMELY SUCCINCT — every word must add value
|
|
115
|
+
- NO FLUFF — direct, actionable information only
|
|
116
|
+
- Bullet points over paragraphs
|
|
117
|
+
- Code references as `file-path:ClassName.methodName` (not line numbers)
|
|
118
|
+
- Inline snippets ONLY for usage patterns and registration examples
|
|
119
|
+
- **ALL visual representations of architecture, dependencies, flows, or relationships MUST be ```mermaid fenced code blocks. NO ASCII arrows (->), NO dependency trees, NO PlantUML. Only mermaid. The ONLY ASCII exception is file trees.**
|
|
120
|
+
|
|
121
|
+
**Overview:**
|
|
122
|
+
- ONE paragraph. What the concern does and why it exists.
|
|
123
|
+
- Focus on what an agent needs to know to interact with this concern.
|
|
124
|
+
|
|
125
|
+
**How It Works:**
|
|
126
|
+
- Numbered steps explaining the mechanism.
|
|
127
|
+
- Reference actual code locations — not theoretical descriptions.
|
|
128
|
+
- If the mechanism has a flow (event dispatching, DI resolution), show a mermaid sequence diagram.
|
|
129
|
+
|
|
130
|
+
**Registration / Setup:**
|
|
131
|
+
- The MOST CRITICAL section for AI agents. They need to know WHERE to register new things.
|
|
132
|
+
- List every registration point with exact file paths.
|
|
133
|
+
- Show the registration pattern (inline code only if non-obvious).
|
|
134
|
+
|
|
135
|
+
**Usage:**
|
|
136
|
+
- How consuming code interacts with this concern.
|
|
137
|
+
- Inline code snippet ONLY if the usage pattern is non-obvious.
|
|
138
|
+
- If usage is straightforward (e.g., inject via constructor), a one-liner suffices.
|
|
139
|
+
|
|
140
|
+
**Current Registrations / Implementations:**
|
|
141
|
+
- Complete list of everything currently registered/using this concern.
|
|
142
|
+
- Agent uses this to verify its new registration is consistent with existing ones.
|
|
143
|
+
- Update when new registrations are added.
|
|
144
|
+
|
|
145
|
+
**Integration Points:**
|
|
146
|
+
- Cross-reference with markdown links to system docs that depend on this concern.
|
|
147
|
+
- Helps agents understand the blast radius of changes to this concern.
|
|
148
|
+
|
|
149
|
+
**Gotchas:**
|
|
150
|
+
- Registration order dependencies, naming conventions, initialization timing.
|
|
151
|
+
- Anything that silently fails if done wrong.
|
|
152
|
+
|
|
153
|
+
**Tech Debt:**
|
|
154
|
+
- One `###` subsection per known issue — NOT a table. Each issue needs enough context
|
|
155
|
+
for an agent to understand the problem without reading the code.
|
|
156
|
+
- For cross-cutting concerns, always note which dependent systems are affected.
|
|
157
|
+
- Severity: `high` (security, data loss, production instability), `medium` (quality,
|
|
158
|
+
maintainability), `low` (cosmetic, minor inefficiency).
|
|
159
|
+
- Always link to the discovering story for traceability.
|
|
160
|
+
- REMOVE items when fixed by a future story.
|
|
161
|
+
- Omit the entire section if no tech debt exists in this concern.
|
|
162
|
+
|
|
163
|
+
**What does NOT belong here:**
|
|
164
|
+
- Domain-specific logic (that's in systems/ docs)
|
|
165
|
+
- Reusable structural patterns (that's in patterns/ docs)
|
|
166
|
+
- Step-by-step task recipes (that's in guides/ docs)
|
|
167
|
+
- Story numbers, sprint context, revision history
|
|
168
|
+
- Testing instructions, performance benchmarks
|
|
169
|
+
|
|
170
|
+
</guidelines>
|
|
171
|
+
|
|
172
|
+
<evolution>
|
|
173
|
+
|
|
174
|
+
This is a LIVING document — updated when the cross-cutting concern changes.
|
|
175
|
+
|
|
176
|
+
**Update triggers:**
|
|
177
|
+
- New registration added (update Current Registrations list)
|
|
178
|
+
- Registration mechanism changed (new file, new pattern)
|
|
179
|
+
- New integration point discovered
|
|
180
|
+
- New gotcha discovered
|
|
181
|
+
- Setup/initialization process changed
|
|
182
|
+
- Tech debt discovered or resolved in this concern's files
|
|
183
|
+
|
|
184
|
+
**NOT an update trigger:**
|
|
185
|
+
- New feature that registers with existing mechanism without changing it
|
|
186
|
+
- Bug fix in one registered component
|
|
187
|
+
- Internal refactoring of the mechanism that doesn't change the external API
|
|
188
|
+
|
|
189
|
+
**Update rules:**
|
|
190
|
+
- ADD new registrations to the list
|
|
191
|
+
- UPDATE Registration / Setup if the process changed
|
|
192
|
+
- ADD new gotchas as they are discovered
|
|
193
|
+
- REMOVE registrations for deleted components
|
|
194
|
+
|
|
195
|
+
</evolution>
|
|
196
|
+
|
|
197
|
+
</system-cross-cutting>
|