Add ConfigKit comparison acquisition

This commit is contained in:
2026-10-11 21:47:16 +00:00
parent d2434b9580
commit 3542422b2f
4 changed files with 408 additions and 14 deletions

View File

@@ -1,10 +1,11 @@
# Implement ConfigKit adoption and configuration comparison
Status: implementation plan; no implementation stages are complete.
Status: implementation in progress; Stages 1–5 are complete.
## Scope and authority
Follow the stages in order, starting with Stage 1. Each stage is sized for one
Follow the stages in order, starting with the first stage without completion
evidence. Each stage is sized for one
Luna implementation assignment. The [feature roadmap](configkit.md) owns the
selected end state, operator behavior, target API, and scope limits. This document
owns the steps to reach that state. Read [development guidance](../development.md)
@@ -257,14 +258,19 @@ This is the selected internal coordination for the adapter, not a new policy
for application-supplied pair callbacks. Tests should protect diagnostic retention
and required lifecycle boundaries, not an incidental number of context polls.
**Completion evidence:** direct adapter tests with real ConfigKit loads for
public changes, base-versus-overlay loading, equal effective values,
defaults/resolution, and paired-safe concealed changes. Test right failure
retaining left warnings, wrapped load-error identity, nil results, and
cancellation between loads. Exercise a native
comparison error with a non-nil uninitialized result and retain available
diagnostics. Do not build a global fake comparator just to force an unreachable
branch; handler-level provider errors can carry diagnostics from both sides.
**Completion evidence — complete:** `FromConfigKit` now declares all five
operations and wires its typed comparison callback to sequentially load both
selected sides with the same state, then return `configkit.Diff` records. The
adapter keeps successful and `LoadError` diagnostics in left-to-right order,
labels comparison diagnostics by side, checks cancellation at the selected
boundaries, and wraps load/native comparison failures with their causes intact.
Direct tests use real ConfigKit loads for public changes, base-versus-overlay
loading, equal values after defaults and resolution, and safe concealed-change
records. They also cover both sides' diagnostics when the right load fails,
wrapped `LoadError` identity, nil results, cancellation between loads, and a
native Diff error from a non-nil uninitialized result while retaining available
diagnostics. Ordinary `Acquire` diagnostics and error identity remain covered
and unchanged. `go test -count=1 ./...` passes in ckconfig and ckp.
## Stage 6: Implement safe YAML snapshot and semantic-path placement helpers