The deleteEventsPreceedingBaselineWithCompletion: method in CDERebaser is not correct. It simply takes all events with a global count older than the baseline. But the global count of the baseline can recede when new devices join, so this will not always catch all the events that need removal.
Instead, it will be necessary to go through events for a single device in the baseline, and remove the ones with a revision number older than the baseline has for that device. Repeat for all devices.
The deleteEventsPreceedingBaselineWithCompletion: method in CDERebaser is not correct. It simply takes all events with a global count older than the baseline. But the global count of the baseline can recede when new devices join, so this will not always catch all the events that need removal.
Instead, it will be necessary to go through events for a single device in the baseline, and remove the ones with a revision number older than the baseline has for that device. Repeat for all devices.