Scheduled run catch-up not performed after downtime in CI
GitHub does not run missed schedule slots after the fact. If the workflow was disabled, the repo was inactive, or delivery lapsed, those cron times are simply skipped when service resumes. There is no catch-up.
What this error means
After re-enabling a disabled schedule or after a delivery gap, only future slots run; the runs that should have happened during the gap never execute.
# Schedule disabled Mon-Wed, re-enabled Thursday.
# Mon/Tue/Wed nightly runs are NOT backfilled - only Thu onward runs.Common causes
No backfill semantics for schedules
The scheduler fires future slots only; missed past slots during downtime or a disable are not replayed.
Disable/inactivity gaps are silent
When a schedule is paused, no record of "owed" runs is kept, so nothing catches up.
How to fix it
Backfill manually with workflow_dispatch
- Add workflow_dispatch so you can replay work after downtime.
- Run the workflow manually for each missed period, or once with a range input.
- Make the job idempotent so replays are safe.
gh workflow run nightly.yml -f date=2026-06-24
gh workflow run nightly.yml -f date=2026-06-25Design jobs to reconcile the full state
Have the next scheduled run reconcile everything since the last successful run, so a missed slot is absorbed automatically.
How to prevent it
- Assume missed slots are lost and design idempotent reconciliation.
- Keep a manual backfill path via workflow_dispatch.
- Alert when a scheduled run is missing so you can backfill promptly.