Skip to content

fix(sidecar): resume truncated Gmail history via page token (#595) - #650

Draft
cursor[bot] wants to merge 1 commit into
mainfrom
cursor/critical-bug-investigation-ec24
Draft

fix(sidecar): resume truncated Gmail history via page token (#595)#650
cursor[bot] wants to merge 1 commit into
mainfrom
cursor/critical-bug-investigation-ec24

Conversation

@cursor

@cursor cursor Bot commented Jul 25, 2026

Copy link
Copy Markdown

Summary

  • Persist history_page_token in sidecar_state (migration 32) when a Gmail history listing hits MAX_HISTORY_PAGES and the current slice is fully worked
  • Resume the next poll from the dangling nextPageToken instead of re-fetching pages 1–3 forever
  • Clear the token when the listing completes or when a batch cap leaves unprocessed ids in the current slice

Why

listNewMessageIds caps at 3 history pages and correctly freezes the cursor when truncated: true. However, if pages 1–3 are already ingested (all deduped), every subsequent poll re-listed the same pages and never reached page 4+ — silently skipping new mail for busy mailboxes catching up after downtime.

Concrete trigger: >3 pages of Gmail history since the cursor, with the first 3 pages already stored.

Closes #595.

Test plan

  • npm test passes locally (workspace-poll, gmail-client, sidecar-state — 59 tests)
  • New regression test: deduped truncated pages save page token; next poll resumes and advances cursor

Notes for reviewer

Minimal fix scoped to the page-cap deadlock. Preserves #627 poll-lease heartbeat and RELAY_CREDS_ runtime guard (unlike earlier draft PR #635 which regressed both). Does not address the separate gateway passthrough policy re-fetch drop or sidecar post-ingest audit gap — reported only.

Open in Web View Automation 

When listNewMessageIds hits MAX_HISTORY_PAGES (3) and pages 1-3 are
already ingested, every subsequent poll re-listed the same pages and
never reached page 4+ — silently skipping new mail for busy mailboxes
catching up after downtime.

Persist history_page_token in sidecar_state (migration 32) when a
truncated listing is fully worked, and resume from that token on the
next poll. Clear the token when the listing completes or when a batch
cap leaves unprocessed ids in the current slice.

Co-authored-by: schmug <schmug@users.noreply.github.com>
@cloudflare-workers-and-pages

Copy link
Copy Markdown

Deploying with  Cloudflare Workers  Cloudflare Workers

The latest updates on your project. Learn more about integrating Git with Workers.

Status Name Latest Commit Preview URL Updated (UTC)
✅ Deployment successful!
View logs
ais-hub b6451e1 Commit Preview URL

Branch Preview URL
Jul 25 2026, 11:06 AM

@cloudflare-workers-and-pages

Copy link
Copy Markdown

Deploying with  Cloudflare Workers  Cloudflare Workers

The latest updates on your project. Learn more about integrating Git with Workers.

Status Name Latest Commit Updated (UTC)
✅ Deployment successful!
View logs
agentic-inbox b6451e1 Jul 25 2026, 11:07 AM

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.

feat(sidecar): /setup/sidecar onboarding wizard with Directory-API mailbox picker

1 participant