Changes in version 0.1.5 (2026-09-27) - Marked the optional ComBat example as a longer-running example because loading its Bioconductor dependency can exceed five seconds on CRAN. It remains runnable with example() and is checked by --as-cran. - Added routine ComBat integration coverage for preserved matrix labels, finite non-negative output, and correction of simulated batch effects. - Simplified the description and clarified the title as mass spectrometry profiling data. The full method citation remains in CITATION and the README. Changes in version 0.1.4 - Made the Bioconductor package sva optional for the ComBat correction path; the default ANOVA workflow no longer requires a Bioconductor installation. - Added executable examples for all exported functions and seeded stochastic examples for reproducible CRAN checks. - Made drift testing and smoothing honor run_order independently of matrix column order. Values are sorted within batch for testing and correction and restored to the caller's original column order. - Changed the Ljung-Box default to fitdf = 0, because WiNN does not first fit an ARMA model. The legacy fitdf = 1 behavior remains available explicitly through ljung_box_fitdf = 1. - Added strict validation for finite, non-negative log-scale inputs; complete batch and run-order metadata; unique within-batch run orders; control indices; dilution factors; and within-batch scaling. - Documented the preprocessing policy for zero and censored observations. Numeric zeros remain observed values and are never silently converted to missing values. - Added return_details = TRUE to winn() for machine-readable selected parameters, batch assignments, and per-stage decisions while retaining the corrected-matrix default. - Clarified fixed versus auto-mode settings and the selective ANOVA versus global ComBat correction scopes. - Removed interactive test code from package sources and added release CI. Changes in version 0.1.3 - Replaced the legacy upper-priority MAD branch with independent two-tail shrinkage. Each metabolite's median, MAD, thresholds, and upper/lower masks are computed once from the original finite values; both tails are then adjusted in one non-iterative pass. - Added regression coverage for simultaneous-tail adjustment, one-pass threshold reuse, missing/non-finite values, and zero-MAD features. Changes in version 0.1.2 - Added winn_ablation() for fixed-parameter cumulative and gate-factorial analyses using the same correction operators as winn(). - Added optional decision and correction diagnostics to the drift, batch, and dilution-normalization functions. Their default matrix-returning behavior is unchanged. - Made selective, forced-all, and disabled drift and batch gates explicit for controlled method evaluation. - Documented the historical directional MAD behavior and added regression tests that made the legacy branch explicit before its replacement in 0.1.3. - Added tests for ablation equivalence, disabled-stage pass-through behavior, diagnostic structure, and standard-smoother fallback reporting.