Jump to a problem, path or page
Jump to a problem, path or page
01 · Develop the design
Route Client requests through the Load balancer to the API service. Queue inbound deliveries for Spam workers, store immutable bodies in Object storage, and serialize metadata and change sequences in the Mailbox store. Cache reads and update the Search index asynchronously; clients use snapshot-plus-cursor recovery when retained changes expire.
Stage 1
Separate content and mailbox state
Put immutable bodies in Object storage and mutable metadata in the Mailbox store. The API service reauthorizes each body read; knowing a digest is not permission.
Stage 2
Journal old-message changes
Spam workers commit metadata, deduplication outcomes and a mailbox change sequence in the Mailbox store transaction. Flags and deletions need entries even when a message is old.
Stage 3
Pin the resync boundary
The API service pins a Mailbox store watermark for a snapshot. Retain newer changes until the client finishes its bounded resync lease; update the Search index asynchronously.
02 · Work through the method
03 · Justify the choices
What should a device cursor represent?
A committed mailbox change sequence
Flags and deletions can change old messages, so timestamp-based paging is not a complete change cursor.
Can a message header alone always identify a unique delivery?
No; use the authenticated provider delivery identity under a declared dedup scope
Headers may be absent, duplicated or attacker-controlled and are not a universal exactly-once key.
What if a device cursor predates retained changes?
Return resetRequired with a consistent snapshot path
An expired change history cannot be reconstructed by silently returning an empty page.
04 · Plan the evidence