YAML Config Validation: YAML rule files are now batch-validated before construction. All errors (unknown top-level keys, misspelled check names, missing required params, type mismatches) are collected and reported in a single ValueError with location paths. Unknown keys get fuzzy-match suggestions via difflib.get_close_matches(). (#26)
OutlierRule: New built-in statistical outlier detection rule with three configurable methods:
zscore: Classic (value - mean) / std — best for normally distributed data
Critical: Add missing OutlierRule import in tests/test_rules.py — previously caused 19 OutlierRule tests to fail with NameError
Fix test_global_zscore_flags_outlier: Increase sample size from 10 to 21 points to make z-score > 3.0 mathematically achievable (with n=10, max z-score is ~2.85)
Fix test_rolling_mad_flags_spike: Add Gaussian jitter to constant baseline to prevent MAD=0 (which causes NaN scores)
External Quality Column (external_quality_col): Intake a pre-existing quality/status column from SCADA historians and either use it exclusively (quality_mode="exclusive") or merge it with internal rules (quality_mode="combined"). Value-to-level mapping via YAML quality_map section or quality_map= dict parameter. Unmapped values become bad. Configure via quality_mode="none" to ignore the external column entirely. (#PR)
Column Conflict Auto-Rename: When the external quality column name matches the default output column name (e.g. both named quality), the output is automatically renamed to qc_quality / qc_quality_reasons and the input column is preserved. A warning is issued.
FlatlineRule: Added optional min_duration parameter. Suppresses flags for flat runs shorter than the given duration (pandas offset string). Useful when short-lived flat periods are normal (e.g. pump starts, cloud edges).
DeltaRule: Replaced single threshold parameter with two independent thresholds:
max_delta: flags when absolute change is too large (sensor spike / step change)
min_delta: flags when absolute change is too small (stuck / frozen sensor)
At least one of min_delta or max_delta must be provided
Breaking change: old threshold parameter removed; existing YAML configs must be updated