@zio.dev/zio-blocks 0.0.33 → 0.0.55

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 (215) hide show
  1. package/adr/2026-07-18-data-migration.md +123 -0
  2. package/guides/async-getting-started.md +687 -0
  3. package/guides/compile-time-resource-safety-with-scope.md +21 -16
  4. package/guides/getting-started-with-mux.md +1395 -0
  5. package/guides/query-dsl-extending.md +161 -102
  6. package/guides/query-dsl-fluent-builder.md +217 -157
  7. package/guides/query-dsl-reified-optics.md +12 -10
  8. package/guides/query-dsl-sql.md +640 -165
  9. package/guides/sql-checked-interpolation.md +173 -0
  10. package/guides/sql-transactions.md +286 -0
  11. package/guides/telemetry-guide.md +1130 -0
  12. package/guides/zio-schema-migration.md +29 -22
  13. package/index.md +248 -389
  14. package/package.json +1 -1
  15. package/plans/config-follow-up-prs.md +188 -0
  16. package/plans/config-pr-assessment-roadmap.md +310 -0
  17. package/reference/MuxDataFlow.jsx +250 -0
  18. package/reference/async.md +1499 -0
  19. package/reference/chunk.md +3533 -308
  20. package/reference/codegen/case-class.md +436 -0
  21. package/reference/codegen/emitter-config.md +383 -0
  22. package/reference/codegen/examples.md +664 -0
  23. package/reference/codegen/field.md +316 -0
  24. package/reference/codegen/index.md +317 -0
  25. package/reference/codegen/scala-emitter.md +392 -0
  26. package/reference/codegen/scala-file.md +276 -0
  27. package/reference/codegen/sealed-trait.md +408 -0
  28. package/reference/codegen/type-definition.md +340 -0
  29. package/reference/codegen/type-ref.md +201 -0
  30. package/reference/combinators.md +347 -117
  31. package/reference/config/config-decoder.md +460 -0
  32. package/reference/config/config-source.md +489 -0
  33. package/reference/config/errors.md +278 -0
  34. package/reference/config/flags.md +369 -0
  35. package/reference/config/formats.md +314 -0
  36. package/reference/config/index.md +304 -0
  37. package/reference/config/rollout.md +336 -0
  38. package/reference/context.md +9 -52
  39. package/reference/data-migration.md +269 -0
  40. package/reference/datastar/attributes.md +302 -0
  41. package/reference/datastar/events.md +234 -0
  42. package/reference/datastar/index.md +256 -0
  43. package/reference/datastar/signals.md +230 -0
  44. package/reference/datastar/sse.md +295 -0
  45. package/reference/datastar.md +346 -0
  46. package/reference/docs.md +1461 -345
  47. package/reference/endpoint/auth-type.md +146 -0
  48. package/reference/endpoint/bulk-creation.md +96 -0
  49. package/reference/endpoint/endpoint.md +297 -0
  50. package/reference/endpoint/http-codec.md +249 -0
  51. package/reference/endpoint/index.md +745 -0
  52. package/reference/endpoint/path-codec.md +225 -0
  53. package/reference/endpoint/route-pattern.md +194 -0
  54. package/reference/endpoint/route-tree.md +111 -0
  55. package/reference/endpoint/segment-codec.md +199 -0
  56. package/reference/html.md +1424 -0
  57. package/reference/htmx/attribute-values.md +359 -0
  58. package/reference/htmx/hx-encoding.md +111 -0
  59. package/reference/htmx/hx-params.md +204 -0
  60. package/reference/htmx/hx-swap.md +276 -0
  61. package/reference/htmx/hx-sync.md +251 -0
  62. package/reference/htmx/hx-target.md +314 -0
  63. package/reference/htmx/hx-trigger.md +457 -0
  64. package/reference/htmx/hx-url-update.md +239 -0
  65. package/reference/htmx/index.md +807 -0
  66. package/reference/htmx/response-headers.md +240 -0
  67. package/reference/http-model/headers.md +735 -0
  68. package/reference/http-model/index.md +49 -0
  69. package/reference/http-model/model.md +1517 -0
  70. package/reference/http-model/schema-codecs.md +522 -0
  71. package/reference/http-model/schema.md +750 -0
  72. package/reference/http-model/server-sent-event.md +341 -0
  73. package/reference/jwt.md +195 -0
  74. package/reference/maybe.md +943 -0
  75. package/reference/media-type.md +2 -2
  76. package/reference/mux.md +254 -0
  77. package/reference/mux.mdx +828 -0
  78. package/reference/openapi.md +1351 -0
  79. package/reference/projection.md +654 -0
  80. package/reference/resource-management/defer-handle.md +1 -1
  81. package/reference/resource-management/resource.md +31 -98
  82. package/reference/resource-management/scope.md +28 -220
  83. package/reference/resource-management/wire.md +5 -55
  84. package/reference/ringbuffer/MpmcDiagram.jsx +717 -0
  85. package/reference/ringbuffer/MpscDiagram.jsx +618 -0
  86. package/reference/ringbuffer/SpmcDiagram.jsx +680 -0
  87. package/reference/ringbuffer/SpscDiagram.jsx +677 -0
  88. package/reference/ringbuffer/advanced.mdx +109 -0
  89. package/reference/ringbuffer/index.mdx +145 -0
  90. package/reference/ringbuffer/mpmc.mdx +185 -0
  91. package/reference/ringbuffer/mpsc.mdx +164 -0
  92. package/reference/ringbuffer/spmc.mdx +108 -0
  93. package/reference/ringbuffer/spsc.mdx +416 -0
  94. package/reference/{allows.md → schema/allows.md} +4 -100
  95. package/reference/{binding-resolver.md → schema/binding-resolver.md} +1 -1
  96. package/reference/{binding.md → schema/binding.md} +3 -4
  97. package/reference/schema/built-in-codecs/avro.md +451 -0
  98. package/reference/schema/built-in-codecs/bson.md +510 -0
  99. package/reference/schema/built-in-codecs/csv.md +564 -0
  100. package/reference/schema/built-in-codecs/index.md +77 -0
  101. package/reference/schema/built-in-codecs/json/index.md +295 -0
  102. package/reference/schema/built-in-codecs/json/json-config.md +217 -0
  103. package/reference/{json-patch.md → schema/built-in-codecs/json/json-patch.md} +5 -5
  104. package/reference/{json-schema.md → schema/built-in-codecs/json/json-schema.md} +14 -47
  105. package/reference/schema/built-in-codecs/json/json-selection.md +322 -0
  106. package/reference/{json.md → schema/built-in-codecs/json/json.md} +32 -64
  107. package/reference/schema/built-in-codecs/messagepack.md +508 -0
  108. package/reference/schema/built-in-codecs/thrift.md +433 -0
  109. package/reference/schema/built-in-codecs/toon.md +1078 -0
  110. package/reference/{xml.md → schema/built-in-codecs/xml.md} +13 -9
  111. package/reference/schema/built-in-codecs/yaml.md +552 -0
  112. package/reference/{codec.md → schema/codec.md} +11 -11
  113. package/reference/{dynamic-optic.md → schema/dynamic-optic.md} +196 -5
  114. package/reference/{dynamic-schema.md → schema/dynamic-schema.md} +8 -8
  115. package/reference/schema/format.md +92 -0
  116. package/reference/schema/index.md +52 -0
  117. package/reference/schema/migration.md +297 -0
  118. package/reference/{modifier.md → schema/modifier.md} +58 -7
  119. package/reference/{optics.md → schema/optics.md} +2 -2
  120. package/reference/{patch.md → schema/patch.md} +1 -1
  121. package/{path-interpolator.md → reference/schema/path-interpolator.md} +167 -72
  122. package/reference/schema/reflect-transformer.md +140 -0
  123. package/reference/{schema-evolution → schema/schema-evolution}/as.md +8 -8
  124. package/reference/{schema-evolution → schema/schema-evolution}/index.md +2 -2
  125. package/reference/{schema-evolution → schema/schema-evolution}/into.md +8 -8
  126. package/reference/{schema-expr.md → schema/schema-expr.md} +110 -175
  127. package/reference/schema/schema-search.md +263 -0
  128. package/reference/{schema.md → schema/schema.md} +22 -2
  129. package/reference/{structural-types.md → schema/structural-types.md} +1 -1
  130. package/reference/{type-class-derivation.md → schema/type-class-derivation.md} +63 -1
  131. package/reference/smithy.md +1032 -0
  132. package/reference/sql/db-codec-deriver.md +71 -0
  133. package/reference/sql/db-codec.md +687 -0
  134. package/reference/sql/db-con.md +271 -0
  135. package/reference/sql/db-connection.md +153 -0
  136. package/reference/sql/db-param-writer.md +77 -0
  137. package/reference/sql/db-param.md +66 -0
  138. package/reference/sql/db-result-reader.md +148 -0
  139. package/reference/sql/db-tx.md +114 -0
  140. package/reference/sql/db-value.md +41 -0
  141. package/reference/sql/ddl.md +85 -0
  142. package/reference/sql/frag.md +288 -0
  143. package/reference/sql/index.md +341 -0
  144. package/reference/sql/repo.md +600 -0
  145. package/reference/sql/sql-dialect.md +73 -0
  146. package/reference/sql/sql-logger.md +62 -0
  147. package/reference/sql/sql-name-mapper.md +70 -0
  148. package/reference/sql/table-metadata.md +134 -0
  149. package/reference/sql/table.md +448 -0
  150. package/reference/sql/transactor-zio.md +399 -0
  151. package/reference/sql/transactor.md +363 -0
  152. package/reference/sql-zio.md +112 -0
  153. package/reference/streams/core/index.md +32 -0
  154. package/reference/streams/core/pipeline.md +854 -0
  155. package/reference/streams/core/sink.md +1404 -0
  156. package/reference/streams/core/stream.md +3236 -0
  157. package/reference/streams/execution-and-compatibility/async-execution.md +822 -0
  158. package/reference/streams/execution-and-compatibility/index.md +35 -0
  159. package/reference/streams/execution-and-compatibility/platform-differences.md +297 -0
  160. package/reference/streams/execution-and-compatibility/scala-2-compatibility.md +88 -0
  161. package/reference/streams/execution-and-compatibility/zero-boxing.md +393 -0
  162. package/reference/streams/index.md +726 -0
  163. package/reference/streams/primitives/index.md +30 -0
  164. package/reference/streams/primitives/reader.md +1992 -0
  165. package/reference/streams/primitives/writer.md +1201 -0
  166. package/reference/telemetry/common/any-value.md +90 -0
  167. package/reference/telemetry/common/attribute-key.md +87 -0
  168. package/reference/telemetry/common/attributes.md +118 -0
  169. package/reference/telemetry/common/index.md +39 -0
  170. package/reference/telemetry/common/instrumentation-scope.md +24 -0
  171. package/reference/telemetry/common/resource.md +34 -0
  172. package/reference/telemetry/index.md +311 -0
  173. package/reference/telemetry/logging/index.md +197 -0
  174. package/reference/telemetry/logging/log-enrichment.md +72 -0
  175. package/reference/telemetry/logging/log-formatter.md +100 -0
  176. package/reference/telemetry/logging/log-record-processor.md +56 -0
  177. package/reference/telemetry/logging/log-record.md +44 -0
  178. package/reference/telemetry/logging/log-writer.md +64 -0
  179. package/reference/telemetry/logging/logger-provider.md +142 -0
  180. package/reference/telemetry/logging/logger.md +83 -0
  181. package/reference/telemetry/logging/severity.md +62 -0
  182. package/reference/telemetry/metrics/index.md +150 -0
  183. package/reference/telemetry/metrics/instruments.md +183 -0
  184. package/reference/telemetry/metrics/labeled-instruments.md +74 -0
  185. package/reference/telemetry/metrics/meter-provider.md +76 -0
  186. package/reference/telemetry/metrics/meter.md +98 -0
  187. package/reference/telemetry/metrics/metric-data.md +57 -0
  188. package/reference/telemetry/otel/custom-exporter.md +216 -0
  189. package/reference/telemetry/otel/index.md +212 -0
  190. package/reference/telemetry/tracing/index.md +155 -0
  191. package/reference/telemetry/tracing/sampler.md +89 -0
  192. package/reference/telemetry/tracing/span-builder.md +57 -0
  193. package/reference/telemetry/tracing/span-context.md +39 -0
  194. package/reference/telemetry/tracing/span-data.md +32 -0
  195. package/reference/telemetry/tracing/span-kind.md +55 -0
  196. package/reference/telemetry/tracing/span-processor.md +53 -0
  197. package/reference/telemetry/tracing/span-status.md +47 -0
  198. package/reference/telemetry/tracing/span.md +117 -0
  199. package/reference/telemetry/tracing/tracer-provider.md +91 -0
  200. package/reference/telemetry/tracing/tracer.md +52 -0
  201. package/reference/typeid.md +5 -83
  202. package/sidebars.js +376 -43
  203. package/undocumented-report.md +528 -270
  204. package/reference/formats.md +0 -694
  205. package/reference/http-model.md +0 -1716
  206. package/reference/streams.md +0 -989
  207. package/ringbuffer.md +0 -249
  208. /package/reference/{json-differ.md → schema/built-in-codecs/json/json-differ.md} +0 -0
  209. /package/reference/{dynamic-value.md → schema/dynamic-value.md} +0 -0
  210. /package/reference/{lazy.md → schema/lazy.md} +0 -0
  211. /package/reference/{reflect.md → schema/reflect.md} +0 -0
  212. /package/reference/{registers.md → schema/registers.md} +0 -0
  213. /package/reference/{schema-error.md → schema/schema-error.md} +0 -0
  214. /package/reference/{syntax.md → schema/syntax.md} +0 -0
  215. /package/reference/{validation.md → schema/validation.md} +0 -0
