531 lines
28 KiB
Markdown
531 lines
28 KiB
Markdown
# ConfigKit, PromptKit, and ReleaseKit adoption
|
||
|
||
Status: implementation complete, including all three dependency upgrades and
|
||
smoke testing. The [implementation plan](implementation.md) records completion
|
||
of Stages 1–18; [remediation.md](remediation.md) records focused review follow-up
|
||
and its completion evidence. The following sections preserve the accepted target
|
||
and original migration intent.
|
||
|
||
## Purpose and authority
|
||
|
||
Adopt ReleaseKit v0.4.2, ConfigKit v0.8.0, and PromptKit v0.16.0 while providing
|
||
useful operator access to their capabilities. The organizing principle remains:
|
||
**CommandKit provides useful, consistent access to capabilities owned elsewhere.**
|
||
|
||
CommandKit owns vocabulary, registration, selection, coordination, presentation,
|
||
and invocation outcomes. Integrated libraries own configuration composition,
|
||
resource identity and resolution, validation, inspection evidence, and diagnostic
|
||
meaning. Applications choose their inputs, policies, defaults, credentials,
|
||
artifacts, and runtime construction.
|
||
|
||
Keep adaptation proportionate to that ownership. Reports are direct projections
|
||
of upstream data, with small presentation DTOs where YAML naming and formatting
|
||
need them. Preserve native values and meanings rather than introducing a
|
||
parallel semantic model or normalization layer.
|
||
|
||
The [architecture policy](../policy/architecture.md), accepted [ADRs](../adr/),
|
||
and [release policy](../policy/release.md) govern this work. Upstream contract
|
||
changes flow through the owning integration; they do not justify reimplementing
|
||
removed behavior in CommandKit. The [CLI reference](../cli.md),
|
||
[consumer guide](../consumers/guide.md), [ckconfig GoDoc](../../integrations/ckconfig/doc.go),
|
||
and [ckprompt GoDoc](../../integrations/ckprompt/doc.go) own implemented usage
|
||
and contracts. The completed implementation plan records delivery evidence.
|
||
|
||
## Planning baseline and reviewed releases
|
||
|
||
The original adoption review used CommandKit baseline
|
||
`5f633e3feea71f623e5e378a7df476ff7e811e5e`; the implementation plan began at
|
||
`38b49f29fb3a8f22ff02528d2a0ed413e5c6ab1e`. This section records the historical
|
||
starting point and reviewed releases, rather than current dependency metadata.
|
||
|
||
| Dependency | Planning baseline | Adopted release | Owning CommandKit area |
|
||
| --- | --- | --- | --- |
|
||
| ReleaseKit | Root tool requirement v0.4.0; integration graphs selected v0.4.1 | v0.4.2 | Root tool pin, launcher integration, release documentation, and notices |
|
||
| ConfigKit | v0.7.1 in both integrations | v0.8.0 | ckconfig adaptation and reports; ckprompt's direct dependency |
|
||
| PromptKit | v0.15.0 | v0.16.0 | ckprompt adapters, standard commands, reports, and composed consumer |
|
||
|
||
At that baseline, the root module owned generic commands, dispatch, bindings,
|
||
help/version, and outcomes. ckconfig owned the configuration family. ckprompt
|
||
supplied prompt/profile catalogs, named inspection, requirements discovery, and
|
||
concrete request validation; its engine configuration scope was composed through
|
||
ckconfig. Current capabilities are documented in the
|
||
[consumer guide](../consumers/guide.md#promptkit-configuration-definitions-and-requirements).
|
||
|
||
The completed [requirements roadmap](promptkit-validation.md),
|
||
[original implementation plan](https://gitea.maximumdirect.net/eric/CommandKit/src/commit/38b49f29fb3a8f22ff02528d2a0ed413e5c6ab1e/docs/roadmap/implementation.md),
|
||
and [preceding remediation record](https://gitea.maximumdirect.net/eric/CommandKit/src/commit/730f930b47c929fb2c59a25a75cbe2924dfc75bb/docs/roadmap/remediation.md)
|
||
remain historical evidence for the pre-upgrade baseline.
|
||
|
||
Reviewed upstream references:
|
||
|
||
| Release | Source commit | Release record |
|
||
| --- | --- | --- |
|
||
| ReleaseKit v0.4.2 | `7d033c5ca1c95aec7db9690293638a0a1ac887b8` | [Release notes](https://gitea.maximumdirect.net/eric/ReleaseKit/src/commit/7d033c5ca1c95aec7db9690293638a0a1ac887b8/docs/releases/v0.4.2.md) |
|
||
| ConfigKit v0.8.0 | `137769f3f18a370c68444242fb5d88e620e307e5` | [Release notes](https://gitea.maximumdirect.net/eric/ConfigKit/src/commit/137769f3f18a370c68444242fb5d88e620e307e5/docs/releases/v0.8.0.md) |
|
||
| PromptKit v0.16.0 | `9178f3eb91c2b2138caa78e22be93c048b4bc992` | [Release notes](https://gitea.maximumdirect.net/eric/promptkit/src/commit/9178f3eb91c2b2138caa78e22be93c048b4bc992/docs/releases/v0.16.0.md) |
|
||
|
||
All three releases retain Go 1.26.0 as their consumer minimum. The adoption
|
||
preserved CommandKit's Go minimum and selected release toolchain.
|
||
|
||
## Dependency and delivery boundaries
|
||
|
||
Delivery includes all three upgrades, richer configuration source inspection,
|
||
expanded PromptKit discovery, and explicitly invoked smoke testing. The completed
|
||
[implementation plan](implementation.md) records coding order and stage
|
||
boundaries for the coordinated sprint.
|
||
|
||
ReleaseKit has no runtime ordering dependency on the other two. During adoption,
|
||
ConfigKit was the prerequisite for PromptKit v0.16.0: upgrading PromptKit first
|
||
would have selected ConfigKit v0.8.0 transitively while ckconfig still declared
|
||
v0.7.1. Both integrations now declare ConfigKit v0.8.0 directly, preserving
|
||
alignment across their independent module graphs.
|
||
|
||
Publication remains source-only and follows the existing
|
||
[core, ckconfig, ckprompt dependency order](../release.md#scope-and-release-order)
|
||
for affected releases. CommandKit module versions remain independent of upstream
|
||
version numbers. Explain intentional public API/CLI changes under the existing
|
||
pre-v1 compatibility policy; select concrete release versions during release
|
||
preparation.
|
||
|
||
## Target state: ReleaseKit v0.4.2
|
||
|
||
The root Go tool requirement selects ReleaseKit v0.4.2. The existing launcher,
|
||
three module profiles, shared-file selection, and source-publication procedure
|
||
continue using its supported public contracts. No application command family or
|
||
runtime ReleaseKit import is added.
|
||
|
||
v0.4.1 changed upstream test synchronization. v0.4.2 corrected maintained
|
||
Woodpecker delivery workflows for annotated-tag-object events; their event and
|
||
tag IDs are resolved to commits before verification and delivery. CommandKit
|
||
has no copied Woodpecker delivery workflow and publishes no hosted deliverables,
|
||
so adopting this patch does not require adding either.
|
||
|
||
The adoption updated the root requirement/checksums, selected-graph notices,
|
||
the version named in the release policy, and version/commit references in the
|
||
maintainer release procedure. The launcher and release integration retain the
|
||
supported CLI/profile contracts. The ignored `.releasekit/` directory remains
|
||
local bootstrap storage.
|
||
|
||
If a delivery workflow is introduced later, start from the corrected maintained
|
||
example: changing a module pin does not update copied YAML. This adoption does
|
||
not add delivery automation or new publication gates.
|
||
|
||
## Target state: ConfigKit v0.8.0
|
||
|
||
### Native behavior and ownership
|
||
|
||
Both integration modules use ConfigKit v0.8.0. Its input destinations, relative
|
||
import destinations, sequence-item placement, shared source-version checking,
|
||
and registered identified-sequence composition are available to application
|
||
loaders through upstream public options and definitions.
|
||
|
||
CommandKit does not need a parallel composition layer or new generic flags to
|
||
select those policies. Applications decide whether to enable source-version
|
||
checking, which declarations to accept, and which sequences use identity-based
|
||
composition. Existing ConfigKit defaults preserve prior loading behavior.
|
||
|
||
### Source inspection
|
||
|
||
`config sources` now exposes native destination, placement,
|
||
unresolved-destination, and source-version declaration evidence in text and YAML.
|
||
The [source DTO](../../integrations/ckconfig/sources.go) includes all four while
|
||
preserving the original source fields and native inventory order. OD-1 records
|
||
the accepted intent; the [CLI source-report contract](../cli.md#list-configuration-sources)
|
||
owns the implemented representation.
|
||
|
||
Project the native fields and their values directly into the report, including
|
||
`version_check` corresponding to `SourceInfo.VersionCheck`. Use ConfigKit's
|
||
returned, sanitized evidence and describe its fields neutrally. ConfigKit owns
|
||
the meaning and disclosure of that evidence.
|
||
|
||
`config explain` continues to expose the native explanation/history contract;
|
||
the new SourceInfo fields do not require adding a source inventory to every
|
||
explanation. Compact diagnostic source legends can continue identifying sources
|
||
by ID, label, and filesystem path.
|
||
|
||
### Completed adaptation
|
||
|
||
Both dependency graphs, owning notices, native fixtures, and affected consumer
|
||
guidance were updated. The compatibility review accounted for unkeyed literals
|
||
and equality/map-key assumptions: ConfigKit's expanded `SourceInfo` contains a
|
||
`Path` and is no longer comparable.
|
||
Its [release notes](https://gitea.maximumdirect.net/eric/ConfigKit/src/commit/137769f3f18a370c68444242fb5d88e620e307e5/docs/releases/v0.8.0.md)
|
||
describe this source-compatibility change. The existing provider model need not
|
||
be redesigned merely to adopt these additions.
|
||
|
||
## Target state: PromptKit v0.16.0
|
||
|
||
### ID-based prompt selection and descriptive labels
|
||
|
||
ckprompt uses native ID-only prompt selection. The prompt-specific `--version`
|
||
flag was removed from named prompt inspection, requirements show, and requirements
|
||
validate, together with `PromptRequest.Version` and obsolete selector plumbing.
|
||
The adapter uses `InspectPrompt(ctx, promptID)` and the revised native request
|
||
types.
|
||
Application version reporting remains governed by its existing identity contract.
|
||
|
||
Version labels remain useful metadata. Inspection/catalog report DTOs use the
|
||
native optional representation: `version` for a prompt or collection's reported
|
||
version, omitted when absent and retained as `""` when explicitly empty, as
|
||
accepted in OD-2. Selection continues to use the native ID-only API.
|
||
|
||
The standard requirements operations continue delegating discovery and concrete
|
||
preparation to PromptKit. Partial discovery remains a successful inspection;
|
||
native validation remains authoritative for a constructed request. The existing
|
||
typed input/state, nil-builder path, callback capture, error identity, and
|
||
delivery behavior apply through the revised API.
|
||
|
||
### Explicit configuration and collections
|
||
|
||
The native fixtures and composed consumer now use one direct definition per
|
||
prompt ID. Where an application formerly supplied multiple definitions under
|
||
one ID, it chooses which definition to install or gives distinct resources
|
||
distinct IDs.
|
||
PromptKit's optional resource labels do not make that deployment choice.
|
||
|
||
Treat a root configuration `version` as the upstream source specification
|
||
header, distinct from a prompt's descriptive `version` or a collection's
|
||
`release_version`. Their meaning and any configured acceptance checks remain
|
||
with the owning library and application.
|
||
|
||
Supply backend/profile resources explicitly where needed. Remove assumptions
|
||
about installed provider catalogs and the former built-in standard/auto profiles.
|
||
CommandKit must not silently reintroduce those catalogs. The owning application
|
||
chooses files, embedded inputs, programmatic mappings, and collections.
|
||
|
||
Keep the maintained composed consumer migration small: update its configuration,
|
||
loader, request builder, and fixtures as needed for direct definitions and the
|
||
new interfaces, without requiring a model service. Use a small configuration to
|
||
illustrate the relevant wiring and identities; a comprehensive collections
|
||
example or migration framework is not required. Collections are available
|
||
through native `CollectionInput` and configuration sources; applications need
|
||
not use them to adopt v0.16.0.
|
||
|
||
Configured references retain their native exact identities. Mounting a source
|
||
does not rewrite backend/profile references or extend profile inheritance beyond
|
||
its native scope. Migration guidance should link to the upstream
|
||
[configuration/API migration guide](https://gitea.maximumdirect.net/eric/promptkit/src/commit/9178f3eb91c2b2138caa78e22be93c048b4bc992/docs/consumers/configuration-migration.md).
|
||
|
||
### Expanded operator discovery
|
||
|
||
The optional family exposes these additional catalogs:
|
||
|
||
| Operation | Native capability |
|
||
| --- | --- |
|
||
| `app promptkit list backends` | `Engine.ListBackends` |
|
||
| `app promptkit list namespaces` | `Engine.ListNamespaces` |
|
||
| `app promptkit list collections` | `Engine.ListCollections` |
|
||
|
||
Keep prompt/profile listings and add native namespace filtering where applicable.
|
||
These capabilities remain independently optional; one missing inventory does
|
||
not disable other operations. Reuse the existing construction, registration,
|
||
typed input/state, configuration selection, and diagnostic machinery.
|
||
|
||
Forward native namespace filters and resource-kind selections to their respective
|
||
APIs. PromptKit performs identity resolution and inventory membership selection;
|
||
the adapter translates the selected CLI syntax into those native inputs.
|
||
|
||
The namespace behavior has two distinct owners:
|
||
|
||
- An application loader may return a native `WithNamespaces` engine view. That
|
||
view controls short caller-ID resolution and default resource listing scopes.
|
||
- An explicit native listing filter overrides membership selection for one
|
||
listing call. It does not change the engine view or rewrite configuration.
|
||
|
||
Omitted filters retain native defaults: the corresponding resource view scope,
|
||
or all identities when unscoped. Namespace and collection inventories remain
|
||
global under the upstream contract. Reports show native identities and versions.
|
||
OD-3 records the accepted request/API and CLI filter choices.
|
||
|
||
### Explicit smoke testing
|
||
|
||
Expose PromptKit's `Engine.SmokeTest` through an independently optional
|
||
`promptkit test` command in this roadmap. Keep request construction and report
|
||
presentation close to the native public API, reusing the suite's typed
|
||
input/state, configuration selection, and engine acquisition paths.
|
||
|
||
#### Command vocabulary
|
||
|
||
The selected syntax is:
|
||
|
||
```text
|
||
app promptkit test KIND [options]
|
||
app promptkit test all [options]
|
||
```
|
||
|
||
One operand selects either a native kind or the aggregate `all` operation.
|
||
The native kind spellings are `reachability`, `authentication`, `text_inference`,
|
||
and `structured_output`. `all` is CommandKit-owned coordination syntax, not a
|
||
native `SmokeTestKind`.
|
||
|
||
For example:
|
||
|
||
```text
|
||
app promptkit test reachability --backend local
|
||
app promptkit test authentication --profile editorial
|
||
app promptkit test text_inference --prompt briefing
|
||
app promptkit test structured_output --profile editorial --model example-model
|
||
app promptkit test all --profile editorial
|
||
```
|
||
|
||
#### Request bindings
|
||
|
||
Bind operator inputs directly to `promptkit.SmokeTestRequest` and its native
|
||
`ExecutionTargetOverride`:
|
||
|
||
| CLI input | Native destination | Binding |
|
||
| --- | --- | --- |
|
||
| `KIND` | `Kind` | Native kind string; aggregate expansion is described below. |
|
||
| `--backend` | `BackendID` | String. |
|
||
| `--prompt` | `PromptID` | String. |
|
||
| `--profile` | `ProfileID` | String. |
|
||
| `--endpoint` | `Execution.Endpoint` | String. |
|
||
| `--model` | `Execution.Model` | String. |
|
||
| `--temperature` | `Execution.Temperature` | Optional floating-point value. |
|
||
| `--max-tokens` | `Execution.MaxTokens` | Optional integer. |
|
||
| `--top-p` | `Execution.TopP` | Optional floating-point value. |
|
||
| `--timeout-seconds` | `Execution.TimeoutSeconds` | Optional integer. |
|
||
| `--service-tier` | `Execution.ServiceTier` | String. |
|
||
| `--reasoning-effort` | `Execution.ReasoningEffort` | Optional string. |
|
||
| `--api-key-env` | `Execution.APIKeyEnv` | String. |
|
||
| `--transient-retries` | `TransientRetries` | Optional integer. |
|
||
|
||
Also accept the existing `--config`, `--overlay`, and suite selectors. Reports
|
||
are YAML-only; `--format` defaults to `yaml` and accepts `yaml`. Built-in flags
|
||
are singleton bindings with the established last-occurrence behavior; suite
|
||
selectors retain their declared binding behavior.
|
||
|
||
Preserve omission versus explicit zero or empty values for native pointer
|
||
fields. Leave `Execution` nil when no execution override was supplied. Backend,
|
||
prompt, and profile selectors may be supplied together: PromptKit owns their
|
||
precedence, resolution, defaults, ranges, and request validation. CommandKit
|
||
owns CLI syntax and primitive value conversion.
|
||
|
||
Direct `APIKey` and structured `ExtraParams` remain available through the
|
||
optional application request builder. This scope uses that existing integration
|
||
pattern rather than adding a credential-source mechanism or generic override
|
||
language.
|
||
|
||
#### Consumer API and request construction
|
||
|
||
Use a narrow ckprompt-owned envelope:
|
||
|
||
```go
|
||
type SmokeRequest struct {
|
||
Selection ckconfig.Selection
|
||
Request promptkit.SmokeTestRequest
|
||
}
|
||
```
|
||
|
||
An independently optional `Suite.SmokeTest` callback receives context,
|
||
`SmokeRequest`, typed application input, and shared state, and returns
|
||
`(commandkit.Acquired[*promptkit.SmokeTestReport], error)`. It represents one
|
||
concrete test and preserves both a returned native report and error.
|
||
|
||
Provide `WithSmokeTesting(suite, load, build)` following the existing
|
||
request-validation adapter pattern. The loader uses the existing engine-loader
|
||
signature. The optional builder receives context, `SmokeRequest`, typed input,
|
||
and shared state, and returns a complete native `SmokeTestRequest` and error.
|
||
With no builder, forward the CLI-created native request. With a builder, its
|
||
returned request is authoritative; do not merge CLI values back over it.
|
||
|
||
For aggregate execution, invoke the optional builder separately for each
|
||
concrete kind, seeding that kind into the otherwise common bound request.
|
||
Applications can supply per-kind credentials, structured parameters, or other
|
||
native request choices. The synthetic `all` value does not reach the native
|
||
request or the per-test builder.
|
||
|
||
#### Aggregate execution
|
||
|
||
`app promptkit test all` selects these four tests sequentially, in order:
|
||
|
||
1. `reachability`
|
||
2. `authentication`
|
||
3. `text_inference`
|
||
4. `structured_output`
|
||
|
||
Coordinate the concrete test callbacks within one CommandKit invocation, using
|
||
its configuration selection, prepared typed input, and shared state. Reuse
|
||
configuration acquisition and the engine where practical within the existing
|
||
loader model; this does not require a new caching framework or guarantee a
|
||
particular loader call count.
|
||
|
||
Continue to the next kind after an individual test error so that remaining
|
||
results can be collected. When the invocation is canceled, stop scheduling
|
||
further tests and retain the results already available. PromptKit owns each
|
||
individual operation; CommandKit coordinates the selected sequence.
|
||
|
||
#### Reports and invocation outcomes
|
||
|
||
Present the native `SmokeTestReport`, including observations, timing, attempts,
|
||
and available usage. For `all`, deliver one YAML report containing the
|
||
individual results in execution order, with each selected kind's returned
|
||
report and associated error, when present. Retain useful partial reports
|
||
returned with errors. Preserve supported error identity through the invocation
|
||
outcome as well as presenting the errors.
|
||
|
||
For a single test, a nil native error and successful report delivery mean
|
||
success. For `all`, success requires all selected calls to return without errors
|
||
and reporting to succeed. Native invocation errors use the normal operational
|
||
failure classification; cancellation and delivery failures retain their existing
|
||
outcome handling. Native negative or unknown findings remain reported facts;
|
||
CommandKit does not derive an additional readiness verdict or failure rule from
|
||
them.
|
||
|
||
Use a focused report-delivery path that preserves a returned report alongside
|
||
its native error, including cancellation. The existing success-only inspection
|
||
writer cannot be reused unchanged for that case. Adapt delivery within the
|
||
current outcome model; this work does not require a general diagnostics
|
||
framework. Describe returned data neutrally, without adding warnings about
|
||
perceived upstream limitations.
|
||
|
||
Smoke testing runs when its command is explicitly invoked. Configuration,
|
||
requirements, help, and release operations retain their own existing behavior.
|
||
OD-4 records its inclusion in the current delivery scope; a separate feature
|
||
roadmap is unnecessary. The broader deferred proposals in
|
||
[deferred work](deferred.md) do not defer this selected native capability.
|
||
|
||
## Work across the integrations
|
||
|
||
### Dependencies and attribution
|
||
|
||
Update the owning module requirements and real checksums for the selected
|
||
releases. PromptKit v0.16.0 drops its bundled backend-catalog dependencies;
|
||
remove obsolete indirect requirements, sums, and notices when absent from the
|
||
resulting CommandKit graphs. Do not replace them with implicit catalog loading.
|
||
|
||
Keep root and integration attribution entries matched to their actual selected
|
||
graphs. ConfigKit and PromptKit still declare ReleaseKit v0.4.1 upstream; a
|
||
CommandKit graph may select v0.4.2 through its own core dependency. Record the
|
||
effective selection rather than blindly assigning the root tool version to
|
||
every module. Verify pinned license/notice source links for each adopted release.
|
||
|
||
Core remains independent of optional ConfigKit/PromptKit dependencies, including
|
||
through examples, tests, and tools. Committed builds use released public modules,
|
||
not adjacent checkout replacements.
|
||
|
||
### Documentation and compatibility
|
||
|
||
Update GoDoc, the CLI reference, consumer guidance, maintained examples, internal
|
||
inventory, and release-tool references as their owning implementations land.
|
||
Document changed prompt configuration, ID-only selection, optional label data,
|
||
source evidence, new discovery behavior, and smoke testing under their canonical
|
||
owners.
|
||
|
||
The accepted architecture already supports independently optional operations and
|
||
native-library authority. Adding these optional capabilities and following
|
||
upstream selection semantics fit those accepted boundaries. Any concrete new
|
||
architectural decision is evaluated under the ADR policy.
|
||
|
||
Retain historical release records. Explain incompatible ckprompt changes in an
|
||
appropriately versioned future module release. New source-report fields and
|
||
catalog and smoke capabilities also need accurate CLI/API release notes. This
|
||
roadmap does not require a CommandKit version to mirror any upstream version.
|
||
|
||
### Implementation evidence and testing boundary
|
||
|
||
The [completed implementation plan](implementation.md#stage-18-verify-the-complete-target-and-finish)
|
||
records the delivered target and its workspace/independent-graph validation.
|
||
The [remediation record](remediation.md) tracks the focused follow-up review.
|
||
Testing remains directed to CommandKit-owned interfaces and adaptation under the
|
||
[upstream testing ownership policy](../policy/testing.md#upstream-integration-testing-ownership).
|
||
Verify that command inputs and context reach the intended native APIs, including
|
||
ID-only prompt requests, default/explicit listing filters, and smoke requests.
|
||
Verify faithful representation of upstream-returned source evidence, optional
|
||
labels, inventories, diagnostics, and errors, together with CommandKit's optional
|
||
command availability, invocation lifetimes, outcome classification, and output
|
||
delivery. Include smoke request bindings, per-kind builder forwarding, aggregate
|
||
order and continuation, cancellation, report-plus-error delivery, and error
|
||
identity in this boundary coverage.
|
||
|
||
These checks establish CommandKit's access to the capabilities. They should not
|
||
test whether ConfigKit correctly places or composes sources, checks versions,
|
||
or classifies sensitivity, nor whether PromptKit correctly resolves namespaces,
|
||
discovers requirements, or validates concrete requests. Those domain tests belong
|
||
to the upstream libraries. Real upstream fixtures and maintained offline
|
||
consumers can exercise CommandKit's boundary without duplicating native feature
|
||
test matrices. Existing release-launcher coverage likewise owns CommandKit's
|
||
tool invocation, not ReleaseKit's publication algorithms.
|
||
|
||
Verify all affected modules both in the local workspace and with their own
|
||
readonly dependency graphs. Temporary replacements for unpublished CommandKit
|
||
prerequisites may support development checks; they are not evidence for a
|
||
sibling-replaced upstream dependency or committed build requirements. The
|
||
[developer guide](../development.md) owns the established module-check practices.
|
||
|
||
New tests should protect selected contracts without requiring incidental
|
||
factory activity after failure, complete diagnostic text snapshots, YAML key
|
||
ordering, or arbitrary copies of caller-owned objects. The migration, discovery,
|
||
and smoke adapter checks can use offline fixtures and test doubles; smoke tests
|
||
verify request forwarding and report/error adaptation, leaving provider behavior
|
||
to PromptKit.
|
||
|
||
## Accepted Decisions
|
||
|
||
### OD-1: Representation of the added source evidence
|
||
|
||
**Accepted:** Extend both existing source formats with `destination` using
|
||
ConfigKit's canonical JSON Pointer string (root is `""`), `placement` using native
|
||
mode names, `destination_unresolved`, and `version_check` corresponding to
|
||
`SourceInfo.VersionCheck`.
|
||
|
||
Preserve the native nested evidence: path, version presence/null/text, optional
|
||
source location, and redaction flag. Use native sanitized values and maximize
|
||
API-to-report correspondence. Field descriptions explain the returned data
|
||
neutrally, without promising additional checker behavior or warning about
|
||
perceived upstream limitations.
|
||
|
||
### OD-2: Optional versions in reports
|
||
|
||
**Accepted:** Report a prompt or collection's version as `version`. Omit this
|
||
optional field when the native value is absent; retain `""` when it is present
|
||
and empty. For collections, this projects the native `ReleaseVersion` value.
|
||
Use the same naming and presence treatment across the affected reports.
|
||
|
||
Version metadata retains its upstream meaning. ID-only selection and source
|
||
configuration headers remain governed by their respective native APIs.
|
||
|
||
### OD-3: Catalog requests and namespace-filter syntax
|
||
|
||
**Accepted:** Use narrow ckprompt-owned request envelopes carrying configuration
|
||
selection and native `promptkit.NamespaceFilter` for prompt, profile, and backend
|
||
catalogs. Give namespace enumeration its native resource-kind selection, and
|
||
leave collection enumeration aligned with its unfiltered native API. Revise
|
||
existing catalog callback shapes coherently rather than retaining parallel
|
||
filtered/unfiltered variants solely for the prototype API.
|
||
|
||
For applicable listing commands, map operator input directly to native filters:
|
||
|
||
| Operator input | Native filter mode |
|
||
| --- | --- |
|
||
| No namespace option | `NamespaceDefault` |
|
||
| `--namespace NAME` | `NamespaceNamed` with the supplied name |
|
||
| `--namespace ""` | `NamespaceUnqualified` |
|
||
| `--all-namespaces` | `NamespaceAll` |
|
||
|
||
Existing flag-presence tracking distinguishes omission from an explicitly empty
|
||
namespace. These choices need no separate `--unqualified` flag or reserved
|
||
namespace name such as `all`. Conflicting namespace choices are usage errors:
|
||
one native listing accepts at most one namespace filter.
|
||
|
||
Namespace enumeration uses repeatable `--kind prompt|profile|backend`; omission
|
||
retains the native union. Application-created engine views and explicit listing
|
||
filters retain their separate native meanings.
|
||
|
||
### OD-4: Delivery boundary for smoke testing
|
||
|
||
**Accepted:** Include an independently optional smoke command in this roadmap,
|
||
alongside dependency migration and expanded discovery. Expose the native request,
|
||
operation, and report directly through the existing integration model.
|
||
|
||
Deliver native reports, including a report returned with an error. Successful
|
||
native invocation and report delivery yield success; native errors remain
|
||
operational failures with supported error identity preserved. Native observations
|
||
are reported neutrally. CommandKit does not add an aggregate readiness judgment
|
||
or warnings about perceived upstream limitations.
|
||
|
||
The [explicit smoke testing target](#explicit-smoke-testing) records the accepted
|
||
`promptkit test KIND` and `promptkit test all` vocabulary, native request
|
||
bindings, per-kind builder, and aggregate execution/reporting semantics. A
|
||
separate smoke feature roadmap is not required.
|