Skip to content

fix(inbox): require exhaustive Gmail sweep manifests - #16

Merged
dshipper merged 2 commits into
mainfrom
fix/gmail-inbox-enumeration
Sep 11, 2026
Merged

fix(inbox): require exhaustive Gmail sweep manifests#16
dshipper merged 2 commits into
mainfrom
fix/gmail-inbox-enumeration

Conversation

@dshipper

Copy link
Copy Markdown
Collaborator

Problem

Gmail's message-search endpoint can stop paginating while still omitting Inbox mail. In the reported sweep, the Inbox label exposed 112 message IDs, while search omitted 17 messages across 10 conversations. Tend's prior source-run contract could checkpoint that incomplete search universe.

Fix

  • Require full Gmail sweeps to begin with paginated gmail_search_email_ids(query: "", label_ids: ["INBOX"]).
  • Require a checkpoint manifest mapping every authoritative message ID to its direct-read thread ID, then classify every resulting thread exactly once as read or explicitly carried forward.
  • Reject incomplete or duplicate manifests before writing snapshots, checkpoints, or completion events.
  • Add file-backed source-run payload flags so large manifests do not pass through shell interpolation.
  • Put the collection order in claim-time guidance, the Inbox recipe, and agent documentation.

Verification

  • pnpm check (219 passed, 1 opt-in local Supabase test skipped)
  • pnpm build

dshipper and others added 2 commits August 31, 2026 16:35
The binary smoke test pins the CLI help contract; update its expected
source:record-run line to the file-backed signature introduced in this branch.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
@dshipper
dshipper merged commit 32cb2d7 into main Sep 11, 2026
3 checks passed
dshipper added a commit that referenced this pull request Sep 11, 2026
Native meeting readers (Codex and Claude CLI adapters on a frozen packet), blind card comparisons with feedback preserved in native events and Compound, reading-feed engagement recording, and verified PNG image sharing bound into approval digests. Branch was updated from main twice today: lockfile taken from main (#20), actionDigest now binds both the source mailbox (#22) and image attachments, AGENT_CONTRACT row kept from #16, smoke-script contract line kept, and the #24 cleanup-conflict guard kept alongside the widened verifyApprovedAction result type. Verified: CI green (build/test/smoke, Supabase, iOS) on the updated head; local run with Bun 1.3.11 passed (417 tests).
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