@zio.dev/zio-blocks 0.0.32 → 0.0.51
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.
- package/guides/compile-time-resource-safety-with-scope.md +16 -17
- package/guides/getting-started-with-mux.md +1507 -0
- package/guides/query-dsl-extending.md +161 -102
- package/guides/query-dsl-fluent-builder.md +217 -157
- package/guides/query-dsl-reified-optics.md +12 -10
- package/guides/query-dsl-sql.md +246 -165
- package/guides/telemetry-guide.md +1069 -0
- package/guides/zio-schema-migration.md +29 -22
- package/index.md +293 -51
- package/package.json +1 -1
- package/plans/config-follow-up-prs.md +188 -0
- package/plans/config-pr-assessment-roadmap.md +310 -0
- package/reference/MuxDataFlow.jsx +250 -0
- package/reference/async.md +651 -0
- package/reference/chunk.md +3533 -308
- package/reference/codegen/case-class.md +436 -0
- package/reference/codegen/emitter-config.md +383 -0
- package/reference/codegen/examples.md +664 -0
- package/reference/codegen/field.md +316 -0
- package/reference/codegen/index.md +317 -0
- package/reference/codegen/scala-emitter.md +392 -0
- package/reference/codegen/scala-file.md +276 -0
- package/reference/codegen/sealed-trait.md +408 -0
- package/reference/codegen/type-definition.md +340 -0
- package/reference/codegen/type-ref.md +201 -0
- package/reference/combinators.md +347 -117
- package/reference/config.md +158 -0
- package/reference/context.md +4 -4
- package/reference/datastar.md +346 -0
- package/reference/docs.md +1461 -345
- package/reference/endpoint/auth-type.md +146 -0
- package/reference/endpoint/endpoint.md +297 -0
- package/reference/endpoint/http-codec.md +249 -0
- package/reference/endpoint/index.md +825 -0
- package/reference/endpoint/path-codec.md +237 -0
- package/reference/endpoint/route-pattern.md +196 -0
- package/reference/endpoint/route-tree.md +111 -0
- package/reference/endpoint/segment-codec.md +212 -0
- package/reference/html.md +1120 -0
- package/reference/htmx/attribute-values.md +359 -0
- package/reference/htmx/hx-encoding.md +111 -0
- package/reference/htmx/hx-params.md +204 -0
- package/reference/htmx/hx-swap.md +276 -0
- package/reference/htmx/hx-sync.md +251 -0
- package/reference/htmx/hx-target.md +314 -0
- package/reference/htmx/hx-trigger.md +457 -0
- package/reference/htmx/hx-url-update.md +239 -0
- package/reference/htmx/index.md +855 -0
- package/reference/http-model/index.md +47 -0
- package/reference/http-model/model.md +1481 -0
- package/reference/http-model/schema.md +747 -0
- package/reference/maybe.md +826 -0
- package/reference/media-type.md +2 -2
- package/reference/mux.mdx +823 -0
- package/reference/openapi.md +1351 -0
- package/reference/resource-management/defer-handle.md +1 -1
- package/reference/resource-management/resource.md +31 -2
- package/reference/resource-management/scope.md +28 -12
- package/reference/resource-management/wire.md +3 -7
- package/reference/ringbuffer/MpmcDiagram.jsx +717 -0
- package/reference/ringbuffer/MpscDiagram.jsx +618 -0
- package/reference/ringbuffer/SpmcDiagram.jsx +680 -0
- package/reference/ringbuffer/SpscDiagram.jsx +677 -0
- package/reference/ringbuffer/advanced.mdx +109 -0
- package/reference/ringbuffer/index.mdx +145 -0
- package/reference/ringbuffer/mpmc.mdx +151 -0
- package/reference/ringbuffer/mpsc.mdx +132 -0
- package/reference/ringbuffer/spmc.mdx +108 -0
- package/reference/ringbuffer/spsc.mdx +344 -0
- package/reference/{allows.md → schema/allows.md} +4 -4
- package/reference/{binding-resolver.md → schema/binding-resolver.md} +1 -1
- package/reference/{binding.md → schema/binding.md} +2 -3
- package/reference/schema/built-in-codecs/avro.md +451 -0
- package/reference/schema/built-in-codecs/bson.md +480 -0
- package/reference/schema/built-in-codecs/csv.md +564 -0
- package/reference/schema/built-in-codecs/index.md +77 -0
- package/reference/schema/built-in-codecs/json/index.md +295 -0
- package/reference/schema/built-in-codecs/json/json-config.md +217 -0
- package/reference/{json-patch.md → schema/built-in-codecs/json/json-patch.md} +3 -3
- package/reference/{json-schema.md → schema/built-in-codecs/json/json-schema.md} +14 -47
- package/reference/schema/built-in-codecs/json/json-selection.md +322 -0
- package/reference/{json.md → schema/built-in-codecs/json/json.md} +32 -64
- package/reference/schema/built-in-codecs/messagepack.md +508 -0
- package/reference/schema/built-in-codecs/thrift.md +433 -0
- package/reference/schema/built-in-codecs/toon.md +1078 -0
- package/reference/{xml.md → schema/built-in-codecs/xml.md} +34 -192
- package/reference/schema/built-in-codecs/yaml.md +552 -0
- package/reference/{codec.md → schema/codec.md} +10 -10
- package/reference/{dynamic-optic.md → schema/dynamic-optic.md} +151 -5
- package/reference/{dynamic-schema.md → schema/dynamic-schema.md} +8 -8
- package/reference/schema/format.md +92 -0
- package/reference/schema/index.md +50 -0
- package/reference/schema/migration.md +297 -0
- package/reference/{modifier.md → schema/modifier.md} +58 -7
- package/reference/{optics.md → schema/optics.md} +2 -2
- package/reference/{patch.md → schema/patch.md} +1 -1
- package/{path-interpolator.md → reference/schema/path-interpolator.md} +165 -72
- package/reference/{schema-evolution → schema/schema-evolution}/as.md +5 -5
- package/reference/{schema-evolution → schema/schema-evolution}/index.md +2 -2
- package/reference/{schema-evolution → schema/schema-evolution}/into.md +3 -3
- package/reference/{schema-expr.md → schema/schema-expr.md} +110 -175
- package/reference/{schema.md → schema/schema.md} +13 -1
- package/reference/{structural-types.md → schema/structural-types.md} +1 -1
- package/reference/{type-class-derivation.md → schema/type-class-derivation.md} +63 -1
- package/reference/smithy.md +533 -0
- package/reference/sql/db-codec-deriver.md +71 -0
- package/reference/sql/db-codec.md +687 -0
- package/reference/sql/db-con.md +271 -0
- package/reference/sql/db-connection.md +153 -0
- package/reference/sql/db-param-writer.md +77 -0
- package/reference/sql/db-param.md +66 -0
- package/reference/sql/db-result-reader.md +146 -0
- package/reference/sql/db-tx.md +82 -0
- package/reference/sql/db-value.md +41 -0
- package/reference/sql/ddl.md +85 -0
- package/reference/sql/frag.md +254 -0
- package/reference/sql/index.md +341 -0
- package/reference/sql/repo.md +600 -0
- package/reference/sql/sql-dialect.md +73 -0
- package/reference/sql/sql-logger.md +62 -0
- package/reference/sql/sql-name-mapper.md +70 -0
- package/reference/sql/table-metadata.md +134 -0
- package/reference/sql/table.md +448 -0
- package/reference/sql/transactor-zio.md +399 -0
- package/reference/sql/transactor.md +353 -0
- package/reference/sql-zio.md +112 -0
- package/reference/streams/concurrent-operators.md +106 -0
- package/reference/streams/index.md +653 -0
- package/reference/streams/pipeline.md +718 -0
- package/reference/streams/reader.md +1284 -0
- package/reference/streams/scala-2-compatibility.md +55 -0
- package/reference/streams/sink.md +1426 -0
- package/reference/streams/stream.md +2526 -0
- package/reference/streams/writer.md +1045 -0
- package/reference/streams/zero-boxing.md +275 -0
- package/reference/telemetry.md +693 -0
- package/reference/typeid.md +2922 -583
- package/sidebars.js +238 -43
- package/superpowers/plans/2026-03-19-docs-critique-subagent.md +407 -0
- package/superpowers/specs/2026-03-19-docs-critique-subagent-design.md +222 -0
- package/reference/formats.md +0 -694
- package/reference/http-model.md +0 -1716
- package/reference/streams.md +0 -989
- package/ringbuffer.md +0 -249
- /package/reference/{json-differ.md → schema/built-in-codecs/json/json-differ.md} +0 -0
- /package/reference/{dynamic-value.md → schema/dynamic-value.md} +0 -0
- /package/reference/{lazy.md → schema/lazy.md} +0 -0
- /package/reference/{reflect.md → schema/reflect.md} +0 -0
- /package/reference/{registers.md → schema/registers.md} +0 -0
- /package/reference/{schema-error.md → schema/schema-error.md} +0 -0
- /package/reference/{syntax.md → schema/syntax.md} +0 -0
- /package/reference/{validation.md → schema/validation.md} +0 -0
|
@@ -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
|