4 Commits
v0.3.0 ... main

65 changed files with 241 additions and 131 deletions

View File

@@ -19,13 +19,11 @@ defines the shared visibility policy.
| Module | Package | Provides |
| --- | --- | --- |
| `go.maximumdirect.net/commandkit` | `commandkit` | Typed commands, bindings, execution reporting and outcomes, help, and version. |
| `gitea.maximumdirect.net/eric/CommandKit/integrations/ckconfig` | `ckconfig` | ConfigKit-backed `config` scopes, including configuration source evidence. |
| `gitea.maximumdirect.net/eric/CommandKit/integrations/ckprompt` | `ckprompt` | PromptKit engine configuration/comparison, five catalogs, named inspection, requirements discovery, concrete request validation, and native smoke tests. |
| `go.maximumdirect.net/ckconfig` | `ckconfig` | ConfigKit-backed `config` scopes, including configuration source evidence. |
| `go.maximumdirect.net/ckprompt` | `ckprompt` | PromptKit engine configuration/comparison, five catalogs, named inspection, requirements discovery, concrete request validation, and native smoke tests. |
Importing an integration does not install commands. The integrations currently
use the old core module identity and cannot be composed with the new core path.
The planned matched releases are `go.maximumdirect.net/ckconfig v0.2.0` and
`go.maximumdirect.net/ckprompt v0.2.0`, using core v0.3.0. See the
Importing an integration does not install commands. The matched ckconfig and
ckprompt v0.2.0 modules use core v0.3.0. See the
[consumer guide](docs/consumers/guide.md#module-selection) for migration details.
## Examples

View File

@@ -12,16 +12,15 @@ installed at the application root, not as group children.
| Import | Use when |
| --- | --- |
| `go.maximumdirect.net/commandkit` | The application needs typed command declarations and common CLI behavior. |
| `gitea.maximumdirect.net/eric/CommandKit/integrations/ckconfig` | The application wants ConfigKit-backed configuration scopes and reports. |
| `gitea.maximumdirect.net/eric/CommandKit/integrations/ckprompt` | The application wants PromptKit engine configuration/comparison, five catalogs, named inspection, requirements discovery, request validation, or native smoke testing. |
| `go.maximumdirect.net/ckconfig` | The application wants ConfigKit-backed configuration scopes and reports. |
| `go.maximumdirect.net/ckprompt` | The application wants PromptKit engine configuration/comparison, five catalogs, named inspection, requirements discovery, request validation, or native smoke testing. |
The integration paths in the table are their current source identities; they
use the old core path and do not compose with `go.maximumdirect.net/commandkit`.
For the new core v0.3.0 identity, the planned matched releases are
`go.maximumdirect.net/ckconfig v0.2.0` and `go.maximumdirect.net/ckprompt v0.2.0`.
Update application imports and dependency versions together when those releases
are available. Old and new core paths have distinct Go type identities.
Install the new core with `go get go.maximumdirect.net/commandkit@v0.3.0`.
The matched releases are core v0.3.0, ckconfig v0.2.0, and ckprompt v0.2.0.
Update application imports and dependency versions together; old and new core
paths have distinct Go type identities. Install core with
`go get go.maximumdirect.net/commandkit@v0.3.0` and either integration with
`go get go.maximumdirect.net/ckconfig@v0.2.0` or
`go get go.maximumdirect.net/ckprompt@v0.2.0`.
The two integrations are independent optional imports. `ckprompt` uses the
public scope and error contracts from `ckconfig`; importing it does not add the

View File

@@ -99,10 +99,7 @@ Sibling-checkout references in retired planning records are historical review
evidence, not build dependencies. Implemented contracts belong in CommandKit
under their canonical owners.
The root module does not traverse nested modules. During the vanity-path
migration, integrations still import the old core identity and cannot compose
with the migrated root until their own module migrations are complete. After
the matched migrations, during development use a
The root module does not traverse nested modules. During development, use a
local workspace for all three modules; it is ignored and must not be committed.
If a local `go.work` already exists, preserve it and add these module directories:

View File

@@ -6,9 +6,9 @@ own the optional ConfigKit and PromptKit integrations. The
[architecture policy](../policy/architecture.md) owns normative boundaries;
this page inventories the implemented owners.
The core module now declares `go.maximumdirect.net/commandkit`. The integration
modules retain their old module and core import identities until their planned
matched releases; Go treats those identities as distinct.
The core, ckconfig, and ckprompt modules declare
`go.maximumdirect.net/commandkit`, `go.maximumdirect.net/ckconfig`, and
`go.maximumdirect.net/ckprompt`, respectively.
## Root `commandkit`

View File

@@ -1,6 +1,6 @@
# CommandKit vanity migration and dependency alignment plan
Status: Stage 1 complete; Stages 2–7 are not started.
Status: Stages 1–5 complete; Stages 6–7 are not started.
This plan is for the Luna coding agent implementing the
[feature roadmap](integration-dependency-alignment.md). Follow the stages in
@@ -145,7 +145,10 @@ The full root suite belongs to Stage 2's normal publication workflow.
## Stage 2: Validate and publish core v0.3.0
**Status:** not started.
**Completed.** Core `go.maximumdirect.net/commandkit v0.3.0` was published as
tag `v0.3.0` at candidate `e256eb1cc02a0c72c4e23c4967ed1caeaef17008`.
The ordinary Go 1.26.8 release workflow passed the complete root suite and
selected file checks before the successful source-tag push.
1. Review and commit the complete core candidate under the local commit policy.
Confirm that unrelated/private files and ignored workspaces are excluded.
@@ -173,7 +176,12 @@ sums is part of Stage 3, not a new completion gate for core publication.
## Stage 3: Migrate ckconfig and prepare its independent candidate
**Status:** not started.
**Completed.** Ckconfig declares `go.maximumdirect.net/ckconfig`, imports the
new core identity, and downloaded `go.maximumdirect.net/commandkit v0.3.0`
with authentic sums. The resolved graph retains ConfigKit v0.8.0 and selects
both the older ReleaseKit v0.4.1 and vanity ReleaseKit v0.9.0 tool modules;
module-local attribution and current guidance reflect those selections. The
v0.2.0 release note is prepared; independent suite validation follows.
1. In `integrations/ckconfig`, migrate the module declaration to
`go.maximumdirect.net/ckconfig`. Update all owned imports, tests, and the
@@ -216,7 +224,11 @@ aligned current documentation/attribution.
## Stage 4: Validate and publish ckconfig v0.2.0
**Status:** not started.
**Completed.** `go.maximumdirect.net/ckconfig v0.2.0` was published as
`integrations/ckconfig/v0.2.0` at candidate
`92a327db9752e7a898d14f56e86fbdee027b3126`. The ordinary Go 1.26.8 release
workflow passed the independent suite, maintained example, and selected file
checks before the successful source-tag push.
Review and commit the complete ckconfig candidate. From the repository root,
use the same authoritative-branch protocol as Stage 2:
@@ -241,7 +253,12 @@ identity. Downloading it for ckprompt is the next module's preparation.
## Stage 5: Migrate ckprompt and prepare its independent candidate
**Status:** not started.
**Completed.** Ckprompt declares `go.maximumdirect.net/ckprompt`, uses the
new core and ckconfig imports, and downloaded their v0.3.0 and v0.2.0 releases
with authentic sums. ConfigKit v0.8.0 and PromptKit v0.16.0 remain selected;
attribution records both distinct ReleaseKit tool modules in the resolved
graph. The v0.2.0 note and current consumer guidance are prepared; independent
suite validation follows.
1. Migrate `integrations/ckprompt` to `go.maximumdirect.net/ckprompt`. Update its
owned source/tests and composed example to import the new core, ckconfig,

View File

@@ -26,8 +26,7 @@ and try completing `core-example report d` or `core-example ws gr`.
Compatible integration factories also return `commandkit.Command` and can be
passed directly to `New` beside `commandkit.Alias` or flag-alias declarations.
The current integrations still use the old core identity; the planned matched
vanity-path releases will use the new core identity. For a
The matched ckconfig and ckprompt releases use the new core identity. For a
command-only `[]commandkit.Command`, convert its elements into a
`[]commandkit.Declaration` before appending routing rules; Go cannot expand the
command slice as `...commandkit.Declaration`. The

View File

@@ -7,9 +7,8 @@ itself.
## Module
The module path is
`gitea.maximumdirect.net/eric/CommandKit/integrations/ckconfig`. Its first
release is prepared as `v0.1.0`. It uses the core `commandkit` package and
The module path is `go.maximumdirect.net/ckconfig`. Version v0.2.0 uses
`go.maximumdirect.net/commandkit v0.3.0` and
ConfigKit; it does not import PromptKit. See the
[consumer guide](https://gitea.maximumdirect.net/eric/CommandKit/src/branch/main/docs/consumers/guide.md#configkit-scopes)
for exact callback and lifetime contracts.

View File

@@ -10,8 +10,8 @@ import (
"strings"
"testing"
commandkit "gitea.maximumdirect.net/eric/CommandKit"
configkit "gitea.maximumdirect.net/eric/ConfigKit"
commandkit "go.maximumdirect.net/commandkit"
)
type adapterSettings struct {

View File

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

View File

@@ -6,8 +6,8 @@ import (
"strings"
"testing"
commandkit "gitea.maximumdirect.net/eric/CommandKit"
configkit "gitea.maximumdirect.net/eric/ConfigKit"
commandkit "go.maximumdirect.net/commandkit"
)
func TestComparisonSelectionInheritsFieldsIndependently(t *testing.T) {

View File

@@ -8,8 +8,8 @@ import (
"strings"
"testing"
commandkit "gitea.maximumdirect.net/eric/CommandKit"
configkit "gitea.maximumdirect.net/eric/ConfigKit"
commandkit "go.maximumdirect.net/commandkit"
)
func TestComparisonPreparesEqualSelectionsWithSeparateTypedInputs(t *testing.T) {

View File

@@ -1,6 +1,6 @@
package ckconfig
import commandkit "gitea.maximumdirect.net/eric/CommandKit"
import commandkit "go.maximumdirect.net/commandkit"
func completionChoices(values ...string) commandkit.CompletionHint {
choices := make([]commandkit.CompletionChoice, len(values))

View File

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

View File

@@ -7,8 +7,8 @@ import (
"io"
"strconv"
commandkit "gitea.maximumdirect.net/eric/CommandKit"
configkit "gitea.maximumdirect.net/eric/ConfigKit"
commandkit "go.maximumdirect.net/commandkit"
)
// FromConfigKit adapts a typed ConfigKit loader to all five native

View File

@@ -4,8 +4,8 @@ import (
"context"
"io"
commandkit "gitea.maximumdirect.net/eric/CommandKit"
configkit "gitea.maximumdirect.net/eric/ConfigKit"
commandkit "go.maximumdirect.net/commandkit"
)
// Selection carries the configuration and overlay choices supplied for a

View File

@@ -9,8 +9,8 @@ import (
"strings"
"testing"
commandkit "gitea.maximumdirect.net/eric/CommandKit"
configkit "gitea.maximumdirect.net/eric/ConfigKit"
commandkit "go.maximumdirect.net/commandkit"
)
func TestWithScopeErrorCopiesAndRetainsCauses(t *testing.T) {

View File

@@ -4,7 +4,7 @@ import (
"errors"
"fmt"
commandkit "gitea.maximumdirect.net/eric/CommandKit"
commandkit "go.maximumdirect.net/commandkit"
)
func runConfigDiff[I, S any](invocation commandkit.Invocation, plan *configOperationPlan[I, S], state S) commandkit.Outcome {

View File

@@ -9,8 +9,8 @@ import (
"strings"
"testing"
commandkit "gitea.maximumdirect.net/eric/CommandKit"
configkit "gitea.maximumdirect.net/eric/ConfigKit"
commandkit "go.maximumdirect.net/commandkit"
"go.yaml.in/yaml/v4"
)

View File

@@ -1,4 +1,5 @@
// Package ckconfig provides CommandKit's optional ConfigKit integration. Its
// Package ckconfig, provided by go.maximumdirect.net/ckconfig, provides
// CommandKit's optional ConfigKit integration. Its
// canonical Command declaration installs the standard config command family
// through the core commandkit package. Applications can install CommandKit
// RoutingRule declarations alongside it through commandkit.New or

View File

@@ -153,16 +153,29 @@ License and notices: [MIT](licenses/MIT.txt) |
## ReleaseKit
Selected module: `gitea.maximumdirect.net/eric/ReleaseKit` at `v0.4.2` (transitive Go tool requirement; not a runtime import).
Selected module: `gitea.maximumdirect.net/eric/ReleaseKit` at `v0.4.1` (transitive Go tool requirement; not a runtime import).
Copyright (C) 2026 Eric Rakestraw
SPDX-License-Identifier: LGPL-3.0-or-later
License and notices: [LGPL v3.0](../../LICENSE) |
[LICENSE](https://gitea.maximumdirect.net/eric/ReleaseKit/src/commit/7d033c5ca1c95aec7db9690293638a0a1ac887b8/LICENSE).
[LICENSE](https://gitea.maximumdirect.net/eric/ReleaseKit/src/commit/2d5a8110c61e31daf8698766114ae305d0e0e469/LICENSE).
[Source](https://gitea.maximumdirect.net/eric/ReleaseKit/src/commit/7d033c5ca1c95aec7db9690293638a0a1ac887b8).
[Source](https://gitea.maximumdirect.net/eric/ReleaseKit/src/commit/2d5a8110c61e31daf8698766114ae305d0e0e469).
## ReleaseKit (vanity module)
Selected module: `go.maximumdirect.net/releasekit` at `v0.9.0` (transitive Go tool requirement; not a runtime import).
Copyright (C) 2026 Eric Rakestraw
SPDX-License-Identifier: LGPL-3.0-or-later
License and notices: [LGPL v3.0](../../LICENSE) |
[LICENSE](https://forge.maximumdirect.net/base-layer/releasekit/src/commit/2180aa868ec2caa95fc8279fd59d5f0ebac41bd4/LICENSE).
[Source](https://forge.maximumdirect.net/base-layer/releasekit/src/commit/2180aa868ec2caa95fc8279fd59d5f0ebac41bd4).
## Goldmark

View File

@@ -0,0 +1,35 @@
# CommandKit ckconfig v0.2.0
## Summary
CommandKit ckconfig v0.2.0 moves the integration to
`go.maximumdirect.net/ckconfig` and uses `go.maximumdirect.net/commandkit v0.3.0`
with ConfigKit v0.8.0. It adopts core's invocation reporting and completion
contracts while retaining ConfigKit-owned inspection and comparison behavior.
## Migration
Replace imports of `gitea.maximumdirect.net/eric/CommandKit/integrations/ckconfig`
with `go.maximumdirect.net/ckconfig`, and update core imports to
`go.maximumdirect.net/commandkit`. Select ckconfig v0.2.0 and core v0.3.0
as a matched set. Old and new core paths have distinct Go type identities.
Applications also using PromptKit should move to the forthcoming matched
`go.maximumdirect.net/ckprompt v0.2.0` release.
Handlers use `Invocation.Reporter()` for output and categorized messages;
terminal failures carry an explanation and optional cause. The integration
submits provider diagnostics through the invocation reporter, respecting shared
reporting flags. Update callers that used `Invocation.Streams`,
`Outcome.Diagnostics`, or the old error-first failure API as described in the
[core migration guide](https://forge.maximumdirect.net/base-layer/commandkit/src/tag/v0.3.0/docs/consumers/guide.md#invocation-reporting).
The standard config commands also provide completion hints for applicable
selectors and file paths when the application installs core's completion command.
Go 1.26.0 remains the consumer minimum. Importing ckconfig does not install
commands; pass its declarations to `commandkit.New` or `App.Register`.
See the [module README](https://forge.maximumdirect.net/base-layer/commandkit/src/tag/integrations/ckconfig/v0.2.0/integrations/ckconfig/README.md)
and [consumer guide](https://forge.maximumdirect.net/base-layer/commandkit/src/tag/integrations/ckconfig/v0.2.0/docs/consumers/guide.md#configkit-scopes).
[COPYRIGHT](https://forge.maximumdirect.net/base-layer/commandkit/src/tag/integrations/ckconfig/v0.2.0/integrations/ckconfig/COPYRIGHT) |
[LICENSE](https://forge.maximumdirect.net/base-layer/commandkit/src/tag/integrations/ckconfig/v0.2.0/integrations/ckconfig/LICENSE) |
[ATTRIBUTION](https://forge.maximumdirect.net/base-layer/commandkit/src/tag/integrations/ckconfig/v0.2.0/integrations/ckconfig/docs/oss/attribution.md)

View File

@@ -1,5 +1,8 @@
# Simple consumer
This example imports `go.maximumdirect.net/ckconfig` and
`go.maximumdirect.net/commandkit`; use ckconfig v0.2.0 with core v0.3.0.
Run the maintained example with:
```sh

View File

@@ -7,9 +7,9 @@ import (
"os"
"strconv"
commandkit "gitea.maximumdirect.net/eric/CommandKit"
"gitea.maximumdirect.net/eric/CommandKit/integrations/ckconfig"
configkit "gitea.maximumdirect.net/eric/ConfigKit"
"go.maximumdirect.net/ckconfig"
commandkit "go.maximumdirect.net/commandkit"
)
type appConfiguration struct {

View File

@@ -7,8 +7,8 @@ import (
"strings"
"testing"
commandkit "gitea.maximumdirect.net/eric/CommandKit"
"gitea.maximumdirect.net/eric/CommandKit/integrations/ckconfig"
"go.maximumdirect.net/ckconfig"
commandkit "go.maximumdirect.net/commandkit"
"go.yaml.in/yaml/v4"
)

View File

@@ -5,8 +5,8 @@ import (
"fmt"
"io"
commandkit "gitea.maximumdirect.net/eric/CommandKit"
configkit "gitea.maximumdirect.net/eric/ConfigKit"
commandkit "go.maximumdirect.net/commandkit"
)
type explanationReport struct {

View File

@@ -9,8 +9,8 @@ import (
"sort"
"strings"
commandkit "gitea.maximumdirect.net/eric/CommandKit"
configkit "gitea.maximumdirect.net/eric/ConfigKit"
commandkit "go.maximumdirect.net/commandkit"
)
type scopeMetadata struct {

View File

@@ -9,8 +9,8 @@ import (
"strings"
"testing"
commandkit "gitea.maximumdirect.net/eric/CommandKit"
configkit "gitea.maximumdirect.net/eric/ConfigKit"
commandkit "go.maximumdirect.net/commandkit"
)
func TestScopeDiscoveryIsOrderedAndDoesNotUseSuiteFactories(t *testing.T) {

View File

@@ -1,9 +1,8 @@
module gitea.maximumdirect.net/eric/CommandKit/integrations/ckconfig
module go.maximumdirect.net/ckconfig
go 1.26.0
require (
gitea.maximumdirect.net/eric/CommandKit v0.2.0
gitea.maximumdirect.net/eric/ConfigKit v0.8.0
go.yaml.in/yaml/v4 v4.0.0-rc.6
)
@@ -12,4 +11,5 @@ 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
)

View File

@@ -1,5 +1,3 @@
gitea.maximumdirect.net/eric/CommandKit v0.2.0 h1:UNBjSq6XDZHdPqvZLOL3N5R1E1ol0jnfldgradU7eqw=
gitea.maximumdirect.net/eric/CommandKit v0.2.0/go.mod h1:47DQ6Mo/yZqUVn5PAFRmPck91Zhf1jfaHDMoEZvUzsQ=
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=
@@ -10,6 +8,8 @@ github.com/spf13/cobra v1.10.1 h1:lJeBwCfmrnXthfAupyUTzJ/J4Nc1RsHC/mSRU2dll/s=
github.com/spf13/cobra v1.10.1/go.mod h1:7SmJGaTHFVBY0jW4NXGluQoLvhqFQM+6XSKD+P4XaB0=
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.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=

View File

@@ -4,8 +4,8 @@ import (
"fmt"
"strings"
commandkit "gitea.maximumdirect.net/eric/CommandKit"
configkit "gitea.maximumdirect.net/eric/ConfigKit"
commandkit "go.maximumdirect.net/commandkit"
)
type configCommandInput[I, S any] struct {

View File

@@ -4,7 +4,7 @@ import (
"fmt"
"io"
commandkit "gitea.maximumdirect.net/eric/CommandKit"
commandkit "go.maximumdirect.net/commandkit"
)
func runConfigOperation[I, S any](invocation commandkit.Invocation, operation Operation, input *configCommandInput[I, S]) commandkit.Outcome {

View File

@@ -6,7 +6,7 @@ import (
"io"
"testing"
commandkit "gitea.maximumdirect.net/eric/CommandKit"
commandkit "go.maximumdirect.net/commandkit"
)
func TestBufferedReportCancellationBeforeDelivery(t *testing.T) {

View File

@@ -7,7 +7,7 @@ import (
"strconv"
"unicode"
commandkit "gitea.maximumdirect.net/eric/CommandKit"
commandkit "go.maximumdirect.net/commandkit"
)
type effectiveDocument struct {

View File

@@ -6,8 +6,8 @@ import (
"io"
"strconv"
commandkit "gitea.maximumdirect.net/eric/CommandKit"
configkit "gitea.maximumdirect.net/eric/ConfigKit"
commandkit "go.maximumdirect.net/commandkit"
"go.yaml.in/yaml/v4"
)

View File

@@ -8,8 +8,8 @@ import (
"strings"
"testing"
commandkit "gitea.maximumdirect.net/eric/CommandKit"
configkit "gitea.maximumdirect.net/eric/ConfigKit"
commandkit "go.maximumdirect.net/commandkit"
"go.yaml.in/yaml/v4"
)

View File

@@ -6,7 +6,7 @@ import (
"io"
"strings"
commandkit "gitea.maximumdirect.net/eric/CommandKit"
commandkit "go.maximumdirect.net/commandkit"
"go.yaml.in/yaml/v4"
)

View File

@@ -7,10 +7,9 @@ Importing it does not install either command family.
## Module
The module path is
`gitea.maximumdirect.net/eric/CommandKit/integrations/ckprompt`. Its first
release is prepared as `v0.1.0`. It uses `commandkit`, `ckconfig`, and
PromptKit. See the
The module path is `go.maximumdirect.net/ckprompt`. Version v0.2.0 uses
`go.maximumdirect.net/commandkit v0.3.0`, `go.maximumdirect.net/ckconfig v0.2.0`,
and PromptKit v0.16.0. See the
[consumer guide](https://gitea.maximumdirect.net/eric/CommandKit/src/branch/main/docs/consumers/guide.md#promptkit-configuration-and-definitions)
for callback, input, state, and acquisition contracts.

View File

@@ -7,10 +7,10 @@ import (
"io"
"strconv"
commandkit "gitea.maximumdirect.net/eric/CommandKit"
"gitea.maximumdirect.net/eric/CommandKit/integrations/ckconfig"
configkit "gitea.maximumdirect.net/eric/ConfigKit"
promptkit "gitea.maximumdirect.net/eric/promptkit"
"go.maximumdirect.net/ckconfig"
commandkit "go.maximumdirect.net/commandkit"
)
// PromptRequest selects one named prompt for inspection.

View File

@@ -11,10 +11,10 @@ import (
"testing"
"testing/fstest"
commandkit "gitea.maximumdirect.net/eric/CommandKit"
"gitea.maximumdirect.net/eric/CommandKit/integrations/ckconfig"
configkit "gitea.maximumdirect.net/eric/ConfigKit"
promptkit "gitea.maximumdirect.net/eric/promptkit"
"go.maximumdirect.net/ckconfig"
commandkit "go.maximumdirect.net/commandkit"
)
const adapterPrompt = `prompts:

View File

@@ -9,9 +9,9 @@ import (
"strconv"
"strings"
commandkit "gitea.maximumdirect.net/eric/CommandKit"
"gitea.maximumdirect.net/eric/CommandKit/integrations/ckconfig"
promptkit "gitea.maximumdirect.net/eric/promptkit"
"go.maximumdirect.net/ckconfig"
commandkit "go.maximumdirect.net/commandkit"
"go.yaml.in/yaml/v4"
)

View File

@@ -10,9 +10,9 @@ import (
"strings"
"testing"
commandkit "gitea.maximumdirect.net/eric/CommandKit"
"gitea.maximumdirect.net/eric/CommandKit/integrations/ckconfig"
promptkit "gitea.maximumdirect.net/eric/promptkit"
"go.maximumdirect.net/ckconfig"
commandkit "go.maximumdirect.net/commandkit"
"go.yaml.in/yaml/v4"
)

View File

@@ -9,11 +9,11 @@ import (
"testing"
"testing/fstest"
commandkit "gitea.maximumdirect.net/eric/CommandKit"
"gitea.maximumdirect.net/eric/CommandKit/integrations/ckconfig"
"gitea.maximumdirect.net/eric/CommandKit/integrations/ckprompt"
configkit "gitea.maximumdirect.net/eric/ConfigKit"
promptkit "gitea.maximumdirect.net/eric/promptkit"
"go.maximumdirect.net/ckconfig"
"go.maximumdirect.net/ckprompt"
commandkit "go.maximumdirect.net/commandkit"
"go.yaml.in/yaml/v4"
)

View File

@@ -1,6 +1,6 @@
package ckprompt
import commandkit "gitea.maximumdirect.net/eric/CommandKit"
import commandkit "go.maximumdirect.net/commandkit"
func completionChoices(values ...string) commandkit.CompletionHint {
choices := make([]commandkit.CompletionChoice, len(values))

View File

@@ -8,11 +8,11 @@ import (
"testing"
"testing/fstest"
commandkit "gitea.maximumdirect.net/eric/CommandKit"
"gitea.maximumdirect.net/eric/CommandKit/integrations/ckconfig"
"gitea.maximumdirect.net/eric/CommandKit/integrations/ckprompt"
configkit "gitea.maximumdirect.net/eric/ConfigKit"
promptkit "gitea.maximumdirect.net/eric/promptkit"
"go.maximumdirect.net/ckconfig"
"go.maximumdirect.net/ckprompt"
commandkit "go.maximumdirect.net/commandkit"
)
type compositionInput struct{ Campaign commandkit.Supplied[string] }

View File

@@ -1,4 +1,5 @@
// Package ckprompt provides optional PromptKit configuration comparison,
// Package ckprompt, provided by go.maximumdirect.net/ckprompt, provides optional
// PromptKit configuration comparison,
// prompt catalogs, named inspections, requirements discovery and validation,
// and native smoke testing for CommandKit. Its command factories return
// canonical commandkit.Command declarations. Applications can install

View File

@@ -28,16 +28,29 @@ License and notices: [LGPL v3.0](../../LICENSE) |
## ReleaseKit
Selected module: `gitea.maximumdirect.net/eric/ReleaseKit` at `v0.4.2` (transitive Go tool requirement; not a runtime import).
Selected module: `gitea.maximumdirect.net/eric/ReleaseKit` at `v0.4.1` (transitive Go tool requirement; not a runtime import).
Copyright (C) 2026 Eric Rakestraw
SPDX-License-Identifier: LGPL-3.0-or-later
License and notices: [LGPL v3.0](../../LICENSE) |
[LICENSE](https://gitea.maximumdirect.net/eric/ReleaseKit/src/commit/7d033c5ca1c95aec7db9690293638a0a1ac887b8/LICENSE).
[LICENSE](https://gitea.maximumdirect.net/eric/ReleaseKit/src/commit/2d5a8110c61e31daf8698766114ae305d0e0e469/LICENSE).
[Source](https://gitea.maximumdirect.net/eric/ReleaseKit/src/commit/7d033c5ca1c95aec7db9690293638a0a1ac887b8).
[Source](https://gitea.maximumdirect.net/eric/ReleaseKit/src/commit/2d5a8110c61e31daf8698766114ae305d0e0e469).
## ReleaseKit (vanity module)
Selected module: `go.maximumdirect.net/releasekit` at `v0.9.0` (transitive Go tool requirement; not a runtime import).
Copyright (C) 2026 Eric Rakestraw
SPDX-License-Identifier: LGPL-3.0-or-later
License and notices: [LGPL v3.0](../../LICENSE) |
[LICENSE](https://forge.maximumdirect.net/base-layer/releasekit/src/commit/2180aa868ec2caa95fc8279fd59d5f0ebac41bd4/LICENSE).
[Source](https://forge.maximumdirect.net/base-layer/releasekit/src/commit/2180aa868ec2caa95fc8279fd59d5f0ebac41bd4).
## JSON Schema

View File

@@ -0,0 +1,36 @@
# CommandKit ckprompt v0.2.0
## Summary
CommandKit ckprompt v0.2.0 moves the PromptKit integration to
`go.maximumdirect.net/ckprompt`. It uses core
`go.maximumdirect.net/commandkit v0.3.0`,
`go.maximumdirect.net/ckconfig v0.2.0`, PromptKit v0.16.0, and ConfigKit v0.8.0.
The integration adopts core's invocation reporting and completion contracts
while preserving PromptKit's inspection, validation, and smoke semantics.
## Migration
Replace imports of `gitea.maximumdirect.net/eric/CommandKit/integrations/ckprompt`
with `go.maximumdirect.net/ckprompt`; update core and ckconfig imports to
`go.maximumdirect.net/commandkit` and `go.maximumdirect.net/ckconfig`. Select
core v0.3.0 and both integration modules at v0.2.0 as a matched set. Old and
new core paths identify different Go packages and their types cannot be mixed.
Handlers use `Invocation.Reporter()` for output and categorized messages;
terminal failures carry an explanation and optional cause. The integration
submits provider diagnostics through the reporter, respecting shared reporting
flags. Replace uses of `Invocation.Streams`, `Outcome.Diagnostics`, and the
old error-first failure API as described in the
[core migration guide](https://forge.maximumdirect.net/base-layer/commandkit/src/tag/v0.3.0/docs/consumers/guide.md#invocation-reporting).
PromptKit commands provide completion hints when the application installs the
core completion command. Command and flag aliases remain application owned.
Go 1.26.0 remains the consumer minimum. Importing ckprompt installs no commands;
compose configuration scopes and the PromptKit command family explicitly. See
the [module README](https://forge.maximumdirect.net/base-layer/commandkit/src/tag/integrations/ckprompt/v0.2.0/integrations/ckprompt/README.md)
and [consumer guide](https://forge.maximumdirect.net/base-layer/commandkit/src/tag/integrations/ckprompt/v0.2.0/docs/consumers/guide.md#promptkit-configuration-and-definitions).
[COPYRIGHT](https://forge.maximumdirect.net/base-layer/commandkit/src/tag/integrations/ckprompt/v0.2.0/integrations/ckprompt/COPYRIGHT) |
[LICENSE](https://forge.maximumdirect.net/base-layer/commandkit/src/tag/integrations/ckprompt/v0.2.0/integrations/ckprompt/LICENSE) |
[ATTRIBUTION](https://forge.maximumdirect.net/base-layer/commandkit/src/tag/integrations/ckprompt/v0.2.0/integrations/ckprompt/docs/oss/attribution.md)

View File

@@ -1,5 +1,9 @@
# Composed consumer
This example uses `go.maximumdirect.net/commandkit v0.3.0`,
`go.maximumdirect.net/ckconfig v0.2.0`, and
`go.maximumdirect.net/ckprompt v0.2.0`.
This example composes application configuration, PromptKit configuration,
PromptKit comparison and catalogs, definition and requirements inspection, and
one application-owned command:
@@ -121,11 +125,7 @@ the selected campaign but leaves artifact bindings to the operator. The
`requirements show` commands remain discovery reports: partial discovery can
succeed even when a concrete request would fail validation.
The alias examples use the local CommandKit source because the composed
module's published core dependency, v0.2.0, predates alias declarations. From
the repository root, add the three local modules to `go.work` as described in
the [developer guide](../../../../docs/development.md#documentation-validation),
then run `go test ./...` from this example directory. This checks the example
against the current local core and integration sources; it does not claim that
published v0.2.0 supports aliases. The next core dependency adoption is handled
after the core release is prepared.
Run `GOWORK=off go test ./...` from this example directory to check it against
the module's declared dependencies. A local workspace can instead select the
three current sources, as described in the
[developer guide](../../../../docs/development.md#documentation-validation).

View File

@@ -8,11 +8,11 @@ import (
"os"
"strconv"
commandkit "gitea.maximumdirect.net/eric/CommandKit"
"gitea.maximumdirect.net/eric/CommandKit/integrations/ckconfig"
"gitea.maximumdirect.net/eric/CommandKit/integrations/ckprompt"
configkit "gitea.maximumdirect.net/eric/ConfigKit"
promptkit "gitea.maximumdirect.net/eric/promptkit"
"go.maximumdirect.net/ckconfig"
"go.maximumdirect.net/ckprompt"
commandkit "go.maximumdirect.net/commandkit"
)
type campaign struct {

View File

@@ -9,11 +9,11 @@ import (
"strings"
"testing"
commandkit "gitea.maximumdirect.net/eric/CommandKit"
"gitea.maximumdirect.net/eric/CommandKit/integrations/ckconfig"
"gitea.maximumdirect.net/eric/CommandKit/integrations/ckprompt"
configkit "gitea.maximumdirect.net/eric/ConfigKit"
promptkit "gitea.maximumdirect.net/eric/promptkit"
"go.maximumdirect.net/ckconfig"
"go.maximumdirect.net/ckprompt"
commandkit "go.maximumdirect.net/commandkit"
"go.yaml.in/yaml/v4"
)

View File

@@ -1,10 +1,8 @@
module gitea.maximumdirect.net/eric/CommandKit/integrations/ckprompt
module go.maximumdirect.net/ckprompt
go 1.26.0
require (
gitea.maximumdirect.net/eric/CommandKit v0.2.0
gitea.maximumdirect.net/eric/CommandKit/integrations/ckconfig v0.1.0
gitea.maximumdirect.net/eric/ConfigKit v0.8.0
gitea.maximumdirect.net/eric/promptkit v0.16.0
go.yaml.in/yaml/v4 v4.0.0-rc.6
@@ -15,5 +13,7 @@ require (
github.com/santhosh-tekuri/jsonschema/v6 v6.0.2 // indirect
github.com/spf13/cobra v1.10.1 // indirect
github.com/spf13/pflag v1.0.9 // indirect
go.maximumdirect.net/ckconfig v0.2.0
go.maximumdirect.net/commandkit v0.3.0
golang.org/x/text v0.14.0 // indirect
)

View File

@@ -1,7 +1,3 @@
gitea.maximumdirect.net/eric/CommandKit v0.2.0 h1:UNBjSq6XDZHdPqvZLOL3N5R1E1ol0jnfldgradU7eqw=
gitea.maximumdirect.net/eric/CommandKit v0.2.0/go.mod h1:47DQ6Mo/yZqUVn5PAFRmPck91Zhf1jfaHDMoEZvUzsQ=
gitea.maximumdirect.net/eric/CommandKit/integrations/ckconfig v0.1.0 h1:qqgaCKrraUL//1vcoU+KUlQ5PNX0EtRpqsUraSiUW/w=
gitea.maximumdirect.net/eric/CommandKit/integrations/ckconfig v0.1.0/go.mod h1:SFtsgbTVQd+BCGQVCFSAopl55pGYhP1sSF442KFpSYA=
gitea.maximumdirect.net/eric/ConfigKit v0.8.0 h1:xCIhYnOHjw7rFvB+vIremPKGeROOxKTomnUEUipuQno=
gitea.maximumdirect.net/eric/ConfigKit v0.8.0/go.mod h1:C82sbyKHYMV1OwaD2GJanFrwTfcZfjlW2JsGze5b0kA=
gitea.maximumdirect.net/eric/promptkit v0.16.0 h1:g3dhN0QfzQriaVOBmGUZCw2iBM9Mli2AAU4CbMfzcuY=
@@ -18,6 +14,10 @@ github.com/spf13/cobra v1.10.1 h1:lJeBwCfmrnXthfAupyUTzJ/J4Nc1RsHC/mSRU2dll/s=
github.com/spf13/cobra v1.10.1/go.mod h1:7SmJGaTHFVBY0jW4NXGluQoLvhqFQM+6XSKD+P4XaB0=
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/ckconfig v0.2.0 h1:gcv9Opp9RFgx1cupXq7Uf+P2UWh2FZGYwp+pFY7gmfg=
go.maximumdirect.net/ckconfig v0.2.0/go.mod h1:FR25dNBQCB3rPkmmrccct19SIlbW9mHra6DHx98h10c=
go.maximumdirect.net/commandkit v0.3.0 h1:RCmg2GS8uzlLSJCIqarpn1uFDec0W3ylNNRRPT6kUFE=
go.maximumdirect.net/commandkit v0.3.0/go.mod h1:ZS98DewKNVBygKVDoh5MFD09CnPlP37dS9pVsID5Eoc=
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=
golang.org/x/text v0.14.0 h1:ScX5w1eTa3QqT8oi6+ziP7dTV1S2+ALU0bI+0zXKWiQ=

View File

@@ -8,9 +8,9 @@ import (
"strings"
"testing"
commandkit "gitea.maximumdirect.net/eric/CommandKit"
"gitea.maximumdirect.net/eric/CommandKit/integrations/ckconfig"
promptkit "gitea.maximumdirect.net/eric/promptkit"
"go.maximumdirect.net/ckconfig"
commandkit "go.maximumdirect.net/commandkit"
)
func TestBundledNativeFailuresReachTerminalExplanation(t *testing.T) {

View File

@@ -5,8 +5,8 @@ import (
"errors"
"testing"
commandkit "gitea.maximumdirect.net/eric/CommandKit"
promptkit "gitea.maximumdirect.net/eric/promptkit"
commandkit "go.maximumdirect.net/commandkit"
)
type cancelDuringYAML struct{ cancel context.CancelFunc }

View File

@@ -9,9 +9,9 @@ import (
"strings"
"testing"
commandkit "gitea.maximumdirect.net/eric/CommandKit"
"gitea.maximumdirect.net/eric/CommandKit/integrations/ckconfig"
promptkit "gitea.maximumdirect.net/eric/promptkit"
"go.maximumdirect.net/ckconfig"
commandkit "go.maximumdirect.net/commandkit"
"go.yaml.in/yaml/v4"
)

View File

@@ -5,9 +5,9 @@ import (
"errors"
"fmt"
commandkit "gitea.maximumdirect.net/eric/CommandKit"
"gitea.maximumdirect.net/eric/CommandKit/integrations/ckconfig"
promptkit "gitea.maximumdirect.net/eric/promptkit"
"go.maximumdirect.net/ckconfig"
commandkit "go.maximumdirect.net/commandkit"
)
// SmokeRequest pairs the configuration selection with the seed request for one

View File

@@ -8,9 +8,9 @@ import (
"reflect"
"testing"
commandkit "gitea.maximumdirect.net/eric/CommandKit"
"gitea.maximumdirect.net/eric/CommandKit/integrations/ckconfig"
promptkit "gitea.maximumdirect.net/eric/promptkit"
"go.maximumdirect.net/ckconfig"
commandkit "go.maximumdirect.net/commandkit"
"go.yaml.in/yaml/v4"
)

View File

@@ -6,9 +6,9 @@ import (
"io"
"strconv"
commandkit "gitea.maximumdirect.net/eric/CommandKit"
"gitea.maximumdirect.net/eric/CommandKit/integrations/ckconfig"
promptkit "gitea.maximumdirect.net/eric/promptkit"
"go.maximumdirect.net/ckconfig"
commandkit "go.maximumdirect.net/commandkit"
)
type smokeCommandInput[I any] struct {

View File

@@ -8,9 +8,9 @@ import (
"strings"
"testing"
commandkit "gitea.maximumdirect.net/eric/CommandKit"
"gitea.maximumdirect.net/eric/CommandKit/integrations/ckconfig"
promptkit "gitea.maximumdirect.net/eric/promptkit"
"go.maximumdirect.net/ckconfig"
commandkit "go.maximumdirect.net/commandkit"
"go.yaml.in/yaml/v4"
)

View File

@@ -9,9 +9,9 @@ import (
"strings"
"testing"
commandkit "gitea.maximumdirect.net/eric/CommandKit"
"gitea.maximumdirect.net/eric/CommandKit/integrations/ckconfig"
promptkit "gitea.maximumdirect.net/eric/promptkit"
"go.maximumdirect.net/ckconfig"
commandkit "go.maximumdirect.net/commandkit"
)
func TestSmokeTestCommandRetainsSingletonValuesAndResetsInvocations(t *testing.T) {

View File

@@ -8,8 +8,8 @@ import (
"strings"
"testing"
commandkit "gitea.maximumdirect.net/eric/CommandKit"
promptkit "gitea.maximumdirect.net/eric/promptkit"
commandkit "go.maximumdirect.net/commandkit"
"go.yaml.in/yaml/v4"
)

View File

@@ -1,8 +1,8 @@
package ckprompt
import (
"gitea.maximumdirect.net/eric/CommandKit/integrations/ckconfig"
promptkit "gitea.maximumdirect.net/eric/promptkit"
"go.maximumdirect.net/ckconfig"
)
// ValidationRequest carries the configuration selection and seed PromptKit

View File

@@ -7,10 +7,10 @@ import (
"testing"
"testing/fstest"
commandkit "gitea.maximumdirect.net/eric/CommandKit"
"gitea.maximumdirect.net/eric/CommandKit/integrations/ckconfig"
configkit "gitea.maximumdirect.net/eric/ConfigKit"
promptkit "gitea.maximumdirect.net/eric/promptkit"
"go.maximumdirect.net/ckconfig"
commandkit "go.maximumdirect.net/commandkit"
)
type validationFailOnGenerate struct{ calls int }

View File

@@ -4,8 +4,8 @@ import (
"errors"
"fmt"
commandkit "gitea.maximumdirect.net/eric/CommandKit"
promptkit "gitea.maximumdirect.net/eric/promptkit"
commandkit "go.maximumdirect.net/commandkit"
)
type validationCommandInput[I any] struct {

View File

@@ -9,10 +9,10 @@ import (
"strings"
"testing"
commandkit "gitea.maximumdirect.net/eric/CommandKit"
"gitea.maximumdirect.net/eric/CommandKit/integrations/ckconfig"
configkit "gitea.maximumdirect.net/eric/ConfigKit"
promptkit "gitea.maximumdirect.net/eric/promptkit"
"go.maximumdirect.net/ckconfig"
commandkit "go.maximumdirect.net/commandkit"
"go.yaml.in/yaml/v4"
)