Skip to content

Fix Google Calendar task sync reliability and rendering#1851

Open
martin-forge wants to merge 1 commit intocallumalpass:mainfrom
martin-forge:martin-forge/google-calendar-fixes
Open

Fix Google Calendar task sync reliability and rendering#1851
martin-forge wants to merge 1 commit intocallumalpass:mainfrom
martin-forge:martin-forge/google-calendar-fixes

Conversation

@martin-forge
Copy link
Copy Markdown
Contributor

@martin-forge martin-forge commented Apr 30, 2026

Summary

This combines the Google Calendar fixes from #1802, #1832, #1843, and #1844 into one PR. I think they are easier to review together because they touch the same sync path and share metadata assumptions.

  • Recurring task reschedules now keep one master event and one detached exception event, with EXDATEs for moved and completed instances.
  • Zero-duration timed Google events get a minimal end time before FullCalendar list rendering, which prevents the multi-day display bug.
  • Task deletions and failed sync writes are queued in plugin data and replayed after reconnect or restart; 404/410 deletes are treated as already clean.
  • Create/update/status races are serialized or deduped so duplicate events and overwritten completion ticks are avoided.
  • Calendar descriptions are plain text: wikilinks render as labels, and the Obsidian URL is included as text instead of an HTML anchor. This avoids raw HTML in Apple Calendar; whether it is clickable still depends on the calendar client.

Maintainer note

I opened this as a combined PR because these fixes all sit in the Google Calendar task sync path, and the later reliability fixes depend on the recurring-exception metadata from #1802. One merge should be simpler than sequencing four branches.

Validation

  • npm test -- tests/services/TaskCalendarSyncService.test.ts tests/unit/issues/issue-google-calendar-delete-retry-queue.test.ts tests/unit/issues/issue-google-calendar-duplicate-investigation.test.ts tests/unit/issues/issue-google-calendar-archive-reliability.test.ts tests/unit/issues/issue-1696-gcal-recurring-reschedule.test.ts tests/unit/issues/issue-1696-local-calendar-recurring-reschedule.test.ts tests/unit/issues/issue-1823-zero-duration-google-calendar-list-duplication.test.ts --runInBand
  • npm run typecheck
  • npm run build:test
  • TZ=UTC npm test -- --runInBand --silent

Note: a non-UTC local full test run still has two pre-existing timezone-sensitive failures in due-date-timezone-inconsistency.test.ts and issue-327-failing-test.test.ts; the UTC run passes.

@martin-forge martin-forge force-pushed the martin-forge/google-calendar-fixes branch from ca81b1e to 5ff79ac Compare April 30, 2026 13:25
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant