provisioning/docs/src/infrastructure/configuration-system.md

53 lines
2 KiB
Markdown
Raw Normal View History

# Configuration System (v2.0.0)
## ⚠️ Migration Completed (2025-09-23)
The system has been migrated from ENV-based to config-driven architecture.
- **65+ files migrated** across entire codebase
- **200+ ENV variables replaced** with 476 config accessors
- **16 token-efficient agents** used for systematic migration
- **92% token efficiency** achieved vs monolithic approach
## Configuration Files
- **Primary Config**: `config.defaults.toml` (system defaults)
- **User Config**: `config.user.toml` (user preferences)
- **Environment Configs**: `config.{dev,test,prod}.toml.example`
- **Hierarchical Loading**: defaults → user → project → infra → env → runtime
- **Interpolation**: `{{paths.base}}`, `{{env.HOME}}`, `{{now.date}}`, `{{git.branch}}`
## Essential Commands
- `provisioning validate config` - Validate configuration
- `provisioning env` - Show environment variables
- `provisioning allenv` - Show all config and environment
- `PROVISIONING_ENV=prod provisioning` - Use specific environment
## Configuration Architecture
See [ADR-010: Configuration Format Strategy](../architecture/adr/adr-010-configuration-format-strategy.md) for complete rationale and design patterns.
### Configuration Loading Hierarchy (Priority)
When loading configuration, precedence is (highest to lowest):
1. **Runtime Arguments** - CLI flags and direct user input
2. **Environment Variables** - `PROVISIONING_*` overrides
3. **User Configuration** - `~/.config/provisioning/user_config.yaml`
4. **Infrastructure Configuration** - Nickel schemas, extensions, provider configs
5. **System Defaults** - `provisioning/config/config.defaults.toml`
### File Type Guidelines
**For new configuration**:
- Infrastructure/schemas → **Use Nickel** (type-safe, schema-validated)
- Application settings → **Use TOML** (hierarchical, supports interpolation)
- Kubernetes/CI-CD → **Use YAML** (standard, ecosystem-compatible)
**For existing workspace configs**:
- Nickel is the primary configuration language
- All new workspaces use Nickel exclusively