137 lines
4.1 KiB
Markdown
Raw Normal View History

2026-01-12 03:36:55 +00:00
# Platform Templates
Shared configuration patterns, constraints, validators, and default values for VAPORA services.
## Directory Structure
```plaintext
platform/
├── schemas/ # Shared schemas for common configuration patterns
│ ├── common/
│ │ ├── server.ncl # Server configuration (host, port, workers, etc.)
│ │ ├── database.ncl # Database configuration
│ │ ├── monitoring.ncl # Monitoring and observability
│ │ └── storage.ncl # Storage and backup configuration
│ └── README.md
├── constraints/ # Validation rules and constraints
│ ├── common.ncl # Common validation predicates
│ └── README.md
├── validators/ # Reusable validation functions
│ ├── port-validator.ncl # Port range validation
│ ├── budget-validator.ncl# Budget and cost validation
│ └── README.md
├── values/ # Constants and enumeration values
│ ├── limits.ncl # Platform limits and bounds
│ ├── defaults.ncl # Default values
│ ├── ranges.ncl # Valid value ranges and enums
│ └── README.md
├── defaults/ # Default configurations per mode
│ ├── common/
│ │ ├── server-defaults.ncl
│ │ ├── database-defaults.ncl
│ │ └── monitoring-defaults.ncl
│ ├── deployment/
│ │ ├── solo.ncl # Solo mode defaults
│ │ ├── multiuser.ncl # Multiuser mode defaults
│ │ └── enterprise.ncl # Enterprise mode defaults
│ └── README.md
├── templates/ # Code generation templates
│ ├── configs/ # Configuration file templates
│ ├── kubernetes/ # Kubernetes manifest templates
│ ├── docker-compose/ # Docker Compose templates
│ └── README.md
├── configs/ # Composed configurations (Nickel files)
│ ├── vapora.solo.ncl
│ ├── vapora.multiuser.ncl
│ └── vapora.enterprise.ncl
├── common/
│ └── helpers.ncl # Helper functions for composition
└── README.md # This file
```
## Usage
### For Configuration Composition
Import schemas and defaults to compose configurations:
```nickel
let server_schema = import "schemas/common/server.ncl" in
let server_defaults = import "defaults/common/server-defaults.ncl" in
let deployment_defaults = import "defaults/deployment/solo.ncl" in
# Merge: schema → deployment defaults → user customizations
std.record.merge server_schema (std.record.merge server_defaults user_config)
```
### For Validation
Use constraints and validators:
```nickel
let constraints = import "constraints/common.ncl" in
let budget_validator = import "validators/budget-validator.ncl" in
# Validate port
assert constraints.valid_port 8080
# Validate budget configuration
budget_validator.validate_role_limits {
architect_cents = 500000,
developer_cents = 300000,
reviewer_cents = 200000,
testing_cents = 100000,
}
```
### For Constants
Import values for limits and defaults:
```nickel
let limits = import "values/limits.ncl" in
let ranges = import "values/ranges.ncl" in
# Use port limits
let valid_port = port > limits.port.min && port < limits.port.max in
# Check valid log level
let valid_level = std.array.contains ranges.log_levels level in
```
## Composition Pattern
The typical composition flow:
1. **Schema** → Defines structure and types
2. **Constraints** → Validates values are valid
3. **Defaults** → Provides reasonable defaults per mode
4. **User Config** → Customizations override defaults
5. **Output** → Valid, merged configuration
```
User Input
Constraints (validation)
Merge with Defaults
Merge with Schema
Output JSON/TOML
```
## References
- **Nickel Language**: https://nickel-lang.org/
- **Configuration Layout**: `@.claude/layout_conventions.md`
- **Nickel Guidelines**: `@.claude/guidelines/nickel.md`