agile-context-engineering 0.5.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.
Files changed (102) hide show
  1. package/.claude-plugin/marketplace.json +18 -0
  2. package/.claude-plugin/plugin.json +1 -1
  3. package/CHANGELOG.md +7 -1
  4. package/README.md +16 -12
  5. package/agents/ace-code-discovery-analyst.md +245 -245
  6. package/agents/ace-code-integration-analyst.md +248 -248
  7. package/agents/ace-code-reviewer.md +375 -375
  8. package/agents/ace-product-owner.md +365 -361
  9. package/agents/ace-project-researcher.md +606 -606
  10. package/agents/ace-technical-application-architect.md +315 -315
  11. package/bin/install.js +587 -173
  12. package/hooks/ace-check-update.js +15 -14
  13. package/hooks/ace-statusline.js +30 -12
  14. package/hooks/hooks.json +14 -0
  15. package/package.json +3 -2
  16. package/shared/lib/ace-core.js +53 -0
  17. package/shared/lib/ace-core.test.js +308 -308
  18. package/shared/lib/ace-story.test.js +250 -250
  19. package/skills/execute-story/SKILL.md +116 -110
  20. package/skills/execute-story/script.js +13 -27
  21. package/skills/execute-story/script.test.js +261 -261
  22. package/skills/execute-story/story-template.xml +451 -451
  23. package/skills/execute-story/workflow.xml +3 -1
  24. package/skills/help/SKILL.md +71 -69
  25. package/skills/help/script.js +32 -35
  26. package/skills/help/script.test.js +183 -183
  27. package/skills/help/workflow.xml +14 -3
  28. package/skills/init-coding-standards/SKILL.md +91 -72
  29. package/skills/init-coding-standards/coding-standards-template.xml +531 -531
  30. package/skills/init-coding-standards/script.js +50 -59
  31. package/skills/init-coding-standards/script.test.js +70 -70
  32. package/skills/init-coding-standards/workflow.xml +1 -1
  33. package/skills/map-cross-cutting/SKILL.md +126 -89
  34. package/skills/map-cross-cutting/workflow.xml +1 -1
  35. package/skills/map-guide/SKILL.md +126 -89
  36. package/skills/map-guide/workflow.xml +1 -1
  37. package/skills/map-pattern/SKILL.md +125 -89
  38. package/skills/map-pattern/workflow.xml +1 -1
  39. package/skills/map-story/SKILL.md +180 -127
  40. package/skills/map-story/templates/tech-debt-index.xml +125 -125
  41. package/skills/map-story/workflow.xml +2 -2
  42. package/skills/map-subsystem/SKILL.md +155 -111
  43. package/skills/map-subsystem/script.js +51 -60
  44. package/skills/map-subsystem/script.test.js +68 -68
  45. package/skills/map-subsystem/templates/subsystem-architecture.xml +343 -343
  46. package/skills/map-subsystem/templates/subsystem-structure.xml +234 -234
  47. package/skills/map-subsystem/workflow.xml +1173 -1173
  48. package/skills/map-sys-doc/SKILL.md +125 -90
  49. package/skills/map-sys-doc/workflow.xml +1 -1
  50. package/skills/map-system/SKILL.md +103 -85
  51. package/skills/map-system/script.js +75 -84
  52. package/skills/map-system/script.test.js +73 -73
  53. package/skills/map-system/templates/system-structure.xml +177 -177
  54. package/skills/map-system/templates/testing-framework.xml +283 -283
  55. package/skills/map-system/workflow.xml +667 -667
  56. package/skills/map-walkthrough/SKILL.md +140 -92
  57. package/skills/map-walkthrough/workflow.xml +457 -457
  58. package/skills/plan-backlog/SKILL.md +93 -75
  59. package/skills/plan-backlog/script.js +121 -136
  60. package/skills/plan-backlog/script.test.js +83 -83
  61. package/skills/plan-backlog/workflow.xml +1348 -1348
  62. package/skills/plan-feature/SKILL.md +99 -76
  63. package/skills/plan-feature/feature-template.xml +361 -361
  64. package/skills/plan-feature/script.js +131 -148
  65. package/skills/plan-feature/script.test.js +80 -80
  66. package/skills/plan-feature/workflow.xml +1 -1
  67. package/skills/plan-product-vision/SKILL.md +91 -75
  68. package/skills/plan-product-vision/product-vision-template.xml +227 -227
  69. package/skills/plan-product-vision/script.js +51 -60
  70. package/skills/plan-product-vision/script.test.js +69 -69
  71. package/skills/plan-product-vision/workflow.xml +337 -337
  72. package/skills/plan-story/SKILL.md +125 -102
  73. package/skills/plan-story/script.js +18 -49
  74. package/skills/plan-story/story-template.xml +8 -1
  75. package/skills/plan-story/workflow.xml +17 -1
  76. package/skills/research-external-solution/SKILL.md +120 -107
  77. package/skills/research-external-solution/external-solution-template.xml +832 -832
  78. package/skills/research-external-solution/script.js +229 -238
  79. package/skills/research-external-solution/script.test.js +134 -134
  80. package/skills/research-external-solution/workflow.xml +657 -657
  81. package/skills/research-integration-solution/SKILL.md +121 -98
  82. package/skills/research-integration-solution/integration-solution-template.xml +1015 -1015
  83. package/skills/research-integration-solution/script.js +223 -231
  84. package/skills/research-integration-solution/script.test.js +134 -134
  85. package/skills/research-integration-solution/workflow.xml +711 -711
  86. package/skills/research-story-wiki/SKILL.md +101 -92
  87. package/skills/research-story-wiki/script.js +223 -231
  88. package/skills/research-story-wiki/script.test.js +138 -138
  89. package/skills/research-story-wiki/story-wiki-template.xml +194 -194
  90. package/skills/research-story-wiki/workflow.xml +473 -473
  91. package/skills/research-technical-solution/SKILL.md +131 -103
  92. package/skills/research-technical-solution/script.js +223 -231
  93. package/skills/research-technical-solution/script.test.js +134 -134
  94. package/skills/research-technical-solution/technical-solution-template.xml +1025 -1025
  95. package/skills/research-technical-solution/workflow.xml +761 -761
  96. package/skills/review-story/SKILL.md +99 -100
  97. package/skills/review-story/script.js +8 -16
  98. package/skills/review-story/script.test.js +169 -169
  99. package/skills/review-story/story-template.xml +451 -451
  100. package/skills/review-story/workflow.xml +1 -1
  101. package/skills/update/SKILL.md +65 -53
  102. package/skills/update/workflow.xml +21 -5
