Describe the bug
Completing an occurrence of an imported all-day recurring task fails to sync to CalDAV because the generated recurrence exception is serialized with an invalid RECURRENCE-ID.
When the task is marked as completed, DAVx⁵ attempts to upload the updated VTODO, but Nextcloud rejects it with HTTP 415 Unsupported Media Type. The server log reports:
Validation error in iCalendar: The supplied value (20260707) is not a correct DATE-TIME
Inspecting the uploaded VTODO shows:
DTSTART;VALUE=DATE:20260706
RECURRENCE-ID:20260707
Since the recurring task is an all-day task (DTSTART;VALUE=DATE), the RECURRENCE-ID should also be a DATE value:
RECURRENCE-ID;VALUE=DATE:20260707
Without VALUE=DATE, the CalDAV server interprets RECURRENCE-ID as a DATE-TIME and rejects the update.
To Reproduce
- Import an all-day recurring VTODO from an ICS file.
- Sync with a CalDAV server (tested with Nextcloud).
- Mark one occurrence of the recurring task as completed.
- Synchronize using DAVx⁵.
Observed behavior
The synchronization fails.
DAVx⁵ reports an HTTP 415 error and the CalDAV server rejects the uploaded VTODO with:
Validation error in iCalendar: The supplied value (20260707) is not a correct DATE-TIME
The uploaded recurrence exception contains:
Expected behavior
For all-day recurring tasks, recurrence exceptions should be serialized with:
RECURRENCE-ID;VALUE=DATE:YYYYMMDD
This matches RFC 5545, where RECURRENCE-ID must have the same value type as the corresponding DTSTART.
Using RECURRENCE-ID;VALUE=DATE allows the task to be accepted by standards-compliant CalDAV servers such as Nextcloud/SabreDAV.
Describe the bug
Completing an occurrence of an imported all-day recurring task fails to sync to CalDAV because the generated recurrence exception is serialized with an invalid
RECURRENCE-ID.When the task is marked as completed, DAVx⁵ attempts to upload the updated VTODO, but Nextcloud rejects it with HTTP 415 Unsupported Media Type. The server log reports:
Inspecting the uploaded VTODO shows:
Since the recurring task is an all-day task (
DTSTART;VALUE=DATE), theRECURRENCE-IDshould also be a DATE value:Without
VALUE=DATE, the CalDAV server interpretsRECURRENCE-IDas a DATE-TIME and rejects the update.To Reproduce
Observed behavior
The synchronization fails.
DAVx⁵ reports an HTTP 415 error and the CalDAV server rejects the uploaded VTODO with:
The uploaded recurrence exception contains:
RECURRENCE-ID:20260707Expected behavior
For all-day recurring tasks, recurrence exceptions should be serialized with:
This matches RFC 5545, where
RECURRENCE-IDmust have the same value type as the correspondingDTSTART.Using
RECURRENCE-ID;VALUE=DATEallows the task to be accepted by standards-compliant CalDAV servers such as Nextcloud/SabreDAV.