Align reporting contracts and documentation
This commit is contained in:
@@ -9,7 +9,7 @@ The core captures reusable command declarations, validates installation batches
|
|||||||
before changing an application's registry, converts typed inputs before
|
before changing an application's registry, converts typed inputs before
|
||||||
constructing them, and returns outcomes without exiting the process. Its
|
constructing them, and returns outcomes without exiting the process. Its
|
||||||
[consumer guide](docs/consumers/guide.md) covers declaration, invocation
|
[consumer guide](docs/consumers/guide.md) covers declaration, invocation
|
||||||
reporting, and migration. Each handler receives one invocation reporter for
|
and reporting. Each handler receives one invocation reporter for
|
||||||
substantive output, categorized messages, and terminal explanations; `Execute`
|
substantive output, categorized messages, and terminal explanations; `Execute`
|
||||||
returns delivery observations with the outcome. The [CLI reference](docs/cli.md)
|
returns delivery observations with the outcome. The [CLI reference](docs/cli.md)
|
||||||
defines the shared visibility policy.
|
defines the shared visibility policy.
|
||||||
@@ -25,9 +25,10 @@ defines the shared visibility policy.
|
|||||||
Importing an integration does not install commands. The published ckconfig and
|
Importing an integration does not install commands. The published ckconfig and
|
||||||
ckprompt v0.2.0 modules use core v0.3.0. The published
|
ckprompt v0.2.0 modules use core v0.3.0. The published
|
||||||
ckconfig v0.3.0 uses ConfigKit v1.1.0 and does not compose with
|
ckconfig v0.3.0 uses ConfigKit v1.1.0 and does not compose with
|
||||||
ckprompt v0.2.0; the published v0.2.0 pair remains matched. Current ckprompt
|
ckprompt v0.2.0; the published v0.2.0 pair remains matched. Current integration
|
||||||
source aligns with ckconfig v0.3.0; its v0.3.0 candidate is not yet published. See the
|
sources use new core and ckconfig APIs and are developed in an aligned workspace
|
||||||
[consumer guide](docs/consumers/guide.md#module-selection) for migration details.
|
until their release dependencies are available. See the
|
||||||
|
[consumer guide](docs/consumers/guide.md#module-selection) for dependency details.
|
||||||
|
|
||||||
## Examples
|
## Examples
|
||||||
|
|
||||||
|
|||||||
18
docs/cli.md
18
docs/cli.md
@@ -114,7 +114,7 @@ and usage guidance go to `Streams.Err`.
|
|||||||
The shared `--format` flag selects `text`, `yaml`, or `json` for reports
|
The shared `--format` flag selects `text`, `yaml`, or `json` for reports
|
||||||
submitted through the core reporter. When omitted, a report's text template
|
submitted through the core reporter. When omitted, a report's text template
|
||||||
selects text; otherwise scalar values and nonempty string lists use text, while
|
selects text; otherwise scalar values and nonempty string lists use text, while
|
||||||
structured values and empty collections use YAML. Explicit text without a
|
structured values, empty collections, and null use YAML. Explicit text without a
|
||||||
template uses YAML for structured values. Invalid or empty format values are
|
template uses YAML for structured values. Invalid or empty format values are
|
||||||
usage errors. Raw output, help, completion, and diagnostics are not encoded as
|
usage errors. Raw output, help, completion, and diagnostics are not encoded as
|
||||||
reports.
|
reports.
|
||||||
@@ -537,7 +537,7 @@ separate evidence and does not replace a nonzero difference outcome.
|
|||||||
For ConfigKit-backed scopes, ConfigKit compares frozen effective typed values
|
For ConfigKit-backed scopes, ConfigKit compares frozen effective typed values
|
||||||
after defaults and resolution; source or provenance differences alone do not
|
after defaults and resolution; source or provenance differences alone do not
|
||||||
create a change. PromptKit delegates its native comparison to ConfigKit. The
|
create a change. PromptKit delegates its native comparison to ConfigKit. The
|
||||||
report contains `additions`, `changes`, and `deletions`. Additions and changes
|
concise report contains `additions`, `changes`, and `deletions`. Additions and changes
|
||||||
preserve semantic paths and contain right-side values provided by the native
|
preserve semantic paths and contain right-side values provided by the native
|
||||||
comparison. Deletions contain canonical JSON
|
comparison. Deletions contain canonical JSON
|
||||||
Pointer paths. Explicit null is a value; it is not a deletion. Changed sequences
|
Pointer paths. Explicit null is a value; it is not a deletion. Changed sequences
|
||||||
@@ -545,7 +545,7 @@ and native structural replacement regions stay atomic.
|
|||||||
|
|
||||||
ConfigKit pairs sensitivity across both loads. A concealed change can therefore
|
ConfigKit pairs sensitivity across both loads. A concealed change can therefore
|
||||||
appear even when its two safe snapshots are equal. For those ConfigKit-backed
|
appear even when its two safe snapshots are equal. For those ConfigKit-backed
|
||||||
comparisons, the report omits separate redaction and hidden-change metadata: a
|
comparisons, the concise report omits separate redaction and hidden-change metadata: a
|
||||||
reported masked region changed, but that does not mean every member inside it
|
reported masked region changed, but that does not mean every member inside it
|
||||||
changed. Marker-looking public strings stay ordinary strings. An empty
|
changed. Marker-looking public strings stay ordinary strings. An empty
|
||||||
comparison succeeds with this shape:
|
comparison succeeds with this shape:
|
||||||
@@ -561,7 +561,7 @@ automatically applicable patch. Exceptional whole-root empty/null transitions
|
|||||||
can be ambiguous because the report has no root envelope; ordinary field-level
|
can be ambiguous because the report has no root envelope; ordinary field-level
|
||||||
null values and deletions retain their distinction.
|
null values and deletions retain their distinction.
|
||||||
|
|
||||||
Successful comparisons return status `0`, including empty results.
|
Without `--check`, successful comparisons return status `0`, including empty results.
|
||||||
Unsupported scopes and format errors are usage errors; input checks retain the
|
Unsupported scopes and format errors are usage errors; input checks retain the
|
||||||
existing usage/operational classification. Load and native comparison failures
|
existing usage/operational classification. Load and native comparison failures
|
||||||
are operational and preserve supported error identity.
|
are operational and preserve supported error identity.
|
||||||
@@ -804,7 +804,7 @@ configuration and credential checks. It does not make a model call or retain a
|
|||||||
prepared execution snapshot. A successful report describes this preparation
|
prepared execution snapshot. A successful report describes this preparation
|
||||||
invocation; it does not certify provider acceptance or guarantee later
|
invocation; it does not certify provider acceptance or guarantee later
|
||||||
execution. See PromptKit's
|
execution. See PromptKit's
|
||||||
[`Engine.ValidateRequest` API](https://forge.maximumdirect.net/base-layer/promptkit/src/commit/d9f6aad30509e538fc73ea16710df3a3ec084502/engine.go).
|
[`Engine.ValidateRequest` API](https://forge.maximumdirect.net/base-layer/promptkit/src/commit/8ff9aa3efdc9f16b9d2729e0a29ea083eb3c3eaf/engine.go).
|
||||||
|
|
||||||
Builder, engine-loading, and native validation errors use the operational path
|
Builder, engine-loading, and native validation errors use the operational path
|
||||||
(status `1`) with supported error identity and acquired diagnostics retained.
|
(status `1`) with supported error identity and acquired diagnostics retained.
|
||||||
@@ -867,7 +867,7 @@ identities. YAML examples follow:
|
|||||||
A catalog result is an inventory, not a readiness check or execution result.
|
A catalog result is an inventory, not a readiness check or execution result.
|
||||||
The owning provider controls membership and order. Namespace filters are passed
|
The owning provider controls membership and order. Namespace filters are passed
|
||||||
to PromptKit without local membership interpretation. See the
|
to PromptKit without local membership interpretation. See the
|
||||||
[PromptKit v0.18.0 consumer guide](https://forge.maximumdirect.net/base-layer/promptkit/src/commit/d9f6aad30509e538fc73ea16710df3a3ec084502/docs/consumers/pkg-promptkit.md)
|
[PromptKit v0.20.0 consumer guide](https://forge.maximumdirect.net/base-layer/promptkit/src/commit/8ff9aa3efdc9f16b9d2729e0a29ea083eb3c3eaf/docs/consumers/pkg-promptkit.md)
|
||||||
for native resource and selection definitions.
|
for native resource and selection definitions.
|
||||||
|
|
||||||
### PromptKit smoke testing
|
### PromptKit smoke testing
|
||||||
@@ -1016,9 +1016,9 @@ operation causes. Syntax, operand, unsupported format, and conflicting
|
|||||||
namespace selection are usage status `2`.
|
namespace selection are usage status `2`.
|
||||||
|
|
||||||
Native configuration, selection, and diagnostic meanings remain owned by
|
Native configuration, selection, and diagnostic meanings remain owned by
|
||||||
PromptKit. See the [v0.18.0 consumer guide](https://forge.maximumdirect.net/base-layer/promptkit/src/commit/d9f6aad30509e538fc73ea16710df3a3ec084502/docs/consumers/pkg-promptkit.md),
|
PromptKit. See the [v0.20.0 consumer guide](https://forge.maximumdirect.net/base-layer/promptkit/src/commit/8ff9aa3efdc9f16b9d2729e0a29ea083eb3c3eaf/docs/consumers/pkg-promptkit.md),
|
||||||
[smoke API](https://forge.maximumdirect.net/base-layer/promptkit/src/commit/d9f6aad30509e538fc73ea16710df3a3ec084502/smoke_diagnostics.go),
|
[smoke API](https://forge.maximumdirect.net/base-layer/promptkit/src/commit/8ff9aa3efdc9f16b9d2729e0a29ea083eb3c3eaf/smoke_diagnostics.go),
|
||||||
and [engine API](https://forge.maximumdirect.net/base-layer/promptkit/src/commit/d9f6aad30509e538fc73ea16710df3a3ec084502/engine.go).
|
and [engine API](https://forge.maximumdirect.net/base-layer/promptkit/src/commit/8ff9aa3efdc9f16b9d2729e0a29ea083eb3c3eaf/engine.go).
|
||||||
|
|
||||||
## Outcome status
|
## Outcome status
|
||||||
|
|
||||||
|
|||||||
@@ -18,17 +18,17 @@ installed at the application root, not as group children.
|
|||||||
The published matched releases are core v0.3.0, ckconfig v0.2.0, and ckprompt v0.2.0.
|
The published matched releases are core v0.3.0, ckconfig v0.2.0, and ckprompt v0.2.0.
|
||||||
The published ckconfig v0.3.0 uses ConfigKit v1.1.0 and does not compose
|
The published ckconfig v0.3.0 uses ConfigKit v1.1.0 and does not compose
|
||||||
with ckprompt v0.2.0, which retains ckconfig v0.2.0 and ConfigKit v0.8.0.
|
with ckprompt v0.2.0, which retains ckconfig v0.2.0 and ConfigKit v0.8.0.
|
||||||
Update application imports and dependency versions together; old and new core
|
Install core with
|
||||||
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/commandkit@v0.3.0` and either integration with
|
||||||
`go get go.maximumdirect.net/ckconfig@v0.2.0` or
|
`go get go.maximumdirect.net/ckconfig@v0.2.0` or
|
||||||
`go get go.maximumdirect.net/ckprompt@v0.2.0`.
|
`go get go.maximumdirect.net/ckprompt@v0.2.0`.
|
||||||
|
|
||||||
The current ckprompt source targets ckconfig v0.3.0, ConfigKit v1.1.0, and
|
The current ckprompt source targets ckconfig v0.3.0, ConfigKit v1.1.0, and
|
||||||
PromptKit v0.18.0 using their `go.maximumdirect.net` identities. Its v0.3.0
|
PromptKit v0.20.0 using their `go.maximumdirect.net` identities. Its v0.3.0
|
||||||
release is a candidate, not a published release. A Go 1.27.0 workspace may
|
release is a candidate, not a published release. A Go 1.27.0 workspace may
|
||||||
compose all three local modules; independent tests with `GOWORK=off` exercise
|
compose all three local modules. The current integration source uses APIs that
|
||||||
the declared releases.
|
require the upcoming core and ckconfig releases; independent validation follows
|
||||||
|
their publication and dependency alignment.
|
||||||
|
|
||||||
The two integrations are independent optional imports. `ckprompt` uses the
|
The two integrations are independent optional imports. `ckprompt` uses the
|
||||||
public scope and error contracts from `ckconfig`; importing it does not add the
|
public scope and error contracts from `ckconfig`; importing it does not add the
|
||||||
@@ -142,6 +142,13 @@ use `Output()` or `RenderOutput()` for deliberate raw output. Use `Warn`, `Info`
|
|||||||
[CLI reference](../cli.md#reporting) owns flag grammar, visibility, prefixes,
|
[CLI reference](../cli.md#reporting) owns flag grammar, visibility, prefixes,
|
||||||
and status behavior.
|
and status behavior.
|
||||||
|
|
||||||
|
Reports use JSON serialization to establish the common value representation
|
||||||
|
for YAML and JSON. A text template receives the original value; without one,
|
||||||
|
text uses readable scalar or string-list output and YAML for structured values.
|
||||||
|
The CLI's shared format selection and the writer-level `RenderReport` use the
|
||||||
|
same rules. Use `DecodeYAMLReport` only for safe upstream inspection YAML that
|
||||||
|
must become a report value; ordinary strings are not parsed as YAML.
|
||||||
|
|
||||||
Return terminal text with `Failure(message, details...)`, `Usage(message,
|
Return terminal text with `Failure(message, details...)`, `Usage(message,
|
||||||
details...)`, or `WithExplanation` on a domain outcome. Attach an optional Go
|
details...)`, or `WithExplanation` on a domain outcome. Attach an optional Go
|
||||||
error separately with `WithCause`. A cause is preserved for inspection, but it
|
error separately with `WithCause`. A cause is preserved for inspection, but it
|
||||||
@@ -167,15 +174,6 @@ invocation are safe concurrently, but concurrent submission order is not
|
|||||||
specified. The caller owns the writers passed to `Execute`; CommandKit does not
|
specified. The caller owns the writers passed to `Execute`; CommandKit does not
|
||||||
close them.
|
close them.
|
||||||
|
|
||||||
### Migrating from the previous reporting API
|
|
||||||
|
|
||||||
| Previous API | Current API |
|
|
||||||
| --- | --- |
|
|
||||||
| `invocation.Streams.Out` / `.Err` | `invocation.Reporter().Output()` and categorized reporter methods. `Streams` remains the argument to `App.Execute`. |
|
|
||||||
| `Failure(err)` / `Usage(err)` | `Failure("operator-facing explanation").WithCause(err)` / `Usage("usage explanation").WithCause(err)`. Choose the explanation deliberately; the cause alone is not printed. |
|
|
||||||
| `Outcome.Diagnostics` or terminal `SeverityError` | Submit independent messages through reporter methods. Put failure context in `Explanation`; provider `Acquired.Diagnostics` remains passive data for the owning integration to submit. |
|
|
||||||
| `ReportIncomplete`, `DiagnosticDelivery`, or `DeliveryError` | Inspect `Outcome.Presentation.Output` and `.Diagnostics`, including each `DeliveryResult.State`, `RenderError`, and `WriteError`. |
|
|
||||||
|
|
||||||
## Application-owned aliases
|
## Application-owned aliases
|
||||||
|
|
||||||
Pass commands and aliases together as declarations. Integration factories can
|
Pass commands and aliases together as declarations. Integration factories can
|
||||||
@@ -266,6 +264,8 @@ parses CLI records but cannot add them to an already-loaded result. The
|
|||||||
engine's captured configuration. Add that scope to a `ckconfig.Suite` to expose
|
engine's captured configuration. Add that scope to a `ckconfig.Suite` to expose
|
||||||
it under `config` with validate/show/sources/explain and native diff operations;
|
it under `config` with validate/show/sources/explain and native diff operations;
|
||||||
it does not install PromptKit catalog, definition, or requirements commands.
|
it does not install PromptKit catalog, definition, or requirements commands.
|
||||||
|
Its override feature is disabled because the released PromptKit configuration
|
||||||
|
loader does not accept ConfigKit override records.
|
||||||
|
|
||||||
`ckprompt.FromEngine(loadEngine)` supplies nine callbacks: prompt, profile,
|
`ckprompt.FromEngine(loadEngine)` supplies nine callbacks: prompt, profile,
|
||||||
backend, namespace, and collection catalogs; named prompt, profile, and backend
|
backend, namespace, and collection catalogs; named prompt, profile, and backend
|
||||||
@@ -396,19 +396,7 @@ These are independent defaults for unqualified caller-supplied prompt, profile,
|
|||||||
and backend names; qualified IDs pass through. Stored references and configuration
|
and backend names; qualified IDs pass through. Stored references and configuration
|
||||||
inspection are unchanged, while namespace and collection inventories remain global.
|
inspection are unchanged, while namespace and collection inventories remain global.
|
||||||
Catalog `--namespace` filters are separate from these defaults. See the released
|
Catalog `--namespace` filters are separate from these defaults. See the released
|
||||||
[namespace API](https://forge.maximumdirect.net/base-layer/promptkit/src/commit/d9f6aad30509e538fc73ea16710df3a3ec084502/namespaces.go).
|
[namespace API](https://forge.maximumdirect.net/base-layer/promptkit/src/commit/8ff9aa3efdc9f16b9d2729e0a29ea083eb3c3eaf/namespaces.go).
|
||||||
|
|
||||||
### PromptKit configuration migration
|
|
||||||
|
|
||||||
The current integration uses identified resource lists and keeps PromptKit's
|
|
||||||
native default OpenRouter bundle. Loaders can opt out with
|
|
||||||
`promptkit.WithBundledOpenRouter(false)`. Catalogs and configuration reports
|
|
||||||
expose the supplied engine's inventory and native source evidence. The
|
|
||||||
[upstream migration guide](https://forge.maximumdirect.net/base-layer/promptkit/src/commit/d9f6aad30509e538fc73ea16710df3a3ec084502/docs/consumers/configuration-migration.md)
|
|
||||||
covers list records, inheritance, source-root controls, and import requiredness.
|
|
||||||
Prompt catalog, prompt and requirements inspection, and smoke target reports no
|
|
||||||
longer carry descriptive prompt versions; collection release labels and source
|
|
||||||
version evidence retain their own meanings.
|
|
||||||
|
|
||||||
## Outcomes and ownership
|
## Outcomes and ownership
|
||||||
|
|
||||||
@@ -423,23 +411,7 @@ Go declarations and GoDoc own exact exported contracts. ConfigKit owns
|
|||||||
configuration decoding, validation, and provenance. PromptKit owns prompt
|
configuration decoding, validation, and provenance. PromptKit owns prompt
|
||||||
formats, profile resolution, and inspection details. See the
|
formats, profile resolution, and inspection details. See the
|
||||||
[ConfigKit v1.1.0 source records](https://forge.maximumdirect.net/base-layer/configkit/src/commit/191015e289d7f2b91abb9fdd9c4f2f5cf75b4de9/records.go),
|
[ConfigKit v1.1.0 source records](https://forge.maximumdirect.net/base-layer/configkit/src/commit/191015e289d7f2b91abb9fdd9c4f2f5cf75b4de9/records.go),
|
||||||
[PromptKit engine methods](https://forge.maximumdirect.net/base-layer/promptkit/src/commit/d9f6aad30509e538fc73ea16710df3a3ec084502/engine.go),
|
[PromptKit engine methods](https://forge.maximumdirect.net/base-layer/promptkit/src/commit/8ff9aa3efdc9f16b9d2729e0a29ea083eb3c3eaf/engine.go),
|
||||||
[configuration inspection](https://forge.maximumdirect.net/base-layer/promptkit/src/commit/d9f6aad30509e538fc73ea16710df3a3ec084502/configuration_inspection.go),
|
[configuration inspection](https://forge.maximumdirect.net/base-layer/promptkit/src/commit/8ff9aa3efdc9f16b9d2729e0a29ea083eb3c3eaf/configuration_inspection.go),
|
||||||
[smoke diagnostics](https://forge.maximumdirect.net/base-layer/promptkit/src/commit/d9f6aad30509e538fc73ea16710df3a3ec084502/smoke_diagnostics.go),
|
[smoke diagnostics](https://forge.maximumdirect.net/base-layer/promptkit/src/commit/8ff9aa3efdc9f16b9d2729e0a29ea083eb3c3eaf/smoke_diagnostics.go),
|
||||||
and [PromptKit v0.18.0 consumer guidance](https://forge.maximumdirect.net/base-layer/promptkit/src/commit/d9f6aad30509e538fc73ea16710df3a3ec084502/docs/consumers/pkg-promptkit.md).
|
and [PromptKit v0.20.0 consumer guidance](https://forge.maximumdirect.net/base-layer/promptkit/src/commit/8ff9aa3efdc9f16b9d2729e0a29ea083eb3c3eaf/docs/consumers/pkg-promptkit.md).
|
||||||
|
|
||||||
## ConfigKit v1.1 migration
|
|
||||||
|
|
||||||
Ckconfig v0.3.0 uses `go.maximumdirect.net/configkit v1.1.0`
|
|
||||||
and Go 1.27.0. Consumers must migrate ConfigKit imports and values passed to
|
|
||||||
ckconfig: the old and new package paths have distinct type identities. Source
|
|
||||||
reports rename `destination_unresolved` to `destination_is_fallback` and
|
|
||||||
`version_check` to `version_evidence`, and add `empty_import_selections`.
|
|
||||||
|
|
||||||
The upstream [v0.9 migration notes](https://forge.maximumdirect.net/base-layer/configkit/src/commit/191015e289d7f2b91abb9fdd9c4f2f5cf75b4de9/docs/releases/v0.9.0.md),
|
|
||||||
[v0.10 notes](https://forge.maximumdirect.net/base-layer/configkit/src/commit/191015e289d7f2b91abb9fdd9c4f2f5cf75b4de9/docs/releases/v0.10.0.md),
|
|
||||||
[v1.0 migration notes](https://forge.maximumdirect.net/base-layer/configkit/src/commit/191015e289d7f2b91abb9fdd9c4f2f5cf75b4de9/docs/releases/v1.0.0.md),
|
|
||||||
and [v1.1 notes](https://forge.maximumdirect.net/base-layer/configkit/src/commit/191015e289d7f2b91abb9fdd9c4f2f5cf75b4de9/docs/releases/v1.1.0.md)
|
|
||||||
cover source-root `configkit` controls becoming `config`, import requiredness
|
|
||||||
and defaults, collection registration and operations, removed APIs, and CLI
|
|
||||||
assignment order.
|
|
||||||
|
|||||||
@@ -103,8 +103,8 @@ under their canonical owners.
|
|||||||
|
|
||||||
The root module does not traverse nested modules. Preserve the ignored `go.work`
|
The root module does not traverse nested modules. Preserve the ignored `go.work`
|
||||||
and `go.work.sum`; use `GOWORK=off GOTOOLCHAIN=local` for dependency preparation
|
and `go.work.sum`; use `GOWORK=off GOTOOLCHAIN=local` for dependency preparation
|
||||||
and independent module suites. With a Go 1.27.0 workspace containing all three modules, normal
|
and independent module suites once released requirements are aligned. Until then,
|
||||||
workspace discovery also validates local composition.
|
the integrations require a Go 1.27.0 workspace containing all three modules.
|
||||||
Run `GOWORK=off GOTOOLCHAIN=local go test ./...` separately from each module
|
Run `GOWORK=off GOTOOLCHAIN=local go test ./...` separately from each module
|
||||||
directory. From the repository root, a workspace containing all three modules can
|
directory. From the repository root, a workspace containing all three modules can
|
||||||
also run:
|
also run:
|
||||||
@@ -133,30 +133,31 @@ or publishing.
|
|||||||
|
|
||||||
## Current public examples
|
## Current public examples
|
||||||
|
|
||||||
The maintained consumers compile with their owning module suites and run without
|
The maintained consumers run without external services using the aligned local
|
||||||
external services. The PromptKit smoke examples use local fixtures and the
|
workspace. The PromptKit smoke examples use local fixtures and the example's
|
||||||
example's configured client:
|
configured client:
|
||||||
|
|
||||||
```sh
|
```sh
|
||||||
GOWORK=off GOTOOLCHAIN=local go run ./examples/core workspace greet --count=0 --tag=first --tag second
|
GOTOOLCHAIN=local go run ./examples/core workspace greet --count=0 --tag=first --tag second
|
||||||
(cd integrations/ckconfig/examples/simple && GOWORK=off GOTOOLCHAIN=local go run . config show)
|
(cd integrations/ckconfig/examples/simple && GOTOOLCHAIN=local go run . config show)
|
||||||
(cd integrations/ckconfig/examples/simple && GOWORK=off GOTOOLCHAIN=local go run . config diff --config fixtures/before.yml --against-config fixtures/after.yml)
|
(cd integrations/ckconfig/examples/simple && GOTOOLCHAIN=local go run . config diff --config fixtures/before.yml --against-config fixtures/after.yml)
|
||||||
(cd integrations/ckprompt/examples/composed && GOWORK=off GOTOOLCHAIN=local go run . config validate --scope all --campaign spring --limit=0)
|
(cd integrations/ckprompt/examples/composed && GOTOOLCHAIN=local go run . config validate --scope all --campaign spring --limit=0)
|
||||||
(cd integrations/ckprompt/examples/composed && GOWORK=off GOTOOLCHAIN=local go run . config diff --scope app --config fixtures/before.yml --against-config fixtures/after.yml)
|
(cd integrations/ckprompt/examples/composed && GOTOOLCHAIN=local go run . config diff --scope app --config fixtures/before.yml --against-config fixtures/after.yml)
|
||||||
(cd integrations/ckprompt/examples/composed && GOWORK=off GOTOOLCHAIN=local go run . config diff --scope promptkit --config fixtures/before.yml --against-config fixtures/after.yml --campaign spring)
|
(cd integrations/ckprompt/examples/composed && GOTOOLCHAIN=local go run . config diff --scope promptkit --config fixtures/before.yml --against-config fixtures/after.yml --campaign spring)
|
||||||
(cd integrations/ckprompt/examples/composed && GOWORK=off GOTOOLCHAIN=local go run . promptkit list prompts --config fixtures/before.yml --campaign spring)
|
(cd integrations/ckprompt/examples/composed && GOTOOLCHAIN=local go run . promptkit list prompts --config fixtures/before.yml --campaign spring)
|
||||||
(cd integrations/ckprompt/examples/composed && GOWORK=off GOTOOLCHAIN=local go run . promptkit list profiles --config fixtures/after.yml --campaign autumn --format yaml)
|
(cd integrations/ckprompt/examples/composed && GOTOOLCHAIN=local go run . promptkit list profiles --config fixtures/after.yml --campaign autumn --format yaml)
|
||||||
(cd integrations/ckprompt/examples/composed && GOWORK=off GOTOOLCHAIN=local go run . promptkit list backends --namespace team)
|
(cd integrations/ckprompt/examples/composed && GOTOOLCHAIN=local go run . promptkit list backends --namespace team)
|
||||||
(cd integrations/ckprompt/examples/composed && GOWORK=off GOTOOLCHAIN=local go run . promptkit list namespaces --kind prompt --kind profile)
|
(cd integrations/ckprompt/examples/composed && GOTOOLCHAIN=local go run . promptkit list namespaces --kind prompt --kind profile)
|
||||||
(cd integrations/ckprompt/examples/composed && GOWORK=off GOTOOLCHAIN=local go run . promptkit list collections)
|
(cd integrations/ckprompt/examples/composed && GOTOOLCHAIN=local go run . promptkit list collections)
|
||||||
(cd integrations/ckprompt/examples/composed && GOWORK=off GOTOOLCHAIN=local go run . promptkit show prompt briefing --campaign spring --format yaml)
|
(cd integrations/ckprompt/examples/composed && GOTOOLCHAIN=local go run . promptkit show prompt briefing --campaign spring --format yaml)
|
||||||
(cd integrations/ckprompt/examples/composed && GOWORK=off GOTOOLCHAIN=local go run . promptkit requirements show briefing --campaign spring)
|
(cd integrations/ckprompt/examples/composed && GOTOOLCHAIN=local go run . promptkit show prepared briefing --campaign spring --input topic=sprint --profile spring --extra-params '{"campaign":"preview"}')
|
||||||
(cd integrations/ckprompt/examples/composed && GOWORK=off GOTOOLCHAIN=local go run . promptkit requirements show briefing --campaign spring --var mode=full --format yaml)
|
(cd integrations/ckprompt/examples/composed && GOTOOLCHAIN=local go run . promptkit requirements show briefing --campaign spring)
|
||||||
(cd integrations/ckprompt/examples/composed && GOWORK=off GOTOOLCHAIN=local go run . promptkit requirements validate briefing --campaign spring --input topic=fixtures/topic.txt)
|
(cd integrations/ckprompt/examples/composed && GOTOOLCHAIN=local go run . promptkit requirements show briefing --campaign spring --var mode=full --format yaml)
|
||||||
(cd integrations/ckprompt/examples/composed && GOWORK=off GOTOOLCHAIN=local go run . promptkit requirements validate briefing --campaign spring --input topic=fixtures/topic.txt --var mode=full --input notes=fixtures/notes.txt --format yaml)
|
(cd integrations/ckprompt/examples/composed && GOTOOLCHAIN=local go run . promptkit requirements validate briefing --campaign spring --input-file topic=fixtures/topic.txt)
|
||||||
(cd integrations/ckprompt/examples/composed && GOWORK=off GOTOOLCHAIN=local go run . promptkit test reachability --campaign spring --prompt briefing --profile spring)
|
(cd integrations/ckprompt/examples/composed && GOTOOLCHAIN=local go run . promptkit requirements validate briefing --campaign spring --input-file topic=fixtures/topic.txt --var mode=full --input-file notes=fixtures/notes.txt --format yaml)
|
||||||
(cd integrations/ckprompt/examples/composed && GOWORK=off GOTOOLCHAIN=local go run . promptkit test all --campaign spring --prompt briefing --profile spring)
|
(cd integrations/ckprompt/examples/composed && GOTOOLCHAIN=local go run . promptkit test reachability --campaign spring --prompt briefing --profile spring)
|
||||||
(cd integrations/ckprompt/examples/composed && GOWORK=off GOTOOLCHAIN=local go run . session restore session-42 --campaign spring)
|
(cd integrations/ckprompt/examples/composed && GOTOOLCHAIN=local go run . promptkit test all --campaign spring --prompt briefing --profile spring)
|
||||||
|
(cd integrations/ckprompt/examples/composed && GOTOOLCHAIN=local go run . session restore session-42 --campaign spring)
|
||||||
```
|
```
|
||||||
|
|
||||||
The [consumer guide](consumers/guide.md) explains how their public API usage
|
The [consumer guide](consumers/guide.md) explains how their public API usage
|
||||||
|
|||||||
@@ -14,7 +14,7 @@ The core, ckconfig, and ckprompt modules declare
|
|||||||
|
|
||||||
The root facade owns captured canonical command declarations, application-owned
|
The root facade owns captured canonical command declarations, application-owned
|
||||||
routing rules, binding conversion, invocation coordination, the per-App
|
routing rules, binding conversion, invocation coordination, the per-App
|
||||||
registries, standard help/version commands, invocation reporting, and outcome
|
registries, standard help/version commands, shared report rendering, invocation reporting, and outcome
|
||||||
finalization.
|
finalization.
|
||||||
Its dependency graph has no ConfigKit or PromptKit integration dependency.
|
Its dependency graph has no ConfigKit or PromptKit integration dependency.
|
||||||
Applications provide typed callbacks and install routing rules alongside the
|
Applications provide typed callbacks and install routing rules alongside the
|
||||||
@@ -90,8 +90,9 @@ acquisitions or comparison callback.
|
|||||||
`integrations/ckprompt` owns PromptKit engine loading, configuration-scope
|
`integrations/ckprompt` owns PromptKit engine loading, configuration-scope
|
||||||
adaptation and native comparison, plus optional prompt/profile/backend/namespace/
|
adaptation and native comparison, plus optional prompt/profile/backend/namespace/
|
||||||
collection catalogs, named inspection, native requirements discovery,
|
collection catalogs, named inspection, native requirements discovery,
|
||||||
concrete request validation, and native smoke testing. Validation and smoke
|
concrete request validation, prepared-request preview, and native smoke testing.
|
||||||
testing delegate to PromptKit and are independently opted into a suite. Smoke
|
Validation, preview, and smoke testing delegate to PromptKit and are independently
|
||||||
|
opted into a suite. Smoke
|
||||||
operations use the application's native engine and its configured client or
|
operations use the application's native engine and its configured client or
|
||||||
probes. The integration uses public core and ckconfig contracts plus PromptKit's
|
probes. The integration uses public core and ckconfig contracts plus PromptKit's
|
||||||
public APIs. It does not add a configuration family when its declaration is
|
public APIs. It does not add a configuration family when its declaration is
|
||||||
|
|||||||
@@ -213,8 +213,8 @@ Factories need not run after a failure and remain uninvoked during construction,
|
|||||||
installation, help, version, and scope discovery.
|
installation, help, version, and scope discovery.
|
||||||
|
|
||||||
For two-selection configuration comparison, prepare and check each side's input
|
For two-selection configuration comparison, prepare and check each side's input
|
||||||
separately with its scope identity and selection, applying the same applicable
|
separately with its scope identity and selection, applying only the selectors
|
||||||
converted selector values to both. Finish both checks before initializing shared
|
supplied for that side. Finish both checks before initializing shared
|
||||||
state once and invoking the integration-owned pair provider. The
|
state once and invoking the integration-owned pair provider. The
|
||||||
[consumer guide](../consumers/guide.md#configkit-scopes) and linked GoDoc own the
|
[consumer guide](../consumers/guide.md#configkit-scopes) and linked GoDoc own the
|
||||||
provider lifecycle; the [CLI reference](../cli.md#compare-configuration-selections)
|
provider lifecycle; the [CLI reference](../cli.md#compare-configuration-selections)
|
||||||
@@ -346,8 +346,8 @@ errors instead of inventing a parallel override policy or retrying with altered
|
|||||||
values. Application loading and application-owned overrides retain their own
|
values. Application loading and application-owned overrides retain their own
|
||||||
responsibilities.
|
responsibilities.
|
||||||
|
|
||||||
The [CLI reference](../cli.md#show-effective-configuration) owns current native
|
The [CLI reference](../cli.md#show-effective-configuration) owns current report
|
||||||
report formats and operation-specific preparation and delivery timing. Semantic
|
formats and operation-specific preparation and delivery timing. Semantic
|
||||||
comparison exposes the adopted upstream comparison API and carries its evidence
|
comparison exposes the adopted upstream comparison API and carries its evidence
|
||||||
through the provider boundary; it does not introduce a CommandKit equality engine.
|
through the provider boundary; it does not introduce a CommandKit equality engine.
|
||||||
|
|
||||||
|
|||||||
@@ -73,6 +73,9 @@ integration where correctness depends on that interaction. Internal package
|
|||||||
tests own focused mechanisms.
|
tests own focused mechanisms.
|
||||||
Boundary checks protect selected architectural constraints; behavioral evidence
|
Boundary checks protect selected architectural constraints; behavioral evidence
|
||||||
protects invocation semantics and ownership through conversions.
|
protects invocation semantics and ownership through conversions.
|
||||||
|
For shared reports, compare logical values and selected evidence rather than
|
||||||
|
YAML formatting or mapping order. Preserve sequence ordering only where the
|
||||||
|
relevant contract gives it meaning.
|
||||||
|
|
||||||
Do not infer concurrent-dispatch support from fresh invocation state. Test
|
Do not infer concurrent-dispatch support from fresh invocation state. Test
|
||||||
concurrency guarantees only if deliberately selected. Coverage targets, race
|
concurrency guarantees only if deliberately selected. Coverage targets, race
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
# Shared reporting and PromptKit v0.20.0 implementation plan
|
# Shared reporting and PromptKit v0.20.0 implementation plan
|
||||||
|
|
||||||
Status: implementation in progress; Stages 1–22 complete.
|
Status: implementation in progress; Stages 1–23 complete.
|
||||||
|
|
||||||
## Scope, authority, and execution
|
## Scope, authority, and execution
|
||||||
|
|
||||||
@@ -831,6 +831,12 @@ do not reimplement native resolution tests.
|
|||||||
|
|
||||||
## Stage 23: Canonical contracts and obsolete infrastructure audit
|
## Stage 23: Canonical contracts and obsolete infrastructure audit
|
||||||
|
|
||||||
|
**Complete.** Audited the output inventory and public boundaries, removed
|
||||||
|
unused YAML report tags, aligned current documentation and policy wording, and
|
||||||
|
tidied integration dependencies. The workspace suites and 20 development example
|
||||||
|
commands passed with Go 1.27.0; independent integration validation awaits the
|
||||||
|
released dependencies.
|
||||||
|
|
||||||
Review every path in the feature roadmap's
|
Review every path in the feature roadmap's
|
||||||
[output inventory](promptkit-v0.20.0.md#output-implementation-inventory).
|
[output inventory](promptkit-v0.20.0.md#output-implementation-inventory).
|
||||||
Remove remaining handler-local format inputs, validators, encoders, legacy
|
Remove remaining handler-local format inputs, validators, encoders, legacy
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
# Shared report output, PromptKit v0.20.0 adoption, and ConfigKit operator CLI
|
# Shared report output, PromptKit v0.20.0 adoption, and ConfigKit operator CLI
|
||||||
|
|
||||||
Status: agreed feature roadmap; implementation has not started. The numbered
|
Status: agreed feature roadmap; implementation is in progress. The numbered
|
||||||
decisions and final review clarifications are settled. The
|
decisions and final review clarifications are settled. The
|
||||||
[implementation plan](implementation.md) owns staged execution and concrete API
|
[implementation plan](implementation.md) owns staged execution and concrete API
|
||||||
and transition choices; native resource report fields follow upstream. Practical
|
and transition choices; native resource report fields follow upstream. Practical
|
||||||
@@ -673,7 +673,8 @@ the plan; the checklist here defines the target acceptance boundaries.
|
|||||||
Select focused boundary tests under the [testing policy](../policy/testing.md).
|
Select focused boundary tests under the [testing policy](../policy/testing.md).
|
||||||
The ownership and Go-native policy work is complete in
|
The ownership and Go-native policy work is complete in
|
||||||
[architecture.md](../policy/architecture.md#ownership-boundaries). The checks below
|
[architecture.md](../policy/architecture.md#ownership-boundaries). The checks below
|
||||||
cover implementation and its documentation, which remain pending.
|
cover implementation and its documentation across the staged work; final
|
||||||
|
release-dependent checks remain pending.
|
||||||
The checklist concerns core reporting and adapter/CLI behavior; it does not ask
|
The checklist concerns core reporting and adapter/CLI behavior; it does not ask
|
||||||
CommandKit to retest PromptKit rendering, schema, namespace, or ConfigKit
|
CommandKit to retest PromptKit rendering, schema, namespace, or ConfigKit
|
||||||
resolution algorithms.
|
resolution algorithms.
|
||||||
|
|||||||
@@ -28,7 +28,7 @@ ConfigKit loader. The `config` command family exposes scope discovery and the
|
|||||||
validate, show, sources, explain, and diff operations supported by the declared
|
validate, show, sources, explain, and diff operations supported by the declared
|
||||||
scopes. Source reports include native destination, placement, destination
|
scopes. Source reports include native destination, placement, destination
|
||||||
fallback, version evidence, and empty-import selections. Comparison returns
|
fallback, version evidence, and empty-import selections. Comparison returns
|
||||||
ConfigKit's native records to the YAML report path; the
|
ConfigKit's native records to shared report rendering; the
|
||||||
[CLI reference](https://gitea.maximumdirect.net/eric/CommandKit/src/branch/main/docs/cli.md#compare-configuration-selections)
|
[CLI reference](https://gitea.maximumdirect.net/eric/CommandKit/src/branch/main/docs/cli.md#compare-configuration-selections)
|
||||||
owns its operator details.
|
owns its operator details.
|
||||||
|
|
||||||
|
|||||||
@@ -47,7 +47,7 @@ type Request struct {
|
|||||||
// initialized and checked typed input. The supplied-state fields of Selection
|
// initialized and checked typed input. The supplied-state fields of Selection
|
||||||
// are preserved for the scope's loader.
|
// are preserved for the scope's loader.
|
||||||
type ComparisonSide[I any] struct {
|
type ComparisonSide[I any] struct {
|
||||||
// Selection carries the explicit config and overlay inputs for this side.
|
// Selection carries the explicit config, overlay, and override inputs for this side.
|
||||||
Selection Selection
|
Selection Selection
|
||||||
// Input is initialized and checked for this side before comparison.
|
// Input is initialized and checked for this side before comparison.
|
||||||
Input I
|
Input I
|
||||||
@@ -118,7 +118,7 @@ type ScopeFeatures struct {
|
|||||||
type Scope[I, S any] struct {
|
type Scope[I, S any] struct {
|
||||||
// Name identifies the scope in CLI selection and reports.
|
// Name identifies the scope in CLI selection and reports.
|
||||||
Name string
|
Name string
|
||||||
// Summary describes the scope. Scope discovery reports name and operations only.
|
// Summary describes the scope.
|
||||||
Summary string
|
Summary string
|
||||||
// Operations selects the standard handlers exposed for this scope.
|
// Operations selects the standard handlers exposed for this scope.
|
||||||
Operations []Operation
|
Operations []Operation
|
||||||
|
|||||||
@@ -11,12 +11,12 @@ import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
type explanationReport struct {
|
type explanationReport struct {
|
||||||
Scope string `json:"scope" yaml:"scope"`
|
Scope string `json:"scope"`
|
||||||
Path string `json:"path" yaml:"path"`
|
Path string `json:"path"`
|
||||||
Effective snapshotDTO `json:"effective" yaml:"effective"`
|
Effective snapshotDTO `json:"effective"`
|
||||||
Origin explanationOriginDTO `json:"origin" yaml:"origin"`
|
Origin explanationOriginDTO `json:"origin"`
|
||||||
History []explanationChangeDTO `json:"history" yaml:"history"`
|
History []explanationChangeDTO `json:"history"`
|
||||||
SecretReference *secretReferenceDTO `json:"secret_reference" yaml:"secret_reference"`
|
SecretReference *secretReferenceDTO `json:"secret_reference"`
|
||||||
Metadata *explanationMetadata `json:"metadata,omitempty"`
|
Metadata *explanationMetadata `json:"metadata,omitempty"`
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -49,35 +49,35 @@ type pathMetadata struct {
|
|||||||
var pathDiscoveryTemplate = template.Must(commandkit.ParseTextTemplate("paths", "{{range .Paths}}{{printf \"%q\" .Path}} {{if .Present}}{{if .Metadata.Explicit}}explicit{{else}}non-explicit{{end}}{{else}}historical{{end}}\n{{end}}", nil))
|
var pathDiscoveryTemplate = template.Must(commandkit.ParseTextTemplate("paths", "{{range .Paths}}{{printf \"%q\" .Path}} {{if .Present}}{{if .Metadata.Explicit}}explicit{{else}}non-explicit{{end}}{{else}}historical{{end}}\n{{end}}", nil))
|
||||||
|
|
||||||
type snapshotDTO struct {
|
type snapshotDTO struct {
|
||||||
Present bool `json:"present" yaml:"present"`
|
Present bool `json:"present"`
|
||||||
Redacted bool `json:"redacted" yaml:"redacted"`
|
Redacted bool `json:"redacted"`
|
||||||
YAML string `json:"yaml" yaml:"yaml"`
|
YAML string `json:"yaml"`
|
||||||
}
|
}
|
||||||
|
|
||||||
type explanationOriginDTO struct {
|
type explanationOriginDTO struct {
|
||||||
Layer string `json:"layer" yaml:"layer"`
|
Layer string `json:"layer"`
|
||||||
Locations []locationDTO `json:"locations" yaml:"locations"`
|
Locations []locationDTO `json:"locations"`
|
||||||
Operation string `json:"operation" yaml:"operation"`
|
Operation string `json:"operation"`
|
||||||
Inheritance []inheritanceStepDTO `json:"inheritance" yaml:"inheritance"`
|
Inheritance []inheritanceStepDTO `json:"inheritance"`
|
||||||
}
|
}
|
||||||
|
|
||||||
type inheritanceStepDTO struct {
|
type inheritanceStepDTO struct {
|
||||||
From string `json:"from" yaml:"from"`
|
From string `json:"from"`
|
||||||
To string `json:"to" yaml:"to"`
|
To string `json:"to"`
|
||||||
Reference string `json:"reference" yaml:"reference"`
|
Reference string `json:"reference"`
|
||||||
Locations []locationDTO `json:"locations" yaml:"locations"`
|
Locations []locationDTO `json:"locations"`
|
||||||
}
|
}
|
||||||
|
|
||||||
type explanationChangeDTO struct {
|
type explanationChangeDTO struct {
|
||||||
Before snapshotDTO `json:"before" yaml:"before"`
|
Before snapshotDTO `json:"before"`
|
||||||
After snapshotDTO `json:"after" yaml:"after"`
|
After snapshotDTO `json:"after"`
|
||||||
Origin explanationOriginDTO `json:"origin" yaml:"origin"`
|
Origin explanationOriginDTO `json:"origin"`
|
||||||
Reasons []string `json:"reasons" yaml:"reasons"`
|
Reasons []string `json:"reasons"`
|
||||||
Dependencies []string `json:"dependencies" yaml:"dependencies"`
|
Dependencies []string `json:"dependencies"`
|
||||||
}
|
}
|
||||||
|
|
||||||
type secretReferenceDTO struct {
|
type secretReferenceDTO struct {
|
||||||
Name string `json:"name" yaml:"name"`
|
Name string `json:"name"`
|
||||||
}
|
}
|
||||||
|
|
||||||
func runConfigExplanation[I, S any](invocation commandkit.Invocation, plan *configOperationPlan[I, S], state S) commandkit.Outcome {
|
func runConfigExplanation[I, S any](invocation commandkit.Invocation, plan *configOperationPlan[I, S], state S) commandkit.Outcome {
|
||||||
|
|||||||
@@ -10,48 +10,48 @@ import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
type sourceReport struct {
|
type sourceReport struct {
|
||||||
Scope string `json:"scope" yaml:"scope"`
|
Scope string `json:"scope"`
|
||||||
Sources []sourceDTO `json:"sources" yaml:"sources"`
|
Sources []sourceDTO `json:"sources"`
|
||||||
}
|
}
|
||||||
|
|
||||||
type sourceDTO struct {
|
type sourceDTO struct {
|
||||||
ID string `json:"id" yaml:"id"`
|
ID string `json:"id"`
|
||||||
Label string `json:"label" yaml:"label"`
|
Label string `json:"label"`
|
||||||
Path string `json:"path" yaml:"path"`
|
Path string `json:"path"`
|
||||||
Destination string `json:"destination" yaml:"destination"`
|
Destination string `json:"destination"`
|
||||||
Placement string `json:"placement" yaml:"placement"`
|
Placement string `json:"placement"`
|
||||||
DestinationIsFallback bool `json:"destination_is_fallback" yaml:"destination_is_fallback"`
|
DestinationIsFallback bool `json:"destination_is_fallback"`
|
||||||
Layer string `json:"layer" yaml:"layer"`
|
Layer string `json:"layer"`
|
||||||
Kind string `json:"kind" yaml:"kind"`
|
Kind string `json:"kind"`
|
||||||
UnderlayIndex int `json:"underlay_index" yaml:"underlay_index"`
|
UnderlayIndex int `json:"underlay_index"`
|
||||||
ImportedFrom *locationDTO `json:"imported_from" yaml:"imported_from"`
|
ImportedFrom *locationDTO `json:"imported_from"`
|
||||||
VersionEvidence *sourceVersionEvidenceDTO `json:"version_evidence" yaml:"version_evidence"`
|
VersionEvidence *sourceVersionEvidenceDTO `json:"version_evidence"`
|
||||||
EmptyImportSelections []emptyImportSelectionDTO `json:"empty_import_selections" yaml:"empty_import_selections"`
|
EmptyImportSelections []emptyImportSelectionDTO `json:"empty_import_selections"`
|
||||||
}
|
}
|
||||||
|
|
||||||
type emptyImportSelectionDTO struct {
|
type emptyImportSelectionDTO struct {
|
||||||
Path string `json:"path" yaml:"path"`
|
Path string `json:"path"`
|
||||||
Location locationDTO `json:"location" yaml:"location"`
|
Location locationDTO `json:"location"`
|
||||||
Selector string `json:"selector" yaml:"selector"`
|
Selector string `json:"selector"`
|
||||||
}
|
}
|
||||||
|
|
||||||
type locationDTO struct {
|
type locationDTO struct {
|
||||||
SourceID string `json:"source_id" yaml:"source_id"`
|
SourceID string `json:"source_id"`
|
||||||
Line int `json:"line" yaml:"line"`
|
Line int `json:"line"`
|
||||||
Column int `json:"column" yaml:"column"`
|
Column int `json:"column"`
|
||||||
}
|
}
|
||||||
|
|
||||||
type sourceVersionEvidenceDTO struct {
|
type sourceVersionEvidenceDTO struct {
|
||||||
Path string `json:"path" yaml:"path"`
|
Path string `json:"path"`
|
||||||
Version versionDTO `json:"version" yaml:"version"`
|
Version versionDTO `json:"version"`
|
||||||
Location *locationDTO `json:"location" yaml:"location"`
|
Location *locationDTO `json:"location"`
|
||||||
Redacted bool `json:"redacted" yaml:"redacted"`
|
Redacted bool `json:"redacted"`
|
||||||
}
|
}
|
||||||
|
|
||||||
type versionDTO struct {
|
type versionDTO struct {
|
||||||
Present bool `json:"present" yaml:"present"`
|
Present bool `json:"present"`
|
||||||
Null bool `json:"null" yaml:"null"`
|
Null bool `json:"null"`
|
||||||
Text string `json:"text" yaml:"text"`
|
Text string `json:"text"`
|
||||||
}
|
}
|
||||||
|
|
||||||
func runConfigSources[I, S any](invocation commandkit.Invocation, plan *configOperationPlan[I, S], state S) commandkit.Outcome {
|
func runConfigSources[I, S any](invocation commandkit.Invocation, plan *configOperationPlan[I, S], state S) commandkit.Outcome {
|
||||||
|
|||||||
@@ -78,7 +78,15 @@ func TestSourcesProjectNativeEvidenceInTextAndYAML(t *testing.T) {
|
|||||||
Destination string `yaml:"destination"`
|
Destination string `yaml:"destination"`
|
||||||
Placement string `yaml:"placement"`
|
Placement string `yaml:"placement"`
|
||||||
Layer string `yaml:"layer"`
|
Layer string `yaml:"layer"`
|
||||||
EmptyImportSelections []emptyImportSelectionDTO `yaml:"empty_import_selections"`
|
EmptyImportSelections []struct {
|
||||||
|
Path string `yaml:"path"`
|
||||||
|
Location struct {
|
||||||
|
SourceID string `yaml:"source_id"`
|
||||||
|
Line int `yaml:"line"`
|
||||||
|
Column int `yaml:"column"`
|
||||||
|
} `yaml:"location"`
|
||||||
|
Selector string `yaml:"selector"`
|
||||||
|
} `yaml:"empty_import_selections"`
|
||||||
DestinationIsFallback bool `yaml:"destination_is_fallback"`
|
DestinationIsFallback bool `yaml:"destination_is_fallback"`
|
||||||
VersionEvidence *struct {
|
VersionEvidence *struct {
|
||||||
Path string `yaml:"path"`
|
Path string `yaml:"path"`
|
||||||
@@ -108,11 +116,8 @@ func TestSourcesProjectNativeEvidenceInTextAndYAML(t *testing.T) {
|
|||||||
if root := report.Sources[0]; root.Destination != "" || root.Placement != "mapping" || root.DestinationIsFallback || root.VersionEvidence != nil || root.Layer != "main" {
|
if root := report.Sources[0]; root.Destination != "" || root.Placement != "mapping" || root.DestinationIsFallback || root.VersionEvidence != nil || root.Layer != "main" {
|
||||||
t.Errorf("root source projection = %#v", root)
|
t.Errorf("root source projection = %#v", root)
|
||||||
}
|
}
|
||||||
wantSelections := []emptyImportSelectionDTO{
|
selections := report.Sources[0].EmptyImportSelections
|
||||||
{Path: "/imports/first", Location: locationDTO{SourceID: "root.yml", Line: 3, Column: 4}, Selector: "glob"},
|
if len(selections) != 2 || selections[0].Path != "/imports/first" || selections[0].Location.SourceID != "root.yml" || selections[0].Location.Line != 3 || selections[0].Location.Column != 4 || selections[0].Selector != "glob" || selections[1].Path != "/imports/second" || selections[1].Selector != "path" || report.Sources[1].EmptyImportSelections == nil || len(report.Sources[1].EmptyImportSelections) != 0 {
|
||||||
{Path: "/imports/second", Location: locationDTO{}, Selector: "path"},
|
|
||||||
}
|
|
||||||
if !reflect.DeepEqual(report.Sources[0].EmptyImportSelections, wantSelections) || report.Sources[1].EmptyImportSelections == nil || len(report.Sources[1].EmptyImportSelections) != 0 {
|
|
||||||
t.Fatalf("import selections: %#v", report.Sources)
|
t.Fatalf("import selections: %#v", report.Sources)
|
||||||
}
|
}
|
||||||
if strings.Contains(yamlOutput.String(), "destination_unresolved:") || strings.Contains(yamlOutput.String(), "version_check:") {
|
if strings.Contains(yamlOutput.String(), "destination_unresolved:") || strings.Contains(yamlOutput.String(), "version_check:") {
|
||||||
|
|||||||
@@ -9,9 +9,11 @@ Importing it does not install either command family.
|
|||||||
|
|
||||||
The module path is `go.maximumdirect.net/ckprompt`. This source uses Go 1.27.0,
|
The module path is `go.maximumdirect.net/ckprompt`. This source uses Go 1.27.0,
|
||||||
`go.maximumdirect.net/commandkit v0.3.0`, `go.maximumdirect.net/ckconfig v0.3.0`,
|
`go.maximumdirect.net/commandkit v0.3.0`, `go.maximumdirect.net/ckconfig v0.3.0`,
|
||||||
`go.maximumdirect.net/configkit v1.1.0`, and `go.maximumdirect.net/promptkit v0.18.0`. See the
|
`go.maximumdirect.net/configkit v1.1.0`, and `go.maximumdirect.net/promptkit v0.20.0`. See the
|
||||||
[consumer guide](https://gitea.maximumdirect.net/eric/CommandKit/src/branch/main/docs/consumers/guide.md#promptkit-configuration-and-definitions)
|
[consumer guide](https://gitea.maximumdirect.net/eric/CommandKit/src/branch/main/docs/consumers/guide.md#promptkit-configuration-definitions-and-requirements)
|
||||||
for callback, input, state, and acquisition contracts.
|
for callback, input, state, and acquisition contracts.
|
||||||
|
The current source requires the aligned local workspace until new core and
|
||||||
|
ckconfig releases supply its APIs.
|
||||||
|
|
||||||
## Example
|
## Example
|
||||||
|
|
||||||
@@ -22,8 +24,9 @@ and native comparison in the `config` family. Install
|
|||||||
named inspections, and requirements discovery. `FromEngine` supplies nine
|
named inspections, and requirements discovery. `FromEngine` supplies nine
|
||||||
PromptKit-backed callbacks: four inspections and five catalogs. Applications
|
PromptKit-backed callbacks: four inspections and five catalogs. Applications
|
||||||
may narrow, wrap, or replace them before capture or provide custom callbacks
|
may narrow, wrap, or replace them before capture or provide custom callbacks
|
||||||
with `ckprompt.Suite`. Add concrete request validation and smoke testing
|
with `ckprompt.Suite`. Add concrete request validation, prepared-request preview,
|
||||||
explicitly with `WithRequestValidation` and `WithSmokeTesting`. Inspection,
|
and smoke testing explicitly with `WithRequestValidation`,
|
||||||
|
`WithRequestPreparation`, and `WithSmokeTesting`. Inspection,
|
||||||
requirements, and catalog operations do not execute prompts or contact model
|
requirements, and catalog operations do not execute prompts or contact model
|
||||||
providers; application loaders and callbacks retain their own effects. Smoke
|
providers; application loaders and callbacks retain their own effects. Smoke
|
||||||
testing invokes the selected native PromptKit operation; the
|
testing invokes the selected native PromptKit operation; the
|
||||||
|
|||||||
@@ -1,13 +1,13 @@
|
|||||||
// Package ckprompt, provided by go.maximumdirect.net/ckprompt, provides optional
|
// Package ckprompt, provided by go.maximumdirect.net/ckprompt, provides optional
|
||||||
// PromptKit configuration comparison,
|
// PromptKit configuration comparison,
|
||||||
// prompt catalogs, named inspections, requirements discovery and validation,
|
// prompt catalogs, named inspections, requirements discovery and validation,
|
||||||
// and native smoke testing for CommandKit. Its command factories return
|
// prepared-request preview, and native smoke testing for CommandKit. Command
|
||||||
// canonical commandkit.Command declarations. Applications can install
|
// returns a canonical declaration; Declarations adds scoped flag aliases.
|
||||||
// commandkit.RoutingRule aliases alongside them through commandkit.New or
|
// Applications can install those alongside other declarations through
|
||||||
// App.Register. Importing ckprompt installs neither family; callers compose its
|
// commandkit.New or App.Register. Importing ckprompt installs neither family; callers compose its
|
||||||
// declarations with core and ckconfig explicitly. Provider diagnostics remain
|
// declarations with core and ckconfig explicitly. Provider diagnostics remain
|
||||||
// passive until the owning command submits them through the invocation
|
// passive until the owning command submits them through the invocation
|
||||||
// reporter, separately from any terminal explanation. This module uses
|
// reporter, separately from any terminal explanation. This module uses
|
||||||
// PromptKit v0.18.0 and its native engine inventory, including configured
|
// PromptKit v0.20.0 and its native engine inventory, including configured
|
||||||
// bundled resources.
|
// bundled resources.
|
||||||
package ckprompt
|
package ckprompt
|
||||||
|
|||||||
@@ -16,8 +16,6 @@ go.maximumdirect.net/commandkit v0.3.0 h1:RCmg2GS8uzlLSJCIqarpn1uFDec0W3ylNNRRPT
|
|||||||
go.maximumdirect.net/commandkit v0.3.0/go.mod h1:ZS98DewKNVBygKVDoh5MFD09CnPlP37dS9pVsID5Eoc=
|
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 h1:UzXN2ZMnEkcL0O4YSLqD9qd9M1gb/NWCHQR/H8AaQzA=
|
||||||
go.maximumdirect.net/configkit v1.1.0/go.mod h1:s1zLJ9GGB/1Q4a+aOHMLISonJxWFgNWpA6SpPlOafeA=
|
go.maximumdirect.net/configkit v1.1.0/go.mod h1:s1zLJ9GGB/1Q4a+aOHMLISonJxWFgNWpA6SpPlOafeA=
|
||||||
go.maximumdirect.net/promptkit v0.18.0 h1:mrO+mangAPiR1xdtYjTHemH5xA//waddekVnhI5i0yE=
|
|
||||||
go.maximumdirect.net/promptkit v0.18.0/go.mod h1:NTdAFcqISmmgiAGch2+s/mHrZTrkUXJYGKc1UfUMF24=
|
|
||||||
go.maximumdirect.net/promptkit v0.20.0 h1:ZpwbjiCZWXdnnZ26RuWKoOco0jFnaAX8m2tQAX7ZlnM=
|
go.maximumdirect.net/promptkit v0.20.0 h1:ZpwbjiCZWXdnnZ26RuWKoOco0jFnaAX8m2tQAX7ZlnM=
|
||||||
go.maximumdirect.net/promptkit v0.20.0/go.mod h1:kCoyvI0xSax9K9aRPCEkpkyAP5YLs157oBLFLdzgRbM=
|
go.maximumdirect.net/promptkit v0.20.0/go.mod h1:kCoyvI0xSax9K9aRPCEkpkyAP5YLs157oBLFLdzgRbM=
|
||||||
go.yaml.in/yaml/v4 v4.0.0-rc.6 h1:1h7H1ohdUh93/FyE4YaDa1Zh64K6VVbjF4K6WUxMtH4=
|
go.yaml.in/yaml/v4 v4.0.0-rc.6 h1:1h7H1ohdUh93/FyE4YaDa1Zh64K6VVbjF4K6WUxMtH4=
|
||||||
|
|||||||
Reference in New Issue
Block a user