@@ -1,73 +1,73 @@
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-system 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
- assert.ok(Array.isArray(result.existing_wiki_files), 'should have existing_wiki_files array');
60
- assert.strictEqual(typeof result.has_system_structure, 'boolean');
61
- assert.strictEqual(typeof result.has_system_architecture, 'boolean');
62
- assert.strictEqual(typeof result.has_testing_framework, 'boolean');
63
- assert.strictEqual(typeof result.has_coding_standards, 'boolean');
64
- });
65
-
66
- it('returns brownfield detection fields', () => {
67
- const result = JSON.parse(runScript('init', '', tmpDir));
68
- assert.strictEqual(typeof result.is_brownfield, 'boolean');
69
- assert.strictEqual(typeof result.is_greenfield, 'boolean');
70
- assert.strictEqual(result.is_brownfield, !result.is_greenfield);
71
- });
72
- });
73
- });
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-system 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
+ assert.ok(Array.isArray(result.existing_wiki_files), 'should have existing_wiki_files array');
60
+ assert.strictEqual(typeof result.has_system_structure, 'boolean');
61
+ assert.strictEqual(typeof result.has_system_architecture, 'boolean');
62
+ assert.strictEqual(typeof result.has_testing_framework, 'boolean');
63
+ assert.strictEqual(typeof result.has_coding_standards, 'boolean');
64
+ });
65
+
66
+ it('returns brownfield detection fields', () => {
67
+ const result = JSON.parse(runScript('init', '', tmpDir));
68
+ assert.strictEqual(typeof result.is_brownfield, 'boolean');
69
+ assert.strictEqual(typeof result.is_greenfield, 'boolean');
70
+ assert.strictEqual(result.is_brownfield, !result.is_greenfield);
71
+ });
72
+ });
73
+ });
@@ -1,178 +1,178 @@
1
- <system-structure>
2
- <purpose>
3
- Template for `.docs/wiki/system-wide/system-structure.md` — the physical file organization
4
- at the system level. Answers "what subsystems exist and where do they live?"
5
-
6
- Complements system-architecture.md (which shows conceptual design and flows).
7
- Complements per-subsystem structure docs (which go deep into each subsystem's internals).
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
- <directory-layout>
19
- ## Directory Layout
20
-
21
- [ASCII box-drawing tree of directories with purpose - use ├── └── │ characters for tree structure only]
22
-
23
- Show enough depth to identify subsystems and shared code, but stop at subsystem
24
- boundaries — internal detail belongs in per-subsystem docs.
25
-
26
- ```
27
- [project-root]/
28
- ├── [dir]/ # [Purpose]
29
- ├── [dir]/ # [Purpose]
30
- │ ├── [subdir]/ # [Purpose]
31
- │ └── [subdir]/ # [Purpose]
32
- ├── [dir]/ # [Purpose]
33
- └── [file] # [Purpose]
34
- ```
35
- </directory-layout>
36
-
37
- <subsystem-index>
38
- ## Subsystem Index
39
-
40
- Quick reference — which directory is which subsystem.
41
-
42
- | Directory | Subsystem | Purpose |
43
- |-----------|-----------|---------|
44
- | `[path]` | [Subsystem Name] | [One-line responsibility] |
45
- | `[path]` | [Subsystem Name] | [One-line responsibility] |
46
-
47
- Per-subsystem structure docs: `.docs/wiki/subsystems/[subsystem-name]/structure.md`
48
- </subsystem-index>
49
-
50
- <shared-directories>
51
- ## Shared Directories
52
-
53
- Code, libraries, or infrastructure that spans multiple subsystems.
54
-
55
- **[Directory Name]:**
56
- - Path: `[path]`
57
- - Purpose: [What it provides across subsystems]
58
- - Contains: [Types of files]
59
- - Used by: [Which subsystems depend on it]
60
-
61
- **[Directory Name]:**
62
- - Path: `[path]`
63
- - Purpose: [What it provides]
64
- - Contains: [Types of files]
65
- - Used by: [Which subsystems]
66
- </shared-directories>
67
-
68
- <root-configuration>
69
- ## Root Configuration
70
-
71
- Build configs, workspace setup, and infrastructure files at the project root.
72
-
73
- **Workspace / Monorepo:**
74
- - [Tool]: `[config file]` — [What it configures]
75
-
76
- **Build / Dev:**
77
- - `[path]`: [Purpose]
78
- - `[path]`: [Purpose]
79
-
80
- **CI/CD:**
81
- - `[path]`: [Purpose]
82
-
83
- **Environment:**
84
- - `[path]`: [Purpose — e.g., "env template, actual values not committed"]
85
- </root-configuration>
86
-
87
- <naming-conventions>
88
- ## System-Wide Naming Conventions
89
-
90
- Patterns that apply across all subsystems.
91
-
92
- **Directories:**
93
- - [Pattern]: [Example]
94
-
95
- **Files:**
96
- - [Pattern]: [Example]
97
-
98
- **Special Patterns:**
99
- - [Pattern]: [Example]
100
- </naming-conventions>
101
-
102
- <special-directories>
103
- ## Special Directories
104
-
105
- Directories with special meaning — generated, build output, tooling.
106
-
107
- **[Directory]:**
108
- - Path: `[path]`
109
- - Purpose: [e.g., "Build output", "Generated code", "Package cache"]
110
- - Source: [e.g., "Auto-generated by X", "Build artifacts"]
111
- - Committed: [Yes/No]
112
- </special-directories>
113
- </template>
114
-
115
- <guidelines>
116
-
117
- **Directory Layout:**
118
- - Go deep enough to show where subsystems and shared code live, but stop at subsystem
119
- boundaries. Internal subsystem structure belongs in per-subsystem docs
120
- - Every directory gets a `# Purpose` comment
121
- - Use ASCII box-drawing characters: `├── └── │`
122
- - Do NOT list individual files except at root level (package.json, README, etc.)
123
-
124
- **Subsystem Index:**
125
- - One row per subsystem. This is the first thing agents scan
126
- - Path should point to the subsystem root directory
127
- - Purpose must be one line — if you need more, it goes in the subsystem doc
128
- - Link to per-subsystem docs so agents know where to find detail
129
-
130
- **Identifying subsystems by project type:**
131
- - Microservices: each service directory = one subsystem
132
- - Monolith modules: each bounded context / feature module = one subsystem
133
- - Monorepo packages: each publishable package = one subsystem
134
- - Hybrid: mix of all three — anything with a clear responsibility boundary
135
-
136
- **Monolith examples:**
137
- - Django app with `users/`, `orders/`, `payments/` apps → 3 subsystems
138
- - .NET solution with `Auth.Module`, `Billing.Module`, `Notifications.Module` → 3 subsystems
139
- - Express app with `src/features/auth/`, `src/features/checkout/` → 2 subsystems
140
- - Small CLI tool with no clear modules → 1 subsystem (the whole app)
141
-
142
- **Shared Directories:**
143
- - Only list directories used by 2+ subsystems
144
- - Common examples: shared libraries, generated clients, design tokens, DB migrations
145
- - If a "shared" dir is only used by one subsystem, it belongs in that subsystem's doc
146
-
147
- **Root Configuration:**
148
- - Focus on files a developer needs to know about when setting up or building
149
- - DO NOT list every dotfile. Focus on the ones that matter
150
- - NEVER include contents of .env files — note existence only
151
-
152
- **What does NOT belong here:**
153
- - Conceptual architecture (that's system-architecture.md)
154
- - Internal subsystem structure (that's subsystem-structure docs)
155
- - Technology stack details (that's system-architecture.md tech-stack section)
156
- - Code conventions (that's a separate conventions doc)
157
-
158
- </guidelines>
159
-
160
- <evolution>
161
-
162
- Update when the physical organization of the system changes.
163
-
164
- **Update triggers:**
165
- - New subsystem added (new service, new module, new package)
166
- - Subsystem removed, split, or merged
167
- - Shared directory added or removed
168
- - Workspace/monorepo configuration changed
169
- - Root-level config files added or removed
170
-
171
- **NOT an update trigger:**
172
- - New files within an existing subsystem (per-subsystem docs)
173
- - New features within existing structure
174
- - Internal refactoring that doesn't change directory layout
175
-
176
- </evolution>
177
-
1
+ <system-structure>
2
+ <purpose>
3
+ Template for `.docs/wiki/system-wide/system-structure.md` — the physical file organization
4
+ at the system level. Answers "what subsystems exist and where do they live?"
5
+
6
+ Complements system-architecture.md (which shows conceptual design and flows).
7
+ Complements per-subsystem structure docs (which go deep into each subsystem's internals).
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
+ <directory-layout>
19
+ ## Directory Layout
20
+
21
+ [ASCII box-drawing tree of directories with purpose - use ├── └── │ characters for tree structure only]
22
+
23
+ Show enough depth to identify subsystems and shared code, but stop at subsystem
24
+ boundaries — internal detail belongs in per-subsystem docs.
25
+
26
+ ```
27
+ [project-root]/
28
+ ├── [dir]/ # [Purpose]
29
+ ├── [dir]/ # [Purpose]
30
+ │ ├── [subdir]/ # [Purpose]
31
+ │ └── [subdir]/ # [Purpose]
32
+ ├── [dir]/ # [Purpose]
33
+ └── [file] # [Purpose]
34
+ ```
35
+ </directory-layout>
36
+
37
+ <subsystem-index>
38
+ ## Subsystem Index
39
+
40
+ Quick reference — which directory is which subsystem.
41
+
42
+ | Directory | Subsystem | Purpose |
43
+ |-----------|-----------|---------|
44
+ | `[path]` | [Subsystem Name] | [One-line responsibility] |
45
+ | `[path]` | [Subsystem Name] | [One-line responsibility] |
46
+
47
+ Per-subsystem structure docs: `.docs/wiki/subsystems/[subsystem-name]/structure.md`
48
+ </subsystem-index>
49
+
50
+ <shared-directories>
51
+ ## Shared Directories
52
+
53
+ Code, libraries, or infrastructure that spans multiple subsystems.
54
+
55
+ **[Directory Name]:**
56
+ - Path: `[path]`
57
+ - Purpose: [What it provides across subsystems]
58
+ - Contains: [Types of files]
59
+ - Used by: [Which subsystems depend on it]
60
+
61
+ **[Directory Name]:**
62
+ - Path: `[path]`
63
+ - Purpose: [What it provides]
64
+ - Contains: [Types of files]
65
+ - Used by: [Which subsystems]
66
+ </shared-directories>
67
+
68
+ <root-configuration>
69
+ ## Root Configuration
70
+
71
+ Build configs, workspace setup, and infrastructure files at the project root.
72
+
73
+ **Workspace / Monorepo:**
74
+ - [Tool]: `[config file]` — [What it configures]
75
+
76
+ **Build / Dev:**
77
+ - `[path]`: [Purpose]
78
+ - `[path]`: [Purpose]
79
+
80
+ **CI/CD:**
81
+ - `[path]`: [Purpose]
82
+
83
+ **Environment:**
84
+ - `[path]`: [Purpose — e.g., "env template, actual values not committed"]
85
+ </root-configuration>
86
+
87
+ <naming-conventions>
88
+ ## System-Wide Naming Conventions
89
+
90
+ Patterns that apply across all subsystems.
91
+
92
+ **Directories:**
93
+ - [Pattern]: [Example]
94
+
95
+ **Files:**
96
+ - [Pattern]: [Example]
97
+
98
+ **Special Patterns:**
99
+ - [Pattern]: [Example]
100
+ </naming-conventions>
101
+
102
+ <special-directories>
103
+ ## Special Directories
104
+
105
+ Directories with special meaning — generated, build output, tooling.
106
+
107
+ **[Directory]:**
108
+ - Path: `[path]`
109
+ - Purpose: [e.g., "Build output", "Generated code", "Package cache"]
110
+ - Source: [e.g., "Auto-generated by X", "Build artifacts"]
111
+ - Committed: [Yes/No]
112
+ </special-directories>
113
+ </template>
114
+
115
+ <guidelines>
116
+
117
+ **Directory Layout:**
118
+ - Go deep enough to show where subsystems and shared code live, but stop at subsystem
119
+ boundaries. Internal subsystem structure belongs in per-subsystem docs
120
+ - Every directory gets a `# Purpose` comment
121
+ - Use ASCII box-drawing characters: `├── └── │`
122
+ - Do NOT list individual files except at root level (package.json, README, etc.)
123
+
124
+ **Subsystem Index:**
125
+ - One row per subsystem. This is the first thing agents scan
126
+ - Path should point to the subsystem root directory
127
+ - Purpose must be one line — if you need more, it goes in the subsystem doc
128
+ - Link to per-subsystem docs so agents know where to find detail
129
+
130
+ **Identifying subsystems by project type:**
131
+ - Microservices: each service directory = one subsystem
132
+ - Monolith modules: each bounded context / feature module = one subsystem
133
+ - Monorepo packages: each publishable package = one subsystem
134
+ - Hybrid: mix of all three — anything with a clear responsibility boundary
135
+
136
+ **Monolith examples:**
137
+ - Django app with `users/`, `orders/`, `payments/` apps → 3 subsystems
138
+ - .NET solution with `Auth.Module`, `Billing.Module`, `Notifications.Module` → 3 subsystems
139
+ - Express app with `src/features/auth/`, `src/features/checkout/` → 2 subsystems
140
+ - Small CLI tool with no clear modules → 1 subsystem (the whole app)
141
+
142
+ **Shared Directories:**
143
+ - Only list directories used by 2+ subsystems
144
+ - Common examples: shared libraries, generated clients, design tokens, DB migrations
145
+ - If a "shared" dir is only used by one subsystem, it belongs in that subsystem's doc
146
+
147
+ **Root Configuration:**
148
+ - Focus on files a developer needs to know about when setting up or building
149
+ - DO NOT list every dotfile. Focus on the ones that matter
150
+ - NEVER include contents of .env files — note existence only
151
+
152
+ **What does NOT belong here:**
153
+ - Conceptual architecture (that's system-architecture.md)
154
+ - Internal subsystem structure (that's subsystem-structure docs)
155
+ - Technology stack details (that's system-architecture.md tech-stack section)
156
+ - Code conventions (that's a separate conventions doc)
157
+
158
+ </guidelines>
159
+
160
+ <evolution>
161
+
162
+ Update when the physical organization of the system changes.
163
+
164
+ **Update triggers:**
165
+ - New subsystem added (new service, new module, new package)
166
+ - Subsystem removed, split, or merged
167
+ - Shared directory added or removed
168
+ - Workspace/monorepo configuration changed
169
+ - Root-level config files added or removed
170
+
171
+ **NOT an update trigger:**
172
+ - New files within an existing subsystem (per-subsystem docs)
173
+ - New features within existing structure
174
+ - Internal refactoring that doesn't change directory layout
175
+
176
+ </evolution>
177
+
178
178
  </system-structure>