Files
audita/docs/roadmap/commandkit.md

329 lines
20 KiB
Markdown
Raw Normal View History

2026-11-08 01:31:18 +00:00
# CommandKit Adoption Outline
**Updated:** 2026-11-09
2026-11-08 01:31:18 +00:00
**Status:** Adoption target selected; the upstream release gate is satisfied.
Implementation remains pending. The [master roadmap](library-adoption.md) owns
shared direction, exact dependency revisions, and sequencing; ConfigKit and
PromptKit contracts are developed in [their](configkit.md) [outlines](promptkit.md).
2026-11-08 01:31:18 +00:00
## Baseline and Target
Audita currently uses application-owned CLI parsing, inspection commands, and
reporting, described in the [CLI contract](../cli.md). Adopt CommandKit core,
ckconfig, and ckprompt v0.6.0 as the standard operator interface. Use supported
2026-11-08 01:31:18 +00:00
command declarations, typed inputs, supplied-value tracking, help/version,
reporting, and formatting. Audita handlers retain transcript processing and
artifact responsibilities.
The upstream [core release](https://forge.maximumdirect.net/base-layer/commandkit/src/commit/1613ff95cab60581de5d86f6e9e2a3cc091a44a0/docs/releases/v0.6.0.md),
[ckconfig release](https://forge.maximumdirect.net/base-layer/commandkit/src/commit/5ed947bd26bf2c6d70d1d748b693eca89f18d605/integrations/ckconfig/docs/releases/v0.6.0.md),
[ckprompt release](https://forge.maximumdirect.net/base-layer/commandkit/src/commit/1ca660e35fb58fc0dc318e411afb6e3631a40ef1/integrations/ckprompt/docs/releases/v0.6.0.md),
and [consumer guide](https://forge.maximumdirect.net/base-layer/commandkit/src/commit/1ca660e35fb58fc0dc318e411afb6e3631a40ef1/docs/consumers/guide.md)
define the selected set. Core uses Cobra/pflag and declares Go 1.26.0; the matched
integrations require Go 1.27. They retain ConfigKit v1.1.0 and PromptKit v0.20.0.
## Adoption Gate: Released Debug Binding and Reporting Mode Access
**Satisfied by the selected v0.6.0 release set.** Upstream publication, public APIs,
released integration dependencies, and the required behavior were verified in the
[review below](#upstream-review-shared-debug-input-and-reporting-mode).
Both required capabilities are available:
- A `BoolFlag` named `debug` attaches to the shared reporting option and supplies
its parsed boolean independently of the reporting mode for artifact capture.
- `Invocation.ReportingMode()` exposes the resolved reporting mode for quiet
transcript-destination validation.
The [master dependency selection](library-adoption.md#baseline-and-selected-dependency-set)
records exact published versions and source revisions. No unreleased dependency,
local replacement, private-state inspection, or duplicate argument parsing is
needed. Audita integration and its acceptance tests remain implementation work;
the released capabilities remove the upstream availability blocker.
2026-11-08 01:31:18 +00:00
## Agreed Operator Experience
- Install the full ckprompt inspection surface: prompt/profile/backend views,
resource and namespace/collection inventories, contextual requirement
inspection, and captured engine configuration through its config scope.
Native reports and namespace selection must remain available; a curated Audita
subset is not a substitute.
- Apply the [resolved profile-summary decision](promptkit.md#profile-inspection-and-summary--resolved):
retire the curated profiles view, use standard configuration/resource inspection
and request preview, and add no replacement custom role summary at this stage.
2026-11-08 01:31:18 +00:00
- Adopt standard ckconfig viewing, validation, sources, path discovery,
explanation, and comparison. Use native evidence and common text/YAML/JSON
rendering. Do not recreate removed provider-specific explanation writers.
- Use standard command names and reporting flags. CommandKit owns `--debug`;
its parsed boolean also enables Audita artifact capture for processing runs,
independently of the resolved reporting mode, as resolved below.
2026-11-08 01:31:18 +00:00
- Keep domain transcript serialization and ordinary report files under Audita's
output contracts. Generic report formatting need not transform transcript JSON.
Preserve meaningful partial success: a work-unit model error is not automatically
a failed CLI invocation or a reporter warning.
- Preserve safe library redaction without restricting standard inspection to
today's curated fields. Loading for help/version must not trigger credentials,
provider calls, or domain processing.
## Debug Reporting and Artifact Capture — Resolved
Use one `--debug` flag for detailed diagnostics: standard CommandKit debug
reporting plus retained Audita diagnostic artifacts during processing. Do not
introduce `--debug-artifacts`, duplicate the reserved flag, or add a second parser.
Artifact capture follows the parsed `--debug` boolean independently of the
resolved reporting mode. In particular, `--debug --quiet` suppresses ordinary CLI
output while retaining diagnostic artifacts; `--debug --verbose` also retains
them. CommandKit continues to own CLI visibility and mode ordering.
Use the native boolean semantics: omission disables capture, `--debug` enables
it, `--debug=false` disables it, and the last debug occurrence wins. Quiet and
verbose flags do not rewrite this value. Aliases refer to the same input; tokens
consumed as other flag values or following `--` do not count as debug flags.
Inspection commands keep standard debug reporting without creating processing
artifacts. Help and migration guidance must explain that supplying `--debug` for
processing also writes diagnostic files, including when quiet suppresses output.
Report artifact locations through CommandKit's normal visibility rules; artifact
creation does not require an always-visible message in quiet mode. Retain Audita's
artifact redaction and lifecycle responsibilities. There is no separate capture
switch in this design.
Use CommandKit's released optional `BoolFlag` binding named `debug`, with a false
default, to initialize capture from its typed boolean value. The
resolved-mode accessor serves destination validation and reporting decisions;
capture follows the bound value independently. The upstream review below records
the matching released contract.
## Quiet Mode and the Completion Summary — Resolved
Adopt CommandKit's standard visibility rules. Emit the completion summary and
created report/debug locations as informational diagnostics through the shared
reporter, using deferred information when final ordering requires it. Show them
in verbose and debug modes; suppress them in ordinary and quiet modes. Keep
diagnostics separate from transcript stdout and announce completion only after
processing and enabled required outputs have succeeded.
| Output | Ordinary | Verbose/debug | Quiet |
| --- | --- | --- | --- |
| Transcript on stdout, when selected | Shown | Shown | Rejected before processing |
| Completion summary and created artifact locations | Hidden | Shown | Hidden |
| Requested transcript and ordinary report files | Written | Written | Written |
| Fatal error explanation | Shown | Shown | Shown |
Debug capture follows the independent boolean decision above in every reporting
mode. Quiet does not cancel processing or suppress file writes. Recoverable
model-operation failures retain their domain meaning and ordinary report records;
do not promote them to fatal errors or warnings merely to make them visible.
This deliberately retires the always-visible completion summary. Help and
hard-cutover guidance must explain that operators wanting immediate counts and
locations should select verbose/debug reporting. If ordinary reports are disabled,
those modes are needed to see the completion counts. Operators wanting a transcript
while quiet is effective must select an explicit destination, as resolved below.
## Quiet Processing Requires a Transcript Destination — Resolved
Reject a processing invocation when its resolved reporting mode is quiet and its
selected transcript destination is stdout. Require an explicit non-stdout output
destination, such as `--output corrected.json`. Deliberate disposal remains
available through `--output /dev/null`; do not introduce a `--force` bypass.
An empty output value that selects stdout does not satisfy the requirement.
Audita's primary product is the corrected transcript. Reports and debug evidence
do not substitute for delivering it, so their enablement does not exempt a run
from this check. The domain-specific restriction prevents incurring processing
costs while accidentally discarding that product. It leaves CommandKit's standard
quiet semantics intact and does not apply to inspection commands.
Use CommandKit's public resolved-mode accessor and Audita's selected destination.
Return a usage failure with a visible explanation before creating output or debug
artifacts or starting model calls. For example: "Quiet processing requires an
output destination; use --output FILE, or --output /dev/null to discard the
transcript deliberately." Do not scan arguments or infer mode from output.
Shell redirection does not satisfy the requirement because CommandKit still
suppresses stdout transcript delivery.
Check effective mode after native ordering, boolean values, and aliases:
`--quiet --verbose` permits stdout, whereas `--verbose --quiet` requires an
explicit destination. `--debug --quiet` also requires one; debug capture remains
independent once the invocation passes this check.
## Request Preview, Validation, and Smoke Commands — Resolved
Include standard ckprompt request preview, request validation, and the complete
smoke-command surface in the next major release. Enable the upstream adapters
and retain native commands, flags, reports, and outcomes. Smoke commands remain
explicit operator-invoked operations, separate from application startup and
automated release checks.
Use the standard request inputs directly where they suffice. Where Audita adds
role/profile selection, shared instructions, response schemas, or domain inputs,
reuse its processing request-construction helpers in the relevant adapters.
Preserve native operator overrides and keep generic requests usable without
Audita processing context. Request preview and validation operate on supplied
inputs; representative validator candidates can come from maintained fixtures
without running proposal inference as part of request construction.
Establish runtime and request construction first, then wire preview and
validation, followed by smoke commands and assembled-CLI verification. All are
required adoption scope. Address concrete integration blockers upstream rather
than silently omitting standard capabilities.
For standard CommandKit commands passed through by Audita, provide a concise
link to the upstream documentation for the adopted version. Upstream owns their
command reference and behavior explanations. Do not duplicate that documentation,
add local provider-call/cost warnings, or add caveats or workarounds for perceived
limitations of the standard capabilities. Audita documentation covers only its
own selectors, request construction, domain inputs, and application-specific
behavior. Apply this documentation boundary to the whole standard command suite.
2026-11-08 01:31:18 +00:00
## Work Outline
The adoption gate above is satisfied. Follow the master sequence and selected
released dependency set when implementing this outline.
2026-11-08 01:31:18 +00:00
1. Inventory Audita commands, arguments, flags, supplied empty/false/zero values,
streams, and exit behavior against standard declarations. Record intentional
migrations rather than recreating the old parser around CommandKit.
2. Establish shared loaders and scopes using the native ConfigKit and PromptKit
integrations. Keep configuration/resource inspection distinct from preparing
an actual domain request. Standard scope validation need not reproduce the
current combined settings-and-two-roles command; process setup must still
establish what execution needs. Review generic override forwarding explicitly.
3. Install standard inspection and configuration commands, native formats,
help/version, and suite-consistent aliases/completion through supported APIs.
Supply the application's version identity from the ReleaseKit v0.9.0
integration selected in the master roadmap. Do not use a broad private CLI
framework around CommandKit.
2026-11-08 01:31:18 +00:00
4. Adapt domain process handlers to reporting/outcome boundaries, preserving
transcript/artifact integrity, cancellation, and partial success. Apply the
resolved visibility and completion-summary rules above; resolve
[output-failure behavior](#output-failure-behavior) before implementation.
Standard command statuses, including comparison status
3, should not be forced into the old Audita-only status table without a domain
reason. Validate quiet mode against the transcript destination before creating
outputs or starting model work, using the released reporting-mode accessor.
Wire processing artifact capture to the released shared debug boolean; replace
Audita's independent debug parsing with the native binding while retaining its
application-owned capture behavior.
5. Enable the standard preview, validation, and full smoke capabilities using the
resolved adapter and sequencing approach above. Share Audita request helpers
where domain additions are needed; keep generic resource inspection independent
of those domain inputs.
2026-11-08 01:31:18 +00:00
6. Update [CLI](../cli.md), [configuration](../config.md), [operations](../operations.md),
[subprocess integration](../integrations/subprocess.md), examples, help,
completion guidance, and migration documentation with implementation. Document
Audita-specific behavior and link to upstream for standard command usage.
Adopt the dependencies and exact attribution together.
2026-11-08 01:31:18 +00:00
## Acceptance and Upstream Requests
Check the complete standard inspection/configuration inventory and native
formats through the assembled CLI, including failed-load evidence, redaction,
source selection, and missing/partial resources. Check help/version without
configuration and supplied-value handling through domain settings. Exercise
stdout transcript isolation, file output, quiet/verbose/debug behavior, completion
summary placement, cancellation, partial success, and output failures.
Verify that the completion summary and created artifact locations appear only
in verbose/debug diagnostics, never in transcript stdout. Reject quiet processing
with a stdout destination; requested file outputs remain enabled in valid quiet
runs. Fatal error explanations remain visible in every mode, and a required-output
failure must not produce a successful completion summary. Cover ordinary reporting disabled as
well as enabled, and document the loss of the former default summary.
Cover omitted and empty output selections in effective quiet mode, including
with reports or debug capture enabled: reject before model calls and artifact
creation. Accept valid explicit file and discard destinations. Exercise native
mode ordering, explicit false, and aliases so the check follows the resolved
mode. Keep quiet inspection valid and help/version free of processing setup.
Verify the independent capture and visibility decisions through CommandKit's
parser for processing commands with a valid explicit transcript destination:
| Arguments after the command path | Reporting mode | Capture artifacts |
| --- | --- | --- |
| None | Ordinary | No |
| `--debug` | Debug | Yes |
| `--debug --quiet` | Quiet | Yes |
| `--quiet --debug` | Debug | Yes |
| `--debug --verbose` | Verbose | Yes |
| `--debug --debug=false` | Ordinary | No |
| `--debug=false --debug` | Debug | Yes |
| `--debug --quiet --debug=false` | Quiet | No |
Check aliases, explicit false values, and option-looking operands or values
through native parsing. Inspection must not create processing artifacts even
with debug enabled. Check artifact-location reporting subject to normal
visibility and help text explaining capture under quiet mode.
Verify preview, validation, and every standard smoke operation through the
assembled CLI using fixtures and controlled providers. Focus on Audita's command
registration, engine loading, input forwarding, shared request construction, and
native report/outcome handoff. Keep integration coverage proportionate rather
than duplicating upstream capability tests.
2026-11-08 01:31:18 +00:00
Tagged core and integration suites passed during review, but do not establish
these Audita behaviors. Use offline tests and controlled providers.
2026-11-08 01:31:18 +00:00
CommandKit and integrations are early-stage. Freely propose upstream improvements
where reporting, declaration, or integration APIs are problematic or incomplete.
The reporting request is fulfilled by the released capabilities described below.
The resolved summary and destination decisions use standard reporting behavior;
they do not require an ordinary-mode summary channel or an exception to quiet
suppression. Record further concrete integration gaps as they arise and prefer
shared upstream improvements over a permanent local output layer.
2026-11-08 01:31:18 +00:00
### Upstream Review: Shared Debug Input and Reporting Mode
On 2026-11-09, verified published upstream tags for core, ckconfig, and ckprompt
v0.6.0 against the exact revisions in the master roadmap. Reviewed the core
source changes and external public-API tests. Compared with the previous reviewed
integration releases, ckconfig and ckprompt change dependency pins and release
notes without changing integration implementation.
The released [binding contract](https://forge.maximumdirect.net/base-layer/commandkit/src/commit/1613ff95cab60581de5d86f6e9e2a3cc091a44a0/binding.go)
and [invocation API](https://forge.maximumdirect.net/base-layer/commandkit/src/commit/1613ff95cab60581de5d86f6e9e2a3cc091a44a0/identity.go)
support the selected design. The shared binding preserves supplied-value tracking,
explicit false, repeated occurrences, and aliases. Application defaults affect
the bound input, not reporting-mode selection; Audita selects a false default.
`Invocation.ReportingMode()` reports the selection independently of delivery
success and remains available after finalization. `--debug --quiet` therefore
retains a true capture input while the reporting mode is quiet.
Using Go 1.27.3, all three tagged module suites passed with `GOWORK=off` and
released dependencies. An isolated consumer importing all three published v0.6.0
modules, without local replacements, passed 33 cases spanning the roadmap's
capture/mode combinations, aliases, and quiet-destination policy. The resolved
graph selected the intended ConfigKit v1.1.0 and PromptKit v0.20.0 dependencies.
These checks establish the upstream gate; they do not replace Audita's assembled
integration acceptance. No additional upstream request was identified.
## Open Decisions
### Output-Failure Behavior
This is decision 2 in the [master discussion order](library-adoption.md#open-decisions).
Specify how failed transcript, report, debug-artifact, and standard reporter writes
influence the process outcome. The existing visibility rules and prohibition on
a successful completion summary after required-output failure remain selected.
**Recommendation:** required transcript and enabled ordinary-report failures fail
the invocation. Optional debug-artifact failures remain nonfatal and use the
standard reporting path with existing redaction and visibility rules. Standard
CommandKit reporter failures follow native behavior rather than an Audita-owned
replacement policy. This preserves the distinction between delivering the
requested product and retaining supplemental diagnostic evidence, while avoiding
a second reporting implementation. Validate the exact adopted reporter behavior
and cover early and late output failures, including a report failure after the
transcript has already been written.
**Alternative:** also make debug-artifact failures fatal when debug capture was
explicitly requested. This treats capture as a required deliverable and makes
incomplete evidence visible in the process outcome, but can fail an otherwise
successful transcript run solely because supplemental evidence could not be
saved. Standard reporter behavior would still remain upstream-owned. Choose the
artifact requirement deliberately rather than infer it from the debug reporting
mode, which remains independent of capture.