Skip to content

[Bug]: Google Calendar zero-duration recurring exception can render on two days in list view #1823

Description

@martin-forge

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

  1. Use the Google Calendar integration.
  2. Have a recurring Google Calendar event.
  3. Move one occurrence off its original series date to a different day.
  4. Make that moved occurrence a timed event where the start and end are the same (for example 23:12 to 23:12).
  5. Open a TaskNotes calendar view in listWeek / agenda-style mode.
  6. 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.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions