Implement P0 composable engine per design doc.
Scope:
- Parse YAML: params (type, default, choices, optimizable), series, rules
- Compile: validate, resolve ${params}, build Series DAG, compile predicates/rules
- describe_strategy("composable") → ParameterSpec with choices (maps to existing schema)
- get_optimize_spec() → grid from params where optimizable: true
- Register @register_strategy("composable")
Definition of Done:
- Invalid YAML/config → clear errors at compile time
- Unit tests: parse, compile, choices validation
- config/param_presets.yaml + preset resolution (choices: preset:ma_long)
- Design doc §1.6 example runs at compile level
Implement P0 composable engine per design doc.
Scope:
Definition of Done: