# Declarative Configuration

Record: `arch:declarative-configuration`
Kind: principle
Layer: [Declarative Core](https://banes-lab.com/records/layer/declarative-core.md)
Severity: recommended
Scope: configuration, infrastructure, runtime
Canonical: https://banes-lab.com/ontology#arch-declarative-configuration

## Repair

- Refactored by: Extract Config, Add Config Schema
- Detected by: hardcoded environment values
- Violated by: behavior hidden in code constants
- Measured by: configuration externalization coverage
- Enforced by: config linting, [validation](https://banes-lab.com/records/arch/validation.md)

## requires

- [Schema Validation](https://banes-lab.com/records/arch/schema-validation.md)
- [Explicit Semantics](https://banes-lab.com/records/lex/explicit-semantics.md)

## reinforces

- [Predictability](https://banes-lab.com/records/arch/predictability.md)
- [Infrastructure as Code](https://banes-lab.com/records/arch/infrastructure-as-code.md)

## enables

- [Runtime Configuration without Code Change](https://banes-lab.com/records/lex/runtime-configuration-without-code-change.md)

## conflicts-with

- [Hardcoded Configuration](https://banes-lab.com/records/arch/hardcoded-configuration.md)

## tensions-with

- [Dynamic Complexity](https://banes-lab.com/records/lex/dynamic-complexity.md)

## tensions

- [Declarative Configuration Dynamic Complexity](https://banes-lab.com/records/tension/declarative-configuration-dynamic-complexity.md)

## referenced-by

- [Metadata-Driven Design](https://banes-lab.com/records/arch/metadata-driven-design.md)
- [Domain-Specific Language (DSL)](https://banes-lab.com/records/arch/domain-specific-language.md)
- [Infrastructure as Code](https://banes-lab.com/records/arch/infrastructure-as-code.md)

## Evidence in the code

- [configuration/constants](https://banes-lab.com/anatomy/tree/folder-configuration-constants.md)
- [configuration/icons](https://banes-lab.com/anatomy/tree/folder-configuration-icons.md)
