Skip to main content

Schedules

When present, catalog schedules and dependency chains are generated from base/launcher/catalog.yaml. During cutover, the inventory also includes live CronJobs rendered from the production overlay and their committed Grafana alert selectors. Draft-day inherits the same CronJob schedules.

Timezones and alerts

An unset spec.timeZone uses the controller's timezone; this deployment uses UTC for the ESPN healthcheck. America/Chicago jobs follow daylight saving time. Missed-run grace measures Job creation, not completion.

Legacy CronJobs​

CronJobCron expressionTimezoneWhat runsAlerts
espn-session-healthcheck0 6 * * 1Unset (controller timezone; UTC in this deployment)src/bots/check_espn_session.jsLatest Job failed (fantasy-cronjob-job-failed)
Missed > 120m (fantasy-cronjob-missed-schedule)
fantasy-draft-prep-refresher0 18 * * *America/ChicagoProjection → K/D-ST → VORP supervisor (up to four weeks)Latest Job failed (fantasy-cronjob-job-failed)
Missed > 120m (fantasy-cronjob-missed-schedule)
fantasy-lineup-optimizer15 19 * * 2America/Chicagosrc.optimization.lineup_solverLatest Job failed (fantasy-cronjob-job-failed)
Missed > 120m (fantasy-cronjob-missed-schedule)
fantasy-rapid-status-syncer*/10 * * * 4,0,1America/Chicagosrc.ingestion.sync_playersLatest Job failed (fantasy-cronjob-job-failed)
Missed > 20m (fantasy-cronjob-missed-schedule-rapid)
fantasy-rumor-action-trigger45 21 * * *America/Chicagosrc.services.rumor_action_serviceLatest Job failed (fantasy-cronjob-job-failed)
Missed > 120m (fantasy-cronjob-missed-schedule)
fantasy-rumor-syncer*/30 * * * *America/Chicagosrc.ingestion.sync_rumorsLatest Job failed (fantasy-cronjob-job-failed)
Missed > 60m (fantasy-cronjob-missed-schedule-rumor)
fantasy-stale-draft-job-sweeper*/15 * * * *America/Chicagosrc.ops.sweep_stale_draft_jobsLatest Job failed (fantasy-cronjob-job-failed)
Missed > 30m (fantasy-cronjob-missed-schedule-sweeper)
fantasy-sync-actual-scores5 17 * * 2America/Chicagosrc.ingestion.sync_actual_scoresLatest Job failed (fantasy-cronjob-job-failed)
Missed > 120m (fantasy-cronjob-missed-schedule)
fantasy-sync-actual-scores-reconcile0 10 * * 5America/Chicagosrc.ingestion.sync_actual_scoresLatest Job failed (fantasy-cronjob-job-failed)
Missed > 120m (fantasy-cronjob-missed-schedule)
fantasy-trade-candidates0 7 * * *America/Chicagosrc.jobs.trade_candidatesLatest Job failed (fantasy-cronjob-job-failed)
Missed > 120m (fantasy-cronjob-missed-schedule)
fantasy-trade-candidates-prescan30 12 * * 3,5America/Chicagosrc.jobs.trade_candidatesLatest Job failed (fantasy-cronjob-job-failed)
Missed > 120m (fantasy-cronjob-missed-schedule)
fantasy-weekly-ingestor0 16 * * 2America/Chicagosrc.ingestion.sync_league → src.ingestion.metrics_extractorLatest Job failed (fantasy-cronjob-job-failed)
Missed > 120m (fantasy-cronjob-missed-schedule)
fantasy-weekly-waiver-trigger30 20 * * 2America/Chicagosrc.optimization.waiver_evaluator (resolves upcoming week)Latest Job failed (fantasy-cronjob-job-failed)
Missed > 120m (fantasy-cronjob-missed-schedule)
rumor-digest-bot0 11 * * *America/Chicagosrc/bots/rumor_digest_bot.jsLatest Job failed (fantasy-cronjob-job-failed)
Missed > 120m (fantasy-cronjob-missed-schedule)
trade-inbox0 8-22/2 * * *America/Chicagosrc/bots/trade_inbox.js --refreshLatest Job failed (fantasy-cronjob-job-failed)
Missed > 120m (fantasy-cronjob-missed-schedule)
trade-scan0 13 * * 3,5America/Chicagosrc/bots/trade_scan.js --stageLatest Job failed (fantasy-cronjob-job-failed)
Missed > 120m (fantasy-cronjob-missed-schedule)

Refresh the inventory​

With kubectl and Python's PyYAML installed, run from the repository root:

python3 scripts/generate-schedules.py
python3 scripts/generate-schedules.py --check

The Docs schedules workflow checks this section on documentation, catalog, manifest and alert changes. CronJobs represented by catalog jobs do not need legacy failed-Job and missed-schedule alerts; other live CronJobs must keep both. Chain edges show whether a step waits for its predecessor to succeed or finish, and latest times are shown on the relevant steps.

Read the weekly order​

Tuesday's America/Chicago sequence leaves dependency headroom between runs:

Friday's 10:00 actual-score reconciliation precedes the 13:00 trade scan. The daily 11:00 rumor digest precedes the 21:45 action trigger. These are clock offsets, not dependency enforcement: a failed or delayed producer still needs investigation.

Related: CronJob alert semantics and dependencies, Failed CronJob runbook.