• v0.9.0 7ff204bf3d

    # ConfigKit v0.9.0

    eric released this 2026-10-24 14:50:33 +00:00 | 117 commits to main since this release

    This minor release expands import selection, adds author-declared collection
    identity and operations, and supports inheritance between identified records.
    It also moves CLI assignments after inheritance and typed decoding. These changes
    include breaking API and configuration behavior changes from v0.8.0; review the
    migration guidance below before upgrading.

    Changes

    • Extend imports with named-file and directory lists, directory filename patterns,
      exclusions, recursion and depth controls, and explicit hidden-file and symlink
      discovery controls. Add ImportDefaults to ordinary and layered options, with
      authored declarations taking precedence over application defaults. Imports are
      optional by default. SourceInfo.ImportSelections exposes completed optional
      declarations that selected no sources. See the
      import contract and
      consumer guidance.
    • Use shared dependency-ready ordering for import composition and sibling
      inheritance. Dependencies complete before dependents, with deterministic
      selection among currently eligible contributions. Source acquisition and
      callback order remain separate from assembly order. See the
      ordering decision.
    • Add root configkit.sequences declarations for collection identity and
      replace, append, or upsert operations, including in selected overlays.
      Strict peers combine distinct identities and reject duplicates; precedence
      and inheritance apply the destination's collection operation. Upsert replaces
      a whole matching record at its retained position. Identity supports compound
      field sets and scalar strings, numbers, booleans, and null. See the
      collection contract.
    • Add Definition.SequenceIdentities, exact SequenceIdentityAt registrations,
      and dynamic SequenceIdentityMatching selectors. Application registrations
      govern structural collection operations and check existing matching final
      typed sequences, including values from defaults, CLI assignments, and
      application resolution. YAML-only declarations govern structural operations
      without adding that final-result check.
    • Support record inheritance within an identified sequence using an extends
      mapping containing the parent's complete identity. The child retains its own
      identity, relationships use surviving assembled records, and output sequence
      order is preserved. See sibling inheritance
      and the maintained sequence catalog.
    • Apply explicit CLI overrides to the decoded configuration before application
      resolution. Mappings retain omitted fields and their presence metadata;
      sequences replace whole lists independently of collection operations. See the
      CLI contract.
    • Correct native import alias and contained-symlink handling, source-version
      path projection, and provenance/history through collection movement,
      replacement, inheritance, and CLI assignment. Reduce repeated scans,
      accumulated policy copying, and sparse-projection storage during construction.

    Compatibility and upgrade

    This pre-v1 minor release intentionally changes the v0.8.0 contracts:

    1. Migrate import requiredness. The YAML optional field is removed and is
      rejected. Replace optional: true with required: false; omission is equivalent
      when the application does not default imports to required. Replace
      optional: false with required: true. Imports that previously relied on
      implicit requiredness now need required: true, or an application
      ImportDefaults.Required default set to true. Review discovery filters:
      follow and hidden default to true, and directory searches select all
      filenames unless a pattern is supplied.

    2. Replace sequence registrations. SequenceComposition and
      Definition.SequenceCompositions are removed without compatibility aliases.
      For a previous registration at prompts using id, use:

      rules.SequenceIdentities = []configkit.SequenceIdentity{
          configkit.SequenceIdentityAt(configkit.Keys("prompts"), "id"),
      }
      

      These registrations now also enforce identity in final typed sequences. Fix
      missing or duplicate identities introduced by defaults, CLI assignments, or
      application resolution. Registration does not require a collection to exist
      or determine its allowed shape; schema and application validation retain
      those responsibilities.

    3. Review collection precedence and ordering. An identified collection now
      defaults to upsert across layers and inheritance when no explicit mode
      applies, rather than unconditional whole-sequence replacement. Declare
      mode: replace at the relevant destination where replacement is intended.
      With append or upsert, [] contributes no records and does not clear the
      collection; null is invalid. Use mode: replace with [] to clear it.
      An explicit mode persists at its destination until changed; a parent's mode
      does not transfer to a different inheriting destination. Unidentified
      sequences retain strict peer conflicts and whole-value precedence
      replacement. Dependency-ready assembly can change sequence positions and
      diagnostic or history order compared with the former traversal order.

    4. Review CLI recovery and inheritance assumptions. CLI overrides can no
      longer repair values that fail earlier decoding, bypass source or inheritance
      errors, or add or cancel inheritance relationships. Supply structural
      directives in source configuration. Application resolution still receives
      explicit CLI values and may record subsequent normalization or derivation.

    5. Update affected Go literals and diagnostic handling. Use keyed literals
      for expanded option and source-information structs. Collection validation adds
      CodeSequenceInvalid (sequence.invalid) and CodeSequenceConflict
      (sequence.conflict); update diagnostic handling where applicable.

    Select this version and rebuild:

    go get gitea.maximumdirect.net/eric/ConfigKit@v0.9.0
    

    The consumer minimum remains Go 1.26.0. The YAML dependency remains
    go.yaml.in/yaml/v4 v4.0.0-rc.6, and the maintainer tool dependency remains
    ReleaseKit v0.4.1. Linux amd64 and arm64 remain release-validated targets;
    macOS remains best-effort. Publication follows the existing
    release procedure.

    COPYRIGHT | LICENSE | ATTRIBUTION

    Downloads