Skip to main content

Successful evaluation (geval check, geval demo)

These commands exit with:
CodeOutcomeTypical CI use
0PASSAllow merge / deploy
1REQUIRE_APPROVALStop for human review (or your org’s override flow)
2BLOCKFail the job; do not merge
This ordering is intentional: many systems treat non-zero as “needs attention,” while 1 vs 2 lets you distinguish approval from hard block if you script it. For GitHub Actions patterns (labels, follow-up jobs, Slack, geval approve), see Handling REQUIRE_APPROVAL: extra logic on the GitHub Actions page.

Configuration and parse errors

If the contract cannot be loaded, policies are missing, or signals JSON is invalid, the process exits non-zero with an error message on stderr — treat as pipeline misconfiguration, not as a policy BLOCK. Always run geval validate-contract in a separate CI step if you want fast feedback without signals.

Example shell handling

./geval check -c contract.yaml --signals signals.json
code=$?
case $code in
  0) echo "PASS" ;;
  1) echo "REQUIRE_APPROVAL" ;;
  2) echo "BLOCK" ;;
  *) echo "Error or unexpected exit: $code" ;;
esac
exit $code

JSON output

geval check --json prints structured decision data to stdout; exit codes still apply the same way.

See also

check · GitHub Actions