75% smell test on * the resulting backtest is a secondary check. */ final class LeakDetector { /** @param array $trainingMondays */ public function validate(FeatureSpec $spec, array $trainingMondays): LeakReport { $leaks = []; foreach ($trainingMondays as $target) { foreach ($spec->features as $feature) { foreach ($feature->sourceDates($target) as $source) { if ($source->greaterThanOrEqualTo($target)) { $leaks[] = [ 'feature' => $feature->name(), 'target_monday' => $target->toDateString(), 'source_date' => $source->toDateString(), ]; } } } } return new LeakReport($leaks); } }