The REST API (/actions/tasks) hides runs that fail at parse/dispatch time,
so it reported 0 runs while the forge DB held 151 failed + 8 stuck runs —
all from the same root cause: ZERO runners registered on ct-forge
(action_task=0, nothing ever executed a step).
- infrastructure/forge-ci-doctor.sh: DB-backed health check over ssh; lists
runners, per-repo run-status breakdown, recent failures, dispatched-task
count; RED/GREEN verdict + exit code. shellcheck-clean.
- scripts/run/ci.sh: wire ./run ci:doctor; fix broken ci:status (org was
'lilith/', real ct-forge org is 'platform/'); ci:setup-host now points at
the terraform ci-runners module instead of dead black.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>