Migrating to v0.25.2
Crystallize v0.25.2 tightens reproducibility and injection rules. Use this guide to adapt existing experiments.
Strict Parameter Injection (Breaking Change)
Section titled “Strict Parameter Injection (Breaking Change)”- Old behaviour: Missing parameters in step signatures were silently filled with
Noneor ignored. - New behaviour: Missing required parameters raise
TypeErrorat runtime.
Fix: Ensure every required parameter is supplied by config.yaml or has a default in Python.
# Before: crashes if 'factor' is not in the context/config@pipeline_step()def scale(data, ctx: FrozenContext, factor: float) -> list[float]: return [x * factor for x in data]
# After: provide a default or add 'factor' to config.yaml treatments@pipeline_step()def scale(data, ctx: FrozenContext, factor: float = 1.0) -> list[float]: return [x * factor for x in data]In YAML, add missing params under treatments or the datasource configuration:
treatments: tuned: factor: 1.2Deterministic Seeding
Section titled “Deterministic Seeding”Seeding now uses (master_seed + replicate_id * 31337) % 2**32 instead of Python’s hash(). Seeds are stable across OSs and between serial/process execution.
- Impact: Numerical results may differ from v0.25.1 if you relied on the old hash-based seeds.
- Action: Rerun key experiments to refresh baselines; no code changes required.
CLI Updates
Section titled “CLI Updates”- Threaded execution is flagged as non-reproducible when
SeedPluginis active; useexecutor_type="process"for deterministic runs. - The CLI includes an LLM Data tab with XML summaries for downstream analysis.