Batches keep appearing for the same record. Unpublish the job first, then look for the write that feeds it:
- A synchronous job that updates the record it watches. Synchronous writes fire entity events; asynchronous ones do not. Make it asynchronous unless it answers a web request.
- A job that writes through the site's own API with an HTTP request. That is a web request, so its write fires events whatever the job's mode.
- Two jobs that trigger each other, directly with Trigger job or through records each writes.
- A two-way sync with another system that sends every change back: the site pushes, the other system saves and echoes, the site saves and pushes again.
The guard is a condition on Pre-Event data that carries on only when the field it reacts to changed, and a write that happens only when it would change something. For syncs, decide which system owns each field and send only those (field ownership).