container-superposition 0.1.1 → 0.1.4

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 (178) hide show
  1. package/README.md +569 -8
  2. package/dist/scripts/init.js +436 -254
  3. package/dist/scripts/init.js.map +1 -1
  4. package/dist/tool/commands/doctor.d.ts +15 -0
  5. package/dist/tool/commands/doctor.d.ts.map +1 -0
  6. package/dist/tool/commands/doctor.js +862 -0
  7. package/dist/tool/commands/doctor.js.map +1 -0
  8. package/dist/tool/commands/explain.d.ts +13 -0
  9. package/dist/tool/commands/explain.d.ts.map +1 -0
  10. package/dist/tool/commands/explain.js +299 -0
  11. package/dist/tool/commands/explain.js.map +1 -0
  12. package/dist/tool/commands/list.d.ts +16 -0
  13. package/dist/tool/commands/list.d.ts.map +1 -0
  14. package/dist/tool/commands/list.js +121 -0
  15. package/dist/tool/commands/list.js.map +1 -0
  16. package/dist/tool/commands/plan.d.ts +67 -0
  17. package/dist/tool/commands/plan.d.ts.map +1 -0
  18. package/dist/tool/commands/plan.js +851 -0
  19. package/dist/tool/commands/plan.js.map +1 -0
  20. package/dist/tool/questionnaire/composer.d.ts +16 -2
  21. package/dist/tool/questionnaire/composer.d.ts.map +1 -1
  22. package/dist/tool/questionnaire/composer.js +411 -200
  23. package/dist/tool/questionnaire/composer.js.map +1 -1
  24. package/dist/tool/readme/markdown-parser.d.ts.map +1 -1
  25. package/dist/tool/readme/markdown-parser.js.map +1 -1
  26. package/dist/tool/readme/readme-generator.d.ts.map +1 -1
  27. package/dist/tool/readme/readme-generator.js +11 -6
  28. package/dist/tool/readme/readme-generator.js.map +1 -1
  29. package/dist/tool/schema/deployment-targets.d.ts +77 -0
  30. package/dist/tool/schema/deployment-targets.d.ts.map +1 -0
  31. package/dist/tool/schema/deployment-targets.js +91 -0
  32. package/dist/tool/schema/deployment-targets.js.map +1 -0
  33. package/dist/tool/schema/manifest-migrations.d.ts +51 -0
  34. package/dist/tool/schema/manifest-migrations.d.ts.map +1 -0
  35. package/dist/tool/schema/manifest-migrations.js +159 -0
  36. package/dist/tool/schema/manifest-migrations.js.map +1 -0
  37. package/dist/tool/schema/overlay-loader.d.ts +1 -1
  38. package/dist/tool/schema/overlay-loader.d.ts.map +1 -1
  39. package/dist/tool/schema/overlay-loader.js +42 -14
  40. package/dist/tool/schema/overlay-loader.js.map +1 -1
  41. package/dist/tool/schema/types.d.ts +62 -2
  42. package/dist/tool/schema/types.d.ts.map +1 -1
  43. package/dist/tool/utils/gitignore.d.ts +15 -0
  44. package/dist/tool/utils/gitignore.d.ts.map +1 -0
  45. package/dist/tool/utils/gitignore.js +41 -0
  46. package/dist/tool/utils/gitignore.js.map +1 -0
  47. package/dist/tool/utils/merge.d.ts +134 -0
  48. package/dist/tool/utils/merge.d.ts.map +1 -0
  49. package/dist/tool/utils/merge.js +277 -0
  50. package/dist/tool/utils/merge.js.map +1 -0
  51. package/dist/tool/utils/port-utils.d.ts +29 -0
  52. package/dist/tool/utils/port-utils.d.ts.map +1 -0
  53. package/dist/tool/utils/port-utils.js +128 -0
  54. package/dist/tool/utils/port-utils.js.map +1 -0
  55. package/dist/tool/utils/services-export.d.ts +14 -0
  56. package/dist/tool/utils/services-export.d.ts.map +1 -0
  57. package/dist/tool/utils/services-export.js +478 -0
  58. package/dist/tool/utils/services-export.js.map +1 -0
  59. package/dist/tool/utils/summary.d.ts +69 -0
  60. package/dist/tool/utils/summary.d.ts.map +1 -0
  61. package/dist/tool/utils/summary.js +260 -0
  62. package/dist/tool/utils/summary.js.map +1 -0
  63. package/dist/tool/utils/version.d.ts +9 -0
  64. package/dist/tool/utils/version.d.ts.map +1 -0
  65. package/dist/tool/utils/version.js +32 -0
  66. package/dist/tool/utils/version.js.map +1 -0
  67. package/docs/architecture.md +25 -21
  68. package/docs/deployment-targets.md +150 -0
  69. package/docs/discovery-commands.md +442 -0
  70. package/docs/merge-strategy.md +700 -0
  71. package/docs/minimal-and-editor.md +265 -0
  72. package/docs/overlay-imports.md +209 -0
  73. package/docs/overlay-manifest-refactoring.md +2 -2
  74. package/docs/overlay-metadata-archive.md +1 -1
  75. package/docs/overlays.md +139 -28
  76. package/docs/presets-architecture.md +3 -3
  77. package/docs/presets.md +1 -1
  78. package/docs/publishing.md +36 -35
  79. package/docs/team-workflow.md +540 -0
  80. package/overlays/.presets/data-engineering.yml +392 -0
  81. package/overlays/.presets/event-sourced-service.yml +262 -0
  82. package/overlays/.presets/frontend.yml +287 -0
  83. package/overlays/.presets/k8s-operator-dev.yml +462 -0
  84. package/overlays/{presets → .presets}/microservice.yml +32 -6
  85. package/overlays/.presets/web-api.yml +129 -0
  86. package/overlays/.registry/README.md +1 -1
  87. package/overlays/.registry/deployment-targets.yml +54 -0
  88. package/overlays/.shared/README.md +43 -0
  89. package/overlays/.shared/compose/common-healthchecks.yml +38 -0
  90. package/overlays/.shared/otel/instrumentation.env +20 -0
  91. package/overlays/.shared/otel/otel-base-config.yaml +30 -0
  92. package/overlays/.shared/vscode/recommended-extensions.json +14 -0
  93. package/overlays/README.md +1 -1
  94. package/overlays/cloudflared/README.md +190 -0
  95. package/overlays/cloudflared/devcontainer.patch.json +3 -0
  96. package/overlays/cloudflared/overlay.yml +15 -0
  97. package/overlays/cloudflared/setup.sh +49 -0
  98. package/overlays/cloudflared/verify.sh +21 -0
  99. package/overlays/codex/overlay.yml +1 -0
  100. package/overlays/direnv/README.md +6 -4
  101. package/overlays/direnv/setup.sh +0 -12
  102. package/overlays/duckdb/README.md +274 -0
  103. package/overlays/duckdb/devcontainer.patch.json +10 -0
  104. package/overlays/duckdb/overlay.yml +17 -0
  105. package/overlays/duckdb/setup.sh +45 -0
  106. package/overlays/duckdb/verify.sh +32 -0
  107. package/overlays/git-helpers/overlay.yml +1 -0
  108. package/overlays/grafana/README.md +5 -5
  109. package/overlays/grafana/dashboard-provider.yml +1 -1
  110. package/overlays/grafana/docker-compose.yml +2 -2
  111. package/overlays/grafana/overlay.yml +6 -1
  112. package/overlays/grpc-tools/README.md +242 -0
  113. package/overlays/grpc-tools/devcontainer.patch.json +14 -0
  114. package/overlays/grpc-tools/overlay.yml +14 -0
  115. package/overlays/grpc-tools/setup.sh +57 -0
  116. package/overlays/grpc-tools/verify.sh +47 -0
  117. package/overlays/jaeger/overlay.yml +16 -3
  118. package/overlays/jupyter/.env.example +6 -0
  119. package/overlays/jupyter/README.md +210 -0
  120. package/overlays/jupyter/devcontainer.patch.json +14 -0
  121. package/overlays/jupyter/docker-compose.yml +23 -0
  122. package/overlays/jupyter/overlay.yml +18 -0
  123. package/overlays/jupyter/verify.sh +35 -0
  124. package/overlays/keycloak/.env.example +5 -0
  125. package/overlays/keycloak/README.md +238 -0
  126. package/overlays/keycloak/devcontainer.patch.json +17 -0
  127. package/overlays/keycloak/docker-compose.yml +32 -0
  128. package/overlays/keycloak/overlay.yml +23 -0
  129. package/overlays/keycloak/verify.sh +54 -0
  130. package/overlays/kind/README.md +221 -0
  131. package/overlays/kind/devcontainer.patch.json +10 -0
  132. package/overlays/kind/overlay.yml +18 -0
  133. package/overlays/kind/setup.sh +43 -0
  134. package/overlays/kind/verify.sh +40 -0
  135. package/overlays/localstack/.env.example +6 -0
  136. package/overlays/localstack/README.md +188 -0
  137. package/overlays/localstack/devcontainer.patch.json +21 -0
  138. package/overlays/localstack/docker-compose.yml +25 -0
  139. package/overlays/localstack/overlay.yml +18 -0
  140. package/overlays/localstack/verify.sh +47 -0
  141. package/overlays/loki/overlay.yml +6 -1
  142. package/overlays/mailpit/.env.example +4 -0
  143. package/overlays/mailpit/README.md +191 -0
  144. package/overlays/mailpit/devcontainer.patch.json +20 -0
  145. package/overlays/mailpit/docker-compose.yml +17 -0
  146. package/overlays/mailpit/overlay.yml +26 -0
  147. package/overlays/mailpit/verify.sh +52 -0
  148. package/overlays/modern-cli-tools/overlay.yml +1 -0
  149. package/overlays/mongodb/overlay.yml +12 -2
  150. package/overlays/mysql/overlay.yml +12 -2
  151. package/overlays/nats/overlay.yml +12 -2
  152. package/overlays/ngrok/overlay.yml +2 -1
  153. package/overlays/openapi-tools/README.md +243 -0
  154. package/overlays/openapi-tools/devcontainer.patch.json +10 -0
  155. package/overlays/openapi-tools/overlay.yml +16 -0
  156. package/overlays/openapi-tools/setup.sh +45 -0
  157. package/overlays/openapi-tools/verify.sh +51 -0
  158. package/overlays/otel-collector/overlay.yml.example +26 -0
  159. package/overlays/postgres/overlay.yml +6 -1
  160. package/overlays/prometheus/overlay.yml +6 -1
  161. package/overlays/python/README.md +51 -35
  162. package/overlays/python/devcontainer.patch.json +7 -4
  163. package/overlays/python/setup.sh +50 -23
  164. package/overlays/python/verify.sh +29 -1
  165. package/overlays/rabbitmq/overlay.yml +12 -2
  166. package/overlays/redis/overlay.yml +6 -1
  167. package/overlays/tilt/README.md +259 -0
  168. package/overlays/tilt/devcontainer.patch.json +17 -0
  169. package/overlays/tilt/overlay.yml +19 -0
  170. package/overlays/tilt/setup.sh +25 -0
  171. package/overlays/tilt/verify.sh +24 -0
  172. package/package.json +8 -6
  173. package/tool/README.md +12 -16
  174. package/tool/schema/overlay-manifest.schema.json +64 -4
  175. package/tool/schema/superposition-manifest.schema.json +104 -0
  176. package/overlays/presets/web-api.yml +0 -109
  177. /package/overlays/{presets → .presets}/docs-site.yml +0 -0
  178. /package/overlays/{presets → .presets}/fullstack.yml +0 -0
