Five failure patterns from one unattended pipeline, with the fix for each. Four of the five are the tool lying about the work, not the work failing.

  1. The hardcoded date in the verification step. Publishing worked perfectly. The check was broken, and every post reported 404 on the 1st.
  2. The cleanup crash that eats the whole job. 43 of 45 files produced, then EPERM on the temp folder. All 43 thrown away.
  3. The fetch with no timeout. A hung gate is worse than a failed one — a failure alerts you, a hang just stops.
  4. The stale artifact that passes every check. Right name, right size, from yesterday. A dead pipeline reports green for a week.
  5. The zero-byte artifact. ffmpeg exits 0 having written a 0-byte mp4. The encoder failed; the process did not.

It ships with a demo you can run

$ node demo/try-it.mjs

  image-batch
    exits 0 — but only produced 11 of 45 images
    [X] b — 11 entries (expected >= 45)
    your CI says green   ProveDone says SILENT_FAILURE
    → CI shipped an empty day and told you nothing.

Two seconds. Node 18+. No dependencies, nothing installed, no signup.

The meta-lesson: a pipeline that cries wolf trains you to ignore it, and the day it is finally telling the truth, you ignore that too. False failures are as dangerous as silent ones — they are just slower. Verify artifacts, not exit codes.

Want the tool that checks all five against your real build? ProveDone — $19 · Team & CI — $149