From 2904eadf4fccb76035e5ffba62687ff82e086726 Mon Sep 17 00:00:00 2001 From: Eric Rakestraw Date: Wed, 4 Nov 2026 14:58:20 +0000 Subject: [PATCH] Adopt ConfigKit module and APIs --- docs/roadmap/implementation.md | 6 +++++- integrations/ckconfig/comparison_adapter_test.go | 6 +++--- integrations/ckconfig/comparison_contract_test.go | 2 +- integrations/ckconfig/comparison_input_test.go | 2 +- integrations/ckconfig/comparison_preparation_test.go | 2 +- integrations/ckconfig/completion_test.go | 2 +- integrations/ckconfig/configkit_adapter.go | 2 +- integrations/ckconfig/contracts.go | 2 +- integrations/ckconfig/contracts_adapter_test.go | 2 +- integrations/ckconfig/diff_execution_test.go | 4 ++-- integrations/ckconfig/diff_report.go | 2 +- integrations/ckconfig/diff_report_render_test.go | 4 ++-- integrations/ckconfig/examples/simple/main.go | 2 +- integrations/ckconfig/explain.go | 2 +- integrations/ckconfig/family.go | 2 +- integrations/ckconfig/family_reports_test.go | 2 +- integrations/ckconfig/go.mod | 6 +++--- integrations/ckconfig/go.sum | 4 ++-- integrations/ckconfig/input.go | 2 +- integrations/ckconfig/sources.go | 8 ++++---- integrations/ckconfig/sources_test.go | 8 ++++---- 21 files changed, 38 insertions(+), 34 deletions(-) diff --git a/docs/roadmap/implementation.md b/docs/roadmap/implementation.md index 0ab85c4..444eaa9 100644 --- a/docs/roadmap/implementation.md +++ b/docs/roadmap/implementation.md @@ -1,6 +1,6 @@ # ConfigKit v1.1.0 adoption implementation plan -Status: planned; Stages 1–6 are not started. +Status: Stage 1 complete; Stages 2–6 are not started. This plan is for a Luna coding agent implementing the selected [ConfigKit adoption target](configkit-v1.1.0.md). Follow Stage 1 through Stage 6 @@ -65,6 +65,10 @@ ckprompt or introduce replacements to conceal this temporary mismatch. ## Stage 1: Migrate the dependency, imports, and removed Go APIs +**Completed.** Ckconfig now selects ConfigKit v1.1.0 and Go 1.27.0, with +authentic downloaded sums and migrated imports and native API accesses. An +offline compile of its packages and example passed with Go 1.27.0. + 1. Inspect the worktree and preserve unrelated work. Select Go 1.27.0 on `PATH` and confirm it with `GOWORK=off GOTOOLCHAIN=local go version`. This version was available during planning. Reuse an existing installation, diff --git a/integrations/ckconfig/comparison_adapter_test.go b/integrations/ckconfig/comparison_adapter_test.go index 8aa1ec1..dc73400 100644 --- a/integrations/ckconfig/comparison_adapter_test.go +++ b/integrations/ckconfig/comparison_adapter_test.go @@ -10,8 +10,8 @@ import ( "strings" "testing" - configkit "gitea.maximumdirect.net/eric/ConfigKit" commandkit "go.maximumdirect.net/commandkit" + configkit "go.maximumdirect.net/configkit" ) type adapterSettings struct { @@ -27,7 +27,7 @@ func adapterDefinition() configkit.Definition[adapterSettings] { validation.Warning(configkit.Keys("greeting"), "using the default greeting") } }, - Secret: func(path configkit.Path) bool { return path.String() == "/secret" }, + Sensitive: func(path configkit.Path) bool { return path.String() == "/secret" }, } } @@ -97,7 +97,7 @@ func TestFromConfigKitCompareIgnoresDefaultAndResolutionHistoryForEqualValues(t Resolve: func(value *resolvedSettings, resolution *configkit.Resolution) error { if value.Greeting != "resolved" { value.Greeting = "resolved" - resolution.Record(configkit.Keys("greeting"), configkit.ChangeNormalization, "canonical greeting") + resolution.RecordNormalization(configkit.Keys("greeting"), "canonical greeting") } return nil }, diff --git a/integrations/ckconfig/comparison_contract_test.go b/integrations/ckconfig/comparison_contract_test.go index b1ae191..31961e0 100644 --- a/integrations/ckconfig/comparison_contract_test.go +++ b/integrations/ckconfig/comparison_contract_test.go @@ -7,8 +7,8 @@ import ( "strings" "testing" - configkit "gitea.maximumdirect.net/eric/ConfigKit" commandkit "go.maximumdirect.net/commandkit" + configkit "go.maximumdirect.net/configkit" ) func TestComparisonCapabilitiesAreIndependentAndCaptured(t *testing.T) { diff --git a/integrations/ckconfig/comparison_input_test.go b/integrations/ckconfig/comparison_input_test.go index d4d7968..7d12463 100644 --- a/integrations/ckconfig/comparison_input_test.go +++ b/integrations/ckconfig/comparison_input_test.go @@ -6,8 +6,8 @@ import ( "strings" "testing" - configkit "gitea.maximumdirect.net/eric/ConfigKit" commandkit "go.maximumdirect.net/commandkit" + configkit "go.maximumdirect.net/configkit" ) func TestComparisonSelectionInheritsFieldsIndependently(t *testing.T) { diff --git a/integrations/ckconfig/comparison_preparation_test.go b/integrations/ckconfig/comparison_preparation_test.go index dcc60b9..f841110 100644 --- a/integrations/ckconfig/comparison_preparation_test.go +++ b/integrations/ckconfig/comparison_preparation_test.go @@ -8,8 +8,8 @@ import ( "strings" "testing" - configkit "gitea.maximumdirect.net/eric/ConfigKit" commandkit "go.maximumdirect.net/commandkit" + configkit "go.maximumdirect.net/configkit" ) func TestComparisonPreparesEqualSelectionsWithSeparateTypedInputs(t *testing.T) { diff --git a/integrations/ckconfig/completion_test.go b/integrations/ckconfig/completion_test.go index 2ce0e4a..bf12296 100644 --- a/integrations/ckconfig/completion_test.go +++ b/integrations/ckconfig/completion_test.go @@ -7,8 +7,8 @@ import ( "strings" "testing" - configkit "gitea.maximumdirect.net/eric/ConfigKit" commandkit "go.maximumdirect.net/commandkit" + configkit "go.maximumdirect.net/configkit" ) func TestCompletionUsesInstalledScopeCapabilitiesWithoutAcquisition(t *testing.T) { diff --git a/integrations/ckconfig/configkit_adapter.go b/integrations/ckconfig/configkit_adapter.go index 241e325..2ed4281 100644 --- a/integrations/ckconfig/configkit_adapter.go +++ b/integrations/ckconfig/configkit_adapter.go @@ -7,8 +7,8 @@ import ( "io" "strconv" - configkit "gitea.maximumdirect.net/eric/ConfigKit" commandkit "go.maximumdirect.net/commandkit" + configkit "go.maximumdirect.net/configkit" ) // FromConfigKit adapts a typed ConfigKit loader to all five native diff --git a/integrations/ckconfig/contracts.go b/integrations/ckconfig/contracts.go index 5498356..95dd0c7 100644 --- a/integrations/ckconfig/contracts.go +++ b/integrations/ckconfig/contracts.go @@ -4,8 +4,8 @@ import ( "context" "io" - configkit "gitea.maximumdirect.net/eric/ConfigKit" commandkit "go.maximumdirect.net/commandkit" + configkit "go.maximumdirect.net/configkit" ) // Selection carries the configuration and overlay choices supplied for a diff --git a/integrations/ckconfig/contracts_adapter_test.go b/integrations/ckconfig/contracts_adapter_test.go index a134409..55525a5 100644 --- a/integrations/ckconfig/contracts_adapter_test.go +++ b/integrations/ckconfig/contracts_adapter_test.go @@ -9,8 +9,8 @@ import ( "strings" "testing" - configkit "gitea.maximumdirect.net/eric/ConfigKit" commandkit "go.maximumdirect.net/commandkit" + configkit "go.maximumdirect.net/configkit" ) func TestWithScopeErrorCopiesAndRetainsCauses(t *testing.T) { diff --git a/integrations/ckconfig/diff_execution_test.go b/integrations/ckconfig/diff_execution_test.go index 0a08c35..8791045 100644 --- a/integrations/ckconfig/diff_execution_test.go +++ b/integrations/ckconfig/diff_execution_test.go @@ -9,8 +9,8 @@ import ( "strings" "testing" - configkit "gitea.maximumdirect.net/eric/ConfigKit" commandkit "go.maximumdirect.net/commandkit" + configkit "go.maximumdirect.net/configkit" "go.yaml.in/yaml/v4" ) @@ -273,7 +273,7 @@ func TestConfigDiffExecutesConcealedChangesAndEmptyResults(t *testing.T) { if selection.Config.Set && selection.Config.Value == "after" { value = "changed-secret" } - return configkit.Load(configkit.Mapping("selected", map[string]any{"secret": value}), configkit.Options[settings]{Definition: configkit.Definition[settings]{Secret: func(path configkit.Path) bool { return path.String() == "/secret" }}}) + return configkit.Load(configkit.Mapping("selected", map[string]any{"secret": value}), configkit.Options[settings]{Definition: configkit.Definition[settings]{Sensitive: func(path configkit.Path) bool { return path.String() == "/secret" }}}) })) var output bytes.Buffer outcome := app.Execute(context.Background(), []string{"config", "diff", "--config", "before", "--against-config", "after"}, commandkit.Streams{Out: &output, Err: io.Discard}) diff --git a/integrations/ckconfig/diff_report.go b/integrations/ckconfig/diff_report.go index 48190e0..4fe87b0 100644 --- a/integrations/ckconfig/diff_report.go +++ b/integrations/ckconfig/diff_report.go @@ -5,7 +5,7 @@ import ( "fmt" "strings" - configkit "gitea.maximumdirect.net/eric/ConfigKit" + configkit "go.maximumdirect.net/configkit" "go.yaml.in/yaml/v4" ) diff --git a/integrations/ckconfig/diff_report_render_test.go b/integrations/ckconfig/diff_report_render_test.go index 93a07c3..577afac 100644 --- a/integrations/ckconfig/diff_report_render_test.go +++ b/integrations/ckconfig/diff_report_render_test.go @@ -6,7 +6,7 @@ import ( "strings" "testing" - configkit "gitea.maximumdirect.net/eric/ConfigKit" + configkit "go.maximumdirect.net/configkit" "go.yaml.in/yaml/v4" ) @@ -119,7 +119,7 @@ func TestRenderDiffReportPreservesNativeMasksAndMarkerLookingStrings(t *testing. Public string `yaml:"public"` Secret string `yaml:"secret"` } - definition := configkit.Definition[settings]{Secret: func(path configkit.Path) bool { return path.String() == "/secret" }} + definition := configkit.Definition[settings]{Sensitive: func(path configkit.Path) bool { return path.String() == "/secret" }} load := func(public, secret string) *configkit.Result[settings] { result, err := configkit.Load(configkit.Mapping("configuration", map[string]any{"public": public, "secret": secret}), configkit.Options[settings]{Definition: definition}) if err != nil { diff --git a/integrations/ckconfig/examples/simple/main.go b/integrations/ckconfig/examples/simple/main.go index 1bf84e6..b899018 100644 --- a/integrations/ckconfig/examples/simple/main.go +++ b/integrations/ckconfig/examples/simple/main.go @@ -7,9 +7,9 @@ import ( "os" "strconv" - configkit "gitea.maximumdirect.net/eric/ConfigKit" "go.maximumdirect.net/ckconfig" commandkit "go.maximumdirect.net/commandkit" + configkit "go.maximumdirect.net/configkit" ) type appConfiguration struct { diff --git a/integrations/ckconfig/explain.go b/integrations/ckconfig/explain.go index 8f354ce..8983234 100644 --- a/integrations/ckconfig/explain.go +++ b/integrations/ckconfig/explain.go @@ -5,8 +5,8 @@ import ( "fmt" "io" - configkit "gitea.maximumdirect.net/eric/ConfigKit" commandkit "go.maximumdirect.net/commandkit" + configkit "go.maximumdirect.net/configkit" ) type explanationReport struct { diff --git a/integrations/ckconfig/family.go b/integrations/ckconfig/family.go index 47f0b27..9fcefd1 100644 --- a/integrations/ckconfig/family.go +++ b/integrations/ckconfig/family.go @@ -9,8 +9,8 @@ import ( "sort" "strings" - configkit "gitea.maximumdirect.net/eric/ConfigKit" commandkit "go.maximumdirect.net/commandkit" + configkit "go.maximumdirect.net/configkit" ) type scopeMetadata struct { diff --git a/integrations/ckconfig/family_reports_test.go b/integrations/ckconfig/family_reports_test.go index a29967b..26305a6 100644 --- a/integrations/ckconfig/family_reports_test.go +++ b/integrations/ckconfig/family_reports_test.go @@ -9,8 +9,8 @@ import ( "strings" "testing" - configkit "gitea.maximumdirect.net/eric/ConfigKit" commandkit "go.maximumdirect.net/commandkit" + configkit "go.maximumdirect.net/configkit" ) func TestScopeDiscoveryIsOrderedAndDoesNotUseSuiteFactories(t *testing.T) { diff --git a/integrations/ckconfig/go.mod b/integrations/ckconfig/go.mod index b748bc4..7fa931b 100644 --- a/integrations/ckconfig/go.mod +++ b/integrations/ckconfig/go.mod @@ -1,9 +1,10 @@ module go.maximumdirect.net/ckconfig -go 1.26.0 +go 1.27.0 require ( - gitea.maximumdirect.net/eric/ConfigKit v0.8.0 + go.maximumdirect.net/commandkit v0.3.0 + go.maximumdirect.net/configkit v1.1.0 go.yaml.in/yaml/v4 v4.0.0-rc.6 ) @@ -11,5 +12,4 @@ require ( github.com/inconshreveable/mousetrap v1.1.0 // indirect github.com/spf13/cobra v1.10.1 // indirect github.com/spf13/pflag v1.0.9 // indirect - go.maximumdirect.net/commandkit v0.3.0 ) diff --git a/integrations/ckconfig/go.sum b/integrations/ckconfig/go.sum index e4e852e..d54f287 100644 --- a/integrations/ckconfig/go.sum +++ b/integrations/ckconfig/go.sum @@ -1,5 +1,3 @@ -gitea.maximumdirect.net/eric/ConfigKit v0.8.0 h1:xCIhYnOHjw7rFvB+vIremPKGeROOxKTomnUEUipuQno= -gitea.maximumdirect.net/eric/ConfigKit v0.8.0/go.mod h1:C82sbyKHYMV1OwaD2GJanFrwTfcZfjlW2JsGze5b0kA= github.com/cpuguy83/go-md2man/v2 v2.0.6/go.mod h1:oOW0eioCTA6cOiMLiUPZOpcVxMig6NIQQ7OS05n1F4g= github.com/inconshreveable/mousetrap v1.1.0 h1:wN+x4NVGpMsO7ErUn/mUI3vEoE6Jt13X2s0bqwp9tc8= github.com/inconshreveable/mousetrap v1.1.0/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw= @@ -10,6 +8,8 @@ github.com/spf13/pflag v1.0.9 h1:9exaQaMOCwffKiiiYk6/BndUBv+iRViNW+4lEMi0PvY= github.com/spf13/pflag v1.0.9/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= go.maximumdirect.net/commandkit v0.3.0 h1:RCmg2GS8uzlLSJCIqarpn1uFDec0W3ylNNRRPT6kUFE= go.maximumdirect.net/commandkit v0.3.0/go.mod h1:ZS98DewKNVBygKVDoh5MFD09CnPlP37dS9pVsID5Eoc= +go.maximumdirect.net/configkit v1.1.0 h1:UzXN2ZMnEkcL0O4YSLqD9qd9M1gb/NWCHQR/H8AaQzA= +go.maximumdirect.net/configkit v1.1.0/go.mod h1:s1zLJ9GGB/1Q4a+aOHMLISonJxWFgNWpA6SpPlOafeA= go.yaml.in/yaml/v4 v4.0.0-rc.6 h1:1h7H1ohdUh93/FyE4YaDa1Zh64K6VVbjF4K6WUxMtH4= go.yaml.in/yaml/v4 v4.0.0-rc.6/go.mod h1:aZqd9kCMsGL7AuUv/m/PvWLdg5sjJsZ4oHDEnfPPfY0= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= diff --git a/integrations/ckconfig/input.go b/integrations/ckconfig/input.go index 3b08319..d7d22e0 100644 --- a/integrations/ckconfig/input.go +++ b/integrations/ckconfig/input.go @@ -4,8 +4,8 @@ import ( "fmt" "strings" - configkit "gitea.maximumdirect.net/eric/ConfigKit" commandkit "go.maximumdirect.net/commandkit" + configkit "go.maximumdirect.net/configkit" ) type configCommandInput[I, S any] struct { diff --git a/integrations/ckconfig/sources.go b/integrations/ckconfig/sources.go index 033ed08..fa56423 100644 --- a/integrations/ckconfig/sources.go +++ b/integrations/ckconfig/sources.go @@ -6,8 +6,8 @@ import ( "io" "strconv" - configkit "gitea.maximumdirect.net/eric/ConfigKit" commandkit "go.maximumdirect.net/commandkit" + configkit "go.maximumdirect.net/configkit" "go.yaml.in/yaml/v4" ) @@ -89,7 +89,7 @@ func runConfigSources[I, S any](invocation commandkit.Invocation, plan *configOp Path: source.Path, Destination: source.Destination.String(), Placement: placement, - DestinationUnresolved: source.DestinationUnresolved, + DestinationUnresolved: source.DestinationIsFallback, Layer: string(source.Layer), Kind: string(source.Kind), UnderlayIndex: source.UnderlayIndex, @@ -97,8 +97,8 @@ func runConfigSources[I, S any](invocation commandkit.Invocation, plan *configOp if source.ImportedFrom != nil { item.ImportedFrom = &locationDTO{SourceID: source.ImportedFrom.SourceID, Line: source.ImportedFrom.Line, Column: source.ImportedFrom.Column} } - if source.VersionCheck != nil { - check := source.VersionCheck + if source.VersionEvidence != nil { + check := source.VersionEvidence item.VersionCheck = &sourceVersionCheckDTO{ Path: check.Path.String(), Version: versionDTO{ diff --git a/integrations/ckconfig/sources_test.go b/integrations/ckconfig/sources_test.go index e9afc3b..17dea6b 100644 --- a/integrations/ckconfig/sources_test.go +++ b/integrations/ckconfig/sources_test.go @@ -8,8 +8,8 @@ import ( "strings" "testing" - configkit "gitea.maximumdirect.net/eric/ConfigKit" commandkit "go.maximumdirect.net/commandkit" + configkit "go.maximumdirect.net/configkit" "go.yaml.in/yaml/v4" ) @@ -39,8 +39,8 @@ func TestSourcesProjectNativeEvidenceInTextAndYAML(t *testing.T) { { ID: "item", Label: "sequence item", Path: "item.yml", Destination: servicePath, PlacementMode: configkit.PlacementModeSequenceItem, - DestinationUnresolved: true, - VersionCheck: &configkit.SourceVersionCheck{ + DestinationIsFallback: true, + VersionEvidence: &configkit.SourceVersionEvidence{ Path: versionPath, Version: configkit.Version{Present: true, Text: "v2"}, Location: &configkit.Location{SourceID: "item.yml", Line: 4, Column: 2}, @@ -49,7 +49,7 @@ func TestSourcesProjectNativeEvidenceInTextAndYAML(t *testing.T) { { ID: "null", Label: "null version", Path: "null.yml", Destination: otherPath, PlacementMode: configkit.PlacementModeMapping, - VersionCheck: &configkit.SourceVersionCheck{ + VersionEvidence: &configkit.SourceVersionEvidence{ Path: nullVersionPath, Version: configkit.Version{Present: true, Null: true}, Redacted: true,