Without governance
Rerun until green
- Random failures consume engineering time.
- Blanket quarantine turns into permanent debt.
- Real defects can be rerun past.
- Agents act without reliable history.
Evidence-backed CI governance
FlakeGate finds tests that pass and fail on the same code, keeps governed flakes out of the blocking path, and makes every unknown regression stay red.
The trust problem
Once “just rerun CI” becomes routine, developers and coding agents can no longer tell a random test failure from a real regression. FlakeGate restores the distinction.
Without governance
With FlakeGate
One closed loop
Tests keep running throughout the lifecycle. FlakeGate changes the CI decision, never the user’s test code.
Read standard JUnit XML from every CI run into one cacheable SQLite file.
Rank intra-run contradictions, same-commit flips, and recurring oscillation.
Commit a reason, owner, start date, and expiry for every temporary exception.
Unblock active known flakes while unknown regressions and expired entries stay red.
Evidence, not guesswork
A pass and failure from the same run or fixed revision is definitive evidence. A one-off failure is not. FlakeGate keeps that distinction explicit.
Quarantine with an exit
Active known flakes stay visible without blocking delivery. Repaired tests return to the trusted path. Unresolved entries automatically block again after expiry.
Evidence, not just claims
Each number is tied to a reproducible task and an explicit limitation. Positive-only coverage is never presented as precision.
FlakeFlagger · ICSE 2021
828 TP · 0 FP · 0 FN26,765 labeled tests in the decisive detector-semantics replay.
Raw Surefire replay
869,550 executions47,430 XML reports from 7,905 valid fixed-revision runs.
IDoFT / iDFlakies
10,687 / 10,687Evidence recall across 916 projects and 14 observed categories.
Operational controls
17 / 17 / 17 / 17Retry, active quarantine, injected regression, and expiry checks.
Modeled full-run probabilities assume all labeled flakes run and outcomes are independent. IDoFT is positive-only, so its result demonstrates evidence coverage, not precision.
Built for real CI
Work across pytest, Jest, Surefire, Gradle, gotestsum, RSpec, and other producers without per-framework FlakeGate plugins.
History stays in one local SQLite file carried by the CI cache.
Humans and coding agents consume the same trust decision.
Empty reports, unknown failures, and expired quarantines block.
Diagnose locally and inspect retention impact before deleting history.
Quick start
Keep the test command observable, let it emit JUnit, and make FlakeGate own the final CI exit code.
go install github.com/xiao-zi-chen/FlakeGate/cmd/flakegate@latest
pytest --junitxml=report.xml || true
flakegate gate \
--config .flakegate.yml \
--summary flakegate-summary.md \
report.xml
version: 1
quarantine:
- test: tests.core::test_timing
reason: "timing: hard-coded sleep"
owner: test-platform
since: 2026-07-15
expires: 2026-08-15
PowerShell and POSIX demos are included in the repository.
Your CI can be trustworthy again
Start with one JUnit report. Keep every exception visible, owned, and temporary.