Command failure suppressed with exit-code override

A failing command's exit code was deliberately suppressed using `|| true`, `set +e`, or similar shell constructs.

ignored-exit-code high confidence silent_failure

Matched signals

  • || true
  • set +e
  • failed but continuing
  • ignoring error

Command failure suppressed with exit-code override

What this failure means

A failing command’s exit code was deliberately suppressed using || true, set +e, or similar shell constructs. CI continued without surfacing the error, so the overall job status appears green even though a step failed.

Symptoms

Faultline looks for one or more of these log fragments:

|| true
set +e
failed but continuing
ignoring error

Diagnosis

Shell scripts that use || true or set +e allow subsequent commands to run even after a previous command exits non-zero. This pattern is sometimes intentional (for optional steps) but is frequently used to silence unexpected failures that should be investigated.

Common causes:

  • A developer added || true to unblock a pipeline without investigating the root cause.
  • set +e was used at the top of a shared script and was never reverted.
  • A CI step uses exit 0 to force success after logging an error.

The result is a misleading “green” CI status that hides real failures from reviewers and downstream automation.

Fix steps

  1. Locate the suppressed command and understand why it is failing:
    grep -n "|| true\|set +e\|exit 0" <script>
    
  2. Remove the suppression and let the failure surface naturally.
  3. If the failure is expected and intentional, document it explicitly and consider an if/else guard instead of a blanket exit-code override.
  4. Add set -e (or set -euo pipefail) at the top of CI scripts to fail fast on unexpected errors.

Validation

Re-run the CI job without the exit-code suppression and confirm the job fails cleanly on the unexpected error rather than continuing silently.

Try it locally

Run the failing command without || true to reproduce the actual exit code
grep -rn '|| true\|set +e' .github/workflows/ scripts/

How Faultline detects it

Use faultline explain ignored-exit-code to see the full playbook.

faultline analyze build.log
faultline explain ignored-exit-code

Generated from playbooks/bundled/log/silent/ignored-exit-code.yaml. Do not edit directly.

Try it on your own failed log

$ faultline analyze failed.log
Want this across every CI run? Faultline Teams tracks recurring failures across all your repos and surfaces patterns in a shared dashboard.