Add Google Tasks pull sync #383

Merged
barrettruth merged 1 commit from feat/google-tasks-pull-291 into main 2026-05-12 12:53:53 +00:00
Owner

Problem
Google Tasks import needed a shared Google OAuth connection, repeatable manual pull, and idempotent local task mapping without introducing periodic sync.

Solution

  • Add a shared Google OAuth connect/callback/disconnect flow with encrypted token storage and Tasks scope validation.
  • Add a Google Tasks client, mapper, and pull service that stores identity through task_external_links using the canonical google_tasks provider id.
  • Add Settings > Calendar > Google controls for connect, disconnect, pull now, last pull, and pull errors.
  • Preserve Delta-owned behavior by updating imported tasks directly, skipping unseen remote deletions, and using sync-supplied completedAt without spawning recurring follow-ups.
  • Document Google OAuth environment variables, redirect URI, scopes, and pull mapping.

Verification

  • nix develop --command pnpm vitest run tests/core/google/tasks-mapper.test.ts tests/core/google/tasks-client.test.ts tests/core/google/tasks-pull.test.ts tests/core/google/oauth.test.ts tests/core/external-links.test.ts tests/core/task.test.ts tests/api/integrations-google-pull.test.ts tests/api/integrations-google-callback.test.ts tests/lib/calendar-settings-section.test.ts --reporter=verbose
  • nix develop --command pnpm tsc --noEmit
  • nix develop --command pnpm biome check .
  • nix develop --command just ci

Linked issue
Closes #291
Related #290

Problem Google Tasks import needed a shared Google OAuth connection, repeatable manual pull, and idempotent local task mapping without introducing periodic sync. Solution - Add a shared Google OAuth connect/callback/disconnect flow with encrypted token storage and Tasks scope validation. - Add a Google Tasks client, mapper, and pull service that stores identity through task_external_links using the canonical google_tasks provider id. - Add Settings > Calendar > Google controls for connect, disconnect, pull now, last pull, and pull errors. - Preserve Delta-owned behavior by updating imported tasks directly, skipping unseen remote deletions, and using sync-supplied completedAt without spawning recurring follow-ups. - Document Google OAuth environment variables, redirect URI, scopes, and pull mapping. Verification - nix develop --command pnpm vitest run tests/core/google/tasks-mapper.test.ts tests/core/google/tasks-client.test.ts tests/core/google/tasks-pull.test.ts tests/core/google/oauth.test.ts tests/core/external-links.test.ts tests/core/task.test.ts tests/api/integrations-google-pull.test.ts tests/api/integrations-google-callback.test.ts tests/lib/calendar-settings-section.test.ts --reporter=verbose - nix develop --command pnpm tsc --noEmit - nix develop --command pnpm biome check . - nix develop --command just ci Linked issue Closes #291 Related #290
feat: add Google Tasks pull sync
All checks were successful
quality / Test (pull_request) Successful in 17s
quality / Lint (pull_request) Successful in 22s
quality / Build (pull_request) Successful in 44s
cbb38c2373
barrettruth deleted branch feat/google-tasks-pull-291 2026-05-12 12:53:53 +00:00
barrettruth referenced this pull request from a commit 2026-05-12 12:53:55 +00:00
Sign in to join this conversation.
No reviewers
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
barrettruth/delta!383
No description provided.