Skip to content

Fix moved recurring Google Calendar occurrences#1924

Open
martin-forge wants to merge 1 commit into
callumalpass:mainfrom
martin-forge:martin-forge/issue-1696-recurring-calendar-exceptions-v2
Open

Fix moved recurring Google Calendar occurrences#1924
martin-forge wants to merge 1 commit into
callumalpass:mainfrom
martin-forge:martin-forge/issue-1696-recurring-calendar-exceptions-v2

Conversation

@martin-forge
Copy link
Copy Markdown
Contributor

@martin-forge martin-forge commented May 22, 2026

Summary

Fixes #1696.

  • Keeps the Google Calendar recurring master event on its original DTSTART/RRULE when one scheduled occurrence is moved.
  • Adds EXDATE entries for original occurrence dates that should no longer render on the master series.
  • Creates or updates a detached one-off Google Calendar event for the currently moved occurrence.
  • Cleans detached exception metadata during completion, skip, delete, archive, and unlink flows.

Related to #1509, #1921, and #1925. This PR is intentionally scoped to recurring Google Calendar exceptions only; the direct frontmatter reconciliation fix is separate.

Tests

  • npm test -- --runInBand tests/services/TaskCalendarSyncService.test.ts tests/unit/services/taskUpdatePlanning.test.ts tests/unit/issues/issue-google-calendar-archive-reliability.test.ts tests/unit/issues/issue-google-calendar-duplicate-sync.test.ts tests/unit/issues/issue-1696-gcal-recurring-reschedule.test.ts
  • npm run typecheck
  • npm run lint
  • npm run build:test
  • vault-python 7 System/Scripts/vault/scan_public_pr.py --repo /Users/martin/Developer/tasknotes-main --base origin/main --head martin-forge/issue-1696-recurring-calendar-exceptions-v2

@martin-forge martin-forge marked this pull request as ready for review May 22, 2026 03:10
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.

[Bug]: Google Calendar export ignores independently rescheduled next occurrence for recurring tasks

1 participant