OneShot

All packsWebhook Durability & ReplaySolve

webhook event ordering watermark snapshot vs accumulate mode

A stale event should be skipped -- unless skipping it loses money forever

An ordering watermark is correct for a snapshot event and catastrophic for an accumulating one -- refusing a late invoice payment as 'stale' means that payment is never counted, ever (D7).

This is one of the things Webhook Durability & Replay already handles. Receive webhooks without losing, duplicating or misordering them when the sender retries.

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

Is this you?

Applying the same staleness rule to every event type treats a late invoice.payment_succeeded the same way it treats a late subscription status update -- but a snapshot event that arrives late really is superseded by a newer one, while an accumulate event (a payment, a renewal) that arrives late still represents money or usage that happened and must still be counted, or it's lost forever, not just delayed.

Why this one is easy to get wrong

A single shouldApply(current, incoming) check that skips anything older than the last-seen timestamp looks like a clean, uniform way to handle out-of-order delivery -- and it is, for exactly one of the two event shapes this pack's own handlers declare. Nothing about implementing "skip stale events" as one rule surfaces that it needs to be two rules until an accumulate event is silently dropped.

What you get instead

D7 makes every handler declare a mode: snapshot events are watermark-guarded (a stale one is skipped, not lost, because the next event re-asserts the truth); accumulate events are guarded only by the effect ledger and must never be watermark-skipped. The watermark itself compares (occurredAt, authority) so a reconcile read outranks a push at the identical instant -- and one honest limit is stated plainly: Stripe's event.created has one-second resolution, so two distinct events in the same second apply last-writer-wins, the same limit saas-billing-tax's own webhook-ordering decision documents.

Source: ARCHITECTURE.md D7 — 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 40 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

3 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 $14914-day refund if verify.sh fails →

Related problems