What problem does it solve? It prevents structural mistakes when declaring ML pipelines — leakage from stateless misuse, late X-marker placement breaking cold-start prediction, and bare sklearn.Pipeline usage — by enforcing a skrub DataOps graph declaration with explicit layering rules. ## Core Features & Use Cases - Skrub DataOps declaration: Roots pipelines on skrub.var(...) source identifiers, attaches stateless steps via .skb.apply_func and stateful estimators via .skb.apply, and stops at the unfit learner object. - Three-layer topology rules: Separates sources (Layer 1), the predict grid with mark_as_X/mark_as_y (Layer 2), and post-marker feature engineering (Layer 3), with worked examples for IID and history-dependent cases. - Leakage and reproducibility guards: Enforces the stateless-vs-stateful decision rule, forbids splitter/tuning/persistence code in pipeline declarations, and defines three options for extending shared modules without breaking prior experiments. - Use Case: When adding a new feature step or estimator to pipeline.py in a tabular ML project, consult this Skill to place the X marker correctly, wire split_kwargs for grouped CV, and keep prior experiments reproducible. ## Quick Start Ask the AI to declare a skrub DataOps pipeline from a data directory to a HistGradientBoosting predictor, following the pre-flight checklist before writing any code.