@fulmenhq/tsfulmen 0.1.6

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 (188) hide show
  1. package/CHANGELOG.md +616 -0
  2. package/LICENSE +57 -0
  3. package/README.md +674 -0
  4. package/config/crucible-ts/README.md +38 -0
  5. package/config/crucible-ts/library/foundry/country-codes.yaml +29 -0
  6. package/config/crucible-ts/library/foundry/exit-codes.snapshot.json +351 -0
  7. package/config/crucible-ts/library/foundry/exit-codes.yaml +483 -0
  8. package/config/crucible-ts/library/foundry/fixtures/signals/invalid/invalid-behavior.yaml +45 -0
  9. package/config/crucible-ts/library/foundry/fixtures/signals/invalid/invalid-exit-code.yaml +51 -0
  10. package/config/crucible-ts/library/foundry/fixtures/signals/invalid/malformed.yaml +44 -0
  11. package/config/crucible-ts/library/foundry/fixtures/signals/invalid/missing-required.yaml +36 -0
  12. package/config/crucible-ts/library/foundry/fixtures/signals/parity-snapshot.json +162 -0
  13. package/config/crucible-ts/library/foundry/fixtures/signals/valid/complete.yaml +314 -0
  14. package/config/crucible-ts/library/foundry/fixtures/signals/valid/custom-behavior.yaml +96 -0
  15. package/config/crucible-ts/library/foundry/fixtures/signals/valid/minimal.yaml +55 -0
  16. package/config/crucible-ts/library/foundry/http-statuses.yaml +148 -0
  17. package/config/crucible-ts/library/foundry/mime-types.yaml +39 -0
  18. package/config/crucible-ts/library/foundry/patterns.yaml +185 -0
  19. package/config/crucible-ts/library/foundry/signals.yaml +331 -0
  20. package/config/crucible-ts/library/foundry/similarity-fixtures.yaml +432 -0
  21. package/config/crucible-ts/library/foundry/simplified-modes.snapshot.json +117 -0
  22. package/config/crucible-ts/library/fulhash/fixtures.yaml +160 -0
  23. package/config/crucible-ts/library/v1.0.0/module-manifest.yaml +179 -0
  24. package/config/crucible-ts/repository/app-identity/app-identity.example.yaml +42 -0
  25. package/config/crucible-ts/repository/app-identity/fixtures/invalid/invalid-binary-name.yaml +7 -0
  26. package/config/crucible-ts/repository/app-identity/fixtures/invalid/invalid-env-prefix.yaml +7 -0
  27. package/config/crucible-ts/repository/app-identity/fixtures/invalid/invalid-vendor.yaml +7 -0
  28. package/config/crucible-ts/repository/app-identity/fixtures/invalid/malformed-yaml.yaml +8 -0
  29. package/config/crucible-ts/repository/app-identity/fixtures/invalid/missing-required.yaml +6 -0
  30. package/config/crucible-ts/repository/app-identity/fixtures/valid/complete.yaml +20 -0
  31. package/config/crucible-ts/repository/app-identity/fixtures/valid/minimal.yaml +7 -0
  32. package/config/crucible-ts/repository/app-identity/fixtures/valid/monorepo-api.yaml +10 -0
  33. package/config/crucible-ts/repository/app-identity/fixtures/valid/monorepo-worker.yaml +10 -0
  34. package/config/crucible-ts/repository/app-identity/parity-snapshot.json +125 -0
  35. package/config/crucible-ts/server/management/server-management.yaml +141 -0
  36. package/config/crucible-ts/sync/README.md +13 -0
  37. package/config/crucible-ts/sync/sync-keys.yaml +74 -0
  38. package/config/crucible-ts/taxonomy/languages.yaml +33 -0
  39. package/config/crucible-ts/taxonomy/metrics.yaml +115 -0
  40. package/config/crucible-ts/taxonomy/repository-categories.yaml +66 -0
  41. package/config/crucible-ts/terminal/v1.0.0/terminal-overrides-defaults.yaml +38 -0
  42. package/config/crucible-ts/web/branding/site-branding.yaml +21 -0
  43. package/config/crucible-ts/web/styling/site-styling.yaml +104 -0
  44. package/dist/appidentity/index.d.ts +304 -0
  45. package/dist/appidentity/index.js +5519 -0
  46. package/dist/appidentity/index.js.map +1 -0
  47. package/dist/config/index.d.ts +144 -0
  48. package/dist/config/index.js +5752 -0
  49. package/dist/config/index.js.map +1 -0
  50. package/dist/crucible/index.d.ts +78 -0
  51. package/dist/crucible/index.js +6038 -0
  52. package/dist/crucible/index.js.map +1 -0
  53. package/dist/docscribe/index.d.ts +110 -0
  54. package/dist/docscribe/index.js +682 -0
  55. package/dist/docscribe/index.js.map +1 -0
  56. package/dist/errors/index.d.ts +150 -0
  57. package/dist/errors/index.js +5583 -0
  58. package/dist/errors/index.js.map +1 -0
  59. package/dist/foundry/index.d.ts +1557 -0
  60. package/dist/foundry/index.js +5474 -0
  61. package/dist/foundry/index.js.map +1 -0
  62. package/dist/foundry/similarity/index.d.ts +17 -0
  63. package/dist/foundry/similarity/index.js +136 -0
  64. package/dist/foundry/similarity/index.js.map +1 -0
  65. package/dist/fulhash/index.d.ts +82 -0
  66. package/dist/fulhash/index.js +374 -0
  67. package/dist/fulhash/index.js.map +1 -0
  68. package/dist/fulmen-error-B_kX8jSC.d.ts +309 -0
  69. package/dist/index.d.ts +14 -0
  70. package/dist/index.js +6197 -0
  71. package/dist/index.js.map +1 -0
  72. package/dist/logger-JU2jYitA.d.ts +171 -0
  73. package/dist/logging/index.d.ts +198 -0
  74. package/dist/logging/index.js +578 -0
  75. package/dist/logging/index.js.map +1 -0
  76. package/dist/pathfinder/index.d.ts +532 -0
  77. package/dist/pathfinder/index.js +6750 -0
  78. package/dist/pathfinder/index.js.map +1 -0
  79. package/dist/registry-x1-Qi_Tz.d.ts +349 -0
  80. package/dist/schema/index.d.ts +388 -0
  81. package/dist/schema/index.js +5522 -0
  82. package/dist/schema/index.js.map +1 -0
  83. package/dist/suggest-CLqjLZ5L.d.ts +168 -0
  84. package/dist/telemetry/index.d.ts +161 -0
  85. package/dist/telemetry/index.js +5610 -0
  86. package/dist/telemetry/index.js.map +1 -0
  87. package/dist/types-B_WtvQbS.d.ts +214 -0
  88. package/package.json +130 -0
  89. package/schemas/crucible-ts/api/http/v1.0.0/README.md +22 -0
  90. package/schemas/crucible-ts/api/http/v1.0.0/error-response.schema.json +54 -0
  91. package/schemas/crucible-ts/api/http/v1.0.0/health-response.schema.json +70 -0
  92. package/schemas/crucible-ts/api/http/v1.0.0/success-response.schema.json +51 -0
  93. package/schemas/crucible-ts/api/http/v1.0.0/version-response.schema.json +61 -0
  94. package/schemas/crucible-ts/ascii/v1.0.0/README.md +69 -0
  95. package/schemas/crucible-ts/ascii/v1.0.0/box-chars.schema.json +60 -0
  96. package/schemas/crucible-ts/ascii/v1.0.0/string-analysis.schema.json +45 -0
  97. package/schemas/crucible-ts/assessment/README.md +25 -0
  98. package/schemas/crucible-ts/assessment/v1.0.0/severity-definitions.schema.json +60 -0
  99. package/schemas/crucible-ts/config/fulmen-ecosystem/v1.0.0/README.md +11 -0
  100. package/schemas/crucible-ts/config/fulmen-ecosystem/v1.0.0/fulmen-config-paths.schema.json +61 -0
  101. package/schemas/crucible-ts/config/goneat/README.md +60 -0
  102. package/schemas/crucible-ts/config/goneat/v1.0.0/dates.yaml +234 -0
  103. package/schemas/crucible-ts/config/goneat/v1.0.0/goneat-config.yaml +344 -0
  104. package/schemas/crucible-ts/config/goneat/v1.0.0/lifecycle-phase.json +20 -0
  105. package/schemas/crucible-ts/config/goneat/v1.0.0/release-phase.json +17 -0
  106. package/schemas/crucible-ts/config/goneat/v1.0.0/security-policy.yaml +178 -0
  107. package/schemas/crucible-ts/config/goneat/v1.0.0/version-policy.schema.yaml +205 -0
  108. package/schemas/crucible-ts/config/repository/app-identity/v1.0.0/app-identity.schema.json +143 -0
  109. package/schemas/crucible-ts/config/repository/v1.0.0/lifecycle-phase.json +20 -0
  110. package/schemas/crucible-ts/config/repository-category/codex/v1.0.0/codex-config.schema.json +288 -0
  111. package/schemas/crucible-ts/config/standards/v1.0.0/adr-adoption-status.json +60 -0
  112. package/schemas/crucible-ts/config/standards/v1.0.0/adr-frontmatter.schema.json +225 -0
  113. package/schemas/crucible-ts/config/standards/v1.0.0/adr-lifecycle-status.json +62 -0
  114. package/schemas/crucible-ts/config/sync-consumer-config.yaml +51 -0
  115. package/schemas/crucible-ts/config/sync-keys.schema.yaml +37 -0
  116. package/schemas/crucible-ts/content/README.md +19 -0
  117. package/schemas/crucible-ts/content/binary-embed-manifest/v1.0.0/README.md +13 -0
  118. package/schemas/crucible-ts/content/binary-embed-manifest/v1.0.0/binary-embed-manifest.schema.yaml +36 -0
  119. package/schemas/crucible-ts/content/embed-manifest/v1.1.0/README.md +13 -0
  120. package/schemas/crucible-ts/content/embed-manifest/v1.1.0/embed-manifest.schema.yaml +78 -0
  121. package/schemas/crucible-ts/content/ssot-provenance/v1.0.0/README.md +200 -0
  122. package/schemas/crucible-ts/content/ssot-provenance/v1.0.0/ssot-provenance.schema.json +128 -0
  123. package/schemas/crucible-ts/error-handling/v1.0.0/error-response.schema.json +75 -0
  124. package/schemas/crucible-ts/library/foundry/v1.0.0/country-codes.schema.json +58 -0
  125. package/schemas/crucible-ts/library/foundry/v1.0.0/exit-codes.schema.json +300 -0
  126. package/schemas/crucible-ts/library/foundry/v1.0.0/http-status-groups.schema.json +74 -0
  127. package/schemas/crucible-ts/library/foundry/v1.0.0/mime-types.schema.json +60 -0
  128. package/schemas/crucible-ts/library/foundry/v1.0.0/patterns.schema.json +97 -0
  129. package/schemas/crucible-ts/library/foundry/v1.0.0/signals.schema.json +457 -0
  130. package/schemas/crucible-ts/library/foundry/v1.0.0/similarity.schema.json +260 -0
  131. package/schemas/crucible-ts/library/foundry/v2.0.0/similarity.schema.json +558 -0
  132. package/schemas/crucible-ts/library/fulhash/v1.0.0/README.md +6 -0
  133. package/schemas/crucible-ts/library/fulhash/v1.0.0/checksum-string.schema.json +8 -0
  134. package/schemas/crucible-ts/library/fulhash/v1.0.0/digest.schema.json +100 -0
  135. package/schemas/crucible-ts/library/fulhash/v1.0.0/fixtures.schema.json +227 -0
  136. package/schemas/crucible-ts/library/module-manifest/v1.0.0/README.md +31 -0
  137. package/schemas/crucible-ts/library/module-manifest/v1.0.0/module-manifest.schema.json +132 -0
  138. package/schemas/crucible-ts/meta/README.md +23 -0
  139. package/schemas/crucible-ts/meta/draft-07/schema.json +245 -0
  140. package/schemas/crucible-ts/meta/draft-2020-12/meta/applicator.json +81 -0
  141. package/schemas/crucible-ts/meta/draft-2020-12/meta/content.json +21 -0
  142. package/schemas/crucible-ts/meta/draft-2020-12/meta/core.json +64 -0
  143. package/schemas/crucible-ts/meta/draft-2020-12/meta/format-annotation.json +15 -0
  144. package/schemas/crucible-ts/meta/draft-2020-12/meta/meta-data.json +35 -0
  145. package/schemas/crucible-ts/meta/draft-2020-12/meta/unevaluated.json +18 -0
  146. package/schemas/crucible-ts/meta/draft-2020-12/meta/validation.json +119 -0
  147. package/schemas/crucible-ts/meta/draft-2020-12/schema.json +80 -0
  148. package/schemas/crucible-ts/observability/logging/v1.0.0/README.md +82 -0
  149. package/schemas/crucible-ts/observability/logging/v1.0.0/definitions.schema.json +140 -0
  150. package/schemas/crucible-ts/observability/logging/v1.0.0/log-event.schema.json +179 -0
  151. package/schemas/crucible-ts/observability/logging/v1.0.0/logger-config.schema.json +518 -0
  152. package/schemas/crucible-ts/observability/logging/v1.0.0/logging-policy.schema.json +225 -0
  153. package/schemas/crucible-ts/observability/logging/v1.0.0/middleware-config.schema.json +181 -0
  154. package/schemas/crucible-ts/observability/logging/v1.0.0/severity-filter.schema.json +38 -0
  155. package/schemas/crucible-ts/observability/metrics/v1.0.0/metrics-event.schema.json +86 -0
  156. package/schemas/crucible-ts/pathfinder/v1.0.0/README.md +104 -0
  157. package/schemas/crucible-ts/pathfinder/v1.0.0/error-response.schema.json +35 -0
  158. package/schemas/crucible-ts/pathfinder/v1.0.0/find-query.schema.json +49 -0
  159. package/schemas/crucible-ts/pathfinder/v1.0.0/finder-config.schema.json +91 -0
  160. package/schemas/crucible-ts/pathfinder/v1.0.0/metadata.schema.json +61 -0
  161. package/schemas/crucible-ts/pathfinder/v1.0.0/path-constraint.schema.json +50 -0
  162. package/schemas/crucible-ts/pathfinder/v1.0.0/path-result.schema.json +40 -0
  163. package/schemas/crucible-ts/protocol/http/v1.0.0/README.md +22 -0
  164. package/schemas/crucible-ts/protocol/http/v1.0.0/error-response.schema.json +54 -0
  165. package/schemas/crucible-ts/protocol/http/v1.0.0/health-response.schema.json +70 -0
  166. package/schemas/crucible-ts/protocol/http/v1.0.0/success-response.schema.json +51 -0
  167. package/schemas/crucible-ts/protocol/http/v1.0.0/version-response.schema.json +61 -0
  168. package/schemas/crucible-ts/schema-validation/v1.0.0/README.md +65 -0
  169. package/schemas/crucible-ts/schema-validation/v1.0.0/schema-registry.schema.json +31 -0
  170. package/schemas/crucible-ts/schema-validation/v1.0.0/validator-config.schema.json +36 -0
  171. package/schemas/crucible-ts/server/management/v1.0.0/server-management.schema.json +199 -0
  172. package/schemas/crucible-ts/taxonomy/language/v1.0.0/README.md +30 -0
  173. package/schemas/crucible-ts/taxonomy/language/v1.0.0/language-key.schema.json +17 -0
  174. package/schemas/crucible-ts/taxonomy/language/v1.0.0/language-metadata.schema.json +44 -0
  175. package/schemas/crucible-ts/taxonomy/repository-category/v1.0.0/README.md +31 -0
  176. package/schemas/crucible-ts/taxonomy/repository-category/v1.0.0/category-key.schema.json +19 -0
  177. package/schemas/crucible-ts/taxonomy/repository-category/v1.0.0/category-metadata.schema.json +39 -0
  178. package/schemas/crucible-ts/terminal/v1.0.0/README.md +45 -0
  179. package/schemas/crucible-ts/terminal/v1.0.0/catalog/apple-terminal.yaml +2 -0
  180. package/schemas/crucible-ts/terminal/v1.0.0/catalog/ghostty.yaml +13 -0
  181. package/schemas/crucible-ts/terminal/v1.0.0/catalog/iterm2.yaml +13 -0
  182. package/schemas/crucible-ts/terminal/v1.0.0/schema.json +40 -0
  183. package/schemas/crucible-ts/tooling/external-tools/v1.0.0/README.md +164 -0
  184. package/schemas/crucible-ts/tooling/external-tools/v1.0.0/external-tools-manifest.schema.yaml +83 -0
  185. package/schemas/crucible-ts/tooling/goneat-tools/v1.0.0/README.md +177 -0
  186. package/schemas/crucible-ts/tooling/goneat-tools/v1.0.0/goneat-tools-config.schema.yaml +146 -0
  187. package/schemas/crucible-ts/web/branding/v1.0.0/site-branding.schema.json +79 -0
  188. package/schemas/crucible-ts/web/styling/v1.0.0/site-styling.schema.json +321 -0
