{
  "slug": "vercel-implements-scheduled-jobs-for-js-ts-6ffe6859f8c1",
  "title": "vercel implements scheduled jobs for JS/TS",
  "tools": [
    "vercel"
  ],
  "tags": [
    "agent"
  ],
  "introduced_at": "2026-05-09T10:19:03.000Z",
  "announced_at": "2026-05-09T10:19:03.000Z",
  "effective_at": null,
  "date_basis": "source-publication",
  "status": "unknown",
  "how": {
    "incantation": "For a JavaScript or TypeScript project using a static scheduled job, define a `type: \"job\"` service with `trigger: \"schedule\"` in `vercel.json` and point it to a file that exports a default function. Deploy it with Vercel; dynamic schedules and local `vc dev` support were not included in this change.",
    "examples": [
      "{\n  \"services\": {\n    \"cleanup\": {\n      \"type\": \"job\",\n      \"trigger\": \"schedule\",\n      \"entrypoint\": \"jobs/cleanup.js\",\n      \"schedule\": \"* * * * *\"\n    }\n  }\n}"
    ],
    "gotchas": [
      "Version: 53.3.0",
      "services.<name>.type (required): Set to `\"job\"` for a scheduled job.",
      "services.<name>.trigger (required): Set to `\"schedule\"` to trigger the job on a schedule.",
      "services.<name>.entrypoint (required): Path to the job file; it must export a default function, invoked once per tick.",
      "services.<name>.schedule (required): Static cron expression for the job schedule.",
      "Prerequisite: Use Vercel CLI 53.3.0 or later for the feature introduced in this release.",
      "Prerequisite: The entrypoint file must export a default function.",
      "Prerequisite: Cron invocations can be secured by setting the project environment variable `CRON_SECRET`; Vercel sends it in the Authorization header. The change's dispatcher verifies it when set.",
      "Docs conflict: The release commit says dynamic schedules and `vc dev` support are future work; they are not available for this feature in the change. https://github.com/vercel/vercel/commit/b4ada64"
    ]
  },
  "why_it_matters": "Configure scheduled jobs for a JavaScript or TypeScript project on Vercel.",
  "sources": [
    "https://github.com/vercel/vercel/releases/tag/vercel%4053.3.0",
    "https://github.com/vercel/vercel/commit/b4ada64",
    "https://github.com/vercel/vercel/releases/tag/vercel@53.3.0",
    "https://vercel.com/docs/cron-jobs/manage-cron-jobs"
  ],
  "rank": 0.96038,
  "judge": {
    "publish": true,
    "judge_model": "codex-cli/gpt-6-luna+typesafe/jev-1.13.0",
    "prompt_version": "extract-v7+enrich-v1+judge-v2x3-rejudge+jev-publish-v1"
  },
  "review_state": "approved",
  "provenance": {
    "run_id": "backfill-20261007",
    "verdict_id": "backfill-20261007:backfill-20261007-f13efcbd3c989814-3:rescue",
    "evidence_hash": "24576960e24634ed5b69a63a6a5d623155da0893b70322d318d01483acf9247c"
  },
  "review": {
    "draft_hash": "61662bbb9e9832e88724ee8ae989effe14a98233dcbb5fad226cd0d6c7c50e0b",
    "reviewer": "publication-gate",
    "reviewed_at": "2026-10-07T00:00:00.000Z",
    "decision": "backfill-20261007:rescue",
    "reason": "Rescue path: first rejected only because the extracted card lacked usage; judged again on the enriched card, 3 of 3 judge runs approved with p_yes >= 0.9 (mean 0.96 >= 0.9; 2 needed) and Jev gave 0.72 (>= 0.6 needed)."
  }
}
