{
  "slug": "python-services-dynamically-specify-cron-schedules-f315190eeb04",
  "title": "Python services dynamically specify cron schedules",
  "tools": [
    "vercel"
  ],
  "tags": [
    "agent"
  ],
  "introduced_at": "2026-04-15T18:35:40.000Z",
  "announced_at": "2026-04-15T18:35:40.000Z",
  "effective_at": null,
  "date_basis": "source-publication",
  "status": "unknown",
  "how": {
    "incantation": "When a Python cron service in `experimentalServices` needs multiple schedules, set `schedule` to `\"<dynamic>\"`. At build time Vercel imports and runs its entrypoint, which must return a list of `(entrypoint, cron_schedule)` pairs.",
    "examples": [
      "{\n  \"experimentalServices\": {\n    \"scheduler\": {\n      \"type\": \"cron\",\n      \"entrypoint\": \"jobs.registry:crontab\",\n      \"schedule\": \"<dynamic>\"\n    }\n  }\n}"
    ],
    "gotchas": [
      "Version: 51.4.0",
      "experimentalServices.scheduler.type (required): Set to `\"cron\"` for a cron service.",
      "experimentalServices.scheduler.entrypoint (required): Python entrypoint that Vercel imports and runs at build time; it must return a list of `(entrypoint, cron_schedule)` pairs.",
      "experimentalServices.scheduler.schedule (required): Set to `\"<dynamic>\"` to use schedules supplied by the entrypoint.",
      "Prerequisite: To deploy a project using `experimentalServices`, set its framework setting to Services and include `experimentalServices` in `vercel.json`. Services are in private beta and require access granted by request.",
      "The behavior applies when the schedule for a cron service in `experimentalServices` is `\"<dynamic>\"`.",
      "The entrypoint function must return a list of pairs of `(entrypoint, cron_schedule)`.",
      "The entrypoint is imported and run at build time.",
      "Docs conflict: Current docs describe the legacy `experimentalServices` model as available while migrating and say new projects should use the `services` model; they do not document dynamic Python cron schedules. https://vercel.com/docs/services/experimental"
    ]
  },
  "why_it_matters": "Configure multiple cron jobs for a Python service using schedules determined by its entrypoint.",
  "sources": [
    "https://github.com/vercel/vercel/releases/tag/vercel%4051.4.0",
    "https://github.com/vercel/vercel/pull/15930",
    "https://vercel.com/docs/services"
  ],
  "rank": 0.91019,
  "judge": {
    "publish": true,
    "judge_model": "codex-cli/gpt-6-luna+typesafe/jev-1.13.0",
    "prompt_version": "extract-v7+enrich-v2+judge-v2x3+jev-publish-v1"
  },
  "review_state": "approved",
  "provenance": {
    "run_id": "backfill-20261007",
    "verdict_id": "backfill-20261007:backfill-20261007-68b45e1a99896b3f-0:gate",
    "evidence_hash": "29dc02aff074a2637eb0666333dc1a0a813b194ec5eca9f8b2bb73dd26cc0690"
  },
  "review": {
    "draft_hash": "3be45dabc701c491939f8a23e254ad1a4bc120f7b5284bb50edcac34712b3442",
    "reviewer": "publication-gate",
    "reviewed_at": "2026-10-07T00:00:00.000Z",
    "decision": "backfill-20261007:gate",
    "reason": "2 of 3 judge runs approved with p_yes >= 0.9 (mean 0.91 >= 0.9; 2 needed) and Jev gave 0.69 (>= 0.6 needed)."
  }
}
