I haven't got a solution yet, but I think I know what my problem was with this error.
I had two calendars in my iCloud account which I wanted to merge, so I exported one to an .ICS file, and imported into the other. Cue errors all over the place whilst it tried to sync with iCloud:
The server responded with an error.
Access to "APPOINTMENT" in "CALENDAR" in account "ACCOUNT" is not permitted.
The server responded:
"403"
to operation CalDAVWriteEntityQueueableOperation
Ignore | Try Again | Revert to Server
If I click 'try again' then the same error occurs, if I click 'Revert to Server' it seems to delete the offending appointment and move on to the next one! Not much use ..
So I took a look at the console whilst iCal was syncing and I found a whole load of XML, but in there was the following:
Found component XXX.ics with same UID in a different collection: YYY.ics
Looking at the iCalendar specification it clearly says: "The UID itself MUST be a globally unique identifier". I also checked out the .ICS file which I created - it includes a UID for many (if not all) entries.
In summary, I think this means:
If you export a calendar from iCloud and attempt to re-import without first deleting your old calendar entries (even if they are in another calendar), iCloud will realise that it already has the appointments and stop you from recreating them. I'm guessing the solution is either to:
(a) Delete your old calendar after you've created the .ICS file and before you import, or
(b) Remove all the UID entries from the .ICS file before you import