188 lines
11 KiB
Markdown
188 lines
11 KiB
Markdown
# ConfigKit Adoption Outline
|
|
|
|
**Updated:** 2026-11-10
|
|
|
|
**Status:** Target decisions resolved and implementation complete. The
|
|
[master roadmap](library-adoption.md) owns shared policy and dependency selection;
|
|
the [implementation plan](implementation.md) owns sequencing.
|
|
|
|
## Baseline and Target
|
|
|
|
Before this work, Audita used ConfigKit v0.7.1 through its former import path. Its
|
|
[configuration contract](../config.md) describes application file discovery,
|
|
overlays, defaults, inheritance, secret references, and explicit CLI settings.
|
|
|
|
Adopt ConfigKit v1.2.0 and its stable public API as the configuration foundation.
|
|
Use its native loading, discovery, presence, composition, resolution, diagnostics,
|
|
and inspection mechanisms. Audita supplies domain types and validation; retain
|
|
custom loading behavior only for a demonstrated domain requirement. Standard
|
|
operator access is implemented through the [CommandKit outline](commandkit.md).
|
|
|
|
The main upstream references are the
|
|
[v1 API migration](https://forge.maximumdirect.net/base-layer/configkit/src/commit/c1c7e87f2cdf77a0cbf3327831ac05578e756b9e/docs/releases/v1.0.0.md),
|
|
[v1.2 release](https://forge.maximumdirect.net/base-layer/configkit/src/commit/c1c7e87f2cdf77a0cbf3327831ac05578e756b9e/docs/releases/v1.2.0.md),
|
|
and [configuration contract](https://forge.maximumdirect.net/base-layer/configkit/src/commit/c1c7e87f2cdf77a0cbf3327831ac05578e756b9e/docs/config.md).
|
|
|
|
## Agreed Direction and Migration Work
|
|
|
|
### Application Schema Version — Resolved
|
|
|
|
Use `version: 3` for Audita's application configuration in the next major
|
|
release, with a hard cutover. The new contract includes the selected native
|
|
PromptKit ownership boundaries and the final stage-specific glossary design.
|
|
Finalize that combined schema before release so operators migrate once.
|
|
|
|
Reject obsolete application schema versions with migration guidance. Do not
|
|
retain version-2 loading, automatic conversion, or dual-schema compatibility.
|
|
Update application defaults, examples, and schema validation together when the
|
|
new schema is implemented. The no-main-file behavior below remains supported;
|
|
embedded defaults must supply the current application version.
|
|
|
|
This is Audita's application schema version, independent of library releases and
|
|
ConfigKit or PromptKit source headers. It does not require a version header on
|
|
every imported fragment. Hard-cutover guidance must explain the actual field and
|
|
ownership changes, including glossary-stage configuration, rather than merely
|
|
instructing operators to change the version number.
|
|
|
|
### Discovery Locations and Import Selection — Resolved
|
|
|
|
For Audita's main application configuration, an explicit `--config` selects
|
|
exactly that file. A missing, inaccessible, or invalid explicit file is an error;
|
|
do not fall back to discovery.
|
|
|
|
Without an explicit file, search in this order using ConfigKit's native presets
|
|
and filename rules with application name `audita`:
|
|
|
|
1. `WorkingDirectory` for project-local configuration.
|
|
2. `UserConfigDirectory` for personal configuration.
|
|
3. `UnixSystemDirectories` for system configuration.
|
|
|
|
Select the first matching file. Do not merge every discovered file or continue
|
|
searching after a selected file fails to load. Additional composition is explicit
|
|
through native imports and overlays. Recommend explicit configuration paths for
|
|
automation so its selection does not depend on the working directory.
|
|
|
|
Enable native imports for operator configuration sources, retaining upstream
|
|
defaults and declaration-level controls. Imports compose peer documents, not
|
|
higher-priority override layers. Missing optional imports may be absent;
|
|
operators use `required: true` for essential inputs. Invalid declarations,
|
|
unreadable selected files, and composition conflicts retain native errors.
|
|
|
|
The PromptKit outline owns [automatic prompt sources](promptkit.md#automatic-prompt-sources--resolved).
|
|
Those imports compose in a separate engine underlay, using the selected
|
|
application main's recorded context under the shared rule below. Keep application
|
|
and PromptKit schemas separate while sharing native loading mechanisms.
|
|
|
|
### Companion Resource Base and Overlays — Resolved
|
|
|
|
Use the selected main application configuration file's directory as the lookup
|
|
base for automatic glossary and prompt companions and named overlays. This applies
|
|
to both explicit `--config` and native discovery. Follow ConfigKit's resolved
|
|
context: host symlinks use the canonical target directory; a wider containment
|
|
root does not move the lookup base. Transitive imports retain their declaring
|
|
file's native context, and embedded inputs retain their own filesystem namespace.
|
|
|
|
For application-owned glossary import declarations, use a non-file underlay
|
|
`Input` with `Imports: true` and `MainRelative: configkit.MainRelative()`.
|
|
ConfigKit binds it during the single `LoadLayered` call. PromptKit's separate
|
|
loader uses the application result's recorded main context, as specified in its
|
|
[automatic source contract](promptkit.md#automatic-prompt-sources--resolved).
|
|
Do not duplicate main discovery or perform a preliminary full configuration load.
|
|
|
|
Select native `overlays/<name>.yml` beside the main file. Let `LoadLayered` derive
|
|
its overlay context; do not supply an invocation-directory `OverlayFilesystem`
|
|
or `OverlayFallback`. No overlay selection loads no overlay; an active selection
|
|
requires a usable context and the named file. Aggregate `overlays.yml` is deferred
|
|
upstream and is outside this adoption. ConfigKit v1.2.0 satisfies the upstream
|
|
API requirement for this decision.
|
|
|
|
### No Configuration File Found — Resolved
|
|
|
|
Use ConfigKit's optional-search behavior when automatic discovery finds no file:
|
|
continue with embedded defaults, underlays, and explicit CLI settings, then
|
|
validate what the requested command needs. Require sufficient configuration for
|
|
the operation, not the existence of a main configuration file.
|
|
|
|
Resource inspection can work without a main file. Processing can run when its
|
|
required selections and inputs are otherwise supplied through supported
|
|
mechanisms. Report missing command-specific settings clearly; do not invent an
|
|
implicit model or profile selection to make incomplete execution settings pass.
|
|
Inspection must accurately show that no main file was selected.
|
|
|
|
When no main context exists, skip automatic optional glossary and prompt
|
|
companion imports; retain embedded defaults and explicitly supplied settings.
|
|
Do not install a working-directory fallback or infer a base from unsuccessful
|
|
search candidates. Use ConfigKit's native absent-base behavior for the glossary
|
|
underlay and omit automatic operator prompt inputs in the separate engine load.
|
|
An explicitly selected overlay without a usable context fails. Preserve genuine
|
|
absent-main evidence rather than manufacturing a placeholder source. Explicit
|
|
file errors and failures loading a selected discovered file remain terminal.
|
|
|
|
### Target Boundaries
|
|
|
|
The application uses the `go.maximumdirect.net/configkit` module and native
|
|
recorded resolution, discovery, source diagnostics, and safe effective output.
|
|
Source composition and inheritance precede typed decoding and explicit CLI
|
|
assignment; application resolution and validation follow. CLI assignments do
|
|
not repair earlier decoding failures, change inheritance relationships, or
|
|
propagate parent edits through resolved children. Native source provenance uses
|
|
`main` in place of `base`. Genuine source-root controls use `config:`.
|
|
|
|
PromptKit [owns backend and credential resources](promptkit.md#backend-and-credential-ownership--resolved).
|
|
Audita's v3 schema has no separate backend or LLM credential registry. Native
|
|
[automatic resource sources](promptkit.md#automatic-prompt-sources--resolved)
|
|
use the application main context while retaining their separate schema and tiers.
|
|
|
|
The v3 schema includes the glossary roadmap's [scope and inheritance model](glossary-stages.md#configuration-scope--resolved),
|
|
[typed handoff](glossary-stages.md#list-inputs-and-configuration-handoff--resolved),
|
|
and [optional stage identity](glossary-stages.md#stage-identity-and-attribution--resolved).
|
|
Glossary definitions use native composition, [default underlay sources](glossary-stages.md#default-sources-and-explicit-configuration--resolved),
|
|
and [collection-scoped identity](glossary-stages.md#entry-identity--resolved).
|
|
Pipeline stages remain an ordinary ordered list, including repetitions and
|
|
explicit empty-pipeline behavior. The application supplies domain resolution
|
|
rules within the native lifecycle, with no second runtime defaulting pass.
|
|
|
|
## Documentation and Acceptance
|
|
|
|
Update [configuration](../config.md), relevant [CLI](../cli.md) behavior,
|
|
[change recipes](../internal/cli-config.md), maintained examples, migration
|
|
guidance, and attribution as the corresponding behavior lands. Public docs
|
|
remain descriptions of implemented behavior until then.
|
|
|
|
Acceptance should demonstrate native file selection, source composition,
|
|
overlays, explicit false/zero/empty values, derived settings, and secret handling
|
|
through real ConfigKit loading. Cover the changed inheritance/assignment order,
|
|
source errors, useful failure evidence, and secret-safe inspection. Reuse upstream
|
|
coverage for generic grammar rather than copying its test matrix. Verify the
|
|
standard ckconfig surface through the assembled CLI and run the full application
|
|
suite at the coordinated migration boundary.
|
|
|
|
Check explicit-file selection without fallback, native working/user/system
|
|
search precedence, and terminal errors for a selected invalid file. Verify
|
|
optional and required imports and peer-composition errors through Audita's
|
|
integration. Verify that discovery exhaustion permits inspection and sufficiently
|
|
configured processing, while incomplete processing reports its missing inputs.
|
|
Cover absent-main provenance and filesystem context for selected overlays or
|
|
relative resources without weakening explicit-file error behavior.
|
|
Verify that explicit and discovered mains outside the working directory anchor
|
|
companions and overlays beside the selected file. Cover a broader containment
|
|
root, native source evidence, and absent-main skipping without a working-directory
|
|
fallback. Verify PromptKit receives the same application context while retaining
|
|
its separate schema and precedence, through processing and inspection alike.
|
|
|
|
Verify acceptance of the final version-3 schema and rejection of obsolete
|
|
application versions. Check that no-main-file loading uses version-3 defaults,
|
|
and that maintained examples and migration guidance cover the final library
|
|
ownership and glossary-stage changes without a legacy compatibility path.
|
|
|
|
The earlier passing configuration suite is useful baseline evidence, not proof
|
|
that operators see unchanged semantics. Native semantics and clear migration are
|
|
the target; preserving incidental old output or validation order is not.
|
|
|
|
## Upstream Requests
|
|
|
|
The main-relative companion/overlay request is fulfilled by ConfigKit v1.2.0.
|
|
No further ConfigKit change request is currently identified. Prefer adapting
|
|
Audita to its stable supported API. Record any necessary exception with a concrete domain
|
|
requirement and the smallest integration boundary that satisfies it.
|