feat: Google Calendar sync for single-user self-hosting #123
Labels
No labels
bug
documentation
duplicate
enhancement
good first issue
help wanted
invalid
question
status:blocked
track:api
track:auto
track:core
track:deploy
track:infra
track:ui
type:cleanup
type:docs
type:epic
type:release
type:research
wontfix
No project
No assignees
2 participants
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference
barrettruth/delta#123
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Tracker
Google Calendar sync is still the root feature, but the implementation direction has changed from the original bidirectional March sketch. The v1 stack is now a pull-only, read-only Google sync model shared by Google Tasks and Google Calendar.
This tracker supersedes the earlier bidirectional wording on this issue. Keep the old comments as historical context only; do not implement Calendar push/write sync in this stack.
Topological implementation stack
Post-v1 / deliberately deferred tracker: #451.
Core product decisions
open in Google Calendarwhere task details/actions are available.Sync/storage decisions
seen,created,updated,cancelled,skipped,duplicate skipped, anderrors.410 Gone, clear the affected calendar sync token, full-resync during the same manual pull, and report that full resync happened.Calendar source selection decisions
[hidden]attribute.freeBusyReadercalendars because they do not expose event details.Calendar import decisions
eventTypes.{calendarId}:{event.id}.calendarId,eventId,iCalUID,etag,updated,sequence,eventType, status, visibility, transparency, calendar/source attributes, and raw useful payload in metadata..icsduplicates by matchingiCalUID; count them asduplicate skipped. Do not auto-link and do not build a conflict workflow for this edge case in v1.meetingUrl.private eventwith[private]source metadata.transparency; Calendar surfaces should render them more quietly later instead of hiding them.Recurrence decisions
exdateson the master.Explicit non-goals for this stack
Deferred design tracker
#451 tracks the post-Google-sync backlog and open questions, including attachments, link sharing, raw provider JSON view/editing, native free/busy rendering, final icon/source-indicator polish, scheduled sync, merge/conflict policy, recurring UI sync semantics, auto-sync, and whether configurable sync times should exist.
Acceptance criteria for this tracker
Status update: sync engine and mapper are built, not yet wired to UI.
Done:
google-calendar.ts: REST API client (list/create/update/delete events, list/create calendars)google-calendar-mapper.ts: bidirectional field mapping (Google Event <-> Delta Task), 36 tests passinggoogle-calendar-sync.ts: pull phase (Google->Delta), push phase (Delta->Google), field-level merge, sync token management, auto-creates "delta" calendarcalendar.eventsscopeRemaining:
feat: Google Calendar bidirectional syncto feat: Google Calendar sync for single-user self-hostingCompleted by the merged Google read-only sync stack: #454 through #460 landed #444 through #450 in order, with Google Tasks and Google Calendar sharing sync_sources, read-only mutation guards, manual Calendar source/pull flows, UI source indicators, docs, tests, and the operator smoke path. #451 remains the intentionally deferred post-v1 backlog.