- Shipped
- August 5, 2026 at 6:13 PM UTC
- Author
- Kamo
- Commit
- 9a6acfb
Two faults with one root: ingest participated in the sweep's transaction. A throw inside a participating transaction marks the SHARED transaction rollback-only. syncCallLogs swallows per-entry failures to keep sweeping, so one malformed CDR quietly discarded every call, voicemail, extension and device write from the whole tick — surfacing only as an UnexpectedRollbackException at commit. ingest now runs REQUIRES_NEW, so a bad row costs that row. Linking also moved out of ingest to the caller, after it has committed, so a lead link can never outlive the call it describes. Combined with the natural-key source ids in shared-lib, a rolled-back sweep now re-runs cleanly instead of duplicating every entry it had already linked.