Summary
GitHub Actions runs .github/workflows/publish-scheduled-events.yml on */5 * * * * to call /api/cron/publish-events and publish due scheduled events. The job is intended to poll about every 5 minutes, but GitHub's scheduler is best-effort, not guaranteed.
Observed behavior
- Manual
workflow_dispatch runs work after the middleware /api/cron allowlist fix.
- Automatic
schedule runs do fire, but not reliably every 5 minutes.
- Example: after a successful schedule run at
2026-07-17T00:06:55Z, roughly six expected */5 ticks (~00:10–00:35 UTC) did not produce additional schedule runs (~30 minutes with no automatic poll).
Impact
- Officers can schedule an event for time T, but it may publish several minutes (or longer) after
publish_at.
- Empty polls (
{"published":0}) are fine when they do run; the problem is missed / delayed schedule ticks.
Context / constraints
- Vercel Hobby only allows ~1 cron/day, so we moved polling to GitHub Actions.
- Keepalive job was added to reduce 60-day public-repo schedule dormancy risk; that does not fix tick reliability.
Possible directions
- Monitor schedule gaps (alert if no
schedule run for N minutes).
- Use an external scheduler (e.g. cron-job.org) hitting the same authenticated endpoint.
- Move to Vercel Pro cron if we want platform-side minute accuracy.
- Document expected "publish within ~5–15+ minutes after
publish_at" for officers.
Acceptance criteria
Summary
GitHub Actions runs
.github/workflows/publish-scheduled-events.ymlon*/5 * * * *to call/api/cron/publish-eventsand publish due scheduled events. The job is intended to poll about every 5 minutes, but GitHub's scheduler is best-effort, not guaranteed.Observed behavior
workflow_dispatchruns work after the middleware/api/cronallowlist fix.scheduleruns do fire, but not reliably every 5 minutes.2026-07-17T00:06:55Z, roughly six expected*/5ticks (~00:10–00:35 UTC) did not produce additional schedule runs (~30 minutes with no automatic poll).Impact
publish_at.{"published":0}) are fine when they do run; the problem is missed / delayed schedule ticks.Context / constraints
Possible directions
schedulerun for N minutes).publish_at" for officers.Acceptance criteria
publish_atfor CSA ops needs