evalflow eval, the process exits with a numeric code your CI system can act on.
Run outcomes
Every run ends in one of three states:Exit codes
evalflow maps each outcome to a standard exit code:CI systems (GitHub Actions, GitLab CI, CircleCI) treat any non-zero exit code as a failure. Exit code
1 blocks the PR because quality regressed. Exit code 2 blocks it because something is broken. Both deserve attention, but for different reasons.1) from setup errors (2) lets you write different triage steps in your pipeline — for example, alerting on errors while treating quality failures as expected review signals.
Baselines and regression detection
A baseline is the saved result of the last accepted run for the same dataset. evalflow compares every new run against the baseline so it catches regressions rather than just low absolute scores.evalflow eval, the result is compared per test case against the stored baseline. If any case drops below its previous score by more than the configured threshold, the run fails.
The baseline is stored locally in .evalflow/. Commit that directory to version control so every developer and your CI runner share the same reference point.
What a prompt regression looks like
A prompt regression is when a change improves one case but silently harms another. This is the failure mode evalflow is designed to catch before a change ships.answer-with-context would have merged undetected.