6.0 KiB
Internal Component Overview
ConfigKit exposes the root configkit package and keeps its document and YAML
representations private. The implemented components and their owners are:
- a temporary
internal/enginerelocation candidate containing a mechanical copy of the root loading, decoding, resolution, provenance, inspection, and rendering mechanisms with their behavior tests; it imports no root code and is not yet used by the root package or consumers; - immutable semantic
Pathconstruction and strict JSON Pointer parsing; - detached effective presence/origin and chronological history queries in
metadata.go, with provenance and diagnostic record types; - canonical, control-safe diagnostic rendering and structured
LoadErroraccess; - opaque file, byte, reader, and no-input source construction in
source.go, with shared regular-file checks and bounded read mechanics insource_file.go; - a parser-independent ordered tree in
internal/document, with root-private semantic lookup, indexing, and value traversal indocument_walk.go; - the sole upstream YAML integration in
internal/yaml, which translates validated input into that owned tree and exposes no parser types outside its boundary;parse.goowns shared translation into detached, ordered public diagnostics; - a private strict composer in
compose.gothat joins only disjoint document-tree definitions, retains ordered claims and composite mapping origins, reports every conflicting location, and never aliases an input tree; - fixed selected-profile loading in
profile.goand recursive, non-aliasing overlay with displacement records inoverlay.go; overlay records retain origins, while value explanation uses separate history applications; - CLI override validation/preparation in
override.go, parser-neutral values inoverride_value.go, and synthetic-source application inoverride_apply.go, sharing overlay, source, byte, node, and depth policies; - a per-operation private reflection descriptor graph in
schema.gofor supported types, YAML field binding, inlining, secret tags, recursion, and semantic paths; - descriptor-driven canonical projection in
projection.go, detached typed cloning with explicit secret-state modes inclone.go, shared reflection and cycle/limit state invalue_operation.go, and configuration-value comparison indocument_compare.go; validation separately audits sensitivity and secrets; - strict schema-driven decoding over detached defaults in
decode.go, including mapping/sequence semantics, null and numeric policy, safe codec errors, presence, baseline/final trees, and initial default/input origins; - public lifecycle coordination in
load.go, option selection inoptions.go, input assembly inload_input.go, typed phases/publication inload_result.go, bounded canonical import DFS inimports.go, filesystem context/containment infilesystem.go, directive parsing/restrictions indirectives.go, pattern-directed glob expansion inglob.go, schema-version checking and report contexts invalidation.go, and layered metadata/history assembly inload_metadata.go; - recorded application defaulting and normalization in
resolution.go, including callback-scoped fixed entry metadata/source queries, explicitness queries, helper verification, structural mutation audit, coalesced intent, private before/after snapshots, and resolution metadata integration; - post-resolution schema-aware report collection and validator mutation detection in
validation.go, completing the public callback lifecycle after composed input; - opaque typed environment references and per-load name resolution in
secret_reference.go, including credential-free projection/cloning and private validator-state auditing; - explicit bounded startup environment bootstrap and safe partial reporting in
secrets.go; - fixed-point tag/predicate/dependency sensitivity classification in
secret.go; - canonical effective output in
render.go, using frozen-snapshot redaction shared with explanation insnapshot.go; - detached public explanation records and coordination in
explain.go, immutable input applications/replay and retained-node budgeting inhistory.go, shared safe snapshot projection insnapshot.go, and deterministic human output inexplain_render.go; the only upstream dumper integration remains isolated ininternal/yaml/write.go; - a separate maintained
examples/consumerspackage with four sanitized consumer shapes, fixtures, domain validators, and runtime-boundary functions; and - an everyday single-toolchain check in
scripts/check.shand a stricter source-candidate checker inscripts/release-check.sh, with local documentation-link and public import-boundary gates owned by root-package tests.
Dependency direction remains inward: the public lifecycle coordinates private
source, document, schema, and inspection helpers. Semantic paths stay in the root
package; internal/document owns only representation and cloning and never imports
the root package. Only internal/yaml imports the upstream YAML package. Maintained
consumer examples use the public package and standard library.
The configuration contract owns implemented input, schema, decoding, loading lifecycle, path imports, composition, profile/CLI overlay, version checking, recorded resolution, typed secret references/bootstrap, semantic validation, metadata, secret classification, redacted effective rendering, historical explanation, and ownership behavior. The consumer adoption guide owns current application-fit and migration guidance.
The source-extraction inventory records the application foundations used by the implementation:
The architecture policy owns binding boundaries and invariants. The deferred scope records deliberate exclusions. See the development guide for contributor orientation and validation and the release procedure for source-candidate gates.