One request at a time
A single queue with exactly one call in flight. Requests start at least 60 seconds apart; if a provider sends Retry-After, the longer wait wins.
Milestone 3 · Scheduling & reliability
A GitHub Actions schedule that is DST-aware, a single polite request queue, and a run log you can audit — every call, every retry, every record.
The same arithmetic the pipeline logs before each run. Move the sliders to see how the target list affects the nightly window.
Requests
61
Estimated runtime
1h 00m
Starts
2:00 a.m. ET
Finishes around
3:00 a.m. ET
Run history
Status is computed, not assumed: a run is succeeded, degraded (some calls or records failed) or failed.
| Started (ET) | Status | Trigger | Requests | Spacing | Records | Duration |
|---|---|---|---|---|---|---|
Change detection
Each record carries a content hash. When a price or registration status moves, a snapshot is kept — the raw material for "price goes up Friday" or "only 20 spots left" badges in your directory.
Safeguards
A single queue with exactly one call in flight. Requests start at least 60 seconds apart; if a provider sends Retry-After, the longer wait wins.
Timeouts, 429s and 5xx errors back off exponentially (60 s → 15 min), and every retry counts against the same spacing and call budget.
Three consecutive failures pause that provider for the rest of the run, so one outage never hammers an API or delays the others.
Every run has a call budget and a 5.5-hour time budget. The plan is estimated before the first call and logged with the run.
Records are upserted by stable IDs, so re-running a night is always safe. Price and status changes are kept as history snapshots.
A failed or degraded run opens a GitHub issue — which GitHub emails to you — and can post to Slack or Teams, with the reason. Nobody has to watch a dashboard.
How is this looking?
Thoughts, wishes or questions — they come straight to me.