@fulmenhq/tsfulmen 0.1.6 → 0.1.8

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 (34) hide show
  1. package/CHANGELOG.md +82 -0
  2. package/config/crucible-ts/library/foundry/exit-codes.snapshot.json +24 -26
  3. package/config/crucible-ts/library/foundry/simplified-modes.snapshot.json +25 -4
  4. package/config/crucible-ts/taxonomy/metrics.yaml +159 -3
  5. package/config/crucible-ts/taxonomy/repository-categories.yaml +51 -2
  6. package/dist/appidentity/index.js +248 -52
  7. package/dist/appidentity/index.js.map +1 -1
  8. package/dist/config/index.js +248 -52
  9. package/dist/config/index.js.map +1 -1
  10. package/dist/crucible/index.js +248 -52
  11. package/dist/crucible/index.js.map +1 -1
  12. package/dist/errors/index.js +248 -52
  13. package/dist/errors/index.js.map +1 -1
  14. package/dist/foundry/index.d.ts +2 -2
  15. package/dist/foundry/index.js +248 -52
  16. package/dist/foundry/index.js.map +1 -1
  17. package/dist/index.d.ts +1 -1
  18. package/dist/index.js +249 -53
  19. package/dist/index.js.map +1 -1
  20. package/dist/pathfinder/index.d.ts +1 -1
  21. package/dist/pathfinder/index.js +248 -52
  22. package/dist/pathfinder/index.js.map +1 -1
  23. package/dist/{registry-x1-Qi_Tz.d.ts → registry-BoDv4iHO.d.ts} +81 -18
  24. package/dist/schema/index.js +248 -52
  25. package/dist/schema/index.js.map +1 -1
  26. package/dist/telemetry/index.d.ts +2 -2
  27. package/dist/telemetry/index.js +248 -52
  28. package/dist/telemetry/index.js.map +1 -1
  29. package/package.json +10 -4
  30. package/schemas/crucible-ts/api/http/v1.0.0/README.md +0 -22
  31. package/schemas/crucible-ts/api/http/v1.0.0/error-response.schema.json +0 -54
  32. package/schemas/crucible-ts/api/http/v1.0.0/health-response.schema.json +0 -70
  33. package/schemas/crucible-ts/api/http/v1.0.0/success-response.schema.json +0 -51
  34. package/schemas/crucible-ts/api/http/v1.0.0/version-response.schema.json +0 -61
package/CHANGELOG.md CHANGED
@@ -9,6 +9,88 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
9
9
 
10
10
  ---
11
11
 
12
+ ## [0.1.8] - 2025-11-08
13
+
14
+ **Remote Sync Infrastructure** - Upgraded to goneat v0.3.4 with force-remote configuration and improved build artifact testing.
15
+
16
+ ### Fixed
17
+
18
+ - **Verification Script TypeScript Errors**:
19
+ - Fixed incorrect default import for `tmpdir` from `node:os`
20
+ - Corrected `run()` function return type to handle `Buffer | string`
21
+ - Added `'ignore'` to stdio type union
22
+ - Removed unused `existsSync` import
23
+ - **Missing await on async catalog functions**: Added proper `await` to `getSignalsVersion()` call in verification script
24
+ - **Build Artifacts Test Failure**: Fixed test expecting built `dist/` artifacts by ensuring build runs before tests
25
+
26
+ ### Added
27
+
28
+ - **Unit Tests for Verification Script**: Created `scripts/__tests__/verify-published-package.test.ts` with 5 tests
29
+ - Validates TypeScript compilation
30
+ - Checks async/await usage for all catalog functions
31
+ - Verifies VERSION export validation logic
32
+ - Ensures proper cleanup in finally block
33
+ - Validates stdio options correctness
34
+ - **Remote-Only Sync Configuration**: Updated `.goneat/ssot-consumer.yaml` with new `force_remote: true` field
35
+ - Replaces deprecated `method: remote` with standardized `force_remote: true`
36
+ - Ensures CI/CD and fresh clones always use remote Crucible v0.2.8
37
+ - Prevents accidental local sync from `../crucible` directories
38
+
39
+ ### Changed
40
+
41
+ - **Goneat Upgrade**: Updated from v0.3.3 to v0.3.4 with new force-remote capabilities
42
+ - **SSOT Configuration**: Migrated to new goneat v0.3.4 schema with `force_remote` field support
43
+ - **Makefile Sync Target**: Uses `--force-remote` flag to override any local auto-detection
44
+ - **Provenance Tracking**: Enhanced provenance metadata shows `forced_remote: true` and `forced_by: flag`
45
+
46
+ ### Meta
47
+
48
+ - Addresses the "chicken and egg" problem: verification tooling now has its own verification tests
49
+ - Ensures code quality checks are not dismissed - all TypeScript errors resolved
50
+ - Guarantees reproducible remote syncs for all users regardless of local directory structure
51
+
52
+ ---
53
+
54
+ ## [0.1.7] - 2025-11-06
55
+
56
+ **Release Infrastructure** - Automated version consistency checks and workflow improvements to prevent version drift.
57
+
58
+ ### Fixed
59
+
60
+ - **VERSION Constant Drift**: VERSION exported from code now automatically synchronized with package.json
61
+ - Enhanced `scripts/version-sync.ts` to update `src/index.ts` VERSION constant
62
+ - Added VERSION consistency verification to `scripts/verify-package-artifacts.ts`
63
+ - Prevents mismatch between package.json version and runtime VERSION export (issue found in v0.1.6)
64
+
65
+ ### Changed
66
+
67
+ - **Makefile Improvements**:
68
+ - Updated `prepush` target to run `fmt` before `check-all`
69
+ - Ensures formatting is applied before quality checks
70
+ - **Bootstrap Process**: Verified `./bin/goneat` installation via tools.yaml download method works correctly
71
+
72
+ ### Infrastructure
73
+
74
+ - Pre-publish artifact verification now validates VERSION consistency
75
+ - Automated version synchronization across package.json and source code
76
+ - Improved release workflow to catch version drift issues early
77
+
78
+ **Note**: v0.1.6 was published to npm but had VERSION constant mismatch (package.json: 0.1.6, exported: 0.1.5). GitHub release v0.1.6 was removed. This release fixes that infrastructure gap.
79
+
80
+ ---
81
+
82
+ ## [0.1.6] - 2025-11-06
83
+
84
+ **Skipped** - Published to npm but not released on GitHub due to VERSION constant mismatch discovered post-publish. See v0.1.7 for details and fixes.
85
+
86
+ ### Issues
87
+
88
+ - VERSION constant exported `'0.1.5'` while package.json declared `0.1.6`
89
+ - GitHub release removed; npm package remains but is not recommended
90
+ - Users should upgrade to v0.1.7 or later
91
+
92
+ ---
93
+
12
94
  ## [0.1.5] - 2025-11-05
13
95
 
14
96
  **Application Identity Module** - Complete implementation of Crucible app-identity standard v1.0.0 with discovery, caching, validation, and CLI tooling.
@@ -283,22 +283,22 @@
283
283
  "129": {
284
284
  "name": "EXIT_SIGNAL_HUP",
285
285
  "category": "signals",
286
- "description": "Hangup signal (SIGHUP)",
287
- "context": "Terminal disconnected, config reload requested",
286
+ "description": "Hangup signal (SIGHUP) - config reload via restart",
287
+ "context": "Config reload via restart-based pattern (mandatory schema validation).\nProcess exits with 129, supervisor restarts with new config.\nSee signals.yaml for reload behavior definition.",
288
288
  "bsd_equivalent": "128 + 1"
289
289
  },