package/package.json CHANGED
@@ -2,7 +2,7 @@
2
2
  "name": "@zio.dev/zio-blocks",
3
3
  "description": "ZIO Blocks Documentation",
4
4
  "license": "Apache-2.0",
5
- "version": "0.0.33",
5
+ "version": "0.0.55",
6
6
  "repository": {
7
7
  "url": "https://github.com/zio/zio-blocks"
8
8
  }
@@ -0,0 +1,188 @@
1
+ # Config Follow-up PR Plan
2
+
3
+ This document turns the config assessment roadmap into concrete follow-up PR/issue-sized work items.
4
+
5
+ ---
6
+
7
+ ## PR 1 — Config Source Ecosystem and Secret File Ergonomics
8
+
9
+ ### Working title
10
+
11
+ `feat(config): add env, secrets-dir, and _FILE config sources`
12
+
13
+ ### Goal
14
+
15
+ Expand the source ecosystem so the config module is usable in real deployment environments without custom glue.
16
+
17
+ ### Scope
18
+
19
+ - Add `ConfigSource.fromEnv(...)`
20
+ - Make the system-properties source a clearly documented canonical public entrypoint
21
+ - Add `ConfigSource.fromSecretsDir(...)`
22
+ - Add `_FILE` convention support for file-backed secret indirection
23
+ - Preserve provenance through all of the above
24
+ - Keep default secret reporting redacted
25
+
26
+ ### Acceptance criteria
27
+
28
+ - environment variables can be loaded as a first-class `ConfigSource`
29
+ - a secrets directory can be loaded as a first-class `ConfigSource`
30
+ - `_FILE` indirection works for secret-like values
31
+ - precedence and composition are documented with examples
32
+ - path traversal / invalid file cases are tested
33
+ - provenance identifies real source keys without leaking secret values
34
+
35
+ ### Non-goals
36
+
37
+ - Vault / cloud secret manager integration
38
+ - hot reload
39
+ - profiles / environments
40
+
41
+ ### Why it matters
42
+
43
+ This closes the largest practical gap against Pydantic Settings, Spring Boot, Dynaconf, and koanf.
44
+
45
+ ---
46
+
47
+ ## PR 2 — Config Diagnostics and Explainability
48
+
49
+ ### Working title
50
+
51
+ `feat(config): add explain/report APIs for resolved config and failures`
52
+
53
+ ### Goal
54
+
55
+ Turn provenance into a true operator-facing differentiator.
56
+
57
+ ### Scope
58
+
59
+ - Add a config explanation/report API
60
+ - Improve human-readable load failure reports
61
+ - Add machine-readable structured diagnostics
62
+ - Explain why a value won when multiple sources are composed
63
+ - Ensure secrets stay redacted throughout reports
64
+
65
+ ### Acceptance criteria
66
+
67
+ - there is a first-class API for explaining resolved config
68
+ - there is a first-class API for explaining load failure details
69
+ - reports include source/key precedence information
70
+ - reports are safe by default for secrets
71
+ - docs include examples of using diagnostics in startup and tests
72
+
73
+ ### Non-goals
74
+
75
+ - HTTP/Actuator endpoints
76
+ - framework runtime integration
77
+
78
+ ### Why it matters
79
+
80
+ This is the path to leapfrogging most libraries on debuggability, especially outside Spring and Figment.
81
+
82
+ ---
83
+
84
+ ## PR 3 — Profiles, Environments, and Layered Composition
85
+
86
+ ### Working title
87
+
88
+ `feat(config): add profile-aware layered config composition`
89
+
90
+ ### Goal
91
+
92
+ Support real deployment models (local/dev/staging/prod/test) without custom source wiring in every application.
93
+
94
+ ### Scope
95
+
96
+ - Add a profile/environment concept
97
+ - Add layered source helpers
98
+ - Document deterministic precedence rules
99
+ - Support test/dev/prod examples in docs
100
+
101
+ ### Acceptance criteria
102
+
103
+ - applications can express a layered source model declaratively
104
+ - precedence is deterministic and documented
105
+ - examples cover local, CI, and production usage
106
+ - tests cover cross-source override behavior
107
+
108
+ ### Non-goals
109
+
110
+ - remote config systems
111
+ - secret managers
112
+ - live reload
113
+
114
+ ### Why it matters
115
+
116
+ This closes one of the biggest operational gaps against Spring Boot, Dynaconf, and Figment.
117
+
118
+ ---
119
+
120
+ ## PR 4 — Secret Manager Integrations
121
+
122
+ ### Working title
123
+
124
+ `feat(config): add secret manager source adapters`
125
+
126
+ ### Goal
127
+
128
+ Support real production secret backends without forcing application-specific adapters.
129
+
130
+ ### Candidate integrations
131
+
132
+ - Vault
133
+ - AWS Secrets Manager
134
+ - GCP Secret Manager
135
+ - Azure Key Vault
136
+
137
+ ### Acceptance criteria
138
+
139
+ - each integration composes as a `ConfigSource`
140
+ - provenance identifies manager and secret key/version
141
+ - secret values stay redacted by default
142
+ - failure modes are explicit and tested
143
+
144
+ ### Why it matters
145
+
146
+ This is where the library becomes truly production-native.
147
+
148
+ ---
149
+
150
+ ## PR 5 — Deprecation, Alias, and Migration Support
151
+
152
+ ### Working title
153
+
154
+ `feat(config): support deprecated keys, aliases, and migration warnings`
155
+
156
+ ### Goal
157
+
158
+ Make configuration evolution safe and user-friendly over time.
159
+
160
+ ### Scope
161
+
162
+ - key aliases
163
+ - deprecated key warnings
164
+ - renamed key migration helpers
165
+ - optional strict mode for rejecting deprecated keys
166
+
167
+ ### Acceptance criteria
168
+
169
+ - old keys can be mapped to new keys
170
+ - warnings are surfaced clearly
171
+ - docs include migration examples
172
+ - diagnostics explain alias/deprecation behavior
173
+
174
+ ### Why it matters
175
+
176
+ This is a major usability feature for real framework adoption.
177
+
178
+ ---
179
+
180
+ ## Release sequencing recommendation
181
+
182
+ 1. PR 1 — source ecosystem + secret file ergonomics
183
+ 2. PR 2 — diagnostics and explainability
184
+ 3. PR 3 — profiles / environments / layered composition
185
+ 4. PR 5 — deprecation / alias support
186
+ 5. PR 4 — secret manager integrations
187
+
188
+ This order maximizes immediate practical value while strengthening the long-term framework story.
@@ -0,0 +1,310 @@
1
+ # Config PR Assessment and Roadmap
2
+
3
+ ## Context
4
+
5
+ This document captures the assessment of the current config PR (`feat(config): add config, config-yaml, config-json, config-hocon modules`) and the roadmap discussion for making the config system best-in-class.
6
+
7
+ The core direction is strong:
8
+
9
+ - typed configuration decoding from `Schema`
10
+ - provenance tracking
11
+ - unified config + flags + rollout model
12
+ - DI integration via `Config.wire[...]`
13
+ - synchronous, zero-dependency core
14
+
15
+ But the PR is not yet best-in-class. The biggest gaps are documentation coherence, operational/source breadth, secret handling completeness, and introspection UX.
16
+
17
+ ---
18
+
19
+ ## Assessment Summary
20
+
21
+ ### Current strengths
22
+
23
+ 1. **Provenance is a real differentiator**
24
+ - `ConfigSource` and `FlagSource` carry source identity.
25
+ - resolved values retain provenance.
26
+ - composition preserves origin.
27
+ - this is genuinely better than many mainstream config libraries.
28
+
29
+ 2. **DI integration is unusually strong**
30
+ - `Config.wire[A]` and `Config.wire[A](prefix)` keep config decoding inside the dependency graph.
31
+ - this is framework-grade design rather than just “settings loading”.
32
+
33
+ 3. **Config + flags + rollout in one model**
34
+ - this is strategically smart and potentially differentiating.
35
+
36
+ 4. **Format adapters normalize into one model**
37
+ - YAML / JSON / HOCON all end up as `ConfigSource`, which keeps the rest of the system simple.
38
+
39
+ ### Current weaknesses
40
+
41
+ 1. **Public docs and API story are not fully coherent**
42
+ - stale `Option` docs where impl uses `Maybe`
43
+ - stale `Schema.derived` companion examples where Scala 3 `derives` is preferred
44
+ - generated README blocked by unrelated website-plugin failure
45
+
46
+ 2. **Source ecosystem is still narrow**
47
+ - no first-class secrets directory source
48
+ - no `_FILE` support
49
+ - no secret-manager integrations
50
+ - no clear profile/environment model
51
+
52
+ 3. **Secret handling is directionally correct but incomplete**
53
+ - `Secret` as string-only wrapper is good
54
+ - redaction exists, but full reporting/audit safety must be verified everywhere
55
+
56
+ 4. **Diagnostics are structured but not yet elite**
57
+ - errors are accumulated
58
+ - but “why did this value win?” / operator-facing explainability is still immature
59
+
60
+ 5. **Merge / precedence model is still basic**
61
+ - simple fallback composition works
62
+ - richer advanced composition semantics are still missing
63
+
64
+ 6. **Validation and operational governance are still shallow**
65
+ - strong decode
66
+ - weaker config-specific semantic validation, migration, deprecation, profile-aware rules
67
+
68
+ ---
69
+
70
+ ## Ecosystem Comparison
71
+
72
+ ### JVM / Spring Boot
73
+
74
+ Spring Boot is ahead on:
75
+
76
+ - property source ecosystem breadth
77
+ - metadata generation
78
+ - operational introspection (`env`, `configprops`, origin tracking)
79
+ - mature profile model
80
+
81
+ This PR is ahead on:
82
+
83
+ - conceptual purity
84
+ - tighter config/flags/rollout unification
85
+ - stronger framework-substrate potential
86
+
87
+ ### Rust / Figment
88
+
89
+ Figment is the closest conceptual peer.
90
+
91
+ Figment is ahead on:
92
+
93
+ - provider abstraction maturity
94
+ - profile support
95
+ - provider ecosystem
96
+ - provenance polish
97
+
98
+ This PR is ahead on:
99
+
100
+ - DI integration
101
+ - flag/rollout unification
102
+
103
+ ### Go / koanf
104
+
105
+ koanf is ahead on:
106
+
107
+ - provider breadth
108
+ - composable source ecosystem
109
+ - merge flexibility
110
+
111
+ This PR is ahead on:
112
+
113
+ - typed decode from schemas
114
+ - provenance richness
115
+ - DI integration
116
+
117
+ ### Python / pydantic-settings + dynaconf
118
+
119
+ Pydantic settings is ahead on:
120
+
121
+ - startup UX
122
+ - strong validation ergonomics
123
+ - nested env conventions
124
+ - secrets dir support
125
+
126
+ Dynaconf is ahead on:
127
+
128
+ - layered source breadth
129
+ - environment/profile support
130
+ - secrets/provider integration
131
+
132
+ This PR is ahead on:
133
+
134
+ - provenance quality
135
+ - DI alignment
136
+ - config/flags/rollout unification
137
+
138
+ ### TypeScript / t3-env / envalid / convict
139
+
140
+ These are ahead on:
141
+
142
+ - startup validation ergonomics
143
+ - low-friction adoption
144
+ - concise developer experience
145
+
146
+ This PR is ahead on:
147
+
148
+ - hierarchical typed decode
149
+ - provenance
150
+ - multi-format config normalization
151
+ - DI integration
152
+
153
+ ---
154
+
155
+ ## Roadmap
156
+
157
+ ### 1. Must merge now
158
+
159
+ These are quality-bar issues for this PR itself.
160
+
161
+ #### A. Fix public coherence
162
+
163
+ - update `docs/reference/config.md` to `Maybe` instead of `Option`
164
+ - update `Config.scala` Scaladoc examples to Scala 3 `derives Schema, Unscoped`
165
+ - ensure all high-level examples use:
166
+ - `Config.wire[...]`
167
+ - `Resource.use(...)`
168
+ - Scala 3 style
169
+ - either:
170
+ - fix `generateReadme`, or
171
+ - explicitly mark README generation as blocked by unrelated website-plugin failure in PR notes
172
+
173
+ #### B. Tighten the config story
174
+
175
+ Document the canonical golden path:
176
+
177
+ ```scala
178
+ Wire(source)
179
+ Config.wire[FooConfig]("foo")
180
+ Resource.from[App](...)
181
+ appResource.use(_.run())
182
+ ```
183
+
184
+ #### C. Tighten secret guarantees
185
+
186
+ Before merge, verify:
187
+
188
+ - all human-facing config rendering redacts `Secret`
189
+ - provenance never leaks secret raw values in default reporting
190
+ - error formatting does not accidentally print secrets
191
+
192
+ ---
193
+
194
+ ### 2. Next 3 PRs
195
+
196
+ #### PR 1 — Source ecosystem + secrets ergonomics
197
+
198
+ Add:
199
+
200
+ - `ConfigSource.fromEnv(...)`
201
+ - `ConfigSource.fromSystemProperties(...)` as a clearly canonical public path
202
+ - `ConfigSource.fromSecretsDir(...)`
203
+ - `_FILE` convention support
204
+
205
+ #### PR 2 — Diagnostics and explainability
206
+
207
+ Add:
208
+
209
+ - richer config load reports
210
+ - “why did this value win?” APIs
211
+ - structured diagnostic output
212
+ - provenance rendering designed for operators
213
+
214
+ #### PR 3 — Profiles / environments / layered config model
215
+
216
+ Add:
217
+
218
+ - named environments/profiles
219
+ - explicit precedence helpers
220
+ - layered composition utilities
221
+
222
+ ---
223
+
224
+ ### 3. 1.0 checklist
225
+
226
+ For a true 1.0-quality config system:
227
+
228
+ #### Core
229
+
230
+ - typed decode from `Schema`
231
+ - `Maybe`-based source API
232
+ - provenance for every resolved value
233
+ - config + flags + rollout unified
234
+ - DI-first wiring
235
+ - ergonomic `Resource.use(...)`
236
+
237
+ #### Sources
238
+
239
+ - map
240
+ - env
241
+ - system properties
242
+ - YAML
243
+ - JSON
244
+ - HOCON
245
+ - secrets dir
246
+ - `_FILE`
247
+ - custom source extension point
248
+
249
+ #### Secrets
250
+
251
+ - string-only `Secret`
252
+ - default redaction everywhere
253
+ - no accidental secret exposure in reports
254
+ - nested secret support
255
+ - secret manager adapter strategy
256
+
257
+ #### Diagnostics
258
+
259
+ - accumulated errors
260
+ - explain/report API
261
+ - effective-value provenance
262
+ - machine-readable diagnostics
263
+ - human-readable startup report
264
+
265
+ #### Framework readiness
266
+
267
+ - profile/environment model
268
+ - clear precedence semantics
269
+ - deprecation/migration support for renamed keys
270
+ - test-friendly override model
271
+ - future hook points for framework introspection
272
+
273
+ ---
274
+
275
+ ## Strategic Recommendation
276
+
277
+ The product should be positioned as:
278
+
279
+ > typed configuration with provenance, rollout, and DI integration
280
+
281
+ not merely as another config library.
282
+
283
+ The best path is to make the strongest differentiators impossible to miss:
284
+
285
+ 1. typed config that explains itself
286
+ 2. config that belongs inside the DI/runtime model
287
+ 3. one unified system for config, flags, and rollout
288
+
289
+ ---
290
+
291
+ ## Priority Order
292
+
293
+ ### Highest priority
294
+
295
+ 1. docs coherence
296
+ 2. secrets-dir + `_FILE`
297
+ 3. diagnostics / explainability
298
+
299
+ ### Medium priority
300
+
301
+ 4. profiles / environments
302
+ 5. custom source/provider story
303
+ 6. deprecation / alias migration support
304
+
305
+ ### Later
306
+
307
+ 7. secret manager integrations
308
+ 8. reload/watch model
309
+ 9. metadata/schema export
310
+ 10. framework actuator/introspection layer