lesson 2 of 5 · pagination, retries, and checkpointspagination, retries, and checkpointslesson 2 of 5 · pagination, retries, and checkpointspagination, retries, and checkpointslesson 2 of 5 · pagination, retries, and checkpointspagination, retries, and checkpointslesson 2 of 5 · pagination, retries, and checkpointspagination, retries, and checkpointslesson 2 of 5 · pagination, retries, and checkpointspagination, retries, and checkpointslesson 2 of 5 · pagination, retries, and checkpointspagination, retries, and checkpointslesson 2 of 5 · pagination, retries, and checkpointspagination, retries, and checkpointslesson 2 of 5 · pagination, retries, and checkpointspagination, retries, and checkpointslesson 2 of 5 · pagination, retries, and checkpointspagination, retries, and checkpointslesson 2 of 5 · pagination, retries, and checkpointspagination, retries, and checkpointslesson 2 of 5 · pagination, retries, and checkpointspagination, retries, and checkpoints
Checkpoint
One last thing before we move on. pass this to mark the lesson done, or skip and keep moving. hop to the next when you're ready.
Build the idempotent half of resume: write ingest(start_page) that pages until empty and upserts every record into the store dict KEYED BY r["id"]. Then run ingest(1) twice — a resume that redoes work — and prove the store still has exactly 3 unique records.