packages feed

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.