Your CI is green. Nothing was produced.

A job that exits 0 and made nothing should turn your build red. A job that finished the work and then crashed in rm -rf tmp/ should not. No other CI gate makes that distinction, because they all read the exit code.

One dashboard for every gate

$ node team/run-all.mjs gates/*.json --out dashboard.html
> video-render    PASS
> image-batch     SILENT_FAILURE
> nightly-scraper FALSE_FAILURE

dashboard: dashboard.html
3 gates, 1 failing

A single self-contained HTML file. No server, no dependencies. Attach it to a build, mail it, open it anywhere. It draws the trend, not just today — each artifact gets a sparkline of its last runs, so a slow decay is visible before it trips anything.

A Slack message that names the artifact

ProveDone: 1 of 3 gates failing
 video-render — PASS
 image-batch — SILENT_FAILURE — out/img (12 files, expected >= 45)
⚠️ nightly-scraper — FALSE_FAILURE

Slack and Discord are detected from the URL. A notification failure never fails your build — alerting is a side channel, not a dependency, and it has its own timeout.

Drop it after your build step

- name: Build
  run: npm ci && npm run build

# Don't trust the build's exit 0. Look at what it produced.
- uses: ./provedone/team
  with:
    gates: gates/*.json
    webhook: ${{ secrets.PROVEDONE_WEBHOOK }}

The dashboard is uploaded as a build artifact automatically, so a red run always has the evidence attached. Nothing from your inputs reaches the shell as code.

Everything in ProveDone is included — nine artifact checks, the init scaffolder, the learned baseline, the 28-case self-check, five ready-made gates and the playbook. Plus a working workflow file and a 12-case end-to-end test for the team pack itself.
Just your own machine? $19 →

Already bought the $19? Email your receipt for code UPGRADE130 — $130 off, so you pay only the difference.
12 months of updates and priority on issues you report. MIT, so legal review is a non-event. 30-day refund. No form, no questions.