29b626d3

By: Tom Sydney Kerckhove <syd@cs-syd.eu>

ical-recurrence: record what an event without a DTSTART does

An event with no DTSTART is conforming input when the calendar carries a
METHOD:

@
; The following is REQUIRED if the component
; appears in an iCalendar object that doesn't
; specify the "METHOD" property; otherwise, it
; is OPTIONAL; in any case, it MUST NOT occur
; more than once.
;
dtstart /
@

recurEvents returns early for one, so its RDATEs are dropped and its
EXDATEs go unapplied.  With METHOD:REQUEST, a DURATION and two RDATEs,
the recurrence set comes back as a single occurrence with no start and
neither RDATE in it.

This records that rather than changing it, because the spec does not say
what the recurrence set of such an event is.  Every definition of one is
phrased in terms of DTSTART, down to "The DTSTART property defines the
first instance in the recurrence set", and there is no way to work out
where an instance an RDATE adds should end when the DTSTART and DTEND pair
that the duration would come from is what is missing.  A period-valued
RDATE carries its own end and a DURATION would carry over, but a DTEND
without a DTSTART would not, so a fix would have to invent an answer for
that case.

Applying the EXDATEs alone would change nothing: the single occurrence has
no start, and an exception date cannot match that.

No behaviour changes here.  Worth a decision rather than a silent gap.