Skip to content

Sync queue

Sync jobs run one at a time per organization. Up to two more can be queued while one is running — for a total cap of 3 open jobs (1 running + 2 queued).

Why a queue

  • You can fire a per-company sync while a full org sync is running. The per-company job waits its turn.
  • The cron also enqueues; manual syncs and cron compete for the same slot.

Duplicate protection

If a job with the same target + same sources + same signal types + similar timespan (±1 h) is already running or queued, the new request is rejected with 409 Same sync already running. Wait for it or cancel the existing one.

Cancellation

Click the × on any running or queued row in the sidebar. Cancelling a running job:

  • Aborts the in-flight Claude / linkdapi requests immediately
  • Skips markOrgSynced (last-sync timestamp does not advance)
  • Skips notifyOrg (no notification fires)
  • Signals already inserted up to that point stay — we don't roll back

After cancel, the next queued job (if any) starts within ~1 second.

Limits

  • 3 open jobs max (cap full = 429 response, toast: "Queue full")
  • In-memory state — a backend restart wipes the queue. Re-trigger anything you need.

Same content as the in-app docs drawer. Source of truth: frontend/src/docs/sections.ts.