Cover beta health continuity and readiness boundaries (Refs #149)
CI / checks (push) Successful in 5m29s

This commit is contained in:
2026-10-12 19:09:27 -04:00
parent f91ec4d152
commit 272055a1ed
2 changed files with 86 additions and 0 deletions
+38
View File
@@ -152,6 +152,44 @@ describe('beta requirement evaluation', () => {
expect(m.values.r0).toBe(0);
});
it.each([
{ minutes: 2, gap: 60_005 },
{ minutes: 2.5, gap: 60_048 },
{ minutes: 2.5, gap: 90_000 }
])(
'preserves a satisfied healthy-minute requirement after a $gap ms gap',
({ minutes, gap }) => {
const plan = planWith('healthy-minutes', 'failure-budget');
const m = emptyMetrics();
const previous = minutes * 60_000;
for (let at = 0; at <= previous; at += 30_000) applySample(plan, m, at, true);
expect(m.values.r0).toBe(minutes);
expect(evaluateRequirements(plan, m, 0).every((r) => r.passed)).toBe(true);
applySample(plan, m, previous + gap, true);
expect(m.values.r0).toBeCloseTo(minutes + gap / 60_000);
expect(m.wasHealthy).toBe(true);
expect(m.outages).toBe(0);
expect(evaluateRequirements(plan, m, 0).every((r) => r.passed)).toBe(true);
}
);
it('resets a satisfied healthy-minute requirement on an unhealthy sample within the freshness window', () => {
const plan = planWith('healthy-minutes', 'failure-budget');
const m = emptyMetrics();
applySample(plan, m, 0, true);
applySample(plan, m, 60_000, true);
expect(evaluateRequirements(plan, m, 0)[0].passed).toBe(true);
applySample(plan, m, 90_000, false);
expect(m.values.r0).toBe(0);
expect(m.wasHealthy).toBe(false);
expect(m.outages).toBe(1);
expect(evaluateRequirements(plan, m, 0)[0].passed).toBe(false);
});
it('excludes monitoring gaps from healthy time and requires explicit manual sign-off', () => {
const plan = planWith('healthy-minutes', 'failure-budget', 'manual');
const m = emptyMetrics();