diff --git a/docs/roadmap/configkit.md b/docs/roadmap/configkit.md index 87d9af6..1fd0463 100644 --- a/docs/roadmap/configkit.md +++ b/docs/roadmap/configkit.md @@ -1,8 +1,8 @@ # ConfigKit v1 Adoption And Identified Resource Collections -Status: accepted direction; implementation in progress. The target below includes -the agreed execution-owned normalization adjustment for ConfigKit v1.0.0. -Current consumer documentation remains authoritative for supported behavior. +Status: complete. The implemented result includes the agreed execution-owned +normalization adjustment for ConfigKit v1.0.0. Current consumer documentation +remains authoritative for supported behavior. The companion [implementation plan](implementation.md) owns the ordered sprint steps and validation assignments. @@ -24,9 +24,10 @@ PromptKit interprets the final effective configuration and owns resource meaning ## Pre-Migration Baseline Before this migration, the repository declared Go 1.26.0 and depended on -`gitea.maximumdirect.net/eric/ConfigKit` v0.8.0. The +`gitea.maximumdirect.net/eric/ConfigKit` v0.8.0. The following describes that +historical baseline; the current [format reference](../formats.md) and [source adapter overview](../internal/sources.md) -describe the implemented behavior: +describe the migrated behavior: - Root `prompts`, `profiles`, and `backends` are mappings keyed by local ID. `collections` is a namespace-keyed mapping whose entries contain the same diff --git a/docs/roadmap/implementation.md b/docs/roadmap/implementation.md index 418761f..3c6a31b 100644 --- a/docs/roadmap/implementation.md +++ b/docs/roadmap/implementation.md @@ -1,6 +1,6 @@ # ConfigKit v1 And Identified Resources Implementation Plan -Status: implementation in progress; resume with Stage 11's normalization recovery. +Status: complete. Implement the accepted [feature roadmap](configkit.md) as one end-to-end sprint. Each sequentially numbered stage is one prompt-sized assignment for a Luna @@ -917,6 +917,15 @@ Scope: acceptance review and residual corrections, not another feature stage. Validation: the acceptance trace, integrated checks above, and reviewed final diff establish sprint completion; intermediate checks alone do not. +Completion: traced the dependency, identities, composition, interpretation, +origins, sensitivity, public builders, removed labels, and runtime behavior to +the implementation and owning tests. Added a focused check that nested `config` +remains application data. On Go 1.27.0, the full race-enabled suite, `go vet +./...`, and the three-example semantic checker passed; the added check also +passed under the race detector. Reviewed current-source searches, module graph, +local link targets, formatting, and `git diff --check`. No workspace or local +dependency replacement is committed. Publication remains separate. + ## Open Questions None required to begin the sprint. The accepted roadmap settles module identity, diff --git a/internal/configuration/load_test.go b/internal/configuration/load_test.go index 806ded7..e8c31cb 100644 --- a/internal/configuration/load_test.go +++ b/internal/configuration/load_test.go @@ -360,6 +360,22 @@ func TestLoadRejectsMalformedHeadersAndLegacyResourceMappings(t *testing.T) { } } +func TestNestedConfigRemainsApplicationData(t *testing.T) { + state, err := load(mapping("nested config", map[string]any{ + "config": map[string]any{}, + "profiles": []any{map[string]any{"id": "example", "extra_params": map[string]any{ + "config": map[string]any{"imports": "provider data"}, + }}}, + }), nil) + if err != nil { + t.Fatal(err) + } + profile, err := state.GetProfile(context.Background(), "example") + if err != nil || profile.ResolvedTarget.ExtraParams["config"].(map[string]any)["imports"] != "provider data" { + t.Fatalf("nested application data = %+v, %v", profile, err) + } +} + func TestLoadConsumesAcceptedUnderlayVersionAndValidatesHeaderlessPayload(t *testing.T) { underlay := mapping("declared underlay", map[string]any{ "version": int64(2),