Replicating this issue is doable using the guide below but please keep in mind: You must create the event starting March 23 00:00 through March 24 23:59 for the simple backend to create this.
I believe it is due to the rounding error because if I set the CrudManager writeAllFields: false it only sends the duration to the backend.
Also, attached are the payloads sent between CM and backend along some visual diffs for your convenience:
Hi. I hope that you are well. This is currently blocking us. Is there any news? I would be happy to pay for making progress on this one out of respect for your time. Thanks.
The heart of replication is wrapping is the setTimeout. This is meant to mimic how users does something after the Scheduler is loaded. Here is an even simpler example where the setTimeout is not nested inside an event and I removed other things not related to the bug. This example clearly shows that something "odd" is at play here
Having looked a bit more at it, it seems to be doing what it should. When given un-normalized data (duration is missing), it will fill in the missing parts, thus leaving the record modified.
If you do not want to store & pass the duration, I recommend you flag the duration field on your event model as persist: false. It should then not lead to another sync.