settei-0.3.0.0: CHANGELOG.md
# Changelog for settei
## 0.3.0.0 — 2026-10-21
### Breaking Changes
- Add `InvariantError` to `ConfigError`; update exhaustive matches. Version-1 error JSON
gains kind `invariant`. Use the `settei-upgrade` Seihou blueprint to migrate from
0.2.0.0 (`seihou agent migrate settei-upgrade`).
### New Features
- Add `Settei.Validate`: checked opaque rule collections, ordered accumulation,
prerequisite skipping, role composition, and `ValidatedResult` preserving provenance.
Validator metadata must be safe to publish; details are not automatically sanitised.
- Add validation report types, `renderValidationText`, and
`renderValidatedResolutionJson`. Validated resolution JSON gains an `invariants` array
(empty when no rules are declared). Existing bare report output is unchanged.
- Add public `Settei.Contract` and re-export it from `Settei`: adapter-neutral input
bindings, explicit default sources, deployment profiles, occurrence-aware input
verdicts, and safe default availability/provenance metadata.
- Add `renderContractText` and version 1 `settei.contract` JSON via `renderContractJson`.
Existing schema and resolution JSON are unchanged. Derived/case computations remain
deferred; secret defaults are redacted before storage.
### Other Changes
- Share cycle preflight through an internal module; resolver behavior is unchanged.
- All family packages move to 0.3.0.0 with exact intra-family pins.
## 0.2.0.0 — 2026-07-19
- `Settei.Prelude` is now documented as internal to the settei package family and is
excluded from the PVP-stable public surface; adopters should import the documented
public modules instead. Its exports track the `lens` package and may change in any
release.
- Add a `Functor` instance for `Decoder`; a newtype-wrapping decoder is now
`SecretText <$> textDecoder`.
- Add decoder combinators `listDecoder`, `nonEmptyDecoder`, `parsedDecoder`,
`rationalDecoder`, and `doubleDecoder`, all preserving the secret-safe
failure contract (failures carry only the setting key and an expectation).
- `boundedIntegralDecoder` failures now state the accepted range, for example
`integer between -32768 and 32767`.
- Document `enumDecoder`'s case-sensitive matching.
- Add `whenConfig`, `whenEq`, and `fallbackTo` to `Settei.Config`. Each combinator
desugars to the existing `Functor` and `Selective` operations without changing the
inspectable declaration algebra.
- Add `publicShowSetting` and `withRenderer` to `Settei.Setting` for concise typed-default
rendering; secret settings continue to redact regardless of attached renderers.
- The text renderer's Kubernetes suffix appends `(modified TIME)` when an origin carries
the `kubernetes.file-modified` annotation. JSON output is unchanged because it already
emits the full annotation map.
## 0.1.0.0 — 2026-07-19
- Initial experimental release.
- Add inspectable Applicative and Selective configuration declarations.
- Add hierarchical resolution, ordered provenance, named defaults, secret-safe errors,
static schemas, and versioned text and JSON reports.
- Merge duplicate setting sensitivities most-restrictively in schemas and reports, so a
key declared `Secret` anywhere cannot be weakened by a conflicting `Public`
declaration; add `redactReportedValue` as a one-way collapse of any retained display
representation to the redaction marker.
- Add the structured `SensitivityConflict` resolution error for mixed-sensitivity keys,
rendered in JSON with the additive `sensitivity-conflict` kind.
- Breaking: `resolve` now returns `ResolveResult` unconditionally. The typed outcome
moved to its `answer` field, while the provenance report and warnings are available
for every resolution attempt, including failures.
- Make repeated `annotateSource` calls merge source-wide annotations, with annotations
from later calls winning on name collisions.
- Add `sourceFromPairs`, `SourceConstructionError`, and
`sourceUnaddressableLeaves` for validated custom-source construction and inspection.
- Render exact terminating rational values as decimals in reports while retaining exact
fraction notation for non-terminating values.