628 lines
40 KiB
Markdown
628 lines
40 KiB
Markdown
# PromptKit v0.19.0 adoption and ConfigKit operator CLI
|
|
|
|
Status: proposed roadmap for review. Scope is agreed in principle; implementation
|
|
has not started. Command spellings, report designs, and API changes below are
|
|
recommendations until the open decisions are resolved.
|
|
|
|
## Purpose and ownership
|
|
|
|
Adopt released PromptKit v0.19.0 and expose useful operator tasks through
|
|
standard CommandKit commands, flags, and reports. This roadmap covers CLI
|
|
exposure, including ConfigKit v1.1.0 operator features in `ckconfig`. It does not
|
|
turn `ckprompt` into a convenience library for application-internal PromptKit
|
|
operations. Applications continue to own engine construction, domain inputs,
|
|
credentials, execution, and their executable lifecycle.
|
|
|
|
The [architecture policy](../policy/architecture.md),
|
|
[optional-module decision](../adr/0010-optional-integration-modules.md), and
|
|
[reporting decision](../adr/0014-invocation-reporting.md) govern implementation.
|
|
The [CLI reference](../cli.md) and public GoDoc remain the owners of implemented
|
|
contracts. This roadmap selects work for review, not new guarantees about
|
|
upstream behavior or permanent limits on future features.
|
|
|
|
## Baseline and released evidence
|
|
|
|
Repository baseline: `0b4e47c4206e323f7c5d5ec3f357494dd23008b2`.
|
|
The completed v0.18.0 adoption is not reopened.
|
|
|
|
| Component | Current baseline | Target |
|
|
| --- | --- | --- |
|
|
| Core | `go.maximumdirect.net/commandkit`; Go 1.26.0 minimum | No core change currently identified. |
|
|
| `ckconfig` | ConfigKit v1.1.0; Go 1.27.0; core v0.3.0 | Shared CLI inspection extensions and a new appropriate module release. |
|
|
| `ckprompt` | PromptKit v0.18.0; ConfigKit v1.1.0; ckconfig/core v0.3.0; Go 1.27.0 | PromptKit v0.19.0 and the ckconfig version delivering the shared work. |
|
|
| Candidate | [ckprompt v0.3.0](../../integrations/ckprompt/docs/releases/v0.3.0.md), recorded as unpublished | Update the unpublished candidate after checking its status during implementation. |
|
|
| Local workspace | Core and both integrations, Go 1.27.0 | Validate local composition and independent modules separately. |
|
|
|
|
Use PromptKit tag `v0.19.0`, commit
|
|
`4f3212bfb6c1f37f43d50715c2cedc1d43203064`. Its Go minimum remains
|
|
1.27.0 and its ConfigKit dependency remains v1.1.0. Reviewed sources are the
|
|
[release notes](https://forge.maximumdirect.net/base-layer/promptkit/src/commit/4f3212bfb6c1f37f43d50715c2cedc1d43203064/docs/releases/v0.19.0.md),
|
|
[request and report types](https://forge.maximumdirect.net/base-layer/promptkit/src/commit/4f3212bfb6c1f37f43d50715c2cedc1d43203064/types.go),
|
|
[engine API](https://forge.maximumdirect.net/base-layer/promptkit/src/commit/4f3212bfb6c1f37f43d50715c2cedc1d43203064/engine.go),
|
|
[namespace API](https://forge.maximumdirect.net/base-layer/promptkit/src/commit/4f3212bfb6c1f37f43d50715c2cedc1d43203064/namespaces.go),
|
|
[configuration inspection API](https://forge.maximumdirect.net/base-layer/promptkit/src/commit/4f3212bfb6c1f37f43d50715c2cedc1d43203064/configuration_inspection.go),
|
|
and [smoke API](https://forge.maximumdirect.net/base-layer/promptkit/src/commit/4f3212bfb6c1f37f43d50715c2cedc1d43203064/smoke_diagnostics.go).
|
|
Work against released versions only; do not inspect or monitor unreleased
|
|
upstream work in anticipation of another adoption.
|
|
|
|
ConfigKit v1.1.0 is already adopted at released commit
|
|
`191015e289d7f2b91abb9fdd9c4f2f5cf75b4de9`. Its
|
|
[inspection API](https://forge.maximumdirect.net/base-layer/configkit/src/commit/191015e289d7f2b91abb9fdd9c4f2f5cf75b4de9/inspection.go),
|
|
[metadata API](https://forge.maximumdirect.net/base-layer/configkit/src/commit/191015e289d7f2b91abb9fdd9c4f2f5cf75b4de9/metadata.go),
|
|
and [configuration reference](https://forge.maximumdirect.net/base-layer/configkit/src/commit/191015e289d7f2b91abb9fdd9c4f2f5cf75b4de9/docs/config.md)
|
|
support the additional CLI work below without an upstream dependency upgrade.
|
|
Its matched history for registered records moving within lists flows through
|
|
native inspection; it does not introduce identity-based CLI paths or
|
|
element-level effective diffs.
|
|
|
|
Current `ckprompt` supplies prompt/profile inspection, requirements discovery,
|
|
concrete request validation, prompt/profile/backend/namespace/collection
|
|
catalogs, and four smoke operations plus `test all`. Smoke commands already
|
|
expose most execution overrides and detailed native evidence. Validation has
|
|
profile, session, variable, and file-input flags but lacks that override surface.
|
|
There is no concrete request preview or dedicated backend detail command.
|
|
|
|
Current `ckconfig` supplies validation, native effective YAML, source inventory,
|
|
path explanation with history, and reduced semantic comparison. Its `View`
|
|
contains effective, sources, and explanation facets. Native metadata is not
|
|
exposed as a capability. `config sources` returns on acquisition failure before
|
|
rendering evidence; loaders convert native diagnostics into presentation
|
|
messages but do not expose a structured diagnostics report. Relevant boundaries
|
|
are [ckconfig contracts](../../integrations/ckconfig/contracts.go),
|
|
[ConfigKit adapters](../../integrations/ckconfig/configkit_adapter.go), and
|
|
[PromptKit adapters](../../integrations/ckprompt/adapters.go).
|
|
|
|
Effective display currently writes the whole configuration. Sources are reported
|
|
as a complete inventory. Comparison accepts independent config/overlay choices,
|
|
but applies the same application selectors to both typed inputs and succeeds
|
|
when a comparison reports differences. The new tasks extend those boundaries;
|
|
they do not replace already-delivered explanation or smoke functionality.
|
|
|
|
## Targeted end state
|
|
|
|
The original adoption tasks remain included:
|
|
|
|
1. Update the dependency, checksums, attribution, and unpublished candidate note.
|
|
2. Document all three upstream compatibility changes and correct credential
|
|
inspection wording.
|
|
3. Cover the new authentication reason and corrected smoke preparation-error
|
|
propagation at CommandKit's boundary.
|
|
4. Validate the final independent modules and aligned workspace.
|
|
|
|
Add the following operator capabilities. Syntax is illustrative and subject to
|
|
the decisions at the end of this document.
|
|
|
|
| Operator task | Proposed CLI | Owning module and report |
|
|
| --- | --- | --- |
|
|
| Inspect what a concrete prompt request prepares | `promptkit show request ID --profile … --input … --var …` | `ckprompt`: selected IDs, effective settings, rendered/appended messages, output contract and schema, session, hashes, and timing from `PreparedRun`. |
|
|
| Reproduce target/provider settings without editing configuration | Applicable existing smoke override flags on validation and preview; `--extra-params JSON` on these and smoke operations | `ckprompt`: native request forwarding; preview and smoke reports show returned effective settings. |
|
|
| Resolve unqualified resource selections in chosen namespaces | Independent prompt/profile/backend namespace flags | `ckprompt`: delegate to native namespace views, retaining the distinction from catalog filters. |
|
|
| Find configuration paths and inspect their explicitness | `config paths --scope promptkit`, with historical selection; metadata alongside path explanation | `ckconfig`, wired through `ckprompt.ConfigScope`: observed paths, effective presence, explicitness/null/origin evidence, and available history. |
|
|
| Understand both sides of configuration changes | `config diff --scope promptkit --details` | `ckconfig`: native paths, left/right snapshots, presence/redaction, and hidden-change evidence. |
|
|
| Investigate a failed configuration load | `config sources --scope promptkit` on failure; a structured diagnostics operation | `ckconfig`, with both native adapters: acquired source inventory and native codes, severities, paths, and locations while retaining the load failure. |
|
|
| Inspect one effective value or subtree | `config show --scope app --path /server` | `ckconfig`: the selected native effective snapshot, retaining redaction and absence/null distinctions. |
|
|
| Follow a source reference | `config sources --source-id ID` | `ckconfig`: the matching acquired source record, including evidence available after failure. |
|
|
| Compare different application selections | For example, `config diff --campaign spring --against-campaign autumn` | `ckconfig`: independently prepared typed inputs passed to the existing native comparison provider. |
|
|
| Detect configuration differences in scripts | `config diff --check` | `ckconfig`: a deliberate difference outcome based on native records, alongside the selected comparison report. |
|
|
| Narrow an inspection to relevant evidence | Subtree/explicitness filters on `config paths`; severity/code filters on `config diagnostics` | `ckconfig`: filtered native evidence with source references retained. |
|
|
|
|
Transient configuration overrides are an open scope decision under OD-11, with
|
|
a recommendation to include them as an optional loader capability. Illustrative
|
|
`config validate --set /workers=0` and `config show --set /server/port=8080`
|
|
would apply explicit overrides during acquisition without editing source files.
|
|
Their inclusion and exact CLI/API contract remain for review.
|
|
|
|
### Compatibility and native semantics
|
|
|
|
Document these v0.19.0 changes for consumers constructing engines and inputs:
|
|
|
|
- Successful custom `ArtifactReader.Read` transfers ownership of its returned
|
|
artifact and mutable body storage. Readers retaining scratch storage must
|
|
supply independent returned storage and stop mutating returned aliases.
|
|
- `ProfileSource` and `BackendSource` provider maps now use ConfigKit's native
|
|
recursive Mapping forms: built-in scalar values, `[]any`, and
|
|
`map[string]any`. Explain explicit conversion of `json.Number` and typed
|
|
containers. Runtime execution overrides have a separate accepted-value
|
|
contract; do not impose configuration-source restrictions on their flags.
|
|
- Local-validation and structured-output schemas must be self-contained.
|
|
External resources and filename-dependent base references fail preparation;
|
|
internal references or explicit schema IDs supply the supported route.
|
|
|
|
No configuration-format migration is required from v0.18.0. Correct the CLI
|
|
description of `api_key_required`: it indicates a usable direct or environment
|
|
credential requirement and can coexist with `api_key_env`. Neither field is
|
|
evidence of current credential availability.
|
|
|
|
The new authentication response-limit reason is factual evidence with unknown
|
|
credential acceptance. Continue forwarding native findings without converting
|
|
false, unknown, unsupported, or incomplete observations into command failures.
|
|
Actual preparation/operation errors retain the operational outcome and supported
|
|
cause identity. Native errors and their categories remain upstream-owned.
|
|
|
|
### Preview and request flags
|
|
|
|
Add an independently available preview capability alongside existing suite
|
|
callbacks. The native adapter calls `Engine.Prepare` and projects its returned
|
|
snapshot; a preliminary `ValidateRequest` call is unnecessary. Use existing
|
|
typed selection, acquisition diagnostics, and invocation reporting patterns.
|
|
Exact callback names and signatures follow the selected CLI design.
|
|
|
|
Preview performs applicable resource I/O and rendering but no model call.
|
|
Rendered and appended messages contain application content. Upstream excludes
|
|
resolved credentials from prepared settings; that does not make the whole
|
|
snapshot a redacted configuration report or a transferable execution handle.
|
|
Expose the upstream snapshot evidence without implying later execution uses
|
|
that exact snapshot or will succeed.
|
|
|
|
Provide public, reusable typed execution-flag collections in `ckprompt`, defined
|
|
once and used by smoke, validation, preview, and application-owned commands.
|
|
The collections standardize flag names, help, parsing, completion hints,
|
|
supplied-value tracking, and binding into native PromptKit request fields.
|
|
Applications retain their own input structs, request construction, engine
|
|
acquisition, execution, and outcomes. Reusing CLI declarations is within
|
|
CommandKit's ownership boundary; it does not introduce runtime convenience APIs.
|
|
|
|
Use the existing core `CommandSpec[I].Flags`, typed flag constructors, and
|
|
`Supplied[T]`. A generic collection factory can accept destination accessors
|
|
and return ordinary `[]commandkit.Flag[I]`. Direct binding is sufficient for
|
|
ordinary use; existing [CaptureFlags and FlagValues.ApplyTo](../../flag_values.go)
|
|
support deferred application or multiple destinations where needed. No core
|
|
change or new core collection abstraction is currently required. Exact exported
|
|
names and accessor signatures remain implementation design choices.
|
|
|
|
Keep execution-target overrides and the request-level transient retry field
|
|
distinct even when one convenient collection includes both. Preserve omission
|
|
instead of imposing shared defaults: ordinary execution and smoke diagnostics
|
|
have different native retry defaults. Preserve native explicit zero/empty
|
|
values and whole-map replacement semantics. Support deliberate subsets for
|
|
actual command needs while retaining common flag names and meanings, using a
|
|
proportionate composition API. Keep parsing in CommandKit and domain validity
|
|
in PromptKit. Existing application builders remain usable; resolve override
|
|
precedence and the remaining request controls under OD-2 before documenting new
|
|
public behavior.
|
|
|
|
### Namespace selection
|
|
|
|
Design independent prompt, profile, and backend defaults together. Native
|
|
`WithNamespaces` replaces all defaults on its new view; it has no partial-update
|
|
semantics. Omission must therefore have a deliberate meaning when a loader
|
|
already returns a scoped engine (OD-3).
|
|
|
|
Qualified IDs pass through native selection unchanged. Captured references,
|
|
configuration inspection, and namespace/collection inventories retain their
|
|
native meanings. Existing `--namespace`/`--all-namespaces` catalog filters
|
|
continue to describe filtering. Install new selectors only on operations where
|
|
they have a defined use; define that applicability table during implementation.
|
|
|
|
### Shared configuration capabilities
|
|
|
|
Extend `ckconfig` through optional capabilities so existing custom providers can
|
|
keep their currently declared operations. Both `FromConfigKit` and
|
|
`ckprompt.ConfigScope` should expose available native evidence. Do not require
|
|
all providers to implement every new operation.
|
|
|
|
For metadata, use `Metadata.HistoricalPaths`, `Lookup`, `IsExplicit`, and
|
|
`History`. Enumeration covers observed paths, not all possible schema fields.
|
|
Do not discard history because effective lookup fails. Existing explanation
|
|
already reports current/historical values; add the missing discovery and
|
|
explicitness instead of reproducing upstream provenance logic. Preserve native
|
|
list-index paths; do not silently reinterpret them as resource IDs.
|
|
|
|
For detailed comparison, project native `Difference` records. Keep snapshots
|
|
and their presence/redaction fields together, including `HiddenChanged` when
|
|
the safe values look equal. Native sequence comparisons remain atomic; this
|
|
work does not add element-level resource matching or a reloadable patch format.
|
|
|
|
For failure investigation, retain `LoadError.Sources()` and `Diagnostics()` as
|
|
evidence alongside the error. The current adapters and `config sources` failure
|
|
path need changes, not just another renderer. Define an acquisition shape that
|
|
distinguishes unavailable evidence from an available empty inventory. A failed
|
|
load does not establish an effective configuration or metadata capability.
|
|
|
|
Render available evidence through normal invocation reporting before terminal
|
|
failure presentation. Keep the original load error and supported identity;
|
|
successful report delivery must not convert failure to success. Preserve
|
|
render/write failures separately through the current outcome machinery. Cover
|
|
cancellation with partial evidence explicitly without promising interruption of
|
|
an arbitrary writer or rollback of already-delivered bytes. OD-6 selects the
|
|
structured diagnostics command and its interaction with ordinary diagnostics.
|
|
|
|
### Additional ConfigKit operator workflows
|
|
|
|
**Focused effective display.** Use the effective snapshot from native
|
|
`Explain(path)` for path-selected display. The ordinary whole-document path
|
|
continues to use `WriteEffective`. A historical-only path can be explainable
|
|
while lacking an effective value; distinguish that case from a present YAML
|
|
null. Select the missing-value behavior, provider availability, and aggregate
|
|
scope applicability under OD-8. Do not read mutable `Result.Config` or source
|
|
files to reconstruct inspection values.
|
|
|
|
**Source selection and report filters.** Select source IDs from the acquired
|
|
inventory, preserving existing record fields and upstream ordering. Native
|
|
`Source(id)` is a convenience, not an additional provider requirement. IDs are
|
|
local to a load and do not guarantee the same source in a later acquisition.
|
|
Apply subtree filtering to parsed configuration paths, not raw string prefixes
|
|
that would confuse `/server` with `/server2`. Specify explicitness filtering for
|
|
historical-only paths without treating unavailable effective metadata as false.
|
|
Diagnostic filters affect the presented records, not the underlying acquisition
|
|
outcome; retain the source references needed to interpret selected records.
|
|
|
|
**Independent comparison selections.** Extend the per-side typed-input design
|
|
in [ADR 0012](../adr/0012-typed-configuration-comparison-pairs.md). Capture
|
|
applicable selector bindings for each side, prepare and check both inputs before
|
|
comparison, and preserve the existing shared invocation state. Resolve omitted
|
|
right selectors, explicit empty values, repeated selectors, and flag-name
|
|
collisions under OD-9. Domain interpretation and loader caching remain with the
|
|
application; the comparison provider still receives two selections.
|
|
|
|
**Comparison assertions.** Base a difference outcome on native record presence,
|
|
including hidden changes whose redacted snapshots look equal. Equal effective
|
|
values can have different histories or explicitness. Comparison also does not
|
|
detect changed credential bytes behind an unchanged secret reference. Define
|
|
the opt-in outcome and report-delivery behavior under OD-10; retain the current
|
|
ordinary diff outcome. A load or comparison failure is not evidence of equality.
|
|
|
|
**Transient override candidate.** If selected in OD-11, parse explicitly supplied
|
|
CLI values into native `Override` records and pass them through a declared loader
|
|
capability. ConfigKit owns override path validity, supported values, precedence,
|
|
decoding, resolution, provenance, and validation. Its configuration overrides
|
|
recursively overlay mappings and replace sequences; this differs from the
|
|
PromptKit execution override's complete provider-map replacement. Do not reuse
|
|
one grammar implementation in a way that erases that distinction. Source-load
|
|
errors remain errors even if an override would replace the affected value.
|
|
|
|
## Work sequence
|
|
|
|
1. **Resolve the significant CLI choices.** Review the open decisions, record
|
|
selections here, and identify affected published reports and flag collisions.
|
|
Prepare concrete command/flag/report examples for implementation review.
|
|
2. **Adopt v0.19.0.** Update `integrations/ckprompt/go.mod` and `go.sum`, then
|
|
[module attribution](../../integrations/ckprompt/docs/oss/attribution.md)
|
|
against the released notices and source commit. Update the unpublished
|
|
candidate note and affected canonical dependency/compatibility guidance.
|
|
No core Go-minimum increase follows from this adoption.
|
|
3. **Implement request inspection and selection.** Add preview, applicable
|
|
override flags, provider-parameter input, and namespace selectors. Implement
|
|
public `ckprompt` execution-flag collections on existing core bindings and
|
|
reuse them in the standard commands. Reuse the standard suite's lifecycle
|
|
and preserve existing application adapter seams.
|
|
4. **Implement shared configuration inspection.** Add metadata discovery and
|
|
explicitness, detailed diff presentation, source evidence on failure, and
|
|
structured diagnostics in `ckconfig`; wire native PromptKit facets through
|
|
`ConfigScope`. Add focused effective display, source selection, and bounded
|
|
metadata/diagnostic filters using those evidence capabilities. Extend typed
|
|
comparison selection and add the selected assertion outcome. If OD-11 is
|
|
accepted, implement explicit override acquisition and comparison-side wiring
|
|
as a separate reviewable unit. Keep boundary coverage with each change.
|
|
5. **Update operator and consumer documentation.** The CLI reference owns
|
|
syntax, report schemas, availability, and outcomes; GoDoc owns callback and
|
|
value contracts. Extend maintained simple/composed examples to demonstrate
|
|
the new CLI tasks using local fixtures, without adding application-internal
|
|
execution helpers. Record intentional compatibility effects in module notes.
|
|
6. **Align module dependencies and validate.** Prepare the `ckconfig` release
|
|
needed by `ckprompt`, update the latter's dependency/checksums, and complete
|
|
the validation below. OD-7 addresses the interim development dependency.
|
|
Publication and hosted delivery remain separate actions under the
|
|
[release procedure](../release.md).
|
|
|
|
## Validation and completion checklist
|
|
|
|
Select focused boundary tests under the [testing policy](../policy/testing.md).
|
|
The checklist concerns adapter/CLI behavior; it does not ask CommandKit to
|
|
retest PromptKit rendering, schema, namespace, or ConfigKit resolution algorithms.
|
|
Default tests remain offline and independent of real credentials.
|
|
|
|
- [ ] Dependency, checksums, attribution commit links, and candidate notes match
|
|
the final selected module versions.
|
|
- [ ] All three compatibility changes and corrected credential wording are
|
|
documented, with earlier v0.18.0 migration guidance retained where relevant.
|
|
- [ ] The authentication response-limit reason survives report projection with
|
|
native unknown facts. Smoke preparation errors retain supported causes and
|
|
operational outcomes, including the no-report case; no model dispatch is
|
|
introduced by CommandKit to handle them.
|
|
- [ ] Preview forwards the intended request and faithfully reports native
|
|
fields. Its CLI path makes no model call and does not create/execute retained
|
|
prepared handles.
|
|
- [ ] New flags preserve selected omission/empty/zero semantics, parse malformed
|
|
inputs through the existing usage path, and do not leak state between runs.
|
|
Numeric decoding of provider JSON matches the selected strategy in OD-2.
|
|
- [ ] The same public execution-flag collection works in a standard subcommand
|
|
and an application-owned command with its own typed input. Parsing, presence,
|
|
metadata, and selected subsets remain consistent; omitted retry values retain
|
|
the applicable native defaults. Application execution behavior remains outside
|
|
the collection.
|
|
- [ ] Namespace defaults, explicit clearing, qualified selections, and catalog
|
|
filters are forwarded according to the selected design.
|
|
- [ ] Metadata discovery distinguishes effective and historical paths, retains
|
|
available history on absent lookup, and projects native field/change records.
|
|
- [ ] Detailed diff retains both snapshots and presence/redaction/hidden-change
|
|
evidence, including empty comparisons and sequence-level changes.
|
|
- [ ] Focused display preserves native snapshot content and distinguishes
|
|
missing/historical-only paths from explicit null. Whole-document display
|
|
retains its current contract.
|
|
- [ ] Source-ID selection works on successful and failed acquisitions. Path,
|
|
explicitness, severity, and code filters preserve the selected evidence and
|
|
source references without masking the acquisition outcome.
|
|
- [ ] Independent comparison selectors preserve the chosen inheritance and
|
|
repeatable-value rules, side-specific checks, and shared-state lifecycle.
|
|
- [ ] Assertion mode distinguishes equality, native differences (including
|
|
hidden changes), usage errors, and operational failures under the selected
|
|
outcome contract. Report-delivery failures remain observable.
|
|
- [ ] OD-11 has an explicit scope decision. If included, only supplied CLI
|
|
overrides reach opted-in loaders, with typed values, safe flag labels,
|
|
selected comparison-side behavior, native errors, and returned provenance
|
|
preserved. No tests independently re-establish ConfigKit override semantics.
|
|
- [ ] Source and diagnostic evidence can be reported with an acquisition error;
|
|
the original failure, unavailable-versus-empty evidence, cancellation, and
|
|
report-delivery failures remain distinguishable.
|
|
- [ ] Existing providers remain usable; help, version, and capability discovery
|
|
do not start acquisition. New operation/flag metadata and static completion
|
|
match the implemented surface.
|
|
- [ ] Maintained consumer examples demonstrate the selected CLI tasks and the
|
|
configuration failure workflow with deterministic local evidence, including
|
|
collection reuse by an application-owned command.
|
|
- [ ] Canonical documentation, module release notes, and roadmap links agree
|
|
with the implemented boundary. Open decisions are resolved or deliberately
|
|
superseded before the corresponding behavior is claimed complete.
|
|
- [ ] Final independent-module and aligned-workspace suites pass, with the
|
|
dependency identities used by each recorded.
|
|
|
|
With the documented Go 1.27.0 toolchain selected, run
|
|
`GOWORK=off GOTOOLCHAIN=local go test ./...` independently in the root,
|
|
`integrations/ckconfig`, and `integrations/ckprompt`. Prepare dependencies before
|
|
offline execution as described in the [release procedure](../release.md).
|
|
Then validate the aligned workspace from the root with:
|
|
|
|
```sh
|
|
GOTOOLCHAIN=local go test ./...
|
|
GOTOOLCHAIN=local go test ./integrations/ckconfig/...
|
|
GOTOOLCHAIN=local go test ./integrations/ckprompt/...
|
|
```
|
|
|
|
Use the [development guide](../development.md) for toolchain/workspace setup and
|
|
documentation checks. Reuse successful checks for unchanged content; these
|
|
adoption checks do not add permanent publication gates. The earlier disposable
|
|
dependency-only compatibility test is preliminary evidence, not completion
|
|
evidence for these features.
|
|
|
|
## Deferred work
|
|
|
|
Focused backend inspection remains in [future work](future.md#promptkit-inspection-and-selection-extensions)
|
|
until a released upstream API supports it. Do not reconstruct backend selection
|
|
from configuration to deliver it in this roadmap. General execution, prepared
|
|
handle lifecycle, sessions, and observer convenience APIs remain application
|
|
responsibilities. Persistent configuration editing, new live probes, dynamic completion,
|
|
JSON report formats, and unrelated deferred proposals are not added by this
|
|
roadmap. Transient acquisition overrides remain an explicit choice in OD-11.
|
|
Discovery tracing and secrets-directory bootstrap commands remain deferred:
|
|
the source inventory is not a trace of rejected search candidates, and bootstrap
|
|
performs application startup effects.
|
|
|
|
## Open Decisions
|
|
|
|
These decisions concern significant choices within the proposed scope. OD
|
|
numbers are local to this roadmap, not the retired adoption documents.
|
|
|
|
### OD-1: Preview command and report presentation
|
|
|
|
**Recommendation:** use `promptkit show request ID`, with YAML as the initial
|
|
report format and the complete relevant `PreparedRun` projection. It sits beside
|
|
definition inspection while clearly requiring concrete inputs. A single native
|
|
preparation supplies both validation and preview evidence. Document rendered
|
|
content disclosure directly in help and CLI guidance.
|
|
|
|
**Alternative:** `promptkit prepare ID`, with text and YAML reports. This names
|
|
the native action and makes interactive inspection easier, but can suggest an
|
|
executable prepared handle and adds a second rendering contract. Both forms can
|
|
stay entirely within CLI ownership; select vocabulary and formats before coding.
|
|
|
|
### OD-2: Request controls and provider-parameter grammar
|
|
|
|
**Agreed design direction:** execution flags are public reusable CLI collections
|
|
owned by `ckprompt`, available to standard and application-owned commands using
|
|
existing core APIs. The remaining decisions here concern request controls and
|
|
grammar, not whether application commands may reuse the collections.
|
|
|
|
**Recommendation:** give validation and preview the applicable execution flags
|
|
already on smoke tests, and add a singleton `--extra-params JSON` object option
|
|
to all three. Use native whole-map replacement, including native behavior for
|
|
empty maps. Specify JSON number decoding deliberately so supported values reach
|
|
PromptKit without accidental precision loss or new numeric guarantees. Retain
|
|
the current authoritative-builder rule: the standard flags seed a request and
|
|
an application builder can return its complete replacement.
|
|
|
|
**Alternative:** repeatable `--extra-param KEY=JSON` assignments. This is easier
|
|
for individual shell overrides, but requires rules for duplicate keys and makes
|
|
whole-map replacement less obvious. It must still construct a single native map
|
|
rather than imply an upstream field-by-field merge.
|
|
|
|
**Remaining request surface:** recommend keeping output-contract overrides,
|
|
inline-input flags, and appended-message flags as separately selectable CLI
|
|
extensions after execution-flag parity. Existing file inputs and application
|
|
builders continue to support preview. A viable alternative is to include a
|
|
whole-output-contract file option and message/input options now, supporting
|
|
more reproduction workflows at the cost of additional syntax, precedence, and
|
|
reporting decisions. No general-purpose request-building API follows from
|
|
either choice.
|
|
|
|
### OD-3: Namespace flags and loader defaults
|
|
|
|
**Recommendation:** make the standard namespace selectors opt-in with explicit
|
|
suite-owned namespace defaults. Compose supplied fields with those defaults,
|
|
then apply one native `WithNamespaces` call. Loaders using this option leave
|
|
default selection to that adapter. This gives omission and explicit empty
|
|
values predictable meanings without trying to read private engine state.
|
|
Without the option, existing scoped loaders continue as before.
|
|
|
|
**Alternative:** pass presence-aware namespace choices to an acquisition
|
|
callback and let the application combine them with its existing loader defaults.
|
|
This accommodates applications whose defaults depend on domain input, but adds
|
|
consumer wiring and makes consistent behavior less automatic. Either design
|
|
must account for the native API replacing all three defaults at once.
|
|
|
|
### OD-4: Configuration path and metadata presentation
|
|
|
|
**Recommendation:** add `config paths` with effective paths by default and an
|
|
explicit historical selection, and expose optional metadata alongside existing
|
|
path explanation. Use the current single-scope selection model. This makes
|
|
paths discoverable and uses an established command for their meaning/history.
|
|
Define availability and unavailable metadata explicitly for older providers.
|
|
|
|
**Alternative:** a separate `config metadata --path …` operation plus historical
|
|
enumeration. This keeps the existing explanation report unchanged and gives
|
|
metadata-only providers an independent operation, but splits related operator
|
|
information across commands. Weigh that compatibility benefit against the
|
|
extra command and report contract before selecting additive explanation fields.
|
|
|
|
### OD-5: Detailed comparison selection and shape
|
|
|
|
**Recommendation:** add `--details` to `config diff`, retaining the existing
|
|
default. Emit a YAML record sequence carrying native paths, snapshots, and
|
|
hidden-change fields, preferably within a scope-labeled envelope. This supplies
|
|
the missing evidence without changing existing reduced-report consumers.
|
|
|
|
**Alternative:** replace the reduced form with the detailed report in a new
|
|
minor module release. One canonical report is simpler to maintain and avoids
|
|
selection flags, but requires migration of published CLI consumers. The release
|
|
policy permits a deliberate pre-v1 minor compatibility change; the benefit must
|
|
justify that disruption.
|
|
|
|
### OD-6: Failure evidence and structured diagnostic delivery
|
|
|
|
**Recommendation:** extend `config sources` to report acquired inventory on
|
|
failure and add `config diagnostics --format yaml` for native structured records
|
|
and their source legend. Build this as optional `ckconfig` evidence facets,
|
|
including evidence returned with an acquisition error. Keep ordinary human
|
|
messages on the diagnostic stream and structured results on the result stream,
|
|
using existing terminal failure/outcome handling. This is a bounded operator
|
|
workflow with no demonstrated need for a generic core diagnostics schema.
|
|
|
|
**Alternative:** add structured diagnostic output to every configuration
|
|
operation through a common format option or report envelope. It avoids a
|
|
second invocation when diagnosing another command, but complicates existing
|
|
native YAML/report shapes and result-versus-diagnostic stream contracts. A
|
|
broader core representation is viable if concrete cross-family needs justify
|
|
it; it is more work than exposing ConfigKit records alone. Specify warning
|
|
presentation, evidence availability, and partial-result cancellation behavior
|
|
for the selected design rather than silently changing all operations.
|
|
|
|
### OD-7: Module release and interim workspace coordination
|
|
|
|
**Recommendation:** prepare a new ckconfig minor release for the shared API/CLI
|
|
features, then update the still-unpublished ckprompt candidate to require it.
|
|
Confirm available versions under the existing release procedure. During joint
|
|
development use the ignored aligned workspace; record that workspace success
|
|
does not establish independent ckprompt compatibility with its old ckconfig
|
|
requirement. Before final independent validation, pin the released ckconfig
|
|
version actually supplying the APIs. Publication requires its own authorization.
|
|
|
|
**Alternative:** publish a compatibility-only ckprompt release first and deliver
|
|
the additional CLI features in subsequent releases. This makes v0.19.0 fixes
|
|
available sooner, but creates an extra consumer upgrade and does not complete
|
|
this roadmap's targeted end state. A disposable local module replacement can
|
|
help test intermediate changes, but cannot substitute for final validation of
|
|
the declared released dependency.
|
|
|
|
### OD-8: Focused configuration reports and filtering
|
|
|
|
**Recommendation:** extend existing commands: `config show --path POINTER` and
|
|
`config sources --source-id ID`; add subtree/explicitness filters to
|
|
`config paths` and severity/code filters to `config diagnostics`. Keep full reports as
|
|
the default. Use the existing explanation capability for selected effective
|
|
YAML, and recommend an operational failure for an absent effective path or
|
|
unknown source ID, consistent with unknown-path explanation. Recommend starting
|
|
path-selected display with one scope; whole-document `--scope all` remains
|
|
available. Specify presence-aware explicitness filtering so historical-only
|
|
entries are not labeled implicitly defined. These choices reuse existing
|
|
operator vocabulary and native evidence with little additional acquisition work.
|
|
|
|
**Alternative:** introduce a `config get --path POINTER` command with a snapshot
|
|
envelope containing `present`, `redacted`, and `yaml`, and return absence as
|
|
report data. This is convenient for scripts and preserves unknown/null/absence
|
|
distinctions without relying on exit status, but adds another command/report
|
|
contract. Aggregate path-selected reports are also viable if scope-labeled
|
|
per-scope absence and delivery semantics are designed. Filters can be deferred
|
|
in favor of downstream YAML tools, reducing CLI surface but making routine
|
|
operator inspection more cumbersome.
|
|
|
|
### OD-9: Independent comparison selector bindings
|
|
|
|
**Recommendation:** let applications declare which domain selectors support
|
|
right-side comparison values, with explicit metadata for their `--against-*`
|
|
spellings. Omission inherits the left value and presence; an explicit right
|
|
value replaces it. For repeatable selectors, recommend replacing the inherited
|
|
collection with the supplied right collection. This follows config/overlay
|
|
selection conventions and supports comparisons such as two campaigns without
|
|
requiring different files. Review the selected refinement of ADR 0012 and flag
|
|
collision handling before implementation; exact helper signatures remain open.
|
|
|
|
**Alternative:** require symmetric explicit left/right selectors for opted-in
|
|
bindings. This makes each side independent and easier to reason about when
|
|
defaults are complex, but adds repetition and departs from the existing
|
|
right-inherits-left convention. Either design keeps application domain parsing
|
|
in its declared bindings and avoids inventing a generic selector language.
|
|
|
|
### OD-10: Comparison assertion outcomes
|
|
|
|
**Recommendation:** add opt-in `--check`, retaining normal report delivery and
|
|
ordinary diff behavior when omitted. Recommend status `0` for equality and a
|
|
domain difference status `3`; retain current usage `2` and operational `1`
|
|
classification. This lets scripts distinguish differences from failed
|
|
comparison. The status is a proposal, not an existing contract. Apply existing
|
|
reporting outcome rules, including preservation of a nonzero domain outcome
|
|
when presentation also fails; callers can inspect the separate presentation
|
|
evidence. Document that interaction explicitly.
|
|
|
|
**Alternative:** add a separate `config compare` assertion command, leaving
|
|
`diff` exclusively informational. This makes the intent visible in the command
|
|
path but duplicates selection/report options. Another viable choice is status
|
|
`1` for both differences and operational failures, which fits simple shell
|
|
checks but requires additional evidence to distinguish the two conditions.
|
|
|
|
### OD-11: Transient configuration overrides
|
|
|
|
**Recommendation:** include a declared, opt-in override capability for standard
|
|
configuration commands, with repeatable `--set POINTER=JSON` values passed to
|
|
application acquisition as native ConfigKit overrides. This enables validation,
|
|
inspection, and comparison of temporary settings through consistent CLI syntax.
|
|
Providers that do not accept overrides retain their existing operations. No
|
|
source file is edited, and no general application-internal convenience API is
|
|
required. The loader contract must state how it combines these records with
|
|
any existing application-owned overrides; the generic adapter cannot inject
|
|
them into an arbitrary loader after the load has completed.
|
|
|
|
If selected, settle these details before implementation:
|
|
|
|
- Split at the first `=`; JSON supplies typed null, boolean, string, numeric,
|
|
array, and object values. Specify numeric conversion to ConfigKit-supported
|
|
built-in forms rather than passing `json.Number` or silently promising
|
|
arbitrary numeric precision. An unambiguous alternate input form may be
|
|
needed for pointer keys containing `=`.
|
|
- Forward explicit records only, with safe display labels such as `--set`,
|
|
never raw value-bearing arguments as provenance labels. Preserve native
|
|
duplicate/overlap handling rather than silently collapsing assignments.
|
|
- Follow the released mapping-path constraints, including root/index and
|
|
schema-version restrictions, without extending them into a generic patch
|
|
language. Empty, false, zero, and null remain intentional supplied values.
|
|
- For comparison, recommend `--set` as the shared baseline and
|
|
`--against-set` as a right-side replacement list when supplied, following
|
|
OD-9's proposed repeatable-selector rule. Define an explicit way to select
|
|
an empty right list before finalizing this grammar; appending or replacing
|
|
individual paths would need a different selected rule.
|
|
- Reflect native CLI origins and subsequent resolution in existing reports.
|
|
Test CommandKit parsing, forwarding, and outcome/report adaptation, leaving
|
|
ConfigKit's override algorithm to its own tests.
|
|
|
|
**Alternative A:** retain application-specific typed flags and loader translation
|
|
to `Options.Overrides`. This gives applications tailored vocabulary and avoids
|
|
generic JSON numeric/path syntax, but repeats CLI infrastructure and prevents
|
|
uniform temporary-setting workflows across applications. This is a viable
|
|
deferral if the generic acquisition contract is too disruptive for this sprint.
|
|
|
|
**Alternative B:** accept a structured override document containing path/value
|
|
records instead of inline `--set` assignments. It handles complex values and
|
|
unusual pointer keys naturally and makes an empty comparison-side list explicit,
|
|
but adds file-input handling and is less convenient for one-value shell changes.
|
|
It still needs deliberate typed-value decoding and loader opt-in. Neither
|
|
alternative authorizes persistent configuration mutation.
|