Files
commandkit/docs/roadmap/promptkit-v0.18.0.md

357 lines
22 KiB
Markdown
Raw Normal View History

2026-11-04 16:35:03 +00:00
# PromptKit v0.18.0 adoption
Status: proposed; implementation has not begun. This roadmap captures the
ckprompt migration and workspace alignment target. PromptKit v0.18.0 is the
reviewed working baseline. Final release selection, the maintained example's
bundle policy, and optional capability scope have recommendations under
[Open Decisions](#open-decisions); those choices remain open.
2026-11-04 16:35:03 +00:00
## Purpose and authority
Adopt PromptKit's vanity module and current public APIs in the embedded
`ckprompt` integration, using the now-published ckconfig v0.3.0. Restore a
compatible three-module development workspace and composed consumer.
PromptKit and ConfigKit own their domain functionality and semantics.
CommandKit owns faithful adaptation, command selection and coordination,
presentation, and invocation outcomes. Expose upstream capabilities in a
neutral, consistent way, without adding independent guarantees or qualifying
upstream limitations. Application loaders retain engine construction and
configuration choices.
The [architecture](../policy/architecture.md), [agent](../policy/agents.md),
[testing](../policy/testing.md), [documentation](../policy/documentation.md),
[release](../policy/release.md), and [OSS](../policy/oss.md) policies govern the
work. Current behavior remains owned by Go declarations and GoDoc, the
[CLI reference](../cli.md), and the [consumer guide](../consumers/guide.md).
The shared inspection proposals in
[future work](future.md#configuration-inspection-extensions) retain their own
scope. This roadmap records how PromptKit could use that work and identifies
additional capabilities without selecting them as adoption requirements.
2026-11-04 16:35:03 +00:00
## Baseline and review evidence
Reviewed CommandKit revision: `eeae10fa0558bce8de963010fdcea2c40ef68691`.
| Component | Current state |
| --- | --- |
| ckprompt | `go.maximumdirect.net/ckprompt v0.2.0`; Go 1.26.0 minimum |
| PromptKit dependency | `gitea.maximumdirect.net/eric/promptkit v0.16.0` |
| ConfigKit dependency | `gitea.maximumdirect.net/eric/ConfigKit v0.8.0` |
| CommandKit dependencies | Core v0.3.0 and ckconfig v0.2.0 |
| Available ckconfig | v0.3.0, with vanity ConfigKit v1.1.0 and Go 1.27.0 |
| Maintainer toolchain | Go 1.27.0; root ReleaseKit v0.9.0 |
Direct module discovery verified PromptKit v0.18.0 at published commit
`d9f6aad30509e538fc73ea16710df3a3ec084502`. Its module requires Go 1.27.0 and
vanity ConfigKit v1.1.0. Published ckconfig v0.3.0 downloads through its vanity
path and selects that same ConfigKit identity. The current ckprompt still
selects ckconfig v0.2.0 independently and cannot compose with local ckconfig
v0.3.0 in the development workspace.
The upstream [v0.17 migration notes](https://forge.maximumdirect.net/base-layer/promptkit/src/commit/d9f6aad30509e538fc73ea16710df3a3ec084502/docs/releases/v0.17.0.md),
[v0.18 release notes](https://forge.maximumdirect.net/base-layer/promptkit/src/commit/d9f6aad30509e538fc73ea16710df3a3ec084502/docs/releases/v0.18.0.md),
and [configuration/API migration guide](https://forge.maximumdirect.net/base-layer/promptkit/src/commit/d9f6aad30509e538fc73ea16710df3a3ec084502/docs/consumers/configuration-migration.md)
own the upstream changes crossed by this upgrade.
A disposable migration established the following, without changing repository
code or using local dependency replacements:
- Changing dependencies and imports alone fails at four production accesses to
removed prompt-version metadata.
- After removing that metadata, production packages build on Go 1.27.0 against
published ckconfig v0.3.0, ConfigKit v1.1.0, and PromptKit v0.18.0.
- After converting the composed example's PromptKit resources to identified
lists, its profile catalog, source inventory, requirements inspection, and
configuration validation run successfully. The native bundle appears in
catalogs and as source evidence through ckconfig's current report path.
- The full suite still needs version-fixture, configuration-shape, and report
expectation changes. These diagnostics do not establish completed adoption.
## API coverage and capability candidates
A follow-up review compared the published v0.18.0 API with ckprompt at
CommandKit revision `69cc642`. Existing report shapes cover the current prompt,
profile, requirements, catalog, and smoke inspection results after removing
obsolete prompt-version fields. Smoke reports already carry the native facts,
timing, attempts, and usage; the review found no additional report fields to add
in those operations.
Three capabilities merit consideration beyond compatibility migration:
| Capability | Current integration | Recommendation and scope decision |
| --- | --- | --- |
| Configuration metadata and history | Native `ConfigurationInspection.Metadata()` returns ConfigKit metadata. `ConfigScope` connects effective configuration, sources, explanations, and comparison, but has no metadata facet. | Extend the shared optional ckconfig capability first, then connect PromptKit's native metadata. Keep this as the next shared enhancement following adoption; see OD-3. |
| Prepared-request inspection | Native `Engine.Prepare` returns a `PreparedRun` snapshot. ckprompt exposes concrete request validation but has no operation returning preparation results. | Consider an optional provider capability and report as the next substantive ckprompt enhancement. This extends standard inspection into rendering and needs an explicit scope choice; see OD-4. |
| Namespace selection helpers | Native `Engine.WithNamespaces` supplies separate prompt, profile, and backend namespace defaults for unqualified selections. Applications can already return that view from an engine loader. Existing standard namespace selectors filter catalogs. | Begin with documented loader wiring; consider reusable helpers or standard selectors when consumers demonstrate repeated wiring. Keep name resolution distinct from catalog filtering; see OD-5. |
The released [configuration inspection API](https://forge.maximumdirect.net/base-layer/promptkit/src/commit/d9f6aad30509e538fc73ea16710df3a3ec084502/configuration_inspection.go),
[preparation API](https://forge.maximumdirect.net/base-layer/promptkit/src/commit/d9f6aad30509e538fc73ea16710df3a3ec084502/engine.go),
[prepared snapshot](https://forge.maximumdirect.net/base-layer/promptkit/src/commit/d9f6aad30509e538fc73ea16710df3a3ec084502/types.go),
and [namespace API](https://forge.maximumdirect.net/base-layer/promptkit/src/commit/d9f6aad30509e538fc73ea16710df3a3ec084502/namespaces.go)
own those capabilities. They are available in v0.18.0; this review does not imply
that each was introduced in that release.
Request execution and output-validation overrides, session IDs, appended
messages, and retry settings are already reachable through application request
builders. Engine construction and bundle options remain available through
loaders. Consider reusable bindings where consumers repeat the same wiring;
adoption does not require a standard flag for every native option.
`Run`, `PrepareExecution`, `RunPrepared`, and execution observers serve the
application-owned execution workflow. Prepared-request inspection can use
`Prepare` without adding model generation or prepared-handle lifecycle to the
standard suite. Execution, serving, and session operations retain their current
ownership. OD-4 addresses only the proposed rendering-inspection extension.
2026-11-04 16:35:03 +00:00
## Targeted end state
### Modules and Go compatibility
Prepare ckprompt v0.3.0 with this dependency set, subject to OD-1 for the final
PromptKit release pin:
| Requirement | Target |
| --- | --- |
| PromptKit | `go.maximumdirect.net/promptkit v0.18.0` as reviewed baseline |
| ConfigKit | `go.maximumdirect.net/configkit v1.1.0` |
| ckconfig | `go.maximumdirect.net/ckconfig v0.3.0` |
| Core | Retain `go.maximumdirect.net/commandkit v0.3.0` |
| ckprompt consumer minimum | Go 1.27.0 |
Production code, tests, and the maintained composed example use the matching
vanity identities. Public callbacks and provider values exchange those types
consistently. Authentic module metadata and sums select released dependencies;
an old-path bridge or a permanent local replacement is unnecessary.
Core remains independent of the optional libraries and retains its own Go
minimum. The already-migrated ckconfig and root ReleaseKit selection need no
upgrade for this target. The existing Go 1.27.0 maintainer toolchain is suitable.
### Existing commands and faithful report adaptation
Keep the existing engine adapters, five catalogs, named inspections, requirements
discovery, request validation, smoke testing, and configuration scope/comparison.
The reviewed public methods remain suitable; adopting v0.18.0 does not require
a new command family or a second domain implementation.
Remove the descriptive prompt-version output that upstream removed:
- Prompt-catalog entries retain prompt ID and lose their optional `version`.
- Prompt inspection and requirements inspection lose their `version` member;
prompt text inspection also loses the prompt-version line.
- Smoke-target reports lose their optional prompt `version` member.
Remove the associated DTO fields and projection logic rather than manufacturing
replacement values. Prompt IDs and opaque hashes retain their native meanings.
Collection release labels, source specification headers, and unrelated
application version fields are distinct and retain their owning semantics.
This is a deliberate pre-v1 report/API migration, described in the release note.
Configuration inspection now supplies recorded normalized values and derived
defaults through ConfigKit v1.1.0. Existing config reports, explanation, and native
comparison expose that evidence through ckconfig v0.3.0, including source
fallback, version evidence, and empty-import selections. Preserve the returned
history and values; do not reconstruct the former authored-only view. Native
effective-value diffs retain atomic lists. Configuration inspection, profile
inspection, and request preparation remain their respective upstream views.
### Configuration, bundle behavior, and maintained consumers
Migrate PromptKit-owned root and collection `prompts`, `profiles`, and `backends`
to lists with explicit `id` values. Convert calls to `ProfileSource` and
`BackendSource` to ordered record slices where used. Update inheritance and
configuration-inspection paths to the new shapes. Link consumer guidance to
upstream for whole-record replacement, source-root `config` controls, import
requiredness, and optional version-2 specification headers.
Remove maintained-example plumbing whose only role was carrying PromptKit's
removed descriptive version. Preserve independently meaningful application
fields and collection `release_version` labels. Do not globally delete every
configuration member named `version` or rewrite application schema versions.
PromptKit v0.18.0 includes a default-on OpenRouter backend and seventeen root
profiles as a lowest-priority underlay. Catalogs, namespaces, configuration, and
source reports follow the supplied engine's native inventory. The integration
does not silently filter those definitions or disable the bundle. Applications
can select `WithBundledOpenRouter(false)` in their own engine loaders.
OD-2 addresses that choice for the maintained composed example and fixtures.
Existing offline test and smoke-example boundaries remain applicable. Use
explicit native selections and injected clients/transports as appropriate to
the fixture; account for bundled diagnostic fallback rather than accidentally
directing a default test at a live provider. This changes fixture wiring, not
the native capabilities made available to operators.
### Workspace, documentation, and release preparation
Independent module validation uses the real downloaded dependency graph with
workspace discovery off. Once ckprompt's types align, the ignored workspace can
again compose root, ckconfig, and ckprompt, with a workspace Go version that
supports its Go 1.27.0 members. Restore aligned-workspace development guidance
and validate the maintained composed consumer with that local module set too.
Current GoDoc, CLI reports, README/module-selection guidance, maintained example
instructions, and attribution describe the implemented dependency set and
migration. Preserve published notes and historical records. Prepare a ckprompt
v0.3.0 note and full tag `integrations/ckprompt/v0.3.0`, subject to the existing
fresh-version guards. A pre-v1 minor accommodates the deliberate type-identity,
configuration, report, and minimum-Go changes.
Publication and hosted Gitea delivery remain separate operations under the
[release procedure](../release.md). Preparing this roadmap does not publish a
version or select new release gates.
## Work from the baseline
1. Record the working dependency baseline and resolve OD-2's example policy;
carry OD-1's final shipping choice into release preparation. Prepare the
ckprompt dependency/import and Go-minimum changes with the selected Go 1.27
toolchain, then tidy and inspect authentic metadata with workspace discovery
off. Review the effective graph for attribution, including tool requirements.
2. Update native API uses and remove prompt-version DTOs, output, and obsolete
version-only tests. Preserve meaningful adapter assertions and the remaining
report fields, provider capabilities, diagnostics, and outcome coordination.
3. Migrate maintained configuration fixtures, programmatic resource builders,
inheritance references, list-index paths, and composed-example plumbing.
Apply the selected bundle policy explicitly in fixture-owned loaders.
4. Update focused tests for request forwarding and faithful native-result
projection. Account for normalized inspection values and native inventories;
test the CommandKit adaptation rather than independently establishing bundle
contents, normalization rules, inheritance, or provider behavior.
5. Run the full ckprompt suite and maintained example tests against its own
declared dependencies. Validate the restored local workspace and composed
consumer, and perform appropriate core/ckconfig regression checks. Preserve
checks of help/preflight acquisition, selectors, aliases, repeated invocation
state, cancellation, writer failures, and supported native error identity.
6. Update current contract owners, dependency notices and pinned license/source
references, and the candidate release note. Review links, examples, and
whitespace. Record final validation and publication status separately from
the earlier disposable review evidence. Under OD-5's recommendation, include
native namespace-view loader guidance while keeping standard selector design
separate.
The native adapter structure remains the starting point. OD-3 through OD-5 are
unselected scope choices, not additional adoption completion conditions. The
recommended sequence is dependency/report and workspace migration, then shared
metadata inspection, followed by separately selected prepared-request
inspection. Namespace loader guidance can accompany migration documentation.
The detailed-comparison, failed-load-inventory, and structured-diagnostic
proposals in future work remain separate too. If capability scope is expanded
into this release, revise the dependency target, implementation work, validation,
and release documentation to match that decision before implementation.
2026-11-04 16:35:03 +00:00
## Upstream remediation boundary
Post-release audit notes in the sibling PromptKit checkout identify issues in
the same production source as v0.18.0. Relevant examples include unrestricted
authentication-response buffering in the
[native authentication probe](https://forge.maximumdirect.net/base-layer/promptkit/src/commit/d9f6aad30509e538fc73ea16710df3a3ec084502/internal/usecase/smoke_authentication.go)
and inference request-construction errors reported as concluded diagnostics by
the [native smoke tester](https://forge.maximumdirect.net/base-layer/promptkit/src/commit/d9f6aad30509e538fc73ea16710df3a3ec084502/internal/usecase/smoke_tester.go).
Those findings inform OD-1; the disposable CommandKit review did not reproduce
the full upstream audit set.
Keep domain corrections upstream. This adoption does not add local response
limits, duplicate request validation, or replacement error classification to
compensate for those defects. Evaluate any published corrective release for
compatibility and adapt to its public contract using ordinary change review.
## Open Decisions
### OD-1: Ship on v0.18.0 or await relevant upstream corrections?
**Recommendation:** develop the migration now against the published v0.18.0
baseline and prefer a published corrective release addressing the relevant
native diagnostic issues for the final shipping pin. That keeps integration
work concrete while keeping fixes with their upstream owner. Taking a newer
release requires reviewing its actual changes and rerunning affected checks;
waiting for corrections can delay ckprompt publication. Whether to publish on
v0.18.0 if those corrections are not yet available remains a release choice.
**Viable alternative:** finish and publish the ckprompt migration with exactly
v0.18.0 using the existing release workflow, then adopt an upstream correction
separately. This restores the compatible module set without an upstream-dependent
schedule. It ships with the recorded native defects still present and requires
a later dependency update. Neither option selects local workarounds or makes
completion of every upstream audit finding a new release prerequisite.
### OD-2: Which bundle policy should the maintained example demonstrate?
**Recommendation:** retain upstream's default bundle in the composed example
and make catalog/report assertions about the application-defined records and
returned native evidence rather than duplicating the complete bundled catalog.
Use explicit opt-out in focused fixture loaders when their purpose is a minimal
application-only inventory. This demonstrates the current native default while
keeping adapter tests focused. Example inventories and list-index paths need
updating, and offline smoke wiring must still select the intended fixture target.
**Viable alternative:** opt out explicitly in the composed example with
`WithBundledOpenRouter(false)`. This is a supported application-loader choice
that keeps the example's inventory small and its resource positions simple.
It does not demonstrate the default-on inventory; documentation should state
the example's choice, and focused adoption coverage should still show that the
integration exposes a default-constructed engine's returned bundle evidence.
### OD-3: Include shared metadata inspection in adoption or a later sprint?
**Recommendation:** retain metadata inspection as the next shared functional
sprint after dependency adoption. The
[configuration inspection proposal](future.md#configuration-inspection-extensions)
owns the field metadata, path discovery, and history scope. Design the optional
ckconfig provider capability and reports once, then connect PromptKit's native
`Metadata()` result. Existing providers remain usable without the new facet.
Preserve upstream field presence, explicitness, origins, and history, including
history for removed paths; do not recreate provenance logic within ckprompt.
**Viable alternative:** include the shared capability and PromptKit wiring in
this adoption release. That expands the work beyond dependency alignment and
requires a newly released ckconfig version containing the capability, replacing
the current v0.3.0 target. Command grammar, selectors, report shapes, and provider
design remain open under the shared proposal. The adoption can ship without
this extension while retaining ckconfig v0.3.0.
### OD-4: Add prepared-request inspection to the standard suite?
**Recommendation:** treat this as the next substantive ckprompt enhancement
after adoption and shared metadata inspection, with an explicit decision to
extend standard inspection into rendering. Add an optional provider capability
and report based on native `Engine.Prepare` and `PreparedRun`, reusing the
concrete request-builder pattern. The native snapshot supplies selected
prompt/profile/backend IDs, effective execution settings, rendered messages and
session ID, output contract and schema metadata, input and rendered hashes, and
preparation timing without calling an LLM. PromptKit owns preparation semantics.
Command grammar, callback shape, selected report content and formats, and the
relationship to existing request validation remain open. Any selected feature
needs acquisition/availability, request forwarding, native-result projection,
and report-delivery coverage at CommandKit's boundary; upstream retains tests
of preparation and rendering. Selecting snapshot inspection would not select
model execution or prepared-handle management.
**Viable alternatives:** retain preparation inspection in application-owned
commands, or deliberately include the optional feature in ckprompt v0.3.0 after
resolving that design. The latter expands the release scope and validation;
neither alternative requires local template resolution or a parallel preparation
implementation. No new command or provider contract is selected here.
### OD-5: Document namespace views or add standard selection support?
**Recommendation:** begin with consumer guidance showing an application engine
loader returning `Engine.WithNamespaces` with independently chosen prompt,
profile, and backend defaults. Applications can already combine their typed
selectors and loaders for this purpose. Include that guidance with migration
documentation; consider a reusable helper or standard selectors when concrete
consumers show repetition that CommandKit could remove.
Namespace views resolve unqualified caller selections. Qualified selections
retain their native treatment; captured configuration references and global
configuration inspection are not rewritten, and namespace/collection inventories
remain global. Existing catalog filtering keeps its current meaning.
**Viable alternative:** design standard namespace-selection bindings or a helper
as part of this release. The public API, applicable operations, independent
resource defaults, and interaction with catalog filtering would need explicit
decisions and focused forwarding coverage. No new flag names or changed meaning
for existing namespace filters are selected by this roadmap.