Reliability

Read-after-write (RAW)

Tickets carry across the writer/reader split. Same-request "create then read" works without polling.

The problem this fixes

Most CMSes have a writer/reader split for scale: writes go to one process, reads to another. The split breaks read-after-write — your "create then read" sequence gets the cached pre-write snapshot.

Common workarounds: poll, retry with backoff, "wait 200ms then read", or just give up and treat the API as eventually consistent.

How StaticOwl handles it

The engine issues a write ticket on every mutation response. The SDK stores that ticket and auto-injects it as a Graph-Write-Ticket header on subsequent reads. The router routes ticket-carrying reads to the writer (or to a reader that's caught up to the ticket's seq). Cache misses fall back transparently.

What you can rely on

What this enables

Trade-off

Routing some reads to the writer adds latency for the duration of the ticket TTL (5s default). For most workloads this is invisible; for very high-read-volume scenarios you can disable RAW per-client.

Read the architecture doc →