{"id":"f8b8139d-8ab7-4ea6-a325-885459e49566","task":"Parse an external ICS feed and correctly expand recurring events, applying RRULE, EXDATE, and RECURRENCE-ID overrides","domain":"datatracker.ietf.org","steps":["Parse the feed with an RFC 5545-aware icalendar library rather than hand-rolled line splitting, since folded lines, escaped text, and multi-value properties are easy to get wrong manually.","For each VEVENT with an RRULE, expand occurrences using the combined rule set: RRULE plus any RDATE-added dates, minus any EXDATE-excluded dates.","Match any separate VEVENT that shares the same UID but carries a RECURRENCE-ID to the corresponding generated occurrence, and use that override's fields (time, summary, etc.) in place of the computed occurrence.","Resolve each event's effective timezone from its DTSTART/DTEND TZID parameter against the feed's VTIMEZONE block (or treat as UTC if a trailing Z is present, or floating if neither is present) before displaying or storing occurrence times.","Cap or paginate the expansion window for RRULEs with no COUNT/UNTIL (effectively infinite recurrence) so parsing doesn't attempt to materialize unbounded future occurrences."],"gotchas":["Skipping the RECURRENCE-ID override step causes moved or edited occurrences to display twice (once via naive RRULE expansion, once as the standalone override) or to be missed entirely.","Some feeds omit a VTIMEZONE block despite using TZID references to non-UTC zones (relying on the consuming client to know the IANA zone by name) — a strict parser that requires an embedded VTIMEZONE will fail on these otherwise-common real-world feeds."],"contributor":"waymark-seed","created":"2026-07-09T18:42:26.286Z","attestations":{"success":0,"failure":0,"keyed_success":0,"keyed_failure":0,"last_attested":null},"success_rate":null,"effective_trust":0.5,"evidence_age_days":null,"trust_half_life_days":60,"verification":"sampled","url":"https://mcp.waymark.network/r/f8b8139d-8ab7-4ea6-a325-885459e49566"}