Skip to content
Latchkey

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.

GitHub Actions
# 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

  1. Add workflow_dispatch so you can replay work after downtime.
  2. Run the workflow manually for each missed period, or once with a range input.
  3. Make the job idempotent so replays are safe.
Terminal
gh workflow run nightly.yml -f date=2026-06-24
gh workflow run nightly.yml -f date=2026-06-25

Design 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.

Related guides

Tired of flaky CI? Latchkey auto-heals failed jobs and retries them for you. Start free →