# Exit codes and verdicts

> How a session ends and what the process returns.

Every session ends one of four ways, and a goal test turns those into an exit code.

## Session endings

The ending decides whether a session counts as a drop-off.

| Ending | Meaning | Counts as a drop-off |
|---|---|---|

| **COMPLETED** | Reached the goal. With --expect, only if every value showed. | No |
| **ABANDONED** | Walked out with a reason, or ran out of patience. | Yes |
| **GUARDRAIL** | A safety rule refused an action and the prospect could not route around it. | Yes |
| **COULD NOT RUN** | Our side failed: unreachable URL, model stopped answering, setup error. | No, counted apart |

## Exit codes

The process exit code is what CI and shell scripts read.

| Code | With --goal | Anywhere |
|---|---|---|

| `0` | Every session completed. | Success. |
| `1` | A session walked out or hit a guardrail. | An error, e.g. --validate-flow found a problem. |
| `2` | Nothing failed, but a session could not run. |  |
| `130` |  | Ctrl-C out of a menu. |

```
leakdown "$URL" --goal "sign up" --steps 15 --yes --headless
case $? in
  0) echo "signup works" ;;
  1) echo "signup failed for someone"; exit 1 ;;
  2) echo "could not run; retry" ;;
esac
```

---
Source: https://docs.leakdown.dev/exit-codes
