diff --git a/docs/releases/v0.10.2.md b/docs/releases/v0.10.2.md new file mode 100644 index 0000000..27c5d37 --- /dev/null +++ b/docs/releases/v0.10.2.md @@ -0,0 +1,70 @@ +# ConfigKit v0.10.2 + +This patch release fixes edge-case loading failures, resource cleanup, and limit +accounting, and simplifies ConfigKit's internal loading machinery. Public APIs +and documented configuration semantics remain unchanged from v0.10.1. + +## Fixes + +- Terminate pointer-only recursive type traversal safely during decoding and + schema-path resolution, preserving nullable values and supported recursive + structures. Roll back failed dynamic descriptor construction so subsequent + operations do not reuse incomplete state or panic. +- Accept finite, non-cyclic slice views that share backing storage while + retaining cycle detection and detached output. +- Deactivate resolution, validation, and version-check contexts when callbacks + panic, and close library-owned import roots during panic unwinding. The + original application panic continues to propagate. +- Report directory enumeration and close failures instead of treating them as + optional absence, including failures reported as not-exist after a successful + open. Genuinely missing optional directories retain their existing behavior. +- Reuse completed symlink dependencies during host and native import discovery, + avoiding exponential repeated expansion of finite link graphs while retaining + cycle detection and containment checks. +- Check existing projection budgets before bulk container allocation and account + for the complete retained inspection-history graph, including replay and + separately copied inheritance evidence. +- Apply the documented append/upsert sequence requirements to non-sequence + contributions at retained collection-policy destinations. + +## Internal improvements + +- Index collection-policy retirement and prepare sparse incoming policy changes + instead of repeatedly scanning or copying unrelated retained policy. +- Reuse successful dynamic-type eligibility checks within an operation and index + tier-history lookups, compound identity restoration, and secret-failure source + attribution to avoid repeated scans. +- Remove unused snapshots, evidence, helpers, fields, and test-only production + paths. Clarify acquisition handoffs and separate collection preparation, + application, and finalization while sharing sequence-history construction. +- Separate patterned glob entry preparation from traversal. Consolidate engine + import defaults, snapshot them during load preflight, and construct placement + directly across the facade while keeping public types root-owned. +- Add regression coverage for the corrected failures, public historical paths, + defaults snapshots, and resource ownership. Strengthen fuzz detachment checks + and replace redundant or implementation-coupled assertions. +- Update release tooling from ReleaseKit v0.4.1 to v0.4.2. + +These changes remove redundant work and improve scaling in the identified paths; +no end-to-end performance improvement has been quantified. + +## Compatibility and upgrade + +No consumer API or configuration-format migration is required. The +[configuration contract](../config.md) remains authoritative. + +Loads that previously succeeded despite directory acquisition failures, invalid +append/upsert contributions, or incomplete retained-history accounting may now +return the documented structured errors. These corrections enforce existing +requirements and limits rather than introducing new ones. + +Select this version and rebuild: + +```sh +go get gitea.maximumdirect.net/eric/ConfigKit@v0.10.2 +``` + +The consumer minimum remains Go 1.26.0. The YAML dependency and platform support +are unchanged. Publication follows the existing [release procedure](../release.md). + +[COPYRIGHT](https://gitea.maximumdirect.net/eric/ConfigKit/src/tag/v0.10.2/COPYRIGHT) | [LICENSE](https://gitea.maximumdirect.net/eric/ConfigKit/src/tag/v0.10.2/LICENSE) | [ATTRIBUTION](https://gitea.maximumdirect.net/eric/ConfigKit/src/tag/v0.10.2/docs/oss/attribution.md)