Bug Description
I’ve found another Google Calendar rendering bug, but this one looks distinct from the sync/export issues.
A Google Calendar event can show up on two different days in TaskNotes list/agenda-style calendar views, even though it only exists once in Google Calendar.
What seems to trigger it is:
- a recurring Google Calendar event
- one instance being moved off its original series date
- the moved instance being a timed event with
start == end (zero-duration / point-in-time event)
- the moved time being late in the day
I hit this with a moved recurring Google event at 23:12, and TaskNotes rendered the same event once on the correct day and again on the following day.
This does not appear to be duplicate data coming from Google. I checked the Google Calendar event itself and there was only one instance in the relevant window.
Steps to Reproduce
- Use the Google Calendar integration.
- Have a recurring Google Calendar event.
- Move one occurrence off its original series date to a different day.
- Make that moved occurrence a timed event where the start and end are the same (for example
23:12 to 23:12).
- Open a TaskNotes calendar view in
listWeek / agenda-style mode.
- Refresh calendars.
Expected Behavior
The event should appear once, on the actual day/time returned by Google Calendar.
Actual Behavior
The same Google Calendar event is rendered under two day headers: the correct day and the following day.
Why I think this is in TaskNotes, not Google
I checked the event through the Google Calendar connector and there was only one matching event in the time window.
The Google event had a real start and end, but they were equal:
start: 2026-04-22T23:12:00+01:00
end: 2026-04-22T23:12:00+01:00
From the installed bundle / source, it looks like:
GoogleCalendarService.convertToICSEvent() preserves that as a timed event with identical start / end
createICSEvent() passes it through to FullCalendar unchanged
- the duplicate happens at render time in the calendar/list view, not during fetch
So this looks like a rendering/normalisation bug around zero-duration timed Google recurring exceptions, not a duplicate-fetch bug.
Related but Distinct
This seems adjacent to the recurring exception work in #1696 / #1802, but it is not the same problem.
Suggestion
I think the safest fix is probably to normalise zero-duration timed external events before handing them to FullCalendar, rather than letting them through as start == end.
Bug Description
I’ve found another Google Calendar rendering bug, but this one looks distinct from the sync/export issues.
A Google Calendar event can show up on two different days in TaskNotes list/agenda-style calendar views, even though it only exists once in Google Calendar.
What seems to trigger it is:
start == end(zero-duration / point-in-time event)I hit this with a moved recurring Google event at
23:12, and TaskNotes rendered the same event once on the correct day and again on the following day.This does not appear to be duplicate data coming from Google. I checked the Google Calendar event itself and there was only one instance in the relevant window.
Steps to Reproduce
23:12to23:12).listWeek/ agenda-style mode.Expected Behavior
The event should appear once, on the actual day/time returned by Google Calendar.
Actual Behavior
The same Google Calendar event is rendered under two day headers: the correct day and the following day.
Why I think this is in TaskNotes, not Google
I checked the event through the Google Calendar connector and there was only one matching event in the time window.
The Google event had a real
startandend, but they were equal:start: 2026-04-22T23:12:00+01:00end: 2026-04-22T23:12:00+01:00From the installed bundle / source, it looks like:
GoogleCalendarService.convertToICSEvent()preserves that as a timed event with identicalstart/endcreateICSEvent()passes it through to FullCalendar unchangedSo this looks like a rendering/normalisation bug around zero-duration timed Google recurring exceptions, not a duplicate-fetch bug.
Related but Distinct
This seems adjacent to the recurring exception work in #1696 / #1802, but it is not the same problem.
Suggestion
I think the safest fix is probably to normalise zero-duration timed external events before handing them to FullCalendar, rather than letting them through as
start == end.