@@ -0,0 +1,179 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "$id": "https://schemas.fulmenhq.dev/crucible/observability/logging/log-event-v1.0.0.json",
4
+ "title": "LogEvent",
5
+ "description": "Structured log event envelope for consistent telemetry across Fulmen libraries",
6
+ "type": "object",
7
+ "properties": {
8
+ "timestamp": {
9
+ "$ref": "definitions.schema.json#/$defs/rfc3339Nano"
10
+ },
11
+ "severity": {
12
+ "$ref": "definitions.schema.json#/$defs/severityName"
13
+ },
14
+ "severityLevel": {
15
+ "$ref": "definitions.schema.json#/$defs/severityLevel",
16
+ "description": "Numeric severity for sorting/filtering (optional but recommended for runtime events)"
17
+ },
18
+ "message": {
19
+ "$ref": "definitions.schema.json#/$defs/logMessage"
20
+ },
21
+ "service": {
22
+ "$ref": "definitions.schema.json#/$defs/serviceName"
23
+ },
24
+ "component": {
25
+ "$ref": "definitions.schema.json#/$defs/componentName"
26
+ },
27
+ "logger": {
28
+ "$ref": "definitions.schema.json#/$defs/loggerName"
29
+ },
30
+ "environment": {
31
+ "type": "string",
32
+ "minLength": 1,
33
+ "maxLength": 64,
34
+ "description": "Deployment environment (e.g., 'dev', 'staging', 'production')"
35
+ },
36
+ "context": {
37
+ "$ref": "definitions.schema.json#/$defs/context"
38
+ },
39
+ "contextId": {
40
+ "$ref": "definitions.schema.json#/$defs/contextId",
41
+ "description": "Identifier for the broader execution context (workflow, job, batch, etc.)"
42
+ },
43
+ "requestId": {
44
+ "$ref": "definitions.schema.json#/$defs/requestId",
45
+ "description": "Request identifier (HTTP X-Request-ID or CLI operation UUID)"
46
+ },
47
+ "correlationId": {
48
+ "$ref": "definitions.schema.json#/$defs/uuidV7",
49
+ "description": "Cross-service correlation identifier (UUIDv7 propagated across boundaries)"
50
+ },
51
+ "error": {
52
+ "type": "object",
53
+ "properties": {
54
+ "message": {
55
+ "type": "string",
56
+ "minLength": 1,
57
+ "maxLength": 8192,
58
+ "description": "Error message"
59
+ },
60
+ "type": {
61
+ "type": "string",
62
+ "maxLength": 256,
63
+ "description": "Error type or class"
64
+ },
65
+ "stack": {
66
+ "type": "string",
67
+ "maxLength": 65536,
68
+ "description": "Stack trace (max 64KB)"
69
+ }
70
+ },
71
+ "required": [
72
+ "message"
73
+ ],
74
+ "description": "Error information (required for ERROR/FATAL severity)"
75
+ },
76
+ "traceId": {
77
+ "type": "string",
78
+ "minLength": 1,
79
+ "maxLength": 128,
80
+ "description": "Distributed trace ID (REQUIRED when tracing is enabled)"
81
+ },
82
+ "spanId": {
83
+ "type": "string",
84
+ "minLength": 1,
85
+ "maxLength": 128,
86
+ "description": "Span ID within trace (REQUIRED when tracing is enabled)"
87
+ },
88
+ "parentSpanId": {
89
+ "type": "string",
90
+ "minLength": 1,
91
+ "maxLength": 128,
92
+ "description": "Parent span identifier for nested operations"
93
+ },
94
+ "tags": {
95
+ "$ref": "definitions.schema.json#/$defs/tags"
96
+ },
97
+ "eventId": {
98
+ "type": "string",
99
+ "minLength": 1,
100
+ "maxLength": 128,
101
+ "description": "Unique event identifier (optional)"
102
+ },
103
+ "operation": {
104
+ "type": "string",
105
+ "minLength": 1,
106
+ "maxLength": 128,
107
+ "description": "Logical operation or handler name (CLI command, HTTP route, job step)"
108
+ },
109
+ "durationMs": {
110
+ "type": "number",
111
+ "minimum": 0,
112
+ "description": "Operation duration in milliseconds"
113
+ },
114
+ "userId": {
115
+ "type": "string",
116
+ "minLength": 1,
117
+ "maxLength": 128,
118
+ "description": "Authenticated user identifier when applicable"
119
+ }
120
+ },
121
+ "required": [
122
+ "timestamp",
123
+ "severity",
124
+ "severityLevel",
125
+ "message",
126
+ "service"
127
+ ],
128
+ "examples": [
129
+ {
130
+ "timestamp": "2025-10-02T12:34:56.789012Z",
131
+ "severity": "INFO",
132
+ "severityLevel": 20,
133
+ "message": "Pathfinder scan completed",
134
+ "logger": "gofulmen.pathfinder",
135
+ "service": "gofulmen",
136
+ "component": "pathfinder",
137
+ "environment": "production",
138
+ "contextId": "pipeline-20251008",
139
+ "requestId": "req-01hcn7h3a6zyv4k73k4f4z6w7j",
140
+ "correlationId": "018db318-8c7f-7bc1-b3ff-b2e0e689a001",
141
+ "traceId": "0af7651916cd43dd8448eb211c80319c",
142
+ "spanId": "b7ad6b7169203331",
143
+ "operation": "pathfinder.scan",
144
+ "durationMs": 2450,
145
+ "context": {
146
+ "filesScanned": 1234,
147
+ "duration": "2.5s"
148
+ },
149
+ "tags": [
150
+ "scan",
151
+ "success"
152
+ ]
153
+ },
154
+ {
155
+ "timestamp": "2025-10-02T12:35:01.123456Z",
156
+ "severity": "ERROR",
157
+ "severityLevel": 40,
158
+ "message": "Failed to read file",
159
+ "logger": "gofulmen.pathfinder",
160
+ "service": "gofulmen",
161
+ "component": "pathfinder",
162
+ "environment": "production",
163
+ "requestId": "req-01hcn7h5a9ab1k0tpnttw40p2n",
164
+ "correlationId": "018db318-8d51-7f96-9f82-0d246bc4d4cb",
165
+ "error": {
166
+ "message": "permission denied",
167
+ "type": "PathAccessError",
168
+ "stack": "..."
169
+ },
170
+ "context": {
171
+ "path": "/restricted/file.txt"
172
+ },
173
+ "tags": [
174
+ "error",
175
+ "filesystem"
176
+ ]
177
+ }
178
+ ]
179
+ }
@@ -0,0 +1,518 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "$id": "https://schemas.fulmenhq.dev/crucible/observability/logging/logger-config-v1.0.0.json",
4
+ "title": "LoggerConfig",
5
+ "description": "Progressive logger configuration with profile-based complexity and policy enforcement",
6
+ "type": "object",
7
+ "properties": {
8
+ "profile": {
9
+ "type": "string",
10
+ "enum": [
11
+ "SIMPLE",
12
+ "STRUCTURED",
13
+ "ENTERPRISE",
14
+ "CUSTOM"
15
+ ],
16
+ "default": "SIMPLE",
17
+ "description": "Logging profile for progressive complexity (SIMPLE=CLI tooling, STRUCTURED=services/APIs, ENTERPRISE=full production, CUSTOM=user-defined)."
18
+ },
19
+ "service": {
20
+ "type": "string",
21
+ "minLength": 1,
22
+ "maxLength": 80,
23
+ "description": "Service or application name (e.g., 'gofulmen', 'tsfulmen')."
24
+ },
25
+ "environment": {
26
+ "type": "string",
27
+ "default": "development",
28
+ "maxLength": 32,
29
+ "description": "Deployment environment identifier (development, staging, production, etc.)."
30
+ },
31
+ "policyFile": {
32
+ "type": "string",
33
+ "maxLength": 512,
34
+ "description": "Optional policy file path for organizational governance (search order: .goneat/logging-policy.yaml, /etc/fulmen/logging-policy.yaml, /org/logging-policy.yaml)."
35
+ },
36
+ "defaultLevel": {
37
+ "$ref": "#/$defs/logLevel",
38
+ "default": "INFO",
39
+ "description": "Default minimum log level."
40
+ },
41
+ "sinks": {
42
+ "type": "array",
43
+ "items": {
44
+ "$ref": "#/$defs/sinkConfig"
45
+ },
46
+ "description": "Configured sinks for log output (required for STRUCTURED and ENTERPRISE profiles)."
47
+ },
48
+ "middleware": {
49
+ "type": "array",
50
+ "items": {
51
+ "$ref": "#/$defs/middlewareConfig"
52
+ },
53
+ "description": "Middleware pipeline applied to log events (required for ENTERPRISE profile)."
54
+ },
55
+ "throttling": {
56
+ "$ref": "#/$defs/throttlingConfig",
57
+ "description": "Throttling and backpressure configuration (available for ENTERPRISE/CUSTOM profiles)."
58
+ },
59
+ "staticFields": {
60
+ "type": "object",
61
+ "additionalProperties": true,
62
+ "description": "Static fields merged into every log event (e.g., version, region)."
63
+ },
64
+ "enableCaller": {
65
+ "type": "boolean",
66
+ "default": false,
67
+ "description": "Include caller information (file and line) in log events."
68
+ },
69
+ "enableStacktrace": {
70
+ "type": "boolean",
71
+ "default": false,
72
+ "description": "Attach stack traces for ERROR and FATAL log entries."
73
+ },
74
+ "customConfig": {
75
+ "type": "object",
76
+ "additionalProperties": true,
77
+ "description": "Custom configuration payload for CUSTOM profiles."
78
+ }
79
+ },
80
+ "required": [
81
+ "service"
82
+ ],
83
+ "allOf": [
84
+ {
85
+ "if": {
86
+ "properties": {
87
+ "profile": {
88
+ "const": "STRUCTURED"
89
+ }
90
+ }
91
+ },
92
+ "then": {
93
+ "required": [
94
+ "sinks"
95
+ ]
96
+ }
97
+ },
98
+ {
99
+ "if": {
100
+ "properties": {
101
+ "profile": {
102
+ "const": "ENTERPRISE"
103
+ }
104
+ }
105
+ },
106
+ "then": {
107
+ "required": [
108
+ "sinks",
109
+ "middleware"
110
+ ]
111
+ }
112
+ },
113
+ {
114
+ "if": {
115
+ "properties": {
116
+ "profile": {
117
+ "const": "CUSTOM"
118
+ }
119
+ }
120
+ },
121
+ "then": {
122
+ "required": [
123
+ "customConfig"
124
+ ]
125
+ }
126
+ }
127
+ ],
128
+ "additionalProperties": false,
129
+ "$defs": {
130
+ "logLevel": {
131
+ "type": "string",
132
+ "enum": [
133
+ "TRACE",
134
+ "DEBUG",
135
+ "INFO",
136
+ "WARN",
137
+ "ERROR",
138
+ "FATAL",
139
+ "NONE"
140
+ ]
141
+ },
142
+ "sinkConfig": {
143
+ "type": "object",
144
+ "properties": {
145
+ "type": {
146
+ "type": "string",
147
+ "enum": [
148
+ "console",
149
+ "file",
150
+ "rolling-file",
151
+ "external"
152
+ ],
153
+ "description": "Sink implementation type."
154
+ },
155
+ "name": {
156
+ "type": "string",
157
+ "description": "Optional sink identifier."
158
+ },
159
+ "level": {
160
+ "$ref": "#/$defs/logLevel",
161
+ "description": "Minimum level for this sink (overrides defaultLevel)."
162
+ },
163
+ "format": {
164
+ "type": "string",
165
+ "enum": [
166
+ "json",
167
+ "text",
168
+ "console"
169
+ ],
170
+ "default": "json",
171
+ "description": "Output format (console allows ANSI formatting)."
172
+ }
173
+ },
174
+ "required": [
175
+ "type"
176
+ ],
177
+ "additionalProperties": false,
178
+ "allOf": [
179
+ {
180
+ "if": {
181
+ "properties": {
182
+ "type": {
183
+ "const": "console"
184
+ }
185
+ }
186
+ },
187
+ "then": {
188
+ "properties": {
189
+ "stream": {
190
+ "type": "string",
191
+ "enum": [
192
+ "stderr"
193
+ ],
194
+ "default": "stderr",
195
+ "description": "Output stream for console logs (stderr only)."
196
+ },
197
+ "colorize": {
198
+ "type": "boolean",
199
+ "default": false,
200
+ "description": "Enable ANSI color sequences (only when format=console)."
201
+ }
202
+ }
203
+ }
204
+ },
205
+ {
206
+ "if": {
207
+ "properties": {
208
+ "type": {
209
+ "const": "file"
210
+ }
211
+ }
212
+ },
213
+ "then": {
214
+ "properties": {
215
+ "path": {
216
+ "type": "string",
217
+ "minLength": 1,
218
+ "description": "File path for log output."
219
+ },
220
+ "maxSize": {
221
+ "type": "integer",
222
+ "minimum": 1,
223
+ "description": "Maximum file size in megabytes before rotation."
224
+ },
225
+ "maxAge": {
226
+ "type": "integer",
227
+ "minimum": 1,
228
+ "description": "Maximum file age in days before deletion."
229
+ },
230
+ "maxBackups": {
231
+ "type": "integer",
232
+ "minimum": 0,
233
+ "description": "Number of rotated files to retain."
234
+ },
235
+ "compress": {
236
+ "type": "boolean",
237
+ "default": false,
238
+ "description": "Compress rotated files with gzip."
239
+ }
240
+ },
241
+ "required": [
242
+ "path"
243
+ ]
244
+ }
245
+ },
246
+ {
247
+ "if": {
248
+ "properties": {
249
+ "type": {
250
+ "const": "rolling-file"
251
+ }
252
+ }
253
+ },
254
+ "then": {
255
+ "properties": {
256
+ "path": {
257
+ "type": "string",
258
+ "minLength": 1,
259
+ "description": "File path for rolling log output."
260
+ },
261
+ "maxSize": {
262
+ "type": "integer",
263
+ "minimum": 1,
264
+ "description": "Maximum file size in megabytes before rotation."
265
+ },
266
+ "maxAge": {
267
+ "type": "integer",
268
+ "minimum": 1,
269
+ "description": "Maximum file age in days before rotation."
270
+ },
271
+ "maxBackups": {
272
+ "type": "integer",
273
+ "minimum": 0,
274
+ "description": "Number of rotated files to retain."
275
+ },
276
+ "compress": {
277
+ "type": "boolean",
278
+ "default": false,
279
+ "description": "Compress rotated files with gzip."
280
+ },
281
+ "rotationInterval": {
282
+ "type": "integer",
283
+ "minimum": 1,
284
+ "description": "Optional rotation interval in minutes."
285
+ }
286
+ },
287
+ "required": [
288
+ "path"
289
+ ]
290
+ }
291
+ },
292
+ {
293
+ "if": {
294
+ "properties": {
295
+ "type": {
296
+ "const": "external"
297
+ }
298
+ }
299
+ },
300
+ "then": {
301
+ "properties": {
302
+ "endpoint": {
303
+ "type": "string",
304
+ "format": "uri",
305
+ "description": "HTTP(S) endpoint for remote log ingestion."
306
+ },
307
+ "method": {
308
+ "type": "string",
309
+ "enum": [
310
+ "POST",
311
+ "PUT",
312
+ "PATCH"
313
+ ],
314
+ "default": "POST",
315
+ "description": "HTTP method used for log delivery."
316
+ },
317
+ "headers": {
318
+ "type": "object",
319
+ "additionalProperties": {
320
+ "type": "string"
321
+ },
322
+ "description": "Additional request headers."
323
+ },
324
+ "batchSize": {
325
+ "type": "integer",
326
+ "minimum": 1,
327
+ "default": 500,
328
+ "description": "Maximum number of log events per batch."
329
+ },
330
+ "flushInterval": {
331
+ "type": "integer",
332
+ "minimum": 1,
333
+ "default": 60,
334
+ "description": "Flush interval in seconds."
335
+ },
336
+ "timeout": {
337
+ "type": "integer",
338
+ "minimum": 1,
339
+ "description": "HTTP request timeout in seconds."
340
+ }
341
+ },
342
+ "required": [
343
+ "endpoint"
344
+ ]
345
+ }
346
+ }
347
+ ]
348
+ },
349
+ "middlewareConfig": {
350
+ "type": "object",
351
+ "properties": {
352
+ "name": {
353
+ "type": "string",
354
+ "minLength": 1,
355
+ "description": "Middleware identifier (built-in or custom)."
356
+ },
357
+ "enabled": {
358
+ "type": "boolean",
359
+ "default": true,
360
+ "description": "Enable or disable this middleware entry."
361
+ },
362
+ "order": {
363
+ "type": "integer",
364
+ "minimum": 0,
365
+ "description": "Execution order within the middleware pipeline."
366
+ },
367
+ "config": {
368
+ "type": "object",
369
+ "additionalProperties": true,
370
+ "description": "Middleware-specific configuration payload."
371
+ }
372
+ },
373
+ "required": [
374
+ "name"
375
+ ],
376
+ "additionalProperties": false
377
+ },
378
+ "throttlingConfig": {
379
+ "type": "object",
380
+ "properties": {
381
+ "enabled": {
382
+ "type": "boolean",
383
+ "default": false,
384
+ "description": "Enable throttling to protect downstream sinks."
385
+ },
386
+ "maxRate": {
387
+ "type": "integer",
388
+ "minimum": 1,
389
+ "description": "Maximum log events per second."
390
+ },
391
+ "burstSize": {
392
+ "type": "integer",
393
+ "minimum": 1,
394
+ "description": "Burst capacity for throttling buckets."
395
+ },
396
+ "windowSize": {
397
+ "type": "integer",
398
+ "minimum": 1,
399
+ "description": "Time window in seconds for rate limiting."
400
+ },
401
+ "dropPolicy": {
402
+ "type": "string",
403
+ "enum": [
404
+ "drop-oldest",
405
+ "drop-newest",
406
+ "block"
407
+ ],
408
+ "default": "drop-oldest",
409
+ "description": "Handling strategy when throttling limits are exceeded."
410
+ }
411
+ },
412
+ "required": [
413
+ "enabled"
414
+ ],
415
+ "additionalProperties": false
416
+ }
417
+ },
418
+ "examples": [
419
+ {
420
+ "profile": "SIMPLE",
421
+ "service": "mycli",
422
+ "environment": "development",
423
+ "defaultLevel": "INFO"
424
+ },
425
+ {
426
+ "profile": "STRUCTURED",
427
+ "service": "api-gateway",
428
+ "environment": "staging",
429
+ "defaultLevel": "INFO",
430
+ "sinks": [
431
+ {
432
+ "type": "console",
433
+ "format": "json"
434
+ },
435
+ {
436
+ "type": "file",
437
+ "path": "logs/gateway.log"
438
+ }
439
+ ]
440
+ },
441
+ {
442
+ "profile": "ENTERPRISE",
443
+ "service": "datawhirl",
444
+ "environment": "production",
445
+ "policyFile": "/org/logging-policy.yaml",
446
+ "defaultLevel": "DEBUG",
447
+ "sinks": [
448
+ {
449
+ "type": "console",
450
+ "level": "INFO",
451
+ "format": "json"
452
+ },
453
+ {
454
+ "type": "rolling-file",
455
+ "path": "logs/datawhirl.log",
456
+ "maxSize": 100,
457
+ "maxAge": 7,
458
+ "maxBackups": 5,
459
+ "compress": true
460
+ },
461
+ {
462
+ "type": "external",
463
+ "endpoint": "https://logs.company.com/api/v1/logs",
464
+ "batchSize": 500,
465
+ "flushInterval": 60
466
+ }
467
+ ],
468
+ "middleware": [
469
+ {
470
+ "name": "redact-secrets",
471
+ "order": 1
472
+ },
473
+ {
474
+ "name": "correlation",
475
+ "order": 2,
476
+ "config": {
477
+ "generator": "uuidv7",
478
+ "headerName": "X-Correlation-ID"
479
+ }
480
+ },
481
+ {
482
+ "name": "throttle",
483
+ "order": 3,
484
+ "config": {
485
+ "maxRate": 1000,
486
+ "burstSize": 100,
487
+ "dropPolicy": "drop-oldest"
488
+ }
489
+ }
490
+ ],
491
+ "throttling": {
492
+ "enabled": true,
493
+ "maxRate": 1000,
494
+ "burstSize": 100,
495
+ "windowSize": 60,
496
+ "dropPolicy": "drop-oldest"
497
+ },
498
+ "staticFields": {
499
+ "region": "us-east-1",
500
+ "version": "2025.10.2"
501
+ }
502
+ },
503
+ {
504
+ "profile": "CUSTOM",
505
+ "service": "lab-tooling",
506
+ "customConfig": {
507
+ "adapter": "experimental",
508
+ "options": {
509
+ "buffer": 1024,
510
+ "fanout": [
511
+ "console",
512
+ "in-memory"
513
+ ]
514
+ }
515
+ }
516
+ }
517
+ ]
518
+ }