Rewrite docs/jobs.md § Scheduled jobs so it describes the substrate that actually fires the jobs, and correct the two sentences elsewhere in that file that this story falsifies.
§ Scheduled jobs currently says, in bold:
Inngest's cron trigger means there's no separate scheduler service to run.
After this story there is one. It is not a service in the deployment sense — it is a tick inside the existing worker process, adding no machine and no environment variable — and saying exactly that is more useful to the next reader than deleting the sentence. Correct it rather than removing it, so a reader can see the constraint went away rather than that the paragraph changed.
docs/decisions/job-queue-foundation.md and linked, not duplicated. The ADR is the record; this is the reference.event_name = scheduled.{job_id} on the ledger row (already documented and still true), plus the scheduled_for key on job_queue and what it guarantees — one run per tick regardless of how many workers are running.catchUp option is discoverable from the place someone adding a job already reads: § How to add a new job and the defineJob reference at the top of the file both describe the option set.defineJob reference near the top, wherever the option list appears — catchUp joins cron, retryPolicy, concurrency, idempotency, debounce.docs/jobs.md ONLY. The catch-up REASONING lives in the ADR amendment the decision card writes; this card links to it and must not restate the argument, or the two will disagree the first time one is edited.
Does NOT describe the production cutover, the current routing set, or which jobs are live on which engine — that state is a property of the deployment and changes without a commit. Point at /settings/workspace/jobs and at MOTIR_POSTGRES_JOB_IDS instead of transcribing a snapshot.
Does NOT delete Inngest-specific prose that is still true. MOTIR-3418 retires the SDK and owns the sweep that removes what stops being true then.
grep -n "no separate scheduler service" docs/jobs.md returns the corrected sentence, not the original — and the correction says what replaced the claim rather than merely dropping it.catchUp appears in the defineJob option reference and in § How to add a new job, so someone adding a cron job meets it without reading an ADR.docs/jobs.md — § Scheduled jobs (the section to rewrite), § Registration, § defineJob(options, handler), § How to add a new jobdocs/decisions/job-queue-foundation.md — the amendment to link tolib/jobs/defineJob.ts — the option list this reference mirrorslib/jobs/engine/registry.ts · scripts/worker.ts — the import-completeness requirement to describelib/services/jobScheduleHealthService.ts — the probe whose meaning shifts per migrated job