Config you can explain

June 10, 2026 · View on GitHub

Four config layers stack on every rule. When a rule fires, the question is which layer set the value that triggered it — mdsmith answers that per leaf.

Config resolves in order: defaults, then convention, then kinds, then per-glob overrides. The merge is rule by rule. Maps merge key by key, so a later layer that touches one setting does not erase its siblings. Scalars replace; lists replace unless a rule opts a setting into append.

check --explain attaches provenance to every diagnostic. mdsmith kinds resolve <file> prints the effective config with per-leaf provenance, and kinds why <file> <rule> shows the full merge chain including no-op layers.

See the kinds reference and the CLI reference for merge semantics.