bit
1d40455844
feat(core): enforce minimum eval gate samples ( #602 )
...
Add an optional positive-integer `minSamples` guard to `GateThreshold` so a threshold only counts when the selected aggregate carries enough evidence. Score metrics compare it against `scoredCount`; `passRate` compares it against the new `ScorerAggregate.passSampleCount`, which records the pass denominator whenever `passRate` is emitted. Tag-scoped thresholds use the tag aggregate's own counts. A count below the minimum reports a new `insufficient_samples` failure carrying the observed count and the configured limit, and a report written before `passSampleCount` existed fails closed at zero rather than skipping the guard.
Baseline regression checks honor the same minimum. When either the current or the baseline aggregate is below it, the comparison is skipped with a warning instead of producing a regression number from a sample set the gate already called too small to judge.
Omitting `minSamples` preserves the previous behavior, so the report schema version is unchanged and no migration is required.
Fixes #573
2026-09-14 18:19:56 +08:00
..
2026-09-12 01:04:31 +08:00
2026-07-26 13:56:28 +08:00
2026-09-07 02:35:32 +08:00
2026-06-18 17:31:52 +08:00
2026-06-18 17:31:52 +08:00
2026-07-10 23:26:40 +08:00
2026-07-26 11:51:57 +08:00
2026-06-18 17:31:52 +08:00
2026-07-16 14:40:26 +08:00
2026-07-26 13:56:28 +08:00
2026-08-07 16:10:48 +08:00
2026-07-23 19:52:48 +08:00
2026-07-26 11:21:17 +08:00
2026-08-08 11:28:39 +08:00
2026-09-03 12:05:03 +08:00
2026-09-03 12:05:03 +08:00
2026-07-10 23:26:40 +08:00
2026-08-10 15:54:43 +08:00
2026-07-16 16:15:48 +08:00
2026-09-03 12:05:03 +08:00
2026-07-06 18:51:41 +08:00
2026-07-01 14:08:16 +08:00
2026-08-28 23:42:58 +08:00
2026-08-08 11:49:55 +08:00
2026-07-23 23:50:00 +08:00
2026-09-03 11:59:54 +08:00
2026-08-20 11:26:18 +08:00
2026-07-26 13:56:28 +08:00
2026-09-03 12:05:03 +08:00
2026-09-04 01:24:39 +08:00
2026-06-18 17:31:52 +08:00
2026-07-23 16:35:02 +08:00
2026-08-10 15:54:43 +08:00
2026-07-18 11:06:27 +08:00
2026-07-18 11:06:27 +08:00
2026-07-23 15:25:32 +08:00
2026-07-31 16:35:43 +08:00
2026-07-26 13:56:28 +08:00
2026-06-18 17:31:52 +08:00
2026-06-18 17:31:52 +08:00
2026-07-23 23:50:00 +08:00
2026-06-18 17:31:52 +08:00
2026-08-08 03:40:10 +08:00
2026-08-08 03:40:10 +08:00
2026-08-10 15:54:43 +08:00
2026-09-03 12:05:03 +08:00
2026-09-03 12:05:03 +08:00
2026-07-26 20:19:54 +08:00
2026-07-18 23:26:28 +08:00
2026-09-04 01:24:39 +08:00
2026-09-14 18:19:56 +08:00
2026-07-26 20:19:54 +08:00
2026-09-14 18:19:56 +08:00
2026-09-04 01:24:39 +08:00
2026-09-04 17:48:24 +08:00
2026-07-19 10:21:54 +08:00
2026-07-19 10:21:54 +08:00
2026-07-18 15:39:32 +08:00
2026-09-14 18:19:56 +08:00
2026-07-18 22:53:52 +08:00
2026-07-19 10:59:17 +08:00
2026-07-26 13:56:28 +08:00
2026-07-23 23:50:00 +08:00
2026-07-26 20:23:37 +08:00
2026-08-08 03:40:10 +08:00
2026-07-16 16:50:59 +08:00
2026-07-06 18:51:41 +08:00
2026-09-03 12:05:03 +08:00
2026-06-18 17:31:52 +08:00
2026-07-23 10:28:48 +08:00
2026-07-23 14:35:43 +08:00
2026-06-18 17:31:52 +08:00
2026-06-18 17:31:52 +08:00
2026-08-29 09:49:15 +08:00
2026-08-28 23:42:58 +08:00
2026-08-28 23:42:58 +08:00
2026-08-28 23:42:58 +08:00
2026-07-24 00:53:33 +08:00
2026-06-18 17:31:52 +08:00
2026-09-03 12:05:03 +08:00
2026-09-03 12:05:03 +08:00
2026-06-18 17:31:52 +08:00
2026-08-08 11:49:55 +08:00
2026-09-04 01:24:39 +08:00
2026-06-18 17:31:52 +08:00
2026-06-18 17:31:52 +08:00
2026-07-23 15:25:32 +08:00
2026-07-10 23:26:40 +08:00
2026-07-16 18:00:16 +08:00
2026-08-08 03:40:10 +08:00
2026-08-31 16:43:13 +08:00
2026-07-16 18:00:16 +08:00
2026-07-15 22:08:49 +08:00
2026-07-10 23:26:40 +08:00
2026-08-10 15:54:43 +08:00
2026-06-18 17:31:52 +08:00
2026-06-18 17:31:52 +08:00
2026-07-29 11:21:27 +08:00
2026-07-29 11:21:27 +08:00
2026-09-05 19:47:21 +08:00
2026-07-16 12:31:22 +08:00
2026-07-10 23:26:40 +08:00
2026-07-23 19:52:48 +08:00
2026-07-17 20:22:56 +08:00
2026-07-16 14:40:26 +08:00
2026-08-28 23:42:58 +08:00
2026-06-18 17:31:52 +08:00
2026-06-18 17:31:52 +08:00
2026-08-08 03:40:10 +08:00
2026-07-09 22:25:53 +08:00
2026-06-18 17:31:52 +08:00
2026-08-08 11:49:55 +08:00
2026-07-27 01:03:22 +08:00
2026-09-07 02:35:32 +08:00
2026-09-07 02:35:32 +08:00
2026-07-19 15:34:09 +08:00
2026-07-18 11:06:27 +08:00
2026-07-10 23:26:40 +08:00
2026-06-18 17:31:52 +08:00
2026-07-26 10:55:20 +08:00
2026-06-18 17:31:52 +08:00
2026-07-26 11:21:17 +08:00
2026-07-27 01:03:22 +08:00
2026-09-12 01:04:31 +08:00
2026-06-18 17:31:52 +08:00
2026-08-08 03:40:10 +08:00
2026-08-10 15:39:08 +08:00
2026-07-24 00:53:33 +08:00
2026-08-10 17:18:29 +08:00
2026-08-16 14:06:46 +08:00
2026-07-23 23:50:00 +08:00
2026-07-26 11:51:57 +08:00
2026-07-23 23:50:00 +08:00
2026-08-10 17:18:29 +08:00
2026-06-18 17:31:52 +08:00
2026-09-08 17:55:31 +08:00
2026-07-10 21:19:16 +08:00
2026-06-18 17:31:52 +08:00
2026-08-10 17:18:29 +08:00
2026-09-03 12:05:03 +08:00
2026-08-24 15:35:53 +08:00
2026-06-18 17:31:52 +08:00
2026-06-18 17:31:52 +08:00
2026-07-15 23:59:18 +08:00
2026-07-16 11:45:47 +08:00
2026-08-29 00:43:38 +08:00