-
# ConfigKit v0.9.0
released this
2026-10-24 14:50:33 +00:00 | 117 commits to main since this releaseThis 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. AddImportDefaultsto ordinary and layered options, with
authored declarations taking precedence over application defaults. Imports are
optional by default.SourceInfo.ImportSelectionsexposes 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.sequencesdeclarations for collection identity and
replace,append, orupsertoperations, 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, exactSequenceIdentityAtregistrations,
and dynamicSequenceIdentityMatchingselectors. 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:
-
Migrate import requiredness. The YAML
optionalfield is removed and is
rejected. Replaceoptional: truewithrequired: false; omission is equivalent
when the application does not default imports to required. Replace
optional: falsewithrequired: true. Imports that previously relied on
implicit requiredness now needrequired: true, or an application
ImportDefaults.Requireddefault set to true. Review discovery filters:
followandhiddendefault to true, and directory searches select all
filenames unless a pattern is supplied. -
Replace sequence registrations.
SequenceCompositionand
Definition.SequenceCompositionsare removed without compatibility aliases.
For a previous registration atpromptsusingid, 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. -
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: replaceat the relevant destination where replacement is intended.
With append or upsert,[]contributes no records and does not clear the
collection; null is invalid. Usemode: replacewith[]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. -
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. -
Update affected Go literals and diagnostic handling. Use keyed literals
for expanded option and source-information structs. Collection validation adds
CodeSequenceInvalid(sequence.invalid) andCodeSequenceConflict
(sequence.conflict); update diagnostic handling where applicable.
Select this version and rebuild:
go get gitea.maximumdirect.net/eric/ConfigKit@v0.9.0The 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.Downloads
- Extend imports with named-file and directory lists, directory filename patterns,