Quarantines
When to use a quarantine instead of an allowlist
Allowlists are for known, reasoned exceptions: "this finding is correct but we've decided not to fix it yet, and here's why."
Quarantines are for temporal problems with the gate itself: "this gate fails intermittently and we don't yet know why; mute it while we investigate."
The difference matters because:
- Allowlist entries are about the code (the finding is real, the suppression is intentional).
- Quarantine entries are about the gate (the finding may be noise; we're investigating).
Mixing them muddies post-mortems and audit trails. Pick the right tool.
File shape
// <gate-base>.quarantine.json
{
"entries": [
{
"gate": "my-gate",
"fingerprint": "<finding-fingerprint>",
"flake_rate": 0.12,
"tracking_issue": "MAT-9876",
"expires_at": "2026-06-15",
"added_at": "2026-05-15"
}
]
}Two suppression scopes:
- Whole-gate quarantine — omit
fingerprint. The gate runs but never blocks the build. Use sparingly — usually a sign the gate needs a rewrite. - Specific-finding quarantine — include
fingerprint. Only that finding is suppressed.
How quarantine differs from allowlist at runtime
A quarantined whole-gate emits its findings as normal in telemetry, but the runner reports quarantined: true and the gate's exit code is forced to 0. The scorecard tracks quarantine_size per gate so chronic flakiness shows up as a trend.
A quarantined finding still appears in the report (at info severity) so reviewers can see what's being muted. The exit-code-contribution is dropped.
Hard expiration
Same rule as allowlists: every quarantine entry has an expires_at (ISO date), and past-expiry entries become hard failures. Quarantine is temporary by design.
If you find yourself renewing the same quarantine entry a third time, the right move is usually one of:
- Rewrite the gate to remove the flakiness.
- Delete the gate (if it's structurally unsalvageable).
- Convert the quarantine to an allowlist entry with a real tracking issue (if the finding turns out to be a reasoned exception, not flake).
Future: auto-quarantine
The current implementation supports manual quarantine entries. A future slice adds automatic flake detection — the runner records N-of-M failure rates and auto-adds a quarantine entry above a threshold, with a default 14-day horizon. Until then, quarantine is opt-in.