Bulk jobs at a glance
Load order
| Order | Load | Because |
|---|---|---|
| 1 | Reference data | Bound attributes reject unknown codes |
| 2 | Entities | Relationships need both endpoints |
| 3 | Relationships | |
| 4 | Run maintenance | Blocking keys and value frequencies |
| 5 | Match |
The engine weighs how common each value is in your data. Mid-load those frequencies cover a fraction of the data, so values look rarer than they are and agreements score too high. Records merge on evidence later data would have weakened.
Job types
Nine: entity ingest and update; match index, run, and retier; data quality score; label recompute; assertion backfill and resolve.
Recompute types accept a tenant-wide scope, so "rescore everything" is one submission.
Statuses
| Status | Meaning |
|---|---|
| Queued · Running | In flight |
| Completed | Every row succeeded |
| Completed with errors | Finished; some rows failed |
| Failed | Could not complete |
| Dead letter | Exhausted retries |
| Cancelled | Stopped by request |
Check the status, not only the error count — a job that finished with failures has its own terminal status.
Resilience
How a job recovers depends on whether it can be split, and that is decided by its type rather than by anything you set:
| Job kind | Split across workers | If a worker dies |
|---|---|---|
| Loading — ingest and update | No. One worker, one pass. | The whole job is requeued, and dead-lettered once its attempts run out |
| Recompute — matching, scoring, relationship work | Yes, into chunks workers claim independently | Another worker reclaims that chunk; at most that chunk is redone |
Size a large load with the first row in mind, not the second.
For chunked jobs:
| Event | Behaviour |
|---|---|
| Worker stalls | Two independent liveness signals catch it |
| Worker returns after being reclaimed | Its late writes are rejected, not applied |
The last one is what prevents a returning worker silently corrupting the job's totals.
Backpressure
Work beyond capacity is rejected with a retry interval, not queued indefinitely. A queue that accepts everything grows until something worse happens.
Partial success is normal
Valid rows land; failures are recorded per row with a reason. Fix and resubmit only those.
Next
Last verified against commit 1e1de1ad (2026-08-03)