# OOF Campaign Data Fixtures This document defines the first reusable data-contract fixtures that support the `dag-ml` OOF campaign fixtures. They prove schema, model input and data planning determinism without making OOF or leakage decisions. ## Fixture Set Directory: `examples/fixtures/oof_campaign/` | Fixture | Purpose | |---|---| | `schema_nir_6_samples.json` | Minimal six-sample dense-signal dataset schema | | `model_input_tabular_numeric.json` | Model input accepting `tabular_numeric` features | | `adapter_registry_signal_to_tabular.json` | Deterministic adapter declarations | | `expected_data_plan_nir_to_tabular.json` | Auditable expected plan shape | | `sample_relations_grouped_augmented.json` | Group, repetition and augmentation-origin identity table | ## Assertions Owned By `dag-ml-data` - schema parses and fingerprints deterministically; - source/sample ordering does not affect the fingerprint; - `ModelInputSpec` JSON round-trips and rejects invalid ports; - duplicate adapter ids are refused; - path solving returns the cheapest non-lossy path by deterministic ordering; - lossy adapters are refused unless policy allows them; - equivalent paths produce a `requires_user_choice` or ambiguity result; - `DataPlan` has explicit step inputs, outputs and adapter ids. - `SampleRelationTable` rejects duplicate observations and unknown augmentation origins. ## Boundary These fixtures must not mention folds, partitions, OOF safety, prediction joins or leakage opt-ins. Those are `dag-ml` responsibilities.