290
290
  "130": {
291
291
  "name": "EXIT_SIGNAL_INT",
292
292
  "category": "signals",
293
- "description": "Interrupt signal (SIGINT)",
294
- "context": "Ctrl+C pressed, user interrupt",
293
+ "description": "Interrupt signal (SIGINT) - user interrupt with Ctrl+C double-tap",
294
+ "context": "Ctrl+C pressed. First tap initiates graceful shutdown, second within 2s forces immediate exit.\nSame exit code (130) for both graceful and force modes.\nSee signals.yaml for double-tap behavior definition.",
295
295
  "bsd_equivalent": "128 + 2"
296
296
  },
297
297
  "131": {
298
298
  "name": "EXIT_SIGNAL_QUIT",
299
299
  "category": "signals",
300
- "description": "Quit signal (SIGQUIT)",
301
- "context": "Ctrl+\\ pressed, core dump requested",
300
+ "description": "Quit signal (SIGQUIT) - immediate exit",
301
+ "context": "Ctrl+\\ on Unix, Ctrl+Break on Windows. Immediate termination without cleanup.\nUse for emergency shutdown or debugging (core dumps).",
302
302
  "bsd_equivalent": "128 + 3"
303
303
  },
304
304
  "137": {
@@ -309,43 +309,41 @@
309
309
  "bsd_equivalent": "128 + 9",
310
310
  "python_note": "Cannot be caught in Python (OS-level)"
311
311
  },
312
+ "138": {
313
+ "name": "EXIT_SIGNAL_USR1",
314
+ "category": "signals",
315
+ "description": "User-defined signal 1 (SIGUSR1) - custom handler",
316
+ "context": "Application-specific signal (e.g., reopen logs, dump stats, trigger profiling).\nApplications register custom handlers. Exit code 138 on Linux (128+10).\nPlatform differences: macOS/FreeBSD use signal 30 (exit 158), not 10."
317
+ },
318
+ "140": {
319
+ "name": "EXIT_SIGNAL_USR2",
320
+ "category": "signals",
321
+ "description": "User-defined signal 2 (SIGUSR2) - custom handler",
322
+ "context": "Application-specific signal (e.g., toggle debug mode, rotate credentials).\nApplications register custom handlers. Exit code 140 on Linux (128+12).\nPlatform differences: macOS/FreeBSD use signal 31 (exit 159), not 12."
323
+ },
312
324
  "141": {
313
325
  "name": "EXIT_SIGNAL_PIPE",
314
326
  "category": "signals",
315
- "description": "Broken pipe (SIGPIPE)",
316
- "context": "Writing to closed pipe/socket, reader terminated",
327
+ "description": "Broken pipe (SIGPIPE) - observe only",
328
+ "context": "Writing to closed pipe/socket. Fulmen default is observe_only (log + graceful exit).\nApplications may override to ignore for network services.\nSee signals.yaml for SIGPIPE handling guidance.",
317
329
  "bsd_equivalent": "128 + 13",
318
330
  "python_note": "Raised as BrokenPipeError exception"
319
331
  },
320
332
  "142": {
321
333
  "name": "EXIT_SIGNAL_ALRM",
322
334
  "category": "signals",
323
- "description": "Alarm signal (SIGALRM)",
324
- "context": "Timer expiration, alarm clock",
335
+ "description": "Alarm signal (SIGALRM) - watchdog timeout",
336
+ "context": "Watchdog timer expired. Treat as timeout-induced exit.\nWatchdog pattern out of scope for v1.0.0 module implementations.",
325
337
  "bsd_equivalent": "128 + 14",
326
338
  "python_note": "Supported by signal module, rarely used in practice"
327
339
  },