@@ -0,0 +1,265 @@
1
+ # Minimal Mode and Editor Profiles
2
+
3
+ Container Superposition provides options to customize the generated development environment based on your needs and preferences.
4
+
5
+ ## Minimal Mode
6
+
7
+ Use `--minimal` to generate lean configurations by excluding optional overlays.
8
+
9
+ ### Usage
10
+
11
+ ```bash
12
+ # Generate minimal configuration
13
+ container-superposition init --minimal
14
+
15
+ # With other options
16
+ container-superposition init --stack plain --language nodejs --minimal
17
+
18
+ # Compare: Normal vs Minimal
19
+ container-superposition init --language nodejs --dev-tools modern-cli-tools,git-helpers,codex
20
+ # ✓ Includes: nodejs, modern-cli-tools, git-helpers, codex
21
+
22
+ container-superposition init --language nodejs --dev-tools modern-cli-tools,git-helpers,codex --minimal
23
+ # ✓ Includes: nodejs (essential)
24
+ # ✗ Excludes: modern-cli-tools, git-helpers, codex (marked as optional)
25
+ ```
26
+
27
+ ### What Gets Excluded
28
+
29
+ Overlays marked with `minimal: true` in their `overlay.yml` are excluded in minimal mode:
30
+
31
+ - **modern-cli-tools** — Enhanced CLI tools (jq, yq, ripgrep, fd, bat)
32
+ - **git-helpers** — Git LFS, GitHub CLI, GPG/SSH support
33
+ - **codex** — AI-powered coding assistant
34
+
35
+ Essential overlays (languages, databases, required tools) are always included.
36
+
37
+ ### When to Use Minimal Mode
38
+
39
+ **CI/CD Environments:**
40
+
41
+ ```bash
42
+ container-superposition init --minimal --stack compose --language nodejs --database postgres
43
+ ```
44
+
45
+ **Resource-Constrained Codespaces:**
46
+
47
+ ```bash
48
+ container-superposition init --minimal --target codespaces --language python
49
+ ```
50
+
51
+ **Learning/Tutorials:**
52
+
53
+ ```bash
54
+ container-superposition init --minimal --stack plain --language nodejs
55
+ ```
56
+
57
+ **Production-like Environments:**
58
+
59
+ ```bash
60
+ container-superposition init --minimal --stack compose --language dotnet --database sqlserver
61
+ ```
62
+
63
+ ### Marking Overlays as Optional
64
+
65
+ When creating overlays, add `minimal: true` to mark them as optional:
66
+
67
+ ```yaml
68
+ # overlays/modern-cli-tools/overlay.yml
69
+ id: modern-cli-tools
70
+ name: Modern CLI Tools
71
+ description: Enhanced command-line tools
72
+ category: dev
73
+ minimal: true # Excluded in minimal mode
74
+ ```
75
+
76
+ ## Editor Profiles
77
+
78
+ Use `--editor` to choose which editor customizations to include.
79
+
80
+ ### Usage
81
+
82
+ ```bash
83
+ # VS Code (default) - Include VS Code extensions and settings
84
+ container-superposition init --editor vscode
85
+
86
+ # None - CLI-only, no editor customizations
87
+ container-superposition init --editor none
88
+
89
+ # JetBrains - Skip VS Code customizations (reserved for future JetBrains support)
90
+ container-superposition init --editor jetbrains
91
+ ```
92
+
93
+ ### Available Profiles
94
+
95
+ #### vscode (Default)
96
+
97
+ Includes VS Code extensions and settings from overlays.
98
+
99
+ ```json
100
+ {
101
+ "customizations": {
102
+ "vscode": {
103
+ "extensions": ["dbaeumer.vscode-eslint", "esbenp.prettier-vscode"],
104
+ "settings": {
105
+ "editor.defaultFormatter": "esbenp.prettier-vscode"
106
+ }
107
+ }
108
+ }
109
+ }
110
+ ```
111
+
112
+ #### none
113
+
114
+ Removes all editor customizations. Useful for:
115
+
116
+ - CI/CD containers
117
+ - Server environments
118
+ - Terminal-only workflows
119
+ - Using different editors (vim, emacs, etc.)
120
+
121
+ ```json
122
+ {
123
+ // No customizations field
124
+ }
125
+ ```
126
+
127
+ #### jetbrains
128
+
129
+ Removes VS Code customizations. Reserved for future JetBrains-specific settings (Gateway, Fleet, etc.).
130
+
131
+ ```json
132
+ {
133
+ // No vscode customizations
134
+ // Future: JetBrains-specific settings could be added here
135
+ }
136
+ ```
137
+
138
+ ### When to Use Editor Profiles
139
+
140
+ **Terminal Workflows:**
141
+
142
+ ```bash
143
+ container-superposition init --editor none --language python
144
+ ```
145
+
146
+ **JetBrains IDEs:**
147
+
148
+ ```bash
149
+ container-superposition init --editor jetbrains --language java
150
+ ```
151
+
152
+ **CI/CD (no editor needed):**
153
+
154
+ ```bash
155
+ container-superposition init --editor none --minimal --language nodejs
156
+ ```
157
+
158
+ ## Combining Flags
159
+
160
+ Both flags can be used together with init or regen commands:
161
+
162
+ ```bash
163
+ # Minimal, CLI-only configuration
164
+ container-superposition init --minimal --editor none --language nodejs
165
+
166
+ # Regenerate existing setup in minimal mode without editor customizations
167
+ container-superposition regen --minimal --editor none
168
+
169
+ # Resource-efficient Codespaces setup
170
+ container-superposition init --minimal --editor vscode --target codespaces --language python
171
+
172
+ # Lean JetBrains environment
173
+ container-superposition init --minimal --editor jetbrains --language java
174
+ ```
175
+
176
+ ## Regeneration Workflow
177
+
178
+ The `regen` command is particularly useful when you want to modify an existing setup:
179
+
180
+ ```bash
181
+ # Step 1: Create initial setup with all extras
182
+ container-superposition init --language nodejs --dev-tools modern-cli-tools,git-helpers,codex
183
+
184
+ # Step 2: Later, regenerate without the extras
185
+ container-superposition regen --minimal
186
+ # Reads existing manifest, excludes optional overlays
187
+
188
+ # Step 3: Or regenerate for a different editor
189
+ container-superposition regen --editor jetbrains
190
+ # Removes VS Code customizations
191
+
192
+ # Step 4: Or both together
193
+ container-superposition regen --minimal --editor none
194
+ # Lean, CLI-only regeneration
195
+ ```
196
+
197
+ ## Examples
198
+
199
+ ### Minimal Node.js for CI
200
+
201
+ ```bash
202
+ container-superposition init \
203
+ --minimal \
204
+ --editor none \
205
+ --stack plain \
206
+ --language nodejs \
207
+ --output .devcontainer
208
+ ```
209
+
210
+ **Result:** Bare-bones Node.js environment, no extras, no editor extensions.
211
+
212
+ ### Full-Featured Local Development
213
+
214
+ ```bash
215
+ container-superposition init \
216
+ --editor vscode \
217
+ --stack compose \
218
+ --language nodejs \
219
+ --database postgres \
220
+ --dev-tools docker-sock,git-helpers,modern-cli-tools,pre-commit \
221
+ --observability prometheus,grafana
222
+ ```
223
+
224
+ **Result:** Complete development environment with all tools and VS Code extensions.
225
+
226
+ ### Codespaces-Optimized Setup
227
+
228
+ ```bash
229
+ container-superposition init \
230
+ --minimal \
231
+ --editor vscode \
232
+ --target codespaces \
233
+ --stack compose \
234
+ --language python \
235
+ --database postgres
236
+ ```
237
+
238
+ **Result:** Lean Codespaces environment with essential tools and VS Code extensions.
239
+
240
+ ## Manifest Support
241
+
242
+ Both settings are stored in `superposition.json`:
243
+
244
+ ```json
245
+ {
246
+ "version": "0.1.0",
247
+ "generated": "2026-02-13T09:00:00.000Z",
248
+ "minimal": true,
249
+ "editor": "none",
250
+ "overlays": ["nodejs"]
251
+ }
252
+ ```
253
+
254
+ Use `container-superposition regen` to regenerate from manifest:
255
+
256
+ ```bash
257
+ # Regenerate with same settings
258
+ container-superposition regen
259
+ ```
260
+
261
+ ## See Also
262
+
263
+ - [CLI Reference](../README.md#cli-usage)
264
+ - [Overlay Authoring](creating-overlays.md)
265
+ - [Deployment Targets](deployment-targets.md)
@@ -0,0 +1,209 @@
1
+ # Overlay Imports
2
+
3
+ Overlays can import shared configuration fragments from `overlays/.shared/` to reduce duplication and ensure consistency across overlays.
4
+
5
+ ## Overview
6
+
7
+ Import functionality allows overlays to reference common configuration files instead of duplicating them in every overlay. This promotes DRY (Don't Repeat Yourself) principles and makes it easier to maintain consistent patterns.
8
+
9
+ ## Shared Directory Structure
10
+
11
+ ```
12
+ overlays/
13
+ ├── .shared/
14
+ │ ├── otel/ # OpenTelemetry configurations
15
+ │ │ ├── otel-base-config.yaml # Base OTEL collector config
16
+ │ │ └── instrumentation.env # Common env vars for instrumentation
17
+ │ ├── compose/ # Docker Compose patterns
18
+ │ │ └── common-healthchecks.yml # Standard healthcheck configurations
19
+ │ └── vscode/ # VS Code extension sets
20
+ │ └── recommended-extensions.json # Commonly recommended extensions
21
+ ├── prometheus/
22
+ │ ├── overlay.yml # Can import from .shared/
23
+ │ └── devcontainer.patch.json
24
+ └── jaeger/
25
+ ├── overlay.yml # Can import from .shared/
26
+ └── devcontainer.patch.json
27
+ ```
28
+
29
+ ## Using Imports
30
+
31
+ Add the `imports` field to your `overlay.yml` manifest:
32
+
33
+ ```yaml
34
+ id: prometheus
35
+ name: Prometheus
36
+ description: Metrics collection and monitoring
37
+ category: observability
38
+ supports:
39
+ - compose
40
+ requires: []
41
+ suggests:
42
+ - alertmanager
43
+ conflicts: []
44
+ tags:
45
+ - observability
46
+ - metrics
47
+ ports:
48
+ - 9090
49
+ imports:
50
+ - .shared/otel/instrumentation.env
51
+ - .shared/compose/common-healthchecks.yml
52
+ ```
53
+
54
+ ## Supported File Types
55
+
56
+ ### JSON Files (`.json`)
57
+
58
+ Merged as devcontainer patches, just like `devcontainer.patch.json`.
59
+
60
+ **Example: `.shared/vscode/recommended-extensions.json`**
61
+
62
+ ```json
63
+ {
64
+ "customizations": {
65
+ "vscode": {
66
+ "extensions": [
67
+ "streetsidesoftware.code-spell-checker",
68
+ "usernamehw.errorlens",
69
+ "editorconfig.editorconfig"
70
+ ]
71
+ }
72
+ }
73
+ }
74
+ ```
75
+
76
+ ### YAML Files (`.yaml`, `.yml`)
77
+
78
+ Loaded and merged as devcontainer patches. Useful for complex configurations.
79
+
80
+ **Example: `.shared/otel/otel-base-config.yaml`**
81
+
82
+ ```yaml
83
+ receivers:
84
+ otlp:
85
+ protocols:
86
+ grpc:
87
+ endpoint: 0.0.0.0:4317
88
+ http:
89
+ endpoint: 0.0.0.0:4318
90
+ ```
91
+
92
+ ### Environment Files (`.env`)
93
+
94
+ Merged into `.env.example` with a comment indicating the import source.
95
+
96
+ **Example: `.shared/otel/instrumentation.env`**
97
+
98
+ ```bash
99
+ # OpenTelemetry Configuration
100
+ OTEL_SERVICE_NAME=my-service
101
+ OTEL_EXPORTER_OTLP_ENDPOINT=http://otel-collector:4317
102
+ OTEL_TRACES_SAMPLER=always_on
103
+ ```
104
+
105
+ ## How Imports Work
106
+
107
+ 1. **Resolution**: Imports are resolved relative to the `overlays/` directory
108
+ 2. **Order**: Imports are applied in the order listed, then the overlay's own files
109
+ 3. **Merging**:
110
+ - JSON/YAML: Deep merged into devcontainer configuration
111
+ - ENV: Concatenated into `.env.example` with source comments
112
+ 4. **Validation**: Doctor command validates that all imports exist and are valid
113
+
114
+ ## Benefits
115
+
116
+ ### Reduced Duplication
117
+
118
+ Before imports:
119
+
120
+ ```
121
+ prometheus/devcontainer.patch.json (200 lines with OTEL config)
122
+ jaeger/devcontainer.patch.json (200 lines with OTEL config)
123
+ grafana/devcontainer.patch.json (200 lines with OTEL config)
124
+ ```
125
+
126
+ After imports:
127
+
128
+ ```
129
+ .shared/otel/otel-base-config.yaml (50 lines, shared)
130
+ prometheus/overlay.yml (imports: [.shared/otel/otel-base-config.yaml])
131
+ jaeger/overlay.yml (imports: [.shared/otel/otel-base-config.yaml])
132
+ grafana/overlay.yml (imports: [.shared/otel/otel-base-config.yaml])
133
+ ```
134
+
135
+ ### Consistency
136
+
137
+ All overlays using the same shared config stay in sync automatically.
138
+
139
+ ### Maintainability
140
+
141
+ Update shared configuration once, all importing overlays benefit.
142
+
143
+ ## Validation
144
+
145
+ The `doctor` command validates imports:
146
+
147
+ ```bash
148
+ container-superposition doctor
149
+ ```
150
+
151
+ Checks performed:
152
+
153
+ - Import files exist
154
+ - File types are supported (`.json`, `.yaml`, `.yml`, `.env`)
155
+ - No broken import references
156
+
157
+ ## Creating Shared Configurations
158
+
159
+ 1. **Identify common patterns** across overlays
160
+ 2. **Extract to `.shared/` subdirectory** with descriptive path
161
+ 3. **Update overlays** to import the shared file
162
+ 4. **Test** that composition works correctly
163
+ 5. **Document** the shared file's purpose in `.shared/README.md`
164
+
165
+ ## Example: OTEL Instrumentation
166
+
167
+ Many observability overlays need OTEL instrumentation. Instead of duplicating these environment variables:
168
+
169
+ **Create:** `overlays/.shared/otel/instrumentation.env`
170
+
171
+ ```bash
172
+ # OpenTelemetry SDK Configuration
173
+ OTEL_SERVICE_NAME=my-service
174
+ OTEL_EXPORTER_OTLP_ENDPOINT=http://otel-collector:4317
175
+ OTEL_EXPORTER_OTLP_PROTOCOL=grpc
176
+ OTEL_RESOURCE_ATTRIBUTES=deployment.environment=development
177
+ OTEL_TRACES_SAMPLER=always_on
178
+ OTEL_TRACES_EXPORTER=otlp
179
+ OTEL_METRICS_EXPORTER=otlp
180
+ OTEL_LOGS_EXPORTER=otlp
181
+ ```
182
+
183
+ **Import in overlays:**
184
+
185
+ ```yaml
186
+ # overlays/prometheus/overlay.yml
187
+ imports:
188
+ - .shared/otel/instrumentation.env
189
+
190
+ # overlays/jaeger/overlay.yml
191
+ imports:
192
+ - .shared/otel/instrumentation.env
193
+ ```
194
+
195
+ Now all OTEL-compatible overlays share the same instrumentation configuration!
196
+
197
+ ## Best Practices
198
+
199
+ 1. **Keep shared files focused** - One concern per file
200
+ 2. **Use descriptive paths** - `.shared/otel/instrumentation.env` not `.shared/env1.env`
201
+ 3. **Document shared files** - Add comments explaining purpose and usage
202
+ 4. **Version carefully** - Changes to shared files affect all importing overlays
203
+ 5. **Test imports** - Verify overlay composition works after adding imports
204
+
205
+ ## See Also
206
+
207
+ - [Creating Overlays](creating-overlays.md)
208
+ - [Overlay Metadata](overlay-metadata-archive.md)
209
+ - [Doctor Command](../README.md#doctor-command)
@@ -73,7 +73,7 @@ The overlay loader (`tool/schema/overlay-loader.ts`) discovers overlays by:
73
73
  3. Validating manifest structure and fields
74
74
  4. Grouping overlays by category
75
75
  5. Loading base images/templates from `.registry/` files
76
- 6. Loading preset metadata from `overlays/presets/*.yml`
76
+ 6. Loading preset metadata from `overlays/.presets/*.yml`
77
77
 
78
78
  ### Discovery Process
79
79
 
@@ -92,7 +92,7 @@ The loader:
92
92
 
93
93
  ### Preset Handling
94
94
 
95
- Presets are meta-overlays defined in `overlays/presets/*.yml`. Each preset file contains:
95
+ Presets are meta-overlays defined in `overlays/.presets/*.yml`. Each preset file contains:
96
96
 
97
97
  - Metadata (id, name, description, tags, supports)
98
98
  - Selection rules (required overlays, user choices)
@@ -10,7 +10,7 @@ This central `index.yml` file (592 lines) has been split into:
10
10
 
11
11
  - **46 individual overlay manifests** - `overlays/*/overlay.yml`
12
12
  - **Registry files** - `overlays/.registry/base-images.yml` and `base-templates.yml`
13
- - **Preset definitions** - Individual YAML files in `overlays/presets/*.yml`
13
+ - **Preset definitions** - Individual YAML files in `overlays/.presets/*.yml`
14
14
 
15
15
  ## New Structure
16
16