Skip to content

[BUG] All-day recurring task exceptions serialize RECURRENCE-ID without VALUE=DATE #2334

Description

@josesantosdigital

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

  1. Import an all-day recurring VTODO from an ICS file.
  2. Sync with a CalDAV server (tested with Nextcloud).
  3. Mark one occurrence of the recurring task as completed.
  4. 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:

RECURRENCE-ID:20260707

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.

Metadata

Metadata

Labels

bugSomething isn't working

Type

No type

Fields

No fields configured for issues without a type.

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions