This document describes the configuration validation system implemented for LinX (灵枢).
The configuration validation system provides comprehensive validation of the platform's configuration file (config.yaml) on application startup. It ensures that:
- All required configuration sections exist
- Configuration values have correct data types
- Numeric values are within valid ranges (e.g., port numbers, percentages)
- Required environment variables are set
- Dependencies between configuration values are satisfied
- Clear error messages are provided when validation fails
Validates that all required top-level configuration sections are present:
platform- Platform metadataapi- API Gateway configurationdatabase- Database connections (PostgreSQL, Milvus, Redis)storage- Object storage (MinIO)llm- LLM provider configurationagents- Agent framework settingssecurity- Security and encryption settingsmonitoring- Logging and monitoringquotas- Resource quotas
Ensures configuration values have the correct data types:
- Strings (e.g., hostnames, names)
- Integers (e.g., ports, pool sizes)
- Floats (e.g., CPU cores, memory)
- Booleans (e.g., feature flags)
- Lists (e.g., classification levels)
- Dictionaries (e.g., nested configurations)
Validates that numeric values are within acceptable ranges:
- Port numbers: 1-65535
- Pool sizes: 1-100
- JWT expiration: 1-720 hours (30 days)
- Percentages: 0-100
- Resource limits: Positive values, defaults ≤ maximums
Checks that required environment variables are set:
- Production mode requires:
JWT_SECRETPOSTGRES_PASSWORDREDIS_PASSWORDMINIO_ACCESS_KEYMINIO_SECRET_KEY
- Development mode allows hardcoded values
Validates relationships between configuration values:
- Default LLM provider must exist and be enabled
- Enabled LLM providers must have models configured
- Agent pool min_size ≤ max_size
- Agent default resources ≤ max resources
- Alerting requires at least one enabled channel
- Data classification requires levels when enabled
Provides detailed, actionable error messages:
❌ Configuration Validation Failed:
- api.port: Port must be between 1 and 65535, got 99999
- llm.default_provider: Default provider 'nonexistent' not found in providers
- agents.pool: min_size (100) cannot be greater than max_size (10)
from shared.config import get_config
from shared.validators import validate_config
# Load and validate configuration
config = get_config("config.yaml")
validate_config(config) # Raises ValidationError if invalidThe recommended way to use validation is through the startup module:
from shared.startup import validate_startup_config
# In your main application startup
def main():
# This loads, validates, and returns the config
# Exits with code 1 if validation fails
config = validate_startup_config("config.yaml")
# Your application code here
...
if __name__ == "__main__":
main()- Requirements 20: Configuration Management
- Design Section 16: Configuration Management
- Implementation:
backend/shared/validators.py - Tests:
backend/tests/test_validators.py - Startup:
backend/shared/startup.py