# Aggregation Interop `dag-ml-data` owns data-side reducer vocabulary. `dag-ml` owns coordinator aggregation policy, ML-phase legality, OOF/refit safety and host-controller routing. This page records the 0.2.0 mapping from the data side; it does not change any public schema or ABI signature. ## Mapping | dag-ml-data reducer | dag-ml coordinator policy | Release behavior | |---|---|---| | `mean` | `mean` | Directly compatible. | | `weighted_mean` | `weighted_mean` | Compatible when a weight column or fit-influence contract is present. | | `median` | `median` | Directly compatible. | | `vote` | `vote` | Classification-only; both layers reject regression vote tasks. | | none | `none` | Coordinator-only mode; no data-side reducer is expected. | | `custom` | `custom_controller` | Coordinator routes an aggregation task to a controller and validates result-vs-task identity. | | `robust_mean` | not exposed | Data-side only for this release; use `custom_controller` in `dag-ml` until a shared reducer schema is added. | | `exclude_outliers` | not exposed | Data-side only for this release; use `custom_controller` in `dag-ml` until a shared reducer schema is added. | ## Release Rule No implicit mapping may be added during the 0.2.0 release window. If `robust_mean` or `exclude_outliers` becomes a first-class `dag-ml` coordinator method, the change must include: 1. a shared schema or explicit migration note; 2. JSON Schema fixture updates in both repositories; 3. C ABI/Python/WASM contract manifest updates if any public symbol or exported helper changes; 4. downstream rebuild of chains consuming public signatures. ## Signal-Type Replay `dag-ml-data` exposes signal-type validation helpers. `dag-ml` does not yet carry an expected signal type through bundle replay. Until that paired contract exists, 0.2.0 documents signal-type replay enforcement as a provider/backlog item rather than a coordinator-enforced invariant.