OneShot

All packsOffline Sync EngineSolve

sync cursor expired 410 fallback full resync

A cursor older than the compaction window can't just resume

A client that's been offline longer than the tombstone retention window holds a cursor into data the server has already compacted away -- it has to reset, not resume.

This is one of the things Offline Sync Engine already handles. Let your app keep working with no internet, then merge the changes correctly when it reconnects.

Buy for $992 of 3 clean-room builds passed · full refund if it fails on your machine

Is this you?

The server periodically compacts old tombstones to keep storage bounded, which means a client that's been disconnected long enough can hold a pull cursor pointing at data that no longer exists in the form it expects. Naively resuming from that stale cursor either serves incomplete data (silently missing everything that was compacted) or errors in a way the client has no built-in recovery path for.

Why this one is easy to get wrong

Pagination cursors are normally assumed to remain valid indefinitely -- "just resume from where you left off" is the standard mental model for any paginated API, and most systems don't compact the underlying data out from under a cursor. Building both the compaction routine and a cursor whose validity depends on it requires connecting two features (storage cleanup and sync resumption) that don't obviously interact until you specifically ask what happens to an old cursor after a compaction runs.

What you get instead

The server tracks a min_safe_cursor watermark that only ever advances, set by compactTombstones() to the highest sequence number it actually purged. A pull with a cursor older than that watermark fails explicitly with 410 cursor_expired, and the client's documented response is a full reset: clear local cells, cursor back to zero, pull everything, then re-apply its own outbox on top so queued local edits survive the reset. Cursor 0 is always legal, which is what makes the reset path safe rather than a dead end.

Source: ARCHITECTURE.md 'Pagination (decided)' and 'Deletes and tombstones (decided)' — checkable in the pack you receive

How you actually use this

You don’t install a library or wire up an SDK. Your own coding agent builds the code in your project, and you keep it — no runtime dependency on us.

  1. Step 1

    Download and unzip

    You get a folder: the docs that tell an agent what to build, a starting skeleton, and the test suite that decides when it's done.

  2. Step 2

    Open it in Claude Code or Cursor

    Point your coding agent at the folder. Nothing to install, no account with us, no API key.

  3. Step 3

    Paste one prompt

    The pack contains the exact prompt. Paste it as your first message and leave it alone — it works through the build itself, choosing a cheaper or stronger model per task.

  4. Step 4

    Run ./verify.sh

    One command. It prints a pass or fail for every check. Green means the build is done — the same script we ran to produce the receipt on this page.

Typical build: about 12 minutes of your agent working, mostly unattended. Then you integrate the working module into your app the way you would any code you’d written yourself.

Why you can believe this

2 of 3 runs passed

We ran this pack from an empty folder 3 times and published exactly what happened — every check, the model, the token cost, the wall time. Not a testimonial, and not our opinion: the same verify.sh you run yourself. Read the full receipt →

Buy for $9914-day refund if verify.sh fails →

Related problems