6daa96b66e
Covers: - iCal parsing: filters today's events, excludes past/future/all-day - VEVENT parsing: TZID, UTC, and all-day (nil) events - DTSTART/DTEND parsing: UTC, local (treated as UTC), all-day, invalid - safeKey sanitization: spaces→dashes, strip special chars - writeIfChanged: no-prev writes, same-value skips, diff-value writes, read-error and write-error propagation - pollOnce end-to-end: httptest.Server + fakeCore verifies calendar_busy + calendar_event facts written with correct keys/values