328
340
  "143": {
329
341
  "name": "EXIT_SIGNAL_TERM",
330
342
  "category": "signals",
331
- "description": "Termination signal (SIGTERM)",
332
- "context": "Graceful shutdown requested, normal termination",
343
+ "description": "Termination signal (SIGTERM) - graceful shutdown",
344
+ "context": "Graceful shutdown requested by container orchestrator or process supervisor.\nStandard 30-second timeout for cleanup. Applications run cleanup handlers before exit.\nSee signals.yaml for graceful shutdown behavior definition.",
333
345
  "bsd_equivalent": "128 + 15",
334
346
  "python_note": "Default signal for graceful shutdown"
335
- },
336
- "159": {
337
- "name": "EXIT_SIGNAL_USR1",
338
- "category": "signals",
339
- "description": "User-defined signal 1 (SIGUSR1)",
340
- "context": "Application-specific signal handling (e.g., reopen logs, dump stats)",
341
- "bsd_equivalent": "128 + 31"
342
- },
343
- "160": {
344
- "name": "EXIT_SIGNAL_USR2",
345
- "category": "signals",
346
- "description": "User-defined signal 2 (SIGUSR2)",
347
- "context": "Application-specific signal handling (e.g., toggle debug mode)",
348
- "bsd_equivalent": "128 + 32"
349
347
  }
350
348
  }
351
349
  }
@@ -48,7 +48,16 @@
48
48
  93,
49
49
  94,
50
50
  95,
51
- 96
51
+ 96,
52
+ 129,
53
+ 130,
54
+ 131,
55
+ 137,
56
+ 138,
57
+ 140,
58
+ 141,
59
+ 142,
60
+ 143
52
61
  ],
53
62
  "2": [
54
63
  64
@@ -92,7 +101,16 @@
92
101
  51,
93
102
  52,
94
103
  53,
95
- 54
104
+ 54,
105
+ 129,
106
+ 130,
107
+ 131,
108
+ 137,
109
+ 138,
110
+ 140,
111
+ 141,
112
+ 142,
113
+ 143
96
114
  ],
97
115
  "5": [
98
116
  70,
@@ -103,14 +121,17 @@
103
121
  "6": [
104
122
  91,
105
123
  92,
124
+ 93,
106
125
  94,
107
- 95
126
+ 95,
127
+ 96
108
128
  ],
109
129
  "7": [
110
130
  80,
111
131
  81,
112
132
  82,
113
- 83
133
+ 83,
134
+ 84
114
135
  ]
115
136
  }
116
137
  }
@@ -18,6 +18,32 @@ $defs:
18
18
  - logging_emit_count
19
19
  - logging_emit_latency_ms
20
20
  - goneat_command_duration_ms
21
+ - prometheus_exporter_refresh_duration_seconds
22
+ - prometheus_exporter_refresh_total
23
+ - prometheus_exporter_refresh_errors_total
24
+ - prometheus_exporter_refresh_inflight
25
+ - prometheus_exporter_http_requests_total
26
+ - prometheus_exporter_http_errors_total
27
+ - prometheus_exporter_restarts_total
28
+ - foundry_mime_detections_total_json
29
+ - foundry_mime_detections_total_xml
30
+ - foundry_mime_detections_total_yaml
31
+ - foundry_mime_detections_total_csv
32
+ - foundry_mime_detections_total_plain_text
33
+ - foundry_mime_detections_total_unknown
34
+ - foundry_mime_detection_ms_json
35
+ - foundry_mime_detection_ms_xml
36
+ - foundry_mime_detection_ms_yaml
37
+ - foundry_mime_detection_ms_csv
38
+ - foundry_mime_detection_ms_plain_text
39
+ - foundry_mime_detection_ms_unknown
40
+ - error_handling_wraps_total
41
+ - error_handling_wrap_ms
42
+ - fulhash_operations_total_xxh3_128
43
+ - fulhash_operations_total_sha256
44
+ - fulhash_hash_string_total
45
+ - fulhash_bytes_hashed_total
46
+ - fulhash_operation_ms
21
47
  metricUnit:
22
48
  type: string
23
49
  enum:
@@ -25,11 +51,12 @@ $defs:
25
51
  - ms
26
52
  - bytes
27
53
  - percent
54
+ - s
28
55
  properties:
29
56
  version:
30
57
  type: string
31
- description: Taxonomy version (CalVer).
32
- pattern: "^\\d{4}\\.\\d{2}\\.\\d+$"
58
+ description: Taxonomy version (SemVer, aligned with Crucible releases).
59
+ pattern: "^\\d+\\.\\d+\\.\\d+$"
33
60
  defaults:
34
61
  type: object
35
62
  description: Default configuration applied across metrics.
@@ -66,7 +93,7 @@ required:
66
93
  - version
67
94
  - metrics
68
95
  additionalProperties: false
69
- version: "2025.10.3"
96
+ version: "0.2.8"
70
97
  defaults:
71
98
  histogram_buckets:
72
99
  ms_metrics:
@@ -113,3 +140,132 @@ metrics:
113
140
  - name: goneat_command_duration_ms
114
141
  unit: ms
115
142
  description: Duration of goneat command execution (instrumentation helper).
143
+ - name: prometheus_exporter_refresh_duration_seconds
144
+ unit: s
145
+ description: >
146
+ Time to refresh/export registry data into Prometheus collectors. Uses ADR-0007 buckets converted to seconds: [0.001, 0.005, 0.01, 0.05, 0.1, 0.5, 1.0, 5.0, 10.0]. Required labels: phase (collect|convert|export), result (success|error). Optional labels: error_type.
147
+
148
+ - name: prometheus_exporter_refresh_total
149
+ unit: count
150
+ description: >
151
+ Total refresh cycles attempted. Use with result label for success/error breakdown. Exporters SHOULD emit both this and prometheus_exporter_refresh_errors_total. Required labels: result (success|error). Optional labels: error_type.
152
+
153
+ - name: prometheus_exporter_refresh_errors_total
154
+ unit: count
155
+ description: >
156
+ Failed refresh cycles with detailed error classification. Sum MUST equal prometheus_exporter_refresh_total{result="error"}. Required labels: error_type (validation|io|timeout|other). Optional labels: phase.
157
+
158
+ - name: prometheus_exporter_refresh_inflight
159
+ unit: count
160
+ description: >
161
+ Number of concurrent refresh operations currently running. Optional labels: phase.
162
+
163
+ - name: prometheus_exporter_http_requests_total
164
+ unit: count
165
+ description: >
166
+ HTTP scrape/exposition requests handled by exporter. Distinct from prom-client defaults; recommend disabling client defaults when using this. Required labels: status (HTTP code), path. Optional labels: client (high cardinality warning).
167
+
168
+ - name: prometheus_exporter_http_errors_total
169
+ unit: count
170
+ description: >
171
+ HTTP exposition failures (5xx, auth failures, timeouts). Required labels: status (HTTP code), path. Optional labels: client (high cardinality warning).
172
+
173
+ - name: prometheus_exporter_restarts_total
174
+ unit: count
175
+ description: >
176
+ Exporter refresh loop or HTTP server restarts. Required labels: reason (config_change|error|manual|other).
177
+
178
+ - name: foundry_mime_detections_total_json
179
+ unit: count
180
+ description: >
181
+ Total JSON MIME type detections performed by the Foundry module. Tracks usage patterns for JSON content processing.
182
+
183
+ - name: foundry_mime_detections_total_xml
184
+ unit: count
185
+ description: >
186
+ Total XML MIME type detections performed by the Foundry module. Tracks usage patterns for XML content processing.
187
+
188
+ - name: foundry_mime_detections_total_yaml
189
+ unit: count
190
+ description: >
191
+ Total YAML MIME type detections performed by the Foundry module. Tracks usage patterns for YAML content processing.
192
+
193
+ - name: foundry_mime_detections_total_csv
194
+ unit: count
195
+ description: >
196
+ Total CSV MIME type detections performed by the Foundry module. Tracks usage patterns for CSV content processing.
197
+
198
+ - name: foundry_mime_detections_total_plain_text
199
+ unit: count
200
+ description: >
201
+ Total plain text MIME type detections performed by the Foundry module. Tracks usage patterns for plain text content processing.
202
+
203
+ - name: foundry_mime_detections_total_unknown
204
+ unit: count
205
+ description: >
206
+ Total unknown/binary MIME type detections performed by the Foundry module. Tracks usage patterns for unknown content types.
207
+
208
+ - name: foundry_mime_detection_ms_json
209
+ unit: ms
210
+ description: >
211
+ JSON MIME type detection latency in milliseconds. Uses ADR-0007 buckets: [1, 5, 10, 50, 100, 500, 1000, 5000, 10000]. Enables performance analysis for JSON detection algorithms.
212
+
213
+ - name: foundry_mime_detection_ms_xml
214
+ unit: ms
215
+ description: >
216
+ XML MIME type detection latency in milliseconds. Uses ADR-0007 buckets: [1, 5, 10, 50, 100, 500, 1000, 5000, 10000]. Enables performance analysis for XML detection algorithms.
217
+
218
+ - name: foundry_mime_detection_ms_yaml
219
+ unit: ms
220
+ description: >
221
+ YAML MIME type detection latency in milliseconds. Uses ADR-0007 buckets: [1, 5, 10, 50, 100, 500, 1000, 5000, 10000]. Enables performance analysis for YAML detection algorithms.
222
+
223
+ - name: foundry_mime_detection_ms_csv
224
+ unit: ms
225
+ description: >
226
+ CSV MIME type detection latency in milliseconds. Uses ADR-0007 buckets: [1, 5, 10, 50, 100, 500, 1000, 5000, 10000]. Enables performance analysis for CSV detection algorithms.
227
+
228
+ - name: foundry_mime_detection_ms_plain_text
229
+ unit: ms
230
+ description: >
231
+ Plain text MIME type detection latency in milliseconds. Uses ADR-0007 buckets: [1, 5, 10, 50, 100, 500, 1000, 5000, 10000]. Enables performance analysis for plain text detection algorithms.
232
+
233
+ - name: foundry_mime_detection_ms_unknown
234
+ unit: ms
235
+ description: >
236
+ Unknown/binary MIME type detection latency in milliseconds. Uses ADR-0007 buckets: [1, 5, 10, 50, 100, 500, 1000, 5000, 10000]. Enables performance analysis for fallback detection logic.
237
+
238
+ - name: error_handling_wraps_total
239
+ unit: count
240
+ description: >
241
+ Total error wrap operations performed by the Error Handling module. Tracks error handling patterns and frequency across the application.
242
+
243
+ - name: error_handling_wrap_ms
244
+ unit: ms
245
+ description: >
246
+ Error wrap operation latency in milliseconds. Uses ADR-0007 buckets: [1, 5, 10, 50, 100, 500, 1000, 5000, 10000]. Enables detection of error handling performance regressions.
247
+
248
+ - name: fulhash_operations_total_xxh3_128
249
+ unit: count
250
+ description: >
251
+ Total XXH3-128 hash operations performed by the FulHash module. Tracks usage of the fast, non-cryptographic hash algorithm for performance-oriented scenarios.
252
+
253
+ - name: fulhash_operations_total_sha256
254
+ unit: count
255
+ description: >
256
+ Total SHA256 hash operations performed by the FulHash module. Tracks usage of the cryptographic hash algorithm for security-oriented scenarios.
257
+
258
+ - name: fulhash_hash_string_total
259
+ unit: count
260
+ description: >
261
+ Total string hash operations performed by the FulHash module (any algorithm). Tracks the common use case of hashing string data.
262
+
263
+ - name: fulhash_bytes_hashed_total
264
+ unit: bytes
265
+ description: >
266
+ Total bytes processed across all hash operations by the FulHash module. Counter value represents cumulative byte count. Enables capacity planning and throughput analysis.
267
+
268
+ - name: fulhash_operation_ms
269
+ unit: ms
270
+ description: >
271
+ Hash operation latency in milliseconds for all algorithms. Uses ADR-0007 buckets: [1, 5, 10, 50, 100, 500, 1000, 5000, 10000]. Enables performance benchmarking across XXH3-128 and SHA256.
@@ -19,7 +19,10 @@ categories:
19
19
  typicalConsumers:
20
20
  - "Operations automation"
21
21
  - "MCP servers"
22
- notes: "Requires request correlation IDs and Prometheus metrics"
22
+ notes: "Requires request correlation IDs and Prometheus metrics. Templates (forge-workhorse-*) must comply with CDRL standard."
23
+ references:
24
+ - "docs/architecture/fulmen-forge-workhorse-standard.md"
25
+ - "docs/architecture/fulmen-template-cdrl-standard.md"
23
26
  - key: service
24
27
  summary: "Long-running HTTP/gRPC services without interactive CLI UX"
25
28
  primaryEntryPoints:
@@ -54,7 +57,10 @@ categories:
54
57
  typicalConsumers:
55
58
  - "Fulmen developers"
56
59
  - "External stakeholders"
57
- notes: "Generated assets must trace back to committed source"
60
+ notes: "Generated assets must trace back to committed source. Templates (forge-codex-*) must comply with CDRL standard."
61
+ references:
62
+ - "docs/architecture/fulmen-forge-codex-standard.md"
63
+ - "docs/architecture/fulmen-template-cdrl-standard.md"
58
64
  - key: sdk
59
65
  summary: "Client SDKs targeting external services or APIs"
60
66
  primaryEntryPoints:
@@ -64,3 +70,46 @@ categories:
64
70
  - "External developers"
65
71
  - "Partner integrations"
66
72
  notes: "Ship compatibility matrix and error taxonomy"
73
+ - key: forge-workhorse
74
+ summary: "Production-ready templates for backend services (Clone → Degit → Refit → Launch)"
75
+ primaryEntryPoints:
76
+ - "Template repository (GitHub)"
77
+ - "CDRL workflow (Clone → Degit → Refit → Launch)"
78
+ - "make validate-app-identity"
79
+ - "make doctor"
80
+ typicalConsumers:
81
+ - "Developers building new services"
82
+ - "Teams standardizing on Fulmen stack"
83
+ notes: "MUST comply with CDRL standard. Named with horse breeds (groningen, percheron). REQUIRED: .fulmen/app.yaml, CDRL validation targets, fulmen_cdrl_guide.md"
84
+ references:
85
+ - "docs/architecture/fulmen-forge-workhorse-standard.md"
86
+ - "docs/architecture/fulmen-template-cdrl-standard.md"
87
+ - "docs/standards/cdrl/workflow-guide.md"
88
+ - "docs/standards/makefile-standard.md#annex-b-template-repository-cdrl-targets"
89
+ - key: forge-codex
90
+ summary: "Production-ready templates for documentation sites (Clone → Degit → Refit → Launch)"
91
+ primaryEntryPoints:
92
+ - "Template repository (GitHub)"
93
+ - "CDRL workflow (Clone → Degit → Refit → Launch)"
94
+ - "make validate-app-identity"
95
+ - "make doctor"
96
+ typicalConsumers:
97
+ - "Developers building documentation portals"
98
+ - "Teams creating schema registries"
99
+ notes: "MUST comply with CDRL standard. REQUIRED: .fulmen/app.yaml, CDRL validation targets, fulmen_cdrl_guide.md. Astro/Starlight baseline."
100
+ references:
101
+ - "docs/architecture/fulmen-forge-codex-standard.md"
102
+ - "docs/architecture/fulmen-template-cdrl-standard.md"
103
+ - "docs/standards/cdrl/workflow-guide.md"
104
+ - "docs/standards/makefile-standard.md#annex-b-template-repository-cdrl-targets"
105
+ - key: forge-gymnasium
106
+ summary: "Experimental templates for prototyping and research (CDRL optional until graduation)"
107
+ primaryEntryPoints:
108
+ - "Template repository (GitHub)"
109
+ - "Experimental workflows"
110
+ typicalConsumers:
111
+ - "Researchers"
112
+ - "Prototype developers"
113
+ notes: "Experimental template category. May graduate to forge-workhorse or forge-codex upon maturity. CDRL compliance RECOMMENDED but not required until stable."
114
+ references:
115
+ - "docs/architecture/fulmen-template-cdrl-standard.md"