Migrate ConfigKit to its vanity module path

This commit is contained in:
2026-11-01 14:19:37 +00:00
parent 335bd7bc31
commit 587f407a32
184 changed files with 278 additions and 205 deletions

View File

@@ -53,6 +53,8 @@ descriptions and pass `SearchConfig` to the existing load APIs. See the
and [ADR 0019](docs/adr/0019-explicit-configuration-discovery.md). and [ADR 0019](docs/adr/0019-explicit-configuration-discovery.md).
```go ```go
import "go.maximumdirect.net/configkit"
type Config struct { type Config struct {
Enabled bool `yaml:"enabled"` Enabled bool `yaml:"enabled"`
Workers int `yaml:"workers"` Workers int `yaml:"workers"`
@@ -67,6 +69,9 @@ func ReadConfig(path string) (Config, error) {
} }
``` ```
Existing consumers should follow the
[module-path migration guidance](docs/consumers/README.md#vanity-module-path-migration).
## Design philosophy ## Design philosophy
ConfigKit favors one coherent, predictable configuration model over flexibility ConfigKit favors one coherent, predictable configuration model over flexibility

View File

@@ -1,6 +1,6 @@
package configkit package configkit
import "gitea.maximumdirect.net/eric/ConfigKit/internal/engine" import "go.maximumdirect.net/configkit/internal/engine"
func fromEngineLocation(value engine.Location) Location { func fromEngineLocation(value engine.Location) Location {
return Location{SourceID: value.SourceID, Line: value.Line, Column: value.Column} return Location{SourceID: value.SourceID, Line: value.Line, Column: value.Column}

View File

@@ -3,7 +3,7 @@ package configkit
import ( import (
"io" "io"
"gitea.maximumdirect.net/eric/ConfigKit/internal/engine" "go.maximumdirect.net/configkit/internal/engine"
) )
// LoadError reports safe structured diagnostics for a failed configuration load. // LoadError reports safe structured diagnostics for a failed configuration load.

View File

@@ -1,6 +1,6 @@
package configkit package configkit
import "gitea.maximumdirect.net/eric/ConfigKit/internal/engine" import "go.maximumdirect.net/configkit/internal/engine"
// Difference describes one canonical changed region between two successful // Difference describes one canonical changed region between two successful
// loads. Left is the earlier value and Right is the later value. Each snapshot // loads. Left is the earlier value and Right is the later value. Each snapshot

View File

@@ -1,6 +1,6 @@
package configkit package configkit
import "gitea.maximumdirect.net/eric/ConfigKit/internal/engine" import "go.maximumdirect.net/configkit/internal/engine"
// Search is an immutable ordered description of possible host-file inputs. // Search is an immutable ordered description of possible host-file inputs.
// It is consumed only when passed to SearchConfig and used by a load. // It is consumed only when passed to SearchConfig and used by a load.

View File

@@ -6,6 +6,9 @@ applications. Consumers still own their configuration structs, defaults, semanti
validation, schema-version policy, CLI parsing, runtime matching and conversion, validation, schema-version policy, CLI parsing, runtime matching and conversion,
resource checks, remote acquisition, and service initialization. resource checks, remote acquisition, and service initialization.
Import the public root package as `"go.maximumdirect.net/configkit"`; its package
name remains `configkit`.
## Choosing a loading entry point ## Choosing a loading entry point
- Use [`Load`](../../lifecycle.go) with one source for an ordinary configuration. - Use [`Load`](../../lifecycle.go) with one source for an ordinary configuration.
@@ -311,6 +314,26 @@ The examples preserve domain meaning while adopting one configuration convention
blocked empty variables remain blocked, and ordinary `Load` never changes the blocked empty variables remain blocked, and ordinary `Load` never changes the
process environment. process environment.
### Vanity module path migration
ConfigKit's module identifier changed from
`gitea.maximumdirect.net/eric/ConfigKit` to `go.maximumdirect.net/configkit` before
v1.0.0. Update the dependency requirement in your application's `go.mod` and its
Go imports together, selecting a revision or release that declares the new module
path. The package name remains `configkit`; the configuration model and public
symbol names are unchanged by this identity migration.
Old and new import paths identify distinct Go packages, including distinct named
types. Coordinate adoption with any dependencies that exchange ConfigKit values
with your application; changing a requirement alone does not make those types
interchangeable. The maintained examples use the new path, but other repositories
must manage their own migrations.
Historical tags keep their original module declarations and contents. Older
releases such as v0.10.2 still use the old path and cannot be installed under the
vanity identifier simply because discovery can find their repository. A matching
migrated revision is needed; no old-path compatibility module is supplied here.
### Pre-v1 public API cleanup ### Pre-v1 public API cleanup
The pre-v1 API cleanup replaces these names outright; it does not retain The pre-v1 API cleanup replaces these names outright; it does not retain

View File

@@ -7,10 +7,10 @@ container image, generated package, or separate registry publication.
## Release identity and support ## Release identity and support
- Module: `gitea.maximumdirect.net/eric/ConfigKit` - Module: `go.maximumdirect.net/configkit`
- Primary branch: `main` - Primary branch: `main`
- Authoritative remote: `origin` - Authoritative remote: `origin`
- Authoritative push URL: `https://gitea.maximumdirect.net/eric/ConfigKit.git` - Authoritative push URL: `ssh://git@forge.maximumdirect.net:22222/base-layer/configkit.git`
- Tags: stable Semantic Versions such as `v0.5.0`; no prereleases - Tags: stable Semantic Versions such as `v0.5.0`; no prereleases
- Minimum Go version: the first stable patch of the selected Go series, or a - Minimum Go version: the first stable patch of the selected Go series, or a
higher patch when required by a dependency or specific correctness fix, as higher patch when required by a dependency or specific correctness fix, as
@@ -24,6 +24,9 @@ Release validation runs one offline race-enabled Go suite, one full vet pass,
and CGO-disabled package compilation for both Linux targets. macOS and CI are and CGO-disabled package compilation for both Linux targets. macOS and CI are
not release gates; do not wait for or poll CI. not release gates; do not wait for or poll CI.
The vanity module path identifies Go imports. Source/tag browser links and public
Go retrieval use the Forge HTTPS repository independently of SSH publication.
## 1. Select Go and prepare the tool ## 1. Select Go and prepare the tool
Use a clean checkout with Git, Bash 3.2 or newer, and a native compiler for race Use a clean checkout with Git, Bash 3.2 or newer, and a native compiler for race
@@ -91,7 +94,7 @@ executable first on `PATH` through the publication command.
Verify access to the authoritative remote without displaying credentials: Verify access to the authoritative remote without displaying credentials:
```sh ```sh
git ls-remote https://gitea.maximumdirect.net/eric/ConfigKit.git HEAD refs/heads/main git ls-remote ssh://git@forge.maximumdirect.net:22222/base-layer/configkit.git HEAD refs/heads/main
``` ```
Publication requires explicit authorization. Local implementation commits do Publication requires explicit authorization. Local implementation commits do
@@ -111,7 +114,7 @@ Create `docs/releases/<version>.md`. Its first line must be exactly
`# ConfigKit <version>`, and it must end with the license and attribution footer: `# ConfigKit <version>`, and it must end with the license and attribution footer:
```markdown ```markdown
[COPYRIGHT](https://gitea.maximumdirect.net/eric/ConfigKit/src/tag/VERSION/COPYRIGHT) | [LICENSE](https://gitea.maximumdirect.net/eric/ConfigKit/src/tag/VERSION/LICENSE) | [ATTRIBUTION](https://gitea.maximumdirect.net/eric/ConfigKit/src/tag/VERSION/docs/oss/attribution.md) [COPYRIGHT](https://forge.maximumdirect.net/base-layer/configkit/src/tag/VERSION/COPYRIGHT) | [LICENSE](https://forge.maximumdirect.net/base-layer/configkit/src/tag/VERSION/LICENSE) | [ATTRIBUTION](https://forge.maximumdirect.net/base-layer/configkit/src/tag/VERSION/docs/oss/attribution.md)
``` ```
Replace `VERSION` with the full tag and confirm the three target files exist in Replace `VERSION` with the full tag and confirm the three target files exist in
@@ -127,7 +130,7 @@ Push only that committed candidate to the literal authoritative URL. This does
not follow local tags: not follow local tags:
```sh ```sh
git push --no-follow-tags https://gitea.maximumdirect.net/eric/ConfigKit.git HEAD:refs/heads/main git push --no-follow-tags ssh://git@forge.maximumdirect.net:22222/base-layer/configkit.git HEAD:refs/heads/main
``` ```
ReleaseKit requires authoritative `main` to equal this candidate before it ReleaseKit requires authoritative `main` to equal this candidate before it
@@ -228,8 +231,8 @@ consumer_dir=$(mktemp -d)
( (
cd "$consumer_dir" cd "$consumer_dir"
go mod init example.invalid/configkit-release-check go mod init example.invalid/configkit-release-check
GOPRIVATE=gitea.maximumdirect.net GOPROXY=direct go get "gitea.maximumdirect.net/eric/ConfigKit@$release_version" GOWORK=off GOPROXY=direct go get "go.maximumdirect.net/configkit@$release_version"
go list -m -f '{{.Path}} {{.Version}}' gitea.maximumdirect.net/eric/ConfigKit GOWORK=off go list -m -f '{{.Path}} {{.Version}}' go.maximumdirect.net/configkit
) )
``` ```

View File

@@ -1,6 +1,7 @@
# Vanity Module Path Migration # Vanity Module Path Migration
Status: target settled; implementation has not begun. Status: repository implementation complete and locally verified. Exact-revision
remote consumer verification awaits availability of the migrated commit.
Planning baseline: `21c9bc0ad0315c4ac96268b487a52376558a18d7`. Planning baseline: `21c9bc0ad0315c4ac96268b487a52376558a18d7`.
This roadmap defines the target and work needed to adopt This roadmap defines the target and work needed to adopt
@@ -201,3 +202,44 @@ application adoption, and release publication are separate outcomes. No push,
tag, or downstream change is authorized merely by completing this roadmap. tag, or downstream change is authorized merely by completing this roadmap.
No significant open decision remains for this migration. No significant open decision remains for this migration.
## Implementation And Verification
The module declaration and all ConfigKit self-imports now use
`go.maximumdirect.net/configkit`, including internal packages, external-package
tests, maintained examples, and benchmarks. The import-boundary predicates and
root-type reflection expectations use the new prefix. Review of every changed
Go hunk confirmed only the intended module-prefix replacements and publication
URL expectation; no loading behavior or public symbol names changed.
`releasekit.json`, its profile test, and the runbook now use the retained Forge
SSH publication endpoint, matching the existing effective `origin` push URL.
The runbook distinguishes that transport from Forge HTTPS browser links and
vanity-path consumer retrieval. README and the consumer guide identify the new
import path; migration guidance covers named-type identity and historical tags.
The Go minimum, dependency/tool versions, and `go.sum` are unchanged. Historical
release records, accepted ADRs, adopted policies, and upstream attribution were
left intact. Remaining old ConfigKit path references describe the migration's
baseline, consumer upgrade instructions, or historical releases.
Local validation passed on Linux with Go 1.26.10 and cached dependencies:
```sh
GOTOOLCHAIN=local GOPROXY=off GOTELEMETRY=off ./scripts/check.sh
GOTOOLCHAIN=local GOPROXY=off GOTELEMETRY=off go mod tidy -diff
GOTOOLCHAIN=local GOPROXY=off GOTELEMETRY=off go test -race ./...
```
The everyday check included maintained examples, documentation links, root type
ownership, dependency boundaries, and the release profile. Module/package
inspection reported the new main-module identity and no old ConfigKit imports
in the assembled test dependency graph. The module-selected ReleaseKit built
outside the checkout and reported v0.4.2. Module tidiness produced no diff.
No push or release was performed. A fresh remote consumer has not yet installed
the migrated revision, because that revision has not been published to the remote.
The earlier infrastructure checks remain preliminary evidence only. Once the
commit is available through an authorized push, the one-time exact-revision
consumer check described above can verify retrieval and public-API compilation
without a local replacement; it remains separate from release completion.

View File

@@ -6,7 +6,7 @@ import (
"os" "os"
"strings" "strings"
configkit "gitea.maximumdirect.net/eric/ConfigKit" configkit "go.maximumdirect.net/configkit"
) )
func ExampleLoad() { func ExampleLoad() {

View File

@@ -9,7 +9,7 @@ import (
"strings" "strings"
"time" "time"
configkit "gitea.maximumdirect.net/eric/ConfigKit" configkit "go.maximumdirect.net/configkit"
) )
// Artifact is a Narratio-shaped generated output declaration. // Artifact is a Narratio-shaped generated output declaration.

View File

@@ -11,8 +11,8 @@ import (
"strings" "strings"
"testing" "testing"
configkit "gitea.maximumdirect.net/eric/ConfigKit" configkit "go.maximumdirect.net/configkit"
"gitea.maximumdirect.net/eric/ConfigKit/examples/consumers" "go.maximumdirect.net/configkit/examples/consumers"
) )
func Example_narratio() { func Example_narratio() {

View File

@@ -6,7 +6,7 @@ import (
"io/fs" "io/fs"
"path" "path"
configkit "gitea.maximumdirect.net/eric/ConfigKit" configkit "go.maximumdirect.net/configkit"
) )
// CollectionBundleConfig is a representative application-owned collection // CollectionBundleConfig is a representative application-owned collection

View File

@@ -5,8 +5,8 @@ import (
"fmt" "fmt"
"testing" "testing"
configkit "gitea.maximumdirect.net/eric/ConfigKit" configkit "go.maximumdirect.net/configkit"
"gitea.maximumdirect.net/eric/ConfigKit/examples/consumers" "go.maximumdirect.net/configkit/examples/consumers"
) )
func Example_inputDestination() { func Example_inputDestination() {

View File

@@ -5,7 +5,7 @@ import (
"strconv" "strconv"
"strings" "strings"
configkit "gitea.maximumdirect.net/eric/ConfigKit" configkit "go.maximumdirect.net/configkit"
) )
// FileComparisonConfig is a small application-owned shape for comparing // FileComparisonConfig is a small application-owned shape for comparing

View File

@@ -7,8 +7,8 @@ import (
"strings" "strings"
"testing" "testing"
configkit "gitea.maximumdirect.net/eric/ConfigKit" configkit "go.maximumdirect.net/configkit"
"gitea.maximumdirect.net/eric/ConfigKit/examples/consumers" "go.maximumdirect.net/configkit/examples/consumers"
) )
func ExampleCompareFiles() { func ExampleCompareFiles() {

View File

@@ -5,7 +5,7 @@ import (
"os" "os"
"path/filepath" "path/filepath"
configkit "gitea.maximumdirect.net/eric/ConfigKit" configkit "go.maximumdirect.net/configkit"
) )
type workingDirectoryPresetConfig struct { type workingDirectoryPresetConfig struct {

View File

@@ -1,6 +1,6 @@
package consumers package consumers
import configkit "gitea.maximumdirect.net/eric/ConfigKit" import configkit "go.maximumdirect.net/configkit"
// PresetCatalog is ordinary application data; no inheritance fields or // PresetCatalog is ordinary application data; no inheritance fields or
// registration hooks are required in the typed configuration. // registration hooks are required in the typed configuration.

View File

@@ -3,8 +3,8 @@ package consumers_test
import ( import (
"testing" "testing"
configkit "gitea.maximumdirect.net/eric/ConfigKit" configkit "go.maximumdirect.net/configkit"
"gitea.maximumdirect.net/eric/ConfigKit/examples/consumers" "go.maximumdirect.net/configkit/examples/consumers"
) )
func TestPresetCatalogOneLoadAndDerivation(t *testing.T) { func TestPresetCatalogOneLoadAndDerivation(t *testing.T) {

View File

@@ -6,7 +6,7 @@ import (
"io/fs" "io/fs"
"path" "path"
configkit "gitea.maximumdirect.net/eric/ConfigKit" configkit "go.maximumdirect.net/configkit"
) )
//go:embed testdata/native-source testdata/layered-bundle testdata/collection-bundle testdata/ordinary-imports testdata/source-version //go:embed testdata/native-source testdata/layered-bundle testdata/collection-bundle testdata/ordinary-imports testdata/source-version

View File

@@ -6,8 +6,8 @@ import (
"strings" "strings"
"testing" "testing"
configkit "gitea.maximumdirect.net/eric/ConfigKit" configkit "go.maximumdirect.net/configkit"
"gitea.maximumdirect.net/eric/ConfigKit/examples/consumers" "go.maximumdirect.net/configkit/examples/consumers"
) )
func Example_nativeFilesystem() { func Example_nativeFilesystem() {

View File

@@ -3,7 +3,7 @@ package consumers
import ( import (
"strings" "strings"
configkit "gitea.maximumdirect.net/eric/ConfigKit" configkit "go.maximumdirect.net/configkit"
) )
// PromptCatalogConfig is an application-owned prompt collection shape. // PromptCatalogConfig is an application-owned prompt collection shape.

View File

@@ -8,8 +8,8 @@ import (
"path/filepath" "path/filepath"
"testing" "testing"
configkit "gitea.maximumdirect.net/eric/ConfigKit" configkit "go.maximumdirect.net/configkit"
"gitea.maximumdirect.net/eric/ConfigKit/examples/consumers" "go.maximumdirect.net/configkit/examples/consumers"
) )
func Example_identifiedPromptCatalog() { func Example_identifiedPromptCatalog() {

View File

@@ -9,7 +9,7 @@ import (
"path/filepath" "path/filepath"
"strings" "strings"
configkit "gitea.maximumdirect.net/eric/ConfigKit" configkit "go.maximumdirect.net/configkit"
) )
// SequenceCatalogConfig is a source-backed prompt catalog with an application // SequenceCatalogConfig is a source-backed prompt catalog with an application

View File

@@ -8,8 +8,8 @@ import (
"strings" "strings"
"testing" "testing"
configkit "gitea.maximumdirect.net/eric/ConfigKit" configkit "go.maximumdirect.net/configkit"
"gitea.maximumdirect.net/eric/ConfigKit/examples/consumers" "go.maximumdirect.net/configkit/examples/consumers"
) )
func Example_sequenceCatalog() { func Example_sequenceCatalog() {

View File

@@ -4,7 +4,7 @@ import (
"errors" "errors"
"io/fs" "io/fs"
configkit "gitea.maximumdirect.net/eric/ConfigKit" configkit "go.maximumdirect.net/configkit"
) )
// VersionedServiceConfig demonstrates a mounted main input whose source-local // VersionedServiceConfig demonstrates a mounted main input whose source-local

View File

@@ -11,7 +11,7 @@ import (
"strings" "strings"
"testing" "testing"
configkit "gitea.maximumdirect.net/eric/ConfigKit" configkit "go.maximumdirect.net/configkit"
) )
var ( var (
@@ -23,7 +23,7 @@ var (
func TestFacadeValuesRemainRootOwned(t *testing.T) { func TestFacadeValuesRemainRootOwned(t *testing.T) {
t.Parallel() t.Parallel()
const packagePath = "gitea.maximumdirect.net/eric/ConfigKit" const packagePath = "go.maximumdirect.net/configkit"
for _, candidate := range []reflect.Type{ for _, candidate := range []reflect.Type{
reflect.TypeFor[configkit.Path](), reflect.TypeFor[configkit.Source](), reflect.TypeFor[configkit.Path](), reflect.TypeFor[configkit.Source](),
reflect.TypeFor[configkit.Secret](), reflect.TypeFor[configkit.Diagnostic](), reflect.TypeFor[configkit.Secret](), reflect.TypeFor[configkit.Diagnostic](),

View File

@@ -7,7 +7,7 @@ import (
"io" "io"
"testing" "testing"
configkit "gitea.maximumdirect.net/eric/ConfigKit" configkit "go.maximumdirect.net/configkit"
) )
var ( var (

View File

@@ -4,7 +4,7 @@ import (
"testing" "testing"
"testing/fstest" "testing/fstest"
configkit "gitea.maximumdirect.net/eric/ConfigKit" configkit "go.maximumdirect.net/configkit"
) )
func TestOverlayExplanationUsesQueryScopedOrigin(t *testing.T) { func TestOverlayExplanationUsesQueryScopedOrigin(t *testing.T) {

View File

@@ -3,7 +3,7 @@ package configkit_test
import ( import (
"testing" "testing"
configkit "gitea.maximumdirect.net/eric/ConfigKit" configkit "go.maximumdirect.net/configkit"
) )
func TestFacadeInactiveContextsPreserveClosedFailure(t *testing.T) { func TestFacadeInactiveContextsPreserveClosedFailure(t *testing.T) {

View File

@@ -14,7 +14,7 @@ import (
"testing" "testing"
"testing/fstest" "testing/fstest"
configkit "gitea.maximumdirect.net/eric/ConfigKit" configkit "go.maximumdirect.net/configkit"
) )
func TestFacadeInputDestinationsAcrossSourceKinds(t *testing.T) { func TestFacadeInputDestinationsAcrossSourceKinds(t *testing.T) {

View File

@@ -7,7 +7,7 @@ import (
"testing" "testing"
"testing/fstest" "testing/fstest"
configkit "gitea.maximumdirect.net/eric/ConfigKit" configkit "go.maximumdirect.net/configkit"
) )
func TestFacadeCompositionConflictKeepsClaimantOrder(t *testing.T) { func TestFacadeCompositionConflictKeepsClaimantOrder(t *testing.T) {

View File

@@ -7,7 +7,7 @@ import (
"strings" "strings"
"testing" "testing"
configkit "gitea.maximumdirect.net/eric/ConfigKit" configkit "go.maximumdirect.net/configkit"
) )
type facadeDiffConfig struct { type facadeDiffConfig struct {

View File

@@ -5,7 +5,7 @@ import (
"strings" "strings"
"testing" "testing"
configkit "gitea.maximumdirect.net/eric/ConfigKit" configkit "go.maximumdirect.net/configkit"
) )
func TestFinalDynamicTagRedactsEqualValuedResolution(t *testing.T) { func TestFinalDynamicTagRedactsEqualValuedResolution(t *testing.T) {

View File

@@ -9,7 +9,7 @@ import (
"testing" "testing"
"testing/fstest" "testing/fstest"
configkit "gitea.maximumdirect.net/eric/ConfigKit" configkit "go.maximumdirect.net/configkit"
) )
type equivalentConfig struct { type equivalentConfig struct {

View File

@@ -9,7 +9,7 @@ import (
"testing" "testing"
"testing/fstest" "testing/fstest"
configkit "gitea.maximumdirect.net/eric/ConfigKit" configkit "go.maximumdirect.net/configkit"
) )
//go:embed testdata/filesystem //go:embed testdata/filesystem

View File

@@ -5,7 +5,7 @@ import (
"strings" "strings"
"testing" "testing"
"gitea.maximumdirect.net/eric/ConfigKit" "go.maximumdirect.net/configkit"
) )
func TestFinalSequenceIdentityTreatsLateExtendsFieldsAsPayload(t *testing.T) { func TestFinalSequenceIdentityTreatsLateExtendsFieldsAsPayload(t *testing.T) {

View File

@@ -4,7 +4,7 @@ import (
"reflect" "reflect"
"testing" "testing"
configkit "gitea.maximumdirect.net/eric/ConfigKit" configkit "go.maximumdirect.net/configkit"
) )
func TestPublicHistoricalPathsEnumerateContextualShapes(t *testing.T) { func TestPublicHistoricalPathsEnumerateContextualShapes(t *testing.T) {

View File

@@ -8,7 +8,7 @@ import (
"path/filepath" "path/filepath"
"testing" "testing"
configkit "gitea.maximumdirect.net/eric/ConfigKit" configkit "go.maximumdirect.net/configkit"
) )
func TestFacadeNativeDiscoveryPreservesAliasIdentity(t *testing.T) { func TestFacadeNativeDiscoveryPreservesAliasIdentity(t *testing.T) {

View File

@@ -7,7 +7,7 @@ import (
"path/filepath" "path/filepath"
"testing" "testing"
configkit "gitea.maximumdirect.net/eric/ConfigKit" configkit "go.maximumdirect.net/configkit"
) )
func TestFacadeDirectoryRootBelowContainedAbsoluteSymlink(t *testing.T) { func TestFacadeDirectoryRootBelowContainedAbsoluteSymlink(t *testing.T) {

View File

@@ -8,7 +8,7 @@ import (
"testing" "testing"
"testing/fstest" "testing/fstest"
configkit "gitea.maximumdirect.net/eric/ConfigKit" configkit "go.maximumdirect.net/configkit"
) )
type inheritedEntry struct { type inheritedEntry struct {

View File

@@ -5,7 +5,7 @@ import (
"testing" "testing"
"testing/fstest" "testing/fstest"
configkit "gitea.maximumdirect.net/eric/ConfigKit" configkit "go.maximumdirect.net/configkit"
) )
func TestFacadeItemScopesDoNotReinterpretGlobalRegistrations(t *testing.T) { func TestFacadeItemScopesDoNotReinterpretGlobalRegistrations(t *testing.T) {

View File

@@ -4,7 +4,7 @@ import (
"testing" "testing"
"testing/fstest" "testing/fstest"
configkit "gitea.maximumdirect.net/eric/ConfigKit" configkit "go.maximumdirect.net/configkit"
) )
func TestFacadeItemDomainVersionsKeepEffectiveScope(t *testing.T) { func TestFacadeItemDomainVersionsKeepEffectiveScope(t *testing.T) {

View File

@@ -10,7 +10,7 @@ import (
"testing" "testing"
"testing/fstest" "testing/fstest"
configkit "gitea.maximumdirect.net/eric/ConfigKit" configkit "go.maximumdirect.net/configkit"
) )
type layeredFacadeConfig struct { type layeredFacadeConfig struct {

View File

@@ -7,7 +7,7 @@ import (
"testing" "testing"
"testing/fstest" "testing/fstest"
configkit "gitea.maximumdirect.net/eric/ConfigKit" configkit "go.maximumdirect.net/configkit"
) )
type mappingFacadeConfig struct { type mappingFacadeConfig struct {

View File

@@ -4,7 +4,7 @@ import (
"errors" "errors"
"testing" "testing"
configkit "gitea.maximumdirect.net/eric/ConfigKit" configkit "go.maximumdirect.net/configkit"
) )
func TestFacadeResolutionPresenceUsesDynamicEntryShape(t *testing.T) { func TestFacadeResolutionPresenceUsesDynamicEntryShape(t *testing.T) {

View File

@@ -12,7 +12,7 @@ import (
"testing" "testing"
"testing/fstest" "testing/fstest"
configkit "gitea.maximumdirect.net/eric/ConfigKit" configkit "go.maximumdirect.net/configkit"
) )
type observedResourceFS struct { type observedResourceFS struct {

View File

@@ -5,7 +5,7 @@ import (
"strings" "strings"
"testing" "testing"
configkit "gitea.maximumdirect.net/eric/ConfigKit" configkit "go.maximumdirect.net/configkit"
) )
func TestFacadeSequenceIdentitySnapshotsSelectorsAndFields(t *testing.T) { func TestFacadeSequenceIdentitySnapshotsSelectorsAndFields(t *testing.T) {

View File

@@ -9,7 +9,7 @@ import (
"testing" "testing"
"testing/fstest" "testing/fstest"
configkit "gitea.maximumdirect.net/eric/ConfigKit" configkit "go.maximumdirect.net/configkit"
) )
func TestFacadeNoSourcePreservesAbsenceWithSequencePolicy(t *testing.T) { func TestFacadeNoSourcePreservesAbsenceWithSequencePolicy(t *testing.T) {

View File

@@ -5,7 +5,7 @@ import (
"testing" "testing"
"testing/fstest" "testing/fstest"
configkit "gitea.maximumdirect.net/eric/ConfigKit" configkit "go.maximumdirect.net/configkit"
) )
type movedVersionItem struct { type movedVersionItem struct {

View File

@@ -10,7 +10,7 @@ import (
"testing" "testing"
"testing/fstest" "testing/fstest"
configkit "gitea.maximumdirect.net/eric/ConfigKit" configkit "go.maximumdirect.net/configkit"
) )
func TestFacadeSourceVersionEvidenceFollowsAssembledSequenceRanges(t *testing.T) { func TestFacadeSourceVersionEvidenceFollowsAssembledSequenceRanges(t *testing.T) {

View File

@@ -3,7 +3,7 @@ package configkit_test
import ( import (
"testing" "testing"
configkit "gitea.maximumdirect.net/eric/ConfigKit" configkit "go.maximumdirect.net/configkit"
) )
func TestTierHistoryRecordsEachContributionOnce(t *testing.T) { func TestTierHistoryRecordsEachContributionOnce(t *testing.T) {

View File

@@ -5,7 +5,7 @@ import (
"testing" "testing"
"testing/fstest" "testing/fstest"
configkit "gitea.maximumdirect.net/eric/ConfigKit" configkit "go.maximumdirect.net/configkit"
) )
func TestUnderlaySequenceDescendantOrigins(t *testing.T) { func TestUnderlaySequenceDescendantOrigins(t *testing.T) {

View File

@@ -5,7 +5,7 @@ import (
"strings" "strings"
"testing" "testing"
configkit "gitea.maximumdirect.net/eric/ConfigKit" configkit "go.maximumdirect.net/configkit"
) )
type versionCountingReader struct { type versionCountingReader struct {

2
go.mod
View File

@@ -1,4 +1,4 @@
module gitea.maximumdirect.net/eric/ConfigKit module go.maximumdirect.net/configkit
go 1.26.0 go 1.26.0

View File

@@ -44,10 +44,10 @@ func TestDependencyImportBoundary(t *testing.T) {
production := !strings.HasSuffix(path, "_test.go") production := !strings.HasSuffix(path, "_test.go")
rootProduction := production && filepath.Dir(path) == "." rootProduction := production && filepath.Dir(path) == "."
internalProduction := production && strings.HasPrefix(filepath.ToSlash(path), "internal/") internalProduction := production && strings.HasPrefix(filepath.ToSlash(path), "internal/")
if rootProduction && strings.HasPrefix(importPath, "gitea.maximumdirect.net/eric/ConfigKit/internal/") && importPath != "gitea.maximumdirect.net/eric/ConfigKit/internal/engine" { if rootProduction && strings.HasPrefix(importPath, "go.maximumdirect.net/configkit/internal/") && importPath != "go.maximumdirect.net/configkit/internal/engine" {
t.Errorf("%s bypasses the engine boundary through %s", path, importPath) t.Errorf("%s bypasses the engine boundary through %s", path, importPath)
} }
if internalProduction && importPath == "gitea.maximumdirect.net/eric/ConfigKit" { if internalProduction && importPath == "go.maximumdirect.net/configkit" {
t.Errorf("%s imports the public root package", path) t.Errorf("%s imports the public root package", path)
} }
} }

View File

@@ -3,7 +3,7 @@ package configkit
import ( import (
"io" "io"
"gitea.maximumdirect.net/eric/ConfigKit/internal/engine" "go.maximumdirect.net/configkit/internal/engine"
) )
// ValueSnapshot is a detached, deterministic YAML representation of one value. // ValueSnapshot is a detached, deterministic YAML representation of one value.

View File

@@ -4,7 +4,7 @@ import (
"strconv" "strconv"
"testing" "testing"
"gitea.maximumdirect.net/eric/ConfigKit/internal/document" "go.maximumdirect.net/configkit/internal/document"
) )
func BenchmarkComposeWideMappings(b *testing.B) { func BenchmarkComposeWideMappings(b *testing.B) {

View File

@@ -5,7 +5,7 @@ import (
"strings" "strings"
"testing" "testing"
"gitea.maximumdirect.net/eric/ConfigKit/internal/document" "go.maximumdirect.net/configkit/internal/document"
) )
func TestOverlayBroadCollectionPoliciesAndRetainedDeclarations(t *testing.T) { func TestOverlayBroadCollectionPoliciesAndRetainedDeclarations(t *testing.T) {

View File

@@ -3,7 +3,7 @@ package engine
import ( import (
"sort" "sort"
"gitea.maximumdirect.net/eric/ConfigKit/internal/document" "go.maximumdirect.net/configkit/internal/document"
) )
type collectionPolicyScope struct { type collectionPolicyScope struct {

View File

@@ -4,7 +4,7 @@ import (
"reflect" "reflect"
"testing" "testing"
"gitea.maximumdirect.net/eric/ConfigKit/internal/document" "go.maximumdirect.net/configkit/internal/document"
) )
func TestCollectionPolicyWithoutValueRetainsIdentityAndMode(t *testing.T) { func TestCollectionPolicyWithoutValueRetainsIdentityAndMode(t *testing.T) {

View File

@@ -1,6 +1,6 @@
package engine package engine
import "gitea.maximumdirect.net/eric/ConfigKit/internal/document" import "go.maximumdirect.net/configkit/internal/document"
// A true entry replaces the collection itself as well as its descendants; // A true entry replaces the collection itself as well as its descendants;
// false records ordinary ancestor replacement without selecting a collection // false records ordinary ancestor replacement without selecting a collection

View File

@@ -5,7 +5,7 @@ import (
"fmt" "fmt"
"testing" "testing"
"gitea.maximumdirect.net/eric/ConfigKit/internal/document" "go.maximumdirect.net/configkit/internal/document"
) )
func TestSourceReplacementRetiresIdentityForEveryValueKind(t *testing.T) { func TestSourceReplacementRetiresIdentityForEveryValueKind(t *testing.T) {

View File

@@ -3,7 +3,7 @@ package engine
import ( import (
"maps" "maps"
"gitea.maximumdirect.net/eric/ConfigKit/internal/document" "go.maximumdirect.net/configkit/internal/document"
) )
// composedDocument is the private handoff between source assembly and later // composedDocument is the private handoff between source assembly and later

View File

@@ -6,7 +6,7 @@ import (
"strings" "strings"
"testing" "testing"
"gitea.maximumdirect.net/eric/ConfigKit/internal/document" "go.maximumdirect.net/configkit/internal/document"
) )
func TestComposeWideRegisteredCollectionsPreservesEvidenceAndReplay(t *testing.T) { func TestComposeWideRegisteredCollectionsPreservesEvidenceAndReplay(t *testing.T) {

View File

@@ -5,8 +5,8 @@ import (
"reflect" "reflect"
"testing" "testing"
"gitea.maximumdirect.net/eric/ConfigKit/internal/document" "go.maximumdirect.net/configkit/internal/document"
yamladapter "gitea.maximumdirect.net/eric/ConfigKit/internal/yaml" yamladapter "go.maximumdirect.net/configkit/internal/yaml"
) )
func FuzzCompositionAndOverlay(f *testing.F) { func FuzzCompositionAndOverlay(f *testing.F) {

View File

@@ -8,7 +8,7 @@ import (
"strconv" "strconv"
"time" "time"
"gitea.maximumdirect.net/eric/ConfigKit/internal/document" "go.maximumdirect.net/configkit/internal/document"
) )
var integerPattern = regexp.MustCompile(`^-?(0|[1-9][0-9]*)$`) var integerPattern = regexp.MustCompile(`^-?(0|[1-9][0-9]*)$`)

View File

@@ -8,7 +8,7 @@ import (
"testing" "testing"
"time" "time"
"gitea.maximumdirect.net/eric/ConfigKit/internal/document" "go.maximumdirect.net/configkit/internal/document"
) )
type namedSmall int8 type namedSmall int8

View File

@@ -3,7 +3,7 @@ package engine
import ( import (
"errors" "errors"
"gitea.maximumdirect.net/eric/ConfigKit/internal/document" "go.maximumdirect.net/configkit/internal/document"
) )
var ( var (

View File

@@ -6,7 +6,7 @@ import (
"testing" "testing"
"testing/fstest" "testing/fstest"
"gitea.maximumdirect.net/eric/ConfigKit/internal/document" "go.maximumdirect.net/configkit/internal/document"
) )
func TestDestinationPlacementCountsAgainstSharedNodeBudget(t *testing.T) { func TestDestinationPlacementCountsAgainstSharedNodeBudget(t *testing.T) {

View File

@@ -5,7 +5,7 @@ import (
"testing" "testing"
"testing/fstest" "testing/fstest"
"gitea.maximumdirect.net/eric/ConfigKit/internal/document" "go.maximumdirect.net/configkit/internal/document"
) )
type importDestinationConfig struct { type importDestinationConfig struct {

View File

@@ -5,7 +5,7 @@ import (
"reflect" "reflect"
"testing" "testing"
"gitea.maximumdirect.net/eric/ConfigKit/internal/document" "go.maximumdirect.net/configkit/internal/document"
) )
func TestNormalizeDestinationUsesLiteralMappingKeys(t *testing.T) { func TestNormalizeDestinationUsesLiteralMappingKeys(t *testing.T) {

View File

@@ -5,8 +5,8 @@ import (
"errors" "errors"
"io" "io"
"gitea.maximumdirect.net/eric/ConfigKit/internal/document" "go.maximumdirect.net/configkit/internal/document"
yamladapter "gitea.maximumdirect.net/eric/ConfigKit/internal/yaml" yamladapter "go.maximumdirect.net/configkit/internal/yaml"
) )
var errDiffInspectionUnavailable = errors.New("configkit: diff inspection unavailable") var errDiffInspectionUnavailable = errors.New("configkit: diff inspection unavailable")

View File

@@ -3,7 +3,7 @@ package engine
import ( import (
"testing" "testing"
"gitea.maximumdirect.net/eric/ConfigKit/internal/document" "go.maximumdirect.net/configkit/internal/document"
) )
func TestPreparePairedDiffSnapshotReportsWhollyMaskedChanges(t *testing.T) { func TestPreparePairedDiffSnapshotReportsWhollyMaskedChanges(t *testing.T) {

View File

@@ -6,7 +6,7 @@ import (
"strings" "strings"
"testing" "testing"
"gitea.maximumdirect.net/eric/ConfigKit/internal/document" "go.maximumdirect.net/configkit/internal/document"
) )
type diffIntegrationConfig struct { type diffIntegrationConfig struct {

View File

@@ -3,7 +3,7 @@ package engine
import ( import (
"sort" "sort"
"gitea.maximumdirect.net/eric/ConfigKit/internal/document" "go.maximumdirect.net/configkit/internal/document"
) )
type pairedDiffSnapshot struct { type pairedDiffSnapshot struct {

View File

@@ -3,7 +3,7 @@ package engine
import ( import (
"testing" "testing"
"gitea.maximumdirect.net/eric/ConfigKit/internal/document" "go.maximumdirect.net/configkit/internal/document"
) )
func TestPreparePairedDiffSnapshotRedactsAlignedMappingFromEitherSide(t *testing.T) { func TestPreparePairedDiffSnapshotRedactsAlignedMappingFromEitherSide(t *testing.T) {

View File

@@ -3,7 +3,7 @@ package engine
import ( import (
"testing" "testing"
"gitea.maximumdirect.net/eric/ConfigKit/internal/document" "go.maximumdirect.net/configkit/internal/document"
) )
func TestPrepareDiffRegionsUsesCanonicalConfigurationComparison(t *testing.T) { func TestPrepareDiffRegionsUsesCanonicalConfigurationComparison(t *testing.T) {

View File

@@ -4,7 +4,7 @@ import (
"path" "path"
"strings" "strings"
"gitea.maximumdirect.net/eric/ConfigKit/internal/document" "go.maximumdirect.net/configkit/internal/document"
) )
const directiveKey = "configkit" const directiveKey = "configkit"

View File

@@ -2,7 +2,7 @@ package engine
import ( import (
"cmp" "cmp"
"gitea.maximumdirect.net/eric/ConfigKit/internal/document" "go.maximumdirect.net/configkit/internal/document"
"slices" "slices"
) )

View File

@@ -1,6 +1,6 @@
package engine package engine
import "gitea.maximumdirect.net/eric/ConfigKit/internal/document" import "go.maximumdirect.net/configkit/internal/document"
// documentLookup contains read-only mapping positions for a completed document. // documentLookup contains read-only mapping positions for a completed document.
type documentLookup struct { type documentLookup struct {

View File

@@ -1,6 +1,6 @@
package engine package engine
import "gitea.maximumdirect.net/eric/ConfigKit/internal/document" import "go.maximumdirect.net/configkit/internal/document"
// walkDocument visits value nodes in preorder, preserving stored mapping order // walkDocument visits value nodes in preorder, preserving stored mapping order
// and sequence index order. Mapping keys are not separate nodes in this walk. // and sequence index order. Mapping keys are not separate nodes in this walk.

View File

@@ -5,7 +5,7 @@ import (
"reflect" "reflect"
"testing" "testing"
"gitea.maximumdirect.net/eric/ConfigKit/internal/document" "go.maximumdirect.net/configkit/internal/document"
) )
type unsupportedDynamicRoot struct { type unsupportedDynamicRoot struct {

View File

@@ -1,6 +1,6 @@
package engine package engine
import "gitea.maximumdirect.net/eric/ConfigKit/internal/document" import "go.maximumdirect.net/configkit/internal/document"
// ValueSnapshot is a detached, deterministic YAML representation of one value. // ValueSnapshot is a detached, deterministic YAML representation of one value.
// Present distinguishes absence or deletion from an explicit null value. // Present distinguishes absence or deletion from an explicit null value.

View File

@@ -13,7 +13,7 @@ import (
"sync" "sync"
"testing" "testing"
"gitea.maximumdirect.net/eric/ConfigKit/internal/document" "go.maximumdirect.net/configkit/internal/document"
) )
type explanationConcurrency struct { type explanationConcurrency struct {

View File

@@ -1,6 +1,6 @@
package engine package engine
import "gitea.maximumdirect.net/eric/ConfigKit/internal/document" import "go.maximumdirect.net/configkit/internal/document"
func validateFinalSequenceIdentities(root *document.Node, policy sequencePolicy) []Diagnostic { func validateFinalSequenceIdentities(root *document.Node, policy sequencePolicy) []Diagnostic {
if root == nil || policy.selectorTrie == nil { if root == nil || policy.selectorTrie == nil {

View File

@@ -1,7 +1,7 @@
package engine package engine
import ( import (
"gitea.maximumdirect.net/eric/ConfigKit/internal/document" "go.maximumdirect.net/configkit/internal/document"
) )
const historyNodeLimit = 4_000_000 const historyNodeLimit = 4_000_000

View File

@@ -3,7 +3,7 @@ package engine
import ( import (
"testing" "testing"
"gitea.maximumdirect.net/eric/ConfigKit/internal/document" "go.maximumdirect.net/configkit/internal/document"
) )
type historyBudgetSimpleConfig struct { type historyBudgetSimpleConfig struct {

View File

@@ -1,6 +1,6 @@
package engine package engine
import "gitea.maximumdirect.net/eric/ConfigKit/internal/document" import "go.maximumdirect.net/configkit/internal/document"
type historyCheckpointPayload struct { type historyCheckpointPayload struct {
root *document.Node root *document.Node

View File

@@ -3,7 +3,7 @@ package engine
import ( import (
"testing" "testing"
"gitea.maximumdirect.net/eric/ConfigKit/internal/document" "go.maximumdirect.net/configkit/internal/document"
) )
func TestCLIOverrideRecordsTrackConcreteShapeChanges(t *testing.T) { func TestCLIOverrideRecordsTrackConcreteShapeChanges(t *testing.T) {

View File

@@ -1,6 +1,6 @@
package engine package engine
import "gitea.maximumdirect.net/eric/ConfigKit/internal/document" import "go.maximumdirect.net/configkit/internal/document"
type historyInheritancePayload struct { type historyInheritancePayload struct {
operations []inheritanceOperation operations []inheritanceOperation

View File

@@ -1,6 +1,6 @@
package engine package engine
import "gitea.maximumdirect.net/eric/ConfigKit/internal/document" import "go.maximumdirect.net/configkit/internal/document"
type historyPhase uint8 type historyPhase uint8

View File

@@ -1,6 +1,6 @@
package engine package engine
import "gitea.maximumdirect.net/eric/ConfigKit/internal/document" import "go.maximumdirect.net/configkit/internal/document"
// resolutionReplayGroup is the explanation projection of one or more ordered // resolutionReplayGroup is the explanation projection of one or more ordered
// resolution records. The covering record identifies the before/after roots; // resolution records. The covering record identifies the before/after roots;

View File

@@ -4,7 +4,7 @@ import (
"reflect" "reflect"
"testing" "testing"
"gitea.maximumdirect.net/eric/ConfigKit/internal/document" "go.maximumdirect.net/configkit/internal/document"
) )
func TestResolutionSensitivityKeepsLogicalEdgesWithoutSubtreeDuplication(t *testing.T) { func TestResolutionSensitivityKeepsLogicalEdgesWithoutSubtreeDuplication(t *testing.T) {

View File

@@ -4,7 +4,7 @@ import (
"slices" "slices"
"sort" "sort"
"gitea.maximumdirect.net/eric/ConfigKit/internal/document" "go.maximumdirect.net/configkit/internal/document"
) )
type historySelection struct { type historySelection struct {

View File

@@ -5,7 +5,7 @@ import (
"slices" "slices"
"testing" "testing"
"gitea.maximumdirect.net/eric/ConfigKit/internal/document" "go.maximumdirect.net/configkit/internal/document"
) )
func TestSensitivityCandidatesMergeRepeatedParsedPaths(t *testing.T) { func TestSensitivityCandidatesMergeRepeatedParsedPaths(t *testing.T) {

View File

@@ -6,7 +6,7 @@ import (
"strings" "strings"
"testing" "testing"
"gitea.maximumdirect.net/eric/ConfigKit/internal/document" "go.maximumdirect.net/configkit/internal/document"
) )
func TestSequenceHistoryReplaysAppendAtAssignedIndexes(t *testing.T) { func TestSequenceHistoryReplaysAppendAtAssignedIndexes(t *testing.T) {

View File

@@ -1,6 +1,6 @@
package engine package engine
import "gitea.maximumdirect.net/eric/ConfigKit/internal/document" import "go.maximumdirect.net/configkit/internal/document"
type historyPathOrigin struct { type historyPathOrigin struct {
path Path path Path

View File

@@ -4,7 +4,7 @@ import (
"reflect" "reflect"
"testing" "testing"
"gitea.maximumdirect.net/eric/ConfigKit/internal/document" "go.maximumdirect.net/configkit/internal/document"
) )
func TestHistorySourceObservationsPreserveRawAndCompositeDefinitions(t *testing.T) { func TestHistorySourceObservationsPreserveRawAndCompositeDefinitions(t *testing.T) {

View File

@@ -6,8 +6,8 @@ import (
"io/fs" "io/fs"
"strconv" "strconv"
"gitea.maximumdirect.net/eric/ConfigKit/internal/document" "go.maximumdirect.net/configkit/internal/document"
yamladapter "gitea.maximumdirect.net/eric/ConfigKit/internal/yaml" yamladapter "go.maximumdirect.net/configkit/internal/yaml"
) )
type importAdmissionOutcome uint8 type importAdmissionOutcome uint8

View File

@@ -1,6 +1,6 @@
package engine package engine
import "gitea.maximumdirect.net/eric/ConfigKit/internal/document" import "go.maximumdirect.net/configkit/internal/document"
func prependCompositionDiagnosticPaths(diagnostics []Diagnostic, prefix Path) []Diagnostic { func prependCompositionDiagnosticPaths(diagnostics []Diagnostic, prefix Path) []Diagnostic {
cloned := append([]Diagnostic(nil), diagnostics...) cloned := append([]Diagnostic(nil), diagnostics...)

Some files were not shown because too many files have changed in this diff Show More